auto/0000750000175000017500000000000013570241173007640 5ustar skskauto/07p/0000750000175000017500000000000013570014637010251 5ustar skskauto/07p/bin/0000750000175000017500000000000013570013207011011 5ustar skskauto/07p/bin/auto0000750000175000017500000000200613570013207011705 0ustar sksk#! /bin/sh if [ -z "$AUTO_DIR" ]; then bindir=`dirname "$0"` AUTO_DIR=`dirname "$bindir"` # don't export AUTO_DIR: Python code will use more reliable absolute path fi if test "`uname`" = "Darwin"; then if which pythonw > /dev/null; then exec pythonw "$AUTO_DIR/python/auto/interactiveBindings.py" ${1+"$@"}; fi fi if test "$OS" = "Windows_NT" && test "$MSYSCON" = "mintty.exe"; then PYTHONPATHSEP=`python -c 'import os,sys; sys.stdout.write(os.pathsep)'` if test "$PYTHONPATHSEP" = ";" && command -v > /dev/null winpty; then # winpty is needed so command-line history works AUTO_DIR2="$AUTO_DIR" unset AUTO_DIR command -v > /dev/null python && exec winpty python "$AUTO_DIR2/python/auto/interactiveBindings.py" ${1+"$@"}; exec winpty python3 "$AUTO_DIR2/python/auto/interactiveBindings.py" ${1+"$@"}; fi fi command -v > /dev/null python && exec python "$AUTO_DIR/python/auto/interactiveBindings.py" ${1+"$@"}; exec python3 "$AUTO_DIR/python/auto/interactiveBindings.py" ${1+"$@"}; auto/07p/bin/autox0000750000175000017500000000205013570013207012074 0ustar sksk#! /bin/sh if [ -z "$AUTO_DIR" ]; then bindir=`dirname "$0"` AUTO_DIR=`dirname "$bindir"` # don't export AUTO_DIR: Python code will use more reliable absolute path fi PPATH=$AUTO_DIR/python:$AUTO_DIR/python/auto if [ -z "$PYTHONPATH" ]; then PYTHONPATH="$PPATH" else PYTHONPATH="$PPATH:$PYTHONPATH" fi export PYTHONPATH if test "`uname`" = "Darwin"; then if which pythonw > /dev/null; then exec pythonw ${1+"$@"}; fi fi if test "$OS" = "Windows_NT"; then PYTHONPATHSEP=`python -c 'import os,sys; sys.stdout.write(os.pathsep)'` if command -v > /dev/null cygpath; then if test "$PYTHONPATHSEP" = ";"; then PYTHONPATH=`cygpath -m -p "$PYTHONPATH"` export PYTHONPATH fi fi if test "$MSYSCON" = "mintty.exe"; then if test "$PYTHONPATHSEP" = ";" && command -v > /dev/null winpty; then unset AUTO_DIR command -v > /dev/null python && exec winpty python ${1+"$@"}; exec winpty python3 ${1+"$@"}; fi fi fi command -v > /dev/null python && exec python ${1+"$@"}; exec python3 ${1+"$@"}; auto/07p/doc/0000750000175000017500000000000013570014545011014 5ustar skskauto/07p/doc/@tut0000750000175000017500000000015013570013207011644 0ustar sksklatex tutorial latex tutorial dvips -x 1500 -t landscape tutorial -o tutorial.ps ghostview tutorial.ps auto/07p/doc/plaut04_user_guide.tex0000640000175000017500000005264413570013207015250 0ustar sksk%========================================================================= %\chapter{User's Guide for \PLAUT} \label{app:userGuide} ``\PLAUT'' is a graphic tool for AUTO data visualization. Here we explain how to view AUTO data sets with \PLAUT. An AUTO data set contains a solution file, ``s.foo'', a bifurcation file, ``b.foo'', and a diagnostic file, ``d.foo''. Here ``foo'' denotes a user-chosen data set name. This user's guide includes the following information: \begin{enumerate} \item A description of the \PLAUT~ window system. \item A list of \PLAUT~ configuration options. \item An example of using \PLAUT. \end{enumerate} \section{Quick start} \subsection{Starting and stopping \PLAUT } \subsubsection{Starting} The starting command for \PLAUT~ is: ``plaut04''. A short Unix command is also provided as ``@pl''. In the Python CLUI, one can start \PLAUT ~by typing ``plot3()'', ``p3()'', or ``commandPlotter3D()''. This command can have no argument, one argument, or two arguments. If no argument is provided, then the system uses the AUTO default data files, fort.7, fort.8, and fort.9, as inputs. If one argument is given, it must be the name of the data set which we want to view. This data set should be in the current directory. When two arguments are given, the first is always the path to the data set, and the second is the data set name. Note that the AUTO data set name does not mean the full name of an AUTO file. It refers to the postfix of AUTO data files. For example, if we have the AUTO data files: ``s.H1'', ``b.H1'', and ``d.H1'', the AUTO data file name is ``H1''. \subsubsection{Stopping} One can exit the system by clicking the cross at the top-right corner of the window or from the ``File'' menu of the system. \begin{comment} \begin{figure}[!htb] \captionstyle{center} \centering \scalebox{.50}{\includegraphics {./include/exit.pdf}} %\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Exit the System} \label{fig:exitSys} \end{figure} \end{comment} \subsection{Changing the ``Type''} Often one will frequently change between the solution diagram and the bifurcation diagram. The ``Type'' menu helps to complete this change. This menu includes two items, ``Solution'', and ``Bifurcation''. There is a marker beside the current diagram. For example, if the current diagram is the solution diagram, but we want to change to the bifurcation diagram, we can do so by clicking ``Type $\to$ Bifurcation'' to switch to the bifurcation diagram. \begin{figure}[!htb] \begin{minipage}[b]{0.5\textwidth} \begin{center} \includegraphics {./include/typeMenu.pdf} \caption{The Type Menu} \label{fig:tpyeMenu} \end{center} \end{minipage}% %\hspace{0.0\textwidth}% \begin{minipage}[b]{0.5\textwidth} \begin{center} \includegraphics {./include/styleMenuNew.pdf} \caption{The Style Menu} \label{fig:styleMenu} \end{center} \end{minipage} \end{figure} \subsection{Changing the ``Style''} \PLAUT~ provides four ways to draw the graphics, \textit{i.e.}, using curves, tubes, points, or as a surface. One can select the style from the ``Style'' menu. The ``Style'' menu is shown in Figure \ref{fig:styleMenu}. \subsection{Coordinate axes} Figure \ref{fig:coordMenu} shows the selections of the ``Coord'' menu. One may use this menu to select to show or not to show coordinate axes, and the type of coordinate axes, in the graphics. \subsection{Options} The ``Options'' Menu provides functions to add or remove widgets from the graphics. It also allows to start/stop solution or orbit animation. The ``normalize data'' normalizes the raw data to [0,1]. ``Preference'' lets us set preferences for the GUI (see Figure \ref{fig:optionMenu}). \begin{figure}[!htb] \centering \begin{minipage}[b]{0.5\textwidth} \centering \includegraphics {./include/drawCoordMenu.pdf} \caption{The Draw-Coordinate-Axes Menu} \label{fig:coordMenu} \end{minipage}% %\hspace{0.2\textwidth}% \begin{minipage}[b]{0.5\textwidth} \centering \includegraphics {./include/optionMenu.pdf} \caption{The Options Menu} \label{fig:optionMenu} \end{minipage} \end{figure} \subsection{CR3BP animation} The ``Center'' Menu allows to animate the motion of the three bodies in different coordinate systems. We can animate the motion in a large-primary-centered inertial coordinate system, or in a small-primary-centered inertial system, or in the bary-centered inertial system. Figure \ref{fig:centerMenu} displays the layout of the ``Center'' menu. \begin{figure}[!htb] \centering \begin{minipage}[b]{0.5\textwidth} \centering \includegraphics {./include/centerMenu.pdf} \caption{The Center Menu} \label{fig:centerMenu} \end{minipage}% %\hspace{0.2\textwidth}% \begin{minipage}[b]{0.5\textwidth} \centering \includegraphics {./include/helpMenu.pdf} \caption{The Help Menu} \label{fig:helpMenu} \end{minipage} \end{figure} \subsection{Help} The ``Help'' menu provides an on-line help on how to use \PLAUT. \subsection{Picking a point in the diagram} The picking operation is useful when we want to know data corresponding to a certain point in the diagram. In order to execute a picking operation, we should follow these steps. \begin{itemize} \item Click the arrow icon to change the mouse to picking state. \item Move the mouse to the point of interest. \item Click the left button of the mouse to pick the point. \end{itemize} Once a point has been picked, a new window is popped up. In this new window, the Floquet multipliers of the point are shown in an x-y plane. Black crosses in the diagram indicate the Floquet Multipliers. The solution, and the values of the corresponding Floquet Multipliers, are given in the lower part of the window. A unit circle is drawn in the diagram. Figure \ref{fig:flq} is an example of the picking operation. From this diagram, we can see that two Floquet Multipliers are outside the unit circle, two are on the unit circle, and the other two are inside the unit circle. \begin{figure}[!htb] \centering \scalebox{.60}{\includegraphics {./include/floquet.pdf}} %\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Picking a point } \label{fig:flq} \end{figure} \subsection{Choosing the variables} \begin{figure}[!htb] \centering \scalebox{.60}{\includegraphics {./include/menubar.pdf}} %\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Menu-bar layout} \label{fig:mnbar} \end{figure} AUTO can generate large amounts of data. The CR3BP, for example, has 6 variables, \textit{i.e.}, $x,y, z, x', y', z'$, and time. One can choose to draw any combination of these variables in 2 or 3 dimensions using \PLAUT. On the list bar, we can see three {dropdown lists} with label ``X'', ``Y'', and ``Z'' (See Figure~\ref{fig:mnbar}). Each of these three lists has the exact number of choices, namely, the number of variables of the system plus one. In our case, these lists have 7 choices, which are represented by the integers 0 to 6. 0 represents time. 1 to 6 stand for $x, y, z, x', y'$, and $z'$, respectively. ``1'' is selected for ``X'', which indicates that $x$ is drawn on the X-axis. ``2'' is selected for ``Y'', which indicates that $y$ is represented on the Y-axis. ``3'' is selected for ``Z'', which indicates that $z$ is represented on the Z-axis. \begin{figure}[!htb] \centering \scalebox{.50}{\includegraphics {./include/2component.pdf}} %\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Displaying multiple components} \label{fig:twoPairs} \end{figure} We can also show multiple combinations at the same time. For example, if we want to show x-y-z and x'-y'-z' in the same diagram, we can input $1,4$ in the ``X'' \textrm{dropdown list} to select $x$ and $x'$ being drawn on the X-axis, input $2,5$ in the ``Y'' list to show $y$ and $y'$ on the Y-axis, and input $3,6$ in the ``Z'' \textrm{dropdown list} to draw $z$ and $z'$ on the Z-Axis. Note that after finishing the input in the \textrm{dropdown list} box, we must type ``ENTER'' for the input to be accepted by the system. Figure \ref{fig:twoPairs} shows the results of the above choices. The combination is flexible. For example, if X is $1$, Y is $3, 5$, and Z is $4, 5, 6$, the system will automatically reorganize them to $1-3-4$, $1-5-5$, $1-3-6$ and show the results. If X is $1, 5$, Y is $2$, and Z is $3, 4$, the system reorganizes them to $1-2-3$, $5-2-4$. Different components are drawn with different colors from blue to red. The default values can be set in the resource file. If no resource file exists, then the system will use ``1'' for X-axis, ``2'' for Y-axis, and ``3''for Z-axis for both the solution and the bifurcation diagrams. \subsection{Choosing labels} From the Label list, we can choose the label of the solution to be drawn. If ``ALL'' is chosen, all solutions are shown in the diagram. If ``NONE'' is chosen, none of the solutions is shown. ``HALF'' shows the solutions with odd labels and special solutions only. ``SPEC'' lets the system show the special solutions only. We can also show selected solutions by inputting their labels in the list box separated by commas. For example, typing 1, 10, 15, 20 will lead the system to show only the solutions with label 1, 10, 15 and 20. We can set the default value for this list in the \PLAUT~resource file. \subsection{Coloring} Many coloring methods are provided. They can be classified into three groups. The first group is coloring by variables. This group provides as many choices as the number of variables of a problem plus 1 for the time. The second group is coloring by parameters. These parameters are defined by the AUTO user. in the AUTO constants file. There are as many choices as the number of parameters defined in the AUTO constants file. The third group includes ``TYPE'', type of solution, ``PONT'', point number, ``BRAN'', the branch to which the solution belongs, and ``LABL'', label of the solution. Different coloring methods cannot be used at the same time. Figure \ref{fig:clrMethod} shows the difference between coloring by type and coloring by label. From Figure \ref{fig:clrMethod}(a), we can see that there is only one branching orbit in this family, which is shown in cyan. In Figure~\ref{fig:clrMethod}(b), the start solution is colored in blue, and the last solution is colored in red. When using time to color the diagram, 0 is set to blue, while 1 is set to red. \begin{figure}[!htb] \subfigure[Coloring by ``Type'']{ \label{fig:clrType} \begin{minipage}[b]{0.32\textwidth} \centering \includegraphics[width=5.0cm, height=5.0cm] {./include/clrTyMu0.pdf} \end{minipage}}% \subfigure[Coloring by ``Label'']{ \label{fig:clrLabel} \begin{minipage}[b]{0.32\textwidth} \centering \includegraphics[width=5.0cm, height=5.0cm]{./include/clrLBMu0.pdf} \end{minipage}}% \subfigure[Coloring by ``Time'']{ \label{fig:clrTime} \begin{minipage}[b]{0.32\textwidth} \centering \includegraphics[width=5.0cm, height=5.0cm]{./include/clrTimeMu0.pdf} \end{minipage}} \caption{Coloring} \label{fig:clrMethod} \end{figure} We can set the default value in the \PLAUT~resource file. \subsection{Number of periods to be animated} Generally only one period is animated when we animate the solution in the inertial frame. However, the SpinBox allows us to change the default value. This is a specially designed function for the CR3BP. It is useful when we animate the motion in the three bodies in the inertial frame. \subsection{Changing the line/tube thickness} The ``Line Thickness'' spinbox allows us to increase or decrease the line/tube thickness in the diagram. The \PLAUT~ resource file also provides a way to change the default values of the line/tube thickness. \subsection{Changing the animation speed} The ``Sat'' and ``Orbit'' scale bar allow us to change the animation speed. Their Maximum and Minimum value can be set in the resource file. \subsection{Changing the background picture} A user can set the background with his favorite picture. To do this, a user should copy the picture to the directory ``\$AUTO\_DIR/plaut04/widgets'', and then change the name of the file to ``background.rgb''. \section{Setting up the resource file} The \PLAUT~resource file sets default values for almost all controls of \PLAUT. %Generally when we solve a problem, we want %to put the solutions in the same directory. %For the same problem, what a user is interested in is almost the same. \PLAUT~allows us to write our own resources files and put them in the same directory as the AUTO data files. \PLAUT~first looks for the resource file in the current directory. If it cannot find a resource file there, then it will try to use the one installed in the AUTO root directory. If both these searches fail, then the internal default values will be used. In order to write a usable resource file, one should follow the following rules: \begin{enumerate} \item Comment lines start with ``\#''. Comments may take as many lines as desired. \item Between the ``variable name'' and the default value, we must use ``='' to tell the system that the left side is the ``variable name'', and the right side is its corresponding default value. \item If a ``variable'' has aggregate values, a comma ``,'' must be used between two values. \item The line type is set using 4-digit hexadecimals, starting with ``0x''. Its values can range from $0$ (invisible) to ``0xffff'' (solid). The system default is ``0xffff'' for stable solutions, and ``0x3333'' for unstable ones. The line pattern is determined by the number of $1$s and $0$s when the hexadecimal is converted to a $16$-bit binary. A ``$1$'' indicates that the drawing occurs, and ``$0$'' that it does not, on a pixel by pixel basis. For example, the pattern ``0xAAAA'', in binary is $0000100010001000$, and \PLAUT~interprets this as drawing 3 bits off, 1 bit on, 3 bits off, 1 bit on, 3 bits off, 1 bit on and finally 4 bits off. The pattern is read backward because the low order bits are used first. \item Some variables can only be set to ``Yes'' or ``No''. They cannot be assigned other values. \item No ``variable name'' should be modified. \end{enumerate} It is strongly recommended that the default resource file is used as a template when writing a custom resource file. Below is a copy of the default resource file. {\footnotesize \begin{verbatim} #version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE PATTERN DEFAULT = 1.0, 1.0, 1.0, 0xffff BP ALG = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Draw Reference Plane = No Draw Reference Sphere = No Orbit Animation = No Satellite Animation = No Draw Primaries = No Draw Libration Points = No Normalize Data = No Draw Labels = No Show Label Numbers = No Draw Background = No Draw Legend = No # Initialize the default coordinate axes: # 0 --- None, # 1 --- at origin # 2 --- at left and behind # 3 --- at left and ahead # 4 --- always at origin Coordinate Type = 3 # Draw Scale on the Aexs Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style: # 0 --- LINES, # 1 --- TUBES, # 2 --- SURFACE Graph Style = 0 # Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 4 Y Axis Bifurcation = 5 Z Axis Bifurcation = 6 #Labeled solutions: Labels = 0 # Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. #Coloring Method = -3 # For the solution diagram: Coloring Method Solution = -3 # For the bifurcation diagram: Coloring Method Bifurcation = -3 Number of Period Animated = 1 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.0, 0.0, 0.0 # Background transparency: Background Transparency = 0.0 # Set the radius of the spheres used for labels: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Label Sphere Radius = 1.0 # Disk Rotation Disk Rotation = 1.0, 0.0, 0.0, 1.570796 # Disk Position Disk Position = 0.0, 0.0, 0.0 # Disk Radius Disk Radius = 1.0 # Disk Height Disk Height = 0.001 # Disk Transparency [0, 1] Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Sphere Position Sphere Position = 0.0, 0.0, 0.0 # Sphere Radius Sphere Radius = 1.0 # Sphere Transparency [0, 1] Sphere Transparency = 0.7 # Read Sphere From File Sphere From File = No # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 large primary Color = 0.0, 1.0, 0.0 large primary tail Color = 0.0, 1.0, 1.0 small primary Color = 0.0, 0.0, 1.0 small primary tail Color = 0.5, 0.5, 0.0 # Surface color: Surface Color = 0.0, 1.0, 0.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 Large Primary Radius = 1.0 Small Primary Radius = 1.0 Libration Point Size = 1.0 # Set the initial, maximum and minimum satellite animation speed: Sat Animation Speed = 100 Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 # Set the initial, maximum and minimum orbit-change animation speed: Orbit Animation Speed = 50 Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: #3D = Yes # Choose 3D or 2D graph for the bifurcation diagram: 3DBif = Yes # Choose 3D or 2D graph for the solution diagram: 3DSol = Yes \end{verbatim} } \section{Example} In this example, we want to view a CR3BP data set. We want the diagram to show the ``$x$'' component on the X-axis, ``$y$'' component on the Y-axis, and ``$z$'' component on the Z-axis for the solution diagram. %and column 4 of the AUTO b file as the X-axis, column 5 %on the Y-axis, and column 6 on the Z-axis, for the bifurcation diagram. In the CR3BP, we use the parameters ``1 2 3 10 21 22 23'' in the AUTO calculations, and we also want to be able to use these to color the diagram, so we set the ``parameter indices''. Other preferences include \begin{itemize} \item The diagram is drawn using Tubes. \item Coordinate axes are not drawn. \item No animation. \item Reference plane, libration points, and primaries are drawn. \item All labels are shown. \item Data is not normalized. \end{itemize} The settings are the settings in the resource file are then as follows: {\footnotesize \begin{verbatim} # Initialize the default options Draw Reference Plane = Yes Orbit Animation = No Satellite Animation = No Draw Primaries = Yes Draw Libration Points = Yes Normalize Data = No Draw Background = No # Initialize the default graph type # 0 --- Solution(fort.8) 1 --- Bifurcation(fort.7) Graph Type = 0 # initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE 3--- nurbs curve graph Style = 1 # set X, Y, Z, and Label # 0 is Time for X,Y,Z. 0 is "All" for Label Solution X Axis = 1 Solution Y Axis = 2 Solution Z Axis = 3 Labels = 0 #set the parameter indices parameter ID = 1, 2, 3, 10, 15, 21, 22, 23 \end{verbatim} } Based on the above settings, the solution diagram for the CR3BP family \L{1} for $\mu=0.01215$ appears in Figure \ref{fig:AppEx1}. \begin{comment} \begin{figure}[!htb] \centering %\includegraphics[width=10cm] {./include/ex1Mu0.01215V1.pdf} %\includegraphics[width=10cm] {./include/emV4Surface.pdf} \includegraphics[width=10cm] {./include/emL1Sol.pdf} %\makebox[\textwidth]{\framebox[5cm]{\rule{0pt}{5cm}}} \caption{Example} \label{fig:AppEx1} \end{figure} \end{comment} \begin{figure}[!htb] \centering \includegraphics[width=10cm, height=10cm] {./include/emL1Sol.pdf} \caption{Example} \label{fig:AppEx1} \end{figure} auto/07p/doc/tutorial.tex0000640000175000017500000004252213570013207013401 0ustar sksk% \documentstyle[12pt,epsf,include/harvard]{report} \parindent=0cm \setlength{\oddsidemargin}{-0.5cm} \setlength{\evensidemargin}{-0.5cm} \addtolength{\textwidth}{3.5cm} \addtolength{\textheight}{3.0cm} \setlength{\topmargin}{2.0cm} \setlength{\topskip}{0cm} \setlength{\headheight}{-2.0cm} \setlength{\headsep}{0pt} \setlength{\footskip}{1.5cm} \pagestyle{plain} \parskip 4pt % \newcommand{\ds}{\displaystyle} \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} \def\norm#1{\parallel#1\parallel} \def\abs#1{\mid#1\mid} \def\eps{\epsilon} \def\R{{\rm R}} \def\Rn{{\rm R}^n} % \begin{document} \bibliographystyle{include/agsm} % \title{ \LARGE {\sc AUTO} 97 :\\ \Large CONTINUATION AND BIFURCATION SOFTWARE \\ \Large FOR ORDINARY DIFFERENTIAL EQUATIONS\\ \Large (with HomCont)\\ } \newpage \section*{ ab : A Tutorial Demo.} \vskip .25truein The equations, that model an A $\to$ B reaction, are \vskip .25truein $$ u_1 ' ~=~ -u_1 + p_1 (1-u_1) e^{u_2}, $$ \vskip .25truein $$ u_2 ' ~=~ -u_2 + p_1 p_2 ( 1-u_1) e^{u_2} - p_3 u_2. $$ \newpage \section*{ Copying the Demo Files.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc Unix}-COMMAND & ACTION \\ \hline %============================================================================== {\it cd} & go to your main directory (or other directory)\\ {\it mkdir ab} & create an empty work directory\\ {\it cd ab} & change to the work directory\\ \hline {\sc AUTO}-COMMAND & ACTION \\ \hline {\it @dm ab} & copy the demo files to the work directory\\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Files Copied for Demo {\tt ab}.} \vskip .5truein \begin{center} \begin{verbatim} % ls -l -rwxr-xr-x 1 doedel user 1754 May 31 18:18 Makefile -rwxr-xr-x 1 doedel user 1754 May 31 18:18 Makefile.sav -rwxr-xr-x 1 doedel user 2310 May 31 18:18 ab.f -rwxr-xr-x 1 doedel user 385 May 31 18:18 r.ab -rwxr-xr-x 1 doedel user 385 May 31 18:18 r.ab.1 -rwxr-xr-x 1 doedel user 385 May 31 18:18 r.ab.2 -rwxr-xr-x 1 doedel user 386 May 31 18:18 r.ab.3 -rwxr-xr-x 1 doedel user 387 May 31 18:18 r.ab.4 -rwxr-xr-x 1 doedel user 387 May 31 18:18 r.ab.5 \end{verbatim} \end{center} \newpage \section*{ The {\sc AUTO} Equations-File {\tt ab.f}} \vskip .25truein \begin{center} \begin{verbatim} SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) C ---------- ---- C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM), PAR(*), F(NDIM), ICP(*) C U1=U(1) U2=U(2) E=DEXP(U2) C F(1)=-U1 + PAR(1)*(1-U1)*E F(2)=-U2 + PAR(1)*PAR(2)*(1-U1)*E - PAR(3)*U2 C RETURN END \end{verbatim} \end{center} \newpage ~ \vskip .25truein \begin{center} \begin{verbatim} SUBROUTINE STPNT(NDIM,U,PAR) C ---------- ----- C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM), PAR(*) C PAR(1)=0. PAR(2)=14. PAR(3)=2. C U(1)=0. U(2)=0. C RETURN END \end{verbatim} \end{center} \newpage \section*{ The {\sc AUTO} Constants-File {\tt r.ab}} \vskip .5truein \begin{center} \begin{verbatim} 2 1 0 1 NDIM,IPS,IRS,ILP 1 1 NICP,(ICP(I),I=1,NICP) 50 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.05 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) \end{verbatim} \end{center} \newpage \section*{ Executing all Runs Automatically.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc Unix}-COMMAND & ACTION \\ \hline %============================================================================== {\it make} & execute all runs of demo {\tt ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \begin{center} \begin{verbatim} ab : first run : stationary solutions BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.000000E+00 0.000000E+00 0.000000E+00 0.000000E+00 1 33 LP 2 1.057390E-01 1.484391E+00 3.110230E-01 1.451441E+00 1 70 LP 3 8.893185E-02 3.288241E+00 6.889822E-01 3.215250E+00 1 90 HB 4 1.308998E-01 4.271867E+00 8.950803E-01 4.177042E+00 1 92 EP 5 1.512417E-01 4.369748E+00 9.155894E-01 4.272750E+00 Saved as *.ab ab : second run : periodic solutions BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 30 6 1.198815E-01 3.987129E+00 9.919113E-01 7.020342E+00 2.721044E+00 4 60 7 1.153033E-01 3.146307E+00 9.995775E-01 9.957649E+00 6.147449E+00 4 90 8 1.056503E-01 2.219179E+00 9.991661E-01 9.366097E+00 1.399772E+01 4 120 9 1.055071E-01 1.696847E+00 9.990869E-01 9.296297E+00 9.956218E+01 4 150 EP 10 1.055071E-01 1.603885E+00 9.997894E-01 9.281460E+00 1.867100E+03 Appended to *.ab \end{verbatim} \end{center} \newpage \begin{center} \begin{verbatim} ab : third run : a 2-parameter locus of folds BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 27 LP 11 1.353352E-01 2.060123E+00 4.996530E-01 1.998613E+00 2.499998E+00 2 100 EP 12 1.093816E-08 2.136506E+01 9.531479E-01 2.134378E+01 -3.748029E-01 Saved as *.2p ab : fourth run : the locus of folds in reverse direction BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 35 EP 11 -1.319397E-03 9.964328E-01 -3.586515E-03 9.964263E-01 -1.050391E+00 Appended to *.2p ab : fifth run : a 2-parameter locus of Hopf points BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 4 100 EP 11 8.809407E-05 1.174404E+01 9.146095E-01 1.170837E+01 9.362239E-02 Appended to *.2p \end{verbatim} \end{center} \newpage \section*{ Resetting the Directory.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc Unix}-COMMAND & ACTION \\ \hline %============================================================================== {\it make clean} & remove data-files and temporary files of demo {\tt ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Executing Selected Runs Automatically.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc Unix}-COMMAND & ACTION \\ \hline %============================================================================== {\it make first} & execute the first run of demo {\tt ab} \\ {\it make third} & execute the third run of demo {\tt ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Using {\sc AUTO}-Commands.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== {\it make clean} & reset the work directory \\ \hline %============================================================================== {\it cp r.ab.1 r.ab} & get the first constants-file \\ {\it @r ab} & compute a stationary solution branch with folds and Hopf bifurcation \\ {\it @sv ab} & save output-files as {\tt p.ab, q.ab, d.ab} \\ \hline %============================================================================== {\it cp r.ab.2 r.ab} & get the second constants-file \\ {\it @r ab} & compute a branch of periodic solutions from the Hopf point \\ {\it @ap ab} & append the output-files to {\tt p.ab, q.ab, d.ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Abbreviated {\sc AUTO}-Commands.} \vskip .50truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== {\it make clean} & reset the work directory \\ \hline %============================================================================== {\it @R ab 1} & (reads {\sc AUTO}-constants from {\tt r.ab.1}) \\ {\it @sv ab} & save output-files as {\tt p.ab, q.ab, d.ab} \\ \hline %============================================================================== {\it @R ab 2} & (reads {\sc AUTO}-constants from {\tt r.ab.2})\\ {\it @ap ab} & append the output-files to {\tt p.ab, q.ab, d.ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Changes in AUTO-Constants between the two Runs.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | r | l |} \hline Constant & Run~1 & Run~2 & Reason for Change \\ \hline %============================================================================== {\tt IPS} & 1 & 2 & To compute periodic solutions in Run~2 \\ \hline {\tt IRS} & 0 & 4 & To specify the Hopf bifurcation restart label \\ \hline {\tt NICP} & 1 & 2 & The second run has two free parameters\\ \hline {\tt ICP} & 1 &1,~11 & To use and print {\tt PAR(1)} and {\tt PAR(11)} in Run~2\\ \hline {\tt NMX} & 100 &150 & To allow more continuation steps in Run~2 \\ \hline {\tt NPR} & 100 & 30 & To print output every 30 steps in Run~2 \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Plotting the Results with {\sc PLAUT}.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc AUTO}-COMMAND & ACTION \\ \hline %============================================================================== {\it @p ab} & run {\sc PLAUT} to graph the contents of {\tt p.ab} and {\tt q.ab} \\ %============================================================================== \hline \end{tabular} \end{center} \end{table} \newpage \section*{ Using {\sc PLAUT}.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc PLAUT}-COMMAND & ACTION \\ \hline {\it d1} & choose one of the default settings\\ {\it bd0} & plot the default bifurcation diagram; $L_2$-norm versus $p_1$ \\ \hline {\it bd} & make a blow-up of current bifurcation diagram \\ {\it .08~ .14 ~.5~ 4.5} & enter diagram limits \\ \hline {\it sav} & save the current plot \\ {\it fig.1} & upon prompt, enter a new file name, e.g., {\tt fig.1} \\ \hline {\it 2d} & enter 2D mode, for plotting labeled solutions\\ {\it 6 7 10} & select labeled orbits 6, 7, and 10 in {\tt q.ab}\\ {\it d} & default orbit display; $u_1$ versus scaled time\\ \hline {\it 1 3} & select columns 1 and 3 in {\tt q.ab} \\ {\it d} & display the orbits; $u_2$ versus scaled time\\ \hline {\it 2 3} & select columns 2 and 3 in {\tt q.ab} \\ {\it d} & phase plane display; $u_2$ versus $u_1$\\ \hline {\it sav} & save the current plot \\ {\it fig.2} & upon prompt, enter a new file name \\ \hline {\it ex} & exit from 2D mode \\ {\it end} & exit from {\sc PLAUT} \\ \hline \end{tabular} \end{center} \end{table} \newpage \begin{figure}[h] \epsfysize 9.0cm \centerline{\epsffile{include/ab1.ps}} \end{figure} \newpage \begin{figure}[h] \epsfysize 9.0cm \centerline{\epsffile{include/ab2.ps}} \end{figure} \newpage \section*{ Following Folds and Hopf Bifurcations.} %============================================================================== %============================================================================== \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline {\it cp r.ab.3 r.ab} & changes (from {\tt r.ab.1}) : IRS, NICP, ICP, ISW, DSMAX \\ {\it @r ab} & compute a locus of folds \\ {\it @sv 2p} & save output-files as {\tt p.2p, q.2p, d.2p} \\ \hline %============================================================================== {\it cp r.ab.4 r.ab} & changes (from {\tt r.ab.3}) : DS (sign) \\ {\it @r ab} & compute the locus of folds in reverse direction \\ {\it @ap 2p} & append the output-files to {\tt p.2p, q.2p, d.2p} \\ \hline %============================================================================== {\it cp r.ab.5 r.ab} & changes (from {\tt r.ab.4}) : IRS \\ {\it @r ab} & compute a locus of Hopf points \\ {\it @ap 2p} & append the output-files to {\tt p.2p, q.2p, d.2p} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Running the Re-Labeling Program.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc AUTO}-COMMAND & ACTION \\ \hline {\it @lb 2p} & run the relabeling program on {\tt p.2p} and {\tt q.2p} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Some Relabeling Commands.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| c | l |} \hline RELABELING COMMAND & ACTION \\ \hline l & list the labeled solutions in {\tt q.2p} \\ r & relabel the solutions \\ l & list the new solution labeling \\ w & rewrite {\tt p.2p} and {\tt q.2p} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Plotting the 2-Parameter Diagram.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc AUTO}-COMMAND & ACTION \\ \hline {\it @p 2p} & run {\sc PLAUT} to graph the contents of {\tt p.2p} and {\tt q.2p} \\ \hline \end{tabular} \end{center} \end{table} \newpage \section*{ Using {\sc PLAUT}.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc PLAUT}-COMMAND & ACTION \\ \hline {\it d0} & set default option\\ {\it ax} & select axes \\ {\it 1 5} & select real columns 1 ($p_1$) and 5 ($p_3$) in {\tt p.2p} \\ {\it bd0} & plot the 2-parameter diagram; $p_3$ versus $p_1$ \\ {\it cl} & clear the screen \\ \hline {\it d2} & set other default option\\ {\it bd0} & plot the 2-parameter diagram; $p_3$ versus $p_1$ \\ \hline {\it bd} & make a blow-up of the current diagram \\ {\it 0 ~.15~ 0~ 2.5} & enter diagram limits \\ {\it sav} & save plot \\ {\it fig.3} & upon prompt, enter a new file name, e.g., {\tt fig.3} \\ \hline {\it end} & exit from {\sc PLAUT} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \begin{figure}[h] \epsfysize 9.0cm \centerline{\epsffile{include/ab3.ps}} \end{figure} \newpage \section*{ Converting Saved {\sc PLAUT} Files to PostScript.} \vskip .25truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc AUTO}-COMMAND & ACTION \\ \hline %============================================================================== {\it @ps fig.1} & convert file {\tt fig.1} into {\sc PostScript} file {\tt fig.1.ps} \\ {\it lpr fig.1.ps} & system dependent : print {\tt fig.1.ps} on your printer \\ \hline %============================================================================== {\it @ps fig.2} & convert file {\tt fig.2} into {\sc PostScript} file {\tt fig.2.ps} \\ {\it lpr fig.2.ps} & system dependent : print {\tt fig.2.ps} on your printer \\ \hline %============================================================================== {\it @ps fig.3} & convert file {\tt fig.3} into {\sc PostScript} file {\tt fig.3.ps} \\ {\it lpr fig.3.ps} & system dependent : print {\tt fig.3.ps} on your printer \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \newpage \section*{ Activating the GUI.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\sc AUTO}-COMMAND & ACTION \\ \hline {\it @auto} & Activate the Graphical User Interface \\ \hline \end{tabular} \end{center} \end{table} \newpage \section*{ Using the GUI.} \vskip .5truein \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline GUI-button & ACTION \\ \hline {\it Equations/Demo} & Select demo {\tt ab}, then press {\it OK} \\ \hline {\it Previous} & Push {\it Filter}, select file {\tt r.ab.1}, then press {\it OK} \\ \hline {\it Run} & This will execute Run~1 of demo {\tt ab} \\ \hline {\it Save/Save} & Save the output files as {\tt p.ab}, {\tt q.ab}, {\tt d.ab} \\ \hline {\it Previous} & Select file {\tt r.ab.2}, then press {\it OK} \\ \hline {\it Run} & This will execute Run~2 of demo {\tt ab}\\ \hline {\it Append/Append} & Append the output-files to {\tt p.ab}, {\tt q.ab}, {\tt d.ab} \\ \hline %============================================================================== \end{tabular} \end{center} \end{table} \end{document} auto/07p/doc/user_guide.tex0000640000175000017500000000426613570013207013674 0ustar sksk %\documentstyle [12pt,psfig] {report} \documentclass[12pt, openright, psfig]{article} \usepackage{graphicx} \usepackage{amsfonts} \usepackage{verbatim} \usepackage{subfigure} %\usepackage{float} \usepackage{lscape} %\usepackage{rotating} \usepackage{setspace} %\input{cuthesis.sty} %\begin{comment} \newenvironment{narrow}[2]{% % \begin{list}{}{% % \setlength{\topsep}{0pt}% \setlength{\leftmargin}{#1}% \setlength{\rightmargin}{#2}% % \setlength{\listparindent}{\parindent}% % \setlength{\itemindent}{\parindent}% % \setlength{\parsep}{\parskip}% %\item[]} {\end{list} } %\end{comment} \newcommand{\LY} {\textrm{L1}} \newcommand{\LE} {\textrm{L2}} \newcommand{\LS} {\textrm{L3}} \newcommand{\LF} {\textrm{L4}} \newcommand{\LW} {\textrm{L5}} \newcommand{\PLAUT} {\textsc{Plaut04}} \newcommand{\LIB}[1] {\textrm{L{#1}}} \newcommand{\V}[1] {\ensuremath {\textbf V{{#1}}}} \newcommand{\LYAP}[1] {\ensuremath {\textbf L{{#1}}}} \newcommand{\W}[1] {\ensuremath {\textbf W{{#1}}}} \newcommand{\HALO}[1] {\ensuremath {\textbf H{{#1}}}} \newcommand{\A}[1] {\ensuremath {\textbf A{{#1}}}} \newcommand{\PLAN}[1] {\ensuremath {\textbf P{{#1}}}} \newcommand{\LONG}[1] {\ensuremath {\textbf L{{#1}}}} \newcommand{\B}[1] {\ensuremath {\textbf B{{#1}}}} \newcommand{\D}[1] {\ensuremath {\textbf D{{#1}}}} \newcommand{\X}[1] {\ensuremath {\textbf X{{#1}}}} \newcommand{\C}[1] {\ensuremath {\textbf C{{#1}}}} \newcommand{\SHORT}[1] {\ensuremath {\textbf S{{#1}}}} \newcommand{\BP}[2] {\ensuremath {\textsl{#1} {{#2}}}} % font for the test cases items \newcommand{\TCF}[1] {\textsl{#1}} \newcommand{\ETC} {\textit{etc.}} \newcommand{\PURPOSE} {\subsubsection{Purpose}} \newcommand{\CMDFMT} {\subsubsection{Format}} \newcommand{\CMDEXP} {\subsubsection{Examples}} \newcommand{\DSCP} {\subsubsection{Description}} \newcommand{\SEEALSO} {\subsubsection{See also}} \newcommand{\ALIA} {\subsubsection{Aliases}} \begin{document} \pagenumbering{roman} % \title{How to use AUTO to compute the periodic solutions for the CR3BP} \title{\textsc{\PLAUT~User's Guide}} \author{Chenghai Zhang, Bart~E.~Oldeman, Eusebius~J.~Doedel} % \setcounter{page}{3} \date{\today} \maketitle \clearpage \input{plaut04_user_guide} \end{document} auto/07p/doc/auto.pdf0000640000175000017500000642174013570014374012476 0ustar sksk%PDF-1.5 % 2 0 obj << /Type /ObjStm /N 100 /First 807 /Length 1257 /Filter /FlateDecode >> stream xڕV]o8|8"E}E6N9'wϲLǼ%%9v}gUIqs☦9;yQH*bA£$&/ HxE$=|!IA2'Rw;dB~2THE")K "o$1 L].acEi ((SLӂb?* ,% (ȃ&OH[.j;"'FĐ/1Zć|Q*|C8L pXv\!];V{;x\/෈7A~XcE/"P3XM>s(h!P7"b9r2bQ:qkܨ;哱InhlD'M>|]~-KѻlVS>~VMxO:kLYLv'"P"ݘ_>f&<{M)VSǥ;]7t5C\zK ]; CUxir4Nmn?ɣzyj!Ah(N۝OT*.]XEݦ<;?MMFC;̭]!hfkmuј4ۮNncWeٵ3l|XUɝqJs=2m2w7P2Z7yA֚S;Si_gќNӶ)mƄW'~yM=b:7/(ߠ?> stream xڝVMs6W[e0LNfڍHmN(kwM*NL8v$E$`(V$ED6 H`B MBY1`$?$~Z.4= KCJដH%SfJfIk-i1:1 1tBP{%((aXA2ɀ[Ɩ]-a>dKBIBa]bq&" QsϠK#8V i !N \p S:rb-Q?iJ,)4"t,Tf!,;+#bxbv(F--JأDǸsb R\a > `6J3xQm)PO֦T7jnwuSeWv&ғ$;) /^LAeARڦoPO'X}W$Jw&a}߇\ۛ랞ݲ@x(;ALA̢1}u6C:d3pbp!+i@_VqCeb[SS:4ѡdi< yg흦 smUxtӴU{{a.C=mqT.jGC+]0^PՍfg؁YCPU};w>L4J>C$8stySۦ#{cC?yyԝi3Ʊ'?2ݾ܋vgrw9w8 tJ0iٟѡm>3|\ #o2ٰ|tϾ5ÐpWlǧ,Ælkj ޿apP"HZ|Zҿ۶ endstream endobj 404 0 obj << /Type /ObjStm /N 100 /First 854 /Length 1063 /Filter /FlateDecode >> stream xڕVnH+ls=3'ZȲHDd`7_6F3TWwW561M<%[JQhRʤH9UJJuBZ3VCjK:AՁ(dH ك{3beFZb:8V)eMN#瑏Sp&Qu<ۑKΓO1g@156V9O)ZCB AlXq/8X8 e>];OW8gH('m^ӲG^2=~:̀0,5:c]}<gЬx).\r'>.,cmUql'N:+碌kʈk{8Ǜ)M};rCMoK]ۜVY_Ү6 ⟗:~eCNx a+U]| 7OiQ)mex7 OI2UZb[ 9MgK}h ql7K@/{`6 endstream endobj 605 0 obj << /Type /ObjStm /N 100 /First 849 /Length 1239 /Filter /FlateDecode >> stream xڍVrF+h"a߻)$SJT#Jĕ D.%T@,c ! v7$DRB:$,GRf,!Ȣ41qbB 1p2 $LsgK\NpuxI)P-{H8N I3-Iu$sSJ23\ Nf5jG[2 pf0F2Ɛ:&d%,ÉEϴUd][rpA͡W;AB/ & 1 $Lg01f1[8X\ 0 |a\v{mNXDs66pI&g0)+0K_Y:t!`ELA_u 3-PMLXvFaX1f㢮`l`P-f!] jΜaOp'x"@#\=V)Ei gs40@|."q\&3q Te\ {V ry̖\+0GcRz.tN: KNH?>\-'>U`}WHs@zki; gXt*/##^G-KwMkj wWn]ZEO# Uߦ]n.FWG` ]Oc ]]-Ώ0t#ׇn1~ VS7W/ ݆W zNFf>t﫺r_xpx G8݌.6la8%>DU`&.tmr2-BVŚ.C`Kyxm|M7̗]oCǺMV/yW'zAsV3=4u(4s/usvVMØaP;y-} O@,xoowj؝976¨*qޚE_/K$Lf.ڄ٦4ki -JZoex.֯ϝ!D]fѺk?6X Auݤ2MoEz kSI[J!F*gժ5"_>-UE?~ t7ۇ_ ~렮|O݅/ܪhl4˷a2 ~ڤG!@/]:Aݎ sf icbY9d+6em> stream xڥMs6{sC2زt_ R; JD`v],V #)$(xb'+<#bҍKngONK$Hb yHBaWO )(p01x 14), 91%F p#wG^"8.DŽ\{$A}aNx@J$ȁB:KȡF@1Q*#vVIl s+ČI b*`pd%%^qBpy\\ycwŸ@A2.ஂ^LA4df*Ȇ xa9㡇} @xĢ< =! qC q@йT0 rgi WPPAAၡ \4` sQpǁKcXA!\@('Gl@hVAAUPP[8Q 5 P3 ELmQDpoG2|H'w{g&38xG> h^NhlΒX3]"63)[悁9^ 'dե~֚rIt6K'cdU[S+L w˟ c&VU5uBֱfu{@| u 6NVu^hQJ%E\'(<V-J,闁kR.Y#CʓVש)`ݕvlC!R]Э)"+DN Oƅ܊n+Z]u H>˷.dea], 6)IUR%^2&.'_nK;:W2ߜmf6?+vs_LaEbU틤z\?,^Z*jԺ:c]M\ \5YGW+:#v֖@ؕ|`Yxҏ_xG 3}.+MjMr#]ۊD %op cS ;븚%)ҤuGtɫd^Qͫn^ٙI$}0S\+!_io-4[ Mh^.V7R3F:8.*~fShӎb.r+p2#G UR&MufЧ3GmJƣ_u=t98kZMÌs%! endstream endobj 1007 0 obj << /Type /ObjStm /N 100 /First 959 /Length 1313 /Filter /FlateDecode >> stream xڥVMsHW-G-mRmxg*LExGo Np9h ,4d2HE~0CFL%΁gtp \#4 XpJ,Ha d*! eԄ@ fZE JS-%AghA'̪@Jh-p x'SPuA % %yN"br(D"!̩`FszT-t:ٸPuFffd"Y4+g\#@,\K 8btOR?ʂ&0QzԓII~,+HSHTL+M>HÑ$F2 # 8 qE7JʩT4"aA}Yg<vW;b<]wѧΦs>;:;wWqT a\:n7Wi/ĥւ?GGz&W:KL Lc" 42;wE;~GNVMC 6?oF=m3ݖŶ8yj]W-| [u}>nkJ:u~雁6EC"5CYb.n\|FM7XXu[}ֱT%u.5%݅kVkOPVbQ%f&p?g'̗f76~yy'1$-2E:a ^دWq/ok+*X +_ᢹ .#/Ig}/|p>_rǏj?C񻢈EezE[QFO7=ua©G6σuȏPVy_lեvi/G A;6_u`u+6؉iͩVzKoJ$_LO هlI=! JlΛ_ax\5f(?U%Lzո㽅t?D.~X- l[ob?z endstream endobj 1215 0 obj << /Length 635 /Filter /FlateDecode >> stream x]SMs0Wp"!/ZI 4mzdKz%VXV޾}ZMN=4%WMQ^ňԫ? H2U?"8b!gzZO\d5`,U@?{Wq]M#OmE{^Xie/W*` ((|IH䈚$FQC/692h\56ww{!Ne|٢VwPVю"^68kq~ /ms>_|& { Qmy_J3xef()/PD eIѝ$kᖛ !ɣsQXSZ;cXZY|G]DNޙC}dw. Ki+@=wl}'ţ X3ݹ K[Oom@dIXl=kb~elp,T_|p8y#? ߀摑ifeOtN['ʛYu`M0ko)A0IRmqܽ۹7dfN"[٢>(" endstream endobj 1256 0 obj << /Length 1290 /Filter /FlateDecode >> stream xKsFEUjGjSeprHr0ؓ$OK6e1 ~GI4@D0ci{Y,Et91l>I?,ѧB,:6ø?$BCccHČe1[&"Xy "$ Ͳ @z= g-D\ʼE@j]yY}Y*Q`K&y#_{11LJć|#U1+g{1`3)ҥjF0,,/RyC5,`!I\LB%;U߸Wg^() DAޒhzf tX-5-;DuIAwyaa ᭑R*yE9wד|[oSҸf$A Q\xY3~vNt]_6EljƶI(A3q706ӇnٕS(:_ݨiiff ny g<5oĝ]/mϲ:P:k3*w4}WȌJW |%g0Sf]mhժzB0Ӳzq;;=Fy ֵ,f:Hc\1U󕙙]vltSG5o=0S ұB3"o9 # X@)XhXt@4N= SW1yHZ(l Q }Xi8^zkmD4qҟ+>IHR.,ͨLo-)N&YbUSޞH@I*_ ) endstream endobj 1305 0 obj << /Length 1227 /Filter /FlateDecode >> stream x]sF+^-{2Vf:jܴ " h jM7t3xp{e| PR$dz kW@B@`yYY1eMԆHW?{@:B7wDh/|x]?=^G/MhܤiT_>hnjXf-$TB7EbD(ԟ0 eWg2oUnIޫ30&&,CꁑLEMQ:[WY]'uVqx%E ED%+t6*d:΅21VBf,ʝfJb7t[$i%аqNsMY8$IYMZc +Ev}SH$uܕwuIsliKh*opԟeD!Rӫ@YwiTJ4 Rs(l^p ]|mG;>z,!F5gvçC:n:MW1N< @}A6j8g'<" I=Վ@LL@%0)^I"axc:ɨ=~ =9Lf3CRwޗESMaа筫O,lNOu%YkcWD$md_[hGֹ}̜un]S[[uS!8$JvUhYUmGCncJO|ȂN,mtZI1yߥIזȵ];eX̴6uI!bP뫗5]Izjvت.fNRq$>QĈ+J8UQ(mOs%J{]-K}1R$ K"pu^)ônp(Y+T`IQL}k!/+CHMf&wy>TBOq,]_ *g endstream endobj 1353 0 obj << /Length 1249 /Filter /FlateDecode >> stream xIs8k#Tjsp@I\6%՟~$Kt讀 |1:; cx%w| \Pg4|+@n `;HlAߊq!G iX A&#mC> stream xڵ[]\ }_!I$E 01m 6>끽H{.irюus)~KҐB.9",!j %j(ln ^B$pEɡb:xUmCz'(` >*+ٶQjC=pL$4rܗA<`_Хn|n׻X4o/ Oo_\_y:7w?>\\_}6uw}ͳmcivg!}b?ow7qKlݧ۫ǃ }ݯUl^./@Ox<׿Ԙ ulbXlWln~]+ar>Qyqo^Ϸ|wsW[mx>. E|)S&LN29er)SfN2;ev)S,NYŧ7߮osy:}<_nWF']5]M*,xY|"hGՆ]߅ZxmCW+Or|؇_I|ۂ&(0%VXE'j_gXi Y)ңBs|2MaJH ػVF[Z/KYI4O eEQhh/bhq^ 8x=cB#B Uj$'B-AKhlp4/ –D'byvH6݀I+Gk["l?F>±#&&\Y[Wțni#u ԕ/ bFaGd^'yAty^WEi vht x꙳Ӧ 8&\ 5Ӎ2Vň#=pnK+4$m~RDWS(x,OQ '& ʐBw/X_F3tŲ4Oٱh6' %݋ )lZ:ذ> (G1$u}r3eӨ1T/Ӆ#Y!6_X - 2#] e L,o9[S OQ'(m”5Y@O[,2@s*@l$9}cD,xVlXyΦ\5P!ꇅ4Bx zQ}EEEEEE)zQJ:eu)SVN9攛SnN9攛SnN9攻SN;SN;SGV_?.97pZV] HXڒG>ւ"9\l`:SuغRY4>L> ಖR^߫ wQoc!~- '+put<.Ԑ7LWUOa 06ؒ&)TSq|9&Ȏ NO=*pYB#@` a?>@S')/u5Oas9AJd0R`D7}H GR[nj>lI5&kG$/dweXz p -i' vX, -$ n >#H OҺ: |ВtB!h1TT1Kn 8ft `a nF \")^#RpL@Rb!o0J*1[ vH@(ZkцG`9)ܱA2k4k0֤砙@p{qsLH2ò[qh0wsL2ty"/~,DGUc/gӄ<>ZmB^;̈́4Q:bfZǢlZk,}BGeJN$ +gNJ3p0y61z5{x&?l[b⳱{} 31~{8ރM^7^78<Ə E)g\qrbGklG< Z'fє8,Lpޘ._hL<@3-0bvjS p֯T>lrsIqeʻAw8hFq#7,8uy8UqI>edY7v"`5hhȫl0bcxA34ӊ6]= eMݒUh>͝p* endstream endobj 1403 0 obj << /Length 1032 /Filter /FlateDecode >> stream xOO0|CB>N*ӶC a6UO?;.Ԧ1-EtBP_^?~E]At; H8pDav_XpB}zyS&U0h,Ļ~@+\OE u|i :4~i%td}ߛ}3tRۡk -Nڡ]Egk$gWֲĜx>GO<22'|;,ө!7e~lӂ4/2Q:Gkm ʊ)a7dI:Iܝk{ct8^؊#,ku8^tҷ| M՜7Gϥj;E<֎Y9SnG?aSk>j}|`kj|gH_]]C~ z`vlwA;6[ϓ,:8t4>8PMXaZBч;뼐xawcM%I;an7&C=|7t/ . XҨ:-d,=ઞL'E^V!b")n>JfzlO<ɧwz7ݼU#> stream xK{Ft'(stM.1z Im_3GƮ%!|||Mtuч;!\)wXi*zofiy >k6$ӄ#B\6cGU +Hd *Jƈ޵_#" n Pv>rioS]R֤UMYzu(qiUlT[UuuMj&pni ].OTTI>ϝ8lғt>-@22\ceif!z>'װՅͷufNRM)-w8Ĉ7֢a5+GꣾfQ]6Kv1!VI}R['g4$KfOԝ'Uu91ڬH\m qO!|uyW]ffw8D|uu}iqg󸙅) 7[7_mLu%b/iXcZgכYPdg6W'K1Yy0칝5e5Exp9C5U/ٟ?#8"#Ovlv=jGmzS\e%d2{<5F"6]H&>"p&($O/Do_mا$26knԟ[Ǖ𠭫k~]'z*>I{/^wJ6 H(A".k+X3(> stream xڵ[]\ }_E#QDF$-`$yHq`7@{8m`9;W+SԭZ*6BM4@Вy QIBOjy5>h;H*׊5 _ \jژrZVM@_G"4Q{8.K52Y1%<\Iu<Ժzjn@%,nWې4u= J2_\9Yc|JR_U:G\> jTe;O2O?D<pCtpEWsn@x>jgڦ9B=-䷨S!`θd8lrrg7o|8 {Ϳ~O_i~ۇx|W?t/7OrMX%OuW=gqٳt:c:K\)\"[kޮDv{|5f 'Sc%Dm+I xxGFܪ]sg2Za!n"ю D B L-*3 >A~=럞ԵԶ">Tt'fb| F-Bv%`?T{8E'ÂPcPg2`%U^bcrVbr /ʿ*Bl(x3z`le0>O0,#&I[=X#Ƣ+ v1 8fKd6XpfH9 (UkK\n ޲_Օ_Xsħu2l[Ktno޷;UdtͼiV eu{Wr+fx5Z[k7; kNѴӢH ZZJKtxGӪO"$ixk}'B?6zۊ aY(I"ԛ~șyj7%[dި]%:ZCrâ᳂*W7kl;X(_REvpne7tipayu c|"6iTJ閶 *\R4o,BGTgP_bmK%3.ѴAm|2?DgC`(rdT$G"'KtR?_R%6C >&v,qۥnrJ)rbHUSu-Q+j.R#q/³6N͝X7 l C!h> 5 !r 5k S S S S S S S S S S @nr -[ @ń̼́́́oܰp}37 Xlkfmvrm36;X֮ىrv^HsEM3*f,7lG徙H}hT-lKunfgof[үs;g#cU)fEXٷ\xD,U?w{~ !RʋU1u`oN(pOSu!A?u*5T"śTX oR]CM endstream endobj 1495 0 obj << /Length 1820 /Filter /FlateDecode >> stream xZK6WY ɒaI_ 1-G&3z27+6{ty4{=ư7[h0 l:[}s!xB%/NK5q̒y+SśES5j *DxsQy.R~ { ЀU\1J"}[Mo'i^BhQa\"JY*}$.yi%ȗ_/5p װ՚<0wNNi=%A*DZIfoqmZfvqI[U x7neKVz?Pn|C^#eSu@i\y%BwՊ}Y~yHX6] hz& :P+TmA `qq2"nHmD@Zm@]MMU,yijc!~zp|<宵yу$ }&[X^d7l^ƶ[xH: Prݍbeާzs/´> stream x]s6+|pE9uMҘd;1JCd߯ӐF` =z+H{#C(1@>d%$]Ou rΣ#9.rԬ+z,"մJkx(/j % O#$W+Eg,yR$ҹ?u0J88I+d;.\K'QXEe;>KatBnp54u7$h LA)pw,_31- l yj%C-nW_iQ{4(&.okJ䔱yJee;s[Y3D_Z$W;&0)CS:,sU,L12q䰉k [ O7X>S]mB\5^1zB})Cqj#%k#/U&2g^d #E]@ũ >:X@+t啑i[jeqܺPtf_4u᳇ `3*ߴ3Xߣ[5D٪Bd^kf5 X"6 jD)(͔8OZilY2x| M`l7`akP>kILks~Nړ4Azgι >lm!>َ{|^7;>1'0=yb֫R)Դ#.㙪T\zx2cJ53w]LonKs}>I㺿o:R> stream xڵ[M1p*%@uH" ˋĈkH+y3\Yr\M@<&عr Y%H+PRB- =xʋ3G#ү0¥j&Rqq/Z'2ArWL 32,{9 j9LǷٰo,<ʸFByh6Z%C =L!+5 nc{ %|͑s;4[Q!X9\sɔ8N½8&!yOWֆP-rGJ9wLV+\!u׌r\WEr%QGj<2G2#W3f8s6#mKW聀?Hr)4s +wMZz\)5 Ș]^Փ'W::}?߾L4N>ˌ77wehn=6|k͸I8}N}qNO?Ĝcc+;H "5XɊGZ6im. F`"x׿]Y_PPjkj/|<h*:Q,lX(Ũ"oP8,Wܘr< Os$Gy0+"k@Ce!@,Gx;H-dx48ʊH;tHX)*mEm$+Uט:mEn۲&GI +dwx5t)CD AxU(r-"r)-QC-:&o+"vrO$EaU#YP E-ÂzIEXH' .Lj! K& `~ExI~ԑؑ@ h/M=zd =nV4Ў!XZ,mxȐ٢"mﲔяtw3P 7~5/|v{s7PDO>DO>}"աo:W E=$d8ƌsi<`ҡw Rd/L`s2Gj>r L__=7 xEd=/Ć BEHIu$ix](@^|mM1e+6ʶ RuNS 6DZ<yd' _70;U+V7`=CTUˊn2]@LXX9ޜ NCTWD6*KoMvoKI=wN-vBݷ@Cwig55E:jNץ) .,e \_ɺ4fkgAJp}nmdGo-.4,* h8ѡfǂ X4;/U LREY)G$9!>xXE{Y$=x< d5˦q|dXLCgq|6 \H;+sg vypwu4| :궚9Czږ?A^eejmS##C,xʭuIdGC&X1pȆ^  jGI5"r|옡"468Iȩ~fbR"Қg?jQjl֜1+Pb_EmֲX@ &6l ]˗7~ZfB-ẅ́˛ >> ~)e@@A6}&ry"牜'ry"牜'ry"D,Y&Ld2e"DY'Nd:u"C8B`뮷{eCI+ Oj\0/;B`_LJDi1A@GF@LmPf1h'/7TZ@/ ; Q~$BckS^xnI汔Sx+"WqrZxZzL_85> 7}8C><wSyoDц=:s~W܇芈r52'Պ(Ƨ!xs!'t6+Jaf+Z 8`choبǶ.- : ]"lhL9l%W?nx:\ 'l6 ϝ\G\'t6 ΢t*$YYa QG=""C<a,"bVHaKԶ=0qF_t3ǟDo m\e7w$ox@q8VPHc7PYN@VDxA, 2N:l~_><O*Ƚ)lD endstream endobj 1562 0 obj << /Length 920 /Filter /FlateDecode >> stream xXKs6W@xDoII'V{i{IĄ"]J#j-ؓx|Hh~boOY0FRD~[ώBяOQSoG4U$/(SlXA#?#0Ҋ,v9ė P ulARp:wyzBtpӴd[!;ꀽtpo[\rRu9egmB͐FќHsOp}fv{sPd滚~}pI8^*?CB盀wKL|\<~BF2 ބ-! `]tv*nV.rrkia?9Rn+n0DS!gDI MTQjX! Pnb95TwXx1ΔZ;x._dbV'f|iy!JU_0Bs !K8;9jaJ摒|QϜ)w=97`jvȍ;B=[41 k-f5 6ۨ'yCE[׽GS|s=+o'DB;-8uUWkXg. x!T=.<9jz~70Q<"ZtMWl)yf=-9!1E Мc b*楌M_ endstream endobj 1570 0 obj << /Length 2311 /Filter /FlateDecode >> stream xڕXKs8W䢪Gd{f (S$R.׷_I@t7@ ެ^~aI]6Ef~XUިR/z]__,$\\EKj-4QxT)}+c-(^Q)'Խ*qX.=5Wyik/[0fp儳wѻ\b:$Uܫ Ӳj^xaJ{\cu(]|^ns /xgJg`,XEuÌ2<1 HIt&3u+e.4kgqۯA/ <~CvJmIۏf\v-rtb9Y(p\Eمr[CU`wt~Jwq[g`t߬iB{zC^p2gbZ6^h4TtO@f]BXL9fnSTz̦'tq2 $Qh;y (xs!F{ԼV)eMmkLGwZp~FQB6 &X`~Ȗb9L~Gw0%-=-;-lR?qmix=a4EMزu{2uOB44>?Vp.)N ޢX@Ô) {Qjz٦k=1 W7(GR9O< b .qu_qݶ!b"F0_[[k{\;hI5V)xM>kuX%DR^yV! h,-(qW]q|ذ H&pxB֟MYH)0ZNG~#0ΰlwY;h2>f»M,e *әFCJ`> `(5)~;ݳCćaEhK@ cli; U,|h2|^2ŧ|Du8YO||Pվ6e31r%Y ,l4CM`j.Ai9@I9 40yӨc3b^M %l!Fꠡ:F@1<i I!xJa+* t35J?o$ zz_á*e endstream endobj 1576 0 obj << /Length 1864 /Filter /FlateDecode >> stream xڭXIFϯr*Km m˜U؜?Ǝ^ʜ1o۽ͩeYefI Fsm>5iis{UaM;:H,:˽315w&t>aikCT1/SHqak5պO sTEƚ~vEwr6 @gkU(YudU]ȾL?pPP-vA{M(KL!'&\m^byn q~,ڮ)^]QWص$CT6gI!3m}n^*kr9Й,W (NRه ËaH7ƿ9]K&v^ҽf]۵3-L,OBuu,0r˚:qfL-¸ܺ2`ͬ Q`[lgzUG0sɻ +ƴ8f/"aO%WugS ɥ, CP! Uu [`ʬ8] m`CkY:՜_ 2&ɑRD3$w,s6 |d_@,C@Fq P% cAiز{mτf}3/&%he6ĩJ ."+%7նAB 붒+I¼$4G? yu }$cQfG1j,^ƻ(D=OVP~j(p}BÞd2й-5 B/akQ:bH֘i tG!m^r '*aB%ωJ(fh@ E(Fl2Itz8!]&|7.&'GxUxe%ʺGJe> stream xڽYK8ϯh, 1-$jN ыd`ܘ6{P˴-Dztozءӓ=dH֋U_~QwBԤn)ur3Δwݿ7vwk1%q]WUYJa!;LpXp&匯\KޗMWrs9˴~H0Vnv:DDc*Ku\f ۸7qz^,c9nҲy̙LqinJ(/<9mh3qMqzXѱݕ9+ Q$KIĸ [϶u[b1xnS*;7dw4鏹4`ȯw}ul d\*dJL?4} %=FNؔVBI>3&Ҥ,- 7Fw -N9}J]ڢoS2~Nk%li;iiuw٢EbAꦷ8+K ;.tB &% ,BydvfFޢ9 ](^N> %ȯ7oY0O7h!. SJǕI@@o  ӾR̠:ed"DK0jm7T*XZN?Chc ,1TRK8?Mmh Bbہ2ٯ؀qB(̈́ $*g;`q2Yfl@G&&e2K:ª>X"zhC~ ߦ~M2$t/Ck_xUOR&ڛYO 8K#>RAk3v4}v4 K:e.,qavWBٔ@a`TVeB]і瞶?^\^P`\\U%7Y 9˄c 9 s?E&e,1ބtk<ysB;O*Pf\g56lcW7xN,.R XIw+ :NO nhL7J ߁XI+-Q@coHg>8;DC¸PCUAJx3~KM,GcV|AN0(|sA&,+uwlʏ`r,<[\&ʮ\3 3+=%y-aJD/lz K!CeϋIXsJZfak@ATMqA95?=!7ArH$ZcC5<&4i<ODm"l:"A[XQ856@./$r 5;]I-ZMuHΎkl2*mƵ$O1@µS6լ~ vhW 䍓)g(zdߞ[! 9TPU^,pUO @46ZcsκE:78N{V52"a-_lfg^,Rlbӆc[TP~cD:v>#RWܗ^96`{yG fH1չa2֋t u3q'F.#wOqKCB?O7Mf9<ׯL+Tcq$&EMXԆ7!.L.>ȍ| [߿a3vH܌ݲDj=VY9cRx"w )N|qR8ߩRmS=Qq nS$}`h9s[Y3QƖTC6/^}CmO{,]ߖye1nE(l*S\!G*lH/*jdfKaspm!x6C48{w)ݏ1JAzۇ{t#;@ \afAD2ck[{y=/ߕ7@|lH  OGȱ)Z^{mYӯMѵ2"o-˳PH2q@ U 9~;i-*`_}Nb /6[I T}ٲ5nYCm.w{" _zy ?! lFz/>ŁAMQ_/3 1LJ# "o_[\5=UlfzGH,pg@X8bq> stream xڝYY۸~SB,A?eǮwg\l(H=3F7IIx-J@ g7Q}q.T8Y$/|.nENx!i2n[@D~Xoz ۵qo (6UzMEkۦA֯D-s2_rk92齿2bb{h*]aRMo?qP{K9 r{Wf>pȗOn,oZi;y]m9,¼v?"6-7\UY}UHTSJ)8ŗz-|^Ʊ*T6G|,>gǼw8!~Gd[ꖇ[>nu] Vp[`=b>>0U~0Y< LX~sŋBዐ:ayv{ݢ tD{n,6_B:ӓEs8Yrr#oV`">ZZ$>.U={t=d`k0S4f;;əMXcC@P82z<A(FH? 12UhYi&cFG;'?!T{;Pvmm׃--OŅ8έk8(}]zyoyJxr,x-XExXնötCdt?ῦOqD!E}wQ_JG9\ #b#XA;ag6G\F#-/<%0P:=\pb%4 p{0C Z,e!rA1J,R9sJ!/`8 6pyD3@)9RpA Aҕ}Ul]<;ql6Rx."+VOi@ӹi{J:{4r;'$sϔF籛 e8lRo:)JpcXc]]Q&ʅ ϞxH ?DTs) T0]W>%( 9DF)bi2= Ŧ' Pݺ_QPFvx>OR:0*siƃKYj:^wna4(QeH.10<僢P3ar`Ff|24J}*S&Ɉ6WcqQ鼞@{מ"O?CМFA+jn"sL(ln" u\ip$ B%EXoH|EoG@>Lb 2X=B*?T8qp;>cg6FV}/*` K} f#~]_G4~_}+S; c4;`0>lIHfRaGK.C0 y7uQM}炡 +A@3?f}(_̖L{] ؆Om>Pz˶|sI>? ЀHK9r@»W]P{ \(2v ZE~J߻,_^xK#[G3c̻ȹ: 9Ġ1@ ­#me"UQ!m e||u3D 6aߗx::r {Ԉs԰[{^;cFfSbXFh+P +t/ؤ.A Q'w)Ż!.l!Ǫ٬'$T?6: D:43}`{BYRwR$ק׭YY$^>ֳa( j6XCۼ_3y+PKW?{r3 v~6K@X}?|C1'rJ+H#/ɂ,T,,R PbNP7!On]%KCS>?>: X*Y!jb?I:"f/?2֘8A_cBAӔ\{66 endstream endobj 1608 0 obj << /Length 2454 /Filter /FlateDecode >> stream xYY6~_pS)}_6{ƀ8k[iuuL뷊E[muqOQ$u|UE=z,/nnR@ƋX,bq-~*[ncCyuQKެj ]Oq|m_gB*h S")"\Dn[0Y$yī2vEf=0ar?70b>s; ɴasX f:J!8S"x~ǿ U$w]HH&u<h 6E,;TjP8IL/d^(]ޔs[r֊%zsDq&Heݙ۳T,>P$~Iu>-E\n%nP8SiG6ѥ%]Mx⪎܌ZVMu>r#z%uѽXqZ?u3q8:'HtBdW,۔,20ޒ b}ūGL$zw3'kX)d-_/o~>d4 |Sm>O_7) OY#A0NFzpYW6 ~6~Qo?+!|c _|2 W] 8%8.+Jz@m;=hj^֍^.Q8^[ 4`7j3аytPT'P-X 7[wMMftGspx&f 8\Ի׎;>X VRx{oY 5&7uڼ7 #o|.ɀLVD8Ѹ"{k#6.w;&H -5'",ip|#괢n&oHt5b}ԡ7`8p W @CCsnr``Ns /Y$Pر]{w zV7w|4Oh/#SQ<Ĕ>*wY@4A5d([E0ȩ~|{õwjr.XgKA RC+\"ntnAi_to]^RVPo<5h۷aWVxBӚq.f:ǀFC4*UR/fy=Krﻄذ9~P,ZݞT曌DWf?Yiqcj?|,&ZDtvgۮ,c(ʕ}W@Ε֯jZHN߲FS1 i*X8b7ˇ e--FWEЄܱk;墪& C4Dw{nIXBNG߾uC2b<Τ7Sp_[Xqwt;l =h;guQ2CmO/x\JKmih*l2;fAl|\G&AݣC,Jb%6]ɽ֪F`b(3$Jb(֎bcT/ ڦpZ9BV﫢NvcH>y G#CS'J3@n^GP.]_j(4 (Q61.9'oAX+W>[P7:a>S{o7u'd8 LMޔE89c%tٓV9l W5^?n>هb Aq b^k-@"4steq~}P|tO s ?li]B$mkփ |q "rY2f"Gp7wye}xQ~V-Nߪۉk 8k>Qx1b_SPpLk,-X endstream endobj 1620 0 obj << /Length 2705 /Filter /FlateDecode >> stream xڝYI6Бzc p=g;K)RbuOEf;j ed,8UUETK!Mݭ~ )FJ2l]7N`]dpn׿4+)E$npQJTӞa1A}^+֛86A:舼˞O6:n՞:ϑDC ؖ}[Pͯ7 - NMǙk~ڀX8%,cD$)twDIp62@6UX?uܪ-~-wqot,L^&8^2p''cɩ&۾Jil-7wyun*vD욼{@:"Qwm^5`yDe I'BI=PTrĢU(̷4,l: `cBy,*tzɂom5qPXc Nj%iݒ%Iٷ]"7ʂێ `.Kk2;[˧uhiD`*J 'cA#IYb6I/aK)7Mg[F`ϖL9oΠ"W\=`*QȢU"MxjCefuvU$Un~sDiPq{ '8؇;Jw}umyw*뮴wODhtg>t? D|]e⮷"N6(`?I@61 F?i04T)i)Ӂ˝--rrPg]nPE9:tD@LH!~ߑS/=}#-U-=ki[C^(o`- 8r6WEby umG{qIR;RcW}<&]RmSWG b)?/aLW.%rk,Fr a0 x4\H*x_هMi?Mx'3V -$+bHR¾`%!@|bFUWK7PDMDw= 7E{"YU-g 5]r]:2'TSĆ!#(00 2v b! 2i]KfFH ǺsPr3 :OoHa ^ܩfQچ}{ɞ> Jpű $ՈڰgW;Eaٶ/wCqc4c@>Xʤ943R|j9'uPRCxdž)/j[9GWMsM /6i,'%lK'A @L|G]l#<]!==ܿ0ifW7%PqNMX,iI@L%0 28>TԀe/E {Em;jj0#un>~YVBd&* 5"1449 >jSbdF(H8,QHEG0kXf!L]ϡ"fa4B;*> eMLn΁mE h8fHڰNZ82ɠ -x#vqh݀h1ռ$=06sζx!ld0.v{HOdBIFiYNYPg< p4C hhqsSei&rIdgrn!FTe_qlӑ0*;(DHQŻCX[Ξ-tZʔ>֨YHG"]'a %kkQK!'"&Uxjn7E9'/Óy,S8Bm˃BCC~<P8.Y~/ۮ}FjM㘻p]gU34_H_#/]-sq""$cP2|P^ ,L9#䘅 4;4NZ 6/q| S4b1A`#]tPP>K.<'KotQ'cDx \x!sv~yNG; a_bWj@*8c"wI IpvP[?4  Fy_M˰t8zg<PKDe W&@|i ͜OMi͇ sB2Ut\(/?!̏,/Nu"&!۽t:ȒqgW!8$30lt`)wrqdDZX}YĨwT&AcDwZS?p1Zbad_|Y iWk!%t||cTǚ puGo8t<:ͷ8?GP }іi*9p@[xL}:F,dڡ ۃA-O"N҅_c]`@{olݷǢٺ`1@0gcb驢,РA!\ v endstream endobj 1627 0 obj << /Length 3733 /Filter /FlateDecode >> stream xڭZYs~ׯ؇<-,LSE[#Qq%@,X58VXQe sѓ*Y)a诮8p#X*ѫ7zg:;`ww<񻧂i5ĝ5E[SlfH@@9AwCD+n^=L#N:]: LVL+<7l .5F3iaOiU댼i[hI C^}O(򧮩5B!%:. |E*Gϝ 4rSh6|v,Qnp/a[tQ= "?:S= o9-qM[ܢb7% z`U ^!Dn.@ǝg&0+5GSXO:[v0OS>jmSzAf` pa-^7E?_|V'vD!dGz+aBk6teрa6i8"qi 0M鷆揞b-;E/_ KX!*W{rdEAZo TB@I7xqg/13

`ƀ>\: $RA G:<,EQrj N=L]b-^1/|0iUӚ(OjBX8[i,.dH :`,РT5>44W5KpqƊ$c\E'e $I^1 :b; v^dmOEsDt6,EQfkE4% .D5s(p|_RG_ڂU2}xjj:f¬a*&q9 4X٥vicvMx=2 SFڑX4u5|cXp\?k_s߼a JALSOk"=s,^]_+pimv P0gO-*1l=VlAJ.%*!H& kjďP4:w&;K^SO n>څ7AÃY?̊VuT֋m'|>%C] 4Tみ9EŊ+@5p=@!c/hUR-T(7~1 CWGӠ REt Y:q)epli {>|у 5!oohx૮8KDu |#op2? YU~ avu("=~jO~Tc_b %6h ϕ^τ J01t.,~:!_\V4x@O4x)~͓D?H%  p: #|5~. Wprc#-],7MEZpt=,E.ܷB_ endstream endobj 1632 0 obj << /Length 1754 /Filter /FlateDecode >> stream xڭXKoFW.$Q5nT 9*bJR;$Ej ';= f}us',V_7 2B(X'+?2r;лxG[Iyty]&>t)t4y%w[zG'yZ S/ 2JH&&]>r8 a@އiZn-ui@FY7qZ<њjdߺzs&l]sO9 1$eL:YuU%:ݗcaͷ~|G՗{Vy5x3M]}MZf"hA_Ƥ]IVfڴ]qjh> "9dLl&ОE h8˝Tr%<*u^Iҙp DlCZe<A0B!unloRI녒"->} Ywz?~z3TT@"+ \}LH9w%\ƣhT OySW.`̀hI'PJxwBCqA !RkydWnڷ4iWHPQM9ڽMS:D{ێԚz2X>an:BBHB03+ϙ | 7: 2uĸ)^`[ pYCq>2Aٺ#!H*&YZ$+u<<9)9M v^! 7CG c:v2lG7Oyw "ݒ~IH0`RS?%{i>ɥ5lLxL< .֐s"p$tGq.4 ;㨠%N d?b&:31*a Ќ‡9S^5I0RøbHkTHí@KSpe"!k LE0 bp^Ϣh 6Կj%5 &&vI-h(/<Ì Ȉ)]}"M+`9bü4T@YR1kSF0A]WPЉߓ,hշ,`PD0Uz`?},Rrm#:_ endstream endobj 1637 0 obj << /Length 1694 /Filter /FlateDecode >> stream xXKs6WԡJdzHd&==PmC*v_H:iO@`woww?tFBjJar%yY [z"]%rni7wE~kٺ([zTFp D+i\U5K+pJA3]2|2l$iYTEoq.fuE vYC[o;&_7YivyՆ눩TT bZl1AB-T1rHɇMP>FT =2m0 g:LƥE'ŽJS g4BF&c2GMN}}%L;YTÔ0;rH0թC`]L&I^Mj!E9a8@ƣ nm& ?Z)m`Ϣ~px5滺۠ s#VuV.sSAZ(C| 7pɳ.:ovI9] {v?jc\^8r?|y_khCPBA Mo 2u(N ۼYC8>ơI»[h\UPKÒeROs5zHar@a6M;}.(|U`G$9x@b}੘$/Kg X 'Z>a;Ks<9*JvQo*f|S ;r`i|qMO 3\ \/Р~iSWSJ1y?u]cqc1kF AjcC OcPsP`:Zt%t>jjz՟5 endstream endobj 1542 0 obj << /Type /ObjStm /N 100 /First 991 /Length 2695 /Filter /FlateDecode >> stream x[[o7~cPC 4[ H~Y[qJFeH32(DV.Zd7IB8ũ"lyU1I+=+6<[F_΁'eSByL s69\HFQJ`K^f VdDpR ^e/TP$ŊeABɔL FDYe;+#'/#l$e Fނ>a If|o䲎9*Lɨ!ɮ關 < VR6'xT{PIb`;W'KXv-)̠d,H?PlƔ^IE[5*BY ?IQ`# s$#-ͫ$ UAfo.JIŻAe3(T&SނP !lC[V2X'r "$V5f) qg0Ʌvȡ^z dVJOcB2Bee"FeAbeȲ TnkUfM{R}h?&'իf~Y?1߫_ן,IS$-,uj4VLꃪ~n>6z[`ङigu^ $>Ơe0ERБVm[ϵsáX,M hՔpijf2Pd zh5=B/,>n 8au`cCUިO\2&?Jx!3f֖Yߊva5g'qڎMyݼXU޼UVo>^cz.Dᝌ.^,k}9j~S;නw9FCKs\v,]%0<%.[#BGpG;+":9t3nC73[8VD9^R8ЕY0fq-v: ?C1C, !5 &a " $xN{ÿ 5d-q7hH[$J(Ak4ix]!(I '2P<~ ûڔK#,ɦ'.(.CÒo3Ľ@uF>?c2>j> ~hI9b'V '4ó@@ ~A_@P)eIpaCV%?8 !l `0R<"i'Buf.$ ݻnbhiX~c;*;ґ ~2n)&-z81?q1ȸ+Asx/ײ--I0uY]겺euI˶=HejO$܀d \A<;\bGh~_wm{o =nfc|{2Q5kS7Z) !#,hSgw7_m("Ft3joM;\p\Z> !)9ž&5&]5mQD[g4KNcpBE_R;%]Y&uU&P9r(a_mRE%@'KդxZOr6s2e"Dʉ)~xox5]Iy;;UlwT+2 |ڭ3< aǙ]j=&6&U}URW툕'sU u->(E//꥖NRY ў5[R_Mf^8tKHJp1k9#<+%=5b^nQ!C#`v{=\鹜,?hMPQ}$-w0Ns2ISճj:jE[Lfeu{sRӓypx9luGX]77_Z_]L JW:{Ohf.Ad-v19fXo3D=dnnIxLf2t?6rm9!urZ DBp\n*Xlv\ˁt~2ˆU县u_]{\t;,e.BjX(g%řLz8&\մ=\yGݻN&BFa&r+x2lR>[-UZZp/!P]k 6vbfǞRζ\^ܭe8#<ㆨ 1;凼oaRcILGОx/D_OdR8rccIɑ8,xG踒Guv;Jߔj,F(׌#7m-+Ǣ֐XAe$ɍ]wtE9EA֊Wr7$Or^ ܾr7Z\( endstream endobj 1649 0 obj << /Length 1886 /Filter /FlateDecode >> stream xڽXY4~_G 5/@QT̈ueӭęe)^ן՗wE٦o>Qcټ )ܖtƫRi4xESkC|;x!FrW]>0$<+ +ʎ_M 08W4VIg,Sٙ#%HT,wX8y餻s %,X<̶bl1dc9EL$#_ /Ա/K&%ىO`o2l;g814ʈH8XÐ]A.CƩV] ߝidN] .,03{+Wp~'e^zY\Y\o,Dý `DBşcbn%l//BNfrr 9ũМv%56zߺp[1tn oM55l+o`*G3Two Ube3Dd_sCUk{RQN֚mG _ϓk^}C+Σ=zX_V<xmIJ rW̓u:}Q)W-q^ L[⳴VH lL2雰Ц֡cTbb䎻pz>¶%:}f@:aXn~cTUxNlg`K}Kp  QWX ;8bˇNڱѩN:&ZςDi6GģEw֓7ldΑ#,wbgIpW  endstream endobj 1663 0 obj << /Length 2573 /Filter /FlateDecode >> stream xYKsܸWiS`\9d-6ɦv+QN=@ChĄC!YӍ8IWhkW߾z#+Lnn6Eβ<`BjsrP%O.,xbn+G"no-u5I:CB?_{hH3*Wxҍfv JR@xk2߽-m8tK?q wѮ;Iv;{zZ}TTE\ȠR9tDSTHf47uK=  ԌK8]v[ ݺ@DR=ôa).h@。xGӛD~xM^qZmw]'4ؚRv6$Ee2v42K&VDR3$)AbMj>CV qjB[QVh ޶7pmBS[0S-dH 4GV;< \9skb"i|,f! 䖀V @^x ")@["eoQ0͸jC<=s* < /2KtB"adW#VƕYIhve=zP2Wq[CPTE0n"v6 _ ?HE|.-")N J`s(j.AײL{ӆD ^>jʢ=8Kd.¬3\s6]H,;Q~nJ,XZ yf>YRNp4%q9OX H<_1nWuRqC%UAΛkw݁hHmj;8"Jq4n1Z&?W?җ`~&z r8:mMrA_ QJBN7.9:=E7%iRMÚ;Y>I;+ +Q${_"xf%[E +UՃ%ԃLfĄ@Dfbw xJq;,.d!Y.G[Ť_CzП m``(#rR><_TC * .NUf#V 2(eqxuRb`j@'ld9?0zT/y+C!o=S4G^G,q9+Y?+mdB$_/z\QjH0%C\Ko 8.M-, dLY?F|g]B"GgGӨ8SR/B)b*@@v絛)MQ<Ѱ%@9|9\R^oԝA*XAӇǜ5VUTLki5}z_v5fãR6}UG(b>)ܽЮFG$Qs2 8Q+X㞭NKx­~wa ͞ݯF`[$Ҙ) d.XqOXS1g!E:'7 7ėc^6Y@%ד?m>0P2𱕁X 6ϑ ]z(Y ͺZǯ3;1XF<}4uNn6< Po;K3 cBYӗP;~o]S -g2+@WtO7D0,;β`rmwn$#co:uжz W~G|TZ^D/Y2=JH|ɴ WիO + endstream endobj 1677 0 obj << /Length 2571 /Filter /FlateDecode >> stream xYKϯB %QRr&09΁-67Kk=!\,X$Hqqaenui}8n52 :S]%A;8K{ޫ"XˬmNo?K!¢ww=HީMh Wәm]`BP~=}C($]-vivqf y{`E}nmxxqiB9XZ*?L7L= <޵ 3PJ0+[׮5p[&v=Hg&,f[20 (gJEY>qHE"Iƒ\j+)BeMaMZ+аi;&XF4*oQ|w Kkk<S+SWCmsvcN}2Wܽqp]zgjLodZ#nzE#a@D1~:Ic|ߥE|n83 ?|Tx4Q2re ~zܙ7|syFe`I`huڧbEf\DH6/`zC"SoeP[M i? f}ѸI^z틬:!yrF}a2fu$|~ zbAieF]|W晀|Hg&I5&o/r9L$3ѕ6,sYB@yK0 = Ы=cGo,vWgb:[gG#KCg>h]μ[krV[\bj,5$ kex?p?32'fۋߑUG{[MG8Y߹'$SURn8K{R[҂4ۑu#2xok>;tX-\leX!4.Jw|Ao);3oRwtWօp6{f8a:QR.0:j s/ X 3gxTcg~Z#,D @̊ :Be!Iڋܩ&H(wDսuۨ@EL*:7r(q-D2aOj)l!>Ņɰ1m`:@ͻ@/'ܝ?mn3 [N"xm8?P_kۏC7O%o]zL*zRzq?g endstream endobj 1684 0 obj << /Length 1547 /Filter /FlateDecode >> stream xڭWMo6Q"ZHBOtݦ(AD,h؁lhf8|fyiLWJidRΤ]#~v0*~]EP$zۅcV-Hn[Vg(r✥J 4*Dݳ/ *8@mAgi>L kkh[%XIa+!wN~V5hC p=IYM{QZ-D'??xs>T\2)mD"9 *Wt,¶F5nqk#Q84J)KcI&b!WQc 1ʦC<!Sf]N+ۧђDI JcŌIt.iqTc1Gx c#4 frc!fME287%a:9`65t1\q(kyaۇ%됺IdBv(N>Oßgn=.Y],)iOwvQl#LiQ'-"Khh-,sN`XB 9f9XvS@M7{Z04i[Zf:PZ)`B5=P4Ty$ ʡd#G Pp*ii7Wa"k N΋.>,lMMaMt&a\(^hز' }U Paϐ=nK@4S1yPXT b-s)4A=}VLq<9M`V.}?׾]r[ E)md윞bCTH+ lXE`o\4 0 bygZFK}roIuZ+<~GmW( h4" еd؏Uu_Qw.KłÑ zL8Tdi,70hB,7v D75无6 O.3c`eLYdvM ah<۝<>nmnYKaOL><5ރ5L"DsZ"8f c {;9n7r;SN|E@b"*ͱVzSsC @9vuYQք).^1˾e'Ǻe[0B]ǀS\sv^<}} so HH Fڹ}ғ-~I~^K$`;iiw(rfy*N8 kk(N =zn=M]/#M'5yg4+<>ϭD9]:b+dn,{\8&ިRO*]isOPrFrK@4{) |[4hu8@u>{WfunwOkfAD(b͸pF/Oê4 endstream endobj 1696 0 obj << /Length 2275 /Filter /FlateDecode >> stream xYKsFWr7dx,Y[L9ʢrsɡ]%%>%ʑS{̠ɷW?]z"™GőUQ1bq4"Fc( n*]*XD*Xl,> 1F8rGc+hͶ܌< ʜbat6i- PQ,yerp2 'hBbZD%㒄Z qR$Z/ J"x!}@ hY}6w[;#X(!ʅxHQ;7gC(NFP (Qbݵec$Q`[:zOT!Fm_$( ЮOp{a_YL8U/$MsM6&\Էe~3Y^&kWex?mL?XX|Tv Wl^pŦ w=Ŧc9fJDc@EMɋ|ۺ̦78Ą8k(~0ekҴ!XX3}cbk0%P?vYFD>O}XF L?޼:0ɠl4$_Fϴ+mOfXv®0_ā#Veʶ k5w i}kmxWpr~c|Y= +0&xȔsfVi~MomSy 9j0_ʬ{ס|pD5hx^cgD^QMSP4;vTz4|QS&ۨ*'>иFI_r\B6=L& /乙~Cᖏ4QᙍӄJ4ܪ6,Fpt:ژs3+_pxn*۩Yh>mNzS I&O3yO*ZqþREkY'k^m6OM .GD   @ NBxw0,;Xc㳭:X<nedbv%ɞi+48&-ӵb=:ŋpn<b<˩S9k!Niq^ ] endstream endobj 1700 0 obj << /Length 323 /Filter /FlateDecode >> stream xڭQAN0>j7^'PU(Ej(IMR=p[͎gg7dB&%"dhc 2X O|)D@qBOY m>FjM&Hq+$ybZyNQhWʜ tn>ʫf" x?N=2]AzM 2 4 P [}>5͛=Ե+̣DŽY<_l"anCy|YCG Ir8p<(480UF_.SpS*ʺFЀ--x|DV0ꗓE:e߾2 endstream endobj 1709 0 obj << /Length 1857 /Filter /FlateDecode >> stream xڵXK6r+$ɶ)RH8!ɁZ[r$y_)KhaW1ÙojquZ&P,3Hg,isΔb}ol.3OQU 4cU-x9<.aY^̀Ic&{EjJ3](+{:8+L0CG8Kw&U+;!0bx/Xؒ( v*|2iغ/Vo, Q9fuiQ$ K jw\{> '.]kcC5cdo0 K%Z|~pu˳>k5Z8z3%uX 6f+"Y*3ntbV7S72"h#:%OE ؠO`z|{ҋGNtSZW׫cӸB]öǶ~7u2aM' }xy: iη/9HcHU2> stream xڝYYoH~ϯ6`d3݉}H@KE,M*$~P1v .VUBBWUUtK·Wiz V0q_/Nެ|C=B:ZכW|ҡJTnv04E*v)rcW_~=WkwOݾ( ?>l7"Zda7r+k`^:߼aN2_xܟ\,y:sÅwOMqFJo!&\Ȼ~_7oQ>늺RK7@Ux˛l7ue~* _ڇa诧x- E'+Up#x+*rwbMvү.ӡPw>J ڠa&Q^L8XLj%M}蘡ASYfn5pPE_Ut;'t 6=lU[ylcCh<\<&tSADN8(jYFt Nюw.P*X¯SE, dGPGҫ#&u0CQ<=|q|84yDX?+.Czỳ:Lml }FຏW@ eo{wUqT%j4mfeRLwd<5E^m"oؤxk;`]A - =Jdyk%Uad{nMNLLC#дE|{q ɭks %s~O3RAb.:Ld5(ޤIm! ŧ_ EhyVT'wuYHHjqہެ9C{I inaS 2g=l܇#ɦ>*WnɃn"琠8(K XV]>OvK$Pyn.VUuс a w5)81xk /gB@9rs,3I&8p\oiw EVH~OIFGA@RW90i|gϡd@P-rR4΂Kr&bsFM\E2x>N@%UvF;M%_8P '٬s$[Kߡ , 8px }B8ȵᗴC8 B'pS!~*ypX ZzԏH#`""j ", D!APa4@?d?Ბ6\H0`";E,1PG*l3 NE ϙ$6ΐ1o4L$Õd *:1 -]q5kߵWlJ'Aɦ*$G> kZ_샷)KBr&+8u*i; 7Q?mAX'C)p068UɭFR:}sܩ\2gLb$(xaGF4L>]q*\^IK:IqCu S)gje}Vh.8mͩ4QI0HG6*AY-)hR\!~)dդ8ĩ%Pk+Eo]w|Gd`j{Ϳc,,&lX*A989Ps#Hф{6`=T¼_T 18gYu1|iJ rQy*ƜFD>bD2$2)6 g؞g(#rp |RJLR KYШRcvPށIsc^oK4ڹjOyD@n@h:P.w%*WG^%3UlN$#-⸿]Er4 1͡iM| ɣO?K.U?!*= SPcg.5:ۢG ~?MMfbp5 X0858DOgDJ|XFJj `0 GOǖ^5`XwP>º/E 9cϭڥbNܤ楅 G]0[ ñ@;-6>aa<}F}91rBsp%l \$)A&lh;R!d[^dsI(1eX% mQm79tYHW#LwQ qtsq8|<0aS[> stream xڭZK6 ϯzJZ(ę5Yz"͏H(VDj\!jw|o+JDfWǕaB\y݋5%5nIqoc$S+`^4l_~srDgXyEt%$R}W5Č`0*g2ML#cňի,"C`$my\{-e0zchw&ߑD]ۤP.dx}y5>g䆭g]@ܡM VH{*e6f5]H>L㶄=p z#աT*JR@ ެ}i}(rK! 8?7/` 'o:`쮂d|e[(-Q4:4(e\Vmp3UǤC͔#lmAe6`y7PvF&_v?V_GOM[PpPu]71.NyY;wvۢ,"o_ XYt)o|$ZWЉL> y Pׅ+1_Dz:\ g=Ꚋ5=` s#Q4aQE$wf&L%6 >e{y Sǭ/*/-°?.Ԕ&(wI(45cMJ sB2JdN:cb,9UѹK$%<3(R;VEsL-] f暰[o]}0wC7Hz>by+Q6y1!p#0x 1`Մ=]+-~Υ;TEp;@HgK̲f0g f@l.CCU>.Pt1Ԁ5x@J{ʯ-d@ہ,,vd'?6-cb4 F$eFྜྷk0m^Wt܄ǁ6WwW~T8?]ٓ޵nPn1IW~0l$ ;YF\FǕ0H'etBJ`LuDW3Ƨo8EyFGQݦu@5Fv]|vF6vhG~&_O2vVd 3!NRL2XͻhcɳH2ؙhsp&5֠ODR]rNGFpԌِ)ةk`Eht54}Y6k6ח1E\$y<1*LkIx (EL u{y4j)^#.4K oh c U-|{\>AS()L|scQe!~2)> fCA7$"Dđ"-SyRDᓆRGזn;K#~f4z&ۃv[?@N-I/E.R`@ +> !? e 'MF1f~%ANj ̄G zlǩm å`\Mg4b7㚌ϔ& $$k,,.c16h 叟\xp4"1Q%;cM endstream endobj 1645 0 obj << /Type /ObjStm /N 100 /First 960 /Length 2571 /Filter /FlateDecode >> stream xڽZmo_/\ 9daCZpIA>8Mԑg(cY$H;r^gȥ"5 9(i@I~#340KP \k ~B % i jjBephUKPWs󻚏aC@I}`7e꣕X -M̵o)]o&,H'c fA\2JJٺA$AjS:( և5/$~'|X45v+&iK)4تXu[|zZC.K% k$}9꫅ pf^\.ul (XHe}6 RC@`t=EFb:YI%`a]0U2U_CCԴ~TH} SZ9%HHoz߁o|Ru5lL|Z;9==~ ik1!y|ċOޜ|=HIJlm4Rc*4H=ڥE$"XR~X0Ljh+񛗪QD曧^W|SOQdm\*/?ëopm?/pd6/.V_|n|e]no[xRPZ<w{%F{nϭvU׏9~X^[\>bzc&\(e1 #*Ԟ?/_-<Wgˋȑ"?Vc|Kq@ĂmΎE{ȮW ռǎAG!B: mΠR*RPR/=R9?2*fKQc,V`j1sXI["Yˆf G`P$t)mlnFE$ S8!"G]͡6 9e4qdgFqQ5N Ep Ԣq-1Q[R4TD- zTK1ul6-Mnц-I ]ذ|8llf՛0bC`(c# $7"RQ"7eT| 6qX*&dTjo3Qa4B娶HrGS Q/ #E#7DM#qţ!`:([|8p/ćpBGN`c֮mQoШOeV^ՀN 2֢iڎK!hfo%G>emF6 .;]ps*RxUwg#*S Z,ү%2X|F8KL<ڜ)fFk\20=y\ J;]ebDo)C)Ӕ97:di;Wn"H2c ` M7[k ;ٖ9՘P u$BtvE .V%xbiF=|(!"# "3Z`6ԛXGWD.DAE5h's!Tw| @ 7l}Ltz<=ܱNnЬCv>/~vJ,q69fG.?nn+Aa )F#=f]OFwzK#i(;pZ6 {z /jO"_I4NS-χK?=.~=Ll+)w)N4]vx*rH^+F4qgenJzB167x/mXoQG֩0W?栾DGnY|BRAL`MAr>7CxNDoc ..Qg;ZH^WޢGX])u7Bm!Az}Wj!yξgA2~xP= ODǏŷXgtMżPFK|3%{yȒ1Tg B $à ˿? J)_ɣo:aCl*cHY:oZH@8q'3c9alEcK~0F H3N&RT {ӾnU*{yÃ{W@ y> Mwz8ˠ l4 c/bs^77d\Quܟz<RCQPͻ} U-áEB-sf`20k{ќ`TZ'o\N2*5!kx!0L Aѹ2}3yڋukRs m2< 5M-u7 `VtE7 Q endstream endobj 1748 0 obj << /Length 1482 /Filter /FlateDecode >> stream xڵXmoH_aK]R))U^zᮍN`Ę67]%A<8~>B:'RGӇF, ̱CB!~|=試CH$|IsiU|$pH: a)1 o}<{볛OyNE| T $p E}]&7z1 gEq"1*b/T dklZ_H q˄iyݔ40l\ͲmY3zgf!a5dq郾g߱; D#? DdmyT_;⾦G="&)"Rl\47[ #d9( !p1piR8؝T/*8x_^!rEQs>HPMMn_8c$<*O*[阉1D}Σh1vd(mQ(2}]ˣcK=mo>Vcgwځ&=^Q|@ "6* `{MTaοX0-pw;Vw48XVc%*Y `*,Ê9<XA-VQ[-VazKi *+ɶ(ƈ& ,Zޫ{Mگt2抟qh>-bG %5}3H2cEYuGl'VPrW6o]< h0lS1s€#gzlDShǨia^ԭyNCeABN~ouqnI 7®@=#'2{~,+h endstream endobj 1762 0 obj << /Length 2813 /Filter /FlateDecode >> stream xڭZo6_*@H[=mc+[J%{;!ȱ"iÙq8O7>7w c7" 7o2b..v V.aKW$rf1i,4Bgc20Qm@(XȘC"WLA e 9 d;(( дݵx춺۵KPޥض}7ԯ۶%+yiKK_S)HrU=Z׹fN)#brY5 (rX`¨rs|~Yp znZ/^'4]{@P` mʃnׁG2A7,;\`e]ִ&`m^ c-z)q96<`%YPuucwud><@ٶatn|*0_K.z[mU"nf-WFBQx$_XfLo~ms QR{hpwLm۾.1\.{z$vC+fیiܳ=E`-}lޔFdWL`TM~}@-QLشݖL?6>OS($D`iq0\N0S!Zq6m7V2ȧ&=ErU80M3h_2AԲ23)Y:&xeJ,ƥ\-Uf 2 :GNuKԓ,}"1hw!%?LzIT0MT &V y4DQVd&$ZX^szF4vۗ/ͶDĸ$6l}FhأIc g ѹ 54v+~vMQ?orfXj0ఔzV}bG8 W NP I ,2=X%C ѹPYuDiU E~G\CS50Xx˩PJ68ۖuBŦYSa;jH~bϿ~REm>V]Q&1pă'*/!gaRч cpUHq=unBAU3Ş{sq)Z9ݹB24O$R1 /MIՇBa"ˬM82 g,H'*C]JrOW G%3h>@p( LBT^yf\1] ^"o`%Q }Rc·#UH_ I70z=F'_@Y&Tޅ|@<s] 3E]F܎c)i4LJ?u6.Ti05#sg撊Id`匋c8*|`5%OҊ>-Cb1t1_G!,">+ b4ʡJzmo1'3 kT ;~BUʃ0xe8o~K̙l0-@TviV54OH&`$74Ǫ!z W"<&LI)XR+ KBIHlnSO!Mgí:xA5[}644JJ1>Ur,(wcyZB/`3gy# x*ϝȾN,*k>$b SF20~i-uT!em %(X< |YOȳ~V<3Ak7 > ZRpCJ+%Tx8a`B3(2}Z#Hi#z׸>}RigqXLw#ma R^ 1SbL .8G&,WB"aƹ,TBIφ%艙Whh$Q.뜉pBvI7N4A!d؜3퀊1̊"L|Irg1Qi#~?LbsBpVp`۪ؖpt ^}OeI]bFǀvu> b}yF> stream xڵXK6anH`Lv3YIsJr`[rOEɲ[$b,FF d%deVBzI޿DFGrˆ<נwǛnd謈TkB(MDfT{G2ER)RR e(I1=lw?=՝Q&vv|=]ӏo_Nja҂8uuS?Uɛof&"yIϯ\JaֻE( $-2/e To{N,NE.&.O~l|\jK"ӕwek~[2s{E_K=O"2U{L6BO 9Wi=3 'M2uZp/dHE]ʅ*H+-And 4Pvj.|_{xENJƴu-4ˊw2zMyHuvMXv| N2 z!mHopMnb=.Pu!XvEN˜4DcbǎHR@ֹ}j= Ra`r"ר"]L/ɹ"!)w;۷4VJ n-$ϿusS5)a} I ^jՍIGN |PC'q+xannCM!r|j= !i|.Ì3󽐐)r{뫕B&4%=/4 /oT05l-}uS k*΁OݺS-φɗ嵷\v/@SۓcP'`g /nBzGG5p Ǫ P?>ԶXhnZr=IDY)Y)xau'MmuZSP?c"g"4v \A$F1DžT5Qp*Ir闋 wtVLLYT!\㲽3*EWEu,~iAօ;pXxƱpqcyeAQaP´n6*Xo.k*FC6ETxfDrn_UjZK!,!̼oeaTO6]"PHDy]zEsj?Mrm`vnk*HuÅcdcm嫰'Die<뫒WQ."`!jaSLȃ5S5l7<56徑TL.TYd><},61`mt.m wL',~56|/B TdG:L_a*}@+=Z}'>+P|ɤ0}+Lr19囹7ۆ~ὄV$hd"`Iuz/͵Wv*dj# w3= .5WU 68|"_"חkMLa,:UR64aXR u=/o*f'6LGvIKw:ub;uv{FDs [Ɣ蚡] ܰv53gC&rwcU/K1+4i&y I+Q*k|UEFIT$1"?St__Exu~*FK# Ń1c9Ύ%%to)@:rZ^N1LD&K'K9 pi2ǟ OYC0ΓBs=Ԧ$1#LG^oPP3IdږORF޴4x3;v̨#_b[+}6isi!3F?OsJz_\> endstream endobj 1791 0 obj << /Length 1854 /Filter /FlateDecode >> stream xڵWݓ۶P̸3vƙIǭ][76$$6)t׿%ӱm,>  ,ʃ_`g",8{cu,"`]ovi#V:P2L(PyX2y`}d:T(zi4 k)lՋ_`#XJ% Hyn<92ѷv-|ݐ)kC]QW/@n^uvZ"3=4}Eb8k7}}z,[!ՕWk}߸ݗqU.ꓫ'޽vH(Ez6h:Gئ[aWQzZfy;a|dRhH]3KX2RBE٫X,6^݇. x,,FD2"ӧgdko޳1$Ԅ)gRf$و)1+&fh|=Yz4~f͕gj5**f6b\ם-ѱH\YF˙.h4͛d8Y}t=QG"~x A%7&i !& L <.*B-0TEKy"NGZEK9\}wa|.|C㰾̴x ϑ%Vi˝h3+bR')TKאV;, -%X<&)Q&;-CSxNW;}GZ GI>QG-./Pݩ0G-nRv #ضi$|eێ0[iQ#F,"sQj=55Fx_Dz p==zgs,e4tV<͠OCfBaHғ}rpC !%4 mnX=@3mր Jb? ђ}0@;[=۾79?<ɏ04ƣ mN\HO]wn:+f?92e  ,9\nKi'ik_ڹv=>tvڕ LFc ~J+\g1P\Dz_`GYp|sJJȺ6hLm]/C4Q4sSN1-܎ *v#+9uYlǎl-uA`<T#O [S<4@""b7j T5@]n[>uD-m?PWXL\*L7ıP&0?|`W)+i(U,/h%RtI3jiwj\˗zSV,66;\ /7Crj>y{L\#i<`[ZpW8VQk{ `cyӚG+öl8@tfTk#+HrG1HLL56 cNC&>tD`v& .E@*Р&@\ N,lZRgrgZp,Y٣+M9A :F%$ g73}J6Mzp'cB4*OQ|MuA> stream xڭU[o0~ϯؤ$j vd@udQfи9MA{j>8wΓiunKD9 ƿޝiC > >aRLO,uD8{FXT{)}UvdŕJQ{uv&%؃hfGoM!4fJyy3JI1ET!JHnE87U%% tϟrO>zk/[$}6Ez5g95tD%raa69X(u+!5IVȬ0d[ ű*oH= 3SP2C)J,+eY;Ғğb,US endstream endobj 1807 0 obj << /Length 2804 /Filter /FlateDecode >> stream xڭYK۸ϯPS` A|c]Ԗ-l(3X"x/!Q$x4F?^^V*6ZޭlBT+X} UWQmoˮ"V]ϭN&[nۼf.{ƞwWMݩXfӴEUoCb<Zi"'ɒ銆{Sԍzȑە X˓(7ۜ{8ia'nZ`i˼/ \z{ jWzmȮ.>} W+#QVQKrLi#&@&JDZ0yeӕUfBL&[%ڒҵl?oϡ /_~ _=حQLւr;*NY?Q3Ygn}=gHMSK9Lw,eLi[~K ~~x'6mbȼq+{ Ġ]$ {-`R!$RTK#`b&N䌊Fl?OYQ;H9'$ق<#iM3ڟ Uf#>R+ZR`e)O PI8ϸ@NId- CrK,T6$㈓\0O⾎gw NeD 5QՆ3 F8Gacd@A :רl z@$ _HL+!P'lhA lP,Z`SIp w7x{9Uxة4Qe ,9 7p3GE7THck _9v6o1 Ց&Įsd*pnybcS\8,F@. *[XċH vL=:ţ5g,`AEٕ*m!M6l0_߿a}acu nZ3X5m";)F!G[(d2VN<;,( V+5@=$@2ec8dAE[J"me'q*ʹ68byJv|c6  *F*/,F@yheB=[.Osb2rh c¾ 6$YW&(tyKV**S K%نU.!DF~19\&1)-\((-äj CRH{FStO=q./0,GKQ< fsʠ b;c6nBr-0$  .".Cl^@ D끆 , Ka@T@.hdkNRp;VpgقB d&Jd3 ؼwQNY+W\3Y4pS6<1'j+6JvɼC}jW钏E1IG7&P}9 O D+,z|=$Ԇ2*qCH((SiMP;fj*Mc\bpQAfGO/} حt> stream xڭَF_!%dİ/" Oq(3bL2﷮!Sc/nVWUy};m 3a0r&NTR?l vM:傟a'_x94 3m67>~֨,~at}^4slj^ʮgh\4 J/>4ӍN񋀐|+u vʆh״Xt!fmnuǡWRfJǡgTa!0\ZIhx ZE@4 Ґ%S+[Z^; " Lk{M7[kXS3Ѧ"z/^Mc#f K$QpWyrMujأO qE&qy!qL5o=&f1SY:i!.Ҧbsԗm Utzs+ D6 4@Ifz_md扶6*2 ͻW^ If&ڽ$'(^p (S( ~@EzGQQ?ETk2*:# w ׶ Ƨ-~})>B/oQQ\”Me6.Z|ڂU0P]p?(9o{5~Q8Wg?y?x˻}[;Va ou l-tu6rֹ+}nx,>q0A#MQ6h o889w U+]sllMן[޲/:O\(D:-Zx qlөL'K~D9*gf~䊊qÑ csWu|jG@ȩ*d^9ekdhD"oI>gwS -hA_qKq$P!f| bs+> fyOE1 Bچe5 p\%:'fKxxUѣab‹ _DE,V'ۣC-K cgFA aD\u8&D6&P8 38iBpQw, .JAjjTp U Vw2B#t:8G{f`2ؕC !]-eC+rw"L1څׄ&,dzaJrO(cOhp\!4a4}wN9 c nKKŗr$d (q( iS0܋v 1*ᄂ!9dK)1ZA<:;y/7?~Wch+KE]\bQP}dJt)Qv(>2^𡸁|E2Ux ҇zw#X2'r^Y&Ѩ◉%3j>:g͒ K^¯~ e 7,/r`/yR Y(e;t<>>agLHF=iy"q^\/dK]RHèKT[F mg' QgǙa2PEcO# e9\K,ģTMZaf%#]Ey} -/4ThP8:_Te߆Law5g*34QŮ!? ;8xji3;X*ϱUj|ڜ]YS%(}V7 r$a'Iak!_G33:B쩡Za „EvkfHSa!eM(NF> ?؎ܖ: YTn*_?$N(|mc4T bak{ *l-/7#.RE煰1>f!@%<xewË9O?88-sVXx#Հ ;>q.8D"Ot{ewkBXd&l96ͰnJ9BI#`"?`Xs*`Bv R8XteXt0{5F䠵 TM៕J 4&Y9|@.`F(9 ,El-{0S_kQ j.3S'6: &itш*"1y(։ 'š$.<'(|i[Smz\!ڹ GPm=QOϋ*q#]5`2՛;=JDk~5B5[^ e0%}VʶNP DD pkI#abXKȭ}PvS^0 OTrvD xREj#$]g "i^yCܫdCJyC5I<`F1%I.#x2/L<|v1 _(uo[|~,] MV,̌|zU.7C=jM9f"Mhqf_eL@P$w T2fa)fa)֣ ņŜD axA?}91F .BJ jr U[cI1.%nleHչxt3 Dbo(:o +@9 ]y7a.ؙ ,NbJob#=/7>ڲnqe z!q ZML)Ʀe; _ tx{(N 15Gz!koB12 endstream endobj 1828 0 obj << /Length 861 /Filter /FlateDecode >> stream xYo1Z):J{ӤpCŷ#*ۗKNrP]`DsO`Z 0y\A1SL [elr< e0m `6 <@-SNTqP6;Pf6Bhevˤ2[.d~Q2*}Ȭ Kd86> ̰)QڥRŃ /NHE) =xU;x endstream endobj 1838 0 obj << /Length 1880 /Filter /FlateDecode >> stream xڭnF <4=*6.|1A0Y >E4E*\Z|W(2՘ ToULkHApSyWJIxIh=\%A϶aY7ڼ)Pmi yœ-FYQ%6T -K{$P2\}*'!Ed%2bym|>Y2,plgPhRPYUr-u{(M2,PC2 )*i_,a!mqBf(;JB4L hbf"4fHjQrUʸ> ,1y tnr%o%c}FY݊RF̠jƨu9s(̘K' TzriAzCev@R `C#K$3Y'9*+zƦ|[Iİ٤COٺ)jhp)-9\k}1*Vb` {P/?@ Β/g8d̯ V(&ˢN&R(xn(++5AfEfˬZMУ*/@Kp>?=ßм&qTݡ.*l-ƽud[=iSsѦH6Ѳ6[;|K[q?q}KlN}X=f.?@ F~IR-=_nK.agx~3}Bo{zsI ?=ǥ[{> stream xڕZKWm8 $Sn-;]lDЦHvw}PE h<|[UR*_=_&uʾrJU_=^O~~l^g69=R%vl*9ksy&UFz' }ĭk?RovᶳI5IWO'lk"D{Qw|zD;[> Bnz{j?楟s)ÞN^wg;I,DFofaFV:OL6*C*)<A1;z5N'u@&e- 6w]W_ܴ<+Yb64D 8雥"5U?umn5dUjEtUD~܊(ɒiv@;ζmOMz(m}jg2O^L(W&T^` k ]EǓdQ2HXI?8pV#]9(gѺp` -TXa#g'4 UE9zD{d/{7ܹh0:;X/$ Nx"-O8@yo?3I%egPҏc/S ,sogd0Ҟ_yA"#ofy 2p8P^X^qʳgp1=&3|J9%(at\ ξ꺂tt%p!Yͅdz|2+S; V0*Qq@hC;ċ3ݛ[`N58E ~PAS|qWo<:44XkKf3ANM zؠ7^_ȫ^ jvnSCPt8O𝍟>*ׇc'7Ap-^v-^n67kU贌: _+^M`tfYݟGBȿMic}\<ٞ5`#i֝aS]>^J9`P6U 5.&ȏM xO= L[1⇑c p0t#(_NC/)^(1D68ӫ~^ L `WK @ q,?\(c'}%淆ziUP=@_&0Bi7r56DZ$eG`ۃ,1gPk_`+KG_uKdF6ـJ1HQKy>>8\/A 2:`E%2qH l[삗zmi)_x gxF]-4HX xo>WCƳSW* )ݮN_WK3+ԟkҽ;k=Hmo#;7KUZ|ͮ VrJWWf~^T[@d[TO2.ٻTDøVtCxoݐ1p_L$!Iw3^&EZ$P֚:Y"\4r-cxrMւ 5s0 !V gʄ/3e!*ʹ]l_L%m BB9j7xUl x^H{n-0WtKnd> ЪL]qoWSbt"NuZPb˜ʕ?QsNF&/tWA)WTY"3s^ⶒV Y- ޥ({=TE*{ug~}桴YۃϗfxEhEӖ.Vyh:[ J/wyctw"%]m c2/2ޱ~p,.# $\`wwt͗u8v "`ς5F -wEyd 0:!p uI,ь{.=qCR#慄-U;/˼Hi5xWv%WA+arĝ}YpͩE94yG3J@@X,2 $m{۵VDQ Ɔ ^H-TMoM6ێT?)f-CL_W@duGAd14 ȑdLVlY^p+T)_@k1!ٳ3"I )%o|4:G"tsRC/ PRP3\;_ Rg endstream endobj 1865 0 obj << /Length 1077 /Filter /FlateDecode >> stream xڝVmo6_!hbo1CRdp] A! YcaŎ&Yr$-G^;e ?dxe8.#HFOݟ7331ldK[!@/!q =dv\!? ɔ`22~G x&;;ބ4a7UAUGY 5bL:J}I]Wǰp__zW?U+},jSHU޲\N ס$P;(-i &S (=b.ۚBj%󳲾ғa@g&,׶BZQ\',Jm&u~e A)ҭ6qV߹"eR?Fs)Hsswk oMbi+/ۯdUoYhPحU^^"^o'J<þ-9@s#nGíf ͡)6ُ`o@?Q {3jq5:G#a#W{q賕9y$-rC:K%SHM~|Sa$pD~]W?PW_p#b{*'oA}-F`@ֽHl-L!on;s a}cT&z}rcV:̀e{&<x0F,> stream xZn\}W1y̐C8 hvlgk5$C{wv 芗 Ϝ^B Rs )^(ԠY'8%X㘒BY rp\ X蝃9(^)9)%ZlB2t,.-cpoC32JX)Е$bB@!7J*M//ybcX GΦ_._>^]aaz:<;ßޓ?ޭVgOcuq&T<:_~zzo<4ψgX@7+̡>?/D^L`U ޾}v@-=ˆxbFLMGMkw[gz㮞6ㄑ[4ezqzpqqٞa : 6 y,,Yh6+M?Φ/~[] m駧T#=_4*PQ4R3% NJQϗO.|/71}QQFD UzDSyjUt9=rXDRc\"tS^]E[8qGou߁- ]ZiY^t AFS/28:xWLH3sDFA )R[q#VV5zTtGNAzPF-6'+ȼAvQn1ԜSfhb%x)_dGY+"jPd\-  ҘvQtpһ~ ]n{{ u.Y\\ִyL4"b'%9:pBPhBڧƛ!?=8? LFN?{}}O׈˫W/FA9R$;D{r[#n?Q3i|5EХ=0DDa&PMNXg=2*_qx2^GkT~ˠ+ EeG(El @9PsE1oyGOA֎(t a342ON[ yZL>م0: 6 yBM KkZRxɀ[q 3r]pT j`e_ux[F=p= nzyOol[[e8@$)(s&M+ $iZ \돔| x*Xl[A@A%He¢Gշ蠷g'o 3:Ȍ2Y(P+Pff ,^CnȲeǑF!!g"&$;%)> GAU)W},k-9 xJ簁j h:bІmTXk(-})饨#AicQ^H{ͪ^qU"tQ6^*=潐 _p<Ҽ?KKu㬴OơDqƤÙC4FEoAS؀ Ț2?-I f arQ. h$zߗWdTY )rM/ctP82KQ#kVȶl|6s<<ɟu<(CÒqX=OI^Z?T?(OJ($ G|BNQO֋-qܽ0Mzp ".x%ʳ/=៵~g@ʸ>:..=]IY,; C{uu{;IKN0^zgz+C; [7e @avJq;>[ endstream endobj 1870 0 obj << /Length 1319 /Filter /FlateDecode >> stream xNF[O>J[iٲ*+(djY!;8R{b<>s/3snHB!,d 5E1b {`bZE D<σn2#p0 Qc (HE+$ _~ߏ$]yy$CǎMB~.3)ڎu/_=3Vv;P q˿ufW欼$WM}]1!Kܕz&7"_/FiέΆ5*"5*WY;3W]#p/󧡫ZcMHky9NFWB-6uL=+=em[/sD}Rq%QZlSI !4&:dx1Лcpޓ]d_U?@4}ݾw8ܚ|y81)yjHMKBP3EC-6 ݘYrO\\TT~ U%S]\1(qbBdu,椈rUj%aD8,7|6gPguQ2ެڕ[Sq@;:0bmnz[K ,J.&f ׶ ?5 7=dV]Z? K.]վYSlRЃI>6fnao,2dr6^N10ەͽ7.eY+ƦN=jC˨K٘Y5s<5whkbm ogn +gV;u endstream endobj 1874 0 obj << /Length 2074 /Filter /FlateDecode >> stream xڭZ[o6~ϯ[eD& Àm7 yc% [,7Ϳob(b(P;sxx{$9H!('4\}H((Ϣ;:J3h&^gn`H"Q$@ׄE0yhqA"J( gsZoS߷u],h 8?z^>u}KHl>kogŷ.x#tuщj jSR,+/5B&?%D^~aHF n;GpjaM) 9)=V$n%/0 9!0 ϱzߖ9f$_gspzqS,e]VOt7Q?UxUw4kF,xQMj헻R75W֖վ,^01-gsRq ƻR}ٕfZbs)z\ryaS ޵Duy@ˆ$bcA\KQs#ѓ0Jxq sih?^OC׊aBe 1-2\O 9};(`G}:,3!͛ep#"vZXk=_rɆNl?[ JbXO C:B ;o=6a _Ϥۑz? G v= UIEðb<=y\ Q zDфmz41զBL\JX!>Jfj۪/k}/Fݣqţ$hqiTbdL&e'fPplUt*\s翕,|mU؎knO F4F^lG0&HϜL>WlEYux]iasG !5^yFlG i+F*HCSUCWjSȆ` 6¨6: `Uw W3_DUF$o|*#!}QSeDtPeDMC }] ۩4tdi$|tx7b"kLw K[wUǻ1Ӫ=fn|"^:nberC̢9r٪-#Ѱ endstream endobj 1890 0 obj << /Length 3074 /Filter /FlateDecode >> stream xڵZ[۶~Л3Ad3u3ԵeK I@WYfAw.ɂ_0L/\0zG܏ R/>ەۅLfvx/~{tF3aZ2)3wķ/z ^~ 0f)a ojlsaA?eaA9CYE-ܐ,(?¨%QCJT3Aims)v **)wY覺=뢯 /-5 .0Li"\O h@1ѕH^4ϥG-/  sGRlZϠB/WI{o'1J @\LvԜgσHΒ !(YVʶBƛfK@ dhThb h.&;jp灆㉞ 4kV_ʶYy<%h 8瀓)A4$"JRu4 '@ŜZ]OE(b(Cj$:!+fW֥5!i?8 n}7Yp.9Yz Qʣ'Ws9+#OYG&r=9Bgzb߉ A5'ҙGOM`bF*,g> C`1y뀙wf0S]z)r2}ė"Aӏ5 EQsHR: %@TRb<@dG>(d g.MYU# D)1J9 ؈lGLV/H.&?jaiwVaf7uiݳA2$1?!&2ף|Nt9Q#gyi8F8#gODT6"Z{hL$S1d9uYΒl4ܷ! sY2:Yz NU!S}l0]t\i9S< [Pb,YB*j%914_Hǜz>wwӟ\mkni׺Ûj[: ϸv8;b;Fm  Y}@9+h+|ԇh{}p]˥;g'6էjعԼ>]yp@?GknZ{`Gp5G3'vLxK۫{4ޓC1(J@yaqg=5ڹdYɄh1!e]3HT908>uw=-;7>& ?T5bo[B!nˠD!Jzֶf/`P0Bq_b.kT8^9`eR,}xJ!ʸ8a_5Hy.%@Q 1)H'[( s H쏖긩,r2 +o$lL'%dG>1mxȆE]sETyL _Su㘨vCO9 #⧩aZOO0d~Пu'9ܶ2}f:cke 1} }P} >VtI.T!&hE1t *gPLӰ&RIX%1YvZ&6i $9m9맜`490"ê4q0UŞ+9۴wP󸀷}iD&1!"X)^`3`W-.A0hJ>zX&:!yg4ve}0sXfrmF*AٖZ|ɏ ~1c?ӏ~0;l L gx<2ÀikZkڈdWB0wo, o]Ԓ7@\d:Ҫr/6vOI1R|xyNLL8${b@#b6XK'Cܒ0oýzP77#G;]aw0|_mhPI∧L%O-)sB Sر I[AW [)Yy$գwU^PףW9KF eǨw|%&o3Tƫh]ASChF\O!y%? h Ky,@t3Ûc9dX0'Tl֑:zTn.΍C Pn=,G KSB/ endstream endobj 1897 0 obj << /Length 1019 /Filter /FlateDecode >> stream xڝVnF}WHQ@.C@Q#e%H(,%m0   9 ВaQXi{p Y[,%ȅe!"XX, ]ld`qD3qZoVk)}P q% Q:U-`ˤ$$Ts%<Mw CYCVQ&,bMu" 0Hl% tA<_}$kc\Ԥ0I?%1=UFQJZ2˃5L˷~rh;qd[~_>J@,-#!zniFqT^ܭ nkⴛ8˄qa> stream xڝ]OH_avFJ*;<8i}r`;-tf Όox!COE,˃{ aĢP.=.88Xy*DɃ2'@+h|V"o|!RO*xM7#AEPZu _2A7"`٫j¦鷢h5 .!?tC CVe׭M 1! qt9Qqp1[͑?g㫱ޞZ'Kvq˓?)6Ԫjp0J>ەu%hQt۩|~V4*.eR'e3Y IHV ~4eau}h]b}do\y\'Ֆ:-P$$&b>L>GRLIxϒ2;C/W]or{bS%iO4lQԎ#)2B86zUYN?/ѣ2`a{w>w`"CIi8}> هvPXN(6Gdx{5)ݍEtq+ ͥՊx 9$p# 3RzOK Dp/8[ZL<Px,YqmVhUE"ӑlTUmrb|cbc {aA䅣7bapW\ϗqn@r[(~ƒ,Viv2:cU]l? u95XW&l (Gq>h> stream xڭZs8~_83DX?lIfQhI\'.C῿]INVq⋧3-w]RJ$ FrX]|vF\$VNjODZAYDx9x*@tn%5!'gї&-OAUY{Jb> 4<4Y{- [Q~&LpE(NIt~D2f^{., op-U(:֕mR+ybgS75LENGF;5xEvjd"XUxAbw0suVF!E'mJ,)IE="pUjBjy@DC$Z> ?WEDzyt$ 腎HtLA0&J:_~:^ eDsgtDbqGtnEC, r!:#/EPoOs:\eZ-mog\l2CiOq^5Ul`!QS@;ǏLrP#,57vRx6 Jh;Ζ@^1G923LZ'Uhh}+sؖ9vSԩZW(d^FGj{ ǙCaA+a|kt0c% BZ0#SUW@ ׺@ph(sޖ0=z-G2uLM݁ gu8 űq4 !ue,1o}U}7G)]0;$a(oiR|1|Un9.8処i75m"Yۦ.% baVl9J_pOl|r ռ ?jdoP endstream endobj 1912 0 obj << /Length 1851 /Filter /FlateDecode >> stream xڭYYoF~ϯЛ)ypi6A,@?P$mHwiuy^󛙝ջI1MPkuyWmZw8eGpTLQͭ`5?॰ XdBpCM8&{=VVڧAq?ʓLnAg*1 3p7eV ldA8,1q CUG2Y^15 0B#Aql\IeV@m;hd:q͂T[5n{tS ZN NζGGPX e!o1p+[oBĈ>6A^/X` GBM1}@o6 t`7BYh|uƃfS&'Dw[CDGcùov <:(7uxBV$OuIɅߩ!(3` 04GL)D!G ht`{@RDr2,[+&,Jy6YFje w_AdTyҼ3k1~7H[ &$5C-!ɑVLi7(B2BPXȈJEvn,]qf \bmL@ %V?1qcatZ $U# ܫ`{3e4t#.`M y(jg^n1Dh/M76IAK %=r95ETIP-'OUPI%Fxa:,^ НD_?L­(Vb),m`"[2c}=c Շw{ruYJh 0@(ނ*9J.Al[7%R36nQ* yeKy}{~vs9nWQy4:1NC=N!}^=lRhb' OQzVu> |\ɵ}~2uԻB}N/mAqWEm@!$GAֱyEz1Mma_l P_=@mˑeu>:4D8gF3{I >~1껐-\q1 !ᲢjYלjƌg߶XaB3;md5a169q(j8;QNRj+t7}63b v );\ .@/, LLYWj[/̊r$ =rvEϷ?kZ.3ܝiͷ+b"iΐ{ Bp(=QOiiⲿv؁$v82wI=JOoL6ޔ( rng.a6Dk0a0@*fMoVkH}#vPkMLT #Zp<=BN?qn^2?bS( endstream endobj 1918 0 obj << /Length 3159 /Filter /FlateDecode >> stream xڕZKs6W6T/>R5'z+Me<(DIF7&uK?d*~eS*I]}Vki8;>ZFMW6}A}iKhN4nZz}ٞf}CN>[]I)rk#ZD n`M}l[`Z4*ږE_p2=FX֝qFE+^;? CI70F+aM[Dhj׸jm Ocz},N;ZmWL^Nxxy3z87 URmI0|$vt#;PZ"G͙&$d4՘y̰i7US9Z9ߐ[&H)Y {|'?b# 咠e\ypvq'ò\,+P*Q &c/,@DYtW"{roy-۲cE9^@R\<:6SK]e5NCWBZw@3ԓ{NSwGxy3gF<3ϳ껲_$Qў_zQq"B5_%dJqY H-N/l61o/n"Og0yj й!5;/q줎Ce^h8OUR^GE,mp\çKBOǽu&b[Ţ}Y8MG~$cem+LۙU'-FxfN_|#qu]vCi3HYr,AZN3F$p' ^2XgE+8Zdjˡ76v`/Z6S`[ybǷTՓ9[Jae>:F|.dIen0׺0QǗI.f'DG.l `DȐ ԓwK2HneNS &<?g> i8r^|Ywۂ G#!AZ ٣c;V-`!]qJr ;-`9Lm+\|-))X!!1NXF??OqB~$ّJ9ED[`ҊpH236 = \ W ;ת;uWwx66Gjnܹͨ{ gJpɶ.C58uE悯C[2#`YˎP-,@s]y57P#J&+eCE<Д,aw4uC`m(nC#RF6x򶣛-|,\P{e1X4Q ~" /BiT&AǐHW $s LNb~5ц IWeW6*>P:Rp(p|k{,%*F<^pxWiJCBU\T ȭ R5F._໎(hvtӢ#g9 |**f;y7RF*jO$>Ej9ċE,VWOAN3ɠߋ۪.Oű\ dI ^"j7=*) Q r"0܇8\9 J}ERi}9;x&=i9m%I7HmL]CKE1fm'a4G+ W}f:ŋ}S  ˠ?9.Ȥf0{Bh 1Ә9=mBI)tk_d!T$k OMxr~h0Cs)8;Mxa.5sA~T8-2 Uvӯ7q[V&4`f#WЕL\Jsv  '`2"P͐eHN7YjbS_hB5tYlJ:<暘{б6UY =ӨX?ͅ2liP{Wl]J@hw{25iT.c\'"4솞SPF&σJJGH@qJ 6a)u9 &CO.C"ݹѴwM.R>Л`x2$/WۚH|C̵BT~|+=\L脣$BꩡrA5u FN8 b3.߮rOmoY>؉ 99cwprK:QLA-.bw@s9E!%(ʑ^oX։j=S4%&]2u(HY47LwU ň(e[XEb~ 18ta!+s8wg4vI"y~PY:XAO0`3,K}q{ssLB g?F1sTmby$x"Xл#W^Jx&R=d܎tOlP&;ʹ1 +Oˑcap,롱fBgnC wl;c9Px~'&f:G /]}Π0؞~tMC7L=""PR`PNU iCN<沒pBobx {T0:ۮ}<-4 `jg#Hp6,1&S,JpoۘI ^?rW2wbW{6EQ(H((DzH;4XL QKxUX~\}BqX%lULp6 F蟃b3! g@ix;Tĉy05d^@]FuE*j_)4b?gx`w??u7 endstream endobj 1925 0 obj << /Length 3528 /Filter /FlateDecode >> stream xڵ˒4v_bCZ-٦0*aMX'18vcl'e(lbq::/ǷQ"[kVOU(ٕK#eiqt(,Z1Gs6ow< ~Ӎ#(mWTpnM6'!U&N?~ӷ8˧"ū8*,@~Y0J8V/4qYQsq$qsqnhט$V&>f8c.%XieP:gCO4@4 O)dd#Mq,7IێaB@w̧?7Oz_xW.N_ԣا+ݹ|=B#.#W RMog}u"/(ѩlwCٽ~>]8c"<\YZq]? rP&WeýO ے[ģq"r}_cn#IW&u\f䤠''KԹŧ;݅B2ˡ$yyfEtƞ™UWW^=5+7* fSp=mw8cÀ])/%`o-\Y1MV2"HvjO`[Ҿ`XS&P%SsܣB0)nekY *V~ï +;F:HO-F7`PUnSxw Z8я$kK m*3P%"BX@^MQo QJɁ&dF>zA-fN%-&Z9d (DShS5qo%2~ Rg6I&jM\yў$O7c+߶U+MEWaXAQ =M&<.oyj'ny7:H2C|U@[J9Ex@r;z9bCSWGv]{A,T*Ђ)Rn%Dë%&2r2TV o+'%hB xM$ٳ,.#Ԅuâ0#?^VEvɇ`-[FnZ_VHpEΎΰ_o8$L3nA* R/ Κ(4nxɾlJ ֣ mЃ/$aOj}9ux&>B3ڸ\Pó^ɍ WPiP U6lzqBA͡/fWCπdaPRCzZ-pBX |Vf>*\"DAbN3CݖGID5]ЊYƩ d`#6Ie,jq6gܩȭI_ əI2^?"t)Po_z^"u'_^ڔuX3;mOP:ȢQ6L 3=ƲSfGYQ?|j)T!`'SNi|͙2%NEpd9r|NYoV4cP\3%?RE@_@!PF3OFal3:P̂p[2HJwК 6!;Ͷ dѧk{XiMqX?80V');&ZnNάe7Xknb4G@ |=&gaxëgEF b":z?TsOY+OR ={{4JADӉIa±zl2 S̿Pkn|"8 $S$y$ οFD/"^p\'-:k%-O\%.pR^. endstream endobj 1931 0 obj << /Length 3481 /Filter /FlateDecode >> stream x]n#7}Лe fx';O;d6`6E6jȒ#s//[b3Uu]Wdd&BΤ"i:{zx0~{i&FZU_B"Ԑ 4GV׷|CT Ag3f|&%AXb\~oo#HY!+DdHtN*&}@z *$J6ͺ^51$@&L>5Uw7TJ${)"cs}è<|ˮ}~!_Qa?k+lC6 MLGN NLq!X8 #_8%C!c.@V6%/+^<2W0|9 @ړ0F qJ@ C*\4mJ 갈  PD1 @+Nye8@@u[=kԼGoj3lÎ(v] Q)'`}9payY/??V $#MgwU h!|prȉIͥn+0g"/7Da"b2M8^ G7}yJK$0#rl_V!Fc{u[}ձ+:ٵ%㼩6Z-_S=oVOPpdd%12IRP>QgD0ӣ#FIv!BIwhnԋbkM L g0{wM}bY?l맡Bod'\b(.|cUq:]cև40;4nSs5eٴS7L{l2}b`$ Io?>Zx0F?K@""J KV}dO'11z>GjCAq7B!I*͋I\,2370@}a:ZѦB>bd¥nLۓU5LpՌ jb712BX2'T6]?7NbmLW\2x Oi1R&gӮ1YzBX<r 3$18*aȥ$LϊK=AlaQ7v!ESC-K9ZijǸ밯[fhZ^!( 0qƏ`!bb.~ݹM?^k2}kO 26C .ז8TMi ~c%q#i>,0:3FlUh' v(GGf}`s>[>MTxZȷ0 Et1e0iqK@frjܣ*샮1!l Čq.([s `_>.[|kg@2Rf>mH4sD4'{|LȒ@>S`@ <<lRl>.ۢ_@znU2'ߟ,%<%le+}rC1=IbZX!00]6}!y='4Nfɑ7[GgfUtw;^;HhQ̡RLWHАU%1K }ºy@O͢USTmw]/CK~6ج_1XΌN=?*no09fX өT2/-L)=%fPV*Ve͍W;m;L0nnrSIJ{X\# vfzCt@toVmۭwޘĎހm#~w76tu$!-i .0m]ŠfaU!bϊ¾!&:Iv"BfbZ2=Z ~qEL( naN9 aj>\ 1G+S;|5d__6m5L67d>ćl#N@+Tɲ "#0}F||n}ё1bva¥~2_HD20F\5b(ۗx]xGaV42!f~?@[[7OM?8{kTbʠZ Ia SAW,ǂ<[֯)ǂ}fZ$7@tWUǝA}OKӾԍ9?[7(IBΊy\*Ba4LƄ+G1Ub=9R?T`f3\ Opi$XGݴ9 7&?e1e*ӟҗ q Gk8A(a v˖;= ;ABQ\\IPqZLb \է6 ؁_u7@‰6TdPiPQfl&yB #d^g掛7pVdz;=B {|¥lݡAeINby],Ì50:J|]C7j:lULqURk`bSQ|xtas 1wHngUK-=24Aeژ'ɑ8>ٯGk z*\ZkuPBoV "vCτ=n/ p/b׭3vJ;g^˻0S|e,,U A`zD!$P2NG~PnwzuUZ]m2+AC|ɶ3'4#"՜p2rE3DldO)hwISO_03ޝ]JmEa~a{ Q=& ժ2gih>wHZ1AZwXHc(ڷzx.SسOuɉ[)\f7BOqjx%6=THfkzcG7A n7-Zb>ʨ(fxI2Y5ZqS%wḅW atXC#Nٓۗ!O, VؾWE_ ݲ^徂fHH\R.P i >G 2hRA}Z ծPڦu~rObĻX#]Il#R+ܺ\nMft[Yą| H%\qp{9`<[ ;Blr!S딃) e.wĆ|-OrzrBCRk_Kjn,Y3omKSh"3? 4$q˓AXf,mwp?+ endstream endobj 1935 0 obj << /Length 3226 /Filter /FlateDecode >> stream xڵKsXA~䶩J{Jj$;{X͌^ϯH( atjfՍF! lP a{ox=]VYt߯dS)i8oD/AF\H0 ) Š,׋_ׯwx@+%R acFreuhWOon>47~X}Ň/} RY; B0]b m \"JG5ZD$ B^b Eo $ z$BH|+A"۠+$i3 PD1A吨w#Hlw֥_< 5P!cCTTdƢأ2Qz  EDUqZEIQwI]Z,CS$ B5p j(FzˠVEMQoY-aMk* ^w^6tOOD\f{G[8ccMВZ1#@4lrzS힚Xl?BM>ۮ)e+Zk A0m!\d0Lc뾣{%`ݷYe@cӧM{9@(&\Cƚۻ}}@?.`kcurZJ"txX5~~o&EMrdEVR]} fM0u ^8BuMdIhʇf^B [{p_>XSXkۧêɾ_#]]^/muB5("Jb̊ePH 7UNC܍F#BYDv:$ls7o a'5Ii}eU.j1̗gj7JӕjT6-5Bd`@ LBti P5{<&Cŏ6<[yYxȶ%lD/Kep 8p⦛ٱQV{t"O(cU@Gyl{a/.zڎB`I_X=Tzn RB)XEI DvԑUTn ` WB'vN`q11\ ݏPC?o Nj+ Y`oejdœcYx 0%5.]~&r21&0 pXSj@&5!^];S} 釋.2odO!i12] S¥77NSWyPCWunNGLG҉FZ]b#`GX=s]q k.۸Y)>$`wȱu:mTHnyX5h8u(`cc?66~y֦Eu2 D)LS :Q揋P+Zj[(0S6;M^}'הQbׇjYMZs`G,0BMflt`j +aarű&s)œ9p>j[,B eЌ7f:wωܔ` 3.`D43z^wB0G͈ɜy^ 2x1V"GŘrQz.j2G3T8 b1Ta?MH7]þ|Lp#(fYLR a0'&]ܞK6i U'i mR -&X]c Sa saSe>IW[=2sMmO鴈`tr>iaTof`<~F؀vv:P ˃{`}-a.gyخΫӱ?n`yMm嵣AFR@d0較~4f/F xܿa7"QTg zOK˜mEBL1H20F\}qMu&x2̇1l@ pOb8LvGE&y̶%URT $)MT]^) 3Έ؍-]bnb{Easau}٬DÇq0=l4s _U[9S7%w72 &glP) SCK3yGx^ŞP{My7[uвbB a=TPۿD(Hr=8ɦ)Ω zBm/9ܞoYi1M28A2@$1X7TN0=/ښ,ZU ^)PB4al2eFl3X{QYJL4[ q(t)f=Qư`Ŝ˰1L{ve{t"M_ azmu%a=xa{Iu{D=sx7߮(bJeIQ4q3j@- I=$@ ECCޑw'>ߞ(Lbeh)U/ $Ѐ?1jGcܒߙ%˞aUQPKmfS"ԇrsW;Fc3X,LDꙞ'ȴ7k /+.^ޒ`VF~͟˖ond1g2꧋Ӭ0PnMX=a Ťz'tѿբjMњmk4#`ʮuaOw~5KiB>8iu uN^ z dX ZމzѰw|[i׽zbm_KUZ 203B]v\^@zDBſt2uʱ٭v().Pw؝:޽Z{o٭v35U2 ER\5.L;p0m20 / iPz4fwTWM{-A_vcN炗rS*BYaZvqϡ7l'&*o.R;8>mg_d{* e[sA᫠%Hۍ!x/_-d:6zXIYR]B=n sMy^ųw<sg@:bk=6d2 endstream endobj 1941 0 obj << /Length 2498 /Filter /FlateDecode >> stream xڽKs6:RU6B ͱ3SSΎ}@KԈJT(jO@G?4³PYaD9-6WϖpYhg͌,z귫`)h6dNPďOW?||1#,(,M13<{Z~],s?׫(BPiӺPF[oU") lNȢG7=zf7|r.'H09 C"B2eۼ OK2yfB!1LnSΡtVb abE}\S Ѷ`[- F{Wr]-kFFB s)rC V}L 4 Va!|[\a/X7 8œ9҆oUPJO\79'QR8Jk~b #vw8گ׽jhFfkZ[eBH);sP{#L}iVdIMUۯjTrT.J/>6eH&O›!Y"Bs%<ݰj L E'zI$W=j$N|~娟0L.3Vtߪuhu^f H<^.DyT.>Xc߻u ~ 4S;5Ul#حayRw"cX:ol6"72"K%ʎ:E2Dܜl%(ATljQBZA W.ZXuƫV18gn|IY)7KRVd+G:䩺dtwvNQ9xі5vxZlyX( nɇ7B*7w*+^fnUt7ȔS@S(8 fZq_3`єý'T:؀5t'L`Vcn*,Q ]~n5 R媸}e(7IEѲY&."e ,/6LīVun PVx[#zNgB5w/ۛm'3D0qUqUȅpjy Ա -qs~Ք-M[ Z L\d,a@JU1U)B?ZLo LI b;>YV0Vܓ\?9hda3eY&K tp}[熶f'naMa_,MWcs>KMhjTCO%P9ʋ*ݵ,jW <^h<6H +0"܁vF97ی ,= =僓SUn-!X5w[[YNX66pM0lp[zA-{ZXAX\%ddhG//8dY!A$5WZ26oߞ7~mbD˻uy3NM\DdI%A*xcC5Z4׭Ma,\/kތ^Uk[J_!^dp jQ[R7Ae-bQ9g^,b:6(Aek=n(4R}1 DIz"o1!l#H,L$LXO_p+X !²vBU#/R(P_#Q5œlqۚx㡄ᩤM y8C4lN{h~jBU~w7Cm̒xL5Q<aYD3< :I5oB6 ,ϗnSjq@_Ϋ"k/n w_ ]{W=VH r`i_iʦ0DBa}DUSӍ](KSc`>+]Mޝ*+Ri*/IaF23P7V/݌zUALg pin4  endstream endobj 1946 0 obj << /Length 2706 /Filter /FlateDecode >> stream xڭMw6@:_84m8i; ZmDe6datˇG^d^p2/rd^Wب}\|s`E$s| #AE 1&~;,s[e-Lf_7/~:L" L3e1vnn_+"UsxNBs `HȐ,D#\(ɗe/lFls]OmT#~^ϰB䛍`$AOVGM-=N{~ֽ_;ίu|SSUFyaSwv?.%YMZTW&d F1lmmW&[7;B08|kSWz,N@S@n Q-*ciaTD758YƓ JmF]#aMߚ .B8}AE]T@q&(A,Z5&ڸ嶊899qNmRU#!R$&Ov&vw8%H%(Fɾ+CGRE~Fa[cń4'ja8Qݣ3R4\FAԭzrkXcz=V\&\InGfsoO&qu! >Ŵ/ Asi@מEBUyW86;4(8Ɇ$! 2c4ŖZhD/^>X/sD0'Ng_o2fC1i\L|a&MV% ! e 76pRU*o#g@@>~ݞӪB`9U}O7NΣ[s?b+T h iAUߛ9o/椆Sշ}D_Fis!>g.2Ń١\u3xV6UpC_l^y1VNLn#xi&eVRƣIL_%h7Nͱ7u&;=Hv) *rKNZpr(ߙ>{s2A|>&=a<1x z߮slLo"NҿT&?*Ldݒ` 9Q.g rdSD4,S'SlT'4_ՙeˏc?&.Xy;肾"ݹ6D(*<ҎSSoŲڟ AD|FC 9}$袰F^_{: Q6_*VO?˹گx*T3("9jO ;fhK)oNeWv3:,g+]Oě,gҤAU8I Hpjo%Uv)voW+=[;'zV驟AuomUh͉xc]W1iMnM/& f TCp`!pAP>Hk^gqtS,|He6V X QAD`  (rl>jLj;uPyw[rF|{{aɂ#IlGrP0Q~wY&]n=ǰ}ip_cXN/^~6Vp ɢ$0yVA.LL]D51vE )ueq{̧H! ,9Ysuljm|*ra?l c;Fο]սmw:ܿݑL; B> Ww?sm{^ㅞ;;7 dPa/ F;!Dσ☇H#g_M gWa;>(\*@ #,`c5m1iDY?J|,Kbr=&x웻>mL0 C )%I4Cy>,$H@9"B:q}ܑf>E|_:C 9}9:ShA]r\j #:,GӹuW/v ryDy|.QQzϾ x%-Jm"H=!CD} :zf^;woT|]  {ث2Ƒ3Bj "L8{1[ę ԋ̻dXp3Kue_SwcWmEs2-z0ףp4f6k`#|N ̭1 endstream endobj 1951 0 obj << /Length 985 /Filter /FlateDecode >> stream xڭXn6WYçD81РEQt.,cGl}/u9VUO%0:<<< (0O BF^Rl>~^ cp!$LGO$UQeiE2H@uH$F6FE*ڬ*sN &W 1$e:&5P I[L+;AN:ۤP OLȟ^| _!͊h&&GVզ:[LSnrU"~D,|c_@2{0 f5NU) Ӭ) 8O3LpPl >u1Z(9N@hӸ`[?@5Pf $} /Nlĸ @mƹZe=kAEQ?X e |liځg/md_]Grq+acxV#m«oέdD:Gv0 WbrcNao endstream endobj 1955 0 obj << /Length 2253 /Filter /FlateDecode >> stream xڭnF_A%4`M87^xgA[XE\?P-H97rb9|^2^+[/o{rGC» XiFFh^CǃA6HDzO)%"`%z2r7-*E%5 gmpxXWCE"]&}&]١yq5!v&^'͘]f.~\lP8;‹4xs{RZ`#г:I$IXg [Y񗻼!`- w"]ubO':)RmVwgMھ\@;f`m] ߫QS}泗 zaLH29$ܢquh|d%HD͔~ah?'NKpF%-]ʛ|t a;q"`7EA W**Y+dE[:IOth|iϗ E1 tدik]0MsNKn6c<᪪7b)*uf_gͱphVd:X]Y&Ougt %2>#}Ӓ)%ZwyZ1Qֹ[ oQ[t;=s&U!w& Ukdy!7|)Υ{!gdB!u9S̰zѢk9lO  H f8|H~Q\ p8/op8zY}qVk2h'%zrTcd.4Cd\EA//rԗk޴i8E5*VG5Rawq΍G" oapEINXwn g2ڞh OerYe$k?QD7tA/}ff ̑X1C>ŬnM4S|Ur040t9 xUZi; Gz/5 ("瓋#&ePb`֏ogu cȪXWφFJ] N[bOt#xHV+u`\lF3bO7-lEd%B=IPWdnhkx/̰@!>|D4)2)o1 I= }p+Q<ѶUAizm9j%u̍) v@ qS">)0ǪfYVMI*<fٟݝ?a 6wᗊlF Wy Ot5̲͸! :*>ԴH(^-BKaxEq2V㴂gN|%A_ۢZ9U㥅Q8:AN|cTBNZUTlF$ܓwO?l-tx]1MWFq|gs?ٷCnrR~׽^N}a0wBz~] ?lΌqstDfg^"s3Z&Yg~2A 38 $Ǩi?6\{I!6 {-x_ :d{b e_xIhrl5J$f,kQ:a*؏iټ#zi)nXa4ϳKsŞzn" =Q}=bSG5{HI)@/88tHOIHXȽh$'M/G 7oY yUtp@ֳqM[8' |p:pܴ:[Q|^̰rFxv7?'H `s4q endstream endobj 1959 0 obj << /Length 2195 /Filter /FlateDecode >> stream xڭr>_ hAxʓrƪ!S)H"b`P^/h 6޾Y|I_vW$+1bq^G~z.gL!+qmVvdHINd_Qy@cN$J [&I$ytt"DPaaBNn, W0wnP~OlT佋򜋈(S z;>-ry̟5O ofqE ]1&E!0me~7ʂN$"RVk_hrF,̅hKx!;1/lȒ6c5V<_/RJx'1J)忀$LԐ bi."JP$$)ɚ.Alv&5uu tҋX1~Jcҭy8?#f}V!bבiBᵪ5hDR.ufW IqjHMTi4FhB/ƿ\D%T }uD:åf";X߽A y lƟb53 o#5iu')U AM;U[FQ r`WCzMK\zc7Nq &QU CͯwUQT(s^>3US øRLA5ԖR/&Uh 2,u'}@9d$d"Z=(;:]y5 Y ,u@6a Fz۽F߇> wvVkc:rAzhd /ToRd:=ݑ&Cw"o]kvlX 9G/ޠO0&P  b]ey A3) By 90vee{$ic!/1\o,r%]w1$) _gc;q_c 6i׭i1&|XB >*!BamUWۻ!X]6@D㡨xIdͦzzAl 1CЕ!Ѭ"{Ha&RlOX<aW(#>=F xb| Qf*+zZ#xԡbO}[βf'.q/l[rDx4]AƆhLi6g055]p6}1a@-^ex0`>[QϾ|hVc֑:^2Ch׋SJ#Pz8~*3{ a~!% nt7lko.NX!ՌN5\v^&^ij✏@{"2:qVDyCy蚓0H6qsasL$^00nݩ\)6V;UBH@0Lg>a. #,pn.b­] :F 4V܀njJߨ TD+ja@lZ""H$Bg|(0Bp1۫_,^W c"b6u06BFuC,{pC B9>pH=6I?,9/(XP,0!\&2=Ԥ>G_'9RO~踻o>f΍UL<&b(T2t@ > stream xڭYKFWpCXRتRTA*J5=,Z~| y&DJ6Yl&RHҔИOɧ`[,4XϾ,x@'B%$Ű`oUZe _ O'9bUNB L[e,{BdֶHYBxHFZsHo,<ԻCmUPO:%<>ԏpGd7TVUfn2""p#QQ< !hyfl$4}j MUsuuO92S weO>#~P"Wz€ ̚j_ Cg@ xRmHI8k|L":4+Z_ ߎ00@AE@VLu k,6(B=-]3inmuV oF+ JIΞɠ~j/fYl$ƥG3B3Lf hUZK-r(=lQƨH-rf֜,/ + 8Izi#ٍ%:`o]:x0Ur+0b֬Gfyf%6“hfDM("ڵ ىmYm! n=`e+Z_F,BXnt6\T}z4eD[m-zݓB"KAYL%Փv<'ژavSu `i (ڤ 3WЁD){δ`C@T(]lxa38g+Io0l`>}p198]9\C&|!I[G5 utaM/Atdaڌ99kIgAΤ+ c **vP!+G֝Vtfq2= 2}@ ghqPjX_lv7k~x>?){Zà.sv웝>*-qbqnd^,wd2cڮd2n%v 8 ZP'+-Pu3H*hYL/>M!qI6OT;d̾%K)R*jsT-z.yԉ d>e{NU*GrH)^œz|Ke1TG |śr} endstream endobj 1867 0 obj << /Type /ObjStm /N 100 /First 976 /Length 1980 /Filter /FlateDecode >> stream xڽZ[[~ׯuI c!ثlLh l}jIF4ɀZ}T1uTZ%j*ScG3“<ꍒT5=ix$,SS8l%ymq4p?.)d O -+Þxjxc eP鉋ƞSb!3 I[$ |#}VK(lM)$.pjjx-h{ lc+UO%tq+ Ӈ/x_{ŋ[ǻXeuXy#էޘ25W0p.{ԏŋ|Z[}f51=[AMZLVA 0|ATqBګ%Y_0l+H_JwWuX ۈ%7ͧ&~|4Tjajr(OՅ²Xd`\z=Qo@xGb~Fb,l[F.-RT6$+\\ ,eD3ȭ}#J-\q1<1#3z'%ذy\sgDDLE1 }NAE>y0q ;>ϝ\~23z _;gB 5EO@e yG^NQBQ(U5S dӿ~[꬈YT&3(Ǥ[TCp~F>#(e2هE]pѧ&ҳFikCq6kjQG$+4%o$2eӡj(<Ǫi"GZ48g Dwj9z&MS11Ed{iQ@B^#0c3@1S\TVcBGh#icMT;TIÊԦFQ$L;] 1f;2Pm 4X;LD{Qi>8w%=kK8ו\y㎖?^~rMΟ! Gv˄6nb&Tv,^*" ?N%VNz~s|Zdr`?rH:88sHߎ:(ٴ/4fYjg=1]Pjb;b}uV3-FmV3sKL{C)vk>굙B> AϦIO+דniy2!On] S endstream endobj 1968 0 obj << /Length 2120 /Filter /FlateDecode >> stream xYKϯ020fė(Zdq:"B5c!J9$E=Ly<7-PD|xpi!eH%4nK$L`LFʪmrŕw YEȊ+MsvMӘ&1M`5ϒz_63{,b„^dr? v(ʻP_cRHDV˕:Gxqs;\g}m``?}|;T맵xꬴűqlۢ:9`>ڼJcB%Y)6]Y p` hP}/1I" BA!@U|0C*T42vX0 :JcFJƈ`K$u_c*ʼ&Q$Ն3Θ ݤfV'iegD0~*+f<8sa#O d]l\W9sWළ(UtnofL鱃*Ĥn YxPu|{iW TN|U]eʢ5 ^3ͅݷ,5GW2n<Swa[ϰB%T٪ΎWP>z&feyG>;GX? 8/03b^`Ym?sR?' ad+ݾi(s\5[@5"ᎂʤs}g}^=ʒ͎[Ie)dgiM^ /Ǘʣ=T z׾LKqܙ@yqUAMcWnc؇VG,Ͼrq]nB3y}e9>sdeiug7:l=ܸA200>:;jq_yyB ,OuLb $Fd[<:DۭPh$Jз)97'kp =ww1f*vqeߙpq:adaF?a\3 #DO%IREE߶=y":˅rDPtFDF<alr`*$D4ztʗ|>7ґ+dF1wɝv>_MN / IO4 ¨B+f>Ow/~p)Iyư9R`Q9m]l[!HKqSXؔN8oyQIMϵPw8nt5~w6C +2_t.Mj[pD "WO0}<.v]pp d:]02!l6<(Ganўn GCMB(&8FD1b=LC~\CͶ1Eܗ]Qӯs_q/*!y :6ۊ KT")H+&n*)&bЭO<9x^./Fp,DM&FҚM:0n4}O2rwi983jwB\a`YHԒh>&~wMVw$Q/nIIӛIIc3L`-hs\0`^~N$&r`5)/}LT\2{w7ʐͽO}";F99GqWǵ+踒~;@lyͫd$T9@+)9o 9]9F9vu`sH:X,{ ҄pdsR:/lК{MHCX';u}x+ 2ͦ&WWǪ;lT ?x;A:u_hcDN,< 1Y|ŝN> stream xڵXK6WDj&s nP@ Akˉ YZXrwԃ)^73㛻a+%[_>BQu>wØ&d2Fb&ubTmٹeEfqh)VBj`8h7)vNML%NM,&on!,1rهs]vp%DxCQMTR 8!fNЮ^r|<"EP[jG/)ԭiUY4=1r#hcWɣXc>5Ҕh>#ˆ4{TB'j1=^Bs!x'p+A8`f,fI0S \Ņ= kD"VH*DZ3+.̩QK'rY10He`xFjDJfItfV0f`\ws2"eI~JRմYHj\}l.$빐HFx,g<f^eumc6":(|TY>1p>؇9@o6*yQ7aÅj}e{E-7>tb "=RY"A;/?C3I~e;OeF3將}N ;^nôi<2A+ 7̔(>q e-@xl'mAd T~Q9'B*$5t y8EYvY8 8?hᔖH~.ڬkaݞW7[~Xoocl>$q¯)XхLQXc<ȹ"& s;?c|䧨܄i ҂KB5XS@<֜a?@sk8uXpX_Q'cO!ӐlC}x3cyOTNJ ߔ#F9u0W5 _dcXs^*o1/ 1%RH{TX: YplHˠI9z¤_2t lbض̐I ί~(MQ}鞤D*sBmv('Mr|\fm`N_,H< 56a^ h`dr_diu3wY`Tu-] @L"W|b6j| lO= ^ AS>Y"ICu]б0y+ASymzJEӞ0"0T 8[aV$6`3o)Nyf @N1<8 wU ]G:CF. 64 LZ WU|λ-Ya:|[!nZz$␘CքIeu^S,>#"py#|lŕS[q-@Jo@J}h61/Dp~F.ǁq21M3@Iᖢ¶; Nrʮ:{^J]L5C?ڕ +-J%74` endstream endobj 1977 0 obj << /Length 1712 /Filter /FlateDecode >> stream xڽYɒ6+TX:0*.'S-FԌxӍ(RۤrXݘOw? :bJl=RPG0¬͖?Ǐv1lO+VO3|ň0:\?<0!Ws3.>nu۾'h* F W~7Hw#(ݸ7{X~gCA +tU`C &Y0(5?W}M%3aHcl,߷.ǁqJ4 ѭlƏxXr6aG'S%upRh1xIaLP٦r=R۲ڬ*2~&XY 4`<6! JbLi )4'"396zqǮhhd Uzɧ`ʎ1E rjwΡ&E\TDqh b^k ag5 м0h|rB#26‘!{߂X' a:Rfr,ZYtWzaLOZU?}S |<l{~o`SʷI IFLg ,`~ݷ 8ZZKxΩ1 _p^Dx|4a6K(huU6 ; Z[~Q-Dk5޵|9CEIu@B@WBZh}›Ը+E>z8O~퍎enIJLq3!ԧ%pp_mgE-$E+W숸(8Jݞ0wV!QTG+aA mymYRM,$wvY4vQ+Z-vաtPѕ2؈/UB˸X_&<[dދNw.@,W*I@k̭$6Uk/j7pT o35=˽1)p$Lu]LP/х Ul K?"j^h1zugWy`/ G^A|]c>W'`wT94%g`XԱ,:4T Gho1 TjcWP M HuI~K WGPow!WE YM=(eTAqbp 5N̉A'lq%aOT@)mk;4^*m~;.8Oh= Ĝ(3=Bׂm)طf'60c9D_BF"&S>-:~vWnd5IU35=ǥ.$\6[Y ja^ijv/ iiU y`b: goF^ QV;nFΣe83ߜp[2 .oq" נ"#,e N8`׻_fE% endstream endobj 1981 0 obj << /Length 1619 /Filter /FlateDecode >> stream xڵXvF + uN4=]$'"6邒(-M*$Hb|I, A.0g #nfB!,L*fϨm< 6^2TE|V7wq='Q {P9^ꮐ>[Pֳ1Sڷ `)a#sc٭†6|G}ⷎ|`V6 R~+*mѓ` s]]^Tu<ƃ̶t+WvþRA|9_1<)cPѠPBI#c6zQ>I> @4jcfvQT ՁPyUM⎗{Csǣك0K1".` 0 gKQi;)'>M gu0-{!fP)W>4[=gB8"uk_{z gzadԗρ 9P?Wt^m!7_i:bD&K}z#py*Tfm6Xp ΛϷoF{+ endstream endobj 1986 0 obj << /Length 1926 /Filter /FlateDecode >> stream xڵXmo6_ad fEz+ !MņtMCvjLMI*O[@F픬gj\*KP^H=ٔ$;$!{ SV]O |UhE#ע ,y?~_UUoDC4`|-13F1p1x0[z+|.DQuO5@HLb:KQ;$ jpfW.ܵ(ow]JU`Le!%eXKXw9[@M7KIe])=] ݅Jp< LldfONZE7S6 nlm̈́e~y>8c(DkYG)gMhPR.Rk?39$&dvo0=!4Ar)KQKHbD qT0QبY0<-4y74FȶJ,--*й.{/s~[Z]y.ݑ-!H `@}ȐKyTk҆wΫF|;%ޜ2kgOZ CQ@>x*`?CB3A~.M$M0ΠEbG6|zb-Ikca!,$P-hҷUs% tf`r*8ːT`Q Ѫ6g]ue7}ƍp8MuQ^H8^4KmeO[W 73_,'VOjWԿbv"@1w϶h .WK٥gNݭ >AGr^vWż)D<7|  3hr;kg.Oyc䴀R䃌T ۷ѣPjs\W %έ1)l$XYDKD ۈ?fjX/(E(Z+ ^O1T:}$Z1$􇺊Ӵm XJ wLwTN@Z6^'~);K !Br5B;ݳXE [ RAt?FqVR\{V?#@yh4`P=qëglv~kvI *6zb²x@pbRxWD0E-faQ65p&(Yc5̀ !?m+-2x# F4C=zCJ6yMw尳6;rXw\-;Da e;8;0h/h2 endstream endobj 1990 0 obj << /Length 1654 /Filter /FlateDecode >> stream xYo6~_a2`"_* -b.<`XŖcX;HY6n $t<}_Ο<}#JI,W#H(H*JF2_O<}Cu[qBE< Q4"& L"K&4ȍPyr RyE 4$)O@pGwB$;[BMaDT1KQaP=>Nu!G ʬ0N afƃtq_K#qPB NNn O]hȈp.Q} .wuf78ESV"*Xffl05iat|ww7>XBNff 1+ I>iEDs_ecXՒb9d1(<敪"s#Ż|dLQEC[%f&ny3""}`#<1pl)jYQiDՠOGbj$#&!ǒ =>7i\f&jh;p/'s٠` HTtBɌACq;C5Qbc-,[|QgI6n(|xQohuY2 b\7uɜf_c,4ŝ:C,0xʍQ"q8|+ nuD!V6_}9n7E痍U#o O hi7n mz׈ ^vyn RX_SP`Ļ*Ζi Vba{@H'bMdN:ni:z00u"l48 yd(9!1ʯZ| <hxdBN=iJ@Ⱦ9g'}9d=מ/}խ.0n>$2}x"]a>eܖ:<7[ 9iIC?! rUPRs9Z?^W>6ҠO2cӆ DRSgJ+\xyvf~{ \Y!s|K?qPVN_r % >eGiJ-mWP ߨ*6x$a?X& D$jLu%k,q7xXx\ʑVk<#@| =UU/H0Ch}BgL==u1J@cnc)aptm쮡ӱz̵o7 돍1|3y&Z ]?H endstream endobj 1995 0 obj << /Length 2110 /Filter /FlateDecode >> stream xڭYݏȋefDRMPMH6@=hmyW=[Z裷_I}7ݛosƱXWbaruwX>6Ow[E̔Ы63ϟ6;)v}mxpB (76 $Zx"_hwNFV2pw+[SѴ0s*4rG $RaP >nP\#>ǜq"DE >VHLҠ8ocGF5; d?Z2 άS2YP(v}q}vP:;i¯7&V۷e,}˼;$cQz Y~ ytbQ3eblO{"KtB:LئPrYT0|_N5dx6}\yl,\5ؔImKW/tJQ6mH8+c﯋AW *ad? KFS&W8#5<2fYN!0m"<.f482A֙,W@cE F:g=*c!} e5o*"M5~)z+z6E;[TdwCN}u>C"yo7cޚ(E_!3 G6©uVP@[ҹ`BWVtXysyk5RMO"Hɰ Ž dnԇMҰ (8Z`wR;RѵfJԮK1)8Blw PFO6P5-՝W>_8S2U ~pB:.9J1kZ Bk{ױd]$ep lB]<%|4mJԹ˞(m5PMaѤÖ $ kЂ`S|$I|D }D-gRo}Z!RN0,ۨ]8rKyuK~x1%|ZFF}r] S:M1ܽ*e+[--ip>*~v;?q{o9bLQ=Gc8O*rBLV1˶8vw2ik4՜ շtIUi7gLt̐& yk)4磯;D/z]#PO`=ץur6b't\wR[,شAN% {dgW(N We\}gd>S4}!2-.)Cw\W6Sk^[ @t Sy!KS稸faIU>=S#ҷ0o'畡 gP+\ *[I A7о(^q8 A8؊d2j(VfrY:'mXDWORts ;30oϨF>p9mi ChWq^8̢A[2sZd2eudbP\ UoVnc𦅎: kQB3FzOAŠǚ%!d7߽?w endstream endobj 1999 0 obj << /Length 1740 /Filter /FlateDecode >> stream xڭXKs6W&j&  Ѵi2S@S E$XLN o]ͫQE2B%,T"N8:Zl`CZs.T>"<n5[N(eO k!: 6ۢEFn oIg^?S%AQjWi&%EYW7jKߗu%QYk͸057L ƪpX'',43{Q/ K93EBO!D ,I%[6F鱫p7Wp4Nǎc74Lʘ47p e`!ƺ|Ń)Jaq3)k 8$̖lc>kn]lHk (7ͷ,-KkkX85)-a)y!`+̜p~2O+ZWxT6wu'E!~qܧ]lH;hBy`Yzh)5ayYZjLYHۼ}3w4L'ޥ)s0R>WXĒvl\&CD/捈(pwH!!"$@q8!wN ]cQ`EӬ:Mm'C"T,і92҆RӆⱣ M'=5m"(;urU?\ouG 8Np,cest ( ېw( ~~凎@{ {v`fw,n3\R nI _/ xpSl 7iK_] AuMic(< D.o*-yi]AvUȇng*h~.uki֑g:_#fīpFO}У%$ [QXR@*X)iPy%)Z 9p1dGٺ; UOUiLH@XMً@:2ft^ 5~^ T}/1 hHRɛ4).>:3/fZEaI_4v4ufv)) i|ճ^ (:sHҔ֨̑ *%tQ;f ,EG0T*e-KI82wρc{8e?r~`2 1Cow/2}=6Yc|&݃"Ăy<z{) E"wsaO 0W-!vx`IU #J Χ_h7o_9/nVwLA|UdO魡#b0Ҷ$~B%L(墚7f;=븄i**1j譳G,GgX<0@eXIf|G巫m9[$$ۚ8~Xmދs:1wyINk1im\NۊiOsZi^(lSI1<4#hT8Esp;#j:NrxF9~$dp*Lޏg1ANE!XҫW& endstream endobj 2003 0 obj << /Length 1442 /Filter /FlateDecode >> stream xXKo8WX"%j=4mŢXlۃl+[JrjHa>N")q8CήބR &lj'IRB?-'_y=>ݙT!9S:qY%Sg3/TuCg=nE\gS9-8?ΗبնΊ(ꑐN\B44SvfqH #k^wr :|P$SRc#V٨-qUG|i7*zf` "LCgY%&|BuАOga\.| .@!* >!mS!xC5o<&ǢXFG%%2J@ηsVv:Uh򢪳9 I$fA 3PS.<'UWIآ0_ &ٺҪCw7=.3 #B.z[L}1/E#e3P0Yƚc|[Ya~p"vGF=q6 6}$zс:OV1>'"CiG\ۅ#- o sD}`9/ml`$jF5鯅>[*ժT7Gb>I9xw{BW~0GS{Ie_gK%3gaIIt7)ʚ-6YAm~x!E{4eDrՆ̞陲<"I960:4>ݝB0+9OٿTBH1_Q׊a6OC hpj >Oz@My ZܗY7N&:̴)rIamoJC"P7-^ƫ6Xj P]yqQp_Yة*]pLm!Rp k]ͲV{lRS]*ɔ )2B5O £36NU"Rf6V 6e 6ԯ VL ɵ{'H5zf-,ゆ*4=A343W3ؕ!槑2& mK p{xݶl?" f}FFe2bmu7HEt7d#`za6x>7NI m`I7EpT]W!FmBhm[6I<};=9xBFUV't [HUh{VN_KHaQGy]ZqAqEfox}C_&޶Ovm̄C /Jjx†zCGWâ?C󦤶gb3 /!}jJ@-@Xs-ZU> stream xڵXKs6Wfj7;xꤑ-L)Q!] $r([듈>vWXM0Fd2((!1ŠN_M5QAmm;btwOncze`ɾ29J>.M5!E0**E,c[{6 ]Ŷڏr5S9t HUMgdFh?'0)IMfs0C /)I4C&yZ'1{Cуi)#4J#K(Mqg!_gof:SMnuyXZpT%N5@=z&3L`zBL)Nm )YΟSEڝ-VeCO8V~6گ56:1J]u,<z> K#}}$R;-?at&o7~d;Gu6< P;@ﱅFIVmj۽;?hΉbO/ -X2E4.4u ] 9HQFAh mݍ.oՙ"Lu|=ů-[;JetL: >Tz.Yӑ 8'GLfSubn@ޒXW203Uu&FV1D?OBr tݿ?}GB W_Gl]KjYuue7nޅэ吆 Q& j:P)J'^`}LB!sb|܃:P,=&0L70Y;'OOO 1XaQU\j+ރs}{@`^b, @[VKK5k}{V&oOI(uq8Zx>)R%Rq>+F#F%┝1~1Fc#xa*(am~El~XOhY+;Ŋ@D$fU&d\Avyu Wp1Cm!{mU{Ls%XJAb3y: cНVZGt3n"ːd'(صp4f@vG $Cp>땫_uBԞ P}7ٻnivgX\'c%J&eIӟ.>zȾ?S!(/VΠkD#KrU McoT!E eZ ]{A/p_ۢ%%UB3H}4 6/+ {^1ehsK>? #t endstream endobj 2014 0 obj << /Length 1904 /Filter /FlateDecode >> stream xڭYK ϯQsK&*ԤAmU%ǔ{KݳsiSw~Q|!5+l! S0nqi+ſ?=+U,s_cV(ZXUqDt Ëu-kkf+M`/.` Ztq_Zgh>y?ORdOMMk S&6>r%o㪞 ɳ?W1~^J/W &`TOc,4ڐ_ 4s%Ρh8 tqM59EލMO|6h ?07''{i$A[qSݞ詊0O~! qQ`&W%"i_0!=h߂F94f'g:l2ٽRChsw:]99~kZPyi X7?`tY^ \T5q`"=G;mMVrI')|OIL_wug>H ba>i,MCGx0AmɇҊ,5Qo%aʨ`xV7- (.`2_TYR~(2~prC4u (?.WTvGgt3 O8] z s! i1F߭uӜf` 'w>$ bWQN9>O9Iw PmbFmvE1k}*:D5&ĄD(LBcE 8À< ՚*2<3&P0i#.$XԘ<5 ?2م9Szp6{Or#ֱ*MٖX9Uo$L7_+lȒET9ǣ67sW} ʊ+9V(7P2דT!=SbҎu$6 u|z-U$Z8ll!54ƅ3655[\뫚.D [Y {׌TTF|`{w1V;1bFEflv3bIKu>-KdFc$W5f5IC{uXN\Cu:BA 1MKȧ mFM8 zLxr o1&&fs\@QY=0١-.w jl?tڄd+.ҭ2&|]PXDvSh.Hr(r}9C:(RLOD^.| cP\K3t mQHK Aв"y@0B^,sNjN(IQE'h\V Knl~^S-|'9kr.._xߞV/Uh.GD'].w>V_txҕ|%u endstream endobj 2022 0 obj << /Length 2058 /Filter /FlateDecode >> stream xYK6ﯘ*-K6IeTe+qNIPec̿O$@0fwFt_6o޾ c$Slo4'maVlv7ۿ7?}l~ѷkjstK XcZ1zzzJɐH-nֲU~ ' =_}Ѥvz[bR…&⥉afg%[Ge1׫hNWRL!A;Q뗭!Pfrf$T2PFS{QF!C6!K)ioACΈlpzxgU\qH'Ce!rd3WOTOKt39NCp*9myXVr81 8W8k/!PE溪pkzOdZ*_#.C(ԠwD%1>R2o'l-%x4DQ"VXXi^+_5+"8Z2B4c}5<""gOת²<n`}%K aVͶ. C^yweկUNI6'kb*^i-syMm_W0f?SuT7Tl5Ru*ܩ۰#Շ;4CST4^n:>/.-򝧻P+cqP@9g'lߕUGq=G:NayXMYeB 07`u,dF*œW>m[ yKg;D,pB=lrѸtgJiCNFK&x#|d"OS}]l<{Q?> o ҝRR }CC![DqM_<=K@7^6ty"yI2&t* Qٕ:z!ep0{`oMv_c!ND:&N& +Iebvw2W-d9g2$GX/+))V͆3Ý> \[%7ZpݝG#xCr)4x胋JO=em[$̾`%Ku%*Są &$< x)/(cq_$(nR̸*b&Mѻ ŶZ }(@ |{*/|QCsoO8]aģȓEλt|;2a a",9;`% bo&@nͅMMfM15[0g7Ftx>'ϏAswd )&`HpO`yqgL JX)CU.j~z, df0?^2V,yKaR/# c!56gHzwtlAߺ0j agYh=Z7?m J endstream endobj 2027 0 obj << /Length 2167 /Filter /FlateDecode >> stream xZKsϯpDME eJ[6ZfX(E$ή}؜,dn/>$JwFҔP~ܜVkIeV+J]J??DXFqLe\n/u'XA+@A>}&m'9ѹ-mL cD+6m #Fک$UVFFja|'Peh˂erؗeo/TBC(CC-cD x1<<xnᆸ 恣cy)&20M*`[Lx檓jWdSƶAmݻt XFsϱGEla9QHQ@.|!fA]SQpK;͞3qL ՖhVR6KSYP'$&lRq]z>OI좠!iDC d}Y8.fv9K.F )OB-$dl믟>#@*$ 7mՇ$uo%/#k!G?jXQ s<-aYؿ_{nhH R5%=d\SObsKZ"9!qs3oS)֎b' ;|K -H6˜(F#s:C:~߮HmИ-b }1I6GqD l̍+yhf*9K.4v&`X5q,s4heI%cS+#r~F6Uԙ '7O[l9arA`5?U ;h _iZ}X;[eHӂX#"%Gj} +_m'!+})[3NJ-Hɐ吒44,XUh/'->'; ;/j71mx|ó8X@c>~vhcͰ/0exhD6#Ź/ʡ)'6͙ cf%%.BNQ!$YfcFšˇb1_}c[F[IN<:MT)da⮣FwB@'T~NHr.6d'قE.d9-71yu)F$0%gOo󻡐ܦ3\)p~%ФYI)ԩ92[`v#2$|Ͳ#?@35Xw uMIKx. H{nH&W|" %\ %9d$;(V0nT ÎJPCau >4Iai%t-879e/[)=a5uKla &R96i`R3zR1u?c1Y;"EƏ8Ҝv;<-Ҝa~}^bL~CӰ75ۜ z<; xáɧǢ n ){>*8Q529duF{!\LlrDTB7`iMMpKf?S 77Wd6\Amh.}[I>K7b_\ 7Ǫ..[?7{(s> stream xYM8WdO=evS[9ɷM1U 8'- 63S{C# _-w?R=)lŊHf*j>[mg̗0|`zXx.>(L8WD =ܬ9 TΟt&_&bhLŒxgUWz^Sgb'[Ξ\So,b?;:+_- >)kUrqQ}d+-R2GH{և!wo~],U0y@vʜp^cWxH="LK_+o>k EcM J;dns{w/j}4#lc17DRX`pх|dEF$ IdתNoq7/F'y&-aNFݝ>5m }<܃WuˬN.sMLuŕSPw:=Sh'k{nR{ӏ(f95NP^ %gMއi%5aBt1ؘ*X4~U+~dC6;sGr sN&)CG?)"%Ⱦ"&eh0qRT5謟L֔Uٿ~&jt,A*Dz~k 1:) {~,(ՋNEr(F'.IZixLHZ{6#+3sӋv{›4 Zl *\ Ԇ V1RodWrKDc}50s4Yrtޭ1^/ QWK[3R-B3s͓}lh(hl+pD$uYM^S<\ؤ}ĭUfX4_T pOs"+¥V]={6hyu9{r 9BF5QB//1Ie'm~>7 )U:TV5lȂ٬b ,wT9 ϶̑ґ)i: A'54;ݵb*yzc=egWXځ[p ؘz>%X.IJmx(c8ayJq@zf1l(a)A>î3`?; B1i5*]SDtikND}YP[e!>߉HvYv:Nr]\7y>P2ɊXL B'K5<{xm Bꞅ\N 6.QܕǼuUX쪒AuU[xwG9^6Un$.`񝇬zotJ"cpvN =z [_"(\Մ |{ꟛ71k mm} фX鄢7>ڴh{X첢pjATGxWc}fH{FY۔`|Kf* XjO׹!@K!Eٸ_ٸMbVpXk:ՕO_A*41 z;R?M:X}"l.דfԙ~K;_ڙkF/hnu/-C,.8):,J?xK+@B1\AP8RyX*ڋOp9Ky:/ NMuoW>-m FK]ʏ8Do!O;,$ ao(nW<R(nA4 6ȴOy_AQ6 endstream endobj 2042 0 obj << /Length 2191 /Filter /FlateDecode >> stream xZIo8ׯQlKe,Bh[q/Te~}?.ZCrTaN)>{͏FTn7J}o~$۔q$շ9g"QAAXN#Fd6-c)EJgutqȣw.;><-t2hn$8y1\|96@/{42j"Ҙ]|@a(.jعRhßnP9j<*mGIFg5Irj|9cTU@Ѡ.İj'74LiyapL 6Wy>4MDNV\$Aru5ŃCӇ _~hu>fHAϷ/^5Ç kXnN2< ǟb@xMXeuy kkk@S:WTՌ +b|ϒ4]`L$٥0qa-|$j>1OY|O/oc*P(qݔZw`ήg_ySŖ,RK@"X 5)zOXE-WUUn}K0 MQUnb<$b`XPd/lt8jTt2q愯!3jj( D_%3/o:Mh)iBz \=fQY)H1`'~N9IcA?P' Pؽv\^f $d&L%99#36>j NcBL[ieu9e&:̔HhziLҙ3/IXhͼXi'u{IMԚ.ZR9I RvH>D;bVd(H84)N\qr'S"N吇y-9G!6=sx ;3EjWmy.HFR֧漨ϋPVm\yt #vUK(YE&Jv 1dEVɊ: 1, ^p%nM+XsXKڝ0;7Y'HX 'Wvv~}6zOL{k11U/nɔ%馤]QP W M-:$h̆47 A0f?}8TЀxd~ۜD?08DMonƣgB7rr@yfP6TQYQyߛB7o_ %FZATˑRB^y8b"&`̖E=v(6N^;8'[ ŐUǃݩ L{\t%Woi!G;-P0)mғ<> vmiXЦ[~(a2 00TytNɄWJ' HPkEo6;lav1jò>~?ZwUs5b`+Øy04diCٹII͒EzA7DjxO*7C<`#޸c9YN-<0CzXwҞn~^hW-~Gqoն3C{ZAۺ{uyO*Ky;X|R$i~nIv5bti8ܗ]TfO`0D;$ܮ5J,C!GW>ewV]!miX2ՍyXu'Ō׏{Y> E mWH\ FIRPѸ I Sj@{.tL׻P]{9̌@rz uSc7ȂIR@r}|>v//6p׀﷡L nmY9-l䳙89'MҾ%h9y ["Hawn< endstream endobj 2047 0 obj << /Length 2484 /Filter /FlateDecode >> stream xZKsϯБxJx'䰙xr-6k%!%O7> ZZVrF?4ջ/]0F|quPPJ3ŒX\m&oW̰)7kч*MUr:9/WCWJ2<==EGobZExڍ+!xu޿[K%ZkoSEUvnΖ,)8[$y@嚠1GAa*Xk+ʿζ[4"X7ImKtdIgm3>IVn|M#=,ݢ'3245 (q mF;L f94'}?Xfl/ؚX(bt̼%8ȠayܯPpƫ] q4>YWEiU%`We[[u`_l=4L7p*ܥ7=N%ՍvbHmQf[ -&sCPq 1}g6_{sT@Է.4DC IE]laaKns{sToڇ[a2 G @Rc#19t »ƪlApXf)Ec76{}R:>euXT&ad!?}VB>>?xњk'}@baA+.qYVQl U$gH žBIo&B#ahx%mu%CCuT7ʮH.a)%uۼiNGb48,42MSHhImK>h4ƮAfJ:kf Υ dK[דg Jv&`9\G+8J &_g#Ў.I޻bCbC"&fSK 0V+ ~`c[@#d>65*gmt_y7AQ{>u/]p֣3X 2ZuAz{䛎\*büa22D$P}_8Sd,URZ"UjR)7qH$xcn܏.i+R>MA#@, 8ۢx%͈H%QDK~N[7l]xms" X]HEԯI -Fkm_Bf3,H`s֜)Q.P5t!Yʈ ,! VR9,3|Y㈩~ߤt$AM\Yڋf Ȇs Fn,[NbU nv h4̀h6q0\iGuC3>DvH tu&6)`b؄ l<D\3S8xbcR$NS' W_=Jq!J? qp2XC!8ot7$6M6Y_g .oDtl~ Hf jB 3ʇϓ@&b4K8mIy !Xqʭ~[F\lrEt,j!%"B: N{^EעST؀10'bZ{p șI[ү 1𙽅SiWX9s [~wU4ݥpOhi(9d9TݶE޼w\5/Zӝ3Ől Is1C> bBP9eUl}.C;p|)jأVq -Jh:9$'!qsD>?"AiZ撺5lٳBt5 4m+U xfp89Vm(Z^p mT'4otSf/;,J1 aXb3v .E0SѴORny\0ı-05熃9+ieH[U跟KΨ/wd+;F 2UE:d۳iW[cGurNa  > stream xڭZ[6~_# Bgr6JRu*5c*\|dvԂlǼH_$ۻcDRo IB{BQm?&͟ " pħ=u-r3{x%3! Sfät Keivڝjii`|(x->rlso?ĉ\) P.$UP ,1e@(3F4>H3J6VF "LD jO1!H@5LLP5 b;C㕎cݥefԞcTC@5"LL./ -1p!-(YDw;o<3&HJaD Y՝&D5ѿٝa$Ѿ;ۿqUz©zuU9#fPQ%kZLM#[c;by (d?:<&0 Δ2X1! 7 r:bREoBH[nb0/u9d#{m)h`Jnk9 ݔQe+zE$VC3Fj(Hj&+(2;sֿJs*z`IFp**Sm3W. ]8=csR l…s <=n oް[t4?/ >8:.2+Q,Y2&յ2_Y!)Nn}{OluӦuMFzokC>a3 hlnd +p>7yVX5Vy#A1uǴڹsVΆaDѡXK06#,סeK5Ǫ_fc-[~ȿlT!)6a}p>dǣ/u( 04ZVMk+OnQ7_Xj C@JuCu`!^f9?wupNy-w$s-iE&%bBGDJJD7ߴuU>V! ]L`Kaw?Ru@diשL.k/hDC(rh${ endstream endobj 2061 0 obj << /Length 1575 /Filter /FlateDecode >> stream xŚr6~ . Nf2j$ ZmN%ř  2!'¼qp>d,`9닏q4?d\g_muƱFPKzʑ4s^}5 A}FV+GDl>N=*m+ <#'F+u%(aYl)U|)7Q9E;}Z#^vCy-;ۗ61`4d,?*UUjb1@=WGs~?mf&H_>q1D$y": | M7$jRO{Oz@GpK:"mv6hzBU<1@=DM-VտeK7e2:v{81&F CDth!b@T=1%1 N嶞ߓqu2_>̌HR ČpgD3* gif''u&9Q2i>&2 9Y_UON9 NЧI{˨ pN1ʡ-B:' =:$.rWo͢>l_S0R;ˮhy]q:@T=C||qmUۍSJ:4Ͻ1xC9J@:_R *Jj;Q>0->>viv ڮM1z4`1ffL8n-3oM PҤd&yOS(O. M7>v0oa$',=$H $0$=Q Αb {BCݑ#:qÙphb4zBUG"i %4%G֣A9ciT1hQ4& DʓKciJGTzF@ʌ:y0x&UGMzh%qR('LD_@B.W'(1aw ;#<YK(ی ՓqY|ʞji mf`[f:c"k0-3fǤuWTQs *xgB q1f@=3x*2s`R֠襝_>PH J|vōvrY0PzU=3Vt$%O0S1P-N33 Yb{HB!Qg^%_iSP.*mʜa"Y e-+]uJ'hyL6yȜ9C!ҮdC`| s3Ӓa@qjH]3/hfN"o[12ޗbCŝC<|Rn}z.բXCv~`F`֎pY=WKޝ&ez6NȜZQok<._8UyC\W{ihanoF 2e 3qvH, endstream endobj 2071 0 obj << /Length 1108 /Filter /FlateDecode >> stream xڭVKo8W=@%B.v7@n/I6~g4lrzhbia?*K(n^eVLIkGb!0$ڗBr*~<]|Q{'F9J$_gOɺ~KE4PpwO ]~$Wx'tg#K|Ubl'%$hd83s!=ox,\EgcNM>c]<&[ARAjhpWp^~@LA/\U`W%w N_#$⅄|a ӝV4ADJd0&HhiB[28ˋ10L@k8VfZ@ħ3[%<޺bGP]@poP ;#87 }88Wd`IqH:"'-h/>d :vX:9VNa4!pNjr9 endstream endobj 1970 0 obj << /Type /ObjStm /N 100 /First 964 /Length 1798 /Filter /FlateDecode >> stream xZ[o[7~ ŹqH ( [ Ik!I`+#}xxs1$굧%_K4kbDwNMxm=)bŠZ-y\mo%5 Ʃ+6~$ؼHăZCTok;Ŋ~4VEJIL `r,d1ŵ'EENB͠m}֚O is渽DT3<}qPxѦϽSa_0k(s/7o?,s5vV?f]1xǪmj[iǴƍ+O:~ױ'jRʝѷӽΫꦊ*.pwMw< "*N,;2#Z^LbMkI*:I*3xhCdBm)7LggD@A(C,Ei{~"9ͨGaD.bhObXl2I6g@=1◧;x endstream endobj 2081 0 obj << /Length 2183 /Filter /FlateDecode >> stream xڍX[ ~_quO.:EYD؆I/)Rd=HES|tȋ\/6^l))䧓km:I/֔8v'O\{=>w͗]_hQQEA>G>?|ŋVnPer 4 H̸R${Wf{0ld߆|3Mt7T ;vͅ%X(4k yh6Wa%I9NjI+`ૃ bP2|lY2 aŚ0Rq5Np1j"it[0i4ZhDtg"STV*NbOv"Uo|_5J !F:H4@ӬX–AҮ)((ӑg\. јiU#&d@'JF 3oU}hF_R:3CIPW7HހU1$8.MV!9L&HБePW P Y4U>j3Ǜ^Im58gfT>]>%8 Oe21V]l K9 A*%tҞę! >AVg/~Wڣl(sZ+'PS É5|N ɸ`zSlhe&ek@J AYzx%&msL\׳mW YڌIYѭe \<5 'hm3Â~Y`9^4>ŀ(-?v[ߘzDZ[_8PMC'N_w>jSDp*]6V?zf8ᐡ (:c(;- qNjf֞p6f<о%DT =c)" !8냊U ˡ0 Y3־5`|@Y-!])w28TJ.g8dSNwkq⨛#Jߜ2}h U,  ,0!ACԃIgw7s|A_/9)EQyR‘8)I R^œb!B$92KOBKy,mRԚ\? o蓓kjڠ]cGNP)ofIMEY`'U]z!B &wCY@  6ԍ"x9F,1lzX ~iɞAbcDyAεej͏FL /< nNG?a+ 'B` ݞina'lY|sۓj:I3T 0 ̥c.ӤuUG`Ap f;Jl9NtGiDf)xoz:.ta^|c+Q6+2|M;U Td"/'UV+ YX8ZOڢ\l}F`=/PJ{O&EJ򙱫ay+MgBi%{mmx#dڋ fݵ涾TTQE~Z"]LOᇸ=]oi!?_j{$50ezgUHbީM~?%/g&fRe~wVwXbp>ǦVZ ?bTX=IeU?xp.Je9!Ua* F8Cb/$b!aʑ(PH:Fy9WM@g/G\sŜ*SЬDdz{bKtQ{nqv~] endstream endobj 2086 0 obj << /Length 2396 /Filter /FlateDecode >> stream xڽYݏ6_'"E! áVc"JrvpF_^y-{!9Ǐv޼ao$IEʛ6YP% K">n 3u]Uf :9xi̮-zm`ڽgEf1#ҡiM"_lЃ6sl JH/Wxqj;U9ܤ27[JSab_,%<5 +ԶFxus?4zёKAhyNҷ;]F o]~Tv&`;AG;?Gů!^* q(SEvW(Z f2о(Hyӱ@p$jzj#Dm郧QY<7{iZwd^쀪<7 l;㮙;HyflU(c<#NL䍓0r.5gd1gi?-i$kmw!,zu|DBK3%Er@PӜ,E :n✫ޝ*Y 8g(d 69!2OqP@CcF*m:(Zȴb(簈]kni߮046k¨(L] $6޲,"5aea' jlqrC^gDzэ0S+$q( Db:wv''opM}W.Ɓ ?:݈$0gI-Bin*"ުU H& PZrl TԱ5RNh:XP \8QRצ,`_sX:Bmf"l}A &ԉ7Xga@Pz{/ZM|x<5|<`54 uYwJ9EtS6%/9\Fw;eic]U6#.E||F,RV\?Qxj_sa8 y]7Ův=5T/* g‹]sG _l%.BZpHS${Qoi!ظcXu5k}BK*jxJ#f(}a*@jjKER!f*.#L- HKTF%Q*~˦G mi4gXd2̀#1 TMtYje~dR&4sm*泬 Tեs^>MbrF4qZN'x?=Sc'1=g7lq5EcJO2wm^0eɞS&ǂ+ʷtJnN{BnnA5JLU)EiIh]J ` 7첂{gH̦j(2p -&Jn&`|47qc3@eĂqM=%t{A֨WL g윴 ,u5ޟJzjA]A vdTrt.WOwt"s=`x9[8|. ?%,! 9GQ}~> stream xڭK0)8xuVKHb@dB6f=",E&e\DBbu3&)YweTxCBq%wXE#9q(%Ž|WDěcU m[;EW>%pXM6 s0-`ic1=J@x>h p]2 +$R>ѲLo.SiBtlrıQdc&Pe(;=I_ endstream endobj 2094 0 obj << /Length 1522 /Filter /FlateDecode >> stream xڝWKF WTK#4mA^ǶPY2חRx|×~X?{F eK\w Dlͤ0Z?ׇfF/x2H&M~:VzG^2]FodRd* **sԆĬYZ Ac/.6TI˕Jh?RF4]T ]6ˢEeOu%+oЮ.K їб[ 8#C>8 g4ʼn_n0FJX}mB1h}l;.V7joY)KŷAd7L;8(S&A=8GC~<~fO/(uV#Trم/PJ d :6$ ,+7U˛B$CVpN F?АSt"v&&[YgPJȄ;èzr_mv!G<ٍ4Tk@|m™} ylP$NtPA2":MGmU<~eU^5Q&gH-Ec!w$T>w<ɏݡfn+OysNlӯEJt ;#;}?u?6 2\aqeJ.R#(F86ˇr;&tyxnȩj:71pW齆k+ǝA-shﰖȘqMXJ)B5 QAhh?l[x[M6јspl4,ҡ_NH2a4ڡi;D vV@vg*G-K߅bfC-FAs㼉ACaLda 00VU v`TAK|Ȱ6nN?(vuv`y"fk;C42P T!Y0)UZtlW6F4O;TF} w³SP cpy7V[D4R^FGT/!VI`ic v 4J$:Ѩv6:M'hu"x5CU7K2sy5Sh V8毓('"^*|c IUn>YۡA)턄ic0`مg? h endstream endobj 2113 0 obj << /Length 1595 /Filter /FlateDecode >> stream xڍr6Puf,iIg2IuzHrHH„"~}E)Lž_=p9X,6E0NIbS->t~iϦb-IoZK΃hPOG?Yv%Ժ\4le]^)Mu@JgeivwuQ7Ukw=I\kX%hG.]%P$8rωJ81@C9b2JdĒ#ߌq&VkE:] +zY:YXQ5B; ք,gĹX zZB- zN3 tm=ںN*]Mqğz7+lgD S`lZĦ?h:/5g)[f<5ݔP)v, 1Hv'%(;%QHᴉӠca>DSd:]= 1VDq(z*{@DbliX3FZJ.C*()7 r+Lvy53`\;3>"]qWߊJdI9 x %e6&%z:If,2W%Y(7w|[{ͽWj #yDz? W(p7.wO__($SХB 8dV}4wu^\2:Xn-ޭAm׵1A~W+!s&q2nz}ծ+E v`z.q&V簮q:費%-TAb0.sOes~2|uY?EVc{lKFdJE%O̮(m36RCժ>(H.@ĤY"Ώ~H~1Q;etBHC w1A6p|n]hM, q~>x;Jn]#p~8j~5i0|6祉ġNu^3F.Ѵe3/r)_ epC嗸3\5' C}g5ڰޜ] dXnhƸOpNQGl[~QW{{FXznKs0LÖ{b_w1?E9uDC@ӭ"'[4NA#X'59Oᵪ%'؀9| ~o'{gvæG8 )JH ud ׈a(3\ Gƻ9A_4"\H8h-6B| !"h 2ǐK56JD@m^>h.X-.ކx}2pXLRV4 endstream endobj 2101 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/typeMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2118 0 R /BBox [0 0 42 82] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2119 0 R >>/XObject << /R8 2120 0 R >>>> /Length 51 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*,m8 endstream endobj 2120 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 91 /Height 46 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 91 /Colors 3 >> /Length 451 >> stream x=n1FMK2w "EH9 RpH)(]^5bfefӧ#h6gt8p`xn_$34r.u~JMXpxdnɋJ*q>ӞPUbRȐHj۽~XGcGg fcY0u`| *=.([JGXF="RG!0└{) .1⾥F|yF32hF#Mux~Lh١AhFkD{_o>*{/>SVF*hZ41?"sW15k-=|7]z{$Sejč0ꑍDŕ4W7yވႵ_wVFAhF_F؈FCaS& endstream endobj 2102 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/styleMenuNew.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2121 0 R /BBox [0 0 99 82] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2122 0 R >>/XObject << /R8 2123 0 R >>>> /Length 60 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*ZZ@AZ(s!  endstream endobj 2123 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 91 /Height 109 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 91 /Colors 3 >> /Length 796 >> stream x=N0MK$J@ X  BH,eV @D$cεo:v&+ 39|w$FbiȠqF>>}<>>2|C#  Un\\\|Sj$KJ٢"#q%ő7j=2HI6?v_Gn~uu\Sr.e3eϑ??IΗfHgN,Ĕ^k}r#ؙp?2Hݶ%?5ޙuB# Y#!G3G#1%;4rFAhdl>fް7g='Ϟl"C437NgOE#5ޏ'\zJB# 4B# 4B# Ff?zN0=ǡAWR,Ӱ6FrPr!44%CY!U?RUX'7L,5RUe8E 4HIuN==yN6mWWsQ#ʞ]gFAhFAhFAhiSztm&E6e:Ј6s$|̢a'ϒH _}j6nGL{#rr0.jB12ޣursVrs#ʮY楆WYYҳԚ*fеrfIGFBy͜YR{^,h4ə%l> stream xڭWM6W=@?$J%.AF⮉ȒW!e["Ù73CqC~4 YGYeT67 [y|n+n^PX!qK{5wmWN>;Ӹtg%GSY'>/XObject << /R8 2137 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*ZZZ@R@ M -\# endstream endobj 2137 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 109 /Height 111 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 109 /Colors 3 >> /Length 969 >> stream x1n0EM Q@k9RHe6PpZV;rJj/^^~'}('cEbZy|~uoyǡG )K5ǧƲ'\2lx=渪HK2(Tcc}^,XJ\6? s mUI[ ZqY|k묲Ұܳw:~?Tj?3=bG \%Hy=rucz@=bx\U% X( ZX`kwH(糉GyU+eIekt~d26 ޣZZ{,-ܮs6ͣD)=6cϵǤoc9K"w/]yo9;qU8̜_K< G 1#z@=bG jsd&?$e%Rvocc,V1cݱ\ rr,J&cHw,9*Z?M<>ǾvWNcy=bG 1#WsEyx]=bG 1 fؾUղG'c{R[R=5Zϱs؇Ǚǎjʝey&SMfkF?[2&o-3jJ)9ãi{<9X2cxg׵gɍEX<1#z@Hz8Y=e endstream endobj 2107 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/optionMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2138 0 R /BBox [0 0 178 131] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2139 0 R >>/XObject << /R8 2140 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^U*8 J@F .\@KL endstream endobj 2140 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 145 /Height 197 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 145 /Colors 3 >> /Length 2059 >> stream xK6E-0{ +Yc] d8('V30Tl)J*YzEPNθx~,gLV4Έ +;g߾uRD/_ޗ9C˟SzVsn}}ؽm?v֡ђȋZ#5;w^~హsvý.ҟ[vYl+ˑiVus>muhdvۋ6f7"_N»:Q>Wݽkm rVzE{q.#i)A"8ﶕipg@dJ;Z9o Uϒc7|;K5H,+Iez}F9CgBŕߙә܎rƄ!g|rǨhouɜQLlwn9L-A8A53>9C3>9C3>99<ՀOX7pD-F*Ǒ3Rgx3]!g[-@~Ny"->LiV'9<}֣#5ۙrxl9O|Vaቢ:˫0&g-Esɹt![/n[#༭&t9C3>93=8KW?ӱ3>9C3v[@$ƙ gS2;jvjMSrj3#_,{4qiD{1kG;ICw-,qV7lլgyl?mm?H2ճ2g^˝5lr-3ř{pknR>sݗma5I-{a|‡!g|rƇ!g|rƇ!g|G4or]ݹ> |-ѴQ?`8 ϻV[[賓m!ȷuhvTAP~SnȖڭ(@sw;-ַ1:+<@w^9ۮ8יyaW/GR'5-c_y|%`dIgɖ1>oY,9]'W }%HdadW n-=89C3>9C3>9C3>.κ=wL\Gd9]| 1(;UҜjSCge;J:{AmYPd}*Ȝ"grƇ!g|rƇ!g|,GrFu)ᩞ3ZɵyI/ˢ>rƇ!g|r+gϟ@LPpZ:62rƇ!g|Kމ2J8Ln-[3<$NiyRu呝mqA,+nm!l[Ҕ;5'G[]@#g u# g[grƇ!g|ʕc_g?_ endstream endobj 2109 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/centerMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2141 0 R /BBox [0 0 81 142] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2142 0 R >>/XObject << /R8 2143 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^U+Zd@ATZ(s!+ endstream endobj 2143 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 157 /Height 90 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 157 /Colors 3 >> /Length 1176 >> stream xKn!֛H "%ym)Gr,|,-eLԃU¢5PJ^_+;W4`ڠ˟ ꠇ1\q\1\1UktϿzGaV';5cў[-TVIbX 0 ,4SЎ.5渽sKghYqC2 dYLN|}ATB77_ (t݋pJ")^ *O[ 5Waw̾6rel?,4\CDY1\%xYpD5uVbKϐZU\es:+,6p{"iv2MKh1tEБ\1%rա"鍫CǭC<`힜+++++Z?[4ə7Eƫ%l(<•sqF1wfHVQ[B:D͔Rz$HSV$TrM1rRURzߧEB8Bn;4+qReeK?-/!_MւV/}OdّI_m]i0.v8Y|SSSSSSSSSSĭMx>IQMsOz,qk+(i6{*]u)PAn5-k9föO4*nM1iЭQ>lC% Ouގ,׬XIQ8RUU5w~Zt.?[g* [ A3]^8?KY 7|Ow0+++++++++{0RG?I&9svj:4wXe{q=F}X+{eW\@n./h9fCH6__Yi"kXHXvqef-jc*zi f1 Zf?şQj}U)Ue9Ht:WgN.⏑krTpqÕ]zS#[gQ+&Y]u?IX{@0b):1++++>pL:T<F endstream endobj 2110 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/helpMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2144 0 R /BBox [0 0 44 38] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2145 0 R >>/XObject << /R8 2146 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^U[( R@ M -\x endstream endobj 2146 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 42 /Height 48 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 42 /Colors 3 >> /Length 211 >> stream xֱ @  },v 1X{=5d:ΜшiEh|abd4= xGmok >yVn<9)> stream xVo6 ~_aIjmoOmˀ&jc,;iGr.0PDG}"D& +c2)dQ>qK$q~7W>qfe&dP%/$;i&]w.,s%-+nkezU7wq~nP;,\tu ͕1H.ஂ02Bvۂ3ڞ;Æm ai%]ov' Ʌu̺`kߐp!j绻$}{H qK<_N[&7dd{¹T˶>ytai %4Zn PE45|p'IIKT]B5:]PskY\XOY9^BĬZgp4)BB 871;E{ΩR|ϯ>03>E>ᾔ*o6(=>V 2HY$~CKM痲dZtnP Y bm]ZC}r&]t hzlqbZ ӞqKv =W9]q[*dBPۂau]5IOq]HMXٴxy<Ö ,hE( #Ї-"эKhU6A8Qt!${ d6"q+Aݔ;q(:)anڋ|9Ob BG6ގ8@JawsiνDur!IzR v) {ߤ|{NwrcF4I3qP 00awz =p/܅?:3.->E1nwS}2aV"44t(1zCU+jɔ9Źn@ E$! j,:_=}kdn5%.fSF0l0[֞yu/xNLs/Kl1P S~J>PwbZ:<$qwSξTr| )8k4r rI)b4EgGt. {B9NūRUw?Р endstream endobj 2128 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/floquet.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2154 0 R /BBox [0 0 657 760] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << /R7 2155 0 R >>/XObject << /R8 2156 0 R >>/Font << /R9 2157 0 R>> >> /Length 400 /Filter /FlateDecode >> stream xSn0 +xl+R"%]{ݶ}bH{ߑ6I{ qC{{7яOC:r+ _?=~{u𠜣ykAB$sWaig] UC?&Cy4Kn0\t3ٟBmx\pbg %M ]4kcRӪeV/3:MsQ3MrN"GtDt36TQTA}#4BXc-{UuKI͛Z^dIhWES|>0-JAӑ5iۃEaV.nhE#4^͕Tc{fb9_jC$6#}NkKoFsE endstream endobj 2156 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 844 /Height 730 /BitsPerComponent 8 /Filter /DCTDecode /Length 68593 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?volDėQ#wf,=\ЬXwZ{& NɔmuЗV>bAEmOY[_yqe|>Ι3ޘR)$TK;Vv -$t{!BڔgMiǧJjm<\]Gqy6 .ҫvH4F;?1[aV%9%whi+>{t Jrkm$A9>dUs^z9ǥ]Үm6N ^l7Zlc^99[LwOʃ}-?§ܴ1TҤ1]ΟV}ҏ7h `u?gOʃ}-s^VއڏCE.ʞTkNJ<:}=ӏҭ18eO*:U`u?gOfnz>އҋG]|:}>gN>Q[-:Ǻr*cΏ7E.ʾL>iZiO^*ٛGA4}SE.ʾU_GNOGOg:`~_foQcZ=Aן>ΜyVm0:*ٛ4}zaݕ|z}wӁGo춸?$_Z10qտ͟\pG]|:}=hc`㿫{Ҵ{Wʷ[\t>zL>i@9>_fl8QGَH=}({Wʀ--~oَ1Տ9ɢe_*߯mJ=8>Og rAfXqA}f짹?G]|sȴ'ߧO_Nn96֛W7A*ۜ(;dapG>.ʾL=>knߏ8ʷ[R:eN8c sGٛ?c =,WɃm3ՏЅ9?UZZpy ӧ[_f8i+OsgnrNOo?Ͽ˰]|qɶڿyΘ?_AGOZ<۠N*# >>q6M][-^2ǧz`[Lct!NO3Vk8Q?ϷLc6>Qe.ʾUZZpy ӧSʷkM鏠kI}0#B˰]|z}qqGo춥ztqK_f8oV?&63z4Yv Og rA䜟AE`*Vmi~}1&dyAUF}}}mX,Wʷ[b:eN8A춙Bf}1pnm%{)}O8˰]|sȴ'ߧO_Nn96֛W7A*ۜ(;dapG>`*0% ~?*߯m=8>q6Mflg(ۦhe_"eV?gB4yVik}&ONm} e=ϩ?}9?y>.vUm&j:c8=}'OZ<۠N*# >>q6M]-^2ǧz [Lct!NO3Vk8Q?ϷLc6>Qe.ʞMZZpy ӧSɷkM鏠oI}0#B˰]䜟AE`*y6mi~}1"dyAUF}}}mX,Sɷ[b:eN8A춙Bf1pnm%{)}O8˰]#B˰] 0 >gN>VYOe#cf[Fx :γ~qq]cŌo+*rh\/rho}2ۤM>mK<l>u}]Ҹx9A;Y' P3LY0F:5lcjibiv3)@g\uѭJk8q[1hLЋ΢#'r* o$Z2L&lԓf$A]/OSO(5AQ6SYX$rY" \go\sKrA-r{ q\7Fz-YZx\(]1[q˂Ǩ>gKtɣ=絘H)k.x9)|%2]ZyT zJL8>(Q?_٪ k5A@ZMpX}FW @lgZsO2r򮥉{"( 9d"ELx]`1 z nQEIo4}Յݘ~̾_[pd@ ,5 "9%rA$3 Zl$3&vm<0Y屌1Z]F@rD hC[97SLc4N$V㵹EV-m4:krlG0=#wCڨ-%L,@w+nU6A|Rܒ su45u4?#DLA/`/;[Js }2Nf6+1I;VEc߀xEsOI3/$R`]S 91[Ukq5ĖxprG ;g5QLʩu dg:1wc!wtnWϔvy 紘u_"/`1?82AEsv2\9zer QErVpGqĒ\BnFw~ikkS$<ǀK1~>^U.-`\\9(=Lņ1MMbq]2$_lO$homU14 J KGw9JoѬI."(C!.NoR8Tؗ*Z m u>Rq 2k,pFy @tԚ8dJlۏSAr(((((((((((((((((((((((((((((((((((^;Hct/k\B-thэpΪqGhi-Y]v 媷-U?jo"/,8<o-W?a{j6qZxb ;[1x#=A?Y21VAZhOЩH./%YtҙJ<y?{j \_GN?T rw{[DUy #fj_&!™ɫZXj6ry!‚z]fAOo;Y᛹;}I8UE9zPϲ[ϼ?*OK6vK6vɝМ)ّϬ?ӆeѳc?Mj#?Y\̏}aVj#?Y_fs2?Z?#Xǥj1ƨ5+c-;7R7^ʯ&KoI_l݂$?7R7&#GodfG>+Uu)e/KVZg#?Y\̏}aVj#?YOoj0)ڰHIdrmK|#iТkhU@%T)u/ڎF}J+c8l(%| 7R77R7m>[ϼ??u/?u/)+m  _K6vIhTd1h?#X2?ZAo;G#?Y\̏}aVj#?Y_fs2?Z?#X_f;s%h̏}aVj 5LsshԿ#iMhcdm\o-Q?J~͘c?u/(%| 7R77R7m>[ϼ??u/?u/?#X2?ZHԮ1աh?;s%h̏}aV;s%Ao;@?#X2?ZAo;JU:`pm"h̏}aVK6vK6vVZ6qIKoG_[ϼ?~m> 2,15r94釕ld!@*>cր.`0ndSm>m4֚-)/m~K{FH  |Ck}kp!Rx;@dxNw{x=c%:??ʀ*O;d46>J*/?¤, $RI\UnGt[8 Ѧ N?V{`}OOA>¬˯UkMRc}2Pk3eBAW>[ϼ?<mj(%| jQMM̜9¿>Cw^KKo}}cgo%[$U ̻0Ι<MIay=Ρ(e`N ݌8j}}Gqoo-9D,2U yO\PRy 23m}?٩-/(ٿ6>Պ(b%C(nwuҿ#<֖4X8'l:@ K #WT 2pzvhci$])QFIiL7,H8;GAOc$q˹06{P6>ѶofQ@>ѶofQ@o&{wxY1`TQ:_j]}C\ƺ֨?NvZn? `ڷaqBżq85uGE@sz??5W=Fx 8sp4$ ҪY" r8F}rVxDB C6r\i(:<`U'G}P!}1%e>p|c?3N`Cn \PSp*]@f&T<\,L.IsJu˕Ӧ*Ha ȿmƹ1rHۧ@Q]>TW3WGrryIǦb3'߁jXE.8rU=)< SQCހ"˻f̓d=jۼp̐ǐ84K7#g9sP>R;v>ڀ&LD4oȤ`WV%op0l $W€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nVUOEo^D @3N E˯|'u"[9ۘ̍1w'ݥ@:?Y[ -p#q9nG89_mFY̍Cgz!Mh6S?{#q#0矽 9P@mq~T[q*Sm3%&O5]*V ;*=ɷ#=6UtUDB~jCyS6U5W'wݸ9튒X?u'U$ 'ڀo ְ;i-ѷ媔VR$6dp 3@wqƷk^dI|[xTARr:KTQztQ)PH D ǃCLg'i5;?*# _ y 3Z+,rSZUy?3=1udP8U~TۖVTgr~?n[8«Q@-?G*4vP8NDRܷpۖhߠ2HU@ P-?G*gr~?n[8«Q@vw"U)*F~V6oPǗ3HYkNdjw?b\5ڤ{7V&$I1:}MWZ? jqZlÈaFd.I'Go΀8m3Cq{he_C-Q?,Ur3 ij $䓴V}zh-^p@GHZ]y"|IҺ(())h((@Q@Q@Q@ KEQEQEN;gA"qJ)}}\  g8U'_Ȕ_卾wUK$UQqF kY%$e!"j!%KeGBYN'3BGLSWTyE +3Xd`g84ig9QC#+FXWc>G?sqz^VC޾j. :8 G&2FJ7^FGLgkj`2A/-Pky- U) SRh X;QSl#4B\jOh@ ?ߛfKU5aN-wN?)2;8]\~oھh~=|:sIae \wtP^Ix8[W1N ;m jtFi;}HmkfWF GtJf*cѷn^H:sUiWL(7 gv'#sӓBvO S}z`sq)Br!'<͹aYܧ_j7[pw/u7hgT[u7hgUg8˸Ti%v&"G>+J7g^K,0"X[o,fƪ>(σ~ ΓW#yQ%Ï8TB3WC)/y_ۗ>@qWn W OEPOy"|IҺȡy_贮 ( ( ( ( ( ( ( ( ( ( ( (3t'_Ȕ_卾wVfOw}*ڿĽ䄂(FQEQEQEQEQEQEQEQEQEQEQE5fjkW_/@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEK ͒0:(jm_j\#hmsIywEnۧӵkY\_;-$}4ۥrǶz T׼tŬ4I_ׯ~~fŽܚeoE=IaׯCk 0%)98>L1^/x**ZuQݖ2#dk#—P@rY'H_ъmd֗?b3Yд5pHu=?zqJZ?:m*HW&>c~JFBgު_w~hӥZ:4zºa +:=?'J;?E Et4QEQERR@Q@Q@!-QEQEQEEQEQEfy_d{,m뺬çڽPNf'}?@IUm?v#co]&I\4FрF R2wm_^BDHBxރ?/a{$Ԫ+0r?7Vb^ۋg2cAԕ)$`T\3qO;qEPREQEQE!-PEPEPI-QEQEQETꮿ_]5xMQ@Q@Q@ihzZ3Be8ZUH$U,8$9ž fֆygh9hg9$pA'q@&WDny[>vBC+öViRcO#xrwsU3nYDx`l9f}N;h{[\<7j H9P}դ6s^"O3 vz`g'iw&%HprQOkbL;XД23SqU}A41вMA!YOBdgϢ(((((((((( gm!cOc} KZB0A$ 18 =okx~F8TF~+7^w%y' ^@QQQERIhe)MI݅QLC0+.ME*\GR8 æ_]gb 2:>A"Z;'١VRq]‘j Ar3ڣdxɜkiQrrs$zq| wXB輔;sc=`d2E^kC@U7@?2d֗?b?[?j*({s_4^?:(^ğ-+{'Jh((((((((((((7O]XuiVnk|ۮҭK~HH(aEPEPEPEPEPEPV˥Oӛe$LOtk+Gݭw>@oa^45+y.Y"[7 dxd4tfiLE˪nٟhQ@Q@Q@Q@Mo٪UPEQJQK1ɫ l#r?NIBۿObOSS،A\UbKI$I=}h(yXhU pB0zUj(JSŠ(@QEQEQEQEQEQEQEQE[uKdp #RDžxJ+fA[_MfIffPِr/<i4_ @ZȢ:o!4B\ʢV q2zft65,XyF&v='ӽV[uM;;vF?3p#M-8(Gd^N P[ sŠ(HQEQEtCRXDerwۉ9Ā UL1^j-mp-,QvQފ?^?>+u{KաQp1 5gD񱸼 1 ,`ǿouP F2JbbZV X;QV}׻ZgT}5KuGE@Q@W//nxF@E Et5|<B$i] QEQEQEQEQEQEQEQEQEQEQEQEfOw}*}Wo2=~6uZUz/ QX(((((((((((0.W#pG-Mo٪mi45Z"8J1WA'*\e5Ͳf(+kX(JZ(((4Q@Q@Q@%-QEQEcj8A Yǩ;fRQ;JI.A!ʯ֨i7?Cw<|Fgsߊizִ`lF;#qy9*JWg*4:iZ; y=nBUT55f9MNE ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4spbV^A3+`淡MTOiE4h}g?nLս,D嘒>Pȸ= v,56r6v7/5B YOoh\Izx~_F*@>f(+kX0+LegI"ŏbw_A]8jc N+*%x)GI+l):~5}֛SWJrNs طt_ъt;y!FuH-|FSq kk1Wzw_U-}5QEy_h Xu//z/?O=E Et4QEQEQEQEQEQEQEQEQEQEQEQE?d{,m뺴7O]XuiV%$$QEb0(((((((((((]5CS[qj( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4 (<_4^?:k=?'Jky"|IҺQEQEQI@ EPEPE(((JZ(\?M.J;?NSy=<{/e ?v#co]եYBԵ(ȟ) 0:wtVHte0KtLEm2csEih5"IR0IubWa8Ȩl,`Vismv(,zL0#c;kͣ[4slɻ(\z{PimiYmb9Rꜘi"A}o2^bD"x9@U8z|Ó2Meeye  -uڥԯkx`RZA3Ioyǵ\d,@wnDR36 j 99 VEhG̓ZBl# 39(((((((((:g}E湘jJmK18?#^ctCzC]]I4ֺC"nolsQ5&fu1.t{{T:(|uqL>ն&H6hD *O?OZC_j?|?֫REg%m38RvFHݿix~_F*βd!{mLDI8c Owl(4uGERp3QPEPF[2-a<B$i] s?P?ZWC@Q@Q@Q@Q@Q@Q@Q@Q@Q@! )j"v)?S)[mȜ9!XcoH` Z(mP9uz*3t'_Ȕ_卾wUHo`0Bɑ`##SO]XuiV%$$G KK* sIR2jZ+Vd[6qF5~y%OX;="Z(5 ( ( ( ( ( ( ( ( ( UT55f ((((((((pF ]HA9g)#n|S?tTsftU죰~:`(In_w~dv˻cԚmUŠ(AEPEPEPEPEPEPEPEPEPa?/ WK5L1^vv! ʱc96۫TE'\y}I=@5a5q8`M#ˁ9y7ӹRmrzswt;&ڡ$uǹ$I;J* s8[{/hY2E^kK1VFw_U-}5QEy_h Xu//z/?O=E Et4QEQEQEQEQEQEQEQEQE SP@0)星~'*#l:/QEfEPnk|ۮҬ?v#co]ե[WQEšHciRjM&ƣnPqQieaپoIJ.R`ZQEQaEPEPEPEPEPEPEPEPS[qjUu4VD$|Y=w4YV;Hwx!x]d?ĹVCjt~So*?NG23\})|褃0؀#D?dc@y*}dK[\Hxx+XN吀r4٭K#6^U=ic43E,UJ>szPV~/CnU$QMAEIYԜI[QL((((((((((C0+ئ$Ă:^;tCRXDerwۉ9Ā T ݮ/#8,Hd5,uF@9*w|P m#$_ִ?YgYC))iXgT>f(+k=vJ:\E~FN>~oPki@ʶ@Sԕ%N1aJM e m1.~G :'81TQL1hYXh#Z3E\GPH#)J円\= +ie1\DѸïŭ.VkUmR>$x`F#RV&i,$7*nl؃Ђv喟t|ϡN'N~q*KH 3A[S[>ZE.x@3ZΪap2S2)m&fZޟTH\b:16*7)[dKQTdQEQEQEQEQEQEQEQEQEQEQEhxF3zn͵r<~{uHGF3zĦK V)_to_S^q &U#IJ9EkA介-8lHsc8qRhܗY]LX, X1VH]dV Av|$jJüO' ~"0U'hZ!xxFK~_m#$_ִ?Yf{/h^p3QT_TQE~2-a猿h Xt?P?ZVۛ#,b%M,I!#5E Eo," 2 PEiq(gy7>}9}9>+9$ԵX$,!3nNߗ<3lm0E@B@6r@L ,p<0d@QEUg{r 0de6;1Uf[[eyVoaX?9:c5v}}dm/mE*L N1c^B֖-jLRb$B4Sh>Iڽa;BM˃94Q@ArK.s̔=19*z(0F^Fo1eoʦ.<'A;2Mjdrns qq inӂcRq0*uERUT>?QETsV&0"<ܨ?TP5J;O̩8lK;[#khg*玜n0Kcg)n ?g4lngolg4$ٲ4_-v& p8%Q@Q@G7R{gG><xeĶU o#鞫41\DOKuGP yPC{H0p;9m5,P[" /<4R @8?*uQEe&$׫q1*"m;ڻ$s5MtYEWFeaA k˹Q- n}sr}fAA F 1$V]5x&Rh#te8#}h@4rQ\#'ר1-n6Q|ÞS,WH-CLe2O^{sVp1w 3n31v@38@=ON; :Ƚ]HsPaYRXfh$By=duϰp!!r^1Rv[]DOHё`wIXΞbhZ p B@<UVy7 ݑ=sCL+D4lwBx# M=y6}r$G, :kv>`i'SIaa;t`O-;n%p%v8J!mK:R.S=I17_b}5 a9yu:銙Kk{&"yTnIzP[M%&7HTuẹtr f9q9p+;Yt3qkNcl&b Xag2mo\i6u1x. pI#.r䖯mo$ Ds 2/̳z2g8n$1,2: pCrQW]L9u.&#,R>~33zv'72A*A gZ PT R;۳3\Yr'a[$@@)'%tvb3?eN8zKI|ߛ8)FHQ~?Š(((((((((((( æ_]gZx AאhgG_ ϲ[ϼ? ;M *OO''דSiV:eDsYK \(%| wv/h\y 2>yG!U@V|?YP?[?j*({s_4^?:(^ğ-+{'Jh(((((((((/?x>[!è׼xdIE5\eNy:4i(37O]XuiVnk|ۮҭK~HH(aLAv0:ֈԨ%\?ҳFR|ϑ|0REhjQEQEQEQEQEQEQEQEQE5fjkW_/@- ђ%AWfE'9J5 .~gM[ Lc5}q9+,Wj&Q$~c95˭.`9rrxxSQE1dx`*ЂAD{ME.|ˈCB=GTl.W}dgAӐ:v〯m/{{}s|7lbG^8iS*Ny=GqqifBb5!0Dze?0U#9\NZ^fpr@˒pcH2a%2 !1NV!t [1 Fܪs !Xͫ_֯ G?UhXAF#x֠0|nc8[9s?d <-DI*>e2#8E \aB$o_'-EWzEPEPEPEPEPEPEPEPEPEPEPC| *C| *(>&gU}MK;?j*> (<_4^?:k=?'Jky"|IҺQEQEQI@ EPEPE4QEQEQERsK@ d`9A8}ϒb—9_P}Wo2=~6uZUbSWS›$`lq=+C/'+j󼕓~K%>IQ  ҫsWZ$a[=.V>//*ŏ.F ERIhQQVAE%-1Q@Q@4QEQEQE'4QEQEQE5fjkW_/@+Ϛ)[]~`6{H')%h㪶G=NO[p6v14_kpRxdl$yO?c8;-3u[F\Icu +y褑'tTsr!H0dĊth[mʹ~\g*orBܩjY#ǦI$nqǦڭ]:4|A)ddԅ*0JD0 B:ݽMF|ݤJdc5ikLiT?\q{}[}f8+'Oztq D-K(Ndv:=xDE9"?uS? go}&VxT 9$NrA|+Lsf rO<ڪLʹ`F8 9?8cH7,파 :Gס_#2bZ[ b|z<<=<l &tdz^x2F #\su/&^gl~wz x&9oN6 Q~YuI|Wj99nrEq݇ wGV+ ( ( ( ( ( ( ( ( ( (/h?WW?WPEP A5/?b/j_h@p3QT_TQE~2-a猿h Xt?P?ZWC\/?OEPEPEPEPEPEPEPEPEPEPEPEPnk|ۮqn1Pw+F5 -?v#co]ե[WyM`֗7dgU :.',?ʵhQEQEQEQEQEQEQEQEQEQEQETꮿ_]5xb'G5c(pCӧ;y,IRFG =A#ޑC0!p? Egwэ޲_Dyi5t ~玜tϳI $b_)2C2b]㟨S"11d0a =1ҧS_,FeejŜsm8{b;eaxԜy;8H>ݨMyf,}ןy41n\zc=hקɒtA/eyus6yNt#2:pPzOҥ+LRz:aцI{s-Dm1T7۸m_/^mct>T9b:;LF?tZD+ /<w*qCcYnb?Н>}Gsqy>绌㢺_AJ^Ёm+G2E$2T 2E.9 0Wwsʋw6b(.S|3 c6sX{cjBmky(aXu'H91 wPk,фH٭1 |npIE;TU,9P@<3\AUGR֨}y.81pOnc,$hXHG~h &_Os; `rrNA\ǎy#$퉕Urr"zO#ӡ5?Ls@Kv d?:ߑd!粜fA:<{ +f-z1=: `:.t_ȇ5e2[4`d_RW'ߧxO}ʌغ1hقel0{TȊgc$.pB*̣OZ[u u^e'|-( Xdv5ii+_k8UC\?pGUy :Uy'eɐAvTtϿ_Bƺݻ!xX/b$H5n-kt:{18㞕.ԪiVzEYJSΆF=O O xC(|UVLF#א9"핱(CrzOng̶' G&c8 0DmyԛkS,ONsѺqR@.mDZUgaXXBrHGF_Q8#\j.VG*U0A^NreZ^]gB\RQE2((((((((( '4BU'4BTQE%}MK+o1Pw_U-}5QEy_h Xu//z/?O=E Eth(((() -Q@Q@Q@QEQE?d{,m뺴:bqs㏩jѭK~HH(2+0 ?c \*c(((CK@Q@Q@RPEQEQETꮿ_]5xRV  ls0!>;FSɦ"60$^!ǯ4@2pNT<;=$X$+}SϡXhaHɍ>t>);SRlGʓi1>sCslyN7puP+`J9A7)"0`>g)?϶(y ?,~4׊H6ʍeL?^ҵe/2OeTqK$,Z6*H#Ўڅ%BMno7ٽ}O5hvLTzӱ p,z;g{`i%#R1A=%&gZZ_GnJ/E!#[{mCL{at6-1R{=nSk I9>ܞ?jaEPEPEPEPEPEPEPEPEPEPEPS[qjUuæ9e9 Hdxە'GԈt*pEKG7礈0?KRM,Qj/nC`a߇ZXd׆O.LG^Tg߱PE4gcpTU'Oaz8Yc~moKuTo4﯒A?Q@2pNTҗNmY?l+DJ^{p!Ds){wc4!Y֭Y4J#kƫ'OnU:#|R'Yyjf 2Cw A^=TH>^c$1K*ΦXX9F8rcƢpAEL<ák~H)<ƏYJ9,냞ݗ 5i;IA<{npgd*fr6Qf_a#aZ򟵅&6( NH'džZQ4ikj.UZD< θ*bnA9 (Hp=G\}k >YJ *%]c>(@ ( ( ( ( ( ( ( ( (/h?WW?WPEP A5/?b/j_h@p3QT_TQE~2-a猿h Xt?P?ZWC\/?OEPEPEPEPEPEPEPEPEPEPEPEPnk|ۮҬ?v#co]ե[WQEŠ((((((M3AX>4VY8[>7LY&[ϜJI ?Q@Q@Q@Q@Mo٪UP,щ >إOy ~~ϵ"NeB ohki6-8FFV2N8͊_ɱ^?E%BLTwUthY:C=~b^B5-YT $R:E29dE##x偕+UzOI sF/}Iͼ'-<E'pܗ 7CFlcƼ8G`[ve8daq?ΆN%W=^"AϮ 1SVM$сr ܹ ~hk~slw= ƻ8hFSsN$#_X??KɛiY| q 鸃OkЁ}{L@Mm  8GOo(p$#?6}Vj*sR{vbnjJΛJE%Ay=*b=Lf0M7G#G^%d'i'uzg)m}5يii D'2\ ?L rsn (dO*T}ۺ }8:9D9'ojPx$:z YY#.y=_r40IB;ֹ[{ɔ(A38J;AbNbuv-1OQ0c\aa- f(+k _l̙xxwibMݣHqJ^xQhEc;~#Mt'?#?S*H{'!^3 5$2c#e>aqڝk̒d_KoOA>yv\2Y# Ty7߷9sGnrfC/#9wBF}+*PGP=ȥeyhm Y9S|߂ҝ$Q'2<6?C8}4aky mmO*B?=٣ȉΤvAǑ>ЭTl {c1j?Goܿfn|]"P8흼gӥ?*Q#1OGcݿ<*;}|#jrIJ!!+=@ZFi+539O!q hbN9Vwyk nBXcݷ?Ł~ئJ򅷘!c;'iD|]0Q`RNߵL I3Jye}dsӖ>2 rM_Ia?*<&86qT) >bly9忼߆loGi.f*'Qʳkn3gku3MNq۠QEf'WѮ}:"WMvddU(((((((( '4BU'4BTQE%}MK+o1Pw_U-}5QEy_h Xu//z/?Ow'Jh(( ( ( CKEQEQEQE%-PEPEPuFuMQ( c\NU^ 8PG@z_GnJ/E!#.y.L dhnO9b 1NP{}\E5\>Ny}n֟ow*I7?w@#8R9#>2B-p ~_3+ }qjҼ(i9lpys q/TVR5'8@ ((( -PEPEPIKEQEQEQE5fjkW_/@|x`>N"\dqF0p?@3O:Ym]w_ `6$:gӎ70IL,{.?Jt`+n>l?F>;uea`oƒǟ"2~(>63bDPO>?\{۪H gɹL7Hn+l1 1C/#9>8Fm(bFSHmchHN?=?^m%6q FH< !ہbhsʕ_*~O{G T|\m#FmnrBSBiSſ0G.B@A?'/A>ߘnb?qGpy};sw>['ٿh&95ݻq?_&S2Mge4?qg}]"; "rPTʍ)I/" GPұ* N |EFhmJHGq(y[)>yEXwy}G9ޥ7=5tU?;yu̴]y !G\N}Zμ{GWFFwbܒi)$1n<~`+S(((((((((sO!^^;sO!^@Q@[_/Ծ_ъ_ |?YGuGERp3QPEPF[2-a<B$i] s?P?ZWC@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_GnJt'_Ȕ_卾wVm_^BAEV# ( ( ( ( ( ( ( ( ( ( ( UT55f}2ycR|"o,,81qKP l4زHO_ZԷon48d~*73sڽq;4NmPc@iUϮF 07T ?ZҖI͞>tqmfK2GQf(+k\hFzpo pO^٪%Y. 3XTP͕Ǚ2}v+\oy/{[6ŇF_BP՛9 hd:jw]6JǩfXdp;&u*V i,v*vt-zs@o%Ngr$*r(ۦOS]滊YZj+̕K:##+duϱȫ6l}#~5tޡ+G'9bUU=Z;( 3W-[B(%sl?>[OG$4PC dqp0{cIu$QTkPR0 JN'&͡YݞX bPvt2kdE8+s kic!Ln#qOlqiow-vq !5W{Զm Ζ(y‡|85}5 KO5a ur'BM,w=P,0;w0Vr3'DrJE1I7 觶8UuQN& nu`>H##$c={ wvPM [S )lpNIpj-ʑ~PO=8Ҫ HsY̶\#L3{py\%ާws`L(n$f+QEQEQEQE{D_1BwD_1B ($_ |?YEmqR~_F*>f(+k$~{1A@.gGB(וM?4hM3Lb̓}a;]i4)# @_O&+~i[ƚ=B#CŅG9Ҭ4&+~i{?K{k*qȚ30TPK'gpNpg9;|{?FG$w%MW7jp;,8 /9L%`0H gjYhv)بv`[`MK{?f(+koQ{{fK嵾PN8|u=qW"{CK@L tI;3`?G4ilbTPOFOpz\)|xk4g2 r8g{ i˦]IduV0 .͡F3sJm/ *d'sTE'kx@@'q ZI.`MIbܤvLv]N.2%]>h-R# 1vn8JlVf4^Sq-urI= (*(`I8Q(}:ʥ:Gy_79D0-۴,2s{ʩj;;hcؖ7ҼgD4/rN w&r;s@n-lhc8qRcʫ,2 \%ϦhF;WYlE+yKm |qTNtG];K a Y 6>5k4_/ڊUc dHvc`ƾIڽa;BM˃9Ne6^Dʫo3LsH1 c# Q67,][ *a ݽ=9DH$xށ+Tuyo1Kli^x }3rk&\FɼXlu'?9=ID#1cNy(Isp8A~3l]I N=3XbiRG 4 [̍Xh `%%w#hQDq$?so3#i|j)Ue gq kq -UʆO?ҥh1ʷo<ў0e--8EP!ӵ1a܎1ku;x-"69P6@-f(+kPGju$cj#cq֫i0=Fcxa "4h 1.`f(#=y*ϽmڎRc#0r[G5fڼ8cy\t=SO enżRy9{<|q ^?4WNk{H+GH0? ĜzZW6z[X[<˴GL(B9栰kIb#1p-9å_[Y\2rgXa<^3H6&ż L,a }܏Z9S%G۞%"da2I.r9/tc_1 ;3#n`8N6Y-%ZFCuo-v#;F[=.,ZiYHDS% g%H#90jI/JbDYw@q@ONj ,wHW:s]s*BO'ޫv ->g٭CyNC<0x4hn-tYr>V';U"Jw,j Ƿ9 ͣ㴸P;WrVg{Ey+Igf?9^w1<#В2F\{pDmR={4\Z^i-klm/l9٠(tȐQ};;HdZU6"IQbwi _h"H-ev2 X@8۩ bfV\<,2 E6I] ؊x,Qm/a#s=sޟ8 <c̱كGx<9\FW8 'Q]!wv}W5;%ie/ 2[ǖ 3TХEPAX=Ϡr=By>@8m q~h-@ġZ=?tw;s1\46ѝlcX$1Wd,$-.cmAbVR,`ey`x8WZI.ݪD@;U[q+JҒEd+c 99NGciE` j$c*"D$P{ڧ:*. ei$9e~B$)( h1(@2ǖfsyd^6WF) ;%ie/ 2[ǖ 3B6۷1{c8 CbcOtef;5MKcۃ Ye4>\HcrN_<\g3S nEG-9ϱQbH ֓~#IU1ß=By>@8m qm|#e%$\@s)*ᡶSc'l `w'ϵ h1(@2ǖfs'm2\(FUw`w\KKPX`.nGX'8[S[BjS7LyA6c>p 1|. ~\pW5.%JSX<]>0G4\46ѝlcX$1Wd,$kkr/7'z8$dhn# )T q*z\|p?rs?.8+_\F;O@o psqTƕpFv)c^6|;XVH,)C1>0FA=TM*kP c[#*ꝉ56pcPaN9^6ܶ1Mf$$K31$$Ֆ%2Lqol'{-<+ѳ%b<*Gv25_Tഹo0o݃2gvOrIp8pCmГB]\=W ^<TQEQEQEQEQE^?9b?9b( -/j_hQ[_/Ծ_ъ#fn?(e#E@Zí{ȡy_贮(^ğ-+fM:Uؼ;j-܌U%725OʐW::Y"2QK'eOQʸ<NzzLYVA#4Gje͌ l"Xks)d ,G+^o*X&BMIfBx;W$q@n[[i&pgj=;PiSMqf^o&HS6p3*[߲v6u9* &;]tׅ23R7|=ޮGN^U/1HY|+ug4Lâ!́ #ͱUy w3pI^=qEh>{ycfuݒF}scXٕ\ex{8f3DT+hU \e}x{k8aw+JXĞkQ̂@%L|#드 7+3@V$$ FF=g5X /Y@27/T#ͼk/5GQ{ 1#)P6FAIYEʷ7(l J2>f(;d~l/Vmp=l##PiI(MmYH]86k-٭Z@mU]ʃUf<<@^}!y~Щ!\t;j{<:[Iq4~}$v6N88g nlZ^g%b ]fGkinlq[ FmNHϿ4wq{t|pc>\+CHozW'S>Ds "5g8ݜg~5ofdcjlbRuPAai\$2!$8P[19jiMm VcyT!*Rs ciZi \ȫ[y!Ptti{S0` +Mj 62P512*Y $4ϷNr',#J'j 3}NODLЪ|Faz(d%pޙM*]G >T#ǡl'}[HK^(xҲ6pI=;r 1ɧM\v!A1M5 o2*$%P Tw@$ c8!k6)YO%"  >sӣicMfFe(Ÿ @g =ݵ{m1ՏgMZ+0| iM,^F fp97*ji_7㲁#z@Mo٪UPEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE{D_1BwD_1B ($_ |?YEmqR~_F*>f(+koQJJ,@w@5U;s4) $npNx 5I^\;(x؜)85. Zt["dpON;Pu|o@492 =MM{GO1V8`sMii$~v'*8bÁ5=ḿweE\f 2{ Ny3V))`rԀV3[DSe'8Ǔ^_Ϊ^&^o*ټ0hs*>xcjEoK<k݂Oӻwhcy֜xnw$G`boǯoΤ22Ѹ`E)tYc΀2tk>9u$1oqrs9>{k, YAԻm 6zu;z7l7x2l,6{pZk˱BćˉF7`8zp=bXIqk'v3kiF\q)6BNp~#b w˶@C cpyٸ(Fbbon`gu TCUh}٢&T6\ʡX6]F2G\U֞C\\۴}(}Ƀf@I *K}k2B-v#)̪)[#R$+=ڒ p3p& %g% <r{nm\E/:ǵ2р;|÷?G<`ѭal9ay=ct4ۻ"1"혻rn2GQ48,>UpH2@-7 pܫ@lw6T|ރuF I./!ݢ2FGÃîqz ((|qEnVrKj#hШw9y;Oz)Ż-J{/mmفL|2+Фp׵ZbuG%n'geq }yb$pz`Vy &cTd|Pm'H%U?,e0Gs êA?$]CH?<"\+\][2TԯNJw ' Eoqn[1mE2ڍJOQ$WX3J8'#8uVâ$eaAEg̡֡*>E &Ht Mq%_##ckrQL~a$p$ $ !ߜ|_QXeoۇCN T.`1s ͐dX8fY$pߎʊkAk%ͼ2 |+Bei@O9uxѾtX\c|I6`1 .. (Q:3dqL:r[D?LUP΄)DG<#e)N©ϛڈZ4*<~^N?Þq$P˵gt/I#XzUHEDۅ3&@?^$|@+[eq }yb$pz`f]ݞtk&jz*kW_/Pꮿ_<&(((((((((((((((((((( '4BU'4BTQE%}MK+o1Pw_U-}5xP4$+gq{(<LjI~+ލryhð>>kz4mZ"Ewܰr u AbkiYĆ=s?:Ds6fc IST$23Ԝq@&`1!u3jhHWG@ #7O姝yFTj{?٭^l»qyi?*uO ed{| M.]A/^&/'m=it@nl6AzTS_O J:3NG͜ l_Q/Ѽr;%[dr3ߧ:{ ۱gR ^A xⲼ9-g)!%gˣQ:gלZYgVx&H<(:deXiWQ+ 幹HNS;>j:Norެ 8Nk[*['.mtaBz`\X%C-7O<*;q`qhK7s3!nVTU;[p{ V{5~Zee )Azrtvo!cO1r)eƙ Ѷc\JלJww%ŒI!7Y[^Y#m`6bc#gLիX7|4R "1NQEGKYx*Ccu"`"\@XdeNȋj(UF魨2; DAYqAd`Zus朂9dH\$PnAH1UIm7q5ĩ`~/.\Ɠ VQAE܌"(P?ua@XF0;C}?*O >\CSoS֋Y텴1I>&g|\@<r%dImƥ8d -!U0wCe~\|F ]Gy ͭDy+!޲88=>h4}yvG q1'28$Jf2Gp[Dir ylmx㨠 c[ ]H͔$*p #V;k.l$ c(;sߦq1&KaO U#@;:i̷YCࡷ a2UH ZeOgxex-.KȘ 'wXbYd T|@H9ԗ]gj.&+e|thKwkt aW9< T,cS U| N@>?Q3 f%_&'U2 'B 4,[`u,rG'3l9 e9鑃}kJ|ЙZ{K34P-4K"TI-|L1<04 Am$^e?g-J|o4R8N#4A;GxFs4r^r2}\ a1s=pɧH2 {%sbM&t"#'PC(<6ӟ}w*H۟,$eEBCF2$&Ѽ(6䳴{d*UT/ Z,)0);Bl($wd!L%̖wlHbY`mNp#H$IyhLX릺fuݨ[[NXc vv=s֮ãn,"Q#.Ny 4='F$\ևxF[2-a3=?'Jky"|IҺ*v`8N~N@?.:AW( oZ.B| :Sz yiTcnqU(9K$UQqF IEZkO: i@Xݥ{EQETN|{'? h큘G2;8p*Pi֢Tb۷Eb#(F `z E01 0p~\tQ@Ιk( ,$9r=Sz QZREnaL;I$q*RO +N{$5Ŵ7Q5A *IxMyЉ8h88EQEAyl.M#+Ld`è#TR,{qN+%\ꍿ%T.p }Mve4<;ɷ$ ;U(͔WSK#JA8#: PK> kz-G . 8.m61]Cv~~q׆SjB-p ~_3*9,mnFGWe`Br8g՚(iv Hx8~~~I?6zSD]R3 O1!sNO 5r;m[L۱2gN? t$o,jʓ o]/7Rgr獤'g \~#^xKE5cR5TE*vEROދu$ :z5#Z@Nab:u' {zjz(閫#YHrţi۳(Nr{P4_,I$1s q'pz(iH6~X89p$'p'zl̐3Cʑ9z Y w6g̙-3Fr$*GxKyԙ܂9i8E5fjkW_/@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPC| Mo@z{IC| Mo@z{I奵_5v=ϷҴ48zXʹu4>@0GARئ^o:k%[_/Ծ_ъ_ |?YQ}5Z\GV}5uXH$gpAEICՉtq'?z%o5>wMe{u-ۙ$u\gn:hܬ.wV)O̍3XA⫨-"?.`3.A]qEI{s_4^?:dQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Oi+5'kOi+H^J%$:(2J(2} aU.V[y is}GYzN??*?aAyvB@KrYOb} +tuv A5/?b/j_hL;?j*>̼mlg}r2e$ NF?@K[z{VX~ј$ܧʗOJC|r$ݏ-`Jբ3-wlLrѕn H.[jQE3Af#mҋw))NVX=0V%Xe%A}jjJH?!,.vq}[iHgj?nrK:(`I+rl眿y~+Rd7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@B_Nkm)dp ^u#Rq&kk`ӮZ)cDPbE([ђp|vP;*uiX$F'B8qWvk,YVDlc9d)gs]]~/fKpĒi~V~e{ 3rXFsϡqVDJ [ endstream endobj 2162 0 obj << /Length 1183 /Filter /FlateDecode >> stream xڭWn6}Wy TxE` tŦcZrc;䐾v 3s8f%ьqM28\flQqno𗦊8rdtsGuF)1Rl2UQceU6ewyコ*/ߏ e]7Sƹn__؟ J^ṋfnZaڛ;.RH'8yCShœem;D*ەb{,HD], X[2+kQ(DoeHQӻ&lɭ޵.pz--3yv[/w~dr7Gwn㎾`9"R`#GbWL|{ nf~^KXV 0{ ˦Gq4#՞( ,Dr >P.Pۗq`fHTҸmt(JUe \Ɉ`g1ޠ4L`TY.%|0{ Zz43*TWDy>TA8SeJ[t ?\0{C <'_<eNnf^Ptj} Clh>r(j^ݮҷ/x[QJh7;sYGg}|W@vS}'iUz{ѧ;nScm;꽊bx~? i?hf.Ksl. :.UE.HxG ndx$ko@̴nڮm~W͢ 8Y P,::}:ƤI> !4> b%12\ۄ' C=}Qzi:^TQ{~ߔĔRXGYPy: ^q}|)I וod/ h endstream endobj 2129 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/menubar.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2164 0 R /BBox [0 0 204 766] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << /R7 2165 0 R >>/XObject << /R8 2166 0 R >>/Font << /R9 2167 0 R>> >> /Length 863 /Filter /FlateDecode >> stream xmVr@W `glEA%,E"-b^fAa^K=Mk JKiMw'V KmZ)fF>ĵhOn^zFFY7VI\"*`цUl-}! z{Y[\#E-%kVo<ԯm`.F6I,1K:cIR̓+UjbL1QNk(kNlɤ֧X˜2%}TJ\k9Tv`iy=Ʋf*fϪՄYL`B&VcVZUqLq2FXgݱ@CCvL:ƔРLh;kwr,a5ڙ"4A\hTv`*iy=6EhBⵚQ Q!TV*dbe90T71AeAR;<{+2 |i3t`*+2˸~nqHT :e*J 8f*VLŪ8bb* JL:)wLteuuXς)8Z_\%3drM|Md''xG'h;!&'uR@bs@/x.M^>2lD 4ۋOǿҶYYmUl^ ۀwb?|iw mXt|LJa9;yH,N/?(Nq'׿9 pp/=>_tۡ?0)r{:q8~ڡEfW~pz< endstream endobj 2166 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 851 /Height 148 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 851 /Colors 3 >> /Length 6796 >> stream x}U[Z*btq1)$@Un,Hy!~fkVPZѐ" &-YlaZ]JwoΙ9sf3{߯s9{?{H~ ":M: ?ͼ^8722v6m5kV8 Vy1'bc=M;v(iiiFmo߾}ꫯs9ࠝ;wvtt{Y3fPE"noo7\q2ZEj v-aE]MfI&|yf͚Ç+_!k.-?+°j$ٳ?s~/ҧ?_=O3?O\{UkҤI~ 7022Qo)rZnݺ[N}cN;m…W^yexxX>o|CS Dlr*izP~SL$|e~򓟌7?~;>}3"-^_\~}GGǬY^x۷wuu͜9?'NxWwI':tvǍ78cƌ'x_׿u]Rڻw^M"_;C꒡'xN~O=TD*TOF;"rgWX1a$,ފvGy-Yt~ȑ%Khj믿m!•R D>Qijp4iȈMv׿us)S^ޮǏƍ<;#CbwLC1H1iӦ1E_WkC=$6k_Z&doq;vˑ wyI&2J -ٮ>WijؽZ z)<.P%:VINE=ztէr… /"iӦK/駟>v޽{?]"d( K<v,65۷5Ǐ7dH~ .綾^:rȤI=?_~֭[yW^y=zt„ "t(hO$Bq^=|_γ !jٹs3f$~o[ͣ^zid%I >6m߾=qM?B+W8q P9 *c߶mt}SO=5Ըj*/^{xZſ޲O'N{VUxt-2ypɡCԹ,6l յ| r-2I_ݻnݺK.>@V"-ZH͛7=aOxf5 c͞=;WYj$?JL~2IM6͚5PiO=0FQQ$'O|G TZrG?*2ƍ3$w=TZah!oy 'BUW]uСl/Pm|fim #)O5? c+nlrw~{_,7~:< D&gyfܹw.첚xcڵ_~В9E))@ͧuc˿^h֫@"Fk^E6؂ǡKc"ZbŸqjD8H%Uk"]$Ok4nSCh׫>Yi"^9n֟s-ŋ!aIs&90+[w ǯV;$?"w}g8qbojjv='ebSw\Z>-ӕ5"fII9$zM^$?"s=7?nml댻eg;ݳg~7)%yCԴCNP;/>i҉ h]h/-p/"-hoo"ҮE75n,_/o75th($?FAho…k֬!TZdaOj$?JL~2I$?1(r% dL~u.Q!ν1i$? _Uc=v5{/!} ȉggPn;3@N$?H~.]*_{njj"Ƙ 6Fu2͙3]|ԳO4EQAueZTbR^륋K~%WUG 1O~===K.5_DmٺYܺ,-"Dy(#s~&?_Z$`xJa2wW]߾v[W[keZH1UE&?(~rQH5ɯF߬䗹VH~&R$|9s'vغl\غ̊+-עJSUfy*`S`(ѝxġgX<$?c9Fl]$G>M]&!עSUZy]+aU1vt/bH~&M~_a9A [ϴ4-,PނF#TS^K9e)$?OL K3tۊm4[ǑO"RҢH1UO~U7[q~~?<=E',sVlSeVDY[%5I%TS^K9נH93Ӯ#ouqAFe܊13g2fMϤK$G9?u9L -n%h>x/?nK*i%{ۣ>`3<2`ԣ}o+lgu|(֙ucLɤT +&,s~bՑ X^ks~71=Ώ ~wVzs,*ȇrn]G[O~ظ2-✟Xl^]MK~BoT䗨Y1/U"VSwBL~D g䗨ϑ9D9עWn/Q%?'F(8TOܯ׹AuO'Ń=.KisDNZn򚗮9P1-Yye<s~$MV%2T%9uօ2_dJP&Q[J07R.Ԓsί7IRS^唗<7x7ԚZ4-.y^`$?C׊$'zڵU^ʹ՟m|O+l2+,EͣFUr[h"'}3R9#{32l[LnBiC.³>[PϾ |{[>m+--Yc ۺ̊(-x,P<9L_qi;ԨjݓbUO~_A#C*Fu%p'(oA#IˑbR{(B3Dy#teF\I{X LjVZ\˒NȜ/غ<}ȧ;DEy IZS5V~LN[ vz78Ng{\xGfqa2+,P^*]LU^lL FZB t9<`G !YN~e\xGfqa2+,P^*]LUu?%Lumŝj'p.lk#T__(DB:8ZY˨ 6rG%SKf7ueeZTbR/< g 7Y|H~&\I~XFl]fYlսҥD ᩈ)h4$?L~Vnnn#:N 7<<Ĝsd0J~˖-#SU*VBo޼y".! {{/䒂4uԂz={ԳHq_NYbE=TEAOٳggL~E\ϐL~E-[H~(H~"n/}K9$(V^Vy9E]]]Cz-3?OɿaÆPlw"J~Wn[jhw?s~~7ԜGH!:ϛ)_w7}>!E>485;'p^gH~刼 ~h2Qnjj27GE>0*2~+/)%e˖1P+9|굴x=mvgD?'2߼y:;;I~K~~@m=ajmm^h-zoM _{{{[[[?(&EOM}&MN7|#Lߜ'bdwxޒGp>y?>y*I'8 qw]H~.JL~h ]O;q0")<2'? M~===$@s1<hxuK~}}}s~E:ujA=TL~E̲%$ᦦ։-d48 ڹz{{-[XdIA='$?͛I(GAoҥ"Pkk+Wu(L~\s>;::K~mmm$?r-q%g&?wH~.2I~2;vl&'޶mۦO~]wvm2j,*a[4%%?V\y7ϙ3?,cϟ{ToH~6(5mڴ]vy>5FYx <!9wԧd Fݾ&P#J `02nHK?'̙3}e-8Eۺu3-eyCEݸ>(uww777f'/@8~l>7<<Ԕ8?`NM~0 yq?>_ooer_=uO do޼y$?r_0W |O744&4 KȨwίMtA(Gq~S: 9/U]R!x13dqWu 秞J~2eBO$Hr/xbG0}kcyCI~~ozbWDH~ɟwum&gJ~ݍ)gJ'lH~.[+O:餾>@9d[tM$ endstream endobj 2178 0 obj << /Length 1114 /Filter /FlateDecode >> stream xڕVMo6W9QHJm7 EݢۃbӉYr%I;ál.|09=>μR&~2๰ .uw܄L2G]ܴ7.-GN扔0F%m"ss)2LVvW=:.,w2ӆT.Sk<zu_}T9kSߠЧ~NZpg rJڬmX6?'$~~}sr96|BpRsH97`;"h<ŷxtpi,xS}R.&,_dئ칡s5ʪE'~:{؁b:NC6d>uxДe&}|]ϣe\g6U6vK.ER /YSqC0?)ťuob9H)eeHM{NtL Fgh(A=`bSJar,)P옸W4ÄOws.QO1ݞ,Tøkph]6 rO WFlsCX9nqdGԲ#D`B(fΆ ~xӔiԢpDIܠԥ<*xڠ_We=6kKCRp~|!Rթ\k4+iW1[ir/| q=1UR LhQ<j\ j4oҦ lӨ*;*i R*؉* -9A *+ j nIyW6|S6p}fWsi[՜Bׅi߄͵hɏɵ J|@׃Ƶj/q endstream endobj 2149 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/2component.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2180 0 R /BBox [0 0 521 668] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2181 0 R >>/XObject << /R8 2182 0 R >>>> /Length 63 /Filter /FlateDecode >> stream x+T03T0A(˥d^U䙙[(9`J@ L j-\KL endstream endobj 2182 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 742 /Height 578 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 742 /Colors 3 >> /Length 30892 >> stream x먮{v9ؤ 0fXEuw@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H\vW` tkZAo:?% j~ǁ YYz@6a\ TJϷu؁a~rw2ArG=1'p;4C¿lJg?s2X"0E ߃6/183y!_!`C]D2-_fV"XVgVѢ]ט@"]OE@bg]&/dy1Ν>I )*c RtUae|7c&/Hx|*3ng‹\/ LU*z=7Lbqa90)/vvr ܡN!tTy Tݵ!+W淁dN].tJtE- C4 C2LF+{(Cwc bpCF LeHג/ 3GFbmء+q8qBSĔ{8Emغ$vE@ H>of_]44],קrBzkϣzф(a fCȸG{=6ϯ}986n#WHEZ?}+Z+wL.?fH+1r+ X&p10m%]hh-K_OK_xܸ󀋿,8Lt_W+|a~ksQ-bWc+H6P2Ŵڷy0_ M4҄Ay&U#vIq+Ga ۹+|e2l>]uT.s7\ h@3b,Q]|?14t>whH%``N[}Z^7]:gNj^S ,m\|cf"k}IQ$eV2p0e"-h\85(XͰˤvIw¥{x `KpPeԢda3+ŭkث<GNW:1#VT4po_}9ȰhpgΞN8L\+wIXI)xH.3_v%3<ZS+beCO+o tF!?'i`Lb3/ _=MƋ |-ez;3Uχ1xI2V}}¿wuX{8`6s w );45~J[0tei{%mqF-#J>f \xHtJX8}"=c|_-OނO 0;y=i;yvFdtlv-عֶJ#^iFxd05+J9&K,4>sQvVcH87 ǸITڇj<K}Q+xtzs QpҌzPY>G|k 728$أK<▟x2DxN;vO}yb8:gѥ ;$\|)=J1p#ZI{0%pDWI,I\1Jv%v,m̮8L>+ţWGm1=եY܀& lN,[q֙xX͞&~0|pE\^=eECO G j߼Vڱ-~0ïWDLdpJ&bNLt?^1Ny4~~էd+Mۡ-e{8w,nfppd J#Vn9a,<;$\Dw DT+z%kp xW>YVϐCΨ m\pzPdȝx1û$7]%nG5[?H,$+΃C'8إ+N›Na7Z(-vp [eb T  3W=ĝ#ND;5i!'wF$p _1cRT +j,/N/>=?dDZ'rK`bK?-"7ah `5nbᢄ14vjHYטmbE+2 Z!\fMLp4;DF ߚUbzef vzvk)'0hΈfI/w n4Cy1hJQo7 [dX<.oa0nR-[jT F+~\M3tM|Fӟޯqd1wK`I2T `b2y^Y*V'hN6G8f.E 1GyP-\&I+7bc a,cwC+"nhpR)WOA)mۈfX?_>z%OM;WAIzIObA ?* UĚ$ .$_>h]zůizb& 7іH 5ỉB#ȓrKS)-]oZy|yWY'uZ{k g-!cY]]+W+~>ڬŎ35Zgz2s$:`HQ*Zbp(<'pp+vF8KaݣW3+؟?(t2I(y[/mb x~Y-_=[u%[SD7S#\4XU P'/=ͨGZjDy(kKϓ3dt2j 87P(2o,Hl 2ó³;>$ Ur Qq[eS΃۶bQFŌģbetA{\<+*_T -"OlK@4*W(,(vdT95x /+J`hD7fXzb r%ЄKƾ7RMCLN%^!y^Y\)8]PRm;eh, m zP4"|*/=hdٷ=QC48Jp{bɨ4de Qj+96Htw Y3_DS*;s]O{I'Qs̰tOU]R lfFRsp8g .IyKyϊ߫1H PZuܔ4Pnk?S)֏:^W8;1˷;za1VXz;c!E`5J9xS=Ɍʋ^FQo˹!5*S-3WU! \8k.^)^!W27Nhd,;Ɏ,;wm7&JkwRY *+E\7Iw!\gxO-!^&j2%NtON*!ma^R¾7^Oz[Sk˕Rn|rޔ8 z\l]Ud=ETg\,[B+9WniXW.&SD,fXx(|Qbe T:T~MkIe}Oo|6/}m0pGtCPr˖"'WԭPئWx%SV bRcJ)b+-WަIHvƽ]X͝.ݕ,zH+Aa4]z#*%ވfrzwF6_/T󮎰\s-e_@]'M2g\,ʕ`^1:{Ȼ؄ ?d4h%b:&ULaT"W4ܠ3RΖƀyI͞o=C.!bw9!wJ|-mnS4^|5WCb%~*WIe辋nB)cfIoV&n_],Jh( dG1,̊u4 -WQZ7ȽAC͚֚6[=N_O^OZ\Ek[ECц!bo+M? 󸎬v땀41SY~zE@C_YU5w/IۓZ͈} WSi\5nK#\ }jo"zqz Ȑ#Ŀ+Ωҟ?Vov"rsz]K1FuB-"c54 6ItG3蓓%tjn ],]2b,J-5ޅgu;L WenqEindMN#*RՍIlE)vz_ڏ)͆T "yvܥWyi+WvFkRGg+<|*)76-;_ux3Sd)_w xxPϽ+* n~\j}ftXq,ʿBI4*A>bWU+wn,K'uS8G3%~Dkҋ±4A6z|bd]>VwTnS19a bGw 7ά4mG:Ru58=YE:J7(ci)6bL;%K>QY&0^QXwgOBG /(X1UsV<񕾡- ǘS`iCxJo= )i+7?mgj BgnfUǶŏzD6yCrp;hqĞyziT 8tUm޼)J`}Ehf+`7Ċ4dPssLth%E.^!}(:3 NіŤ|\Av lnYj?/΄pZو6 / Cuq Nbkf4x,!24p1QzXPT,(l+t*d/ s/^!՞ϧ1MYQişf@L+=p+KQIXn+[h.ҟA53OdeBԹg#X?ERAHǞQ[[]>Ow = $쏉.,@C.j aVLVãl-g$fڸ~EȻYybivJˑvu~WJ4w gp|)nX.7qdy-ߤ'bbsv.9.eutߟܷ!7ѾȑB4MlCNFR'.2W/vL^mʐ-Ȥg *m 8Q>hXT _by^{dEl(Q*qO@0(Y<2Z{11 5M7Dm!=5tj% #^]1%=5لWT]Xڹ(f S87t@oC"5!bFߘ2LMcM,v.r5M\@TwWbbeU0sgSH)d1)",4 yjETL>;bE8Zh_v"hψ3!z_ ,2$&rI抈U`uX4Tb)j#c"fdICHQQt.43'hJsտY8MeΘd)!YpwJ)G F6N]'*Dŋq>~+\F埐1jh1f掙bսN^,3V:-vwR)XՒZL[4 r3M{q3>}*D6S.R_ks锢Nfr*L¶T}`+5BuE\eQ6{$ Y3.#.9GB#2ŹBF9WhIY rVH |NQX_(q oHJEhtL]hev]Qk>Q\R;Jn% IR =KmA!%ŲT8lxb>_}^/e=N1כK OA>xws4FlUD+?ڠj~jӫYd{9@8 O9ar&p:],z%|=fvV`CY+=Pkj2.HFl2$h#gVk?_#M~v ͳdD'2$Nj"ޯ\I,jWWaO`Hdl'Ju<[%񗶨2CCU_7b!Yh|zb,N{aHsK/vYZ?1%%;ƗV}:{猷]}!xbr9[Ͽ#ڔq3ёT/,]6Tfs>")8Յ3\,bRmfV&1(BZ Mmsn /LpdyA#Jͨ^f2:+'\%3nChY(ssc-b>(>eNbןŢ"x.ȗ: NOȌd֞#&;T ¾qPTdXVD98],r;乊S.N\Iv*h:U| 0]#xG&$IUEq/MV$«.&p9N5qDb%Ysd>ː qB?=ŲٸKbܹ_ëMi!(KlVtHp,fT020Qz-/1AV7)% QXn">yƗb%ѿX5@Iyf.) mϲz lK",*+hק,D#&o~ퟒ_ȯ¸^!,TW͒%1}w=v $˵Ѳ\'mqzk\f@yQHOH=4]y_1"eDm,EZtJ4H1F?kY5T Xͦ.&.u]~%3Z4+˟]wtcL^7[~~1g0+zt/DtsK#@?Ho\gz;EqbXÃ$g&J .JsCbb9u}X4KJ|Hdf-ۯou%Ij4q-3و6/UlUpN?-p413dVn@8oWr =Im8;"S,=qKDߓ˥'#~'ymȐ4,$қ5r{跪&%~%M@7K#3IEo皌5Z)V3Q! 38#՝CD +];Z^F2gEPk$S obZWJO!M]!{y[1CV K),,7!oN@>MCzʔ#GJ+ ʕ_%UK `!-Chi y6~jOaOeT핢\Jj!Ѿ,8&%P"~$U/YYF5&X{emJ\*T|2[gUJU(>\ p1If~ׁoe4ZjZ_("a{Y5~QZbIiœ,).͸e2Q]g)[{$˺RV8o2BKǿdu%PID⩤v6?:rG[V S~;D)pd14'Eb?*@ӂHLӧ Kي^di?_TEoc436| .ǃI8uK(y+:CS>5fF$K{$dxd1< nyR\]Rftd9WJk{4XZ[;Vegh]5$e#sbʚf^1wtDǍsWJ_Nsi: Wbk~05rBJ0=Ҷ7RR1F% K>;S6bIV+W{,{snO)s nI1|DsKWQkӰU{**/۰,`˻U7HQaHYuNCI.kɴ7\*O4E-hZYquJ{ RCk*wzR#pL3y/`23pnҍKtbex $K5qY/yӌl˥Tه~OFh.lWooBTڹinI,\vIc&K%E]"@xk@*YR\,y(Y;$/zEd2ꖻP #^͟h7n?>ga|"db97XіOY?X$RE^H\ #v].YH$Y&],Nz%ueK4b)1G x.Uz<^tE)jXqxAt ju)W 5BRu%5l] v4]ƗHѥ+%,? f"~kխY-876l`dy^2Ց,brWKf7QѬ9SS%gw/`zaIOĪګ̫ww}j_Rf+n6'H)".$eŮ2I,kKnedCq3.cݪxm<4KfJz:GvWERW|KHma6PËKJyR\ NRc6U>Q*.|TB#vl4$ 5;f/,_WT#*^2:e?=[nMJ={W> bV'mK]R&`._9't]z(ւVQP-YKM v@F{q!=V.T KQלv 4۬@G͘r*31[ޣ+|*ocU ueX܏=Qk!wYHj.M4Ĥ4>%c,Yu %YRl RxNђ٦Lf=R8$+n(v6Jr,cbxepuq' H"N5c>Q{"6 d-.Stl4 ?KtʤR1NdV{ť%Lmx >j?Jkt 4M\KOڲU-#fU%?KEodsE9wYjMnS/iZCUOCZG d"b4.Euvw!Jɒe^Ʋ S4kQ}EgJW=NDS5ע lAv.klp&vR.5i(;l%#Wl!8H,"%KYX F%ZbB3B>K_&/9' e@hm[C廷{OR{#P7.*?\7I1Ndo._$K?}nTW㉚I $K?}bT@|^SnzK{q*MC,1)ю^[R|UkQYE{ 45O^ƍA꨾c\|¥IJZc0)bFFһGngȉ/n6_pWHmQ-͢;8VCړoQ7mmMuUK1cA\@< H~(H[]a0WXUbp+%[乃/(M b\cQСcK绢k?]JBFno2kmZnY>1jR6,m.+F +{$+5.jƊQ[VVW 2$GS] vHuxMH n[X6x$eMkr2v8 H~Ĩdiɲ>a5x[ i'fhމvWHJ|2ZK_ -'`Z(CŊVgDbv>1*&Yh׀dosd!i2ydnaJ;>i +4{'TT-2.TuܵsM1!"ק]?ׂ*m֯ZK?JәY]%"EzKKdO,e3ox",m,Z* %ܢebU1_s¥aU&sͼ¿?"7sm,2"JZ&kdT56!q5JdO K¤dosdy?ϪbT7Y?hjތ⧨o@ᤪXBX2k|b GH\ɥW$ QSXֵjtpxD[ "@:,Q%ɲ" ,?t_ա֨(>Cu^L/?gR3!6 P>~uUi=)! '+J,b?%3ҁdOZ'Yxz @,?cXK\Z+X&G];+DH/kզ̧wև 2j^f[c;ɥAY%ghӘU),lr$sQ O Yļ, #YH(j#mjgאړV΋{ݨC?=krimI.Z|$١N UN>t1 +W@l3XU0$7-H3wce咥M;I߉Tg]4!֍&UC~CX!0mfQ!귻ًiL%Y_/)1m-YȌ]<+.*cYe.3@x.YzC@7\4)~o hr4X]W#S_9O+%Ң'mt]\,M#wjo8_kovR6X잙ZYTS-\ ELQJ~B?iVH; ,b" i?o.o 4ڎ+'h"1,I)0YK^&ޥt-Vnv[$]Q,9hXiZG,xxdcdSm@,$IU˭2[o V2x^u¯0NbYl3R˪^;WFW=h˯U[CKMUE*5m1۶N67Hj wd1,Fe]lE,$˕pp\56|qiijjlciOCRV RWXXl,%ekmjB*K pɢgII+RoXŢɲU.Y'XZ1\)ƈtZOY*Dak¾K/ ܿ yޥ--͍];8]1op⹒'J;#Yh|{-%YEx&dv *H j #WxFjNr&j ;6OJш@QE$-ZTNVV0.GTbǦgⴣ5Yt% >@³&% NnV"Mu'D o9yKWU$V\=4XY#֫)Nȗ=>YJ5SU%\62R5SFW Mkʟ Il40e4f)Y ~‹Eժ%˹%JTT?`uHf+ˡBS[EtBԥtgf(W;EdܔhM9(Y'B"ZѴR"Z(Y?V,J2a,.fbvUS7*z?B9`xVP.~5E4 Zl.1)|KKvJY@#1m,_{XtK4jBJbы$$~ OɾY.U^b-ŠG|=n2&Y :^j[]vU(mѢM!)̶k.'[yޥZL!QekO6Nm@2џ^^ 4TgL3ː2Tue(Q[<i"bLѳEQ97O,5n4&\ j#% %sPquDB J18S!`,M :fJG-_>Eʶ4 X*g[JqCwFQ3s U 'O~ɢEm,_d|4A.{d7LB# 2j܋>+)uhWGW(ձap.uS u~ՒuL`^H3@{ ,FXVܳhcPvHZ@ر㪥[7?mZd=J %% BeJ2'i1͵6)51NG903 *o,Y5MQUW'J@Ư%3ͺp1ƅ Op Kҝ zuJ2.HʸlO/tE' dYRby+JļmhR4U5o876[+Wu[!Vg)hRT uW\]N,<8+_,;K_.C uE)Bczђe x '&Mw51<WZ7]tL[e a.Njf(u \q}i)YĔNb a-k"b#6_ZRҨr>g%[M] %zzWQ$SXK2XYۮ.\tmWIH7)Q:cI3nd |Rde(qL+z*]uxUKQM+YNjõh]IRy]ԗ:T(Yn@nUcj2c_\dͲC4A\+ܡrHn]&yv&J,F9fuCW=z@48/Yiu˝ݟ,YDk wiy qjBFogfvEZjڏXUqT31Y^U 'OM\FhQ;C=ð6Z첌BK?Kp[%Pzv1kEϫ+Iz*屲GZbr#"vu]3% K(d;vP2&^ZxH@ O$=Pu-e(M@n|C8dMQKUnY;VB沭ѨdG%˨n)b\ 78F ҁW/,Fͬ$hIëݬT'6F íO"ɲ)&1|Oyp'Y !b%%_.dEH&&m#hnO,Jb&R2٪piV++_DUAzDP]YH3ƷEe-g·6Bא,CF)% OcT]4wd#ʤ_ZAcX׌?f5bnGrZ=iA\?kewj!ߪGҢddyIN\ş3+'1N,5u0hfhض048d^b~4B)g]퓞qCNlJ^%QJڱC#Zqf B.[[s$[zI{Υ XPY<. dyegǮ7fBԼjisI_wnFR}rJ}[A^Uft J T/G!4HSKeA.5z^r>?hW+HXƘNB#YRTg,#KOZZ4r˻Rhb)%7JEf$Kwµ;2UKiqح~jӝsSXk(벯ȘXN,C3)Y S(,bԐjƎ$$K%ͦ֩;WWӐ: mkYL & Y3|V@M؜<ޔɺz¿H;LWnO;,l藓K(IX.ʦY3K]R^WQ^(>-6yRhS4 SfBr%?hbGXҜp\8cE`%K8fӰJ.HM^qÕ>):),b2WT㱒H(3VTA+ ލHXw@Sr %Ev,8}FOM_^JA1`W7Q$ucud곴gEIړ!'%KD*Yh% YXFjI/kH X,3Ss%Ew8Q=@cj"6SQtr 3b!&ytٲNy˘d ]3Qݺ-30SK]9Jբ2"/.\ٌt gsdY}gi;vdh ۆ8br Y-y_U&eN_\]P-MvmiY̦e4bAN#)z.kSЍ#}M:hHQѬ!縝CKtQ=HI\, 7L#Su^'HEIT;Z3-:pZXSEkO.tR *54 -@vV4X3?MЍhRT)`&;O9 7tr)y>Xa-|;jbW`[DSP9JkgrOm=Ả][Xyd!s4z$l(١+-Y"RFP}.J߀=J/nW]֖$ۿf3R땔یl+ f^)q.mLxn_P<8Zȼج6p$_v:Z<9%B۾Eu(}xtG^Ƿ?BIgMl#$-7C6E=Kb3#k^V#n0jƏ£jB9m&zze0ѵ 0BrxҬ0Gr3]Q@{^'TRh ,)eR8 5,٩]mhW r\ s=闣~tÆ4K}\bѺ =>^G I3?F̽u/H1^))i:ɢR<$eZhpla*\2~Ѵ(#T!YH#DGM(O3(hAYK3fT ;2gBJ *b͕2$81)Ff0&:W.Q1"*nk2V,7Zi=={bܲnwFO.Ee[hs]3om_stύ.OJ?B(eyѼnEkUwUw9͔zŰC}ӁU3]a|2`ErMan(]#oD@ mELwW'v/1ׯ:|Xq ^IJl$kcp>ALSiT ݬjzYO]ER b4QV)镝1?}w5b'^ڌF=M8YP~>9gJjƞ=y weQҥ買Nl4d+~wRTv!'^݀[-vY>Ii-4ЧcşeӅlgI qu^MdU".'ze~-)hBL4j_+?<2 G ;tp1jj!Ǖ:5fi<˺e@FZw'nESM\rbR-:s=O7WԸMC/vňIb fX18eîg5\LaG\׋ˌhg^$pqE5Dn}VEcu%{ɛ-FTX$hr-Y'bN@A:إ\..'{f#\/U523Glx12sXhgxt#QbKyb{>f dXlbSwWg0-?tQuǞjO,XZP~n5Le!z#VS[y"Bh0{ W֢y:S#Қ Ѩ^y$kN=P7\18c~Ǵؐ 9ZQv飖G5k\o.MFW 鵺E]E.#Ʃ/z%wIt_(sEφ18L!vhE8z\g* Lf2isnLZ3tE a?#E!w3Mmgˮ;9>dxPZ1>iFkVZiOE3@Cuh03G 'hwPV'J7C+ءn;FǡCϣZD"OW-47u 1$:4}3Zh1ld2ql,DSPzV 7o5? !By1K 4,$v )X]qou/Fky6i$vS@m|pc+|j!GC/ڸ6h~˚̙ShF͚lw(%KaG3;AY}g%&_ϷBʤ{2Z$\Fk]RJ&WwY )so)xO9_y GZe"D(.u}'{\zPp";r<[#w*0ɜ K$<%v)3l4%818-&MM  l#  LN34m[nFj)Bc UCL9 r6>&_9]NRsE;6ؽ'30iF^ @YCrz6ZLOoF54Zd L\0Vڇd|sX&v{wk8+# 1*{,7޳&gߪ93uxT76ǂԒZhݢ%tzWrdT91yFl:gs |١.Ɣ!Vk艓pzq2_`8{O2c(3GFz(?XnؔyH_z`tU =bCKn1)a*NbN=.=nS`G[xpJ~T"}Gdm`9ŭ:u/@p.X;)=.==8q,u xVbdl.1}v9'gH>xϹ+\fjN#iޒR!EuG" tj4{D=1mnT/p&ubB miQAQ씣ͥmN*OwƟ'cyQ22 0a#n o +'Y( _hNEX$g.YnԨ!9yF[;p]c\t,=wbIy1r`;J7xD=p#uם;Kc ]etC-,59TR (n*4GtgW'`,CH#I/i; 楅CYřX{qbpʗe[KQ9++OD~As&f o _& ;T~._&Wͱř׃t?8bEn᲼>nqa1_fLΓ.ZgL2_NBG[ү<!]` awd^`[ΏeZ/ax|C3c褭Tމ'?7zoSߑx&ZgbO0͕tx+8?:':k v23:`><ţfi<ϋ'o4 n:Iǡ2zn{U+3Utp Ygϛ9;}+B_&ɯ%x%΢o*r7N"A0[~?8;ğ̿9Q;T4̙ ۷۬yxq4F{dP*&?NԆ]8V#MS $O}&7֌GM0|ym{w90b1603 &[¹{bdKu_0\0Ls-N gILt$ BW{0 `[Y5\N'<e> _ w$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8HnђN endstream endobj 2185 0 obj << /Length 1879 /Filter /FlateDecode >> stream xڍko6{~O2P+"oMlZðm˱0Y$iEIv4w{Սf*Mj7K0JYPY3[mg6@J$xUuSTwV](;S*\& 1G֡J3{窹΂o&xFy mm伸ojdRlm8_&Vd l*A|{)\ιk}K'$ 8" 4m7Bc:pTl]zg.bX'1Uu9srdl:Q #A&`WD\-+tםؚ peܗGY@1bW7 C̊q|SW[q.dIKR-Jm,ݴSQ⬊`cX+ʊ  cIm`vX944'~uveVN>jHrdvd8˵!|M`4D'C?,4>`1s 5X(шHd)ȩLStc˖Y+!9ޯ._0R2Ǘ=Wqdfþ8A{z唲IR뷨¥ :C?}l;"PF:겜nD⪪" /9 m')i7Fī·Zio#P_W6Qw@g(8Ⲟk5e7s QcKޖN}?[.Q[K>\jpMn ᷮo~3Ր~Fkօ(*/ՋعCB:CjiО.TXWM F SCl3{``X Ȳ5*#N_ @<$IK2=,(|$QOIT S^]Ƒ<(ȵ.{z "@XBF&4uRĨ0z/~^](P4B$3& ڌʈ ԩ^&-&7^ß[H5Nv NqIe͒=?!4w3TYZg.E+ՓvGvyOa,cϵ쭓|diE¥L=,,/I(0kcbtPAc>$0x?3B0u-+猗>^KuT Ĥp & : Z.KLX뉛F>:4lWR6z2iy2(?Mgr^?+L 8ݏ^U޸oPT^02-gƦx4/:6/g^F Pp1ti,T W2tSZcqv^}Q]WF̅^=O; !ZW"1؊7% H;Vńp0ox\(2/ _vǒ L?p/PsHH\uvaܿdTq0]#1HYӊ>/XObject << /R8 2194 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^U[)9`J@- !j-\J}E endstream endobj 2194 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 598 /Height 458 /BitsPerComponent 8 /Filter /DCTDecode /Length 25979 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYV" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )QGTE,p$AZZM6ϼh+`\ƢSZMe'cQ;KDec"{ (u Th{Oe}Ggk4VXKʼ`Zέit (AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNDi$TY݈ 2I=ji-MҴ6;m{ペt._ hڙhn.| DAՏNZCD-R9K'PIsgh@sl5VrucJ}oiitO~vZm;cfi!i5[ͱ/V1IၟIjڿ*zS:U]ݕց}.OE+M럧7BT$_5gE#4}囼,9%I_V5tWdO'RYs=YDac$YrYKa6 5$YN5&޲JCK7l ,dY%gʃ'çPF?3]?m2MfQvA?sz?^,02: Ƕx+jsU*UZ2+[O`Ϊ?us#I^]N*Z8QEAQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE趲v\_ܱ[b=Tml4³c {Gڴ|Iݍ'DfB8JQԒJ2vL q9Hb=͊"i2n;H;V5;Xg'(K8^4c~GyAfsͬiz ${sѧj40OpuϭW~waMs;*kٴ-oqqqX%Χ |6mo!LVijx=Az_+W\.4;QtȓnIs!Vhi<ߏC}vVOx6k/!@1ݰ[GGjxOm]k0W۩z|zGRO}a9ylV18+"qOع[>l2 \NJJ8)j|=px6@w ʪ=_I%jwEv.q`kyVW s)y3cљQE3(((((((((((((((((((((((((((((*KNUfo5&v$q+ɅAڹikk+ktzdMfѥF!yHsM6k7moΗm4pеE0Tijxsŗ~moH2OMmZEajp/-rp$˴M{򥻌G̼=yǭfxX]!}68uЁJV+(?+H[xJ&>ҋ,^# 01gSd~uԗ:]auϨzzWQ6ţ\6ȯo6UJ(X{%s:-n66ڍK2pOYzYAGM 4s!޵<,~gk wܴd?3 -B\bޤk>v*otWa\&olֱ>m쏬_WT-Dz.j q-\? )IJu-~H⎊?΢+S(((((((((((((((((((((((((((((,ޮ[E TGW-{hiORZ[%Uso5ȕ3.Ѵ{dO 6 ,Nw,׷^UISڥ{;yvKKOf:|Y^?[q9i<mb5[LLB`u35~>y H/T8{]|avx,ݼ6 ~jPk^:]y(X#l֝%֙hCTCe)!Pa ÓLE3U"LR(W`zxztMJkw_KrX˪[j>pepq _ {qjb>)K7D\7\9+ZMN]$q,E2uw;WWݎH2}&o68qsҴq<%zb]lu [m  RIpGO:`Wcf&32ORhT&ȷZE"HC\zsQik7_cQkٹ"/<:籬oN^r ޅqa(8XEQq٣$I%H1zM[bɪD,0Y8*#}kODMJ]J#KbNTӯJB{5&%I.!]rT=5x 0FOF1 atE$oul7oґB ƣc%A9n˪jV(MN(} *hmm| YC"b?j/WU~ӫE+?RAV R=r8GpS2(((((((((((((((((((((((((((((+K֩y[E*%c+6oz/fG!2G:~"|.[KqiZLp~qNhz=`Xo,~:-v^n_yMʓS.Hy{  ߅q*MI)+_ʿSKP֙ax`־~Tkb$7O~+cWҭ: u(k$`Algo9!^ CL]z]k?ºiڟrY]:L?jyjϞ4.at~4ˇ2gwR&P@\2>:Mƕ}<2FRHUd*vqLYu IvJzʺׯjVlOkd]ק'ҫ9*jJV];}$bT˸DGC+?0KhФLO*]ҵ N}=lMDDx88 8SWUfK ~C>Xєy3husqnw'=;t"6Wz>ϥanb[Z.l" Z\m!:{ia奵ۈ\N?~$ɨ큮#0'iIkg#uw$` $N*޾gOO3R![C(#$li:f[f9> =.H3ۯA-F:y֞֬Bv{q\c9kwl1U.$0+i٤񮹮JFlN-5r&]/}M}4D'QEvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@t>[U}3\4 c|gԜW]Rh7v6Lf,e\{W&&Vq^?R..sQOxK1k6  {` U8"|-*sh.|n2|?ɣMgG<GC!IJHxCqIefjMcUvPkXjxE]Au{gPyF:c=j V'$z1EsW$yǙ [3L_.WPk6Y!470;s=SJߊ mq 똧xu~@$ 4sCi#z $^3?1QK]{Ӧ} yH=s©<7]Zt >O ^0I88bPZe΃F2\wPqlIĖ^o!Y-d9oPF3qT<9\5o1!Lx8ǠIROE%{?+jIHГe휟6#9x<>bo`k[{0ݮ3G7ijmg pMy^=3`J SOԬ۩$SBx L8p1ri6'u3Z9$Qg-“w)鞢Xh &@FU7:ōMo%(2CW AJȃ)F]YR c}+wRk_Qx%^X14=I* aٮM۳;>q]e}jY]Db7+G]~|ޱe?w~h-(􍂊(((((((@𯄴CC^Ifݐ\\31NwuE ^\mr7ϰz~iXdA9BiGFēeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@t-NG!Q&F$u=\N$@0Pݟ>uTV~Deǩ?\´/U{gLGهkRmb"R8,^8- H4?-F?lבΟxM:YkT2д7=߃sP-/W=Ƣרw*?̥c[Γx.wq.xzMH}9g7-CۨҰ{+VI[ۤmfhqϩtwrǧ]i[Y7UBOiw5BF*qqkk禞zg440z<*)G*\G^JcuoIq|A:,ުxgNt/ya7q1PXw6Mۤ'y@,9< \n}pywuo]E`#扇P}qRhڥΠ/t똾ˬi6{(XіU$k+ROP$yugR N,OBq`Б޲ۍ5{mԷ\w=WQ$l( va85 {x|$mrNTse1{hͭ\E6;NH8Վpƪ#S$@G̾gKR1uK6< r{w>|] 1]c/!w Aܚ_(_4tvR?0)r~+*ķEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ìY_(wR9stHm-ϯ{N?b~Ƿ炵rtح:s69hq=*M.XM#W}uO-I]O5]ob3EqZ9pŭ>hA#"*2J05YkkV KٽW+[}G} qFn":a,H'Coy⼃XO9B? G=?_ORh@x{W2ۍC(bo'9{Rڥ tjyfJ*SuiK W7Lz,8 ʆ7x=*|2݌wR>=>Sgot5l07s3Kyek&}=bE^c'8l쒍N=>Cim*)|X|ጯU rOS[|5[m9%FBȭ߯zMl4-^{/[a+{_jnuޣe( w*I\DY?v:\^Y鰭żi;emvg)I&и)A`3Tss R-Q4\tld`~x5MVʸ[Fx Ro^k4/I-)Ed+=~f3\F\d%p#keSʙe5_O{uXl]NgW/-Ko/;~%E>XZ92-͂((+t8n-7H Ɍ kQ[K1*Fᚫ@'}B(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE넵%Dc(o8| olg ")n 8Y ӱ*VIɚ{ _vX.9>^C@Q@Q@Q@S(,g'1֌ح֙'c,\|V&Ke>xObQsGPqX֦W#>"Cvx_f?ZG/z+ڏuͅ#tqbyq0kX{sh rqMM$%Tf[l=/irzNG.נ#Cb-sGcKf6=^"Yx-'14,x3$ELt!;oq{iE MD:~px9E-hhw#tr㒣Oԏq?F(S{y5kX9Ź!`3lԛw[^(4AR#ާu ]"9RGF#8~G>-(la~3W-O9cLF[hzҋɨ.UP/f~^zY~ Z#MۢgW1ȪCqsߑӥqu7G\ K\I?2F$DrO~Ƕ:{Ku>GD5#x)"2:V#״fQEekjmwhM\2; (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVΟ[j,5`n?L9xV5fޑym뎕n=nT`נa׎4RMuAyV7Z.q:C1S׮ZWU!do-%9`3ЯץJ.b5<-#=DFS#Ȓٷd{~մQz呶 ͸K𬟽|V괒]XO_ VTMGGFAOImb(<%rD2=G'Kiiin4[;Dlp 9#qE"}tm SɟОGSvƕ1& sׂx4q7r5+&0*o-D߸/r7A4*~<3£bLР!Yak5R+nWm4sZHUvC ng$ z|j.*&\n5][͑\l!>2dRK GGsxSԴ;PB.|!rG#==p{ܾIciw$~Ҩl1ֻ_0+89%Fr?^֟d)*˸i;3<]zKݐ8ym׃u wApkЁso, :^xsae_!x%O8ֻWOݨSKm(OՇ5kyBa ӿo6Gb4j۝Njτ}fU_≃g] Es[O̞VbQS\Z\6CbP駪QE((((((((((((((((((((((((g}uc'k;w7#tO5>Ivta7vm]yw7nO{v & a;;u=օR* |w/kOTycs'TH4{ _#*|/̴j+t1Kk-- ɦ\4|ux#+B4<6a=#=I֦ٶ4Y7yJpp+AYFH=y9WQI*eoǡ +UrP1^2b>]Y k+ͷy\pIbuc2:GO\U&U fA: ʶi# h z8IҔ\%=MT B( ]4;4bƸĊSvBiK!:gdP CLBwϥ]<ПCt_d5uز $* X$lUZY|MX3ZHe:133$ib^z >TSi{_c?h+_˺۰\1m$ZInʹs zmr1Jդr~GLMG2WlÌtb:wi5 vxSèXˢ݃pB㯠ֺ`ݬjDYo:|.YM;)ZI#,񫋥kd~})ǒ:!P7 kL,)b$_S*XK/A%x Fkk 7[vcsR{]ϦLx 8ܟ\fnFeʴ.2Gc3Z{G+y]xWX~fE(X6~YA-'~]Jո=*AujwylJMi C#KqWJu_wCa}C"OF́SR ϕ/{>ŸR"qBc^uլ2qTkx2W((((((((((((((((((((((((X`[]Ȋ?kđ^+բ;}돢U5&VF~6 Ynx?]fT3  trw˥yʣ7nms $U#(YH 9 9Sy t>v(SE,oÐs6܌g+˭Eݭ RL`22 :"]>`ђ\3cP,:g $T$1#8ޘ*v[oNG1Ӟ{zz2^_jKCt6D|KX'*m]k-$oG=+Ei k:d"[)~]KO#;Ov$U7:m5'Tr?>>.Qrkfхɑ 旍Ggϴ3&nۛ LkgβN5~{8?eb9YT9vYu߿iv}Xjқ ܶ/U{{{r: dK'<[5>QpEqp})DZw5Gk*I}P (o/r D} r}zT##6ٲTɴ+=TڞCC"e:g69%l.B5银'u?/ua:d2?ZߕM]Sbm>Ѷm58S?cZb]7ѷV;6Gѿצj _My]fcd͕e7 aZ;=t.:.1qp(ySw[?[sixBn- o)1;? \WѼPf F#S=Ttj@]:6qYz5>/-N76>e?~:洖:Ϥgmxbvd$!ru=ZizڈA#QTMiصO /& Q:U {l2^ݿ'~;s~Y ȭxV/ٺdK$:fi֡:[T͎P~m3C|' 1[6L- 7Si܌s{&.hK_/A&Pg7CX޳u?Ќێ}9Pj%]F<7._l>11SvڈAsPgRR Hqє-C[\G& vHcoI;>N0DQazӮf%jG@16_Z˯bT rvqL;s!<5irlA=׭)JMW1oմ7V׿te/'ʬc?UE-QEn ((((((((((((((((((((((((إ%Ix}jTb:ȠOctmY.DVRee@]߼=A9=O<x٘6dG B<{=12Vp#w%+pĎA?w>}[ _wcJ3l K/3P.8Yzv=" у&~n:c9^ ՗`,y3$u۷^Vڄm_%1!~QҰ|iW_=Ŕ&'2@*ީa Ο97k_rV 6Knӏ(".eߏTt GEM{Dln> jM]-Rz_'еB\(eA׏ϊkVzUeaT`p6O[u4}B{hv7[U 펵NHC̶o)ˠ(t'>cqOf?]t[eԌk(ĶHұsGD|}'bAԴ1mz-հ?g/GEq'=?>GJԴy!yBO~:(s˚tyu]/'nRtۍnm'APӭqRCѷ;[) kuM6=GFԦf9R9uɢ_FX5tXEJwfMroc9pCBlCUJHo]("l53S>5Eޏr!@7 r=ugE2 w{H]=g.ncf+!A Cǵ' _s8x{E =沵=nc4o}ZU:˯i.K0[GL\oImQ,NyQ YSImK(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ@Ґ@QEQEQEQEQEQEQEQEQEm1W aIkAs2c'ϩ,fZD{~g?*|dzWH#5"A%Y_X I2TqF W*Hul4Ҧ(=_ C9RL!,~W{n>>QgɫDbx̊s#zzJfmos'cx5%+=VU%`pu5B[QjvEp3s=~eu^kK(_ͪ\69. zw9}N8^F*ƍX[κ] q>}{WΕmn-B@u Pq5&/]E-̏;7ݫ݌X,c֚Ys .GNK<;&Q=<Ƨu{o<3BTpps)b=&nKD?vy鎛OUּ$y-no|>,f[65]?zY!cx^`(RP="UCG42$n}23HeK9),r!ǹ__® rԺɝIcۭyhd#3}:W'rH #lFT[m hӯm6oDHށ;X[ݸ~_*N6Ukpvٔ_$vٚ_jӟQ*KbݾӧIW އ?uqH>٦YjSp=o )6@4q?Ƀ?V֕=iYKfgG֮y@ۢcțhֺjz?ޚӺz+cQ͝WI{i奼OXbkZiN=$Fn;BќjF Am/mEh z3?ۆO:n%2DOϟ]=u<_im?BG8jVU7̼ҳZLhn2gwOv9Y[LlicO<~3j}nI:{'AϡM٩3"Оց&9F@Qд5֋qx$7xPKYAhR͵1M<0 N> 6 ۧn1I.dnn=Gi[ &pn1 IY({6.z7ӱ9~qmm%JL@}GӃ_]W3ūYU%sߠwZǒ_?_h%T)5^@j:= WCO֗Y.$HL3b~r9Gg3 iphf]Іb)ʯ-Yӿ{Zh F{8ftL=z>ׂl̈-uaܦ cGAY b[ʘnǸ?Ҭhw^I!ͬ) vVF =:vzH4mRNF7E&L^8?ro#x:*܏~85t+Ǵ{xDa؏Q]X,˧ ?]Ҷkm^Y!b8q؎{Ԛw{6Vy7`8e {%Sw<Ҷ5̗gsF;]g7UHa!5FR$+"C ޼朧Yڴ _pYlGx~Mo/<`8^#HCi6p0FAe_ʢ]$ɑ݉}k;YKVh61ҵ*כo/BQ]Q@Q@Q@tK柖6 g$[?suoPhn9[{. p?m?Z޲qp'mbs 䟮J^ eskY!:skd~޾RtIw\ԑV9y)۴?Nz<|r)y{24I $*7}պv9^8Ӟv[~w$GqT6ӷЂ ]VJr9= 3܏ɣ?u;6.-xʃ뎘:A}~Y:@E{GZ[XǮ[\ڱ'^3DU4_>}}kSA1\z~k3k9.&ހ=}Gkx .;-P{cF`HӐ{{5m g$˒bN;gcW+Et/f;t/"WvL {1֨~ҭc"AU^HuTblqp@OʯjG̃X<\_ߎkU5JKؾ[O0*hwwRi2LzŰFYz=}sکGMB"(*aЃx٘5{8Y{1ZNڕA)O@ b4N}wk[1ncD{rZrNDt{cx眶Ər:HO)ኀxo%]&1|mc*wt"G@$\DPvA(FOu϶tnM(%ksgN=kk`ݐZ²{;@Tak,1=auq$``p?ua^8Yߧ^ۊk^xwR4Kxo$i8+<9iL'>*N&y$`Үhiy=lmcRR)o1&)f#򕹙 I`-Vu}5 zBR[ (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE"Z7֑*>+2ݜY΃I>׼7 ۩*U?Z|5ΛJ[jpKx]=E3SM{k#JmazH YrFN<48FoM~FR\ KI@Ź}xj]McIJ9:} [N{FgaϖH^;g>r {.hi$ꋧjjV9z <{}jiʐI=v7h{8>"yr*tk;_kc}9_ *罿-zqmsTpN:'NFjRl5hM͙'8FNꫩ[MzД */to)5mN=?PL֭Kz=8Z_p߬_/2GQ̳JWϡ癥S&u;O9h_,VHRܫ ߏ+*}jI4bc\+)~=5$8K[<7-i\ۢ8}*j~hѦ]3EsF=qޯO-߄嵶[&[ISp~ W#cj4(6paO誕dO.V[[{49ʲӮkk,KD a$x՘-;Y;f)WAN2;O O2kJeYR=ۅH8զJ dZޕHϿAZ4;+/KʵS)IN*#=:MD.:ŝ02$#ң473^ȐDd ˤo{qq4bӴk{aզ^j5;篶z=V-jsc:+dQ܃׿OAYzE6zlNOޫ^~!6)w g=ֈr/D>22_l­yz%#c=̀}W$ kNЭu5{;(ٶr0O?ʫQMuvC M9ǯDg70/2۹f#:{V6gg`nϯ.2{5P$`zZ.[BV;y6J{=z=EO&߳}]\ӋXT}VN8ıs1VuVⴷKdQ d6}3\# Od<^Ggs՘8Fw_\욽GHH3yڰ(!MCb[QE((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 2174 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/clrLBMu0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2195 0 R /BBox [0 0 447 530] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2196 0 R >>/XObject << /R8 2197 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UY)蚘9`J@- !j-\LW endstream endobj 2197 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 588 /Height 496 /BitsPerComponent 8 /Filter /DCTDecode /Length 22259 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( *Ž3$QWt0Ou)W e(?)5bW,"G͐'Mj"zØbwGF56>FVB Ve=^94RA+E*u8 3LYl:8+>.n`;% :jѶٰ!S\[8A]m?WqI z>`7"fx]zԷ7@i?[U>~aq@/>v䭱J,S( ((((((((((((((((((((((((((((((wZUbSU؛I][Pp;~yU ŶI#izT:}C4w9[QHhVWV,K؝܆kr+3SvL__g|,P:MSE3ȀGǩ*3^$0ѝǟ楼;}%Y#aIʳi(gzٜݬ}يPRD9 _B tZݼ59(C ?!qfCl7F{=?ϵ\Y:*r@bO\&/53@n"~I=|FHI GsiuaB{ *ljaax':t JYR]Qjɮ%E {lgKt=Oxuh};j3v%A|^qcEyaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEoK7>r@i6L G8iUOWү-<ۨWMY8=j ǽ}R {[yFdVw?ݕvVpA伪M}"IY׿^-S)dmu$H$L_Arip:m=].[CsisVE:2+t*'osu;]oF`X3 yV=9'5rؗJ};PK]:7Y˘Xz+*kgBCi%l1_Y[r:5&;'V\٬<W|T_w>3ʱ^) Y9CE{7[[+eoٰ@?8YNm"@゠6}PiP8a+mSv7ƺ~E?Ϣpʑ#:C/ l]2eMaqji淹}mxH$?^N 9WD|'Q?Yz>gۃNG66=:Z7tF.mX<~4{>dJc{jծ>] ?r_/̹a[Ptܭj1{ŎП9@ʟ{Q?*/ӱ?ҋ~z1EWiQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@jxv\j@F}:~ $V Ӕ>HHۭEGh>X4fyXeqӎֲbmEYbp2c}jJN3V|Mh-5d^{k4;w_N[#W:HN<@4+.m\ vfB4~u py#jJ~k5?moGS#.U8@ nZ:t9_/u !вgFDjz/zqΩ,VWpJ+5'[j^q愿?cld`c8?.c)d@I?*. *c_6=-k+i %WTJ{+tꎚ*Ҕ<mҠxR߶Ih B9+?ӳ.E"QOCaS+(((((((((((((((((((((((((((( <>@>G-흖exݮi 8QӁuR'Hx˸r@<XִQ8tW-!?ʓWv9$ԧm%ֵ+;Qxc+LJGڶɓo{=iVpzD,o^U}~, sCpSWnsө?e(˖x_];ޏn *6(!D\g֒N!{9^d,oI3 ҭC aI_c:~9 nnkc}u~=5(;'!̓_xz;ɬ231BF9 RXk0-&cni5R+6x?R^"IgAh[hmqxQ*oh{'մKYnmb;xOGmΥn]"oGo~'+[ b2*FOq*MQ}nL eRLu+#5 [~(K ӵndDU3Ͼp&u&x7:?ͻgqz]h-AI扃eAA<kF%UU崸P2Z'7NTmekgx=鳬|.{*ՠ.Z,AiZy3eTgN4crN#['_P2yӎ6= _2=ǜd'We;<{dpo%~6?LSM5]_8]i"R\qs/uS ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( r#H2@j!H_ 2vM׮Z\&f| y;~ yմBK1qܲOSw'|ks*Ki7#3rFyh;D _mqʧ5`tBH:>zZi#Eo~U7QSd%_ۮQʺ`U5+h*]h+xb68˧ g$2g{zs[/}c$,8B6=8qV5t)ͧ)#pF~Wt+Z{^CuMN[]FK]R+&6:*Ưil;I$@3R^o1'h]%q֙I{6gzWGHyޮ;_-'BLbd3۱o_SMԭUVQtۅzf&FNNA=գ=9>a"b|`G;OY9Ym#fԴ}5Y`SM9˞b>.[1ZȻu[늫"x~ٵngFiפ#K0?NMz6❯tiXnuE "\GU-6ĖόN6ӆO-$dC\?tBy=ڹe`QEҗR}2CğF2p@36lqҪ\mm\֧ۗoU5~O]5-2[)(((((((Oi嵕:. “J Z][~!wS?.GzJ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( V8^~X(_ejYD.4bC"yzXjVMGk(jg>,Źl 2V:twB$WU50u:m˦|cTcNrcoꍵeXVr?qUKE?_Z xNӷbYԗu~dƓBXD2CGV,eџLhHkiV6䵻Rm'%S'ƣl aed\yף.zSh`TosR\hz[Ym 0{}GV dP>eh{tU%ΉM"A@:LsT4bf52\eiv/Oβ1>cV%ęvAϠ=*8LWw=ө/XU~]55~Fu zcϗŠ(HQEQEQEQEQEQE$m2o+*xثE]u=B;{e '5EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEo*YmcOZME,[QmE]=!wVJ=݅7Hפ|*_Dm&>II<`_\~=GO,4b7 !<~<Jh,e3aрu[̋!g!3Ogt/CKnFRpV`+tjɵANx-@Q9Gמ?ƕѳ'yιOW]~Fu O{ѿA]c L(dQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ayDpMthݑԫ+ } %Q@Q@Q@iڭ*c^ǥfVdEvPYHki;!.4Ѷ[r=ڬwitRcb9dw6w $O;iNxE~2k^o[:*(Op6dQpǏqZm~/E4O.d~W^x5y]̖YK#G)aK/g_QJc[|{aQ/i=赼 j !yDu_ɢ471ʞ?onzlX]u znh7o3peXzoJQľc67PFc dw}uMkI}bx;Ǯ?_sCȚnvȀr__֡oatnW窟OϷI 4Ws{e'^W~ ?/,}ЃZ(%Ո/LsӵE}SEԭewk'e8,;9@⿃ _.(8~48#|C6)~Qzϱ?^FluWcOm~frThyl#yJ|XXn=1S QSyEQΫr ,+Aʵڍ۶_'1^lz 3gj7sjyX*#r:֝x壕r;O*ޮC I~F&dU/{=w[-M  [iʓqzu t맂\6@qh_CrYA((鶋wtFU*kKdP:ހ75M{f0Ѱ]IGsKwл} QAAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMڻGt $ 3g{V.//-ddRF8+Cպ~5@Q@Q@Q@\ .cTJkJrI[12W\!$d$A$lqקNh!%Y 2a+Kg?\v,m,Apx:7֛zLYCDA[}i<[mʔt4Guqd|zma=O޿R-}iF%S8#R%:ڂ7`mY{P-r>)Y-Hxk$hH:0 \~cDҦk;YkcӞkO{?-#m󙴻'?㒤?Z_!K@lzjZT\MSJ%#;n~$d_8W x9lӤycW=][g'c_2+˯i#fkv׸?8<<MR"ׯqui H9u ' !_ΨIɥR drh} r)faX\`+JWαCĒjW umG~5^+ qlO $??V4]rp@N?zqj{fw.T)gB1$T G\쵯ejG83/2eŃKG?U7jp8#5h?vVUS1KIrVM?jz\[.3,Gsx$PM;ѫxU-M+ki)nN?*KSܽ?ϧZ敏zUI?ByÛ_;4Oom^Y6⥵7˦e?md850܌3zLr qR]i~硔X %8CSqHH"QuA.VIm=ǧ>j-_4lr]~/~ks_q#"Cg<āީ=1Se7/K#OzEF 9uC|~mFbYZ5uoCyu_֧4~z#[4tLWCh#я~4iu)Sk+8:c#p|gsМ<Ӫ7췉+~9^n4tЫ2 -ms&>7x㴢|5=ygqA>r'R1 C\:}rqFEh|8"Epr>ai_iu0)"rDهRWd%$t#=xcj#$dgG9'bdd .2H_1Xi{2Jnm̀؊C7Q-9-`!0|2 {wVBX6!s֨FCcF-:.0uTf}ۼydH:ڀIp_ j@;[$D[ЎH`XF=LJ[-~aӟAc#슶JN'џn"1Ҳ!) 6Y@R~?NH}.6"ųG56&xu_fXkv{Rv:m/sz.&3ۊsަAΣnyqQ4QBN}}?aQ࣏k-+KUX"{ z7_LCӜKM˚g|g Q" ]\mG6z|G4|>7⊡-elu ۡ<*RY%O5̠kCwzzqLuI ~_6Ooed1?#Hdr2?1i^o\?tjGROyzuj|<4h~a8[sttGtsmnU$Ӯ$*9t|gN6*^?UA%ձ,QyOQ4佻rdS [pzA?")۫cpAa1tnӎ6 ުǑT淚~ߝ\U+ԊؚM>edVR؊tsIەV2dkԣE_kX'?9b&ĊTs(+1QEd0((((((((((((((((((((((V*r;J(Zzذ0TorH ;Lq3K^"T%f\h,(@Irx@ :ү+"s?zcT?jyjpQఘc30Tu:۹x^:n% ߖ*ʙ#<z~;ol>dsWR ݒkOEcQ%Ժ!Sk#O:,*!yǗs\sRC~g-2#v~8*OHVLwdE+ϡ&ך'monkDRM.`bM?~Uwt͛Ip\?j|w}#\V1JO1Oң/|;p79_錍n~+c"Qv>TJȸMB=XOb7V#g̷c銂 UmJ/B0zK[#=ͫsϖt?U$M'|y<2U$I_J~΢n-qGђNLUEŶ|Ԣ/W^خa0q?ϽHl5^21?a qW]g 9mѸgƭAOD:Uywqaʗgly(kZRuS̄ cw6ݳ~^h2q?<.RD(ñf ?i9nuC[ Wbܦ;|T;kZ2"'U+"{/z.lHNT6SlnQ .T )}*f(2(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU7Pkb"x\"QM6BTjv#*1g-a 21c?H${We]U#:We$h$l ~_q?)>%Sj=rhIUa;<s;t]?VftW%8Vs<ϔ2㑞Nfk/JExovдL1psRwΓ/ I '~kP{MY"8uV/'=/:Rƞ!-&n?|@:Xj%]帱V`WMEW3n#88?qߧֹeBj*N/24"mnWOmqmVw+;dMԢ/jN׍;YhE&tF@*}ǽI},Z,^!R2G`ÿTsjKɭ?&%𯇷gTt/錖dSj.5XyRU7?֣^MŞN$9~4AwГ!H=)JZzN/*ڨNhotk1+)ʰyg []8sue1 ]I>nO ܲ{PZ1qjilג\:Sz>ז761H~?&?E~-UȹAqlp67oKqG GSB)O%HT;YmWwŨW.xqS.t͵o:# [91 㡦[]Kln;j_4 \G]sK$pj)C)S5^:V95tUc{6r% qKn@Eths1$I9'UhƔycNZQ\eQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9FM*4{Hu Ǘщx`dqkc@vkܤ8\nѦ"T'֚r0|oC} DOaV$eˀG8<*]_c=uCufx1nd{xXÀAלAT ko+(iwYE3C>۾q^kKVdRO1ʾ]nW[^Gvw_>i4"̄VuG V}j09U$m '9 <\d*=Ʀ{[{DQ~Ic8?\>W-Rūn`F #6ePT¨6 t!CDqmM?YV : ^]6ȺX/Nk'w.ۚߪhOh-rcn؏_+%.ѰutM6<\R2G >r1w)shUk |,dH)0Áֳh\F'%S'ޖg ^3G]4uM(-1H{eS]z&;KUzZ{hb neF}Ei"`y<T eM;jו עimaAG$}?5#+t0f#nϽC5k7q4JuI-*ᣑNֶRmuw0? M8m/۬$I#k&Glh&f9$Y8> +jtynz*Yrsrj*pv'p*QEQEQEQEQEQEQEih/R =JUnm .O+RoWkOO-u#@=r+ C_z:yGEb? 8`11zzՙ lX(^p랿OְT8R:@zlךۋ< &ѕsDd %GfQ{^+>D6%aeBv?+>jcT ['ǨYB"%e|uFǿZUUl8 ?5Mzn-7̧ڟǯ9Lm줼L8 5Gඝ.bi2KH9;NTqڶu}&J8G>WzKs|'NN?=x7\h,"pVXf7ߎq/|K{vͥΚxH&5v{}:~S b v_ʟyO3ۏ:J+cGu6Rv߭tk/4SiqBc֯v}y28*pU99毮bݶ٢%K!)qչ ^-paÕAd_֝88 zzqލ{{G]Bfw]G! eV4tAdCKm][̗QHÜW5< !Qlb]I2?fd"HʣRKev)fq(I#*růZ;*חX?qCFcrژ([H8?^M2dJISk`Ur lY̺Y6>hG-WCyu[ V2F#HZ]ԌG2NJ֓myq303SujAtհ2rʤ+:44#esN\Һ5 (aEPEPEP->$7oaOSQ\[Oj.!#!dR׬_JÖA130P2[}phKH ((((((((((Ŵ" P=z{60q89B)MDѱsu ik}#{q-)$KMAEVc ( ( ( ( ( ( (IT`𭫜[)!ʟFí]U܆̍{SYjR:h\G=JqԳH&esΤK1W`y̙Nqrקy#ur񴔮R2C ~Ye! 73ul@VNB@S.T/$#1zo>qy1:N]LJ)#Y u1}QUڒKmC1,c_Q+M&ϲq\`?5Jۍ&x_<aVգ$(DIdXUO@s@'ӘIvzDZir㪨=W7j!rYU;~og^z)o{l0?P\6ny@9=U &n.GsnOk"9?<})\iy6vktEghֺ|IDvq=L)4#Pݴ` J?OjGLH#eɜi}˄}~O/iw;ZJa ꧿oӽCiEoǗp }HmmIlg(؏󞕓uaxngGT٦0ipvwOns%._hh"4B-r7$G?ɧ[eplE6Vi$6Pd)`tK FI;3K[]>?N&jsJg׭_mm"s"B|I^~TuEƟtdao(WM9_ [2jrB9M[RaF6]ڷ+75~;^]3lQn3{4mFkm#UJ uW2O,ʚ_渆Ph!rtHt8f[IP*Я3= 4"6nf@rjKIQ6P k$됮*򬱣ړ[cjX_;%CmnHҙ-w%$ˤK3Ȧ+I%ԧh|3q?s^d8UR^=gJ4Š((((((((((((((((((((((((((((O% / D}G_JF<*HZ'B1tq}*.sou 랟 `EHHZjmo?1ɘ\vO뢸`&0xC휟ҹ]|RVO$8#Qȸv sRdRb-BM.!'ݿ;:ݣYn\۪?ҪM3l˃_ҵ5k(Ky`01嗺]NiF18GԆ=vy~jW&)Gڴ U}W]m0.bcwߏ޲_ 8Y d\A?lT˙](^ޫE^)/-u=F|/P:~5^[%%0)r>޽vϤwr\,(TgZ tտ>ZQM=^Õ5u[Qu=BSPVJwn8g9u+6iA_1xpG~5jm%ػX\%ӵ-%n3'<>k_|}˛J%wX5/ c:Z6N]۬q9I<>ˉvTOQ}BUb8as)JߩaRmj컚&{- oHVhQr* ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (;cܜm}%9AqfIm籹 <:xUI k'+rF0W8(pM/j3Ev]-.p:mbPH/O2}QSbCgA--)!/£}CH>eƜ)7Eoԟf~и-foU#GL[Nv\;xQTkaqN ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 2175 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/clrTimeMu0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2198 0 R /BBox [0 0 452 530] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2199 0 R >>/XObject << /R8 2200 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UY)蚘Z9`J@͌!j-\M[ endstream endobj 2073 0 obj << /Type /ObjStm /N 100 /First 970 /Length 2087 /Filter /FlateDecode >> stream xZo7_KJqH?Aqqč^]?(&VOU eג6ܠ@.p~3\Y2ʚdTWֲ\(o9 Upe(L*xW 's#+2fF+TTMVY\,0LȤ(uAQD %Eb`le2pY^e!P8v $x[lYJ 㝓C,e`;%ƺd!_Jʑ˲rk uzG*"4clT&PHV.[H01*CR`\MMʓȁNV '}0h`1PV-G2ٺBb!ɡ>6Z$Û8p8T  "6(eQ lD& +%PI³B?  '$ IpR xwyE"p`] Zޔw>(X3 a{#.K(nwT1EYY"(G 'N'sU$'~F1:n>ݲnvU3k̞Cp`x}[Nj$cZj̮wf6wd&x]:SWf6ˎR8b6;"!nRk1\1~*Ǹ(u7;-L=yuF|8_7*kkBY5w ~Q#{S_˺ߨj\ܩ,wT3wWoknqUsYMb,2;YK)]k;3zTyz4vrsɲ ń`'WP^=?wYO|`>L8GyU|R_U՘$CGtQQ嬍|(5(Lܑ1o1kƸhSzhwpJW>ޭc^xy W5q)l/=CY1ڮl0֣nQ\e?V0X\y_>9Wut+eu) [kX W8[l;_,vkJu\Zqz gLOۥn3Zt Uڲ7}F[\//-?׭_r/S+Gss7iECVYvwe7wٗ%o+ѷov{1@G? r endstream endobj 2200 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 588 /Height 502 /BitsPerComponent 8 /Filter /DCTDecode /Length 19758 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (Tg-ZJ(2FʖRoZ((((((((((((((((((((((((((((((((((;;u6um=Z!'큐~$s([|I1it{8gk0[PpIE>q%r9+f.+l#Yh5'UE)uܡycmq}OR8"IVtˑ<'8:],)@0\-s՝ji[++iLrT%odłAq U(F_v(; Σ/69F=?Y9>T;w/娢=`((((((((((((((((((((((((((((((!40!ڨ8.ԛ+X=@nhK}ejE3"p^@ c[Xo|«(3\ ?JR$7ΝoJ+"YT4Ql#QU9h7 =G"~ ܩ}M_u_V r/r9(MWciƆ MrŮ]ޢ4Kwk {[AdCʞ7 ԣ.blRq=[R-yyٝ?Px;s3ꧧ̦m:Vϖ?SOΧCt 3.Ou_NjG,?u9neM v5$r#ā(ћ~PѸ@>܉G0՝M$Hϙ/QVά,˚Dev((((((((((((((((((((((((((((((Ys!8$aޓijɔU%0 \CJѻHEfQꍧ&_$Uڟqmo}ie *W;wG){{ax;w~#']sb@zK+VX_HdBdgr~՝iiÒM77tnf^ify0Ԏ5U4GCI|itNԐ>\*}7y7(?PG4׽ˑ]3CPuX%YRNߎ?5WD wgsfH)L&}{tPEf$"1*>jWr2~q0/G5oj NPQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@AOi8I=%0Q鷺vf-J(elM4Ab~P9Oj\ .t GM;Po,ը juSɥn :ʁק?҇'lm~3I\h@BѷnsU} KzJ_/P\2# ?j3]nkqeq=q Zv۵2|mDxuN]6{yH2[\!Ɲ{2v 6l6Vdkc*hkx!YKK (4 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 5(FRZCfg<9`VJ}I&9_NN*KmK}Fu*CF#ssݬ<$*F}N{];~ERri;/fY41,mB7=;ڗD"A;cߕ2CBY?yhZ'mn2H[2J=sɫ3ո{`14e_iZ֟!|pǨo`#oTnj"pUdsT་rT5׿3s5s_Vuu}#肊( ((((((((((((((((((((((((((( Vb\1CWuiwAk$ R)^Zfm>/9U,Aո٘_ăsYR^Q4U#mNJICwNbl`zsVu㍢ nԗzΥg{"c/Z|"I[/um3=}RǨ4?Nc`%E݁=>5KipPXsvM+Jr^ooOm%ܱzo ױhN̶ ߷t:V-`ʗm$ ߅7Y8⸑JO=}%7f!'d;_,u{ao dt8g ZU5z{nQҩ|M rR:EΖm[}&~tP›eFt"^\&OmQ j+xbxFyJk;[20 J+k'Wpٺ s;[_O?FKvv< 1j-F{| rFA?LceƎ'=ID~tVe0۲Fsu/gBÑo+)4??s!+>4@K;p0t#*vjY8n{7?J$ݣR/_F75*˭o]dM>EVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEidT@Y B)L$g_U/YVݶK:YݴiۢT:4s &xVVj3V[KrIt෈=~jk(o#/G#E?/* Ce!TbJmvznt{3,/j.Ȁ 3:3'VewGBoLjjhg/8,9P?U6Hn6J@ɀxq|k.ˉ@GP`9ۮ1Ilʗ.d#x_UFQIBMĿ>赑Z%ֲ+zÏQQEQEQEQEQEQEQEV^e@E~D+"IwKc#d G7NAo{PO $2#b3pi=.vi683PPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPW |dLQ #f '_$Oуın_oRBlmkVĭW\[jA•*[})$9ovOT^Md]-7ue'QZ5V֓J?֬#TP=埓sP~fBКvqLn\֥q^M']m ŭq0Džr23RMAm1]&Dv~#d0hT JirQ\tl>CTP5%]]Z\E)Gx- k1v] #cjG5{iG͵ձ0k<&T4?|sW-:fj]wɜH0R:]@e>j 3}3֛usqhVkI[yPOQ58ϻYd=3>8+]kn6Lm-Ϸ T&=T9H`_$z#pck]:I璃ˊ_* G2p?9\K9"ES׾O^%!åͱ9^@UI.'iHϻ'm("?vX]}mj ]&Fmdr0ȫS^o>u||`X\q"6md\[=Hʮ[mZO-0c-(3QF{Y zJszqYHd ?bԕU?ΗVQ|s.A#np웿8=jIImNHQHGB^>XI#FR7Ȳl\+ T?Sq\44o_b!C'ӰWfrSᑣJiAEPR[2c;U.ᕮ%dL761LPJV( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4=fC{T1($`{Wu] $"4sXk(((*{K"BXn_QPQ@MY-݋ByW^ x6A*Zmu%|*zjǗmyMKM[=ś mDcޤm'~k=A {Tɴ<JV zw%(W%$g=!]aڭw//CH2i{?J :sҰ7ܘ +!`MgʮWC{o` Wrv_De;fOzSȒC {OOQ?t,鎇~]c+p{Qsi$'mnSRy +7|\?u0&/ݸ_pgML)_>9 ɲb&'ӯYdbE"wA_&n[G8l@r;g)%BԂ_  W(:Z.;@_WU,).N]vpjS:dFs3Q{}@d9ҝQHHwEG$Ck0:fG+ٍʟcVp$zV3p $Ly" J&m{vr*+1,@V_2zi^0*EUL熍tP1J{Q#H??ߕJP`mRrq H˸|cٿϵ>O#RCFR{~u$6Dٲʠ)$<^ioCcױ>23pҥvd-qQ;\30}7v0:Hx?ҜBBA(<1IꟇW?'_q<\p=}ւ0_<Q{*LűL$!:#8çK}rpe>eLtUHK)8d{w)$UY&-,e}$ VK۟{mЌ洌{_HDlY=G8]uAp:oOy#0ǩ[0z*qHsj e)rm0Vnnu+@8}y\Ǥ\-nG7̴F%dqU%>d(ISίdG9eѾ ?Zs֑?v3Ou>l `H6Yϱ|o=Eie$/}UO^5R/8It+QEdQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>9d7ee'mSQ~85n;$#-5Em󏙔ŝ#֔W<tRSo2r$gA4[X폟leQ*0 &1μi$~_|lZ3BTLIO_nZ_޵ȅT`\/̞f)v y Ӯ$ym1pҕ,JHL16{鐱T{-孛ȿqH=ih3\Zjqg|}7aa +4LqПafCn֗_FƔ4:%w*Iu=jـICiE|NҠ-6=^c @ଋ?ϭ$WygDx?QE=ueB_ۤˌo ?W+I~#ZKǛ9Mm'Rw:8aNε.nTEQǘv?E8hLT6ky}H!a&lzMp]!૎&tCs~M,oSwlpIK[cq''oGٓҩ֜cܚh{It9Yhp7n_Fs5$g={2$м-=cQէs&vaEP ((((((((((((((((((((((+rE4<݂xuݽ+GUkp0}M:]Qx :IyʻmK@'<0,}3k\NW.QXMe.9ʭ2CpFmo֫.ƪ6H-FX=o,pT^T2峳7RL 5Ə;q{M~]Bv/Y? ;Ͻ:܈uk_A}:U :ɔ{ Xv1 cj5hmFYGOqMcūeUh]u]8:ǥB[[N^Oȫ Ze<PAi{6:mxN4ա]y2F:N1k}q}hHe-[?QiTdm=&I|L(ܣj|F:kgAK 6k)n&ے]?QZd_*+}M^GЫӧhsOZo{G_ב^MOgvK<~ZnjRPŭXUTEukipR~?S>^9kW2;7PQH#Gb&G 3[HW۵\eA_z%8_d?)m *>f2.,\XE p"SОd+O*}E1ѣr0èS|1;}?=+-KtT*(((((((((((((((((((((((( Sg`s E]׾?ªeML=RٹtCr#-&Ny=J kPLK81 Ta$pEvTN>3 xEeWhTrMF\ 1*@9N&+Džs}?Jm`0eNO!\8]4/TF#J4饷u |A(i8qL90$RDz};쳸m(cXJ }t~Zӭ! O;H}R[&˅r}U`T&$WޥS`$Q+Sù^jZPg|/!n-DWڦo`tU@~sI-[ lXTS pswSȅVB$uKo2xh ~u?E\5Le;XøSMrzM{d27ue?B ]rn͏u7aHiWEڠ'O2F^.i~cnl'yP GqZgIu)v[n$ʉC,rgS} sՆ'=3HjYjCG_wv!U-I0=i)){>(ŷ&ݭ$W_SUo0<+ȿDǠΫlFpqҚ[LC]N7!"5$?J#-#%5=~=KCd_a= MC }"#*X ?2έYm$Hѹ!we;To}>eꖎP{Bcq[/,I'gnx<[WF__% F2xc*߅sօ8iFW}UtQKRp%,y?hX~ep@y#=ʴJcN;E:{YDN 擋oJ;(JLb5.ZJbFLgW`vk~dca{HʰC+[M\|ƽWԎp1]ǜm3E\({qTWJ#$*ZN-J뙯;$WnGo3A(aӸX+s<y@Ȍ#K&27U)[reWA3703 ̱2J0QEhqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ԛ:}hC?5~؈RQ 9˨b}A*:ԳQ m6g?fvSSIS6(QEQEQEQEQEQEQEm]Z7è9Z:U{sJ-HvdR?4p:4Zrk"80g=AפH|cn8;_ZcgvT;0nr$E?1gpLkw[}Rʲ#!)dZ~x8*==qm+=y=Q![3;v>T,9{YGuC*k-HY 8a*.Dd`޹Cڧ2_ש|ZkI2Ea*h!3*TZ[Hެ!Fv  NISʟiՔyhNs쓼Gki҆Դl}~N()oB-oA3^}wԣYuZU/f ѡ,$#%X]0,?r.4Ki1G#PAZ&౼[͎G\GO{Egu,2 X' ֍>g$G߈1M{ 6O5et-m`F}GQ~ܪt+GnkLOA7St晤I7$g[k@r\* $䜓Emdpթ+삊(fQEQEQEoSAԏ.mo{9$o]"L[b̚k"}7\a$z~gT>JEva}U |g(((((((((U;NjErCQQZӪ&},P#imߍSU*9JEVc ( ( ( ( ( ( ( А4Hp9BB2iWq|?*}pX3> >3OlӃ?+ԼU/9e}zln)}~>|qT+q].W_ ܏/!dMkv@$^ tr2C!GnrTS5Q_ݶG4Zj:8 e$>=-Z )boCUR&VE&D玤zZt zzW,uW4NmO$dj fC2kc2 sП6фw eXڥUoG_̨_a$gAbbbA>S."I<19/FO 'U.Jk3}/t=jF ).,U%ųNˋ s7d@犂D JU֦tDyOڥCNjTkZo_*܈[3 E{lmg+CʷGT3$bMnhʩO^M|,n| 8OLOf1ͣ:jasnE9Si!*09D>KΒU83K&8%`?#%TFN+(NO$IMIƝ8jW (8((((F$nC+)t ֋xV{l俞H%q=8y3EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJ"p$zV4lgYt߾II˻8 A?N$GtPeENhpw`~V8zcCd/[6TKo0Xdڤ`F8Ѻj63Gȏ5.Y4r[,"vVDQjAlel3׸DTsB6C+[IaIG+5GYK~_\=2=ǽ6_.v! {zLb2a m{yclneni~]fT/_a֏[r!qܣzTE#Gu?ȱ}ܖOnȶvi<])F C^mzѦڧ#5Ef$_w'zHo5h[Ma:NK<j"EQsָ"}ժgMHF^KK\piqMDaUdOgW_2"{4MZ7jdġ0z QQMGYI%?ܷyh&X jzu2P9ᨰWe(E7*H85qRS0:ZTo4h]i94,fK*C 7$SdUhi; Zۖ?jkݾ6qr?&J5R+t<ʕ%Q݅QL(((((((((((((((((((((((((4P- ( O vP>j|+Y9- *hd;3Zz~I{7/E{"ܴ,嚖ۑ:6ǥC}T`~b֓$o?kxmN*KUu [2 ?UL-7(MYh. lӦUg|+}=?t,}H+k>S8'o:{EhHMk{7 .I_qOFK;VP0 隍&;x8WՒ哾_M[{_}Btf y,{tVm緻Hys=3`S 㳯@~?*ؑayN`q.6ʚũ@buh|/ S.~Wx%\n{,Bi.?u s5f(E~_>⤚dnة?bH8?V;IݣWEA1Vm/e\jOsj[zʑVn&Gq@#棂x(?JmΠU!USK7JUewVQR !p$/aYdI'$ҳ3f$M%mϯYՕEUQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@l4sĻ\Kj@~~@AwI$٨uO̻&'W^HE^է0 wǗʚq,1&Nj}6r7#>WtuRo.!%q"|ކV ?os"%Xxb(լ]7Nou]DE9}{:.30bS-n9S;si];5SﴗufUr8Rz C%lj윺{}婭.7XE1f@'ibV%Κn;V$Icgm׃Z=*|S*y8as*8XHH: bmUy%eRMi_yj[y*J`di\qFSqT^wf"FP{Ҡf,rĒ{OLn%E*6ƿUj(RKcu%7y;QL(((((((((((((((((((((((((((((({Je 6$g;$9qܷаog(T}@rTRQBIl9TlVfc%4QLŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 2204 0 obj << /Length 2360 /Filter /FlateDecode >> stream xڥnH<{a\ {l9ĖD"$ejFk auuuuZw˫7u0S$-788%Ugb }gmYo ^ zc6Ǻ`ܡ\ZfJy5lJRvT;"ٞ 0;݄Oe]1jca=M["?_$Y-Y5|h=ew (cxIc%W~>Ij^`(JX/gҾo&6DQv73+ur_^JSp, %:t_W0+`u͞r?~B׫^ݡϭj姁&V/o9A,oX03WY5`/Ԫ^fs=PQŖZ4(,(![Shݮ}% UI,u5Pj~"b[5v-dSa&.wBsQ>W}Ɯb~;ړa89HszF?3iyT\1njb6UʔY'AD )8 wj!h(}SUqKQm¶Ζ/މ;ά*A h5J),)TgbVpBks i@!TBW<~o@OWe=7m/jtA vM.M 6rro b9B`k'iSd~ur[+E"}j. hܴ$ވIL=D)u|$÷{9u\tWy0)` 7H)1>3 K%:ˇ2r˟S_/Zq.d?bU endstream endobj 2214 0 obj << /Length 746 /Filter /FlateDecode >> stream xڥ[o@)HRBIkt 2Y fcO +Pt&omn #id(xnJn $0T~\[Pev ~%K@.M7/ ~9_YFHߵ4 %jO!,K1y DMi˔CZz'$r9)| ΪiڂǯUQK2ZKOWvW*]!bks#!vRDB"Œ؏8k`zT; [)?,;t`۶:0n6@;f"ю(ksx`^+! ',.kg";?YROx"kCD0[t6(HiElzI(.dEfTes&|]Dб 5 -Pd ]#}O n~oI.})Ċ(Dqq7T?ݗDQc9`~RiP*k>Sà[79K<]ӻ9G[mO`o`e1zOSA7aR6M[w>wH5HvO%yPiX|Yۓ AMϧY3Z3VJLA5sE`ϫnR;6FRv_9x>[֖ }a7,m^us &TҿjJ@3Q$lhS/ˬ5 endstream endobj 2218 0 obj << /Length 777 /Filter /FlateDecode >> stream xڭW]o0}﯈V"n՘(6Lbk>|tt~il&nN3.lWc8Slh8xÕj#*qM dK32)L4* &)pEUȶb0 zm)|0>2cSV[ 58C~Xa -ޕYuM&Zcl^]mMo5k(B!/uuhU5OIQdObTm)Pu訪473o-j rdKLƋ2) j*7x2]ޯ[J/#*oi6.RA!, 5D fʘ5͘ ˗D/L(+ Ign9jJ(v KN/3"=.',x˺v2̲Âyxks|!c#V?ʼȅ<%(y&A=3@k5CzjO%!:^f!r2H|y}IxfϭeZ`|% hNm~+鯘`J^<3'B 5y|]ʜYsYꯡ(IF4-X%F *G#9B}аc?} fTvkmi#24bu]!pDiA̩\K;NRg:]95Ϣ5>TH*_a@\E,`8I?t_C/ endstream endobj 2222 0 obj << /Length 603 /Filter /FlateDecode >> stream xڵVˎ0+HM0J]Uը&TI*)ӯof@0sOag&;wh<߽ᄚOz"+vȇ/w:# z9?T`mؿQ fQ4Nk E/.MߜfOALy+P{-Gfv;o)Ye.=-U{Jlvmn sȶ$5i*YTոQ׏G* ̒׹k(%t8rR}OUBC+"L!lP~R־,2[Wb+j& +hlG@Rm#I fy^"SBCŻKp{M+aIO^kSC3/^76askk&g$MFiApȳLgK \e' L! -ZgK> stream xڵWKo6Wً \WRt`v{`,:& K$orHYn݋4$8QWx4bh1 hŔЄf4dA5(4K.te~fYdnZ6*u^F[]+0k(M)%i"\_# EUTtq$A-GLKY<;=paڮ)roNuvZVrU\Ճ6f,k7sJ~ Wv~3~ ԣ^ly'X 7Wz>Ӓ|s(2b#F4&=đ@\B8\s:s8_'h%X(e ʬ0eaC3J_ן=2ٸZ5d2p$X]*\ظ^Frb$1'" avۡD$i#$ Tp25/W򌅈T۲1Sh5Pыlf_pR}4 N8\x#4hFP F6LM=eL:H 5MzmSqlBQd8~7?GA;zƴ/ή. ۶y2orۣ$1km3+:68 ݶ,ULN-#6fW{cܧX 0LwwJ-T x> stream xڕUMo0 WjU,i!CQl ]wP'5fǙc~%9q->R|5Lg P@<Ą(CP2G?*DI]SD-\ϧ8zt&_A9aJiP~-r Boe8pLWY[c.6˲X:nBai̷uVsQV5 aV3 ]Q*ʣk\RyW1ӛq*>ۭ؄v7ڜmj*k*I.:;m&5hVDPi~Ǧ$+Ls,}r'΁{ô2IrR:>vc>c䆊%gPy\JiVVln #~XYRk03b b'XEӆ"B By,9'c(6 CGuƑf6ij\+a%:[-74Fi]p2!^F+ nq .CdD|25h n1OBL#*ېy"4%N0 |P"=Äad SޞHovI24D=]kc̣ypXZ endstream endobj 2229 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/emL1Sol.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2236 0 R /BBox [0 0 494 609] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 2237 0 R >>/XObject << /R8 2238 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UX(X9`J@- !j-\LW endstream endobj 2238 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 676 /Height 548 /BitsPerComponent 8 /Filter /DCTDecode /Length 32905 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY$" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )$pHZ^֯0RHжb<{󏠬V6lŢ;onr*4FW-x$4~L|+я2^`s*s-^O u2ZNFCVr(#<7AO*K O|1ͨug^79 [ۨC]Z\@#eWT+ҩI?-4V+aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TA-ysfуw ~{Iʅ 'v@?"4bLyɨke59K.%M[QӇ\w^EE'/iF9]JE6cjicpywVH2z@A ls V񞾟?hz"c3nOKUn+HA?49$ fn6R:OxO`_ʅ7=y뚖x30TȞ{zsW)/*mh^gvNzK!ţ(Bbnl䲌ݜKH׵-͹H{Pl4j%ac=?+Ӽ%YV\g 1f^=Ȳã\5{q? t؟ W=C1"/-pTʏ6&cS6(\~y!rLɟ158 K1{CզɯOrTH5^k 䍚g;&^khEm'L[M.\l%???u|JrQd$yIМ,M&0=Ko(x巻Vj{m1>eux?r־#mXs] _[$ܯxJzh̻xAPZl@W֜R[H $uI?xs?n=|m 0 _&?*νNhVm2u_Xϖ'Nݛp}tߩ5dExmߧ T"Ʒ^Se0psΓ1frSG2·N(Z1`3 ~507]LjF煴mJ= r>`:ʹܦnP[o8U_#,{}x֖ł+okpo E)!.0iu8>O˼zp{Z9}n놊\e~zsUm;iln& O=;{:We-VKcΨz{M_[,zn7Ў^RhI^.(`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU3NoR=7$QܓWwiFɕP;cߠqwoQx.YaV)1:ۯ=xiA.m\ȤA*鶱E,wJ[)&5#5~$ԵGUH7Wlc~J՗NXM^;!01t+"M|Pig{m? lnOW,;xzkqp3:=8?xXnF1@L֍42sm Vk6=:nj!5G>tc?iz]tY1?3cAǰ+]щgqyptU_ҷquB7."Z`G_7?fִ !HY@~ۧAǵsZ߉ow!h:ŭVmqO[|IjNL!8rrzEvœ`dETvw7 4(3s=vVӴ~ r?m=cbi[[&>_.Y N3']=n{ ,yMO}t-pB][Z~U|U]+G^ti̷m֓vwo ܹkf9f0.Itj̶'_lF0Ts'VxGEGi?_9Tv)sGo?F1N?ZҼWX6`@o뚎\Q r+6Bz+z5zZ?]w5̊,.%-偲@ޤgp{5`Ƞ 9u6>6/v pNTw~8+ݨ'&F?qv3P2Uqzz裉[H{=i ӵGMa\1Qr+.pդw$u]A d鏣Gj<41H[)ǘN+]'_\yuGZ^t_6kCc_3!F#u֞+ӵV\C>59mvŶ~;qƋ{O*d}s-E5PmjvI,bSAuSh3-ckjn>%]tz>A6Z,2rG~rԢFv|+ۡ;eCyFAp9“a+|@jkK1Sۗs:o~_Uy͍Aw *WG+/c|7P,wAItnnqҸm{ךmCO}8uahI~ЇQEwQEQEQEQEQEQEQEQEQEQEQEQEQExw38V[/1R_GSN&-:3e#?ۻ4P-aI*,kӏ?F)ӤmE//xVU3N߇MLco겮$'=ZvєoI'_Hү|EF' >)aԢT뼼DmXFgƽ\i ,O:#9)a#h %&c+i.%ier$*\˿7&'3\+K~[,eA~Y|3q8\;8eϿA?(-Ɠ Ci)=ϽkVoa/>BK-!Э[MbU9;>549wcI譨aEi{M(V|7sLAb0_SC?4uFebӢW Řcԓɤ''}sv:> jL~HQ IOL=BaA|ma|G"kk>4f&-v>S޲+4($cs&aWme'X0w{θ 5|4*봖n4m×:,i۔>bWgٺ&l QdUe}5}>r(G+":WkFr4)z+YZ[}Pӱxhf%c o* :5xkBS֒ ~p=G GBs2AON};s5J/c_w}3Y-ff Zu÷Hٍ oXX2r]H/Y#mJΒ^C6.iڮ(.(AW佟AYj]s0 {:K4)bL֒ˌ==3tsntmV[y}sTQuv]b!{ Ez޿Z+WGFrbcX j(R7M;z8Tw_c+ (((((((((((+džbc=I :8Ϣ? 6}F|"51qz+iJ^ƛwIueۯޮ ȣ ӷ;Vzpty|ԓܓK[x?Jϱ3,@;Vk۵E̳FO,W- imMmnޤ}ޱ-&<݉V𶌚FXfYp$'`*O΁ĺ< tg y.fyb9&oQYf'$CcoL};d}*c6} YNNI 5BÚbW$Ov>&T|O]ėVSF #klY5PI$rOz+jcF<w (VG5+q1i1z=Jˆ'd%$WԞS? n=:݁`s2G+VQJ?[yyՔ|Y D43qI9&օч,DŠ(3K]sQ@a?Bë{㷾}+uEL]oFbaҸqrhGo*=wHD*vYTQ]piF+DKw (i7I*J"kU~=>^R(I%va)RqN_Y>E_cI$zUv_} ].wUitRE4gFÆ*uq F&JP+9uCҼIj#LExݎ9?jݞ)AecFx穯/.rs3՘- \AH דS)|Tekpe_(6r$<\=9$GA$Ii'޹o"Pҭ9?qst;_<\^MKy\'O\XEl"rEK.B췈"PSJ@q^P3iy~&)~DWCf$O*)ʒO WZuŪu S*ij;v"ZHp޹+:V.ٍ;78@7=<#^|= ׼+uIR;?J૟ 9ZTttP+ºWvKj__C\e*F  Սz1Wv5|E #}GY5V.ˁ}oן21VYN# ZSN>(c%Q]duCZ6 ڹ*+cZv:x&%$vu]Z-VMTDu–?W'iisS|`:0ewFĿmuGS}n Vѵ`$AKwEɢjI&HnL}YJX2;W}6&cQ~޲T5hgxSB3-`}Yf≺?ϯC\Oj\) lpهֺ kPjvmjH6nJ1]ט'щ ^:( 7M ;zG55Me#uVM[mqdG~]}+#_[Tզ')>MM{㸮0:ϦSX($(bU>$jgfiGvOQQ)ػr :vė9&}1\_} (B( BgL ⱫcLtBYsJcaW.袝4,h2BV"7k<匑^}yx2`H2徦+^|qUjTݿRݜt m72Hף0bLu'TǮU_&K7ROԐ\\gȂYqȄ*] #6QŏRu_& B{K` Ş>t+SGgwZj!ڼ6e$P7>),UX4Bt>TgEWy![mw3:} j܉&XP:lQEAQEuee$}ׄ&5u _(xI؝F(d+eWs)I3#ܓ\4NݑOEj( (6<1Dr=^֜Do5wsZO\u^W]RX($( &]Qxë<\jpu?\kϫsš5h6!a.UH|QQ}R[%4LU]4g Wcx7q:kzU#Zى358_u#q׮utb շ]eIw%8qWySdcqq-t,YvD9zZJ9"jw_s!9sǰZ^҆F%\Aٲ8 t=~y?p{e3{\)%$IQT(~U~9KV}ua~?RkЬKBY$8G-[~=Nwֳ(AhrĖ$y&+(t{<7lݷ;;Ol#"@`0+6-=<ҸR($(tr4R2B+נ%徫j¸'V߆u4K[sĉGrbJVOјWo Et,J7I rOWXe8 kJZ7Wa5a(C]NEm,[$8?a pE4gR2݌w)CUJW!aV<2o%aUd3ƾhGM>7w &pXXuM?/ l2fIMK gH Icms^s֢۠>ѯN}IR'Q.E*G׾k6ڀխÈ(vzaYG!OM7e EIg Ok}o8VU+NOF%+!%՟.b;Dٳ{&dɎ3sq29ڶ&^n<\Kݦx;){i õxXVM_5J|iztH|aŕ#p.~@}:Q}vX[Hf^5{qk7-!C$cJ3E梞WwlXq3"SNCH<~ I;MQd2= 6k ßkQR)PZQH)QGTE,p })\$񴒹ªk4? Yi g>b#E[y=qq.O?e.o8 \_uY{xDT)ahqnՎNEWQ!EP]σAީfĐ ]-< \9ǫnpQEwQEQEzB ݸ=mcc=Uo Ac'Ѻ>kʗGKzxZ5H;L)<~WZ:f 8L.jEfQ'y!ve <wvi=. >;8/z䕊e$09v\|,t92Q wln8,;SI+x-P8##?+t]6!aڹ=?fxKɞ!wSٿ~g?sҨN=HjEV ( ( ( ( ( ( i\kj7`{0?\uo<ɝc\8-I;a*a[uh/24\B3\s ewcmٜGާ<UmFPn82z3d7Xپ';KT(}/ N- -bW+=Sk]Co<ɝc\8tz\Enm@9!p!A56*ĔזgEwl 7ZF*5arCiGP*_}W+pW['T1򧳕sA#2x7^ p2)#i9Yzf&v+}EI?lmqe3P+Ql. 5J2/Dp k*h%}1éGZ2>ΘƢhm.nJB?'Q,=>jr y~,}MYN4¬AbǦ](?3Yʴ_yi쌺+ZوȸW}h;ň0?a,n;r"1Ե# I4_vW|~~\^/Ealn-坲>ixڭv1J3㿰jKʑy:eVс\ΡLM̒ R*h/{״_ [?zf9'>j:֧rg秢UhIo''&Š(Q@Q@w^z yg ָh$T0UxTҴ-X}Z>w +QS+((̒#v3E4Q2X09?kMrr) )+J^&Tz+ћ/ \ir]~ˮ,lp sUlr(2*\Mnxss貔`fsEq(ϙV/v)>âKv:M3hI'yesc1uz֔10Oq4^(Q@Q@Q@*V :i( 꺄'_m䊽G( ŢrwgMu$O|A7En+x,;|KƝ |S@֦wqQ@gZ5f,v'y =fqt% +O_u^=j/@J٫'[:Խ>Fp@$1\uc|_yKYֻ?u3\qYbz&^#c ӳ6{ ⫶)F3 q5ɂ2y2QEvvW76rUWk77tWHՏ|es\Uq`?keKp+(((͍֟8gAO_]u-aLUEqW=l5:kߨԚ;IԾ FpPyjπuH(>?ZUmgR {:.Ha1KwOtXֳlӧ85JM>--j9%`[Px[s:K]1W?ӊ9q ;~ahmۏrBj|@*?|OɐYw8J+')??)}c>]wJSO7\#֧?&Ae$Ͷ$glg 2k?m:SOKᲈ{lOɗ|,O& _C|nu-O0~T/}-7υo+Q ],Sy[4u_o|=/sReu~[++ҏZx`? G̝6uɿ¢xFeHqR+pyVpZkM}h8+?}:S'-.S pWv> GZTNЏJ_җ1AeਮMoP飨-Y>ނ˹]'+4|AAJlJ>Ae⠶o "W;]i}6v]kgɣb*W]-^ HMep?\ukYv=>5:?׿Q6QE ((('pW!]è%3\Xl<+7$ЍS.%3K3}  jv9(kt헉80_oT78r9תEIwxaRFP=5 vtIxWQƟF7 Gea W/cKOQ;ҖW "9{&ȹnxCEv1xpMumz2ڐNN#W Zd.Wt [Q]Q@Q@Q@Q@v B/W]/s %><ō/*=)=Iɮ F0.徻 +QFwen= ?CF/WN?_GQEI] z\ev^/ǻSn}덮,o*[Q]OO4cBk,smiN0\Z]n\8_rJ^w2d4QEwQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExxf#Pcf}zָxiHӖv >s\z?*{jTz+:+x զ#θ*;ި6귃wsW t7c5Ni(w> k;&'+/y\W ]ùv71g[P[j0(+ CT{2|0M׃;UG&q\5vKsї8MA<>7FN=AvX?eQ]ąQ@Q@Q@Q@v);|%( g.+E谸äzդRٜuv%;<'gO42:#F'@[3+ֈ:媧OW]["m݁wZ⫋{I +|fmx>SQG9YխH{{#= rxBCOA`C`'\8b#Gx~^y<F}]<)hz2]XQŏ&#%$%:(((((((((2EaR& \tk)VI|fa]RxY` 6}~IEC[ 򳎢Wu`OA_T\~Tc?8o#8+ m5ZmIފkW(;j tϚ`}D>3ԃ .eQVEPEPEPEPEPEPEPEPqO?&  `ϱc_Ӣu.pQ \ApIvg5&7(wncFԂ{ Wz֨Gus!v8$qӭ&W`nI7d ^}b|OW[t9wM|9&fٸxd)Oב 0׭Q/N2EWHWm<=@]DžKVPPuØǽT78vFw9f$iQ]ĝW>XZ5B5Cְu 'ksE?^J73i UF'2*18{XL>EHQEQEQEQEWm O+6~k˳ҸRB+\La9dWk7@7o 1z:rB=N*(N5-2F%dEpZna62QUkϱxBN-8n9>4&+7\0*QeЭsQEwu9 >Piqk-$YHjeΕvHT va*R<2;#ʲkMa[-Bc9¦ޚ;u^^(UE`ϥ۞B7rC,h'UW-5(QEQEQJTbp$֝5:twu?TN`'`Ev6M嵲,YΡ5̊hձϨֹ^>g WlB,_8`o+g^0$d?Ry7~>&mt#DKvGk=^eWȶRy>HGZhHNsͨ?\-ujwg3NF]Q2Mjj +-hhZO'B<& #0MM/mM/W {x\IhbI^7E`\xW[N;Q_?M-既0N{Z?ʚ| l?*=#~. uOOGɫ۱s\E99Fe>aW%Au 崑{! ٬$e^CgPU! {p1o n?  "\dvq&1紹-<1 :;7x{|SkxGTȼͫu]?U}b?Mˣ8j+o5urU`=MC͂ko>02ZUFn׳Ř4SGHa)HQE zkbz͞^4?AbQYΔ*i4hm Lr~}M9D+ Er/Ga3놶#23M>BL,ṗ*JPhh_&]_ڈo]ZHXF XPAQ#K??Əgu DZ_C-S hVN ʡɮ.[%AMCGctQ..@8_ڦ<߳\qztTQEHQEQEOek%V Rm%v]+%n{(cKP{lg88Q5hpΡ#s"u%,C뷢2EWy'q-|d=q\=w:_-l7ܲ>b0\5pzT#gc>!RxF Sx;1d">(^#1)N \cdʢ+((((ݖỠ}w#\]v^ qy[|^# pqctʎWKeoJs3TCI]rZ}I:50I"z.?xk/;G둊'%t*[)Ue$09uWa'{  jv2qއ\$2r)WScVJ}*;s's_鶾&tʏE=9?Oo'пy%#i+ (((((((M+Acֿʟ~],~xm{Pd%R/]#~,,uQH_֫\@6wvC;O/i;z}~EԴh-*?P2W"20db:pEmi+0ʃeֱ((TVӱܯ4UzޘGv3(ZVMj*yHۀ㧨kE,xqє&$xwTc21qⲫGZo@JCkwX:&~/ٕ˨w9䭓ރZ+IEY{E78'95 V{Nrp=I15})HqWd?.hAKX3uZ*ީxچsv셆z~Rv@;\Uӽq4~F.'5|-; 8ժ/odQEwQEQEQEQEg;mϘ[wO{NGT6ҳMT4oY^La\cgO"Rx 7:1o}YOoZ|xq?Lʱujۑ+5N^ &$l[ЃkxAYQ12/$Su>8z( u\[HGz΢p%t聆al:{-m=늿ӮZ 7SGĶ4rʲEv6~/! I"\<WrgEvמ ?lnA,[J?2Vth(DQEU=.l7ϥoYxU+l'1~LE*MI\H#'? :0Ϋ5`Ƈ\/?6oZFzdVsϮZr7C쥧R;w!֖ xt7iП?#SQMvS*Υz=;-?lu+ci@뙒GzMPIZ mŠ(DVCZpmy_׿Jş<,jÝzƹ* rGޗehRg/sS՘kfk'ʟ5/twzN!?!ɬ[ƚc"c}¹v˻c,rMg9r.lvx-L' ְ/S_^k^3ZTJ$g1Ev Ƴ'^|+A\:6!3n8ŞMX~'}xKkYg+zmY/,62Ń+?.}mbq|_8?5U jZ4-QSn+cDxS^'p 3~uQ\o|ϩj^HT{P\żֲ"xU Xӵk2@w/* YjЋ_Y'< Pp:CFpWg-fW)s FXg=:'[ihCV"()^uME-3^te`Y+txKkO5q? ᨮjJU3V}֌&B9T#zdz{湍GG4"Ha_=c~1W%k׺ۮ`"^W?v=O*;QV՘ZGC}Wm*Q- nEVeS]޺@Ñ??NGrolsŪQkR/p;'WW؈[GWW1T`d)+WV_o-U[{}9E!'2NRr@WKߴ?A=I+lh=T ( ( ( ( ( (;m#~dr3I+F=e*X`+[& ^t*όagԏ^K5O_W9 @\]·c?UQ]UiF%ISk;i:$;#ұk/6t}Iz2~!MImpt=}GsĿmuEZ( (&}Bިf+?js҃Ϙc^ƥ u~84?3/m  ohe?C\= Kl||(з{k4i;D9* kQ߫aζڤ[xN.HՅyW{3c+>ڞ?) ɰ+AEPE*+;"f8 k|!{L--Tna{V5Š&kM.K-+_r{Waxn!qNW8N^߅s$$I<{Q]t’傱-QV6TX,i}]:FhRXn̰ aJζ&.}KWnz/t]g|;u ?@?Y׌u K1@~m$gsֱ͓UkV\_lvW~<ҬᴅF#' V{鏲Vm<- PbI=I4Q]" WT4Ri= 28*%еkZxNqEpW,Td)IuݥG)g?_ι+Yhnaxd^euN𿪞Qai?YY2x=3+;(o3kE1p]G 嫪hV4[4RL̳9Cx׭)pڸZ+:XU|Gn M6͓} c.{r?*kgE%E!߼.x=+km dacʞ7~UY^?̿TUh [F"  7JϮ3\wDQTV; ԱcJE)EIYYRB]E c]&nѕeoQpWU\.Xݏr1;S^#"qRV_o#wƒOD y$`.+IUe7v HNy,:]c+;O+'\ 6薽 G'[L:.Y-͖ QBsڹ[Y.,PpEkG o.QJ],9&/xVVSqrpL9q}:Ѽ5kad5_cKvWcx  Wi8P˧˻*j]OzMitiOLS\\Kq+K4$f9&EtQŠw{M(AEPND޺k8"CVai779fR 4]Z[I!y\an*);QEb (5?^b ?z<tnKu|qG\Kms55rN+^қ~)tc,,n )WA]喩lutXo~aOmkDnLw %uQG/gQZ_5F*ÐAWY'_x0\]7w5/Cy|=pF|#θʹꗚ\[93WW _nkV)!92ȵ-e8?xBN--תc, xUrgǪ9( ( ( ( ( ( )Hѝۢ5hIj,cr{}Յ|D(~W!ׇgZ""$z &.`,QSi$ i#_FN^ڷvCo (e-$I]uӑTl?޹oR}[UTtk<^m31?k*!z*ZhQEwQEQEQEQEQEQEQEv[ҟA ȋvcQ\}:uG<RX2k`BYm[E?{Uyf%&_ĎsF쎥YN=*;F]NCuW=zun~_7h,QX֡ _4;=O]̷>^ rwVrw0Oj7lmĐ~޺_EuXGp`cs_s&=]#j'7n>I#RwVVqWR֔d vvO$~֟@I֫~u+rW_P絊>? UÝSZRjCJPgZg]Sk[ZI>Uk~Kts($3n*knHmb=!>^Sp,^4YŸ>x9<SS-ݏaW%$+ݹ,$i>g}|4$;rYIQEvHQEZtR-m#/#~J=I)JJ*`! CU]͎cojD{$<lRm֯"\E]HdڼHԳ7zњP~HQYQ]`b ((( a#pNEN+QY(( EvZ ,6}O6Ƶ֍}Pӱ? ͣNx.vOF"nyp1P|f==oSGe̵y6{-nVQ]$ (Q@Q@Q@Q@Q@Q@Q@]5;".8e={TT`wZƙmM;[HN?=ָfRU{V\跢{sOFO=>KG4QeAp2x9}3xG?8Z*Ifx9 Tu'}QESaϑuRS?*ϢC~T;ėYnu=BGQV[(`QEQ]^/k/;$ eVM+zɘCO0WGk>:^K9?ʩk+v~R0[+HҞ!VHt,4$rYIQEzQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@m{w:,=R.3WCNkxzVndqC+edb 8 jBkY?+q]lzgmĭ΍?Sݩ:>ʷ6EX#zjJ耢)Sp;#Sh Ok6ejU^%EAuQ\P3;a L|\ }w &+?7~cgOqndڲCqo5mBPTtTVHMQEl ( h2w9[hdRkSRV+[ 3D,^/cG"WEغA6gָ(cFw (QEQEQEQEQEQEQEQEQEU>\Y7/qGzE&E-qsrօyNRt-ip²ҼguoQ-Ouzuja&U娮zˣ\[dc8⹽W1DVt>]ţ*(B((+GLTڻ? 9S*e8^N 꽥ڼU &>~<- ^#?Q  5WSyE[+p0õq[0wsj cS~W'뗺?$K/\N\N{Ed6i6ԭ#Xn;Gi~N>osVUhӪ5qp5 hX5gU' x~6v:~k)|nm>QjW-DIFBz8>t?oX//Y뭹->Ҥ[m`e54e#f&KWWIcV y 9Ҩj>8˵ e1?Zj*4|KtۆF}sn|4i\<88ʖ 혵BǩʟҹR5_>dF-)A_ޱX+JqzΣ]A5||@;x͋͋ 3,ZN+KOdκPL,_q=/-;okwFV^?7W"0~+ Z2(V/k&iC$> stream xڝXK6W̑!ē%NlNśZ=lrH +1F$"@u7ؽLobYFg,F\7M~|Vf:)6~Io`9${pSgۇro+z>r(S x AvYf ^0rOv]T#tc鞂p EP# ZEv#Wxir #Aވ|~Ou Ꮣtӂǡl&:6Aվsء|} w(Y2MoO\O2(Sy 83Lo^M;DlLQ#=H#X&}W\sDz8fքImxV}C;0GA! Xlq?& ON.[2Vvp45ɴU3ШvU` ey4Z4Zhz% :׷dM}[URۓ| bXXɄ<쳫G,vCD<@kiO GkHa\OH94L͏UkW0幯J‹` ;J(E^p]q a4ټ/H ǫPƼ!T("2I j_](VS<f/@}VQ*`'yrQ.HYϩ_ Xu"'kz$]|`=[18$r bb_>9PzhUL8K 5L X UF91\&]o$ffK(nj_{ v:#ϑ{>pİx\P2!W 1bjajNrcvWr&#McR,m%@bM+ *C[5"!FPI5.KDoiZvɱ&3gղ"Qި|+`2$jj|Bh5l {+;cF:у鹡GMH>& w)c]%h՜:ۧI% TmR(!b=r_֐HpP2 M8RSr\Y{f o'Ş8ܚHWM_@).TSrC2ޏ"kWAQA{#t2HCbja2<|V8,P-tݷ9s>QZN LNS~>£\|*޶xuDog-#@nq,K"}Պ"er.~,X&&Ԕe~'܄B(v ̝H_aItjBv0)K }SH)\3jz %s=dvQ1,oo%4[3mt=!Ĭ0&߯*9S,85Kʅk~Uf i^DZ3#=a;EYaCP杚Yj|u0*2 2>d $ D_tVg;*$D_48c=Q4zBբC'EJZL^6IׅOp]c^Bֻ!@E"}|_zETEq8u&cA嶪hpV6P HAG]T/^ƳY endstream endobj 2250 0 obj << /Length 2274 /Filter /FlateDecode >> stream xڭYKsܸW̑S_sTx,IX!'|X 9#FϯЏ~I}ƛMQm\ЛhD'H%%ǮƲy0ip⅏~E`rG'eV[u׾NJ΃r/u+hz^TjK:eۿdXɒEz4 םJ$xOc|ӹVbƹZYpdA{+JE{wŧz,7f/EyE\%%LL[/utӠk堄≑A,>':gZN5//9+Kjz:.# #?zJ0fZ p{}pb"̞k*=x_R32Ac3B6 dv4W)ˀm}Al0/r1Kq:3R<U}wY؇jVbw"7h~tٍ;!ހ05:ӡ[4<\jB fǡr_Pw|k3]T B`'@FcGy@ ^qs=} | U<1vTGl5,c /`{N@(JKq90ųnď\V'U*D:NW! hRPv`/ 5.tXsKX'Ip mLf6alvB7 >Ny9rQKh^df*3 e-Tn$U hK~ӎ?UdM7q쵉 Dd1o߻~y6$)BZ!1>գ9^Xݧ3b>7O)f]y$k&@mjf3v 'UX$!"1H~I(H<ܡCQ| 0̱ 8P>1*gFF0Gmys̛[T˭P'Yz.m4ذL9PQp`yuHYsj~~ѕ:)Yu{cKMna)i!)Tp+*3 y87dJ*K5p壤Y1y[a%EdN(%a]HƐtm{#=Wo)[o]nsb~{ Jg@@DKK D DOI B+Nuzؓ:xoB3CZ{‰}Z'ry ICqQOu+X?<6gm/,j4~Aݡ/$PUb AllDӒiQ*k oA\6FoS%GⳠNrq sڴ٧&x6=pU׳rB5Sm]6o[Du.XMԘD cu Y߈+\Hql},/QR;zVHj[x렺|Z/F`!QJeM};q=%/ ZH+98dQ/$?06-;6Su"2 Uq{q~ ۏ.IIqٕKbXhW~r{>W2;i(IK7jCIBk6l%49΍eQGER`\ށy5bmNJ(w/z{lm9G%ڬ!,f 3$Hbbl8f0Y{hzvKQR 58IJ(9lM(PxT>ifp.mAYI:G]7֥7SK`Gxbo[ njq~ _fIbhӻwEi endstream endobj 2254 0 obj << /Length 2158 /Filter /FlateDecode >> stream xZK۸WHmx@rrvũ69f$*$5n4i<\fl4_ oׯ^W|!4S:뛅tZS3JΓ_/)wl~/B ŕLiS&+}|+jjjJhvjl]d;WBorZ\R[%+v?*NvkZ:H7KbpsOCTKո ~qf:U$9.!$_6ض(7 M|KTu|Г*^j} flD5v<5BcOXHzx> XȀ544ZI#b>eK%[_%}?l6W7x^FQỰ!@ktOSÏQxI UťeC?4Vt^蛲jkP Yɑ7+G<%$ŕvYƠϦοz)=oʬܸ~L Z8=䓫E<䛇 p<{^MR = N D hdݒ4v6G%O>'& $%M^c[ A&L3>YoJjL2ySOLsJ?t*.SIozmH]sTa[6SV4^}Q71d5X&JV 's0E xrl c$",H"oK@wX݁ɫOiFZ}!Uq(EV^А P &§Pew h-pl sXxb gFgRN$=d  yLǶuclOD0oY{,|6'_|m!>!$P1S@Հ> #aCkH 1g8HM섟]Iœښe1'Tit=S[-= 8t)qb:3L˦lΡtDq&=8P9;4ؽ&8tM"0Ԑۜ'n-1dЫʯU9 SPC5g\1ޞF<_)VJSe_Arݷ?8I2MaC7~ a kWP#ȘaASά1s)h c*zգ.O}G_z_KiG?'ɂ4Yׯ ԯHhȥ:G򣵫(0tjVcYm E(KTPAZ3 ~RT[VoP_[`PäV)UWgV3<>:IŎD"?LUf}@~g}O)auN^0QyV,`W1'$;m.s0vCfCnI^xcBl9rTta34^h 44wѮS}T&2· b\oUQh!ʞwUeGwd(G]>+95^@19|} T b5fAk"z5^ y#/9JO8]ʘ?3ؐa`mQiXEEK2\~!X=՚+ơF4|9`5j?u'=SRQ,e\t RNMnAK:u EKgewwG3ʛdh@5}[2g6y&ؽn8<,iz}|-H/?-|[^^+?;L #}q^ϻ^ASNhY53h~е.q[w ]}sw_^BO5X&_ k U[꣌ FVGcW5tsQ hF.eU|-vنzP^ F|,Nr DkG7KZ) TP(o5?5;m_!8]so ~[塲3b` zwTJ endstream endobj 2261 0 obj << /Length 2054 /Filter /FlateDecode >> stream xڭYKs6WHUE0A<\3;VhvŚi51n4HQ2XO!wˏ"\pɄb}PJ/[X߃E劫0 fV7]V%[GnX)BXE0^ϛ*7hy]RDy$͜}ͳh]84a#gfzT֎`n^Y,d;1bOY9Xu 0ARgHfS7yRq F}(?E״5X)i'nm04 ~rZHlyS!1xE޸݌:a8Y0 pAĹC \y{`MUYYe: @ƌB ;`E$`1 z^GH?К.csb_Sk(%Gqyq5ټ"aE*=zBs z_3B,ѕ% m ӘW/4/9 Co#R?%_#,w1iWq8$ԓy:HO3П,|5}|@Fo=$@B)'˝@*E w6auSyϔ: ԏ9\/WO.} 7PDįE+o $IL3ձTik|yϓ:Xɑ;*LW@n)# =b`, ci ~otÄE;yRgKS&`mu'k0:ơ6 b CӀ4r5A"jkS_.J]hLr5P\b Bu}VNN0e &!IFCd @^.*gWA;F?UQxޑ:G6Lw7T8݌6'#4a'Y=Rq 8QȌџ5΃4id(D*FC$~G3P%\yeE 4Ex4"\S!\G:(Uw~FK9νmq'8)AGr#lKP1keIj6*QDb5Xpg p{Ux^g7c_1ԝS p")8@lY䐠x$e.#xI=6b>}6MF_?UrG(J>EEwM[m#G x$Gcf2b6,I{6DJ1|}P/"zx ïwI<o9=AhJa0'3|ig{2|wcǰmY@Q4HsMU4%UvCVyMѥٔ2)W[_aF?P|1)y+) ?ےl_mOϮ'%2>!GU]ː XkǞW4n[KdI''~Ɲ(}89b(- ,u!^2fr蘐Bhw4M܏ϸޝ3Ygw?lI\FV71dq! `7T@ J; P endstream endobj 2266 0 obj << /Length 802 /Filter /FlateDecode >> stream x}TKo6WH%R|H=A7h6hhʢ!Qh;P:{y3C5cg}&5ʔf5u?l^MM>wj⒬mHb]vsMB 󯛟Ϣ+Ak& җ܇ e -&i*][pBBU<ޏN`3tYuE,BԊ}1Wd yA r$MoS'~=LQzTXn[0V- ^iU7M]ePu-bSӶYQ CӖE^0YUy(zLYKrUA$ND\oru)>nsg˧=~kzzMKZqa~-;^b٫<`;.?=3Eeޏ|lkKsd43`p FR)Ӡ/A:;i}Jx2Cp& {i5EG # cKnY8[tI\`X?GQ1\`5bՌ!Utm,A [\36׌,Uў{sMe Y$TjW<>:ɮww"{(BPگ]d-UWjJ ʥ+1۽[?뚪vuK=S} M zA,S˺{y%Nyv!=HvNx;;cQ0"]ẁ;kMY!kh-Q_ڱ endstream endobj 2272 0 obj << /Length 1671 /Filter /FlateDecode >> stream xڭXsF_AiP( Qq k$*؞L 'V{ݻ[_/mֳ|ދ7=7ܐN`u8{H(w w M*\J 67YUm˨J1iw4 7}/$HLp1#~C#e =u-ky8;}Z|X!K3]0ǰ¯ +CjV(pS',74mn3҉'s.w X0+IT:*%5[<1#UDEFR"%3}=eiUD+U+) T:#gf9: wm3{eAqd!06|@ qy$D o:rCFD_e@"gfCqBc֊d M1 -6a[GR`)3jm1>*3Qd!-h^CEP3b)zFv&o <:Il !V_9dNbH_V$G)G.eãd6лOϣ!cX*h!A`\AFidVےPVt6;.gVh򻆞nxkK}h6;:o`mq(CĊk:>ksiԙ˫[ Lg6f|:O3 `bdbڹxXb}݋b9`/cfAv8_0udWTY6sM]^&?⻵5rflOMe9w͌Vg'l8gI{* p(]k ZU8nEauR8bXs{|#Ec}?Pd4ڍ|4.x4nCddܨAz/qÍzh7@yXYEy+I0jz Q#Q _\+ţKvsf875G|\+@p=>d29)}$v{\pb܃qJzr[Eƻ|&=:efaBWMװe8Mskpz IcgUDߑ4vcPuD ٦rW6_NrV{@#p&0S[7x2]mϘ}~j5 bD> stream xXKo8W(W$E*ClhZ.m16_3JSzoyo/~ь'Lpw3HN8FπGLC(PˍC,sɃfoI[djfHY"I0N4 [۫w$͌s*J^,F'$|o]Qe:(@n&?{;]ÿjCX_"fsW]nw2U M^[# ?^PLG4ExB š}s9EwbowITxh/2[}UYdy''?T1@;۫",XԗHEWn[֣̈~-[/߶zZ }QN͌1Co(qsx\NI w_ SJ=N(&9QRlVE3XFv!i2®x>\|qه||g+uMǭkֶ$4^'#NINʃS8pkMTMIheGokQQ'sUu69l+bj[wڋ *ŗ~rXɐ&dދ\ʋ{yOX .F Eb:CTmIF} 0i_y^cta#nh"kcAƎ!RJ FTǘ%X̺~a1h-b6xMH, 95d٭tp­\]v@EYCGTzG/IH7H,6NM]H~*Pgm;M(=p0Ғ Dz{w-k07%tKbJ(bЊn^R-F)e7 \ύ Pz(UR B|p.N &1q௮LJf9]j]}F]&H$t*(@ݝ`[hBXG`oHu6qrsu| c*D?)yӸ̃&9&t>\2g!o& Tk[]pBB&sxđ*WkwgIo9O3_<+;+hoݺzMY65 Z4Om^vB)Cr۶;;j~c}ޔ иG\'6 R5v_m=m*j[K .WCBI9 dmPV!-1{*Ր7j"TI;-Ų*[{?:@X9*Ũ{7 RY9!,L@;r+C"F_dZ\鉵-Ie҃Z0`܋/P endstream endobj 2201 0 obj << /Type /ObjStm /N 100 /First 951 /Length 1906 /Filter /FlateDecode >> stream xY]o[7}ׯ&p_ؤd $Qn<(m"U{S+iIH 0{ș! ghOg<%2Q#9qHցd6 \G Y(DƤMLqΙɰd;6%&mC.`! G#~ha-!/u 0UYǰ"qRA}U$16h b)˩X}bud_E~eTt^1QbL=t7r5Lۡ/tOVy~Mouw߽&tܛIC?–86(Z"=6tVV;1~9umop=BNOX:)یV=-e+u϶xENk;?dBRrX20U`l ,#(F`:r|^ 6,5ƚ&qhSnMm,-t=Ep#:)BW=tB*ݏ/W|[,] 枮W,3Sӽ?.qO;(/ rϋf=/W[{ϧOVMtTYNk^M Uz61rx#p0M`rjTC  Qg\Ii{o57؃)+DFHEHM5vAҟl7 n<Bc^7gi6,U$GsksP}>Rͬ_NgVl}a0zpZL<8GD( ?97b5 |Xp-6?"aZͿޜNٻE{0Nż?]|1fvza3r:t=[n??(>^0tQ$-RwgXogQ+6v_NčeRyoy$Jd$oSK]5.<pYKb'H](FŒGOxnaזW PZQYB5*:oU#O $UIrHM^m %YjqpoKAFKru[p"w7NZo ȎG6gM`rgǍ>m{= wn.|LoBc9z}Ng:VoYY#{M8Tmz6\j ȣH@n601 _,n.Cr)^Kš,'`h+\xG~ػ#}?~xtnjh>Z7}/. HV~ϑz/_^MavV>bzBYH%%\FWwYw.6p@FXB 2ڀ˓}ƥ=\QHw͑(E8RD?,2d/|ow׎kDj}Hr#|b9jm j5QP!C7HVqVr6~`cܞIdjwwhrv v4?^Vp endstream endobj 2284 0 obj << /Length 2103 /Filter /FlateDecode >> stream xYݏ۸_aKe fDRr9hrEA 4}]cwf8#Yv[,Fp՛*^H-6b}H3fa2)UvHBd޼"&O?gv!4HXl$B~ReEo+ oۖ, q]QW4#uf0ηb)<,S5 K}ӘJa%N1&_[xĊ$^sekZlK,Wd+8_ o@ȁlhG_Q+4ɣ p6WegƷkz<~ ےԻ} 3u#(`t 7Y9hR-LlLԷAX蹫ێZ[E{jbҩ>(%Tv8w>9Qa/R5w;껊 [‚ҩ0<NDޠ;"cȫ{tq*̟iۄV9\= :no}S3IJXIF.?{G &6uP&G3^S,Cև1vM۳W(d.R8uVsEN~魌Ɉ+c}>`utXEfJ`M"pG(/y3NkzDg+:V`8gB_bdK[`P2[$JgsTHc+t: Ǥ4 '0Re8? 1{¹uG? 0)F4u#gÚg/Xci;oinWVѭCOX dHFOɚ?w: cPI),c Q@)XHG┠-+L<6 pѓbs gA!+8Opw42—]MOGR 쫭C?U*AxSR o놆KÏJr<ipk $5A{o qp}Q݆σIA >/έ+Jj^ї7+ufp: >,Ҟ4!d7l0"gƅhh $$98 g=BlAxzG!A#5h38t߅0Sbh%b3zt&~D@xͺ s1hXj7.X_4o7!񈵾Ln]vm`adJzQՊiG}5|2#,|;I;2T\|CX8\Gu雀ٜ>N bddE y9Y/]Q^K.(x؈6Ëz)dmh\ao R}l|]]n4AbiC`CXH̹(\KJ.  # A0/3 d*\ZT޾#}Y?HM'pK3B$Ln3d]_sv|u~R}(d0L(9f r!B⻂?%:@ :h Qd`Drȟň/!'PW1@z6ew!/Q#Dh$p|~-_mB4#Cy C OhrW#q@Weп* T]:a#sW_@i4== Lʔ@XL_| x0Wepmryc8Ij|̅䏉=)uMnعQAXq@F1S`=HBa2!;{$"Mث([չ']x ]Ǝcc_:%2;O Tsx[ 7fppXa 0D+HvHfrϲC18WsXSgJm*MFGu9N$?*U$L%ث-I*j2 ͅ_¬@־Šv6/c^%\r}:B q,W endstream endobj 2290 0 obj << /Length 2354 /Filter /FlateDecode >> stream xڭYKo8(46@ϣ =΢ރR#qTpi~-4uoI[W%=nҭ~Ois+xwҨkeH]u*ma .poN; \)ne^hq s(`3 iܱE&Q6Cw]oݚ0~G:KwR_ͅVM0],>USu0:Wi' OК[Q_::ll6\[3lx<`vV\(y ~#Cm0`}{p 0膇qW+x%yV*B8zcdL+rJ ]h)fS7}" }ҕSem=X 9T]ŶW֙ Gwj%tX0Vk=,t;dA 2X}"ٿ e:eNҜu3%sL\(Iu=,L:G@5 lu)9\Y5{ Z1hZ_G#F3.eCKvm'<䤪 kӜ2UI:N8vp .'w\p-wfn5Go#/$W->䌯4bHMݰK?ew}!!wN0ܓ\1gns/sRs3b깠#иAph dJ^`kEt!3}G KyHmL ~k,y:>tp5fd*=?߇3xQoUPzXs1O!N+EdCq(sWa!!}: #0!Y,"LRW0_ i@zڃ/AO5kxb[`Hص`AxE"| H]B ٛ"5sCUmR(g) fK{6(i ')`zDžWa N?~k濈 `0s`H&`heHܓ_ʕHo endstream endobj 2296 0 obj << /Length 2649 /Filter /FlateDecode >> stream xڝYoܸ_G2"ER5 +e6wC[!93^W\Dfnw*U8yru-1K|Ŋ;ӫn>|%._qΊ4\ǶLכDdQ6P6BEHϰPѮ>z"zr[,YYtinʮus?؛hB_dL9ɸt)J*CJ',2~|[ %| LFif)6gރkj}92جtGkk7te`$\ʌTqʨOhZ%#Iɲ\zn3Ϯp$?uD~\(Ri(݁80ݕS?Q,"ٚ{<:IHoZ~I2nM0gpӁ}7w\AwV>dF ǣ}%dI:&V.+w`?cȩB\T9M;`n8-`|8?C=ə@.!ștǝ3&y#1%ra pɌ a"Et&pOBGpF 80|@2Rx~)&1esqG7;'~ظOS`?͛?"BJ9(u]8uO<-Fv`Z@  D,:u,\4Gβd\ 6&)4DIT%f@ HnnfbX%?aqܞ'H]iꞚ֮eŨZ>W-:y0ڗn\iڇ&c$h|ܯm|*PCQrl=ѽ2-r*cm !"S"Sq~ɧ}Li7_^It hG@Y'4m3hnC>Bkb_zCr kR1+g 7MUL*KB@ PT#X5ޏ%`'S>#t{nEOt]DYWw*IKc5 ^EpҴXk,8Lܾuhh^4:^iqu>: ^Kbnh@*GК+쵁y;*`[$Nfe ɍ.;}76Lcwi\u듳y6[`Џ`M5&, 9[a[zzLsELz"98R4` Jj(d%3S[{&Jч#jd]Sj@ޡX@E+[z("5w?FɄ BU*O<au35#8_FdDz[bg{* LA~)9#⏦%z1a2(Je>`Pћn3%LpK$Xh/u%n`P3F}By1 'p~hGȧ,|W endstream endobj 2304 0 obj << /Length 1599 /Filter /FlateDecode >> stream xWK6W2bDR9$EH q"֒c!dHr_W7@Hozz% YEb,T̢8^Ċ3b-x{~vu+$9NKoRh#Ae0 }7.߷o? 1"E@v/Қ5 %* _!\$da?$P3aJCO'Zd6.,,ũ)EڶK^rH<-Ǣ۞lZUۥ́.>4 PLi9Ƥ1_wE]3x~TY { Žtojx۾בloڮ8z?t)ޚ$:5;:˿</\ 3 BLСMpY",cq̳ycA89IB4NܖVl^//aQ aMև2yZߒܛmڹ;KDYH& ۳0m- ~R["2|5NJW2$K~C)?fV[; @ Mהaf7Y[C{yΘLmҟoi3n87(4מFrG8 րhj6!k^{T͊fM%[/) r[Op8Ðy3 [>8ر#`X \W+zBM#>g>Ud`&h`X>r)Ʌ.OCg%Y_|2QKJ ?7Yr:A_ν꜅SGHfՂz*i%oX@X !\T{6r1&iZNw;SPSQc͡2~Og~Fh4}_/_,}Z؈2e> stream xڕYKsFWrD,恙A|nJrH\*`ж O|!0Lt߷o$WZp8Iݕ*V\TVId6jb5>>l&,i߷<4K:ףXDM'&0;ڱ[x[qd2̭ЊJ\hlD7>8]S'yPZ>z FNQ £qmnD0HM^`ڒ{72bhZ*`d\$y<%cDsX Xs;ݮ NpXSO} iME&9[I=`NGoa䚛_ 3WVZbo?~h~s3NJԪb+&&74CwM)<-8LZ.vQ`' gة4&eEN;4ohw1oݐNdkԐƳӹO8CJ&JPePJww" i'a"HqY >]8'b7"'K@)Gi=!v`mBYr֒d};e]qA8- g&Иj>%X}p JJ8 &ѐQY|z-Uio߭l=, 7 1k3IoRI2ʀέ,~*t9V8 7 jm'!MOɆd\/wӚ5#i(:0L"_;NqӐ&4uǜIO6By<{ZOpqMa@Xdh}2Lk- , 8U^Bp}162:y+Њ+ NS`/9`XsKQd̽E'LY1/x/[ C-ʼdK?Pg6cP[tL`FSwjq[ Ba z Z=:pq=}-1qSG>Ș9?d0 f"byLeUÂ-\ Rd3=Mzj.̉rd~hP`՟^pZd.P zqy" endstream endobj 2314 0 obj << /Length 2837 /Filter /FlateDecode >> stream xڽZKsϯpU.R%a3Lũ٭S9쁖h)T(jH4i˛\,F>JDi+n﯌KRcvwJKz#L>3zYՎG)khnwz8%oGᯄH2cOz21b*[mj-ݪ-眷%h{d~ m@C3whm+ihU0>XU̫Ȕωqjm``WIzj|]yn9O{bbS\6E~wR3) ^wc䇢-Sw<`HOvh>L]|U}[!sޖD1G`R劮Fo/^_S=W>]CͺXvO>՜$ &_&4' &ΩYh[ʂnOp3\?N W)eև-v#HSc%(x1HAy0ax8͏M^k!~S:+ǹ7$X*sjR  d&bfa_\XO]FٔLlNib,%gA?B-0f;Y#RFm@>mǼIdD8H 4q߫nX6q̽~ϭX$e'n*7:Ap֞=*\\F]+A%W sEYW\sf2ByOlӄf&$-Ebp삻ъ=.nD~ K!FQߘDYy-ұ,EMfblT(B qZ_k/$&}T},n"7\$H#c7}}:p5F4}}n5;Q.}<{K^7|xOY )MNAQ؂D-h H);Zyjis|beMZ'9[I<p"Xi i\;'_VVb.7y'ڱ]K.u2:vuHV$}Y~/;9]6}.7?m\8W"RӯeT26Ln>.nҀ:61Qy|CQmPiBñq 2xPw؅o0L U(5Da~~(yimQ3z0Kq\oq:Ja>eIe:_!MSH XqMT|eS;yS+(LW"֠#Y &6A.$ !O鹄PpҸo ڱVTSB:>v`wq-tWatj< .ZUH`l)vt4!?-f;JE*6ՎAtt"KD%SIg#lc[t(6n,Cq~߀\.3/l i,9ǝǬw"(%bryFLE^Oi>jss("DȡzlʨlBeg_lk&lr(Ty_A7LUlK'@s2 )97Ysi9dX=F;<$.$\ㄝ>Ntsꞻ|_ % ؃rօ[!3Rt+͹ <;qj17E5-SXZJA𶶭QM nj6!4"=V$% "Ow*uտk?HR߈vMTz[bT&_1!J %38#(^`UJV p޼j%pF+ \-pH{-^E,/͢q RcjkL^gz}~YB jѿAb)zx_&`PG1BvOQ8pn8>W | *ӝw;s[6;-( H4MyF2,)'Hj0 S>' eH,v!7}_ n7 endstream endobj 2319 0 obj << /Length 2757 /Filter /FlateDecode >> stream xڕZKsܸWL%pD,"Ȥ\^W@PV͐ /q$EFrw&I)rkagHlK2ӻ?o?|ID&.qUJTbAj@ XicR>SQcUTx.\~+JW±4r %<<[LXt"Ne[.xh6~,=+Y~WY4\x`qϹǰCїGɣM_'p,Wߟ~k*sAC RXQYljk@ťCSw}Qྋ?'ҜnU[hDFOUZ cu}(mǷD&Wn.Ήԍ{Y-Iv)%ǾbM)KiC(mm3я`^w6Nh{T)cٚ؏s]ϕԖRgւ 6jPWS !wF_i"tK; z"A_fo_wa-?8Tp\;n $P84m[z tA9#g׃s]c-z{O崒Vm,W7ecn~l+>fD׽5|&`Dt5tMI5@/mDKv|K$msu ĵǁXLC;Y9|Z/q(c(/ʷO;i %YXe|4>&^?P88 I%MkX95c m,8a~e/h+s5n󀣽 $* Km>hjҠ AV{-i ͣM֎md!BbyHR=0+=L4$(PrCp $fy|{X Ldy^'>6t,8w l U[b/l P#o=l}lEǾ񇡆c v@,^- "+lV. )fXF7xE}l+9O?@"8'!l}h&BdecaL<~D }v&X3>È՞%N}5Ld7ۄ qȍ}ÿ?,+fwj_b4@c wbPpXЁ`}K>s065O&Lن< VUգ^^zkiWX'd2zdM w#ld's.%a'R8#;`ѾD^[GYǏZeds чzBre 2EibM-oPu$oKHՄ,OE pq3 !fi12!"bq*& } Z*' >T4L~u¨|'5U˼sGWh`ZцI!|IyQ[(AщV2rǤ؄U҄o3ez=w;[/2xtO! )Tu,YFXɿoC2T]aDCs mw)n }࠹K͍Lp M Syb p'Lv-@ ӈ S6cfAsHiOL7cY!5z[#"7["!dL%0r,^x E,^wOk/'8b~gpΣmBf|~ Vld"'_IHU7bK.gIc]~gr0"Aa] )a阊Dk耪s6<%>L>#T Hp\o<` l$͜utζ ]N|ǯ f t}h9C߂xߚ>wno !g+'/2%uT TOԐ)T(pX:yN 5CI*_'rP 9R$.19{zT|Ok̊׃ JW"$/ s*BzH!SmC6W@Fu^XmųkHL1Ht&b#.U]]߶<#WùZ22nazO 'C"& j̘&Ov+ɚ7$~H2H(<%7xcBlڕ3n:9])`_65{]0r?_vPFwAƹ2ɴ@FL}iZ]ś[8;syf4@*?4l#pͶLiӝOS<}.@l`$YUuzVRubd[Un}'Q]m{o6Un{g›ݽ?ɏp endstream endobj 2324 0 obj << /Length 2129 /Filter /FlateDecode >> stream xY_6ϧZER" $qqkJrrɧPdm4Crf}[li8&E,ͯHb᭲ ni&!#Fjyv̴KXd9UݥFE釢٦y4?ښy 0T>VOP(?ʒIОU<RV~AݩTD Woōm1 'v@>vcZCv̏70 $u-1҆ǯe s4Eu aoR?; @gw_k)HڙV "]k@)`;{ǭ0sdП1ye"ʺptFІpF"/}!E~z1K'khzɚ!Ycds(*_[}lX g >. ^`F'xDVjm+tȔ9*mupk2II+j-I%ݡg~ꙕc|YK;rF{e`5؇iտt&eۼ\q28u4>О(!B&ɜsy̱yG ¿\/(*fn8@>[~\B;qAcrW8!/8YjRaתYK]Ɖ[)#ClW!bt&ǧ5^lQM U<\y&8@zM)d'//XC=SxA(\-m==l@2Ϣ'?aa6[ ya8>l]ăpkM4aQ&J<G JIR'ۨSG U,zG$_R#tݬ5ID?a|ש|.ҧ(l,AN,”~#'qWcQ endstream endobj 2330 0 obj << /Length 2572 /Filter /FlateDecode >> stream xڥYK6W-͈5 lx:qgFni *EQv^ZCbW?-/8gUQݕѬJx){xbLQ\4o?p'Z^_,C;^=M6=XTuxC]J ^L:R$/Z&1r\2!*xQL&IO)Y+'CBjY/e]_ ZIpI‹ 88L$5gR~|"2D(vF⸐ɘ?@z69@OM ?vjľflGa|)/pXT”O䬒%Ls3T?j%f>l;/³]l {?)jcmg[ t\@zҹvTxDZ{ϙcJ^RW/1AUbTj9(}PITj,6ާ>e%OCA윺`F A g(79 Jxmyh%)0 3Dp?]qc+R\A#nx<` : Yo~IvUe9,f20L>ϏoS i;@t $SVs 9<ӂ$5;y>[@$ C{'i?c*(uSԒN;z:OEH11xgp,WٛKn13b'an0pr~뻆2x1FБ`}ju2sxE+Wa9IBH+2:\j Y<̨@}Aw{xp옠cf]*$ 8qĒLbS*k/~xpۧoS2fW$fwh66ZhÅ2[J@N%+s=,Wx/ˏ0`(UxE)h( 8ʸ ) P?8Q+/пO@Ggv3M_%o@EMr=ոϴt$^uAѮͫn 9/p*.a  pc1aljO(\EP AΔ)V^h̎5|.vz^T$QX*?RH3i'y 'Ek_?-LɝiK U(|kx0 yk$+X/: ,e\/ʍM)N9{bnO#r v_G1GMx._>.; $ddՒqd̲grX_?Wx$RaڄOE(Tm+_'DvE\U0yJU>))gm P˗*ė L9T DŽ%*鄒\f}ae+63s~ n+N'&r`RJC!%*`]7$)w!e5~7H endstream endobj 2335 0 obj << /Length 2563 /Filter /FlateDecode >> stream xڵYr۶S.B A46Ӟ9zi/h9Hb@ވ$\.v$rpB$r!SJJ"~óu"FWo$,Պ1Be۲[G|IzҨЫ4-oQ&ɒtL8rT'At(^BdJ$&f: Ft7VfQ[BDyu.kB#]E\R!$JqG7A06y $qu 7Q\0` A0vV0>l⊑ 8p.]^oee5FM} wewm+xWlz$|cI]_owm'c&/V q( \ J]0,U0 " +cwVjL_5Am &MNlNFe7shf+\ AA88CuV!H*8/yN0;d}Y[LErW=.bkjKdDGLykcBx;>uUg$O3&,*0af(ƇO{}G#ͤsQTOa9X> iP!.Ե26Z(bpYMT,iZRt);VHPp^+Y6X7=.i*³n>`sym] Cm.LԲbBEe)m`ZhS(f_KstM֧&ƃQJz-:_?T/K%յЃNyaQhkz&1!)C«+cDXOՁLYXh@cc){>= xt áƗvяvAn\ 54jmvu2]2+S@d4fPgx@h{wiT8ĽEĕ=K Δ ]aK33NJ0uYv.SL,-sDz,{=dغ? E>&. ܓ4Stv_(VF8i%Ir2T;֌.Ր;|dvν@jR#X>ιSLvF9I-$ŵAoKycSW)H:&dbf.CQ<+s!&*ƉY#Eljއ],sW 񅉌y8y;Yl ghGorZ.qq*] \v} $'a (,RH:@a .cĈ.EF\lΦ\ _$0_gp_DBRt\Ä O?f:/$${\A?M)9QEN p,Z+B*pt,mXM>Z5JS\Dvu{z) B6F?)BO c~F37Jpf)teQV.2LW|14|ߩ:F endstream endobj 2281 0 obj << /Type /ObjStm /N 100 /First 928 /Length 1734 /Filter /FlateDecode >> stream xڽYj\7}c}L Z0I?8ІO ߵq!1ђM\,\r 4*zU"A })A3Jj-X%j7,ԌVBKPhkК[!_B+Q/GI<\F„̎C FRM8+Ԇk×tpéDx@ ߰kq;FCŽ%%U߳Dʈ [HUSгQ79R aU@=RDЏ4?$FO$~O$)C~h!ױ+oH0hZ ~`x4*uTPV̠Pm8H0Ѫ';36$&V]4] #PVf 뻼\. X34'YsU7K<6&"N'/QRFp(Cq3ɒBƂ~pu竫ߋ8dyex}L褓vyvUS̠?+aje88û0z ÛKL:TË _KqƱ5GPʱTFM8m>uR8a`J$`k^;)Ejb}`^lSf:eʸ^QCίFϸvBMBL1L.VgGU8d/ϯ.Cwb]/Ζ0~mշ0rJc=:'=" Fh4{.0<}l*KFV:e&XN1ܜZv @unz@fXޏQ-M0ƨgc^i7Nbpl17$*2GwډzP<3GlF-*l^vcMkmB Fq!Lvj$\7Im{miti|c6M4\ItY h.rW%G4 ' j8–54 c4\b ` .03|81V^Xx^a=#5M k(EmG9-!!F}5bBeiQFe( %$6>N_ ~d3,raX;7GXh6ЦfHQ% S܎w;4oa$}'BT \TERi8k^PO*5u$Qۋy<~Yn1x7&޽ HC=Vϵ􁹀}PHOuu"3$Bp45ќQ¢ ==Zn{ 4aشA3rܐQf]Ct&P㿃Z3~HE$B;s>pH O惤 >=pJ?bIjDnZ#R+~Hg(tv3$qo wd͐K҉'*u}`ԇ1Ss6 ’ t_{3y/D?m"OWaԐpTh=Pڟujyme,> z$d4' endstream endobj 2342 0 obj << /Length 3116 /Filter /FlateDecode >> stream x]oܸ~'DW!q43{M]V+Iڤɯ Zkݠ(~ =CY{n8gN)q=3)ϴl>G8?n<1YJ3>\]&ef,(lfzJzXY&Pw2fhLsr]i$~wĄ}c LU 2hJ鼵u|F: wav߬^ˉf.uP`q=٣,dRk#\1%{b7Odn}gBK77e@ﶩL\z_1C'@#gV3{3ۉj|*J`JFcYD\\ #!u=0`G){M~ڜK 9m=Aڅ!ڎٌ 8\/p: La֨)/?G B#$ܕϑ!zZMM(q(eϻto ALSB#ylyYu^>ǭ 3^jV%ˆSa!כd`&5D[41Ns^2CH#^v#i7Oi6:h$o>}*T_|?luȩ5u䛻yu] Ǭ}DHx\CzTA a-P$jSVލI] 0&/ ̊^ڼǶG,i|lV `{`qXY-փ'J&xr_r` >nK?}~}Ջvv4$ ˱`a0|V6Q)s U\iպQ1[c6H7'QyzPq}v=M rUifck]..`2|E-#O-xP#-p>?` }7X=a@n h2+{ɾz Q4VR qBd62Mu/ IQK\Es~nTe -M`Ims8*>tTX-bꛨF[Аfєi>N*Hx%םώb":tW GA+#pq4X%V^k= 7v }Y*GʌDGǏ3V<8bNQyfδh\IL^YH0J30w2LHý jf{HtԃׅMI }R^9՜Km<+?/|8zTl2g+|cofN=~poB[qv7fti<~!0l.7 llD5>ODykfamCcr " 8;BpeeHwf176BʴSA򜤗Q>6=Òєx K|MeO}pr)jO6>J27vW'*#fs#=x #|2)L"QUfj1InR1/ϐ|T 1q %:ϣGf\_#k$j㭂 nC$=~$$Z~aK_^7`6sJL~Do0}ϘD<|aR, pZʕY endstream endobj 2348 0 obj << /Length 2481 /Filter /FlateDecode >> stream xYK Wfjf?InWT;ekIGFtIzǿ>@!G_r @_w|'Y쎛0mĜDnvͿp߿1ab7QlOq'ӽ߆:O׶dmQPEqPm( Ş֛!uö`)or mTg%Lh8¼'as ~+:;IrŔ2$黦݆$!q"_#͂LiwA^υ'+Ы̗,,bI>~z-YX(fS1b0na?7̒"e¥ SxxVh ð?kH`%uq-q۬8{EzFۀ9<4jյsTH| 0+`,%$؝ {u_{t0s 符vQAyqј:Ͳ~~3!H\D$ĹC 0*M% :~6%p>1W)<Q &Czƚ ך/nߦm\ -!HxȱV*BΌ`ɦFZXU YF>MaXKݕ*tb% 3ThFD%mJ! '6}{>OU.{78s8*8W@ {XL QVUH#OE0wղD[KB?z0U[~Z,eKhewr8h m}-6`LKd.7$٧Ii@iu 7] }'&oy9RMɉPϼH.JDL C}nxѠ`Lf}Q%tiMwnPzѲgԁoQVLKǺ QT5,O_K, Vˈ4bYW>d-;|A ^m-֥餯K?cgTvFR?:0T1pLgL\qZGB9/x*jĉ!):æwKh+6 RJ.ZhFX܍Su~>}c[CViF8u&G4&ݵ?8Ri+`>MZ?0,gEcE`]"„<ifhmgF$rb*ƌxwg07Z#b"-ttЕϠ`tHIf[k(^yu;X/LEƓfffN::Gi I$i']\1B44N (pJV91&`~{*]z{w1@5fi8.RlῼJP9!K8W .Bg?2`vZTypG5Xśhh'v8 endstream endobj 2352 0 obj << /Length 2038 /Filter /FlateDecode >> stream xڽXY~_GsSTȠ3l̓ږhH4ߧUlyݽ &EO~4B6ǍMDl%RH7Ϳ#Tgqko711IRs%{Tt۝.7ugV%QvԜ&.?ШoOe֖4}i>PZ - i{$5؞˦p)H۲vg|^ZZ%f共|]-26GvxkBiwcqu= 9ϧ2B# -aG}]8pzr f ϟ;fZ9}`пĬNKq`%DՓV5VvT4O_n =!gPNPbwZ1.zuϔ!"+quMyꋦG d&n:hzNӚǦoN-625k.70y|%sfU-Mo}NyG8U QT-`ՂFh+2gih??h?!QKP]Ĥ7& .oi󬃢r\GCwEw=`-aP* Ҫ)x;i \9d>[U ; o(gh6"\Mt\!p'!M!#ڡ|zo;TI2Cr#e _cir ~Q .H&ӮvH }]pirrGSr/SP;TZ*(fn-k)mDFѪ@ hw$aWD;*+(#p:]s(LAXN-XF/ ILR6M')9}Y5]Oz X E ǐIxP4iSGgzfzS-IS.-fLۦZSe_xpY J% pQB;7\bEj=1ݴ>`G/RlG68"TfMʽGyMAD&fDiY)eā( i]>}y*,M&9 E5|1%q!-^yi:%%Ǘ6e^qHa`HG}#}c7daڙnip ~t2P,i6]xz8FB( Xz%z\jN8>%y\\|-j{B '΂˜:̻<|X:-R03}ݽc/0}?^}k0#EXCG ĀEIL.PXzY,P$m挾a-4R,( 4g+@ᡚ%44F-)Xf.Ϸ; I$]oxTEEmȝe ƄrCu&>eaUԛUu\ԆAzC@kck j-[c-wW?ջkLH=< =4)CL}ڸ endstream endobj 2358 0 obj << /Length 3020 /Filter /FlateDecode >> stream xڵYsܶ_qO)A2⺞*tt:BwB,}w ~qib?+E*"ve3)dWW׫2ŜY|\8EfI7*-ֽù֎ʪm}Wuy۴Po= 7mǛv+P|gjݔ{DkÝCWq#0?.NԦuu@ȅZ&{df͹׃脅u{/pZ?`0}GdU% # \{m4 ̵71D 9DկT5)gzwsk$4pۙP"pr&7~|{czcT*,eqDVήC}%M F=.b"4"Wj"Vk0"Z/\.s"8&x_]vjWA.pCB.M\GT@|zwܞ?j.ָܩ̩C`t΋D]7fJO82ؑl2F"Uv)R(kmdx=P&()2(R01Ǭ:IN Uq*Z(m! u @&AUUM04C1ćΛ6 8$ ų.Ahɑ`p8DU)5i_f$}fBB8Edi 6GYw4UCɋ Oa}x<[hҹǩC5 f(iz"!@@Fmwʶ=!P!/ۮ|p74|]І?:_ύgZ%B!-Rb!F-: ?“@@OO8&L!ftd,Qw@85hUHϛ"38Wp.|*w}@#v*`|ӵ{`W7h/45zU 9$>/ 4[fۚvFt{wEs@'xÎ~KZCn-W E &cĕK/yFOzDs3|f=^Ji'؇xu\ƀ7?^B2Du|.+@ u٪ʦ8Hf'YM6可㉀ BZf?PlB E )12H %ܭ}ZyW`q9iH@Z TG>x)s厐 afՐ?avz>T0k, #N\ZTtl^i.~31NnL5h-̬|L`O1sLvOOk[Y X_3Ze>)р]IܟTQ! ͨ6unX~bIk۷=zGsT}5C酌I%qsbS,+q\ڿ71"Je,%',dwS>J2sk+3GrW:jj(O3> U@,$o `CV"0 sΝ32k,\C=TMVfHSWE.`zwϳ_;EwDĴ2oSB ׆) ( ' P |RPnIJc ) ˛LoNsͿ"Cvl@ag@>ew YLo2S>>G"`~]jD:nc'L>^>>`yW.,LlfdY"m`El"FRFl*>n_pqd2N3縴㓿b(,@&Sf2 FC{D%?]CgȤHџE&Oy:D9׬8 Tӄ98 ]8'Z"[>0w76)L)%|;\yX?k3to !3OGK;>#A4t: HJF@v`%U$QC'\#SlfӨh9O8"IS)(s(<&cDoAlOWa:0 Cy4`̚.#sdI7Ͽf>UID"RGGb,Ѱ9}w1 .ed/©}Ծ"=iwˉ6_WQKcy ?I7X"$mV@bUY/f د}O,bUGgx\dSlZ@〠ZuqG>r8RvN>ya['fu 5˝ p8"qs'> stream xڽX˒ۺ+  @NHvS+E,84*Te}@'@F?NWFJaQ&KIMI!ds+mwvI~_ybDb7%DϩT.C>3lh|K4-VV DIPlXfq\%k )SR=`Ʉb,,m6VgȒd3M{$_|M߀ؑu@.c#dO}|#%zdl_MK@?7&B+EHv#n;lK,u]֏t>K;wyvH ^yz5Tt@e&@){L;)%dʑIHYtpj)LAacђ}ƍDgLmqrk`8_t~§r*<\trsE5](vN[^2 zF჏_- x[Uc%EXZt!R*#>Q>&r᳐u06.LϾzL\ >=bvW#Jp\<27 #5;ϮKYa!O/Wcw*$d݄4 [P\k\WCtl.f,lw x[ w15R߱$\)0,}B&&3ّh 87-h&(v2a=N:6ClyYmQY<(i(0F9l+N(UL,ݰ1P{Z e NQ.W d}H` 7-+Wsu5"zu(iاaް?>V8;ü`GJaP viȗgD@ OuL2 K&$*G9B.AՅ{w p[q:W1:BFLs/ww 6zY7٘UPQo%c2CΨ*K|>jZYz]A?q$lKz옢u{nf,NT.LȢ w;pvxp-VdfP{Zzu[hQ>Fܭzs(# B^.f?;e+R+'ӱ! `*$ H~< ,_*ϧK Kkfbx<@VRPPT0u˽Vvf zx j`sa]p+jȦ^^DgxsVQܬlٿIU2jNN+M&N xIyT2vn_bL7' 2+,ldȵah(JuZLJR[닲;TsT;i R'H3hC$H$qVee@&s#?iQ%]~rpJ(6'#2(NEWG 8=Q.K&(pX^]<\c4 y?0?0Y)B&)W0H)RN)IB٫ endstream endobj 2371 0 obj << /Length 56 /Filter /FlateDecode >> stream xs w3P04Գ455RIS04327W032UIQ044֌ r  3 endstream endobj 2375 0 obj << /Length 3186 /Filter /FlateDecode >> stream xڭ\s8U\%Zm!$5d&n=5Hala*U1Xud{aluRdȣa-VBغ®e r;΢(6zGj$#GF+쇑}-\\LP`p~эODLJ3#c]s向bRͬd{7D.,%{9'D "XQLtVŀ:}1l2d[ F[l"IyMǛp]`@ sqEwwqaozDu_(߅َ ɾ!4@;@ѱ h!*yz>[Q!0y^"Xf嶻x5g$vD)>i1tH{V9z#v4,Nˋ@RdF" snX=ݭ/1OxWOf~.Bcq0q%\I0j>3j8҈xm:i0&Q3 *&*MxvQ]}u[)C\c; ]$Zb6|KN>*#}*^(x)TN=iCD1_wbaLH|m> z&cw0<[艚ZYxZKE:ȡEoe LzRœ{ly"7C<$x>>Q#9W&4πBYLb ScsEML؏~WCۓj7 <<|)mV]@Wڍ9kmL e:LaݡK`QX>j'Y2]*LI}hbrݳ EF&*d"/oka\FNƬ1&GNǘxȶ>=XAp5h@[f`Vb5y y<+XAVM OW~W 6ETU_lEÁ5T u*8\8mn `DE[ S/w|C`P(PJ%&J(%K>0h7,̮dUE`΋NЩKGZc|t},#I*P&;˸Q;_ѥ$ZoVDE+q1QKvmh²=$ܫeѓB2ݛ.]C.,4k-RZsi)?*OJϬ-A:/ 6CH$abt6&3&(0d{wԁe$r7c^!yQthm`e8\UjmEkA8 _OF~w^f-{I)?lP(y5M 3E)M _мW7xnW~\M:=nc~!CxeB:Pvt2į1L?O9GUxu#B=[cօeQ ~q=\'jPF/!- vөuˑ!LOw? QOUjMg|EiY4D/qQGda|k~ {oG|v!`dS:+D0إ endstream endobj 2381 0 obj << /Length 2199 /Filter /FlateDecode >> stream xYKs ϯ:h>EjRsllU&SުTeredl&>A޶RMR~FjfdcR76VDBlq݆ob2'mXwyK~lꑆJD?DaF )&)Im, y5Ů+DvwȇC ~ :˖)g&pkȄiSPR #qKD,c,w^$ɶF_'%waƹ3Hɜæ"tF}7qeYS]QyÆ _FGYQfePnhР1k|e=醫uLKfZ'x\VdhF]MDf(W;SN+m oLkxoODž]t;q˶Ku!S]&pe֜aC7M@ImG{4~y[bit_<.Jԕ`0ʪ= v5 a q)[살Vo1f}JF_x+"dbuMEB2kz aZ5 P\ry$ K*܅PB"jP̟>9}KsׯǬ:j2fjBH#Fhnd늧!3+>O'S8-O/zKԶlnNl)02Y54I֞q5L,`OHw n:IZ(&ĩRKihzҫ]TbVԷo>=X?OveQQsTr!Vǐi72,F%]&_5'J'0 ˠ 4z"Q=Q.k\z4X&ȶ}nP. 7y ', E!&eU7~8ۏd]vsF˕y^I=˸ ( u aMDOm ؜ §[\~ZsO}2{Ys..*>8tnMVik~ކO U5Sg:@ǃ\@I&5rB #v"P痈[-W}Y"Ka`EB #LP]BWa5LxF7/>s>~+d̼527"YVP+qh$YX/d(#%(LaiȢpQ!^aHOzņN'/ $2p{њZrkZH@&O(&pDYJ}#S?߾D?,i zӞV4;CX\'d/ ej/EC!L]~ 8 g'꼋t{_D ^Y~b:MEEa2ΓbY]!'Y 7+_ZEJ(.5?:f1%?+ >|ǻ7ic5* endstream endobj 2387 0 obj << /Length 2953 /Filter /FlateDecode >> stream xڭYY~X\vy%pNƎ ZIۓ_xHC~bw]U]W_V~~c+,js~U(_j}o?& KU( x Wt* }eW3?ɒ~Շ@-3x]O׻]׋evԩgy9+M M}&?6ΟJ19g+ĕIxPHvg䯋(}gӫe*Z*Gf4pP<آ-.t }U@||sebPPtιykˇӏL8)kgϊ'(Qٽ9:_B[Q]9SxyS 5ҾtXWY+ Qul8CR,n)-lQ; ɪ$#uIZ-E_Qȸ4JJkQyt{x٬ TXn 确ʖ\T1@;YylwroO$ *`V<Ꮡ1`ڊ"?M,BۃZb ^T\*9WKaUq9Od'"r>[&-n+^){S|8 r[[f{gT]j냋v? (-nQIFϢ>6uL)$cӗ8% 8E}ǔVk fε˔Ikqo ,,OXmc—ؼf$| iR" *Q(EmLE0 ~V|DH"5 Mg9W 幬T16'Z)Eϧ>v/t(ea5T)z _Vrsچ'p_j[a0٤I, `ٸz!ZL8ĎdY(ǪRFr^'8X f5wN!G<407dw;`НρbyIք}+& F6G 0ֺG5;8fT57{v$1r+&z S>DzZJ7 ->λw(0o?j!DQv*śCWN1AP{H9BoF/ FzDcyO5`Hݧ5oʖd,N Xl;{[~ =kiހDB)UhȨM~: 25C!s!ONГij >J!=OSf? z/8:ۭe{[mѻpd+ׯڜ)4|BjL ?l:nNf4`|5 Qvۖ"]Jy r+om%iEDa.C?$8y571r8[&mYO%SF5E⌡fME؈[s D%3KԜA4*tpΏ0C"* "'GLv`?h ǘQn1 y0PGȠ ^DS (ZӉ!N̤Jc:qFXٖ6,Po9f\4؏LGL)) V!GL`/|)024ڌn R8u]RD6]"xLF$!<ゥ)yJV\_ 6cy~}qPI30){`M6iC0uVn8r$~۷)Iec.+d[ CZ!ʹMɮm 1v:O ˜ϯ08X|E| mo+g?NKJn.6KaE g|c]ެOt&Vd8Pm[d]#2=`ʍJngD`] l3/2WE=k,dq?$X@h@v8*+ek]n^P7ehS;Ԏ^: HϟCFюsgPqǙLA3{m"9O$J!Gϔ%F6шE kn8\ ?(Cs$Q8![!HoYA|RJ&ʘ!8} Z^?4"<1f;2G Ich|a?bw#0x^ؚ [3@ՙ 2ik (u` p=`Nh?[1ުq߷/9OIy*f> stream x˒)& `Tl*99Cr> P raefdEe&/0.fl~ V&T;ଷI<~KtHC*'3FpVݹo#=#`aen'#wFLg}޿D]iO@w *eT?q;`uk?Mϴ0Q(13jt̀#`2+$` zmRKGIG!F-?0޺NδP\ȅٶdy[Fَ7JeFSjG"xS{,lBy03or@!] ~1-rTu."'2Vs]:(Q~476F'AQR!+ D)R5%J.,|M4xo@"1X:7nۥq~M{\t3xpZȂQbxl}XOM]0zsV.Gz.}5>zc򔁧jPHJs%>vn 8mWwiqVY]t(Ê o *NfIT0Ivqi6;UJxddE]%~ ,x35 &H0)K4߃80O~5WoO\MɄ_l?a8ہdDmS}=KVu,^ rKE pf؃COCBC]% U+DX9hZ9F^J~b s$_9q9U(p^{US 8JSLzʥ rmkyN*ג\B^쩚p<9Tpq^v 6k `we3ɼ.j.sv4v0-LL=<WzhoCHL4Ґ/OC^8ʄiIo7Og L="$&adQqEQ~iGo&0Kp%E'#TB ^߭ h>e k|t21}g q+ԅ\YูZnQ  ޹IY@(Q_Y$Zy endstream endobj 2396 0 obj << /Length 145 /Filter /FlateDecode >> stream x%ͻ0 O1bb'n6nXX̄*QGU3|VU> stream xڭ]s6=Bj.BE=i3k*7m熦 TIbɐ~`X./aRz.bx,#HbY r%bΣRo ~7/-_{.`YKD+0Ƅc}cq6ekih曌bq&aۓ57k!i2 7yGgS?^JvjfK݁J۽•,6}eCt8fi&F¯B̫ObA4) ЌvM|fҩdFL# HydYx$Ʊ˺i.*ma.9o\襈*јHlhPVաۼ/DփUqrT-Wq92Jūa㶠IdԽa>/mkrp5%M:T$ yۗx=\&=;ljKx[!gXq̮-U;e {چ0,3D_m_!T y8x _3mIÄ>V}bO8=@ E2X6H&$^2S`,='fѹ$Űm Viō|UބtCmyaK Jʿ&M.36cR84RꇭYH{JFÃ,/xX 1v 3UBVNvOcj>ļ`hĨ.Hї}3(f $Vs_ģpp Đ2b_h8#T5ݾG'uGY8I8j5>6}y@n\%ϢľjF9ѡs ەuAN?Sa{0 ׬ZXH|Yqc<Նsf2LFc&kEygT|j vYx$B뉵IG?{li?]d%eKˡ3TD> stream xڭZKs6WT!"7Nj;ڵR{Hr2gʯ~S{р@h4uC_$$ʝӛM(oU5}甉ffv+D\lɢbkuՇz?hC1EC? zUtCU%u=ʼnm*uMMoA]l²EWf+ ozf *n ZeWྯ7 uuSk:Sy}xpU>/KxY:0C+MuTJng%U*@6l[k2|)O/x6P2Pt2o#vJxXPv}gukƚ\!h@ZbM]Cױ'Շ{4}.TD݁IN`֮W=I%YGGܘNkB5r|RKdhHEևmSnx{2j{msMR=Hߨ-.[f!GRNN^8b2Cu' M2.~4 D[4cSΖh'G˙{њ8<SJ6qK .Ntpj[Puŀ)p^4]ޛ;pxnwFL&m>65{862  Q!Na%Dh8|״4M6k|5˕%*Kw].'wf)zޥ(g~Li$ &Q`L@9`$iZ\Q2qPro¨5T`r+I,xi_ݑw45z  ۑCmքK{3a Ӗ5-*qiԁ.( Ϊ}jtȃ@Nm|'oS^tFg ټ/#S.ҹ/~=ޔ0UA 1W fſ6E<^tCCf,a}?}z/63o!w,o8-B7pt" tV7z>?Q.v`胠;~qvavKu#w]U<3b1 ?e:C'y+{Tށek1.L mXPqbpr0 yr?b\Ns7VWcW @*:Qݑ{`Z~>.{3LJ;.>aذWJ<=LP'S;/kY dupOQvj]S6$%.>zGNI'\KՐ`D^ 'd#my=nY<08-=3el'7JԹ}.*`gI/f_9eFJbHJ'(yš*$ L_CEIH1'錄qGXĘ+r6 wRpxD0XGI'\)TC`pX:J@0 9P8-1%g 2T{:{ Aɱ%5GBiǕ0̦@~ zOe:d{\5Ri؜N =}QM=)U{]UΰH~aT%b0|UҚWxZmOsj{fVZl^=W"ȴ_d%/<"si,?%}dl:9}L o% )M r BB{6"mBU" Rgo]D{g[.k {OXP]B5?B'd -pM4G՛e @H^\>zL*tTeǀl>pBQ܉vCCXvTEe1۱l7d}EOU${p,aA:ϳE#'bۙpPq9>=cNH fB7IׁIEDny&Ċs glቓ{ z*{^uVd:@ O-cOFh C5U={~>iGvTwh_Кn5D˰'|F<]쏈u(>yq*E-]OؗZNnv/'g;*o!]J2>C$" endstream endobj 2424 0 obj << /Length 1978 /Filter /FlateDecode >> stream xXY8~_a`ZFұoI6 ̢sL`0-c!+d~T(Y夻'mHgxeZfx'T.Vn).CȠ( `Dmpfh]4ո^ȡrK:0>JÂꦵK8ƟmQn/?MTMga[?~`[ GL t CA)3e5m7ޠkS͚kps.g͒N4'}v9MqJDECt`n!%м[w (LDj/NvU% 8acjA$3Fi K MH!::@H1.f d?faCw=2uT,F=uxhHWƒrmr#M\bp\l ⦅>-w/(O rTWz0PSP'1ȧ6c&Q8*ta9Ws΁?~JA0ͦ/+o SI{ak[~j)&;8 @=N@M՘ Sa:3Fk>Fy˹,J;bo>%4q%Կcu)Qr씓i5+{ "K' F,:x/?im5K3[Hެ!\Oa XZ^}x31*S DČzmHx%"A+D,¿# S'r|M3|H ѠFpA.v"W/O9N0L!g2*9H݋ 4y#Wb2iJr:h__ݹ28wcS߃;Ў* LQy?H'@W=WFA喾+J?ʹnThw H|9˂!&hr.NׂM.hj(xlRMLR('f)͵\^D*713@2 endstream endobj 2337 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1857 /Filter /FlateDecode >> stream xZKo7 бhE( h ɡ,ڠ7 ]x-ūP"E~|i\p s-W|Y-HCI U}`EJ0Ma]Q Ͱ Qb 05(${a.deQj b* IŦ`ưi%|jߠ.$dD~@'aVĺK%+x,ͥ-Xe7t9dbg[$d.}&@8aw 8F;{eqOհиo0*U47d%H"?t'ʐA1gAX@a`SV*`Gݬ\+aV4 &8mQa.'6Hč11ׂJ*'pgG\0ʆbf?TβՠMuQm8ɕ%ا)>uWN5L`{Qw@ * )F He(QBeD(p-S͏Q/8b2xxw<cpv@T;[j߲KO #tb<5.*,O(5&`}Pfdk2\ WMPs>|<}N|svB>9;[cMsyz r|e?yBo?/Y>;!<.{2l^OZ+j̩IWif`}ru9GM"zlс$ҁT[@ ]mx0sz 71"rD!)S$FꍙQۉ131ziu~.:{%6tQvd>Ҥ[]|ywgRD8=RƘrlcĊ_CU0D,VA1PDu Ih7[t"h9*WFgE"~ʐTc/yݫQ1pw!tX::u"K#bE#ށ:lzffr4N[_@D-({8TK1(KFgşp6$&Q&%,69׈`@i~7ҬWmH":^x>yhU]Sn.Ѽ'~*z7XN{g!ʧx7Dʑt{kvv(;:T;jAvuxyu5} Svogjf4~(u*v4QQIMt؊E{oHt{XD|ǚU6f-<*L+7菌AX3Tm >ʡM?6~Zo#f~>DLr^ Fhhϋ#ACN&L"ݧڱۢ^"#ΨF/nK'V&/㦣*±4Rr5%3i$X?SxYPޒ7GC2. yXp޹1^_QDN|~=|Xk۶{.{(߸ḵ8tq4i)lB&]0`VP ҪXfm/;TaP~@JWo{\hHn(hrnrf"X?r,*Ő=QhZ1baXAb+b(V_(㫎G#Ӭ5Z\ϐ*Ƈyۄdެ 'j endstream endobj 2434 0 obj << /Length 2550 /Filter /FlateDecode >> stream xڽZKs8Wf*&OܪLR&qj+@I %jHjF%r  WgH#GW#c7(Xf/\wcՌrU):(͈p]~p]w%u-*gMVoW ףP,N$ 0%7qj .3~(~v9Ue0_C)w8&(A'ԉEB3 I^䞛 hEȥ(ƹ@r 48T2cm%s/5ڑe=' )d\(~Vp$0Վ(NG+UD ^%tEX61"~pZnEfQWLbܣ.Q'EV`Q̥r3W´2q;QvDJ!"[Imd'gd#e#FQPf㥈r; `zѧ(x+XAZScUg3Д{-*m[ I8sr ?.mZ4g[U[GB5b,O:<`0LW>l6o {. P(0^x=/<|(Nrà;$uw* YM h] ,NaBv<)Ka 2yi^*W++\vG$Zg!h[pցQ3W}De Uʊ ,Vޛ?Z}#ldKi?|AWU{[*D@ԍ ^]U%ńQd飙T},u;'rYm7;GcAF:=8ǾYZE-?^8w4=ܫ)v*MU7D"&_wZ֗p|F턻Q;&zVvneYkߑYGKȋڃz&g1ҟ1%F@+LjiYg_A<)4xW +ou7c}6/{ӬK7DN3mOvSjU5{zLE]y^Ӟdݑz $f6wώ*bfbç}QrfrZVtu"yUڑż2H'*8[CL1+imRd#Bݔp1(cܕƊَB( cp/ʦ7oaasи]gc%F)G&ݛ}zUMfyzSx`Z܏j5ǫ҇ y}b)+ nтkKMa?۰e%:x6GT  Ph!k^lr݋~!79x|hCXhڎlZ0u8~wC-oit(* ivE/M 'X`6i߆8hP֏e2&Ï^_]E|nrJ /IHRnM3[B|4#n/UIHb;lgXèXmhy9} z&vA:=*"b-#h tdٴ;s~1g4lwbF녶J+_^< .5>s[yzfu)hA.{j{Bu-m_#Ȯw{Y0gOuɤ8WyT<K12JF+QfPWe9c{o֧}ԢC0V,6~?9R ÉS;R<[|\S&8?GW*\єigwvi1q93k.&}JMU@}~A doaVY槮Ig((;GN*ssUg 0~t 0M*'OJ7-rzX ,ZA ?g.(|ڶȓm9?sئ4 endstream endobj 2446 0 obj << /Length 2203 /Filter /FlateDecode >> stream xڵrF]_ҋ*jp|[JloLWjD"V88Bk~{I^ĞFO=zᕌRĘ`-L$|.H zM^,hU7z ׷qJ?]զ.+ӊisy?LZh?X$Ԧo"hOСtbye@/{" boڱr>C XHk i _-k?Gq(ꮳh`>I]l.ˑu-P#o[K7`C{ 8ȭf( *R!&ɕ41d!˴E^5F֖]7gL4H`OwD 0 HtHA  j36bseO43ٹ0^Ws-0 WǼ(ѭ$Ϝ 3֟|w/\;V F=.Flc- 2OɼVfOTLMV9-d{]KtCRa `HK?]ҷn\++ W*^%+j2$uopQaf0z2~6hcwSvT.+uN֝AVAgn&:QWyaǜ6a@Y6AA$L<9O%r{`/}|%Ӕ QWB Җ,A4$X?*6OP5‹$2hPTEt7ԹJK^Tp]O צxqFU\YmD9AA퐴ȯi}gҟ(-ȻeM`865"M -囁m۞FLDKK>krw֞btkڼZ"܊O4Rԍ%eLpYtlo#b=&;F P&ڈI0a,6b `xqB%JDg!}hc; '7=G NȜ&=nb_erC>S;\\{qT(b#$>e_>gME;u:9ZI =G>̰ @>I oLp!5.ι1Feg-Rk^l^M3їYEkQ4n]޻&F8!>xOXr )|+9pqI}d Sh+C彨K|hic L&hX9, L@B@ Vv)9}]:!mWdsJY@(_;Ga1'ꫲ_~M| :P]IHD p_JH}e׬ ["|F=[*u19~K18!E~煝vuU56w9aAs6/g8`-6uZqix3fPrT/WN"#yMxvVo^(82_ce՝H`Zr|ROEa$hP-x& axR0ep"s>xYB$q%E;.Jq#FiӵO1aT-zD`cmэMɶd+@Ǔأ@ -?|@miljIICPҰT}zc#㈼Ls^qxРt̳>25ؠwikyִ__LƖٹZFcڎ 8[`hh5-qhȖLsUYWqj{zWTrߓmڥ*1o6&_~"|2k^cQ /.HlڅC)W1UfKQw5\jx\c9ǁ}6}a 7Xл@ jli @t> stream xڭR0{"%,$KKGΙtj\)(\H@ѹ:N$gw~ȸ?P!H)YGhp[M] ѝ?[.ݚ. ,`eH9 & Ew&IcI$yS>/Font << /R14 2457 0 R /R12 2458 0 R/R10 2461 0 R /R8 2464 0 R >> >> /Length 2097 /Filter /FlateDecode >> stream xZKazQHHZ'V#pF;7@`@)vW}_=߅)$o~yU_w@.T9)NmD-ƒB1S`z9f؍I8[{lX$Rp+Ŗǚ3ErM][$ʵFmX5P*%UKXB;α@{:Wh` Z+8)JpVUj ;4 Ý%PGQx%E-#qd1c]<'9WvAj~S՘L=%[v1f(Q c#9kCaXm 4 c.@KvLBcSj908euW@1 $EU㢆 sZe@L@bNj@aNI <[2 3*C2O[7؎5 O "_H IH.8TdHu z$)V\r'ö-(p8AƉsP["}p|'s֪Z eJձF3QLj’`Dx3"$ɒSmq)*?Y#*P+-pJ΀*#<6Uf7R*p0ʥs8`t0uv).ԃu}USGiG~:h :Ž<;{bhqhH04Hx}IEk.M̀ P@GrE|6es ՌÑ`HM[:$ePHnWSj]XA6t#0?-Fd.hhy{13ٚ*Gf1ЧԜhgK :IP=(OAGMº`&xPa9_]< % l{ճtSf\!.QD{`7斠:jD #F6SA (Uh@3 `C9}G4 G <__S01y>mEnQ|-"؇%[7nj!wIߩ ]0 vwA {NwIߩ =7>.;AL`~oZ ؃߇M 0%کdqBq%K?"؋rkŕ,qR/@=ۛqUP?{q\/7O-\˯]6Q\1\ 7ΌI%h[8Wg+(.V gF$P\;?>AFD???rߛ f:b–\]Tޅ^ڃ)qpUzs?={1ݼ[_n 4y/şW/G34nSJB-s oW-A % Ǔ~z۟^g^hl/'hhd26vǛ ao]ILXTַOC.!IlRnͥ҈gs5w@:"sN!K#_?_3Sᅤ,Uȱ^OaCN> DBk"&~7D"+2nhk KGfZ,-}c=?n_dmai5ۏkM<0CpKNp8Dơ8r/ endstream endobj 2469 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1306 >> stream xS{PTU?}]1zw7 y6<vaAlzYQ)djp`RGKT@ G ,)5}9]i9s|{|w($BE-є Ԗȓs8g+YussZrSs1ak:ʥ-,Wme*e{订₼|[QE) P?hvis uq%Dua !dSZU[P2JEkPbR";d2l-#! EKJҬnXTpO LS6\n8Uϕ7ԆQ{+jIH SF8ELlmn?$SpYGDkDJTD *BI%zьAؓ Ѭ'œs=5@!sZㅖK$fKƂ@e3gZ\{&%LΞ392ra {fGYBn+e i2M>ӌWNߝCH,F\5/W\z}@=FKHDc$ '.d/P{A (wzJ S =39q gp? B?ƶDU7M<_HfUP<6;$cf G̐ [[Z[Fs.6Tw=<cT  :!p@x527b`1,˾{*u"'&XVyQ~$±x{r;O8_rKaw & s2bu $0dߐ'tp;I$kV{?dH433_m 9Cs%By8CHltu\7^`zz1Bթ endstream endobj 2442 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cusp2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2470 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2471 0 R /R7 2472 0 R >>/Font << /R14 2474 0 R /R12 2475 0 R/R10 2477 0 R /R8 2479 0 R >> >> /Length 2168 /Filter /FlateDecode >> stream xYMpY ||p,[@JWv%YCfM^}o~p\KpgJS+g"rH>7Sj O >/ f} R?/+@gE,@s"~WEVߢo_aFnIB]䇌}r3u}*S\ TUŵ=<R@mtҚ =h7ڼVA-BoJr1N&bWjTt!b 'pR| AD>)fb.} ڀ`=) bBǤ\/ LtPIrUd38h( ߑL : ZjǹdFV#CezsoL"SYv{&>_<#8#Ǔ#ǭ +Kq N`'F QC{q҇r,8%pNW+Ǎ '>~z{r}#м?|Zcf?0}|6=8䦅OV=ا ۙ!1zn ~S7iU|{9ʐ廹ħ '!5!RW*?R>-^~e|w %^JHCV*~+ ){1 r)M`[WX) endstream endobj 2481 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1114 >> stream x}LSW;e¦`FP|luk@EPBDx!G ÏQĆVls99%YK,w<}! o/$I$Jk,xT8ZC/ FgS/ $[D"@mnU _&$P޹.44,P]^\XdEEDe8-ڊYRՕXWY!KהTXQ+飢cވ$L"H$D "X# !rOLxi2VX}PY}T9*ӽLĻM JOdtYp$uy]{nh?jnmja&ې T7Ss>OVXD&JQe* endstream endobj 2485 0 obj << /Length 1376 /Filter /FlateDecode >> stream xXKs6WF0 vI:8mSMQ6ǤPd3]02X!֊yh*9(" 8ޱoբsS\=Ҫp! WqyBdM5_#/xXς $8n*K=3JeYb/x\үݶ,fzjҔ\YF7j0hj4ȗ.)̡R:BB/EE_- endstream endobj 2492 0 obj << /Length 1632 /Filter /FlateDecode >> stream xYr6+jit2LI*ɂHQt$ڮ @GEq=&Lm4$DjBJ" K&MtWj4ZG&'4 K p?Cy_>%??9rtTk▫Q& p(puD+WN`4PZʪyVIp̏ҏϗ_*k$|0I Lf0k̚4tQ\שHYV_ \PN,γUUs|Au-eZWRGB4ton XCq/`VaK6o߻hz A,a3M' A8akLB06P1zAee?!b(B\@cXƦ iMRX_ _kYЌg?t98NG1j7rW4$BL*.F׺l8 Ԡ~t- nBT,Y,RWȲ^_lV `+5Q'IE ,P{Wc/DI6?ge9tjU\ŒkLN7h2Q7=媞Z8 ƵErrG趋)gZnJ%a(an_/tF'Bo{1I, *L:dՃ(g,AoNaҳ<ܠ̊VLtTs} q5@"Z{^ '[AoLf0a#?9E}=bL/04G>N1WZ 92_,3 SOnЩҦu,m{M< Yۥ+$[1*$ܥe_7=YJ0nY&tpy"q1KqyW_?PDa IF O'޵.%JY(x)KP0+ ,9og,E *ϪܗI}veSW핻.WbOruh#kEnؐ}fyl!DT ` >"lӎyQ{ F&9frs3]-ul;${{;u X0t}Tشu󃠻}βb[bfnΈbC#:0|A*ɓ\^Tq| 9%myEp='56mz` +&;계a|22,/BpLf>K"[N]gƊZF?_~TatڅG[)hJ])*d‡p?/HI] _Y R@P$Az X4A| Amv~6F {e/Az[ `"|b[UC Rp_7ZѴ؇wڴhOwբV=ld=zG<Ql8ꬁ gy}͇YܴgoϢfԟJAdAw⫲sdpםZ. 3_i endstream endobj 2500 0 obj << /Length 1815 /Filter /FlateDecode >> stream xZKoFWB;wnȣ(HGR>()rof83+]<{p@D`tT͂Q| Ct0$L0I`D% 413,0`$̦aY]cw<-S'aϧx~|(t_F?{Mt@`Z8<) I:h:UEeL*r-܄efՀs*=x-J/z< H\|uٴ. @pĹt5`)< CNhrVdnz_&܊PNQ33(܃ +yb%\TaUUHZ-vOQx11ݻtVKsUaQm.tQ 0h߫z{'XsfeiY>ߒvVf1DDR$WHiT"P(RI"ݢo~Xđ MMͰY@QVq*--Jxc cƪ.),elF6k*'F53F1aG\/ø;W[q}/]sm δ=f.a>;7HURvn7Vgu Yk!3o&"F}AbcyلLd^ ZB" eӐV{?~USp0Ϙ(ML4?v eU^޻q^-Z4Ubl~Lg1i ʫ*)T? p  o`H` 6Hb2:)+0Ow82Es"QDx y<]VsvXӣF7e8ui ;joڅm.~]|0hh0.2`2 <H?yAf/h9dXu"^j(diA}5o޿} S-nFo޿]0?V1p{r3Ad vF8@&^8OҴqg t@FvqUDø;$1t Z}ےƋc fP^,J.`1IOٿ0tp b- #/_YZYcpf}26aQ sL;YFy/5d7cښjr}OaM@(WIEKnlVՕ _6mo%vL{zH 0tآ pU*0 Ww ܨ0x4]cҫX!QkB\n&2͏>ĔVF:\pK.|t$WKzǿ?8 el¤푼I)L)*ܽ9fR;6) =.[{2-,Q -,)*jɁ=B01hEn}mzXKhC̤BRh>p+!` 6q<΢j:n+uodxZw #LhuxLɑDv؂ȭڍEeԶX$ q_Vac)z`3ʚ5bOaM4|㼨3V_AǏ wjvIrRН[0~m֬DWk!h4abǟa<0Ğ_o<^$@a>5na?> stream xڭWMs6Wr:D i۩rJrHZٴ)px|?f8" Q"x4BXH*HƢi} C,I8nAΤ wej Kbqpa hxَp$-A(ň>!! mjei|Uc}v>:N2W)ioZ^;$yyuի!U޲ )Ș ąMoBqЕ:vYqmVnZh( (#q.T?I. =VS0+i;?Ylu2HXgAwHw]iW0)ctmbPZŠHHv+Jx!ˆ,z,ۈ15?>D8{{U1 B`IfY.>MoӫۛwJ`"dۏsQߞ{DwJ#pO<S_ "ep"p c EW tүZFT<WtOGv*}mBC(=G>ot~S#l fN P2tbtC<' f[zAP}֧W=Ը_ o*f:]'Gdkd櫪-ی U;i9I8-tݮw( |:}tX^fAtp ;[]dAVP1@_gluʴ-X?w| sW5D &[<7ȵB; &#%4ے[ endstream endobj 2512 0 obj << /Length 2501 /Filter /FlateDecode >> stream x[KsFWrX+L=X(e[Z@& o$@Σwq|O B>?BXȁTS@ÐdfS2 C*1eCTҕ"z@<DT G,2ȟYL`0' q/O=x/7 KZev`/%Z#B@fH WB,HnWq$)"MҡDCaҨEʂ30!Bʑl8ł&ȄI 9:a+ TeFD*i-0P!vRHt$ #.Um]eY$3" '6W c`= 1͖ C >7~*gCIoNy_ksxi WQGE2ξtH5؎E~<269K|Ј㩦cO7xRDpA nO&qSfLV `<]62i?M<6h8ubLj12cӴrS`}R TB3ay޳ݲ|㝁}] 뚭I B,rG sO1Bj΂W)xEU g %3Xԕ~J< b Q+>0 ) AL%+gor'URbk_l~[uƮnmHg^*!qG%KxNVzM?-J9Rj5*((ũNәFӒ-7:O^7%ۻӒFғ#)sђYuYupwdV3>&cbYW7JDQé{h!Nݒ =ѫVבĈpyIXι' A;/uwQüТ4vQ9 їQ0丆@D.G#JlN{?Ʋ(ݾ1˷o&ٱyX}3mo ޘW5o=GlDfJf5G|QYuu+?OpiZ[gGL8cwkY] 2MuQUTQaJRHjmQC.:=h :߹01_&hūl-$<:("=* ZUEm5dma騠JE\zO - *UBz :^Ӡfs6v]K$YR@4b-V.N쇘bm6isg|u1S1x_k`"&txGt@fDT |p?gTd+CE2ݡ:tt,~zO͗qZ>)٢ ^xl3^GL"1-G'"H1Y!쳟Pz5wU8@W!37UBTqd.IF*^5ť,}p,+8d/WF")Xƹl"mrL1C8>v8g#Ds M.<4 *X{X"˒~6K-2+&ʈ/})&H(Y&MM* ,‡c$"g$O| Fr/5RPXx'}4*QC#-8ymg7L ;JC/KBt+]뇅a \2PI>.:: lf 3 QA4x83*3CT@Pekc߃7F@Fڃ|pq}塐S!x9d[xs"qKhC&D?ay/\ũ"-_{"˗;\C#(!] G%;>pu?MiYAf{0let6aZsn)yZv-a ulfX] ]m6Zp-1pw[Ĉ#e4ӹ Spg?Hk~'h눊aYbfkXkdls:R q<%͢0l! /Sv2;% \q)!] ynֶy]$& Pw`iۤ aPAgpvsv/o_N촘iI}=y?}&W77a3%fm*9_=' 7ۯ(M⼷@;a%a"*x6K3@[DaVVj.; ei`ΤDJ; &;o@!ӰфT*)XB+1dcӷ"FQR $Plq;[u!M{!&F Mv"՜t#\^@Φ3DK5'ëQGLR٣-B1Rf8U/ endstream endobj 2533 0 obj << /Length 2375 /Filter /FlateDecode >> stream xZs۸_#M- CNҙv2.@Kt)%$7}wEYv4}HD b?~X3FϮog1n:Df/s\,|^,JW3Jzo(gV8@2a*.3) ~$ޕŪ-" rc$XJ1Q! K:8;,Qyk%ՠ? )5G)"2P&4cwR)ʝKνuwD̬gKŤ 'KVJ+G=Ƒ2}_#\̳`cxYyRJ$ _ ==8Ԙy{/!@|{ ߶t)xD`vU "yc/n:[jr.\U)i!EWۏLаh`Sl@\ d!4~Cc1q薂`0|(?OC}0!C;ۧjEY6?mALxL9;rgIM 7p$Z~@-F8yttOJpC'U U0i}ܣ(ȹE?Dv&>3Z"_~a>_'#5e999Pׄ D9dpP/S*ș;o޾JR=C-6UB4ܸUfY5ݾ/,})Q}Co(}#mW1BЪoX|lk!6=#<+`a1}zjOJ)|&qob).9ө(;]dF1'{f$ڵ C~sqqoA>0OlHz;pV0#.C>"( R(Ьޫb]Q)Y㚃ғڔL8/ bt+|l^W0gL ^z`m9*T @LBXmˏQE#S8iUSAlmчPx/ʈ.wa*4 's=i6^Ӝf{$`l#% ws2<7K մGJ#:eh_kӧ`1MD|So1%T I=SR|ZJv| ì?dh^c8;[0;KXҀo1y QNy+hu%їsrG5eo\7kzq)u94c_E\'<\:9X"C,m9w+.D^v\AV1jj/Q k jQ+>7?'*&<fI an6 z$>kp2{Ɉ!hkd'V_4&Tdm"ICiݕ~4:F8K(2*^=6ʼnڈQNF2{"gGCAd W5evǸ8Rr,~%8̚A> stream xڝUN0}WxҮcW@;x>q= H%ֺEfvk%E^qgQzA Khz6 iB$*e_gĖ$6H:ʐ~C2IG5Ag\A< @*P~Hfy#^QoYY%==9t 50ԒD!,/C(u78L"|EӸNl^С%t]nskupTSAek 49^ƴ|204@0b٥49yZC%rb7gnxeE)75ژO>SCmr>y܍m)| &;vk՘gWz`]It@=. 2lnn P k@po^+nkH#>AǔHƽBL)<L endstream endobj 2436 0 obj << /Type /ObjStm /N 100 /First 1037 /Length 3103 /Filter /FlateDecode >> stream x\[s6~ۦąd:vmRLh PCRi_$IqNI]98瀜9*H%M"Mu4p9Ot@$[NlybM'%ݑ́TJ'"V<eȔ)+hAn1qKѤZAj.`>b"&,!F .7f,':qGrhґ':kDb OacF0p]@=Z[iK6 6q<ȀI 3h9K(sJJ֥H[ JiRҶD|=҉u#ۉ ~ĕҜ%Pu¢qSz8 $aӽ6T6yPܠ Lj )pjS ƾcYOR[at Q=@u,~-*# B"9B=C!*gNT~@ >do R׀~Hg 8&ev)Al QѿZEvҼt%?tv`r:rew;{(˴ le$Er]Mi  7UX9huv<*ޞ]aUq֌OZ??ʮ)~\4oY"^8x>`KPӆv5Λg'2XfP_]d5 -ԨJs׍$ٸbC?"@{@NU1v rOȂGF, .7>Ւ~3')^E9l$80"0qCa; ݟt#qxuiN#itAs]H~zg3xZuUu>}YG= ˺|3ϫ o="-K  >2{~UF2Ҕ=rAIWG:=zFKNFid x NO٩ǾzǾzǾzT9|Ǿ|Ǿ||3uoMχm|3o7f^-o7qURś/./ytwtpӑ)?|䭻?ɾzǾzǾz|Ǿ|ߨ|kBPJR^]Km*u:K O_W@/& "=Ц::%u&*uV60Vf"N!D*k:hV[vamn!I3#ePڬY(\2:ؐ@WY|E])$o2'WQ(s:8щD-kS,R66=$߶DcS͍;&=0'g%­ jHSKB魄nynݷj$4XES kXk6Sbs|/፣%V-}@;em+Z S}cR'kbE̮2jz+*wEUZ/J|Lpq[,[O]>yB[q՜:S)')|-~Skc-JP6mjltj5=Lc? >P͟:^g8[hV POlC3cY"ܖJ DZvy;>48ۨ5F}aMmP endstream endobj 2548 0 obj << /Length 1106 /Filter /FlateDecode >> stream x_oFۧ !-%\R !{g]p%IMX~aDHA_+}I&O;F"0 fODpZy$V{.H(pFThJ`4d!iȁhJnɨ5nixzQ)]tQ3>634+ I/*{qgz_)Ynהa٬n?u41ekZ(6s+׍2ٙWZ=xiw Yw:r0* sVĿ]i4u9MvE0S>1ʪ6hmxfGmQ"|k#3q\8m<ڎhn@mŶޫHM'%[UfZnՒwZVҧ4u֐*MCjNB"A{x}|8kx:``H55x/~O|\<=-M>^bַA +[n|?ɭʑaQ3w9~טξ04y:":΀gTH%}YULRPto  Bxlx6E[n "Ea :@at I>aNVu')); xgF%;[VP[h(MRgʮ=\U/ʫHH )q/"ޕ 1j{Q[reaZ䰻i B][Q4"x;qsyyLY(TV@]y%vonh6s.N6󛢬(l89ZS^h]>_{bX[a5ڱV]_+\% .Era>cAqq ]C>-p .'r@%#"88JN*T)/᫽I 6W1.lx>^Ur^#Z>c'];7Jx5 ƒƢ` Kx;ʨ/w`CGF})p\d.PaHEXza{92LdCiyXEzR6m ;2 endstream endobj 2552 0 obj << /Length 1327 /Filter /FlateDecode >> stream xY[o6~ϯ[l,>dm ]^yOm_rJt"EA"&}#) B!f % fa0>!0epFA N~b4]15Υ nzDe Pa,`:?o'OKIh5D* W~;jt>H`:q/ i ; 1_ |]:TE2Yx¨E{UETn{?'eIzۡ7:[P1 DfsK@dx?-Wغ6 F0 B= !NX͛yE>J>f2z[]h]IQB׋>Qމ4h!Af$)P6? 7WߓUhdafSkE*Ah(u.YMrūUvUY&}]w>p] ֵ6h(z뇠E2]dwm8}M*rDŌR:u^и4 [@GA(PGڡt?-JT9[Y!.9k;zHѨ|NUb&{۪IwCڀ8I6v:j;L7S`hDC"aBulxo2-Me u ,&tzg(;εa\KZ!y?-Dk0ܽdt}c '.GGD.᤭uCI4XN"O)|Q)|KFd0_f<2N endstream endobj 2565 0 obj << /Length 2027 /Filter /FlateDecode >> stream xڵYK6ϯTIJ:κ8fVGX,KLRտn4(h,'ݍ~k7oeR-"c7IXDE l. v+gseMj6&,i0Ի".57oE 2c$\&LD-VUlpq^ﺾW% fjj"m]@O24og"fù%]Qimuk &@yuB"DX`qїq^q6˥F?4;pЧ86X<zziw5 祎7MܩE\;Ml4e7 V-nxO89^ٱ㥶,$ړ1htzYY.\IJ '8SVF#iHNE C^!aRvP/aIyHQT 㘃_(&a)BX5m(e[m{baDz廾 ;[5 ɒP4.qp״F (ĭ(@d# e/˶jܠ.wnb0Kfd=owmQ S#u)^ ninӪ^WPQZyjIj۪g(2`sj>vCu/4lǙKJZ4[O{ lJ IaI,r1޿7\0R'z g*V ^e{èAUkp0, m9s[rt;5&'caI9=iH}ח|_+OwtxRL2XP47]TN WzRd*qupR$3ĉQ!$|'TI=0!FYET=^W8rxq6K _m~<\th%|.9f\̏rlLLfR{C3 )T-Q̈́шhdq5auX 9i9bSŕ"eSxJ/B U(V!{ sl² 1!v&1.OO4C^j+TM ! 1D20$}\PB^ysЯէs\ 0C>ضlV|Ma6 p~ @Z\W exCl3u&PÜ^:u rFH*zPe0ZFsF;U~2 7; "#yrt@]wˋefǫaaٗ4Z9Tu/D[vOPu:a2!_5o zu@/`]gKA2/>u ڮ~`dMo+hWE;KeB3&onI~E}YG}j<7? O{Mx'apeɪ)Xksq6PH],77Qn"=dnEyJWc9GV럿SYDKfho?C:bk\5k0 !=|**Y#fK{bIJ-bl{ Ьf@r UlskVLdu2[i{"yGoKy2 ̙(*\bϧ?cϱe `=n|\W$ ſTpu`d5}(Tg\pg?V]}PEO7'!+ffp:vQ/}3fZA \\!Ē=xgn]'#2N\R 5儬ۤ> %4Kw) Sm$ex> stream xڵZI6ϯb\& РYNOi[1-IliDҖFEȒ9|v I0#P ){`ČNW+7 ?7|l!DǶq.< A2BvH0㰗@|H>O^M{q>~}wmCA@D Ko+]H(C41O+D5kbL51GHt&S2% r3a]y6):HZ ɧ[>O;}Cf?wr!mJ;x5+.|Q0,WqoF5{sCgn$R vg/QT5᥿t/=)p0/5<\+0Ph";Lgyeەa"[58t vP+V#0`Rl~,]oq`'ʫĦ<ApMM,]X-=qCf_mWHDOt>YH_4|# `!u9:_}Z9БV@gU %4o@Dؚ f-BFaRk$T HV'k$HlˋcS D{ Ho6zRN"q2ST]-H̆ YSd MZl.w-Kd!VXkc̡ɕAD>˼szWB}v;.#V93qpMLuӳ ZּV7f+z+EYI!ƈ㺴LE&5f[칎X"sC q `_.ؒ I8`r8|zGr}L"("@^e *2|Y\@@jl5t=3tyơ#+Sͭ7|]; |z; (/l]Gh&4@{[jJbg6bom<(JdQH$yhJ}{ݔŘ9rCkY{dUq['tkeއ@f$orvI\Kci!L6͆ܤpbQW w]Y4Ჷ532 PH]8WPR%0&ZB@LXuUw#O_GȇWu> stream xڝMO0!YNh=%ћ 7edhQYM4sμ}  Ԁ#&]ZBԠ"6xbūiqσ$HH^Tфk hKfqQ̙ QE2OK- jťuql勇Fos ɸM}a]ǜaTfI)(AH% 5T ݝe) {g;ȝ-]¸塀`; &`^?oTU endstream endobj 2561 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/pp21.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2581 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2582 0 R /R7 2583 0 R >>/Font << /R14 2585 0 R /R12 2586 0 R/R10 2588 0 R /R8 2590 0 R >> >> /Length 2640 /Filter /FlateDecode >> stream xZM EW--J GX |P|-&y=3 d 6c̑-?˿Yrݔs'nI_JBz:H?r7O̴\"?MJE:K(wf]7j*(,?;:~ZoLE}5lph¨*K=rJ}lF›i `3=HSt r"rcWBα)%(yuIƪXc)$E{4@,RF](hbEΩ!?DffYm=V 384o 2/7+y HgSG(OR(;[j/MNNT􈔂 6ӱIu%3P. tU,!(r!c )'1Ȼd"9{n^Kkzrbͪ#!|@щ>瞑bLsƒdN*aJՇ1z` c|6 (NRh (;yBd!8)uk-  NnxS'z42OɅ='w!#Q࠱V%i*.0'MYE= ,9-\p.˰jrA*)G4ZT |0U [];&f4Tsud]]䦨vnG`ELC̙3 .PV5r136 ڸx&*se!;?ǣOzd%AeGI@6Vl1|ȵ燲ǚ/8ۥvxtg GCΆp%#<ոYp|ш,+{Hߩ͂[&̀p%|;ոYp|I9 XW=SWL Jwq*e8nKѫU!ӪUε>'^]Q k'Tܙ0e}5|#M ߩħ . w?xwf#_v ZW|;,x,"_W6D6T{͏tQ;encb/;Ypm_26f$hXr}}?vK|RuЋ??OϿez'w?_M__=!qS_O1q^q۠r6/=6pnM|v\q©֗Cn=-84A-o㶈>Ki'֗X_Yk|#}RU-8: (u~33.FHEMI-:G m _o6}aD#`)(3*ّ+t z&f+Ӹҿt[ n{ks yԐ▗WO&*zܫ(O%["o*' r^Ro[bJVek"X ڳ"ym%ͷVT KIPPBE&Nר2v' ŎCv*+u]뻭`^ KfuWX0AZ O( ox«ϹFM];s6u66'99vU%tΕ Q!)jsXe>TE>*C_URڅz-WBYιYTSPL}2ocWn{l<ӵF5«zΤo­/D }yXTkY endstream endobj 2592 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1453 >> stream xSkTTU=\t$a30̈H*KPPy aZQY-Qaa>" Be!alDVߝup.ZY籾w($BEMXU4z)Ɋs`a hE3QhIL1b :.Pfo@d$y~**cqƢ|B%__$E$5/3=[o Rr6jS37ɣ+PAQ|y+rF DH MEhf 4!{d;}P.+ʪDHna5x Hq 9C#zER"Z rDp@ǒ4hNz ,7ڳ iwMޒkfsB)X&$l-iS~3#-.[q0 ~回5 qKX^V "hwn:+QpG;n&AX%\„D|dQ],84 20ҕcSe{!?pO*!vd.5'Bv-lL<R>*"[Ih&k >/Font << /R12 2596 0 R/R10 2598 0 R /R8 2600 0 R >> >> /Length 4202 /Filter /FlateDecode >> stream x[ˎ\ ͺ.\WN GD^8^$R; 9=XÀS"Öv?~szy۾Sڤ?r^z}_'پ?euta+6oOߝ}ßSe)oEcJ`G^^ˆ:Q2U"lwж3'M&{i0)ni+ʹgD-lL#'ɚVdM;O6@S3.}f]:kM\VLyg|]SJ٭ g$ Zv%c[P8Y %ilodИe\75Fi#޷VP.J J:I{'tNnd !g *yr~ :7[F 4PKz'gWliVPCGe)gU ٧GWm+0O㙂 -Lk08Wnk+x1_Wx͠E*hLsD2kXAK)OIݥ|L O'= ׼Ҭ咊JJ ?øIrQ)@W nB&[D uMMJ'N s3U  'Usq6oYүW:%p;%Hn8 ʀ6t\L4\J"^MA8EH":NfFEQ51B9,TL #E( Ȥ#/2iBRb 3ؗ+X}!S G SǩrGh]"| jۓ?=i"l$+.I v`0-@BsO@+_ =p>oF/nbC~&Rx쬭gB <€U mIɠ ]g";IVCrSRF2 WN>wB]pvG@Jq6TX@sNe@u2MSu 7ů9 Iґ7hWpWm>@wϬNagw)s/ {ㆥUbl٦H,bef,Jexu ̭3{<͙\;S18KE!!Y|`%b P1 Ӧ`Bz|*9gi/A(jX#8蠍2ӚCJ -5(. RY'z_iJ w3ROꟵMXՑֽ֧8Àawp|مhEX E)4\]O((b&0bh~<%;!Vd͋"D"%rWXS(AˑE1L-`* -Dz   xٳ9+ ΃@Jd# G/ Y" xyg$MT"o\2!1)1Bk)<і/Z a茜"6J ?_ - (Pg&o[ Phi}t Bsa[%]3;@ֳQ6,c G2oMLPwD6mE8 6&GmWK.F{YtLS厵zI%=g8FjCL L>4+eC?6#[^]T:%ECMZqm^\bG(4}v  J8TӢREm3*U&,.* H (0ԑ}p}gs s#t;sLdW߶^^$`@@ oFSnN793[>r@@іKpcGỐUxl-E # 9V#(ld-Qe!g YI hj'<$^}n`sR;O@1 l21Ga bJ;6Z ZAt8h8`e%&򈆁|9rTci5_4S=jZBAWOxfP8x) 0=btVq!+2+°,1WIT o]7?[@E1X~Ό~2 WC|mh\R%eG2:{ZPLJHav든Qa92w nnQ #0Pa%B`?qfY} lv\*Ybh|ݟOLcdT(\\k {Xw9~eU5-82|#;2[>FE ZtTC)jG/ʡ92MB J@8c?/k10{zL 1?vX֒c\R=|vvfÖPQC.%Geƒ۪> : `h\ӈfIXqq$ˮ$i EK̇o<ߜ)F4/~"~}q_^Nuxwgzanbc̏]˻ȿuQIu1?Zw-"6ֱR W]ɻȿu LM{Ѻky7δ]wnbc̏]˻ȿusQIu1?Zw-"&ֽ Tu]w2ƒK8zp~ ̗={u[]_˻Xw-Zn~̗u=ѺF-g.ܯ]iWw7ug˺kyg@[g˺BzYޯD=7'ԟ4*=q|J׏| S~F w;0fҏ_|?Nj?n;}b{yLMb `JқbTqP Lmi>sz>G<]-8 :xsz =7X/GwƯfq_>yh]2'gO o+K^R|2D||.!Nn<_/c'_:{ߞ]c I#&H=d |u/py|gvׅFy/> stream xQmLSg~o/\.X V2>e5n2 B|mmq.˜b] a n,kSbFe9o׏wyyaP 1 PjsM'2$MFXLgJd깿#,gzAB|N\-B2QJDRP 9,2dYQDv"̽y0_)Dr7Ͼ7vx']yҜPNd4CևY\g+Wu :lskq|P'E|W㘟\XkQl9v~H׮ NpoӉD o +n'9Gk jzz{g %w0Y_6P>ESifaUIqFO w-;]8>.;?U`4A!kX.﹆ƌW.S}xMҷ盪_3`5hNX{ > ahCȍ{ KZ'/;Sy:ty8 /G u.;dK^o.7TO< OܜgLͲpHp6US-Ij\J!6`ǠAA24(e]X$1h1L`%_Ʌhn4S} -ӌ'wbC 㡈eK2дpf:?Kz 5 endstream endobj 2605 0 obj << /Length 2204 /Filter /FlateDecode >> stream xڭYKs6WB Ζj;hsC IFYmy|"@?,ϾI33-og:ffQ7rf\15_pAY7unu6]Q}WMQԺܮX%u?],O8g%g 1a4+ZBYU횴[쮞 SsZ]NUl+[':uouQS*"@vNɊۿ.Toj𩈴!QԪoleQ!]oʼ` ~/s̭ l%t}qbAfSRU[dyC=fJ_۔0jjih[3i Y̒8.b|nQ ,f*K~nзbpvnE<]aXL fԯzCg"#Oc.1,+0>t8^/G>Pڇ& $; tj'9E2e0#H\ʠ-|eC/;l Xi2jQ Q crahmhY10?mW+ 0֥7n^m暒sq9iUh{}6d&,w$4DȔL3%W*E RiaJ(j`wUF4 o&]cl$d)LbU11'ykY]d5ΣqQH{ܶyhXn7 XCI[@-A ]/\zh*[=+ zqXJ%԰;|ٰZp{BZk-mimk=q(CM(Dy*fA3hFPWX4ںԵ*nw~|83OV$2dcA$p:o="b[`BQ/Rɦā~d{ "Ў o H4aNP)( !?\.|OeX܉93b Ω:O( .?\ g# 6Vb{Ua]<5C(X 0 nFgLhf(j},9(@3+3&-ggJ=™C@6 T^ /x D&OOWk1W07A!D) iM(fC-TR JbUT|&uN7 N&=z vfwv |{Xd?N?]Z}v͓9D3?T5޵m)_ : :7S1'Vߺ>YCc%ѷ4C%pˈh`-Tξ}KwP2(劔vw:XsjI"T,1H{'+zh&1z.0XO#Wmo{hG?/:QpR:iҊCq$I.z{SkrGVRP>  <-Ӣ&lNyc"ܒ\4ϩt _<CnEᒷ)+~__)Kd9%}~-ㆋjѾZOn7EEQ?OdFTIrJ@ >ƃ=t%bLeWw k;Vg7ȼ)g<~sU\D{].SR@>'-ICk endstream endobj 2611 0 obj << /Length 2213 /Filter /FlateDecode >> stream xZKHPS}豷#<~lX2 a@= T@=IRV~]t+h™]OBi7>'L2Eir¨e7c_$[rdd6Ntw2Wl?mE /_~eqJqܛ\nv4aI@$|.ViG4O~S,_'?/WWrLS|&Y%E[ U Pj]d( &a_GQ0<K3_̪pwda/ee>iY1vHD9Kf(c{(~4rW1ěF%U2".ػ t6c\?Ұ.,HKnRP"RDX9Vڞ!P 5$P,qb k뮣r"5I9U+%ˆѬZ$skMc&TZJ[(I<;:*Jd?&e@%8l1vxہ4!P~Z%5d-Mp,%``W'Y6nmڎt&R=X+rD=NgUV'Su "/Euxq-QF swA\ϖ-V+d);7(5lb 6T漄;3 qo9Oշ< {jHSȹ21ZZ(f+kzʿLP,mMonM ԫz "%BZV~ 9:;d%]CAFLmlA-*G4[(~a`vL\%';o%N5kv`ה[-Kv&фl`)!JR ƓC^ʼn('j2zebpD]F< h |hP!ZG7TB~|wN`b选k`R2/fɝ1ǨdD-rYjeE~cgݟC}0Xiw-qn;^ 'R t` DGfkb{ nC i U1S1]eW$hZZL5}U6pp."/ʗ*_6ۓa%쾀%tG~J){צ5ƾ/s1N|kj0۾eIIPbVzme)eTᄫ;pP*#J /B9QZVsB$wbdϞbQMg$5Jf;YC.OJ[,<~b)42 @aX)u6+.3JNyܞdE:WVz3/^\Qmeg?@l5u?&/?|(, MqW(IR0,fz/7g(`E@ ާNBH^00OgQ1PQ`:|ݻogaASc^~xVP=Qq֚HSDCYB>M)/Jx-Js0^eiG`{=tq|_: uftmv&<ނxcr./A33h*Y~4$Ƅ&[_/fҧiWti^~CY:sA(OhT5JͮKחiAu)@4t-B,SgZZNjJc]c'{I2(}P+6xA)iL(wk妀zpp4́UsrDqWR"| =REC;M3sh&Wڞ/tZT+_^_J5޾xY 2}kNo>])Qp|w۵"-vJ,[TKX]xeDjXA`'D`uX@w?oh쁗~ ?*<Z>MG6tA&_vy endstream endobj 2618 0 obj << /Length 2034 /Filter /FlateDecode >> stream xZ[~_AŢ)MŗĜ:r P֌-#nѨח? apdgQP;0¬ ǝwDwLQ-n_=._tR&]lC_%?UG/빝>EȊt'f;X)Nk­r#'U/HR;3|˘sח5:Yl%\HoM,BC:`.PQ,./rgz1}Y9|3'-`Cp x:u5yw'C]+Y%h}\@k`"+lMd6)ȡDV/Pק#:&T̮:ב"I"Q+ݳUˊi2G4GO1m>,<L2!fLꠏdJ$"ek4YTv`6k?r*I!Vp> y„a}aΕtCL^~1n*Ɨ֏_) fMp%S]i "/xCbC j5H6;!@RK_7Cb'6"e`,ψŁ$1`֎TUw>R i-FiXJQk5K!, D2B]Mx]?fBe=`i\t@Cwu}pf-"i'.8sk 译3/,Pdڭ;T2ec  :wa8)Pj֎PTSPdiTL?H,]Z)Jmj&4'!!JvbG*?:> Gp= 9$+*:fa4#Z|WXk~,L" Fbۆf 7% UM,qYϛuӱv4"8,[;sUj&°+̫cG 7\rY準I̳uV6~$(o7Ja0PhM^zi;q~`c*Quj<['rRgxA; q( jX\wig `/NU*yGZpڬ׀ - \hOpM; jp3$/_>{|janiunxU@ >Xƾ2&Ls)q ~o8s<-$RVgllO,YJ.r)~v^numص~E UՇ[:v@5}-l7lFy.}6 7:tdG?]9О@>h-^]iDR?? YwX\yC od Ή /`kA48 H9V)xsPŀfʷtp/]Di>_Ux@KYYhAjQ8o| iuv}%8n -`Z{@vn}]M|W}v|߽c=?f@{^>`oE{(ap_>nԑp 5u~̧3_9heW_ƀ|:M;T\\ iW1Jʼ{e8Z\Ez(y/9VŰ߬Gq6m($xlӂ^2`d4`hQ[ ʲ5]>=~H*) И͐G2#[hFBoͿ.>_e2l{&̪d.:s'ޓH^&#yoU(gDZ`0N`4aWoaUV-č&Z%__ &vR.ϓb- vǁ9=nܐϠ\> stream xWI6WTHp'A\ƷL %GK&_G>ʖ=?^/^4cpdet #̊l>L\1Ei~˕0*\e!wm,ˡk;;Z|[mp}[^'ˏ_a6cJqV\nW=>_$tqqg.Yuf~N8 hp=.uuP򷮮]*BkRjK0~(+ A 0DWLŬHa$Xt߷}VR VP$)5{C Н|S6i߾L=JQJ2)C*&3I!B2 P=}3gIeS "lͤn(M[C}e@z6iqz˜:K k2oPg$WЧIwU*|6Ji zY :{eKNpY^D>r?K)=-a'T=|=;\z:xA^)e@i&L8bIo`M2i E\ N>P2GFA';qv:Go:IUёa"c>(@V34m=w< HVE̍_AbC~s)/fP5H{V*`eF4=kr-:pfyNPJ// 3>ܘ3|~<=`Ȕak#Cf1jc;TۺRn1IIu;&r$vcTNaط:8n>OŁ'-)Gx&Yy 1fcqWMM͌I>f] endstream endobj 2629 0 obj << /Length 2886 /Filter /FlateDecode >> stream xZK W))kdvG\8(&I WêYΚXV~}>4rwr)vrb4ȯ}+VήnV UPY]V2eE('evW.b}כfhڷ7e:5K)iz{Ñ(eHgۼn6Yqiּ@pyVǂ#18ܽ{Fs( K)FXlW+PIrʮ0 d "Lb39{7J,X?')lk)_p{>QmS>ǝL;ER a-mt Qj+RRl*qCw>vpwb~ŏB!6BLjw3B>nnNE4!eʑ&b?qBfY-78!*x}@̝n!0 OD}\ΚBIp*'餙rON՝Ϣݽ-r yޜ\@HGעOR;S aN'xNdIzш&잴1(/GDF} [Q#'vA!>7VB2d'BS0KB)!$.id US4ie*C䠦˜ 2G|PR^66Vhgh`t! ]~T(ZgpƤÆ%Qc<E{Du21̂ДXCH `?ܘ-`͎a\2 -;*}|aonHcD>INH겹ȋieno;-fU`f+n݄1FMv-EHpYm05&D]AD"-ܑ)@;qgza|o9)e죍q\B5dX:9U R2c*ThS 6u_ny x8ɖ : G&)kjvB?b.wJ,pJٴ^Ln+,4A l\U Z~Ē¥mU3GGٴ_%Қr *ԛ 9?8oVۢPT7~t/]-o {=Ӹ%(5SNJ`t;/B% 5u?ԴuK9_IMT'p2VK~L&(AU.ǒ4nac>6t.  ܧM0fL-@cGtMqvīdFd7@)W$h-q[\P8 $YNڔ;_K;V IgX'2PЇSJXl:T <:TVrX{FI!=r&>jV@0LVp h84, *梢Pq(&giz_XyPBQ$+OT-2t]Uez4Xk *9/Ja5$Pt,qz͟B}jw\Bg6Vv\>)1N 9P>_>HŹxQGp\D;+$.> VΧ4CrNR~F'|/RR3L-r!z{1V)v9J*y)r;_D;(:JR$$ٮ cҹongG*18Eq!F~,.j#Y!HV*Ԟg>|Nx7ԺB6䳗 Ar̪1,n7T *_1]a891!nmH0}O*dv)8j)mH Eg}M!|=:x\W\n/mC^Uv{{*AEރK!=,\ m*Up`"#%cq +pxpj'NF>u6QuQY}_}\WW1pf>F>Č<H ׹pcnڀR8?%?ͣ endstream endobj 2636 0 obj << /Length 2029 /Filter /FlateDecode >> stream xZK6ϯОLZ uu٩MnIaEdvA@HuR9LM|5FO77vb`"UrS"4˦3a8O[5)g*uYH޾f:,7KjD%uzjzV&UAmæ̿H'BLZ&SC6oKXIf`DUVۂjݵy[V@3`^߇~R7{H[v6S6/[ ˛]g XjmfT 0h*(auoS&x1 3@VV'dTp5NC JB:-f!h X0]C2>0NI#9ccR-vo*z|] T<!KFUҎF IpWg4ݖCU/I FMևC-dL66sI.6LUX\:}YhFNۺXmU϶ Z4`hQI&O{Kby;:W4p !MnEqPdF/X5EMp,P ]L'e Z5LAH PسFĪ(@kA@@˨]iiA y`P1i攚 <>A-.E:حfX2CL؛. SIوY.*cU2HdLj%jy~Dp<2^tqgYff\1:L7Dǡ3L:qq*)ŶcΞA@flEnL&D-8zyR;*ĸ~DJfEgޏW{ʋC}C t<O$nؘY (ÞU:PŸ=N ț4ܶD4ᣏ"/W[][E+e>BMK^+PBcfDeJ,uDw*ɦ!j7믒e ijLJM%f]rSjjz z0=K^XIU} Aԉ== QWkj^,(e!-O>6$h`SZ@ه:.۳4a[_$li |U}l랜-&ŞtZ̯~) Hm;QX_ ,XOz'gf2x}DG >O{+|,RP@̽z7/}z 6, ~/18pums_='oʗ΢k"rnN"ahâ.HoJb$=u]տRL.mUߟ۹>ƕ~"̍aP肿I/[ܣ}7q46! ɈJaY&1x^$I82o_!P267ͪ>ˌ=?6폜vt<ͳ-{ <41qsh::?u϶$'³;v\q)DBOS׫kd <}U^tІT[87n4$8\D%\K WH)Rts endstream endobj 2643 0 obj << /Length 2232 /Filter /FlateDecode >> stream x[[#~_njD MXvs8}tW2}:ܒ|~:=/̪*ҧ֮r:c N(,HJ6.BkQ$MZn,a٠퐓1KзRLvd LqZg*dK*8# p!g ; GPh*%wrr^[,/k(9 U q Deg\? K=.e lI0#u 1)]JS#}ھS`0 CsW),܉!)\#ERE'(_M`_= ?a>Cpfw3ʞ pf3$݌ eXg]#iuWǗcHRM> %r#v wNN%@KJil-ajeB#K}Nβa?mx933eg N  \Sk1L#ٽs2}" |`y|X6drUhlF`vֺ FʄF>XBNqB&i2jNa?Nώ=.]v4pu| iIoϘ'•;1eAW}HSrex[$(S(Bј8Ui6.Lq ؑJxcn.B#R"2_!xr|Yu4R&4/5ӯͮ֋'ǝ6ȿE'zR$dofH:R3P.gm9J}S 1eJDHRGW xm%Wj6WF XUjp %QHC=mqGŻ+9e's9TmJ$%Wl,fCdq=L gKs z]T(:bl-&JyM"6TIE! `#u<a.zh0 }cUtO#ӗVe-L1V߆PR3B Pf$(M% H)i$)S&BM:`%x^8νe2#8|h19 \ М\/kw3e%%墇Ɍ ?ϻ+xvyڑp:ЫSl\!U#J*7H{eX/j;{7.H:M F_vBazBy,NӚ*;&w F/uu:y?}4[ {@D\WQi\EWLj+sq6 "IuQ X2lV~bYng}}m6p{Í bDfcF\cG#+Z95F,ҭA 2O@0} fPE2bSp Atj6ڍ}Nv&B'Ԭ?.|y;kZ]0iv"iEx׺NǩVrH$>:cF +i;?z,U2vC5xMo"+b-@G=0\"L)vzŏ_$h fuU͖L#H0^) BjWeR#RVb$hX:n(MwIKb/[!x"99> stream xZKsFWrXeb2UE ԪYStWMmգKuaIf_$iNV6qjl){#BRqhw׍ J$ X+}VS-H9b^ۤqL3S> IAR~0%%M1t'DOVO 4$;=TH$Ar̢;9 A[Q"b'lFFrG0iwwOg;=zsL!M"zCKLg' %|w~F.}{'`S:X[42pR:vgâoo>V$dm9R b]a ;AB? S;9"OErt..Η$-ݬi3X ~v~d+޿;9%=T]L"& 0WZkyap@@Ͳ1H-Tov 1:\g6 A앎yH+~9!^>-l~Fy-ط^vFPz)Œh dQxCWiYvӬXptkxS!v>,F7?Гa@D}uUZؤn0L2-/>}~7bPՒˀsE% >^ˣCz#:pNŕ=!A*?qd^w??`8 S3* =]P`2|t8MI`QCA(0ߖ푎 >T=p ] fERQ$s?r]A|Qş lNf`#lCй+Y@o6 p4޳>W_slC@Z2(i]^+>͆v-a,k%]xBf`laIhP)A5-ȤجlXIlrBhρw "e5$!u91~cPa ]٦|/e5q6-Kb ;#1䂄푚pw;F5̚-hKؿ?vE~4_8&`6&zIDob "dBu  (<Š:a]³5*ޝiè2a f?9,ASH6 "?˲Qnu}Y rly)з..VՄ.v޻ "Cٴ Hd; QbHBR A4Sq}o=t;x/_oVZEh=mfY滯-ޒ.C.!;MYFp]-' endstream endobj 2545 0 obj << /Type /ObjStm /N 100 /First 1025 /Length 2928 /Filter /FlateDecode >> stream x[Ys8~&Vjwq&vfrh 8DIe5 T$۲9vJn>  Tj$JHj6O}G aHGgȢ+zDБLK;#.F4dq)iC\JGFJ"K*e\FsItQfi-\/҈K/܏EܐJ'~r1N@L0hDg,D0 /zkA,q,xZxL%4^9 n*6S0J24:3#K#^BrZLi<@ CYKGY=]e-X(ɄW3# NM{a< $FQjȐ;Khc4=Ap;lqP~Ŀ޺=ׄ^~?O4 &kpS FGd["p(lrL4QC ,6IJU_]BTX#sJbxZ8F01Abo]`c;#.Avfq>II;drW{^}WY{Ɏ'+9#zPI&*6 T"cKz{DEuZE0b0]e̟}G)TEح'r=\ 4PCDU2;5*NE5Jᇊ?gPX{kz~PHKP4|yCnJ+f%M '=WGO^yVMⲍ2vy[Tuѓg+K,ݲ4$н,tpվ8iz="vui @RM7(aOERc:H<@UMOWy5W rNˎKW~qm˗'G~ˮVuOtu>?W=!:C)fK&e;\=a:( Zt (#wYٲfYl7CG6zK 5~Ak24rQDu~wľÎڼ,zA(tNZ7i 7 d6_O.{޲w./] ;q1v2P.Ъ=]㾸1k+kXk~su4(vXo e#ݸ~qq0$eO`es]|~T럗l<)c֯2٥Imjq?-S\]4e9iXr6B QT}֔y3:xI &UeKQZk~%Pv5s b0s;d/|/{^1`S#gGv^Ϯ:DE{Q^U;HC3l 3J6bcVK YZ6a_د]n:c:3EwUյ`M7@#zEYxseY\6E`/B:Q+VI/a(^ٔSWO[A7xln'Ӻ Zuw̚ 4:tu̼ے+gIMͮRuٍ Q-aztOGbnT(J5̯k7(h*gG݀Bc }&c P/N4c`A4R̹ 1)䛊>)Eṛj7xncݹuvkۛtA`uhQhNsa@~ȏ;S9hRey͎C 9χtX/Weiy7!ro if]`vf7*MhM1q08LW*WjJ0_ FI`t'sFunj}[>c[>c[>0Gȶlȶlȶ"}^~|qv7yM훭Mu?nogVlo<w վT߅eMklKqt.Kvz[>c[>/㺗"U1K,bn8K;-?8I#LgAhu]<pLo㓔:Y>Nwz69II[Dku "]4Q,N™jՋWI/xpls|x&> %N%ҨH^9rܼL2]}'0/hllօ<nzaH=MW]Ycn fۏ߅bp݉v_z뽆G X!bs$E& !%NLA1|b6[\~#6I"[a >bՄj6tҘ2E,t#/#BPT4,-Uk@x+w% Q&"N|ba:@59-ή9 c ~us5w\;C_X*tc]s75-"!E+O endstream endobj 2656 0 obj << /Length 2508 /Filter /FlateDecode >> stream x˒)08Ur$ĜfIrCò> 4E]ʁE@?/4ճt Ln J/aYXm̘$,4;,ʾYwU[euhpos켽 6ݮ 7Z.#R#%ׄ[8W2&Wųr뚶.Z?[ ˪C2p YƲ0leVGbv@_haQkn2WUhluI6"3BR#3m(=}HFn5 O^ɺicVoBXqHӁ"Ò+hjĈkde !)͑nbtm"Sxc˯?~M>3eHs{%켞ob?m9?)'XMARQE">{9օ~My~}%ϯ;39'LVD~Zi_h__K\L&PĊ?9&0-8#JJ%2+ 2}mյ)Z*ĥTP/|fiZM 3p5h?{^ʶ !˳d&g8QN Ѥڋ;0,jcA)*BKI4uw/a 8j7)ݰ k:8k]Үf1XƤ}Eg|F/d&D?eE]*TWX[ ųߞPN")b20A rد]hnbMIlv(0Im-<eq @n4P6Fx8 65`j"B~5g 1%R Z¡ݛcCU@i U F6.AgǢk$mp^PTZV>uCJݸzttO68tZ۹YKUaE##}b/m78[p-s][^`N20AR%0-C71h<={Te{IK#5K<<4A󫳓7$mltة/߅Dza$5"l\?Rd4XDD~U{)ߛ\AUn WY=Z}.1 IIb܊TѴ[0 7gTqCxRxjOs0@ y1wHhX9hyJQrH0)mM.J%rߺY(n wؼ=ڞœS 9E -'Fp˲k;UߊvlA}^)dV_js ^;h dQL@U?)A!ٟOObz>ixE(FqǠӤxo vh>}1`9--+8Yf>28ਹ\o=ɡ%cDMY>ê974Slzh#pͩB窄JJڻ,;A upD׾]Dy+80P.{Ѓ^{"YtzcJP\T&8Ƈnw&-us&Q'8DvWVE3›WfG$8Pgr5ȟVd.JMENXYa< nJwX[k'Ih>3ތՁxxFZn6f_U|w? 5I 5 yx~OYZϞo|KȐ_/>~~X+lQ>d>C_F<,HQ MYd)]&i~>;uS_@j&7<֠Wf-pd_}z_! endstream endobj 2662 0 obj << /Length 1535 /Filter /FlateDecode >> stream xX]8}ϯD\iՇv|NVRLh^cH q yYUs=^ۿFr<[\JĘgѷ»/2+nE%mc5yD9ħ,-9 K2=Ƃ18&ƹxycua!_}pvNcLٍ>.=/\Zd_'0AA3\fccn?%-H YءDA~=;1~|V4s4%p:11y3$+7K{Gݘ^!HK`I] :ޤ`FqphCpģ;QyE{3 4]u>m vuH3kK'y; ";GH~66pW|:: b3/@H;ʖ꽴CjkrKv^Nb,ZAk^,4VFopLpĈ 9Aa0GQRF kṈtdfϚ)o8:ӀD=EӅmBV$Hʇt;1q!XGAZFc+:] ,rsh@yUPwk~oۻ_SnZ>]]_i:ho"1LNVQ*RgI۩'2ςX[3O j!oOBӛHgY*0*ꁅz5mS=[=QO"0^G4 sBXRj5<e*2H:9bA>z 5o5;M3mUn/v#)8ywB]*;A`, Ia 8J|xr=` (Si#0Q) Tlk: 1))OЭn< ݨ檠ҍa ˎ¾Uӟ QI_(;_*xJON8P aŒ'_d[wt \VFչKdzaΪfD(脨v1'!WvL Ji7s|gC&wqi#\C(KIȄ NOn-L54tٶHpD7EV(1?0Ou2'NWj{qlG~]o&|v11w71E#ez+r1@$GX2OcH>8* \ج:"傲)X얔m^}n=ι@\%LSNUqJ 9Vkˊ皹†v]-k#uH;x%L1Z"S4U/}enb؅DA~ XWgᩚiSEAR"%cI`*oUC KwL H VRn:ǩ\!HTOC-frZ endstream endobj 2667 0 obj << /Length 2390 /Filter /FlateDecode >> stream xڵZKwHWpz1AEu=)*}H<>Iz&UFآ#~n=@ ,l,(._1(< DXA,1T׳KH8"tqM z1)דHw2U;6_X+xUc׮:[-<"h_ޑ$ )! M^{0ۛ,*sPv'M\- I0!Z֎2 $RM8fG V vDt@؀#* ]D@a!x镋"N04$_1a!D@8!>v JDʵG|cDTRuxW`@bSb#F^> :}ӑ^9lFǂ 5AʎW$!(V+u_~%㜀 WÝ޳n'mǴ^Pu%J_,N|.c`35H+cB8AMMP;Z(8Z&&ui8 ".lSK|O& bTHΚglbAl.h?(bz=p 5`h 1fBC2 I2닿/B (M&eˋ/p0PI`H@g|[{eyQN Tdm@6J|t܎g.īC "Qu˧8%'ϺoDRVU/9sݞ v،َb+C A|GXeޠLd[X yBRyZl[iS;t`E<>40KGeHw>nnM0|Qt#Frc;y(~3p?{ * #[#)#HmЁ|Z{ 柴"Ő$`7*3-Uk/ftsav]fz̛:2l@8׃^y*lZ;x44pi&'{>V(#[eUFc!c7uDkFyI[5Z+#exkfjxǺWwU.샬΋mi3ǢҶM GT}Xb <=3{e:͞&iX1qk#2I'l|]b:is{Ӭ!YZv ԃᇪ+g#=Y꠵+˼Tj1i ®ߦ*no `[JNeSW bY4Yw9!aSw1+ v@.BGwXwGwRi8N#@;$4 3oFչ.!,.7" |8P}s].T&Ÿ*IlF@Ǝ} D'6-W&> 1$gYϸeCzOJX*hLy7rv&"Lwyk/qaj/g@&7Zfe]dP.yZLTɔ:SaIŦa\oWF%aO0QSJ]1\q$:Tnp,ӿA{ѮKoLm\sIieSrtU@s'oe{)ÛDM}eLG>.`w~SAg? `}VC l~ /`o]JK[ "6WlWХ7#9= C/iE_(Gw#=]]@8B.Yt]}>+{0} ~LGBdժwAۥep]fǕ~&^Pc%J}bq(C|&ڴK14@HonjL˙HʦW+_(%9<*%l4@1*OT\u4E{ endstream endobj 2673 0 obj << /Length 1665 /Filter /FlateDecode >> stream xڭXK8ϯ\;VDlV屉Sc<cy< $SWLΔ f@iBUD`C& )Se; ')_~LN 얹}L[+Lzc$Q^LyDxٲ=(Q +vᵋ,hDP6}L0щQ*x5 %H ԫּj}*mo!I46zj@FZupw 7?>mn}bшo~@N57":`b%ЛW RQA% ьHj0B`;z_.Ŧ*\4uiLL&q^Q(v^^GMK]S8d2MWrbf=QLtvk'!,Jq 0D2D D bn܅/iOtg6@brX5ort+h{,_W'> 0˛졂gpYV|U n.Ύ o N;z6Ͳ{_ՠU[A܃~91NH{ߨ䡴7| d/ Y8ΧR@dM^MdsE$IEպ}3wd.agvw]tki^>x/!bcsinZksju&9x=H"[xpv~9׽Ĺ { (ݤj5Z\. J1#Vv[Ȕ2!ׅͳ_6rdzEuCnK8,-r<53PB V΁B!o^}J >JD$q%h >D$m+fxe) It!yg~۷׊0Bc1w(H/a ¢ qSy )Hإ-τ lMsGZ$/`L3?+;!-l^*B.XmyGpKhhǨ.婶셒C ŒC/B];8 @DgāahsUN|wOտv,PEx Hi۠ h6_XI1e|eyuTWåN5i.~v K$\w{<|ԃƏv?X4rCbGweS&o. T+ ZXm7?[6L?x]sr\ W18WD@;*:;0=M9)mC,Ӟi 6\i]ʷ\'Ѝ3=Nvk#Mbq k=*[8k2dfpF.˴qdZH|<\,7~3Х_n B*zʸ" ^ !}i0H endstream endobj 2680 0 obj << /Length 1777 /Filter /FlateDecode >> stream xڵYKo8WV|"t[/@ۃ*1Q[rH;CRuOoʯ&g 0E8Q0 "TAa&E)dah$n9 %1>Of m'ޗ#VY;J;y?kvYct;`‚L~%c$# yLx"-t/",nn9ňV9O 9Ϊ0Zm'2ӴqVs5 TX`j`YykŖ.0XMh0E5Y5^0{Z4PnZ ^XJDM 0f1#D_I&" c<No 6y0{ʀ$g/IQ (SmIu]ָm]^KlL%uB i%4^RfKx֑ w$"G>T~joǽ41c[2] *H [0+Y%yUT T!+`,vCp'(=9K ae;QU! sl ԃmOM=-f';a[쥏,bB93V~BP'}HRp@o"~kî?4v,uټd4& +Z+M6R0v 3+iX +t8&\P/W$9hJA?]yAIBI2L^~Hj+m R >%(,V#[XE !^?.nޔB8fY@ u [lYkGaeoAJ^݌0ꦵU E.G#͠e Cgb 4sRCkZA\a89x -2 vutyU:oBn6Iʡ /.dlc9UK4s.cVF`L{ [1x72䆻,QfZu¾qK]y+֠wot︰ݶMY#JuDkI8%ɇq9f%zm|!2)BGoBuX$+rڧHP8>6zjAniǫQ^,wVkfusrWhndd!?Bě1n8bS,$N<vhC5ۚv V^a$иИ|q X "M{#N)-hQBn~n*FQu|CCx, KI0pLwr\8IOPIDĈPeaxpv~+ Z37+mŲ:8o 0^=⺃zh4=<&iEcۏ֑̇>&p7] }#{X=VAy]&?Mshn>jz5;&8O"Dy"REj.D >>@)޹t8*10RMvߚ?p!vcsŰW] iwf!kcH)-k?lOq|P:zn -S©W&xO^aM@ K08<۽3i_ɾ-ބT) endstream endobj 2686 0 obj << /Length 2478 /Filter /FlateDecode >> stream xZݏBK(76l$[ε/qP$E"~PwN}|fWW߾tR™ۙJ UzSF진I|I+n hrHI,y]]釢r+T,^5`M~ITf_gZilɘqr?RE_À$-{Q8GoAJ18!/Ϗ#" #0M£ 5}38 p9bマҘ47S)b TcfGJMq_ b$X0Ohg)t+3')`fO?  n71TxWlM,%Ya ` Bj$x*>J1 X$.ؙ,b2gT 2k89!%,]iS*K\kͱgJ{(rΣ`ɔmRd?[Eh I=x, y`  f,Qb \(g2O"tObe]AIHA&SFR\a$L=iFF"!kk@+5hžB7UNR!( g2Al~QN^ >@J/KiIDʿR( *I rpT,./ިxw`('#icPԌ IlΣz7f ŋLn"ñXL"߲eSwE\$pǼw3fwvaw},v6^9ιIFf>+>mUtUO%lmnHF]f:0A#v)ӟNUʦNz;7< D>w~hܟ"~FQ~Ս+rG;AUF"Н1b @AzoȻh׬0 ݔv1?AЈg8\wp^fHqM >J89K,n qn}1-KnkkJ Bk;_S0iݢhpҤ}W6zާD [BX6:XyzԴ ʞgP1sJΠ-&E`O@uM7־5S~LCe}wwe nXF-w7#'.zº4aTufDe X'$X?'+X<5 ܆r5)w90BEp }]'F[[Q,V=зu92n싄ޗMUbqVA&1DN@ qb OCc][ endstream endobj 2692 0 obj << /Length 2660 /Filter /FlateDecode >> stream xڭYs6~_P7y3i6\%6(Q!8vE]5< bowObXH38,UbO4Y<ۅcfq?'Lzخֱ?7EBJɬJdqu=˕Q^.⇫tc+&`8^-rd}ls-Vf-L'Z_&2ʶE8"=QLi7S`f&Om b˼x EsR\A/TN 4Q_$DsH0Kl# I͌IfI&,I%i&@Eh/RN4Ζ:Ly@zYB'ACjR_HgK}I x&8'i /ipf؁3)s`cIxYzpB'Cjh z 3s &xJ f@  !/ZOtdJ3dbm_& "4zi&@CjR_굙l uNo59؞xa Ӑ?Um1GQYֹoYK+ɦ5m?eޠyox_H-S"^ܰaZ'FPI>6!+G^'JFuu*؂7Xv _~Y!cv78ЛмiphrR`sL?dPw5(kh)o-Gc{M]a!,x:5nN۪AGPQV/$JK,ӲǐHY8rir: t}QkwQ'T=y锳BqpQԩf",!| 3HE%⭕3s6k a!X Ͻ>vh"'G}9f)- wPvh/˕yQC(0mŴyT 3AJUϒVHZp^9K٭Pca:}U/XBtK̤ 1qw KLw7%2~!0NYIP bGڡdDK\u>%+ CB;@m59ZO“.MՏV]gtdL) iӰ3:nHT#-Eڿ"oW.  7K-|[58ѥ$чhݍ6ndnZDZsl4A;nO."ڠ ؃VP%Vї#5Fҍ'Cu-v-ب*oi$Mt]PqSl{U9zvFI/Q^Z,5| F`LL9_[?\ !MΙ%,cU[wi/M7)X}\*wE\_cF2 *q~ H]Ėv 4Phr+#AAm !`Hx-X25̰/BՅ ;Z|:XWEqEʊoyt5T,{փ/k@ߨ0a?]R< |4f1|'`p3| S3]:zi6 zڋR;!AW ՇSGSi2ĈdAm|P_w'zW rOY?MwoHd]3Q[;BQFr,qpւ{cՏ 08vFE}lLJ-ZƇ'fk'0TU4 o:g툈 ʼnb n8jjćc[f⣃G$%ji-4IH7rr% ي.Dx(:_ݕ⒥Ix1H/O~ẙݓ6Hκ*dbX*;SdX ipv,|*7a_1^JL4C\K 䲩X$*M (8S슶JgH(mQA:K7!;!$a_7 F}FM &G DFu6ҲgI&ZzJz}?5{%ZK}`R" Fдx 6~pñxc%ӔH!e*tG?1G"iL2tx5k_ks =}JKʪ Ӫ%O|3fuWQD9^ĽQ+N``,]\_{q('"w[vWg{8v4eۄI/!qTf{> stream xXo8_7Rv'S9Q@plݍ.|ЖfttDXĐQeۓoIX-6[$bqy* MF| T5!5Թ d b|S_FH A#sWD鹜Ξg߾xu/Z(׼pQwTrݵfܙ(&JL]4yCϲrlMei~ V?:X}ѿ9{1Pnߑ&Z8xȰDHOgY_DO)@`{ܺ0ɱMx4vSI܉V{iӵm#61\KX"2"U!KM: tU QC9u m~]k$7>ZZ"@ߴuG(7DsC kZim^9* 8nRvB0iR;vJ3(%,4qP^ЧۘɹCzѦ60Me% A ]JUT] F2ɎQP<`~`.4U~ỷ1Ox2@ =иpsAFfqZ3m%o~;#"H>z' q Nz^*pe AI&wLڸ"Hh"x/Vn5s? tӛ܏A20a"Ў;{%:6i DR wSEɃ5|$ HΣ`(i^.[0AAO 0R EӼy7 63@wOYVb[<&` :XIX&£_ h?4xK!  9-{+!H4z 4z 4Kz,h}q ~N$֓Vѝ;8#hP5" FzF>iF,ܾgD^]`|q!Y<bs&#'#?EEcE,./bjmtXQ^Fgi9 7ߟ8)@}I u endstream endobj 2714 0 obj << /Length 3422 /Filter /FlateDecode >> stream xڵ[s6_K7x&mIۛ˥5}`$U"e(RbA .bOLLĸ h5-_'TOc/v9`fZ[?7/{8Nb\鉍JLn?˿yuqeVş7?馳>RXc\&ʅ"vi$Q saZAA@+a wEbQD%4f "P0ϖGn++hr<]9JŒe \]htq65P-9.7&.~f^ef)ϠD"+)y„I;bڐT5JI+4 EDPPG1-=yD3&I^KY6ٖA𞞾GE_^&G."(d2)qĚ у/ٗq*Wѫ+]Z: qAKUY5DJ9Og+dkŹSMX$װ=׸EwY WR]9l*ȅG$GlF@Q5I).?_xFkɂLb붬I6E x3,BO].MUD|cìQ@;I*hXpҏ9y^)5J1o;|a4"cW\)n2t`0i^Sg S9?QMz&[V2wmq$iߖ &+ 󊂀>r·Ę@\A[.4S*ٞK@LnZLHUg*طUA)f S:OH0V jͬW mAPJ/s@oIAhOa%R^4j;guN6@Z*{t[ Uk #mz7O.('/i3WR&hXFp8'[@"MG-B:[g{A'Oq4J #:9CFշz8( rxb nt0O֮9H[Pǒ6Z[QlpqpГwYq.fhh`Wo/b ~G5d]p,& O_fc^P=$Wjg L<  wQK n^╂X(,a?wTau@ ZU ҷ='q)*UZC-}x$c !d;B&f^f6z=eu}^ ʖ/Cr.bV.3(' 0=鬁7$Ywc&ITe 5%<VQs${[e)fvܕ7y?~}IĢmSof| @Vq*7^-#(D٣, xW>F ]Ɯ;YuxѯRƶbq6r$ߕ`wL*g IPˆ !*"::vpߢ=tYnl ? k. ; ApR C"1\ɕE:<$X*ڝ `ռCT {BAk#,י/§SZ>Օg#ut L gS#ji+?2ɗ':ٮkCOݶV;yɼ]tڢ5W˾"k'=4i-"mJVv2 _GrPq(WFwؘUτa-}ӥo9,[_OT$l-th>j\2WKxv"* Ӎ2oMaW'wg#,(9nb3=Ō F!* h*PźVJ_ 4ρbsʀKs/x Y+z%IRFgה5}aéW1^bXxrI#6hOYkZ.mtmGWԗ:Ss B8_ȿb*:yrGl/d `s(pb]8UҖ' L6r Ika1Ei)܄|+4/gaJL7G2is)b1: C*Bv;apjzPgT FnثlskߩIJkT t"TKO%auL4x,[dŝuΖ#ŨaK6N8CᑔJhb넴g2{1hITpFRWu$A: Uנq+%θGmAoΎAԠ9'Gg}xpzrju֝ӰҸ$>!.0X55E$Ϛ4 i,ݷLr G+T몎2MSC "n)ޖ> stream xnH {/9 n3v243ZjD(R(;ߪ&EIԃrY~TU׻xG!#PG(hp4_F!=%Z{>| Yc0`bJEĻ߫d9B(, `%0Gw?o{H<(OUV0Qϻ_uס'P\8*d:@{[?B"%H"-# }t 'c:LNCC=7}WLx(5:nT eړ,)uIWˬ*MwVe"#+îQ]r4-9ي@=e(ߨ0 ~=w8xLPVSʬHkG0VrtP9[LeI£1T2:ƶb&9ǷpZ#,wt<> FlqrNKnwHKE*O8N0^s~>ŞY_=9 KsBxJ,H2R,Tf[uHt `>};z"4{R7p޿y73)Jg5x(IgR,Iή| Xz uUdQI0W}QM1gMQ5(~vaiܸjޓ0Í߳iCV߯ ŌkI<Y XHDEoiG;""b*Q2Y8LWb@xZRhű2Q2q^EiQ$9i!g"&(*J1cN(0Eŝ4'jn9+Ӫ\7qMW6yS"-lB;>pwxԣ13Ҽʅ(-OE\ZĽYv!q[4tBpgN>Ca/,z]L208B+9:x3p!QA#HÙS G69K'*i4˭w>oQV67lt{?MItkQ T>EIshK /\9W 'r5G_M|A 0&yw:KIi\1uέ2_c8UqIN> @lB%EY-o_E[>> Mqs1K_M> stream xZ[o6~ϯ09N([ ֵSŦcJ"ٖij= jsH"G\ IBFŇOh~EjŮ\8(_2x")dj^O^xLFHPQ`MxMލ췋_f;(0V9 L">ev|?F<~y?Ws0X q`V!ł;^OZOfdIib8lirƭHsZ~⦒R OaGwƔ6[(Fvˇ|Yd4u%e֕.CMSoؙ'CVwYz.|_sպLa],' 9FS$(uKg+Tϋr}4DJƵhB1W_;7ΗJ #̾BX9:#:[ŅDA*1|!jr4d82ljvtϮٶC%fM 5;urζ3:M)osS =9LB*k0ms4Ž4n11HwKrBlV5C bnLk .vktkV&ۨqO4CUyn@vշemԕ1Z_mYV_I|44 5pkP%nKmhe-mZ#LbeeqAUQToLS=|~Bk%RF&Ѐmƺ`༕otP'RC0TA7?@ThKמ/=E\L"s]>ɉvb3g:VGmQޤU,_Bq-ͱes>ח+JU4~14&BB@KڤWj/AQ࠘wHU[֣CYp峍f4@GFt8IM%xjJM u8r8A? ԇ#;$?Ck2}u rLʠ)mSx4Q\7Yq̣H36o?7& NH2džl Es6 H{tU Yf! =яŶ+z"Nd=9"H*Fb19z,߭s,8~%C\<Cdg,"73졃%ug/i@\Af1RE!a;.¨hE50ڻqJyE$Ǟ%NYnaCD̼ m3~tp㋪[pdÜ[p$P$y0(#%$fp*{:\  '>R{2,B"R' #$DŽ?l!oF02#?#7-:2JAU0Y endstream endobj 2731 0 obj << /Length 2307 /Filter /FlateDecode >> stream xYmo6_ȗ_$Q9hwzKB&q~=!]9~Q}9yyf8軷:I)4UY$fY.zv:?vǧ:OU͢f͔ <1Vvae ~,ߕ T 1ٿxt6[[i2'SrUN*2,HX·SȂbN<(q0|Y|{UsŴ*kǫZ&lִkcMK + [ 9MR $vvǑp*ae6ߒ/q4 ;䗮h9rMwQE&l?ZlK&/1Sst!ԟ#ұoI?6gŸ5;MPޚfvuݒOyfyŧfʺw7aT}q,2܈L)(K!IBAa K(EAha&RGVjj3#r|q:bt?.\zaYFHeU{5ah3"c̈́qb~  ҏ>b1؋GNp7}T{\g'54_k)agk .;pMA[Aهk|k\cIkwo,ZКFǧr^}mXAx8hvA4S&hCp̃"b'*uOڇWm7G.`R<[bS1ANyQ ~YXSyCU&d^Jm_(IĽ~ 'xyOqH mCKl"O{Xs7PYw\?~fc6b@,Y*bpbv:@>]W BkU3% t[m؆nrPQȭ4ݧ/w X)om\:-<@M|7pHX ̷TlnY5es8{j( 9~I:_SG~z3TDF=B{깴w;=ot%2jK7U⾚RQ+$IY돡eHGG^B2ݖ祉/ȡ6QpY<,\Rn[{ ׹CcP_;Sތ N9.%f[YQ,8y|m0WhLZQ=:aE([0Z$6GqXߘ_QmBYo鵫? UPE}3[ӽN4xu:/*t:*H;L =t:q3w:;~\P$06将 <.W+o~^I B*JMOyš FA>]U֑nelHϢ#>;'7{RQsѫm&4No="۹RͶL3*K;*CyTAn/N(xԌ%r!N_PqA^kFiP2,2 6 endstream endobj 2740 0 obj << /Length 1529 /Filter /FlateDecode >> stream xڵXmo6_!Kd fN@u ŦmJJ"ٖe;n<ItxP.HDB!,dtu fMKtI"AJq}ێsT:x'!V3&H2& Mfѧ1XWą$aݤf";9)jm*?fMg¸kosveBֶ4dr2ۄdȠ0 xX٤ ķCjUd/e+H8cq/qZ=`x/}h-߇)D} ۨNV`#VE<0cFgb 62Όo&`nP?CƠRT[";[6õPY&[V s԰l^vf'EXʏ}?I{H lJIs^0KteS@Yg> +8ey9,}0r{ڙ1'AX4P:Qk۬2:DBQ;ۦmd]Ί7`^L7Jѡ#@p'n9ޭڞ5_aWǀ vʚ5n c޿+Qv0 5@$҄?R3I^|J̀oALvt?o> 7oAc+wdכ@ ee3]G()6yw8B ok+XK$ JLt(k٭E 5+ 1Uu ;we>YYx "[rhM\P=lVZWnEa[.yP8}V# ,~{׹p=8 lh/ Wȱ?ͮS%FTa*9Zmxi})nh+V|@-[АO`88 ē`@@Od:_C<`l Lf ?^<_;ҽY(vPg˪+֧hV]D4/"jm/D$c j endstream endobj 2744 0 obj << /Length 1300 /Filter /FlateDecode >> stream xڭXKs6WTS =>N:fb$ZcM(Rn @Y(YRuŷ߷]j:WʑҊ@( DL4!Y֦&L#M3y15u6o͢y4WAQ͝~Ee4{y5U #=3eS݃Y$*}g?=[&h4)c$DdqK@PwYxzz($@@ !\@ԁB­tIILboD׌`>!G2.B @6iBA1Y]6JqWz߸+q~j{ܟ1CAŰJ8rbl#[o%z8 t41x+%3 j炒!Țdi2:*~IDXCT!{ f;͊<ۍU SA/vXW k &YU)M-ۢͤ&;H*淪j-t؜H}<& =$tbyk+$Yד0z-KK3?I#DvjI'єI fGgI.&Vr}3,ojp"}L&Fyտ/t1DfCE$>MJ"vʖd|38QCE5(4O_ZNJuRإYҥAd&gؙ6Jyn[&YS&{7Ճ_uZkg^P%isIȣlѮ$j`".6e57!@?⭮!h%Ρ j#Asxpiie>_!> stream xڭY[oH~ϯ@})tfRVJ$ܨ~0xg9߹N/^c# Q"7BXHO*Hȼһ@t&$`J@ͷ2.~8[k~qjV򬬊(v׫w$ATJDCa?J12YI4j=ՄIi֪Ĉ-f[*B~g$b]^ܬ[x&`'N@B[NZS(RhAGEF[!CUC\v!HxT/ S { YzKG1#ZKy~έc:THPqȳX)ũZ1WRh0n(y QcX!FLi) aP" PS&< d1DY, {pr(:D& _4_\ݘ"73a}hh0mdϙs&x,NGNsugPz>.]C]rK!@WVt?x)8u{zj~Æ\ӄ갊4 uaiB\U4N0@BH*iJzkǶ&.`NU oۜCs $Kmpl~ԉ,ݟaXɠRA z{rͅz>%x˦4 &X];nv O;R>Nq8HXxJQA լ&b~O3o)+CzmY]zL$aGCݷ>!XÈ3D۾ 4F1SoͶ zv`%M A&}5$>$/nȔN;Dn'afF}%*.I7]^ۢMwXt6 Ɵm0Ba{M O`zm V |XYa9Tfdwy.r(M-/vtW'77gl$m/BϪDvN/zh6)R<*̞V6}nQ xKv\#*%]H7m>aFɔʃH$vPše^'!ous}{9 8Y^lf(\W(bQ({6gX_(չ{ endstream endobj 2756 0 obj << /Length 1935 /Filter /FlateDecode >> stream xڵYێ6}߯[e4fx)MA4}Z]586!%^͓ۛ%ӟ1M8Sr)M gfEbLgL1_0Eip9,]B|a^ݛ**K}kx_g}m ) o"+Ofь1+ōt!B7y /QfeWyQm$ݜ{dxQ&UuKfxx;WʚN7$S s/亯ҤK I&q$2D_.Re~7h[j\I,uM~'޴u;̋/d e'`A9ֳ@&8l\*&l|LޚvIEue&&#C10xgFٙoW$ZY+ӤA^lӼuH ' ~{Z%Bq"E RлLXSf6$ Lvuh-T&qXpʼn! Z0cg6 D[]mRi;>o~o5[#',ev~ϕæjE"&d"H7PXxdDFU.FNCD 8Ҏnt?}R܋B65 4 Dv`n6kax=(i-"@;T*`sL^c !Y#va7U)_Ge$M1"ˮ`Rb{%_hEQ -1'l!ie i-6R_qҼ8Z:(εٴ;POPӽoxVVw/o~:h 3JLI=E`>2z"L*%ڼ\Dbp@q`MrICnЪuk`XuP=p>iQ=FbY19Ҷv fhݤ՗YMp*wXA_Y<6)3EVaU/R|k{%?w2+ L S4aonCo :i.k|!?sv@ojѝMfD{Ojl8fAuB3|n[QwxT)^]vKnN`7 LB5 dʐk9E ";fbUARvy&I6:'9wUCƓEk&x mS&xdĚ42F&Î!C^^p e;S4d_DK5Q-Z <ƣI.)6}!Ɗ6O\:atFcU*jWq9)C)Ib~{PuR0plFqimh,WNPebk(Y|bոf'Qy걩ˋ  M2ʋA;#Bgw3{ϋ?eXð'zQď;9j .D/Mf/.^o~wCqp:ѐ}^-yf_ cvoa0}7B ߉lK< (y},_7.͇H7BzͧcCU]@eQ7Shʫkw3tYFOnDm?-zgڳ4̾09Jm#=HXC>$! endstream endobj 2653 0 obj << /Type /ObjStm /N 100 /First 974 /Length 1725 /Filter /FlateDecode >> stream xYMo7 бh%I-AC['YAo8@39HDGKHZ!7uA-9rP*`Xo\\-[Z ͪ D}υ4`A$HֵЛ \r9)baz{g R zR|76-0fVe#_Af)eXBAV0B)fK*Lf>0>|ACmI mJlNޫ@:MRK#zsA hC-95*$ $!%25H`mf7K3 3/ߟvЋ5%s-@&X K,RmzK_j5Xj#*PxZr +)pLi*8WZhD}>:)$Ρut ka>3o(a'[`캫{0V(<,6 +mu@p_ 8 =I@ #Dm>TVpp''U89 ˗0-7q_ dr&8}l {W ԯgi[MY6}O,.߬iXz2,߮^ηB_9l^]\}g[,_>\_}ěg5aK"ŷ+=u~OxUL˧Ogw+JWDhܯS k%28 ?hϡnH֐!YCBV]6s#kk(Y7[,ԫEOTw@:CQ6(٣#hL#ڎse,ѐ:E#p'e;Nh"w1n*[qTWny3+M{oʦrej2i4L1p,Rb|HWבȿۢ'+'Rz}Hߣ\iW[ Ȱ=|2lj*(^+mId91 U7I *n;A.^\1i7F_7խжlmoۧ],|ywտxbl}auMg˟,:\wi:b4cKLCMdn2IP-2 wҝ,wgq2;f fg28MŌ*p"50to0P`ئa(v1.-;׈nD!p{{64^9P"S݆fW[5Pc _?Q=w٘s{7.uGkAڦM.tmMdXT?m2Q߇i =de3H+* GHI *2xuKx[jEgӔyWd> stream xYY6~_بŊ@("E+}zT^>ځYQij ߹~խWv`3YV#SWnǂ`ճ-TFIČmǤnl2?*Ev_b$x6s]]y`RnSșM>+ڢu53m_1].K9% X׬âdiBq mI9b!'$ufU^7z'>@vy՛ i9UaAB J8 ¬eKkր &=ް?87Ht%$, Ā /LARšLJp2 A LF :AnLzjP vs-j Ihn_XsIk<$:4nz&abg>oDSճ][6/`n./1M(m4g%+ `e@w8fz4p8NطL2r `^Ȃ6@dYVmC *uٌ4 K6aBD1"yQlLi5/111MPU_<g M\MG (B4.ey `B;Y]9-vT poŎ.bO7l\4Ea8Cs{W6.bai}p^RBȶ> ;՛W $4:Fߒh cp%3s4t[` ʉ|I\.-+Nc}Շw^g0q 0m^ ~x@Pdf =,\db  xΐf˦K*Lkg'=xwl_ -Fm .6'/8ךHln4F%mǝML},ny0xhȭ.g*Y\R%SL>inDiWQ=߮)_ͅ<;It>Y jc4J?"wR9 m5HjqmhNw\35ыqqh]e68g $%SWy-@F K|uǸ!vjC'dtnA=ÏTDRz?f.w\6|_}+o685o r2|Oy'Cwn$'!oݦV\xeO>OmJԃW9x#!!O lldDGf=La)JR'q$%I(cD$xXo4G %qm[ߩVm1X]%y(fTqMf endstream endobj 2770 0 obj << /Length 1472 /Filter /FlateDecode >> stream xXMs6Wj&D 촙3IکK-1'P]%Ȧ^D\.߾]]j|ꭠ33%M JG0¬y1fQqUWD~Q7Aw|Lg0EџgOÚ~ |F * Ųa8aV{ &ۭx_w߃j# ĨlB[ Dy50J?6YTŐhO7Mb)UWJN5ӧRw0 F)}դ,> stream x[KsFW+dtHj7R%"! %P@Ҳ<@b!EPU =g0w gD!JϮo32 Yv=~ɉ@r4&~$Y^41S"5۱gdX^/E3/ϏU3ݻY=b4\o!A8S~nϜ|*\si>\5ďGT/OrR~ZLCS.,`_WhLut2-ԋE /7XynZ-rVkS%5pWS?rcx+3\ֳs߿m_pSBѸW*D^ցCSzs+k(˿ʅ٬l"ł'qE%s.]Aʽ2 K(4#v@\C Fd rQĩ> ؙ՝Rp#KS 9R^굳X0PAq&韤?;Us^w$wI4IېǭU$ǔ8%u;i2҂qy1 1L<52uN$i'Ngĺ-,dl/A#/>1id/\Y*bPm1rGS"=ڏ֐Dc$ 2Ǧ*&UŹ*xB*B:ZqFAU<ϏBHSJCw* Yfb8I@H5ҜvF]q!ATve~~} 'bZv "-.`[SgkKhҐOIg ZJBER&#|Ӥ/ASD:`stHJ,2b1ace+`1Wd~iwvu| d$b02R6Qh Q ^$~Nn/pc6RExL݃ALƅךETfvß?mKĔVG-Sn@DҘX F)B;-VqyV Q/l3@:xhRl27M!PtH癭ܾ7~;aËYw(9zҭ3RDRgcL_46[Јh j0w0nm+L]@9?PPƊ,pM7oR0k3ԂՁa_8fD q~Q IUơsCEaKJN1ҭM;ŀ UzHCr\=$=[>ϴ_~M_,--Ra`+Abjvps9u #g fhh£N5v]xW6evP4&e{O{Ӻ@čE`va eLQ$!~Uy (!1bx2iJ&fJ!fT $QH )dU海;zmnD@P)~ #Q컇=7wM$:0;iw:V$7:tzt#Uws]X!:?M[lEXAlć)] 6O Ш7I؂C]܊/;Tۦ 4ESU,w 9(g֫O5;#)Kε(R'̞@ 47IWUHLD~_@l4!+Ĥ)U"b9Xٲo}m\NVutwMč:١ho2mm~M6`c9X=S3M弶W`Я|iz{bR?iY\ [kxI%iJus Prլֱs&w;v:ݦgvc|U=,> <'ʱ66?Wf_(E wl[6aebl:' LY.HIzi^_"OM=Â/nb)@wH] R`Ŷ˭RG(v[)  )Zk a endstream endobj 2786 0 obj << /Length 2258 /Filter /FlateDecode >> stream xڵZKs۶Wpgj 0,ɝ6qkޙ]kB*I%M}H zݘ |8@~=-Qc$BFRD4טF"0h”_&{[>m̿MnGYYoJ3s7nG {KtDJfQMDT iQ$.y,LKċ|oG4fOf#ΥۄVlV43|uY<)BH:?RG % 3P")i^;A3 (tx/(T :7Rz4$#:n'\ դPYM۷+HJ hܨ0fӫ?,QQII$hw#JG_%\8ʣ^8H%CH$1X/JCqw1[xt4I 3!̮ Yu ^TvzA b`'l8l@J )BL9Ҕ2}}uDV&'Y& AEjȞ`'QX %^1_X!Q G$^8J qz܈z z PB*f!L'ːxx2&/2 @[ !fu`29hmklܜ3:-eVgeH!r+QPrt҂xJgdy%of&-0!m]f]vfIDpgYAa3>rIJ0bWx*E]͇o,!:\W{>+'Lgm2 nOA7in$ޮFYOCe(Kid2ͰKOQܱysmaH3E,2ƒWiR2- 4$kBCr{kǁ'V13{ZYS4#Uv(#O0VGvj>PJntZ]g^mֈc9$telp/6.-␥3eQ6("l`)q"cSZ|ٺ2Mtv Ľ AF&o>ӫ2Ye<&kfՅmҸWp ,UOfŽx ,?%e53\a: c׾5L , o{BTgY]@·pg:{.u&EQwouUO^\,;\7!t zư5(h2{T1kS:Pw8*{L h;>{'!<&q$/87F^Zg1_h}ldYe@RId>p tˤpC )&͖]up ɵH.9^q5Bg #Jd3J2>}6M3|z'8O݃m{^=v+@qU: >Jnv1v d&(i`b䈡/D6t ];,XIhrz4S@}N5mΓ,n\_fUb[O$MvS){7Doz6)ݖeB;TIUJ[df1X]NjЊ[_nG$H s^C]~z7;wu7p?xχ?ӱQ R[ΜqDGZ#-8^L&=G529 IK3w꒵GmzZ7ǎBh{߅v'EL3f}H o"TT`'ѽ"pYY^7 5ajZy#tt."HD2HIOb$b50DOz.KKOԦ/L8w0yH;}̞~ѳ54, 4pİgak}B ؚp E8\( -[Ӗ3C3jDTqHMGCKm$/ofLWsGsKb\QŶrv0AmĺFq6&߁Wn endstream endobj 2792 0 obj << /Length 1878 /Filter /FlateDecode >> stream xڭYIsHW45qӫZʁPdXb5 2L_?ud),6>^{[[>=?zRЈi™HiBU%輈>Lt2e\NBd|Yn^nsI&c2t,#Rϥє'y~U6 ͼvM[cWe^2 ֟+gaSWnQşyY"l/JZQV'LWo%Z3IL媾ܩ(PEN[@QE~giipcBGMoMp.X-bXSd*8ᶝp1N$O@4eDg%xH$Zheh*a:t nzH) )aiiՈ rߥF$WC:,eZ'NRFȨDfTp7"KK8`\vT( 1<΄ʁ` imx]WIz3JpjĠkn'~!V և:W$"\ $f{ayDY`IH~u~eٕ/ЄBTACOyU4SI3}sY|}UV.SOD>U2_sӚUHA W+G1za+8up~e=AQ4d2M41X#m-I_ƧPA׏eᄒW&+˖O2 {2ʅwqTWƕqcL?X-MJH0ߗ1 p?Z(,ju!c42¬N XI\$prh7| .gn.oʍƿNKepU'`=]-xѶ[`ŇAgg*f 40cZ"jdч3΃UӺQG>H+g!ua\e40 2hXsbM{<;y4 P=uf]40$xuso5J دJ!8A5nHJƸ{gKNl_C|6ֲ-ԃDO{,&wxm[PJ*Ä|'FܕXKLVc ܝD_8!?C &fzm/_+Id=~>/f 0^{e|*mm ~kY-LuI!u47 w0F>c{/s] 3ܾ5 E_cX]"6K'c\ka=t!?+ q/V}&nLrs'𝐧;8>/hV%#]o endstream endobj 2798 0 obj << /Length 3725 /Filter /FlateDecode >> stream xZ[~?ȓ=fx Aҗ}H󠵵k߹'-")r8|3Q~;#7*Z9߸LH7>SB=l~*'r.^Nfg~u*l-j5}un|?^/kOESn~aJ* JAs qcLPCy:s;ot>|ʶOpnJ. 2!r(7>70F}Ƿ/TuuVS|^ a&H^Źz.UoW^ځzPvɡD:~,U;N\Xo@ <3l2gR\V7XI7zrUK,͙ͺY!I:SL=^08Axf͛I*O^f]GFH֑B|P,ɤlcigO1P0;El>ucf~AlٷBg8~\Ke0x뉂ȍYa8`nXɶJls幩0@^K3z 8H'f|6羏18r԰= t2|^dCk ܎ sH:y"[ZNtm=v\WZ Qc]41i &uXcm$* (Z\4zBX:a9Ö4DsnO\"CXQ6%c{[$MQ%t~ B A},Pvy%#|^\H6$Tٟ> T-,rG`J6I {ǼrCB _%TĄt' LT1~*޿ IS_cn]K2 цy&2jc6*}Cq) endstream endobj 2805 0 obj << /Length 2413 /Filter /FlateDecode >> stream xYKhFi%p90@fZj3>U,R-՞]>dX,IHFv&e؝M=wMapg?$8;6P<EH3Я}?l'ˍ3e23/xr-D2EW=Uՙ#ݣ`2I7vxvАf]۹go z"MB3mPȯ6~3 (=?93VRŴ5pf)h)z&e!Yja涖)EELlqelo XBygJ-Y/wKt730-da:`ʮmNVھŸ0߉L2u*V~t6f6)27,ssw-o{kj-{n3g+X}ɯ2n3ch_ᘻ5 ]t pHfnjOK Ƨ,ì瞫f/褨j;e93r6S/܇LEs]Alׂ~NVF5˂؀VGzGVz6'4}xSnOYTЌKTm? endstream endobj 2812 0 obj << /Length 1716 /Filter /FlateDecode >> stream xXK6+|Jٕ[r&٪dsc*VʀYM z;PŲvw~0|pDD~ T͢I!&D`/8I] #q]VfhNSqMH<~VWJSP;#BP&5qRNUrfVۤXnX&)UV %aU,͊XՖv^ج^ML&0q^MZUʜpĹtG1V=7/9La6Lͣv eFf{^ճ,@lrggkc6&J!.4ĩ:R(SfuI$%8ʘrDS!Q+!d&"jA2d%V̊TcqzT`C92/x}S>@*?O"9uDzpDrꈬ 4SHS{_^z?qq8Zv` ؋> :q#/\t.s}rYj.  c{S3?cQ8ߘ2/0Aٳ atYKjSٕQ@~x3ay7@')8Ei !kX千OX#D S$P_ijAc)&k!*G{i V~ *W.bJ1p9HӮ![lY 6giޕY,G4*kA|FCo"FԛgXj<.W_jRh{Z5h)Jk}6et:y^,c; W4 bGv lѶ $ށm0k# nijRW >ظʼ3) 5= p}{_@!Ŵ? P[ nm@'@RqT:tz[TPCI%?@R\rENQMj7K(SnjAdKvCp:S]$HJev)IhK9٢p3hQVv)EIc}3m wi\6n1/-rdр_D6<~DgE\=zi=,/ӦN=дkF%Gj\Jϳ oZj]n+/K[Yff\n»4jni3,h~;# r0;d!Fƻ`B)D~1*ejsx}Uz}3Fwq‰aqRs JDk|k[[)[[Ck+|kv:nmՙ* (ڲV(͐]R u_ܰC endstream endobj 2822 0 obj << /Length 3385 /Filter /FlateDecode >> stream xڵZKsW|H|HRr=*^JZpLr,i}#J:'M~|zշo%6\ msͅ6󅫮n}cS=Ŋ\pX`n+"]v,ŞQR ayaq&7ʥ `)s[.Vq'W|`RfiJ;r[̦ai|Q g4˝.y̥y2g<)1Ke_y4TMEZSMZ/RQKgXz>0.WZg#>#؞,Q_uT08f`R4;@7,"n\!EgexuWlQc=2O@w8upw1Ywp>lKdz=NY/zH crXѰs%rx7LLl^isRL슳(8GK.}&R "\6p0rK z~(4J cUDmgCWr¾0]>8l]yܗ;Gm {xHSXpZޕl Z_wkoƨsl,Ĉ}Dut: ο Q2bsƹޤV<(ѩy.|APф:Fi[JkhM`󡫆cws6~]]ww>A=D`ڝ9ꓵ١;jw^]I]Հ7ዧa}POa[Ԫv4:AYV߶;e8M}{eq4O<ϤXKgNU3>JcjBAZ}i!ѾxYx/F1F6h櫇WK<h2+\|)1",!E^%=pt=`6oam}ǥvg`N@Q̙QDy0OG"ZEkv,BӾ7ӏ>"f!fYm4uCL:Y eokr[eJdFWzZʍPzE:s$\Ԝ!a:ιCHN4x_NXE%=}s >Iٽ* Y% x >0`b,?@Jfph >؄ 4h_wR=!BUބ4QXmjLv&Ϧ(gp*S>2ψLxks^Ytal˅(?x!xQe@q"G*N5P B_ jQ znpIL@8\3y4$'Ti!h_~<ɕ#(T{ ݱC1`i@펺7g%u6/(;dCSW] ܽR WAc(3GAp6z̥ T'xWёإڠAlw+aEvI`ȃO=#I^ΨP- 0mh  [햔@Ѓ0 n7>F1Lnf}lB ܆!]g~[33jEx3^Oly p&:_ɟq%L2wh`}i"M9p1^!6D MD".!-ƺ QOR 3z  a<-3h'(%=&{ؓ%xN×rWJ}ƖTX%R[rSXo"O3ut_A7pI^URGO7׉>O_(J@@4Dzbj RzO'c|'>+rin7[PEԅB Skcd%m'@A4ya"DM,+T,`C%ʖ4 dV䖉yztXiT-3*t5Hj`;| U}LN9 )pl|V;s`;*V`bwD4/l,Ӌ>6,h6-aM4L^ڍ&c\bu2MGf}1V{L)u) M^`ҴRȍ$mqr40G[Ş9"HUe'uS%B]VFظ+WԺSʅe(ݚ}8sЛ&wiX<)bXĔIUVE>Qܴӄ~V Jϭ%OũZl6ÚdBY)GIx҅&Ky7ɻUcV:拪X<_6u m}wY$ƅom`߆F@!DBBۛ@(Qj` |1.3+s{UqKL}r~ K;O+U,8y$ ȹ}q!g9rp_hҋ9ؤ_`do&X&p}`cl`l )ҐqrW?\_ endstream endobj 2839 0 obj << /Length 1115 /Filter /FlateDecode >> stream xڭVM6W$ETziv)A+smHr_鯕 Ppf8Q֋{a!X2Y?&F1-D͒&wnIx[?rpm޺GzVeiuhʩ1[`(T%xC6!a^ámvK/SḆ~Z~^vwm)Y0)TiGGհ0u J)͌ɒP ƴS Li`Gl ո\a 3EA͊e2z:^[N&yzqq-W*]M@l J%J~i%}qjł[V(p >DfXޏqSY7#eBҝ'z)}9{7!x u˞ paGaktWWpG~pk aD<86T䏸{@]V3X+ۭ?(0y8"LzDe/Dq2-j`Ƹ ~?w?*:.ym:0S3S]^*O:K"#JE[I >v-0ѳ{h-zw5jV3UZWp!) "3{Bu Y#>i 'ngrQlt 0|ZӰy˅LdI~Ԧ*K.Yeqas+Թ 3dc3!2Vd7iHq[s꺭9Ԝ z4GEt[+4;e7u9z#C/XQ< 9<(sd">̵shJ endstream endobj 2818 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/closegap_pcl_par.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2841 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB ] /ExtGState << /R7 2842 0 R >>>> /Length 14197 /Filter /FlateDecode >> stream x}ێm;n]+j/H'v EI* ]ԅ(";o~}W,[-%G-]?>???T;Qx2u _H"¿Qi}7G|-Dє?W!jP{۴nU*xu5HWc]+ީKOc]+u$_S~:{V)6'0(kK,4;b#&)EjzJwCU%핃 ԋZsբUdղKZrjg2^Sw qֳjvodby\% كouP r` R'^Ht? +F_x#OWG/_Q|- vTq0_@gQeS{5P#KxqF>?(ٽEcS¡tGYech[4U(K2&1ɩM&`Em/Wʞ |!daslPhUh^]d]gefIqCwUXLDG!T2 G9Jt }CX#Ī GTy!9D%հRE@)j)f-XQDrLm]ΞRhLp691s8G˨wК. ژBTMhr3Z"]<;鰚yd/򷗂=`9`#] j-փcw,ByE#! z.D$ᰴ,88YJ)ZNxEvXsz~J\6K~ _8{!~K bX>5>}a#)_-|.Aœ3&RF }!NP0٘f$^mt~/+U?B5#<ZH,xԍf Dea_\'FďDZz1Izх3]S. Z|!*Q/s]BEt\DBsL=r=NNEF )-;lXH;WuRL@kF&Fgw2b\%nA8N?(b%[4ZN1q:OȨd| v 'Q&(WRoapŰad?.#+*7a尴KidP"$Q@ߥ0 .ҳAGV#jr( 9w\o,'k.;`h*,;^ B;pgX ئZe=u "_jJFbo,( sLo32W\޹$0m[g^ $;w=&i>JS̢z(M1tjMr>&3 5E![ti mMS_4G-mr(N9Eرaםc`֝/ @לQ!q\ʡ$p]/ʼnu䊓QN͉)*Ks0|kN՜XAuIZPtiu+N42zƨ޴at{ַiJhRDQ$ZS̵ָw܍Y{=Z?a\kri4 ̵[k09vh'i2¡6y2Sk?%мy=w c_R|`WUtd__mPNvLdkLP)BӘ"RLc6.~n$ʽ'\y_۸`.GU"m\i6q}wmRC:qqm籍'\۸þ;ve!۸ƵD?6t6 8{pls'|m Bvo2ƅm1 m|uo,2'\;]6኿ZdIG 3Ƭ=G*6cSk 6ﲷqS@6xn8 hl"ȇ-9E>|9NS1)]"_"?[\D>ܪn-mh.E,/D>ڸE~ȏ "aq>E>J\"-D>N."Nk#-Q)EHO)"[/|Tp"z|Ǹx>D>n~a /KKEG# R, N8'J/K7/.K۸R!epx,TThgqZ*}!,_ 7qYz{KPT|Y*0w8nt=1`'bcLqnBRFzX*6Q lga?eaH<,iROK9U RqF,iR!R1aZρRVq WX*6f}TpcRf-0gT_s8cB,vga3e`ݷTTqf*'a(#O"p D8j90PMp?'Y8t߀90P,u2&6s{)QTl(syDgљ*2֮/=6c'4ַc*:&]('Al#/FUPjaiU8rD֥褋hEuy\ #IJ%*f tQ/[q?-^ s&wAv7ao2\%pcL.";6/lni3HMKd=X4MTH'2nvpJ9KAWvS/ \^VV >ba*&`)0nZ&\wj3S.#܅7 _I012kOt忔I\'C.e28< :<嚮S/LJ#i m)2S&6.e<\uxrؕIǘn(5''m*qʤ#T:w21 |s)R붗-@ʤc6Z|6_me㽔Ʌ뛽,#T&ʤ ea/e^L:ƔIKd(PN{٣ |t/YK` ccZ?]h]0{Ƅs 8o w䜒E@gŢĴw? cp܉~@ki 0> 2>t|d{{ {]''i2>-}ac2>K_`?}rv}1 ||D=O t}/xS_`}ADXǡ/HIJ>O%$e|rǨ -JU&uo͈Ɍl5ʈ"}=Vog apclMC恍 agwnˣrj7L.R{do."ۜдHiԕ@L"`Ub. iO1X45mi9J3 pUH:E4T3@`uKN{ l*}&7 :ljFg5_ ztYP$TamoLgȔNc%Yтlp{Pu&T7y'f]5T %̨ EgQ@7 Re/99 K`f]"| yo:\pՐ-2TjDݯw4m#%#{$^ckJ^~Qf S~#B~h*;HEJm0!vL5ʡy]yn^nqE/DBHnMd^"Ķ^vqȚjEU; =#YCX)9IDnzWQ<[Vi?49!0 t2&}K@ExH-= C޺0p'ԕx NK4+t#@nXF] Ŵ~/5k҇8 }XMzXT }IKoc/=3i4;Mma2ڄS)4Uw?_gVi$Xcz)Am$M2F%:%$ul5郵J ԯ)R{a>ygD9(}:ʞ,b?t'Q+6i`[zi/{aZH>9:uS~hViT[ݮj9yΔc680Fuu+J4i-Cpa>TtFҺQM8#"@^3U.Pi+_i߀"Nz"pږw( 1~ s /;Fϻ|Z@7Y61K%`A"DAER`eQs  Ǒ@^Od{Wh`<oQ-d}@^Ap& p<:XR"2Hd!&uP>BD/9 7V%u@*9fnA|\bd#kdycGdGMD'tv &lB^u /4-8iK:N,8Ĭn0 u/x qŸH~)(x4AAN~MYUJei9uZ;HkhfK``p՟ 3aсft+ׂu(ڐf".p6 `$n(&pE 5 -)a[3, +nD.66 %(1`L)F→a-{F F$,ppUW< eFy3hҙ4:U]u1A61t18`it`' EB 3/VL,`% |NwPUSMDfN ZőxTN@XY`Zu90aa?1PzӔ`&/"̲¨x7DTe]OEü+S7f=0Sf@[wDlAc]f=`(tڎ)KV| 0X]665S2op6,v c@FOn +ܔotQWAT+R270;   ZT+/VP*!IcLTb3А2`e" WWR-ؘd+Ppb*Q|M"6i8hgu0*L+m5V 5Fҩc҄-Nfʓ-sRX(JN vS1-8>f +;i*awnt;SE\, i.H80VDi#'Ff3fǤLrIU"=_u"G(;mj V]Fy2m4$Kq`La}GļKz0 ɼdJ[c*J . V!G4 4"՚80 |1[=5+5>i[C;0 Yt_D Q [#J$=.Fo| K nTbZ|Pr:Wa ޠ7 a8"`U4iixÑgBYO`Lgaf3Fa=#w{bNˉ{N. mF 6QjpTrcjt$Eæq>ɕąx`/DT&a0jGm2U>4Q 8_f4;=cZ:xuvq@nҥ䑼vӝB TdDj60^es\ ;K fON_HgiS=~o +260P#L[~`0أ1?)*a;Q7۶ " ɒ\C&0X.~ `yr> Fepu2nh$51 ՜~8v5![fV6ҌfsW> ՆcՆ5(U5u/ w=A !=tփD#  t}`"_ⱕ7;tIHӣϠjZ5J!Ѡ;ٟ<1NəiDLUB&% /Bko @{Liu faFXv"lF0R7G %W_>u`ZVƤ;3;Qx_+ǁKyj4Ҍqm-qI7Ķ6} L$8q82>_ru%< t\~'il \ƺA>Ag(5>)){& C#@ؓ[3vFeZb4WL]=-Y DC6veGs(7{ak$A .F'\éayGJguknSWtTL.MԲtCS1_^c86Sߝ3szYO]-RV=b:4u)"Lh6A, N 6=]vUW;,%c]>Vރf0:k0MEB*dsŲ|τ|" >V\o . tL'qYƓ$zW޷0 DnB>`\Ⴥ@dd}p]M\@J' O0ݲ 7BtFԩfGw^:XT}g ѱp#U%XDtc%tqA]8S̮n|4!!nCj03ѮͲwІ: 11E~DIZ?;Y I|BSOlfXUϺwq6ԙЂ90|*TqPT s$zm 8HXAσDgdh).&/Ԓ }+&j1@OY辊Ћx;s!bB20yjLz5л('\6X\x f>.6˓s%m≉CJBjxZ)m8O`fsc2r }q^hXFȩL5 09kdtujnf.";0AxC>kH8Gs)75I}46oah1j5sKpRl15]i`х.=7K1OFE0˩&ցu /n260>JSo .E܍(>2('$$LYsEЇA a aoh|~izg6AZDJרzˁ4oModձ(+K7ў06zSqcǷ~䢾zdN|7ٛn¬V8zA?M2ѩT ɬ 2vѭcXsBDLG+>a͐Hn pVic']EDj)] O|#ǘZdOA`ܖ4Ti5Еw Qa$h?aK?=_ 7-5cȦKLژSAQl2,._82f4_>]UčʑHladC;0:2x%aW@oa!  ʟg2?`*EbZOnX?h ::0xE'# s[jk_;,kBD=*fH>0i%5 $^aǬ ?u|8je5e>p Ia^vZ/ aRe9G ɫ]`(W kc<1xEs 9.9fc0xƂ\/ ^J Jqy!IυюxDKX|_tN#l.  UŇ4s2>LhFqW1q o c.@p2y%z(I, tLɹp4dc;?ZARJ2M\`\Z¸@CB[bHP&Z0nÿ@irsO7W)aĸQc؍bXS vè`/a*]bI=8So6&FӸvu-Rd̆Ī,rБN7o%Dhc9!"  3@D;mU0ԫ;8@5:D:$hE>=.VqaWx{Ph)`ed1|pɅ@ ͆B#@cdTQz`e|! IK0F<WT B+tDKM糏XoGxwpT^1]Ex0}ޞ _!o S 0$ m9䰑]nwؔ>G>;0R$ŬaP|)vjM 7AN]azIF J1bxꜫa)}哞?aȨ d棛Ӽ 6I%M oWKg Yi]"S ʼJS`\=F_ E"gڔ12l0UB>Fu0{# vRo$Lc(c?B.Ũ!qgKWV12[ )x\DU8ЀόBNf$ȏ`j}`$=,έXxx@5(hw9-P!Uj4rٙDX!sݬAH8n+wX9{QbnMʁmP5fɀ 5=ɀ}0 n`@I8̀ a md@ ̀=_ Hb@$; D~762 fd@F՞ 9ɀ0j|3 12$(A[ lT4f ̀<6 lz4n ׏k endstream endobj 2819 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/closegap_pcl.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2843 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB ] /ExtGState << /R7 2844 0 R >>>> /Length 50845 /Filter /FlateDecode >> stream xI,K׿ pb#j@bljOd#϶ᅹ*J??_˿J[+~^ x^?_:U^?p38~S;#ϗ_coYc<:Oߝ S\9\KYUZ.?cS=#trHi糼1gG?ߪg[Y?khdt|@?u``t|3ajY/Y? Os\/i?bd$f'x~6FօHֺ5n:$f>#0]n? b'iu^Ϸ[Q_:Gy+#Ǖ*09@|KiÜwWV\9KL/m>txJ}aǔL8s ULǏۚΜXNҹY9̆swp>U%. ?砿}[GuycУjiX9Lq?#^֙8G993qN<# :L{y,g43G4px9{ C o cs_m|(~NpQZ>ŇX9• \F=gg󜗿vlG/M<2$\08y!(n8T⃌s r׭ Oyh¹,Je`s=-[Uc2ߵn=֥9rn81o2lG+,"ƚẙmʸǂ h ?S+YJތsê25^$l,CZ7-S.wV/5 g`Y{>sŋpOgŅC7IůK;W6Mr#m_;YuΒU}`X&6x=rdz.b"{nvܒ\&0>RhxpK?sKl,tȎTga3X k H[\cc>mȬ20yTd_%b`tV@UD6Ya{c.wg$lhͯx/1<caȱ0J=focuM61zlJ:1x%q4MGXxK3\g/;K -#oY1'~Pg͗g ;bhXxELñ=+1beg:c-}:Y2έ=Gn3.pst8W݈KyQ*r{co\c?`m<[SS<[SeTA7嬰 հ;w#j߄K2@Ƿ*π)W9b0u,NJ'ilS1f0Vqܕ:BO 'uMFv8ǖjܪ~f6OqlQ9IS r3yTt^P5ړMHK}ǥCmv5s+R=3hYlyc/P`3╉e4c9yCRp\bX\tpx 7"hy$#UXD""c ؼs{ҐogR.bk*Re ㌔ؙ*2n9ȐZ,a7>:Na =av\\5‰a1SLБ\^"# 2-q 8^_wagpL=9"4ڏS{Ѹ9f]5Cgd=-pRtho?>sE@sj=lr ӛdN/_oJ0^%Be(@ل_ZifXDrG{mIszQ<@:MgGwTkgbf [*38}{ZFϒ!mwz8 yS#q,E׽Ƕ+/XƜc_nzɚ,5sWuZ< 碆x˛,o/3t\f{ފM|D6 >˧UIZ DzEh jN־ҷ5lt ;XD5# ]27QJ{ =YIHLv?>~3g@qF?15}7ٟ#___1Ng~u q׷ׯ3?|ϑ?GJs}o}cdτ 1R>95&b+,)1V G47 mӈT`*T˿pq:3rϴ7G.jY:o먺Mg.aj̪ '<Rq(e8S~äB#6]Ju8;y(*D.<R111uv˫v(u ]x8xHavzW;5| :|v-G0=WDMj#uNNcotr ȧj"[x> 1¿qk^)E7Șs)4^CN'\M Oq,I9Qb[Sr/-O>LJY:^ P]h}Isfr&4Z O~bܷE礞B xE+p RD!y^|*A>hO"Tq#t@NKKoBIZ2J͓)w8|i'[":n{Q0$9 dEtyZH/jx;{<Cz<*!g =,&|8sRʕpg&)6 olיIhc#HA_r5 ,h|LZ}f+ҖA:"Wlr'7U'd/YyY6RU5•Xns^'J g)U.$­*Gp~i 'Β%‹9_:Z<0f._ u'4Uȉՠwμjj@U+óˈu2H`L6iķSkG"i;$pvOI LG/ї/h8nޛyQY@lxҳHnLDOCgG6`> RUbp2:_Gװtm768 ?xۖ🊮`/Zbr'7"H#@\(n#| 7LGsi.YGQڔÿsZGݚ%"~kϑrgt [!nf\&q0)X!EU9^'$@6=S{tw66xSEZ=+:@Ӽj>j}1 V ^.E~JŬ(!TgsFo f.t:{ЋO}1<"x.G(~ZΡƤ]y^YOV"EE25_/c')br /`-3p#(Δ`2 HqgT:LH2MUHvaH=IXrNM`@Ljqb·'Jbo7 IS`#R/{Fu.g$;7G/dXb1&=A`6R bTO֕Y]^w+ܟNe;%~yvp=fsGY.FyBx};\LzLK4?Sr$cڔc%PxpwDŽlwc#a{A`6qwrL?k)Y4IJk6c8lL(/ݙ{(lUeU놞5\YiZ8BLggʤH,qt!Z1:M.M}K=Mʳ7?fLH7wljD,ㅑA3p/vt(ϷJ'zԴՀ)3a:tpD #TD=+9oQ3,084eپ dFXTs 892Ug@l-4eh@d=*ң(K*CӝGݐɌI|0SђI%ř¾=.ɒQ1& l 0p9+ViN[.j%AE2B_^eϽU#3 ?)J5]gᎴc`LU{1.0ѻV݅1Tbnw~R2`T-IIQT2z Mny*T2*ٲM*Bfyqdaf*&7moUCWpwv$4V:/cd/%#%W֏[9T+SgvO5Q8M903~ㅋRX| t:ƷKLWȂ m7KVS LH` 8W?W~Je[D0"HWZ[[Y=mV{j;+aKD&m#c M>V`aK~FZP 3? :^Q ĭ$ 10QA?Ԗϕo'{f/h1OCwq,:F,z]fQL+,5;X%1+f)^)nÙx>Fm =\fvŪq@aRHLRN p!jKEtW Cz x@67{dlU!9cqѶ``5'r*޶*3ʔp- 2˰W9eQ o2P([ְݞjNMYCs> X,(|71᳋"Oq:%LfbKGsVCZbI6Z7xXg}N"dAD1G\p0̓*s]2;\c@_wj A7U_W/d7I4v#__g|fk'׷Y(ϙ0 >Ot~8su#: >@͋^Pϑ?Hj=}FiYSf/I޼њ-7Z3\9k@V}3,^SYB:Xu,^SbJ"M9GW5%8օ4+2YuA<qo!X ҇.XTAE*aD(^ǎ|q4Vb[nꫀ̺q-)[XgQ9 "J!s-;ݩt'Xrb9QE+0)QE&Q9';$8]XlS b)d0~:#BPI xXΚEw\S:T+2g#Jb(3\1S-y8#ajsOLL+g8gܔ󾅌6EW~QZԁ#G.pO 0Sn-tPt_N0%l.LkFH\wՁp:K8$a2eMDm->dStoJ0/-rJ=־|3=Xڛ1R͉镙(Zws5dŜ-ḔK؀V01ʻGUF(ٞ#[N) ʚ6*:iFAWrgjp'$HЎ)e)3,gbǙ%Pк[Hh̚s]qd)$¤_?|ߊ;Zlԡ\}eU[+. F۷ZU~]5Ǒ^bY/d-|[B]P*l0vVVYRuT$]wխ%@Ma=Ю:B13Tɔѹ$ȎQE >5<ւSJ[K0b㗐g m~vִCQ ]0>enpqGź࢔~&3 gv18EG{=e1A-U)8Kwp>ePyp VA(j dQm_2Y튑faP~n+|c3֥"5Ju=ڹ00[bo|P۴劕ۅX @ꀝ(pޭrPoeև\AJm˕13B)e.]"))M/f F6$D†3ݭcAd.~AH>o;=ƌ !'JA\ŕt8гDCJ6HI&7:eTs Uv@fѷH3`^D7 ZnGs V[kY"FlFY]?OjAhXUcz0HB 0[uܙmD #a&UI3<gO.*]A"lnգC~r}>D>^ sȊlfh $ҫFvс $['KkVSA(d?R,q9V7=}Hb!>^30 ZjyCn<3.䀒"j.o Y%?X}3*Je#H>:uЪ7_& DN^;Psֶ(g;¡,9s;?n)X؁` .{>MږVuo]{BJ3p*,(`ng!)ښo3HT}UD]"dG#k~1?ο\HRa8y7?6Y{7s7az֣$Ipֽ^cGGʕTܰK̦6#玉-\@D#HYkV2WQJ gGmtvfT3 +D0CՠQjsO(\֥# S.I#3$.iJ+(4Iql20z.)l,ANlk.+Xeq6II8KilmT~*4 @T*=Ob"E_*vΝ@&%l4!j%)"~s>'"YMgRy]96] }[&lQ6Tι4ryn༊qQ{/NQ򻐮alwk_hIp~ e)~ixsXMe)L`'aTG,J(q"eCΪ{)@L]|z{ȥ5Ԡb8X)n[OҚ۵&d/"M u$&f"N%Ae)Ω_)7h"ˮh% 8k+ܐ@Z "L&c3DֈNITC$zGVƇ~{)`% h,;ܨvKCq5H:4-Jְ.󪀬5 OfgXHs68&PT+׀r.cm2H5B#I!hEUKZfS}X%uYRg3(Q13UG{>9R-=iH$,3ehq`ܦ+o]BiIб_{;TG-zr8IǺY"X3YcFijy; hyt %Ds$*(+9Ӧ10$Ð%D<]nxJ6I<ѳQU5!=G2Vsa,E+ͅ_3;o@@|y.jBX,;v,3p!GD ~K=)Yf,MQ =o8Uϫ1D)X,م)2`МlޞYֹ|!yR]j4A`d,FhX}i5ݖ3[.Y:@14޽KGS *@Hcnm_> 8KE^yiهS.[-jbM<e^ܭрtXIz.++AsT:-;c?f:UȮd2P~R.קGz@mwNH+W;dG3Cɑ 2qJG}d_w~oj a;no}\ϖ _gChWޑ5Ҿ~v~ތ&^P#Y>G>Ao# ίvqY[ \L*P~N9BSV:S̡*A~#3T-kK[,d*12Msx'<=L6$ə9Ru{p7i%%]f @7;ҹ %@mD)5*ӹ0 -/ܣ^^.Eo.3>0S2QJD(*h9RV_LzTLT)ZW"BңXdADEFjA- QqJ1/՗F4Po5q]Tqs6̏=D9uq]E EXgfU eP!=)EHjt꽳[%B gMmKE[%/+ KT0WYg1Җ*~VX>}LDT.#!+5{WEpގd\HY\Dkf_N Z&rp ]9n4L) d$_>2*<'̺$4`d$|ɹFF$g369dif}>t4Oyv5TשW.wLk6]Y`0WH \HK`pVL`nHui5ӤL.v2!Ħ:rpNvieU3=\`c3WwEgwVYBke+]W$g=f#I-,fI5%{\\2*A-!(a=]b,CHP-`An\aB1b] չ.Mqq5Xי k"l\pL-~WvxWqW-٬,W&+ EY ʰۂUk# lyU{uyG  v\рW ,ඣz_;X~5n(Z3l:vt@lD]Eʿ$Yn5m6մ6 }+ s`Z5mBȸeEwvY槭Mm{9EP YD[ z E"klYk,;ةsLW 0 kDdO#ڕ+hV[\en&xzc-^{_n8e{í"OJ+"ՔN?AǚۏHK W09(gDp$Ȧ/G2A=ΪW ʸᮮ2G[[gU]{C*+@cyˋrsCDo1>aZ ú "ϐ &޲QsHnT+PŎKy }mtBiR~s|YOR]:;-Ot2$"x)!-kukXg =abuStʎע$EdT))EkzXC;^ E)TXCt.ݶhALa9p!8f0Yv׏ *A ߃M䮡ڤʓ1 /{q|F nf*PNQp47 qM T#Ջ;h`/CvCX%V%x d{S;5-ۣ>;\]- }+dJ|fգy8V>-Bjn>pѯ2R ,}IE%JTO9_X!Yp*zJ;tQ^đF3V쭪|٥^y8lWs%%Kc_F1VXכ'U\spu^U=/{aKժ5G-Etc~TPkvXM3E"E-þo#*9ʢp̯nux8y2/3REY`֧s.#Q×ZP(}iSKcD ۯvD [{* <|pN~\E +4Y3ggd;~{?׀,Ud9PRy3:tC䬟# "90WNm}88V<gprOot9?)/qX@M3M 5T0eA%Zyj3gf6\1E:wZz$,Ydzf=AF}9[EojGhg$ uD \Y׽" AsNsW[lLyWTo:[t1GmIS\"oTnd gQTK,P'U' \lOmFe /֥ {$*@3f< 8SwhE@tЈ3KUtf%߄HPN}3BJq$FYT^0t$*P2_ ^+*iHb"̠ t4jjՏ!jIJ\zl]JGV +R;d70[e{.jȦk[HD>)fuuSC,5DbHzE(Dm^gu=^lZPͶ dܥaZ4b٣96b|@fPo #DZ׬fLp@LJ?K&[}=t]bwmA$ a IHn#WsI ƗB,J>f"._S֫7JWi+ZsEʧ h)9*Ǎ+XO?@gmg{,'@ŭ5'.B(@O Z,n(XbEw,%S*rQ9;Koy-&q1Bqvңq!iBec.S) tE:8suD)O8yU$W]b=M\hЁ*(K7)$"PzuȀ_WS{dQTh4I``aHa=49޷L7z3ȼpUikDs,u)`~tsyD7q6n2SF543nHKu'S"V=dCŸ uZGuyc+~rK17?ȡg2js00U-m%[mg7jH$tV,R41|6%0j4@*WϩYZD5XHVVR w}8wǢnf%SO3FBu z]D!M-C~ rV;HGI@32W-XPq27 ̕v׽,L UElYmƛn` hhZw /Ihz`pT˳z(KӉse:Az  Sk+*XJTg5ɢX.vUhS&4_JnYyF\wJˆԅt^SFH}êJtd-,)MʒLn:+sXrGh0֐ü]t[.xa+Ԙ]5;sЈE6Rj6HH)}oXmԿxQ"٩xDTRD%+l^dVW gt0UpŲ;RV4 ZJ`cgd+=̴kJ.8݋ uCׅ^vƩω}taUȽ}BCڸR°2YTN~:0(qW҆10Cۇa&f(*lA] *:Gu :ˁ略XmYjmQ0nrU@U0'^ W5a5R@1rިr0DQ3{ K'+(Rcʦm+itkڒSP^yZN*䏩Fa~~n m#!W!)$˃_E؄VԻYV Kpɞ~Қ2v$,BZ e۠ 0ui1IGmL#= l$ǎ=7U:yͽ;j nQ9\ykS1.o+{=% ~߅L1o M~Tw8aߪ|^)[U ;xo۰`)(DWLp e!3wm+!V3R:-jcTڂ)s$jeJ0>dq)1ʒ(hUd;L$\#Vf5dA5*!ոx^n^@2I-fgmm^vc|gG2a1j,8z]5L ?Ij-nP"VI816[\-4wn-z"etńz1*Ez} hLEirիBn!g2f7;&p0R 1틋23ߢhlC<=0ܔhJqk;Y8)[ qaP K\ 8#~`8j$ٟo\Fć%}؅:~V5EmAfv%nm,1pkjv꣬/)mO:DnW3$/po,JP3هN=Ro:XxRDpิՖH(qd$ gam!>^~wwz<*F3BYzə5h),|^xiY29Z ~sI# Nʼ.֐c]oyRU7ߍio}=M-^n)|@Ϸ>w P 8Gq~q~ 8z_lyNcc!/^v2?!RZ#k~CXs|io7sQo_f6C3S Sߕ7'm~1N_Ц['u韚 *hЦM_Crj+o-)= Mkqybi>:9;Է@m&=h-h7f3]@#t#Ӎ].Շꡮg zM%+I~.Pޟ&Հ*ˆX_Ψ="{=_ x(I^IJbYBI1WtG{p~П~6&[n4OlmԬ|$gjVo1"VVj 第Qsf/aYA͓֙fm1 o{*}Z#Z̓d;~ڰ&):@wВ33m3˜~(&u-d }3(S{*R3S`N2X->DG v:d]πuTdbk1{ԧw8ȴ@КCҖa#Z3aZ%#' tX7v"2PN[(EdcҠp.#u/|o =+$.iX]fGOe^v5VJ U&@Qa*`9)9$nHmPiZsJE$ZH(ZT77{b_˷(mGwCgu9SHɳ#yw95ZPY#ݡ0x;YRzOŅ9JOSu2=#vsQ"wgδ$Oo4gQRT$8C B[LWVx aPIq\Y 3?^>8vTZ ylG#risfg-"{l|xޤɝ?n3/jQ_{CCDEn&WB zcCxxJV<Ã2*]*9G([l]%O`*Lg7,O\BB[p.sW>~+X(jc=_o.T^E﵇) d>Cn i^΋eVN-갡JUja c9n{ӟAL7 ,0caňѵ7{21ی2E,Ty.q(Jp&)zR6HFpDR~E:CK핦7+1z .%Fɩ!+}6Y|ڪT\~D>[e}HCR{§fqG") 55ftZ"5C9ie:w1)ەoVLM es.Œk%b%Kռg'Uae_9MKJ.$RVTՀ0WRuܺym.:G=>? Qs]-q3L)60KąGιϟw ) B~"7Js2YsRX7 tU1 ,T0(DIFp@͡SBǶThJ zPMFWA8D87g ]d#8,3jFڂ**xa BDB:鰦16n$]F >" [rӂ/?Qm+,%;/4]1lpk&]=2뱢5]I (SHxkr/ UjZi}d[gߞ 2-zvh *_QPW>GF#֙֋1vũUkZnvWr㸭)C,s5JŞ3N,]NE:"e Pu;v$WqU ~FymWOcib5 [g}_MzQK߽6rR(pQX@޺c%E&[2C_ߜxO!,p]e%~YeO HC^]GE} յ6E;DU*av:]Ȑ֭KA*7$UIwHy CiIky2 YxtroFwuSgڍRK+?ŗ[D~!;3g?gY-տ~iu*ӗg:Ja/r|u9_PQ:D?1yEKf}d!z9}x!Ynmj^Ŵ߹ =+^3Ћ0fVp@(T#^7SW0pnD^"Ͼn)Â$M"UPE^s: ÈAKYS%5jΦd(s4wKhKXMx,p+[ƿLaL.s$t-tv@X)܉›TEB͡^ʘlߕI^]Nƛu8'&XYl29o2mz,{4N3@Cal }"VexzP58v+0 8ϫuXPFԏOII/ چ79c''sLIMb~ ,4VykF3Zn$ٙKatFp`Mxh}N53*=7G |s޴ d|S)1\P ay8%ĕNZ w(dQ&fCg# 2E]32ȏ3 La '1Ѝ Z\I٬j_ ruaշWmmgB;{\Tz5M;zAFq"&&?f*J';ӟiIV1GsAyn#'~mZ@QNiPtz0 NlN}*KRB tW+V͉*1tN&hn8⛐d32 iPvao.,qn"-w ]E˻-o./n"+RQrT#y#BZQo>v< f<UI"ڭƿ ` Sy-YM7v'9˕տn0^8.- K[TeFte@%nX іOuIPsUS׀N%+YLՈ2paS}wN@hE{붗#Ŕ@f]-([q@+2CLb;a>%h+-4p~B_Ie zmbS[zK%;n5oŀzME^}^6%([n|W!H6t7WdP=)(8<<7<*+@p 8_~`Z{Xa3_QOos_ijmd-8t<A $kMT) Իo^bL$!ZJ b((AHdtQ-1?ŪzT rPz1-9” }~]֦tf4=r^M5L'sq+%z]iX]@8#Yy駀"cBn[g9Ё4"?Hhq[&谇\MiIaJ'z ^NHi$qS9IO#݊rD/fz#Nf;s#%?IlHKq{$0DQȒGY4Z@y$L14*O#0->J/P`wyMՔh=ɝ^w<{ɑ .٪'qPs3=ܩgPe XݽmIlR \]Zr_:cOp8ha  tpvȊ2,kzTD L#8:wn['dJ'K7Qth 4W cʧ˗%Do}Xrx?zR j 4drʹ6 /+yo,AV_Ng2Be֘3'Dp65w  IaGI <O? IAX]əGNVD M#!7#T*^)f4{`sLi]Pp!UCR˽VrsCg0X:-wL#"]Z^,><]N% L?A)RJ0E@"o~4ۈxsV!2K^r)tV!Ş.{䝁pud]bT eE 1ަJɼC4mRMw>|ޕFv mJY5{ʳm9ug[#-;M~yUA5AmarX\pNIJpDm]7вS̬LFƒOH;ϱU= =U𐘅n*4)_X ;TsF$MR8{_J*-tAa3&PM7{$"+h@5\Q|ΖXv0+h;x,\?6 /_`J[` %󿂐'%珳?,߹?W:<$ބ?97D?o4h["䜶BjEia,zʛSO9r99g2KF_֖QgU2…3&l7iO}ȨϿ ) ÙSufDȑ5VsXO= U;}+2ePe(*νМ@sEQ/s.b *U:BFЈϥnj@@}$(gq2[_\gWOL@d4gw/Vz$HJHL{YF| &^I9Afx.9Y*b`X՛j[.,ް?(g1voROJ)[i"H4E#q{b0tuݠ+r93ȼ}>IX"3%K)l֯{1jV,:sLp졡[21D4ہ,-QDŽTlGg ̬$,Sbz!l`0Y;A9`> ,OtRN"{,\c ~U]nL1 ͚| t0&ۜZX٩Xf웛S. [*D`X8'֏hM.":"-K"N:@|RNߵ~աQGoN UhINX=Fn{]tE3%ҷf؇L~ѠPS2(>]b\m0|0"fxnd̍] ."|1L'^ak);Ϩ u\ 4U twPJ( 'M cHύ>"ZMRva{՗spl= S97>R\'mȷ+mbYdR4.+>Y ъX e+xv61ÐPn4e,1ܳ:-\_ɐVL^ DB`'Z61(Yn)ӐenAV)98XI3KSLzmZPYgzlcGkٰTlѠ]Fw/YYLL>j. * :&9 < +s%ɦj,U|n6AÔ U0ˤ,fl>EaskC&SgN"-ké0' 0 YV2E<^Sd[uIVL ST6BU$:P-<>y R :7t*CS恛RrJaLSr|[A mcJ/YMCo \,\.H;o2A#SHy Y }b2!f,)=,TI%MBAa:6k#/ӀDءH.>tX 2>s4- 3[>a h ۥKMoy#3h~D DBm  d54UNgL?h2;qR,N'*m*YdUKv~bHWi UJs T!%lFZ4sTϨy3UEz3`&xf#LXR5D]Xh爫\ ');T-jͱ`>j02f^-W, N6j3B0Zv Mc}|Ŏfd&Ke:Y [a7}ժOgq(X`躿gtH3B^3x>K7)@WF,Ov Ia،:{qG+hy? K5,\c1C O\R]Ȥq[~/*ՠޑ?iO53oͪ} x']fƀna.Lհ2c秥G Pi^%x<Ԓ:YbFUڮ[ X&I4o]Nl.]8X*T`(} *58 ͌qU@5*Wt\!%mQO^@f:-l f=q>˃kLHFeThC*,5"4u{(IOLx4q! H&rV.m'&AұsT<糌Hdܠ:ԯu)i  >xcFQ;%kF̼H9+9D,BC}s $@Ipo1my\bt#4ơիX[=`Dpmigo2ދqG3:T̂0כd&xe0ׇ.-Q$?EͩOu^Q8lƟ%>Ta٫K,$H؛a67( EϯKZ+cܨ(ͺP/WHOk&KL$:[Ҁ+h -30ddp44aipehzƺ@B43_n:ERg䔑E+kbXvK`u_JYq_0Ͽ m:yiO[4fL?ߕ&8پ[+zt-o|u[bng^?`zn|sgO>g>/r8<lUDDxƛ\H0&px YAoi6NAHY7'( a]5ЬE O8g<7|M깪pt[Ix d-vL[2z Y<*fge!g3J>k/f@i!Qei<x"UOEw d'ڲq:1UP0 |;v,Em`BG oQSQ+&܎c)ér$<)jŀyAʂHC-h-ŞYL|pSc GYM R!$"8M9L'VwjN)T-Qk܃O=c<v3D ɰ5I[n d#D/ܼ"ߺU0[L bPdMiNMAϙlx:AEM!朩*kHHќaY/"#|R4~f)]cA 'K`;^)y2OU}Ҳ@ad;W},=Q]M<ID< R*p$ZHRJ+)NB%N qE H9]E:,X.eDT:'Th+5y;z-!7d׹$_/D%6tfe_K0&0?hN&^KD*μN2STN!ϝ,ĴM+ZZ,)_ߡ\У RQ12f6kb"7RP}'S'xo A̬05 0γ%cyw}Lؙ~ැDE4}@0bA  J..H%)F;Ցv;+ZIŹ!B2[Yvyf ]s/SBXem-x0O78;3AJbjҀ5S$J5Sp ug$y +igi n (u]F0!I|"Agd92Ч&KLg06fɂM>G;ړr(˴!Yz.$7"kW;kI\۬ANJo @ʞv벢kx%R\N[߮2Ϋav1X*ɚX9b v&kWpi)@zu rxk;]S\e``/ح kE?Il}Jpndt܈i1IJnҚd!tQ0(tjLKȳ,T.tzu;iyU\h2;>nLҫ+@1ʤ)z> 6hŢ$ˈ v ޼=Xhy4M| jn,7pzGNf\/MԳK@.@崥Orl.*.zrFu>E1l^FoqbeBQT $[T.q,"t`CJȶ6k^v ə`U+KיJaPM q-Y U)/(rR./P/Y"B9|UX{>i:ZU[1G!V#bR_gVE}\(jq8F/gVɈMқ1G+7]5 o >젇.Eiuoߥ ծ;bUDž[CscYO}ψME-Pڌ81mMi;EN=^m}CK³ft#VU 4oH1pP4 . /ÿm,r9;+ \?z~3ﴙ#`7$_Tؔe,"—o}?ݹ ;/=`N&/0gSO4\4Fk `xbOc6!cc-,?0iesSwkEEC5c5 TTwNoa(ffNQC(sދ)F؀(4X[D$C ,I]xLYJ:$"Q8 $ bbQseIPDNB<Z٘=HS"-`")#:Y~[*ZbڒsX ZF<ȓ}15SAX^#ʭ,w9E<1Ob/CQοBA`UsmbA&suzH" xk1mFfdw:tTṣ,ЯPǬ-{D VP!OR'鎖W|i-5 PE. jr 9x'KI:,),{zxVA|%DRPiQ`*2%txЌ)$B)T%ioQbMVLuqii/wͦѴ\qܙ6jcSA╕Sagl0t-2dQy$X[Bfj(0 eݰ)  vdr mMPSA%5ţAց:`̧45 6zNd+z0K"wP%Ef( 9ˠ,MnCURJ `m,y5Xs\hkd&"2Whik5PI“Z?x`ugk b`>XKD[+ l`w]3 8W~̌+Ɛa UHBd wOoًĠY֝^m Rp4V@\3SYd͕DwmBL~S=Z?,YɃrIF}\&GQfNr͑ͅ%2y@U%iSBZٕ* aLzZXyAQrS,o.WT:MM]j727?ȣ)2;3iԶE]7 qFZ^KZ;[! U&Y݃ yVvIi8  9pbJ-Zpyfo+rU%ٗwf㌴==u 5b]r+*9:re5-4W__2.C,:[9jEP,[32pDdQBkVNlBYW1K itjLM:U:jv@$44 Bd'b˺CA*7Gg=Ow%ٌOWY ZzQ;[cb*xL|bM=!sK|}ك|P@itՀ nnꃊ&=m5[YN]>.HFԄD`Tut8DrBȂ-mK&S _+ldMUM{y$dkWacr!&kNwTmӯp+J\8,cTETc% 4hv-E}:R4"e&`&HDǘϗ1JQ9eQYA81ɝU|X~`;*Zq)X/ӬhlO!v8*p"X!v(^\+JJ' ҉0ގXekRfLIW&"IJ PT͠,{sV*ޮP"׽]tqHiKؾJ+ضn  J m%d20BtMZ5 lV'䵠FZz,{XhBCXҽ"H>!UUE  aͥ4vD h",Z0I^S5X)C"~,%(:y'Hia#DȊb-:]$ Y Yt@^w$CLvF?m7kTV2,rSaAƭN׭52 [ w J~}mc:U,"i6QGEow{'HtH@ K]\TX4񱱜+ZJA䂁D@@ӼiYYIjb:dED"-dNVP Ö.3i;d^sǿ3?GpBztYp5uPABacӾL qt*abӾJU*RẊM*Ѿu_ņ*2}*6D\lw_% UlW=f=@m[:㘸Rl+9WWakl+]ĕ^)s\W:J1qNוr]+B6{WMz??Gm`vkhJ_^g7ˉxϯ/W'?'\i; ~?:9gujк f?t8A7s澼ڿNWX9{Ϗv܌_` 5u~Ծ6HD.T~w-%^`)n `X{¶-\j5C{aNJ-xo\ļ `g~_<8+M@Tum\:mxۼiY ~=wӹhIԇFt4_뭓TH->ˣc]8ᡍ0w_3);vg,!G@ᴵ_Wg$8DB㽛hgk+W|Ϡx=wj?~w!v pXp૨ eD[Zs$my P\vXPY9 AELÞ{j9Yx׼~ţx?H wʒ3)1-v9z,@sd%TT2xZkWׇL$,.yq$!9b0$嘨 a;sc[GTҁT 4hYdھu2ǻ1)''-9z~hռDw b/PomRq",o.z8 Fv_Oի͘z΀, fݦis3Xc aȝ:#K@ Zg VWLMz7&Kz3mAAd㶗jT'LHq{t 1t㔳$+'t; :b &rrSN*6PG;珧nn)?pʷe;"rW{rySON9OΗ_q6X&8Bᓳt'$Ǥ|r Cݔ+pUյg YqZvYͧe91å/?up 1.?\>v 7\ol'{vyO)_Gb{>A 8$hm'\/8ɵ4Eg,JTLKh<_ uH) 'I쪁>M"z&;W}mo> }+Y 2QE^ <>#UZWcmCnC˲˧KC>bv ?[8|,ЏhoVi ¥h V'>}Aӳ dH43nxxMPrdm,u5K-ڿ(- ZDx݆JM=؍ζ<}@wu\hWʕ*CYz>W\gXE,jYiIVl|?縏mLk v*»貢}}~/ |qcG4mGx 2e1 eo-\=3Xݨq7'%ED0i8evfѢ/gw7qC%sxy9ⷁ4'YJx>p+kic9b{/QE\hÙX޽U;{'0tK~AMii!忴YiX y_ꡧ6s((J~`v?,t*gkZg&XEI 5 2g-/cPT:ws%sU"U0oC[̑ a)F@)攰T轖zAdVo)$#]xB:,2`[nˀ R8).V~"!XmԣG,i\mVToglKdD~Roc?gNR7n[Ʊn\Ek8£q*Ha8`*sQv^=W!7طWÍl8^ 7un\EY>n\%Mqv9bʍcWCn;s7nݸonxxA|aUE3=ka aa:İ= ð{=Lc۱av[{ax ta{s0gC0=n=̶x7>0kuaqD(^@Д&(3_[}R鎪&~9x,a.̏))V ey1*(~b1埕^r uTo[,Q\כp1]rnsPw A=pE+RGV̛$l$$3)9%@8f>D) ꙑ0-{FW| O)ġ[ V@40=6IRhti+yq`HXbK6o $L)dmLj.mNr3Xu\5AbF fR'-=Am$i$&jb ~?C+ncj~.ȏFSg7Cn.Fue0~<'h~*hrJ;wc_8nWFBO{.Mlq(W\ w0Jěm]#WXH ]/kpԌ>j9?}Ճ):j 4~R:?qx?n "ڟ8Iト6^mD >L!(UB4ڪ-`S"trpF=5px Q m8M|GO`p:7 P!jLg`=፪bQV:~8.o{v_Ao.}8={pp{Kٞ6N"M{ "q1?2ySL nɷϾ~qڃ/'TI Mp}dєǣl?yeňʞ|/lհB?[ S*xᶖ:E|7RBQٖsӬ?-ƶ7&\+**Kmp݃U^4e9P 6e89N'9<ה!H+ TP6+gزBd+}[xkk6=^K[IXqZ5}[Xm)f97-59>01ܼnKMNHԭk8&8e/O@"N\zͥrᄴhN`\pbNSk8N 8Pns> x"}փ㕸ygbC&ORLJo6~& Lo}p,3Y^ >g*d-Fp߱ɾ<'iGwm|\㱼+ ,V0$񹃖 8aoaOtƸ6$zh79BtU,hV|^%ڸ1YXMce~F A HQ44N5%ReLFg2,o#0@Yj0X&SbW"hOLiMT=wip,W-|O_tUTWCc^c/5؝F]9لeP:,jdgWg|UshrC`]Y9_LіKiwO1Z{?֘r@M+Ĥ+~ C pqj e#DȥIJ "ӖaQINj&DDm.8+RgJ#,hy[~ӢJen(Xz@8`,%Zz!&WO!.6~q>MBEeFPLrS'dB|O86MQ UKi$}$iίL&LYj*mЋqcd1d=E?Ў]3jxonO/*Fgxk{v4ߺBuk(`NXD<#/~Oh3H8Tp uaP4A.@ ;ė%y](a\s92̽`y ~,k9#5FkrZ0p-.#y@is9xXG}-Qj/6?r{9؏q-f<|,A\0 ˁ8{Ϻ-,%$~/r%&0>{9x${ӷ=r~\Гr=]p9(f)zS@6GMXd6N{+m8laX)m*l? cv Vp^[7/9MAVOqLJ( 0--ЂEiff_^3'c1&qyұ6E īr2UyJL'{.BVx*GW LǪ\S*oҫjcUKeZ=VeNN2*#VgUm}aUkU.^k;^wO;UlןXI*cWǪ*۲We^2hH?VeUZ3\tʜǯU*'UywdSe(0ۓ#lV1&%',Qɪؖ!>`i]0d~y ڀ(>k-cﶖd -C*8 vM##.ⶾh'`)h 5%nO쎏mƯUC/f~?g/WV"# ʶٷΩep2ٷ԰})zQ5V1ChwW}OQ^po\oEJ/_WeO{7g KL%imk}Ig${=vͽagf&xch64pd[wKٗB&6l>О|9z:O|F+&[pҊ_q,ӮKK^Ә˞*wwQR1 b I[!1L 3s䶼+cNfn.q(U&R.@YmHP}Y9zx:G :yR4rd#[HF e.v{n4cj~bWeY_ XzJmUt8(NQKlj:u^\pQ`3<%lc?ˏ# LP:wR0c^)sX]k??k^^t㵿p yk폧8k^-X_>kXb폏'7s]k{Z#%=u|߀~ScoZ};kcoHg^k?YC^~ϞFw!\u ZI«%ݰWHɹ ai>%~?Kfuu Bep`\ԥ}_E_CLw*/ Yfr?Z24Bx]H!$8F$F|YI{¶! ֹ Ǐi Dmx. "FfV"'sb]FW-.~&!,ğD(h2YXZJeJIJw;Z32`N)ѝ]%rr5e[-g6R* 5ᬗ,Ŝ@56ntJHL cMڮ}%}}{`▲N (."jq{[xlPٙ\Q&$Dy͎36Ʒ>طu&j  q8a6'^3g-"[]Ʃj -j^nNo\gSp` E劲nL- >IrecF֜,  2-<&MF:pKo9S#m ㍅nmWB0"pczK͉e(eoP2wvF.rᨱB)(󂉾@, ts2Q H/gԺ}'ModB;KJ߮3Hs*mFA~kyG#gg$e}#, `c >೴rw",֖B'QnnC}c۲oLpf.ӝycVR-BإJŽe<ܛe;+<۩yv "o1o g>&`{El]Et-jj[i]xŢdCGp*߸ w'oXr Bh[DK<éHñې徱յۖ}cE5*͏;érrR=Rұ@eD*^D~zHE;{ K@S'ħ qN~=Pba1l};'ipN]H}݈2 خ 1Z-ָ4 Vx$1]$sHr҇GBmvI* KR;N{TSn,x咸}$\.I. )&/%]dԞa6KΩKR]/$g*ڱh߱ ǷKw.U. A\=,LdmjLKᒸ/ĖPHrI#8]. 5_.I\q$x'rIܾ\8"\%zUpI@/=Kg 7=^Dl&GrA ˲ 6,&8$}Um|ۺ& bq( Jnҽmm0[XL)# #&'THnܱĿ{"/b!8,_?40߿;]uU72z,WßXzSR#*L8 ]MџXY?-k%¤cxr GB e^,Nz0T |r />P%Zk k23wp`i$-ݡW$8OA % 7t, endstream endobj 2835 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cont_pcl_par.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2845 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB ] /ExtGState << /R7 2846 0 R >>>> /Length 12412 /Filter /FlateDecode >> stream x}َm9+)kۆ] " Tw}H ;n€+ADR$WxWǟg>^7-%G-=_}>;Qx2Y;׿o|Cko6Zm#Zjs*GҫiM_1WS}C|-U $!gak};'-gxR'm(TZo2`D*.{]w uH=k!g>rz_cw$UJX Ddjf5|23w(;uNe&:5s{_1pRQDR|s]"$Y:V/InbPaz~1j?"tbfz^bL r={-DҨnEdLx e2P %Psa 9MԪ :hyXT)+@ [֮kLgc`» 1'\lJU&{m6q{{{EaR~O0 2@dl%kqSV S^cSS 1%s^ۻ[,ot여9VE>.B ,o`k%4һ bPHNa\98qagf8B:l& 7b@ae:FJ/wWJI80f;6uJhvjSƆ’QFeWOMR/qQ  V4P V*(bR["N61.,*6XASrDÔPdi Md4Xr!xR+gSSƂ4A"q+Vf-Y*N3(FLI~M]s~Oz+)dF[aXf;xrA1} (MNXˁfz0ϓE1"hP.]elo3 ,rZ@`` HL.RMYks++8-v%  8 85D`39%j غxo$0[}{j'vBa4y$hKw@`}`y{rZ4kG@pDzCDZ,!RKҠhKi8]9(# 68YЉ% 7ND1'Sqxvf6A/Mn&KhM#;ivy@|hy!"$-W5CV00Z-h&C`NݴȺSJ3t⥀C`~ybS{AZr\jکR%Njz:-m+!G4JA;lm~Ol!v uYn*>1W; :κw;:,xb\,n vK5B\8j7ʽGͧ'G_Vz[%j2%i\-B]fij_-9niZ-]eVKw\-B]f4ՒcvUfWK st yKwEnavUW5?ޕgWFch~iXwxM;Mc 4OQe ?W/>_^eР׿|4j+]& 1CҫQG`*wր :,c# UumӠTAob^zx &66A?$L4 `iJF㈯ A1Jk a`?|` al*)X }Iu hP4'ybi.$ozW@K$6\hC-1ADѮ%htqmczK@=Q0VyC WP:G(H29x?Yc`bPJ9$hЯKxCSб@<'E,𩰭c(. IUETYq'w Mw/oў a=Ii-Id^4'+X(NmṚ̑6Lv6 SЯ ?7Lu}&Pb瑼+`OԴi .eЎ͋CLJ|q$^vo2qX@D9vCee'yuI]HU5rX(M㰛.ܵ40_Q;p 6LYwc?Y#j[8-x`֨:- {FMŶ*Kg@CzMo1iѸv={ZhE f} 0uNr7 N4Np OUxUD5i^1T)ZFw:Vrd# kT UB5UFFCS$U}aAJiRu 'Ta}(.lgҺE\  ;. v}g``.S]z %bJV!s)}Yp `<&06,xEv.Ȫ4-/Z4,zYu,w  -/D)-/DKڤ\^,R/ys1(/v `xj7#&2/y!ņ]^,xˋpyaZ.y!Ծ```a a[^ P&lia .%hPLJD?g$ [ܚkrS;;bbX.8ʪ`wa>dIW:5tPZ0dsHM$ V&Yj櫄YAC͆%&fh` Di%ؘ*#ĩCI3.I|RQB܀-t6s8a:M-rR(RE`w lfҘ[axqiZtꯝڔ(.2S7h7Ha14_k I=;毝p\. ״7&AWr4 K}ҸKt:4ق;VY{JTlK :uX5I]"p!7'Y!QyJ$S4k9ҔD-AE*migA 8Bf\fy eGLXqD2] 3hG qIc7h<M^-ƽ&:z4#|c4fN/i.fq}qA %+O }z8&z:DoN- a{˜tɌ̕1X˜Mu /a ]7ƽ[>#,^˹ƝqH^ʎقyK6y4l ,:?W;Ddy.WmE*zJ}L6㇉-ER{1EǍ^4_1ŝ؎>^/bCW-:qsɷ * fCS+?}œq5@{2F3W{nnCUga~7JBݵ X/ N=q\wc }\ܱh.0qĘttʔb^%heRxF1dk ;BODhbbÐHK P]$0u Bh {V|*6 3tb? vÍ9 i8p`uMqh[0+Xx)A=wh [d egAAO,]+N y(Uv-1G)}wa*Ѩdg@AͬU>ê c tD\?uQ?a1Y৅lLee*aW)Pk:+ATQ57lkvo7[r6rTpbЁG1I1eó1&۳ ܞ,eF\L^b)A|<{d˸-s<{\mxˆY2N \=ue6v<{}Ló9x(RϞhyy:q6˳iT<{y/ކ]-x˸paqx4˳Y5-2dzu!9KEI8\e% pF=u{yr'O[P[u }?X ͜1{ .p#EL̠= G(D^ cH{jDzԣ$#1)vVN>}$/h>ct5vdn;ߦx5yFeí`^/؂g\ rᆇb֮ f{KYZ81W.xKphE-?WB1嶤qR0Y!\,}<0_1iA ܙI$ƚ^AgQj82:(j,LcWͲFkFk* ]0W (|7,@g`5M#4 I8q=[z'C5x`\iܴocrBBX֝(-xH~]Wanf*YI1eq"]0[9 K<AZ.ouJ ?OEiGC0D8t0mA Vg` <|ENJ-XFr7P$5Fqc@#rgy|b:vy+w 'ʫg٢HS2ye#ݛ\J.۸a\9 s ɐW7=]P>g+tI:iӂR6ƩeiC$lch@bsWcM%,B ŝḨBYS2s{M[k[Td^3i58bRD]n]=hCF-6/b9a}l5jI1('쥾c^؂[5xn52N;s0IF )Qق5Jx(FKbI5 p jY7Q}FC.+2WL4;-M4d󣸮cÜ9_Sb)5xdcqAWs#6`r=o%j4}ajR\ .,4%4q n .Mۨ1O%U# % hTDFѨXJX+AdެP AH`Thv$dG nA^+3Hzt%b B+g%X4[u@bE] 9++{Qrd4lD"`LKIA9j@\L\_n5Ȁ.:h'AUx& Wӟ"0Vhd$vи@wDڨ%,XX"H}]oU ~`Eea"o-a\Tp*_:ceYM%$Ue@Qz]D, Oyl+ޢ#S~͆<߸Q&چrcKqG炫oQ6BWtN)EQD\-<@]][QRaVjS =d]x Wۢ-`y) (4J7s ;-EiS׹ OU !Gu<-ӂD #Q>S? <X Œd<٢Ol>kUB7)?_ˢ"öyW WS yLk+" H>bTV(͌0uOgt+ S"h<nʏ_פl4a` a֕aSHS!&c/enLwax̥puWDmF葴ihM}Bݰq u0M%rm7쉞E\}t%\%p ]]05c0h*ʏXݰy& ƈ]XL]6 GQLFv0IOI.E %eXo=6Z'5.#1YAη"n;rjC 6 .xQ>58X-&eQ^l /n.S阮K֭ {i[v إ\9= gS,-'/Lx`F}cjJDvc@dXu`'e8^,?  m[P0RdZŪ{v&ٯBF6g27F9)"&m{\q:wz sVo EvM'֥_5*f /v/N9$>SrIFPSaO.RHíDV<[NƄ~Z@hjZ$9Mw(fAnb_<-Kpz`GEFfFM7P<$Eo7R, 2)GHV?o L 2gHdLDe.j-myzb9-SIF/g}(>ZC ;otXoF1e=Iwj|M/>-?30jcc%"q5h]Fb@* 0;9eaH @b Ff-z ĆրC;rL~"yh%2Mjra7@LRO' m4tgÄüu~ԥmxFSI[G4Ch 3&\QdSl8ɯ\L9(cx2X)S&ܐ}:l-uhۮn ?qӣbJ!_l#U^U?EC-M}5xpdK y=ouj8ɞ|ҕZMNHB#Hp-d?횙LAhyئܠDG-Y8hZ͋n]^car@q퍡f -}苮SgJۨhlܤBrP\U0#N mq[CɈ7HZGm]mox}eʹt_BPCh7Y|BZ%_ުakYᑦlJɝ1Mq0OsUY@Nư0):ahJ{]/. qb t'0v,'6}Aѷwث}4SIi7 9.rW:)Ki޿xՆc}-أ_"2zWO-31h&0L}vPUwְg7>/BIfh2ؕfi[38yf)Mj1NM1_')x{IMsޞ_;bE2{C0O҂y3Iheވ1lҔ]̩Eje϶t2֛ٗ|sz-Lh}gFGY 7Dcݦ)BQo/7xWoLTgְGW^=vU J0G>|^/"^H=-z%w ^Ô`٬V^񃯣7t&jY'Wsy`(`Jj]XNh8)ɾ^ZMzһ0Y/tG"kbj*1ul~঄y"cJ*Xs1t,`5F yx[5*@B1+:l`ֽB}Gg9xeX Í#'QfT6Al)AݴO}4k%'$-nÉ)?&Gb 768uAz@'l} ߓ(cn)#4ix!B4 ?\cߜW 'mrXSDe>nqE",\<@.؇-oLY`^^B׏  endstream endobj 2836 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cont_pcl.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2847 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB ] /ExtGState << /R7 2848 0 R >>>> /Length 30341 /Filter /FlateDecode >> stream xm%*k. `pwԩcPe~#Bܘog%^2^}J~ۿo~HY֬?W O/ȯdƿizī3?11=WKq/j4cCeϕ^뙟5giΥ|>5Eo-ȟFs kUR]OzTglZZd_yS>SjZ,ϵUZ\;V14L_n0JJ_|V+?}J3kP X+'bL=s1b/xAGH؟z]T_-H*d+mz|AS፵almT>0L,Y&9F!ƾ:\6 50vJd- ѭagKW=0s)}4Mb̉؞D/Rb1Qֺ-b.y7LYOa o0%}LLє֤c9)EmZҫ hm c[nNjw91sKX4< !CY<ֱ)#ǞJ=2kiVĵˤ6Xަhta xf4·iGe"9oFnS`0g'ء|vq5Lmr L;!=cS486i-scӉ6g qڧˡdkgc򦑛9n? ]sӌ@r>E{ W5-taljC¹GE^U-kmH陶<5 a'<3Wjn{DY/t[*]&FhmQd. ӚFp%`^x=D؛o6 N[ aJ L+>Q [N;McQ]mcZnms ۘ5>FcF~1;lş1:  `sc[V,G7}BA\S52NhRM쏱gֶP`lvҌ11\) 1SGi`[4ghaG:06&rdH"ɊHGFUg/{_h}1h?0xv|UW`l[C|i)L>6_cDtVkϰ-Q:MW٢a@F@'P2H.?e $. AhjڱvM#A51Vvf0Mل{_6> E[W>mk n8ϡGlt &$nnK4aJpDc[nK]a);ɟzp<:a`*D>>2a_,BV7E/ƔMڜ}״L`tv?f<  l1ufZ#}2LYMkl!ǧQ}18=N֛pɚ1;ոVN"$8 Q&vA_.زqnsJVWMt"6 =885y4Y!1Tb;h=]P2uCIyFY$Lٲ*COٹB\j,$6M$ٻ*(QB%.#XA$|2{Qݮ#Ǒ)b3p)]S8 9Kmcl:Y#Ĵ֗N+4{:SE@Rl\ K2M2O{0&qY H Et~ck ePܟ]BD2k < N)5WI+w2 ʲՎ+0(͊^DAhF$aW$.0t$ 7O8L˟Jb ('@cػp ml)9S!)j#b R(#k` iJeS4<g3 :*0!14CL&`3eNX3TP n9aMjp|c^ܱт} t oAiR~(2<>C{;[6RG]d V"1#P=Dy2Na2`Kr\Ť1Pț !of%BJ45 M&ށPb3(=YOir`;tAK2R4 [F*(M HIF% Pv8+֮lžڟЁm=ډB0C15]LCHfs/`+2όS'XRy %wZ6g1-a4'-lySVALHq2+d,(lI#6˲B]&R&M ̈́*أl5L[hT ?|~ ck խ&qJgOڇzh#$$#y~4 މ]9aR ^#W) fڏcqj%ߦ1(ZܾqI'iByۋL:I]Ccɴl-47!;d58u M#@ M)cDs*-`nNn 9jwDyg/G vTJE " hSvYDχ\-[" {yA #;ƘA1')AM~n\UAn XØ(z?s2wWs:rWkanm69+|zg~V|@ILC S'f8tqciN}xO\iB `TW;I lтPxB00ROZ]0 ǚg @p6x셡?4È'V :; vFV"G[ YQFK]9PXӤlJ4bc9*#͛zj%:ə69VW[ұd5W= Z`% 2[71C#50uOgÌOmzRf01 {MI;&SNEE!M:|Yi>5c@Wx}":x501op-"ZNfuwBLIK19ջuv'/1.S&6\Ĵ49 Z`wY>@;LB8 2fSMB}[ȥ&,}CVuw+qkØ XԳ;@,Cp;6t!R>][6-V0tCք{ɓp'25dv=冯a sNb\KQ&aߦnz:ԉKCAʗD2mͰiAĚ >1iєU.szt CiwBQ3Gt9S5LG >Ƥh`'NdKb!.+ 8>jbF \.6ĝ? 7_Hl_)HVb+ôO°q3e~S]qHLG7XLWB(;^R 1&/ä쩧aD .]@KrfgDCP&[#-$՘5:qs|/ phY/gsIK1e&|g;z>ş2M3#)17c?h2 :S _! BK.:M X9twC+ah$0X!ٷt%ŘЊ(QJP da\03a QkކjsކH,FhO c4D۲]/ S`Pw;FScI#r10E,:lM%-a|Q//'6 @T5zQM1`h.+Eahq \4`q^1Yhw//Bs~O CGP?{IدOʱOʃ3S41GRnmO+$/y,^M!hf/8DôLΕ2V w;= ,'rM6_PQ|+¯DD:F*8q}&03'> Wj krLa|*|}W˻c(sMIz <~@, /PKbT f3BRVmA+pvzvV :/AyҦ9$SDeSҘMĭBĒ&cŐ*2rufC+ n\yP:a/%IP?i搇܌xFmY 1ZB[)KRnjF="lEncq; dR86.9BΌ"T'\@8m8.! us\r!AD"Lch]#A  Y9 3EWX FrN&!c_UԀf>~1eB^~`kt@@D),P75f*#B% S˅\ִ\}7rv`9v3rTiXt q{=8(³ Cc\LҙύfwAQiN%]~hAE@ߔ|V4Snh)+L RI-n([*mOL@|fDZ ^*%*)J.z{I hw)1a00י)x1NⳂh\=nYh M4 g)nn( d+7$%!3Re*[?n t~H&dz)ɎrMԴ0gB9SʹSTdɅZ0V崠s'b'𐫴m4,; + 3ꠇ`rD*M7 (NhٮK̢oZXh GW;R\¨ =d)oZBf RPc">E!v"[ɗtd2 D i+e37w[6\u}] ڸK3M)$&'muzb%]M0F^B qlMA-qF @cnJ~M2Ð8_C 7oSLS33`w?0?z?fc֦>f}ǤS~`~`T0C1ocYq5@ƁnR !, OqyW@OM0 Ӊ?$2#z?1$W8ţn4q ބڧ=>npf<#={*$E1D_?x*[z bSDW}x^Xa #F^>=8tݟ.-ߚ$dN ػZ9ANC^I d^cfR"D"Cщ>խ]A('i2#KZ{A OtLƱWxqt1|! I4\d&ZQ` _DؑK(\^ GGUA'6jRʒM`"d|/̙ܳͰbv*iT\G2cE}r3*nU[%'1AqMteZk+"6xwyPt\$pEےGlҩ1!]4I';LLF/2' +. GKW\[E.4 x *r6 >B?s/Zk[xG$~Yh'iH -#D>&``*f1g(`&Xmd\-Ԃ6^@LE,#J$"9h͸0;a.<Mi$4#,gFR@dkq] lܼEN顧ڸ}f  L Ȗ(aOCO!S1n#엜@( NLTJD(!Gۀ<'- FBvXa.[Z[~FzX2}zH0`.:J:z|n~)Q( KO! L)p u#DٶwDk 1P"U!9muຉ\ܘL&ho(^c/}8dxsbmYE3-hS3T~n&>I]EKf54:*)ig4".cE49DtƩ$$20i[" yT69`Ht'\ϮS.= F''kTh5:|J.G`2cœĀO/~Sܳ0&MPã{xjdQY`Mq&hrx/אp@kP`(&4eg/0M1Rp8H.w(>#ړ7UЎ!2ЄA So}^Ů@< $8MyCEkgKǘ&-& 3@cSb*2u  >rx{ c=ۖ*cnTD@V mLnCn#uGwe DCf5hZvC6ǘ& 7Ɩaψ=d8֗P،d)1 ˠ Z]_+3uW-H$b!uc&RP,)/+\jP"^L C@R"Zz@\q^a]]<\:[:=vw,ͭ׽]AKwՙ\yDfn^>5aLKl}G Ɉ1S/H] KW!/bhCvD/eE6d8qjFFY)nk4S@a#Lj:f^_C!p4wI }E)Wà"R<IxxYȱ$ Y(\e2F7W (# R<V J-42BZL*ctPbR0G7ܒ1S~\M8rb~b,)~WߐcJh)9oV"hfJ<O2i%lzޑ/D)֋wy3fbD3|L8EI6=E;̋ELc2UdaAYE 9R[xp$`}ydZW@r2/%ODEcx){,ƪNQckS$1c T1(MfRS퍌K#'U ::Ѳꀾ?%.W^hz 0KՅ/11WBU*]|ָ/Hmp(BwEb euk['3y/e%Jq=jJ,DϺaO/~Ջ[E.Жw {fJĚTB]G~49{H -BSx_!f46gd.XNļ\{Ի3hĠB4ڋ"UyۃRv(D'Da`ŗ}CT~-Å7X%7:%S4 &tj^ ӺDMb԰T[pVk^A(Eg0 L#I˂ppWGuI9a뺈IyHEF WiRYςaQՑvŧ"ҙ k߈n`?qRXC7O%@ ՆB  FJ}AI~)4z+n3<; NPxF<[ϾSQ^^l]kp 9r%8H `nEJBߎ+!Gk&&9W&NzҺeʜʶ2a}'DܰCib` "̩2g-1R8SyT^/1ĬR/#ͮg(bQ !ISUEZ2i+Hn,c:SQ[ի Ɓ\ddL^Ra(Ĵ6Z2;%* c 0n#^ <)jp̌]l@@^'qzF!øz9 LS] s=[]8}s 7C f&jVϐI|~om=dx@D7X;`8r\?;p5RgɀOi zDNTFxME1^`ȼl˞Izͫ ̕AXVX f]Z8RR\{ޢ*}bn 9{rBӗYT>֓T52Q˻4AuK=e6f(TKzu?Zwx?(0#'+w*iiAL5X`CeAVTQAtx2G1!ڊg,2kc~I.gѿnD0`*C_P4V>E*+zVHD$ZSB)0@0N?O@R0I=/W&#^]pɦƧpva=p+,+=_bX,d^x)I5CΨaE#\eLBU*抯^)W&jY#t3eӨŊ6PTa݊Q! *ZU  kFUŠ9.' $ Q'iIq`}+6c#1;'sY[TMجxPC0lhK",]]"=KJuZ+ahn܁b-=/Q:@Ӫ/WqjT̨l,(W?|2wǝqz {/?~{߿_?}xgtmg!4;?T<:`ș,`:P.0 33,nF;p0@_>P\)D/LemF Q:_L<-ʷ'2/݀T!6E63R,܈s ;?1G1,ՕPfvwFv0_ibUx>,?I0H<ByEUuXÞؘ=1Ru_ǯrל/&<~IBKx`mIԤ&dfxC WH%1U258R' ؞@L NZ@gJP8ibnpFK6(r$#ݰpD=`/mN\zIa讜Xdea|. Mgi1Yx'aݯɰUu1xƆFۀr]o –U Ĵ/D|C>8lONE.b O֩mj- [pf 3၁.t]/͝3UqW%Wb(2/uRMn`)yF#.q8^޼v1Yzayi`|TAz; ,~ ȍv:~UI rl`dPɧ0+%KkGrLD⫀E_3g2TU9j5OO DΤ8>g0Dh.В0# ;sf0x:!ϸ ƚeŨ SdMln,0%篏Pp"܊EA=J./R]tvunX3q5w %`X}FD d}~/z<@F)J9ĂNў96I} [ Wz.0|ݞEQqs$Zln|gBYE n7S86ҼYa` e? yNR G4g^Rs3j[+DϔY ]4`Jo+D-V8TbWQy baH*t ,9'Lr8жٜ09 '[ aZUI46q87pB8t}gߗAz,J-~gdV/>{(ap3~:@~3ty%0DSgE5"Vpf290&ޖqd3=m+s [I(srrz:uZ1%}8w!xI\-rǁC<>@paLE(<oz+Z!A(ڴZߴyWߔ/SׯELB;hM뙨rZM&7i={|\gaV7(/# h 4G>bEG"чsvEjg[rc.RrWP!^Y:' nIzN<> ~co򆬋s0:gRy(>{l3\?=Snr&nra nr1NrW e{M9ԯցg3k=ͺ1,bF|&|Y¼F^E4N}PVQ=96't@v Y 3.?46rWDdW&Ԋ LA~z6:9*C0]PHL% tAb5^}k5oJgeyy`;D`0#Qe#!#0m:=ylW襙cgnW(+krc.Ǻuca<6&tmtѽ36+˦j *A du5`Mxԋq*{doϴkw^dR= KM#=T z I^xi.WXBlW goz@*cG[zǽ5&yvM6i_A.imWx{^<6HQ܉UIM77K#$>󥳰;j{D'Rd큶w30w AX^U{d ˚d@||k-1La R?נ)Ȅhu>ORPgE|"mjz! A JW\-0r9TQ(Ȑk L[_P7բHpmO q!f(i:k$J0b =gìpLevhD$ancDޯys[1ճsL=.w?lB_M@\n0oB}Ӣ1GfD6Va6` Do5l& ҥzDWrC\|uKr3(0#FsjQཷx\ [uXLDW'0uFoV;|-2mnAӝew%H1Ap _7s!p/sLp 7;ZEgp u݆&uA!ZQAQ\:0xY# u2Ɩ}&f %1+x'y p32&tSS7;Ss@k7XL@6 Dq0(yWJyG (rn0bmlO߸(IR[|8U5N+&`ƣQ 08PPihL4Ya.H, GW-Da[Y v,g1;*5敘B]vŗsa#} { 9#fc=hA^$L: l<>[XGA{2aGfi#0LF*ԅ,Ѻ?HQ/6v6PRFfV[&XժB}nUĞժ&:;FC7[jUSuJ#R7;g U\oUjl;\w\i1b˜2/\C1p[{o\cH d\f+o= \7|y#/o8aj,r2P٪V6cI|>Xd8so7|9@gngOf6`UǀUgkG?=l †qpҮ/jU?SƆM\/@LKǝ|Лn *qVipKnn_uׅ OuwUW- = 󫷤I6/ށ'ǁg⡩wO}.~e ABY毚)4{c;3Y6i.Csf1{/YbVYDKf1P/Y-bfbV처mEŬ|f13̛Ŭ*u&4u5o7m-Hqk7bV,fbٽMoᠶ:嶘bVZ!Щf1qo]  Pux޿Y f1c]Kzl}SKV _ƍD0ӝ\Cm3Ve# s%Z&3h<9޴ N2pDŽ6fd0r>9hnHט&ƃ9dv_d -6 #7"ސ?xg^R۰S:iAE;Қ?>s"0Y,>7(N= ҄Üh=zhoGyqXn ́>`Vf9h˸a'wp>bTEKP8Mn2VZ'k!ǁ`_at``r:-c㴔 *:~OԠ'oDl%}SD콇=5ClSz*Q.B #0~Uˆc+$6Xp73 UDrbN $\&L#~O2}6HoϖڛAĿL ӛ!-el)>kܦk1}6.72}6iLcl(}>oφuhoON9sϵs*VcclNsLLppaqFm.gM6oަφA}3}r] ;fl?`|Ǜ铣L /u`X -Fa߆}fqZ|i0 !H P;V6fOrT5k4H4| 382k[.Wl*UfgbX= '?Z72E26jлkGP,8+ӫ dilQU AG,ݼZTGˬUiPdžLRB, %EHBc0Jcn)d aؖJ43ڋ`b>恱@:sSxy`R1ˌ#aǧ!/59 (BS= T㈍\X#CU ʬRCƺUcq]xP=.}^#G4~N$3ã{sj3/ L/=%` 7;dS3#vy1t^ g ޿b-AE*kx9kCOw"rWW;*9E RRa69c720pD뀫qcDddu-lؘkU+s ,0106v: !uՀn<%9x Kk ef|\:$SL(r0;`1.ZSw3`L~r S%y=/7P~Znx`Su#l~fręQU_5$!vq/j!k;!Sgs '5`RIl匬nIg;9x Kk .MĜN(84;&_=nTR74^*lYT3a?oyNS%NT$raη{;xH_ |:[&Aɸt7I&].%`fE!/Q2M~K&1!*^4%З`&rTxm`Ÿ~~wK6\ż䒥ڹ\`¹xdK.AH]O{` av7L{c2ai ImAŢ'"@0V}c2[2qQg'ݮlSY٦<31-٦F\omq0upkmy6X?4v ?aL]9X+zpv`b.BϞNf-9`p9tf'|j|yo8s”%xYk5j]pѰÆ3u p PKm9xnžJB|\?Kgh,eC``6HXe$o~9moOI7FxFl0r]|N:s(Ѕ*߆Q|äA,gY#J cF8[AI +6=Cs0VԐ8XLbbuы{7/Uc1עXKAF.lCb8TKAۆ4D%߫'gAOBmtcS>B {|7G1 _f+u,<_7zբQ;'AId](o=C: |*hL)O6غR= |t0c_c |MUeZyZ~4,J#cmGnuZc1@ (L$a ݂u^7d)>(d3 >`4e-nBqdRĜ1gPڹa3%  asΒX?%S0:N:T^'̔,Ѓ2I07cɻWdI+2^), gG=@ -`7͒,3 vSEOJ4N fM3\ Y>k&1]wHptvlk0V@]7%@1-)1l?W8WH=-nC$. V;`rJL;,'nQyAH90w|+'$n%X)N-" W3X84 0bz!YJxN?Yuf 6O-&+0?56E!2#`,xg*:]-8N) rkIyEJX ?ɶap;~Z0^M{i" "g*װXVǸ}ϼ86F@n }]Q}«B\O1-UDzPo ̩CM䡅`yzN2d&Rؘ e_N1,5uoT'|53J(.(+pxڡjQ7X0ItAf .$n&ESS:)ŭdޢ!T#kcPkAh~E?MW'."^!^-S)"zλPEH!_`"^S&˵gaa|bnѤ0Y ^A@"0 S]cQՍYzr*ޚ^'SQ^NGU܀LnF:k Dfk6Y=(5Q3)b].ߕ=azVnj\+$._!CW8 U|zQo+"yCb7Tc.Bk\ G#6&K03 z 3Ⴅnև` G4)HEI`~ߘBTSG1d2kc-4^C}1ԧ$sZ2t(G{u00=e޽{<7ߐדRsJҐLC +N RUcoEh^ZPD9?Ga،cXNσs=K`fw؞IE0 R )*B!pҸG]k|\3HJ\>nz)7ǥrsiJ\>݂JMs]4W—\w \9Ks;4= \orw48\9o5\ꭹ|4bz%Mswi͕\4WMseϷj76j75祹75ࣹO;i5W\w Kzi6ʙ4׀zZ7U%5祹wi>Gs h+! .TWnFP]>n᪫oGuŲ!PF}c_Ʊ'(\aP]Zjs>"{aV$T`0uw|9Da5O\@(` W'({anLilFzH ̸w>#c5H̫@0R蛲&@߆z %]%_@Iv(ÆMQ冃@opU "*@{Kt1)B? L H$L8}w!`iS=l(*3ύU-/tO3p .NXN a^:OxXnuE˥5 @A@@ߚ~h_/xw!:Ԕ3=sIGl,o < hNW2z2F\_Bp6}kÁ =qm8f><10s 0C)sxƬ!coxT5pó xdφ?</*mhyV].]'QNypTFGr. ҅3ONKv]8~/[Gzօ3\XGF[c?:"W1qtQ@ut+)m2ܕyJ uv/ƛ4.Mx7&H i"-Myu4pH L&M7i4F!mi@뾤4 Sֻ4Ȃ&6(i-M.MlPC~3&.KyyKC ``!eAy1?p~,,Jo2YeYY?x:_6=!C9 p'@4i Lxw0eȶ9Br<K i j( (ᶩ "6,ԫţr69,|s:M{O$W`n7[1G`{͖?AZ\.}f/G|T8}["BE,w˿lS=Dv;dceEquw-?`MvnxؒQl +Ǝ-ᴐ?s\%3Hȿۺ:-\ua. *0}vh E{"MH^BKd;ތiؓ1"c1VӪY cZ0ƴBƴ4aLfL.cZE˘_qiv8ތiB˜V1]\4-1|i1^qӔl|1|1qHoƴ1/cƛ1fLnp}3U\i˘VqA͘VqӸ.cZǘ[1eLfL~ӸE1o4NeLD81mO` 6i) j_PMLnØ?Z9v KrKb1EU#}]5“وF!)Ĉ!TJ7Яy@xm"1>{F<(lSwg']-&m[$Y1֔ICA8^D}PyY< >`g9;utI;VS!E]U*HiF.=07.|^ :[] Bcx4 a"=>˳s8.i.6:͉40Jzˌ!%㪞6TLuJa3ЛK;5#csDy% 0I͜\1a)^[TYl I>cC~zܗ ̾SQT=*nU-#LJ8 x /Js\3n>eAc| /Ғ*]$<Dn?Cf $r+OaAjr>J8{.Qѣ_A>sLMKp.,E,[܁or@3. X lrorO;bC`\%w7\r4]r.7Cڷ܁x.K!wpE/.O#w}ggZ6q#k|:؛f1#0PU{;4y5Jn1|.ύxe4\R+%W\nmV,/4~wD1*]֖?`FDeSSKcH*w)_}L ֢O 3Ox ~b،%6}ręE^9y\7cɱ\;6~`-rl.Gm.^$}\+}1ÒkmsbNPk+уQis%刔@kF"Uet~A~.k%US0aLĚTN,1͇U',DϪo[e*RI{1#(ƔOH ;= $rCt1"BOh\}ȂѮOo=tz3hN,0(}oW2EO6>x+`Q9|AaXk˩Uemӓ3EްϾZmBx(ܕ:3' #,%M/Q kƅI4Y8fW*}ЄA `["t&,e { :#4V%aͣep4aj2&yybU߈00@ʵ|Ȅ>.@΃0 os%Tu)c&43{&USP#h / +pLb)'l+{`5* tΡEC0#ñyiKVЄU7xF0!% #"јAHۑK`@}.'Af42 ShWiN,șꕌ=MHu)/B~X f FR}x L-XeKf`jm<"N*,R_h$$!#ⷒ`%73`r-@#}6gq&' ,` ӹցHa\q!sH# ^|,H] L*Ò J'%iII`Mllx2LP„&w3_ 3 2PĶ,ֹ߰$K@t^XFjp?.ȼ]5J #@r=;AJ:Cg’*_aNWe(^z\y$:To{[F.00t)Mqd3鉣Y)2(=ḅD[8'#&8}P]M!=Ï)!L!)W8׸We;-*I:L@%B^-q9-G W#zcYJ1[f~$-țN`8tp׶M@Dh3GYG aȇ1~Y6,ٸh:2`dN!:)HfmZ}54"z2~U2PCVOpa`s4_34 fAJt뼊 )Ϝ6dT_4{H9SRs f} rVoF2iJcc(YB=5gBc&_xjC;|44nBX;}a{]Ll[ 82: ŒnŝvaA@kOլRQҾ/xoP;K_ =9w pޢ] p_ǡx++ e{3;X&cW<2dyL C8 SP|Y-#yhuٸ S]\#aȄ|b€*/'4!j{IMGk\Wjp2`C,`c I|&m] k@6/ ŗ:̑XH - { #&MpiZH+>s{2NlL>#K$qh.޸ly˺P 9IB YOPD2aI+I)nVmږ!A&EMd:}fB՜_xt;IYxD/9X>m_>RȬQ_ v3[|\}fKZv ƅ̮/t#Mgض W2mVhvޛ0[I{Uf[sR'(mC#cП )i4]7~8Vn4줩p]2Jh8q/Su P!.SqjsA? #/kCi*K@LP8y>bqjg+~)%Ä&]!*},sM ztl*aЉjã;'[Vk"Is͗52!S 1d: *+R?WڸatׇTeiBeʒ+u*)7Jnƞ'ST#_Wõӟ-|▃[>:fKP[[sRe} \^՘* $Ne>]uB ^uҬMlB9>aV>ݤP @*tyQ -GB71]@Om-@ NEȊ)&k =펼CKaU:p(-wXe9ڏk`04z"Aּ^Rpڽ}m`E|˂{uX" s@Q:eΆ]F0-Nv/PX)wú˅ƌ>Xq L<_EO>C}np|f+?5Mev֪r"|u_14Z 7 dA޼=JLf@1rڗ˱MF\G~5 c4)RUHO/~biʤXP"&P㕈{>I!hSzGIKZ%u4/"C x~ G#EΣS &Ԝ3DDЙ*[M X> }E_5vGah^08lXaWO4"7fĪ^6p:0FrU Ql3eo{ !e1$"7 u*1@(^6sz]EЬ'UbU,0p?xnO畕yDaL͖Ψxck ̒́fߖ qNd3@i&6MƉHWVfX׀2`Tү|>@H,Doy&\bo9WIK5ٕ&ET?;C@$m^T_~geEq@w4_pi8?4x,YΪQtD<'8>o߉e-旷LV6+ > `$HT1*] |G3l:l|C<2|t_hGf9GRPҙ926_|f#t+JM1өN0+@Z_n&S[V-xф "n8w"(#ⰺJ0 0i7/C kF.3ntnc"ձi'}mэ8t3fVer2X}?:]hb,c,=>].L©^&S35:}vd\8)=HWj4 rݦ]Rrahy׉c}nKӸlRIw-'&WeHFr<ӕi:'=rG_4) iudw!N^GZu[~ endstream endobj 2852 0 obj << /Length 3458 /Filter /FlateDecode >> stream xZKWO*#x`&)ljǕC6DHfvӍ0=qR9ģh4nϾVW0\ib\%3ʫ"W%Wl0wQr[n**\Jw>I%V0H u()XܓbZvJE]i E?7P6 'z}}滢/ڎ;}*~l͡ϟZ-"fñl+U4KŽ ѐpTsTLw"԰ ՙHK B3%YTB?_& 7 xܼU˗&FS<&d,ed/EXMމ,':$=:'wmе~"^᣷cdE i˼`JeуBYh:!vRŸH_c=CaQӚ!ħ'l+' f=U/ z̫lw|s\MP܄{\h.uk*>]ߑsdwE݁s]65l0M쨔g'nSYL|>^ Gx~Wb*X܆;3f@?.dt~+PD4a!D>*Z_s)+wphH Ů֜>[ G7ns`P)k ;!ׄEBiVgKt@TP Ű-nD:7ZۢylihrJO0_N@MQ@ew(_E_S P'l߼ D =s\}ېlmt%D͎o 3qyy.8rt]psq<­#ȍE37(GKTׁp 65̑W+P*!Ym[Z(=r?=qc!tr1~ :aP޲76UAp>7ުy-)/Z;V xBrN\0Uk=ٽs3y`y+F i]hGfo\JʦC-p@hufB>8c(I)-<[FLNm-q9gXa ~S 9gZ= Iz*p*qQy7Yɔ7!ue8it"{UEijZ OBњe DhLh-Ve h~Z,9xgk瑻k|K, 7u\νGbH@*p>yjG_ZK>#٣y Ow/㉙S A,u6g ?0 K'.V;IA"ԵO#ns>e&I8cr.>ﻢ\Tm"z| {4yyADUD2r mVnQLb0Oٵ}};@ iݵ-~LGL‡ܘ]oa4IgY4 jHfQM'm0%gA [%DUጣ i"#,H wMyWV\&8Q_sIZŐ˴ZKAIo,ԸgUh'nPWAGF Afo!4lHIߊB&/;_{Wrɩ*(OZ:©v04P#Ţ3ۊϠ\z3C&nN!( zu bT. }~[.7M#ں{ OlS-e l/Q}Y<Ƴi&GR_~`~ZCN%}7L]vbuPgHp6FmlQ>eNxhh a!5M:wmcm"ln=њ@] h+j2w6?/q> stream xڽZIoWsI jX{q9$ # @Ŧa=$۶^⪢,ٞX[zܽwWTkqup _wn]v}y]*w5 jYݱ|豙zOcM]=R+okaoKߺݰ&(~U r"=-8p*)eM{_q0ïe=ufup*2ӽ\&SK<tkR@؜p0]>Y(a9 OWEM Kz 0pɼvM,:];SQweS~򌡩 31̧z#/D澰 (M훟cҝN`Ի^;?Budž%ˎZlW.EsʹdrHiOXBhi?󇙳h`[`Gc^?n^"-f7nd|鑌I4f# )L\C8 Nr.h> "nzQsG?@{O^ǘTVYdӐcs!pQ&99rL]&DW1>rXEp8C-4AĨMi+T dj;DklfdN !fQ,ÒDt( Ò * U&F PKY>9$1B)ݲ6ϛ-FPj|Jpyx$E†Eʲ&hfMa6 PH)fa٪c7ST[[p?Zv$ݺ=1#XF*+"*ؓ&Rkd1å3iwbz|U0K4]_ $PG!F`1"IJY6tҠE0w?(<34 4qAJ*SV洢 ¯G"ưT^ yBTZ0!-ߗ&LЅޗRLMKefH W66lwq=42ܷY="(M<|l!p @ñh2>sWlxQ+ _?q;EerT gF1`dwy v:OŨ[8,_t ?rBvc&sʢ / RyT#$ R.4bvQ!I` ] LLBbv¤i!tɠ[!Z72?܋~jbm!]0jg c[l;n9gU~>P,;[Rϱ@~Yx P)@_A#of7Ё8ˠJYc@§(l+tO#uh<òdtZ 5>WD~ńHä4lnTTB*գ SPN@$ă8~)13#|%ܢ*< 2ooW|pnCp0FQ(OH-E`%bi MOU fJ3V OǀNlv4E %>"9Ye QXeKpzSɸTK3O!N M/Io/J)Q[c1od+Iv4F2̀\$@.g:F$;)\bf %={3L/'C)LFJRq &U &nH'x:$LXPCU'tui뚿?KINGd-ڎ+y:|8)t#i`(c%!!rYK.e2-_a^~[0znQL2 ㆂܪ5:&^\q5*P7$B! =Bp9j_e+>3#gU0)0 s/UTdݥ-̖iM{|@|oC^Cpsv!Adr3FNiKA\fvx%%C PRԘ?͟aC!c ?Y*6$(|2LLlԐ^SU'^a< M/ ']:W}q^^V ho!`əbWP@a9 Pu0xTU悅}nŃunҿoe~ʶ3ߍ疊DX(svݮ,/e]zY>5BUe"Lxr\ qWR,"N!> XPƭpۻ7I7 endstream endobj 2767 0 obj << /Type /ObjStm /N 100 /First 970 /Length 1914 /Filter /FlateDecode >> stream xZ]o\}ׯ[^pH!׮1,H>6ֶVXj W+ծWk)iZ69ù3%$G 1 Lu" Kka9@.6#PEJ6]d: j""5@*Svl ǹ7+LPHTe5Mh*v(!%5@fQ%GfvRb;TC #8*MqKKfHP=D5,9ׂ- BG $ ]$U\(9q16Db5ҸSDA, 6D2Rܴe',T!% +[)d>TNj3pv)H[P )A$+A\P\j$*~HkLkfҔB-Y@mB).SO $m-qcsADlJeI(XCR Z oP-⫑U[4Hxȴ Ke40zM &O&jo|'=" Jd Yi =&"ׁY=&`CepJzB襀KC!Jru<ݗo~p/O'b簇mC{9lDB[Ýw z^ 駞~j'jpcnbcku')OW'R*h` +WJLy%ftR QTihER,#PIZNs ŋ001 40oGڦyE ]ܾ,wZ|3HO>Rϕ\BE;*.)*x!aX I&2`H|Ď OJؾaQT,6 6"+ fKFAY#P0!mC endstream endobj 2884 0 obj << /Length 1255 /Filter /FlateDecode >> stream xڭWKo6W2P1>X-[Ӄ,3PYrEy_3$e+i€{>D'e/%J0I}玩ŸNBܸ t8be!K^$ϙ@2 wH`֐4`W,U*4߮2mxCۻۅq 7]qcW"=0fc՟6}zl\z"34FUg0m\__L(B+m7˜ixS?r0 t»B!_fJEzł`F ;Mh/vIZs\MD2핰WPs^' ?^W`] S.6M`CJL׫BB&bT1y!$l>r(\X.تʹ3#]hџp$A^NabήkSdI/6K$(YacQxm * %ad ćO3DaRt6Љue<):SrWCu©;Vu$6‚"4_4Y*%ڏR ua }\ 4H D'Ҟ5w(l[B'd4y5+չ2vG0E .U`fKx VeN `ڋ+ȼUZKˆox#W 1)o6 0u[sC,^'-ƷՅ ej./R+ ƭѿ-NjY7%'AWmdL+z_[Jy: u7cS8*Fe"Vo@!tZ8CQ"xYe_Ї?gMϚ…A"7Ao# ?Oc\D5Bn4ijbw_󌊓{:rvrQuԄMH; RdwɋqIH“4|YZXfi gsPz%{W;@KK zT:DmhF-όh&~En=bsZ3!gS/3)i endstream endobj 2861 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/closegap_snh_par.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2886 0 R /BBox [0 0 550 442] /Resources << /ProcSet [ /PDF /ImageB ] /ExtGState << /R7 2887 0 R >>>> /Length 21673 /Filter /FlateDecode >> stream x}ٮ%;82ӯ FB?DHUH݀}bo ]։NtW n_7o?ژ_9ǚ}?~_9Zsv}?)Z7*]w0~9c9x毜|x=ƖQ{M-/sI>H1o q7y^* 5K=菴Yߝ%-SIms}/ ?I3`,{8p{q}_~OV+꛷_Vӥ864]Z~QqVnԜ~q]> ei tK^n'>^󺥰tc"3d} sm~w]2+--X\-wwp֟$߅a%xJ R1j=^ƫ :jME7j1Fx-Ag-eXel1j-^k :jcm1Fx-AG-KQ1j-^k :j^'ﺎRkYKM)5e!DL(krN) YMLԴDdZSJP&ԚTxMzkSjBVS-5a)hdZSJvΩ5E!F{^hެ9,d52QӒUc69R&jzEUk2N) yM_:& j|53˿h@NO'd9ώI H^4-J.%_j@-B'd(1bhm쥦_,v%p_wpdeh~cX9[D[ `Lю3=Đ_q+1H ;8"hXm?>O1n/@A݊1!-l^qG_ڔ})Teo ӬKpx'VІU~4}|_#ܴk#_iP{ޢrJjpDzy vL 0ohs :ļ\ÈDG JHT=oDS%ka8grGuanIߗ* H!q"XC yi?oO|!:rZ#W)!QR^t##;yS%_9mH{E=–e$!dY&Ԁ=j }`yB[mҘIM? |?< ӳYe1<"!'|E ud#I}Bc%WPF+_N(q~Y O>e]OHˆp '@ yť0=A)bc].%i`p2SBMZLW0έauz-˔|q}TAbG$4t5> 恒~nΏ\d_&4hL0FЋ0g ],) ZaP>Xd4(QZO I?l0XuÒwJ3 8K+7ܽIȖ,^`@AnNsg RK~?N1hJN_RM[κR;<(Rh[T1X_-UEt裍D1rb5#_Ȝ|,pVH;AEY%dM/7e>8X}WHڍ*^@k Rye7@O5['E:\5Dpdxj0UحO#j+hyB_9 u'-bU%42 }5o)8I3Ͱd⋖hACǓ1S1u|&ͷ lkk-%}wZ 0p|xP_c1m?8{m EUD7&d>SU>ճe;LE 8BG.W[4~HQ ]0f`ИHMG8*9L$\> }EWWXtCn_:~e!B^AKt?PkK2odjga0@I&ə\aF䝄"x!{.{Iu9.:^\|J?4Ս7L@`Xn.w6? 6?qW?[k}~䨧aIVvv.Y+it<]|zbxOxK k>r_Wp³հ=༫:HRKh j]]JV8ru ٩pհgaE _WCeS7}]_WJ/tN5=Hu%+8jԑ;|]zĔbz5Օ4sP`A%ڄɸ3w_Wp%[i'K _Wqtgut TOWJyf&Kڤ'_W 4S#]=jLFi|0AWuvήਲ਼K_6sv@o]wvIǜ]RRήûsvI %@/殀cV)!#pvή䨳Kjߴ~]ű|Zb#ǝ]I+8Uwе+*z~ܶ^ܧcM]A:Heg.%ם]|Y7%4 IKE{"=w)q 2 ]Ir'9p24 \j4͠0zO'9NgfMWq%AԲ9 a 8= ۫XZԿyRB ,[}Ao ˷OӔ%knw Uhi3=֙W&5+8d'ʇC/lo2je L6m͈ɷnu;  ьԤ7|#w[80R3IԷFxAs(ZH^ºa16S~vrR1I3<"Lڌ;2{ˠ܇mh A^ m؆KZe="P d Yb.Y6\i"*6tۆw "$-!f.4QÅb ?,2b.ab, 8wc<<"0=i{qĄjg=C#842C84Ҍ% QԴeCu7Zz {ЬCڴ:tڭCuvuVb-#|~N}:Uc#[*B 6G:Ud*8#_}WtWu83.8&88Ué"SE8U؋é"\e퓁iթ:*T7}m\թ"թ~T G7*N8rcˍ*7Rw;*|yqөƜ߁RlH*NMlN M&6|Ta+SEV'PCQÝ*N~5=S%iwǜ*|8UXTᛋS%ZfN϶?Ȉ?* JΌé´T!]*}:UsNө"u:UT:U|SEtũ" {SErN.+TbNyjWTJTI:U!é"8UTJT N8UcNU*BN0ST!Y*Is:?N.\*B?թt8UNrW _q8Uout:Ы8UsqGPTI:U]*BߧSE8:US%iwǜ*#H=O[*]*AS%8TN=*]*;S%cNNpplS#W*AS%9TN~é±,N TIڝ*1֐NppV Ta+ΪpbJ~d Np*$SEv:UTYNۧS=*1J<=*Yթթ"}:UȩNa<թ"UTIڝ*yl:ϫ:UXTάN{u$mN`SEK TթһLT :*q0SE~Nv8Uz:Usܩҩҹ 8U 8U\թӣ8UXT(N~tNΙt8Nͩ s$NpgVOuH/T^թ¯S*é":U6JTq9U8SshUfGPG^=$Ks:m!H*%`%JڳCB#}(jH$ސS҇:[il!6|CaUظ>ĝ# t#yHȏ&`L%& ڳC졤57o3u< Ţm/Hh:4}S`HO4!;҇:{!,|,(>t%GӇ!2<}3%bxPG&ՆS;):AFd#yHNmC;jijkIۤa%h>yPБ<MxrP“ئ6wHJړcC|A!Ӭɫ5RbК䡠#y(8c~.d깟 BX\A9υO?\\2s}]?^Hg~.!|$ulc>\`=\xZ\H<\xqs<ԑy<#yH8Gr$~+hc z<\8u4?WrN~9~&j8hɍ I/鋿$R RÛh_uK^jpC#Ӣ?qntZ8Ț-uVAo,OxmeU8 -97=s¡4y[JkM2#Gp(ށ'@R׎gO#Gݟq?꘾4HZ 'p<8ɞq;Ypԛa+acS6I?OH\1T-IbIIђ1q$e!!䑔tNؐ.IB$e%)Cy$eGRt&e8IB$ep,gH}mI#)c0[=ˤ 'Mnt1I>2s$eHJR>GƬ&ekIK)8tH;)8H`#KR75 lvc#)c e2>2ƺb !!䑔tࠂb:pT1VIaZH@*1.7߂rrbEA?McI#Cn1Xˋ:ƪ7>I~i&;a!6[X "6qq8UiX*6GRFr\uGRY;a꙱:WդX |0VbFXl;si*?2',*bs`c5VNL:U>@a1Vc/.JX|$e %OcGX*,@b1Vc59j&QyI¨II c58fJ7 ?25V7VT1Vj/1xj*=d;,6Ϯƪz{)%yQgXƪss#?g>ƪq<<'3sg:p>O1V19.(X80VIp]U xpTPՁ#cupQabpj>s|j;xOX8G5V9i:Jx0Ã] <̚b'֔qn84V1괃 xp<Sp*| oH v }G{x<8I{;9v>`@yq vQ%=v`x양h.M`7#=`wvN3옭vG-/n%S ݃GeS9vG{ਝ`@Xv=J)#t3-w>O v"=,n`@r#=p&^*npuZvh[?gf2=pS v'X/(n֯n#tcn~挪#v)vA!`G{vOd#=Uip G[Tm v y38XA@8G[Y?Hj}9PCY1> B#O;5R쨅ӎBF>*ljGN$vԾkV#tࠂjG#+tH ٻae`8,갣8Ŏ5>冯=fGv"3QaGateˍ!7Jir3˗W;j?%Ooq؉LӎbfP]l.b]lӎB+Ⱒ38,bG-LpQ vbS8(>vBPO;/.v±Ŏ|a׵?z?]P*vTaG%GzHgV5QIcvµŎ3&G.q؅fG-^8̧8lr/l?.@!#p,aG%(>U(ò/1xjuae&'۱8Tza}KO?)uq`Ͽa9\KvatvT!yVÎjG-n;j5=&+봣v~bGIQ봣vTp &jGՎJQ|Q9yQbG-KP(iG%Ǜs pfDGaG-Ekp\B [}KpxWG0i&GCB!BG"\pZ"dJpuGpqu)0jpaO"\1҄qI!E}m8BI{9"L z"$]B>2Dż9JHcws9%D>B Kp!*Q!h0h ~G=%D("\8B g!BrJP#DN^K! #D aCO^"LC!_PB#D_-%#Dtc!B~"䌪!BGSsC5؅ō:[ gp7 ^0{{It y\A)BafǼNoe_80{Aw76vZ[zX!س %q̙H֜i;u6uNZJ2MR<&8瓌%Vl;i+6{[@_;,z@ӌi=2S/ Ɉ*$ӗ'a5õ&N> ^HXcѹo vk^suN?e ^h@zN5,>]YE9Kqҋly5~uĴk0Dp9=NpA9 6i3hgNc?N8k(=d &~Obq,SQ!sNOF >Vq 8:cD.*cSGs|f߅re5}O7p*>ޠgα]ݗ:]e4Af D o]Sh?|hgFQ"% pq-X R!rղ~`MU 96I!I0}zCk axu>)­zr%^5>̢T[ unW(C[qs+U{\SA:H$)6u[ۡ'layvD !z]`BFum*OVuഫPuڅp#:o4uFRzMoa̮.p0Wy4 9%oJDz t3{AR8<ᜦq7T9z: }Bxm#^UgPRp75cPYf$a+W2LU]ԋ1L_ڤN:(.+R'} 3`)| 28:L|<0@-z.e8儯.FRR: 9Ri,֋W/ػ=!Оc>_^q^l.0 ^չ1 :a"]I cEeJhLE%x, 4G]*.PF)lD+zu h{1x +-׺(q)Ӝ, `i?M>\v ?sG!+G{n\ ąQg;^SeA?G^K(&׺+VK $_-9c&I?hJ4I_7>㆑8OH?;<]qkM }jM#zk45v p| X:#K=?{K'S]:"Υ`."ucĵ%tb7r]:9 <^N\:.w;Nt\:q.6"zGu@D DqB/w:" %4>qJ+ 8 ]. K8H{D8HyQA/V%]ׁ(!^P"K;P-%{Yp\PK'zDq(1DLQP%z GMC6`"႞_=P^!ljuD (8c\8KD6 N4D/(n)t7!q"O TOgJ 9'Z `i&C LM L -0є@@UI$G@ESC P4%@D<`B(^)@)ȑVaR %H8MR 8t@ڠ]: iCR4H$<:ph* b@zVUtt#8Zj!>XH-f G}qh"BZ(ged=9p!/j0]h8^C 3F JdR6#NEp%֊܌dS}b: 4ޡyY&g - 4d2 ?&6+3^y,ayld9FS$1<]6"7_Wg6\yګڎ[ vml/Z76kg^dҵ9 =;9zT\+?E(x@Ch[7X:ssk0>Gqw췔{~O`B)>q*Thˍ@QqJRJǧH uv -o9¹tݦ9 08}~WBnDd mbwoB]Ԁfy[?y5щУ!tԆy_Bq -}H|ޱ|罍UwoOuZ{Í ՌLt8c!^j\^6`H0ƺB;5m BNۼ놪啃!ߠA͏.rRg)͂Yݟ< {t(a7=:qc+[/po_Mm'KMgI5 0ass+,c68',;` ˣnV5N#UPyo ٬'p ̳@4g~sBR;,Ow\%qyʾ(aeqyʾr}.ISpTwTM0zҧwKƭI'c66klKG|륓C\Ɉa\hN]7]8hW$b"rh !iZrȅ"͛v] pȅS{\ю~W\sqw Q0G uy ] ]u;.Œxb54Ѕkt!3  u. ? UZzFe'9BBS8rʶ6]ŮvЅqKoqaC~6ʹa)zD. |+=*b8-LΖp@4l\abp>V}-[&Bny [&Bn2&[&Bo2%7>peb+> }JǷ8@}@I_.\!LꓶUp2e2wp d ٍHZAPL@׏Kl1I @U4 cKqK=+h?C  G%=Fၰ>_5Vy#.Mܵlf'D`Mɹ@\$GU k;Ee+6ND(SCGy҅ݱs~j29*y(L2b=uoEx/;ݾ 0x-ʈf^Ll2 ˒ tp]%äz nipeX~\Wm8{yJqcQq]e"=wGp> <_r[t#]pᙿ`[+`׬dL{#(l |3*-p"[a _07`| Ϡρ6=Di{iУdQҋ^Kn8q>1J҈{ /UiyHk8r϶BjKq c\cm`ρ?>y3^{ OW̊Q>Y~F@~.Pox?D?~}!}!MΛ'm“ u:7x$?>;J~ }0$?`~H~|aOp|poP?? ~Π]x ~@&M!C}!M iAG7z iC7]P߆U#7ιan^uψnS@nF9{=E\K>uk[7.<[#$0dJ~3GޖhYCe}N7|{z\]jRhz낇݅=.[=|_ۭI˸8d`E=#)c14Jp su8;>9S5]/ϗ܌f񰣋CxunM4T֗tvNM]g3ɼ5 )t9乸I(.5d T I{C>VYhz=ynu `g@ׁcutst8<脮Q +k0:-:i}1> H:oP :A]bDzaׁ#N`u 2;DQ@@-^B;7;pdUZy֛ޏD!]Zr؁[Mŕ\a7hģcGYǎc^%D؁؜bŶepJpRz/}iŠX ` 4֏0v4~Wƣ;͉boXF q݃]>8n {J Pb@4G*M-c] 8M50ՀXrF Ɔ0ZAk]zZqkDZǺp2p&(aֵh] X4~~hS 8uaZWiS 8"u%Ph}m.KQ%*ǴӺpLkBp%`6@:mV]t!8 }i2 h]/8/V8 Sm s+%y{&*r|5Cwࠎnk勳Uə钳x`^y R.ĔȐ;s9NNs nMyM/tV7tCƹu ۖy=9ekPpt3nMU8KAVz;9QnCGfAQpY?Z,,P0(y,tj(jkQv'i.A+xB* +]5'l<'8&/K$u ہpm.؉4gu c'eނ02YȂwN- gW" GEݰS6J`' s`' [9 ?c4i41N *dtN^¡*腼,<ɪU,) DoÁBɄ?S`'N&%joL2;d2@d MpL2d Ȥ$;ː@L^~ @L&1&@L!D?S~N%GE?i@L!L1hG/\1ώL11OZ5@&HZA Lb`xW`j=ztẦ\Qi M9c"2I3h=;8;$هmvBAح -%4n y;qM@h5yKoS;N*}=Yݮ8˚hͭ7vzg&)r5ܭw_tR_ߌ.:qCޔ+$d{6 >ֵ[;韺I,1|]tbrpNQHI􌗷>}xʦxԂ+n[ s @Mq:oD,!gK34d%%.b0'mrٗOw>^Y+<0Nj`6puz G;'DeAVu@]gB]xw"]xmLiP+;SuC]<}Tb*ЖJZ/ Eln}n"uصEtaI"x`A tg#,"mA u6_3YChR]^w"] jHǰ~ t~ygd3mdXܞ^i?F29ME8Ȃs@O/tC$Gu@]StC 5%@DA\ t4tkUzRexʦKU+TйJ uһxm:lL;q^^{{ z -%pg\݉MOŻ!rBF ûxwbt(;yZ]nFI\yuk]].m%ލawZ+g|GnPvI$ +}V B"]6gu2n)pl;>rutrS\rouHN:Y͋ =8c5PC: ݇sw..]F3p/ߛ9x($B#rLdZ;[Xr8ڕFg:NTQnB[qR8V~+NN'J\B[qR8=zҮ cu(t'ߋ quB{q<ߋc /qfM2zy)t9~)+t'i =i}Г =iU~+N*tߊ:z oʼnT~+N*t\r ]B?3 oIB[qbX_zlCm. $? mi}N;˷^.A?H)}Πqu8m8.5H~d즷?TZ3s)tЋߍ7n(՛i,fn^tI {'i -q 3z[ aNlӽ^v$ctL?Y=Eϣ9y= Z%/hov`hDa`Brƥv`P8bQCW8(Rrrxk5bYS8qÅdc`])\9hiͽ [fHOz V/9 'Y:o?^, =JN+VͶN':ӅJ0/*g\? ݵ4+A6 ͔/=0sp$j :筌ō-&*ˎ*I>i''JB+Z;s*gYltIo}=c qJǺ1O;{@Si˿qcU|GuyTss3-/==1L&GAJkZT34L/! US]}wky εIm=8SD~K{&b^[ /58ͣ3K{8e08щ3~:*֢z-UNGsyrA(q-ݫ5Υ/jzGo4Xoyu+Ɲdߚ aKc6B)$%g =o<+ghtZϢ~pmDHoam{;e<Px}4-8ѐWwg i6ԗ!M34mr׾o;Ќ Y18yp:t?z^4.oc~&D՛Pc-3ԭֽ\"ܨqL*k~mc-R<|sޠey镑›:&)N]cUl.{ٽ!v^c~q7/@;*īņ6}+/6V>/Font << /R14 2892 0 R /R12 2894 0 R /R10 2896 0 R /R8 2897 0 R>> >> /Length 34486 /Filter /FlateDecode >> stream xIɎ$6U ʝޯ  Z,AS@ھ9B!2ސFS?~U~*?v{-?q?_"y?r?s~{hھWg9%~w{Gu{O;TesQiuv|_ֿUk5q ?{FUܿc][m9mSoCyOgwM)Sz>f!c}'~\ltoQ'e[j-]or}w;oo~4z_{/}mG_?'a'j߳`N|N'CO~s})Qyٿo ~ZV-}}2'ޜq_~V#2b6ޟ۵Msju KyG⵭{Nt7 wW#ep;p2Y_?_294T_ 㷍~~{?p̩pco9?q?+o|^}'|T97x(#Z:,:Wm[eGW<ܻX ,}Q99={80271wIi_7-w-speȾ{/ewJ4qg`iC<-Y>LNk9y~Vx,X8aW[xqMzZykոO_8Kho'^\ K^Yײ@˝Sw\^官xV ~v[ic]+`hZ~̻}oYwqyLN]7)ACmzE̼3̱pM|ʉOy7"ܸ }6gwµuvǵZ{Ġkaw8aG<]'_w{ăާ5CN|EXJC< ZEQ?߁a;6>'> #>6q1z}U|YWͯyH΂_nm߉_M- pŧYgw_P^2qEh4C/F[O8w&pcG{k_2>O_\&iK.)M_e\dr=׹ɢUƉG^\xtŹpǺڝ@ngsCt6/q-ds>TҵZpȝG Ns~=z}ֵP y}%԰ 31Yq iYײi#ܿgc}`aN YxJ8ixwuQ{2ԗgv7]Z!zeawgYwbr㙏F0s]Cp}:[Zx0!Hb߷id "]r%Ý=dVdỉ 1:]xE܍#,:ۅN wia]|ъ.. 6__!qg1%1+}U^*]ԀӤCKviѻ@uvĝX}S;}xf<^P`'nڵ?`H~;crF99؛d8.񋖂y K(,\j ;&!9:澝55[X°kK.ug֯qݷ4CֆY7gE0N-:X]urrP.Ǘ[([.uNH ,hhÅ1p]!yB_];@1W_vS_y:ƹc]qo_W/KUӹO-;`ua GpI9~:Ӈ0sʌwjÆ14n/>-AŊ0^g% IoX,EdD48]9j7YijaWn3-ŕtFZO.|]bnvl04 |Iyk E`jz]wtn.ܡñKK޲`Wf>yOrv}i3 @u,r @7H$ sN!g+omSQG.e_g%:P[yVḊHc$Q<g1's^$%GY._Jc|93=_q89Tc1=¾D 9)N-v+ϟr-TIkU26fLfP?VYǃHx ۾w}ʩxUCkmQQ6ޕ P3\ėؖWEUwRK)C훩Ius?##yUC0xo<~nH \ 9eYjHi )Eޚ2i PfЦ F@)Lq3љ!&̋T"BX}At)',GFΐ,ysG4(NVxZ95%Cu5hyDwTڜWz x20/,5,mP*^pü'h c2m``([utet 0IkY=-# iGnQQn$3j/8Bmb Ժk"oPEa`KK>n*e)HC/d6wǕX g\G ³gfeJFmm/ Ȗ39*Egq &s : >11|4EÎe>2k3Q约>8dASՙFc/d$PQrhICH/*|(X>T 旐l^itJLX-ax ?.h8'.ޤfi nf(Ń|7X_D10UNԾf>6zP^||+)XI${(0 {37LqjieK=n+GԡeBd?N H.Pv$A1@U(cyQ۪~Wp@=f Д^%fyr]( @Ƕ_Z`]}!)DVtlGKQ WX<JjaH0@'bz|iZkifXsjW1V;3O%DO83 (;ZLFH"ǔ5"H;_pk(ЊI>;}^,YVMOzP}oE6wɚ~vg!SQb ,73Z禃Q]r2_ e цWYvt&i;]{ a9fץŸPuI,pEj`.'%`u @P#"pePD9&wDG D\@OUt= WXA%$DoaD"?g^;% j%"$1BFfAeV1`!mBЉ8N2l;S+]1H(pu blJ-#Q+iJ+,m^\bka,K ڨ7rEQ67o` rو3>G{ƽC@W=sf"(q |/YSIr1f!*Eσ6PLƣ2Σ3@ *!C^"bEMl>1ã; KQ,2Љ 0QR~V3Y{ #T0_H1.w7@^Vipp5)(AL VB[de\h/๻|Uԩ8Ey`tb&"◵tX5Y8GتLnT~CwߪH \y:f0ͪezE pJ9L,W,\чyJ. qx-M ˆ?0bU9?ez18_W2*vL!LcT_-#15+"ܻg8VNn j+ax<[c Jd8MwJ҃+S 0 Ƀ? 8 qقߔ}ҽP$y; Y"-KpNe(="6¯#yZq=eAny>,$g1e:3Iĵy}Ys TVTėt+)NZ#2ΠXseJ JμT.0;fvrX# Wof—rт;`~y:IiMc:E֞Նeq𧉸CYMH#%v~~K; /+˖%G 3L䨵e a9M%-ͳ_Y:럖UaH AEZSl/17 `H`dHz sk?$b mPeڪ~`*yg &,la/i X&Ke #ּo+ @Y)zM"93"&@8xmb7hYŠ \E7D=8@eVK=$W_ɧۚj`MsWy]9PE"5E) QNvtjQ k즺pkNr@HxwNwZp=HyX8(MO|vK xHʉ]WB`ՎL|NtZ̶Dw u_ ~,8QRZx1R$tFoT}P~cЁ%o"{&WKMkنAۦ@)'D2DLwau&p-a< Bbb'qNR$ :rh|D=I[)*FY_EӈS-"Zu]h.[;Tԁ(BBʞYKdJUgbG>0!r䏆EČ.eIZ%<&W+ `BE!.xMBMH9$F?S(v(]fPʘw9r^UOej`z.Kfm*/ǩ3T!dͬ96WsSva1K\Umهe"[zH0z&ę a\.2٪`uŃDZ_Ҽ#?OK&E)ClhU?ٞ&qt1w^%uH!äYE K\r?L爋 ꋴL(3EUy5 J) D { Oآ$T$MR@# [KCbSj2:)~ܚ*s$IǜJ.'`> GFK(hǼAA Y#K"vyD߫`D;*y溳z$׀8)=!2# m4ba*(CDYWce@@!xӌ * K(ᓚ5Ugk9 q2:B* B,qJiŢ: =]z SR5rU&6ViHUu8-X+ Y{,IP) 2,!>Z̀v ڰ:O` s,1ԕIC=Wj>~2_sYʤ5r-͂ޖ0D8#) \S@.ܚr/G:dXe!xd X¼ ?аSؔ۟eF{naAϑxhJb͝O@JO(Ǿ4ʼc>Nȫ@2 mYi Ru R܁7uτ',`6IPcfe< aehK6CvExXjJMg[dk=_p?@hU$|=S*C$S%[Fsj. }mZ4pk. ي ЂJueL4bIt!.[&A(JDeyڌ];%&"Zr8=CpJAԇp9u`(yeEZ9V,V2h#Fu΍& y<ԶY3 g]+:i?1?)&1lM/õ$™rf@r%TfP~RwV0SSgvf`DdJ̧p^ 3i~,M˖@KDO^G^XOo4@UҞ34br>dڛTKdZPvM0Ek3;xJZiIڠa uU*Q3%wPAIu(3v-9yƗkT"5)lSmK|}GLtECMy'=tMq-W~L HjC_Kؙ8+ SZrU l%BtY*T|F_UvT?suX! 5/=\4,~XFF I-%ȕOV{DzAα^Cx9R†%W-/Z5p:Q2*-ꥒ?P D j8bW]=v, TQQˑTkۖQgqyw.]WXZ ӷ6nPvZe[fu'GXYpS۟\0?~ShΑd)Lߘa2h.GfL%"<9m>Ii !v_j^NI&5˚ .!6H9vZ^YKZf4nj^rxbj治@#İ 248(Bzֈx'7.OWo5858+t(. 41U"(I5UrB~ /8V\'5U{{XZ EIO$Qg1zSȥ(~-Au=Im4RcUL.>AaGvݖ̸fhTg-c6?.F5 " hADA Ji)y,x}4c j֛:ה1ʿi𪊠^ T*SH,aaBKţ1~TTÏbM~RM"mF*NkM/l-CǏJCIard7iQ2K}b y2 k9m~]s/lzcm0ݩy:tG>st tfƗE:OqD`V:yN0%vxp<ےO-ub%b́lȵn<#]c bYbYN t(DC:%hϮ`|Lq,-_'g$+PqXKR7㐄{"{YK@qsv4]M (1hO":#=B@4f Ic-M 0q.Cg0O'OWG)!&P| 0(QKd;kJKOd9; )iKR"eXZUyHzR5G4ue+ѹ=2T6* $%*o*kk/ ҕuouT/`?n@k8* ){2"5T7E@i}l1]FgYwSs3!`J̼yΔc&f?:+ž}@+4%{L< ,_؄Iy2Zi\ߒyXK&~-l;yTSmjn%xQļq `c xhPaԧ &>|UK;&{]an]_*)$kII׵,L '1ݡP|&GKztA|(ȿ(F25VN :9BaxS-^ @!"`$fTNJRH[A;:EhJl7KTP(68O]m^ALSv9q2J HL .ɷ") v! z 1 e6ʼ(/ j+tfzU9ڐrxb_B"α"EjD bE@B-2a:R>rץn0&\( - RaXAw c Y6@i8Bg򱬼 cd$cH"0@5M8UK)9HlzP 0= SAg.̏DddLgLR``ِp} C68XيTYݐ` #g +UETn C|Ip]h7\X6!!{ϔW流˸:eܵ25"O7zL=r!R$ހr]0]-)q7xm,?U~+$$]\TV$] -j7Эpkzr0VeRa* ɜZ*O(44TQ!k5PQSG74%>a<5fS(K9o%1pHR!UPu+{Ss8Kf~Хݐ%K7{L̒wrq$פ`%\*Η>U\-^M|>"E>>ab֤tB-9M1gRn5wo醏Z.jAD5eevU2ߨ% /1k7CnxN9 ]k7G!Y]Sa}~եݰ?^#$QH)l 7]aa݆`݆>ny)Ұ"R!\>" _y,۰-lCmym òKҿuR7y/vx)ns'(_f mr|L-!sO}㭾wԴwdN+#FRp.5+aepMh:`q5ԴC/CR 샹_練'yw6~Էҭ';*gcmk_T)%Si^඿} 1diQK̰B}b]^ $>R"5dbL:"l,! x,j#5ך^e*}er[P!A>ufkiz@7V+WG#yeN2G-"qCcwIKXnG^dseS(|]f?>dYJ G*!!>cD㵤*j⻓-~Ln_E3gfsu2_!I[EP؊!p|YÒbnSݴzR=Ң')ģ=ZRռfOсفiz6KLQ62 5e{b6]:ٍ/s%cZt"Fr6ݹo=Ps rHZwU-[Dͽ!LYTOb:їr8h#:\lxE93ŲJ?MqWI$-K.U1S4P 'F$[JgluLHYwy{@Lk ҵ8|XbJj%?]jkic[JcclPgr04--Vx-} O1gSl tP]!ެy#y2U8[Ǩ%=\;l6* КIޞJ!E}Ju4#NTO%dUSJo0S'˗,?f(Y viCAtm٠GͮSnH#4hq(SoNvNxu~"D2)ii8VɎo"ߊ s1,[eqYc$S.ʲbEU +C{ʫ(!*XPv>5ÑBΜl\rX+k`Ceg.kC)L=>}5|Y0d"P*~lџX"%kTGRsDhY* G.`6Ik=׻\m).!^̺[̜_j&(:;Zˡz4"&zU6DA\4ggqwQjȀGи_y,Ng"]|O).o|a枘 w;h3i^))ñ͞prI wE|uDL<=^֣V-Q=1DỏcI~3we ;c75-YIeX3P37_DzH w7miXCM4+RYVmPeJM,\^ԑS\ d`czôj 3T )ۢxX5[xt#2 Rz.ˍq"Q`R@ O@X}hW5A{gK}ªV=Ikvv^~5΍ @ xb7iXVs 0,,`^:DaJc&ҒO@=v;auKbZ340UOY$aF;.A¬W@+<:mpⵛqZo=s᭹C; )#]9s/>XdVBdy})- W&",ßz#B267ga̧Ar/3-UO0/gs+jW_:mhݙ:E>t"ZȢ-:)cERHbfC;;4tOʳ&۶jn%tF4яVt^-]ԪBD`X[D> }}uU qh)Y^Yҋ8M3% s^@U]r-'v\I0bz+2HD%I5gxSՄ Y 9ȲBB!;s/qlׁVYR2'ߩWIr^)W )%>,YS,[}XOw>YlRuz q'>zr}sԥM"+&҄ 6sL 6$ٶlK-2)DVק1hI7)El:12֧i_5 73M%N4bbhCxDt" ($F)*.{Òc!*hC׆ !jEzLYRypi Wߤ8?*' Ԝz63[ȵv?]S<2HĜl:.Ŕ%Ͳv "/By!pf(L1Sm<+e|$F3]*qp2dhVu28$;/" Y 8#eAfP،ug|ltI8]ɑP吏qf=Q|:YAyfMok1ꪣFH_5W8<RgrO9UWF=w<Шy?}҉76dpV4bj҄1'݀t14[\﷖\`NB]eQȴxD]Ujg@jV-c|lr" =S׹D7WWbJMc)}`]ݣaJٝ 5oENeDI::E4b)UoM\o&[PV|Q|Bշ!k9<-", Ų7 C# gAܞJ RLb}UkoNJnW7 $ql^@xjy W?;KX^tYUB]M)^RqrlUm_Y$%$:# bEjb)J Qh05 qթ)a7`'}cLwYJ!MNc. ].w~{ f,ͷ^_N1U;YFBuXBYI׭+<GEd7>kN-w*fk0u}G.)Q+XVp,.B .eP2V.CL !E0Ϫܨ{Z8 h~m)Z ߍԠcH}uehCxfHwi_ ^mz'Ä㱫Ofc&1Y?2!ħ&@aErehPwjZB\W6hhꔴy~It4f3aE#žS.jR{. )H Ǧ8* t\R0thJū Ŷ4"x XhYYs xOFU{ $ԽshG~` Y)װ 2(B>FX:R! 9-d-qb0GuI\F2)69gGʸVA/ %F06ٌs=rB|5'/na ]ƨЯzntR jI_a9&*$aG \7v<+_r!s,% ^&)7"d54hZM=pZbw fӐTBDh oiYoJdY /}UCiZ_KeL 嘭(`[شu&̛"/$Ny{TXb+3ߒm:NB(9*B RtrMOrs!lۜ 5c"H^ns+6ڮ5l㴮Y ͐Z{qFr!`'HqSG #ED:i{mk?L/籤4Ӥ j}* ǝRj*12M+' 5j%o,K^I))<TQ_W &[aQf|SjMi-rGC5,B>ju?H9o42Ó0qTVLcv.IX-T8Lr~>q()PƴjC+;sEmf4&+(AE`.R6DBea![KC]G9$oodÐ8q ,lo`naЅЬ,RLj/"Lz rtN)8%m) !&fii&q`/zS.}?" 5Hb,)@C Q1 GUgΜ( d\?n維(8K7؅-#$DC4;Cc}ujƵlԡQ[]+&'A, ~K J*Fhe|Un@fMzlquFw[1Q$3&2e7E"q[04e2.aIP\.SJZj@RjJmG(p%' q+b7+pWrEq&m:Nzay!TAv"ZL^;Q2 2&ZG&i6JPL`9Tc:Wx 9I.@a&\@V[͎J ${nKѳp*-DE024;- I8% $t(%"fHAqUY~-(Ja@0V˵S퉧o Dv518VcťA!_8qH[C 5([ÞcW݆YREwa2CQ rU 6xv4DHj85#K, e8l8~|j@:lCS Sd,]B(+p0[sXPPi50^QdugdDO]K30U]Ui` 5'}3Z-PZ`)S W}4ȇRwqJM%Q"w|XɢeR s*@ -s}bb.. 6ʇA3|bV4eJQzC!VEՓ]bYp*kWqWΏnXڟT;us*l.~~;r`,*W'8nQELK;Z$E:fW f eFMnH{O*! |1w¢?8*@sLݔ]:Y:KCm~{଑ nIdYiyM*)%ѡ)Ҕ8 8;14jXq(G)0ޕ֒GIaK!G#M!95sEʗF8ϯCO %>+8xD5/!/)ņ95.bC}  C8 ӤCk/Tq1Qq_YaZs8|ݎUDRV_×E>:KYEa_8̿["ZM '^j!fw[eZA3-@-%]Vd>xdYhnGv^sHX䯖)d۹D9Ybrgȕ$0ّbRQiVf'YX<Ĭ?>mzL gʓB8-H: }PKbE5_k$^I4lzhYEM$SLyEy\ZVDY2,h7a>4v^+1{I`եYMS J`g8DxKn;Vc(Zvs]V `:*ֹUCkKiaR'M&s'8,/-SOv>ӕG0ڧ;rǩnՙGij λSCK3$tHtKߴ/onË-.CwWY}N0IlpwnE͂S G)kq--tBCQ ЬJW- 4țD |w ^F&qׄZ [zSXƪPl!O m-Pu"^%j3]ԫ ﮩ`z"*4r*"h9qO+p R gOWf~)+YDk NJl4gu$D,8Hn%aUM%%0 ż! ʦUEYC#&2e0ڲH6yc1EQɇ>rfGͶe#.s"6B.$)W=y0ÝPp$;zvBQuXT62."`fRVRMbԸ,gL!4 )k8_Y+rǗH @-ӅAOV vb3mJb.!d{EafbY Xtd͗ze6Z9j HwޥcJrSl_Wr&yJ.b٢0CIú4/ǓaL=U)fU^>e5U| ">Shj֬ބupwr3͝cBRB)GWLqZܫIDz/TRyy|ejm*/Xijp. T$cf%~H3i0a>tԕ[:gk'eF:P:VuY]U_DEf(]BҔƍx9LI!{A ݪz3A$(0-DjIEXK3(ŘX`dpйnx';S4SOu5Tq4" J!T[huXNhc6 D&VUD`Y\3Xb5(EvaURTi\}W"K&:mDFgM@U2K3lŠ;fyg*?k>f37Z+ٗD#ArSÛ=UUzYGinYu}u]T6`XAʖp]eNbsYO'Y))7,siʻD 4h }r6aJLwX*Gzcc?rW,J"a)T#QN\NEr_,ڶ おd(Gs ̲!*B32נ5ؔx)ғ;Ľa"*qRo'bDypAw1sYa+,`eG0 %ŖvʴCbo .ٛ4-l˺oK`'31Kv^gf>+ 7On*t;l/ t]1ٌJce5~Ɇd8Qj3iBm8"im5VEY ?E __sDuL7z-)[.aH=" |L m׮1WL` ~հB x5{5'K9j{W&f9rذ ZSK-'=u2HOH>L4(i% C1t;Ni.ipJl;jUmfzmDZCa`iYjr9=v.S[Xd%ѨW< 6[OvO,+\,ʆjLЙ_#4 P"M`a.P r!ߗŮRh`M/b{1x[mIkSq:7g϶=a09T5-]P7vޥ3"uw􌢠Nh7l1!"eh y: &* w[8$5Sag5-RcbE]1B54+[\ՐxX8ꪆk!Td5葐gNڳ>fS RnN~-2VV3I [k:ʰԝWUbWTR0bHpj[IJfRxISO¼0oUUYOOM,pUa%"dk]g?Q! E̾WLHL­^lz?@VU*,4K`gv`;LHslB &X'ODHInGz $8UF.>D ޺*dlزBVvhО^FUG*M`GAWG,qaըl!]PJXON^6"vL:1QkKh9=dQFZ.ebt^u_jvXZ \؆(vӱz#/I.c1]ױn5Ś͂\"tHL\NP*cw  XNwcT S2s#>1AA=yJzŎP|Q.'i`wObGipǷͣ_"yҀJc, :'|3^e^-;coÙ֠UL)SIH $Qiu vi4>C#2&ޜҶ SK!Jc@E2i9:ɭ\iM}[LhGܾE}*ي7@UVӖ* 7HԨ9G*vWr#9$?J\[SHtHa=(9hH5 Q1r7:x > w2n4곎aбu3YrͿYw7ϣ|m?JЅe@! ԵqhcfSXfD[`xj:k_tȪ kݖ(9:$tLIyL'+Q OtLܕ8iN7qfokzAIJ&Vb.MR lqbංk!0q`e,0=Lv\@(Rdjm]VpС#~+㗦 J:1 uk" KdxqM81($(As }ՀaKkaJd+OtcW; UdV2F4nobw aܑl}`t#\p܏O}3уfyєF~Kn |/YTxx_oI)&RzeBE<[f7]O$ /)?5]5A/ߩ/V<"kB 'g(ZmS_s[ JzM &t QAyM8% /P-]eODr0 ,y{.%bB EjkDyqP˼T()"X%: Sx'IvpeƒcN|ƒ ]gR#$ ȩ@@\}8w(A5l3.QEQrƩ`Hf7"6/P%eS!oS7"$ =r[ǘ-vbd&j.VW&,@дx$Χ+.?6CZE-auuy-[mUXHnKHB{7 +7`UOӲ9 TaH<%qKMB燔a f`a6 ܉i;Yn2_jZO#EEq3E-fZxgIy dn~,ПVSHQ7KA|U1j)<|R!w OJw9"C}92aQSnHlI/d| З? )%R#`#=yR>ӗ kAxo/h~I̺:APE* z:VBKJ A::9$Yo&=̝c5w:-եGI~%&Qf ٖ1|4IaRO»ǫC$)C`œd짺wi4{ 6gҳ+ENBa?|-^qYCYruv]HRdo]MdM9^dJ2T0&dEa5ԝ?I)R|YUĬlScKTޠ-ajBpķ'pJ\Kǚ]9a4x)eк uDeXX"ͨ@5۳:/N3c[W2eG8%Y>U}&p1I]A#n6N?LI3[gWuQm-ǗjL;^K |~~0-!} S2Wv+c^vڻvU5לc~;\zu_5J,t2~'+% n%(Sj~X+Q*z>ӒjBAҬ!ԪVN9aIJTl"NɖPk9q콧&.' j,TIvUrSQ bB@dne`w!zn(J?Ҏ#<WC=z7LkIl UmU}-Ԣ r6u?s z -cUmAAUef0fǦ1z7g.Q8uU\6\[GR˰QUi]3%Itu: -ӱ7+㑡%P)n"li KXمx/<1 yFMXHz9{qJU+=le= Dzi#o}آo:ޣno,yܣaMmI`eypAzzus8,C`k˂p٣8ٓAbW1(V"*!Tѿ2M6iznQ(ae:&^7Z1J-ehIs%]/Wْ4 MėT^U%JMi֖ %J͡].Q:| J%H| 5WrK1lRiN֬ p߹Kd <<!  E,#eYEz!@^ڳw̓ffSRRж5JdӥZnA[WA m1뺻[^Ykz( 6F.[t%lъ RV!p-BfPBq;ZGEqrBa-NcU+*:yaE*^&  ˖xr6+BK숹p!ڪi: Ng^NC㱶wH^ףmAܥ6%@)0 hn`i׺-wﳵɞze雇S!֧J0߼ ^h|P[l)jxU#n6S\bj 29xRyUQΚntZa%x5%beoȧ `c$\%^r%w+Qqdv,Y)x؊Mb=;2>J#bׄLL<`W:W/Óa(Hp#0H)9}Z ^djl.~auMߘjk]]$ތ2Oh*q߿Z,i خp'ԝ7-c/?c(t  Jb(gEkv\Qk`\Pχ!alz-,Mbl %w1Gwi2GܕuGXh>UwjNzhP)8?r< Hf# r3 @rCSX5A+,ҍ2m9J䠯r4ûeQ5Ƒnx+s(IulOnaԌ@)0ꄨAx^'C,Q>dH$Н(-%a00fWFRiDJI2|)ㆡkrb J&&Vm=568BXP4B6R=vz*|Ɔ{M"kUpN&/ї}D ɓiҒ!u9{UMUJZk%J7*E{X5dnGk&UfW璐]Z-f Rr wSb Sߖ+|s& :XHm>#YǾ:Vn:  j] BыLޫ[*vYHĈ8"q̆r@4X:-fξ^!vA+? C+^nЖ<'EA/ >^@MJ}lHp;rP-71YE Cl )uߏcʹoNOSq{t8da:0v9dm>=j*Jn0a5(^]ʡ[pmU{o s*,ot+J3Ӱq!;N̂GoEѮ[T2ݦi)0Mu%` Tcr 1 uPJl OYdE19'ؗ :H}p-7*v߀?QœQdz{i2){4f @{~=,k`b]%+aJpbDy7RM(5Z̙1\N)ћ @%8%)ԿR^=/9#`ѝ%Gl5`RtG5 :.ϲ-[~8()$E M6~ո'o_e, 6 wfo(EP)eszJ*5pp=`VZ䰛5Át0QGl. m^HS- ;6c=mj K7"6 \-ӬCJVȃE7xYUZn9Ukf\Te V:uքBJ ⺪Y>h/bͤdbhC1&=_I,qS #."A>饎9 9=zYZe^'n5 `KESK PWr7e+Y]dwmbE&JɰNyPΑ?nAL&ͱ+#Mo6WnYw`F&(/) ]et|9nH?޻(+nBiU v75Mb}jojW2YSnyT΅oP2; X'6dCpk2;F N|kd >N`»RmLj;-a[GShN4fM+kM("w5o& GC?u2Rolr#̯En6NXɯ@t( |++7S=,fgg"䋖F`+#|1I0Xl7=firn'=fs٧;%f V-E9p)'L?fw+ zspDl^ԳrtYRےxZGyq9Qi>_0('0\3P%Zd'mm9O#j'#Je\fDҪӨ[f`&;3O3b N6XޓQSBf gi>=mM\+39wuٕ~@zqSӻ41d&GΚ)ܓt?|tAĐb-?w9EoP%;L PbNo>7-׌ʒbS CwR`r'20%pŭ\s3"` JEH^[]eJC[F3s9QGRWBEfqHnR2>.]У^6 iS@Inh"cdIA^>r.k"<GS_8㧥mNݙD;"^~75֊%1܉hvmӼ辄CBm1hۆ,t7Kxt:apjd GC'WɊ3Q.Փa|q .bkX6 h]j?d-GA?,C;4gJA ȶ| ZwnN-d%xHS4'auoصbS'tCzK*hX0~jТ35VsH "oͮH_gX*CO=oflO2雏B֣W^RBlhgF8MC#LU 3ĿG AAfVbcvW1ʭt+6, d\y ѕo'i$ Ixά9ή@x Qӎ7+rW)V Cf6ܐ}NJS-v_)!h/=7m%䶊q˅6DK-JT (|Pќ[ U&IM%\hwlZw}LrېՠCOI~#&v4MzϽdeHW7Ay 9_9.>=1EM$;ZZ5D2KRI j1ꕼ.;US,FeTC1`S;J-{m\B*m)nqCQ@G@SY.y/.R)}U04拭%Ia[ 34`&3baHP^-[u c=*U/=F/{י1K$90X ^ƭef,- ^HC.XQF[,J8z#8Y|?tQk5 "!,Zh}֡liQ sPРDR:}by Bduz5n^CSh{aaU֯96+k h-KiM0oR 0WK'6 NAwtqaP@`6"Al /6_ M`4Lנ7zEPx \P/hng.c ΰ6|Jt!+'n:2,' 20JNZ@*I5Ӕhtۇ\ˣ K–L]:Ϳ#@pJwe2| ]l@3A@2xMd6 C43vm>%@BemeV< mHIJ6Ij6Ag>gV.MbRn茝mu="6LcwvK0? `aTqt]֓LԄ0`<(\2c!7Ćn p G n`pC=8hw nŖ 7tY ppp9膃U>f9l rC;:sʇp~ gK·;5pv9{ 7[pcLn &7sQp6?!( 77n,+AZ_NrZ.Y߄_+RlR3660X{aN 9cHi>-ӛjZk0ʻh87)Yu7'Õqw4q  H= ,:"se} "$ێ.8.#5Kk^pސu6hY̕ҒעZFi7|Z"ET]+2uvdJe I 5oHQߖQ.OSင߼ 埿~_~C5Zac~g=~^/˗?{/O3u.דZѮ㷿| :ou}_=~zRz4˿^"/ǻALQ_+z[A5b{{??kwͨwsq}}ͻ)뗿vBP{W+:Q}>ɧ} kVNR{fή=o1\sߑ~ܓGK{|߻ӐFךn(yR?Ǩ~kB^p a^Nns %s .?p_?_1utʃzRc"׍Zקj[jW?uWPiSuEn>9ٌ'GVǼ=goiy<_ѿ~4j>Co u8?l{O9oV {|eС߹Dg@"tEh ]O?rT$2 |~+zG7ǃg_~#Z+Բf^/ekeG?}_ ٷ/[_?Qa?|,i(Z5>OkO[d Ԝ,q?n ~`4SBZO~|J?OWJmd1po~Ϯ:Cjسtȇ+|| D~3ɝݱ*dϋ4'WpU_+>Br=ӯ]Oh=+O@g(h،++R1{" S"4mnjX)%Gx:5׺~z׬+R>+-d"B{Ey_e>`͝ w< {K-{f0?&ơOw/Ȉ\x_7ܭt% endstream endobj 2899 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1441 >> stream xTPG#DD"IZG5(*ڊ PP"[ѩq"bPSDZE,6SD%`X;j.8E;;f}{Kb$I&_JS9O~.aؑ:*e?@".\GCBDNW:m|}nVFl" PA/wG& |fKNZް-OB1&GC1+{ViXE,!$"$1KwbAx^!&TKr*Cr tItiitq8M$@ߪ6sp?\]mXC59boHB JYE(RnNfӬdap +{p}D(Us&pE?wnԪ#$s KtB~kST+$pİ055K;K fo6nxu쇳u+vPG^^UT8 @\'EKș [S(nڨLxʼ—Poޅ mj endstream endobj 2863 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cb_snh_par.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2900 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2901 0 R /R7 2902 0 R >>/Font << /R14 2904 0 R /R12 2905 0 R/R10 2907 0 R /R8 2909 0 R >> >> /Length 2932 /Filter /FlateDecode >> stream xKY襽v/Y:A"x$QV =1x`߮S~nG܃Y_ݞ}}=o)1oZkcbv׋a_n_mϖ C^m=\/Cv79}tDbI_mt*[}O9U!ڕGG{.#ҞkJG̶ky8wGYΣ͸Y$O9FIfl5.ӑ֐~!M{GĴ7 R@ 㑇mtl0U@ʑ$"QRPڂ!,d&,!T.drtdӑL@G9JJ{FP78IY$llv)GDQؓG1\)&hLN37A3Cś/'47aɏEGΛ5$.,1b|y3 X &ӆ#)JI 2 e@߃YM;^ɭ^d} Șw4b h3`pu<8\)l@ #Qӈjlvp$/n}L tTlpo :2icb% @2f lc6lOLcp͆dĉ}8#@h@б!HS|x6x*}* %q -r21`AW- GpV'pdZ]*hGQ|K`^Z{FHBux[I5dnJD0PJQ<~TC9Rk]B=̚stdczc oW[5}KdH*s1QO pDb B0p@ԊH]CH(!,L7;'R>I&rj_zNRp$K`UKR sptDQ\jTȆf ͬEX\*̣rN PeJ@KRP\+ieI+RtԶ+!kluEd 4S qh:gj֖ըb?CT*>̮WjvJK (g4Tq2@?yO!dYm?؞.'ԇ))ʋj ʐΜb,'8.o{H4Jx2,iMssAT:IVI:/5qI5$.M-C;(; 0H2XrL`=*hCRxdcw-By'=y oPe:puB'a +7=f )8Ӯ(bZDxVpc)q SL\ `O{!,_!+<9}bv禆fD&x55A"d{CsLDDX)aª]xk=\t2D *z/ 5Q;!i"#)2MCI#>כ; v% mKbތTs?f!ݛB) tQhyQ(|}RL 0|QzQISI1X0|QzQ\<)w>)sQhyQ(|(*(lyR8kob#s|{&`=\4K#y+h[z(Fy(楋t==^潨iB'-/ˆ7F[{P|z^;{Q3Kp^/Q_zOk'ym-ys(|CCtxk{nvOɚ.[nOwĬ <^ݞ؞r{gy˟+~_#.i?߸Gg_o>WW[\irOѸ$<ɓ~Cq"J~.dO'9N']/v|IQ#ˏ̯<?f|򫏬_{d~G7<*w"R%M|2i>=OY29Qy^y<EĹHO~Yߛ3طy]gߤK_O.1t~M|Ws_J6M{K󱘇Ŝ tzDcЯx/T{ wz)U?(EE?Y?_|~<*^{m'#m E{"@W_Ehh]v}z銀MR8 endstream endobj 2911 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 870 >> stream xcd`ab`ddH)K-LN~H3a!]cHVY9x0t0w,%(V{$fFFs&РpMmmʢ#CJKjqfzQ_W◙TZWHQ yF&f a " b B @20043Ňg&#jrݑNفKDQ1_̽ W(^v &O`nr&ˍ=\pi~c O=6 ?(+ݏJܔ!b{aGN_QjC|3cWL_hΥ9nΊIa@Gȅ7\!CSq ƶx30}ݟZ^~1M7wK=kB^ek\guoe{rz/pusgYR-_ܘZ~w;v}#?Az])VS?]k`Gۖ=kxuKI5W.f2N_P9rm]Ao$ߣX7Ovq۫; ݶݮin&ݿEu1dMo.aⷰkHAx|wï?tޖ2ӝoSt,}?{|#yO|^?Ff,-SWǂY߃z}T^ƞ endstream endobj 2864 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cb_snh.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2912 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2913 0 R /R7 2914 0 R >>/Font << /R14 2916 0 R /R12 2918 0 R /R10 2920 0 R /R8 2921 0 R>> >> /Length 19027 /Filter /FlateDecode >> stream x}ˮmYRY%&6*cɒJܰ0ƙ1bϽ%-yw3f= k}v_ߏkfs9uFTg[u?]UQ.GeFyk-/vkXkEcmיX7uZF5{Sۺ]֬Y?Θf:zu^ :([7n8_8˃o3Clػav =r fͨi'GQ ' ;K:Cǰgo#erڽ.25L7 c8&+s3i/Sb'80%yu,XkcfEndƹ= l介RlAh{.&< +X :F蠧f;6LWINGJ7Mk_XNiXw=b(;쬹(C3V#xX1(7w4[3.H **e_MJt^(3) n,C9MpQ_q/xmQu&*1]?9ÍH7a}ȹ T*k\9!6ja8\i00|RtwW}-jEo h1aټA3_4 +n M^!j Sc#/ЎArt6bvg+쐅glk)#tn`#ac3qa1{:4k I'4t6E4f\O2v]|i!*IojVF:eH(e;% 4PxGK8NYA0O|Ek*0o<-;Eg&P2`).i4Ma2h۵%pQ˅yv?#4ns(wLq'Bin;!ӟ1wsnx8.⧰m[>KkH8ml22[v!7`C5qk=q z$0%$%w 8(>-xƾ'7̟8`ElR}](\4(NK%_",  <3v}Ph{0+}%l\H5ʧr;9b `rlPa4RqJ''[^jk`/e} l/:W7ɭ<..Zn,S$djwAl٪ꔢڃen3*N3dR5f+׭2]@\v21(fMS V?]6cx2.=tɭ%^DdvU.pS̘XyhSo=WM9qH׳ G9Ȥ8X 1ġcWAm&J噇t2 5T[ aeuoEc6w ƂqH8lgHQ.lw\xm:E!ߥE;&HZBIKŇnđc᢬ : 1*$W[{nPݙ&⥅6ٓz7UM,J6}ʣPߗ#tڎX'-EsN(TؠpUfa`ܪYpSsej՛*7>27/OQ@#(۝b[A7@JFWtzӈhGGHkɯwTsrk fž H=rʇ&;S~(f\tIBIvXA~;C^YZZ(L$(hG|\z;ʇ dp_+39'D<'XǷ oDh08EI`EIʕ4@8=MXx\(r_ iE4$p68 dm.&%xh"]5 !Lp].tY^B;c}8H .J^kLin*1cOĪ_phI33 WʺPv 4'k9ejט\'CQ0>@|ΆmTm ͙ʡyQ t@NF TS:Edž̎~:YO꫐y"dD|M12H:jdX^|kɾt 3mran&BBD"dQ$+!6q&)3 M vDXk mmTX(hA: F4ϗP&{-"Fg`E Px |Rݯ2YIрa%.R3kbofWG;;Ar=0;kB) AB 5AO2 g~NP6l˖uIcދہN*;(Q ك(P`M=B(:uYUOu[}H&\?sY 8" u3ْoPwH3_Qc4!5LR3%(IJgDC |#`ڤ$SqoCj0gXsCA33D !8}Sz렝=IO~?Vwk9[qQ5;vV[YPnT)coH4Dʮ5:t~D Q _Z1\l65*މgE+&x5<|x F8Ǝp~fhB8Fw!h=$sNyќTbT]:d)~ nW5ܥL_E H{!XS[-{[* k6BHue(g*bVہ.pf} F.r\BWĮ]:i06pxGK3]B9P]8] &uFKp+/F*tKK`ΰ@X_Yq N=g |"7@Xo) u:̯qS Ԇ"V^?On;eA)B^Ez*A*dARo7-΢Yҵh %`ԖNd2 蕇j>fTFVA`oCWӗn=$X!Pf+!}e #P^ZZ]Pu.o@=V!\w+\zV{i Y =rV8a:p8hC.f6i71aHvdgeҨC(͑K"m;r$ti(09Eؑ$ n//{uA+_%Ľt꘧{eWʪΞ ;*y2ͲLQvg7q_HnZJrWDZ/EG]Bw-WE9F$BNW19f5DR&R\fj4b5D +a)4|CU)P 1A5Go i$)s3`XnS^sAs8G6=JގID h˜t}doqaAc[n+RU<5[Ҏi.ܹJU<%ӹ#B<9}:9)Ixy9 +/9)n`_jJ]?fP[NjPSh* M>BH'589lJ52MiB)P,t0@,ov4)ITXmpx΢r*Qfh%lI8nYŢsN%[[g2+ R+ݰ@Z2Ǡ!uD c#R!ʔ֭HwDqDu0So!xf|hdDT0TE7eD42E{dlx(ГM[W^Cn^4ȝҍ,;eai ϙBbRf Nw i~bFÈtzgqIճmT`G}]{Zmb ?ὲk@`58޼QeX%u8V_A3W·—+ݾRX dFL8urkUi$mCp[}4$*-  ]J% 뵉- ]^Rl=\Pg2}u`8&galʛxlSVfx'[֘}>g_8TQH#T56u9d&{ۑYBeأfV ]^男pʸ&\SS3\lwp? NO r3u mn|I)!ApU S0'3޲I!_rLƎa8OuvJ)}XCk%ElRjLinA2|V)s+p%;rշ+hrR[*kHQ"(\,' BZ^_`z|KxEpO&,9؍q,P F+nm1x._-;IW0"ZYcUWw7֝ByjaR?,J(CtwXE2y١wBMn0(WP!vuRtouǸ U7I!p( l!  >5(wPzfk4mSCoi)ۆNՠI3"6 }Sd+(hB, [nϠ\h|FHt5HPRd#NY+O`2cǓ+3uBV01W9MZRuUdܔVk\tr4vdOH)X;))?f>0yHf”!BMt:cz1Jhø@:= ;ߕx|vL|0*8K3G:"Lq}[[ZaK5oP h^N-|smO՝:VePtX (a3.M}{aoPx%EN8S]^DeTsg e#(.N8nR:yJ[@\?77]Hsi;ZEkwi~zTzDa_M!!*Q0"n[{KuG$E()oX,QBy)w</.ZPxu4t1KB#*֐Iy Gy~֐rjmg_hgR$Ҟ!+3\hwiT֥q" 7ePse9v #F&7* F-y <<{Q [Jp6k4d" ä$@[Sڬn㎡(G9E~nZd=_Qw/j6$ZB[t|wl I[!,yWDȩ8Ni 4$0'b/m#H3B:! $EefRU V!%S|VI ".EF <#5׼s(~Z] 2<&o!;Ǹ)".#E`(;OX*+Մ?{M{ՀsV%b%Lc Cb -1oiO柋řr,΀se2C^ A{yE)S2X GkS3GH!',C(g (1\Egv%#n3nG-9\<qλNmqTW3 @}gnFy;i{OFރ Εh-'YܼF y~^K[%e1%Y̋S8%[BJQ#|J<<#ԿY rny+]fZhؘ3>;?V`~W1(²TzK8KG:eADpbeE/J&. TÑS.a8[/%E~V` )%׺th $ T-SEAzK|Z@U6j3Gjrr)}YFS7֭xP@zS4/XK5˜&*` OĞ@"qXR0GB"yS4D'A4"8ZA;U =/vl:oeBTM|R.!XC+1p& [uބtDБv<"F WT"R ?=-g&uD<%*!giU6 NPqΫë(xeE#5+Lec@ X%q`:t8ar8졢haxf-e'ƹ~d1)#_(6tFtlya{GSPg)C$E2@h<,(GpGG2*NzZ,H,*nXL&P{ϡ&7ʙƘ/gtU|GwR"LcHfhgf+RP=r/|pdXdI؈8V^nY=.IDP#'1$܌X ƳRሇzxDdFO2";yO+_333|{8lXml1b遁p2~CIjYyatJ!U=V/D|2Z E`1hs"Z&,%XĜWsJM-<7i_B;"*cue-ʦxC PZ'RZMSP5ס[+D*TUlBm陖)8MĥX4]EvwUj-We"3| ތ`܁voqJ1euAҿXPDQٌ芐*\B]}? ȧj©ߣm|<U[O}J^FBP4K,먾\iơdw!BXۢvY)f\1@pƨxD7\)zפV#.y Ihg "SvDz3*) RSOEBX,$Ne-?֒K2v8 FcsSBJ̡q&li Tq)UF݋U bǤRAE2Z)%c*FEzoG_nJgCgK(a|GnMݝ3K{i65xwU+%0^F9w/* )\fYhR;9*xgpJVXt%NJx .<('7]8X/O^9n|t90lxe3tT;{2:4w=~}"U0,lo %t3utng7唀0 )4ddzЖhV(dÌ1ܜe HʔzY/+8ɥ~uZY+UvstOJyG-nҙvB,̵(ݣ̉=PeL͒YVk:O"O$I-(NAESfV4ICeF)" B2r{$DJ,$`ߒr  q*eǥO p-@ori+ǜpsw7]sE,9rwzZȾ|֧fQY 'ʩȞMBn7f2"[Asl(C"S5 )EqVUZ‰fbS.Rxp:u[J2GVF_ҾjRe:-bU}[ ?dR!o'eK%Y'5gpEa/FdĖt-[;ȲoDlYn;#[)nגRb m LsC#DVi&PoCR"_c7LU^Bh%"ٞg>G4}'Q>)7dXGw / i%^9m\.^zz;<o^,C0kܵ;"7O-6RAum3?LWٓc)7˯xuLq$FNPnڵ.an;b֫(*[mW7Lj;-}vjMΝQT޿GJ9]üGTcU,$ZUͤ_ZMqO@G&vbLI^{M~JsQ5B k?#l鐉`Ǖw=飠DbbJ/1\֐DOEWI~;J=~Ʒը6"(3we&26^=0.4jy~QE/9bjQjYQuX(7r XvdR4/VJX4[Y*0WI;WFx^Boyv/=*:c ZRԨB {NE8@>ygnx `>.tKV?jY] z(4O7>WQ㹿waWce/㕙Jv3WQ[ux]_hB^m_3]?^chށWTQpVze:2GU֧,7uٳq9@ __zǝרA7my#Q)x?;^}F},t0bVLg.9-Py[?R (S?2(kx5+RfPrDYANr♓xō#yW-B tSZRԮ* GJgRLefrO0VPrz~k|7gnN#9 aY\>.RVPTN#)kJJH5ܠ޳k 7<DId3k3U>xOW/ "(U~hfG;;(Cé . ['&r))} )@ !fnu|IZ}3tʻK[2~)Z-i'^FZsqGK>F"sh=[?sP'1WP4LO9詤J,VpVՑvNQL}y,Kwpǡ>(3vcxg4F6J1Xkv0:-r4RMB*>Vtp !38ꔌ- 74]y0H!+һ3J,\$j"J&V@KSkEO02vPM.3V\\T{$Q+kuGg6ҁA Z|iFL-wSf. zTvJ#E@ z=7bOz8rJ=މ[y2q䴜u8a7oY77{ͫ=2A2FWWqK%;Yr'sdrƑ$F[a1s6H(ׂIJt?饸.^rn*|V"+%HoF%ÚIV u%Oۃ2ãA#'_HKR[d2ʑ7!D%@R-({h*'1>i(Y=P =[՞Hf(HLH @kǖ\{ ojFNR6QkZ 1ݬW0 g'NPŧڧUI*ޚ28!ӵ @nE:-m +{CRHrb[0\~'H8VאD /nWF'D%2ǧ޻ gIS4/na`}qxDA8ICAI~s;[t-`>A!d7N8%*o%$Ddsl,ܫ#9>nBzM1hGb{<#oY3bw{U?ɛ1rĒc4ciźg-|O"J'9fl{LDɾE8 %Eroh&^C}ŐH7P?t6Ĕ'4gOhъHPmlP~G |ҟ  Dt&K*x$:A]A5{ί/L+6bqqpZPܭX X'sy9r G'g6dUpqA: +G&[/%Royh8\?q_r\=gL)!+_rwV0N^׈M{^R@& E;3Vϓ&`ZU%k͛A6q{c*J-(ɈM *D!,#,b9KT~yNYi! &(㑎z ||Fk꿀aS#MG.Q~k0E67G` &ΐD?2 |+ȵQ?ȻpSIHAI:KD2YP{ Wk &]ޡwv%w(mFZ%<2^=!qu(]@}-۩̠-dR^3'HH;JGFkȄN#<e! &@nmv!7E/Iݖlr-4{︼R5^)Y[]ʎ C*ёN@3 p`'4ztv吖^|Qq$@M\C>R;slkBIjGRV "jEҤW]ZLH]C{TEbWP괼>Rs󻋧75v˯fAfy0Oc8urWoa\e%WM^*Ll.YM]+6KԷo /8s4;^CY/=T_X[~q;oǪ&x%@6Jhc6^ CEɪ0P #+5)^ymO^H'S #MR?S2xerQkyk*.5?g6y5]]91&H .ߕ'a`GxY yQC(VisJ&?&5"apDdX` N~>+3}Wx3;ɻxxYh#G?%ڠ8 4y7\3a|4;0_b(:ܸ41y3s 9s<ߙ=]l ^C_-sj h%a| =\qo^z4^+.:$II' mgsY /) Yu6y;ƓX %1-9[-T[y}Kl}ZWf !;>yկu+ U$o;Yxz(J= -i%Bژ[}K5|K~lIA7/ ̐vA)e;7]MQe~bMlͬ&)cDƲ7IYNLq{d9FQS_W:,UΈZ WkfzS='ʗ8s&?&[YJ<1T q,utTbx^ӗj(5CV/AC LO C%>gs\<.o_~,~f?˟~͗~]åXF?ї_?/~ſo?o?~H~kc֚uR>t7Dp?~&ec:>~_~'/ /ڶea۩ VI6ͦ)k{Y/_g9̰~~5B:Bڨ7gu]Q4ڿU@^|Z~]M-ۗM bΦGU<#xfg}:g?ڸ9g}ӸDG[7 ja{h؏*vCm@[|oG*e%0Do Wƿ͟R&[ܿ"BLBXmйgn樵  ^tLg\@I e.?#yvݠg 54wv{!Sd;{xW;E%,juKqxg372%Xg.f 7}߈ zV_w@*24_xaŜOY`zc#j:g\մ'2ܰeO?,\wh5!^lUm?wg>ꭣi# WoVFR }ߴYd]^f7d][pߝ,`;p}Fx[9"Yۈ;*?2`ëK݂:mp?زE!/w;*u;C1e"5(βgNaZ;D9\Ǹj!m6vSߡ9~P )&7g;4ȹ?wv~1\߃9f}Xf8fU?ȃ4'¸m*wS˟:C[UO>*^ «? |\񛿳){ endstream endobj 2923 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1395 >> stream x{LSW7Xph"c8LE@DW:RUa78dX0AAi狊PI4ͩ.d/999$I|);-e0 }Iσ!lpu%؊gRIEH*2/# Ihrz 97;3ˤ H5+]QDj3 I _1S|>uCCA#)̙YаSg BC$%D O"8b4CHᄌ&H!ސSH##C !J5WM]P+Mv>ОenR/>lG 6p=PC5$4D 99<\G"8*Uc?±0A;|pY "D#WTRv ưFttT3%3툹>G#@4Faϭuu(Qv.hU 5tc=I͡sMٺ-6_9e;$ZVz;d!"Ts %S)% q) B2d%†GQWrx[JIQd >f]QTQ\Tp=dc`.^%녺.֏,hΧف)% ŞʥW&7嶠袵1X: 2ڶu`W-Xv uzdi%]+y(O]QT-k@0/iq9؏YA; VY6T_A55f}y6]q.f> )nPqXch|ϭLR %CB>oti8=Z:x1/L<.Ht;_HlEiNs uB@ (~B} D}n_^A}w30oaCQ)K.0Ȃ3k:wǎ~F4wCDm4#LqreȲn>s yl$D|-X8iQ8 E@)Ԣ7d.LEJ-Yrz̀T64tph!QC`I({8KarV췙e|e9˨{RGt8Aj endstream endobj 2928 0 obj << /Length 2425 /Filter /FlateDecode >> stream xYY~_7SE} N< l8ْ%O~}ܲ>z`bu_U=ܽgɆ0oH,dIy(6 b̓ϗ!ʶ@OGbIPiz$cmכNr9EOj)uf YFKnøQlM1 [8N"  q&#&h0hv+U^@+ٞ35AEyuba& sMHelV_ 8dllEkr-$!q۝"JZJB&Z:\ >tpH 1md=P Əkő`o`mg@-BY[3"9!ҬŶۗ ˆܸΚV{pEJj5]I.|ZP4]vD|aj;%W͂xl8a:wgD( Rcނer8HCue`ўFfh:\c\.}iUu4ir "h[5:aZxSNUɃM0A^•E`At ,2S8V{[9xAQ΢еH{t:-(7hX1ɐ LQ2i"ڹK /D44Kҿ17^DL \c 7&6ir CmC+ 'inYV)HD'ĵ0p|] ćtSH>q^gҵ=V_Pd<|RAXJJrnpcV‘¢$3+m%`gS5sE}/dsɡd?m XR;˄=)dik\|lh}zi|:j҅w!Ȝ2 Bv;T KAXБT%$64ɪG!t A?msWSZ1.h|(Gu4p>K^-z?FtWnYb06N[i؀*)r5?} Ylڮ3m)+e(Ҹ$GXٌdb̓Wh# &:T1m alɓv#箊N֍+w~ڷ8 G;_|_uǣS<}*Tz>fR#6H )kuʑVES襶|Ģtq#U.x#Gi?|W%Sd40]]6vmWhw,JEw.^+ am|Ѿ<\vF}e~V M5V t!][]Hсd7&kͅ|@%_fUY+S^֥V%Uy He^f?]1! l42H+ )ʁCtlpDJ;؜]s##~u"3)nLE»w8 Dp %Fl;vw|C ڻo*KcBfr%K_W!A<[tտФxHB : >;0t3fEAQĺ9 &bjvq\[>vba33ZҹWJȧt|dONJ{Ouȿ,4@V0w>GUXeB9 b -*@pvj}bΖƸad7%6& (7SDVhF) rvG6WEx#@jO@[髧Sfjhͱ6S$s7dc!_R,@!"0]e>$D2kقrm7Iv?de3R {5 Ӵ4ނxU†Qa4]ljX#H&q)qZsƎKKJPE7%ǿ&ɫlUǍ ژw 'R endstream endobj 2924 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cont_snh_all_par.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2930 0 R /BBox [0 0 549 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2931 0 R /R7 2932 0 R >>/Font << /R14 2934 0 R /R12 2935 0 R/R10 2937 0 R /R8 2939 0 R >> >> /Length 3704 /Filter /FlateDecode >> stream xZˎ%e}3Ɍ|y Y-@^a4؈9 /%,ܷ2'룜(_q|חV*xZ//9._]ֹg"{_LگzupQy:uԪMr:Y+|AAzV, dL9cמna0YלZR 9R:**Vh@DMOCtY'(1:ҴVi餍v._NHīSa0D 1٩1ʵZ`܎\ K؂C+5a l%W  u:6,;W,dܖXV42\w?-$RLK6cxr-vu*AH.XR㎈t9og֝6* A'Zk`--0'gƑ ^mZ}ܳ)hE * tVHn 03h0-f7q 6W`XqvQAG*bR"#`*H$f veඳ(1%յ|H6`"HNG腵 a}!a3 oh2?ݒH!ӁU@C.rVEcځU0j|y2a 9a>H\I tJCL,2=*Pfhz5 CcZô3o9#HC5+˭평igr@sWpDe?D"ii 2⎽-TNcd)]Ǝa(Y[sĩ&md'qlZ8M Rm F36줔`C" ɘ$ӈcd4 )x$Lp 6A䭁9Ƭ3RRh5,PaACDgjx0$ D6<P"ydP2Q|Dif,׶/Ē7EWyU}n)kN\1O,@υd͊1<"4+Fg j$QxH8%d`BJ`vNusi|eiHEߎxd2fM#Y µL*+SPD*%{tg!΋{x,Ԁ:dT$L5V  C$i&6p%k^s3~਑lUDs*yWУ 7h6[w8V*F4jx :78fꐤHsɬL]3YHQe{&PZNgb3t=cNеq_#dFb\4:6\Mw "FJ L54xߡO6fd ի$L96oգ9p.рcE!϶A 2x@ mA5v-'9Mo} v63%f7a 8i Y_c!s `&v$y܌GJG 2 רW3&^ֵIbd(/Ƌ}ýkK×KSF @Z|3;ڎyʁ5qCJyΝ^<[n`ۍddj _dmB֐xzH :KB, w [ % ( ,h hy ќd- F=4ߎ \BYaѵ9oȐ4g‘uoU^2_[0 "8#o;Jn, !6Qi M#muAFPGP|"Cg`eP_]INEQ~;}ΛF6z{!;<{<1TrVS+< ^]G:b< rDrv|Nj(y\2(R}ߔAAzSu~uvxf׏zdY(+#Z{8]rWHHnrs3 zp϶!șM5腕w~sNz)ȉ`S/s-4h#o9%#BH̍Q$%$so N+tX>sM K+t,q7iZIǰޒ{g:U' FG]ihn0z1g }q/:44ո]mA w~H⮫hw7hLpC5l0| 7޼(R_&.KG| n.ˆ/\ endstream endobj 2941 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1208 >> stream xRmLSg~/U^@ӌ!0>+KOUAP>\A͹M^ŘLLdjmT8D"N5o"KNޓ7s9BcT9 տ 碴3%,l")xW U$E>ZZ|syuEIQITlVXa,)*S*qsy̴tJF_VQ!$e[ cED"AEsBR47< ݧ#c@,\,9,60@|;ն4)@ºҜeCMn`mɈbI9ЬTO 8q;H!cV#]CI8smpv=MO'瞞}rq_}I8' VU>ݳvj;kll?M/4֧óHТ]$bgM*r7Fܙa` XCBWwnLmxHvh~wO.vaYsLܽzd~0k *!۾֎ ݐ.-xO^e:!ҺD?t}[ߋ鉾yggWVܰ_O`P="J7ʏ:!tNV}ZxO5:a + o&nSbb"9-Eo Y< K{q{I4" ٻ=Qүw\lOH2%LjN$AZ~(jm PBO;q*fgjø8nk9FrHWR,d̳*?튄@ X~_\q#)r.YqzgLjyF=41k"f\zɧ?J8呠bzBLpsە!aFM@*L7:` g5d&$֝imbo'GgRh&}_pV~ Nhv (O (+\n ć&)Bm``'ȶ}EV؝y4*ωDCrr\=;116uqX> jP';4,S#D?aHl%3h endstream endobj 2925 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cont_snh_all.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2942 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2943 0 R /R7 2944 0 R >>/Font << /R14 2946 0 R /R12 2948 0 R /R10 2950 0 R /R8 2951 0 R>> >> /Length 7110 /Filter /FlateDecode >> stream x\KfQ~?"HH$n)2Cp#@g=j{m"vgUqg3w~9_Gz攞𳵜W]WǸsv8fg.&2^'OTf.1 կI*R/,nwݣܯ֞6r~129}ru2+p F^q '8Ԯ3]Z٧SgNe|ͦQs5s׊Q 0'^lڃGܳ\Q-ŕ49%@E AZ3&K+nk Ksi8*nkc`ĥ>W>cPw0e5 R fRqy@/̻:FM]Fޘ.Q,?b˂$-v, P`ԾvdA!z´O9? ֍i@#8f&뼯iߵTiT4XkI)= [J*%8iBJp^dJ&,-`]\ &LJ Han 'YrvHuihu+ 6I婇Iro7wXt/dFCT-g}T@^Ub߽+#I+V3GyЪQ`;W%ITݍ k1Sdpj+0vWfoLJ@'^5D$N$~bL;˲׆i<c>,/nFg-vQ$ zm"o읧I$5P'r)]O7Iohy:&Kv4bRKAOSB_&`y \4y Hˮ u&U>0q")|WFؼ-\'^Xrl\)0XbP˂Nٲe-Qr?,d/q]RPkXZeCBU"$ceVTK/< (۴q 6Q bXg`ALP: $g ҘtppPݦhW ~ ff,:Yovn[hen(,`L\N[.Vmz)Fcm+{_U-RJ`ib WċYXuք 7/i!uO2"wDSJ,/b`x:9uyà&V2Ҽxhf&91=(j{HTb<>Pj2 8Ʃ֫P!$& y #ve?8q/Th;/)5SMj!YQ?ϤXB͋ȶyx $8pC:H:M]a)-sJpC%g H!K+`o>畩FH!g⛦|硯V;f 3x A퍠"fQm*K4 o7Ac\papmOO3Fl ,GFlv_fX\0fi&kxiM9 ofs]g0ڻP2 Ǚo&k=mi+Npr5#V eێy0^/-U!M{9-Cʮzvbf7T (waqrl\p嘚؞ؾ!&C%+ 澱88)v1< W" `ʙT晸. ulcsbmÖvXx<駪~6UUg#޽ȉKIuoX#Yv%r& linf[<@g"5{1bx)0;JRmNAMm[. 84ݔ0GuřW /]G=juݷ@F,ۘhNA{X|[2cxi_@0ڞOY9=֢&jA,?5Jp{ʩdhy`&1;ې5LE8c1ڍTx Lg:JmKhUd8Oݕh5XEr.t/eY#1lƔ@5F4M!ŔkWNmy-l=Tj ~||NjHPAK]?jcV+n/wi׉}7 g3ƴPFQ]Ǽlͭܯl@qV\)[7疕+_vM=Kbp@oVq}ml a%N6fKw{6FUj*dD=,f&n\_EfZrY >J%L;HaS8"z)iS9 (Lr8)oӞt*#mb+,:05Y-`~1k m/󆧥k2e-AMS Ŝ*$<%n;,9 B}|Ѣv0ؗa2x6q<dmN3Gnmͱc]I֜Lw/2 ?6±iXdʑנyшy_Cmf:`)_#;#.$h$1i]'k6cT,{*hx5alucEĒ fĘ,'J~YhdOҒ99x0vpjDdY}33)S%8ح/X Vu+ײ>љ"shՙeᠽ' BkV+;R S*#=%Y}Fu5&-8&W`3)QOS 1k)7-- +**\?N+1a M:q#cݜ18s^"vE%rH $.EJ)'8c9#r{2L,EM(nÊqLDRKDI ͓ ,i*e$#T#Q 'gSB :툪w`*~B1N f䍁*{(TTpeY{4P ^eU*^du͝~l]in^R%-Z #rdBr& ΂|a8Y69Yj,]9x0+|`{- ń\$a*j.g#AnbOcrpJṇع2距]Μ# I=$ik\J\i+PusQyrf(:1:³D)JĩztG#a`&{@8[#",vaqxLvEN+;ϧGKnG$N345[4]G8 FZ)WQK~Ӌ{TkiamDL+;VQA&qG0O s\\_%QwO9 eS9ه0yA_ܮ ޤ=~gnQmpGtTV^ i<&T]H-,Nn}SܲF4Ϟ"|:H6 ;NE_+Q)*˻{giP==zhӮ+숏cCʖT'\LAӲMX9(L.g6RTE9r-ӣ|DᅴfiE=+Wˌ=旲˖,! '1~:2VhXznlO5l[Җ!顊=@2#EbTw'z8Y=Rؕܫ @}Ԝka@MVm833L7/7H*pz-]A%+̚]J* `}$vUI3yq$xU늦ݒʂXg$#$(~VOSN[Ve5*c|lvX:d(A2䦕S\.')h  PnSI}m2{㍥/2kTݰV8./SJm,[Ȉ/+#[W= lwa5EXS= jꎰF>FaȬ:SPhsdٖ2{MsrUJVwݞj*0N 5#ͪu\1Îc"#lR"ƲE/HDӻ=Fw_v64<$nsoRL&q7I'4yȠ~\gPr$$D3N<0I9NPOSW~}̈3Į m,4Ne^Y aO|^w>q *SCS 0ucbu3&Ƨ&[9(HJCP|!4&LVV-Gw3F{ H1_>:?kǏ]_S~WǷXYNn话}" op=7*2_{g_y|g~|_g_</yu7O/c)~IW~,wh[}9& 8qˬ3CsXB}}??}{ϝ{o$xx?e _woq9p?f<#}~c6=r~ڀcnaL6djq׬$ ˪y~rt?~~:0=w'7l3| 6rG{k K,= -%,̺&^ȥ4p<R7 vGWSaT2{*~) @nV;wIY`SszD4>4^x6^.=l}πek2/W)Q粕lk7v'??6G.?}`X/kGgsd?鏏}&8x[~A#}D/_Vb%~%Ƿ/gbJ:7Æ9D&=e嗝y7 /B^V}F{#J Bܔ75wg;-)>cʙ]EeJChDkkȖiXxUI_+~ lbu&8U׿/Ħڼ1{6dH>cG= endstream endobj 2953 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1090 >> stream xRmL[U>½W` 5mӎ1 nHt"90f[d8eLp!aRDJVC26Ei<=s9<=EQjMXʍdfC NWJki拰zzV[GbՄg*#mƗM%EFIlG$$"IPJtMZSתuFy6 P 5?*^uTT\!ڇrP.JF)(K/D*;A9M28Ǐbs# nJt%2 70 @3 =i/W0N$㦺#%Nb^5fv~4KBVK4r1>?:vѲ"v`3L t !$(H (4ē&N^k4."EF3Be]J6R(;Kc M8vt}ii3g?h8N`D76^js^[ʇ80*%e3voYKr+-Ӭ! -㵢"mr O~IgCSY]*i!]<]9߃6r,ę;43N̟WgnYkE]r\Ȓ켄YN۲%\|AC^q?vNs91-~ΛqqJ^A\z,2wsc7U'N\,HqC>9DU\檪+ ,9d|^ #o.9FYbfS]R:wdM\xvnݣ]WxŴ"$+UWdTNޤp%y] Tnx"Ȃ+kkb?c' fGU__{6 endstream endobj 2957 0 obj << /Length 3489 /Filter /FlateDecode >> stream xڽ[[o~_a䡐wREz1hE&ygd[!iq}ᡮ<3^oDq(so$6\ mSͅ!Rnzq}ONnR͟%fhtZ%#(IjRT:cev\gDj]֙%2Pg *.)eXeDT#kt-eSU7Cl.AEMlGULt`nC,fD6T SB iЅJR(J^/wCi p+ Qo6SdC^绢-jzmu,ƠP#ν~,mU0c7[liu7-(krOoy%6m_Pmn6|cm7SZ˜~08f> C"1ä#~QFxQ;LJIH"ڰSRlLDqɀ0ES.aM FF6\|z0f1a/ <P f=ЌSicbBN%[q+H{èA=u8PODtTh.Լvp_L2VzHp CwN`JOPyی uJ%U]Y6UmìeXa㐧^`^.۠6V~A l>-$5eN;/uOcb7x!|;HDv5tO݆%O^6VdK3"ږn: b@wCn% l/ar59:J=YE}:qQF m+D*znc-'Bϊkf# rR46^Qe֞R'WP&ic΃wYΫ_0Y.5L@58a-ż_.s^m[Sz{lrrv8 oWRE_&-e[oHݿ"2erޡH9IAijg&.t (]G3o+JFNS Tb7>G]VR5z* WpYL˻g=rY?.L2@P^Wy*>#Կ~kTBĜk62WHk[*<1>/ v 58vwbCTb]c󾛬.⡁A7D8<v4Epͩ]U %*|A!píOIp$l\q`6{zlCeÖLdY:;#ə[hgi厩xdG5xJ:}䷠p:Nia"ۙ@y5Jh!Ť AxB'=<h-BۢȻ?i/~TC -*Y4s 𰬟:T9{RጚAڞKI啐R7ˑHX;!>qP̂6٩V7ڸzH@ G-:AgRmQe6ٕyʒAѰ });'Nlbsjs;cnU&ǘm~S4*aK%KAQ[?"`t L`} c *{ܙM䆥:ӯґ7zT,f˿j(p_}ׁ>;TYWŐxNBgeĆ0v^uF@\Upq՟pJTI!i53<)6gwW |,q%?T;<8l `s]FLJ:b L +V%&>?viSC^r @Om*"5Nd\c~D]8 >*f砒udd78&ċYBأ#L"sPp3b21~k UOl#Zpag4y!h6:M';bAKmw@2m(2$ro3v%9 lt*M;o^ |Asz]'cdLsn.!֟@{ߟ0K 5vo<]K83!7/`:7&7roxYp@>asHP~\\((gcx8vCY;{ %/[_ sH>̦9 u{RW|3rr0t͞_ IZJ7/>PCG@X{ULb,f/:dƜJ3C?d߬:CCv <)R_7>o6q;ɿ0b9ܬ}kG6^.e[~KRQ%EqCB4oE ut @j4nqsB&BkK7& u)3 Voy`Ow NYϦ\lb7w^{C#^+b2/]sR^ a'M"\ o02> stream x˒۸>_SYx|ns;[9ds)jD"=n43孔,pw(VBۮ`*W~EVw?3n׺_C?݊?J=ܮ/qj̳i2 .ZY/M5w۴Swsd!]qa, (Hm; U݆}r<]|MCՆ %EZ\ZhuNլ,+-izR%! )43Ƭ3_@1*O4"`pT&m!@i v(ZPvW~J03^ߎyoKrmTy}[Ojh^i4M.Pq>އ]yx^^yg^9T&Њ u|`~ z'/)EϺ\?b^ *@\nU5N0!qNE}K#PiK{6mWM͘-L2Xpk,щv*t w w9];C-F`C%kF}n(惡vͪk~UYE*YI6͡U 0A#igE29􀚤ljNW" >pW<%h  UW<'9m%〸0iYvILd']9vZy#"R_8|la3\vqP%/8S3@H=Nor4Ja<ЪP=_ddVGȜPPVU#7&'@/.\ ]nȐK %5Xr/b$waBl->5alh;Z@ۋo3Z%m&pñC3cU{* -d"+n: 8m5k!;Z@s2bǸ)闥`vb1 X\Tq+|E{˜` $B-E0c*'+,.v]“ Fyz4PC58k :ô; ~n'䝑$Y+^>x8L `e l-ck!ZkrCR}3{*/գxe;)PjsT$)~,-[E\ Yȵ/eQ -sZ|C )f@̙3WdV?d&~xIyV1͢oƺ7G6@l|8z1Z8jLh9"qy?CS! 2GpU ɳϻ&Ao{ x2- ҟxH6Z(_Э¢ W}~(KuyQㄓ)ѣgb\ ?nZu|C_cH5$!#8QaG>E侟d9t1ڝj1ݖQV B|*āHۇ?7MSbxĄDŽ aTva޵!&@9,-cw713CaXH`fUn{܄¯|xO_x&g8"eYggAoh B ?<{h 9L[0Υ車N(g~ 4|1b [΍'o= }l3&7 LϩjN}*KO {7I<`AD1ƁRWv-r>^8!ˀGU ovAv{ %^1b endstream endobj 2970 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_attrrep1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2984 0 R /BBox [0 0 549 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2985 0 R /R7 2986 0 R >>/Font << /R14 2987 0 R/R12 2989 0 R /R10 2991 0 R /R8 2993 0 R >> >> /Length 9625 /Filter /FlateDecode >> stream x\[]QGo~VC|8d'=7c\' ͉6<>~zjY0{-Vث>#+cLWƮ5^)ٱ{_1#[xOS$$us}.|<6 ;${Ӧ¹=8)ļWX=[YW8YtՓR1Ѡm=Bkޛ?j5b8yfPX',Q=j{7(Q=M{Vu475P2xXjǘ+0JA=.'| {O)F-@eG~~صu| 42O0RfP|z⩀$fPX/.t[8'9sk4 SNaYuS[փҨ  meܧ~d֧JV#Kn_ޭb__\9؞p gy N}f?,hgqhBtlj!Zb7F/ a`i}Ž&0 V`;S'c׭̫ ЉGTIlE/s5n*f@%?r !AisQ*Uk|#E î00v80)/ssQ3F8ϴD^x!c 8QznMٔm8"q{h WbM1@^uS!'@(;]VHBXS^爷Dj`-]kv0N @>0=>߀"b-<8sHBM>SrF`=ZTV˫z]@Q +C.cʷr,0@nm9lM,8\RM b#Ï0p$5 Kg1l-n#Ş @+Ԅ*NzJn%4 `wC ׵Nm"~=K969aziSh\ /WՓXQ'RO 7"G"x^t|'@ -u`7Ѕ\1R2EY m|k߷ pĹG*GF @˚ƭy;˧ !oۡƨOacI#طmHi silk"Y;V#)c})9<$FDZ z9v ުWQ%zX' P>: f$у Jpir_7ܧ:1%G๸[ġ. W2DJ,a`EVFB#y(S18kMNF64pp!}sNFG_@t˗jMj-j |$]1kfŜ-x҉8;,'KD3igzf #=%~0Qqd~LN0,zݠ+82Tw")ɨ^ ]eř܎6p!a!4dd!p42ll(N/dm{dx j(`Je) v=dIw إ0N.qKHDZ $Չl0E")APla$fWU@%Fb. ,{F &ƇIk3:)BDcRyZ攟0O[Ѩnm*"$pO("" (VqQ.WK=n%fh$> K< v§=m#Rr5ٕi:۠5C U8}T{]q$1ɲO]3n:plB[i#y'Y\(nmL[F#ePtg2 #?pX 61F} pӈ`_<)e)K,$Үߑ 4 [%C5q;ebs'DmJF f5 O~MX!}z>}>"W:;)nXLe¦=!rNy(PXs*bwG !18a@TӻI32VOG9ĻeNfbP1b*J !8 5A#Av>ekÉ1B Ҧ4cFlw0^;jI$@Q@BS Kc5ۂ5] I6=L z7*LPߝְN2Ⱥ:,qck+5(}6Imr%.IKvLİίF &LާKqgE/v[ YOb8ٕ>0E`I4n6eLs{$xTB: t~= 3ʹCGQ{K\ᆘ^gg|Sm^Sm5! jҹA:|P2TTf۲mBXrpr[Rn$ ^ix1±\{\b\z0{`pUEYLu%la{5Glѡvy8"WX3c2Ku0N*Vh.;řD2!ρ~Ir\BB ^-e2.^=&R-89m^x݋wUKUlO_4a~fe3枯VFaxPK7pj!eOǺ0\q!{PE_?M@Y#IyaJ2fxJ6*LtھϛF҇[6 u!;M$΍,j7tmFj|RPTS V 4_@պJ{7 6΋-"}xfUًGrJpo9ngʄ@ ']FCp-.-Qa1r+A#p,fѷ鈷4v<"]5ָA AZfJ c!Szwd7;JdjpЁAp'qзܐnDsV%/%Q3V`E3!*|ߕd)f!mnV󝅵|,vB~A6R"`s؋!i/ElC:_&l&R\+6n'רZ`$SWp%&qfl{->V쾗J.4FV|2$/o.K Svh vCНB%-^y ԉtg틾f (DF_cm[6ܾCF]%Mu|V /``d^a?6|^05۞xu%S.7 xŏ8݌Čd<Ȁg7'+Y«ȂjXp=ЍF;tu*29}+. ) Q+MZ3+lʏ`źDgm1օ'sUuFW[Y[3EJ);7VXlU妻DzԖ%S@W0(sLo=Q/SU2By,6AGGT? oUp!Lu Y`͉A(cD<_o@#& %Zit;P5i΂(k};Yӝ?06z_OxWܪ1` `K>$`ˊmaZaSD|[w-x 舷V"DlEQ.Ujq!ޚ}%UÐ%imd@J{Y/Ze/1+w`P63M<|0NkXŗLJfsJ<ˍl1׊o7G'}$@tQ !# -tR5ޭM^#O;5%B̰t]*W4%[Rv8Kñ5TA@1V H,~zg"3| _OF~I"[, g9؝R@l&Vn]3UC@ffu@^]Ϋf"]n.E;JV܁ec:ix$[\kZS.WRH/ Ӻg;,( :fz6f*[rŸvh _Ga->e.\1ql$Jfټ2_݆_ޮ,3=0%YW UP(d꾩YwJ4|7t-n2NnG%*Ia' m˟ټ˪@mondigM1u S'9 +f_FcPg5wy%u1+^q9ZH[ .YJ*osg9|d~"I#D$UV_0upO!Լ8иcraN8:PIQ-! LOb+:6{I~rHJ"E=k2le]1Q('jV`h .fqYkݱ(B-b'c56=1'J>+oQT:)%,u\,[OpKԍ]W]Wuѕ^:y_tZ % e%[LmT{(7qVqg6gnSFҙ`HBXBMdjt,S5"D ݕ2hv`xZ[N).Z쒳3{ 0<%GruygzDWp%sqi֑׶;IƬbW5]I%&;sY !ߦ^̛95XMZ(dIJ[_0-Lb+ :ܓ,]ua&W*돎|~cwώo7i;y9O@jBw r/vIa}l LzuK8fFr ;jK&jUBbTF6okrĠDdBvw2}$F?7L,i3.28?$ȉ'jOq2I90.byJv KRBŠt%]lYbҳO7:ovRȄ,ǺB\uWpJMߢ۸ԸL2üUk+^dx/ i\Zgf5i$: eL[poI&y:ڲƝs=vjb@Y٢~Gf}KdW7elq~@VO2wYErʑ}\Aa*ŽyaÍ'}1U$\Ɓ>_=JIfAYɮW3nU,>+zYG9醚k3&UӾ(=K?3nIxxL8n>vz<KcYSu"amu-4gE{D3kA*e7в汞 վo.oD7LU>.Pj"s%qnH35v3'n&۬x:#u"CI;gk]^#K1W%ttU喾I/y RdTsq3VØ&x{.N]nY^e{vE F&3T?\,bXz^dف0Sfn'F̀$vm[&q,-/_ pj՟6H]n 2tD'$c2U. p돏|6{Wj[?ZwU #C5$^Uڕ|(q'7=՚l̀<{T5|ޫ|ֿy+o?b_@/RAl׷ʃ$a?WQ1O_??7sx_K,zbY<~ez%?eo~{pPP~-A`z|۟ϾݛGwilOoZ^x~dV t?y腎Pkwl؄p +^@LN}۝{hΟJfga@W/ECE_k ԏN<9s!/_0; '+_͎awƖ3w_q%JJdDJX7c% 1{r%+c|*$D~p_lƧA,uJ W[T&~A2۪dxK״;mAXd~$,zO`$kyyǖ]0i[auĭտp+[ۃ$PSc#'US/yQ}xǂw]|O0B07{1p=& m dgٴ~^~7CKER?})6O/Dw>_~FPM/b< endstream endobj 2995 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 715 >> stream x[Haϭe4^[^`t1\NkVI> E C!f -0u>L] z|Ь^p.?#g 6S~y цk̆V)"RˡFUl#abȔjOmXVoU'9c0mPr5x`on?HyUFet> M,MbYhx bQSiؕTcugI',@>yfm.hV!'lV,@Ï?jyHF95Ll?|s,,LB]ZWT:w[_o\ endstream endobj 2971 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_attrrep2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 2996 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 2997 0 R /R7 2998 0 R >>/Font << /R14 2999 0 R/R12 3001 0 R /R10 3003 0 R /R8 3005 0 R >> >> /Length 2760 /Filter /FlateDecode >> stream xZˎ\ ~]]"뙥#5W-CֽD6fWC|XcHk۶akqk){~~ynǒwAV?/qϽ^*?m"+rW+)IS "k5.?՚Ck1֑s9yM)yDSi5I$隲vN.Z%2B5XBRDzh`ܓV4$RH)1DiA:)5Q$UW8" Rc6hQE+s]%I8&M 5ƭ>)C3[ϫTqm&gw uSB^" !}Rr}b5OHZ[5"4Ӯ PF \i 5 N)>@AԆTp؛~O# Bn)}h_ (+Pep8,pfHnpp2 E0yTrnN%mBtJ3W4!ܜTR"I/dR"CP?!=:v1ƈ4<@`VΠC44Ɯ1gd4ROP$L<%Qg *Y6$Nv$3? )€X<%LJF.0 hq(з4C&&dSTJ,#֠[t_L99F!uf&0XGPg8g4(Dlުpm`z2Uf)*F)!a\Jn'JUpis`Y4\Sŭb@P񸤳en9(TW׋o y R1tjfa=B/XtO0 (-[A@b[ޡ *]#Ґx#Ƞ 6eב::k'#=M=ml]+TW5 %t< T,;rSedH2p `% Abœ|PRP-X^[zיj]Ll^ jciX=-2Abr\PB:a Yu6%!V:M` 4)$ڼGJ A`faɁ.biN0Ռ(T*:)fxJZEϳyrGkZƏ)U->Vfn2؀-}[qk9 jD $N?ICnjp!IiӃNKA WQlΨP}=@$>LE">M*%O@Delj-3{4{rgN Ha)HF|֩,$a +~LEIN 4.d SS8Т4cC":I\'*aK0-=![0"TV5mSA9蜺ث2'*I[Դ뜄**?9@ [Ϊu>%8K'֍I4hu܊  ߘĞ`~V)Fr{> +ܧ%ڎPomAӣ㔅ӦRޭ kЃîN3v)r۶"b*H%NB>PT6 Aj.(;: l@2g->9^ "ۆη!d'x?eS6sHyO{=/_6J< ^"y=p1Ax3#3ubP%+rSOy(FD95(S:J]{OnhDSP5d~%f082Tmx8e `y<Ц2 МbS 85``es'N^4pv{EN^oVq}wD;j}Q״oLmA>]_9mLӑjB>˔oTir[핊^=2?MQu W*zySlg4EO} W*zySlg4E UqAJE/o팟bw˧z*EIٴTtA]OX_xX40mJOW*',NYN/aI\oXnxP 5›?aC]﾿}{T·dɹݔ+%fg9&d,\\Hl;h|\SϻXMvSobVBMxw&};0&ep Q|:{3>- "dKl)_- E [xjjOgO-aMs* 5E>d+kA3&k޷;9MCA{/ t mgo,IX%sDGCet(|V:o`TG8HL @#&8AkIșb|GcƂ^FGSʡ|yH7 8o^-i^ endstream endobj 2881 0 obj << /Type /ObjStm /N 100 /First 1051 /Length 3264 /Filter /FlateDecode >> stream x]W۸_K=ײ>,[9Bn[@|0 ^;]J#h4G'1'!I,$^G [KDǒDkq@L$D)&P%DsђP{4a:!,mp[F+HĒd0$*1Rq@H$݈ [aLb IYHP,!I8B@s!1liƁU+͠TddE.J,q]TH̄2MdI - @J#G["c9r-TXD,h%p`4 1V Y @1 )B(5I0-.BtJ@È XQ6hԄ((7%P-JPo ![!!A㊣SڍÈ51X-N2 XQP=Bp9F9 Kd @5:C(2f%S F 9 X%2c,f lKfi*!@qj@v>rИ@,:ca쁎Y :2PO7Z`8 $ŧ zg#sސgG#7SAKS45-{iYUHDkFs-{"^ eԽ*5D<|d+6YY줍!; AÄ|y! eٿ 6U.!}ߪ1<~yv@tKV_QiZl*;lC~Ksҽ0xs5 ("\ ֮hW.wBH"g.~E+IZ<]-ANQgӂQYK:J:aoٙ(>,ai .yvΛP @:znK$kWV8HSӌNhCJK/0tLonHmfBrW-JM =5ihw 2q =*+fciLjOOOA:$78(͠=te~wJ=ja-XqY֤)(Z3\/*aZ #j9~ڍ=l+tVP9ԧqVpA/@(̚M<- hU͡~"Ko~[Ul`n*Eo ܦoަm| c)U$!˨>2GùȾ&Qv i]ajҭ0q9äv]//]û>x_^{E^/ꯌ1IoE}}_Z?sx}Gra?/W^oٕP?E}mm!={=}x݇w?.%u.|OmDƣ@IMd<9&lZp-nOZNtr)QWwz;LОsÅK݇w}x4C"ދx/ȿ'IuF~\$kk5^21Kx]G\--í#u~~>g{x὇~ػ>ʺϽu1xHW|_ɍheۼw/x': endstream endobj 3008 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1083 >> stream xk0Wkz&]/xTu]+the %u]] #N/I:"әbڑL+K*H+b fv/:ryC!(2B)W s6O^#9qNSƇ;=b,6; +$pg^~*yǡG.ˮ;.+/rD.jOB~rE@o1!{9 k$AV<.|%Ԣ93D py7 \,\!+k^6 xl(3GhrcKog|x6j>}ALϏBNgk@f{{7:=wgV±0t Nט d(|β~ ׿ ]ipylS+_#$眍 5uaZ{<$R[惘jz (7 `lrQdfCei?1T0n z2PK|!%)̆(i14r>tÑU3χ޷'s8伥f [TtsiCJ|8/Ռ 9& &;Tc=鸲 ,<"É%jBc;pX`o\TP`CM=A7!TDlqM"UcQ'T endstream endobj 3013 0 obj << /Length 757 /Filter /FlateDecode >> stream xڥUKo@W8%ٷ8BBHD988 3p4n 73e/$QB1#4&'L?C2\|\INޯ'_׿`ܘ8p?N. @$v:GX %X6X2eєXs ) !L*xVpL*XaNC=&kvon3h &IA`T$/-GxJ+Ί"GQ4Na2'=!yw7 ۆ^o ^+^F!) Eupuj2&K9U%7,8:zX,Ʉ XF"k ]%e. cќ0"̏Biy!e%j{;8~{C (Hv H?I;>y-zq endstream endobj 2972 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_canards1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3015 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R18 3016 0 R /R7 3017 0 R >>/Font << /R8 3019 0 R /R16 3020 0 R/R14 3023 0 R /R12 3025 0 R /R10 3027 0 R >> >> /Length 5374 /Filter /FlateDecode >> stream x[ˎd^y|RC,U^^@1s ެ* U wÐ; 'dݶtzm߾ӏʹR,m?2ߧ?ls /?O} ߗݝ㯺Frk7ṯ6.׌}/y+^;/nyIwwZ-4ľm:Gr-)yq4g۲cY8oRݳ8זY yHkRc41m|>8>&U{i/!Oϒ'eK n|^sд}l>f8>cN>j8Us<-ar6}X߻ԅԬ,Y B  &ir'Eu L^0RK#M}qiw%%)¨B /ilԡ[1fkiXAf10&TҢ 2UPF@ɝ4֜i,)VS.S t C␊Qwgkj{z6XFxXqܒ:mtkc5 k`]aI#Ĥ^E#1 #$'l1Iט{Nلk߹iml62O %0Xl*FZ\E$i.n87اC0R n0P̑;q"F 1,6{`f 4ā[q A0sK1 49`1\@1E'w0oh6x˅5(6li-M#uЦgP `P;Bn-4b85ްi>`=<n4E(Zpղ7ح gCL%[ 7ᆍ'K_h00p@Fp9#[tfHp.DǬ 81@Eb-HXцFpFz:#w~ 5.`AFyn([i{= n`S~6&EBe3Qٽ15p2ҡI 3Y{VDny8r ѱ8F2r *2GL]؃Z.D)DJfeo2Ҥ 1-VS3dT|*낞J@z69fWB O`2`;j:N58Uȥ|qŁ8FWrtRI4Ɠ.zphỴl^y F|ays lopP.t<8q:%F@Bg}) hc?f!kC#1#Pi&37遁h1܀$ J ;,%4(]q2m؄ ?!NNGęuNsx40mL @rc V=錃\Q`{@r@(p#oC6rD &[^ި lUï$KR@#8A p_Rs NC6d49oN'fH j8I@OTP(<0a̖FGxK4JMP% VӶ4f 4M$=?;rw"›0^!ހE60+q`^(`zu(4t,3]Y#y8hEJasM0Y%N0)Oan=s P42uA銷2aS`3C$f%܈`):]Np-rZ g|d?صu7f +Z]e3#GʍņL1'@d@H+ewE GE0:W*xcQ%t4 JFbvkLo(!j6XSq#Ц&K@ `G gH,6*zu&ƺHfM]X1fQ J} B2h, P,G&!`Il{2̿'΃[߳4 :~OIؑѬ*˕sx>s6J:V3A97Ct0N,t X=#Cab8< XB p6`ثȐqp$8AL=4YeSVÌۈHfU0 Q!MҀ$@g83Yp"?"8gN'U˨4&sq\*2 MPv N!s'c P%BH lqyVzL#w@f3EJa=tZ08FkG@S89"@ dIqrL4%[^ hޮՈtPcQD0v&D%"Byc1OǤZfc8s$`1E6bagX361Iy[s#:-TՌyyi\ys鼰8<Np.Q+3J3{;VVY^qN:@0#wc%J1 e|c00֢(*Zn9Zߗ%*x"קV }e*:k>.l <KPی>hЩaH ] ,z{۴ЌzRn$lm;rFʣࡢ-tdC7 *G%0Vv_d̤XۅJxdj Ȇ 9X /#27kqdHgc0sw3n QՐD\P8DotT0Iԃl@ϤqG"F:cS,p>H?[[*3 ]!G9ƫӂL.yc ʼn"hyb*ý;e#x*gRT%'z\SUS=;6(3z{6(zKwt#Q@UɊg1Fئ3C&ڳȹ펒3*adewяzRmBu^Z<ɾ?D*Wc99V:hj4[k4%煩%Hzmdf@! 0Ģ%P[USūd^mc+k0L#d jNyPW޲bUG60! S U.r =b:4˹`قj]*x^Y}{J S3[TSM_5Md}&VH-!96)w,&: # h>h7xg:^M0T&n&Ϙ{atL<_|XEZ%>N'ӗ.|?RN$"BJ9or^x]~t;% ߏ3'xa,_'K^)'cZH_)C ߏS/b:9L_r>H9BJ9or^x]~W&ls/3<(dP!_‚^qFQp~y:/,(kKoy B?_)ľ!o}^ɼS^KG|*gʔ?_)텉!o\ .^'žpq }2>R_H+߬VL,}C>2HWG_?^LzoK5Jx]#Ù[T__􏿜aoWۯo&O߃i߾pBɞQ}l6 w~QԘWMϧwq|=xƄq91.]Q&Kgoi|KϷtyK,dץڻyΥzfƮH-]/{ v4tk|]_Z??/;}_wk  ~=i˙.߽XOۻ_rM{SƷɸ{ g(=[^P7+L4xS_Yw or=:ͻ:y8'> MƯxM$^uڳ /u}nj73j/:#دC2 m _=ykLDg*H7|k@^PX?4VDeMENUcUMrnZ9sD '4C4ٌ^'coiqOf(I3 R' ?0<(4ʫB^3H|zCU@G/5wCTj,zrx[ٞRF3m<)TuۢMJϷdSd|ǿgƗo4 %eX}[TR-A+eYzbr.ݞZzk)䯆R?,ʻY޺'BgWlcsij`. O% U/cH4k[*?e{O_-7wNW?Tˣ>y'.Xn5u ѡ,ػ@?Miߒ-zjszL <k׋rQÉu=϶9?y? endstream endobj 3030 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1083 >> stream xk0Wkz&]/xTu]+the %u]] #N/I:"әbڑL+K*H+b fv/:ryC!(2B)W s6O^#9qNSƇ;=b,6; +$pg^~*yǡG.ˮ;.+/rD.jOB~rE@o1!{9 k$AV<.|%Ԣ93D py7 \,\!+k^6 xl(3GhrcKog|x6j>}ALϏBNgk@f{{7:=wgV±0t Nט d(|β~ ׿ ]ipylS+_#$眍 5uaZ{<$R[惘jz (7 `lrQdfCei?1T0n z2PK|!%)̆(i14r>tÑU3χ޷'s8伥f [TtsiCJ|8/Ռ 9& &;Tc=鸲 ,<"É%jBc;pX`o\TP`CM=A7!TDlqM"UcQ'T endstream endobj 2973 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_canards2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3031 0 R /BBox [0 0 550 441] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R16 3032 0 R /R7 3033 0 R >>/Font << /R14 3034 0 R/R12 3036 0 R /R10 3038 0 R /R8 3040 0 R >> >> /Length 3156 /Filter /FlateDecode >> stream xZˎ\ ~]ڋ)WJDD^^HN9dkqk #0 yX,>o='3[?~=y?noϼ3[5<쯷js-{݆?me%ߟ]jkZ]ms~;hRuf#YTdƋL`o)&]&BYI!95 j\,sdKe/9dfrDJ\YFMU]R64AġJŒ]MS5rRԉ^JCu.:{)&Wۇ%S$ t*QwRdi %9| h;Y~x j*O̔i0.\swZIJs ݸ'M6v^,w%t@' 4[x5HLF7ՙ[]p%$(x tXܣ"V,PQ' qx3D 2Brȭ e5ZGHjX:5 9X݂ :GUtFH +;pO\@)e2J >%mz  $p[ 9 HDetwM:%:@]WQRfd(aBaBAp"l)`$D&LfIakn ,c H# LӜd+m‰J2d I W.!^aDix7] {z # ZUYL%W(;18 V)l9RQpK95uiT@4micؕcB@BFDZEcA%J 50"$lMggX ~ХpW+9~-М]+c{TA'g9"3 DQV pwVKT]֭|8k@$T'DYP^9fLq8pHlA$m O:yj"|5ez 1\4PT5`~6=FÞˢ ~{ADVy"Ff]CxިL#br 0AeZ4`K7[|?I{  nZs3LDf] r"5X/™/ z{ܦ.8,;:O/Ƕ|֫r ΄F҃C³X)lh8Q;Qhhe?81X椣amG n|S7^~VG|V3]M4b Hۈ_|M/Xߛ8M I BQ0c|ƻV^&HuV<^g{ۗg]']quޫb{B#myW퇭']'Spuޫb{B#mv:[ONzgO9~{U,{/5^ Gu}zu8;-oGz+ϛN{خwu~"`DƵFvu-3P;'xa,Z;cy>:vbNεvvu-;@;1Nεvvu-; SWUv/cJ׋ONߩ>x@'qrx5U}pW7ߑ;NS_7?}=y_]'O'5Ȳ6F+ۓ;@o[HN]@~fn :nɗ9Mpؼ~}#FQ.wHc~zz82:6^#kG4~kѐG4~5lko ~sw.y>o|K.C3n]ɘlLs0?JVHI~[h j⻾~?[(R}ba6I@"{ Ujnv_ {[x}i7!܋ꉼ endstream endobj 3042 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 342 >> stream xcd`ab`ddH)K-LN~H3a!]cHVY9x0t0w,.=[{$fFFs&РpMmmʢ#CJKjqfzQ_W◙TZWHQ Lf B 'NǁO<5Mmo|Ѫ~3tv%zǻt3aƠ979Ky]®!=}{[Lw߂ME1=vg>1?zE>Ȟ󛱼L;_ɢ f}v>{Syx& endstream endobj 2974 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_canards3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3043 0 R /BBox [0 0 540 432] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R14 3044 0 R /R7 3045 0 R >>/Font << /R12 3047 0 R /R10 3049 0 R /R8 3051 0 R >> >> /Length 4713 /Filter /FlateDecode >> stream x[ˮdGe\_fл3wh@`KWvbdh$VȪ:v5pN˭ku+"#w_㛿^XNL;P ?\:r~wK>>#|؛Xhj.~up|t%~)Wgo\E(Y%AlX9בKZ C9 \d/}UCr3ϕT JAUnZyZ9rE\mCzvx(ys:F`b#B=3A YiKvXvڨXgJ+z: ѹvg6(ܰ39Y\VF/י ܗq${9{dag:\>mA{d9μ:TG|3ݭP:g9lڲ t!,\FK'VXggRtGp·1EC[)ov+y,چ3{'MjDMïʤdfkF3SrQiaR7͛5t `]+A).H0;/c]%pv|1z9~ՎHnIJo+7sC y O߅㞵mvo(pMdÅ8/şļJHtl~d?2!3a) Ԣmr%_Ph4B/([Ly~J%AԷUAjc gĐ\ercImQD[eTJ^{UjLv9Kllj͠YStvK@#DrL!T+OM!4p8gz@ɠ|d,L]΅2nE|NI5/kkF! `QE6|/ V#aω8|*բCxrDOƨ@yK7TWT*B9HR$P=i*  pd,5g⨜2FL]nIXct6kUvd1X47^ݟiE.gE⣚23)0T%3_"S ?@ ,&T;GhzP Xիw8l [;"W$12KicQ\+7,5IZV^=l8Q{cy&Ə l4!\r}HX"8m \B\zdB;[G!8iG # &1ĝMGgg@rz.2DJӀi/ f) H~jGCyDXUL2a,)_AHiu$GN֐. g uL/(7.`@\ e!Of?SPQ`"| z{[͒Ḧ́.gR jxBQU 9NI:ɩvt>MwV9z.7G:UO&sz]!A$M'h,f]Y@ i7G:B"..t! 4nV="0FBvI@[!/ 3j`a+?V I6[L35X<~1i;]sY[fZ`z+z"JJi/P$or}(ky7x2%t$Ȗ&pc I ϊ2L5;#*-Ny~9hzԋF#{T@C87r?tR]OaޢM)xԭH*Ѵq҅1YR(jelTALWPU85A$^eNa2b 5VH .;9mUOW5}|z0%?$;r!QI|hHYzFI:~N99隉NeLK ™ZzX!'/E"ǂODG`I9"]R @9֍GhB!JcҬC6#',XdO=>{nr)VQ-8npD$DDy8cq7x`ld1{S7uݰ2gE&6ɮU)$b"!D8sD|=aV8%F}No7 s–&grlNTȇ`Ka6ho1 i} M*j>Z\obJCGSůStv#*!k 0EHLmAZghѣ.1*N.9jVPْD^ŁPŲ?W,e?oل{O3 ɢ3y@MX&Q28@A_ GsJ ~AJ prڻBW,%&zhm$A i H%ia\ *H2mWd(nN^X^~Dlz+)[ӛj'w%$N=) `l#KjYK(=$)_s%-kjY1K0+qLĖhί V+Iq<Ü"!GӵXfX3Cneu0-x,Q CX1L(QJ$Mfp+K+MwWJ KJuCoPn`.IH4"nؤ^wJdQ}^?=ٽ9,LH6t%Bl=˫'oʼn^"9AKQ6], p]LB܉ kahf)`UL3J,qbK,N4LO]ptܣbTa1N:QBΘ}TxSPb0(kځB"_y:m^F|u4s5$Vb0~m-j1# @ ѝP4ohp9n|`{m*R uVblrPSRS&(؊Pkzj~. j З!,u)ZB[I\-cy}Z(djJ:54oOV~uk꟟i,0K[-4}K5_&bt[mksZ{~xO>w;L+v׏~G}3cu𪂬D=!'.?ow_vy+ }'_|v|om )S~|Z{׷__^9C@z!.0U~Y'os_w b:\xW/o¯ǫ>q;}拷]ەvc}Sl^]{1'/7WhW'lRNʱɋ_p֞_Vq=Q1Hpp ;7tOe'IښO_$NR/;̏_oW@sY>-G[bQ旂*ė-_[˿.? endstream endobj 2975 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_canards4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3052 0 R /BBox [0 0 270 432] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R14 3053 0 R /R7 3054 0 R >>/Font << /R12 3056 0 R /R10 3058 0 R /R8 3060 0 R >> >> /Length 2327 /Filter /FlateDecode >> stream xZME\09,5Jk{$#Yfw]ۃzZ%dS/^DW틾uyUzo%OO?-߬Yd}9.{oKZƒg\J顮UҚHx̥6~}t0r0H(iTBJ8k$]b j_` sHJ/!ڦ8ja`M Zo1% \BJJbq .VbCvHUD7I0-QCMSoDL_z)VJz 8Mo F/ Nj I3=(sM1DZ+z*92)T(F ⬇ R葒Lg%/ f9 eKs!59C.-1ݐCȳs- CRAX:RWmMfeLKPoaKPsvei 9``3O$:0j'ەr0 P0I)Rҙ4. pm#p B@xsIn;`Ta 6e8Z ); _ ,Bŭ+ 6*nYoV0p`@ ¬\ qpZ)̈`8|<ZX $YW9lQ 9 gqTI 5;8Qv'z2zz2젇; )E 8 *ȷ.݀kY8unrN\֛c˟BȆ V{h&vu/#Lt)<(>Q&LU wcY>v%*Gpkbw8mXcXnLN-:ߕzB‚s)0Қ F\kvv 2H !%b D$vv#D!A-!!(^pbss ҲufD%y\ZK8.ó2d{*L&q夞K>hb^nu&fJA -sqO(oCI4瓊[7\qAb;Y1ȆjRjudܽS͡&mhXS88apz+UOqVB򟀂fxR JEN1P$eAڒ*gBG0 *~[wR9 ^$[Q60VX:QϻsyF!ñ:wzlahݷB&2ZٳRV@&?׍I1N: /snIba\8l$vDCWNvgp +9ʗz`cRHm3K .Lʓo+*q"2]É,sM aTim,"uޗw*19@'#k%|2t9 y'Y<'CcSÑO(CQ9*8+A "a B8-a4OtJh<+Wb*9s˷+\>Z_*K%^ת}jo\v墊Z}T)|Qs<|_Y{۩=8jhDg|S{|q8=>~|ylϗ{[ns~r__dz-_=[?xnk.n1FlrBWJ]>Y]Aލm]3np])jf=͢ҹ1nؐ8pgjd㳇ѐ+HUy\$#H.IȯfbV|? Ts9g-_^W7WQqz endstream endobj 2976 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/fnc_canards5.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3061 0 R /BBox [0 0 270 432] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R14 3062 0 R /R7 3063 0 R >>/Font << /R12 3065 0 R /R10 3067 0 R /R8 3069 0 R >> >> /Length 1676 /Filter /FlateDecode >> stream xYێ7广x]U%)ˎ[DH@.SewO;,-HqWOW/|p gΟa" wm(KoWm>=sN}v}|=`wbߟ~v5X|rqhĔ;%쿞_:uk})MqUY@2E_ő"ÐV|`pnnr1bTL@j Q|LG>7-eBu$o_9!ʾVXsi JE'AK) Zt"[Fr˾T|bl0&5䠃9d?5ղ8GMm&V"3$jE<^f@1FS}mPM2Rl}ZjbAV `^p+TcRK>U‚D+A2,D14vD5"aT1NAr.Z)v Kc,DK[M|^@"i`%CGdŞrhʥT^YTPm:7 si*B2@YGh ج)W#-!"+YQt5PJy"-dd3H#Mk"4;Q,&'0;ES tj"wȱ$G^re1uԔ25nEY.Z5>d>Y@/Y[TRMm֮ji%6*Bv wZ@,/8$ͣRM4jZ"y:DD?+ dj H]Hk_4)R]X ^0tuD/Xe(YLΕXb@)pa^@WSza85,üL+ļB߄H/G+:od<+Nt403=صSS@Ԕt403=ص #,x:AvdoOm3 U̳t<0 5˩챓"$t403=صNJZݎYدa^Ne.s=s8pO}NZx]0v Y >`~cfpflx!{0awۓ;!Ό7- r`ywˮlp e._hC 6zlnzL}=/~u}tts{0=p|| a\1G[kBvۗ'$s7FBϥzX=+:z: zwlSUk5LpWK/:Kftx~7"qa#퓯7N'n,u%YXvf+ˠ :~A6փV뎳!+,GSV"KGG(zS5u|umxfUn^蕅^Wi$t#I;'Z`5Ӳi>d*jKsVw.8I> stream x%0C~ōɐ#wɵ v`CC"@E-/Ym*VP;HVJHCI;LڸJ`\F6ڑ:Cf=YkU~/z^s͌K᪥DEx#3Wg(.T [+ endstream endobj 3077 0 obj << /Length 2509 /Filter /FlateDecode >> stream xڭZ[o۸~ϯ[ˋHJ]8٦ M(b1^ן%v4/1IQ73g6?wA# g2淑ԄJ)M :ǘ)NLRoNt)^yy c4U]ݔfC~Y1F2)9M)Wm;["iūuï_؎W\Dž{VAF {J {q*{_WrM^M^7v\. ʰ$rV%S46(#tnp7*^kkͽ :@ 7r~s6ơ; : fjr:M,pgI$C;1f`hɜ~WN qT$(@c:F<H諝 IơYF'fs3di4%íېGE)9 *I%ll[1IXUWyIqHTD "ssxhy^pXqd!@S_${hrkP'K'$JM`?IR-!>8~?Z(%Jh0kn;7~1=&U|7Ҡ !M ?2uTP˜w xY n\9 [:0S0e^⨎?U܇b q B( @n pS;Srp$=ogKMSź)Wg&)g1EY͒Űjzf%+ RK0z@Ad MFDZ(2}dAdɀ`wpaн_O9.?Kj.+P)xh) S@la(S(;&W`=k2TnmU{a.W!ΩuGNu1y|uBGи?& OI.:0hy7vS+f`e O2HV8qAWE)=ptݲ4,Re, Ă̆ 21B9E atH M0S.zϯ$PQۋ`B@l%_zهp}p3ݪU0i]ipZ׏-]p"GQLt Բ}pJ/"'ఏہe( X"ٖ"os:#9Ńt#ҡDY@eo rM.! O`0+O 8bzh-"-[4 ϔh7A;}G5YaqRG/WUfygd*#E$v7 \wZ`Uk>[(_,&52qS?fxRt>&maKX ťpR6N˴"ԦɁEUf{$*M-2 Sw7+FP@.ޙϋFNw(᠟w;[p]ĬA{uѸwA@RΓ>AìۧY~oUUaD뢆ܿP %JxA@A$X qo Q1Yf;{g$ !ջo.k!гT#)}^/]]*էPCSvaS ).@xS#vx0aQseiVSb߸V߮R#T#{A_AfJ-cx?mGXgha*<}4!Zu 0=}p>MXTWjAٜǺt߭tT#Gk4?y>(yg fGk6 jfְG 4yx(~ܷ.gQgF"G@G'vojWY(Tih5&ʑ6[~V{GA2 Xgrn &]G,I sp7'/D!>'3r﹃XZ/dXyď4KUZA}X{\o#U6$6&a)aiqw\PoT?.f endstream endobj 3082 0 obj << /Length 2726 /Filter /FlateDecode >> stream xZ[6~_XUShlf ̓-WssHJss%o/~EgJnG*"T0ht>,$|Ao mUj*+_YlMI*;K>i_Mv:"*a@bO**j~PB=O/ܢEAJJI| E,\uYQi 0PƊ'aAeF4÷7A|wr!v8lsoXWv19F5( (H8J҈WƳ$LCϢ)ЌA,XD yrŽԸ#]f.b¹w8YV5t k>ߘ"mn|fkq,7%_fv=H]<(Hť2[| 'AA['.ƜDť/ATn`oeSnc3g'f6Y " c+D['NͰmB@F[ß@HRywy#nn[W:R|"Xm[+5,QcqP، U5U_UPUp7E hbq`+0C8. G1acAmņׄL0u`|a2n 9>ϿoPmCX* YXIX$ GŽ S*9Q)סI-ihR% μ v0J:B dG S F]_$Re\͈{Um`ᤱگ*a׷ 7W^4Ltb3[Xv0Ґv hW8֏Y.YR4u=48h&m`pV Gji w)r1'Оeq efQWxtfY+ޠ_k7'sIUtIz Dgn-w]z,6 l 7݂M՘[;a1"-`.*c-oo/C pfDPi*FOt;%}13Pgſ<$BI8=$`ߒNwRCVLf'Wƿ~ݫ7OHVaApJ$S^^@(9R I&Š_7jP"^%2X|Nc`@ ]ey-us  C,(o{v4O0:P3 n" އi dP?Уy (8;\XĚf`/0iyFT]\.73I #?ZNO%9+- J!Tl63g4~TeU?i[pY6L);g{Tz4O5#\͸V/[$3F&/3J8 v0{iS7_I0ʌa#lX;Kp<$~.IYǔDq8n̖@ݗ73M.__>O˛\}Ɣ3E'onfS Ț=fޫvS{Ȩ`?מ LKpL)Z? Qw4 ]BSڏ淶^hY{} R(IYcA,>МиkGxeHXx N| q:3qX<Ƀ (p!i~VǰYƿ+K> stream xZ[s۶~䡡H(f=M8s:u@K..Eq~}w P&-euCboowǟ1M8SwvSPB3w6,$?d/XCUpb)'t ,L(c_#R礽! 7Nwv3]ޜ$%^`:WYg{$b߮8.aye_+i G;ppwwqb>$vOVY2N8^og-D$R֤8/Ya-3A0_)I,c{:v(sauM0M%)Hr.ds hOEEvACF O%Pqf,' Y8q2h daC8,=|4V[*y4'+/C$VȄP0d((T^:*z` ١?1=d# b QS?A`^=M"MgȈkDGEƕD +13z<=QM'2CBDKޡ6~ʇOD+!)|VHM 4H7S֐%"]Jz}yFD(-5zu%8hX 3Lli!zu;D X/) | ll=uZ(y"@+yH.~=ْ`0yGř7! 0wRI0:ض-)SlIbȬ;.ʝS1-j+>_t+ZnE Es:L{2_NE{:ob 3)p@BBaW)!^\\tJyAqrkEM֣7a.7uo$}vuuU`x~t~A{x1""ӻ{{;Y=CXS4 P` h"TrG>H}ﶍ0>g'?xa>{)TkĄ+2@!R"LSXD z F21j9 d{{O{xqL4vpi pW+s m09*txqH߁`ҡ8 Aqa ~JPCixy>`6?+ J=%^=tm9IJA(%vI l(j2eG;Ȼyx ++{IoZgs߉4eG<\wζn 0)jW]ڥlb9I^4Ѫ0ʧ,P|ΆXW RƖǒg\U@MCfMj)NB_uxe#WK&h'G7zžj8y{::Āo#:Qy|4wG0#F}[_4톹$!E@_]iT͑8>%t b`+!cNJBo ".n9 D@Y1Zur;9 n z> stream xZ[s6~aKM,`3zvmsى;}H34EKJ9HhKspnOaT ܓ d%Tqt}iHdJegU:H?O2;p՗ٵy].%*K:[M7Rh_kdJ6_Ѽq~R2A4jCyY-[q\,a__BHH2p-$>Xۗ0׮֔ףh- űHZ~K/"qP$#!)'TZ$\dî]9$d3>(')njDl7Tpż^Fp*_ƢG _ۂ[}; smVe"9By}BӲz]H LD.йtaM <3VFi|x:Ė4s1K@dz08dG ~ֵP.5b΄)}b < K} n(uRrzS_-aJx_D)eRK; :iXCG8jf CTQJ^_uh ]2ONND*Mxoٝ5XB/~8.v >"{rQ%Ņf- ¼ Rf }Y{*H53!qf'X=$eaJ,31ؿS!"lnzX7 TJQ?̀5T{璻!f/ C^56%=<mZb!8ЌCxh409 ]ȡCd78 MɊ2%.!E^cPcMQCZ\=X|Kg{!xqvi&8&8WYT@cYYhlz1cxm^CӐ0p}w?;H1_B ?567q mc4ΫrkT:&7q>7`2&s@)FkQ3LcSΦ<'7J\m`• o4 jSbҩ;|C)rP(=$3r&V3:ΌxQ??KՕ>lxJׅK,]~F˱z6;XLՄn p΁!% |Ш?/2:r) }; SBt{Zrtզi[1@#S}aJz endstream endobj 3100 0 obj << /Length 2200 /Filter /FlateDecode >> stream xY[s۶~ᔚH(ٌ\&igNLl%RŗDِm>>%.xtz{ALΔJAaN_53EipV͆cUp"o26FȪHv=Y&iFO=X)G.uzë`-Jl ۺ&sCEfGrlŽ3;PΤu9oI1KAViL+ߔnEZ A$RրeR%gfrnfqp]m[Ef5cWC%ʓ9@5,Ȭl½YM64mK ||ᤗ˪^7h qh Azݜ!s0iںISVUC9wqZdy~i=216(. r(CpYRq# ,TBb!B" NR 45e(0 FtN=DxxD;z֋fz7X7'{V)؊qdhxm{77^(8 +/HVAz_91+Q@RԿR:[V.r;HlN|ym\EBh'9=MtfGX=(.@t,aymM{a? o [}uwp}4a\kHdGfPHB D9&}x-&΍inOazB`cQoDPyYo>JG~rsJx?Ƕ;DG^@I!4i/D{l)!\N&BmϥX[Ii.e+'R8&ӻUVyVYe<7j^ڽ*ʉ]@=# llaʱ%ԋ\FliBիhMہ*Y}A6HW&(p)3M*) ҡKݪ,-ϋFzV6s:[ 0*泶yum} ) RH8 ]|NSMf]@*Eb|m>89g `"CSЁNq+NX]d͗O?oǼ v=v_7|4D4~$O}nb,.9lŔℾ)^d-vAcbc OsB}xvV"fF/xN\qHs]hp_͈Xx<p[0O-H劭{+Ѹ8ޅ'wu:)h!8AiLhؤj j61~w?}c[vײߵݝC2]1K{p>˙=dUlvz]Us/}X}y[Ç#z~dGOcϟ7a6a8z7Y7}SּQ:H'Hab|_cGaLJΪrq'`LJ#WV(ssݐȵ3^f5/Z#*!qG?&cOt'0Tϧ |ᓈWE\ F,;Y:WWM*B},( >_$Y&Y;*qU_UbCeO]8sC܊_e eۀWɂˎV7g}w;lkZ)IԀܗa?RMX@U*{ uu[yqҩ (ș-_h{8#oUC-T՛p endstream endobj 3006 0 obj << /Type /ObjStm /N 100 /First 1060 /Length 3072 /Filter /FlateDecode >> stream x]s6. tƱ9'vͣ-JtIʱ. S$m8Y X9e0ǑDp" $ 1"! 5NH5NHY](G4͈R ŀ)N4Je%C *RDk &>sLN.<#q+bRH6 }B&'*1i ,HzF&F҅IDR/&L1.0+3 a&S:mlPFŒJS^IpP2!ՑIJ%2 8S2Lf `ii )TiZ??@:<5p 3hcWü^lX" .BVi9gA6 ƃZ!@'s@'s RI j2 H%9$9]ppf@J92dHJ-bZ9mEH:828 ECD q)Q CYeCZku腡W%IHS;&32$ql!rVdHpR)*9da5;6.0 3aa9kMѣ}7I5m e?oAޣؿA]UoyգO= v}D ezb؎(ȳ~>tP ڴ)N;zto(~1*YG1㥙.%$Ms貱k`Cb׍O`wt|? W%?~p}n]vu5ՕW{6Ue>׭Ǐc=#? )́O|) 5:]b47Q^=e1XJh=hP9x z{{%hGTN4OiSv\{Oèe'-~:!is<ǃ2?fU%&nєkzk|:hEaSTLu|嬡j2p FE5M7`C0 à hxKƠ*+*}P,/9|p-o}LݤOSnt/ݥ?Wto~>6شdTu{jߠ(E=Ml: ڃ9}:C ӂN?ђNVAkЖL 3Hjr,}K7g9}}XbeeY6EChމa?Ơj7kphVa#0*~Y?40?k$l|'y6C# j󔆴T,a<jz)_WAȖ4d.@C5J?b^njOE!TlGи`X,} PYt8 9CbY&~sէ(j\@ w6U3w-Ɍwj&]?Ui3ތ7;7"Vl-x61}DȾaߙ3,FMfe['t'7q8MgŘwqUC~zy_64/x9ͣ|1Eܐ >q QE)"O)<0^E^Q 8p:g'bpr|$H#w&!$HB" E܀"kSHIv1ԣ!|>pW]cD>L畖>3HngovEfY-af>u1c 9sq,x-Eټ\y x &owG[n: M`ޭ~ tw qK.n>= ܯ|:X{ :(S3N]X3`?Owqմ`>Xܸx/xc2+_^Te,a D }ׇV3~ kc'{A ^pA;9|Zavӽt.ړ՘ nSP6ߪߤE=խ),e\)3]WfnQ/z+~ES.Wn5S쭕W:3ݹtozjOO==у]Ht-Z P$@I>#=$H#GB =z$HE/+sU ?+*[ϟ}vcEZ+Ү[*ҋ?k{}/oϙ88 t7\o_nS:j񅲮+uӇӎ8ӎ8ӎ8$H#GB鳥 >|$HxC=or*_&~vio{]X{ӆ,m҆,m҆,=ϧ >|$H'0=$I(P$H:B7JSQ|=~ O]: NKKtN|$H#" E$9 .=cOL/};F,mF,mF, >|$H!$HB" EN(+<#LRȾv);n[eUM /O_7-6Ţɱ)MMhJl/{7M_x,8r:xë|.5zs ׫ZW~yf.pmZۻjIBK]oQf f-e6KO#{EtDǬst}"KŗpsB|*׋ccĊ;Ǹ,v]fg "e3s)lȝPʮc7:7Fe`d endstream endobj 3107 0 obj << /Length 2425 /Filter /FlateDecode >> stream xZKs8W贡j, &C^Sٍhj2ZdlV(Rño7 ْT!el6n4jyoΘ"p2P"E jLg,"|$EB|o"2_gv eyUTIɊjgd_czh -xDֈU!A+ /ia̽2 k2+R}gNlW R_)0N(/~NZm"HcYE^fxɅQ[ }B'XH0N||<w n,ԜC$^΁2گQfiRssŜ>b.4-<VW+zYF95g}[0BNL(Nǝ3EbE B:E!*V%Dx6;.I% mDx֋=n|$ᑜ,O'G* vશbܧ,$ >[C 'c~B<_;15D[?SJ %E)E/jlO(Ab0& fG/x=$iOI[?ԱyY~}OddIu'2D>!$TaCt/"aS+d$P8B8/,DLWeAx6w?XFԏ<%!n@ "똄10Zkrs:'5cP'5$e*i&" Qxyve:쥁u(YvmN["ՍJn>`I& |;,3eMڇk4")̱7&}upeim CrWf'V*:GP_ 5~/#B:ɛh$ROmrb0٭:Gmͦ>z4ۘjq"3Q)z%(-9 ) d&H4F2=8  p5Al [Ufo>n 9i\jyܧHPRTc-~HgP^1-j^WN;f ME&fډ uyyiE9` ;ЃքOE(^5AzG{wmBE1@ &mbGIU_Y]wީ*"L,q "CzxC-U|rD=w .D7y7s#`GEH⻠m@*>8|ā7ౌ+c)8!AYp8"~Z-kkZwNI$ESSPYv ,}XU\eߺ07y]pt>als VwK$"$,Y1sfJ)oPpX0l|,%C,n־WVފ C&3#Pp$G[( udY'lڒ0tHpnUuj:kmnzq/=7xJŖ5gUKN:>)kmH}7Y-M:>t Uƹ5*i0O4 >#axZY,M0ڮ׫R_v^%zV-Ⱥ++<~@;53xӎ}sq09@ǟGo]^D4iZm P$Sm€s{?6)nt*h~tF%TOU,Yݙf&;3=]G'csѝ_X[> stream x% |ŕPp `+M$1M;nCj0}Qs ]0_-,{"EKK⚺iIZnYnD5֡1mbRߪs~) endstream endobj 3118 0 obj << /Length 1582 /Filter /FlateDecode >> stream xڭY]s8}ϯ`3oDw&n)p+$qS/8{$!d#Dpo~a!=DKdF~)'3dfg!_ϒ[}GV6e?2ɧ_t f'ɶ(U_r3/.nxL)[CG7Y41sk]JL,U@ Z1/y| v{$:5{W}MP~V_$ >B E / УK Αܲ~[ƐĂu #R p@] jS8lޔۧ\/,8\_Ê9t=ze1M&Wq3t'a>`9=5+V8.ǝSgr3LxbϓҞ ޑtKn<h,`rvmo+m?@@47vcN3n3=`?E &$%riyN9zq㗔mٖp+,ЌQP}+\ }zGխ_h-8IJ> vJ>՟+3zt@]@._t*~KVˮe/{M)}$W#қqY( Fr0 {S8hňi`zDQu냙z1i`8ԥs>޻UX)9e_B$kt(gyC tИXr੮ #Rc^ǰy=cށ(C1yYc^֧֘T])_f^&a9x&쬍zwRɶߪ\SۚB-0ty5{,1R!)E=c)S[>=vbQ[7GU>mYץ#*<8sLssmm(G7 \YF#.#KOިI*jܭL!!:<j7 endstream endobj 3123 0 obj << /Length 2826 /Filter /FlateDecode >> stream x[Ksﯠ/)[{HCSN"TկO@C)9՘7ݍ_.^}^ 33%'ˉ2*=цfb1Sm; 7^t7]:EJ;1ʐP oH" D47NS=rXEw$ 0Ypw[5W;4;# U$≸;3"<xm@u+|C˻&rDNGLq΋o2 C㟑Ɖ\*Kd6(V5?&fz!'Dqe|/%xnHcΆ⤪+ (OTPjK% ^GÕ\q %\8~8$E]Kv71r?VH|~|plbA ycadc`?g*.7 ˮf5{O. ДP8~J*ei:\)`_=0?*!wOJR4|g1` rY CƳ܇%Dq%>,9Bb̞rC< f#b[iϵ>=' *$Qn9ݾ(ߓ>_ ߧۡ[G{f@85IwlԦZ̒pG;ay "b&6a3Po50Eftsq۠΄+3 ?bwÞ?; NǘfI@D %\rGVd\ |?}e5IJ뼦ز>D EQ56!<{ v4~eRbLT?,@(ܾ|XX'AC~عy}rsB1:<{e~2gm/}[zDWyұp/|,@z5z\Ժ&τ3ƤM9* I̎Yڎ&U>3jk||r8pM +Gr63m&O)gZ{&+ulndjuySώ_'o7ou;n=_7u5XI5UYO_p1X endstream endobj 3130 0 obj << /Length 2526 /Filter /FlateDecode >> stream xڵZKsϯБx`MeMRo=mqK">t)=q.&wnǻO$F#7wY*& 6wͿN)2K4y_5uGC۝Iyl%7)- >㟆?:mERyB}Pw7|~ΦS0e_h֜6i=z,}2\-'[π nif'4:"\R=0G, [ ]5sma,;pߕyS2mvAD>&;p~(뢤 'y" |hH's㱬xGMIK_{r1ke*vF^ƬkI[#RȿM%_긯zBQCmYt4>m~*UGPz&Lri4,\ଔ9wf,*I²,rAp o`[3!?UN)g^T&p2D,*1{7jF$swnVɅFٷyQnyO-O+|8F4Gr,r 쫪[= c8婯N>6XZH-o:28 qCr{S:>oRDzY` `ȣ56:ㆇ\{QI\bX4^N-Kf Maezf9=i&hiwir78H }S*|[ m;zUWNd)i (Їh/fɬ1.ܛdo8STo;bdZD)m3<G&4 bK 8[lp (%1Ph()FK pranSlװ(5ͱLjߟ};pn= Wl& Rw 9}gǾiGbzߍL޷y]ël"Q0cl dgLp ta҄h"c7ʒ<2(Ho%vU5-s־<5h;@+_Ǯ -<4G")"k W -@ph᷂})p?xS'4&D7<=}CJ+\F{h*͢΍;.u^]7u e`MgI/F>szz x'`3Yc=|RhX"|Lrr4l)GSsƾ"+9LG߮8Crf T`iAxKO?!G s9.ȋ1M%zr]5F4Lv\ޠWM_]ؘY^{*~#QD{{yMA7IWbޞP(F ;jc(HSI!blf]t5/~, h<6(bF3WI#0 n: siӸx'@@@TW:"!{2´.bw*B]`&-s @de4R^3G/ę?MjRM3^1qc‘oRL>LY 1`o2Lʄ4?m;ܞCph:56Y)I1-2]V|:C11#4WX'34k n#ŵs~;W=!~#[7Ը]6X1w^xY?j U>Bn8V|7J_1oi1_"dS"{fjIKi0X¡yL"q >>]XWdEZ'Z>횵Զ-IRcB X4yΈem^wE[EJkߑe({*Os00O/Ee\%_CׇKA`a>_@{;vU_m|-D݅ga-^-ii݇Cb"P̟h<4|rV!^!Ә'!|2kD<5\E xW2Ow 3nJ endstream endobj 3135 0 obj << /Length 2754 /Filter /FlateDecode >> stream xڵ[K8ׯVna&b7b氯a6=7S0: ˒2SJq3;a8d41h&0¬,Vs9KOUKvZ/MQگ3%E.7e_LWd ۴0]3<-wۺ)3sxiegخB _Tɜ_IyRA 3˦hEx [<|y` l,#ɉ˗d~P"|-_&\h"fÿScpCTA0ƏKƬ!pら?mWsQ%L\`z"X$*GjڗXBbnH;ϥ Sqp޺RyJ0':TU}T RE.jw*6MlS4ps',y7m (; IY !>BC'ӑ+ Bc>6 jb9rbXE;m̞v &P'TtJmrrq*WR(B!9.ťQx:uQ+Ta+Ъ/T:>]YJ~|ä׬ln+dVjHk.Dz.ǐک(lj1 #n<<̕Y3 {!X1ٰb*dXɹb(ؾP"^k9aT 5تYB4^(Ix\kQ/eSV)/Pщ,i~h! yDumZ]JW:`PPҌM#P"1KYn(] ǪFm aMFuah<Db4VlEʶ 4]/Q'|FgtZcZKLX.PhZ h/bڬ_ͺC,nݶ ݶΛqFGVh`!d`|"lǍu,GBoW&bP|^xwە*fYH\=ft5R2M S{ƈD  G;-Ã߮ j_{HN:Y_̃LA}$AURc+}Ul6Ѭc]~ٗ[䒎̍f"M^;șqbਲI Yuf*Pà pLB-xs})t#)9 R7JLb%;w&vQ٦"r-quq> Cc>7D,!I G}] IYNnq!"\KTEvGޮv9xqSR).;>PfRV+GpXLV\dwv0cZy7ChSa|7 $H!zG ;C6G% )ٜ$+x~QL/N N(=|c{ bsy!"~狴 ZwѫБ)E K)6U)8RgH)(fv7ms5uW{PLFH ;gg3G#i}$47#%W4zmͮBsmj'ź;E Oh\ίr]4~rDuJ(y2T-rPR$eר6'ZŦ85qfwvRGzi𾈕\%Դ\n CivI f=!7~'8T5f"$#LثkG0w'Op  P>4P'\_ngyd"l7dvdd䒊OO n\v.O\j3<)`Ŧꍁ.S쇷!:n>縝{c:!@E;F;hoݧ݅ЕC9c-.Dތ Ќߍhcb$vFOFs$vy7j}l~ ].ǀv]g$xt0yxtoW =*9x/xF㣿?va<кj9=]ZH$*:wcp4}<|%?YE&_9(e6*b6^Wj_u3e+?i8|npJ;aS j7 㫭_ШhR:":F*Rw)(I-"v4@$0i5XkF7h!;-_0aDIMnOH70SJ{$$Q8v3DQ!f/LiCt+:aCHEH5floḀuE`.8LNªlJD{xߒHIG_C]Ovؚݻ`P)T } Sơ^_jyR5KevWjI EQ|:u4RӾZBXŶz{p0E=y]D`8zW'aK]:~6yUdԡsg545&eB'3{PǞtqgҪ|i!q#-3Nil5"RmXMAUb|f!=je`&?x~`bnf<l5=Ƹ ؖ_ѿµ0qs7n\# endstream endobj 3142 0 obj << /Length 1764 /Filter /FlateDecode >> stream xڽZ]s8}ϯ fjtЏ466t41-Ӏv~,`8;!{9"?,' ³ƳKj]Go-Jx% ֍u~ϝG)p ocx1:z@)5X'XBYk~>di}积GJp= 3J1|8ݽRz A`*~ N4, t i˙gGsl2eߚu00xJ[nD?@7ŖX!M@M"МͿEH=[[Pb1z)(3\dz+t4Դ[ 55-1F8bl_)xl  ['S #y}$EiPF40]5qA@1 hN Toļq5S|ak`e)?M8Ԅ)Y.P5c ql ٞNb~|AI|U)j>lW_C)(FW793&IZbDy̟|l`IۨwǛ07@q.o&,o^zQ:'g!sN^tt G ہh{Wvan P+B3x_CK\*a!"8;Y c:^ss?w\ w rKSI`)R@# E@1نC2^e GnQVh+hn^ x֓giF8FXMgte dο=_<> -JyZghx2I*qq@nC Tⳃi9 Ucfp 8[LEPi9G5a?xO P/6Խk^ީ;MQ)o{N*, [szUf`Y}-xy8py{OucF5XS*:\`³Yyv.rTn |]w--GB'JEJ즼^(: QIgX^ܭhYeL& lϮ$53A&(bYHBwgX B vrjީ=AЋ3Ny˼y4ZQZQOG磰Fq6 l][]K g+"uXxfX /m_]*2P(߳=1jhE G4ӫK#** {@ZQA{hT+_&Y4^i9)Zyg?{+mUeG(s^@)@"H!(|?s endstream endobj 3148 0 obj << /Length 3000 /Filter /FlateDecode >> stream x\IP.)bO*$S+Ğf2J$nOGox}yAGΔ]^!T60+Fя< Sf`هD}3ཿܮE9_expE~^c'32_avqJq쐎&\nU%͊ dVz]">EX]M(77,< "7iQ1.UbH OT75<&4^6`E}#pM Kaju\;](bis7c2 ۱4(3u%'{MȲ2'->W L&q~!}>/רOV@;͗"bY <³|^-*9U(zy|ILjJފN RġHt8%zG|BvVD"EM#C 5њ$X[D0ܝHE#OS#D-MqnSh+ uh%WIT`\ċc2&fPSuY~b]4Cѐ&&3Oj%kw@c|&=4C-Ki u(=rk4Am O/BL 6p@Fǟh mtᡗb6oKyƠk 9 7X[S)hJec|DLG45du|vA0ŨcS:F^,$ TXЧBkT0OWI>jRS* !h7L+鴣jO:m<0t4w:i̞)֏3_g2j;<< ڗQPe|@F-ͨfԶcY"k1a];fJPJ)g)811&uI"g&vg+'=BZ !emL+q=?gf"{?p Sb9a=pҌJ@ZcEh V> qx8݅޼pfp{dUL㉒ax|+5 kv0_@rƴ#Tv)K7: p5P*,Q|b1zbA&ifKĢ] 6?=՞.XRq2;j A0 {b)ۖIZ+evP'Rzho iE܌u:Chca\%# ^=>e aDZ{#e*tDPܼ31\ܩrrm.w;tr?G,κ\[ }6{<0DC5!AVH=}A{do<=nĜ fVCBSC."DsZHC;$6`",+[~Fʃbڱy/NɟiJ6^Y?8E'G'ޑE: iyw2q۠%K`q$pK[ڮ0)#林=w&N+o:JEU=ɯ3)Q kB1uUDfuWXUKw4r=lm'F;z1 #CJeyUWsoHVd3XccUT"Ts w1_/¾ts 5: AYBQǧUU(r{[߫*_N?ED -a?&9"qD]LC'ҀE|OnORgrwޟfepg{K ~w=X \NVM[AUyu(4|LG߼2FS9q%5p endstream endobj 3157 0 obj << /Length 1638 /Filter /FlateDecode >> stream xڵY[sF~`b46{?8n3Nei$FȎ{`!)ʋg=ɴ dᨀP;~™̝HI7*h:b2.Gct446 Ywn(~˔Q6}mG8xCP'ʕƝe8'Θ 23UHSNkTQfyf#"R{YMaf*$ZLΘp I2_$#jaf8ʺX"/@µ[у>+ß4VQq%P5wTL'$b }THIZ*^%_vx}1HXNMj: /:Yl Ljw E -4Nf; L [\i&F12YƫTϠZk(}q&8ٷ3 DiI4 Yz3usWL5yg}6`q͘x`-.17oێBPJTpA WWo{ ٷ!CXyhG@HAa *$b? F3U<ۍq@,_50mqL`Α؟wmNDY w@F))2{(lk|Q3.~p۟fk8bWg%9똥{ZD\C`a@8(#5D1rS00)G:9luZWܢmc`Gp\ J$KtCz(I(BnN0C4K7* ^cϐl.{ |g\l<XwPVʔ%< EY4Y P5Gz;GM I O"Q$`Q =ʅu}x8@$[ReLFKX{F~9)pG>ȳa\h5*6ޫw=xL{LxL^1⣒vI;ʅvy{kņR WWh5~ը2"OMt{lI~x1ӐPYxaK]'~F|}, %A99)N"gSir#gQof۟zZGEs5O{8Ȗũ57 l6 08/iZzbaK]'~Fb}, %?@=1 v؜Bay2¿"X ^iesMG@؎4 ;j`7-P4qP[OY(9;x endstream endobj 3162 0 obj << /Length 152 /Filter /FlateDecode >> stream x%0|ŕv6RИ Q%j5]j0}Qs ]0p[I*YPt E d 9 \F*ZcctWUQ"f}`Cc2@W:+ endstream endobj 3166 0 obj << /Length 2674 /Filter /FlateDecode >> stream xZms6_ɇJ( ͤyf.%H͉$$U )zq}/6.gw<;᭠#Δ.G*&T鑎aFfѧS(.T*z1bk}Le6(ɢEz_u6bM_f-3#Hǡh5FQfy_"j|Tu֙U_ga^n6u]Gq>1?Dr\-v4ȫ,{h֮Y bgԷyue?qk6&8ቁ*Y\᭗T$1e(h HxV8u΃r"`O.4h&}p@Ь2 IF3U4GHbg}5gT󣗈t( *)O)Mt+$1 `M#fIUNbp9X$c ,6L,B 8'E1AVE;ڱ^p$U0`\vvjR!17Ɔ[bq6+eQ.i1O!-' .?8zz44 zZ@0-ꮙ .[!S݊:k]O[Ypb-0Վeo1tu0@tFY *w¶ 1z̢̹ }L,+ \GEtWU 8VϠE)D|t$B$}! ;IdY I'n!U +ٛ[_7n=ʑN+34nt cLf5o2lf4d(v'i|Il-RDB<߇`h㤷`fRMK 7;w5RVA6%fInT &pMrl(*,.(MgktB5RYΉgrIJQI]Q@4wFXr|$86[;-#.^Lqi%ֺvf6mM .Uwڜ kn:*=[\w}RB=W^2Wi:+++؀<[ҵ{ Ȗ.HDCE`c?m [h'_W84 !m,)<™ AzH܌͍QntVض 'ghel}Ņ޷[s)y4ʼaPbƥY8&pP\faݔnyؠ`jkRTJ|tA:_yY2Qw76dE^6{O\c;)6C q ه p ڒݼ(aSzX[bc5ĢY $k#IAxA._j$aa$RpC3K W4lf'KfT+=ЦPGEϰ%m>3!ꞹ >AMf+BlѬ޽s:TY74 v `gHN4 FT&lQ|j;~sS)y~mCt/*XrA9dڸW7+bQ5K@tv2'q3.Li `OKnlcM>,cxI"c Y`5 #TCC41j J-+[|q~|O4/\u]1KXsK(ReaS.+?I8ZN˝Bq0p(Kc8!IZ`3 Vi׏b 3, *=fz#z4_}BG x[Čnj$$7r_F}*țƩmvQЄ_fDAz//^?\gTO2}^޽@(у*bT `3 "/<Ag2svne2;;(Lrբcr( |a@Ut k @7:]_y؏Թg PԾ{06aWLxw1;dzoyW#޽Hvo j&|"&j藐FӭƫL3] %U3G.LN$T4 TFsmdžda7,R$ٳ OFYʓ$qwHOƀ4 i5sAMkޯb01#mB `x?FG9/Uƫb Ar ĵ0 c{![] ZfO0PGD7?Lt , endstream endobj 3173 0 obj << /Length 2529 /Filter /FlateDecode >> stream xZKs8Wk, VeTjݲ03ZlU$Cұ_@[9[FA<=#O" RDE$5IM15LLx]L ޿sw|' /6|V/ 9s(% I S馘^/+e<_xju[eVQ}Y3TD('jrp0xE V56<]ǕӞ5q_$ƸyIiꄢ!\hBN됏1ZG=D0=`|I=̈́&"?@-B:YB'z%U'IhҲ 3) bh@G<uJC-+vJnH>X1 OL$`.{AJg6wBVpg8s%('b}ПgRB)d\LjpB/־Bm/֖G7[b+zT?%&;C YYl4RɄslj0utnE.Y_BRcA\4DfbŤ~[mV؃,m' Ǎo=~jVb`HͬkaJvÕA1 ߰j ن4tsr2DWK'lo:\8w!ba#a0<ǰCU#%9W>p, nzI a6 B$K_]|i 'NDMtOիBƾ[f!̐~m1 ~ϕD˕RZp}iݧyCw 6Hf \  0B/#/c5GW.Ӵe= (O@55q v3.uR{o~6:qvl #Ժ"'(esK91O:}dxz^c3b˲)iJ{A]2 )^β ~Vn4% 5[}u^ea)l,g=ԑbcه^8kkwky x^C+bZa,&`!v[bi0w;tq22>Tgm"dWdMݸhf={W5aSQ*8[U23O|p g>%X')ۅ8QY[w4c*@حt%i(u[aGޡ'=<ؘ&^;x^~a#.} #.1+n1u#Y> stream x[K۸ϯP.)ba~dKR=8*rV<ib5h?~!AxQ-n׻}sܦw<&e_lS+JBS RjO ?{x_z{ 䇓@%:4߮mmGKߣSuryom $8Mw.n㝷M!Yc}5B!lVj c]l.VjѨ:*"NtUykH#dU=8G6#i4Caf:SLKj_݇ ` m%QtTﻭ0꽵!G)_FLƈQ#F1 Fj~[26Blfyk0@ڗX{T _t>]'>ΘiٷnT{V-!ǎMMk "qz}%=ޗCδxCBJAL[m"3,n5Nڷq|sB5tsi}V631LS9mS]zܴ@"QZǂǶ叁ےWEGIę%VKCȢTHrm#+vVd<ۀ]gL,):3fYO2-HL/+[8W z6eEqCL5)b59k=ƘD3.]Z~ Ld8)MyJϾC_me?Y,& ^R_]-E7VeݿDŽt>9a.A5V#р lR#DЦɻ{ߋ՟o4>3r?348!g2KXն>hig -fy%H{}\ῳxc{CH;'oRv8aH)B*)E^p' Y/A$kN\D / εvz,$z3:`*I/9/s^d E$QnNH|emtnp;&?‡wmkBFSq 78Cg'>: S塇Kevs1NݳM?9on&۠A۠Ը%wjzT<=NG/;Ҍ/P26r?n ?e?o ,H؊KL} uLXA:.%ei `jORA6wige6oEFCHHX }$]gM eK}c9pjpj> 3qT۽^Gծ~}q+ 3;]^l!1bF/\ջeݖCkOcsA]@Mu{m^,49ybIDTRGgRMjdۚhϤ!jvڪ1 fQczjdx&1ST (̤Bjrl沚R.bjRd._3CF=EȀr"\k_P&?m'3MkshQ|S zg)_YdV<rZC@Ok0EhCB+EhCB+EhMm5Ԛ,58Jʯ-3L7Z2j͠D ZM%.2f5E 5 2/dֈ5YP?+CfWC2+CfWCjZ5e^DB#8KMhqY`q/FXɌ\o2Y![A`7.t{tqqOaù_zNE(?aẍ́Ls/ZmlߪO/B? ߔ>+:ߏR_LB#\ cX5(vpd!mR:K7p4d)&g*X{]0 6!j;v(׎GI{{ e`:_7jnbf:A#X&#G܅'ڐpZm=vZ2foebk{vJ6)_@<]ܹ"X# Xằ馑hK aɲ,mvvgt\`uc|8 'Jl.zOZj8 @_/cwMkro}w^d={ZTݵtq=/ -0}GS`jfi;E&7<++~;Oc;8>8uRLLM߶Q/H Ot "HM@bM@\0b@wWЮ[h$ʻ4CbľG:1Xm-L܇:8襦Hkنh:ν`6QMa>3}ݣ_w3h6;hTʥf=T*M; 6a> dYo$ࠎ> stream xZMs6W0PS '$C34tNDj$8/A[iz2(۷L^4'$Œ,|)ƜjDeZt_G<:A4ԫјd2 C0) qx5"o G+Q!ngfn\7ϫ2oU[02z'f88F0k5cwGQD)F@h,L7#^ lc^}|1/?|K0Wx<ȴY3gmZ-:q!,SR΍LPݤ3 'c>18$$Kyь @VA# pT'phXwu¿u K@hҙei΍_aM]Bl@LS8IH-S<`j`qg4xÌb鑱CɀaÛ"چŝ@*^/8ԃGG맥[l|e: Kp+QH1J@Ţ'\+2yK @Ue" w~.UU'˧bm̗QKR, c^@;vمp7ՉO/F=@Tjt@RdOw; /ucKDޔj^_Hl]~N'v`P9XsojH!!(M;3 pfaX ĩN trgIנNl̈J|u&(wD\k>Կ7/_/`Dݟi==TgM>/m O] ^W{ZVMu@#F_&lr+]GTw` 'wF>6hȾk6Iϐ9:0k=z#SeVTTuKY6iv`xS5t ó/ E9H1 ]73N Fd_8[}C Nd:rnu|UH&=%#2:H|e_MGC%R퉣p4{މOѷ/l,!@ZO, DxH 41|o.|F"H ao#HaN @fvۢXY-TmLoT-b1.#8 r$TAg|g`ûwQJk|8\ACx(fB5@;u4 gsHUWX<̉Xt)BߖϞm[>'wwñ۰3Q~`>?p8M_'xLO~T!PΊeesy@aN ub:/Ʒͼ;Dj&Y)@ iOq +rZ&őh?̡wJh۟Mp+aGn%BĻWzáyC( rt_OǍ:Z6yѿj\qKKfzgʡ ͧ< wl}cɝgL)cZVEi:4We^<\NʚXe3 "HRJN-26᪏R2Rk H AL6 endstream endobj 3195 0 obj << /Length 148 /Filter /FlateDecode >> stream x%= ὿0pn7:CM54lgxUjj0}Qs ]0pTֳ(iV1T\HZ\8< ΅D|lCc5Zϸ٦ )[ endstream endobj 3199 0 obj << /Length 2501 /Filter /FlateDecode >> stream xڽZs6%Ԍd:9$i3Nt[g@KT)E$e}@ YʹX{\}N gJNnDGXLnOKLQ4 ^NC\dv^-o{~m^$R4A_n~'D)GI5ᱲ&g5luN'Q m 9܈S`^I1v$"IDj5H"Db#"` ԒHL KDr ; Dc6$T#$(%R#w| Xhܟ)>8,V#e36>8Q^:5 xD;%TF2pQVL NbP/, yD)!oUNCպ#&*9C:-Or;O ?"^-\\].|LЪ/}GD:׍p^Zϳee_RtD{+{uM舮aGݸIgf6[SsvZCR!(h>Ee6c:]fmVowYyjrfX>>yOZ1@tn8E\at#Afq)ܮ# ٺYVE4budIIIV>YEL4Uw2rSd>NJ:XdPJ<AQЍ8%n/`0ϔQW0䓱GG}*}*6.2_bXT@B!&gO$"8Y,? J&L'WUbz"nWji-}2fkLHejPޚ8@9TLC6j i "HD7RPr7wY ES@yBNN\ؙՑ̄:e2K5,hn-j]ld 75Ah)씕{քuVP4:z*ن:ukb84J%^נڢlmպv#[{j. kd͇ozE&2f`VCy6\?5۵qǎm1J~/y&<4H ܛ>a ϝs!i0Sʼn0żo{7vTM/Be>u,w;3K|9i6K#ɬ\k"b#-f2q!"uڑmSSuIv%<kת{0j( qs:&`E^4zf^žh!/ ;JWKԑD$lc aZB?0=NV_UMȁMHHx2t^@:.-:ϓ'O(_Fv@_&-DglVd¯jz),rv#?OozxBq£D9j^-2:1CfUdO2/d<:;D%Л΍>CUUC:2W8 Ո ?󾰼"M? #dvWFPE0к4RIz[7K{]O@(dE# 7wtgѮˀ>qC.I,6c endstream endobj 3206 0 obj << /Length 1579 /Filter /FlateDecode >> stream xڭXKsHW8,r Hl@R,xwbM 2~{#Ge69y4j|_?u:>zZPi™SPzfE'ń(]= VQ`/fM7/ʼrO8OF>"1+y xHxMfC?5;~ͼz|3ǽƠؤ,fMSqFe;YujcLӤ[#%$oĬ*rS߁ F&(›4N245eV0$a(ijXmF'j[o:og$r)Cwo^{=1ؽqȁC+ ]Ò mO j)V(Ksݔ@ pv^O1 VJ)݃1 ١ְCy1uu=h{H T!PX8CޘV0v ivIG~%9oMW-|R:iRh i|e?NouY0e=]̛v;AO7Z.-I/d6k˭I*~c(Lq'IYݎXp9ܤ`oȠ0N qKlAHT7(A^DۗIE$H@XL1ZBBUV7wI1 >&fc^5:KdNݩVW%""v' ){'3ynNgQLՂQ$AV~b[.~*HhW ?OmxۑZS/DB/&ѧKJDy[“̽u Rs\S!'c k|lg߿j< =b{X p6~{atiK>fXЪ`9l :&rDf p h7&3+Ŭ>~O`3$m:!%!y(a9$uxo7td{۲FOGRQ؁fӧӮQ؀a&l@oĤYLq>fi^{_d/x zb Tjڡ͜ONv0s67(550>ydM5Iz_EX.RW-((sYڽ/1H ۮAjAZXSq+Q[^>9(XZ^wgDhg1 QŎs;=Gb풓l & 5˟>D6\10&=J]Q?+"] ++\@pNq77 t@Bk6IqN8`6;"9=^ endstream endobj 3104 0 obj << /Type /ObjStm /N 100 /First 969 /Length 1622 /Filter /FlateDecode >> stream xYKo7W^pfHF<@ m D(R8@ +!yR WEGb WO.&LZ\f08%q6QD '1"UMj* mT]l( S0x.'lNJ{.r`S oUlY$Vi+`KD(يRn+#nj)Ru$NK &2HME\nT#55ն `͚m`(mR2QjG.4GHqjJbhckSRm qh1 2g;AnXC NMbeǜ,fZ[L̬qmv|˕mzś2Mb!''lH'^؉4HMNؤD+R+62.GeUuJ !45ISs l&&R!ˢD``+lD, +F9&+= QlR]-],Ê '4t"ɓ{$o 0h%{*b>]ɉN.:ɗuI/O06(.O 3}y"{O;8<;wn8[~v_%;%^\\ !ru.geߖ_>[vv"J8 -56-eAuzg@+41#28]>YH*[΂%f; o:gM|ˈzyT"X8R@nҞFih;>odR,4mk^<+w.bFcCH xr sk #n-uB~ߜ{bne!d)=j]+M;6bxu{l}ny6/s1\,}̞~4lz)˷ ĵVzt.-#BFUCi|Ő#`Qgi/&epM唀 Oˣ$ wKzFT>)E򸽻$FiǵIgMH&b<%𳔑6Z2Ҡ̧LmP"oݾ(1clCHtNN[5#Th x^>p4: =hDKu+|쮷;bE_>H|-J~HҁJZϋ_bĴma} }9GGXP'V!1 Ti8) }/]|i/a"E;>n-|}F!As"#Rt Qħ Angݻ}2m0v6-SY =9Xm{Y5(H_|שtVQa_=}u*: <ż#MrQMF|c|i=Jt7$> U/jى~;bًbaF h2Rh4}og> ku=3}!B,o~US endstream endobj 3213 0 obj << /Length 1854 /Filter /FlateDecode >> stream xڭY[oH}>H0W{ C)Jq\j5=s$ }=eoG/ pd4TB8ai'KtДH$jj82mc$Uh41Z9r_l0)fyv%s?#r>bwC%tY8*ݕ͕[vRuaӭLY1_'ӾqB$$eFZ߾KSJ}-A^bʭ ؅9<'8x$2v6WjpNY6TntMڭl`n+v\]Ue^,s%$VUt*3@n^1ǯqf 2 9l8v2H(h.>?HI"ONW_ˬA-«.BL׈ "oJ.$E` Q/zBh 44d%ʐ'#8|9bHZ]Π#ɆN'"\/۠T}~(M弆nQJCPB7^RD'E9fa%ULW0)U(IÞ5q2I}LGU:60:FuH*u'DC"X'Kt8Lg].e/ 7_tO{ %WO9^c#84鰙WIP&4 !}6 R@sd@E"H3lۊ (_P!/WlQB̄" n=ܲꐖ]?ƥ;G'ܣ05[.Cל@/ANܿr8:s([e>qpZ4P9>udHp L#,hܗwMDGwVtf'ڄv}>荥5TF @<_`H MZc;D @iW P k~Hp$9wDk ,pPdP[V!|Qr9I!4}z}Fuezj605qZ P 6EcG21?[X1q=wM5gEsUYS&^Вa<,魛Mx5j:upn#t&BLψ@'|n6}J7 (vR-cP3lM/Y=ހqRh;:#<m,6B6_okZbTPEo}Ql zR| f@*aG&6u5~XLni#@T\Χ'\ LKOEsK@@_aFj߈1qn \铛Aip%w@?ݓpJkBĸ])Pkvf2['aqߠK82HΓMU0R]dj͎u;L8Z-:VEׇ'F/.D ɾc\RxbS̴V]gGWfxQ3K,w;Tqqqh&_8l*#\ endstream endobj 3219 0 obj << /Length 2314 /Filter /FlateDecode >> stream xڕYKs8W蔒"8!;8=4B c{~txs1h4Я77qYWJYҜL7&NZDVYc""cS&DpE[:6CۦΓp (!) Icx^^Y xG,ϲXt$.^6y(uJHsx"өRhٙ"حS ā:/iR< .Fa;mk ^9z51zZpwB\F1* I8^CJhMH`Ci*@;˥@ 3+9݂4w0K x݁°$/-fP|o!qVUCNQ=3h1ûĆؐ. Swi  }sˮ-.any .E8)!J%7JKP03ңS!2Ҏ8vXv|&Y}D릪]7/C'т*􏯷 X3˱Z\i K->0Ww To[NXAafΚR8ݸNSکP+0+ȗ&!~Gh KF~zzb;- K ,.r%:HM8/qł? 4 R/.`'r4`Z8|=dtI"h&Bb z O_B7tt9Vg8Kw;ܕ;J/B.Ģ-^e,S~jTOzĮ8-N,dOEm_J W}=R zs/tx^o2$Ņd94i/ibKƄAr 8]JWJwcץ6D^G>9VՓ*->wsam^{uH(BKB׻E5ԯG<]aF'r~T,߿~9Nϋ/+^et{Qz"Vfp1j3ϋ 9+O&2"W}k so+现*U[0{[RAZBn+4^-7goeDց1$fg ub^wA yL2}3B~.ꔆAPGPE6~HߖAݗW˥Cg/<7crؤҥd}PGI)JY Fu@"QŵQLbUEFPЏLi#+gY-Bv+,.gmP _.`)LzjE̢䥿pй]8&|xFP*tXE!IXJ2 M :%i׬]ޮ͂ԃ4XF> stream xڭYs6~_Q%$̹3U.ݴy%8E$b_2d;wy@` `wvi<=eJJXN8<[m~ZE( nBA^>"IPM<Ժ6EWUKyq tfA9Tk[/v?pHӜdTumniq6(V,"]]$6WPkhp{Eۙ ݒԔB mg@3n׫˟.9A9Q.{UP=9J~# zO^]<r.꼳p f߈w `VI Lu+i.Fx2>d:L+ 9I!:qbt= 3PH#`}Ag8) Y.ڨy(HطMZ[3jǵusS@yAd<+bq*@LETK| "o(S&@u8Z{lm~(8ZMYѣet 1r3#:ZuaufME=hY9}]ݺcrG8^-Y ۣx_fוVm[H*W&okZ2UӸ\~_EUiLo6 !HF1^`cK>H2>P[%^hɴĈ!(e#M6mDX7nN6MVy /--e@mP.Ivwl 8bKoNz4zkl oF" t!$"Ҭh*NmA$\]asuOz8j/}1X<,#͞ (;*c6ӥ[;Љf*ssCn͹]]n0$D( '5sW؄whH:(uGO7ͅ"ff;MҝxA~ Q-YTcT]2vSy& hl'? Y~qY/sCգgY}p" ɓY1NY+&!u(G2}NA;W. )foƋc N7,L_A| g)ylN8e 8C"Iц]zJа%&Xģ-$%~p|Ըq Z݃! Eg}`lh?Ye˶ o@w.?brzxN=ܻ'K|NQm '׳Kʹe2@J,XTOS7TL#pTF'Z$}Jܿp{uIf ^x`'46#'EW% xKnĵ103L`V['8ni|[ ) HPCh(S6,׫W^hi|D$2DA@јB8m=`4#xc*W'w@/p@zR?67Z}54g9&~ 4 8zet!#(BP0 ZZ1OE=zxCyk>vD?eQ1`z}5z_NA?ΚG]EPb0pJ~}uz_cx] endstream endobj 3232 0 obj << /Length 3145 /Filter /FlateDecode >> stream xڭZmsܶ_ɇu ٌ:X}QT2LPw Ų뻋]pAؗg]^L0Ky;3:L>F"۳K'fIf\}\I\2IȨaWqlg|%M)@us[t-u;nmno]o_,n",v 7m]5wuCol g+JP)M{}ut+yyۖhm$~Ga9'8MJAno7kxU& m9R& M6(x~«$u:p[Si:Yť?|kTdBh.(]1@7=nQ"'1Htʝ ,Tn 'ph:Jg&xy ua֡oH^LR&ܢݒ_% ۟6h%qˈZ89z[R,Xb*~-FtN{+DPi{uSGēǽ~sJD\ 0jr .a"Ű/a5kRÁI@㓾g,-y\'βq$ ^bI.WP* 39+8}47g-c\H!DASrgY [у46o!ӻӃAw(oO{P%}WA,?{[&,MwBP9X&k;%@MuȶQ{mZ=Å jo.xh-C`<04< $2e02 N<&yBy~ ](5rr3^x)P@\VmOpb2 W":0Z9ck 3l tG~{ao%&>%-E"8mjX^^Lc5L+TV:<1mO4h2i,D'BQLc&J h:ފXa/h8?:ߠxw81pТ=ZzeaD><{OֲSt,nwQ2U"Q%Pt#Fgo O)F#fm1Xo֧""%MpeWC >X.=#CA3S'99-Vl|9cBd+LHjtt$fWK:pَoj\cxu8yZ*~t'aH&čܢ#X LL0E73d\ƶm|`3RI@@= }n=:lJ-M̴lYrǴ^lt/9Su&N'mI,NptmBO\f1IFhg$ܸMId[9]N啝u# HMd8#DX!08(9NA{U*/lMґ&\ݼ̞$=h@anzs|lb[Dop%Y4-423WCCHhU^%>GnA+ l$aeѬ(=PohM>@(Ga;JرY^:^#+K*]h{[T$xdqi[5Xe Bz(`xn\a J, 03v>Akˡ280#ͺ9ЎK#l0wvCU@wb#|3'!i7AP8Z$ڕ]] @>Aԑ:٥ 3+MD 1< .I1 T+ˁ2ʔ0fA vܜZWR39eVz\ Q6;BsmI6f;HL0>Qv᏾5sgS9qo2B2-[iPI吞.٬%SȒT2=e"M RŞK׼mvNj( VPȆ݅QUB`]cs Z7FXQh8PD:Bwˀd;(.Z)gd5 >nh endstream endobj 3237 0 obj << /Length 3071 /Filter /FlateDecode >> stream xڭZm۶_q퇖Oqgԙ^uF7B,fw1`"U7`wzւGyU`ADM~Iԭ+15[*Zۺ\&M޶:O>FRpZK|,{L'Z$l'LͬW=M~m :A_yc.3J"Im⶜D7f̸D5P3jl*bӞ@ЎJ(}SҝIc 3F-^ agBQzVHhwgO|6oKFF^vەuEC>˹*ΰ_7u2$q< ʀse%$r\lJ`?0 D 0QȮY\vFgK2eBo9ADF]yl=cF6A KeLX*\nַ9xNj$p,iK.$Aq%i;ʹ/.c&\a.Xa,|ZLp}b܌ojF;~œϥ ʥߡs ~5,םCv =q])aZ.1jeb&j6$q)A_F1 BLSChtF<=8|Gl)={ o)I[ALk^$*WI@ne0WA Z,WXvV) ۅNmyv< PL3=1yGy߁R-DrYծEY`/r:Ϩ O3@8I͒\jWzti=K 'ޣBBb4h!w/ =Dk!Z<_/Ap jcKMj>SeS &@R aUXwZr^eWCWQ#n鑪@NÕM-'x!B^a>s6 x%ȫAfxd“1b{?܁:f\'<A8>ڣ YbC>A&>}P (|Ag-+Y*pXGKc28%'l6~,oj] pvF)XDRGYn}FOW]j$OӮF| 2߅9f9K8~7X4" 暀(yEJFrkF9`M 㔸:sʦ{Atir't:܉Js0ÍA1&QX'x[p6:@m[zס k%? 8iahwtaۀU4[Wmm#"ZxbF?V;K6` Υ3֢¸Se[oƀ-*<5skwx,)tC3aZvͰ˕ ŋj[2DI 7v Imvt(m{Ć y8v///%O@o/OƺYL2UIxu -z[t/H2@bM2Ǩ$z޳[x3DIWA I[tܫQ^@ེXŐCg_0)YD"GmT6TL w޾.F+ٟNA; ]!Rr3\tfOm8pC|l+=sP2%MbLcA 8rx\~ x_f SD\.T`l<@ HE]}&h7HM71j`ƶS p3؅13L0JDŽ]x& 9],%%\-.42;DPZ :QGQ\@MgׯC{BS;-7lSϥHbU>y33bM/omEn}w=r-pr3Cw~smʦNE`$3!=<<gs[8r&BU L S7`))ɸR1BZĜGo? A"#gCwJh^Kt k @{U#\I=:,mmOGFe{]YAEԑv?<&XpZ\R &nE\`ɉB뮚~C , \&t(g/6dF endstream endobj 3245 0 obj << /Length 2874 /Filter /FlateDecode >> stream xڭZK۸WTċuٕIǖYL$rBR;Ӎn!cf'^F@y䇗XI)Jkj_噰Yr)dW}Z2M6w$t{n$ؤɞ]+'͟xi2jכ\݉s;".zJ-{w>CjӃ\^n-ZVbFޒ0HZTEِ(lnwt8ف:ɡ=!&K\o^mLEXŸKӧsJ!SV%Ȭz5麾9N\("G)%={y'C&EmERvho`F&'7XHP~n>kIxTi΃s}o|"¶eւ?6g -{H.મ=QMK[ъ(vo i~syԨPZ%{懐BFAZe^ᗽpDetdQ8ˢpKg񜑳Qrt|A@-2e>w:5B}?hnX~ZudPzz`i?=?gϙc>8-KFO xFvM[q'PYZG,BNCAb^#R6QDGUWMiAF{mMS/o8+5|1b:ЯD^o}%u)Ba쁽,[ }!XS;/WieFqSH !\5&BBL|Ҧi<~}|LLgobl(Ps~2k-3 K}RyV]uBYI {Ucslb}&cs[ 8R7("I-,€E(OP7!T%Etz2}{da%YB<HCaЍ!B Y9ǫu Q(!Ǫ=m?cau;AkɼU8\.oB@^Hw]= u-uD3 }A It#O.!];^BD+|%uOȂ~.حu6a r>aW(m&YP'g;$sO5)k6+g3=,3x׻|31B?R"H$(?_l^݄-|~tFU;36l?bR?B߈H9y 2x-R;ٟ j" 2 xa4Q1`-Y׋^MؕZ% !Hu[ Fλ vLċݸIM8"y M?p=MC f4s)To}H wߴ]Pä"CyaVcgLYt*Ijj=MRPfL(G]v1-tQ gZ' 2-m殷o@{2LL)-uSgiK(.ڌxUٹ*ױBL6C*%T(:yJ| q7]T[j..7]6W%@Y8DayΙM/=^T\" Dn=1;H|l=R`j(8~ vDc񑿯\϶"bÔ#/ <;8aH=OJa+0Bj5[-8|NOja3,%DyW,Q; D{lH~Je= UcMj!V€i-Ͻaq 8l9ScFqˋfX,D+X}XƥuԦ5g{lŧOX߷YrjTuQV@Z6gh}\ ȄTHf9pSs"}8%&υ,/|̭~f+R$|}Z= އ 6oE?Lm[[ι[[UaF`8e] ]sh,J> stream xYK6W(kZR$ARMAYwȡdɖwޤh/E3}=͢c$Ϯ3Tj4#, g`1C1rFQ"CU$dx1_pB2xoH9A3_\&h\ [S|$Ms#)8ׄ~+/XSQ;ʦ܈l C)Ɖr;#Aq<0KNHģD#-x̉d A|Y vA`T$͊&ED'-֥6X^8PYAUQ~<(}:yF~X>+L"l|v`mB k } Bc%Y-3ƣxvED/tGvj <8el7 sV6৲qĈ{rM&ɔ 1 Yd˱_Gn_9S?%~~j.'Me^8^?j\zJ%vzJҶ:/ovBv%q cBCϤP+" J.Tfu\i8j4t W2UUs})o󅊝+n 8y[~olc3^\㳫\쌓fU6\o; cr%2. kAG8 q[hZ0c; SԾ@GF }$jNOKm&~W-'n)knL}_52w0y&5*wt C>+d/{|$E.tX+˥%O} )a[շ*ϊdip~##vL@H4 OG+S+_ׯ7'|Pc Ru4+v ޅeuY,v.PVs5ZRe$D֦?e e" 0qc 7?^-\@IO0xh'c:oMx 0Mcl+Ͷ/ixZ[jH@=+ CV.O|B4a= q:Glؤ~<.W@ȶ+'aY83iqw ߡtcg657Sc7K;cYo,2X)Lnmn?ǠZʚ@q+y&AfAZ)sk0B5:a*Lae3ζ_;m^me mtѝҚ8CW-Nޘ^#2& ]1dil~7. endstream endobj 3255 0 obj << /Length 2870 /Filter /FlateDecode >> stream xڭZKsI+< yG!3b9rhKev[jMw`~fVfD <\|~Ygut&SdlΖgq*89KR)dϖ3|!(]EݺB1ꢵw6gev&XYB%Be1F jP|iMɫ2ו_CmZr[U;IXCѺjD!Q9 B)(!&(VWE[6ٍ'hm5 Ֆxþ:4âi k.1p ^zHwbh 2jF$$YuYЇ(#a݊W7f<;i_ ٮjyA)Zj[nx֋cqAum4JjcIaƛB)Ksv-sMk6Y=4lƫ:enQŴzf<L:cZx0!4dQo˜LZ4kWZ06z Y0Ƞ|[Q)sdL=הIEuT6A"̘Nlf-sBjI. W'0ac ,‹R'FđVYJoh-NF9 ܎<$D-4K GN+QgrF\% ٻ1XNy0Lф0D a{r H!ݶ@0F6Ֆ@vx4Pj7 ئ`Y;-tvF ti/JKCCL'߀:Ahp{R!Tڠ8V>rο+td$2>,b /;bӅPÃ΢q;x!XH CG` NpcX:2:)c/*uUU.>`_sJu1֒9h֞@T3{ E.Bp,qwϱu.4py!o_]9rDZ_Kf"+:O*+ӥ$"—@N?!U)CKګC4Z4 47|(R)k@rC4dF\g7b8{0bȶY&L~dDd)n=dƢ:>Χ<AeZtYf8P2El)NTĪ4[iI"E< YI28 }VDƐ}枈UWdd8^5’HJoB jMCCݟζMi= T1'43є2bA^|XdD:0ӣ:h!Ѕ!yHS`b :F\ M 84j1!j~r톙w 9!%gw"8)s.,#!T @g> vLhĿaeeazAAItZ?'/8W+*!%AmJ`?aX}|CDfs;Y up\!mVVr $Gշo!ytDI2}j%dcb4NtzPOFĩ?85!.%\#;[Dp5Ltg i A1%'I'S$#s>,XI$q_ad& opGEL%hBˉ\$FD |j4h{U\i2.Tʏz1>O8uEk/P48y b] <'5 WTe? Z-L +ƪK$[[4 WvX{%f1N&ıot$?W-o6T wxE,:mE9*q\_AMbAMC|rN~w!S:|:X5CGx]@cSʗN=JHZ (W>&S+{*Ig3Ah<gEu!j)1?*yQ\믑mEĚy8j endstream endobj 3264 0 obj << /Length 2671 /Filter /FlateDecode >> stream xڭYYܶ~ׯEDC HUd*;*1G~}"g8!8ṅÛo~HRapc0&Tl|s(o|FqG7b+ Ǝ)JnV{(mAyƣ,;;acյ%Qp_!/GqM'{z}܄ʤbYAʡ +oq7{eBh=c4y>o>n$Troe/UInFg~yfu,LIn0"3P \]m1 \.Iy5}I6@iPh|24 <,zS ^ yxFpzq^1u+vȱd=jHk9½ů%yb~ō= 0U .|M-(L2Pأ][`eAQaw*)_"eZWsg ݍP=ѳtYւjp ;vMG-jL;2ÝtA談# t]+~nhӮb2T aE,{$u7֨ehJ$|[KmѝȜcw C5?T{̂ln,^Fkz_t`ҊoԒ_f}dܮ_KNgRuL`CYJ0UA739Mme6W^DMk2\&( Zڃ~r,L|ɂ  }cxu7h(`cڅ\gMBC$PVjhHt/g3FE_i]N%C> ɥ L![s@=|`V9ɾE=Ф+nt U`tc:&q*G( y?}+L0IZ_g>¨ptBXFˢUg4Qԣ6LlχxIQDY0 U Xe)y&v< @Ъl-h#kLyHUjYHH0,ČLB2SBrtw(dgZ)(Aصz9ycbU~K("c0WEߕOdz/(QIdC@AD%kMِ$ H&>Q LyinB}Upʩ ވ6[!֝-n) p^R6 sMcjTt -hT_w[;<@rpu91[W$qRW;lD&2~eD%" !\ ?aq(B V\[[ uU̅NyBKLZbqt+H955=-Ien$t9Q0r`" ne``JW1f%?$H,0hy 3܊1nl fSxNZLC}TAo>16T; 3b/A=%z.K)L0 Yں 3.)|"1ǴE< >JY%X0K@MR8bJz}Kz3J b nB؋$^ {@-"ݘAH a]ٻ́ϯsHl%Ű' ֎X({_v\ek<>Q5 ~j%[sS xJv?Q]F[zIQ⳾"&d<4@G`kH'y!BQ #B .nѸ9fhRmU$blJG KO IbxơwOf8I钢 Y\3)|ϯ9ybcA豎`yd욞Gq\vdZ S{U\\H:bK՛Pڌ,h4Gi(o6\""; [Ѓw'|'PW)C#0rtR+?/ * endstream endobj 3271 0 obj << /Length 1285 /Filter /FlateDecode >> stream xڵX[o8}WA\wi:팖jziӇ-6gP(IJȀ.9kx')”xBKD0ao_y1zWaˑwy]$qc҅w#i!?zR!5H3?Hp_AFudIJەW#t7C6gVFߡ_w٤&ٴh|Y` RG"2'Q>TUtK.Gd::r "R۟?=y`Ŏ90(bqdƧ6(a;jlb0n}ϊ aϊnާßtN';X eSPPT{KJrȃ LlWD ŰmJ_a@(7W"%D_r endstream endobj 3276 0 obj << /Length 2367 /Filter /FlateDecode >> stream xYKsW 'eb2xlmE[:EB*Pd!==+`@ӳ?pB9RZdz0qM"eLO N2n&̋|xWF{?( 7݂D!J "I+QF7bSkh5t/&BMT"y\m3ʴJ7Ϡ;]"pa qg12J5{*S 18 Gp￟Qh|-A$ĴTj282{4ʞH d1ޡ7DCbC$1DFl 1zbG(S*O ᝱Tƶd4N0ؔboQ *"*%|h$y_ #a ll H KA_>%1Β cߴk<}rB| G>݊xKdb?g  .g:LLH脃Be28' xx8$@e6|g50RPG(ym{ 3*ՎO MҪ:+-P@wiɶ8!0m>)p)3{6!@<m20~̽黔IO~`:~9[+PAQf6 W|C?/_vePip 09^ KyzC^$i*eiu>mcH1w%~~bbeEρՊY7A&}r>r`U*r2U\x7cH#vk}ϮDitnbgr8 ?ݻ t(FS8YpD=dAR%&Ϭk1\z&yٷ-DkL8VgӣQN R$T@}*o*;#.S7^sb)m4=poD.[:%;!0tӓ:kC@{J\2M~1V-~aGTy}Hd)H.[CO4Z4ˊ7\6T5gHBż0 yeFtYpoTEv~q l_驚YxxW=cu17z j&oc֧7#6#Id)3>30$A9B|Gςk{ "?4I4vqCր"=HrVNuǔ7؏'.ÆXO<K}a|(! 跏B>~>1YC:gb,x;rV暽{W6."HY XϪكMyը0`ZwvuñO2 Kœě!(e\CzV뷟yn;h qCl'T+4 vD@?\ì*6 i)If^y26Qa ju !;05oY XBdfWqIԤ"24-[:hw9 k@;;ՙς!#f=?֣A;;z r={0\Cph\5`~/ endstream endobj 3283 0 obj << /Length 3416 /Filter /FlateDecode >> stream xڕZKs6W[SI0Vvt*ynMHN 3^I @|[]H֪¦EXfb%*Z$jKF㮲4:ͥ=\W$xSPsKk)moޚ|ʍ2Yم FI,Kka91NX+T鋵41 w.*7ѓ`ã]Mn ié+yaMw]N?NE?Sr&@hWhLjM{-Bc$+fYҼ*DK~,[!vPp7-tQ^a;?̶+iGC]PV"wX]T0r,~HI%޵!ҙm~zasҠĬQP[9Hl +2,7R S3C@p_o~VH'g;ɿr<2Sބ3Ɩve?|S*z}SEnXdB+f:86>>:=h5NX' 0(*0ӂz*Xȓ٤)?Ł85A!>#+;jyuQ ѤV)e<@D!%Qh!:(9AXQ?וhI7:)鰣6kjjK6qt,EumDOۭk eD2-!pOi&~n! xڎVcN?C Oqm]yܕS-&~~*$rn *$[ipf$'3FdL|@F H[>4z;  wR3 ErP ;IGfRIuۃn%Fn5RjR8TNh| S"m39+5`\%?kF;l龴,I9u.Pn Y&=4zDD;` rZ:jzw(4#!Fvjgv s(e*wkV$,֣|xw\I[0@ 0(%OgRT;u Ȓ,-0||zpUXK8SK51dxYmt{*K`R2/=$"VR\i  (&%V^)q69рyy2D;3m^&aW}%B4s5Fݟ#>Zst*>:k_͍I5Kq*UiUkL39j[nEuU~_:8~}A $\*U&I^g%YHbkEm[47nlEքf*]6QwEූ֘/~"UšLp؞ý^~ lKz-9_XL5n Rn3t XdFg{fL 6I}m$?Ά2YsA $'2}$@rjRA`J e$[ny yKlyM>ӿ>[8N78 H/o^'w<:"zJ"vpݟEC^+=FoEW8[|Og4]@:~8L_˒ PZzRHM3j,7oYw%%ݖ;ǣ{Im;zDidn [k`-cjj6Q 5{L<:GPpi4R#ǰީQ dUto8HjpRhEv( ;Dxܸ͝Z6~IR_<z(aӇt("Ӗ?r9xB=i)ûj-pf&MaP*zkDgQ4we7+L`8ad Bۀ| {仲uM5 ,RM|.,okz endstream endobj 3290 0 obj << /Length 2142 /Filter /FlateDecode >> stream xY_oH[d#r-{nEI8O{~8Kv,bIGү6/~xӅ,5F.6 2e &,>D_/6a":ХM*߸~ i^~7"  ׋XjyBd2VF;NPqu)kVXz_IRj)k~{u VջkJV0i]n1,un9cZܝf&3ֆ%GF})]T.++zᢪϼpc?+*0J^МiyB8&HqGURi/)D?U\7%Q"-r&,ںʀ*(aET@{\Ze}Ѳ9 a?iLϪ-c0bfw}G6%QqC$4d~w_6~ eޙ ۢy ⏲*Vl2J[R~{emY9ǨnKQ_f[Prwl),326&KnʄY!ve„F.m5^.eK Eڂewo\cu%вa޲˚芆< zy]dwxKdpXk!eazΘ) 3޾<vʲ` :ѧ.(` Miy ~utH :3 ?^Mbv7`?n!1?و0m4x]R_ j(Л{/p{G}0~ ~Zgq}fN~^pVhHo%c^]zC$\dǟ^!ԋbcxRB$- 8Ɂ&< Mox ڧ Dk^Q3bZ蔿H?̶Js zGYݔyDozx{wy2zhjzg\*.=X} @:sPΰe`#R)`E0b]Dc>inO9:,K!oɄb6 9n<0Yc\q5洈ў'e˘ˆNe J˿@6>tzRFHTcWr_>RW)oڽ'/.8焙KL䱼yAf&L,WEOt{{(H5 ք-9pq8pu>2yVM0BuxyqҦD+mz ?{*ERcLH<&4ޝ8mI =Y`Qed!$~FS΁gi"!oo*th>d_yx !Unz[Kj'PRhE5y^ _)gʊ#m sj#93I-8䨊iҠOB/sO#͠0 Ϥ&)i|]D2vp2rhF?CRi͔:uTF]}]Sf}% >`0ħ3 o-,$ ů8P6H8cj_mhhM pY չFȜ2b}G}N$M^C[맗ֳ̨pid% q?u L pdݠpppQR1o:%tt_*C5QFJ"*`ql0sVA=#.nTʣ+w}܆)MG&.i]fʇXwlY=[Ʃtu ?)8Q%(y{ 6]Ktߞ-^vhCVNJ,GBm11!bݗ> xy0 endstream endobj 3294 0 obj << /Length 2272 /Filter /FlateDecode >> stream xڭZ[S~W <-?@*o% v7Yblί?=,a /<tuO'AF,'ADx ӧ/,pJp8x9B2r.FIp^:ߌpTuU 2T[SY T1#p8PGDӒZ"Bu1ӫt vno@B\n2z$<$b@!_SwQ,ǧ>`gL<ɖw9d0Kla"fnOu/N~F)4&/X'Hӛށ[ ft%9qDzW5At0[u$YlBk5VǗϟ/N׵`l|?"0Aї L4j1л؁JtŠ @m}ƛ=.-Dh5v7۠&$]9c#0qJb>g)%vuvnE-onM.o.#`Mxo'@ 5 ĞB#W-7xig盗x;uJx:q2+|GB~#VF,g l6{kv77b/}ycAhM SfK?,}v3S>tyvnfƿ6Hlh=.m-R.NtUNp)F{ n{:ѭͦ]Fk*hOIeB_å<:$8$dzn6(z/I(dBFq;1@~bGY0}֬w%-jB-$^D Yu(O'#^wBYx8@l)DRu*.Ctn$phHn? UulK|'䠆O$\ i_u,Si;׀.kxD0%bWgV5@mI9X#%:$Zoڅi ,_n27_g]PĥOؖvoA>KFYFP(8>)a;T[EIo khlmqIHtܸOZY5h{^ NIwa.`Nf+5Dk5n*[!P!#̕Q.0VE "Ggz%H[2K*=̅.fMJ(]'ڿGPH@hYr㤫 endstream endobj 3301 0 obj << /Length 1381 /Filter /FlateDecode >> stream xڭOJ+&$t35k&bJQnj[vs{ڙPhLNgsΙq0G(tH ;OýFl i9-L#LLd8?BPg43HNyƽ<6ZsY[qQQ%\7J#;%) 9.!"eS W0Dr-/nOwT+-R?'f[T1gHbzi\$|&N kqGIeTv8Pp&at?Rz30PB=5q{~Jl GH>{@Kȓ8.Fv$VUNf$ Lw8mٿ'|&R*W %@ŞZ!Rob'c+ 3p ᐴ!9HڌB;$(S9:E"ٛDQMbRDAѣHw$c퐨M6$zڐH%1 @p]{"a!G!(L3\0UEՐCH)TDGA6^\)An 9y; S->#Х7vDlSH3jtd!+݊M~eHu]^E4Ps|pz#(ǰl,A&-a2ߘGM7`.P6"@Ӷ$#yQM7 IFp|, JƄIvjzA3?/Uw 5jiqdQۉ26WqWs"^̦O3c$\C[Lol0GEYG Jh1 x gvb[nO؁ 2q~\0앨fCLt5}[F`"d}=6Æ(^}[6E&:՚1;YEvtmxp@75&Q'S J (ʶ6JTe endstream endobj 3279 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/san1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3304 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3305 0 R >>/Font << /R8 3306 0 R>> >> /Length 3787 /Filter /FlateDecode >> stream xKd9+{v$nv#V FBԢ}ͬk :ZB͢N}}p~= z?n}9~w1|V\u2q)):\yѺ Ԋd%5עn@Yz⏟o_om;~!j<^zG6/O,_v ntes/򣔜/_?ӗ_zsŧO'% w|׏|o}}krBэ,";&&*Wcu=8SUІqC4_:RĺPo٥7Ƕvv=+ u4Z]°Gx뻲[wxGIFJ] ;æ],}7 ?([<݈MzCab!ަ'z[dۻ|ogFuC܆'zX0"*XA PH0TRvOThG(#Y,iT>!@ n MǫP؉crRvzf\OY0PJk!P;B! t6N2TB3}̺Y23s,n:/*5g O)G$*p_-CcĎ> G$(i$%1ᓠP{ m+;C3;>3 r*W \]j],Jhq9Z3Kݙe#@gk[jzwfO)t)p-R:4!׻NnJT2TvK-P>V' v8((u\)#(h GSC{$[L0{-S"ˠ ~TPG}Mdfl0^>-fAУs:5͜@a/Fiלd׻p:D/ 2ʕ"لaMwS3TN>J\[F6+t0LȒ㭼,::_.PE#zɖ m^w71ʂGЂFCe#I)"P0pnbɀJl,<ń^Vm\Y2t=QzCmdU@=6WFϜ`.Ӕ =6v#3W[1@E O\tG2k5̚4Df G 5e33sll@}Q0!khhegy~,f {X~ٕS] Sמ"Ua4,cgTLeQ[-wXl[*wdY,@^Q22f[0ˋaђRǼejegScP9.7 ڶZvfU _0KڨJFtg^"u;0l&gA0sZSUo՜Τ!l*RgWyUՔ̴S;ؼ6,Ŋ'%sm(:N^8I̲?&,kiV1 dyb!WfLO,! m3"t#w#Kdx1/poHJ+SR0n  ``ޤdx/;ʰ`3U~&8kdۏ> stream x{LSgƿC3 6"#rQ&pB(K$/tȥ-j(Z.-b: *r.D"3-d,y9,Ao7}Sz]JXG a B)92,XG(C>W!ؖYz=7'?jӦmQWZrJ96AyȨ|QhRaPUh+*MUV2S*wUJu}]i q [n{#fs,ByHV#p`B\€QG6 %[/kO'fH/+asd8EFWUu'L&/"9{ UC8I闺} 48UNgnҒ 'O>[_L~BAw"3h U1ENkWg[ 48`ron'--vb.!j9M&)I>C_/\q1Xŭ7>tʎ= Y#L[V2d|kӰEir#~~oc^Y}2֚q"f?moaG~E M5wXC1^ d J Va xWgF!E< &a?M0S<lCbY `J/M9qD'k^v cznl2ދޛ0^kt\s|M-xȷpD>nI3I7aH̀nɁq pMx._ww7: gr8;>tHrl+A,i>:}jW ۺv\ <陱V..+ JӄXt\[+{,lZZXo~-\#0Y$_`1z boeI^_*<&Kg %IJFQbrij2xg3G0={2p&@,cfT25KY!?Ȯǵk-;ͧΰr)`NK ̈d%lqAXǹNҷ._iDofL& endstream endobj 3311 0 obj << /Length 288 /Filter /FlateDecode >> stream xUPN0.ŽGC 4)PKɒJLb/ rcc"H#@cBYm7r(dG9ywcwuUPn)09"ғWZ2LIV>/m :OA189,;>1 E`i؛NnxYƻyk :8 &v!&^Ghn! 7 }~hun {ÍXYy m6e'Hwؕ@`C3 [.X0ػ(1^BCu^ endstream endobj 3210 0 obj << /Type /ObjStm /N 100 /First 985 /Length 2374 /Filter /FlateDecode >> stream xZmo_Aj wN|Υ{F9 k{֕֩PR^er9 gpeB I Vh) 470)Ӑr# Tk%uw=4C9&")5'D \R5`>3h1k@gald)y+c`YhNB+܌ bZ)q y/tLB[`Y޲PKt<*(E@ŒHcyG +<5ւ,Ň'& 17䝳u5<Y*bYMF;%,eS`g{$<-JQњJ<ekA.!` g""z`42Ѳp('huʭ b` 4ⲇ!ow%7ex Q3xax~x_NL#O~vZ^WW`,ݲyѨjӃy6&U_{ūz|]tYT-^_`'8%Ȥ[=giȃ(\o ]S6Eh-™#I;[%"p7b}ipt"e 6EEתQ'C$Sc&Xqi v4u{ 7<[1@$ݯ(r&o ˸ Ma>aLHܴG*.w}q!ȨO7ioږbIX>"O[3C )t#61׾\iؽ`ۋW䥩k^²SާEY/̜G~9e4 K~&9i919'5"4Z6ƌhYQ+cqx3'd0Uq)񟠬D m~_НO|[MWq7o-( xϟ~0I}R7QjzZ\)oI5 jfc֌Q5hgbP?)Ջ^CU9bḜ'Χ 0y=쏅u]! u3dJ?͏A}]n&BdS[mUMUrR_e TeÓ*&0Oeu3uۦ[ F7M"j,&w{dM-<8c`)L^zP|g_ ]9bR~ŃIP4qYo9<Wm9:-yಘ]x4n_/nQt0 endstream endobj 3287 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/san2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3313 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3314 0 R >>/Font << /R8 3315 0 R>> >> /Length 18726 /Filter /FlateDecode >> stream xlK) >HzGBdR5v巖ʜ^˻_GyoeYcy?I,i){}k?u˓RG}*_&-seyGYLbiѯn:_oo* ^y}_ǿ*%DBq??.:}_GCY{}C~=={\r={ZqO9_ԉrs*>Vb-k~,{^q]ϱrs}+U0#xgRN__bi#ܸ9 @)xHi ͔! WG4(LR*Q˓5[Bo ! VWN#(HNGC.+-by/Cr$GQ咻ic9MIiry.+c<';1JdSHD4ˑT1JV9P:TbM<~ykb+uAcЇK?!YVmũ@C~kݞKH@#vw$3Q{" (9 8䇒%(XwQ/QVrT !WvyS(9}Δ]~EޅDF ^ }~ FK22֔ 7Joq%硣۟ !:!E ݎ"r"1s!Dǻ2<=1d!+k FۥFy_#( <:]o=E©ha@8^hsRNc@HCgTsH!רN"o3p*2s8 y6k۩Yu=*WM6)d$\r2+J8 ]OS:9l"Vu "w.22m'9NE+26( ]'!;@HNGI©|dbhgU:N;g + ,p*汧*eZƲ_{^$u3r[8@jU=y|_^@-&K"I9>}r7!;[=['b$5;Mg$3"R#C&h_FEzB_L7̥Hf^'U߄ScSžK$|wQiTT8+98Z NŊ#d̶#ig/Asi>2[< z_Ú:2yr9 (HBZ \V|^0*u6c8 +pp:߹F88 }y^#Jc qqii.9Q4$gNAsune oAD"TZ }Sz;H8+*p*m[U#TZU"aTsPS9j\G©,H8]4*P*m z+@©z"Tt5r"H(ms\$q6NE¡58{%Nc-tX"4Nݻ!H8 jUI8 hv74綌N+_ b;dXq R'Jez}rSr^Xʰ@8U&p*KXXlJe3ٖvTZ2&p*ZtֱͶ!T֧ڌî: ט߄Sٯ({ [H8|"TJѨKY 2m ,_F©GBbm;p:јe47Tkj$궼ڤM8FmyH8]{,VS ⪻v[G¨h< J!\2l= r`XG/UҺg TtB'ϣu qw[Np*H(MQ8$@5FNpASH(mD.INoD:GVo^.2+W'MHq u?_$lJpO9Mbn!wlMEzݓv`<NEd 8zܖSѕ5DBZZSBNͿ{H8]O©hK *pq\qcZ4}$v*>DBAj}x"TgNE7h̶*(NE֪rh }HscL "Ecl?rת;Ju.̆חSN]p9u} D)n}52E]tˡimF©l˩So©EgUHe};es>oIKm27#!3lS9͸ͭHLٜ Uuⶨ#!3FZáw7B{.@5ysh'7!׃j a 6h%p*V]6ÑP*Up\} z#TljњXk.S*ۚTldQ69ָb-kk!RYmU Tj^ōӐ#9D`mqp*r$5 @89[]G LJ5ͻ~6p`yp*V ^JB©e6bS V̑P*5Q.Ek/Vs}Ts)ZU$)7SiEկ/@z3E~NEr(V3SiEmdf%NEu]=Z}H8"cVSz@(YIӰ.ϩ&IuVSьz䤞ێSg\%vۑp*(? b;p*-3( &-'q$JMbߚiݶ4 -͎ NZvrNT"TS7kT-uK$۾Xɨ ;KKJy}鲉 qy6vr,rGbf,ɼ?tY+dވG} #3&mO^:- (hg]Eޚ~>7Ʀq>dF=SQӽdf2 NdHYU_$׺J^M"Tl @YG` ::F@:ZTtwEaTk[Hh7Nހk1~C?J-jfʑp*6lڙZF©X#Ym#T=tцfSVeJp* ʠe©Xp©ԎeJ5[B\ޫ b-{ Tj"ʶAJc,uE@jVΔHND@R*sEHNgR!VY_߄f[ cߴ dA2dȫw9HR &Ԯ^$L}o_&xZ1[NE|~ۆ9Gk*9Ck{ȌcϺR$B Y[LJ#|35C>P&c>-chj1I@g g F5j!kopĆ%oOzJ͗HbgJ'21DߩOh¡ ڙ1%&2kX1s)!UP 1s>ӪcV%`\δG[×D6|*zzQ/̥h^x 1Bκ+eCȨG[jg6@2Ć!Gse[&1FIKdՀ<1Yxxbg_)|fu{4(,l:Y%QuKb5 1]z 131PyQRZKØO_E @[ (3)huRiƁSӂE*B@KPf,!%[3Rlj֙Olq )6|mbƚD;8! ֥ZS1Ɠ'vq$c<ɘbǘ@<Ý!$CGᔗu8 uHi (U{pT1[ \:t$9E bwoQSY7߽$Rh>H8}J9RXc;ϑp*͋{!U g#43o*T?\U;c J3޴jFp*U"TE@8]~ r-zs S-k\T930-Je@8f5N@H.'%NEwo T;#T-ݽˀ*6߫@8xd ]xɞ` T1'9SA 9;6 SS#-wK©ta $G~pU>7R$KS@(Mka#o+HJe:TzUf$9 rrS$)Q‚$u\c2U;5HR:zs$^ez;H8s!i2p*oVA©=E[Ri~d뢭--N]AE©O\9Tm8RN68s{L]nw}u}N{ =n< [9; 2!6Ny@(H85g$JKm©64j]0kM7tl5t@89 Jή\]ci<3oH8*hRYbyTh S3F©Y)aj$JkUzT$Ԉ05NE ztT_\/քSimjP*i6i^}p*Sܢ4Eλ"O] Riλ"Gp9w-NMSehθ6NCLo-JE Ȕs SϺT"TM"6;Tj"}(4ZK舄S~.S"GpVuyO 8/R J#{i@8{GBjGӵWs$3|dX};̸ԍ4p*259Bׯ1F`H85GH8%5ƥ8 4GH9bu$y©Nbp*zΨr svolO4#Y72SדH*43@8[Or6@Ȝ5R d~pmg1.KJgp*ZXW|F bJ.Sʺͧ3 5%}©ؚTlMe+!Տeȁp*ͧY5?Hkmti©4BZ6@8kV=*jv@5I{>ZFkVp*q/%)pHٻF&c6Rc=Lc>c_vb؋>;1Z|l6V $;(i)bt%.+Cgtl%mmb=|zz9Evw!]!}>DB>d>zY*3[CꝰbԌ&|F{bh/ Ч|Zn7&~O+|mjyBg:fs6Ѫc>5ec q.1sS][!nRX!M>@%$6bKk$ag1L03dZaLM\շkʑb\-юc>È6cHC撠 ZCRq)L.b\2;I 1.$H7cICBCbc%f_@q@d Q|~L<[s $|<ɩ c- )i $2 ǀT0Sp@r*àHJ呩K#9.INeXyɩhSMr*adTd]5V+BES&In $28T'6Hjwx4S9A$99OTIN7E{:>uTU|ɩ5cBSv_h$~=H]#ɩ\5B=[@SMTqR)7@S[$9a$=iHR*̊J8*TqW 1,TmHR*s5T 9^$r.$gzHr*.HNl ILM 9a $y\(96@r*F3ư-=l4T0$Hi4b 9a $ޗ440SF@r*øHn4 ȁd P~Fvlp%!7xH2e^%lDH(_:򎆞pvhitȡ[:H8n9U"TZVg 2L"J$h_m#TITS|2NDNH(FF©X`M"J$FpH8k'#TiwS2J5Sw@8k. bM e$5UH(|ݶT@*6&J( Fpfp,iT.]I6NԚ(fi H8Ү{ ىȈkoW,NYɘkkP*.W T]\nb3kn>f% "{JeEH8p,RB/S1$gRinr@vp*/r%Tjz6DitaSi_cF2a7C 05P*yQ۽޺Z^UP*0W"T6qK_'FB ǾNSVf  ^?Sֈ PAS9vT0$9^$rrv̸OONH1S9 H22lw ̬ok$3{|[OFn=yX_= SI^M$m>Mm>gk/'_|7\KAIv~Ij}'/$C֓=$S#֓Oʌ֓KZO{$/f=Y@8HxZO@i.q-NnΓpՙ3S'#TAd \5Ft횁p*YN@ivrO7©e9g9 RJ(,'#Ty\G8 y?^rp*mJE&LԪU֫$NEp]f@8n8-'#Tn8L p*4T©43i9 Si, F&1W7!TbKB©{+cRKRF-©©©tnc~ J3~*f__0 hT gQ| rxV$JൔGNEfDp5i@iXkPG!Q޽(~,ȅq5[H(-2[E 6?^r߫YT8.SS՚[mW=neP ma L_:? ܌:FXwH8tz=M%L&yETf@|Ħ g~ $pF@3m=)(Nz9R LJ© ٶi],dp*jsy7[ 0i b}w{rBhzԌp*^ף©XQf*pxG~pX~iB.m&́p*2PE__QMeZlaS-l!i8]Ɵj 4tPKM"4{] 6_SѵS{*ps:];e uSCB$ഽm{pp*24MB9Bf "l"3~5\ .O\-kZSٶZ_%f) S1{]#&N)oVNMY ȕnڍ\`"TE޲=@8M;X1.je;և Mer~4̧f* rka;r@8)hU% Y:9{G K9{G :Lp6=ߑp*sT!mV!Tig©<~j;XAf=VQ%mCo!X"^ !SE"zO^Zkk1u|y'cgc|%Cg#Tbg85TbL}ŸusnJ%J+)QE<:R_k(Xꕕ!ޞ3D1s>c1gct+;RU1u}ᜱb D{I\\b-VR1f.*g]`\Ι+Ƙ2Wi 1uETq ()O}QcL&!fZCXqL9+km۟sV1ցؖ2oY+ƘD~!uעKkk2R֊y4ƀ1J>hMm(l5%Z'~! f Qbt}ggc# 3?-f' 0FOg?Se㮜DY-|ցA#;jo{sykCћof }\OĻ,9>5eSc>ӂ6ec>$uu@gO&lDc\S[b u)mb1s+ c>^^7[ ! l15\< Zq;KM M)Nzab\,mc4go)cD6SwOĘN2eNy2 Od 3!/d,c_X2蒱d1~'c:T"CUٳWuOy_Hr*1uT)gu$2}#ɩL_H8c$9 Rku !/v4ZiINez:FB,uyBJ?ˑp*NNc$ e|YR "cQ$~'8CFBjH9 NP;BFSP**RN/$NU/$JpTYk $2}!p*tU $2|!*6}!T/$N x4'nUpt}3S~8@8-x_64$\Or N,p*|B©hom>p39>H8%=pW}njilx6B©uD57 #T[6sLɔZ<>#TZ9=p*W-~p*me$n.@޺jeE©uU^"Si \v39@©O=c惄S9&?sI SѺpeNaJC$5) TZ?gY9©ȻOZ9­-5G&ƫ剀p*r#o1[R Ӑv~΀p*Wͅ H8yBho[lmn '"Td~Qsej a""Tu#bM'֢ Z]3ݾ#kRtk$5|ep[l^@8Kת삄SVB©Xw ^ $\/ Jkw4T\F©MS~]F©ߥhv3p.=4Zovb/e$.p*KtstޫzZ;a >7vy np*MtS.#Tj]TS8 5&wf#)%N;RnEp*ݑr:]FBkk:]TΥ^[2Nue$;c K$JsNH8Np*ݽd:]FBܶ研 bBJMI#TZ9]FB\2f\%NIK vTtѽ$e$N@8Z.#4,h~iي}H(yUf5Nor6_H8fP*ѝ%N22Nc;us©X w$3p@8ێqk-{&!gu-_`鮁3]n-e2_; - :K 8K \Fnpdr#bYw $oY[ $) $ryU3H 9L I&4N]>\cp*9!N՗չ䝜g& e;Ɯg&iY9L 'BEjW |ժZ S _g Sj7W#4Ei^33NC^e@Q\m3p*rQ]7©^93nVʧs&Nap*m+Hy*rh͝p*݅t8g!B:3ګk:g"TZᜉopDelKs©nZ[R d0+Ǒ©Oƃ3d uSS'a8e1sZ*A9QNpB̜ \,Seh}1c=5ӳB4}fX2'32^YT̞n _USVO%[fE0$(j1+S1Ȱ_ 1J[zpQ&EWEc#xM{ 6s=0F7Ghԕr%Z6d_1ў|F{Fw`,!x+}btKN+bBbғHB`L=F[-l脘zv}jBD .$03ĥT neTbg㏈Чztq"1y&yZ?`ID c>ke&e1$sag&bgl(g)lә\MT1Q1u1vSK~dq68@['13C{!3}Cy7LqKV&Oq36C Ќ&|khf ̅&hcX1ƌ R׳)nbshMl8ZU1&9cZTfsƸ a"140{`FBo Si'4R,=8ٹFBϣs Si>w$#!Uӣw Si( \@ R` bgӻ !Uc]`p*jgv#TͶȫ4N9?K 9Ng8 Lڴ!b>?p*6 q~@881f;ҐPG;S]y "/RՊp*ڷ\zZY6NE\$.-=o rp]Sa!F©~E}6Nr3#!Uֺ:H8ԧ{"Tlog4ӜeTYgؽwHHo韊SLjN' RE7MUzE? RtNru:k!U2STb53Gn 8RAHRgh&Ԁda u/TmZ$rm$7sw i /d$ȩ(u7!Gqg)k͏丶Z W8}3NEOk-rFs2Lu" [u;嬮mpt`R G.y@;H8|H܊sN/Z K8sblKzgV*?[n0 SFC%NeXH8a;T"T @i 7ܮp)l ҝpJ$JyZƍSNC%N n$J=7n t*@89F© ҝpn$J+u@8v#Tp# N9H(SL #?]=p*2an$JOa7JcX< r;a} p*.RF<} ҝpn$n"g Nk*Ԟ @8]\QJe>©F\A ^t~n{B© 2p DE©t?\meWp*64n@Bt;ܢO6NyݶFSيmFuT~>U(ᆻ.v~"4#c4>N;W Jw9@[Ꭲs$պR^rZ*JVqH(yQ8 Jx-vH(P*ŶWp!T[C¨ܺS8M$Hr*k ;X2sp$9/ MR*0|L:,$uCHk[HHRwƍ{4 k~2t7.tN${v/U$;q隭w'ݱ!9FTr?֤pcmepSwl#TnwtBvN2lu7[E©v3N+:ʸ\\p*v\v3NiRNָ;©n[A©vsr}j{k93 Fp@ij7NJؼn$]k7JwQ^$JoH8-+q7JeS79Fiq7NwP*͈`FitG¶2p*ݜA+$!JeDhuɍS2 @8fu;BF񘮻@8)2]wp**:.&cjD©XrY[ :ٴj2$p=f6!Rm}) q$J㥣QT_-v%Jcz0đp*)!T nr֍/E=͢NvK4@8"T۩"T-X Нtmw.c%,ڔ<"T,4:&i4Y 967 S'©XJQYSKS]ηHf|{p3p5s;>@Hmz|{p*F@.]@Xݚ6) nZ~1NN[$tE©X; 2hQt!F&C©XtgFBL|E#Tp*nzވH3L@ɮO_q$QNs$]ks S٪x>2Z}dşs}s.Bfkmog MJbHٮđdel&x*y12']=ˢ#]"TfHќO-+LˢyM8+ 7n4e!GWM䕑BBS^@RE ~8΋9K*,C}y݋뛐/yI12qE̵Êѽhs"F©hɥ9λ_G©XiE5ESњy#!̑#Ie`7TrI*X|}.-/aDily8 Т޷ `[iZN@8M'U!0;p*߭!VܬCZ~@8k?g#D0iT"TMsUB7)[$7l44zjU$og endstream endobj 3318 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 460 >> stream xMKQMroNm"B1Aɦ;RЌę(c"$I B@&Kׅn ] B!n{9ϡ$#ҾyȤL;OT> stream xZs6~_ 5gD:ytҺ.&M熖hSt)n.R Jk_,Xow?>8ׂ&\\\%t,#2")},ne¨&4ɤ%9^u~3΋,׍o=et=nr嚫 ?;׭[z?PEq|Y~L0k1L&F%+XL9By؜c&rJ4P/,6jӋ{TNbD &2^ _5'9eI6eai3S+F 4G8۠eskDrA|}4Y @H'wNt0 hE':9sП8L2<LXDll&+bA'XCA@X1ud2ipHYflTDmt0؉gQ3r̙!'fL1em2{s=XhH0 3,l2%ى!c:erȇ =wQ3-#Uto>bd9$u/k`pOq]T-{̍U}zG)32phƽd'7Hs]1XB3# 4TԱ Qe-O8.' G9\st >H:FxP@k22iqbavdZfL t|Mg(7ݎWœp<Ҥ__m:1$bi-Pnʰdh_xMب̑MaMϳRvM*p3кw֫c iE4@[bcQ5G-Z0ryg@ÀO}/{Y[0X@١tC 0_ #فc8 ؗ@[E@}v$8z<@!$|Z \!uuNkîFwlO ij ~\rÀ^ry~\qnVE6ܔ5Ȯ\ 4M*[n%_f]hw;C`&|8tL%DJ Cix  {2@fnn6HC!^G0 LyY]m۹m{-7xgf<&tLz lN櫪F 3>N&Jm=03X@Q&G!{@/Ht ZE?77cSUpGY4N&fw~vݲZ~WP,@[b*ݥz(}kƣe~ض[&cE]>nrf;`t)x^H3:nowKPH!?B|IG:娆1Tȗ?'ءe6[1BG6ccQnUuVu,Ce&*@7ԽK Ya9Xc+/I4ݟ3F@s͊[AIQt Tƻ|˲#EeX+9ZQt7_b#jd&`eZf>iBkjh{6+pڏ.!ڳ +ӗU[;/(ll sK?KG,a|DR@HnYmb5(}+B\sKm0xɛ6y8r* gHIz]Qt~vGcVļkڡbSN-{ jo9O֦YmQ#LdS" !WM8aerH~x j svV1U3[鰿Wᥑñ3K,`N8.zQ/ţ(?McuxW]yriv\>z͍{ 00gK$h*lygU(bH~dw׮!X5݀=53%dnQ㞒ÙT/ endstream endobj 3330 0 obj << /Length 2553 /Filter /FlateDecode >> stream xYKsܸWTś`R:YJԖc^PV8Br8>4F{\$~|ُ0FRf{Q Jot3bm~"\G(Uq?Vt$|C&w)u Kr=,̛'Qu]ޟ١=~P2ʪcѹ ob.6ܝsH& f-b 'r͋ np cHdd c2fp5EC(bV"އ⌈sU+E(&.'{BD{7*#t *5zusގ˺lvwEPmJ+1WMB҄2h6"YzK)7l^dݨ0rFuҍnL<|cf_C1DϱVˈG-WIYgOۀ"4]F-0DUQ{70=,;?SPl">M$1z mypS5Č$xyU_;UcT>6"ӏn cV)Ǖb\dɫ.s.;l׭-5Ue y`t}g3Y5ntv:h^X˼ d/r_^Ċ)b2A->f)G؍o+5FX[4~X}eF `<4p>0$-7vpJsƩCu:;{+yM煋mVav d8} ˤSL Q|DT"|Ts!x֯+j/{m 6QpmK4JCS}bYu:yE<:z7!A&’?GU,whK#pdV޿ FCS !,A62TeׇP}1C)Ww7'N/oNMFl標t/ޯ(ksGѮCjD$V/˷ZLf 4@^k+)KW`Œ1=L 寕|e~@ e{;F&\> h(u+ RҼ)Hok`pqIkWBPNNcud*5)j]$""h7uZ0Ӎf s%@\Ijci?ڇX b1 P)Ƞ|Iάgl1]y%cs?` 9#\:>gˠf:A=-3s`OPXe% OUS5cu99T;%b'r|] E~Y 5V2?pr8o)00z,P4*Cc1jpj!3 wRElkǫԍI_Dz*oco쒥-Ls $r C àʎ5p}QOumE)̡>@0hPU z͹Rh$RBa#0nD)h*3]xX&G2K6֚ wܝ kk9pI\> T+{?+" °ʏG,#`)'JOۛ+v?\ŔаD H /VɒoRXSqˮZC{1l̐s{9>?5Xr|u?ƄpʥD'J-93e#)bt QrAQJAnI%Q HԼY1(L#,.ڲ+a8}nmywlwp?Db),6Ŀ2Od?ņ džG16̀ГlH~#Jb«r a:GduiK&Kكhq#[Wpx] tO&/ju0  Řf{G(e=v <:$EBXJrpL?]<֣6uJ`C! 3 r`S`h_hAL Ys >Sʶs:o F躬^`ARlԵ>@& w'sM_<,ɳcW~bS,\,3CSs1oXs[_4=߻ ǟ. ~Ƈg * endstream endobj 3338 0 obj << /Length 2291 /Filter /FlateDecode >> stream xYKsܸWMZ㠃+N6^KTvjҰC$NJӍzT吋 t_cn~~'™2*҆ff#㜈uWc5lւe_Bpq-xVMX.ۺmg2k5)Eݷϛ Uq6uT4*Gw[ =Aڟ:8{5V 7 [.0.xS4ak.|m$h5P5x(;ڻ3;:QX$†q1wqGmOVÿ?98u!WI"e/ q2$q0d"ؒ-B&Tk# ?Ő%~5nJeNpIa.;Swh>SE;?a.6!x<nøwsPtt\gw]_ҁgD JȥP: }3&􂢘0DQ1}zS%b@q\-:Fp[3eһ68?XљT0Z&Mm͒ >6rٛo/0!~Cr1FK|.pmܒDܽ$ J%K<u)S0?(k_skyfb v۲ Cmd&& Xۦ.|5x9&n}jkX'"Pԭ/0 w9V8usm$,ޗwm ;c(BaX(^T΃#fnQ@oڛO9WFd"1=N0'4iNДxV0癚3.Iʱ 'VO%josrItX$XÕhcs|d,FpxXf5򄱕M3=X帑3j씱%J i nL9ሷc5J2nIG$TH :I 2IX$ 4Hz-%x60ًEw6XnRRUntLcښ 6޴Q>ިR5 NU.RiдarX<7)$EyZ`8>}U[[az"`ԕTiϮ"Uڽrq5lp?^_2ueNIeqtr? |̎YiPn:b}0* xcŒlP-AHu{U>V>H ʮ #ߧCP'<(S]̋ڹpP$)vtm)ElAv*R ~КNr%'!fO|tȒl "NQd`̼ Q}3bϡɟ|@C2Fx2гS=z7@, G,aoy]ǗC"8.!x#ΔU\ pqr ,X?,z$PUs׏--.aλ2$(ӷ!f3*Qr1rhr(BiQ=c'NPog{U]o 98tU{-+IpϾ-2l 2`{dǻm1`纲zz?[@pbdGFOzj~ <Hp A0X8>g@5y6\|SpIJ.|ׄSD>=)~>KV,T_$e%N^_\jw_O_O2R|}#%LB>ԌxT&:y͢-b)T/# bDϜ0PJRۛ/gJW,="fǟt5mpv)O!:z> ;g> vw_Ikʡk1~h}Ҏy Ac78# o+X}p"`l6w&Bp XS`A;F?C KU ᕫ ̢˜h9Vƨ@y;;Fl0`. c\]ho}5 `ӸQt0|8AH=]f.t5f>M6qp!KK\}|*i U/P@R8~f endstream endobj 3348 0 obj << /Length 3022 /Filter /FlateDecode >> stream xڽkoܸ fy|dM E9ー+i%W&ڥc_q?xypo_k&ȳ3V0e.7K]go_߽ 7\? cUmF񥤗Z;LpP bElqH@@Q,ﵞkim$=uy[8vPЪ"]V6rGgvˮC /iZ2)%'`b"E0Lq9peI?peJqSIfD hPMʶhs.pOF'֮5W y <{zڶ 2q7B#LKicniWu<6⏄}>@I)Bxg?$ejOU}]nH0܁]겪/(nU]Tס|ۺjm:2n0 Ljp7X>2rb spQx״7l"yMimIc9Y-jFFoAP-=Yj=o=mh#i)<4netF]3Ś2W>Nlj_ hz/zЃ,bĄ8Ycu1*U噰VfWNށƋ y\U77eG]*-sȃZKkUϛ&AIOf_FsJ1-Y>a-گE$]XbJ)xZZd-*A@zLNz5Zö8QPQbhXn3kt_UH FBi J*ITL jB]Yn>+[//ʚ;,*%C5,sUA- O⺭kLL7~~lc4ꊚ=x99I4<]OfD " bؤ Im|߁\b-GU$Foo>OVS9uR;@'gμ*6A $ SrNwG1p6X9X̺F;B8~Y=$ S$=!'#^B$+CDn[)+k0ʓ{gkɾ// ٲQf}y꟟޼H{22|lBYlBnJJ•sÔM^bb_DrU<0ֵr&DH= ܩ[W5TdG i(RLʪ޼~W_,̯ID> 2JT6п5h0je :<_G,RPbkCӲ iWg֨#q_tac?x\?^< =?_<fg̍Pia-w86 0yH߾;퇋sZe2 ʁ H &-~d*27,c#ގǐ`-gAU8,r;j0$r)LߒD6QߏHW}d_6Wׇf;G=uA-~cP~aܒUM2)*5e%cͲ|WM(biKtw豦[n(bߎ]s.ÐvΏ!d`\w?#l4IDIgqXĝ|MC<3Muf\WGVj8}iA4߂HA8F͋=)0@y rm%]AG=wgI$@LE*Or΄%cr2.əG36dAjW8CL°A:@yj$| ?ȅ2RŮkj((v >#(=)b# u d}b4ڼ[mtZ=_g0q}_EUs-J`n}C'G6gfR?W endstream endobj 3355 0 obj << /Length 1337 /Filter /FlateDecode >> stream xř]oH+3ֆ|lnZVp4ʿ^0ʒfyy930#BXHKJ:}}0bk=U-cKwyCPa2utfĵAZZ!8eZW*zu弻Շ߫I$;)G»O݋ %G#.ދPa:- ̅ˀ{}aNA-A@ ~ Z_g_ QiIUvougO E=l.n@)9 nMʭ b>N@?eɝtyb)NÓ0=?A߰s9iGְN%g ɂ4007ӝvU~+;tyrZqG&s\#2{LYs9's5#{G:MxQy!&I e MܧchMTY8}iJeEtR/'vhS } `w9x,K?/C6},-?cI06fyșn="l'ij٤lCLF0~H]~ut~o`;Nb.JL6l<*m43FygmU{Nvpv(0Dc#g&>ٌ(]6K,s' iL1j_j^;lT2 =Cܝ⦣SdzυÙI^%Ea)@\^';nh)Aԛh} Im XZdpe9`x|ٸ6H~eGIu[jz;4eoM!S;,/:%m3Q4Gc?e}2)#o<OhiiJ2$.`1c;L?*SXbg׭G纊|)dfY[ט|M!=nX%Eiu ٸ:6J =48p9=ʲA.᎒Dl̏â]&:.7m/>()'t1@%-4L!%~G咍d"9v[JG a.b!%¥S),",h[˻4$0nS`$J R/!1Ty ߐtz^ݨIۚ .-<`JʪAk:Tf83e]ss̩t^:Ca +mcfRvnVm4X72S?YE9cyV5AQr,@) 4] endstream endobj 3319 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/mtn1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3358 0 R /BBox [0 0 346 323] /Resources << /ProcSet [ /PDF ] /ExtGState << /R7 3359 0 R >>>> /Length 22112 /Filter /FlateDecode >> stream xK$ҝׯQTwbdC&&;I3R M_;Z#kv6pG#}[}|??ׯڿ;?;Ur>y)ΟϋroKO2,YU If(G~ R &/9%"2++e[uMm ?OhְN9terLC>ʐVSC]#P_* 85>Q^ >^<}*2<~2s] exΟU!1Ý;\mJ9ᝯ@}i䟿G^Quz>C]]_k{B3J.,BӐ0[1=r-J 8H>(4ImV˯wwLhA\cu`yINfC#,6?xܒjyhw^q4$ Ty}^h8&cP;G-4޼A3fYGra*ˇޖ呯Ycߨel'}0CZc߅<{^ ކiJ5ɘ؜>,6qJ"cc`vE0׆Z4/[[qC.~A@=i>=?A,tޠ/h#GYP2v}fC Hhz 1>CԪQLR E 6u~ij0ɰ\}>})#T&ӃK`j1ӈ:9=BGFBKqzo:Q2q"<#=QM`:U0ZOYq}+y{ѲiJKu`{uBDY+Fh9$62v)mj#Pk:_1þZ޷M$rR~b}Mt W7 Msx Fs S#8ɅVg/7z3ʹ,u\g)В̀H<:Y3xjSx HR!^O<ϹjLhF=e('\sLY"kjxۮauk_ξ= `)xQ1y8?ЇG>RP:HΓ<6*e(j/}*ĩf[a}CZݒ`#d~SeEFsHI2fdΨL AwS1ݸ1Pl]!_ھ>Ibx؎AuO!gI $1ݣ_5y//؝w_׺/K6Jӧ%pi/e;GneI[sCw.A>'mP" cGݰF(Qb ~UIj<LZy* [2ms2,Βk%1QHw$'.pj 8q-2`dGhOeB/%{نH^)ĞN^)>ϯ-,$]69z(T_V]2]ðj|*U|.[צK>Mc+fh䖧°3InCC{IWKdw4~KnOVƵt]iF>IǹrlL4>mPrQ(ŗ<$͒Ѻ4hl&vBSW ~ޒ=[]3=蛽 B@]2-iv{^^^uy-f _4>s+s }׬J7;_[|o>ڱ4N7י[mK0A{7Z:?e){iS6V?u$\fɰv3.,?\ >b=c4N6?Ƨv0lZiݯ4Si,m,}|2 X2F0 c!{K)bϫR2-s~\5ޞ ^{F\'?]Z ppV`Q +}W{`HBBu~)fΆo&p)IT.4..%߾Ybn;e\зz~-\41*XW"Kska :4d2wjpOR#9s'6& Nn@} ֩5m"UHjf/e2f2'l^n9ޓy'v m -ѽ?iʄz*]LfOav^n>^sIds+Cw4̑ɲC؎,^dpL%?{2}wsS=s&:D`N?[A5"4ϋ(;4d|1ПM& 2e|H>7o|Qi SfqdM2kdm܁ZF37\@1Ć'qZĞ6M{W2žbayL,6nbh;yogHӠ ҍ'3GեBv `|ii9뽺-6zuz=,aݸN^2 PY>TX7.eI:5ys^C#D~>乻ĩL{b,N1 Ŷ^l<ֹ+VuM!m?4>/US4w1OLcrQ,w4v~8"'xWaʼ^^t!XDe処5ͫ|rX^W<-d_J {pQ2UH;e,u6Vg{U%X8Ɣ^Mb+v4eUF%ͷBhnL ۾}X^pp2q2GBW 9W7pN B#ղ|D~!r*%e|[l,@Q3ו߱^á/:_/L^cWVTъOU&fXjVHD};pB~%=||<|8}X9emΉ9r]!O_paK8.;}6-%#z'ŶAw @b+$LbqL& |Un5uE1pŲlIw Љe!C?bbꊥ<ń @ -a)`bIV8~&V5Gó@%NWGh(o!ze&jTkn}0oO )Y!8m|[ΠK8 k\;y~70e;oqݒ<^բ=iVpF۸3W.^ʠewT zpش>yt֦<1x:CY {.1jI'cvp/6V,ΒqV\ɛ<㦒z&kg7)ɺ moν)Х)N&PKooA]C>對9d~TNrw/Ra)C>/1RF:r<N9/Gi/C)Ņy ¶[֥=^9uۊZN9ܖ<9Ϭq匞ȋ$ΥsXg]~%?e( c_g;JɼW"^r֕(awq-vWlIƂHk }4$Iߛqigu7H2[Sfu(Q|6Y-Pj7'yNr6|}W0r}?K:g>gPryT D͒y#Y0dyR]`a~sn5bf?::qmC=hi¦+!Ԉ^a6j0ˣC4Wr$?awmS9x(Dՠ?)QMn=N ̰I;Iy^WIFҤ% dO K:i%v+w D/\`i?Ӗ"e!(Zܗ>NǷB} ר48-QzMD%M kWC|%Qn2KN.;p:#'{]tp+`x1.2%ɜC-D37i[bĸ%U$oB+(?H`ui%}D!Z f=I[RDʖ46ȺD⎌}sc˝.eԓzv=R Xܼ U? $IH[`8|HvXH;d=[5tmږ"e!UcH;Z1f=Ak)ᠯLvxv*=A-+?9$I;)h):]G7;ba[zD{Z`=].l{ҶD9󎄱sN̂oShZ&]_JPih =-a-v =6;MH;8Dϰ|žA"0vQd诎Tc&t $l3jC=Յd5vI;'=iZhO"ȼ9!0#Alɼ'3&Jc(Fscd[<2mgx[ӷIg7UFF]li"a&jEM3K#8D;.0q"혩{$pN,s[{="]d<"]j'H1TcK 3PlD_;D,fd频ZHМ  {HDmF'mF 'i-+n)`<&AΌi[M.Qa|Ka<zF#HuGPdf%z1u' *^cIbԲPQg@&煇8Tx`y% =Hf@QԗXVj224MrVVOK<"ǹ#ZIp<"m$l =X "u!hcŹS&u]^C8O^ (ӰQϼ#CD,RD[ܑdڏ`vh/i %Dx\8c..)"aK= AC-5isZƞ-Q~RrCikٓ%jcIG%j8Jړ"XͿ'#B2q#qAϑ(ezLk1) %gAvn%Z:&fX/-&win@ G?$ھKC՞ G4Q@n'P`+H{i A]h}KyDqGF#/mp awvF uI;t:H;n!*%$l,` '$(ڈ$DGqP -J>ptH#MHْC$nyc&0An VO`zN9LSk78;j΁=.`iWŕH{ ]9/u#hGHiy!h Zadm%41p~X >;FB47KF,5!i!,]LBbzDuL(]"]0@Q;΅iY`,O- a" %I.>)*ҶDμ%WsA2wm6]|\DB-Q~p)GHّS)i$ ڏ,֮z,jvXI2-KC$HvX@WtCh:D#UF'U\" 5vH;otu x?HQv$!$- "iG.s' HN^i?ӖD0:wOɰ)"aK^# `b? z䐲d:5D!z ٧$4 śp2! IfzCPY%AH.Lz]\ jB9 !7]"]{R 7.x Qsד%O[Fw!ctN$#H.8Q )sݓ"p<#~{cV87 tox <C2PCHޒ vI;/vHi .Mq?K];"Kg h U[.ܱmGtHI 9Do(R]WF #j?p ="]9-1*C+k^9I2=m0C+^ A}EUFRNDrC6|ޓWOB[Y @Ф&t87K\;%@ʖ(?Q=Gkn;^*]8tZAzD%Ehfڍٓ[rJ %j-0vv8Q$'5Mq/ ͯI&i-`X=V7#z 0&d#E$nI9D϶#ZE3ziH;\]#Z 5q%UӎȪ#g.vغ@npF85-@Gй-dxQ;gLڂa%#s0vOr^3%jϱ&fUcKԢzDC-yH;-xA >F_@s 3w{$- "yGdx3/#GHCNsp!MmÚ#ʖK .GHiǖ=(@kD>哔ׇ ZrGk @K3u!8s$Q끛 KԚzDa<"1/mN#bDzD#+ m9 jY6q8JFPvajt9iDOth>8@ݍq꺧׃>xYynMs}G4|4a0:]:04Wo^ӕ8I8imْqnowMKq?\4kpޠKiqr ߿tKiDrffMS~L~+7 6iC_Ҭ۶ti?4>w{GpRGKq+2zL?~Z7M;4ݝMg'BprM7tpӜ4ݝM4,,1F2^:mP%}GSs9?zl7Onl֮V?8Q])ْf?G?]Ҳ6;4)';B[I'5iF[k 2^Iy%Z`ۗtҒwi4>3ْnSZiɻtҔzNk~I)M?,iǘh~t,4a3nPgn-}o ei,^s9PF>v`::եuyJ'&d3Ha3`M{<i,r9.]nae+Iہ82?>Y:=gf@  \$ځ4:6X| P(?笠W4 =w`\&+By:Z(e_ p- Hqy H(I&}25?Wy.䜉qm#i!Z=ʖ3WH#&_*B>jdnOMjGk% i 19eCyiնpA#LBXHZɹIKJ+3f.jnᛤ,$%q!e!r5WOT_XW 19yGZXHZH]};bD-ψAhWW<=FDl$?y$.,-DvE ?=mzb&]}F?c#L:$-dhE#I[Rf}$ 19eKBaoϭe%Q;WbEBBΉi~HZYN؈hSS,dną,ri[2WFB9i3l^i"#u!LlDYX19(y1%m!Ll)ȱY%. dfNzj-WG&gX6?$HZ"z I^lP-i fRBB96/DBB9m m\ˣWOl+Y9gb1ޑ6H\,ǮK1r$,rl+ 6y-䚉yI"j#Iky)M=5O:bm.CL[=rDE19(+,$-.䜈:c9_؞6Ɏr^ i fbE9YdS9ZD9bEBBΡv S;_{$k%b7r˰ݷj.IX,Y#L"'.rlk"Gc.K{d2p,Эh6p31"Rȹ,rE8 r^Ft1_H4pGBBΙEN^hed#",r4y< #JINwqm0^UZ#I!f~hVbAfVbX$-,dcGD9mcscdzD9*ɵȡ=[QΧvxg",6"e!L>,r";9,r*IYUY'R]^s]r^@5O$1H[5 mu3yud># GD3Y|(e$18@tHf)sV}(Di\I씭;yuĬ|xb3"Pڹid>6r^F|aEHO%6yuW%:bsQuͅ?k伌\vn/$izw.y i~mT?9o?~= *]98.'}~TCđ%ܧq;1|NjV#mh{#. (aҖ40٧"RDϴJfh0Rb&uK-I"a&9Dr"Dq&›- "eG4D~!KF#,C!]IC>-dKd%Öa/qbk(0O>0ֳDwX,..|' *Jyl ]CcW7A}i_%Ud#@+K;WGEH;W}Wsׄ9GDg_&mK F#j?p{=RH$ac,!Ȑ&!"Ďم%!ȡFOi4Cڏ%jvGH<&-I"aKvDV\q}G-Q~`U! 2˱ZZ˛Dt)Zɛ%`a[Ŋ@64]jK@ƐFO^=QKuKE =+ыkK&'ԥ&_!ZšKCu@D9DV \"zD8pz]ZZ}~ԠVjN(RwDx $lC"RD֓%lXpΆI[>k5'M<~H{i j Gطq }b~ѿMMNK>+fG|l֒I=pi * %.QiV%C tiT xV$䅄G%N{L`i;"g\"Į'ǖi2dG\Z \H;MtCRZjY+PD<"<v oD'Х&̥]2:O CܙYpRV@\' [Ii[EB8#. H)["49*Jt$#l:D 'ХKDa<" ]ZL%Um#>TO"kG4`ii tiaSN/>sVjuڏ.Ia7 j?_L^kt;+I@–pȃ}.#-y!sNb"$ז(?0dyGD9ĬNcF R:ylNu7]щ =ufP."aK= [K]D,B..)Dv1aKY'L&#z \5D?5dÌDup!bi[ #vD1?cj?z$w4 (?p?{B]vD~ [N8v FHWvD`@K #^-"m!eGtd(?p-;UӀAWq% %Og&AI"ǎ 'eKbH=If$R6F..x.P&ϕM%]G' Dڏ%GH]Z00޹-"qKL1̤- A.i"i!@DH`l邻"RDjZu=cSGt' @MYLk*~q.cw2 KZS$n -H;Ğ5VKDcNHUy0huvu_ptB\tGeuQ{"DWB#Q$\A]jRi8dax\"]p:(ibAb{KNYO7ZF 6y}? zuDa@E9G++ "i!w5͜."uK3-Q~`J] yKC\<-Q~`zwDViQ'mKC)19 .Q;tD \0"eG>H[i!aGUxC8n=ALvI~g7򈖲 CH^HtD)m!h]"{SH ȼ!tK ccEѪ%Y$mt0h) <4) RE$0GBqa%b<2 ,ҶDSғ۰r!4K NYOH9f@9r:')HF#̐I[r@܇WQ~^yDa:B]PK=\[Bʎh \ g#xD9<ʖ(?0.=9vD@V"|,fcSIЫ'| spx iKH*MRGD#r:7'p<H9䅠iji B9,^ԓDPc EKk@ YnN׺D!jc\H!@ Y+b/ "!jG]#p8AF+wo9(2q+i\2QMxJ.km!bI;b3FET]^-9D$lJN"yKf'(vշ-vE=AK˭!j-c!Sy3a(W ˖H;MIGYxDY3|G/h\BXcIa;jd80.W2:Aخz&9].L4Maļ r 0g{=d@'zvTR(0P *uE/4];9\r7kk܁c5pefM>\=pni&n~p9 uU/ NIpm(u:;'\k=P P\q;ul@je1:=>?1~q`(t1Ffe0+Z yJ7[<|owBAKt8JPfw@l;2:3{\e= vPqΠnpot w: P(P87v 3^VBfPv9mq[.ȸ`3j>4u3.iH{8/l6`馹X]:iݍ-}5͗LuJg?cjKs{-<6]pr.~{j>4wi L)}]]FϸKyZ<]]i~.ttwyqU1m]:M[YKtO3?Msv0_PmJ~Qוꏤ/F_|q)wZQ8JZ:i. bҸwMW۔.Sǘ>|`L8 {j۾uy.bSnˋˀSic>=~]taLgcn֥|d:tMa^S_lSӔ>N."ړK|=٥Ø焊n]:i+RiҐS:L)]\ Ů]~6u8kZj/ݸwѾM͢pBpɘX>G bzH~\ubaSefFb^.2n8< 5vjvKvKuFK0s|?|Gc]4^V:⭮ޫ;?a:oI뗩ti!ܲv~R|@]g&a!k?Tu##_~pNT~g,\x3fM{۾bCi!tJ[䅴\3."ۖ#Q 琴s&y9tmd_FF+u)o< zuDF_i=r٫^[RrNzr윜E65c\ ,$.r"'rqkMq!y!m!kv"&nI]5ї=zla: z2t>˪ϾFBB\}^7ȹL]avH^H]"',rы,raCl-n@HZHY9t,d9 H9$.,-IY䔼EvqaGH^H]"-rloA-><۽'R)`'Mݖ"q!X\3Y f"4RGh/髑:bNr41 NEYT"fGbEN[XYv,1ADB96Yur.kvD9ADB96! eW-IZDdk&6 YEyV)-I YX G&"q!e!k&"&" Ma-\$/dy*,OY{Qܶ 6 Ʉ#NJ~g>4͗Y#6˸GtXC'q6Z0*rͤ.O.;2?epN,RrD~_/'~nmaU]4vS6r#,EZxFLµEȱ99FV9D5Y:9璷Sq/;gD%zwjn ti$EN YU5sscd{<2 ΅tʰ QfVi#aBq>)KGΙC':RҦR )Si\S9P}fŽnl;s[;&x=) :8,--l>s&cFʖ,;r !ec k"<v@'MIDC]ȵ#6QN-P dPآxXHZJ܄4sO^=QyWGGuaW2P)ڰxZGPvO/pxɛd7 VTk:-y肻PZ/Ӳ.hDurWj1EvrTO;nQ\\w/v%fwnVǎ%ɋo~O[AџzB96v')/5_w)|w#j 9AآxhO lEוV3P$SԖ7᭩v].ZKvyCkG(_!kWَ)I杶{oemtnG G$t}>_t1pGPkeIt> d'wr.ȱ ٞm^Ԏ]͋o^,WVwjzlWh缜n\SvO;/ Vib/8}}Kϻu# $P[wnm#ucE`( ȺY_VA v"oUE'X i` #(1 M,7X FxxaQ2MB"NX Ʃna >1:, ۘCa` #x!K,\ XG0 bex0\aTSPF3a0Ȑ7܇'@@BfxB1$6b `CV!,CY,(CxQ dQbS1`Ÿb((ŸSOѪ, c\Y.ʲ`e1E)c0mXb#,㖩+ڙŠbitR63oӎ,Y Kz`j1uwaJт=2c2^io7)kQҫ i!*6҂_2d2S ~i92ӂz2ЦeN ;)\,ŽvQ ʠS-N,ZtYjbM--#ZD\ƭ4,.Z\_̘C4f.2J'+ޝX DO)b\hS]DO)޵Jq7]8rق3x9E.;~pG-4qp$L(?yVKHyQĎfFl1*&<Ǵ,KUATo$. { U_fN훟6Kz} "9EY!p6dj3Ia'p^828I=8~Qkor#Ŵ]A3}ـA#Fܨ!(j[[ĉ;H#Vh>>c/XnoE%eMu΀$XMB'D]=#Gu\&K5?H0I̿[6Mr^2[хUǕw.a} #@ YNo$wr4^Q=w\4,DK]ȵ%X;sz޵;j'ſ߃LXw?-W]_PrO-Wz=BV?( O}dYK;ztLz?(} endstream endobj 3362 0 obj << /Length 415 /Filter /FlateDecode >> stream xuMo0>:{3m8J(4vx1)qed)g^ . W#!\}u@*YZrϸg,ɞi,NkA{JY"ۖgIw _~|xfRT.^LIMߜN1_ܯcXr]r=eOS<; mǰ2< vwݟr$Vp]A7)/_(.zֆ7%@miE!#sh o=F7lꑭ6XvǚzS1ܙRd!D朢{Mqy;MR /*\ccXgc^-aaϰR P i?al).s sv ӸCuSRq!SZ.JBpa3c endstream endobj 3335 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/mtn2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3364 0 R /BBox [0 0 338 318] /Resources << /ProcSet [ /PDF ] /ExtGState << /R7 3365 0 R >>>> /Length 25168 /Filter /FlateDecode >> stream x$7zYxAw| vFn|%EEdVmcS DWW_)+_9bFhS5~_??/?ߗϋ>+ֿZM;1WBc(q*9؞.M%(TVQ_1ȭT~r~O c,5O.']Q"=Jz=_=3\:Sϕ/o>.^O[q_h1ޥCR#dkIGd<^:Jw`yD>B;%MyD:52Z6 dǕߚwl'YE^^3:H= vBT Y#qGpBCs "3ԝ>"nϿ<נRj 4Y*~17F^?Or_ΕM}nY˒HBWe *H\SI%誛kT]?q|[j,_Mc 9\Iv~\y}n~N_قEBZHwfLY|D4NdҋnH@rpXę@8 cVΥ_ocNkGu8gg6?N"WH5HJO%SdDdjXFdGE<&b4R]}K(_KX%K\ubM'> 'v%n m~VcYSmKk10'ID해}1@}͘tsU|%?= y}\0>R*ؿoGsHQאeL3?]zz @JWaP]^ˏ@Mh* fLT 5^ˊt塥:-/+EUĈRŘ{1z֔ (>jGt =RF8L>PP:^Ru t#>}>nN-RzDڔ,5ki#l"TN垰5D;^ Guj>5LWݰ ]<إ0ޥ:w>b~γZb; hU@fϋ9&2BGpЌ겾ʃjI)T7/N2x )ɲ8Kmc@J}o€.KDZx^UZbs` TabԌⲎX?.Jwa-B̉=UBU=?[ \냽d^` t{5*B͊:Uu-3mӽM1.|+UWZ*ߔȜb5 ~orSa$o;k sҬ' =kx|-a?#??ג0sv|n'`g7̋P-kp%b8n'ЌyyuݡZSձ^ W'jJ& }S踰C\YS2̵H%l]qXnU.h8`~9Ŷ_8k=|2MX\bFd @4@o(rD,r7Pw @GWs `f}#塥*KRbmnVk^/U-T̲7>cǟUyÿ'9A5W|_{x4KW'6P7p]K?Y;Zͼ8x˜~C_$z gLX*T'R>T^r<."*Niu!e} F$K 9ԧoSOZ^/= %/uMa|(y}E_ HQ 0e>,>C %T^rB45vm~(+CU-K-Oʜ֗_4]շL>UK=m̏lv͏S>Ֆ9+du_݊.zehُQ"eWpZ^>Bya#~įoeHtY{, C~EwٗIOW! >\DAkKߞ캎K.>a:{j_{k)⧭T}aܦo;:(׎X ܼ:qq%嗢f}^_?Ny;gFּ[gW_w_$!y~-JouGo,Y%?Lh)YKC1̿,J.yt)q/#ϕ}VQR~i_߾ϯP\~<~}\(r׹+uY>ĺ2iLNm>6>b-omg&ϫ% \|W("*sį@Nq_,b ff||Cmd,^hT4k _6Rq䀰BUg`|oۥ}üad2ySZҰi5^;e]&Ǚoao$#2dayeY>8Lod7u$MXdA^Ԓ>΢ Z·}tL_d9neX\"V#W^V_4,w2ѷgF漓Jcc\+aہs|\d.K]-tLmotM޿~{m~?&۶=Xo:Bf"s wLVC]"s~?[!mG'9 E=Iez{9gPG z9.6XwLv掷cHeuݷ9)O 1%˷Lv!?G_ĸqoqޟ:Mr6OeɋV9^NϬq/vX_y93bKN vob~N9uP8C|)t)z&񡧶o(yp]_ 9bM.<5i>o͂UVV7/y_Y&5hsKx[jQذm^:<ȁv+(p{Zq~/do7]u22=|6Xھi(j'#- lx̽8|p#@$ߥ0p0chvfi mս@s ~ !m tU1q[:Mk{m\%tǾ"|d_@?oEsg4R \,-7mh9 k-ۑg7`E7Xuj'6J$<$Mr*yxpVqHnrzGy_,hwbࠞ"z w1&$O&.ڊ(mx.lb<ů!eyb<=ϴ/%c9R}iiR&Cy0|+UOm=띅Y~cZmG|>PZ6}g׎K^V-!%FԝIn$"Y u@k`BzS[tʡi$|D2kiI-Vu䉢'T8Gd%CQɴrnpd#4}!/ :g)=l."=Gߛk,~8֣|;+1ԗς`(^0Rb5?/Nx[53vU(n<"ibͧN]mٍ=~.2bkՏr_>y1z|n#0?j/,o0qˁ}_#.AYN _|% |.1 M@6z|^)xofY,UCr͛7?(KoׯNޓF%=V5ɼCԕ$-szKJOU Wv\Of?;~N:EگA-\=^5[4~jϮ$1/y6(ϯw+c/Q1JU/X+:5q&&skQcieRv  &ďƥE2ѣ z^&a 9b1nm۔yGM0.bTX7HӃF*5{WUlk08ñm|N"d174gj7;f =SA@4 OuMr3 /GLZr3 X9 z\%4j VNi@51ɕj$VϬ4@p`W %X"J$:VMcueQu2cGȩRu#vx3;0/\Wy%uȕ#+# 3_q6@g-a-F^;`lϴ`Tm?`kс=Z_XڣkL hic֘l@i0D>cڇ9yӯҍ4,X_3TlI/fPl>X骬#t^i 5݂ 尐`0{w 2 H @;B4~{$b\[F X+[_Rr*þ CtUch ;WqD2v`Ar`fʀ flM~rЂ.`M~oQ#_L~oQ{l hAj(zo ZY@4[PZO[Yp :8Z{ޅ5.fN ~с BzeZɁ -4Q&"[;uTqp_:N̋~p)Wρo59җ܂{Af^WH>`b뵜#*hxd ,,T=!ƒp-`i~VڀZLeNπ-,Ԃ (osŀ`}dc@v f,G1v\8#v23>9K]^Lz},'FO plkKf^lt·#iZ>&I=.&iX]З("5iK+?yR&tÿMt-M=-?r 鸧ѩF@bZIQ>4'+"iÏW~dM:iZ}&8M%{ {:_KG*,}4 .횫mOyJ;0gKL&4<|ʎsi\:eO;LmuKMlkT+?LcĤW~da&lo5-kzuK-dg 4-;FhzGְM:&WI=*"uYifze$N6h{#XX4]鸧ѿd,qWKdY1tAWNѿ4C{/M=%˹=4ڏLiMs^?ƿ边gsiKP^ߤK2k4_-i.۳p鸧6KW^=zc3i(?X3Ze/&LurU 2T{Z&!ͥФH~Rs鱧Noե wtviVtLCwV]4tCɟ8gM=u4ҋK7.,ѥKC.{<'xPp}-IʤZBtu}Re#\z_ a5yUu 0I2iDz瞆i,$X4kz,-s!PMz78_eܐ$n[Z<35q_s~Kڅ4N Mؤ*Xm&M3Xkzm(s_IcCQ4]z lK~4 Rť**V:&[YyҫM47(C1y?γ5]Sݥ;lh/%rЩy>-ͥ3P7×]S~ѫ䴶HW#c#-_^qf\:4ϳ{ 9ǶI!~fDz:artO˶a#-IMV"6b4\d &mSMl^fl*?1obӲ튣JM_ };MlҰБmf*!m`iE*..}b$i4z^S^6Iy1W `Y>-K}zH*/clŷ\qҴ|Ś$ttOKaltIiIzLÍMXi֠rxs@%bub4,nE~"_L^'tŒ]9K/y;XU>b4}0QqgZ䣗IZNh=~܉^ `+ϳҦ-?o_0=;d[1 iu^TDVn(XBwֶ']΋޼CK;*udCKN-);_+K pw0tƤ 7.R HOM*ۉ @K \3`U6m(".ƪnL7P{[5285TK-f҂WZ@;{ VqV!07oaX "JVWӹ| .|-\DnD=AF=71~hn@ VWf y ︋ `ZEnAYƻORPV>s R)=J04+YB#\ gu @p>nNU/4lN+7֘H%{7]9x+F zO]|z `2-X5ǫi3k25GCM̋&79ʃ:gU6%? bo_Q| mf?Hj@_Mu=<緓_^ΦЂz=<5z, - k7`d[4eH-]kv=| `zK $D.f1y̮<*D;8@cl" 8J蕂B||-)lf(`s_@oCo_Ra3⚏}%wDG"US;5>knI"tKr<)L \q7[bH *g>0cKhܒFvsQpr^诒pAcMq#*y>Gzww'XpEL`HZ%cF${;6V.."pu !m #;3%wz ң^X[#?y?ϸ9UZ->B#|ܼG[&y $nfq>4L8dbaqKI{$HA= ׷0%>~}x"`qKAI>NH韓Y%$=QU|L}aKJO Tn շx/HʙzFy92R<~9/e [p[2=`[wa"qD%'¥)1n \*arCJs>%# F$D koJQ]PSa ¯ i l-w fdzIߑBpuD%'"9ojCf AD%GRBɰ8IP kuًԃ^ piRԃPrΏՌ)-t6 # =@v㎔^) D# l 'rCI@; OJp"w$o]nk4JP ".auGAT|$l Q3Jzy$ *=p˳l ?Ԥ.`wsKؤ`KhD3 %cWt!dlɔ Rr Q>$RսPsQI$EG}3b zѯS,Y Q/T$$ŃdHA|"=xGA(7)RF>JF~It1EAA({wd:RJnD%GwaP6))a-cf#*=º>c*co+J%D 3-LQdxnI>J{ nI:%c[Q i l.H?%cU}*lV^LOʩ$D%G2<*y>|o+BbV8+Q9ݦg2$j&H:pظPrM#iɰ+ %$ ƃR2<[RI >z`g& R_l% ҷݓJ,\x%!|*|%ӑTN$ ;2vz.sGA(;8Y:|/ƯgD3Ԟ5x@ޒ|V<6:V3 ITrdtV*F$hGvŠvrpHpCRJdxATx$ AZI>`ktOJFEF/B zY 0% (;R *?α$*y>zȤ [RI ԃL|EJ)(? 3 }+>\NOԲVR $dSk :Z5 uh% *'?IW jJAAX8/!#suG'J(Lwd$#iax|w4˷ N΋*RLyXJ'Ta"}tz~ސRB5<\J^EA'-hwdxUr$ [pw$x7Dû6/%)9AFtfhH-hg^PdzB6$ՌH7Dg]|V.2!v0sGzH=p|zOAih@tzSHRDI9kg :($Tu^G|<#*TSAAAA'MGR2=юAB9k % FVRm(2H;DI>H=D&3I=HD/v29dz29I z7W: Q%mG2i䃨 2<щ$rkԃtO!GURdzR9u is%N$UHT|"lZGҾ!ppԨ)P'SHP@d:҃}XD 7}oDcRB9;¸4JAA'YGR2<ڦSTN[d# zRƺFԩ])iC6zdƃ䃰X}G+% ^F/$R2=ITB9k%^(ok iP#[R2H=!PJTN{$ UHMC־Dq^Q{<16pA.$ ]@ԃ OTS!Q9ԃtOj8H:!H'-9 H(A5Iٵ~~?|'_2DDH;r!gw|̩ķw3_u??'81@jY +Ќ#1 сe/cJt/C@!Te4/eހDP= 65^S?gVU ,GvxЛlk0`UfXX=;9ՃAt`x*A {p5r*b 9.ჲ᤬:u 5# 5 8/#G^`,5ǀ5eX<(x@4X\n@% HRfߥ\_+c [K Ń@26d!cCYdXP=xp)/ q>Ys9)r?|}Q|`[m.`mA yh^F2z$A@RP<2D&@U qqcqb^ݽHe b&'4^^w{Pd!Tx@U L4'`}C6 'x4@#/C.ntɽH,\F4ee!@ (,ˈ^Qp@“8TxWG]̻zϊт_$M/y7 20o*^@=$(^]^px;w# X6F/lG#->5] {D6[`.8vY=`4^e@2h^Z Ax(^^&^y Mva817E CoIl dyP<2h OA2dA yh^F22 2P4 qhDp,.ލ㠱ܿtohpkA {d%ՃAt`xXle /0LplA :м 4" LΪJtj6ާwG.+ ƖkdPj&+ e ^FHIsz=2^eၗѽ Ԁ6qgC/t7^-b8yqPCCt MwEWt mv3/]kܠ^hռ=.zވ{z]U@ #.1D@nOƔbHW*#)nEFOMbE7'}B<@7 9ZnvL7Mb9/!8US]=D*Щn^:b)w@O"XBT>}~\^dȘlpk\]41誏I $wOJR^b8>~zL%nh T?*4,u6"rX?J#'D ԉ"z@4 2D @;M1PLä́-.k_b7 *0 6D*ؙ77/bddo8:$126R"^KT4#5MDuMZb'l Y(ڥD9pMca"x0b,[xlXTʐ=%#$xdlH]wQc/Fj977 7vaG2x 1ej͝a34FdJt O?`{AH >oez"Q9CoVJT*ĞR9Q!+!wT1uS b!'*aq0Gsm|$É=E~xۣ9Izo03Q̓vd}.MTOu=lor-a oX\7Q|L ͦrP?sZ_A0Dfޕ spU3cKP;{;!"BK8raVh{.c~'f8H:@p$soImdjFB92.r&EE`Mzxú—o,tVKP3$"ght /6S!r#5"}a/B9b+?$L`tI`0uK2Idh!l"}B9c+lb*g|֦rVjmoeOXu辕:nʁ6\/p Hn R;8 q+6,CPuY~.Vjm8R9i#*r#̹H %C)rRkblڔP4F G2aslQLtʁ.ܨOߴp:bHbu4Ѕ[V9LMn{h87Lc+*gH˽a:xkDG˻km $h:+oZ^dxB'j"yke7yDŽacfnC@2u; rG(wn'sM,cfn픰VySn8OJ(GSc w~.٩1;59Fc7dinr0Wwjr?PhD-wF$䔰0{wjr$sMB!ܒUj#!;w䔰.;ew \C4ԲOM L5Z*D-zب$ klTކ@_WK 56*ig!MI %:%9%AN C.dć4E#,UCB7T4 ?4)tsE'Аև0 T0nF!MI(Аiw w-7^s.Ż`qhpT3VS/wQ$(Q9hS&Ҩv8.$vԳ\Nj'qh0,h`Y>5^ `m@ x*8Hya1Nc^W3&ʑ +HIQ9!cj+ q=NKo %C/\S#_ W9q=NT8W$,Cƹ05UݐzҫXLnJºjad+-D{4! لB9VA{#UV48 a`KA{b N_$d(EqX6BPUNdI"O$x:`Л&h@B1~I(!eh)/A7 K $)A7 > - F襞A]}{sTMY> އ%hAA} MԪ 犄r!hO@5*% E/(qjACы;O$^\S[R#a`# 5Mߒr Az?$"%|{۩*uXrK;[&F JE/e z-'B )QwPV%Dk<Cwy'R{>.e BVD ;[2IثGH#bx %$DCg]$@H*]k<#\(ỠHL<'ey>L:~$H. /\jr^hE ܿRr^p&-aJ#M5? ףRB[>7sN#s dxB=o ՐZ/󹾸|U%+aJه.e q[8֞$̏|lr^LHsW_9,ai 0anI˔@y#J6#{.e z љwdkۃ.OK3O`^*3 TxH U+jOއ |\4 : 7M Dk[2$]_uפ X̩j"@e3j߂:ޫlۀUb2g A ņF3 Af ԂZq%F57e"`n\Nm%c%nbX^+*ON. cJL4)Sʢ1Ğ AAp@K$ҝD=0`VWS 1/$c΀UbD3 #0`V4$D  9 Dk3\ɂu.' k’(f y@f@tZ8x \2N3^~j)&&g2w?GK/ Xe; "  :qΌsi]|z!pȇ䴋o ,,H9 U.s=3G0rSWM^j*k|WAp*J΀.%`j΀Us7%`1j@F>h헚q:+0 Vէf k]hQՙK;0  91_}ԀZ н@ 2`i#M/$2&9cʇ uԜ>MǀU֩(* hZ_ 8fI[ Y[j|pU4 ,,^h:btת X5"u0'XSJ_%-Βk281/w"}S(#km߆PF *|\'22`eL=9AEB6c܀իޱYojT/ 5 уm1ڱ`}-cM pydXVF̛ ae@8ZuVPtnxG3PR6:[ZɁ +o]5 :02SE< Y:%՚Z"PlJƻt#a P2n;>::I/K#IM{Ok-D_ZE* $?L DCߌ$Kr*4(N.B9МSO ,7<:^d6Nh|֭SċSmSSRzSpfzU9̞ԩ)S8zӧ !Rabf5Mtm$$S'DRW^rV; ;ޘX 0eb55cRkSA.H$ j7MLOx !EhyU (P+EEtr8vmZ)*[<X- wFohrPkm̱z<<&3ۋT3"[4_]OAa|nirGOK'zDs͇3K83k:+Jzڤ+'uѧP%`c&~t849^-1Z{Ȥ`ߟfק AɩD gir3ȋȷiɁ(2C%~ "|)L}1 &r0 OMOS1N~U1Wr׋Y݀ n-Hf评 9h-Ga*fu8EbfȮYjaȁKr8Q %a:˂܆ϪˬnD1G.D13D Y]Zeb\jPfYSWȉsYJZR6s$COq9%JTC/{T9rJ9UfP[0'ޑ^xJkUSz-)^L? s}AK ~0-OxcAN g9(\ f*p-y'r=[؅}o c, $W22+9z* M_65[=̏ $n/pI[x:!|xL2C. "D/{I.E"~N޽ğ#aqj^+:#uCX;%Lax~#Q9P2t_Nza-cja~fNJ?x'Q?=O&wQbvJ$Q}깐CD}"@H:sJυ D7œOk#w9Px!CyBD$c ax<"i$UH'T||/z!|xU '+;ԩ@5aI ޥeJ5g1f$ J %c}G.U/ kYJoeX<'b Td!+YoW >ew&a}@#B-NI$Y}PfS-՗5Wп_i|tOf!TK6g}zVMDE>\ %#KTEQ]1wI2IT$y!Q%#oO⮷n$-I(Yǫ~HwoTC ޥQHTrXDPx(_#~ 5b HD D3HdjՌ>%f=&a]HJ,]b!,17yij Dp0q1@$_C"PVB9:J z0#0 }9)+3 `dCXAGJx,q]%_p.bljH_d1:'?)##QS4^Zј:$<EPD8@1FI0DRH Y#If$qo4 H$b,L& уL'D21HX>LO!PD"Q9y/DB&UrIuI'%4đ`$&ѧ4DdJ1c)aiH -Nc-Wc,.`c/mHuIQN>Ɍu'QL<s엸aGsK5j:13q\ 8FL^#&z.oeK䡥a GQ&1U ^p"Z#9Ĥg;$GHNǔ7vx>!|1E p<Ĭ2a.lx9/* q'ZfvM $yԃ  7.P?\,K3 G2ta@@wGvEWv z:ɘ{]芻]8' 7℔nš ,#NzVA$XB9b#Fi2xe7(et N-t= z PݒJZd4mqKz,3&Zplk@2uT ^H$ "L ׀DEtGּa@E<tm&mv*\_<^tJ}\(+As*MQ2+." 2讱B1`:Pñ 4^eU]uMwXV=7@~n9vaW0d"{D7;O:0cKv6*|+]g5^;WKoWՀ*JB[*nI7dtǗݜz BR1+g[=-G)J(JktG!Ia:JQ0>? "V5L@06`)5P X_Ec 4i"ۀ5 Z)} X cSgҜ$cvU/VO؁ǒ)ˀ҂a>+h0#ƦI|2^f൙B4$÷8P-))ck$mKR( Yj:Sv$3I)z2-:t{gе)Np^ x endstream endobj 3343 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/mtn3.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3366 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3367 0 R >>/Font << /R8 3368 0 R>> >> /Length 1584 /Filter /FlateDecode >> stream xY=7 WLyW"Q>ArHA0R}q;n(~Hwy~wI!uoG1FZ 1T4hk# ɩ_wN! ^C鐌r %$Pp2Zib9;$g촛qI,#^',gUYO-z$Xzz^uTJ _ ]ӟ矿GĐ%IF5<>4O5sCnO-G*% +b+ od Ղz3 RW~}PEg}MnWe_shQ>Mw_o:RIk㳪}^d_/5HeUճ_}qUoѽRDBe+rG{>f;^,Ё+{ .Ha_y| *vOq`2!xĂ.}o߂O,40'/deTwT`wiGZ!dl*&NR&J9D2_4Wm73HJ2{|B& $S!&)3ꀗTm.)Cci18G!y(?nN5rJ9DZyaZ4s0sB(,5 n=_ C6 ]!k㠔C2sIG;sѶ?҆CP#2AzlŪqgv.3H.bso+ u[LyվirJ9> stream xkLW0;: hgA(@xX.T1([屬AwZ42R]dKFd}4oZZ51jSkS5&sI٥Jν{9@~ *].T{ř8O|OfƔ8 2 WA jV@lBaw0B?A,RvD+b.۴y*a~_EZJ%MnVS-LAUUTUyMʒNfo +K%}6?()44(E`BQ* QL;( ͓ X8 b@@G)\{*.xFv9\- aF \Łi6;l]ƛrW[=4L.dY|+H&|闑E,AtB e_ԏ?'dCp(=rU֤& :o'{Ѭhlrr)c/Lv*) P75a:WWaW[ۚtcWFxx6iIJffmgr1es6h#5&{*=37 ohWgx3çRiىk;26/xqVK[)/)a?u;9%?^֢l3՚UkiϜs^.T*֚JyGZ=-b? dq"--AF{s^hNs N&e-ִ׳BD3Pe; l5He= nig`x r}3t6;n86Q;7F! m R p9R$݋NJ.V(_/Ь$2|kV0ʱxw V . ~{U=dd.Q_}sҨ .Ж+OHɊ#%^SG|qBBcXiHX X#q}@}@i~sv.9mZQUl(7r]u=?DfRohihmliܻГu8RzdC\[)Bftb*Bj endstream endobj 3376 0 obj << /Length 1965 /Filter /FlateDecode >> stream xڭXYs6~_}2Uc"8 )?$NmvsLM)ʱETH*3ίO7R" {<}f/A7/>ZDVە҄l,#զX|C٭SU?*&XMB I gXTSU*P)sGh`SR~ZF#}Ih+81 ReheC]Vdqfqgģ4 mx 4)m>O8ɛ"&Mp>,9Mhx2k;2P>* IwlA7t-vmȜfΕŠ֝%N:'xU]zьI@ig)Hf+@WxfbL.] Z Ra q@FTt>.o~vOfRۺjm(u%2i%urǮq.^Mr/mp:\auK1a$="92/vfi a?kI͒pZTNC&:V ˰u8 w`0!bHtD̬8aLl6[̒yBѩy+}3Q)xup Z.PŻG씧l;Q @;H'C:)T:al:=MVN!CV(U N5r 6%ls2r!r#2-pV(ϢE uXp͔\WcVSZ lN84{9T$]y[vP} ș,{s<#Dp}F5g8b_c=T9 8ɂD"iDsŧ a&y7 nvЁ}`"r?}^~|m}If6Oñ}7unۺ"\:vi]nIext.-W9~nq{XCϻ VHϣUt67[U&y:&J}zst-Owx!"!L4wY j2fSKV(A=&̘)eJl;R;b!e_gٵ~`ij{Cʓ5b3+S> }Ƶ˃7w=:E^Uݗykt pr~]usmaqV̭0!]w=piy)ysW{}*yX%?7.'l8yQ%McTWpC놃5's\l! 6U ?JpT4#x#"r򎪤G Q⏉EImY#l}*;vnmTn5i(2i>Fz]$~D`rVII{l w@9 j$;z+Cg/PC5Nߏx/`8ރ?QV48B#כ @ endstream endobj 3382 0 obj << /Length 360 /Filter /FlateDecode >> stream xT=O0+<ƃ>A%@ EiS҆8 ؐ_޽{'? D-7ţ)alZqr^$7t5Y F"xD[$tz9eJTH!eF,(*}Obֻ{ w\sz] FRBu@3246}kE.e ȶx'yU 4tĒ2aӢ[zaq^EĶ,&1~YK" E(eZ-o5 Nf !8:iʥȄA}lD";k԰";|xxg@G|@n{]$]'.2W\8jZa:{Q endstream endobj 3372 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3385 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3386 0 R >>/Font << /R8 3387 0 R>> >> /Length 2111 /Filter /FlateDecode >> stream xZ=$E WtlawH`3D 3ݺgNlߛyrU~vU矿.?^4$)?/14 Jk%<\G(cW$i!-?FIzL%ˈc}.ytb9;$Т!٭n"˧EdCgJq}}/{?}q-BmUl䶾.O~xsyέb/o_+qZ'??=x '}{ oOw//?,%ޥZBYgkc>/L~p( {A߱Zצ-=PO9H;tFw(*Ϩxs(z=z=4n> rA?5^.ѵ{=DΟ3?Hv!8?k;,5hsA?ݵwkFB ' ?9?{.֜\r}> _Ct|\Ν32{@Ķ"{vb'ٰ5Qn7rQ*8wJ<#Z;Q͎|ٕ+eޕ3+QJr>JTL yuꪬCY"9+ o9D v 6ielM)6ieAdw_fnugζS["9x/D!8:*g^#3g?-Բrtݜ=lw]k+Zv8\c#04y!rBE5iefnaemP3X[2oبr,_(i_ YK\6qWřC`qKo8DF砤Esa9, vJ[E =TScP ŹCUt̹CV :Wj^߇p̩硻b8D8to gR>)lJ .OM^k(J̦%qIaiXC2oΜm9D6HÙ,iՑsXj9DYQzGsnᰗ>WA%mp98 Pu'PO%s1sp>ޒ︝Vf/> = 0΀N-6 ;6( WZ'cg8D{G:/&NeBZӜ;mLmpsj.sO!.A!Rۙ)(32)ZsnDZt[R|b"0lakei]6uH_+#&tV2}j8Dq˼#8X]WpdFpVd!{P QRY9D#҂{=9|%!.< ۹[ہQFo"ټl#QY"Y;?Nf9D8WnG1r״rzi3 vQgZ=_GGeKL endstream endobj 3389 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1322 >> stream x}PTUewj] 9*# "!0.*$#F|;"."Ɂ`]]% 'MIFlFmf͡Ey~sPH(oRg[-`ٹ)'2 %,\( Ńg )j2ayLT>hS?Q P((TS3KE*=@*3'2%cBR%_;s@ \JU~;b<4y O䅤h6ܐO r.+\ι<'x$KHX*MH l;6 @ -[*GN\hH5hJh"Zd}AT+h'mATD C%v0pI\!-tIWo,7>ki7cXe[|c[:冪cGP+,+R{f܁ս)Eyqr9󻡍7zԄq%oo̓k#73(5bq\{}K\Dxyȶ@L^Ɖ5<C5Yv"=n5X/\ {!ba!]p6qg7sY0Uzx7Rg46e;!35w=Y,Y+gݐgsdOC}}C๳O4˃\Ӻg0U>5M{2 ?0bÕQQ]C}_ܑOG7w)7(sdfnglp ߞicBʒb&œ6m'=q b1HjhO}n_i ST8|XݑO;8TҙIr6QlbZFR5L_iv&Y)Opo\=LC0 ` "2o%GjyCךV܎ք08RMq%ךyM3oG|W=`ɮyŸp͑rSyY \MvܛEK5 0t-mJGDQ% endstream endobj 3373 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3390 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3391 0 R >>/Font << /R8 3392 0 R>> >> /Length 1954 /Filter /FlateDecode >> stream xZ=$5W8  !l@ !68zfvm}ӯvlW*'|t?}ݾ?ޢO1ق~7^>Z%e wER'h4rՇX)Wޘ7G>CV4gBRMli+}b8gҪ7{] 4\DBnu{˟sn͏P6/߶ ^+gݷO{)=$[{9k5)o诏 '߽l5bo{,u^w4Ve0 8S5*NgCקq쏤}3 n.P8Dnw8M?gq|C>?ѵɟv?)c _Z;s{ѵz?# & A/ɬrlg9HQ>jƾ > y9@*w":lVHaYLVAYźҚND$9@RVj8@"zB"MVHf, ڬ(D}XN Z3YQ HdEq\ 8Hb;Py-$Sp&Y@Q@uc9RtnVY)^lDPlvO:*8ZY9D$%a]18!r61ګZ1Q3!3gGx+dpHAN7: 1Ci">G7PVqӭxwdԤŸFC3e J!;rћTax~vB=GDq43šiɅ9OD̬F o9P2Rx6nB{N2j!BɎɭ 3]1 =ʜlXo7Tlhʙʁڣ8[ ӝ8/sGq|BIqvPoR^=Hݧ;Ù0\9}t/q!j endstream endobj 3394 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1322 >> stream x}PTUewj] 9*# "!0.*$#F|;"."Ɂ`]]% 'MIFlFmf͡Ey~sPH(oRg[-`ٹ)'2 %,\( Ńg )j2ayLT>hS?Q P((TS3KE*=@*3'2%cBR%_;s@ \JU~;b<4y O䅤h6ܐO r.+\ι<'x$KHX*MH l;6 @ -[*GN\hH5hJh"Zd}AT+h'mATD C%v0pI\!-tIWo,7>ki7cXe[|c[:冪cGP+,+R{f܁ս)Eyqr9󻡍7zԄq%oo̓k#73(5bq\{}K\Dxyȶ@L^Ɖ5<C5Yv"=n5X/\ {!ba!]p6qg7sY0Uzx7Rg46e;!35w=Y,Y+gݐgsdOC}}C๳O4˃\Ӻg0U>5M{2 ?0bÕQQ]C}_ܑOG7w)7(sdfnglp ߞicBʒb&œ6m'=q b1HjhO}n_i ST8|XݑO;8TҙIr6QlbZFR5L_iv&Y)Opo\=LC0 ` "2o%GjyCךV܎ք08RMq%ךyM3oG|W=`ɮyŸp͑rSyY \MvܛEK5 0t-mJGDQ% endstream endobj 3403 0 obj << /Length 2955 /Filter /FlateDecode >> stream xڵZKs6W&NED'޵.y\f0NHo7K[:@?nŏoyv9˵ۋT1I9㙼X[TQSmW"x[V<*lq,+ l5n?4xlb#֔T:T@#M;:$^K)0٧'LgRsd5sO60,G&݅J3fz*mug):NfV~kX.I95&\CE=.{(9>Dvx[~N,hN䮐J=7U Q5_/ur.0/mͩ*cQ%@Y9vYw8sؚ șdVww*E ? *#.J ʡ>Kĥ;EYl|?KʒO5ϡ- l.םƙ~!e=bP22d=‡C q޳w./k 0srj6kcy( BѠ'F 2Od2傖0D ˆUՖ1,CMhZ;[aRVlNX^E)Ɏ3;Ց7E  lV p #ѝxA j X8E̡ kCx4.d@c˒ hf)n~c hA"b3cĒԋ &5`ޮ [/pr0]H)˜3EÚa枠 Ǻ%8iӭEW,]Q;׍NΕ.1#QrŒkãڟ@p"rdX'y݆~ђ䖒3^2Je4箛匉?+W\Yq )kci}K~貘΋bL)oe锓Y8dt!7%Fe<ӘC.Op9 ~+]K}[ {sb;i&3Ns%ݹ2PgQ Pޚ="Na_q>`X-bzvo+F_Y' endstream endobj 3408 0 obj << /Length 627 /Filter /FlateDecode >> stream xڽUKs0 19Dlɏ2\ `foaMBvSߣ<7[ CY>ɟ?V5 ɲpzMFg WL.0(DFͯ{ /b-eƂ1;ϋ:{JU鼆f4مi: ưk3x|=DZl urWW.5c RD& EO!)Ov ;6 0"> m8 }ZE01A}!ÜbXI4"' #)_E>/Font << /R8 3414 0 R>> >> /Length 2549 /Filter /FlateDecode >> stream x[=l9Wp^0UNd+"+!&x"=oMszNmٮo}b-_>/c~EBK~#z3 17Jk%<\G(clw$I!mi)d5$d;PrոKXI-4-r-REUFo?p@( g]z?J +}|^Z­lA{>zyw=o{-%D񵖷t}\I=,!Hm.:?G=vt򼶚rC[_-4vdNaߐ(FcG0QYsC/QVJH*}Gwe#Ğrbб[؟,吝njX7;Boo t)H1#~qG^#̭I3nM y^GEhQ=#|qG^cX~qUGbt@ʘLyBұأW璮'4-~<7y+ɩc{\GDb=7S/E$~d`91@,^j`2`R F^UwƘѮQ-&nTUeﳪ vZ5homߠo"(4+)dЈ&'cN#8+ D\"V?)HP$^vJ!*D-]9D: tJY9WdNrZ_!P;)0B2lmVAsW Hj%&URVrSt` @"gN3"O礬 I)C#ٝP[>'p8kϜJ!,m4NyJ!spP5P'!o->r*sYL:2lS!Y'eA^EEJ̾a9DFc"K#r8vLd&Fޙ-H ؾ )+p B;C Y9T^QCFtIū0Vdm% ޱM //&$'VMb+ut ljnpXg"g8@׀@;. DTׇ,H'TI# *+LӬͨ3/NMQ_I wDCQvN] :=}kٜiXZ#rPC , sF~PnM aNMV ]Syю`Qy(0̴5N?4F1ׅ||i0i/!n5.2&RrǡUBPb ̉g5D 5]LEi9̏RBRrx @RfE7.Yά:(*pg Yk>,HGza])|1|:+Cg?ZݣNCȴS!2*s?3[Ƿ ;%Cwr$\m9D1b!eNnoQr3RV DR_ݬ|!eL)TEB'Frhp~fm8EzuY9+3C2RI"hsy%uY9;m{ ryp@nmDl׃ 󎂜4»9Wd8sj\ yQz7nu*-g>Ry3wx㛨NlVd8^k^Z@4XfDq鍖k|:Ϫ|AЖ3_c9@2#N:uOl9DqUtCZkV.3"x6e~4#9 {*CvڋL bivКTCdg^6ʹGE 龍7y[yz{anAVh禍" +x; 6+ƦU/7%qцsя?WGaC{nUV)dl55Kyw Cjpfሬ*)] ~{8g8y 19jyj־sde ;Wd8D0~¦sp 36:g]N]>8oIpV̖EΞ{b82X+K#<S|I1|yd8R䌫E\_amj9 };Ί =ݕ2#yO2|y/o9΢D#R> stream xSkLSg眹/͸).N7&2xah1J[2 J-Q\:ad^fuΰM-1?vJu;<{.R(1QL 1z^$ͦ9 \&)"+%^(R`U9Jg B$DZ^P{x 3 ,ƊwYw[ԏhW Y[eا +tMAHY[ne|mǁRXs.[(sF%(MCf( MASQ ,GJʩ%VPT+{&(y F#LEOaJʍ(`v;ʗwoC {֝ ZѮ5Aq_]n3/|-?0s~ 8VC4:F& KSHUdF7GY٢*܀sټՅEzJy=EnZ=Yt׶_XH<~_W~=6n_m⃬]z Ge}oTk08#[f" a0Yd}Y=0A:}$MϤu|r 9a' 0d36 0m? a΅M^Ь(?R*8:&׉b]mwI=g;/=Hh)bD&qeB px7>/Font << /R8 3419 0 R>> >> /Length 1087 /Filter /FlateDecode >> stream xVnG+:pu0Kp$ m ;{U3Kt>uR.nOm|ھl?߇kY-mtwۛye{I/_ꗭQ1{n}&YE'&}%6CNۖpGbʭ N?u&| ;⎞:NG˸^k`\SGGmJ}֌AϴXGoxn41u$j4޲43f#1l['XI5k҉E'\k խr^dՊNMpg1~Q:,ufb$ר^yTDTM[HVWTY9JW-=& ϕSN̙&~؏~W5T G<7ݴZX6X"M%]u"kXd ӳ>cne Ya*LwR[{ecϋQoQЛU5eK ]]Q0+; ƾ2ȳdVfUV;1;5~O]_V `#״Snޔ];BhSͰTF#gVAaM]q` -eZq*Y)~}1wQ>PHqg>д f}1m c 8X0)[7?_ϳLvF/7SpZC. 'OSOk!b|<Nyhi8n >'I[MN= jN{fK֍?2߬R#XzΌ/ǽ0Sxf^@ǂqG0s4GȚHkc-imވ&o|R,̪`@ߑYddfr@5*qTy{ ~ I2 endstream endobj 3422 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 770 >> stream xQ[HalVZ#R籢I(ym.k:,K#HyDjՅv.x}yyNQ a&|nK00mH)F*QpD{P*" 5{ű񚌺zKCmuYN]aQ3&*ihz9XqQ]Xnj?*PqˉS*Ah Eh F!h,A܂;]'[ CJzt]Md>A`!LB@k`,uAK&H(fz[ԅiV->UUk ӭbC՞}7\V2lNAL$tx,7~F9S4W bimnpaga?;j|^~|xoNB sg_g+G#}Dtn/> stream xڝWKs6Wfjb"ċ1mMDNLP@*}wC3&X,,?>LebVo_BVgGKÍ@xF[{'ųĥyy9UZaƅfP3Is -gjy*EOTInlxP$k;SQ&umMoǁfusdou} I[Q$o]:Ki4+JNj}c aF\q6`~5!>{?G鄴DnL5X٢z/C (UT˽o?ә5 yLTI%Lg RRyNjLI9!9o^pnA-N2]&w0`x&d<\'G!V.d;;iRFL:`5΂ p!gJRA|"< 3-RU<JƫpLD: UU Ql־䃆OhQ7fXXJT5v亦k}usqV9+yu^IٳT0 &O:Q*RLpq5R%q xڽG3Hߵ|wFMO'@sTqO#xpևTp#kbiq`lmM vwzFT upP>@Aϳ!4@ N8 8X8nƷZu4@,"bDꃳBZ Fp۵m dY /]]7yO}A=16e@JMnX]m4aSN^K禩T'E)8ST`:hv(7V Qg l2aEx<BH>= ]@ ˊe`W8J~h H?S?⮠G'5]~@M9-BL,dåV-YQ 08aΙ(E1`߱L@6n ,},ck4~ ?sN.#.ѡ/Q7ۆ>W ~,WLgg"`~̵NlD 훺i Cqfӌ- -55sEot~$\8u#"`I4hna#E4L@hbeC -2# endstream endobj 3423 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr6.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3430 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3431 0 R >>/Font << /R8 3432 0 R>> >> /Length 8528 /Filter /FlateDecode >> stream xˎ&qrtyրa;ٽ3ax!Y?8jTouIeKz7R|~--ZFX,G)ay/> sY$a8{v6Akٙ^RFaflr 13e}㷏>cͰי_cwױbrV?~?|ǯu-%R^K׷/Fm_s/˯_Ri?m۷3k:ܓ-}8q?~}&#K>m[Kv{J~mr\pIJ5zBg'iNNeP6nѧ1xByݷ弧z[~rޖ|!| g^y|[~:^ߡ~Bw^l~糭ٳt}ᄶmo^NmNh& ܕv|Z~}ߠ ',-?*ǞxW8ؿӧ%ep%J?zr.b_0i0 AÑR得; , a_ɰlF` _O3;*vͷ=8grx7k[Rl`Rz!0إ.8?3x{%q-[cyc cxt. o=A)x6Ęe, ' 6s$p6!1}R7;#4]5x$Ę%벙QSG`H6X}1K:>13]F ,iCh%x~mEa & , (Ę#Cf#f8ˆD]8c,3جk3K:&Yfr `Gw~n3HlSF!,HسόY].$%q<b,>y0B ,9J,-AR?ln(fW{? ̘6:oxgL[Qw;-M̘:I9Êi7+aA<;G941#yҝçCY%[P~=SZ ,+ۋg };UZhiu_(vg|L""mOfݍ ^Yt?MG#0h> >)K;>+vxϱU!̻B ,(Ù#z,r5B"5:O& oÅg}Iv_|戁:1cMxͿ);g!Ztv ,O6yW1f1gmoGB ,-Yb{&mw@9f`1O..!al9-/~+uƾK{<_lծw%p=P9V?f`r\\ |׾ˎ1xB6S羟JvjiQD|g緤 ,TF,E 2J+x!0d%Ŋ^ VpδG7I3-|n/9XC k Az"]-58Ӓew&AeEaAQ 1Ū8F b'k/~0BeY|+- ,-\f3| $%bf?Yf`ym LRNg{oiW겣 fy`  ž7av8w+>21  h39Yr#>Q|*3##`VSi^LB` ⳸JqJ.X3^hNL ,/7ZF ,R<Kl6.&)&n7\0363 we"U֌Zy!0 )~4J% gP{:k.vǢb`ytXxQtd֐+ ̠e3C#t_13ks 6=Ӻ1-s4Tt-L.d֌ܲRgsqIvUbZM~ŗ:%!{K̴B@i NJ%nT\B 1>$ 4a棉i+A̛ż="fdQfOR# ^B&fE47N rji3þՊ^Yb&Ճ fR=׺uf` Ě,Xlsl[tE3Xqb@mafT"J&}]I;BLSMK[E6G4Dit:G* LkMQ7V#:aJb&egzFG̤@+!fR;9A))$>1H7DҟgFm_YWGgͼmAm][IT!UV i6fP,Ɏ2Z&v ao(U2A==Ws6?>)dfï=,r&T73Mp'EL_\Om_Q8x;T,/WYkc ,KL*  k [))Vf`97̌gg4J ۉySb25*"fq 3،iȏ4ioe[ xwI*13iJf`qZ8X3ЌdV!MwrCSO[W/rHrfӰCI7C$##}tEI A ,/YCi,D(H_mitѽgF-t ,vXb}5&3W< ɐ--Q 1<4eg m+a0S ,=mC,P{,ɒ ,g^vx9FqZvKۑUl;Xm3ujN ;LDGLX< 5 iuQ!0{%#0\CpbfY ,O7%4&hXh+ bFgE1AbhB όb񈩣_f]H ,nR>f`'L-1ݦJY ,( -yۛ2=5aivXaŽDqH6LBs=W:5vpѦwWh ~xo4JB [yEKi$ f(YҢ:Z *Xbq.!-$m`0',[v@[k8l~YtqE[{-Kmv2fY7&zDG(GEZƒ랁{DR3Ġ fFM&A}܈_C40SB{Qf`Yw) <,TBc<y.i#iUPX_jA ,ς4=1$ +[T# 6!fX0|G˲LL?ū^GƵ3#0[m[8nX UUB$"M1m8ٖ&Ĵj bi^88m@ ,Wh=3IZ}4ąf[4xF ,Oڷ ҮghB ,"JiWb`1&8 f^bpY 1lM.Y!f(ImóSS 46|L ZkE:HmV)"bhk苈}#Ɨ234T[ m98tXQ"&!N v⭩{SNѤGha ,vIvFi(Q_ ,O .e∁SNw/3S]-2SG!ebX&f+SG5#/M]6!05V3u6NѮL꿭x#\ 26V3])z2br1GtF33Jo ԱeaA% 1*RXL/CqȤ<::K S3ӪlJP]m2by1 QEv\)3o!a=nv46W4F"}1NWA}7oGez"fT+[b|H}Ԉ>Glbڸ "%b&N)SNB:fj,Ѷ-=ql-Ծ(Ex1JSfx>}NDQ1/J&f'̌Ten$$uGjɬ,`-9֠03ZfFb9% s4홑(^bF_YL[=+~֒#ĴPi~#y֔ 2{W3@~x*Bj/Jݠ}ob'xFdԾ0% @OYxDBjB(+i&V( ҁɢ!ffq6#8(mFiٚr'Y*3*}gY=RB)SRu3*|)m.ZLi%`՗1 !gbjkd8C`@B8v7MMXZC9!*2kF6UXRcE:ڻ_ fPPf`踴=]\7}TM ib&tElXe=r3WIRC , I 1`!q=vX>EpL̀=49ĴIVro$Ił41H%=ы=Ak0ML#eSf`&!451 XYABH"&u)s X\!!K ,v!ROԱ|Vh4 ,."hK$f4I)!SSbϲ9gQQ3u 1u4^W,8cXmt.i'yR"Vr:J͍X dLh Oi-F$%D3U~Lya8LrDVLUkBf̓(Xɒ<Xʉx3fh`($<354$YjGL)/ lz+<\|uǙL^Ux=Of8x#LTӜA6*89\ьYw:~̴hk^, z#Fr=O.D&gRE B.b`38KHLK1wٗ#^S{MZHL@)JLUI xO~kRsbjoX OKb&af(2bsT*Č&U!m6h{xm-PCiC1R{[ Z!vytwڳ#UuqH 12sOLgӠ= Zx@m ]Ufb`5%gj(4"2_S:XctSARx$ јi1%f=]1i<3c! $׉:tm$OڛHMGCČXGx(pHmb$ugFf@RS{)"{ s6X"'L#0\mҒREQiSEixSbR#uYC`x6u]=<ÑڶVU5f:V)k=KC /B3ʷ)o!HLeh}51 `gFD(8dJ( .uB?~X$ endstream endobj 3434 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1454 >> stream xTkPW%d)( :*㣂TA)`ƠꈒR$ `.^}ZђT,[JeDZ;J[ Rݽg99A$LgH~?Gpo<+%ʤ$l%ΠJ8JY\˜m^-ثLJ$gnPt![7M[S)3JH| r~+[t7A|Ht!f3 7 gbB8 t aU,S2GM?ď +ܲ2/qb6UYvʨkNQx*(5DUP8@\@ektjUwԠVp1068H p/$zy/ۺ]R:_W?d[Ι}WwlLQpr% D(YbX`Id2T=l.$fꋟª4 vzj@nBfl`̀f2+|Pj^_Yeji3!zs߂\tUi4yu5C}E( ԚoJ*ȉ'+V0RF|.FT_b(2U]g0# ڐ4~;@/$Kd3Gڌ˩3"F,hU,4(_{6;VZRXZF= +[cWKš᤽r.@mPk-4L߉Dž .lї̺c6xx=ZGK ?κx۵-\u[(>gkh,:0@v͞{/ L0"^O2-ҡbޘfgRCJmeqYVժynuMC8a~7FיN0Y{4\uj|"÷ ]=p)nqP)U̿=16r6p2)i :o9v6X/H6/6[,s YT)杍HFJP2<}gvJ*AɦlKE c ]u-s Q{~́rCyY ΊǴCL QsMyZ*P%} N endstream endobj 3316 0 obj << /Type /ObjStm /N 100 /First 1002 /Length 2664 /Filter /FlateDecode >> stream xZS9BUEc+u`$,v f%rd ccK.elz4-u/L0a_Iϴ(fT ̥4׀`!($B $Ï'(0L  K5䉀LZi? }]ԆnA QGjL zDfĞbC6DxHm)!LE%@Ey`:0Ln:ğQ,:KڅCL` @1#9DE8ÌP4(" XLċ4K+C4J'FP_AQ @    ǜJ҅JkINQ0Eɼ6*@.A/ T#$`U`} 1#]G˂iJdHa KD00Ei )He`9Y:AEAE/’I!HD&6P9Kb@Ƒ$ᚐk*NVIMda&DLhH*| Ӌ0ٞWI'Ǘ|vY9FaqQȕxɺüW`Wlm{%d$=ao+<ˏ9˶ :ًgLNnFv9XnwrXNF5s v0^YoW":^Iu_lB!m q18e@FŤ^ZщlΠ5{v76+P채Sp >m'[s Ӽ8=?)zG;n;/aUg1FpIsâOhiZ^)eWG׌o9 =&{&AM,{ 'H^lpy~n&T |>:4?yJ oqæ'f^<[t&eXb;uAB5tn|t}R۳8IEa{CZĦ*eE'̚ߠ8&*]4ͺo;MG Brĭ (-&k=e;˒AkɀR\rDV0\J;w`8扑:IG^P>!IX ق]9:IenA>T &Dgkxm8zbM,aNYdHOavE]EClq:rYmdӓy ´ [Ah5vZAH/_Eʑ 1=WRaɭv,+W 9e"rJ`1p*dv/ DكR1~7uMMlƆ17ii\j+5׌5v* wȐ,T9 7r)}4硌 T akđV$nÈZ#Ɉ m3$@#\x;=eJfQS2Ӧd0bNIΰM,g{`I4mwikvښ5)Y ;5 clbGnb5ljQӜMQΟb eŨc> stream xڽYK8W4jl!ŇC&f13 2;=m-,y%̯*VQlv@Y|ԃ_}EX>ʯrse3!r*WI,,YWT&/Ui[=n+_uM'70v$:`IT=M}ׇ5I MS|)(a|[2CGQIΖn?]ɫ2G:nij^ca`m3cqq;kW[6lVK4~xmSkgHڐ!wP<-lfҲtL+5V7V 訇_ oVpٙ~{Ң'mͥԍ* Vy nH'O-qcMU==y}^7?ʱT.KUc!(,f_d ؉TrjY?||&ԩȋĹՂF:*vdd6qhRaOOeVH]E=GX*2iE곍chL(-1FC/8ô:*+<6vK]AѰƸUG_m䞣1?,ۧzTN%8pQc' 7c"sٜSJɀjUEz˾!BeN"5B&ݳ=.+_S׸ճ?bOg`?wоJ¨l>tPaXrב3B ! -|`K'S߀&?>]6ɻW߼} ;&?߾G !33.bJև8UB߫K"J8 -[B 2nKOL_o4a\]-% <|K_1f|B! L܁w놱<zݜ$) `k;# 9?2_o /qPf]"g+6Y|H0I@XRGK<)@ 5mfA[U( N2QdRy<P=DV0?*)ɏRak ߺ"5 2g7?,Ra1 Qu&(NAq1O75czb䪀U88Ȣ'B [L YsPg";η֦Q O7 Zh YtÖ☭:n)dByRRG{8M7aTziPp^@d2ﻲ7]3a0wME4 6Ԭ=/4XHOTb? ϸ]1 u0-u;WmѴ #yu#ж؉'d^eVyъ,qWE@ #KlfZ3j]-@ҡ}3jMTvx:2p SO뺯B2NIKTY[ċ%5ev]_:m-?`{b?}wxT#)yKZ*+fpX0@]jn!boFHGD~&D?ĠKB`;W xW _z @F ~n4ҘcRU]-N()"D!l:/qmKSВS8r&U3H>c|o>}NM9+*ҚoGrX8D('#}cB'X{ _eNyR R#s 4#;-| e;\f3| +1S}=T7f6n.L=8Zz+\.;g|<\)H`Jnv oe}Pj[ݣmqO(n§wBUμAii Қ (-dQX-=Z=0viR&M7>]86Gg@;P᱇a>9`s2vjŤ]z[o<^ K'rĎx?9r.5z_ϩ(#ÊrtKSx*vhD" wnC˟vd'Ի 5N߈:-HePŞ]ϝkT̹к[|yyѤޝ=ĿVqξS~]_L(>d.vY u}wDI 7Èu*!ŹļQ<9$Gl6_ˏTf[61aΛ%%}~22E%lc9oLef}CUw5TSa!ʫ~,69g:sHtE 0WPCCP]ȆYsز,> pMjG!:UQi37ߨU@R@V9y endstream endobj 3446 0 obj << /Length 425 /Filter /FlateDecode >> stream xڝRn0+xrR{ R-nmXlѵ$eG)(x!fVV!STw&,V5`~2Gٓ^j6[p @TZKV2mE Co۹/8*% ʨ~/}'?r=7^;|»bqn^_fKs-$!(,Q ϲLB{k5#.sנuYD\@l{t:oҼ+@EȣeqPTag䀢uFtMz { ]|_rz>Ǥe{H5)?4[ &H'@jP &ɥ`Ly=Ƀݸd"rys:}ӆIq`jY pq?Ĉ`7k7c~ endstream endobj 3436 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr7.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3449 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3450 0 R >>/Font << /R8 3451 0 R>> >> /Length 4187 /Filter /FlateDecode >> stream xݜˎd9gٽhe n H\Xo;ope"BS]_χw9~vSp)x_1|_  iǑpe!Ivt`TrE tH!(1)XG.--Y$metB?~:| _oxWZNz_~(0]>|o?}ɭ8^>_/qtZ//ҧx$xX>Ǐ_5Op齹 'òn>0/Hg|ݻnǔ]COo{hX2'`k0}UVT-5njK1ܫ0܈]7<79q&yxp!3\7f4Q^%bp1|R EǸIG2=_'΍ޒ,gMoD_{ BtI^%cj'Ž[5i $ A] E!d7 o>mV4 CxעH9#YB(FV3h0x+@Ri2CRiQ" 3sPBg |i $JYO9߰J U< Q@(+@y* $Ȇ]V1`vZ$C Dݡ-;Z$Ý%C ֎y;+oL-F-„L %Ln7s8r8S)I[ Sa w+ t-vã ~C9:b3p !8iFJSFHn ]z 1qTlriHUQ[)kA'Z9jM.wY=L,17jQ %mEcҽѻU $#hKf5COeҚmjyu8E2ܨwg?k< p2Gf 1qX $ >q8PR+M1J21fÌ.VYsU׀H %gxFcE30pشHfɧn&4C V1P@`d\E\# %1g?5CIM33Hz+ NeeQdjByi@ifJe+5G6Yk5f(AP Xk+[Q9hn/_>/ՁZe KƃU1+΅\Xc4*v)%3)Y f bLC \g]U %p8J)FV!\‘Xj1C KE2@ıKamT"om+C 4)D Shbͺ%BXLڔH6."&V $9Mɺ%BL" ՞@ %XiP26-oc7XFjlŚ %X6J7[PѵP %tuT-P=sx_2 X3\ aB(5,ؔHq 8ސf(uj\ k\ kyK3L7ObҢJҘ&a'f(as:NdC 1Dj.=h $hwcgxE1lQJp,Md(ȦwHfL^y7*x -X:ϛZ$:+M%]!eWm) %l"ZkQr lirfo[Lj&췴(fFc=w0a Ԕc(H2GCU G ,Ny$ra";49l [=9Af~UIT[9G2K[*dXT L( yT}wͰOϷnyQyaSl]``CU* :FB(`:8B˨W<_޲p93Ӵvְ VܘsdFωxx1jm~QgsD d7LdBkGa`GPwK􈭢}F2k|41n:ڴHfdfb4a'e[ֆ̶c¿bDH^SZM^&+;b (^YhfX3di|1ND wa0ksZ$(S7+au gNik~V(z>Z/rjfH=mN/fX#͙ՇXFE3_mɵWW %n8WWU/;3 6UKLJbf:oUV%C "=fB,ƳL!<|+F%9?>-k5S2BNeU0sZc9??R\yuVD7>[YLwW]0eN/ endstream endobj 3453 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1031 >> stream xoL[Um ]'ު J6p&&2]DȖQ?mB;r)ct-F Y`M N0D2&cb޻>xNq_vrsc=nrqb+7ĜUe\+%&DZ#Oaxv{~xSjEAulr<';cV.b0rp#.̕YZ(nupbxzBt=ODb7)U|7 -$%зAK~M'WB-:4Y˙B%i8dii5ࣸo .YיX(8'y[|&oWvbGsktpd k$Ki7_jt n‘,:>!MHaR-xTO 7P(a endstream endobj 3437 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr8.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3454 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3455 0 R >>/Font << /R8 3456 0 R>> >> /Length 9628 /Filter /FlateDecode >> stream xK-mW4N=1 ̉fFF b H p]\tI6ra_w?X\$돏̏ߎg)?}?~QƜigJ3oHsck,51L5ưeط,k\J{36xRbf:3Jz9cq1#J[||???m?gƭ2_>~*s<{7]E|)Sr|Ų?>???|dyArgBϸ/A=G.߾Qg륿,_sKZã8JORLi{~Ny ͕/exܗ[K}_7n=s]rgep:,inE<뾿۶oϼ~vg^o}YYrEu$~@/>yHOs/??,?~N?? rIYVr/y/ޕ,_bd\ ;Ƌ!SYߝOׯ$>_nwwuٟ.{V_/eZ_o/L1eԁe`]GvۮrC#xfl''[To*Vdl<.ދܧM}qپ-[/c?S)G>Sum7]k y\W^yEv.qۮs{Yn=EnRg/ӆF [y ]6q,Sށhird4q~~ϴ=<_|˪M>a.X+ W2fiuNTмUeeJ%痮]߇ |{U޹sOqsKjE/]Wy9b5s6[;Nxҫߛs{~mv=G=t^VH9&`[_ɅmSܗc}I$PӶ#-6;?}s4 &xߺ*uʺ9XF,5iϱ=SB >NF!l㶝^o|du,>b'\#.3ToX^9L}eБڳ;oE S7 "A< b8 1\%dC f<`t^ 1Ȕ7/2Ϊo|sN"۳awF , XduYXdԢXF,C~b=8A`н%qG bX҄z[ i g@@乄d1e`wooXd KJV!W-zE7A`( ^Bd^be-  k&\$m!JZ 5 1.4[;S Koak7S\eqbYSg3ؤ\UVOs}#vK2|r4}o "+E ! 1s|ÆZZ8T9>*bvm 5 3lϼkD̈Fʛyr:ց*oQ]f;g]^b"/pݯ{K<$sLBKe?0hڠ 12z@ 2oR`U0HofֱiK3bʎ'9oE`9vߗȌXŃ9g~K?7hʣzI{4t2WU佭Ĉe-5qeSEd5IB{8f&eGaꛙcl|71]^,Ρozc}(s;损1~/Pdٽ1+f D.C+ZP֝PF$˹2~ӼBl=7| ދWaeOXDlQuᘁe׎qzyw(Q?cس:̘T$ *G F1 ~Q EF!F4 (e4Q,]/=}}xId;ii0ѽQ b.q<!0Ț(Z,dfѺ !0 VXT5ȱ"i1%XS@nD%zL*xI3jBXyX"J*1v;DP*`` W\J v!2`fUz*1P8u@O%cSNqs `׊ڏS".=+82hǔPb>w!)+^|?1Ї߈:~}a Яl[Y-g('#@pEě/c̈ xloBg1ˆEJwJr9y t@Ծl(3*C *督Xjͽ;$#޼ 3A73HUGv^sE%",?ltb& ;"O1LG;bnS25T2 Uhؤ9UfT5EUTwf35%g]뱜12z@@Ĥ']6+"1%SlcF)Xd6_!!n2 c| @\M'DM2 o^9P2X>٦d߼e`W(fUg]L~UZj{F`M ,2Ӵ:kXZCW\$FU_̈́yxc̬1=}}܃*$1KjAP4 ,]Q2KهL`vƕcZe<הI 24ej9)n,m\Uf4Rzƈi_+v`(3gs$7XdvLo\^6hpy&1Eyww"(-ot׽jCw]~zB]vLLfmO:ܨe{mUxhK׏Y*܋YDu1:4[ڡatC$̍ʟzKMg9"1sĔ?hMW,s@*HD1"gYu 32dzCf) Z~aX΍*[ Fu]̢t1Ebm)b @333E'K3mf1 jJfp,UG5HPz1ǻIFhbwlOg&=3WNc먵bhrU'为<fpWIۋN1YSC͛M P6;zD bU DBf`3*imOK ސ,jSť0#}2f~E̬{똁=3"U{ĠO'!!k}Y횻;UMfO;dsbhWgnIF?n ,۩SXծ9.#6KX#3Pu$^;@|>:ڽ2E^Y12Pd7-{eWEeU:maĢ u4/)>"{Esb{,ӗ3F ?ʨ8+5UyU@}· k)XD+40U8!|Sfz7"!,4ȪLM{?A`D{R}ZXFB ;Y2 Y#VAqu d3s*V"Qvh6){s8:)fJ&ho+.bElB֚/f'o3XBs ʴ|;**,UkIvxW'RD3K6v ,vuQvOt9G 4"TɣzxAZ> \.fe,g{)hmF_ _3 vcYFg-Մ IV)hȉ%%NYF :e*NF&ubY҄"O^ ̢4Z@ 3{Nf9UpSV2 x2^Ŏj˺,r,&CYꪂ$ydU+VU];@rbjr]!eKW0z~Օ,Ud9]*ce`A/qY.&٪(22`ۈrGe4cu]A|M~[uYll%~k!:gNn%ħ{:Oٛ#̥Ƥ{{a1sDz2ήtVL%yY{ TYU)p9sdg=yK?nZ} "MU&%fF3 D'=JL@2f`9C}xhv.@BVf,PKGl[)t9dz ,HBDʨ2x0fV+RbF!y;e>GX^_b~bԛ^a%ȋAd%͌ "COyQ l3e{)3ǻ@4Rf'}3 mf`U{9iuBi@5`*g b͸;sRBXyb-:e3Â#)rF̵c,<plv_i{^W0PЫ3ܭMY-6!0Mct"<]mBT3"pb-!Zܥs)9]3u\0f;f<>wZezYw&h_sBroMeV"z(3XTM3eMgk"c9r /=#1s81yj8yr!bw=̱41t5ry_{x@Z[_妾C c} KU bgFL{"Wm.B~ZVu?ү 3 /tFeh"2ضx =uu-h=2R)]\btY澮bcBVire sw; D>-`f`g/L%5 ḁ=G1UEomXUY\h΅3O-T t""5B4sUse:c)]bzggܹP ԊW_i̬x":\vED9ާF>9qiB`&fH53’3wz>,u;XPۃXx(pJ)3n-4 1Wk.Ĭ>\ ɻ 18P+wb1W47 O%XD;S̱?X;Y3ws`H ,7y38u=O-9 1Uܢ]e2^ÿgs(Ec{iˋɭMw% 1Ul[2svA}0wv__{*kgݯSb+0/Yl^kg?;2Ld1"pڴ:+$cfs X9Zڴa3nDIJtM 𘹫:3 E%L;U'waX\a1:dڒ2F'3w- ^̬}^r_kUωQg8%uCߍGt"$JHc#2pq\Y9kCo٩/u N͚:ȿ=$Tϱ ,gMo)u-stbTX,ss"fwPt+Ǭ{Y̪DF̒{4bf٧F̒?K"7Q|2f460sO+1$g.2( k" BLfV?ÐXjHfTٵcyES"涾k$IJrW2 ą- 䕪g^Lq'!0"s@tFej5|G[z]GaFeH'ʐavz!@9쐡҅EmUuBF]+{3YVo_UbҾfm0Оeni@ye#+].dF\fX{nDf`WeY̹WX_e)u2S~uNIa=RPa2̵=2>9X{d`U!CA7SA4̆+dTv,DlSv,*,|FBvCuB\f;9Q4ymO ,ȎGܕ:@Az|uzbF  < ausȇDEf6 3W}ٙNȱ?<h+83rl3m>]+ Y9Vɛ@]>&2U Wf=1MA7*}^Ӊ 9n봖:f*hM_XbqbF ] vfQ7cY| ,g@!̳3.33BXf-FF! b%FAEofF{VxDfqD:uffD-,CRo0e㶳kY9J}Fnww4"KF3PB^gDּ's1U2R,5 Q9eǨ23=#lfTQIh50H t D:۩UCt @ 9!g6@ Lo1C}X=.&*ȡG/z%x`%HAfT@ Au3j9k6:Owdl5@&>y yzc2lQUMȒXQ%j@7a渭{> stream xTkPW%d)( :*㣂TA)`ƠꈒR$ `.^}ZђT,[JeDZ;J[ Rݽg99A$LgH~?Gpo<+%ʤ$l%ΠJ8JY\˜m^-ثLJ$gnPt![7M[S)3JH| r~+[t7A|Ht!f3 7 gbB8 t aU,S2GM?ď +ܲ2/qb6UYvʨkNQx*(5DUP8@\@ektjUwԠVp1068H p/$zy/ۺ]R:_W?d[Ι}WwlLQpr% D(YbX`Id2T=l.$fꋟª4 vzj@nBfl`̀f2+|Pj^_Yeji3!zs߂\tUi4yu5C}E( ԚoJ*ȉ'+V0RF|.FT_b(2U]g0# ڐ4~;@/$Kd3Gڌ˩3"F,hU,4(_{6;VZRXZF= +[cWKš᤽r.@mPk-4L߉Dž .lї̺c6xx=ZGK ?κx۵-\u[(>gkh,:0@v͞{/ L0"^O2-ҡbޘfgRCJmeqYVժynuMC8a~7FיN0Y{4\uj|"÷ ]=p)nqP)U̿=16r6p2)i :o9v6X/H6/6[,s YT)杍HFJP2<}gvJ*AɦlKE c ]u-s Q{~́rCyY ΊǴCL QsMyZ*P%} N endstream endobj 3463 0 obj << /Length 2257 /Filter /FlateDecode >> stream xYKsFW"V`^ [:ػRp\^MXV_ [^ę~| ZFf )EnZn։ĦI!3XmDf,cuUzk颦P8̢!RA?Jm>wY%h$ 1syZ "/ڨO4x?]yLP6 εDҬmrwbȖqh /ھ\*bt*X3}uzN}Q|h7sc}<;Yv/6մ]x2a2O7SPP!Sr ?ްt"u]AEhnf 3a >~Рx]gC>2t9ۀl)BP&] qvh?{t~PYB J`K1#5?=qѰG}n=S jU` x ̨!bsL%JW9j,< .$MYF0Zv=>f^~UbҼ[rOj=;}jDHfڃ9pP蹞d1g%hg0a]',t"2`LƆL6d2 XOd% j ~c<@&x?WWXаθhX:#M1V9T'|b+eBEaEa$eq)~VF y 7ep9K& GK޼J/T:[@6:hGz}<ȷ.?Faskpo&2%Rl#q2W Z-!ԁ#׬Rli1NCmaiVЂe鹽32'ye!jmC3HsJsWSvP䄋}OnM>آ 6c}),F6GmUC9k]Bׯ %Ʊ2n7h_.*4i4KB|D]dƃ?ٔ1K}gbheU9f8M˱F3NR$q^ a`";+yް&_VԌU9ڙ ȓ:͊')9;IDUB4!^=)壂S ҂otW~"̅Yx,|?) RW?~^;>>TP'L&')tS21'P5дT O~`4\U endstream endobj 3469 0 obj << /Length 2471 /Filter /FlateDecode >> stream xZKs8W&O3TekéLDKnH#ɩlvAoPJb)n"#J5Q%Tr)7z6J9i|M)~HYfk`Vm>ؗ-5Y;ɴ7ፈIh|o+ԇcHͩ B(+7^TG(üq6|iynSoЈH4 aOAվM,`iy)rs}(vbla'6Cq~"|rt}5.|g39$CˤNP_0~/pP-bEs9(oGȕ/4, ЧK8ڧFƢq_3MgmVuR:b*A`S\a$oQ h|J*mDx1FNuQ5$2\Зa}xhd*AșBETVzEBېޖb,VOHfb#eB$C}Lx'3NL%0T] RXiiuޚ;vl&Ԯ1/e}kQKtfO%3[D$BBJ%$]N^NQF&+4A.W3[[,,65.;iP`S.;9÷9 o׿~|y|Lm񹴨 H$t^LQc+md֥ /yQ %p>5b>8  *G cĺa˅1 vx( $|v &tޘJYD(+̼Ԡ_{Mwɶq2VdY.\s/'b"t[@Uw:P}yX+MrЁ3zHV+;LQ7UPxqEAb/7@I:6( C)eW6~E>nJBr︼rFگO/gAcE"Z˾&"R`1Kt0.쯺GN@TE7Ί]*;@"ĉb[oഭ3kWgҼMѦCmi6Mw9m4%!ыMv-T Qű;Z o`ä1)L{ʪ;5֔55N};*jpҙ)IZϰ!}Q;%CR7fWaS;;QNe'FBƵj p}"nVI"8oa$NS.!\5na_۬vRˬ2;UJ}^UdѤ#yLb*$c2 :V&/G2wo>,kh+_XAi6*)'ŧd c=j$2BCܫztHNPAp+@d*]cČ޽~ !_DŽo~xAPB8{~hz^8v%E_՚FD: JH.PoD4FBе`QI8OrOP]fz3sSJHlGCvCӺD% 0x%<ږ!!xY@mDdӵ^_z ۗѾxCVl^bcehbM"śM`~4S:D3ܶ9eꮁ*7V~+%Nһ=}7DRn90h@G1|H+\H-(^ `:FL) }xPmMŠg26ĿkUhvv> stream xڽIoFIBKܸ q*&9H#gHQ2)0lq;,`!a1 |ٸ,_/5WmvTB6 2KB@( Ȑ` >N/< )eH< 9y6 /vIItٻxym R#%T~{t7)~8 ETDYE 1{<8//,  ,V6Z.WqB|~YX B* Œ!si,VI,-ɮT>Q=~=U$$2&I0&Q5D)RVώDDF͠0XkKO0* ?a"}nT.A)3eT喍 .Ar`! Ѣ75DŻ_ fBz`Kx&|/[.D e!U hm&< *6`K#7E?Wo޼m'AF 5I s(zHJRAid$[nW!wruӢ;'czm#5>]t&U?|Fa1e:1^d~琮~ |9F³b+!n l{GHr$G MoJUN~{;RZw E1U5xF[; |<h== uioRHu;'*IARDW<%OSѯ~3ƅ[$inqP-= r7G.{V DRWJ#]sktGiϨKz$(GT#S ѯ~3F?G-:쬖gkF-2Y>ٔͳZ됼w"m@hm8>M4ҞQFi;&b`/gơ`h"Ɖyq"xr@=_?J"bg1sk T{_1#]!Kﴼp~fo$$YiaF1# ̯z3(`u/e-WI@BlsGE#H,Byѐci^#FOlDlX`~՛wNw]UOzВ 8Ӂ7/okG&6G5>6{8)x}4P+3MuG 8dbz8*S=du./ 2d$ko-Hۦ{ObLW ="$:%@J/< endstream endobj 3460 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/kpr10.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3479 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3480 0 R >>/Font << /R8 3481 0 R>> >> /Length 2175 /Filter /FlateDecode >> stream x[Mo7 أs*Q-(zGп] Z;7 W+3a.^_~\b>/~vOk|,8[H9ښJsDb(1NP1L)'Su1'WTȎ@e7D%x\h}mVC5qt O><.w>%rɎj^~YuC~xVC;澲>޹7?>| >dWK OS}|i$Q؁r(\ 6@MF]dRܑ'I>$ d<ƻؓ$+K@ndJTǑL$ ^_RI(0$k%y%#O2wIH+ѣS IČ>#$S䎼>ɄդVw"bsܗAٮ19 rĺan@3IM{ݑ_nt1g,*_ҽjPkUw~K Y zzVwd^s>:$(_yKRP2*pr>ox?x(@n7vEo1Ą+>]j9 ҞsNMx W S%ǬA,Qԅ(  !hM[qϫFHxE^-WqY <\-a,\(悌 E UFQ Q C8" adőrWx*ȊB8/֤GQ DEQ bNFQiXE}"2QT"?#6)-@1EqP):t>yPK͑Me]m%As$z%@@c|g 8KC lC("i"7o 8KʵޏAr)CE0=ޛ-"%:po(28eS"@BuLdtHל6i21}J(0׬8=ZEq:MXHnp@Ŷ5C 0AxZ3]I\FN$e[ӜV[4G$etKTrGQFfSeRk 2*5G9=9Y=PD7Cٕ:GLAq^tȟW#; xR*xR8D#)o(&lC6a`BeMlŁl%;SQ4|j]q$"EqXd&x>MQG΄eSVdEqDӶoKJ)wm|Q5źʆGW )X`IQ6 mh9}`ӻxPΖd6'}Iq%rWHq:csfftH(V1rnfV97w3h5>:{Ȕ9Ot8j2ҁ\edmkZsNO1e䜞 q\@0ඊ9 ixV4TP4&w,l[sNGAmƹ8/\9\9 i6s: Sl9uhΓb}E* lOr A4TRsFݢ9.9d{ʋ6rYB6<{Ê M6Nd g[?325f;]8OQAPcHVWs6xKAzJ5+Xn05&4먌)r:*#}(O:e jcGr(Ojc3eNsQl;rZss~TOrsWvyOEn [u9OQԵpS(+bNy˗ |Je0p"QIҝ,bRَY:aBsJA..9S@IE~7%1ȨGYzk?ztl]?#+kreHGw A~GvQ{rcVFP K }?Rv endstream endobj 3483 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1767 >> stream x{Tgawf.# i *4DhBhPV›\V <.WQA"%b_USl4O;9t+Ϳ=gs{?{ψ0&e^"o}=\ĭ~i#W܌*rG#+1)[ K@6&6̫c֬[KKk&=*'!lwP.LڣwdHUf&Vj8`sMZn3+K&};#Ly<.*5s;L^Ȟ Kу@$H`1#suOy#wӲxE^Fukn}ͽg6xŦIarm2LZ^WH:FNeY:3ڙ}&ѻJ٤2ZP3yDZUoA|IVMRmpӱa魙'TUe=tРhY ud +Xw:Un˻x 4,;۬3+ Y(k9Ɋ-o =>zh9ҍ6H'|"-\_Gy W`jq ~=/+[+3/'m. 6+z!ߑd"ITWk>L[?G6lbl  t <"9厱R.ؖ)tOTT~ $"cvNƲC,J4M%*Ɩsj_'dd#֮CnnrݚtX%:grM7.bRk2ax"X`퉷S-d~q6zI?C|#i,l`E  t |iеkM:zzhp愈/Ї&:V؟w ޺{9Wg@j7c1みYYm"胷䌬 ?y\Ɖc\EW'= PKRxI?`<<{k> stream xYs6_ 55Q|@{yHRMxO|eŪ8Y!IIkI#nEKr3b>hºh hmWW޶cw%`8l[-+VwPBV}j &su6Q c( (N8S+;#+a:Ax=]U:ˮnqnuڠċxCoAr5BD,h'c\l s Uk cSSp74(6ZcLc|]Y] smUڕp[>P;13 US^!>Y3H; TrsRBqa }nOM+4.Vycf /1I3|Zh}[oκtsnNE.^`*f/ir(6zN$W G=fWܮ9~-PLbj^M\06OJ6ʢB& >@**žTQ`pgDHL">B JFT_Rvt,2cdoz+NCUz@o=QBC!zV ·Q)K6M Mה>rO^ ?.|UE?ݬ. Q&^ٙ6\tחi;f Gp"ّ\F0ezh,} M~8-2ۯ'a:v2XG`wh"8;ChZ {5GI ߯s~]PnF, àg /zN9v1Qb"țK56XDL%_->^GT@n4 #[x_ F,;2SP8E)S @]5P E/ᅐ!Vk)?= ~q~.ÅrBH85\xޖS~;)Ep&}*=Y~]>Zni djS`4J"> stream xڵr=_7ASsK:zSgL$uDL)v9{ @-U_Ƚ˞W_/,#/n/fV ^]n.^ˢZ)틦Hꇲr_׊V-*ܴgTn;8xm:_n}%DŽ] vC}2(w$JA /zzCKH&N' fC`u[6 a[}W7+<q.VB3-%܉C90geW>V@TO}dh7nx`un7.*Z k+tp4WMFۊ7 o=!&XDxi9ˮ"6IaK.=p}kxe(kÔ4#k;&sthS("8_z1-6dYX4YGBDl1&IǮ۸`S?VM;W&w]C]PL/FB&у]%DI:S50FrF&|wi{O}=>4mȮn CڡB$R6$R+/ h MwSbUcJ|%<}$xs3_`\i/(gYåh2pbڅ%T`ςusJA1Q-͈Z SKT OoXR74;l*-g}{4]] 6=dsozsH9yPb&FS4fe8q69j/ݕdFlGSg>Qe53a7߽E?v'&#g|g8UrK4 m!}nSЭQ68΢F2Zag a YHbǴK&{ vr|H+#|߫iq ExyhW*ms߮)~94˥AQ1w(f}MȺe}p} x֒ Ap'GWa7Pĉ/wn .C65n L#D * "Ⲓ0ƖICr94Di.P Fާb46Hf!ˀYUp Pze606[g0mҨd{l1,r+qg! >XKXV86<w`%Dʄx)V@sJq&N%%iJ kq (yq?< J'5yPݵ%.Eԧo&\(ZK'ς,X( !6-]!9QE+ >ܔlhSh)?;&ѓK&o,ggM(wNPJ`-. }ai4LN [GO}rH3ʛO'^riSȃWۙUY*,$cDp ~Ctx%(rŜu[.>yexwغȣw DZOAqГ׉T~՘.RZOjŨa`]u\]"槡2):Qqw 8q 0+- Bm` p3+Z*$ʣX9+JGK 앧Dلf)bY#`* UZLމIS5 J`V9:};vvL94v u 5JX9/ a j+N\HW쁡 Q>fhe`F'2'Rm ?ش4V'myM&5=C [2FNapa5zWd BY9p Rv X(;Frs啿@(])21ODmݶ|7S^;(BL*#"1cΏ#`#9)w%uC).ئ!Uh)mpcb̹fC= 2Ʒ*!H4Mh`[ur-.r\@i9=&O뾧RtJrrḰ'r#6=wm( 'qSWd0s#)n~ e \ !C p]-cCI16}:͋> stream xڝRMS WpT>CyO$8H(#< T endstream endobj 3490 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/cir1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3505 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3506 0 R >>/Font << /R8 3507 0 R>> >> /Length 3601 /Filter /FlateDecode >> stream x;,KH Lp  {nVV^(gE*ίw߿m-/_c^? i=SIvЫ)XS(Q5˱>G. S+(u$uK+[{\i5yimvn?7W|o?~n_rA玎n.r? /qt|jOo{~Ol3G1_Bq氒bC|jz{K~(Q]IsHõP>ozNX|xRj|p5 &|hc~(kTC Pv˿|1<&c:[.U>#=9gvϚg < BP;FI,Wv\D8iCvc|m?E |0Wǯ-ǶvI%[ D8@i}"DVaЊdTD>Z 8m 'cH'֞a{G2H2Tr`leeTXW _# V$C%&Wl"*)s2T2&1-+Cz ,F 0-Ct3dĢ1Y)`2ciY*!rwGVVf* X7:V 0`U *Y)t``|+B"F#+CsMqhMY*%;<j,x‚V z1괖,~Npҵ 00cײ=$#A9C#!b<՚]Rv`QCPBhJ 1gJ l9Ca(*pd {t nE000Q+B{y \Q++Ck 6bVĉVVJ'0U+Baxm㲧F#+3:Wk=ee΃0bTljJ8,41ňiKpkC=\ZYtc: . FfږiS2TJb1$ѵ2T0k"fZY`#oj׭ bXBŞ]9WZוSLp-N۱ !ʧ +eV>``L0jP+pUC!qLjXWPɑ>~Y`L5헕]HhȈf/Z0TCߡ"ƘG$ϳ2T@VR8.;z)H0Ta&Jo Ь̏hmY*qUڲ2Tlb\i8P@h̻hMY ]tPo0GWQ`8<ςR?3vP)0lVSpͶ lD0T=]M=`v=vF3 P$؞H0g֋S-Ryjx[ʰYgE2-2;iA v-X> dD0š_K+3$X8oɞ`k([Y*l׺!C++C3R'g'Wd;S Wf;M0Tx'R-*X{h flϜiL&F_jhPߘW(|3s^Ʈ鶹rܭ4xd`lOBH *z A{E2̋4 *e%syFfadedVWk#ڐG2T#7c.T0TZ'rim.*ĂG2L6o$q}dģҦVVM%CDø7+H1c&U^ J~)[ 3}#FVhxW<ŔVRW~PE29 ,w$C8-d&!ߕd$VEPI.B\2RCYۊP]y{uSP1xaDZ&* E %}JP9O-"Y4P(5 q~R7W0T[-1蓻aFԜf UPJf$sVsYn5KJi\ې|̥pz.L7WCŋOspU~{7=v5(W*6^ Lf 6+i~[ endstream endobj 3509 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1681 >> stream xT}Pg߅dwrw֏V|\i_iŐ A XdE!@P>ԢV= (T;xw:u^sf}˾'EΏ#/-sT|BFi;wz19 Yo~v> ^.䫳sjպ,~`e.'du>[A а 7fmzH%~O$DBA,$Xb$A?1X@R28H\%tL|v6dyMR'I e .+~YS^ƒj9:=BAX&M8-zHGӕ^:_Zg+($@KRll-]Cp|e ~ BϹF\ZV^zKPucF9}nplf$H$f]bWq#_ϘAG\tFvmo^~D ۛ_kLK}iQ!F1tlL|]jGd%c~.%Cr45w8H #vKcCmsy~1\ONxϐv=iqq%GXb紴DR(b'[jMpS6Rl2y?.İ=MgӸ b)25uxO"10?3ce\lDG"I_:]ݛ1d CegCKiHfӱtLyXM=fcqj|  ,R.?IMhlR{?`|R&夵օ+#V$:ew4vڸb16^Sd|߾P{YG RJ{S"Ll աj4p]; ,"foh35!>wN>0 7ȉ嘆er5l[p=a'bF(6TFW@ExJ 1NSelYʿjmrQN-2(.833 P B<av3oʕ{xMvЪ[Ӄ^˸)&׃w29-::ghQ^wUDnU^usgz3@gle1*Ae(єSż/ PRs^wx>ε  WDF`rٽG#6n1ԇ3cxЭ;~R\P:Sg$fz`>h32x;u}3)RfpFbxBh$t$&p(a04P0?xȢaץyu!EהL8 } 8ݺK48"${_?)w$"#m+8X|=ݞ]D,oo>/Font << /R8 3512 0 R>> >> /Length 14512 /Filter /FlateDecode >> stream x՝ͮ%r{( v2sj@J6,\h O2X:nCu:LwyM城׿^4m1_\tퟕ4]e}Lc{oZ]k{y+)r8I# {D{^.6,BtGlP"lOw>F`df`/}q"/?od'VN KYsƈg,2:6N|qdZl̋Ild˹-l|;نM718}Nbf"6y ҁIj+[!n'}/=$[٦\&?bI6Nl^i6NGk#3[ke~L*8S5uJHȚ6zMjAmj,8:"L]8Dڴ*MdtҬ ljDMM$$l"QV0&j %l6*f|eC6𙐶Rm6 ŝZmBkXm5NWlS?s2 > I$ԞfoIvzV[jlB߹ mC`3yU &нDnl"Q`&{H؄ox&CI%ۄVSI6(mB<{&˘m")iuV.&egI6r٪p*mͻZ@8+jϒ s1k{T}z1RkjhV~V$g#©ؘhc|f_S\6p*G^f[R©ؘ*$J{IN#$ ;'TzqOZ@8k-W(JeRWF@8AI%NY%Nz+dB,Rtp*/ޤuH8+N볏F@8{_h{@(kB©X=?Mf!T0@8{콑*׭7$T[6[KI=^@jCW΄lϻyƐp*j}=ͭ ?9޹V[{L8m[-ɀӰGfmD=Vg=n"dԢX,ZgMpp3 kLʧ䌧ZֈHWPD LY}J}_ $@ȵ@ۊ [9{}Nc[1ZqNub,p*ekaS[fBYf H85}_t$>gp< 8ԏYV@8~p*vn6Rã>^(Nc|'Ʀ5]Wh*􂟚 $|$JJd-Jfj̈́{<$ufW{~+ m^e" +!pS`&ڳzJ=u_ znByI{¨V5k@NA#Tֹ6 fξr+d©sA©2? H8r  J;]3Jej1Gegp*Pw$ >㾥M©SI@8V+JyFV$J;v_k#TZΉR) TOyJH8cR)ӿ>"t-OފLHwLw8LֲV*u>|JMS!k~]u=J&X%@.6.TU2TZ>dc~7+[2ȹʡ;-d݀hFoS֕'1I䜶e~"ky}eH>lO =OmO|yq2TmDz-O"8ΉPxL^a s/vu >Lr9!BzVf)rItdqZΕl3AnYmCyVIJmƚuªde3&w*ãiY;7z/lQwCq2m@ gp~gK1{(OM ~?Bg@cBtv"l){N lkwxFf@#j㺍=%,` g g!g,`Su?}V; Y\5p*:T<ϓ|78 d:F©7\OJϾLv X($t[f9jp N\mi爐p*~w+(OWSH79V24K8v3(S ]J?9vz)VJ,!J'l bHm [GRɄRnG<[lV8 ߫J p33b!T|\J&0}24'| JIMiH8O\bB잢SiƋdi<,C©xfسe@i6F̀l;{34]< 24 +b_ԧ1 qMkI{ـ©sjJ$u/Tkicoo Z!UvweWs!U߯ 7T{rS[Gp*N$J!TT"v$sf?H@ط߀Dj?? R[Hީxozb%^4~p#ٵ= 9.5@B͋G|rqdX#Tlְ̹{Z׆D <nVj_#T{<$Ne;1gO՞$N3! Bs 'pc N;Kix%D0"!˥t^Q$aDi;b(ޕqG 3bp*~Jg H8J18j >g7 N5R =E hgF߸_S `s }2=Bn(A#N㾑w| KI*H{X!ڥ!wۭ?iߴ"G++$xi%bz?h7h1 GQ$}nёp*V=©/Ɖ' a3xN8ی!T|u=hu {bqgәC -Q=F<TVQpwTyfi>^;Sy֡Ne)կWH8Ռ' NœxFKV]*H(G<St:Nj{O~{C©TYH4}@8j4uHRK!H=CH򐁤ѯA@}oT+Że"gDjg9^Vw4RowHsaDB7yi]HgF"r]J$伢8ip*A@Bvum]h;# ߖZ]'ig hy9(+WDY}HQ$Jh%9T2Tlr­۹24Z}+@8;ـp*6тޔzjH$ΈN a;r5mGBގzZ"gBz:k©Ǚ$g\ $J9g9H^~ ruϸ TZ8o=O5E?DSy!!TҙH*tM<'TlߢCHO<ړx~\*HunHHmqi&Zsl|LeD!z'2~DHQd!GRO( >P;5H 4sD@YT;72!wڹȠ L-;PɄ-, N8ZYp*V 5}p*V ~^n`©LW]D  =B8 ݤ{!W)e7wUAH{R}4CBL~cHDHc=Mo!I4gDSH*}nD>~F?TgY} R9 Di~Rr2Qzso'c?m# 7[<<@8x$xZ)$>@DrBοZF@8'Ķܙp*O.uO"n& JYq bszfn"i2N7!UZڱ I$_8Ti)cFH*$J;#J%k˘DSy6ߑHx9Rm۞5eAƻ>斑Ii@UÍUiddWBȴHcZkOgR옅B> d 7˶q(!.4qA(qUo"fc]El$J2kўe2Jga@aB@/OX% ٱBԗu-ygkoyH>D©cu\{L# h|tHkH1!_&~zqA 9h2>$i2!렖oCVSc,}T.}2 }H l@G 8@$D#A%+$䜲eHp6_*u6rg=džZ[g }l&b'@jŖFȹ.}S0MV=R= D9i#pҗ+@4>t!1WʄoiQgއ:# ęHuv@Jo>@qp*w0bd#F)HH;{ab?i~N&Z kL4}hnuȓXD>޵>J4H"Z:6Ou$DƳdQ:hJD+1gh SCp*~WBH (1 ixǐ6!k(NVH(oIaSFfZZ$}w R.lXUSwH8fl;ZE©NJ rlžx8}=NeYOg0D©Zɝe|=I(,$=w©l[YLUoiiD7U3 T xYZf$~;vXjNVo'[|p*6qC q fnw Tso&^ɿ9KES[eo)P*gMi!T&d©~651N,P*Yϐ ^J&Z㕢J&ʼ7©Lk"C%Je>fP©ZNe޺ 2U~h@8RWQ%J5atPpwTU2T'F JgDmܚ=XH(s0N7"p*>3gi-Ζz 1EH&4qaT<5U,H( ldhOGB~?H8O%i3P*R_lelk_ilޖk YvAe#Fu^l-0Nc7=֓Ў_eTI=R~L$^ϱʨ!QzrM[;eS9Iw]#gS贅Y!!GheTcڑp*s=fF©5Sn9KezzO©u'62!g+5BJ)TZg)-62+~VF!!瓓׊rI8Yal4e\M!guop{}N>x2"T<6wS$Z(rX?z ʺOV$p(ǓC S:fsߋDY҈\xr"TlJ;y)O`$`BZs͝w wZN嬹;d@©̟34i& RCo['(NeF TzO{TD{-R zfVp-kP©Q%e P$$L8+J*p;T~U=m;Teܹ_TDC*pѾH/@8e聨 ՝p*ZM鹿pS%Nc GBۚ9 8 SpQV|5v<pZ'g.=בp*}ղ6!e,PU$JsZe<Nc-7: r{ rTA@!T֚_fԐp*q"!UcxTf3hLUڲ#vp*-S_ynTZ(2XF*τWf©W]鉔k9$Jz؇Y[ *^sjsm ʴyV㰾.L$}iIHLyy}I&~IosIœ)@jLȦ}Lolo 6Qjdݓ1ӭ@8<ڏ=oOťT]H\n=-t[TZ&BNo+Y_lh bđDfg \yp*Q/O p5jH@SiMCM©J&ܚVNŞb3B*_;Ox }Ne ,{{|eFKĎ %l(^1@C6fm_N(a=>L?"ἬX5H8uq/W#T-p*V:~S]!TVOh6~Q'mc]T㰐p*-ǯ>OFVH8vb i.S7NL~}LH[n<'jIT7-\Sۀo'Bx(g߻H>f;$H' R$J_D}Jyζ !Uj5pi;^rTǞN!r0$l%}T}9eSin.r7ule2T-OT<>r J~́m rNֺsSz=&N剼񬱵tkp+QV7up>'zsxFHV3% v'y٢2!=55aB©X*{©XM_p+W-&(NJ#X,8 Wcp*V~cKPɄScv2|w,h@8;u:9 R9}*~BfA"}堒1-]Ԃ Nz%d"OA%Z tp*6_Y%Ne[[YL/ 4Lyj݊H39#\ h}B#QQ%\꺻OHDPDZ *H1}L@ o<{_wL᷂FLTEA%rVPB,g9d©<'J&RgQgNHcbPɄ 1[[^ ~*p*ў@}0f_]6*h ͯ1T2!{n   *hǘidd5!=g/w.HGfC% [*@2T2Ԯ8vLk$]#e4}}I{G3ch1eGW"]%*~#3{ َ϶~"Z?NfDߞV*]#o h5k$kKD9" ޠ^;rDԍ֗ ~$L:U2.&%/|H%=8ٷCR"y03Jf|@giȼ|Kk)M%sm-hd:$r|=AB`'_&I,!rS0/mBnEQ˼'EhIh3Z0 }Tc6_^[Fp*~ԟϋ7ʄS]7Xno b;g َJm=> Ylϩ$g6>mzzݮ"EA%ntn'f|!r}.7 rP|3-mGQO{FBZз T<_9$JM:\Ff@{l6,"OY}1s3aT뾞v!ޞ 5i PO膥8NCopdOf⥉PSsyTFrWXgi,ջ2@p*S}p'7F\g]m퍄S-`"T=$i+IUVїu -x+p*-D©e=DB-C©ûSy19o *p7UJ&RT2T- 8g \> 9ՈjۍH=@11=NOwa ⇫0~ f9p*~3 lQd}Si+]􉐳n>©\"VL(ei ўe YpWwˏ\p*)qOh&}hL#1b&s*© uZ&Tg{ Ȗ'DFx Ro;>2opGu©ܙyGv x8Ty#:R3f #C:%^cb4{́h*=+9Med%DS3f#x&7 L4};MeD'i&ʘ'g@ę#=Cs22nGB4  endstream endobj 3514 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 460 >> stream xMKQMroNm"B1Aɦ;RЌę(c"$I B@&Kׅn ] B!n{9ϡ$#ҾyȤL;OT> stream xڵXKs6W&jDٌv̴3Vi@Z$U' d(KG/(,,p=zGB A a!="!ϴWx4 E8uO+1ĪUS^*Tl*_,rF<1".7+V溺K]1B#+k+PÌ2yc46nKHBɼpĹj74CBIU֍BH#yN:ݟй) cO}~~ɕYZ-MoMi6V:-i6;co8܏f*үR,~ %R3S'QH*e,Bs)H9YK.S¿1o˴nuN~OXTw9-@LI/)&b/1(Z?Ko;tH#c:@ڂhU\osL.`p VWn{AUR1(prۆ7_n>@#V߉Wr@a(a3w8(i$#A8n=A,nҴbL \%[G c$.?硶lI$"q8)A֛4+*O!6lЈZ*I"ݤ9Yƫ c`OvDxyW8OLDNE:FPtp㶨u%a[(9 6., 6$\Xgd |øL>W cI{~pqܗS3qO6nW&ju,XwR-\lo!ۼ dTHc9r!℟ƿu@R?#؞\JN\:y=zQ??6W?ƿLwYyO{UW#=t0~=1oz,p;4Bȳut,UueefjH4;E pe8B\ ־fA~YO(hip&"(J\el;d#׮eb= 4^1owX endstream endobj 3523 0 obj << /Length 2171 /Filter /FlateDecode >> stream xڭYs_P|sNwWu:$%)E:$e.ϙ$b .-w eUz#z1zE\ 2?t2Hm_7Rd&}\)JnW\2C8S#͈.0⊰aF^,Te]n|_ <]0FR>P yiZA8bt %fzCmӡd}}u_5Q,M㭾& t5Ќe ,e덀8mPq-0.b[ ih46g8bwI[Q^v,)R&79cV0CBĮaPaPH0Yvf}^~CMUE*'ND)p"Km AWn0K3sTT<>X$:,9gsR;/j&b ^:z%A"|<׃ia]ߴ|I?v8DB`:~e\\c2[ ̡0.}T[l/Y5`=&e*BM8qHhٙ*[Z{yP$־uoM4CpUm^jߤ8p( d xi1 (ȑћw}s}JN刞\q7VT/rMӀ:TM9<\rGe]SJ !) E1fk&2!Eo.A_2‰m}t ~9a'i y$~'aKv9!`-`3]w,m;9_sE&'~5$C]_;{}=̅X!5Ht_.#ucXфz}2^(A7+:HN~(03O AhHkkko 9!P B1XOr$Bdx9fR9jr8!XJ6 O~nͩ)&?B N3G,/[6\lUj#Q{ 0¸ԟy#wxů0ǟb S.=ZIHRŻk,75` n]@m\%2 > Wy3ܘpo7|T ‚rKvZ\92۱ >s|HmnPvWQiض m]G0c& Rh"}Hp 70}[KN {7zKϸn!. mQ}Uֻ&dXa(!G_G(h*GXEv?np& endstream endobj 3531 0 obj << /Length 1518 /Filter /FlateDecode >> stream xڍWKsF W'SkgIU:izʼn$$7Ae,z ƈSOeUz #̊~gq|-97_=8 j^to^&}jSn'+׮Zf]۶‘dC'NKWjT%9J{W L$RO;b e߃.E @ hw֣7' K`;ؼoQmO2e!ꨡ)IVY]y1IzPŝ6>FnJwi"Y^nwחS3e}2%jN/'tv'g bcM+̸h&Thʘf vnefZx`dbv l() E(ͦ4K$TSt 05*JSmLQF1I`%M 7iց&X: 89ٛZ9D3~™opxTo[s9sc8*Z<<ǣIFR qi5.:,:WT 0j"]EQ5 W"Oq姃<xgEզZM:.jilGUU~K<3z\H!|ԍ<4Ww^,R-"^-veSnH6n"msy;A U&G$]9o\l;TFİ!:C p $w}, GER_y <˂) E۪K&/cPwhUr*:ԛ#QM>YKl^ҏ2,򱧿S4 T7"B۬NLN5XΞp9^?5 +oa"%$! կR9#W[<"n|ˇSm>=*fEڶ=m;gN25NZ7m~1T : f~}"Ye9e ;$ J׀DQ,Q:sɤٓ@ֈ4VF8v~"GhaF- &Ý9@7f5޴H@NwYo`,[#6 <߰k᧛qո" 'SD w9XfZ&BlU7z[[5sn urt(pi{>`ǸL9y.aINZfЛᖤenlc"p)ps4æ̱̓! p(-~0cýƳs?ԛMo0ǻ!Ļ7w.=l?rӼ* endstream endobj 3537 0 obj << /Length 1075 /Filter /FlateDecode >> stream xڭW]s8}x6(ifҙ6`5N6`3XX9KO#`GWԑ,@ 'JGbgsX;/9Kut?zڱA9Rr XZx?]!BPg:w||Lgw݄*p/דOTI|yԧpJbD;&P@S ` YRLۻݵ/}Pv `L9,NX1P9qzmY-j^e\|kp~90iAHs(0zgAuhz]oD՘(P=aEy5L-*.@OF$K"#m^<$[3.y IDVw)v5Lj!6P36uZWVe' FiM"V;Ciq+؉$򃳄'RfCv=SGz OڄT~#KR-g)jQo?}q(Ndp"YTRj Aj-!-#fVwL2lx.ʭ#~-#U+in}XMDl[&8fT8 Bpt q^C㾪sl]#at+N W6SexV{t^V zbÿmmQT!4|H pG9\18m:x :dYilqeIhv0FRVdVU@"Ts[0t RO/\}3=eGT7㺰բoH c)1YtxcCoZ&֓Hs!ѩ^_]4a:޼rFqkw7y&Ih.ˍs<\N, 7?! endstream endobj 3527 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/she1.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3540 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3541 0 R >>/Font << /R8 3542 0 R>> >> /Length 34956 /Filter /FlateDecode >> stream x;EIׯHsd(wA6$4m\2;H-f.5 ׸_WeAr߾k??e_K.}G~9F>])dپ7՝Dr_z7a*O߯euD0F<{~Q"_~ + DO++cL=m߿!)oкB-BK!N$9%"7Z%-/e'r*9Fȱ+Sɮ-NbKp ErI)䵢'c8;[C9|~לCՀ\+y}=ZsoF]f.!QWMb:^|bM.Or1J{q0H%*OЉ1Fv~;&}q*9F^.Fr1y/,SCC_lNM1BUvrrcg 1Jiw+]r1z-˓J5,n ! Z_ʉ%>#T W}-׹}_b,dN.D .y_1e{rPe^-ows1= Z{^DBmb" {אc'փr?ԖbUe&~|s}U S'T ekLJ+C6y :̲ur&| t9dgf{ 򱮶ʀӐh!ːpj+c5C{p*4显j8'{3#T] [_reI\Keiȟ}m Ӑ_Az9%NCSV\ɀܼgnSѓ;` ʶ)냣}9@8y{(JeOA׵ڟSOAٛ "C©ȧphaNmp}> "&Yl̈́Sbj1r봝7Ne>i*+³?pf=*kk©ȧph*TSضF©Cdј3OhFc?_p*rϵ]#T䯗5q|©ȧp\a瀄R=9L)S1ԟR@8YMOW Tu.TdNE6:, ݧ- #nm72H}}8GB)v&p՛کNe@cmJY|"i[Z"Tt"w&J;KFR:};ίO©Lf>U~LJi my,~n < XVۚg$'Tv2əp*:߫.p*+x ^>y'TKߡ-SSYg],wNet9$sG@8YVE@8mRv7T;@(f-SYVSTAQo_.1S9UU2T}FL8ed© NeZډꐐ*gdHӑT ӽ%OYKS> MT|Ip*+ZynwIo{$x}* {b)=|E HJOQ{z/K,G Mr3@8<}{O:CO7ޢ,仾UQNeoj!3\W<^i\\ϐֆ#S#g\3ۉ!ϷLg)BBVrzN)K۽S)Urk'!XV'sN_I 䔧d˔"Tٲo "ot=R $#+<yM r,ߓG©k; 2 y$͑p*X;T@=cFBYs0guub"pzo?K]ZOB]tO©yDp[%˾FFRۨ©虈۾Y^ <_޶~{rnnI%'> ]@ }V6"!ٻfUw΄SV|"Uʱ%6⼾H yҜT*׫TZya'PH€TSQ%Jw^YLݪu dWY%J7dRFL*TtNjH%\@FR>Ij+$Jڞpy˖5t/n6Sr YՎLJOW(=v[>I陻k%S;w2b HprLՓVM2!߉.l"OOL.N8ϰP9?jeE VNl@JcTd"zԚ]@8AQ \!_zin(Mr?j3}Շ~p*q>:ndBf NRORDAU״ {Ͽ;ݰ{ ;kΥf©.Nٗ{u&qS ?V.ɚJQWYoFV[C5!F{nU-icZ4+B*ČtC6(Нz ]3ێCsb OObµ̟'@8/"?/@3riϫeUȲA(Qbւ%Q?[5 c9 -s~YBLl3+FEV!Q6'Z_Ai~l dA y~́ӖvքgoMa ?jn&'QK]9uqE?hy~Ա>^ъhyzS(Jw5yDfRJ:G$R5@8˖I>XEf©RoBi[r> d ~ pZNH$Wm Z] ܙu z]d&){@J8 @)<*3TIz5-NeY'xTfRXL8Y*=xTf©l[,J&uELJyt bc}=VtvWKBO9KB{)`yneΖE  /ru $\ˤֺ/W|?eRڏDDjC >! ~]ַ{/2>簁r/f|y<7p*6GНY6GНp*֕p*nQm2ˀ̎*S%TnoN@? J24dݷZO0RK? 7N@,H%8'۾> "ߧa2x7$u@^/B.Xeitץ3:©t׹a:?uZi8׻n!^U JF/J**=xszpݹn{'#T̺΍2 sD;24e`@uzws =CRٿDLȽT믉*pK NJ& _-puhS ɤwNLT,N9SyHMŝ29M&5w&ˤd#w&B^-dTP/Yn+w酄ļk**{ yfNbvoĮI?U͇/_|c_HbX1-`ufޗR(3+DWcw|Gbndbrq,gM#NAkA3|k*9q烒Jyˡc|gYRVxEQE##H)k VVw8j@fxlЌU(fF:$2b]<@102~{N 7H Ծ]i=(F@©t́iT*(ˠ <4C|}2_sT!W>Dfηn5Nui{ kuފL YVfR8טk)T25M Hi,29I d=JT +i9FI?\/T&ǏP?NK9 % c.!vJ LyR( 1J4TE 1R 1OYQ1l9J1/Qi\,<ìT 1JCbUlrr#D+>9a%y|iŞb,<J (o\R1{@LHЖTrg%󄡱xs`I%z[3){K>ҹ0ВI6g©gx\ t@EY;3T 46gR:1 'U@n3)vTOۚ)Sh ]ҺwE@J:Rڹ::NΤPW'Pp$χW!$z# HNb>5mTE^HA{ۻwɤR kݻdR iT.>L|&ÞΤ68g­ieã`S7YX{A+Rn5Ĭh\b|PS1˦s1O0p/!w/\</R1!s]兘=IǶVx!q{J/Ĵ}LL+]%D"(ضf[j1.uCemwTI%DŽJ?1@bZmaBE%(oK++]~bQ"!>JӑRW2ĄjJy۬k6*&xZI%(٧VZR10:$r}oΝ{jc㣘+*x\I%<^9ZR1–TrLȡTr%g{5xwI%^r搐++hǫKk5_y1h=(? (ɬd!J)IM%[K_ !s\k*9F[p:1b.]BL;_cTA@SJ*9Fj٪u+'8Ϻ+*9&.K*9JU3)&?_/tRM o^{K;" ;{%""rwq ^2j2!׹ST2Tw&dR9_*kK ֖ᩐIß-R}VzLJ9R5F/ɤTrҙ~!G^]G d 7ZH&gPSz.Hd,䒁H=䒁TFa<NEVQ!O:V=zO2<#K*TI) T$瞀Tz)H)#rO-[GNhkU). bRZA&0k2Jo! bYS1O8-.v!F>Sf1aP:31WTrLءTrL8s(䘴#xJ_?K?YRYgIY,)=_L}4MzyOCn"*RBRy7ʚ|әTΓ|L*KTɤ:ŷHmޯk ?ӘgfVԳ7ip1Ja,HC`Q""`[DR]61JrS~Iݔp*9FI?֕ iN%(тvܸ.( ,1Jt)\'!S_nשqJb*΅\ FI_>ONz%=ѷceE=c?[պ=ZDKd.9D+; FNV"W3!b x%^c D>!=b^Γ1FIo\ "FrZݲƤDrP~ǝM Fq߭rk"Qm"){ByzDRc[y|h|, cl;gع5)oYP FdxΉ &^N$<>wku7N!O_9+opY 2ae2ܑe2N{ v:p*{$s]VsIJr䉿'҉6T &%#WY[' )fa@J'\4 NE-t=8-}<N01J9C$yjr=SvvtUA$dAUA$| < ~>!=).YMAH87 w\u$@Y.s!8qq l9;6H8tCR1> "0P8 | @H8YB&&m p*ǦxS}4NE)~"!T}8̈́SO֡H8wJ̈́SC8}+2g6aS+"w:zp*}У[2o)e©tu7Bfϰ©tuBgeTF g#EDۄL80ۆ)5߽*~!!O6AƁp=wT!Tz㨟)تk'{P;ː2. Itԅ!!Opj]ٺ$i\F]d{/g-o X.YDBJgM~RXRʦx6H)o,_Ivƣ2 I)k6*Ð4rX-S&]iu@(y(u+s©,s[ێ3$ʬ;1?s kЈI_XcZ@O?S ՎPӐVe#NcmOe:}NcjOPSQ= : nC©,W;q~ pj)$%+e U\H8n5T2Ttp6$J *P*g7[;©h&\,gN=~_ {c me?˛w߾> ei][ ڦJo$J7Gep*ݪW{V턄SQC9 TxY$3nnБp*f(wj+.$J7?H8^=*Ґpo>w@8>@qϾ©a 2bCnM(VeSל9G©w,7yoX%nU,+,w, b3ab$Jvxn3m_Gp*tep*sTp{^9H8C֣gLSUf^fr[@©P*#ޭp*lX!TySт9!26qN*A©he cP*\Kp*V=אp*1"4N{s͇h[ W&}͇L8"T2ʧ8 ښwk?rf~׮%2Tv듛wzL8y2˟kq`%i,e5*2TzԼZ0 <nܯ5 U8RYu/(6p*M{k#//yۨB\7F%?NCUȷm {̀z2'N86oqd;uqK8;@8W=cK;:@8 1$ܪV=E1KL8nhNKϔEυbKGHȽT>/kEvuR8 _O.$^ϋ}&}LjW6BVzTɄiUAyγ%d©l4'|@*_Q%JI^pfȸvp*"xQ;k'T%<]?w=W7P|};h{!{;ktP̻8b%\Wz\ЬBZV:fWk|ҼkWIJ/;I?req6/@i%yhd$-!)9 nn~$HMIi2N92'H*S-X|ʷKS.1 Tr$cJ.ޛAHG]˜Gcs^ y k>PYRH~isJ Bt̂1(}~QbA h@kR (᭨cisJWI!>9Qu[Rc 9EcAY%zr{<0FJuDkR_ƄRj J,x@cZx)&aLp/&aLp)T3cWTܯ1qWui‚5(͊ ѤR;ƌ}ɺ:<7@+i )qۓInL Br'b6̷IaiYM{8{;isq7 yt hXvTe:-@LHWĸ|Occ1}c-R3ϗy|%7C 1TJC3|nbB61迯pP\ bQ\^0k!sX0FQt7cL8(<+1ȹaG{Û`午1wTf @o~Q6Ȓ>!Dռ ֚yRČPFByX[(@f l\ML-gBf 3!3}.On΄Sauk9&T3'TW1L*©pm@>-58? !s݃_{#?NE+=4fݺ9.kH;©X.7iğ9?|(I90'SN8[9,1VN'OeP 4e R^ȧ TE>d Jr?qZO$!;Scoeۉ S/a@&\K%{K3Td\◫畀p*z.NE}35Fkmnt&\k @*0!ҧ>YkH8ei0! NR pyp*ݯ+LȄS} p*)a2r)GS|p*Vh$iXqۥE$PIF_L8xS龄a:@&\XV%k:©t/ =,&nt"@8sv yS;|Gu'tJ$Jyi8 SSYs bDHwXB{)Ի:>v?Hd{~}D\7:NsdD/;2wp*ge"[[?yr wWFRgq$dG-$Z롍SQ_-߱ Pݿ]pS9mDK>7kj7[( 3RLF3ˮ 8  % ޕ^͉QϯUxNE{ E©,mzW!T.C#=ME©hF9;N;%z8 Hf{K$i7D©kp*;:L$v}I%JЮXYST2T4?D44cO+dBNwSQP ԰Z[޾8IM}n#)}*eV=^Heښ~T"TTR# T s:ϖ|N97,&L? mOHӰ)c`N:Z ½FB,l,W x7"!W}|US S=I@И+Xp*lS=oqlŴ'yOW#!˭%ȄSV ?ԭ62!W=LȄSqG"J?^Z$ןj1N-5@?ďSqGG4#D6B '])WTzY#2oSg~d©aG"\lԝ*NWZL80*o5uSYW}Ƈ@8s 3?P*ryāG.^ޝWGR.*aNEPKSeSt4$Jw@q6$s Ss8 UMa@8>7ŧ}TRsSƴ ;7e©>#DES|NE~o=i@8MKoqJLٵѪe4ԩt>p*۷ !_w0?s _ѝ b羅#i7stE©X5꼍l j1JuNEVSF©żj } X53 ҳÿ 2˾@cVNY/9O;JH8=a] >N&D#?j~Jk3p*=Sp/kLȽ.ɿNWa/lu2JT<+vV7o% < 4/6w*r<]H8͞ߣuƴo߮[$Ww!R? MރJ&J7*pUp*}APɄS';R9C*p*/: fȸp*Vh XY斀*-?Q@8m{o|;TKCRz곽2Tɦ}z62[-Lʄ|Κ]=J~5ʄSidiD UvL#zLLJ: }.LLJT @%<#1 \w9Bc&P;FhR[ϻvo_S飄hL}QQ2!z*N/ʄ̢7'0H!>+Nc)1V{]'eRdM'ss, Neߌ~&MZ$IeF :Yk$y ̉v ?T76-vaL#S8%Ni?c\l!D5 1xuN;HAm*!&W&CL8oL ͨC!Fv: 2bj oy^N (yg]AcĴμ& ;2yclkXAiCW` bn(Aߙڇe-DA3jB*.Ӳ[B lsLݭ2'bt>M΄S- bc-NCE©h/pYwfP<Gy#T&٪30Om@h΀si$dmzg#TܦSGNu.6o5N4J!3}nOʄSy6TL8=TL*Y0U k* OTLȌE?Aeu/xĩR@8;T) Qq T&\ץ ( JK_H8 2TtwIPpu (AI!NʄSOAwaS&Ji@J;+$䉞<t9jnG/4&6Y$Y  yJo< tAtp*}^Әѧ5 p$J4dg#TId裚|.g5%8>TlVɀLQM}^z}.;)N85jfp*6iebE p薫OʄQwSc Nj =pUmT4lVXsZaMܳF ( b{F©K'©yM^Q._sτSF]NkuH(w^)n 5zE$ML$M L$J᭦H8xM)NŲ5Eɖ 9+T"!ڳHU6$ |9HՄՀSь:綹pp*8ConG5]Vݽz9roD 2uN$eT~wۆ$f8-Ne4뭐p*<`©f0-wg0d~kۮi["|2TTZRə[[sKint]ǹ%B湵]B3s[El_{g<7 ʦ5s©?YS1O0 һ^X7 ʱ۴1 g\7 JkX c24p<eG$f*8 ;M<7 O8 Y*JeYwpfE©XsC©t?1 ZMtyn@84߽VTu©{ts݀P*(X 8c݀p*V TzODSa1c[S^0 r褘+#TZB#vBfOjN@8>gT^_1 Stwkp*"*OvʂRYe=Izep*zrH8W=ǰ%JEm ;6a^LNV bг,T| 2k!TmLeCBscn N*} NeYbLABczmxS{E|ZNŪ,4 |D) J_/- }b-c<6Sv cj8NEi#;l SGB#601lac&81Nϙ 33TF@8>r{2(|#n9OPfT 3TscѷZ {ُ{pAq;#!Dl8GRx$jO !MvU,Nh~&LJ{ӑA IBRmNgدNnT׋is+$m|3HSwpZ&iO[©i|NNEl;jIB֩%lk©SGȲ['P9-'8 QocLZ©>vҚy;][A©oR:/3PCWZgo*T0CRN$4`W5Dsɻc {M}Ҷb! tq&A5SJ 1Jt;6_0FI%+@km(QS[1O5-L!^OW˜gNg,僘gLݬ8`Lۢφ1+=I? .+ AR@ss̵\?,z@HdVBLO^;.Vߨ{c)gJR gUƴ4 1F|/Ubs!+ FqWGN/Cg]p)5L}g`;$j/!^1p,ALؕڋCG@w{z b1I@3lJ*ϝ*q9F,t%k)BQgsuǏ>?1 $W 񹇺b!& OJ <J+W9DΒ;:If+1FI)`鰕P-ǘ'sخRy5g@ڐ0>bMsBf0Z4ɐp*Ǝfi00t4.a'sa(N^@*0sba(2-ش1x"%̀Lɣ@8sFp6$|m[- >y{< ".d9˶n}jJp*kc%Sma;z$\Lm53T>.̄s9GU NEzyp*}'}f©ش83Dw{<©ش83M @8>3:uZϞ53!Ul/8:6ӳ@Sm9ƑG62`=={ 3 16sTH#rC6'0fip01k=I%{f0d} NWaݲ_S-W'Jһ[=KN'd*i$qSC>}"NOH*пS=KS>}"< Wy'}zN;5N,/> 8 }cp\ӏ\'sO DB>C]&J9p*:z~C©*P 2f}:x$MqGd$r^MRٜ{5NCw s3E©IWɄS>G]?J9op*.ּ9MI6 P6r˭pmר?s m64}zJc?XhӰ Ӑy<Nۏ $;st T$ёSY>d©)A%JeVsy=p*b' mN+J&bz©'©-]njGNE8 T|}KRSyd>17IuҕSY tt {y")=W´LJϸ;FRz^ gFRzJo07lLJ+{?aw'U}m\I8f$ vq? .j@auv4 keʾ {EgxiNE"TjH*{QER{U-}YV{$/ER9jV$SYlVr=qHӥ>!E©}9HS>^{+ m"F.܃I*'io";xݲ3T~u[pvFP9ŏ~3Tz-[ZY-uH*907N:Yp_rpaθJn0N̈́So,eLeo zE3䑽j bio"\f&~YuDL &&©Ҥ_~!kT L̈́RM};$Ì^ Ψ?^ .<baF/NE8ҭÌ^ ʱ* S0"huA@(U֏`©XGa SF RYtY@8>)gT |V/J[. 8 zp*u]:Nz 2Y_cp*ydp*;?Fekzp*6o?CGqR/JE`JìӐGfit8 R9Zg{$JkY@8Lz34ғYOtf>K0KMӛu&)@8s.!;H8 SzP*=Sk1 .|w RYIC!TIm?Je՟Δ]@83[8&,2$JhH8v=f!Td΂c^Je_ߠc.NE'H-J;ހp*8B |d g0Ҥ>zֵ bg>V3T\9@82+5-p*ș4!e p_?kwdN`ƌ8ufN;ou9gN*Lf)~ Me7DZTβuq,t yߚb+>OmqyA=u :{D"17HIEOvRR| tH=Rź^I0=H*Oy~k_p*~ m5>Py@8ġ@7YpiØ |3[GcڝIe0˖ &wBUu'3Սp*}ZCeS&Jj.+1 $>k>nU`M$xnYqԊSyg_G\[8F©:ˏ‘H8w.ށo N~'H=~om"߈f5n&LNro Ơ 8iTVgog©^os, N䃜ZNz~d©,+΄SycT;tFwZ' 0|;N;̈́ۙp*3y~H8scb7xȀPk8z;=ۙp*fldHsVK|Dp*׌%k pc&ONS18};NENs8y[> j,>.Bkij*ՆB-?JlDڨ^Qv>Gehd_0 C!F,%S,Q 6}bzZ c1}eKa^P1ĵ0 bbka2DR/HZoi%}R_i%k+BLqTۡ1FJ!&^ZpJ+EӦ=6P1>a>xRy|,wa@'XʒcQkIӪ/-ġ#RL6D D C+Tf>ٴ[m5Sヴ 9YmsUls[u[bz &J&ຟCZɖuny !Zj%`K zbr=&QbfJafPQpPQ%f*7 1x:ѣ۵ /GfGh 12ĄY91W 9E4k[ˆ+y9Dښo`%Zຖ"s&f'Q,`;1N֎ bw~c̢bn1J6Jd1J6pdeE1[񲀊 9Z_}}7_M($ SY;.mh̄8˛gʄhQ[WZ,NAeez {>̦4e7iK&lJ> "5©hfK!dAkba<2cCgmL&JH8k]f+n$ʲ6:?Ssߍ.;U&+E©cյ2Up*}tr6O©ꋶ cյ|W&d֬U_'ic $dnǪd©c4.UぐY@[?oN< K4;q&%vk1: r.iX"5mG©茎="TzO3!Ӭ͕&©Zi'.H8mn>:>NL\aqr|S>8}y©hg©hKGk~LTھ]晓 "WggiN㌓Ϝvoip|&\JފA,N4* ?!D©ta3Srȵp ڈ?jӏ\UY-NoK0@83S$\Յ w; bmnS9SOlz&\5 .ؘL8kt ^$Y2No K~⭴f6phv ";#|τSyGL(>FT>=Nef#3T(vf@81}|τSSq Sap)w֞ MƁ69+ ?_I%]HըHH8ް䣳p*6} {@fm6Bf4m8©QQSٽ /ٽ% !}p6Ne6p9>g^!+l80F©>һ}5JمW#Tpvo©4 S5 Ry=8Nw2N$Mg(>ݻ34l:Kgi\|7.5H(w8L>[p*p*iX#aTYa2Nep*T Q SG/ NfH8/^4kn+=A©X>F©؈@G.{R9H8Κ#4~t TN$|44tp*$a!T{m0#B©g$_{y5 &zA©{p*[RU2T`t !Tށ̣k "5d©qA%N*p*6/dBWa *@8=J&JoGvp*sDž2ib|di%sxRT#`r,9?X-uA$2ojG1.N[ FBڐe_yR+zU/2dz ;;v!sͤ[eTСH%'^ "o{}kaӏd@v@* Hzb9_; 8A0O5%mP*e9TT+>p*ڹD U J/~p*p**p*B QSz3aTަx7^̀Ӑ'mW34]qF (ЪSٷTӰYn)τR H8*$JmSŽfv]2TY p!tE!T(&"T&sfmp`HH8}0\!$O0 k5!Tz?p*V2l=p X$ia+G^ 2߱qhvFyݭ N\ JpB 366O©A]aNEOn'vT6]A:p7 $/{HT܇1 {=}%NdL$JҜc grv8wh{拄RM恃S3kݍb> 2YF"TzkRBxoԻxRϛvSGTtG4ETjIܚkNEm&5 wB{P 8 SIɁTΰv 91@6V1s@BV~5AioMg r7%bp*Vr]q@VsgZ&:E˚bob;7Rɤ pY5K* t΄SY%վi KGL]amnBgDޮ( Mm]Am^Q%N:J&dم{T'>Neo~"TC_MV hsS5V"Tl?*%v[G&{ݿoaB.fi ;$T@eRR! )hJc-2V*.Ij*G*׬T߁ ˾BRy k_KDB>oW=+SwH8>GgZI)=t멗's[ARy'P|?$Y>L8:6 Ⱎru=mݒ b"WbuzTPz"Tl:ͬVKS11ĺ(NRcΝыܗp*:Mԧx%Op*O7jлy%Mx3H*;0vGhER#NLHF @efTNoIe&Tl#TN%<7SYV:D s#T7w rn H3,ԧHr}V;a[D©t'R9 $J]۵r~LȳJw ܹiw! 6kJd  ғǘ<67w©tG9wR9SBpcLD@ȘS0q; tpɣT]6!8Tk;__LMY;5?WE>_濫١Գ1Jk~ VBL**9Fz,ſ((u:O7DB5Ŀ0&~_c>ÚkpŘtTrL&])&^AO7DҵbuxÂJk7]r@5[;W$.?Jidi}%'ċt٦ [yϧU.?J _{I!_ l'k6Ť cjbe\jSLz*n IOM1/7`E%otݦϫK9I+J=>$}R?]~k_x k6m_ې!mCچ k6yVW͛˄d[V1JF@? (ɹXQEI<rp 6Ӟ/-a-(j1D5zmlcQ󟁘g͎hG]yT/RJB, }yԏg7f~(GVOػbg<*8icJ40QuC'59FN{*:@̣5yf^ FȬӑ=(I"`:V[@k.%]Ęښ5ʩZ~d>43K }_@1&VD gЮ *΃Svx+ s+ }E=/EWC/ݧ!q߀:u*c:lZۊ1"W1ZTT l_1-@LF!-yJKi:\ k)9&t!J0&Z+ ]s1ͣj]k~ݭP1φ݄6͔/Mじ1F2Bja1Jݦ]3>- {g -4[l;<>2b'vdǎ"H!al_m27 y°io,+l1J[f}-mnj&-y;9 Y[λbL"js%IGŘֹ&M.Go btM, ! 9kw f1JdzSv%6u9s1GE62`oT2wO! llS=(MW!*(*CAj?Ø'_;cZY\:c,܅,QϢJy~w\gg\QbBn,IQ؛ҲLȜNժϠe_̢\dRʢi}HJY{[PIv}x\ͻsYϰ6F©g#}[:'NC[uߴs J.fh5H8sϭɕ6#'R%1*n9|ϿFւD蜸_C&ƣ\}yRx컬DK%jƀRާX0L߅sDS f1O"JL.+ѲTe#h*,jZt&MQei_0nuD ?M>/r_C1W]c}h*¹3'\E&E"^@d<0 j}v{m*cX5ey%_VMܕFbFOcj**T&;5#jDS8tDS)WVpӘh#z2Mv1ׯ{"mq}Q;gSTlb̘DR9}w2T|w{hͅ2T|w{BzDSm3T0M|ܘh*d8Ϥe$ò,ZDR 嚸m``{&2TlZ0T50 ׇ43uK@8JsVMDSy L,Mw}.M;{ʡ0^6Ph*6hKDSٌSނRN5ghyO9&(y &;d'5zQgDSx޹DSi}sbG-kFM Lv2߳9J4LTFMŧNL"J!^+j-l~`}?L 4 ND4[H40c.L4G{ f} $ٗi&x@0c>W84[PA+4,D,1T~8kT;axep'_D^#h>)3TR^!&OVI-JDRickzM+eg?M{Zb.a|_{M庬f`ķ@& rQ8Z_QݔL4DS o]FĿ_DDRA1&i&{gM}R5M|}˙9_DDSA'Lhh*g]K.&QW!Ǟ D$󩑐1{orf@&x3T?&Ji51T|{h*g֭ˍj4}t"2TS3 M%6(0TRCe%JifIx`DVicYx&h*>hD4 QT)wH*H䠞EL$$rh&ʉ:fc"`<ם%I%P$Mo&ʁkz1QT~~oi&S9;쩴-6dҺhlp 35LOcu87ٺ~֓GH*Sm0T0b=\bZzh*ƌh*[6h*o6ǎiDlL4D_?Viܵbt0e)V"žocJ簉h*6z0!Kx摯@Ӱԓ M8ޙh*M^k=N@ңb{QDSBOn>+TܥovvYn0ՠ3TlsG+My<Տ3TrYS<8>Th*5̬DSCヒ\Yf5lF3)Ow11i4/&iɩՙDRg/n51Swem_V_B4o?8KwoGҟw0yDSif;Ĭ@6L6h*{1xJcJ4zb&sLD4X ޡ%ƨ*f"tNODS){&dޯrfj(M%>[3TNYSpwԺ#h*=ZT(aN!6IC&ռL4[ ?`&J(0핸L0TPwN>L4ğQCK@x8}'" jTDRqizM|k*Z%i`78W2TC{MX*r rya"\Иh*X?SE MXz#I;GMIwb">(-MW0T,~%+eki_6!َOEV"xyC/@0p Q M??4l-gDS:ܷ\>_@#oӢ\hT<-a}-WV ZFx"zZS=_F W8W>o,[ZDMbp DiG0wyl`eAD:l -^ݘޕi|;}3}bݺXfeh9ǗڇDSU&"D e&N h*R\s'eQ,?0GLɁIV'`a <-3ED [+`h*0UV"fޫFݷuDC̏Ye%buă߬M=LvT'u۸h*3&;w#MxƓb|SIHwUjDTfXx0Tlx1Ujx2T,&9^LTɖJ_1U0Zk,|,dmdK\;Ws(RDvܷ|:عr}&"T'/lU$y* vOcD{VOA?^w잙<˶:m"o[L7h>ɰGYh*E#C`g0"OL4#F@\u8&*̪cj\/ۈ3d"+mvf+T܋eTRwA'ܵ{'X6@Dۇf Y+ G&Y+p`ym+{eXpya"34ܹ2ى 7&Yq\;1p;'1Fx <ɳNfdh*m`ZdNj"oCǝڨo`cqJ b&l#8"JuDv9MGM1{n1Tr8 #ӷ&)&OH"[w+Ѣն1T,sR}%X>dL4.'ETme=w3rocykFoT4j(%&ib+/n+T9L4]>t%?- endstream endobj 3544 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 472 >> stream xkP̽4"$XeTT|STAhiINRV2.I! n* .gp%_cpp Cws;d3R+fד Rq(#K'/L\"yJnC^y;zdph.ԫ soG窕v[X1;36b 6WvnBBZdI@s$6Ćm S?B~4M%n9˶Qc08H]CwU 9 aK-T؟Tq8 e8e6-Go9v$/:,W^ES>2dG Lsn`Ѡ2%Ht/Z ׁIxPc7mױx?Cap/ɖZ~A7Mo1#VxgG{纯(Me! endstream endobj 3548 0 obj << /Length 1669 /Filter /FlateDecode >> stream xYKs6WZ(ޏL6$5#'׻)S;,\ ųG?t%1ְDB(Lj|r<_Wә0*z:IG,H\=/`IdU'ә4% 3[Δ fh&l:caS_DZWuWƈSG~[Ηa E嬬%0P&|)7I97i5sg dHbOMC5њO$q"Qӗq"oHOУ"D 6H{G 4}Gsś@sebLm )jMgؤ cvUV$+¯MR춋Yo P^4 ēw$65mySrm<+>n 6EŦȯ( jzX-Һ\GP1A&;\C,5|CuN[#uS٦ 8<}\E2P3 \ElHO@9GuR7fF~۷)xˤZ|SeU;WudXt`MjNqY7zsΗj]w3( &L ݪ]+$U|]Ũ5KkcxalK:#At"-CJ s7t(vQ'h制aQ6;lOjm pqa$NMzdg8y|L,7L!'ZLd٭"?vC(o3Q>&D^EsCg#ܹG=?G|(a]_wط$!9,N)ξTAv10*MmWي=lA*MU`DMLe h߲Y'!HIpufDāگ*Avܦ! [sBcܼhOء\JL֋qu 1Fp߀i=!ȵrF̀' fw]νK&{A~&5mZK!+nm2͊?fE Љ.Vb|3*V]曮ֿu&A73VPIG0Z ai>> stream xZYs~@UbWb #ڊSvŇb9CMeB9>_v#ͦ\LmT`i"3Ii -Z@LGM-YE<:2XI1yzXPBR驣5L:O=-S>jR8PN84(C}M50V)LEORt"Ҕ"I&NTE}1`|>7(I|x .ArL60v0SAJb+;fK(< 47AEӷ:ްF`ƱdjPb"I pf@ 74!8%Pi4ɤA ̩d rZb6K DyP&QyI90{$oT'ZLKEP6IdE= ZP`nATlA%>-Ly*â([ ʱ0UPC )І6] c Y,SXX.H@H6MP9AjrE"1d$2$QpI> 2 $ZcrY rDF0PbdKz}vv,{r DGz?( [m}+eNo0Q>dY L4dVY"fONAhé'_(n ;f~ehEӼA|TMhI#tKmb[^cRQG F93v<]8IaC/;Xs/-'8 ٓl$y}N R&pd#JT^s4w(u>3EO^q^orٽçଜTḸXJǰ|PhP_@ HE&#YyUQbRŸ*^>c`'?g׏x|j vd@z b<cfl/{:= Xz:DpXGP͖߿NGayRN0MZҒdMM |%o7nZ@$X!l>8.?Ox\<΋ӳ# E/{R ΋1'g+$|=M!nWb2j-of#1 \Iz/T|ͳog(+Gyv$_P<]fWٷ??bўrɋ;/Wz.?6r15N3&qyC~z~NHc0Bsȼ;NEs< G F)nEp` Qru&J4D.P7A5/B:8n!$Imr^֊-K[<7LtEWú ?xX=vMӡ;V!s:@.s(tp- \X9#5 D"F*"k1Xn.F#҇큭l/z+VXYhU[΁57bMi˟ ?`0|0 5 }Vb0ɰm,TMǵ( ȵkWˠ&F5ZNhL]nq9XN̖+1 8peNhb y~D^ݬ̓\뢽h+ڊ0ۄ]8֥/[R˖xj۽c"wPQat#0aW+)WVOY%j1 kZXK2%ev>`Sj-`.+X.PCKQz`M$- 7HY PJe*A,CI(`&{Ff鮻v͓SH_Y,.EEWЄ,: Uҧ@ǀt["֨kNI]rnoa^יQq!RB>z}t endstream endobj 3560 0 obj << /Length 2457 /Filter /FlateDecode >> stream xYKoHWhs1zXpGQ3-1I4H*oU?&EٞmfWo1BB^hb,(lr)/.)/a?Ta2.\:Ai[}%',Ȏ8a׺~^=,pmѣQY)%̈ f \*ƋUڡ0E_jKa$bdHmdW 0ۏ.Mm+ۧa5K0zf{/YQ70qߴaQBƆU}[8aA,p&3WK[?/_} '?SEZ_/,\,3;=nQcNJSJf.e6"%}[+˶U} Isu 1>)X=$]<ЁI =bET c,adqtu}egTjߖP0]ʚgM]m\Jb9 ض{(*qPu<d?Bќ =N[t-B~\].X?{+b/G0ʋЧLaB>@.WFͥo|Gi*C D&1A4 Nfl4hf̉Gc38L<q `ĞQ܈]9#;ĎVˑ);%;hic3;@˄0.rR |.H(*3`JOdC5cC8PG>i^0eO=i觫&;k ;wM8*9H5;a&(P6يp%M,Q# aȁ)MYg0o$i0Օmz܀<iFM@aqF!$s0KE Dc;ȭ.ہ k3!xzXT9-h@sc!O(RrhC]  WʍMB Bwƾsa8.>}xnu U1fZ湂:?K` @nX!2/ȭa 6 M>SIg!zLg+n a fc;A"rR'` l3Y6J& >ᡋ P?6F Qg.b)۲}ЋO <4~qU>Ga~~<<%O p; \J8O:CSH!ұ1C`:w{7>g,S&N,#M48k5FTzd:`sr@`[9: p>0¹fe%Z >R :/St|G7E:)b!Ye>2{ht[boP8/)39WO묞oLza 1@zf#Qyp7c\`8mLYontrz9[ɕ"BwXIezu!.u !l;_im xGYUuZ?p/%b 3%6_I<ґ)P&!kM.P7պJ]iQAIVCfzI;U]Gy>vnGD1`-%nԂe$xj_qp n4dS\GDH).TA7uD&2 xP/>9fqY#KJ/ּG3ȒqH#ˌ7 Bv8nXG,GVDq>Mu,d S]Mq̉8f#VxcD?xퟃbm^Wpy1aUo2Rٱ)#ar8e7p g:}^'l/g> stream xڝU=o0+M[d,E@[A,{%nY4(<<=SDGH0o~npɍ0r>˕pu/)6?ෞ8 ڜ]R(FJ{$KLB(L@]gqhB1շK./WJlJB P\ىS ȫjrVf0ڻns{`m:&G=Ncغ>|z `S;>/Font << /R8 3570 0 R>> >> /Length 6961 /Filter /FlateDecode >> stream x͝KJRWui{5ԬƒBX*UuZBaQ_tn?ˑLKL??ly9?}q_,/)m[zRsߗ`1aKYGX۾5 i[ZohǶ/03)u[ALsQ}#+FϿfs7aY^>y~.Ga+_۲?ӷԎ۴-e_?/oQeێk9vkϿW__i 1[k^ɲQ3?^~/eϗB7.`nRk}s9 iz/mi}n|A}ٷbr3-o)VO-)?Rn\?ۏ4swR[ݫ޺k#-5V\G[_7pYgwÿ~=u*_c~gkNڿoڟM>]y/ymr7:ݥج5S_V!5?qV%%/]7O{5^*"{&Fny)bfLtc=3Z) 1ǁَSj[B)MB)jE!wQ-ѕ3P0_fn᱌(gn3|5DH kk*(kZߛ"/5^lt#0_]?1 c5r6ռf&3_ʶjb8Ul*fw:_ j@2x>5N|s&w {)9 <3"E m}z N+Ԝ/1Pyy ܪ'W{ռ<1_;i@YA#̗eZ1T*[˄|vI9R@9կe7j"=AtCF_t rri`=KfvN(r$)QLf3SK {zjG _Zo0b ۊObAkgNx3Ҕ60 &mQVї#w|(́0UU@<-X-b& 2EY3@clmj93t%8_90J1s~A6VÆxjV(|O >Gg9QNE -gJ&Ty VB o(iv7bnTHUv64ZD!+_D u p5uW(kx^ߜgtUOj@)Q f <3O8^c(+$]bj03xU" |Yrr889Bޘdz4,GXB `41Y/AHQ<eOW%gK}dK _s (-%~B@Ū5>s!̈]o(e wO $3 !SC14:kOicb fs T{.Z bZ;5r#ֺu! #3ޢߧ3e?z @56hSr>uFڱ-klSx ;(m5܄@w/Uʚ13yM2ٽPĜSq(XMZV(nĜo^F~"$|2?ќ<1P6h3ۈx–P_N rU;ԚpMӮ 1PgR '9@WxQj! {9!xaon>b()1SF8]t99օxrם;a귣_f-3s>[bη&[(b! =VN3o>fEM Z7u5ۊ::&3oc=^ <2 L/ `U*"qi@LC3oi+UbUF&a3G'yf)V*F ofcfo] B]d[=FoCkml( xdx\LtǴ5t9du'f򬭽E4 r3cނ}1S-^e3f z"lsc7%%rP5sBV%3+ _EMw^w:z9fxΘ &-Z.fE}a+?925ɲef>%RB8qi5|i39Dfi3bQ/(kv>(Q:\- oifƉ}ABC]B ]PG{<2ηMaʝL(Ln>)g_N*ׅާe>B@^f9&xH!N`W$aʫb*zCQEg5Ϝϩg 7s?9˄\-3#PxʊYbf88=V=>nL9ƄgnsxƄ(wRI |܌yx;yf`\1@9mN\23W3 6ff_=bEˇ|h'!JkwI#-9=7ߕI?B - i-3p!5W 1SaPD.1J p')O}AEb7JFDMTF3{ʆȇԷ0s>')=b&o-j9DŽXbVdny3zaĜS%@7ǜO%@CW%@8#f/ fGCQ=)3hz:K@:=3y 7q.ME Z/˻X"K9Uj>J6X7;Z煘TG%f \f؅UR(;YۨBlt]7sNS<8ʁFssyWzأ@9ռ&Z#)zg˫`sx'pwWSݢd@j% =ByNG.SYG.JaJDq3VFS<97!Ag|׆b-RaU'd2r>pŽ?LNzr9Zj=A*&0""|W038~F(#{eY({)jR/ҮHy f0ÑmŌ)0 ׫D! #{j80Jw)W\->e vE1po33W0ezf8, &7TcQ8X(8'D爙*5 ;aYuR%f)Q<eL_D 5"3jdDaG(]iČړ&^cl{*x,(u%`6z?yc `3<εaf + fj_s:Zp q*o1Vk3U?)(3P)ƞ`bWxfFeu|"*{ # 3)7>2yr(kʂ(֪QSKꙹ>h#98p=fhJ3ffQ?mR] f .9S•*9}|y#! Wq==BAbfWp/1WB3\# (w5#J wM-;P UbΧRR厘T*JT*9=3;{SaJmEbΩR'fr*_39{ĜSRg&g003 2G]}^ 2a!(H!b[ш6FL]bCMM vϲV#MU{|*R(ZK {zkFɨ!/j̜SuO%{J*36b|r fļyתwѪf0s>41PeqJg3Lm E#Affaa|wF!f-;*[Io21'YwbJBp8QMSX0s>'+^3}d k>+.ZbDSjRs>/09fxG9ꔢ9_eM Br 3*sI-1Lyfnc endstream endobj 3572 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1574 >> stream xTmPTe~s `CLI%LN( 5|5RG ^Mӑ7ߩq8f: &Ϝ>us]7d :Q/ϑBBx2@x* @ +BvI*$sn6 V%i?c,y8<:j]7I9ҡDSS W鴺M[490Bz+WŬ^.ZPzBJ41hPl4GRP$Tĉ@Y`u /[%;-R|!. }ouϾx7 lyd㶴pJVOJeᮊLZf]B)m7x\{!L?944@K(||:!BHH=bN {ERT)v# b+$K,6A(:EWϥ,3bLc?ytrRs¾ml̄+r_\]ر1X5p{Kd㇯JI#S|@ZF#ɮև;'0o))&3(8cBv7rj@⃥W&|Āe SJ't8 6Þ~g?LJ6i F*7k=F?ݢPnV<SY endstream endobj 3556 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/rev2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3573 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3574 0 R >>/Font << /R8 3575 0 R>> >> /Length 3461 /Filter /FlateDecode >> stream x͜M$9+8s߾"!$n }[q F'̪؆n$4~߬[ Eu}7 b?oq;Ɯq(8| x%?7aBLD#=?o_no5"qT/}GR!y4EO)zK%v-]F˅K^Z_sKbɡKKr % {^Z :=O(z'nW[4Qѵw%ϔCE9.E(PZCL.S΁k|Bg eKwP_ƇKW$Kf|B - ^-z|OwEu3^ZHxU~t%v.g.9+7ZRw8]kL.|z7 ޺Хjӭk>Cܕ EDUV=5].5x(PRx3Tx=w#soEonipSԤOy(/w&^R@{듮)|(j5Xk/bX)0_4< ":>ae/b≢V[拢V +95|QԈk]@fXg*xT|QefwYJ] {zW@iE2L^ۺ9R ΣOb8M8H3PZ HW@%BXHwwg@9N{|Q$eTo}$s(E2Pfιad2|sfo +w!Y#@Ʉ6_@ᴳ]ew(vMQꔜQ$7E28Ԋ% g@^(R3g@A"("VF%+D ^1pdw 2FH'Q18fxAQ$G3dopl95-kHE2F hJ.8`%ݨb Cy 5Ա-dpvyc1dpQ%͐0۔ۅfv3M"0!^FjE20!BY!> b E2ݏ]#@"/oܽ&@{s^+@g q"(tZ5v]5 Xg*ʑ'7 Yb{Hfg(Zv+ ڟJ1brVcɬq(xquL|᫘tgWb2vޗ^T) AXlz (#վ,ѭ@{?Z@UT77,XT㑘eQ y(ck+9 h-e(EʻadR׌D p4U1 Cz(wKUz$({oϵb$Sf7_C*f=M2z<4xN '-d m oD HM}b6mlr'dl ɬkr>R ^ϐ7z.WOg=4kɬӲxk5diIPd"(X2_(氷diIufƟD!E:?Kٕ?ߌd"uڇR DȽfP /[,p8LeK24!LY &D%u׸V[biBr]+fW8Gc^K2"u.G242͎k,*<k+uژqj6PIf6&j` J-@f`id"΢qNP |S`Y,RapCY?a++xkX[ Es,>L12&s٬kbSE9قd*eTEɱ;U:MUċU_V*YOO9vٕVDӼ2+f=Yq_a"uzbkv@ӚK4֬H%TsӚ5ybÜ5+AY9 opv뙞biۤ:+f,UFkŬ; mMDiúGP:YL뉏biSbvԉ$u0 G2۹NjnɬY1 uY3g>Y Ffn[ɬӈ-U~ojٿ endstream endobj 3577 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1574 >> stream xTmPTe~s `CLI%LN( 5|5RG ^Mӑ7ߩq8f: &Ϝ>us]7d :Q/ϑBBx2@x* @ +BvI*$sn6 V%i?c,y8<:j]7I9ҡDSS W鴺M[490Bz+WŬ^.ZPzBJ41hPl4GRP$Tĉ@Y`u /[%;-R|!. }ouϾx7 lyd㶴pJVOJeᮊLZf]B)m7x\{!L?944@K(||:!BHH=bN {ERT)v# b+$K,6A(:EWϥ,3bLc?ytrRs¾ml̄+r_\]ر1X5p{Kd㇯JI#S|@ZF#ɮև;'0o))&3(8cBv7rj@⃥W&|Āe SJ't8 6Þ~g?LJ6i F*7k=F?ݢPnV<SY endstream endobj 3584 0 obj << /Length 2174 /Filter /FlateDecode >> stream xY[oF~h:.Ei@SMDUg.HJրAr8GS|֣7|TXĴZ "4-FThzmTQ.M`ՙQfDD7oB4B&!X'rLUTr=0J17$w ҹk/lv'>chj8?wJ)bdAuZzʼt7S[R2pSVIP~EQm +dLuNH:oA0<]OLȁl~.;BHo) }Juv7"z6&sl z"]Vx"(]$|Sf_ aW6Kwd{'ˀ,+'s :".,Y^c+79l鯯MJ@Iq֒|ڔ/_$WǨxHwmywyTt] lf*KJ]]U# XΥ'/ʬ2H4ۄ1B~ͻf1Ȳϊ|C}RQ~Vlw{*֙ 8[:3T+x)V[eIr$&D1^鷵{C̣!0?!LGPx Y׻&"_ 6L,Mx&|#QVq/&eETN^2_B`?լzˏȥKrե͉EW̭w KVq%˦׆/߇z4{g$'"7t[`)1n "}" "N;Z:_w;&;84\k+hjTc\ B @nx>a`̡M=оy5U|(giE(4qXRU;Mf`O^2.dk,<}Bn R(x BvB $ R,csbcjRɫ|AVGfzׅyHaDB.Y\'1GOnbĕ3| 式ICOŠJ!ڢxw{{}%yD`CWӟ߽. > )5? B#(,C1h' sjMxܵpД (CšiH+~ϭ<وˋ/ױcma:0hKf#~ػ/fWЏ`aфa}~2 pY?ci(U#D e#FH=q^$^<M9An=KwT\"? ŒE`<7ٙ!7FB.^U'=C蝈 \b}^q8SYg0>p"hg=V9 R!ϓØb{dQ癯X:MVj哎7SV>V.#哘?^d,̂-2X}{$s4#ie$$g 8G0"Ġ3PiRpg5{pLlP;-X LHCC'&OǚF!|K35ΧAn88ڲ2hH:d0IEUh;F$Gʞ 풎?P碂[+ endstream endobj 3591 0 obj << /Length 456 /Filter /FlateDecode >> stream xڽ=o@{~ŖP0ZJ(9)N 36M f;3@ч &QGɎM+#tspsC>/Font << /R8 3596 0 R>> >> /Length 3409 /Filter /FlateDecode >> stream x͜n$ ET/րaxe E0U$GMJeEK#`Yu!mß?/)c}._RqzChյվB[k+%˟FC,eC"w2d$Psc^/urYI)#l{ ͜Z'Kxŷ߽`8'F/fs*a%|^^/?=ҟ~//<^Bl.O%0ƪs^? OOf)O?fZ&Itr^'&4=ot`#Ly~Gs ~U9[\!|*Y`ny>O-)oy.1Ըt42iz9̳;)hHw{vϙCJ_ϷNhz)[N>5<魅S]6}|[=7<髇֋^SYa]M|kG k~UB/w?~jUGK9u̼ ǭ0f[>z2>-)J)'hO0|3oULey1H-c\Ϭ_Q 1C o 4mV>f!<ϊf 0~\mE1PFCP|VzY/V4esZQ ^1gE1PVC2}V#f9}m {PiE2PrZQ Tt D9ӷ4spYQ 8kE2TӱϊdJqZ “ӊbēϊd`oΑV j>*Z ׈@ `G NO*%"*=Q0VNŞˊb׊diD "V}_1TPaϊd̘U(J!:}b׊dC)eE1TBd"*3i𪚁ϻh~"*}"(LuYQ >*Z s$!#]PG2V^+R|f0jyPyHˊb#]@>+:u} @h8W3TqfNgE2Pz\;=b0fuPqǹ <8~m¸E#ˆu9H."#kCpZ=7ꚷ罘fb֊F+rYዛP3TJ!GZ1 h c"*Yӊd4!{j ciPA !GQM-3TzYOLH5V]س! Ɋbd欨46+r}m ͊dCߋ}+lF$B5C!r0iJƪc5F&+5׻C"T ~UGL~Q C,싙+Pic isr#g놨{MgbFZPaJoz)=*H5s͊dEP=f"(-! F$ztP5t(iM C\XI2bA0sW1j\sR3Tfc1̞E1PXe*YE*>X@+E!2jz> Fd:8ΊG3X yXb"Vn\ъ2 wԱJq/ydD(0b&9p6Z5s/5\)jMju@\U:&ɰƄLbXׁ;a1 0$W0tUaL3̲/3/k iE13qfC_pb}L%T`fde]1TƺV69Hq9E ^+a>_&j Ϝcp:wVUifOƕ 3P'6gJ ˟X9EP=F$簆F3y<+PigJ2{)D+XőkR S>hS"hJd030󑓃/6j#E{ND"pᝅ+k%kR]9P(zH $kE2{"MݚfaUbBT9ֳbSgh9mij1*׳VE[V$_qR+5e{F(89ǣ*yq|?YHP~7jt _]^ FjbivkFD1TfgvmkWb޲dkZQ"(cSѺKثf# B|7ц@(Tm`nP8N5*o׸ Hev)u5٫&P も2^qP9RŐYb9}~W{)'W3TXTf2M338D5C53@P^D1 4^'!*8G-m`2bNU1CbZ;<%Ϧa릋~wj6$C% jW39G1T0_[$W}%4P9DYCe}Z"*G=y;ոw(-#QP8nr`> stream xTmPTe~s `CLI%LN( 5|5RG ^Mӑ7ߩq8f: &Ϝ>us]7d :Q/ϑBBx2@x* @ +BvI*$sn6 V%i?c,y8<:j]7I9ҡDSS W鴺M[490Bz+WŬ^.ZPzBJ41hPl4GRP$Tĉ@Y`u /[%;-R|!. }ouϾx7 lyd㶴pJVOJeᮊLZf]B)m7x\{!L?944@K(||:!BHH=bN {ERT)v# b+$K,6A(:EWϥ,3bLc?ytrRs¾ml̄+r_\]ر1X5p{Kd㇯JI#S|@ZF#ɮև;'0o))&3(8cBv7rj@⃥W&|Āe SJ't8 6Þ~g?LJ6i F*7k=F?ݢPnV<SY endstream endobj 3581 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/rev4.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3599 0 R /BBox [0 0 560 345] /Resources << /ProcSet [ /PDF /Text ] /ExtGState << /R7 3600 0 R >>/Font << /R8 3601 0 R>> >> /Length 2199 /Filter /FlateDecode >> stream xZMo$E ϯc+Bⶐۊ$VL6I{q\.]_/Oط:SuO_ 8bTkE4TF۟N h!洤1Sn@-#%{(Ҟ9OEIT,rM*q/',jo=viq+&|oOO8z1on>鱴r2 nOIj](:7U!<O,?cafg*>ǝ5'&?H=1 zS!gr #|t&%v4c7\lyie<[-Xrh`yc(Q_v: K0슼=/zzcHHhy9PF8azGL"`z!Jy9g=wr4Bmq%e M/GWL=:LZ6 &hz˩~0̵]Nvdn 㸞͎_gZo΄)/uTPq0owɥ5Q(MzZ)TeߊLz$rlf׾ŷP\[|e>w?/gWj4-~%a>4[R1 Ā5YR1 ]QY5QD@raR1I XS1 eےQthiQes\g ӗVrkb9@^S1"]P- -4k*CU\ۍCSEgcMpOq+þ-K*C$*3Hk!e]!WWUfemGgn>CS8D*3LvN3=O})1{yT,-)D/C6{AT9DzCۍ!;!2,k8D8ep2RRo\*CNTNBx֬|"3N %xm!y]ҢS@X-FNG7Мqb8Dp.Fb|*]:NyI^Qa9DD7PS9r`qJ-ȷ"%1Odا(גC[|1zsA('׵kL*EQeJ!™npR{pn]DO$",;)dzm9Dɰhw~9DC!2ZPY D/VZ3"j+;"TqRW+!zR`4TfтPt?3n;3[2b8DiRxk)2Q\rj6"O~N9pؕWe)Nr0$UġSdTY-NC`]<,'D82sxSSXvWCgL!P+đzEf}bݵi Em ! *3|XP9@8]a(vr Z).s%C2^ CnU6ղmzRL endstream endobj 3603 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1574 >> stream xTmPTe~s `CLI%LN( 5|5RG ^Mӑ7ߩq8f: &Ϝ>us]7d :Q/ϑBBx2@x* @ +BvI*$sn6 V%i?c,y8<:j]7I9ҡDSS W鴺M[490Bz+WŬ^.ZPzBJ41hPl4GRP$Tĉ@Y`u /[%;-R|!. }ouϾx7 lyd㶴pJVOJeᮊLZf]B)m7x\{!L?944@K(||:!BHH=bN {ERT)v# b+$K,6A(:EWϥ,3bLc?ytrRs¾ml̄+r_\]ر1X5p{Kd㇯JI#S|@ZF#ɮև;'0o))&3(8cBv7rj@⃥W&|Āe SJ't8 6Þ~g?LJ6i F*7k=F?ݢPnV<SY endstream endobj 3607 0 obj << /Length 2555 /Filter /FlateDecode >> stream x]}Z=3л48$E"E͵Foo3su \>W*̊XM0`:xl]\)ki?Y&|R%oܱ˕1 ͡<Z[i;fmʖVӎ!Wߊl!ˍ-`4e:qT禭օ}u\Wّ b`/(݆)̏wt%Poz_/G l ʹ6t a;.x(뾮λ=M6qO8wR?FTEe8f0sUbI1=‡!j@8 W:М$zŽ γF`0( t}m~Y؝U,_IHU+IsWUچU:}ҁ|y0I\2c,_ 1OU@(@.2{;"`B 1:Tr!i4ynL/d6q>vhй0ˀ1<)GtY }c8&:Ӫ'2]Bl^W>ȫyGbyA7m! S `<"ƆaO xY*g'ǐb )HY*z?ƨg1LdPNp@s~PΌ%}5$$.4S*2P hi΄|8`r Gy*_x&*ƠaQjmܘd48nOm5D4\4| ƷYzqM,K1al?z@$\LITYusg"dmxG $a~_OJ*r;5h䄔7d$ dFR^ T^`bz0l 9N> ^5W^2Kt'&FQbq&3b Pas0aE(-ˬV ]AC޴3ܩVSGvWOe; GA"0̴@[D} J4}o@XE ׆Nq[0ys7"먌k5md_Msk vZ%cT2a{SյkW5Th!_ 18hʶ84D +wDpvoN0=r]#Ј'U]ʰ޹cQۆQϜv'W/d`NAvE(r\fEv5xzҿ/`ok% kg#߲&NL>xQ1mYjűtA{$k܍Զ6OE뻦P7m}޴gdF :| σw+=:fSٺ3A6lgz:KTGT\;./^cwq©U'GAΫg tGD]͈TBk ӿ82:l Fr(X-M"${m̋N endstream endobj 3612 0 obj << /Length 1857 /Filter /FlateDecode >> stream xڭXYoF~ϯЛ)D%(ӸH#iZc2R,)^v͌/=]!Xb,.'2nId,VOT ZD2-,{[Le>*K*DJ撨r[-:/ 6 -1-LC1"KG%-E N`c`˪*t}Y1PhuD/+VD;z{4Nu+.ݱ:/ /y%[wU5]2 >sMMGZ]dCv״Ӟtא&,6^^ҞfSO)@pcH#|a cl@Lj6z"&]J4gJSڀʤJ2eY:J pkxa]G1&LZʈòW+P: lE-٨"X@Ίٷl@q ߐEZ/{oBkl`Ϧ&!c-+b/&xOt3 ȳ1Y:kInWhT",2ӪW಼q_Λq¹r\܂UW>9(ʖuYy.ǐEϪEVA#Xf"1$TK@wܜr?#&ufH4I(yx[\yʷ0û;Yd&b6yA\ixK8r,RO܆Z8g1[0;=>Ý␪ivJR*ۀ3yN z{4! 0=Y#=?8&NPpP7 \@B9͙zϑ7JɌB` =C>SOژ Yg? ?(H .س7D9/;wӬK4p0+4_jD1fT gN%%'3s9T|71L9NZ@|5n'=6FxdY# Zm L&V±j'בA5 en[1Q`46rBHG'G $T endstream endobj 3620 0 obj << /Length 2033 /Filter /FlateDecode >> stream xڝXs6_7Ss$$CK&9Qfڦy),*$7bsL. `_\x+Z.Vfa2DseT5pi^w4vRfѷ#K{O.ҝ_V?xd0]X.pҞocwȌuyCSNm ;t[{u u6̇>7msHλ氙{zwm[ ,3KӰk.,8 -$LHҜ !ٛmK-NV٢?zƴ[#~Oxquٯ֒ ,I|[SmXjPPL ͓a?J*wTqR]hOh , !6(iphpzslDGOpU-30;m!͠* Rq}0 J dR4O?Q[m6EEN QoẇlV.QK#WX4Ϝ4C;mKSt+Zs~YgeiZoG9,aUB}б>ЅRPr4HڏxmaHiƾ&ЇhȽ dB;K+TwC!wqfuiУ>il_;MRASL)M|j5⧄P7L֋!u({śC1,83iEշS`S;:~(#,3g(6c=bӊiFU1.|vSw=QA)%[blog=þ+H[۞ گ5+tHŕ]CCL $wVO!ܓOr@AcB u>>CI>:CILAӼ((eV~Ec?ʑ8%h>@QoWG̢z2ǀGb$3=bn1&uD]AgeX<( H[yrL:p_dC}KSxdao-Qs+T8$$hVB֧ks>'u1ȑ 8O9 &M>ۚ&1ŴlӋ4xQW/>X?\\~Bğ}4Xi3wfE6`,Q/@dw?T7!)uL|\(A3a/oeΣ#W*. @y/k<cS -^Py^LtF"{/o.Eѩ߈Z15ˌLvNEh}> endstream endobj 3615 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/hopfbif.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3623 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3624 0 R >>/Font << /R8 3625 0 R>> >> /Length 15877 /Filter /FlateDecode >> stream xIr*F֜*c3beXV,,q,`+* }##"zԃ7SafzUfD^ۻ6gޏk>އw_k9_U^(Ͽq}7=^6S>/.?W_+7:2|K&m/2,wo*2X|iuS~"ž. 9J}]ʹ-1XՎ*`!q?{eᕩUd{/U`564X:( U?FJ܅̆Udy J:.h VGyW&/*C}V}{oY-;[FyamۮmK}ӌs/h"U{U~AgA7LJ߫90;bϒq&h%=QD6bOwGEi&=WCO,jO42>'l֗#[I_ 1Sܰqؚmd2&O,׼vcݟE`U̪C& Lj6uLs끉g:F~Wb3eZ.xaBe}cbj _ݚ#M}a}Rd›zz=~Lyڗ&G&Vi"1XI/g;Km`%M4;12XCהip`%Vk%&V6Y#*1X#n7&+y1`t%wd%7`W?MLY^+Y}>1Xɣ;ӗQ@9;uw ,,lmJLa2wN V2,6ѕ&+B;˱fb=n/1Xm2Owi!1*Wc;VJ V5d4!&+{؀N V2bQdlsJ2!GXb!zȫ$+d $lz{=չ`%D<ub*}n{sH V2:啔n竜ڥLzߕdozxg}Jd֛yʙjxzLaǹ"UKDxŭ/2VW"+`-(̌VFpFf/J;F+yE͚|.v{ ς'[en[ 6f J:*}g<";;kY'3֛2LJ W_:_mW{6{lHY:KڰXc+0f,*7 qf}YOG昁] p5gK_`SLӾ02Xa%fX~J9&2'r臼 ̹C9e8Hvm^Qb\g{ZKLg202wl1TuȪ'[\;,6l~,=;os"*rfڒj]b)kL`Kb:M93Ud 2u̡A3 hMq7Fwb K~4eYA̍#zC;N{m5~;Ӽĸ7߇L%+;~CQ%S᳕71FY_ ĸ׫)yf{oT}h=(=Qb3 meb,:r6ٳ≊# еb,g&FgR;e~ua%2:'Δ`%Kff`%=EFy,`#:& &+E߮}&N(d+/B*2Xcclۻ'E+yQ)vJ H~Ӭ" ed%l*2Z5H*T*0ZuNg]~V-+Mr3UhP#cO`*Ӿ12Zu>̑*0>>"9xџ}d'Di0ߛ}a@[M&5f~:~4?>3y6G+ld7=.1 OFӬ"`8YE+KCvґLK Vu쉥 0M?1l~Q-L?H VY'0n6UDUsŔv^j`KejcD8-cs!_E;}h݉qx&C$ĸzn@\8/O )[=#vIrǕ򨭘Ud?A1%FaIܱe?i Æۘ=.]IyfǫX#}4Ĩ}ѬN:߹ƔUd̜hfO51d\LIl{ DB oǘ4xZ2"w`mn9 Ɖqg0Ë{q/9S #V+-h͐hwgMl+pem}cwL7oFqR):LdaVYdDmYE+y2q`OS"+Rddl&(0 sĊ_MiJSb,2ײl!Sl:l~c|κlp $kjjbbb5 ~OY(e+Tl# VP4GXO*1Xu=φhQNWE2U+Pkf<)&&F̋ VD9*2Zu }oٲjC=Gocd:q+,S{~օV qڰif@+Ͻo.ΌV'_!銮}GgeZkSf;6WEƾ|BC.{s,k\;ƅ11NQihK+3g cbxbTV}Ӑπ?tiՉQ7e'c̨"J.;\8"GFc.d2K['FODOrOy\]bT(=(1y iN}47]} "*81aw00"+GG %+y hh@NZq}O;}4r}Cj{)!TkÜSV. ܷT;Z2yWwM̄@@Q]`L,2vAj2.E!DpuJ< ƲJ V#YKBJ VQ;KJ V 3BH"Ք⪴`#[8,lpM"K V"pzUU R Z%F+u*v(3vOpcn!zDVHW{ज66gƾ\RULK =8&7bJ8ZUflpPwhf02"q sQ(P2}=`$ӰS&֑gfdx!}G\ F%0EQmi$F<&xcՂVȖt۠`5:2XM* oD``? {H=:[%U٦D7&F~(_l6nq{eP__=b72YHzxaB8 bZ  :530~ GkWYn|d<- 59_N夈ώhNlT V2vSy$ٟ;vK 7Oe]ɞQnR$432 ̹B +EyCMfh ʩ;L^]Dw4Mζa^ꌥ502~Kp%a1_oW~wb;Bb,~YhDٸec&DF\. ʄD$'&Æ**"$~0ӲY3bC̸ݡibObKTL nt!y4_bA/}__bI*^5"2c+ {<^vQ䃧j93n"ǼَB'H#Z9o*3J#Vdl);M*0TϞQ@|}G?F]F}\^|ASc( 5祁%+y}[ശbC:SxCfݲV3xd$wqىqdwGֲ`[̠G_e5} rl bBWq ŐL&d ,]pk d"5%Fa ׀(2_y\ZQݫ$EF) l- VQdHnWHá xH oDb{8ĸT7Wx>DdK(:s[G0XJWV(8+?2f0vG\ÕĘq`cClztu3)8110"yxy`TU$َ0﫢U` #ԽUd$S]1(I6}|m8ǗBJBAyk;*"%wPv >gmvaǮ`Dqˎ˗``b+aP(02_:g" gǰ+؊y""3X!<'AjeA>$(v*( < :CkjpF߮(`sh/`sУ+LuAUO VZ@ >Xq/"L ֡"9s`(2>S}W V u M djOrf;Ly`Ad+*#C@"r^Q"#2c&κaED@-12O2*ulk3,$%= 1+'k9}#Ly,"N #pEdZ}d o]s(l\uY0KC$;nb9z>ZEq#˝-ffc1O;sK F7tN_i}VNT=1%ɨ o}bKǰ%(Q#yr~}`سʎ$+dDu~dMj0߄(5̛=!81)eMgaT(a t'b==/2ut=`%mFARGKNFX,%5 SnD 7=LYH V(lS3Y"cDe޹B&Ṝ=*%lӔBK VH~QYvBͰjUN2eJu?34t9P\9 :DLB&ȦEB(+-!ܐw(LG5Y[qUC2y-d&Vp쪝dB#[J[XMB+zcBb3* Dɬ23B2N_Wfb(W7~@y8>\LpzO8)Y>kfbh,QŔĦ }$f+%B7`Ux #SLpXXb՝7Ï_+28j) 943<ݣM3ÓGU7!':NH{JwPY{fYY3COZ&,`K1&qM kg֗5HG5/"3BNF$nӄ00ϕUD8 #981<"8?@UݺOWЀeq(3sj"PM5ȰTZ?=" kWAb+2l_fG[t1Bj[@ KPp{Qf!$KZub©=dBRXxZUQh=Tq42X wUdRC]BUB(/ K VMӤa檾j :Ռ6;OOk2pb vL Veg5 j[^bTYQ.ђ7JZ%O[J7QaV8(Vڰ2cfdhf42J WuDLXphdAPxJ15b#[" #!z;~e8w%F'ƈG.lA6Em08 b ,]DoH>ۉ5 cjxM}2$\z`+I@"*%EޠU[İ\<[#ژx~dƂwHG05zr$ZlWBpC&#S0l-.3&*cGf /ܘ2 ^}#Zc+7k"0BIQ<,XǑoyfki8?M<-Ev&zi;(JrEA(Q^- JAe^%)#%2Db }4 IjQcRRnfoюq4n۽^q4X&KfcRmb6(5~K"8dxDZ`+ RGe VEkVM3V i6 O[¢sj "Thw .Y ǖX!]h>_2! IߕX ͐܋$$6{v[XJBbXh@1 U7!hBbS"n d&Va){mvCfXI}"Ɗe@=j3:7*s#Oz.f-C 73U5צ23XQ)(X"!w:"Vlֺ7%}5bXVUaCg!5f`ԔSLƫNL}BR"63 xП9Rf2bYJkLjߌ #f8FL@{CSAWfb QYn^fb%C܌Kl;%jGQauIiAcOWdqg|MA#/Go3Njr55jdLZꌌ<7dĸ*|.8"@ʥ`'HNV\vsbbEzLeȘ^T]fQQaEEFq1+VZvatU11&%W?9O\FQ؟W2#cd W1{ha`)L=e'FiM˪;bW$+\8e\+Ud91y/d:tˌVEJm2edl#v$+@S/SW"[QZO<2[,Ɏ(R}fnF噝PMN"a?,8"JIz53!iQU%'cMZ-/;^1{Edaf@P2`H{7ꕕG/ G-b01Gqgky]>Hܼ@>Z#oϺӉ},mo[T_OveKdX~ZyM~Kb\YRb/}2&omպQZXȨ[^1k0دk䣟&$FguF΄u84°L~~e#8׸#,3h^~DpIXxK>Xي/rj>Z-Y%F}¯8Y܊E?F ⰌȖ(xUjb-"(Yu~Ɠ`U2 ^zj|1qTڹyUbqBlNR4%/"4^~RCi(1l2Vx,!E8=*}Ex(:#rM a]e[p=F2⩢:t "d~A525K$H ]cTyaA`" QX3X$WSHkKQ 2ʛ4S.#5eI4JLǨ4\d`Wkٷ%&V>q!eԓ Vm"l`.LHlP1p V(1KJ V>'0+3X]u3؄`yfXHlvQ+vGjZMMDI 3;/'63e0g+yrN>QdlP^ސ}0z 6w{Ǡ&Q\L VKk3׵HF 㦳,˵*eؿ@N\41^l^Rɝ# c3C:YE(`MgL9xd("^hp%b5Ðfm703#Y+DבmKt-3D7^vWQ8jng1șbUXM=bj3PZehdPՄqf$UdPQM..Nyǫb= 頾RLKN^K:*2x`cWdf0Y*f}v㑳-C/W'32&k:VULEUX'"A\6DOdq9mPp`e4$7;>D"X\b@π|(cy(LYhbhz](Y/61$C#w/٪d%~zG[c:=" .ǕBp=43.t[H VE;B0.Ϻx/Cl,1Bd`tp }n&77iV0e01XmLAA^ܲ9lI |k,Yrgj 2PCd=x-]GMTם‰ef y e VCdiw@pT#İ<-UL֐b!fAiqa4U<Z2ӘB܌+((hI!s İm_/(3H1EJk('% &-y/K]7ͣF1UiJL hrIb*^ kK3!z4/LL=*ekAƙj[V'2ٶ~ rvNJz[jV@\^&EBxq }kWbڥd+-865 6`A93XFpS[PjUBb[ߍZi VsYEnbۼRT|FwVk4u2ӧ0xKO_zfZ0ndaGQ7F+1DГ &ԡ`bm̚QT7b'r3S:MLL珦7i.'sс}M5LG5 #3~ [2aM"("<ů&GH2Z24]2 R!eukeѨ()kv Ѩ^-FR#šzr}jLԡ qd)Q !Nnӻz ("pgj>(x("]G >~8P3 O oc52^ >zõk|әGouV1)1ʥ~ ko/]QbQ~J/*׉a'!SMAԢN >Qa! oWSvd~C&fymE#1րȂOkYצ*d~|b"Jj7ws)3#eYv/lό'睆vډAqh̨jޯzrA(m}#[*'2W*]e&3Ӷ2B"cGh|z&*2 aGIE֘ɣcNleU/Ub+G~z c`KK,,r܂!.Y-?ەI4teڝw  cQ~VP7^M75-Ef`+{E$ɐ䂪wv#^r@fd zl)7d=ibGvZK_Fq葱a|b&y/(3ބx/53f|z<~/Kbh,&{17ka)b1!Ј򋉭̩nvޔ*PN:Cti4^2'D1cA3/Xow-32{l ^1`cb{GWU'ke5 ^d=xvy{ɋSf Hǂw& xO02Q/@ buetz+6&*Vy1?Yc#eM/. OQ+[i&Y,'9 f5KM Oljˆ+v-tlAa+y7DjbȑXnNBB4ohA_WfO4PhGb]&ƙ lADo[WYqd# aji"s$m/•:3 7D ;jw3Fp.qnEx\q[7bZ93 yW-Ta9-fTaܙ8mH.TQR۩f)Vũ LKL5]J^dN:jh ZuԦetgj Bі~8þQ@ˆ-JCE1&[ݙ>ư>lg;D츞wz ioGJB&Z3Ojyqiwj^Y/߳3S]^-CFQs^Yi)ql]mGc[Ri2Rˆ4P5 %Yǿ_|}{?~?$ 'o_u__G_ː̖!-C3[6uA 3[g GlYCga>e?t̖!^-l8: -;CgՇ 3ȏ S80`%۹By-*5 ]_~dmK8[ߕ<+>8*ﯖ=P_-{Z@yjղֲֲֲֲֲֲֲֲeeϓeϓeϓeϓeϓeϓeϓeϓMo|o-{o-_Va}#h?ҍdޢϓYgkOޯHyZO޷=O޷Jow o0FVq=x~@9/%wA \!x^Rs} oo~vnvxag?cnp%޲ǹ%U[wKμe{gTG3oYf{˞~Ue#ߙyA.~;=u|gֲ罳}<=/_TZwvnOAe{gu+Ae{g>=*em-{;>y |gֲ罳q<=*Legyb-{;k[}-{;+>y ޲罳6x~o8+ނElM ~ijk>eY[ز.l^=e+@-{͘+-[!!kNep-{n}uq[-ز%?eK@ʣ q`R(Y&D懲?+k+k+k+k)k)k)k)k)k)k)k)k+k)ks6y-3y-3y-3y-{??e?e?e?eJ*{qE~Q \N>|yhg}=-6g_?huQ=G_al endstream endobj 3628 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1389 >> stream xSkPSGˍՆ(ܹU߂WAbbD Q>G]iJ Z-QFQ)%2EK@@XE,fh;Ιwe 1 3,Ro(ЛstȏaX'2fGcws3q#,g\R:vH+tX6wׂą&[6/'{Y=?@^V:LmR7zê\dc\:_a]r5Zo0NLUO8aBq(C(X4H@nA1$GÑ rE(02i楓)asXH<$r8 W$666w@Q]#)J;R׿i|s.FIl'j=f©%sNXon&i;\pW NOǯ Q_`YM0IG$MJlOU G1OY 4~6xaA\ԼlOLa*g Kn7p0,&HnYo2a~DCdQ{}\u,ĸ?S^f;KBq:e1>3*3aQe[ssCYrR Kl{51:_ҫ5ق+ڌ4&Hx-^Iz wol'b3XRdJy~ڨ߯]nv\=lFLJ"p4ds)-Ⲳ[sV.V-^ӖEnA@k' ,N~AE!dpEyRȃ!තTuvu͹Kڬ 5 TƜIcc *܅znyU"8BN9#m(wo6׊.%7!CGN$fJ](UݴTOG~BvY%C9/ܯNJK YtZ}$OOwJA@j#C~0[Kv=dF5䄘:i FT${? IgM *X8Hp)+mIS7nm >mտ-Iu)x$$|i]d/ R.twbqzd0ӑ 3Pp=)e=}V$;#wn֧ endstream endobj 3616 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/notshifted.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3629 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3630 0 R >>/Font << /R8 3631 0 R>> >> /Length 3628 /Filter /FlateDecode >> stream x]͎rOH!+H"1D6 ^!,Y$$y^?YZ{][~[bɵn|+[Yp_^n=",>m'4ФK[h&UC -ǃ5a[ aŭeR\j@Z1pޮ5+kBӱ5ք m1!QY#VđqnWSGMZƄv@ V\]C.ll75H#8-CC YN0֕͘5a`u3}F 5aWKu~뱭qZ3&,\8zom1XbENz=Z$>C1ɺ;3Vp[H^rz V߂5+D]N:Itؚ10npcg}3`>&Y̌NkV]`®.Iu )7c`y ֈlQ0o H茁sGϡn+c= @"XV[& *z!p׌zÊ1ք]-aňG_3&, gAKek1a%@8zq,.&Z(Ț1au' cJ)k1IdF=a q@rG>T g1ab$GipjYbeuhĘuRc Gm„&J2 5b@D<^DKhU1"?cJ}Iw„R gאSҳ0E䵆j[T&LX #o:fLXX2_k1Qy- k{ў0a(kfInֈ % "kG0a`4%6&LXȓ(n2&e5a` kͨ9֎3&,6c5Bഐ Y0҄ -5aB&V$˝k„դ4[#BrzvK/ ps}gfLX%MĤ If,1V3.vs3cJA9Ș :'x1dh`ea'p0QQW' _\?Y#.dEԁ!u&LXHN@V23&,}FfLXZ1jlƄ&rr8a<-#7uH&,Q#51ae)hN;kl=-'H8rhyo4bv>콂ܙ1aa5jks1awY\:c*ڀh  ?7 8ɏȈ1!땋z2#$Y6irڍ4b8nֈ )^$֓&,ȐYk HNHu'k„%ɏphPI' J%% }„U&`d5bj8z1aIQ5b`E,3&,joENV%x-M^I$;B+iĄl1aajhmڹΒ 2(kqĄ.<ʨ׎WiĄ%TRY4@bYLJ0aPʐ F ;#! *?c;b`Vs2zC'ھ4QXh^秃,MHr[' SYLD$ABͱ[J#Hoj: EFps O-ۊ*bx>l9@:&B R 7`=^^e~gѧW{o~xc~x~qX.>C;\ G[.ow]._/_|[;wAɗ˷w;;pG#;w~tr}C,ĽʰL*5 K aTC&U&7 9EY)IʚAJc IE5i >fi 1f kɍ5^1Ne7s*4DH3H4Đ_ .owrWM[YXBz" es;{4V{_We*#U}Sg2>{ߔ7e|)Mo}UFh2>{ߔ7e|)Mo}Sgg2>{ߔCtI~E7䮻[i.<{ p+{o}Sg2>{ߔ7e|?2:{TFgS*Oet)Oet?2:{TFgS*O?W~hퟷwm+ra~{q̷cU}UFh2B{_7e|)Mo}Sg2>{ߔWe)Mo}Sg2>{ߔ7e||)M+{~Gq~x}?3M%O[} PGC16Cx5j][ o GM3Ͽ;-slNeUJeMJe޹YNzO bP*bP*r*˅5<>SYw$9@ALAB*D9ƚAxI3Ht4DI3H 4XX2kNY W&ef)3OM ΧLp:e ΧLp>eic&823 ΧLp>e5c&8Sf&823 +Lp\-&!w5}J[/x 퍦VLp_'?:|1;n\TF3%S]f_Ne|1h13e|113e|1[13e|1ӛ13e|1Մ13e|1u̔L̔L7O̶̔T3B3SWO{&%˜2+˜22˜29˜2z˧L9̔6pT3ݚJ3S3tK3S3NL3S(z" FV˾O:ht}n4߃l-2ۙʧo)]t/ 21GL*Wt2CL*]!|l2a@L*ӻՄ.2IL*ӻh^2#CL[*SwPz~,*'f~|b{8\Fii"\޴N\wJK֊o| /?^A endstream endobj 3634 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1483 >> stream xTyPSG ƨ>ѪI*F%\EU@ qH!1jG]Vmmmz-hţEJ@X8~Ytogvv1 bgސ7gҺ3_2!\ 它Q7zr,KICܠ/, >eqSy&>g9Y Q~OԡܬLzg&,%4S*лSsK(Xu#G(Ţ(%( MC4q ި/rCHP=cRϙ.^.\gIddd䡫+QBZj%EBWQ3W~.E+v9*)y l;k8ࢃDPm/|&CԘG,< h`ߑ Mpf{LE&X0F5 O4$DN'ҡ+qdcϞ$nt}ڬ&c̴ |(q T]^a::۸3SoG=uDEUKlSL,K>FmUy8c@rʢ)_S޽qRntemU ڴ8[~ZSbJ,P*x[vlthh.4TwOO6ٺskw>xCg],Ua}r;#E?Nj"Ӿ$.O:%ڀ<{V !;`6V<`/!4uxnij6'3->[/pVa{GfݯR@8̂({ml*wc=d|ͯ[oG(Bwz$=;%e.xibSʴ}xǩܝn(AD,)t]=_\=Z8R/\{9dZ=GҧפnʵH +>nWqq.bZE3U3b>x72B 4_6!d+u .4 4G 9pӵ^\ݴ1pBlvpnQ6#԰LѮ{&Ea~ T߿zU>T>yo9ڗ_5>pQ˵#o> stream xڕYK6WLe8 tSc8_ 4@Q2I|B@h4~:^0FrBBІf|y1ʫ"kvvcWd_ݟrjq'>WE1mURDԡULF(4I)R%j,af*eJDJ r5Tg;/z&4mvUTZDh3g("X$3dDNˈT[nm&MmU-)USa(@2 nѨ^,=r 0Yj꾋xEC=n*cnSvQaopX.O׬w}8R,ZT{=4+Q},8|X\ ±JA!qe[q0uޣvpUd 6B52/2!^߿x;*&!ࣲdhFG,{Qk?(g]TH>hES+I|Qޣ)6~zl{P+|hzU[/]7=z,Է!R[Uw}.FV!B]T~Ӵ%I h4έUvWɋg׳jb?O^c'x$3f,)ء]R]SN5ZҴR˶XF܅hyţY x#첫ntK9slW7 g3ou=pMSJOF!4ˇr'F}nx؞dMD; &+(ϳ\ 哧ql31on^y<#`5YeDÊϯ̘ !Z3Oi$zB_gA0ēA XBuq6}5GҞ?">$VaZ4pm6;yuE[lJXar Ì pG8s> u=jz_/wWn~ U[ ('X}C0>JhFWI><涇D ԔOg7ɶAgq]g .]D.Be߱P1B;-?C HrO!%`s߻̛GӄXTr>29数+AfQL q28%<ׄcCRDM%|ٔUՓ?fpu'>*]G!T>)mJ Mܩ̜$U%3TP?;?)PuK<(z! g1%*+ oʝ)asg:|%ݳ8IGJsk;=N}jB+%WP[(bF=mqIK"XXђ\"S[kvuA| 9DJ vp4 x`_n}mXhȓH\t]DkWl,E[^&Pؒ g7%RX@&@UsT ٵq&m Nك&<2SNGG@a,Z6 *1 @..ce_U B&J Up(M O$|$C&v갍źB3M# d1da_/Bɀ1paP|H }^'4^b͐i/)Ap0~?<6-t[E֮zU:hWR%3 ͘LR rg6~>W!7!HĈ⥒uT#-  j6CϚ|8kg}U8{)rQYldzUeiT :[CbWg=^/_4m[vMQ J8GQB*GNOUAjƌJ<nP-&u?PAJ8C8C¤+ @TǮ`\ f"{eYֵ+Ceg/#`$5sR 9nkak)V;tLbꂖtR|OG$ח9rW)GAG/bD,E탙r vANw1Ƥ>M" {tCg}}gvIgۆ5~U[-Y*|Jr]lB_F\‰ ݥ+Y! |``|6eA%Jw&* c_:٧اφ>0pT ّPtfP U"?I@5))]TO|֝@DG4Oɥ g5VY9U@ƤHZ9GYJ$fWIlnix ptUo Cz{2"`<6>:9 Phu?e1@D%Y0Khpj:g=~7lʤb%[brx7cnNrVQXkCJQ>3=z>I2 endstream endobj 3648 0 obj << /Length 2011 /Filter /FlateDecode >> stream xXms۸_ɗ@S! }{\n(seXldQ%8)JKۙ3".Y|qp!7FN&X.dFpidq5~OMÏ~\t|q&&)HSR51N_g܄:8危{tʒɸ]1 &O;;e T.I0id:J˾T}M'FSwe*Dz>bKꦚ&0ڔr_eƷNtU9`h5MtyUnѨ`DhuFw\Cppؒ좆f,VmYmI( +!ŷG`X `E-[oS]!>yJf &"L8*Չv&3\"C3Fְ ޣ("'{ \[+cW 5Gk63@k|֭tL䐝YL L4$,@/Ho68Pdi x&m[lls[QThL0SBD2+xߴ$WP;t/,iDZC:,F(E(>c(8sw! 9 E:;P ZPgڷ}Kc4J-k BP+|¤G!ww~_r; @dDs(cO4")?CjKnpM-Ԯv,3|Mb$32p>jnᵁVZ@PDPeTS9kmEכ8Li)aW> mmٮqX]4P( ;]*H缞j3I( 'ɮ ,MѠU qHAbyVn6uWq"qK@m)89p, =3Q~*$0TM|us~1pCU]Z^$IQ$jd6&&`s % ޮM4b5FKRyK) 'Gҳ/Sh#;YD说$"*`~e33i⇷sh\_?{Ow].*eƐ0JoDʧq1TھF_ߧ*Ryn8N:_jERQyK"`8vK_qyeOBdLusHmaDM/j)){eM*~ 52jJ{2>3RFhaa|ZL ^YnAuJwZhZ1B Ƨa,k <^z0Zh4"̯̯b+*:{{.aC :u/7X|I!G !#/r2=i2=Y vsڔL|MM~ bM=s*l/6t/"а/:ٻ!C<M[bOݦv]Q.& W6jvlWiM* -9*F*h&G0JPU @<˄qSm_ɏ=-//.FIN߮ lScċP;fO[䟜CaeThS'S'eXkD*Ce)#zaुC wZ>ƉPBZoNDz"|~Rd@@褰=H}5AfM@.< V].bFq;O\(H#\_\;M=9CS͠L"~ZM endstream endobj 3637 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/loop.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3651 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3652 0 R >>/Font << /R8 3653 0 R>> >> /Length 8947 /Filter /FlateDecode >> stream x-Qghn[$\ *L"fW`b$ހ,$<*?ҽd3rwv>%W۫~weeVrO>۱-?~>Z]V6\ u7a=3UC?m)熯\O}_۹׿פ˭i{M`/Qs9*h*lz.=-2 궜Ze%V]FAՙ 7\|5m^nZ꾔&*c q5XGa`qjޢQzǒe4X5wU`unK;=%*h/qR{HxJYʞ9QVA՞c8֖zP`u|.G``uKh5oըε- ~D`&n>Hv<垎j}$ Hxrz^ni]BT1@F+1֘9lf5jqը S"׼ʫof4Zaᒴv{147jk\vnցA'U~Žl96vѮ,j:Jj^v.d.5Jĸ64G`l09T| V3F6mx(XZҨjǀ`Ȩfъ+/-j h:QU:0*UhY0W)1Qծ@ цqnA l vA3h*V'׆B$kvh螃.eK lEDI$0Z5Za(2F ";EQչ\-DFDXWC=h¨Ǹ0vAc{(1>֓ a; i.*k16[GVp~QW{[ 35Z lm$Ucъ۵r?5ǙAY+" ňN=+D.>hYm ]V+NҎ ϭF+DXGVx q6chw0ɚkhSekm_FF+hk !˜ leKns#q4Zq{`(UF+}䑪DQ.{1h:rG ר +b64٭Fq|"X@`m4ZIE0=AngoQκx|9;ض)jD4h6B3H4sv1g[5SgINۚL&A5" 3FD:hF VZ0Eiymw^nz2p5BNlGl74X 6xˢFHOX`Xg; "P1jD4P?4nP(h/|Ǵ-$hšaxgnϫMqk+H4`*ƭ D`t5kc^nܴp9BxvT`PMbVA!<oѨ Bu !j:cbLcUԈB85,m4ZacL[6AzxD5Za aܢ}#ܨ TYifЄh|$F=kG4F+{X&fԄh4  !lwLyi08v `ZdyOh3Ë+FS[ױJHCT$pQV ChY BvWAվ/I цhLZ&K y 5Zqi!Nhi@gш`c95ZL8rwA"YwqhZ3VxBț 9D-,X۽Jr1A ;wnl35BaG|V|³w(] 0{M ըqfh7nX%W߸M0WXDM0g߰w4Z+w `֌-q"s;Pb0F\Hӱ^ԄsVc0j0rTlN fS,\5ZU6}4Zr:츬FO!ch#S.w3jB.OsbzGAfpx+`qOhEق[QV>lJ8vt4B_t6Ey fc؈1t^3j"p;,$AFFӁͨ CKF6J3ϸfhVIxP0"gDVHAHRDȂ;@,F+_`kMG_ըju}AQ ׃GϠ ~Qᩋ` DMGqehq?(цSA$G;h³U Q >nFDtoF+DI9`5Z!ĨO;Z'95F<*<^50VXzpGH /Q"i}V7QcL?7KBQ>8Y !MeI(9*,2jb!x\&f4IЈgNbu MU qIhWƦ5c -A#5GQ#) 5j4; lQA`r'Ep&1\\h}43H\>h3HI̦sqШ \ZAS {kO mxƄ@S'=KAz~Ϩ 1Y}q<NpXu9<Sca7\spb4Q)?:o5xx 2|%BA,)Gkʅ=ϒ ƍ2>y cKۻDMG0 <vr􊉨YNu3j7<"P b/$^c4A2tMMecQ)\qZԔi_pl (9L9h| >=EGʞ2jB3*663h*(g `Qbgь p#!a1CJ-P ̡0s_v1ܮ)/= LU:|ALndI p!&';[6NИXP9yF\?.HlX&h̍֋Fjd3j̍9tBѰeԈ\,f{-(17)[Q#vQ'QbRS~&RxPy[nʡrj p_527j/Uv<&˨|$Ns trj=KN2Ϲk% #324J*]:gƌ^4.|zwl5+]b2J g *jB/*(GM%)2^ 2Yp UͷCQ*J2DK $ )_l/ e0 Cx )SFiG%‘U_bc# -Ĕ,59@L~I2'U\ ʜ jԄlcYXo ritʔg df;]N,%_AiZ@ {͠ (6 U zجg܌ĪF$Chb r'﷞3hYU6bD,CH}`JeC&s^'e> QS掊TZǼQ3<zIДs*e-{M=:^5r *M+3@(,j: F+A[_jT9CU|4ZD@D&DclZ9h* Iq^!Br/ 2 "Vr3<;j@YI7u84Z1hԨ ')O<8' ~Y;̣T }{4b=d$h)xvMXb’oFDfv4Z&L?F+t*15a']# ;mK^[$A'%^yO:d^7j5(dJ{[n$PztQ5 5!';B#͊&$@  A*=JF&f9 7:vd>z0hj*H htޞS=hUVѠ &5er;9`R~sbM׋z;5$!E3& X<=uByAS^Ѯyy'`QVYYTMiv=8E:Vˏryt3jjW4A=T{QMДjKFM8;[y:4+1,(hzSOU|pFMG(z h>]0S*&D^^?GW?t{?}n~wՏ_?^v{?/?_o7>}6Tߕ)J/)2|㛒?o]Oz__f8g|ܜq6gz;Ӕ1[{NKK3TKBsz7~:]szک9=;Ig̓9=Ke$mDǡszYg:s gt[,m %_wmƧeTqPϔߔCLKbEl};_۬x<g}lBoMͳ y6!w|x=g}l>͇ݳ{67&|x=g}l>͇ݳ{6w|x=gVxhYQVې_? gvJ͇ݳ{6w|x=wϦݳ~l:=wϦݳ~l:=gtx{6Mgtx{6Mgݳ~ka*˱!{}.o^vx? 2'7&لx<g}lBoMݳ{6w|x=g}l>͇ͳ {6w|x=g}l>͇ݳ{6wϾʻfG9<$ZqL. N|Y8_g/u]5_xjr3> ?Լ22W ;3`p2\ʤƒ)=t^gA-?Ygstkt)O:Lwӳ:p'>g:̋cSzVsszʤ3Hۤ3H)u;^v়3,͗|z:'O-!tu>gOYy693y|>ټv>gCg!|93y|>歚q>gCg 86Rw]!xڶ%_O_/G~;>_9ylrrYl>{6]|}=i>gv6agNg|}fG{6_١}gv\=agX|}gb0ag%OLgt}i!Yl> =Ͼ徯g4ag_Mg|}fe{6_Y܄}g_W3Ksܳ8|}f{6_Y}gNc%JϧDiW5QHUyq.gMo'=y|yf|y|yㄞY.Y܄Y^لYՄY҄Y&τY˄YV|yĄY9iٙ焞)ڄY|̄ٹńݟ3cxbUi;1\R97fOVnl/ؖo۷&v+XZMŷ~'ٰi endstream endobj 3656 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1617 >> stream xT{P߲i׍ky) U7,tw%RMbiֆ.Dcdc vWt7"!B&\2鿝ss{;A/0xJo.N{d1C͞z%(郯%r,K=><~ts06-088dˎ=e%fp=ce%&rqS7(7MeWvV3 MMB [*;՚^P JEP&B(%G?DE Z8tshAE<Šw&s++ګEl5{Z'QI%==; 8 =BK-> &aie|wh%)?ZL]"qqf%vbgڜdC&ЀKi պ!6B FtnZTt;_b2e=A &Є: Y) [J1ܺs9/cb񓯛! lɘ\9P R }M'U+dr rYNxɒDj&9bŤE0רr쾲 /}us7U׏8vʭslis`C [^8ifʬS*y٘,/Ee1qҬ6Ssc{'7YS VG3pXnO0xחM擦-?Ugh5 $?J>Ǝ/p ΐx]C+{@+(K7MaHTؼx[wu5:xߍ=KXR@x6B(8"Uxtʧ/?y o5x%~:0^k+Jv㬋ª\5s|Vݙn;Iz7K,鯯:?{ vK ?m8PBf[8miG=KI%m4`oӰ FA}okHkWefuMP7𳶸q叝]ڽcg.^ t1.im#͖s[/aљXsU~/k{ X(F {Kˉ2zw*{ .h*LpqODL8W}"Ņ?)ݥTqc{' O@ G),ߦW¦ޯ븣qG{RCV$nXluSԳ7O߁J՝d1% ~z@S:ou$eZJĆ"]j":<7n֟S㔃#ݮ؄܂M_:uՌakR.~99$?զ+/=eWCSQ"!g!0U%"[ eT:-QD3+{ÓsIrF!"!s'C0;CB gοYYܝz"sAo_2Ȇα1  >Jꄩ:''Mf̮ԯK)-ޟ=G\> п?D endstream endobj 3638 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/broken.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3657 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3658 0 R >>/Font << /R8 3659 0 R>> >> /Length 7143 /Filter /FlateDecode >> stream x]eQF,SEB"9[!fD$+DD!X;10)s_W<ɿ?Wpt/G){jk?FWF-A_ٟJk.z-e@XlG|̷_B>t˓nYZ?RMr?ra%' $rԲXWLXLMV q+&V'u&8x+6Y}^}E\1auAB|.dnXhHR֎MVg,>FJ\+&!HMI[Y+6Yпu&:Gh\ u#C4GFF"7aX|u֎iX,g105c y:ڋ@Zsp" VO;a"OBCxA!A(S+#VJ3>P)ɜ,)áq#IW֎+٪=,F,L{zwE# 4KPt(i1bQwOJc`Ģ*NI_e0bј))2ӭu N0{ň{ah߲Rx$2p?4/s-F, Q䜤"AAɳXԮ 6̶ӭS>iCmbĢœ8bĢ)!QOLSň\ 4eb8'~ ,F R>ňE(&RM/GDMlUYbOp,F|:8(<$#}Z}+Sl 1(Қ$dV1qӄ%/@ +[X)?i:[h)]];F,Ze#VA>EƊ՛vX"EyI#VJ9v XXG%w4XКky,#g5y.=IHikY , tCk٪#VLZ9 &`J4RfuT-F,~ǂ4߼ňU0AH~a1hTSWV*TRKOuuh1b5Qw4:'҉|Pބ?GBg$vE{Şn,;2b`~3#,1b"\,DL2[XFRHEsEk ʥ(ԣFaX V#VV,!5UX;e4a,DGY*.b`%^!\+p\Ч7 eL4%jݐD& )V,~,ƬzBƣ^5xZ eʳGKhKMJX#dLzI,dJ6ՎqhHbhK%Zwo%:E-]AO.L-9b晤 ⡆U/!Xj%HOd:v ,Ju`;9%*n0(hpJ11r\AgJBc3A^+qUTN~v ,zq4b雵 "%t^ifYJ(dsF'C74F"i(pUocΩ B*Ir B@.3TᅆS`HY9( ``XwZ>IuqcL0xOJ1$[4jG! =@FG,V ,9v ,ʹͽz@((T[b`QkO @dN{l[LҎx*S&d"Ra|#sE߂G@b pQgDJ.YYdJXf=<^֚aAD*suv ih)y\4G$t 0?&kxYT+41*zU;2s+MVb-FEwkZJUDrI-ɛ3uaoǰi% _ʼY[L0JUc`' 6-gwJ3_11 iEY;wo 3eXX #@:22̉<Ȣ^`̢N )h16:x1FŨB$c։3}YL2*kǘ Bk٪YŘub6^eTֆ>9vLXȫi82v 4hyŘ1]pØ1Jіd0~ >s!Q[s7>$촫9cܳx'd'1FJqI/2ڎ2uIw,cime }[cC2lP&1d8aWP%{G_r b`A9.``>KZHR~ Vhv`<{GRam1rEnO;`pivH4s1A`7+mzE$x+1έx| T3g|Pƕ]!^6bw8?~Zh*ky8Ca~iY ,,]&:]V_IYOWGѐ'Oo09 փKXyA``E2gNNԥSapiǎE9e0ǓY %#(f& V9vРJ. g\ՊdG1pZc(isW&f*pTLX ,zſ`RЃ-5$UJ CXefI-7a"(ĸs 1b$MsPDQ BFňG>d1b~f[I"Ů~#WPT,t룳F=wPnf)vOe%`1QS+1bĢ#xDM[b(dlbCR?d,F,7AZJZ Px0qP:ȽH1|ߖCg1kf#O`B-r%ѴTb``Uϕ9Y Eu@雖 <flǛi1@E@䣡xfJX'g) \#,,Ecb@]e0(Ci0Y 9[ a]@Wm/ 3XNxQYyvлZ/+cmX7D1cކH ,w=[H4;"&^ifAUd1W@Rb@nbCqQ(r+< VLi+0ẠG(C ;6Tx>sXg<#~Ďǐ-yP̎ S|3BW`y^%$=ҳcHOSq<AaL Z$lNnٴ~I'M]@GOΈ4gW1Mܟ25)Sܟ25*ܡ21*ܡ21*ܡ21*ܡ21)Sܡ21*ܡ21*ܡ21*ܡ21*ܟ25*ܡ21*܁wea+&8%! N9uA>ƈWD|7fz؎^N;^/5K endstream endobj 3662 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1553 >> stream xT}PTU}ٺ龞or@]E-P+pPeAjw%XQLËXMjeYH(++ aӹ;jo3w߹swe"1 3"l4KM(L`2v*pJ}u$BXbv"5P7(2L̂M!K2/\YVU^Z®=Y{K0WtSMٲjZ\U*U[Bo[bb>C?K3{ZXDT4BFD(%t ~$ ĠhڋT>4i((n0y[.(ϖ^BxUQT#ٽ¡rAMoIjY)oMiZW/)=SBT,ε.[{rE]LxXx44dd@ `+|H9Hå8z{CG-t15I/_"k* nǡc’`LG`j|Йple>{>wc:՘^yP$ F(arѵ}]ټ|Al$-IHLH9E0*__W=`= 6zm#aalMz۶7;ԲyU;JwqhN¶烄5r M۔,>SZ=ԟM+$𡽇 Nл6gs뺦>*s24&CzJ1=1$+¾-NS}ܑ2MRC9v B*is$g.)3?toN?ð(eIK +3$ QLAn!rs|,CpoՍW؃;*66>NɖE ^Y{>YWG0s"s^SHKiHӨq &\"}AYx:p`Ȱ͒l_O7$u-r}+f}( ɡƃzn7@Ұ^e[=G1>|^nYb-S/0eD煸/L&O*% rTm>ʹç&/:~Yp,6>ZZ(;>/:4i|kAbJ^Aq8/ M=5{VFvLގ+\.|q@ek/nt],HS DMCȐķ-nnOD7qr)h+[n4/P K~F[ܖA2ci]lZhD/9:2Svz'*ms+-YN\˧):R 2wrG\]RnWDo4. endstream endobj 3665 0 obj << /Length 1805 /Filter /FlateDecode >> stream xڭXnF}W}1J/7\P: @K-T&{BJ8i^rv8sfvv8ӃGY:`X`z5@+FJ}*~ylz?l(%)EIn>wE~<:Uv< ?޸16ޱv|THm"C(`*jzacHӒIy|qXHpCA$/ ߔpM2[.,蹐GdAQ4u07MV\ hZjmȒv_P&*/B<3Ar2fHv"d)HCҘղWn|?q'jcz ,! 9WY7"aA<@! % ,Z2>wB%6a}Gʨ$$OoN^M'E;ҍ&rLN*/> Y\Yp<\:+CX!MsGֲ۲ u^ը ߢb sMH"mXxo|1њ%v~t᪑{k_JNġѺ7j5wQOhUfV zYY`[o{/nb{-:"q|my[9u2yi@LT{ g}}!vLȚ~|s*MΧCpA=8:nb`X;HG5{ݲ#S-"M QDƏ^BM~;e@ ŤHD}UΔ#NGgc.W㛷[S[盻fj}X-B+oN-ksߩYK/ l| tt|mkI; )Y5 -m2,FgSȻHIԫM}ŷ\H=ǛV3=9㖇_"}8%v{sG} 1)Bz,A ҭZZ3\y>0/'ץhs,CFٲ\ǼM_x=Zfrx}B_UVboWlv.L{ wIq.q k>w0I[nZc>-Dd2hubk] A30A;R7:?M:8:;w{"ՄQb==zeC˟et$ﴗ}XN-ÆpNMWzR+P?C\ђ%cɘ>9榪 Ê偸RظL^ };p8$w;Xk֦`X\("`N5̱-\J{(lZĤ,^IśY endstream endobj 3644 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/hom2.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3669 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3670 0 R >>/Font << /R8 3671 0 R>> >> /Length 6861 /Filter /FlateDecode >> stream xmIUǍ{w0;haC$0@|GH|:p>ڵwj5+^}/]Sq_o~؎#+,1|VgG/ =vBg=^) ~*\lx!id\%__1#.SrVgjp|^A g[ T$n.*h3zEqY  x]lgMWeGJ}ܦ]'Kb2ˣ_W=Rgkb2<~ypW~dD}Vgޱ\ϫ#r1h4GI2oh/ 9eDV+3xԂxt .">ZLg}Y <2/xߗAڤc\n/19pe4:ڤ#][jpm!q2#\x!9l50d^WB?c]+]Gpi6|i:RӮUwh5q!rī"M#^Wb4z81wNk,| Եkpi:XL2]!ڱ*m޽P;:x2] J8hkʑc#]z[DOg;˩oI`6 Ȳ] Jsv~0cқ5$fR-@i-хiȌ5Sz?o58C(zM"V8ps=-GMӮхVs;1kB1Qk+FI5Ca=F+r=b.y_F+- ,ӴId ]O}MO"FY]uX0]E:5<-1tyޔsF 3]Lw45J?kFp׮хp"qc4 j= KF.SEE95]K\>uv.у*s=5hpUWp̖2]x1` Fa㡜iL7o40Х z:V1g۳kp5mls(nجF{ C7KY-3v.)5GL1Zi4dzk7\1#'UʚF\xy_F c,ΙGZ.c-12]x*ŀ; ht1]FW2G~|htqzBzR͙pOB`"eEnrk,Ƶ-˓"G2ݖ] 폷Xhu=g|ǎAhtaʑ\F&T6/LRػ[DVǦiBjp]Y=^MGO 7OӮd>AY_jb Gz] ,!c؆\e40.+f]ȱ~ӵkt!X<KCKF<[ht!_c_ؼݞ_`T&V+ bx W۵ktW9G7Fv.+l6]Ffy`cEb"8~jp%dΑ?F+?$&p]H83F}UWd߃`[#ht1~$^F 9an Oʎ?2g$zѐ*]x.[s58QTةAKTP&B}&#<[ @L~FT׮иp7՞a&]Pn(yMX.Wcn$x8^n\dI 5MhXęl&!V ~:M i4Ў|Lh4^17qpy j7!ciW`.EjpFv|Tda&ZVw9XY_>QB1>;MhĠUp]mшAǙ0AqhĠLP0s& ܞM!C]|F9'`457?F)'4^7F%p, ų^Y FWThz%ɷvhz%5hi5xL 6wF4ⱰW̶kK!jYMZax%&\3.J6:@m5lrďh.=@( Գj&fHl- fc<,̶itaĔ.d4lA9Q+$z!߈\tMP\%.2&(ιr\Xjt0Yp퇾ht ό&(.+^!if5AqM1/⠮]`fZIѥB,G4F5 )+4?Y0_LZ.I{asj LEprՈk1eʅ}6Z[jtb~\ᑋMJrҰ]rra( 2cՄv)$^F M(cQvfV#xR9F@`Yf_[x PafV#x\IZ1ܥ0h2Yš԰&_n'<uɤ̳r(aK DՈ'2b1Y]YNe4 vC0{1n2=̚]b%gp5$W\[ ²tJԭJ.3+LjDAKPrS$kp!{!NԯJV#8R:M؏E4HeO[%F"XF9XvU jƍFpvanӭF*XөXYyy SrКHZcV#zŘ(DbtN9e=bR\b,L1Hj. iX]1RqMjdjX Z:zJ Z;̐uոmd9wMЩl2i͉^Q'.Ip V F$Xk6L2 Q e6etĝ)srldWFIoFiϢ5&W}殽L:]+&ϊDM e`\+/wM ][qFLyW%Zk4E<ίhu6W_/DI856<$}+M!c5a*<++r]Y]ץ%~&Pt%I=]=hդRr?J-$zkɓvmNu]"RmrM\%F5NG0`4y5YGJ _ 4KdFYf&udR-Wk_ӝ. TVTn:GZMP]gӪN,<_(l V&lV[bh̲`RwMEK "u={Um಻j]\VR_]&^ y^E3F`N4.l"O&S &62h}ۮ T( &Ps(y).۵Yvq@5V&tNޮ] ; Ǫ75AoRX7εCsVUڮ |b>Y]vݟѸ}YM[ oפZ.Ƽ`h*#&Ng47&pSktEb+ap ȓTP*+ARh.@D&3:5kf t1 < :0ecExFGtKw7xT' װpѤPbtGFHfIa7wO/K{Xv#Ǐ7?F/dvu?{ǏS`I\hE?ºG[@<>,BΏ7|ʔW^rs<_ן<s_?xݿ oo}_o>~'_ۯoEw*o)oD(%-UftrIN#2:cd܄l\^g F1i{#cuj: vK\F&Tgd!9AbNgD>3ҽ 0eda># OБ}>_5ER'?CweQl! Vޯ+ޟ932xFC?#s52x_#52x_#52x_#52x_#gdFkdFkdFkdFkdFx_#5/~LUy*}⯿ Bz')}}}_+2wxE;"sWd;"sWd_+2wxE;"/x*[V+w'珝32xFC?#sgdFkdFkdFkdFkd!}}}}WkdF%_l*[jq+{y3 @A{Xu*^T*>ADY0<d.sededed}2 ~2|3Lx2R ~?(_Vٸ Ngq-.gdzAagd~qNgtE3HXwYNgR\~A7,/_t_~7ZdApw-.E Bp)Bp)V/2"[_d E+mL!L!~jF!Bp)B/~d(8S|઼/9q}t9[|7+2w'WVdL.ي]鑌>[3=lg+2}6F>L#gaidL_idl83_ }3- g+2}6 ^FϾ/^dHaidl_93_2}Y242} |"eL#sgZVdl:3_͢[}YN4/~ {GKT(JzPN::9jx:i?ܧ5"TiȴadadbadadadFadadad*_dZ;0Ya0y0yZ0y0y0y>0y0y/2=qM_F<Ēa vv~'I' endstream endobj 3674 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1483 >> stream xTyPSG ƨ>ѪI*F%\EU@ qH!1jG]Vmmmz-hţEJ@X8~Ytogvv1 bgސ7gҺ3_2!\ 它Q7zr,KICܠ/, >eqSy&>g9Y Q~OԡܬLzg&,%4S*лSsK(Xu#G(Ţ(%( MC4q ި/rCHP=cRϙ.^.\gIddd䡫+QBZj%EBWQ3W~.E+v9*)y l;k8ࢃDPm/|&CԘG,< h`ߑ Mpf{LE&X0F5 O4$DN'ҡ+qdcϞ$nt}ڬ&c̴ |(q T]^a::۸3SoG=uDEUKlSL,K>FmUy8c@rʢ)_S޽qRntemU ڴ8[~ZSbJ,P*x[vlthh.4TwOO6ٺskw>xCg],Ua}r;#E?Nj"Ӿ$.O:%ڀ<{V !;`6V<`/!4uxnij6'3->[/pVa{GfݯR@8̂({ml*wc=d|ͯ[oG(Bwz$=;%e.xibSʴ}xǩܝn(AD,)t]=_\=Z8R/\{9dZ=GҧפnʵH +>nWqq.bZE3U3b>x72B 4_6!d+u .4 4G 9pӵ^\ݴ1pBlvpnQ6#԰LѮ{&Ea~ T߿zU>T>yo9ڗ_5>pQ˵#o>/Font << /R8 3677 0 R>> >> /Length 5259 /Filter /FlateDecode >> stream x]%QE,SWSŌmh#$03-+#,`')x Ή{3zfnfӡڧϽ'#32d~^5-??y=}ܖ_ֽ,RR~?ױ/ri号Mn/n{k.c=[xt݁ o5o"Q {]sx̱5wyme)SH3Ξ2絥qZ^nd9 QNdk{֗Zu<ԑr1*}eo ?rX;^rm~kvf^ 66*1U[:Z gF`$ ZzMXe[7]:p>YnkoccPOB3"ӆ&=1`ʔuOjd': , yf+ƸFGNkSÞo@3 9f<Vjv'U9: zc`(2s+FrX;rON@ a`/S0DV[eeg<Vѽ }2Δ1FGk籯9{-8SuM.ґ10 Zf Mӡ8 sZf,ĠKk3[9Al#uÜڙҴ#kz[d1:=#!hj{6& 1#ջwUwO{9cg f>5cd!%VXf a%ΓwY543DNEFeSD#ca87cd.j}$8 ,F{ƤˀI;.'N;#YȭylWlF f?Cf,hmsrY2@G5C䴃ʭ4cd}lgߓ+sB :$9H}ԫFV9XgF";fy8;,TxgM5cdac;]00K03j1e+rF4|DfMFVubk rŁ sucda! 'kj E&pż:T*9̺+# 1+R~88Y3F.]$(T'kBqk'Xi vM0c'K3D@ag-=@uXY3*oQ}=|,jj:cdwxe]zD--5%Y`FU,\O (];<^Kv$6adB]ڤycdaeD}47֌3rgm_vТK)" #Ju =FԠ[˫f,;&սY3F :e#M8ґF;T6n`4cdCmXpY?11!8cdac۪1P !ZPW#f,ʚ11B60*"QwDUk"Z#C$4cdqa?f:™f8 # 5"rYpbz\IDwd[+<֎3 (ˈā[?8,f\Qmƚ10006w[X#+ai#d1)cXK9Ce8v57-CA0n-0ZXYz7)F3q{$c4yTö;.V'I (8wn0;6ZxxqãN+ }-=F+qI5abZ9C44m$nWu;LmN;1*%#v3wXwf+Y,G*>I rUl.2+|= ؅;͍ Ċ ]n⌙]M]ɚ1 -QœZPݭ9κoFj{iF%[Jז i( j4׍5c46E F(;n9L .{7]=&fiҨv9,s1#b GfLL|g7cbӾ͞11N-ջ?7cbI;Qr^!rKhpsF9#+3ݝGS,3ڸĠ;+]݄A=o9,tpnV3+abUYj5$ffĠK,q{AWb7]cdlg.ϖ&6.=BjI~M2*&&^ee!»VM,s{e&ތǥtT۳8HF0*11a6G63ɚ1t6֌ўCY4kl9L@HՇv LγH%͘X=g\և qˤtXrR!]  =%K5Cp+ z,1W2c%M9\,^t 'NR4NLr右ko^/իQ.AI׷t]||1W473_WP<<^.p桉y;t=$(j{hmzkNvyZ(Oo=/nO)~t{ߧ=}=?'˟ǿ?}7 A+⇂pV/AwdO_,/JYEb*cISb*kB*[ LQ뾘ʰ! dz1UZV!-j9z F 2$3,R˝u\~EP~<[o'og5,,,o,o,o,o,,o,o,o,o7ƳMY<{ߔ}k.!z?'<p2{_>k+ogg~^H{ߔųMY<{ߔųMY<{ߔųMY<{R޿/eKY8{R޿/eKY8{ߔų/eKY8{R޿/eKY8{R޿/1) g_ʾàJyYt{Ϗg'Ϗi﫲* h﫲* h﫲* hx)gx)gx)gx)g﫲)gx)gx)gx)gx}S7e7\!z{ߗ*{߿˕d{J|ͣo@g3(졆S3Gs ; ~KewRYwRY,m4")Xf!!սUQ3H_o#j[ 4䔃fwq4zD ܉Tv$/0l9h) %נ#J} ;ОG4Lp.<2)epfSf&xsOLoSf*ӻ鍹^Y@ez*2P LTB) >2=Lt*ӓπ|02=E LϚ)"2u*S(H3{ރ-{J endstream endobj 3680 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1483 >> stream xTyPSG ƨ>ѪI*F%\EU@ qH!1jG]Vmmmz-hţEJ@X8~Ytogvv1 bgސ7gҺ3_2!\ 它Q7zr,KICܠ/, >eqSy&>g9Y Q~OԡܬLzg&,%4S*лSsK(Xu#G(Ţ(%( MC4q ި/rCHP=cRϙ.^.\gIddd䡫+QBZj%EBWQ3W~.E+v9*)y l;k8ࢃDPm/|&CԘG,< h`ߑ Mpf{LE&X0F5 O4$DN'ҡ+qdcϞ$nt}ڬ&c̴ |(q T]^a::۸3SoG=uDEUKlSL,K>FmUy8c@rʢ)_S޽qRntemU ڴ8[~ZSbJ,P*x[vlthh.4TwOO6ٺskw>xCg],Ua}r;#E?Nj"Ӿ$.O:%ڀ<{V !;`6V<`/!4uxnij6'3->[/pVa{GfݯR@8̂({ml*wc=d|ͯ[oG(Bwz$=;%e.xibSʴ}xǩܝn(AD,)t]=_\=Z8R/\{9dZ=GҧפnʵH +>nWqq.bZE3U3b>x72B 4_6!d+u .4 4G 9pӵ^\ݴ1pBlvpnQ6#԰LѮ{&Ea~ T߿zU>T>yo9ڗ_5>pQ˵#o> stream x[msH_1Uy.$!ɱ>GIt8VR6r؎3/(cL#LYxe"054JR1c= V0 5(B-T遠2P)0!Bq$tBBI3)9p%KIdфDICVɾv=ԓ_hJP*mȮ'CnnH㝓d"kGtlf i)b1MB)0=YΙPIdbI2I]ㅃ pzC]X$-PZXfytV3GB3!aj6Dkn)fRpP $}-~X]B'4jHtiC;ڄDZm18d`GU?Cm"S| jiJ>Rf#H̲a,10mOI1:%Wߕ Lۉt+9Vr6R|)gRn`O:Y=z8/ʪˊ!-cg*/z;*cv!|-}W+NUe}f[Ӽ=aY &>p!D"Fpu/.,r::4E/O!=tS8r+}İyb;o^m8ufdux`*2Z!UC(yd>έ:'/e,nF'y3^_4 xP}M󘿰.o41vgervPB Ѿ|gguWUwzg=a]cR[gq@gM)/KtICJ}uz_g):qy^.~^eve~vyV,Kߋ*IuwH©tӇ©k4R!I` ZpyR%DN4 9JGyWfq7Fh$4^.ϡphɡhh'LB,]HD%32$ fb=9&e8'HW &`M r0J gճl^?bJJS2cnvvo~v78Apj؁/HYěLs6iNCM09:IG@M[&H ݋4x5?Nk+2m"FtW"mKd eĸ`MbWP~1a]9ȳδo901}"w,qA 1;/Ecl?mxɘ/4-m-#MG C;@a;͆܁hC7H/UҢI.xWr)A1AJ% f3!ܵvfMNhÄvqJGvDkBa-9Vrȝ]nQz wXXIPxr0U N'Fޏuk]CB4O\pL,݌3:ql ^K2LitޙenW{ޭU_N' XtnLAʬs#DQ^$t/K7{'F\Y=nX :bC'L̮y<נ9y&0RT%ƬB/AS@}5jj9zU; pSKw_eU>q}s+s+VZO 2_z6|U{`Q -q1|Aj]7II^dMA!eMg@dhy5Fk4k&IU4kI_II0& VR9CӸ>miOwATP $HjP eoUxϮ'NNOLs0n endstream endobj 3687 0 obj << /Length 2175 /Filter /FlateDecode >> stream xXoF_!܋iT.SKpM(ʤ@I}}gv(v} oRcdq=1qc' &,֓_m~:S%}oql!ZݞΤKrVI򡽭J"~=5:"[n/}K1wmi(Lqә6ڼ8kQ' >i x>kN+5]j}23%d&4ҶQM}R9Qu} /đEn*o)bEU,ZJ伌g6 ĝn3|G)+|F/vt;z1ʇJ 'u6 fC-ee],O"o?KUn*H0˛[b jmNERܔ=cƤQȩIFMoiVg^x6U,2\MqpW>mS&M8,|V)!a,613Weffpz`sc:l2og{\SPY+:UvcRk)9B5x6B؎=;7e YP3Lk|UY\ItJuuG1[ mqsK$ {\Phev&+ףǫ3.p)Ϭ"F21Ʉ 6D3NKLk.xOBrTSL/>~+9X|\5|&<||5-LcR0KRSJ?˺~g 46 %ɷ~<Ny @SOڷ'/Y $J8dOJ o/; L/Glg@^I Y):fPumT%=&1B|`b$̉ON &X_!'aP% a,=†YK/0E()8#CuF ݃uÃ< BK5B&2,; A.sXW=6WmAzmJ%r8whp] q)zF.j70>JE w#,d@qi}=Y& d=MȦU{Ks]Vfai-l2n^g3hdF+IpguxoUE[籁1G*+N'X**}sd}(Qx).uzJ5yb1pi}9狟?.F#3/ѐVRգO>}v'h)%|'p(q0;g4wH'5exșF3c~vʇsb(Μ9@*RcϨMſ>1t}ʮPGeW6k]WMWu2ʤR.C!+8cW]@K *og9<2kڎ V>roڌ5,/^ M{gˍ{)*='d<.#=BX0n \jl+*OtB|H͘OE,ajlΰ0!a_e\ @-Қ= .kƱ*b@ o{mYRn<<&߃/DXMݑP%a6=x .mކf٣o8d&+$ U#e߇{?d۸|GHځ#|;pc͟5]4MMI uz ڹ]VYW0֣w9C1⇱c2Lی޷1z~ ր%Oc7ܶǰIm]$_ygvwh!ׂ&v5x&FAx-K^]m,$ endstream endobj 3694 0 obj << /Length 1892 /Filter /FlateDecode >> stream xXK6шSТ]$E6^$(["K,ǻP쥳-gH133M63`B fjS"L̾o/^oXKbwWO/E>XҹfVͮ7euyUH4D\un]eGۍ[r7Ft,&򹜧€"\+:\$}X$+t{]5GWUeS}]-B?|wWV8ё-P@3>\>.Kw`cȖŔgdL! OP 5@C6Qd -!dymW۾/yڮ?]HrAOueIX0NMq3!m}EE$& \Was ͇InGJ/K/>Q0j#PeYdiCs1~-[JME=bQ#eVA;t. Qf<>ElTɴ̆H|qfO(ey1=-=E +@=P3cԉB!HF$v#3Q Re}s2Xui(婯ィgy YfKE2{SpVT YWW阾Rm "0` hxrf9u=$g(>ܣ۾mҝc K>G'sđ8炂3}赢M\f4RQ mz(JKK9lzJ|-{ϚiF$} ک#x5EX} 4K y;w4m'~U ˊ)1A|j!OƉ5Z31eFq]" B (?Bk8xDgpɏa nۗkU,ӆd`E,^)08yqRlA@2ʗ> kul.=$ iKy4MCw;y(Y} S+q@5qtSZ/ȱX_ygKX6=r V*ze@qJؙJh9>Pd$3qԶHۦ!;2Ʒ\%تeV U62zț3T^Q'J1'h8oH¿zљLwTzuZ 1ٙSRcNV4Sf'"! ɋlwA%eTy֛:Ԍ.7( #/ p=$ 018pPCFaB endstream endobj 3684 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/parspace.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3698 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3699 0 R >>/Font << /R8 3700 0 R/R10 3701 0 R>> >> /Length 3745 /Filter /FlateDecode >> stream x]ˎ%GE,+ja#c,/<~FHqe\Ì X;38QUYgqɡ8U'o=qO2?zz69aN&Jʦ{մ4?<:5Zė}8inޗ4,}ée~:}m?!O[4R|Ŵ.:S}pƷ<ߞ7\ɹM֠}4!n/潉t2W|ҌsEb+'g\ &r)t>9au0UEd8x슋׺!7C2Z2Z?ZMAC[ _NN0z+y/hFWe{4<]p>;Mand% =+1kd2N'o/ѡ-ݡ'WLa|Aɶ.q>;CWΙ1 +&84t=&L4)RU,ޣۊ@A;(*`#OʈQ.j=&L ΡETlhh;,$Y[{8DO>K#u% z[vXb1F*Bclw[ӮC[%Au=F0Cq>;ьH5&r5AS%f;Yus84R8*W!!"xm|sI ͙"}4!duUR`zF$-XDWIok<{%bߟh\t®p+>~,!"~р2ɺ[8[8QaQ,0GtV~ձ$*C9Js Ϊnt~c=t}OϿy<]l }o<~?զx髯a;{?g_{q_ˋ/7o07Bn[m~#F~0pzf~2fYI)3J:QŭqT2C$I)3zG'@Y^%Rfh j i * zĻ4xFcARArAASAJ#HpQi >}#{tߑMd~z&\8ͦq\(UBy3S(wf Lߙ)>y_>y_>y_>y_;30' 3}0' 3}0' 3}0' 3}}aOf}le}A?Y~φ="yŕRy_>y_>y_>yeN_Wf:yeN_Wf:y_Wf:yeN_Wf:yeN_WQ2S'^gսߑ>K4>Xw~Sޯ%g']$ӧ;3~gPBy3S(wf }aOf}aOf}aOf}aOfL/L/L/L/L/z>y_+yZ}z?~xT^GǗ.m3q}=}Kl~k}{F q DA HzէNf4*i*9K)D1R,hYZ#(MkiVi) P>cAh#YZ#i) z$4F]e~ĝ݁?-t}8z-%ELp}DLp u\!.+dpY u\32Bfz? u\!.+dp}d1\!.+dp̺Jߞs_9}%p.A+qsiϷ8}CG<__L͎}l/ϟI6t<M?k:}0jRZ1)'Bĺ;p@+9G!a@O㻫.q*d+ChP5Pe9|3ٴPM ]Rۑ~o_N endstream endobj 3705 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1604 >> stream xT{PSW?$7bL:uPPFQPA`(kZjՃ8u0"UqGѪ-ZB4hbZ2gF:;s3o~C!(jRP7d̀ (X 떂Q(X:ݚ Jp ;ndrB*Xk)0kS?̿o#|ie9iWu[r^|_]7NcH_;D6ncAgQ O(ɓ1Lc\8eweCyI*lݝͰ G1w{GiJ7exZS{8a4}ja]OV^DD"H{EB"3q*\_ԲG]gqGGzn aqOBNk!LYPYnj+.I>ilط,. WJ]q]Dl6ϐi7`L P( yeFz-,_p!x$e~w>ZN^y|N'gK\ѕ'e ݺ(̰* ܖ%An_ߠMk/:y;qOiYQ8GrJf\˸OO]gCf7n\bqy/zQ lH/{;F7UJFڳoL]rb }D[[|5Dyϝ0ӝ߾씂}|m ޡd*|"wѕR߅ͫ+9;{ 1 ]"C8G]9{R`\+Y$)nI^S ;)~ HX:7EOb{ܑ"{׍^HB5$$9 ۟B w>|ܱn8$l?Re@ >d0",g_d'$F/ `vϊf9;B8=h͊ȊXnݾ֖ %in$/_Q4kysۓ1&HɦM / R!T7H ھ`ަ:9hk臓MUdjٛD endstream endobj 3706 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 338 >> stream xcd`ab`ddvˬHMuIq~H3a!]Sg.,Ϝ?xyyX`^#{ #{DРpMmmʢ#CJKjqfzQ_W◙TZWqg2SD(%3##]U|?t?Y;[{ o7E݉~Od3ȏ󏞟؍uu>[ \'@ݏo,={Grhb+YcÔپ p}:t^d endstream endobj 3709 0 obj << /Length 2210 /Filter /FlateDecode >> stream xXmo6". .f.j|H]\v(N,ޯ %Gi237W_LV#ϖwgfV3 &:[nxd/ ;jt ~U3ޤAꒋmag*aMM ]?Qdhξ߆^H5WЮ.45XXkJlMf+><__kș1|5ҞhJjY#Zf(qC׀!ZВʸ\!j XBK;Z5(wm!)>nO7 ~.X(v/mC=(W$e_8zR,͜tvyh4t$Z5-)gT=mOdeu{XP9P:fU? rYY=z='J1 4CY)|Ǘ+OvFYᎆ90@ Zk30ET #?b>G/6\6[L9p̙Wk0H9F(9)3XaX#tjZ/WbXjByҜ]7UInTsmܮ6Ky-_)pYd`C \f~W ro&.+26^|peO#6`OINb$+D!śr{4(ǍzI:DV7 ?ƦMdB9BjJ!\l ;_{mnVA4Po PV3F'-O eMء$%X9mb u--0 Zj hh}L2i cSH6x]ܪ Af wMLQ/:fSy/\F=ڿJqj:43]P'$CC=MM 6v }Js;u h4?*%qlCU [P[_RM{mr& 7u#eU_NlVPYO=vH@?G4^(;ŴVΡo+" IBd9Bt! 0AL|'# WD?@JܼPRNCmPHg#$u' x VqhZAƀrE?$}_jry&%94TlPQ*$T4:$Rt"E%q ?FJ5L&%>zD OA> PoBN˛|Ő1gs]rq$[UvTSb;ԊHUddn.mO;qh' {p#_88$@ɔ3}*ƾܥVv~GPS8T8 9)GJ0sʨF֍~G˘IcB<)ɤ5ճfAMgA-DPc; &ta?s *O&ɂ)$\'y12K k|\@)2;W DF!{^7 @l0n.AKk)\o/syNO뵇]ed?}6)ϝN8qv"vÉς%ە|yET1Cu㧿<HǷ/$W$}w[ρ\ޕYU- ے,Iz;N㳊J#c,=K,Sr8._bw&T/4x`daܤ f:1JN&Y.i4pNo- 4=L, u%sx=j{(FHS{I؇nqeH4w|r_8i~|G"=4CK4TRT$ h\=>MCTtXW_[dTC_zΡ뎾Qܠ) 0CpJjswȗ۲Nhl>aCy~/KɈC7+z%u]Hlgz3uf ezۣض`L1C endstream endobj 3715 0 obj << /Length 1679 /Filter /FlateDecode >> stream xڵ]o6=Kd,b-@R,:t]z(uBmɕ4ٯߑwtlGI3K:W1r2XǔL0l>+yu1M%7y~6M.7'o^ųOp4BLzK@p c ." ~X&y*4"O!MI߇: `9Xa5# ؒrYx-]S3m$S.CU bmu*ʒmPey_aUe%f#I\Ex[2̩hsXު 1$KHV+ƭUXifrĖ#VL>_1Thc(rB/( dKR>j}eb^ T]~y=&ʙ&o>.fJ4xR> ~EV,ƒ2]+:[M]".嘐Ydn"A'ň>NMؙj0{|ߜ BCeD֑(.) 1VE;t_THN2KB)z\]5ˡ"z;B`!9 Vݨ]d}L!Gb~J`>bh? "$Hm:s2Hδ>RE10[y =b 'lO|Dž0{!|KC}A!N<`!<3"9 :s !?+G|_PP2irO:/J H1s#0y4dh.;mS!ƢX^æk\= pcIk7q] V_6ʗPɓ(ŀnIϑb<ک U4=:Oe?'3ᔖxf97gi$P{}1Ih*y0KH `%*QPfknlgĞ=2.p4O!( 7Cj(%TaMVti,#A*Ǭrv#9Vf;埪٫lg)m  \ɳX`*6=MÌ*MAFH?]n}b2 7>anzsGxG a"O!:)D` ɒeUïZ--D)Ne0TV]YlKnW TI UM>)i_R endstream endobj 3712 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/shilgap.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 3718 0 R /BBox [0 0 376 348] /Resources << /ProcSet [ /PDF /ImageB /Text ] /ExtGState << /R7 3719 0 R >>/Font << /R8 3720 0 R/R10 3721 0 R>> >> /Length 2568 /Filter /FlateDecode >> stream xݝώ<؁cc{/` NA99C@rBN9r˓)"zG#`F{,JE?N-y1ZF+_'y|bp&oi&z a)=bj_>q50j|򋁊aqt!U-35ܾ}u13w_o'^(ax/}3|r7}0iU7DoR]rdb UM姂t,)Z]ƺ%Yl5_| ՄE5_r6.bnRr&-|&2)^^0iEt,,HD'c}^ǂ$ܲ hʴ`]7hQe|ʀ`yۼ0cAs e.Hxp,y~A99D6rIsA(X9\0y rAmƍ -:@i4yY~Z_ ZaY[4zHt ?]y`ڧX8gtIZݱF\.#fie|dz%WɅ?ehSًi+U;$&~fח?<\rǣ?O?^6\?~}4|}IpW7/$F.dSGx:S %8Ypd]Ñu GL%8Jp<2xd*T㑩#}6QT㑩#S GL%8Jp<2xd*Ⱥ#S GL%'7 ?mKg^$7JG|{Jp<2xd*T5 H$8 YdM5 H$8 Yd ,&ɚ$kIp@&ɚ$kIp<2dM5 H$8ٽIpG֐[J9[G#WG$՛/w>δp-8Ypd݂Ñu GL-8Zp<2xdjԂ㑩#S GjԂ㑩#S GL-8Zp<2pd݂㑩#S Gݗrw K-xƧf Ƨg^$32yzȯ GL-8Zp@fɚ$kYp@fɚ$kYp<2d͂5 H,8 Yd͂5 H,8 Yxdjɚ$kYpdu@\jQ?W_.L~޼$NΙʛE>2Hg'88ߞmeNjXe˼m,]^"<[:&{)e2]MOPw_Ȉ endstream endobj 3725 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 1643 >> stream xT}PSW$/6+RC"]P`0.MBjn֋8YdK'TZmWi*7 Ƭ `Je.3wss~^ EQ zJEq|0Ň!"l6y$Q^7OeDX&n Űi?DE-1kj*wY+Tʝ ʟNJ2\X5&ٲʴsOPg/B3Woc0V&V%)SVO@H e|h P BZE $CO( z 1@o9*:DQu񜄒(I|?ڑ]3m &؏|6]Rɿ&yԝ;.gSqizfZ*ܷ8'u n?ˑPAa wu!Q4qH yfSZ\ , ?;Ayx̙A"*f,l d&6ݨEL4Ff&*38` 4nBm`D;cԑ+5$\7ľm)O~,TrtyiBTur6É{O^g?f vP9)^U_t1RH:IB&@)iKfie6.۫z;YfrV([j+eA%h7ǖbǙ ){CWΖB~~H`8k ƥ>*w |n@שŻY8g7^/{k3M7A?{3㗵k _y9RD$~?iZ.3Wx2=Au .(+KZ8.!E"}T\˳Y]nX՗􁂽Չz ׌`6DN>M7?~=kgwf\-i0JQẉ1 ƧE0iIBR2JGjia#vA_p ~tB6I_Z13c } ?:s^ݲmE7谹yeRʹSqJ p5lEsBfup*VW~^W 'i.!g(`i=ª7l1(!}?>_,,&;1+5kVۿ|-tO/;KYų4I%2ID19ܧ;a]*b&Թ:<8,LA,?|~_c@r81rWlה RxzVwY1n,3gkY{GC'\T9~mqu 9{ $021Սd-pӾG"QXXr}3a^vpCYqbیvuB(wJ XF5(s4 "OW=ѫA )"(:»G=IA1Wlݖo$!o ;=/R^Wp23 1l۶"2[( 33GQ"l [82-$5j~ɓ[mޓ&lYBde endstream endobj 3726 0 obj << /Filter /FlateDecode /Subtype /Type1C /Length 338 >> stream xcd`ab`ddvˬHMuIq~H3a!]Sg.,Ϝ?xyyX`^#{ #{DРpMmmʢ#CJKjqfzQ_W◙TZWqg2SD(%3##]U|?t?Y;[{ o7E݉~Od3ȏ󏞟؍uu>[ \'@ݏo,={Grhb+YcÔپ p}:t^d endstream endobj 3730 0 obj << /Length 3298 /Filter /FlateDecode >> stream x[msܶ_qPcWG%6Ic{:qrwI^dw_i ]<zyuwΘ&)9)Mgf1ZE\q>gҪelEsiTgm~&U{6_cl-\s^\g{6Cn̔ ښٜ3bqSɋeZ`?5/eοM]/VFEg-Et#~ `48uJ 7Ixqmۤ8џ]E~~?&JTQfUݦ&_z&USG;7y"Q^-MZOLb`s 5 _]^}cńx0NDҶYȳQAmQ!F J{TăArinҵ*aFqx2@!ڱ gCOpOA, rUaEo6P4o by+OAY lB2$,.h "Z}7xknEkм(p/JC kjmUaz(gd2qS )6Qt|\?e࿐UpbWKGr 4_éJTNGxa05{|Rア@-,XI i1V/D̞,Y0%b@C"g-"%XJe%+G 3 &wH:%9K& ~XZwfӅ:CuLYVUɒV>UIIVI-%DQ0_Mp;+;{L{{n$`Yy$rKyڒXs3VlG>2 Sf{860[.60=1&Ӈ$\|55c$ݣ1ru5jaz¶ړ0gK6_X:hcHm|6v E\ fE"ol Q̴tcTЈՄ/~Wi:UɨyQƄ.iejwNӁfuՐZd ZVk4&Q Sݽ8Z x18(H ҮlyluzEdԁa, Y 10\=B{zz{Wrv( 4)`%Ɓ_RG\'j|jsjBý*gԮvN=^7@P5s ɰ,aF^j|U# 7(~v?RANX)YySs SQf+m7&adS:\P+Hbfl }Pw%:QRy\'5;wR0ۥ|C[G T؏yf,ԘWu\]PQ?-\86f+OfȄNpiKOdLX z[%ⳌkkH?ݭA [k3a[YE-R׷sLHdy T Pj[6҉ߖ^pg'kNn%n;7s#1J5u(pٔXV\<B ͮ3w\##h@{Tv!"N)uc0VeCp[=41'L <(+e_Mxjc@ Pfz] @=mb $(-O()O3S?eBb`XX5z- Q޽(րEz'$FEu|%= ,;n{(/bѹl"3.2w-4:&'̝1 \| M.Ehz1*^(审 8&dkyAFepBv!$ ^wLc$~lT]v}>l= u"WALTߏj's0݃56L'( XW_(!3otUMԚktji<Ž>:19 1R=$+4/f2]nCEZE4." K:dH6aD1g9F;3'}@h!9}uީ͇%Yk |~/)W!M7XULh+:NT> :"ڿo)+u h^ }_WWlM/`c"gXA.s|ynXTV1;7EpUhpӦ֕|Xؖ>A_S۫0綄TAP6|׭kߦím3mȴ-$wW1a3)k 1d3$nc尡9EZ> arVeQK_F7tͨSbi;?-ai`oamT+4_ hËͻok6d@ou pOtmUNú%^z (C/cr-9cnTPꔍ<>;y*;'-lW>D+x3&u*8pst'|? endstream endobj 3736 0 obj << /Length 1777 /Filter /FlateDecode >> stream xڽKs6^LMMGZgNde2M-1tIڮ}/`[dKba'O_=#!le&BΤ"h6[ff]9kӗLeFRo&CL"CH>"OE "$>J҈c^6&()XeEJ\XngLEi(湤:8$+93$[ xζom g }x. E]eءrbZCkmrD#Υ꼊9XaƿY!we1Q!_EٯPb5U +y9jڳ[ ;$"{];3LrHE^_$_01XՌEݒu;~xL0k?kGOFaG'G_W׈'G(ƥ5YA V!f;X):{S- W_ıir3{EoL΢B[9P,A۠IxFB1=qC89Ht6r1 Piyjr$n҇fa:BSal| .<+\8Ϊ7?c"K?^ )PN^nĥܐ.KIn0RZ01!L&4 a¾gÄ=&vZƒ<"q$a!HxPi$&*E98H^A`$EgJ/H ]."E7u{ၶZjUsnhXWAQ|EUTE^ ,m<{_4U?}UYȂd?%.|VҞ66s;ƿRxf$Vy^\>‰V2%I[:SP`^I`r  E̼) cQd倨 rꀬ[y=w T5*` \郒 A=`|J. !,vriU4pI(bM$Ԙ#H.-6٣lz9\q =ACu0ӱ._0]*Q7e@5a jtܱ}FuR dnab|F"9†*uO q`fޠvS{ܹCtCB9|*laM @pWrȏG!`u[u(~/mExdop::pDoꊜÝy=Jʢ•o,ߘ0v]_:BKZS6E s\?\c=Z$BUP p܎Ui/'~#NXLPRƒQYGi*Sn#F blZ*0$Tb0B!(ln#blpPa!0Mk $"܆T4Ji)%eBNZ!^w` u J7|o}@<@]XGQp4dR~oe? sגcnP FD;+?*{l$ ̰IJrh҂ pa:֡ ^IK qzA6v0ehPdOM ^ K 9 3@sbH@AC.|ZA@E߁JYJBR Ƿ''\ endstream endobj 3743 0 obj << /Length 1253 /Filter /FlateDecode >> stream xڕVYo6~b-jѼIpqQgSp-%Iv9 &wiodwٌ1R*ųU Jg0¬Ȗ|0&v:&A\6&O`?誻mWdQ(3׻IG.iQT^ofpEziצ͗E'->zfDJ]u=x%̙  ܠ. _ ^f B4LRDxHLM<-h'ܻEΏ/r*e_<0IZ$cבI/G5YBip)9P .eQF_8X cFjQH]n!몽v+(+akr}$ed#`]3v5 g\l q"=AmT K"1ӛz@44<Ӎl\p!a,q4l蝰1yK$uWĖQ|2GP-|{ijRD-%R!@|nڸs^XJmg_R+r+X<Ŏ(IYs a pYPŏkq˷鋺ks2b/k #u`p u|B9uݦ#z pV ΪoƮU_mBRwcՄnhJ=!JNsmo BA.%Lȱwj'Z8caw[kpÜ ț׿+(1f-Hf`O=ӻ!XnU i Ycyp#7;6?MEMfu[ %}4>t:ʄ \LIBq,k T,أ樿mٽ?cuGVw wGٟ \[107DIxCK-̗tC2s^y{:ʜYõXT5Z<}?9I \J}EP(QL&ONTf ,o':^Oee:eӄҗ6>`4 >.K3qSPJ5YGT>/Font << /R8 3748 0 R>> >> /Length 7208 /Filter /FlateDecode >> stream xmKUōY]p7hl! s`o`C|pj^0Cs5s֨Z{<<?xxq{O(=YSJ=7~ю0]6 TyyƸi8M 1n&u&'-YCJI*mOj~HIYM|Ƽ㦁 uҡm%01HEsH̫F:d0Z;V#U"G=̺k$B˛J~AFp^颬F*ʠ#LQj w8kp6)7ԻFj 0Ν 1PHN3r+2:BF#%AIGM#U/JzVDaܾm]hO<ŮG7pbM%u9pm%2& 44R1h)XTA~4~7TE2R7It]3qy,hYY C1K.HĂH$.Ѧc[kXe$JdE('o2w :`Rhe1wDMZ&AVOʬ5RDlrm5R$QV#Uлb8e4R{Hɼ$ ƚX1GK`CV#QCqHio1_#F*b5:XR)E)JVAآF#%y=@IJP-juǐ]"#٨De[j2د,dRF#UQK_cH5![2P. 5N.jF*0,xHq}%ZF͋K2hn)$!ZWh3>UСJ`ISζF9TA)أHuk 0;lJ{ݳpֺeFo]+0L]"SY2r_6TCb:lB8"f7僦@wjRF#ܨ)N-!!ӆe5R%h.7K?^7K`dBG^jJNZnHdNLo5_4R>uoH DJV_kՓ4R2%>9fdd#5^W2ejSjg/\֞k y3iLF>vt4RuûDv,BZ[2cKFkjdUi00c7TQdќaHe>F\,Jd?ou=VX2ڻG<9/ԮX9Glo7D) 5RjZ )BF#ŝ>Sq=H 讁yXF8dY`5RrwT2Ke4RaGDb]!VKT!O]Tݍ5R.кHJ)jL*Z{ 5"k2kI[ H`+A#ۮ-1td$2tSוFjRjSo;F$"惖@IߗEb>WD<ȑRF#Jd*ϛrsRg5PGiy2蔺i FxIM%gzF*oJrH(⤣Ȧj71-GzH]RkM#69kD4P2IncA~aC5R<;a!z #OrS= u|M 9goy۴w3c~Bv ǟ9l0ۈ@wM(̌!O?4i{W$|Ћ|&iAV3mJƔ_v3w cdFٿpR^ yeW%mS`K` ,o/(!OY!+}vymi_#|~Oo>O)'?z\N{|zOG'G^BX\}nNYL) pӈ~ BcO)# gdxgdMudHZ0bjN#f2ߔYi^Gڽ mxAtK># cv:Ȱ3ҽ E3\FtI!;AR,#G9)^.T e=-^{ui32̡?#sh32F?{_#gkd}̟52̡52F?{_#gkd}̟~?{_#gkdc:bWCOG~VK7r#~{%F?{_#gkd}̟"sg+2w̝"sg+2w̝Wd;{E_Wd;{E__Wd#4?=~o^>4է?#sh32̡?#sh?{_#gkd}̟52F32F?{_#gkd}̟52}̟/4x|t}~?}@l/ *k[d޷{3{[S{4oY8Q;#e|&Fo/]6|F/Yo2p8pSrzgdƁJ:} #8 NGvӪ8A"gdXv#_C|#H:$tI1;AR^Fտ??_>71#2Eow-]d߯IS_dj~Lo/2Ĭ淿v2E淿~؋"S_dj~Lo}Dow-_dj~Lo-#)|Z:dmQ®"S_djL pMadw4F6 pMad~s#w4F[0i;l#~p4EȦ0i;l"౶# K`\{k:{>v"[Ȗ.Lo/2E"S_dl"S_d~Zo/2E~A"["S?ߕݺqoU> 0=y୿'nEw+42uL#Wg42uML#sXgs atXg32u6=ٌa ]u6#sXgsa܄wXg32u68:'ٌ_u9ya> stream xTyPSG ƨ>ѪI*F%\EU@ qH!1jG]Vmmmz-hţEJ@X8~Ytogvv1 bgސ7gҺ3_2!\ 它Q7zr,KICܠ/, >eqSy&>g9Y Q~OԡܬLzg&,%4S*лSsK(Xu#G(Ţ(%( MC4q ި/rCHP=cRϙ.^.\gIddd䡫+QBZj%EBWQ3W~.E+v9*)y l;k8ࢃDPm/|&CԘG,< h`ߑ Mpf{LE&X0F5 O4$DN'ҡ+qdcϞ$nt}ڬ&c̴ |(q T]^a::۸3SoG=uDEUKlSL,K>FmUy8c@rʢ)_S޽qRntemU ڴ8[~ZSbJ,P*x[vlthh.4TwOO6ٺskw>xCg],Ua}r;#E?Nj"Ӿ$.O:%ڀ<{V !;`6V<`/!4uxnij6'3->[/pVa{GfݯR@8̂({ml*wc=d|ͯ[oG(Bwz$=;%e.xibSʴ}xǩܝn(AD,)t]=_\=Z8R/\{9dZ=GҧפnʵH +>nWqq.bZE3U3b>x72B 4_6!d+u .4 4G 9pӵ^\ݴ1pBlvpnQ6#԰LѮ{&Ea~ T߿zU>T>yo9ڗ_5>pQ˵#o> stream xڍXr8}W)"̛l'85UEB"5$o7AK6ɋyNO._F%G2"G7G:Ri!.F'vmg6y##!Rk뒣NcYfdQolj602:Y c|5^j=n}~D',\ѐmXYto,-LD[ _#\qoK7+E}?+el‹wsX8.6fXŴ*Y6 ui*.=Pz(f%L!i,*Rxrb3rr&hT0{xfk:^ rk<3mgkq[gmpmkX-b5j2r` ض@3Ѩ4h;aYL9KÉH82 7I~= R[W)U,Br]SLo^P-{ $㻦l.v& 2b:vm_ߧ <ʙp]pԁL~umC!H{LusG¶9pn|>Κf^=BiOX%cނH=|6=sW n`=@˖8r~ؚaMUv0z6Xv~0痀biJ5FGliBb <֗Y\c" 1w7I?4: | GJe;åɳJ()VN?#i"f;0e ,5@(5VOgw~ד cs?A(HmXB%t)ھ4|~oз]t`/E wU@b-ZZgX6"8fP UMsUKϤ>?KۯpZc9f"a!pU%Y [ AݎBӹ,{ M&JRtJ|^h3F cʲ͡SՂLZ*r@[k7W=KC N зpO6Y#P4#*pLOF|,&'~<| hkI$/wwtFSc|e_q>u@'@P"Vsh lNjj1Y@iz{~*I٠֎rx:=S(oj8C[/l+m:A|lU:L@ , 6كKpY'!Y˗ic@ κ;ONђCi[qO3Vf<ΰ-Ep~LY!۷` }yr8A?@POdI!K)Wg[5 ÓL"qo*V?=}z8?E:ݯtY4S{̿ir$rKI s\l(U`B> stream xڝYr}߯`^bn&y,V.[8UHH,0hGϧ{4(yܺϜϮH'B9$L<TMW/򦮦3)tD\\y[gO쬶,; T3,tpոn*ϧ3%#(J7_6*ɪf"k]U644+WTi 7Y9b"u5 jӹmUpWb:'Ae$#ۯk}w69.+Ee,Ck$E4UѡajU*RzHPN-&:sF"aD3cpdgQʾ$C櫼!: ^U\p駴i?+|¶J4uuWgV5Iɂk hIwg_f}njS횓~#k76{,e&1'1اku6̓J5[[:4B혹U:dsk67|Fjceڼen0; +Z)Qr[竬TIUR W8eAL^%Pe֮پg*F WqM'l^ zFQh}̶2ma޶2zy2&( s+Vg(vɣ-Tltq-vLPvobiM)rIX{ ɞݪ2۸esuu6+$:ϖ-Jq횝P$:6{ela1$i(m,`J$?FqjOXj$H HJ>,( H"EBرF8@plOK+ ܩ"p>b6KDHeFοaW7M}: L}6I]q/)F+}n[ 9I}ʲ{o!bT@l)XZ+Wfp-pIb轕0:3_` VϮK鯃em<9JlV5Z+t; PGW[]dpқdkA_ZX&UQݣ 2ǝumið(. EwA1ɨIE 3n;`pQcEQAwq9 #bA6횤5rH:Li0:@;]CIAx$06;+GcrįjpbhipϨTfa ;ĸ0 J|ظ'3`༿s1n7>lkZPwoa#2cMi1hdkcet.)TrcD9֞P * {N?#TKiʷV®0h'ө 9G9»(a}f_x3wdS1Y,Ǖ~x1 `>d-fA%KO`^W% ^k.Q_?)ʸ]B-JqA^9;n\ր.&߮/0ʿw岻h{u|Rƍ$BGa&"ba ˜f)˜:Ƙ:| VXb-\j15 !6~b2@LG 1oIr}ju<MBh>8!5A/ N .!IRNPT*m@{yjP$g}yȜ~g<ʏp:gQwXH ́ΧCaݐɒlvǧ h|1 aDz1zc3w㔽fe'0u1% YosC _gthSu">]"E$Is};W endstream endobj 3763 0 obj << /Length 2748 /Filter /FlateDecode >> stream xڕYKsFWU"sodG,%)ɦ6[%(ck(݋buvǷ*=QϢH?DDI(_~vuٙ-OGP 2q"uAwF2"/xQ=T"l[eGzȮDz"ҿQ ݏoN;w O$k=}:8K} +h ~26CO*0l3ƛUekuXt->^Qxk4Ì4s?"ii]=uՒjFw?wO?x)_rl@y5E^gC?QF' T*F (c2}+rN~j캕:Tyy̛~{_$app7+˙H%_l#NM6Q;NR.Vɫ[V1@"qaxwSk ˇ= N) TL6 M=Ajkp[5ci-1vRﬨfͳ y3GKLv)^cW:<nR^UmWt}gbF^|,XkreJoWBd`7짲,²̴^NԊ¤s\[kq%{v<$ ]* ۴]?[# ܸq#L468B ܍}WWpX-@n/i_t &<5Ŋz(vsVgyN6<^+Pf//Hf[eU!QV̙`> 3.E~l!$)@I`#)@Rag,Tp`XR`|M͹YD$eBBAѾ=Im vzi&YJՙ",׶,m#2v&Ab_Yq\ nX4s"xAx@H*!rLc?ԐG h?U[Sf[2 nQx`yMZR J*7I轧ѐp-˷=9&(*s"P\c8~fBGI[wiP1ϡ` ol{Ӭxq(2JFCЛ(cF'lp݊Н]ϰPk.eJoYn9NYbW?B %ʘ)ŲMv%_еvџd"pV4ϋ?G!|ip#pRDV+ٮ:/k&K &Pv_7+z$"ԡ}K2F(2N,"$xK=WG}Gf/QQ]+DPsޘi@go>Wp1J1@O$)ܡHil9 g_n-^8Kv)k72v$MJ d^q2JȜUw]1oIX.U|s!W 6|96:w |C̀-vO 96kȇI-9?5ȁk3}K3ky[{Okl˕ )B ,ICYd?DeʅۘYe0ueP>1J'3~㵌sP wfa*Jz/K>4Wլp촧z`0M [MYjA|# 扈}e~ !:zs/MKߌ endstream endobj 3767 0 obj << /Length 2512 /Filter /FlateDecode >> stream xڍXYs8~ϯӄ8@)SI&v;*C,CC~ؿh*'ݸ^e'y𓫛$ DȔ,'W覚4q1-\p|MY%˳hư^spYGЏO":欺ߗ'QI[]֬,ߒEYIsݴ(TWj(m*CdyhOuts<1%\|v~ ۑbINm+W:Gd%`%nԪ5x M.`m}}s7uY7AJ{k,rzgH0eViT;;mOBa^[}惖*yp:e(A9i xA/%$b؁Yd2}b0zF7<>czƽvMSsWg l tIkv[]ե ёcЫP+f {3η4 JyuT_+C0XP ׶CV{ְmk+N&"dx =YB [֚&k2@f  mv myյ5ȷo: kГb~}6tJ81bOϪۭXuU֋rmԦQdH>?] @l>q$!/P$ɓ٨@w78`E"#<Q<> zA$l.0 &nۡi~CWk!a Wch <@gJ)vͼQTh+#uqkH2M0]'eVY٣>C v?SL ΞkxK&HK-b"ݮi spJsgafcٳ# s,G)Νl< WKO']T>;3C_|!E_ck^L+3:{.5k'ipf.'8q8gK6#$#) Gy xOg xd3qhԖ_)(v-*ZW,5HK')tʖeyડVX93tvпs5 z/_:*:ݗrz} (_f;e/J͋Xag'%ꁝFŝ'?H~3*E9#GoE`u @UKGbmzЗ*$Wpч8QM[?R~-KӶ۠HSB){m,zkfxE87}rapIc[DW Cc4ZcB.ȆԳkp-~0m\c<`0<})שu&,Ǖ f ɡO0rqlPK[%C 1(u6`_1EA_#|urm6]-pF/X4(d8x9QU\]nsq> stream xڅVs6 ~_UTR?,qoޒԹn.LۼɔFJm>_@P8ًA~|q=&'(b5)ʄɬ b9#$jNqZy2+/`\b{ߋKX)&BH98+e5Z@0[z;Խ6k:i`Vrʣ4nE uՁ9.¦ݶ*Fפ׫ukxk3;{W<|<%ܮq΢.VdGoSX4dYI+{0M(z'%ϼY?{i"RL|{MHi0>#ﵕ&S6JQ pq"gr? ]h42`r zbHBYExK1mӮtr > yZAF7Xq ~}øEN*yXؔ1>L> MqHW5jIa~i<Ұe8>n ͤfDG# S;"РJH`*)kj<ؘ¯=^^L^f&U Feh>bEH$+_02w Mg9n\,N  endstream endobj 3681 0 obj << /Type /ObjStm /N 100 /First 1001 /Length 4762 /Filter /FlateDecode >> stream x\ks[Ǒ_q]q.rʒ"[{xF%l(B!!Ǜ_>\$!ڵ.>O) f)!X|d.ip/RCt29%`RIjjGRIgcVYޢjBQ 3\&9;`xNXJ#0#^aH-.{0Wr2PaWIalId[m8Ɍ0IG5 &>7 !RCH\C\W[GٳOa};WCa{~Mɘ4f~|wr~ƍm_O? _PTB:>ٰE~rvjfLT.ϑG狳,O\ž}6{2{B0/y4n4u.ʷXFBz:>]>[rx|><!{a$`a#ļjq4&FBUu*-W{-԰8^qiSTqw/~j3 Sbyx5>xj)w}o2MCHj)K=/W}n]W×'7g1䏪ؚdijTeqv0ZQXOgP+ɄT> ?>}f_~`׽/<_?yjX\% QPJ2hq~z\`m>ɆV!sQeGݻc-umm/.dz˓+ER2C{}Nj'<='p4K)^y+L@#*{=s2쓳ź*&mQ*=x;&މe pU|zb/qUtgūSfOVǧ6j[Q!BF(BH6sx6ŏbfg77w|vv~XޞJbl|>s~Pxq:'JU4.!L?*=BTv^*+R a'rzqye)])ֳyG1G[_"JG FwNVŔm1>)kW!%G{-~jw C_&گ!N>ģf~#zAml!j@j/x{r~rG0o-To0)%G/ސ& @q삟 32~z߻.C=9`w7ͮt>LCYcGԷ Do-1Fhw3@Ȇv SH.08d7"|RPZ=(norʩAa*y2=iW{|8L{ILWh93r.yAB?My'o}Ew8zhތvωv%K5?}7~z- Ю`Sh \uo4E.xJ1ǐWh ?ڭ-ur(&[; bx +׵5@>'afLopC{Kuဂ/slu/x`m:LsJ[X?m& = ;$ۻ*Хݭ8do~~{y~Qv~g{-Ii_6`v͆xbj!ZjΛi}Bsn ug%ejh0O7Gs@6zB"a\a+-j37#8cpI ~tTAD@Cr"\-S р+/]FdD@REBUt\@NWx 1D樣DddxZ V/߮ W5ZIHȍ%n+ܴ֝ɺR ȎCĖGۍ< /ѯ{VgRNte46MJ+k&Bn^-;} W!j_nkϺڝ:2ھ -P+WumYh)F{F>Wˇ&v 5Y5>NP$U *[tkYv[&@WrչF"pHv뇔$> ~id ƷINtѭ)D(qLzVu-u2an rsY!.]qL؂&yu% $R'6v lV|lV $-ZH&zӘ0!,Wnw^~W`hg*7͔;,NaAZ!|kݬC?N) -eQKI[5q@AFL^خch!7QFl/:y=.4ɖs-=Ԩ>$w\mk6>xDYo]w)P<ru9Wc-JGsL^7{2Umkeu2"10KK% ԩ91CEc")7fzz\+MQbC\ |3e!G}4t0`3֙ץD LJetu~[c߶ci- M)mﷳd5ʹ~, Sy)h+ŧЃ&b Y7Ԙ e"e&r֧#\MfƌW/0P J]mM]-x>;)-K_W$S: ;mOhuȖi9 =WKO-Wzri_#R-|k 97ڌOpEЍ(ljsxH(vq޶k5zgr|Ѫ 省aNruT(H7 8Rɵ nϊ*ݿ#dhux[awhzeeyگ9FiQS iPh+?O[oy|@Zz.)Ay]}&>s-/yܭW7{.&)o43Gt׃njF}ٴWkz:vF6FƤCs Ok'iNvSE([Bڤ}M}XײWvJ1 endstream endobj 3801 0 obj << /Length1 2569 /Length2 18985 /Length3 0 /Length 20448 /Filter /FlateDecode >> stream xڌP Kwwɒ .tww7RJwKwI4"t79wo}ȔELAv.L,|1QmV6 ; " rD*MbN X&t*d]mV.>Vn> @7KS@H%fdinZ+//7_[ tق3mj& pqqcfvwwg:3; 2-], ge"OkLTu Kjf.@',49]\LANpv<@d `eb7?޿Y 41uyZڙ,m@%Iy&!tZHřW̿€,ag*fok sqFUFSm_q& DIՅw|}4Z dr]yPnݿHy} V٩Cz,fՈ,58OHOy6{u==B*H{^譻w7RM@IOu96E-*]R/]dFb8$؁t%&P6:1o(V5oI%:o݉S](j)4Vd򙻺,H{Cn~Y|L7Q?U:oZ-jgJq{ZU$B\c9VR~w$׋.Y&\Y4uC'| ŠAOțMV=y i/g[ ?noh)2hN(t6c̊;*)7ݔ!uyylwcu%qVJQtujQ74=$>-Gy6ڰ{cɄ~[҅x^*|spmLS8&eni20t38fA{=bHu@v;T$E-TcArh>ohd4d~$1 Mѷ S|gs:EL9 zq:=PˋQ\fe7?Dț=f(̅&ZJx GUhJBZ'|xt8J"JN|[ x˭{[`@ ׄKA m`[^(¦)XS>$P|ܘzSx:tPNJXAvH̤(ޅ_cxJ?Z)g^3J0cݏdqhskӆ+bnjVD;-K6ji3n$S|_>qgw%XdfF?}% J+awҰR9Ix@G0w ~UC~~мxRٌF!nl3,w&>rM)=-?[TօK+_NeDp%&6ҦLSM%,3[(i"?E˄x-{Wل8kߚ* ]q 0uJ|CA1A(6tւq>{9 bDzol.)/73E%f@q?)$#Nʴl} ,Žۍ׹`]etZyz%m?g^.Eت{ZVqoHPZM*-%#D7V/Uf}TF NCERM{scfS1XIA2ta \_ QѬ"MP-vS6{B%Lo)! 4a/>0\]rڣk^ƨEٺa&7/GTxrfJlh+UzjzKv̹+jyg `G3ȫSAɴw]ݮ6W?8JMÓpoea`*&Cwb"opZQja,O.$g_%ۣOrQ6E\yweT&2;q*ܗν\t:q38V0XT-4 FOzEԏ8iQ|.[A&c)7ޮbP2~:gMcf3tjmzBlڨ Qk}O7C`jg%[&Abt9'hEwJ p }K'Qgrl%odkiOH3+MXeV6nlrTf!%KYۼنjVmBZȗT?\r1sTgU YK%m$ہxaVVGNɣN;\ M"yWxޅ+F^$:J yYrk zƷ~' rPkF,3"sg7rp2{fsc>'}9[9k$3UQ*Ҡzdew"IJŶ%r+m6mg''ş3 4D"'G 1`>mKh6Nk3K' [ ^ƲW8 *x-#§7<0d SFMpj,o1'3? }Gt)񴄨=szn?d'x4G/.\S]^2Ğ-n=d.V?TpƲEȨ8^h*J1s6]޽-[F?()POw7%ݮ4Hl<`gяB 1Őfq߿7|ֺLELJʮQkN2Kzg0߅cQL^h eQبz&GpYCn*%e6 nfY@͙WKJIUW,[ϩ!e5rjԵgCMq5#n,Ox8&#xmmX=:]e*_Qρ78o2i+kYV\s9ɉ6*mv"v[n: ?pTOV =pcotХ0Co! ˈ0sT1:5#p/)簨QVx%u~^ގ"T-(idW< ?}I|O0@vZW9]({e XYe\?A?MUMr`Nڎpm]PA@EϥT0nnB\u܁׉d O=VyJ$%:W^ Zb!\r%=w궯ΨO/Uud96#ҷl#l1Y)I "JTk@WVf*|C#2R JV֏( ufAں[@y6%qj}`؆];4]yF./66O"ǟȤt0ECbWyr$>$S<5^* +%ro%HsЦC=X_al=!_z{]2#iE7R'oi͖hxC\E(~ ˻f|["B6>Vnlu3ۈLaCy0 u*di`i9ċd0 Ч/p!VWV?o*)^Ot, ,շo+D7~3>.'!i8zH uq(!AU$s;j5}7M:Me;h f"RUMbuN!/"`|]GGwb5 \K>{KoǶw/ꈣخMs,QE]/GO[Qnvz57{g3eྭ-3u|F63k5wCpO&D\Y[ed1C^GYPNpSں<^S{RQw"b~F;iR?D4Dt֓!̳l|4WVCtP3uTY1&b6xW¢R[mT#R1gzӬHkBQ.]ħє׏C Wq-jBCw@ZmF{66*X\O%!%guW6pWU` 'W3%*c"2EKjd| S2J-= ^= ou~GֈM[NmҵΩKKeL=xyd8c>L3=i20#zk^`T=өp..شB^WRszXfŞz9pZodEJdO(H7}sPDts:{P}Ǫ$UrWbp-p'vZ24- xN oOe+]B2Tz7O&o+¾5#$'R䭓{K2/# vA̼8Y4OluLS! ,zmz)TLxQV>Ej(t?G}mp[YE6ShϤkJz4T|2m'."LZna=!cΡ8󈩖WgOV8rl8m9_vp9P&DRe/al3AċA.}w7h? &{ bM r-f0wJou8yc񩿓^_f]^/3 l:͉c3v+>u_GVC-zlGz%6˘KڃLHgh4h4Zyc C=}Ф_|wk l1FV $7줜jؖN [ COPx ls*^~=s^ػY)cb^T[Nݳ.4,Ӝ#p_m6X;AiXȁBO& ~lʢ͝SWw߻|;tD!U%OE&#r,E:ǻ|2|&}<\Rjĥ̄>^/ɑz2q'uSz+d$2tB7 !t猫Ik5:KQKVui`cܣ?̫v@/=+ϐ/UtƯL,zXꅥ&*H`XlxZ :̌}Ly}tdWM.,6nyџk#!F';u{@ARu̳B kc2K#] C1Nd3 [%s05px= N$/*MaIhDߜݒ>sRSj6_A{Uۚ%g,"Һ<`>+h ?ǷVX */>˨ ̎J0itPqqLM%ҳ)kȞ.ľJT8rZ bZv Awt[>cKvAU!ѴOlIN >A +BM+ VFט(ƏBޛP!)y Y1f)-JP23(X98̖+.u75]nP؝߷^fGZW]?yiTʁ.( 46r19TR̟9W"cɲx̒˽13E4&6X_ג4#ܲ'[R}qd@+lV,;[jҖ5uҗpO14_,RQe!;W@׮P7GY`"*֨H&*b2[~[Wl@ *&9I<g պe9 eU?7Y*+uIѢ$5?PRgR;Է2K8:." od;qi|pBD%ۦ7`f0p}cp6I !ӟ0$u[Oj>Q#x8P4dI5:yhcru}4OSʖ̀?ZnZqÛd136Z|ĴE_14EP46;1֖r~@TQq^6cuzm6ǑW}Sp]:k 3w A2jcP&/n8(F>F)-HQu{QW8:~>g+ sX)7Gk!U)+O=F ʔ.*c=褯F|m\ M#25r)>e侚&NLԈs%d~zymSa*laesK`@Z;|62?PK.<o"}nɑ[3[æL]cqGIV?ak_-fF&eaI ǟEQm I(Xkܰ#٨\xeϷ ?i)7L+f-^Rf͍e˼:! jbֲ<yoiQfoŲy5}FPdR'"t*.䖑3줿.D, ]fDRiĘգ)_$D/d/@Aqio\GN,2lzN~<౒=pWsϵ7wfVGx_*n8Z@9xH}]By+3djEt4KP9)SkJn}=*ZakFƏ(HvW,F5*M*EPV%OgZHmm;ֆ}VlR%gw ZI+v7`):(nC][EHK,ir1r`-R_rl,jf0"4jz'HJPl6pc86trGykDGơJkVBuFH_x^ga1fR 9w7CʗZ72=< 3º#Wbiqh5rN8ԯ 'rEX u ߿.55]mä_SW0&Lff8*7[Kk$l!σɯL`#RRAhWm\'6|6 " 3}|B%`Y@O&9-ϪY%rMde#l`E} |1_\ݖ'[9m&2ŠAg& %Ҿ4TAz (o[kx@MW*ʻ2~xn3.&j Gxì b辜-",cjYI}wtH%;d;rFO楺%7u8io.*/!&!0,|;4U2b>B(79>PAEWnk\1KuufF]_kcHM~; [FZYL;1A,ulr R1mԲd * }<|((  U_RD=$S P( .RĮ~ΕZܧ! gNF5zڢR7ܢ_9R*MV2G¢D #T 8%Q:AdщvaܳXʲ 78p7 "ru˸u^uG=~~hݵ ,[ut%LkwV%Lgm[XJ.'d,vyg`:q"Z3WNda!޶TͶnSu njɤIyv(6U~a,{uxM' B3& g#mщ]xUhM3m8).~^Oe2ڳ;Ǩp9\%'t. ] BJ_ݪזT(-V ɕl.]gƀqڒ1IY0TM ICkظ {%"K5kNB爏+*Kbė`RCODƄ6'>4G֠FeM3ruŗ$% BoNzGS;2`VЪ}^3<iG0sPOZt,Iﷹ+B\oRy^aQ<`yU(? 7KH'^CҿUAZ}!P a&1fVO\<Zt5&r|tHu_Jև.DGP yeΝq&Cpc~({got@ C R\ .w~g}C3mYD%P %GXVN1ͶbUN1\nN5]2ȟe?EAp$م}dfݺB [07, G&ǎ)n沊kg"ts{߆=TQ.BJF(Bg ];AzIRl}s!s˥hCY>-ɢ\@=3n DFGt(zeckW ǾBdYFTV([n({#ɍ''˺ H, f23~]zKjI ,x#㉎AVd C}EĀЧ9RE\qR3>\-lڟRflwdς>eMˆs\&P+S1!Z{ֻ|*HCBpOaj֫JL)=+yʳϬoԘgÞkr|[dU/}++G{c]UZݘvMOEl0²Y uZ'?bqsFZ.:eD"(ث*>ЌBs|K3"! |}kBn QtB#-$&+%E܏V)zJ_a^k3VH( 3Cmggem},h1@ɥΉ߭yVlya"'$/ [LSY2iBKg) (Tf4iP{?KGqE*0 h3+skWѳu~@ 2rk6"En}:\alur!;ء9Pz@Du]$FRf=f.}y16O&zum'!,UsV>]{79jh~7'u/~3dDpn (G&CF^ċ s//3{ygLs17]EQ,`_X ."FtlG n4B9 |gbiA< ܙ u+7\ M |2+dgȔ&,^FTLvi7E|\O4RW/  HKQ?Xw v:GNl셰 K}HE6S %f}Җ EցgW+LB[ip*?ݭ&x^ [V"oPL rI$DU\%|A`qH۾)oʲj'e`6H[a6ve UUr:z}Y?1 3)t}7Qeϟ]uJC#,wJHc3[UI:L3duM gi*IJtLhitf/q3uB~<{.ys-oz'=.e:D"P9LI,q#\|г4 ;q D:Pzb#6fmc/H]D.񇻫e[VNxfV%cFAh,9LP+Uٌ9.}Jf]lĵb(nL?Ρ7OIZ#'&11GXbuTXJǨIʚ)ԙ'_Zq7bEC=ٻ O?lr$"mtF/"mZ%|֪{0 p?ɫ,0ܒ.t̮BGZ#7&6j.m q6oFX GYkbO{1"!sA7QkzXV}d * j}[|I헾͞j>XVXk'j}E51iN](i4 yiU!qckqH& @(6@q}ao)]OtB,YĸZiN̸p=c7%_ysb 0?} &.udi2Pv+bš$;6G Jt,6T\cVqa[wN0aEek؛rKvy$FFL YE-FUV[_=*i-W=k(b"%)Z 0ugoޙjk0.(avO` P J]|iĊ]GPAjO j}+'6ׄgЁOM!]!>lmn;-VsٶxOEaǰ#nL*f<9ƆĔ\6;1jHUIVY5a`#FֺyLILvG׽wVM玁 %(7Ȅ&lUdڧE.Bӂϗݣ5Rmɑ=u瘎 mgyY7M4{ZN$ = sܧ}|Ii<2hseF}_3 MWUH'k}> XIE[d7b1PQ&OvYh7 xظE^*^2&8"Bqi@B'Z*7AeX== Aqohо1_VIgƓ)6<-c\by87׎Zi1nQ*u"|ЏY3(RϪٰCti-([FOwp~}yi ڍSUb2{ Ÿ}K\(׃.e`.SN^mTI>=Tu y@_4^P99GsݎT =;;7OL7e _4Mz~_, -Ϯ oug!F6dWʒ9HlcW+R1SUqhNDVېVr}RVpM= $ܶMUߑ~=7CU zgh.qzzoa>Y.I}>@ccbJFc0#-&En v(Ú'ьve:jr_s4mZ~TBTaцj!Xnz_:8xyᏎCp: ti7Cy%|J-:Vuwlq+~`[+S^<H+4n,=n:9=5bvbTgsviK5~" ZV̔R";&JMHK`Xo+}H3x*P!%d64 'SԅpH 7F8O^mNhҌ/rk 4rfB xnVG\$ݨ6XT׶ %nn牆^ƀz\? )497<394/} a!Ydr Jc {U\1{ 򗎯T2#x oK;.0R  o5;1'F_ƻ )\LL0;,՜HsNhyr2c &|e% /Z,gz d7v˃rTSVϒȼRi-2o1rLϚ:G[aoRkz\62CbR]C#yihQ?JSB (d}#|/rC|REP] w#/LZ|׳&ʧ^Aa]7 DI\_c8_!ێ4hvƪ ;Ԗrw#-FQ^֜c%jK||D<ݤ$"Y,zZk?ґ@r0xG͂$af^PH_zB8#I2,O4d&7@žtvYBFD dV5cl.JѰcNoѫQĸEbu;q [ۉS&:x VQ th?|=J_m-*s%prD%1 +l3ƃkPfrwtjj˱†f(L}'7h`}etu"9g0m?kRN\ߖC{[*7 WtSڍW4Y.d9Ѫ-QZ&E^8'̜r,eTd4̕M 3A];xX'WQ: cq7C,㦘M{'Q\6 ;]m urj"+ÙS 6@'n ߱'D{@Q*乌Iڧ =R@ֵ2I5Q{mIۡC0cY\A~!q:7?^ _)_9xu% M/ nw^ .5/0AS;6(X!zZ}x,dn7`1ng{ ɥ8 Ѫ"\g F"LnwYnO"#IHc5x#j2`A|*V 'CY`+ԊxȄ9=:Ō I-k[)0XmI24yXmmYԂFp|mĒ|?|P-Ǐ}H#H$ĽrX]1?Ϗ˶tz3ktc ck{gs I W>8;61LBD*/^~:SLٌC,ݳxy{JU$: qq3eĴϺ~jv"(}E^.e9aح I-K PN#) Xn9l9\@?45MgEZ Ƨm?Zrcpg}i)"h<(x@y-@q5%O3\G!2jlWW-\TVGN "B167szTwJ?#u5X)ءa㥀d?˩Nӏq4ꞭoMҵ8b6ϛP 7ɈU9jTmr+2*3**(y4HLv߽;f;h,82׀,Us>8M!_Ӗ U_qOM=H8-"3hstxf _z'NNwEi*Y c컟QPYS3ގ.FbZ:Vu_(ntK7uTǠc-3^:\5G4QU2ʝ&L6N'֥sgxwyR H0fA¸# yWɉD(nn?8[ՠ I;>6L.Bw[qOiOzTl^ endstream endobj 3803 0 obj << /Length1 1435 /Length2 6644 /Length3 0 /Length 7615 /Filter /FlateDecode >> stream xڍWw4ݷ֢%h1]޻0fA)zF$z;~?zך{?{yp+#mH_,( TV43R I99`8) !QBA!OB($ JDO=P @"hRN% 'd Tp`vPqbWH; Y' MZ@ qE({|@/ hECQP{௱:WÁI9FN0!C 8@c<P>P] Es{B` ;bgtu |`G j1> a |'bUNC0h052؍VA+!]] W0> v!~b&`{@ՕDa]z9 Z ;ۍ# t 9@/R?4 Ġ<~E*$aPGX7h)%PgH07PV{ÊHo_XL($,! g'p@hS5'@ Z:H,@? (&hw_UT=_>b`ĪPS2VD;`Up2_H,(VyC`;?0TkYÊ{buUvH_BP()ON{oB$Nt@HPM$P)$6Ճ o`} @P;qLsEhq(YCb%U%ٓ7 +'sTW5.f.ֳ/i'+9.R=DkyhX؈ ixʏp-eߗS[rTz |o 6^RR^hBFSbh:z_~`;IuEgBT.laƽԵ4m#KTA! [tb͵n^< HtVePH*U2)ڴ VadU%막ل烡AlKj&f`KqWԩw7c& {/>/];T0WtK_ԩ7$ja/y{sM~;F6TNAr`xJ=eWJ^yk2ä,^C:4'U_iDjEn|/!Lxa'Obcu\QV=ߋɲa*`n:#)YƧQRS$eRhxLqݨ 2 E[Tn*D|]PB>t:+u[+ʙ/ W)~#; eD[+.&K̩ $sǞ3[Q_A-j=QTmaZ<5N]@Pcjb}ǼAo=z( X{G'_H2n%PZCg\ѷ.Qf(1lS o`OoUYʳ-+`qPw^FEtZ6TlIMk|8uKA sZR̍{$^`:#/ wcP)gV-4 :#-C3۶>s' Pk5K7_:u0n@qKy vS?e]L0'|ūXU=J^Nޞ0s`o)B}ӇP͆4rK7m=]2{-j=ƾ_p|F|n<}axE~dYqL*~zA{8+nn""u/\Late. M*7HgaiDC1B iJoG'?8St r8 4C aeoR={T&)%|*5qCHpS.w驧a~g a ;9.v䭠lFOytQ[Y\$ >sH>eJػ;<$n޹}ֽ<)޿tB!qJՋlGMh%r8Al2Or,^=x+cWLB:i) `2zxGb?l+zUpOos)*kYR4 ל^x/$Kܠ1 ^R 6NќHG$pZkƄ 3I'e[S&qt?;5vTf+ S]>f%)~[VAeRw}tY}43`Xkt=_=N75 LQN,'vEy6)ٕUm 9w!6vK+hVrd),`%ڼWw&<=gu*eIwj+l5KlAB޶ݜtQ #tRV>^/$/):BHXsEx}E,a o\azE=Wa8op^ߵ)\pOrP]Bd|Ya; *fK ǰ degXZ1̾^K3Q^q{)"*V݁X^ -R_e$v('ডS|qT\г ;6UQLZs=Ve>V_DlLyK݈J%&ücVK [ɖsՕ^E)pByp@Wwn%$<,N}x/*l-piHp:Ϥ ʜ]nO2h`M+Ĉ׶p rjr-μ ~A#4w^蓏?vrϹuP3\wl!Zo_mT]o 7Xϒh14[Km&дa6mᯠݛTK[ߕb(v#1bމIS 1e$e9ix¤'Dq 'D yiRșDgzM(sCY]EXD GWDHk5<.~9uX xq]H`J 緦i*'8m-eς[acV`GYp|rkn!cKەu|Iem(f/[Xm⣻;GZtzZTn~OlL uiש׿)6OM 1(OlvWթQ8%5ʖ<ƕ,%|3'gY,1VF~S|b_TUP~NQh]~AC9|CH f"_4 ;AG8M\+3e30unrJ 'a7ixrb[ })"0jWSieva*TtĸXb S[n\-qc_ :;C^, kNe )Ѝj_NL@f샇VR %!f-n0W ƈkoL0םE Ό3 Myb4iҿ_W-/'}v0 +\7g5x~ZҘ$E.}2וIz)'\i% aEQ5Z"P$聋zF`('̫*M {&\nΊ.t7ejk7') w S="-7:zh$A4xV+#xTL|s"ZzXnXs.u"az} :%XfɌ #)qxs-98'CLLS wgRӑ5A!B*}} N%MWyR+AҪ}vo'HFLcpYa $3B=QT|:`g#\g%b٩tkd4nXk΁Sm@O=@]WѦʾgreD;I~n')nFm1)LoIGvg_#-V3OuzQ06UL*1^^TQ#zmX끰Q\TRqk$$gJ4i*H$a7W]/l3:?m= `pHYmaע=K&dN ~0)OiiʱgIh+v:+ZY39d̨(P^zyyͅ꼚4<==$ؖ`i_0sn<[_ħJ*ş8FW"~k R65Q ~./C-ڷ_SڤwMd ,FM9(O]k\^޼cb3E?NwL=bGY_0]$": (\Og_?L"o-D% s9=:Өʧ  :2z~o,kjYp)8 -o&@:s"tk}Y~j RT) ݑ-߂Y®g P4kP=2e$=6(]ԫ++a8w3GA]zc+_v|۽ndswώŮ4-Kc$`|ڤOf\p8#]$1j鿓_]Ҁ@ܴaJ7V_Y }B= wP%9-otQC1O]e3r!t/w61KA3XeF4|[a[_vm={Fw(*)5u%RLF)5lH2.]=͈r C\D~'ڹ\!M3{ޔwƗ"5QӯA4HݘkEW*3{\uO͜rnRb>%&9o6>pqԆ(0I=O 'ISY*-`"/#'E(fgYl=̟}]p~rDF]ܪfW6XU^K{:?i(= ',?R@Ń7 %:CH2ĜQ@\WʗS#KA0rnpA 1[/<8q9T+rZ(| [\:Sq s_۳]bT]fJ{Ƶ?nĖ560jv/w3_ayr}{W?9s8TrA>*{~+SսH9oZr .SOX JpW㶜O pԹQг 󸼪/܌w\>?)(5ax@ś8dINOCdeƘ5VGf7iC|Xst1;xrWtJ(90#ͫz6Ӡ|խVH}XZߣDN]ӣC7w~t4ld Yhxs!4ċqP\6lcmWwy]eR뽞yx7N2J9*su M&tl$Zh"\Ԯ᪔t^o5:"e%RU/ZѼ1vJ 8,P T~&2NyJ'輗vN?Q8N~RNNPS%2ޑ1naKOofI.kySgq *WʨmORNƅ<̢,.ja zUH Z-=iew,ZnF@4}rۊ}~~FFJbweH}]h~P MޞǟmfyOuOuojG^گİ=p~fJ!pziW)|yr3NɦM]q= 9Y𼁵\O| uebxuB3=;CۄZǘ01$ܻm% xz4ҧ Rī<ň]'J;hW5yP;9/.|@tV.r3$=]-F~Pl[.@,9&Aj(|g|_OSr;O?īmɱ^!T`&èfz E]"7Ѱ=%̮g8`;ӅU?Ze;% @vP_˗~S"_*\7eA%><?Y=_{qAvga> stream xڍT6 ""J/Jt ²IJ4)-%%!H#%!(/gyf{fkF m.i( &DxA@YUYmY^XXt(=#EF؞Q7LU$d >| _D() UH̑EiD+y;(m sC*e 9j#!p?)X-Q(;Qgggn#7B GY`04 4P l 7n%6 vo 6p x㄀7Tv0d??;ݟѿp#,pP]^_D#&mf7ߵҚ@M6qۡ6fr,@9)+_k@:#pW#P';] Oҍ  ?a@ Ē:vN_.yo 0:0GU͠ X\6!o #v# r?$dc'Cm\ u ț@/9VANUBoVBaa,pTX?캿i >1@.^|7K8fPoKC@_'(;8] nn fK0p#M@s[2F H1@F|@s^0x#%Ŀ //xs,_$M&7t qrpoތ/ ӟ12RigAq}>xQԔg/dO'3T q1oZ0E}>u?eLR<^^4סC._jѡBm*! jK?PҊ,kjͺu?J_[ymSŮYv0ew@X7SL\[rw36#c-uK%f{+nGG16Ӭgg'R޻a {c-g 0}0 ,aYTAi(㞿+f/e0D^&"R 鳕I\ Ӱ Uw-lжKq_sˋ |3\jy#Jck97=b]yQqֻzn gI:н/xyeGZI/!%;/{ʅ*z~gzwW9 EB-L"/m}" 1Jg~p5ͱMiE$hl7>ƀJ&-޷X-]^LlyuE8G6%R 'iȽ|Ob"~R-k; %YGF9v[8}E[o&!pA}/e^$ZUŝ:VscinTvoS89ƻZFu{_y~iͤ`Y}7uKK ~O,28q)"g=Vy8 jN0LAx*YaN@jH`Ybz<˛<6[ 4čO˺pLg=W+uu*.o6 B\PE{DR( IzI²'kAnL:v(}6g1> M!_bw)G}_Uې.Ebzn*`xpjBǴcgp@\N [fk=; b~M,nnDK#IaJ5)Rd"/:.ꃻ.F0  HE> 4+;t}?2Mch_`p+~`}bl2@6M" {sOZ}DLRu:ˆEш Z|~T)kew!O3g˙LşɱU{LhLn_}DӬUɣ<,aԭ/AV^j%v8-I9&|F17t̂./!Q1#d`oRC.ɚuiqHI@zISq|U$NbB\]=re2CYI4mbmrh:jXb<ʎO16%>y; R#)޷ cBO;oGE'x&QdM%rѽGNHf.d:%E=PLHo&`N~EC6ò;㻺 @:mK geNiҙ #i,F$wpX( o)|YZmIx`=MTI|6$`Yiqbr =͙ / 0,-Y妏֟ǺDt1mGMk J%AE胕\Q }%Z`RW@{Ԟ)h?#,:Wƞ0fM<>nr'lP\YYPv.5[ <W"4O'o+LY@In G_h&W1x|OSyHWڑ)s0yWN]W`!<'3[ZLcs>muoP*ឮeV{9 %<;PvB> p~UvPb{c'bY.\gD&3H@ѕ˷[ L&ncƸgL֗>It'΅P3Zƒ$VބheAe5`bK+k~ a6I庯dRyW|{,-Rhٌ|57Pe`7BLAOI^#&iςCW~~TUK߼6 jҀhE6M~B,Ukh.ޒ2K246ã(r"H-HbS`٤wf)O͘BbA_P)Y?jIӻ,F:]p'H>=&ɔrzCG-kf,DE&_e/_M1:#H^2xіEO;G Zm~l^bn]Izf f 65jݫ,W Ԟ9桳6*zS` ~nG2v ǬbO]+D=5/ OF~$t3P'Z$S%G.fEx?c{xaܖ86Aa%Pۦ-1x\Ժ* o*֫S醕 BÖgGi~^Nm^!Vw'L?&+GTlKMקr{6rג/=/*6Inmw]0kuqtˆN֣#8zc%T=0qB8d<6ZnŐiW2]蛵EcFEĺZMkx!LD5sHCIAӻpMG~}Rv|-! `8*-M*LAp?Ҩ,CN%@<T撥jT`@2#j%"T9G )|TmPHGkerOOQ`b*t*4 K' _}ߏ.ʧ H9g 9md;~i${߽dRؿlxD7AEBQE*rQ-S[",G>.il+R *`l\qw3 $3{O>>95h8|2vwyP`8y'Nx+d8=!XJ r]s9F;^mga}ɝy|gŕ3CR˜2=ŵbhe[64tSLV^̆k[᳹R/C DSr n;g%nn[3s.e MP8ͅ f>ˁ)HiIID[~4QN{G.8 I~̠W)fڮ.d ѫg7iHoYۮ+ͩxzI>:8+Vnu9RmkӭLmer3)Ͷ7Q%odN?ťz[y:ߠ8A%W= _[ v-|ČB>Y!U,ǻa8g-sdkR_}eMŖ)]Yȏ:]ies*ĬG9FI{3 kto;} w&q&J@%{IrNɌc:cO3 Pq?b?BuJ%JzK'qLc.(<|Ta*|oykd)T^pra0M|b34CP| OU0t¸Ф(wl ]Hzޱi˄oOs&̱>sqh3q8@ ޥmPv<;~g@ڮ ә>|h"n8M5P ]d~J,l?km?QW6Ǟ,>`hw5/&v&Q؀+e\dxwV-dd)d3(Av!ObOَ?( iQWٴr+4 M8M9\5'QZ»7F~TkvZ*Wa=RHʩT_9~~2R0Sh@p2EɮqYlgfNkXנ9dxVИ x.FHZ\n}LBg^GsɱZl48>[V5cj<߰^N=7̏3G(5 |_h6yg co2%ٛN`}(uP}V/{5LYq;]d^Mpq}: =@8w]UZ(~]h%=OiSTD[t:6 WS<ޓWW&t[øp>>]gvH~%'سVK0N֬}I(L\+r1N2sG+mhFe͚ZMBaĕg(mUCern/|Б0@bz(d6;ߘP ptA`p<sB-, 1dfdh` 5}_Gǜ<#"lȈTwT{MS䇵E"I蘭@+&ט3-ViN}~Zb/̨;}+X&"ë'z>٫IZwcQ,/6F8=ϵHO>Ln3׬y-F^\P($6ռTAT%751Ƒ :MЃ}VQ`qUj+f쎟u(-MV1T쯑"Jgqivd1(7#8qH ehI! oPKUvI <Җ&^4zv]p)Iԗ;cN>OB ,-04k\pXTOvReykJ&]8<6jz~u# #y#;'WJ{JW 6%$ endstream endobj 3807 0 obj << /Length1 1913 /Length2 8794 /Length3 0 /Length 9934 /Filter /FlateDecode >> stream xڍuT.-)5HI ݠ 0PC H4J7HtICϽo֬oi4Y%̡`Y=!Rr88888 0[ptz3j/{ACe=@y|NB W9@ ;KA< V< `4crH؁ f {2f{hhB `ǿB0 [`nnnl ;g6(3f;\怟-T@v߭ P  xl!f`{{s!;@S^ X/gـ33 j[, ` 7iu>\A[AY u99A`l۟= 0f{s)>ia/fg.Go ppZ_$'Ѓ`b~Br0'ןĿO@ b-!D 0x/Cm=1u2R*JZR,[X9 77@j BpaPo߱TQd3S]//Av[u=2aT*!.v@ aoi !βwffbµ-u|]@q~/ ?N)co5h<N</F f=X@)/' d~0{ ~a![b7/7po?߸o:0ssC-@g[?p@8<?IB, g ?j*_2&_6'} 7nj@ᇍy.vv8 ٿ4gP8׻ :NÄ́?7]TJӯ2z:5\a?Jbxt&ׁ;*x*kQXkk3#=y;ݔhZ޷:6 َ.jn]rs_B7*x1nXc 'sL3&IiQ`8gY ,>1\^˜ ZmdO H)O>LV *_|7Akp/'fxqyCKI&JB9@Qe퐟J)+>@ }jEZehBk]d 2y՝A,E%Xr M7tz-ON[VƀI &gI3_ۛ. ˧SQ7,eKT{kjB荝2f=J*_[R៹rMU>ɽ6ݷ;r¶oawDڝy88L;=h6H[<@"̘E] ƽ!1a[Uy\"b7`9b׈f)FZs=>Tu3-ȿÓH}d ݥtjII8i]R{gWAֆD?LT('XN $0^lBV-޲61_ D?Ym`觶6E:<IJ'dY6*wA~tGs+A7qUFߺ~=v}tNQ^'Α[ќ Os\-[IݴQǏ5ay2 s{$^$ߞah }>؊JĦe~_H.&E3(*di2)?@WO&(NqH@-><&ܛ%gRg *sdG;%Uylug`kpj$Y`j_ͨ-<\c9ʯ;v]UĎ #U;C^Cn0n"1q {ZWDK4]1uN^3OP6Y5Ѳ(2li%\ʞp•,oaM;9 buLkRKrEC*an)Fn jk(٥J}Ht~icpFm`*U?B/Sv 0+Euuqjyp7m28RU2ɶ{D*VqIǃ+; mdZ/CeŅ8g/g@ ZE^ky9XS( gk>qԈ!RWq3$ZB+7wX $0Q$:r eWKxCt4Ns%.*]`QcR#,a`Lu3)I[E&:&]{H_%$P#Fu;"oZcG! I9ZAބ$Kw-H|[ߔiZy*I-e8P-Zv >G'VRD Ь c]J.}Q:aѡ#BÀywv]1 ؅Dna11UuC  JˤW Id^ pd73@΃ C,)p1:[q[3ӗRO2W3䍥gR{Jr_I˅it?w'/ n}+|!Vd&p:<`Et^?9[ʲvA =<]@FB_{tYKs5WBڷ,#4B6CXto\wi?)@H U LߐdC*}DhCT~z]Ϻe)MLg*bג$ҖEʕL};}hB&nBexaQ":4CEqP>!'ȩ.W5Wx'pB[7%&4͇*J{p:\+x绿xΊ}cj4aW Ҹ?)<Ȼ„X8 z$633BIA5žƺZŃ؍.>*P`@7r?=o ;>aSh,̴WҢzݲofGn%XF$DYwSL 'a5'' ׽]WGd 1c?՟875r! W^gV=Q!ܻhE#2Og 9~M2މ`IF уuf pf V''{F_ zvo]xgELarIkmh/OQkLZt@+i]k  i P^%L}5Vљh+ |W)r|0$YK[ژ~|ee٪.8Hف 45  1273ۗ2wgn> !Б_NOWwo1g~;~Uv>->_6WjܨPBv9t+dK y&԰RF!F 4:O0sN$kkǟOuoנ%i':l} \+ b+]lm)/K! ZﯣaP诵ptC!QP_-ݸT̠Fv%hǛ-iPi%Yr>o^ɘf+j`d|,Y$[Yų^盇.7>WQCqďSAZ~uIAтȈ'#rP3תx6 &^\"!%s.M]v9UTrGC#L+]"Hqr{;37pbk4v=լbITFJF_;6 ,?T*h~cnG?y73ز &`xlH1{'k~~bzD\ zNvxztV"oeXH(֍QC<{"Uwkwbڱ~q-\BNb\B8X#Y 4k QUJCg⩘ghG}q""CҎUK O3]ӇQx+Jl\MG~fkw_ݍK#ڻ1IA{uYXs_'c:mc[^\O{b ;hG Ls3u[~LP~l5[w7>a׻ $G()=;%"JDf;eg.Tu6L 6C'G&jH=aje(AzBǒ:vDTCOOOU?(7O:¼"Miyylvv^@倞YHUk`T7,k?ɊUFhAJ0&_;iЕCD3~ݨa٬my2M#24}[I).}nL} ;f/9,1 j5x3b@@wL$N"R5=8*kOG{-VaX1o ;ʳO9e5q';f!|h dZUU&mT,)xXcs$=?qJ@)-C܉ٜ-οCz(:&5C˳\oeS318#ccjn͖e6Gy@MS>E;p$d1V79썉 }T)Nk 9"2֠ l^c~fu-+rv"8*މ"齌,ŷ&;x|߼ 3B:Ub3}˙7"8kNC$2bzfg)^ ULlsDQ*F-Ne r9Z7)%+we@BN3/ӐޣOT!Dt᥆ ul?@Ȯqb=fؒŵ4%|J)JXq@/_RPEvgH=̈́!3,AisnXgEN_ܦ²yK{a]@#NY(^_|G>34>]X]a ٬tbZ@/׹d6=djQaFXG\ ,(Gʔxn$]~3&t?ͽe7jL[>KjΛAc:b3<ꍳp$^2;t⣾ YxPkEb9p9i}ZXMTV8Ltn;gvϺ/nFfƛoB}? V2gdf[GMS}谎:h#R썰e2RWcV_W`Kj\P[w\Y׋.9gRɀ̢rBӼUV@NR;6zk\V tSp&䢮mb. ;'JFURǬ:ZeP4jxXX+}G VXĘ36槠9uMAYplK4͓_԰+OWmFDe-kq ډb(}C2^/\}bX[gqr)Bcks|Qקpq{\sB-Wv2Ѯ] |j%/=P2ƛ( S(n)dot>IqwgZ?>NhxUOENdy9wBӾ[quM9ǘǪO c*(+IdEMNCtU=lH81Qp?XkUzV}_:8ۅj"MlI XgrNXX*8T|veE0WGsOUQkffS]1o[$IPW|v d5l. c@#mM5^J#6~lWC`%_p`'+E^L'3ɒ=EMw*'S⺽SC]eC1RqI}sMBJ쓞,I83 q z:['ӫ z3<,Q'F;_ T{+-ݩDHg2ݥI$*Oo?*2?MQ @@Pp{zlq],#g2_V5\ ݓ/Yho dK93Ӳ{3e<.ms|£or.0v\shۓb ==!oA*bxm~SͥQbqEj?;1jLI+e_}/POk}y4ϭ~TxDjFYZ0J@V>UdsG56{OԾQ+jn7sKJpu?z.HfKEYPfD;Qjkr=HODKQwdC?1?j _̯Gnx e0bKYrL9oLq*!vB@q3tGHzCYP#n) v n$~/- c~RExxx5T+C8,v|^k$y<DŽ ~<7SG+̼VE55VJ׍j~H/Qo&. C7@SڄKN<Ɯ=\gx#(sښ!>OHX"{#/Xlg ^Th+?=ܓbiF:,UTv&΢'JѠ1G.L$RwHA4Ů*Q-N2p=/3*qR·΢/QS:+IPVf?EQ`{e#KeP$1ޞ3y=K37. եQ,}\iFG:S0 [?VZCcKoס%EAB&ъCӨA9o}NBu+Hk]`sdPɹdȷk7cRU`RԞla,ܪHtt|S5].†JpgL*Tg^]:kЗ:7V[>NPnj>,KzE 2[fTa7G%!ӕ\K N)>>)\gv}YQ2YS{|[}sX~xuoʇ DK썖1YG7Xո9P:oT jnַU B&|Qg"TE޷vV`+=x ҙ(oil-i]Wk[ZK⍢3Ur #jYߞj;8>aZG3t,j5_6Q)E T"⵲tӘ6>*ia.Wq(ţCRmwcIx2<*Ede'6t]}s_B.rz`n9X(aQ6_^@)q|+.RӂÌ-F9,vOM|(Y*f~kG5TF?5 LOwח V۴a.v௚3 '(h%1`#exo@%|6f7= endstream endobj 3809 0 obj << /Length1 1678 /Length2 4019 /Length3 0 /Length 5078 /Filter /FlateDecode >> stream xڍT 4۶E]JT?d_f ZvǾ cf̌Rך5%}O'[Rh;Μ33\\#oj!sD$)i2eoi)`Yi0($d&a"U/ 'Qlpi@F*(( VMm 0 pX$QH %]P$JQ pG80PHwJFXh$!DUQ$^qb7̑D$ 7 ݑ{f,Qh 3N@@bOPF $$HH {?@p/81Hk$M!Ip>!(p/8w~t58_ 4D&1MP欃u¹#$"~}hA/aqk3߈'dE{x"(& ȃ`% }(~ K_<ǡ̾) hg$HO$1Nh pD)fOL\S(?] 2RJwN55q>5JV),*P%(@gS8W婏uJ?w^D kEĀ2QDn#(_2optK`~D1PI,1Sm?t> NY ER2r`v4Qt2Ei8 4 enH#$eV9D /#(<){!f$ő(.E2#0,Ti~"(dR@&" 2?@?$,%$G)G AdG Q^L!)t&Xe~YRyMR"v0ŏ" S"y~I'?>$`!Tnܮ,mZycPOK4pmځ:_t֘:8W'RMIZ3F/GRU+E{?OD+m^˷Yo?NVE0X͋s0zYG`sbJ`z3em5` jD .2},:0RY>uFRɊ#]rMW-PNaXöa#{Gx]4:606 r*dGw%{ټ9c9ZS#!NMC-ɴNv'2ړTKħKQ5В\_(`sTdw!KÕ!Ev9ɾ>]/72_ݱ w4aI}&%"pA m}'2g6kUHK|g\q'U~tO,c/a'C^qy\Ryׂ]d lMt z>D#O,įB2W껞oW+`BOGMS^<׈2e]U L~TeZh<^Ko%ǚHSݻ5^j<J^Y3 ԫ2 Юfż1 #yQq~c'5z}3Tir/+`L!/R-RN,THȣI]>삶ds9tR4Cx a#&"?q }l~oI\eAc1 ,EV/*GĻ"efڵ3-ڿ:(2-GD;?v<Wlax痜ņγm\ D* Ⱦ 騘, ĹqӔ3;~ŧwܑeGB>8;0>so@v"gf3#/`g2|6(0 ,$=Wu?cq z uod;W"ԣo[{JA.*YOm3<h%k;Vv seZ}>¯ϗuvr/{Jg{B=P5Z9-}LX%x}M% K=Xʋ*a`5' xkJBӖhf GMѶ*̫p}KDI0Ɂ{ͷx kғG_)n7ؼowY$bںv:PGA9JC,+-'7~;>+(R Wؕ3.I2|d9? `1ݶ)hxb%‡{r9[߽ḓgpôuŖn%U_ U >+5c-o@ ^13sX{L嫡-V{?e+eTzYufT-~)q&)PL_! 1+;Qt;\9T"#rBg^jx!^ubLOpGvbTRU/UΣ*>f.逤FLa{rA|91C 4Uw#Z&WԾ./r IJ2?{E+*}k,zS̽o!{貼GES 3箣\ m~wgVjI:wGo٤ q1W7Ǻ_y_MsfY2e'qVR 1|5';I=* z 9}o ] i70UW O_tѝѪA0{m(q\t?H770W.i$ŽFQ*bçc[TD7)['؅Z;T+9T-Ii.Gb<$7n_޴DG𖺭]Sr]h'c wg$5>gUHJ/>U|bcpFvu}_Պwq,'z_tq]dir֒qB nN[l-1IC3aC@ `(* ,} MźEٮrK,gz@oͿ=,hwNk$.V4fɟ]ldj(ȥQԯTJϳ{6wr7ωz 113σdF͂Ph7[U#/U-Ӆj]\ F9̲ekzy7}iyz>IJ}Jj $\vC'zLy>DXxQ'%Q_QRf+~j <> ս?.Yl"~}`ԋI4ʅ5*h܌#YreOgo#j[nOvUf|~,~ڨ?-7F}A:bjv>puF$"tm;TTbZ;|3g+eҔcg"ns N8Z'G8,kEvLΓhYv~ohx{gpLQzkLl&qPy}I!@owdo 컸TA)B!7ˎfGk?$^|.o\%Εa^,#X}}S >jR;cG-_9{Yt1pV(l_`pɲږ!|؄O |/k[6]S"I7;=rx-.Hh壤 t.w~ <ױ D .;V 0%~{c&&1^1?{`O|AON7b+$~Hk|тR-ΙS>C~j endstream endobj 3811 0 obj << /Length1 1393 /Length2 6001 /Length3 0 /Length 6954 /Filter /FlateDecode >> stream xڍwT6҄`DNBP$Aޔޛt]TAH"EEFuZ;3ϴww00:M *zzZ`D$[6EH Z?*8@ԩB D ~ŀ`Iimi( IUnH;0PF*'H wTrAp(%8"\PG"+H `ED݅.xa AO$8x a2PӚ0qD2c PHTpOtyC@c-] @r`a 1.X(v#Q0 ~(<u"QPt(P]%v?<x$W"Y mqqA xT8x"Ƹh;_m=Z0D:(-&%DpG_ Xo#؃7@"7pivH8C8 рG'@ ~` _'+"0hG,bko'1@o!1QKosSj1_~KkvC?g0}  ￙n _3h+H C](?"uk!.fvWa|V-Jh" H:awI;E&D#b__6<x~ .?PC1vOTB᠞L\S;ovEHh~ ZR (KGX79o8၀>N`2ANUAJBKC)BCTnQ8̌I]`uk6}e׃ދ՜5{B+sl7&.7<5KR.uemVs6sC;Cmf ]F;_?a}%[ٟ].DY'Бm=ĹMuwDh=Z !Щ/7ʽ3m=qEqݮ,_Aֺuބێ Q^t)\NrݧPN^}ig*R̋ڡ:#s?$kY  ɝ.~nv!mUD&kÅʜ 7JqlN j7L)3$R|=o/VeIHt4}\OZӣ xjeOǼn Wķt0@άgkmALM7^|Z (%#)y~L"p+:Z:Y'M5^%wʘ9HvӐy;7ϼ_8wvV^!b $C滑{ؼ4 #Ѹ٢oZag`b̦9ohg*.%wSkv_##[n*" w.uAvFjb2lUݍJcޝ d#7^WmB0#rlW^yBɕj2-ϔ0/&͔Y'{Oc|p7b 8'N诇Z=3 7ԗn;4u>VX|~Eo=OL+MWNᵊK{i1dD}uAmL+^F4(R$7rV 9E}w1_y/Í劯WtuZ/gUC#AҪS~CW3͢>1Jԝ3'%t[PÒ*j/2M8T72*$w<ܟ1 CL8o)M6;eF fޒ.g?8MF;ĕK^x=Z|Xu@Ь=%YNjUUͻucZƚ$W/BQGM>gz¤'>X|*#,9c ,J]\fj /IdIxgV C*;unmX+䃈)꽽\;'ݷ򑦦H5?'Xs|{uNeߓ=[R,=kLWi1sR p:Cs,S*kO[3ˑ3q7xVFZRVgKf)tz3Gֺv'@ gSn(pʴ/gkpzQgMV&6wbk{體-Cn8)xgx?l1N7:3UפV"|׫GF4N<&ikq5%ubre?Oۂ)~`slGyc~@،)Oh'ƻg=Qt5^pmBEq8p'Z#idDG U2%&% *KW"cAjNޙm` 2TdTLt{!ygp>In5Td;dBۯy٢[) 4gjV'=!Jjjŋ*Qw?b HBƒp-k%,m9$Dkq݆/~ V1b \yGn ^]7mJ)uO Qu#ex,&=DTMNd|BNE <_H7CUAƱfL'2ks\%4"1_w3y5XF$AVx@NOZS2@%iەf{mm[EhHܯ~vjR$jaNyy>~2Vmn{Ϫ{'!XY<,.Ϫ9l1)įkt X"h?H/_S{#] RJe NW@x'P|~) ZtK$N]3څoLE)ah q{8_?QIfH襯o.huY?w\ވ(⭯xh džP]^g2Iݩ|A2 t#S>&/?X~H:SNkw5Hvu9Lj YĈcM&UM쏠>Rx_G#viWrƞ>GOSu{goul=ro(u֚{jQ(P%^eֲFk7ws|iv4-Y)|FLTe6O'܌+<񶗮#> µ7I&(.SQv3[V"pʐs?2wRvx&!#w1\Ç^RqX*p7 T)P=WInW!|Sv`9Ri.tCF*Aa>ck|oh I٤yrUM?,w˝Ӟ$Y QdzjI3i}YP& 'O% B',R&ex㩚Y8X$,ǝNvN$ kgB7y=[1~{$BILڞ{BaId]9ls`(v7BUr~'lg?J|\hli4*1A##FSc^w/xN,onZ҂Cs!9m<`uՏfEl> stream xڌT % 1twtww0HwttH4)%wl=[Z2 5Mq+' #] , `gbegD]\ANXH9bPppp8x95trHYY N@WI'gO- >@#@l td4h:Y` A/l ; ;:؈00A`[h2@j(4-[? M'k ؃,7G+ )Pu:c3?pr?9lnil rXU%V`h9bwqu9Z 8fiG+I'#@.@KH=3ܷN^E G+hX9i;޹cv~>.~^aiW-OgJ>^Nk j}T/BX, wth0d?C6#fӓחPbN/. ';qAz!oSq.@{Ӎy-!p]_Q_7V$fo?uC@ r T*@nW+6 dY8Yٹ\e@@+5GكjN;A-q?*sWɁ_9C{@A</șZ=npX;5h^_/M7IF6H&/cF6߈ &q~#Hv]7SC2F6O7 ~#H>O7 E_9s6s{gH$zHu@jHh_lV!$%_1:CNNkR7@JB:g,bnd~;A!A@HʷBNo1{s ?B|.0B$pB9$uMh!!l[9$vp O-?%r}w!;jH}ℴd D]]$6rB(l $Ɵqc!l=~ǂFPByDYu n'vg?Md+4AIOLZT,Y1Txw:k'5 ̞ ٗk^7$>H AFa|CӤyMW3NS*çҦ4K D@hCl1sI@mA(q^>0p:)-4H"ōX[0B[OSʠd~R)#]Vm"!"[';. a6^V+2saS7 [MgQyV^~׌K4`abbtdu,ˑ*Wx" ZHxo T}z Gs,(6b"Z]7NLEls^!M\{@]mؚ@^}Ra13kxx߂u%m]ݜS8:E8L{e:[Ya&}f;8V^>'TjockWŶIQf; F ^m\ սR-plw(t6 9kKsʜܖ&DH ڇH ~10GŊlpOSVS y8 Ta@ K~KS$J،M$b+ VS6K$̈́ 7XЛB"sܼռGa9V;bw(H_b[QQ2ҬU 5hйzʓb5'v \;0v[TG읩.J'cNAk,_"g4fvxaN;eF2ЛACW^qF#m^n@eѮ! naʮ('k{^̧! P26=Wt1h g5f%zݷjc-t935Ay?53uR X15fdrD=EEC{2;t1< QͽM܇6E'F3boU{΄q痭ҕn7sFe7 ~ fI"U2-\ hIWV6mxB>ԏ]!EJa\go8N uQ.~x *xYm3`yV%,BkL/r֊W|4 C~zddbݫ1"drWLMkK}W`-yʫilqloT:x Gu$/LM$}5~C9,C4ol'J)j;J4t߽֍q%bK#}L>J]8C EtL*ӅscH$gΞռq4eq[6idUgt\>R1Ĺ+M@Jͷ qbg{¥QID⥔FA&{YmkƾmcH5n~f9>7[(TQe:VZ1gN.?xOlk^v QL%ƨTv|i[k&4h=VEmcKQX )J[T[ ދf3P{D-z޵LjzkCmGP7;_{٠p4lNEF{d}1N)t/k,M1$]45Hd)7S xK&/ gf%xdDZ'Il|Љ,fvc_)xU-aV +3OKT%4%ND\C;ٔ%EK>1#2҄3ȿzuAc[ӁZyDږ+aGe'Gb+zhJS[ٚuiב̇|C- U )9c_?[a^ b`QveS2u3kBѸ](퉯0̈́xQǓk tBx=[OQv:IIL.&7h0^=Ok ;mUm g52. ٤(rF fإ.HtζɆ+N8PWܓS-ȭ"c#?u Gh;]HfS|# ;gC8潷q3&[WR+Mb$aӡ\ѳ$:N 98VIĸ~i![>T$lEݹ ; MSZ+8TZ_8_خ(p;q6jtuLHxOWS_q;hc#k٨a!5ix0`K($έWBVcsr QU߸בb,XAeʅr;gboۘ|b1m* Ϣ*g e>\4gQJs*;ib3~;s2 Q !{T5l"sh7<-BfSFXW{ e#,cb3b]Nk7Fʖ/N'AU.1'ʏ1 ;M%ԛђkO eH LG/rͬYӟۭǖ̈J (sL㷈="?wռATkk~=g祂TC"ɢ =7eeqWf¨&UeUu1Kr$b_$k6XdDQa6G.qCN[͉+|0~Gt?̣^r3D;zOSL+Mm#Vi5!l`VG66g)jqpqm=('+#=|E(dqT=?|TyHS?N՜_*>,[(oʻaxW_9q@2J0)L|ENf5a=[ڴ);EVP@ $dnsMy%FL3F<0GV@$QJ6@$ۻ3[X]4KjY׸ դl_޿dhv׾7+N+)_JcR(U[n_\eh&Q ?t Çy.̅RT(WV# ޟji JxyuA9DS yۃvq.|>sa3"+- S %|(Jsg'ݩu*DP$_lWŧf!>Q Fҗaz}0mCq]+*5s)j;-Qdv`e&5Cuj-k{T)/g3P᭑>8P7`w^T̴ qhO!mbK(64yΏ(m~×ԓrzh(̻ߵYKǖnAWVL[{j>'Loƞ-5ҠE=#& o9JEkq!9?y+߻3e,6Pe)>2}r rV&IPl*.}~VL+>c~9Mp~LUZIx{2I(z {n1aӛcUwXʞrsl!>Cw܋H6Ĭ֌OA} eT)'*KS`*֊lpZ`~"y7!:ϖU;FVw˓~1y7T Ne T߂h"!.W|H/@q}ܟq.j ސQu&`D}C< [I+FB>D7`hYiLSAAɇ4M<37#b>'5+7ܶyΎ6RWhw$Jg%-vQ?T(5Ji DZ _k;7S02ًp@&AOOhDhO5;ZKlqq1*mݽaS5eS*[<u$5jc }"1T#Զ~Ӈ߳ӷj†AfT9e+hx =jƏ,߼7}='_.8*[{Vmzy(_:#T}ց;~ܼv6SSm*WzҴj>g~U w͈ ՚'v .K=8b \Ә\:y%c4p [%[R# (&5&>Sm76MyS+1*=4.|Vx;x<6$>ThyלS[lϑq~ itԹG gTƟ_8l@]姽JZGN5Ekmh ,.g (ǦB$ì[rG#\KÖIʢXN^ l!a͘zr &%+)3 KDnYJd)y yhKm]_t'b>[?Un4T 9!\fLD $Ԗ㚲XIhYigZYٗ'eƺ8g<9Dz;yBM<б3m֨"xOUr|`Lo2q:r',Kgذ{<ưz? ҅v|[rC&cHgKpwM+5D]v >Nf#)cWD՚f?ľF{Aw+!=@RK@u"x$sVqGx~BGkp+td9&t {MjHiU`tu?"'38 j(=, 5ZtaUѢ3~W[{P?'iU ARr:ٯH%C]nxRTA)p2)T9^Ë*ҋTF'msn"%@럓5n poZRVe} +u,ys^m:sXzˎ/+ٿ%F[ѠSOylKN9!g~g`.Khr>x=Xr<-W+~`d\z`5q~؁Vx&eabwAxYK뿯Y ,m&'۩]*I✂% bHRqGkSs$<2k)o,hԓOh" P)Gw[y^__0Җ=GL^n3!p.ȧL 4P+JRC"]4'k x$ k u7a,Q ԟݓl]-}%m2726FG.g^!vIqTAU&?"+rb`9KZ$SAhg8d@_} 'H훬6)S\NML/j1{~ 3d՞l>0-$LWUsT6zg6bN5Kz<[6P-祥9:d{MBȑUnHXW:]9*ƯZ;W-\rktNܠaPF%1 <4\/%8ndͯK#@p ~,xm6|&fi:g ǖ]jpy ~l[b0brT2(0lEe2_wYcUW8Laͪ#Jz\j{JiAK#7-JBO.EkݦNpfZ%u ʦdk Yj][*h:˹™ҳG^s#\z=F`^O7ڎ K^^I=x~梢7[nV;-#yPCMc;9,u/6CFq㩸~MK*kbq;^mB)CV0Z++Zpn! '8F} N ٮTJ_FGh&DGDQas) f t?.^=>(Sa ۥshIdnŜ8 ~ )iю?f@݌2vg"r]S7aCӚ;M1^y.&h.3 ]daHsItQeDz=+7y` )JY9Qi_4G}^.klBnh/|xpߎ?1i_ kߨW(@Wtvi*LB|NwNRqhZIRHrIqHQN'([@QUR9zXqY_N8+ͳ)1Ku<B'wX;$g`yWժAZUYxit@]BAJx6m?Ӱ {L%{X)+n#+)K&3\[ a_?_=nW G& #WJC&TJj32n>vT\zE 4[\?8xf=0 +xe| =/~}Zj OGEҞ߽ Y+q⽴j y3z趬eUxKdUʿPLW*DjX7tKw_btba`{*\=RF'74UR ›q Opo" b Fa^,&y6_䲥d:Fk_LJ3.swe?#/cOEGϚ :CYfm,X?&v777+i}9xP۞+N)JEYHM5a |IuEm0MPj5= Y3b*162]mͪ ȵoEa*8WfpF7coSy*dZe ܠմVoa&.ܒ<;@xU @Ǟof8HNJq.Pu\HتEib?Li.\cguꚣǺ~:Yػ!%JރKJ4KZgoHmĝ=?bA8EL54a%62m^WϜuUɤtLL::ßR<ˠ˼ӡ%^i{x,4fJ[ǀZ4Jӡ lh3nXtveMti{|\.aǯe;ĖGmϺ08VT2Yb4Vwc,FZ sw< [!7)Ah?3X.Q Jz7WY%K{v())_.~A62ӷuCƽ2_5NyҢl̄G柿`J  21m`Pv$0BD LReڻ>o!!B8}b@K@4X &vg,jR_Æ۠kR^TM/$}-]$kщxm,%U2:=jE6D\AE͂ٹv'1.@k\h!K}B,:~4%eTfMj@x/wϏהCH|\qmuZ9 = `3!{d 4ZT -͢=9H~?EѐM6Q'W.XC͸Gp@m" ٙt9*iqI-k @AoOReGh n=ho&߄3OîBƪ1~g,ڂ"Y-el9}8)h^mHrʿϥ-eC=<-yJ2|m҂]9e%S圐~cpç¯ ek2d1׆M; E#BaUcCWHW՚χ߽tYO&m$Z*.p}yWѿ87~񞄬NSoܸ19 ۬B|ۄkD,DU'WoZb<h˟ cD06g_="[GWH Ӑb2QڊO=Z'/<5$7mJ!tq:$>ʰ|mGrsʑ%ѩUbieӌxg]`eIS $КxM$ǯɖ8:9 K;RzA~ͩOrl:w ꒱6y N;d(y70z2<8c)C&|]Hs6C2!'EG~M7S|`k伣w?c$~(ZSe e0I~EQ rqۛ>-*ɨC:Edk `fUR s{|=O|?fV(vZÇ򭛽vw.My j] #`-%o)p 򔓈4d䘵WK \{2\;vJNAs89Z)x$LE5{D`PX~X -LT sbH'*#Ѹ`o{qFw~{.D~Z˻cst1cBa;@|a\霈t==Gj73Xq!|r֕,9/T h,S|FNo-է`"/| Fp2'nT)Dz1㧪"ٟJd&U~\,RSZҏfKƮ}PnEq-zrE80nC6lݺ h ^>!҅.Dh8C4Q`ydϡEZ; ZOљRq4ڛLK-*ÿdIʻS.X9z`߱q_3N,RAM,/, '$4M(L|ԅn#IҰzB- (L{4Ҭ 'ed&2Y㛷,w8ZI~SPa=2+@֕w.)F Ai tH%"W)vMJK[Am.~2G'jx"iF*mB`AnZv-!љ,[L1{C)G+jO2'ҏNi-)x u5Ȱ-t;=85cS:HI;vuӛ`cX\PJm-&mtQS1R|fsf8' T4rFތAƅ}!H5"U $ 1&F8/,8bGxUh_l|o"0 2 v?Qծ(Z'e^'lK -fa+.}wDi0`||'Qaq2q LK~@rDi;ix ۃ>з27*|JIM҂K a7AYqXE!)?Ȟ Qk%9xJOxARJ68FU+=g/50`'y( lM[c!#!y ]KWo헼GN lhamIRi]٘e-7^vb_b*F)Z۠QSș_ɡb c]< Mfgns|5/w6mg+բ膈k  |G({i s$`#ػYk BvA󿍳dyK.{W@rqr5&m6y7`p1Z=1NL.`Rp/t I}#rlwN/\;Qu%hwP[jo]f*[uʙKD4wXڐ?E"aHz +fd|z!'*gvM+@.f+X x7CT'*iޘ!C;42Xgo^$ҕ5+ -ȍt]d[USe2TvJL&Vֻ&Ix\exOk"휁'#tHr ݆>aa849yb9\Z{?f b! +k&FDĂ0)J=óK(t{2nW/EH=,ٶ6ō: Op=BZ_D cTC<6̇%b8{q{5/bxQ8U;.s%1QQu*럊+~neK)EA`lK{9ufj.8]8]=6ߗg9ͷ!H w$%[2yB!_@ںH'<֧OOT<+w)X>&noG6cfʰV{Ē,-I6 $Y{3>z@la/`vdIS@>)H+Kn ) 680`6A8Nl`LM 3/nZ-c%^%3f*곱|.W`W ]W׊JgBY !OPB./8=[ajXbw#̳H ƕDy5D\h2-1F<B|_u+) y8X~(OU:>e)2fM_3\3E/:flR^R+h=a$bEvzGs:~IފLWi XD)*-C-O9/zVgN"AC'Y8;MF}H}0>hTDdHO:aUhj%8JVXfCՖ$ӏg=!>Wdz0Z m 4.!r8Z>"3rN]>PmtBFo7]=aUѱmB?%3hط ;u6Y+,ѼbxU:FN04j8itj@߃EќgOwERce;M=*;k3{rɬD7VameB1\<-"D0.5/>"ydB1k[,r)m+כM:3^{Р@? b}vVQUむO5a{ub;dVp^;hV0_e uΌF dvF4-j ʢCN{6!A=ivˤc.ĺ3_^YL L1ޏa8y[!!uB#9$z;I'y~m<Ɋ.sYcXJ9lp"}cg)n7OZ'y􆐶lA߬"GO>]za_{v51e-`[(>>ܣ11IlG|8ӗ`h]+1x:@QTOۦSx/';>< fU1c|<Vo _mׂq;˟x;N2:6:BB0! \?(~0>t mI2xOE=GJgr4?y%Y穒?5 c[efC]AX x\Kl0rTM\#( Zc=4a_R.๭3e)I(OP % Pp.gӳ+ƌծܔ3Ǜ[rQ5arxa(iZ˄ͮچpmZPы^䴬ta5ʙv։@4 k/JF7@[Ae)4iοFF=n.k&oO,^yK, 2~-*)Хy )k/b˿6v*dm’ =4E7yAګt{yHpEQZr-5@R\@;vHE61v!3ֽ?h| \ QeYim(m dpj0xJ  Nj?0/M{'ùR"t#( IB#gm>IVp m&E9;.B0]LxI}/QSss1\WnǨBP.=e,4C/ꗫIu&WqiYG=NP<UE13GB9!@;Ĺ8%jrS\}eÃ<ٌhehYM?Ĉ8?f` t^jQrK2Q%иœdv&RF1n)hpӔҝ_\Y* |~0HO9R ~C[C'k9'0/}ЏOa wq>qR Vey |#[S,,r|]m~\?gc({^&DpNGF!Q r҆@ [p ZOIo'D,o{zEVX#{hbHW >~D5xYn8g\t&C=<(9(Ne1]@ R$SGt:E,fzԳV*ޓ *1֭9, ҡDrΣЈigK*hDa8X>)K@4n9~,~:h L,Pi &T𶘎e-)W6*M?QSt#CVDuAFaCi$dζφC <"$`RY@*?@ MbQuX|RhYr$'6"6"!{^/N,7~'= zTՉ>$[ء3NY(Y-rKξj% 25y5VEdZ,=y#boHXVr38T}(Fzˋ:dz/x %,Y9D`2dKz]e?OJW=X\ʡh2!XǠ"z:+OuI[q}PObJ~+`1q\W/`QN;QL/aN y. 6(* ĚY_~MEӠUJh~纚NsEe ɫÿSyk51Elath_6C%1L 9{?4 a-`Dp DoVNZ17Iy%clj},;W[ h2hF)AU!AS38xjAP)%m3• d\:.jW`W-~˿.Cyy.w@0G'F8JD` gƛC]s/1J v*MG"xilP\.ڰDŽ`Dlk|tFo(jـUI* ܢ*{U׼{O\=.߆YZpwu p츑FxhNW @kc[Ca΀#5_Y GQidBU 00L٘kI> eDqeWх'x+& D 0wXDI%-\WDž~`9qWN%0GSB yX 堂=Ȏ0fc`D-tv G3HD#]7iE?DSd{3~3%(J,O QX+^Fow!A  -5PFt6?xJçB́t>>/5<L׋ؤ$}$:1L[}DhdIB@ 2VM0T>?J4U qGǸ}mIN] ޑCpf9#bKHX01YMz? +#vv5>h, "z'H ;c!&cySbޞYcn])Ji%ztg[QԄQ&6HqFw٫hT.awzD0pJE9ftd‰[|[ a~r׆OO=_ o,Oh+CB7o(=XLx0FC|{G7T"*ŇO!V^ … endstream endobj 3814 0 obj << /Length1 1404 /Length2 6289 /Length3 0 /Length 7251 /Filter /FlateDecode >> stream xڍwP.MN %4wMiґ^#H4AP:rs̽]*{gN=C!E8AB` H.D  0nH4J(cP,Sbqqh@ %d2 @W #Pz m @B(]1H;{,n=`t3AQm([uaH%XaaOOO xn0 tC:QW.hgg F?$muD=Q [$ nk1 PW!qp `¿y ~;ø |].[?-C@wv"p$ A!Qdlc^ {`OpQN }ŠLLo [SHDVу"vO: tۦu|g14Hn p_oN1W!o7o:#H @CMD#ݝ۫℠ÑY,nPnKjNHBu@sn8^qApb>_6't'".b0Po2,qp#~3 Dnf?-C q06poK1\/_o#^&P|JShuXn򉙈ˇ$nqXÌYLСMG$}5bGB ;#qǬ7rLe 1xzlaߒޅuP=꜎E[ni}(]Ud{`g*~ț)24I'\)Ygށ]la߸aoW^;*JQQ74`$S΍oe<"6sH#bjM]ϷG?M:Jz _ikÇ 3W>;mKzd_V;E0 41EE}"?nP'yevKn 1絼*h5@͢m('-{^1-)IX'S$ kA{ {VWйd[nxZPw\CzT_A?E _yVtiϳCcbEF-hK戈6Ƴ`XxnWӶtJis=uLS@"网]ݍ;B2pKJ;ITX9&FFFTE<d`m;zz=̴3rg61qku'h}l0n??4C׶Kו+ia9>%Qnzfê)Hz{J5*U'^9vЉ] %KG|s}W|Hݵ=^?>FLAՉGm g LΘ+7Šd!^zZ9>vq'~9_&Px 4MSM*bRur@7 s  37+NtKEaEW'F?툨0{ɏrtHtM]{P% a'8"|]v*uzypt);-ϽXr#)ƯKI:=ʜ?bzOJM!7^뱰Hxx&;9KDi}`=Y=ߪb.! " }xD`&Yڈ oY !ɻ~ИeޗHFv^v{x8obPK函jXW ^xKQupfU=Re󢅫59 e;RǶ߅,=\ܤL*kA W] ; ڹ+0nrfԯ1/|lS&cԁV_r%~?PCkyL}(ZlHDҭ oL]B&Սw?,s۹L*0dMV;|Cd:Gҝvg="Vu[+\pU=<鮩(œP{KmSϹI Ћ# ͐1yRvd]] g[ i>~^g-OF2N6)v>(.6rҦ[Ɩv{݁y܌pRh'^%mR9ҧZı}Y\)iALeTtQ*/Uꩭ0IU+EAM9N/JƩKĔ,{s؈;&-N}7X쥰J5}~u/K|>` {ЛI|tay7Of}3׵vE ML$:?>'Ny)G&%oK뚥Wd8Wga{&[]5R.meJtH:z~ILuuOҞU8ܔ`XҤ iySr<)h}l=k V>pVŽ4lXKbwD6vbcG*Z#U(ol;0.Huv?g;%g0j_+wQrWbH ܪ#.;WY׷F|^LuFŸNny$s·rd2p<ݩ1FSf:(p vt˚)HtV.7L:vFr˦-2477&ߘ'ZrͅOܚ0 ?#n&0GF`؋*}Ua⠅}QQ!>&uσ/!ٷ_>|A`v5)x|>^~}{q\qfD`ULG|Pj4iFah4.Ykk4Q~TPz fiX UŖ:Y$(!{AB]e?"Zw WX.% ՃEߠFwG ;>Dq̯XO 藝QM vO<.5Ti:ؗ!jX1,g϶J+h⊘e4Am{7}E,R|i)ɣ2,XaU1NZ|bba؊; /)9f.m4~A)V< tﬦ;Y3z M15L^>;Ӟݵb#(~9^mGa5c+ْ>d]:pmm~^#Q5H%n.d߮uAVJׄ87_t?kg6vcP4Hp%q >ZyBw"։OMֵyIﰢ^ 5d}[HJõ}foތ}xI6vAhk&'/LojYУ3Ht(AS #O<'[/j:%5]ɭQtwwF:3]ZEK,X&Z?OX}vro30!Hf\X{Dȗ N޷?$5 Yj1FA1~怜N!#>~s 2BֵshA~}q΄9 1Nw>:k FyVX^@ӗU::džj]LU$g*&|K'ECq( #i}ETV8tyskr4fM7,*hoW-kiv'а됩޷|7>1!콕p2''ut;< h>ښ$CppZ3r0a6-;{/$N.#Ap, `Ugl Ju4aҨYfx3sA>XY.ȖgrrSR4ݯEzCl%oSU~*qЇ/tlf߬KcN?yG#G̲õ񕁧-A''xľ#!XV:fEO.!m'T-R䋳+ݽZM2+)a& 5wDNOQo H1--{#CgM{B&ci^7PP(!uXZlэ.}hX*MXi-wg^+17xYs V{!J' 2Ƹ r3O~Bzy {d_FV9yEu. uax >.y LA3$طZP|`c4QW6Bh\+m7_~~uƀMOAe"%xt|Gɾ2ᯩ3o-;Q}WiE1:bTQ1IrhДE|@a e󠌼9BGr˄!EwUH} ;zv0I5;ᮅFwK L? }5j|P_rb~T*nvDgE^m ,s6 $ ^D %yd*H*rKExZG:B_]ˍ>|ȡ~%#&?ru \Q=[cӔAU~T `F *)xN~$3YZZU,9C*. 'X-7F:&ٳi[%X?.6+gճ+Y@]{O9Pr༳RI8l1ntJ]D[|?fvTUE}%]Qn6An령<#[l~ygYp|!QlK t即Y"떟W'Iy%ٗy::b~FY{5Y:EWꗄ>MvÁ1?cg8: n_G 0PbaHN-h)~_V5+F_t{Ƙ>oĜ%Z)^Z;'Q<2ꪍǨАd8«(X*D'L##3yv"_ōAeHŢ!=" voqMK@PAygYnPS4WUAQվO s)٬h2JY}uv1c|@N|۫.r$ )'q+otM94,צ}+-yJ~pWb˚bY~> wnXr#z:-oz1?km˭ݠ?|"06P}͏̯WFIՙTy/%o2s<8]=nT\~L'r3̽F̥v0~Co0sa 7wntsmQ="q>3E>k;[dMǾV.e /?q&-)_˹nB)L%(0t6q?Oueɮ͡L6%V !ܱGr>CWQ>=zHv?繋y*PH"Wv2gIwus4@_sm?>[=ci Exrw]M҅Hq.<ݬc(2β.W9ַK%(NIZD> stream xڍP۶-`wwww Ӎ{ Npw<@r{UߘsL[k̯)IUE@)0ȅ (`aagbaaC԰vmF:9[A|";M\l&.offwww&{g&- t: P25%@/: x3YAo s8@]VEVlLIwAL@ K,0A4sśXۙ % 0y͜\4o, 2A.'a4{;vOnvy ,A a vtJMy3!c8Yxy@G̊?&v;,ކZ[~M܀'WXYf.S5of_=z,ocϓ ;/6_'&x3q8Y,Nbbw,ʂ,7hZ'SG,,fo_Z3Od7$jgOmbom7M.o~~@skWu1yQ囚Y9X8[;KY{U]̬_v?vT;[ryba_3}{8 /۶y`>w 30qr2Dx7 f}Psǟ03.o!}`'?,/ `f0̊8 4U0?lVN3cda0[4(0A.Ϳ[Clf;{Sſ)/V_m<b[:g;gʻ w||+'{6surzŸ&m@EM}Hǯ:QwI_lņp.FI9+RY mm,x54zr1HY&,A'{-B|&FW4B/ln9NC]m9ٝ \[.CO\t,2y$Zԭ5~@9K04IaB ZB2,toSi qluOj)m69V(Y%Vvξ`yp(osu)Y0[{v=49>VU~c65fL XۤY<3B4qiYEb@'\㣒\^) Y)UJ0{[MK,(gNm#B1NJEBAZ`־Ĉ "/RZ =t>i'@ UWSFz+swqvZvd+ w0 8J@"vX-< +ފӧ݂,l\{=OG R7wQFVZKgrw{/+J݄?Kw:>L j fYyvI3hY_9ȏxw+R$eM~߾7Bb_3L+*$=i!)Ѭ> ZCڲ96+YCоn\$a$=e7>AٓCPٽYj&r^[b\Sn= ;"S̛i\|EVF%^";WhNc:dE |TűUȌb,l|]K|;^L6?M9ލzJ9}GK E8/H9 ,u+#(Oc<ɀq8Sdk7=gUIDh QF4BzͿZ},ɞ޷GY >AdD\!ȳ5@"@}oNN  =oƈy />6ʻkRB`sMd]{k&ug3CIU*DrjH?͆(|\Bf5w̻7aX "QKK+n>m+瑏Xtڟ u[# lDTy.;MGk_OSmPFu?;::ˢۯ;B0)aF4ӽ !+?QHy~ .5 ͩ:Ȋא`Dfi$gw?~M _.yw;Wi: {bo1 t&E_ ;`3I& JFU!xLNEC&Ye[kG i~~*4Dx^k4QrE36{G`. "Z>av=KNkf"l ؟kR ,k9~G[RO3Jl'QIA bD\OUTdaw+hUz~ȁ ;2дgsggt ^aBZ;m凑|&^fo|E;ܚfx242l U79N­A|>C_BzJއM4k͍WE3o;!/+ up}+cK* 2ROYEU._óݠ=SpS&EI,߷]I Wap`hFro +$$-!=*q65֛eؕu1|<IFA98Cdv(5̜ijdq[G'j նz\<ȯs<.fSm>":&!'gACs뼭,7QrB!'ݠ)Jtu$r `I#n[hV߸b#Z ĚD` ؔOF԰hHq1j^2ZS\.#_"pnxBzűAIIZ!AZ)Otvum3yh bm&.{«2p4icJ*^Z 8GaRJWqTט:}:uy)3糖Tk.[Z8/P_Rzgv{vq,"_V>#b#G}/1gQh:;]-GsAѴ%ZE><4Z Z1B l8lQ<_P藂 :RtzL>N|׷[2L$,!x+vCЇ F9%ϝ&g79byZƋX/C\&pn-SJsG0ؔFzPW'q506[s+x\':eȒ'7 ~e* +g϶gO&t'H-{G 2 >X+BЍ$g.G<9/;uOiKudG_uYnQyv^UH{Can/[˔FRre*mv(k[+xhz e/|7c_80Qiep?N;`mxTh (dE(Nl|uH y'q ƽLVEcEaQm'i/L<ɗF/-^kH+o+>t[Aٽ[JXZt[t+6,դ?L`C!\̸# !!q-mNB 1]Qu#u׆).1N$'5W} §ϗ5{Hv0ؤWu^@J%{A1;iL\h$|c#3!;N_U~-imԭ(}mdB<Y9g>!3 #s ^cBj'iUjG^ޱWER)|nQ=""}ؾ)iCs›w^1U|-t^G0Ǻ%o{PJf oIY뵯?2eAwQjHeK$rDA D^Mt=O>C1rV٭+I'}K(FBcב"E|7"ݘ%TJOk! ̬ "*C׀yT(<(--+良)kD`D:@ 85cq0> 9ARDw޹sE KjQӺsnGOi]ݣe߷R\aLg u@ZZ Hgܟd"[{33(r'N_&>C04MVI|-UO.:!bv7/}▐Wa@hm `HB~0q[zj Rd@J 28D}e]ieU<夎󴻙FUԣa]wĆ@)OYv0;as|pyKH)?)TS] BSSP# zWj[C`kAJ:G6sxnq135xEQv5[),jk,|/'}Xɧ.{p&ag?e.*MǽV^nufSG9jr쾢EMJs:%"MO ܠiU Ҍ"E},  p.g mHg3#s "`@sj0VoN!0v%q<ֱbH!lMe9-czα') &UDA5s!ӻ~TnѻİgA{=F%±}0"/fA" -C!+I;:'i').Ƴ\\rfGlm}6i34Q|Ί$16jl-x+x X_wڊt<߽Ǹ3jIӹ 7_} ݹ"!ȞgOC뤦"s?&5d1x Idd=C sJE;!B9MG@u4i!BZb&K_s0 sqi" M3%q&2Xcw7'@yf8Ŧ{+*}DxG`jRhb6X+jFV$p :{8X U35b+n1p;^֒D?ߖ=;Ρ~qL݀q^w<<݁Y &3vE f>H -7h@0}_#tZ%!# ƪ.;~979L?P|8a Pa|r-'WBI\ \9Sz> b+Qy޻er1DRUHMc}4<:t1H(L4~䂃SHˆ=T'9T8PqE-&[~jw.Em $V1qH|Q^BOvM7+]ňe]4F g7HJF?~>/ԅԊ7>ބ(Z&z(NgJ-Ǵ,=̖VnUеiZ.]Y4L5(X"oc99_"@|JCޏ2hCe*-8ٺ՜XGxq E-dǬMLڤEs S+[R7<3e8r9~Ϩw#SrG>0cg@LF(XX/َ+,-8˻9`M|*#?`3RiI[W g@/S1mϧ?jY}2|Qy";[,U~~_bgs7n;,HAPN`c}x="yq×+\XI[ %pP5  dsNMQF\>̶YmM$iYq:F cmd`"o购4&̜|(;l;]OwQ9RHq`r͛e"%}y9*l}0Q5\bosL윫Єrdmŀ =Hh75Wr(40L~.l7Lt0MhuS d%չԟHjo2M2Nt>h~Xsw * /):m AZ `At=0ss6h-I%¦4l.]cߑ" |Rh>|(+}(w\6d,#j9*T< D2?s!};ICfn3GlNEoMR0*z\Pm*b&rf h-\^0^s ;njZ ՠL&VQ]`0}~B9TgxBȒ\2;>mms=wؙѓXN|W-۷֫Je@jAs! ZpQe#T _iMU`^Q$[#X&0 EN>MnKCmD@э^=I7- +%1>Y?R􎖬f0^PTBA OާzL־ŴƑ5v=c۴arnhnecroe&~w}z=l#Xy"HA0,S_rtO}# Z%E HNۆZFn;WV좡K+24䧗 iKȨM@Jvf* H?!&3{mBsrZ Y,*) _%[1ճ)S%(V2ܷZmVgnpMK *>TyVdl4ޠ吝GKBN䳅c>VLS?'gl#{J]}h!7r."V<0cV%%Y=y^*/WP>wLq)0rL \Vd_iR9 DTXT;%T l B%,,Eֳ.|_ );][u`nݱ[8_US7~6Z6=h~=&|z28JpCY4ݿ_4E8X/#NR >3 V^/ԝ\!ElnկMZ֟M{6NB]i7mMW?R+E@Fh X]@#I'aJ/%*=6gfr ݹT'/.3AS74`v T tvqoǮy')F#Dak%+BfԬS mn@ TxuÏe[!-HX >P4*u5YyH &A B{.6ooL,U61B}YKn]n$I|>Wf|~1fϧ)G\<9=:d2  q#4ua=x#{ub}wn՜!ktP&@m%:!Nb\YApZK 0 ˏ&R+^#&[R#^/Chs- #Ud΁לDQޓ0D%zWS;ۑ?;SHIHA~}NS 2bhOeF=diYF̏P.q̭ȑ"IF5%J[ϓSHrwLB^&Ho-<wC|]:qtT-Bg2B:ئ|Ο⡾'Dန ~lW-([q+fc'cz>={b]p`'N&lrt9u Rvo# ~KFwT-m$&jF#Dā)AH?%+ o{ mLe/CE, F>$t=XEzs 0n'ħH ?f4$A:18XcKDMґĩ@=U^A)6X!v`5s`x*&O~9q7:e[~ˑQњN-J]6% Iɴ$C'JFX<2Q:Qzi~CgnuѕHyZ\jS|_C߇D, 3(oڢNn&k: cC_FgF.'/7ǣB{Dњr*Bo j`9JT1fk= Π hgt)VW<;'[L^P ! :+]Bg_h` o'5Ê}xcu;{j.gH::}yUgÝ-JڴXr%Q$У4kv@WqCQx4- 2oou@)ٹ%$#&a~sT'Z,H5oSi9g|+yHiS7eJL"^rMfX8ml4#Ce8e"7?ΐ)WiU={ '_qG,pVX3Xدk1嶢ΐM}"uRs7~3Y jSB<;}=x 7*72lն`DdэeM/衒b}-<ݴd.^XIq2h$^qvE{ =aeƗ=FypAd5[(aw|+9:>XSdSk]uرZa̩+ƙٙl7T'۟/NM E o9|g?%% &rl)f? Ei.YIaAmKAkՈag:\rbux!qSAC$`W(UY7񄐿.g^w6Y1^GWQv/u MpZ €6ca-gsd!UN+z:m8KjxckW!* 6_FDX?n&(]^8ⱆD/gA9J}sn/@{+FAOv̘}cp8rRȢh%7 (p^0Z4fFn?yng$Fxe1r_H"XBՐ/V^|A7pvzʼd GK/nBRp>n ʲՕhFA6B&6Ʌ=S?Dג?z&~ [V^ݯs)`X~:Δ͸5p3$lJ;qRIsr*Xg 6/'+M^FK*!R-159Vp .I<Œ>Cڦ,:>0ӓ0t@.i|yOu n"_oҜ뺼ǡڀD0_R#R2B9Աފz-CpI`!ۀф&~Ɨ9P\VBhKS}ݚ~N.<` $VOipC;(]Q4 !ZUt⹬"OrZ$N>uGYyQV8A2Q-aQT,.jK6 /;0Y,w=M3hQt.gS;zMVA"sD }bj#etvilOHP$Լ+!:<\$Wx厇Ѫ^3t^^KL -dԍ>] ]Dg=Io#'b,#ADfC68ƷѶ"IC/JTHΗB4:M~`(2JXG[f y0 IQZIm'mW,/sT 5qFdɹ|U@E MEL})%&W_J֙6ݲ$)_U҄?v.xm[Η)v} 7Rѱ C#>U5Ft^Q^i~GF7~/i['|~?= endstream endobj 3818 0 obj << /Length1 2372 /Length2 20174 /Length3 0 /Length 21551 /Filter /FlateDecode >> stream xڌL].kqݙKBB))w]>2(HDMn ,̼1Uf33#33+d M?\&n HN n`app23XyGх namP`::](]-@n@mF`:@bmfP0qڃ<ͬne͉ӓޕRifP]<怿(Όne7]̀ ws &#Pr:-,=ߵ0ܿ2d/e33G{'okK$)F0q0Koabmgb W&I (jbjmWLUY\W|.@3Pٽ￁_I;1i8X;e-"!Y\`&֕`*aնEaձ ;-D;4-lR VxfsH:VAݾύ# S? tk XzJXEfBWCtie0QW<_M}?]>l13rCq]W7](vn͡-yp*L(³b0L)%#J4RtU(^M,ͱt9H^.#ջX3摧LZ=Pd$a)xH4$pRQ3Bt8:WhNՠ.Wt)(^xSSuQX-uO q e~#pe%^oA_n[X(=P}B]_$31ܢy/QMg wqf|dtz׮Z5.dq'(zSkEd놆H A]pdh J 3ĉ4*kC}!1f'[8UU~?R@K|S\(B7 grT`njH]ZiyV0: @aڟѢv0cS.U1$IBxШжަDeQjd'd*({}`8Ȃ5z?&^G1 K.ZzJr$z^Eվ;OL""N4g0ٟ7<.em []lnV55})4g,t͕rh4y2Ox-6 Ǚ"r!m(V]?=K`FD|>^ѽo /XfQ̛W :UcI \ R6<{Ȥl95948R#r&bR9?W#>*1jp(==U2$luLJ)Y),Lk}eXp}68i3iK{*y~Nm %aNҿu*߉yvQ?Ag/֚Y4t0)\E|L"o>S8`E됨p) sBN#`E_a,_X +z75FB2V(g08M,pK)pCޜV6HejW dzjs|x~ Q%RvȼX)>5.*X =J(HN~ h-_3`^N}28OLdͶA,K)B&*ϴ_}ƁQ!#RymW;څHM}IA&. , ,Wu1OzHT-PQca6U m ;gPe^{b8a%|l0Kf6o"3)~u=H>_%a*+I{dkPKZ4qPkjCxح?%!+~(g3z*5қ֌@QɫERW~{D'8Z%>&c_ƅ~5Ň/ [pKo*xLic}Эd!FU4u ^1\†}ɷ11^ĨeM]@r92W@_`KTrINA=9-S38Ǝβ;{t:zb>e~T η@%϶fqkX1 <&'w@> 1"CQ3JA\F2Qd/;NopYXI+~9c"ω3vM:{T`Z+S{!]r7< &kxwx1>\6po+X:b?i: Qn%~ζ:Da":AZ[T j"v-g,ktg;ˤOׂ|>Íy^CiеX$&S7oM^޷M+h٤d>NWHل]Dyc9U , bG}h!q?H:yyNt]ywN\VyO\goZa,B>djQ{ ϱjc{ (*bkJ3{W|UNWI(I[f}}h37*T0)Fޠ]+N5}Dϥ8eHTQD8~I'\aB\CŬ\HΗ< uxG:Ts&=꽗T.sLFɐ؈p)ySMrM=Ok VM4}_"=7׾'ްb؋&c \_9nBҦ ߏ^8fb {/ ‘G1j638 n:Y*3LNeR;BoE}8ܗLg11]B˨^ԧf$< \ ^mpBn"{p\KeX=Ixao5˰\G;GхDxlÖHɤO7%6M">Y<({Iazi["ZD eX~%O:[2~jơS$%.zylI}SB&W=(KJcId]Cc݄1|dsU%ߧ*jH*jbث(oQ'Cjsl<#c`3MQVr>qٱ8APv9fʘLQu|<VK ͉ZpRˎ"4Alf S>dNvʗai=N^%Q1cBmmmj͊]eJ-JƷ+`Oq`P4e ;tG#8[f][Iw,fIt'I/,6S2GKwHSЪ,\a爵4^_ZZu )lI;ϣc'e[= ȗa+PVĬ9Cp_ OGu_ 'VfgT51`E~>soTqk)%[5^rY5f 1N%cUG;3rT#Qv.0drhdud ir{*e:̹;u`>C }5x[;5U^RX*uP)PRy [pA7eOHNX>EƩRҔώ!֨h7Evk3nP=l6,[=΢Z\dȫm*qUР=#:ոNxز 1.W"v~&Z)w#L؇eg7so[c[_X"`-*,y  gڤ8*a<ۡve\E,D>mYW^>?AqA="㍍^1'U-\$}8fǤnRQ4j{GoNG./O]D|r8Y)Do+`H7 u{ *|iLYQy6dOgN4ݏ*]މɢ,WMv~PU'X k+ϘrM.K"j'"Qg:$r {

    ~ٷ7 Av0,\腲 @\k'[s<%z}J ?M9T y.g,0n,1N)8[9Z!c}P m«ȯ2ES0Վ΍GRR kߖ&1qyOUSOCwBڬ=qeWS@4 S\'4Eq9˪EH|?3*<=h$XgMCnO>a,hK1E5KJ+ƅܵCT Gp}nDH9,r(r?g[; mb9GUwҳLI@IsM)zlW*-Cr^;p(UDU>n K‚64ZVƻ [~߿kOD  "ZB&$)AGv͒Mī K?%BC"wV}Bv|WJVa2"k!f&V㭰1E;]hueWz?"t2!H}dd؉w?%ɇJHYFa]_-s%=7~3E%{*$ysݽ\_EnݢMR*vqAP z(1BWUkJ Q1Z3ww1мv8G2(ӫ;:R#/J;i0 v&}5Vn$V| iQ2YfGD t(]sLJG~%opi6=]1d+=l1J$\0\kQX_+_9eR TpTHH6y;z|uO3=mҢ>rTNNYcj$UN*8$z( %%/~rb?㵆a7w$!z ,dgq7j$U[I^hda2b"&୿ izpoCߖ}@?D!cM|TgNRۀbxg&\NvIڀNw dst-3FJԃf}= "J. =pL)qK fSdsMyi!G(  v鼕4d[v2u'*`b(I=)nZC!hS& _GlFT:?iFrR fBmQ8.Az; Mӿ<xk^$ULi$TuGRdD2W?Q)L3h/l|Fh2 t?x(ЦV3JOn+L_?x짴K\[x8|uI`6itCҬ\pnz4| YOջ[2XFkę[ Ґtlۖoݖ;Y H.ֿQi:#VǬ$cjc xzv+"Jym[JDYa?2"x@%Hۄ4gX)"WtRVKQvh7YyD[C3(%LҶ'0qG;ӶqOJ:C6bb,Fw!_TE*D {u^@'Mmy NGlEOV"_ ^axL}Ȇz9c]<32 (<.H2RS2 WMHk\gy4"<Eb}Ѡ=Dc1FSzE\psUp$o2.-߉(p14c=%zCfm(4ղ#|1Doj4 /s 2UΟ@a9hh|TNf&f:pX iXFy`yd䞼҉z>yq >"ԙx (Q#4D4snW~|˚s˦u;# sv5l(uJ?P3GpsV0ܾiax^3#ͫU-T_6;TqAɵFd-6(W $[ſ\OY^)i浱Ҿ"Z_-M-&hs2"RaWR}B6YYb i~I H>͟&&pU_g'-=1/ʝ`wg2G%>N$b7He|ܨ2lvNJ^=E) TwBV_j=ٲi'!w{~\^_ `(\a~/ϕ\g' f2&E.-iW?`յScߜ TmSNCguL&<ڮK!5²ɩ7GQ]>0a7 6i^$If&\B͙+ vFv8)'fP]:]Af }ftɴY(0_ڪtq ֮x3Ƚ8" uJʾPun' ?O,]C , iP#nl!1n& Vv! ~QEr-Mk1ڕRe $D`Iޙ)1 ]z,^+g vG/6:cs'6X=X3E]V=}16 UBV{LlY13?iLLt$!ofҌƓ2qO]!ȓCmu?bmV7LF\#r k OKtr /:S3##0lJO!@ "jM ?P㰃4U6WSFtKqlwEUqE9_ҍo07@ϬAk25R.Ww)uRЯsiɎ!O!ɂ(ңГ8!ȴ])Xc~)' SNv7_%`eaBdZ~qC1^ ChAo<1g*bEP袭ny#$j5ԜP \ GP 5>i r0?^遴u {ga -D{Ls5#6|E;t iF.uo_o;219 E$cZʃBBԱ\DRd0ؘ M:{J T>>l*j3DmWl2ۍȽfs, OǻID"Cr4CbګOd"'59w*,!_H/~uV?Q̎1!˛ ǽ&T"? OM=Cv *.A:Akp&kcX3Ҕ&g_Ie$o?gz}\aG#&od<4N Cv:4e g"_U69xԡ`Xo aɻYOeBUn[Wukh{4?ɵJe=jNe7"cO:;>љX?Rk%\O?gvB? 7٭GvdGIh_xUe'0Qx~MԖ@7Eܒܴ=bke/{l Or6?\<һFZ vW8 i3L3qEz$[ 98ՇuSB`* `8 ;?S>&'wu4 U>Q=]=,9* 9"7k{"7yo\jrٖ"Ve։J|Oof#8^>H%AAbڧ zL <lU|n,o|5v F?BohsEf5WRKVe&sy,dr&66}Ũh/8aVk$IW76T5jnkʁHff: nSDL+0^ ix1#}U]ދOʠWQUu)}Ktp;"eY,k?.Qg5ϋ8+S;Jv4KIt|z#s~t?˱*jwc&_!WQ!8 [CFayg\R\ּW:fVkNv 3VuPhǿ ,yK7#HAh̶@SL.M5J*L~ބՍ >!faxi&GH9z]zsaƝ,Gl>GTq(jfRҔUQ% ?1'2Ɖꏬ#[d" $X$;2Ll:E@/\[ 4Rl饰 QzO%eQ%1cx/kdW8zX^2 cPqhvwF΂KH׳N"&2 Ly c# A"Y2M#({j9\4>lGȖG{ } ^[šzIw*}~>殦qzKBHC9ޣ+2rqv2ߤbAL>V'u=KBKHw65ԩoL;@l)I̽.x$_zdR:G BXܡVIo4/:{?RLNdeщg,PVu'6?]`d_eҢM+p&]bƩQGQ,5W^; d<;lK 8MU_lS@y^ѨmC:bꤕ \шdF.o%+|K"XF>)Evc#G"ea7n*=vLJ&v+N̋#37(hziH'Wݪܢӏ/&4ͩq_bi>_q>( 0-6?pڀkԷ >[oDWpÙ"cʖy:Ȱw(!G ?a*Yk)7$NA/Ҳ4>M #A|n"d*F!i+[|U0&X*Z)Dn ^piaCWAԡ_Rh\Đ(i*i!n1WQ83`͖ۘ>eᾎ)9"+5/n  v ?:&,E?ˋx-7Х&˼iFG=|֦UL!Q!oe]"iCLT*\&$p˵;rf,0^sdWAubb$ix&bЫTlϡMQYڔwAy,6)t͟bˋSٵ*7Ϩmz~;z(Ej0Ӂɭ^goUn+S/ŵR(ĥN(GQ9H0Yؤ oxfAj3gy("zu?[}0C晈c\K|dæ5q9Y!J/YYt0.LH|!! hXBz'\DV\V2^ 1}=(hJeOUmO_9Gl 5R5w 1$YvGuDg?ROyC83xH)]sBKN3"`=["ry{XKMt{Ƌe`Ey1UeGoeB18q&eXmV|J+u*,$5᭟^ , Q@!!f%MB¸48q5feو@16hX3=pLڠdCEwN5ضc*ΟMyh}/o8; -ܼyѷ?TdPp%M|9Lgn_3;U6p=şN.%p˅\ǺX,NShxL?a!UGf3boJxC\PT-qJMy.x޵f,䐎bq&H,e o8L关sJoe]WյF|?4))8I~PAcGˊW>VWB`[D׌!WzIsMkrao^(6K/z`~ Ƣ)6?鮫G [G;% o8-I؁"x6x;!U#6o9y)Tz_= !.>Dj(TPS^243҆(q|fc/=vćeqg=&xV\ch۴k}F!sv8ԘL!ꮎ0-Vg7@GSO4~vL'2~[\>]meN 0調1VaRuZ2uóF*&_/ iܕ S42=0#:Saov;Mgu/TPĄÆJ wcBHMaUNyfw. 8hd`*Y:{8aP]>]$rfonW]QHxi9( wdgbE uIHArT XZ8vOyy|Mtzj4z%?6M%T-xJf9~'gxG8xfʫ*D\.L&[;b#.r<7Dէi,y苆UMgruD,OZ3}3Et3[xJ[Jz5hˤ3ٙ"%LD\539maKUs5UWk a>%SI3;Dh|4=BbB/]Ή.-0F4N>N^ljѡe9x|z厯R 36JAw[1?^MYC74z McAq_`p+3e% d XhPm%a;ٸ6}̤ >1)BRj֐oy"Â}ґIs.|pssbOgT=So <S޻bI;ч,Ӷ⅙kuE4FM"N}=k Z [-:1V%=KDT_Q'{L_cՈzNUJx햣 "YMm46S}4=%+UQ5o8Fۓ4`Iɵ<~.^zFbYN9"p$&ͲbPia |9ҽnIpsLHYa܋U\˴4 nI_cHQ #=G+OkݸJVW3V5Iv yXlجNN&mhhkE7 묃O2iߋqY\`' ?,Nw5>h+Bvzw9쉋(F{T,'>pH+ֻd#\mz쌗6CF,ť'=gϑGʣzڶSͦ/QqI\*Zzb+8j hȍfo1UB6}_=Δ씡Ȱ KZ 5畴a5Z `$0',)O5qf^fZɱ%B1IsUIeDܽMe>2WԊ94r$p[}Ό%֠ D> <=F)ꅊ. &-z{gJƉ-gaa&\! ZU$uSG5 5W{Yw~GI-t߫GA?,wbs0AME FBisd[?rA] ц`MePf?8M#bH/1T@>m㷻pIF ezf[©3 6gacWEzrV 2'ʒ*ɼv%P$>ncE$Qφ})eC]GULΐ_J2W$Hx|--2?/W}4>+!ghj_4&cz-O׼l1'zmi(Ԇ.XabUM0VGA[kVFF3ξey_6[Q:$㌋ڈ hy)oAݶ+KLȵr:A}-47'|JCJUӺϜRGha*o >JGTgP\9whm4wb"H2Sg8%5)錠g\0~((v麠BX,17I =OrH7B~Z"I:eis&yA"S-_XZgA`mwhГzmݒ<>?@ zyY7S5Lmgj `g! XQ%^3kkqwP|)^,w;)W/>$7JX @d&M9|ڟ# [ibqIbÍ{NiS__<$2Bbj8B.8"(M~l@C c:z+(K0*Kesp9ʏ|{`6 B&pjƋz 'i1C+Wf Ix#5if93'NMa8S q;usU> 1sV\7UYvYdgqdvV7VmPbx VAyqvܳYv0P{tCzDž2(&d70c*lϮ1Y,4H8S!3;QS;YkU|BBPR_N{Sӧ6iB ** yP^ [ˊuZ멺̜wT|bE9 ƌAë:eOȎL %A&`HiaxqLh bjLmMx@@7ىQX4 -kc֩J5{T{ 6Ya0 $*ۨ'zH &J}EA>*j$b%Op ZCFrB9MiǾ&7t!a-x~moHM|O+UJNa)໊$e>Q5&=!sٸA'/m@@8-0rq'A8qKœK/%أ  QMEa >/my ;B > )&W&gAp ZqcGƟA4iNcUt%;TZ^ɮ~ WJ<nuRZy~!-c@!^N#)a3h?ό+xz6Ga \o Gs4 .ܹ Vm\T0Ox0Щ]C8y=( /|_\> ZGx^SEΆH!| yS۲L=R?b]VΉkT|v"r)tie+ʸSV]3,ɘb"A\6;>c#>O9S"`dܻBDaC٪mb][HVL?`ٷ[ߛN̞֟%6CJ_Gd0{# <`qBbU5ˣ֤wR;F΅k! DѺ2Ӄ$pי\%$j%f _Ua ,6i jC=㏲b ;ܚP ]:&{fW&#rxVd'W/~MZɮP> ࢑wy)58]Dc07#33.2 bzʇeGA;H;x!d{k| zbv7B`*u8`+J m+beg< w73 J";)ҡe?&7=ndGEy÷ _w /7W4!)A){ }Dv!{ؗ՞pYoYZ.X)+9z逝 sOcoFhWhb;; 2LGCbǍ*m x8RySQ;ay#{Z!IͅQ-DH=Є$8,`k<*8c )Uz֌u1Or[;]13&K`ݞB<Ώ:Ϯ6~w׌ojR\gK YO(q]x#qocypb!az<8 -nV4qY%[舯~FfYpp̽]6\ >?ܱ٠#v|l%ҺFbCb1qn~$јϹ C|\G:<C!J moL}#h^:2 jW 9| w2ی ,?pQS>2A+nS zע2Ċ>O}Zc@qyW 4?TNLQ*7|[f==,`h_j0ɼ-\IGQG <zA'b@hpfBwQEsz0L.0\ ӊZBT #y' Iï> ~PGʚTB6GzVg2X![Zh)Yר.A} >EXFݑ2"܀ kMnV u+1X'GpZ iʕ F,y`{KdvYr#$R/ڢX#(bC s֥F%.<|S`11zCFHmk`FЬT"s-9T+g`^Җh*W;Hrpd0dWM@~LGc wM^񜐕1*E (V]}oھ̴Pi0>JQ-IgZ̶MNj ,& ;u:2)3*1]8wNA̜;)E`zE &s.9`ղ/u&mP*;5*:dLDA (μgo) š0'- ۲=(R%4Ӵÿ9a&Vm^؈LxK>>B[A0(|J`"9G? /ԻtVey37w'ck˧&P'{dYn8bÜCre좶~COS̠L<ƙW$c,1e:Orrb^V#-{+'o8`EaJ4\"ݱa'(G *7P9.Y#d:tk$#+ :7)ICh"|MR8眦iXE8îT}hpfc?n/9`z'F;]-!.qஜΘ=9¿ FS؟+KyP>9{krNBqyѧ蹪6(0C鉄{`XY_cy؀f h' jYs9xb0V28U&8}Q1"<^a=/V=e3 iKrc]H@橊#=eI55TUj>z?T YqޮC59 +L!Aƺ 0O!:KLeyi"b~iއVA%OdkTzѯ^D[BN_"w[ŝ *vkcwZX6ha 0<0*C]6{WPYP#IrOE߃M,-X5%H?к&ZT-<ފ;Ս7'fS8 endstream endobj 3820 0 obj << /Length1 3039 /Length2 23284 /Length3 0 /Length 24979 /Filter /FlateDecode >> stream xڌT[ HwצA;6 !- !"HwItKwKK9=x7ƽ1g3s-P!RRpppqpp!j\iN RN@SLb(8|BB.:8 M@%6L+v߿sF ?_I{ P2uC24A@`vqqbgwwwg3wfspcd\@g`=ؐi .N@D`2!` mo?pq߁@࿜MM dȾfspa-~9;@MLAvfd%) ]"0.ˀ-`gAN@sH=>Y[;` [X.Ց] z T"B~Y]<[ܚwxMOG_JbHގKH@_% pqrz/BX]f@+9:D C 0'ϿAllkTTdu/_:xYy\A?/QTMAxvU[:& s #࿱ C 0<ϸ!/9I߀6_j?jS{?uu̿d T*-@Wb Iݿm9˂< s뿇o%Π߷ en 9! Y;X0.^>'2dxyޜUz5v6 )`Dx쒿E#>g`zFvg$`se']_Qəۛ>ψxB3{ 䔞3S @ *UgгUA?#5!dGUA3p}FBz \9'2J!L!BR3dAζ!dM]#C<͞ fN@ h_ B 2B›;!-s ~O;3kN.H 2[!vvNϹy\ vB\,;?uprA*씩s~uDmangjGdH-!3 ݞqoǷZH!jJl<mnWy*s#Q[86] d5F+0mY4! + &S˫I' xfdBoUi/\D4Ddt/w f WSF?p2xm)84b "dU^iODy̙E%b_ë"+kZ)\/N]C.˪>a2n] YS[UF{޲&ǀԙ; &; tg {"c$ں lif(L2+&xꤌ&:U7F[(-7z7pKJ$+r2 bo`F\徯 I_S|wSu>(CJ%,O&scyIkq>jf9E y,Ȱeݽm!k0N8HV}; h y^4m=U-9sjhWB u(1=Gr?Nj(­1Nj^ 5C-Se;-I膈;=gs๱[~}tf\OC k2-S#*Q邂1lQd!Au:ZSZ͖rAKπ쵕ke٪" BSbBZj)8:.>oGk{L܃Ra2s3*q t]9#hjG.qT:t)Ɣf{zA9~x$)Wݴ.ZU}hOgK3ɰEZMw_(v;!N?OS52%F1 <` +7-S?>Ci+(1`$kšGۈoXx0 74PJq}\]d{&&39u5^ ,yN5Fęƛ- );cca߅zַ+HU-E9 >JN渂+x Y"-I% <) -_&ffYdI}FC`qDRl9F+k~7+yOK3}mO #6f[b5ROB :cB+N&@v.mE(܊bQиd74Bv~*5EKܫyI~Ol30IT} u(X>lr-3=7[[5jxTtRI2ߊ_Aѹa;7#>)M abkq e nICv) ^$'%vb2ZxÇwNLt{ĖIQV7A'L١"%#X%,8¦Ms3 2p+\`k*۫7S`1Am:fG>q/WwY˪SF  Y!=+W][mXg?KU%?մt˞|DH`8Y.dL}$ɶGN7ee: twiuLg9훂98s f4J]y|y?9ȗ)4 ѯaP#<).P{B! hfbmahTkꩻVLiT5$1V(j5.Qu-yVA*ɝv>aZT&FyX'wxLI>5Y,30 e8X˓Tj .߫pK0+賳a&Z3 GҴEl.BvhQ*= yQ)iuAN;*A1w\ʤy:g#=:\$C/^;N4FT C`q5ӷXy̓}}[\g1#flC;CFυe P)c^>2mx$(:e`UĚs4 ƍS1<[rwNڧ5L|7 j{ Ԅ FsmR^M`,o=CWgѤ,tӁ {$}e6q~YY:MY ]wq}HH@7 UƊůZ4?r[T|ƥ~P@!Z!K.7{j/(<M$9&#k&Z-npE}NX@9v]eGɈd-g#3axhB;x_ʇqL_`m|s`$A#NF&;P}Uj1#?5I< \E >>OM(sO(j9.e5b, k3$b10@qM. $wUh0Jڍ. h,5g0oQ'mzVA>*l;2f0ν/ޯͤ R֥qYc.!;R4\!DZ qA_uH+K~^$=1fyZȒ'\p UξQ ^VHNp|/t,n{oG&׀:Hˉr=%R#N[daZ jϧ::ȁh[sٞ5$3.?5u d2%GU%َm `E?K&9B֍T@t ѐ^//B?(2',݌6 bF[/K'~V?p+5oA$L)AbP+ؖ\Jԯ o,6:;]kߢ!EqgS. :%ǀ0M\{(yiko>ޫ .c4bXDBNEjmuV͌UCF%CS*Ҁȧ.r5T4fc%f苨o)ۇK\>=a`l|BMte'{sRIzRc݇+6Qp{0^ХkF?ۤy%zɨObR+Jƾ,^tmdpOL)2aL}Ոݕsh/)GPH>M\ QYq%):pP>k7-ؖ)HU*lsV) iDCݰ^m]yA*v<2 c]Jx7Cɒ{.N )1&X]+]qrԲ 88C[\*M3%: V` b&-2Zq$;&I,kSN¼ĂCsbjʳr /+V)aao0>rLɏ1|ui,IVPڨdZC6)_0IPqcu/gR˜{w{W  R|iCy@^ޔFa!kE:;6+q{NxZVdr8.+>=j sZ7cA;yeng F0hgϯ >683[]JZK ,㄄ j:Kc~ ;6r'..p@kaT7|_0u>O`swްBaU<!ti,AN ^4.0Ms$3aW3⨍cy>]µ+|Ns;P9t+J$p9ip߇;J} Peemppl:#\Ɩ*!-FmK\e-z.LvZoĻ7c OupvoGg*Ӣgs hsm|2 ĄHjȜy7 p<9)x趮|K5:wpdb<ܾY3KA9Bi }SQQ=7u,E] ?e91Mb:䠐jyF 9dG]lj2v#">(1dw3>τVh |J|z~\\K ~28?!LZ8tOlh awXѵÍu˒Ci"7RmE0ggoV@ꋺM)2` $Cu\5.؏]$6c'*/4}z]9>z(EjVO=@/Oئߦ?ļNŰLPHfֲ^nV),_o4a>τ?qNγO3 6ZgCZ80(\'c:p\cffmrgHkK(6rI0蠘)_憪Tr T?P{Kn.;:q&0BHS7HqK#?&\.p-d_{DaiVLB;gvԈF(픪y++(4G0R oTi֘af^դ67"grImёW/{ZbE%3XH.'{T(4eu޲CQb)bרU%3XT^%Ŭlq@%ˇ$s`p†;:$MBѵCaMC}jGw"/I1fİ`fib_NQ4~DBjr!l$Kum%'>$ ,Rr qvsY- O4Dd³wYWq`-kk|@ R 8Fʤn aI;S|[J1,џ?g/5$0" {ƍ:2tVr):vs$XƵ-[&ecPkw*ɰ0D7wqׇ3uH`\I62 #WJlj}`x(Dcs[CgKe. )]ȧ6pC}9i) v8 xz%> *#+Η*ג4TLFv*9%+5;TOȄįxa5MTOS2vXhց8T">)/omy:S]dҩ'bWCyG[Gxқe02jK AFFvI8,3ie4?& ^ըOfq)p ,jz{k8@ f1ugţQ

    ߭KFZ6 Q ۝I*,VثJ?mĐ)aJaҪ~U"4mbX j=$L.[=ǩi%byF|7sq_ےIt+4bY;ūf-Qiq9l^( (`t!['ʮ"|q;!%RxWfx,2S3LW Tʙu6iOuZoE){mrC?/hx5.he*C]d;8(.Vn^ qSk(,8!h^2Z8P~zoͶWHPui}"R (J_yS794(&d,TQ- c|҇ACR<5#WvN;%d\{`]2YݡSvX]|3J:?"e;kDjݙKx>%'v݆ٺz D͆UHTMDخy-R™81KbQn05jQA# Yq]Xs^V(?|͉\czpE(kYY-𡱯 ~O̪ʛ3*A{=7!yO(bl'IyNr7Fs/rW(+[P5-.$>Ee7:yo6:_'Wd9O*5F^g%>GZ#VB"攭gDolPuKF:âȄ`+bFq y KSVȸ~4p2R].6̗ .PK'ey/L*?JCnڕb'{U5De ׼mќD $;=Tbwv;p/]X%a0 <QՠZlO. {׾ PlƅF.`0,LY4swU&.@k.L.'X֜4tGr^"1Iؐ%.ŵ4b5JLkgT奆č=ZN qD~]'ĸA q;L&Gs: 4U{4" Ex:fX,L؃ q:z"'щYcAJˋb:W!!TuԲnLoΠy4@e j$bryv^~ QAfvIn75WJ5ga`\f[I(Or' B_O 2KZ tzб$qcǦH; ;@G4itv3HJLH6cp^9]R]񴥮 Nۙ=VVf*N^9԰ 0qdWnKQ9zCFޣo&bZEg;f714:68W`7%}I^.3Rphk&B$z=Dv{lg"<^b 85XqjӏOw +0t CopЬi4b6Twn͹՞il ٕ)ܜxՎmr f=Jv2]PE$S삯5-j#7VGn`q )|) 5$8T97AqmgHamyo, cV^}w1=Gf~DQ  55Y#̜E,a`\Ǎ]1):UCU6?m_@^?d<| JlD.:rٵ 엏Pu3";þ5^mؿS0[@6|KbUHc*wCX!t;s!}}~1vpN(e7 [*\Xpob6}aٹb$[ Q%FDɷ~uWI#^jҌj-$.ʋ5bȯq =^_y%/TN[[FpjFԢ0e|_|J]oi.p+丢+)i[ta@/y9>gD]и4ړz- vOy iM[-]}xiDVc'A(TO414@3!7Lu5/n b2c`\K_GJFze5vHUSit5 /kSuJO1q+4pK8N ũ# _SX/uTWZ6@Vas:lf޸j+'PlZ8,,v }g҃2G a,Kskfm =Ȉ?L;l/B ,0NtkuAC=,(@n\]l[d^rW痼, D3t:ˇ᫨=ZKkբ"3Ɖr+ %w\(,GCĤ& KLľ=(0¿HnܜV^՜?!$`LQKE,w7V+WtvzMb@R:*Y@YLΧ γ8 0X/o"Jo/as<J .MKW.>f:6/[RjY΃v6Z2}p-uuhK$Axl4.6@OLH[Rx1•*:hOVƾ}T$xlR8\UƏ6HZ:';6 iAGv UHiWI;\uHz% [ƂdlXWQ{RՎun*2_aPx{.bFYNO8B_E_}_-|Y6|׸-:kW;\t*{w7a8y$d;c_F4ORim  < tidC`К3xN8(Jֻ|LH^m*'HwI@ EWC] .&9Xu#%rժ]l'Ԣ7܆+2=Pdc&*E3h YhC$EO'Qz5-J?.9( }PKcX޼jRZ{fX RiX"o.xbP_$PMs|.,!LD=ZFbNj8VcѢ>u6rk Ut6Ǯ!9q}3qr-) QC )>_m0)\C~|:'82)4}3DDGҴq#_{CYqeQd ʥ:b& ݮ1C٧q/`n+[j~(4 ]g q_=N%6~g5k?>Zv`V6z<8z}xa1<>SfBO&UM$]|!,` A& É\bjbx=Q"kn(eHA*~r7`,b%(Er|>1pF:u;\Oe6dM4Fml4˓#ø|/2%xa:+%U GXW;# ̍FUjel8i|^^I<`춶vYf}b΅EQ`+Dh&t;(MXA\-n9$b7V/zz:z1D$ ~6h~/]`Cާ1(u y/ O3]uednԏ-$( /ޙ=M;ְLp:t-nߓ 7\K<usz(wb\; |4<}&͊׫D*;qI80_dpVt(v'F :^_fQYbAzr.XngR818G*M#eeWd**uE鲙yr%UG?P@5^r t$%}-YÈ`oBwqUt,Qs5\<ýy~.Mu11x'}J}ћOM/r Y@*gPևyo>#{sƴ?Z]¤@p۶]uw5לޕVЀ,Tg9e}pܹFD7^"Ƥvd$c:%4!"-rkWBy?ݷ:/SI=C G$70eZAG Y^16KE똏fؐ^4Rajq-}3ԕ)m)R"Հu!HKD8:n-2MPZ{6o{mR6=/ؠQ*]#*JqܒB|/|GKk܄XLNS+TB'+XDq ,zE*!Bxw 6707 M/[1!OUVڒ}GϞHxqVnawYۚQH:xT S>m=mU++^@9Z~tkm97)ztgnH~Gqz:z _T7Bٻt"GMn\I+Tc d{0G ϮzMkXIM!=Xʫ렠J7 /K8.xPp wyO]ڐsv͞YXfT`%l켉'G7I~0:&o̢>owpǭ= peB0bZgGbU44TwstR"&iVNŀk97<+Z8t:nK)aWkOAKVFg?AYBœJJU"5έ#x)! ;wpӘw}DzJ ~| w9,'(L~H?! tIŠ/çl}M՘xwtQ%368XdZ*|X6k&^61C{]bDOpkO"V]/ҦP02fa@^\E4=tfFѲsX:tgs~4ye#:<{{?%&< k+.ԲzIh17ov'7E_]r]p21NXkW̨ Uyl9fwIHU˷ڝ].yj"vhCЕP:\k]))BZ Ba^2`mT`K/q%(*! ;8c3 nepne| U~DY&^|^z?2@ 5ȱ8 LͰEoת@覟#3ilfYEGR9FHu!?˓W~p썀/"?{f=RZNGWW&)iVÛNTox|4Yc%jɬLe(\(MSwGB%:LǹLks 75 ~DP!9 |q41-*0(b;iսRҟpy Bk~?Ocr=o6%E“J #1nnh?M?q~A> )IhC"4>*7vU,iGE{Cl#v2@ՖD~"nveCj T yXS:DFSYX%Mp,Rf!^^t 텍gW(sGGCA$h)n}EINK߅ Jj灴ǂep"? x-˹+pAgrG f+pxhaa,| 춙OuYJB6N:GEg'* qh<6dUJK螽t `MǠK:o.c7PJNg75Jt|G ԌMS&?| ^ymX %#4}|ಹ{!ՌtJAnB>T4VE7cg=ŨI,gp(%]wbf *yb_NjF|m=.B8>hfn2SQ~wQ2KSuz?#y%Y}sJ!{WK' W-<]+#!ӗ_7US0氷'a?GLX% F^GQדMFo\Ǻ鑥sF>Yq%J$Y 4vd/c=l|;tGК{lPYD\9GH* >:Rr -a޽*Q]йo7-KӐI-KU{ӟ^*_Wxc:G2>lMߏ9)Xֱ'Wtj_bOyI8yU>!Caa)p J;#0مjBâ vgsGϮyW=5(kχWl,' }P A4bw@4nz19dC!;\UAhw$6DB]eؠ^!W#A1vKKb)Ӊ$ tU.XxmidS Y=߯Xփ(7NSt&dzgYPx 6Cn'B܏9Bՠ''!/tmw[eyl-̫;E@l+f@Ki^Ԃ؁u_UvpLw L4DSpyc6{PŢZlWC[f(.ouz2ӗ:ȯ:nҟ UOx50@Tv"M,BYtAi*aP[49>d"[ĸ}8z2o a<ŝir$KdqMG~7Skc:&ؾRMf6UCdq @-Y呏UĢ9' `9( @}mY}sJ,n9'GKڪփL}̇6Hೝd7MnrT]wLIw:NUnTOXUc]sj;54Pf[9]DEͦߖ>No'PBhBmBXI^8nNa.aQ:Q8l%gED~hG&ހqj* 6\\΀'/jy Z~x&0Z̗Fn$TBؕ8APTT:` PEͼ *J[ &vuUhh9)^O;k4l fʌWh^0Ro3A'MPq7M?çQ:$b#NlZö@1\r,j aje SQiA+stG j]enYuv%(0zwhcfY7жmzTo|sW >.M0 "Gh;wt 0/CMUhժ^0k+|<&|J87b;Ž.{:1%̔$"#0D:$8n^bf}S Sr vBqûڰ-}0Az+Q/՚ۏ6ե@hY_ sfԤIEXɺQͅV\0a)3'^wHѕS-;vyk)8鼺0 WǓLj(vnF|\WpPQYO'Aג*54Њ!NP(xDU70Hw3FԋL)>"g}y߷9w[slZv[B5maob%y\+ˆEPX2qJv*Ya]'w\vv#؃Xd ~?^3EumA&fo߽v4ߓvjK8%hP~s./f1JI&]=఼QƈKR -JC|$yjJ)7-Zg9U/p g=e5FQ,![;Oewf*|S=S~Pݻ6ڠS] 4C,# aCx>n]Ӝ|,jҟ ozԿ&^e@ DO抱T8 \o^+s tmp NtHj%I6g[,X}U: 7\"|Y٤M]T U=FŷtkQhџ:B՛ ʣtC/'khM)ơ/CWxF%;IB$\O )gă/[ tsaؐk6XG善)Q7|޼k>ܖU`A [TyNdҺP1'u'ZbCA>0ȝ,c 8 T_e\a+UJ^,-¹örh@G`O" (f~+n243vĵ3Q2ـrhKJU۷c `bc p3fV Ղ73~ح1 % V1yǏ-rc}@xEZ-O -,'\>K(w-Nj*4JCN.X]=>OI95wXI 6T'_(Ҩbl"ROi$Ͱ+$og)/./ (/w%O g[iη6ʬkJ*9E{ a /}1ړ*A 0s7HIeC!/Er8+ яrK(t"gq8Xz(,{؞w:9 Vfḫd&+"J:DA\raC%EAAr'Wxc&4Wjv>58M@uǴfQ';96R >ˡވ5vgG},:5[#Kn},H1uCGRcnje v:ץ--;9Nx yML+@|mDBg??]|k2DlM 51!p2ٲ,Ro:)q45(Y]Ԗb %%-4A9}ڡ(aY3͜+k_\źdFDV%2@ҏE@lq+Җ^JGGX4̳l:56/|󴵽FK>gg@g܂b f[95騑_’N) n2dvnŔpX`i[F L7>Kl\~j/ޱH/-@lQ8r l5JSc]RF%1b͇TMgw.ޒSrOy0qNa0 -UdCvYB8|G!uefz^g'pQN)L>%|$/~lcNCn %odu0+W/$M4qG<$[gw1JiIYju& L~WMxdX4ܹly} 7Lb.!'}`.s ǧAn0Z[u(5b:O,[_nQM .[[w-JAϗT_zkQ͘ mt ԭ?AЄcBQv:mEB:HEND^<ǟ+ -RCdJ/&3je((Mn)`sZ}\1ac,Xf|#C9Y~D{\- T#WpW%m,=&yRJۛ'P`}q\Z!"7@3NnE#2,EktX¤tgX>VK˶G 5٭rG7AHݰSr_mݥ,f§)J ~=kK+huv_gs$GxӲ CyV}&ULSQUo;:snL76/H4ݭyo&w/E ,ha9\GD16U T԰Oaj czea>v>+zHHT*I'lл2rYW$%,YT٧!qr(d:I/J57/9ђL'q|] GYC-<͓FӞ}ah#&"8zqpg^EםҥYA·5)ol뵋<"~)dH3jlyf4Ivͅ^a+F`+&,Ewq H0X=LȽAKok=rM)⾬mC%.S7ƵiTu=pViD~*!Qq*R/f17U,"ɞsC%U$2YjGcAd + >!Gg-Bㅦz{i I/eĊ+bnGEZ eׁp hh᭡LCOD~^Mºn2RvtLOAsj;Yܰ.%L{=h)P@{%4%VKÔbVxN Xv`D|^ޡUi;L"U³]Ҁ-K̞V|#jyؙb'a4CҩB<녛"L0Yy@8yK7PNbCa8}+>XXAێ:0(XN%uGٟ넮߈ endstream endobj 3821 0 obj << /Length1 2002 /Length2 13461 /Length3 0 /Length 14675 /Filter /FlateDecode >> stream xڍtZ Ƕmvc۶6nl7Fc5|91Lϵ\;$Jf&@ {Wzf& 3'B1_@c뇝=@ `aab01q3@ qQ:8z9[YX~jS377'a;=@h`jt_!,]]y=<<\-hV ha(jV.U]=) HP(:1ǀ0307 dePcptۛehlonleklaw aeGiՅ qfvv@{Wr~?7kca073 37GFu{+'7L>Dpd@W;'7;zZ2^/G~>&~V?p>.@ߊMp3+SW O1|g+O.1'2sc2JɋHJ}DD<>zv&7;([ ?8)?OݠX C Pq=&v&ӏ_'oWI[6̺~̿_SM?;+4rZiW=1ZHXy͔\M--=PW@tejr|L*fm ; cX>h{ .p(;Q/?`CF?`CF'Q1%`!Vb0r#Ȯ>+>+#Ȯ>PC5G>}Tf>,MK:Sۏ _;?:ٿ~,-Y ? ?*0:qK: ?i/q~Y>{I:SkS7g珇c=p+B;='(5i}VܞSij7SS 5BG'+w&w-Oc O7 Ы 9jـP9q!)?z Jz6 U_W>吅S *7Y!r'EDC˝z'IwZ죳^ҋKC~6>C#rE{ɧ$aM&G4 nY`?pzRZ~+5vs-)s-nL EqLf4$q{-:9 GCkErQ_EPW66Ҝ`jA O n4C\8^$`E 5)2y)m/ɮӫX:? ')4SD;7FaGp'/ wlA;lM_$}Zf>ty&bx {u^T//1Ly<ҮrEְ@l2cC @ZDb7](AjlC`\ UsdK;d~Cah!Zq+B=q_Y?\~Yvfz~H+ H2oS_F1.ig8PtMKՏ0bu>X"R:tpi.'__I+NN}B/m_:%CB_og, .jrH .K/N""&'gAle U#e׎8#AI<` 0` NP#DzyV`@+_gZ.p麩!'ԙI)4EZn`"w5C4_f>G6YeMYDMuu#VU (/1(@J323\a1,5)Wo-w0<}A܅'7+x4WU5JU* o`UæO]WNsVG=ys)qbw`zzIQ)f!| Ex5*Y/cM*;K}1 ]Hȉ;RX) d97B8^j[U%6EB[`2cK%=<<ώbxؽÒ*0rѐwW3vבOـ%E#ԿjrWl WA*%1]zZ"AJ~PWX:dsUhڛw*SABCfw'S5 o f+ ZI,̖CvHtjF! b4vZǎǦyD~Vj{(nb3AS}V]Y6̡]*qY<*@.}-5HF!Z3xǃk軎=j~ PlX[7%*Tr߾'֗/^]^uڣ[lJ!hͰ0:q74n};Sy *WS!"Fb3*d@ 6m)#Q4I 'nvs07,63-} .=}ʐcv]R4o˶0SΖI^#.Jiz-da7DYflI UJO r-':LdCc<BH 5WC Dv!ZNe4:a"yq gjY.eeSCʠWKΣ*Js9M|?lrī jB\{;:Xo,g[7Px\E46$cAFei̯o=5! wJ̰mѸ~@w;RC[Q2M .EIG vsrNTSaM^fs252Yl&`,n]*'-)]`pU75BmX@)驤ȓR (^gmZ&;\rF 'm~&wGzJckHAKmp79?~{`KuAVD5S*kI526̋%9i/z~)^s_n`k3s .< Un|{z4ڨ~ëRF楕Ćr&4dwBi6곓Ƽ9G=SZ^gڪh5sgtD=D^9J)4] >ZDyv'5q\4 8 f(?2?Goϥ Z7|L o>VLvnu>ϙRb+?"@f;$V?Ua1Q'$F([VC jTowP(W>{Iߑ=f=,|K,'_I0z c|^mJR TDɕNx$Oz*smY-D6['[ C"h tCHyɎaf;Jg3YHpDژ<%y =Ty!U䬆 p ޑ/.ѭ󙦣 QvWsb{7Qv_Ļhޤ%0  ~gv7RmqA=/ a-I@M8nxs#ڝ%Gu.KF#N$BCOz迃Ք蹁>OGA)tr;V|}?x[j(x̩x\@tmSi9ӜCҝ :Eq'^cX1Iμ7F^rf5U!ƶp[|lЄ$W5" g*Qv|E 7wZMJ̅Ї<[Ǒ8M'qGr*nYA}TW%~+JfClm95 {o ~3YzN`7]N*%1|_a^R\W!fڠ7{ZSEQvK GpT5Y%jݭ\2up"BCS 3O5Ijߥt uSSql_^Bk I1D9#g@rwrنrd?NX&֡MT=9 Ɠ$FR`Mwpr9,_z~Fa'ylQj@IP:1vsa{z{Z2<(w5@{~!ޜY,Ooz0E{]EʼN T&^~`a_7. \: IF!fk|A(6B3"DvW2qk] ۃLq9P^PI7oQႸDWGK$=Vs )X^gh/^UzWsP$ŷ?A`+}{lYy$Q\#8)>9u3.bE}bY",Dhi˒?=C` j?΃YQkLt'N?iLd|$0W3QH7{_Jd-kr%qBEDr9 +Z,ϩnHyS֢xY#Pc0p ݝ\\~ܐ,bWBq~y1|egu4b(t~+Qd䎆]$-c.[eU+|4B2m*Y!yTͶJ(z4y7BGr.*I|NJ֤eHz'-J_ =fplVDСJC[IMWymͱ5>C3O">\+ASr>pFhJHۈ, yI@r<!ͮ2Tl}v?Y$&i_({k7U EY[&A ΒCS$a}>Nm`a@E9%L)I˗ƅNS_pэʲ-X(1} ṯJ^Cǘ񎐻sr mRRqgFTc>#@$v &+_ی|!l(π"~@nqfᮣZL_Wp2{,93xw-26L^gP AcDbCѓZ'^Rb VT| zB(`5A}\USemw2:&dヒuڹ%tTZ'j,UhUg4`y_yU.O =DwW7S{Pkn::)O2XJ"m9G[ œfǐѯ2Hs,ʕ&Φ 8s ?,co6ޘVD`mq!&Be6dC uԬ>JMLOxtX3mhllFER&5x@H1Tѕ<^@74_g3ڢ(&n)oۆ׳G- ~E 㛪M/2̙U2^ Je^I6oj Y"hĆԿYY{BC72Ó rMM8B-@f7:JXx4aM4`DU&FSzIT#o<_ ]?kD܀7D=۹Yl(<ꯕDHlsj~^vøB^al?˴k-@q˔lo7C1aD}ErVd'[%}7cWRzjP9T&w=SUC3"ʀ O.ӂ\o^D˟2>RP\F]~Xe3Eቨ,Sp=U{DuLQ<,Šmmo%KZ Hſ]y[ _1n$+kS#}xH(]a^X)8M&@O=,Ǹ}!'v8 BU֣9Q^߫}9]|E=rc4>tt@m;2uޏS7xutx+֞u|ppB6wqB8.9QcYD2zI׃V. i:;N ENh1( kKDl@pw9_|9RL{H&%߇6Ӌ*d(Qz'ӈR7kCH""=M|Č I+AZX1FXzjl &kDZ!HZ7_ܦ;G},3$,^v{>zR@kg$`u;9(mVI]^ I|^Qj0s`d Ȍefkt|o}O9J=*,?kF:QUxnK^#9K :2w7Ȯˢ{4؊ˌ/ v /,KL,I%'OERT1 dxt]J.9 ?;ñK`BRdؼq+?ܴi#BmYijb?V{>hQ%\KhS.2r?(ʼn|ǴU`Vަ#lOuhcB1ee{6'I%ؼ/dUi(߸\g`&ޯYnaF2#KlDc}:7{_1C-4b_zVa—N pxL^L؊y~qge"D(Һ7XsW6W%agaHW,,P[dӴ+)'g]Ρ(AeCrm2a0Zn` O?I D QhnȘԜ!bCR^7]56L%Nz3ʺaz︛XOY(%841,|)DS>΢KJ2Qtw]v"dUyd͉[GJ*jq,{{⛗9sz~BtyŐ^6̪dYxIQG^Y[};^S\@HCbB[OY}c0a=j8ܮ% gx{ZTlbZY+B =$w]E ήl; 8.ru KH蛧TEޠS ^%8c[{ι#Ow&w(?a͘)Rom20'Th|"c6zR/nDbGq+Ѱ Tb|#4բ.Xǚڨ ]߃ZRN$gpK0>%[aPB%_ީ2B6wi X=X2=M!"Gw$B 1nmG,=eaY /mxbX\]Lf\,BW8/7O eLz2'܊о{+[;芉D̹8,-UO/zo=K=4v"w{ \6uM~*9Xwժ_ )eokDma@ Am5l.Wáo^FI4wrn| W_6XƕJ*:C{,8gtvSKeB[=H`QrsG. B! Cot6E`_-=u|ܠx,"+01a7TƆ{ϓMJ΁>Ic6/0HAᇰ 2rlY̡{"?PK6NI8R)ԗ߷aje=rmC$`0)5\=wWy)9 ``ڵ rûWvKWΝ:.E;<ɣQvl>ۣO/r`گlwEr!^Sa Q!balĊ |n5T_Rbz%Hi] 0֯,DI0&,mߤF A0g~a|ZK8jt'} 4lp tn+ ErEi]j~'(>e Jdž'F/"`ځf{BS5Ff4l |J_8|Yk$B&ܿ,A|%Hux*Dp#ıS`-xSB'6B{21Iy3Ʈv@2ԉ!RNar)e5xs*BOr$@r`VJJ.LTc{AIo2#tɐkIS]jk*B٦W[&ʥ}i;* 69Ⱦ9:P~ Ȇ8Z(9*coŪ=pIӵ0ǂ7C2M {564a˷{Ԓl8]2 ⢉+jA޾06WEӕIWm˱HnGʊ$TD`Ŝ=#,1Q;Nm-`!2U^z\gZ9j{pU-O<m8s5V rgNcXR軷n)OGi-$m-vaD!W_0d-`w7øK00j5|rhpxQ2;᭿)ޥܧ> stream xڍwTl?t0btltwtK c chDJ  ER%  >}glw f`,쀴i hAHk$D@ R vAIf0* Ac15kDz XR@2Ddj/@WpyU>(3{˿(/,--)C@vaoB\H(G9g4]FX[!D9) hg9~ Ѓ~&D 8=HG7`W8:x"`(n@c@Wk`! Bnp:Bh ZA82z /b58l`:( PWlH77A+?58 vGX]Hoߟ#OwaS'LK/ ,Do @ I)i!: n#`pGQTS"p(`s#H ɣK<0-$濇+llhaU**H OP`iQ$(_YpD$ҿk<-/X<&5H~4c( ; OWZ_G q.65YW]ZhvN7 hM-+3@z=(A0_:VA]U0JukD% C1Vkf0@XDc]Hy_o@L }X-hg?,@XnPO M_gSHl؃ڰjނ+Ct^AYS ު%唾T_y>^m5?iI2|}n`4tf{`Km[&J7>0ȧ=Խ/>bZ%Mv^:&4Q0>{-xr8M~Ҁ~"' &"LLh>r޽1p !m'd:1j}. 0>VtR˝DbD"K+}WZ"U{[; VG7(DѲ1r+2H S?+n^vXMs:zK Y ѱ7ljQ G=դLN;@a E ͹dʇt$nԖj6-. ֟h}4t^$g1K:=1$ xW@*|Sl/hRSսXO jC('U{JYތfxLꄚ20)pıߒspb?c~IciL[溰?.6"hnbBWЫq枢{ҁQ_AdR<xtjDp'#'#ϫK/#V#;J}jk)O딽o~58HS_#Z y!HJ@rIW"86+U/[*DޣÿČڅiFP8pHiuuGpoHv-Ai%\{ 13_!N;a B~cà g!Ac ߴTՈj7S~>xB;s#i5G!GP8&hW|ZiV,Z؜aVr9*p Gކp2.:')o/Pl9e1ՙ޷AMyxQ~~[VAnEE ݫn]=$O7dVd3YI6N ՛t}//ޥI놦x+{!QCz0O"gqeD0^E35$˯i2JF9fW>4!7&"Rm>W9 ^iϻm7TQ:7t2qzZWu 0U/yh0K)UMh[ƼS6G*6*^ 2v(JE/wE?TVC H5cMTANڼƼy@e$&S*%J [jVJ@tQ*/H4eq=Η`4 J.[UAox-{ӭ)>xp<' Ta;=N_z\MJ |7 5Fu_smIV f=6,ʚD-7ya;syaW TǢv>̪BzSj{lV_Bfgr bN|2:'cf &u}IӴ,:Vs1mPuלSū.}^\E=n#7P^Uw#Ia1Ol(,iyO+:A\ ў~󆍑OFFW D嬓i<ɻY+*9Y_=?NÀj׉~ԞL#sg L-87ꨞHT&j$'õD#<\kՅ*үT01Ҥ'$q@O?sqioaL'EwG Na,a-d)ik_7_]Y noԯ]Ã.h17 mWdٍ3> InTv[8BUnӃʶZBAsd(U,6/Jӷa(q4Eee~p߷ŵg1Z#XGd#T#4N~}!,Y hŜx;y, .d_KV<]~vtך6g'x̟wjW&IIe^>s/ śsn='e܄eN|#@<$y22wFq[_Ty{D%^n[. gAYe#7$3YW2{4]ބ(-&Z6aOUtPXpEoE*ܯ4ydL׺{Ζ2Uc!42%'ڭ:̈́. a* i^t2Kx4U;PjwalsXn'`2nn< I.-]QB:OfDSg[[o#~yAD9^ֶP+r-7g#O7_ ҆UZwKtJGV5DGO#)cOMuV*"O):cjt.c&0M8L)n )11 -t$q[|~7&Q;$V|>i-xObOxq@g-݋ťi#~{Ikl55(N8"@Z{`ˋm=.t~ݻw -cJ7T1O~+$:C)J\62/HOz, F4_9G; Zqb|CXwUCkj[$KIҘxcfXD_Y! ϲo85Vn ne#&y.>GTFrd_I>\Aqhby4#_:c4dGin裣yz_F͹te%64ѥ&[{Ja$5{FҺ+++;? T<'|{eMX(3Q}*HM4ЪclY`v #5}ob'wרQ _6D'\9o bU(򱓰0kZ=OB-vHbdjJ25 sSt${bNCnHg}A;VzJ)|~^pvז\R]h9!VM`gQ++1h62,ŒO^J*<:v$g+8EZBW-kR+#d"Afg=u ; J9:6?l͢NX+H*jHrۇL#&POTSqD9L"Ǫbjz~NC>lgBnDŽBawϴzn"aC&Uﻪ>[ f#֣(ꉏHV]ouG~ݮ /SRvcBZ79Y#dy]cȻLڗ(_8:"fK]?:95џ1$'5 g}3SNq^νd)T<ř<(,8mN` %jr;do(~nmXqm~+EgEZQZO+p=;2CDx5^ɗU씍h#˳]8{id#Fd\Dt%?9֩ŞR,nqp@riV!+1?2}^mk2Ꮃ+'^iw۲]/=I=G =81S!N]ϴ*IkeԪN/q:lTk@/?Ĭc4N5Ys)sYI7 #B73|h2o,69/Rq _gZDP{||\)1yuM@~\v*+xo%*7,bR@i\F齱=^:+[ WAv7}QN'bnO!q=C%ӪuU^|0YZ!ѻ`.HDXzvȹZ8 2pSx2THGa@r"i^FPAS87f(m4$锇/K~:u]\w_ xv2: 2qsV@D]HΝqUo~j7l]{hɺv&}NKOq R2 c BlW.ȰC3*F]V #7UQ1v/ e$NCS "vntj]V_> stream xڍvTl7%1:I(nI 1 ch$$QA@$$.%E@RywW_}~uc3QUg\ ŠB@uCS ,!XO_Z8F/:uP,z!@.X(+<08rc@3]m/8/gD_ "w'BCa04 D\.O8𶖁6+;B=}x u;i R5B= <Oɚ(gu4 Ga}@`0G: P.GpY޾p]=*tp,P ȁpo << B{]#C.p_x) 3:](pd1]0x ';<(Y.HZ[B68Qqef1"X] (W[W~o_obG,(ۂ0BoGUBxb7DoWK_t5;#|mBPEz>Z1 s *-~}( /U0ODο%.% b0@~xI i ` H CB.h >% [Gab0x8 aI4=Wr)Zf 1-4d/s"1Gt5Uf/pobRMςRLGWS#mpQp_x߉ n$l1.d<驘=jRZhEmD8 VR(^C%^0 d+Qg t2幹O; +!Ç8 =O⹢q[ߒ8vڡK2 W}\nQ6 Dcf2]TUyIvp\ uyΟɨy|uI:.\:4=̃?nn jnj-7=. 5\<~UO9s}e}6aHB@: G!ZX1"-(q;E}Z5eРrz-i,l%mղݚr1SB sZmB8$)UrI1՝2v/GJފc{vmf |[˃(~)ҦPݯt/}5$Lȏ2l\}%6r:JGN~%@8>.X-z˰f7*sonή?,ʧ?tXFԐ!uxNMg@ϖFy=iK3n3CHxN~MsL`xm6agA8!ZЅ@q.ȧv!@+LkFm2~ϊe- ; , O}]F64]a4M:՛ @G+&IsFROr!_q*;0Z]ǹmUJM3 ΊMQc_SNF%ED"ߎ5+L㖷24jO+9kD 4w| $o"Dž8a#Ӌ؛zg]1<>^|HNTQ|ƽjHp8~D/g;oI*oސ^|bHC)پˡ3+~_: )Ip^ߓ{(Ux4ei zV[b[hwe9&Ӳ_>9.X4VwO&S ؜*> g}YsrN%XA{]c*cYJŏ4_^? AxBCy޷g{(rGBtY!NvV컘WCJ+ܒ7ȵ{1Ŷe4 %)Ԅ1jɰ|~̅o˃qlk]#fCpj7~`d.&sC'-M7-*2tS]mepWץ>D,OWniLT@FFD{kqOm.pf&P4J_M|EtjqAyM⊒UMTj~#.'1HcH,.[(vKl4i$1&DϘ)6< n˛][$g.7̓?>n~`Go*q/͎;*w5We`GuX5Zv("]zN|Hsu8nmrF^ɯs:Μ]~G[qU+ҟy ޥl]5jkܟ5ѻL&ܤҪ2#ygWxyAԶ._W}`2[hV%!Ҥׅx0;m lew|CwVs k1md!2U*f[GyYa;݌:# gD^`V gOl}wX`[^jo L6Zaumu}x_p$t\1x`Wcؓ`ܫ[l<{ySPen~ƀ(=4{ޕnһ6gצ,e9Ijl,_n Onkw^ޥ>Ǔt%G^w~_8?_֢[לT>͒@)5;J?v~ jcSۏ$SLʁJ5@+联Z=]Hxt50ꨢ\_|J>kdsۇEW*e'M}eRt8ݖ)"%W#_G|يVWlW;Q)zcK_ pu ;- D? gKB([;}r mEJ4>sYo0 ݼjl3r m#^lS4)JlٞPxy@c:xFf̽$K *!j eȀIe^+qzo3i);\bG?ӓ o*(>s?@2*1u>M NI6tB:S PBq3EKx_K^抠-/WCI\Ow8׼NK\AV EwMSG'gP;bەQ{m=X~y кDP˲B'XꝮVKZ&=߽'[vody_=0֛i27KUΝٵx/~MUCgiKyD%,, Wk;{ME^${3t\{͌TfKI{4'-Ʒ1Ē!ܳTŎFm`JHfj Ki Sh1z/>ɉ BJ{2 j~: 3WD m{1 ӷ1$桳! cR%0:߯:|^4ĵX: ;hFJMh(f7ɬE_6 鐤=!B(ټ nER 9N6 2_q|=9k^LuЉ#nf&/W6$~ ̣#̢{u=Gb# >=\/. ~esmZ ә[{wZ ~ p[<7?as:YgAh' {!Y/̻|,6nFdjxߨjK)q.יn9o gLvt옇麵j#ҫ3^4"rli ԣ3ˀkbgӃRk-ρu_2)K3&C)!1J66΁~ۅefR%|*\-ռJ՗ #^8UVWsJ`u T>&gb^pj娑dK{ugke"Kmi{ҷP_) EbVY-F] :qto/guxB3hFP%G`t0kˠ -䍝hFWeYOMTq:&[ovt% gu۬!'?gBCՊ.`)(p.iG:I4.#dŽdٖحbԝXpaAybFP,r%[L-x\^-eV吔UfޟIyM>ЪWgC?)$K|FTop\NSܳE}8 > ȅ9J*~|"UMcu%F%\A ]Uo*$Hh$ve{E6UY$erXIX!|?Fyj5`eBEd}Xܭr3Rl[5xZ=J?g^ 1JұI4B.c?3{ʽgìKmϝw#zQ.l[]\Rt|ҍKɭuB!,e>ʒ_%g>2>p |mS |^K-/kUj_[vd~Q36[Id<@ )=)5Vxv׫S(ȪpEHs\`~wdpu-.F>CY~MUq*kw ӚӖdZ,#9 wҎkz o~F_vzP܏X lzh׋LsNsig#:0{~D^ΌUP] Y,gu7]DhUrzb;@}M墄. _sO=yQ$% ewj:ԑ6#ٴ1+˥W|p{7UV^0k'لZNTC.#AlDu,"Gn,p|ωM0fy&)+n㽝pa+`Bե,S}w۷'[э/z!slUj944! JnX*ӝ}IP-GU):=@?[|;bL#Ykv/3|kWDtY h՗NZ!3k&5c:$j &.k@ǽVPfH)~ S#^ݭ*y}G$D B*^t7J5kǪ/q9:F1=P.O`$D,X-\:~⥙_mK BCL1+4:JJ9l7"P~g)8{n2ɞ N⑝4'B6RMT.XJVs09L,ųhnW'qG.Y,Dݟo;B=! &meE4E1RTmw$u[3xtGB<vMS㐟߹R.ѱ$CDE%~zKg?1P endstream endobj 3827 0 obj << /Length1 1587 /Length2 7979 /Length3 0 /Length 9038 /Filter /FlateDecode >> stream xڍT6 H (C H7 "] 30 R%! ])!! ) J|{=5kͼx01hpI[,@ 0( + U~eb# ?(. AEK/ #9iT\ ?($ șj$ sml[sZ""œ 8 P3G؂7ZC:0K0OmGQ777nsgnFFA + \waܸL][Xfp3HA.P+ pA1wC;[Z͡`  4TN9ꗡ97w5C-7(Hk̑U%pvC~U+ P+YpDv݃X07ן5je+GP HY/ $fByyyEni+#7F[?^ oſ%\ `D,@6`(?ё0<0Ed pydTu48~JFp ¼aQ4e2,KIlR! Cp#^A^K]+ [Kњ;!|uA CnM_ Ze9r6vV4K?T?`0 szP\@^!h8#[B.ͿZ¬~m7E) 5f0 C ]|08y xA$ 䂜A~5I>$sx\D:NeWp(YƘ?p?ӧog*!bJ8ìq<oTSi~|ҹPfqBӒ?LفHnAXQ.=RtzZ-S׷ȦkW8f"KL~/U{#әCi9Blm 6a&', ؊Q݉ VMObD79 =_V >*7q0\/ЊՏzpN3`j?Yc"_YnY oL[-uNNFG\K7|ƼNvY/FӉ*ͅZkHP9ѫ kd)JO{{z8M{BLZء8e r@5V4o%N(ÜQI8UN g6GM <4l1XG%(jxFvڗ0KNp |ixl_snUfg:=$zw&v›zy&θ%#|K^bYuĖ}!P>{MνU+bO阜_U3p]x>,pfJAUa ~%lKӃE85d=>*wKR| #$As'R ,'~LOׅGl|'"Wfr"skr:-je%}v90%baՁU> hGᜄrjy-ir+փiٳz0=:bw[pe|P_dOg+%s[¶hìzs㢝19 p_i|}q@?=:\ c4ɀMBuG$7 gV2Hڝ-H e*,؀yϻvҖ(碌ԧ0roO6:U+gQ^Quz΢}%E/>P@5 <'MSM'n+'H :Ǖ~;N; DjCwA gQJj&3NZp>іʚ3%YMr<e6MoP,%wڅrޥ_ƣGI;ҾWAhͰԴ}_XWiEYCbm6bF#ϞqzES!3|Q!%+N댆EK#.Ytq9;ƙHIqߺJANWi%F6,,5=Mq)n-g!1aj2P6{WFE9O٢4,ˣ(AZ̳S ڔS*99xdž: mG2H7qETN̬gؠ2ťuvxjI7`@ъ5)$(+%Ec_Vz26[DYCu ^c9?i\IVo\U;e4JeFw5ru\(L5R'vVz!Fb!u%-o4Eˠݪ14i3Bq[gCͽuF!ĩbaj6IxENԐz>nh}k,1m]y2SSr5xjK]޻>q 06ůG-k 6<4yq\ZO]DP^eؚGU.Gi=4efr+Dfa2Ь^̚X'>MDt*<(̿9 P4A@_r./ͷ c9*'FG/C#8u Fw;(|?|I>ff[&~e-a&#/HitG?@#us6)?Ϋ}7Pz`nSVmb:CG (~~qFb cMRnma'Bu}%"Q(۞ԇm{ iM"hkoYU<ÆMOcIwԀ  1jw`6Ġ1ր6pj&تϺwɔX) 3c2`q`'<{a5 0ڧqQ>?{6'lk'D_YYIՐˇh Y˕<"*8mVjMݧАE, mM.(dbQjoa},+czݯXn/Շ]?==<Ŏ/Fm2襦,x\ydHo1z0t%ex˯%=c tJⳒYqyhi%{F)ZO|gv`8ȻQeSF }B :9J; XݳGZuBGf?+R֟'8ZwTׯ7{, 5+IǗ>كy!߈xf&&`A3>k>䕟D0윙E=s uS29/^M}X3׳8o>4L"8ąS۸,OtARWegcdt֖ Jl Gɻ [`˳r;yv]w-YrTrf?}dᲪ@Nn6 vԣc`q빝nfJUf@Glͫ*® sMsϘ:މ, †g2D|G*Y;-bcJ+45LF;v{Mǥ=$u@htR?͵ϣJQuiNTgC"Ηj~jO<£TCN爟r,eW?UU|ٿAb/D_)n6Cp$V)y-k+lnx u6)`(&'on=SDT9KH?G3?nN@;̮"Zɩ[Wn 0g|rn&͙" kS]k{ _ U6>)Px|Hq?DTWhKd<&"9OoA+t`T@o>ފ#풧P4߰)Oc2BOJ> ?3|oVk9FeJQw閔IAl _(k4p]`8;J:/=#{٣oGr%i% H5E(Ж:(yG5?:=(#JCUo3͊K8C6G>ݎsh>;)ݥ:v/ۺe60k=@2IR.-qΦ- xsH<bHe'"Lr_>>6ܧWqGW ] Fny. à6U§[e+1D.aeI9J`~J O{ru~MRbX!]jSCf%h/)/L*4'+oMQ\7ҷ?8 <5Xtm\[TiF<3I6 I/s&b_+E9$gIS%R/|Dm {@8ٶ;}fJn 7ګdC >F]AK/rYgihs6Qo8\]K] MnOzeGmk-J)qҨ~%R<?&D3$d:܈h@oo#F$I.{PфgJ;-4@"s[w $7KZ3sn*G_0Z툨zDCDO/vyЅ\y>t6do\Q+(_ G䥝vwl5F!la35s=0!x33f"4; Q@'۩K52Ox{bMrٍşعC|[t*rV/;NZ7=:g-8a ĵpcWÒ'>_]eq7#mwj]/8٬'{:!:me"$Dmݧ>wM $G[: e^{$V_Dgcא`Wk uݏ8_'?dnC\6bDΥn)*GkWcV;+m֫|47e?Ȱ_g>(p\)>7o߼-(/1Tt-j/לLծY6e&vb6xwhe4`2D4JVez4h8#m2b@&yhAGj#ijo0c"{̳Xa1{dQ2ʄ'•MdT5P;ڐZ1zVTl@̲竛K ̝uLJj}lQanoV/}_pտRwx+L NGX7GXU:K~9Sԁ,Ӳ^4d]C}~jE3qwG6{Œ~3OVԬ:MfGW󵲄vvnM;CL2A89qWgi'}f# ~$N['-dƱh}yWM"d /OF=cR8Ye1E~< ϨJqBnwmph{9g" >ͭ =)> M!6*="|_P"xta7wx/pp컩=%KE\ފGԤu^U#.lEwtueYY"3g 쑫Ud^), endstream endobj 3828 0 obj << /Length1 2393 /Length2 13036 /Length3 0 /Length 14428 /Filter /FlateDecode >> stream xڍP Cp$83`!xp <݂$Hso꽢 fuջJSMl Bٸ92j::\NNvNNnt::];:> !lVPQ Ptp99ܜB!=V^ [;@ ɀ|=@PX|00X H=@6V5+VQ ufr=řX @zxm%ԭ\HcG: ;tvPo+ fp]!OW[V pMV g8.v'w"_V66`7+W_= hȫC}+WD+goerj /)GC@ο5rN  Oݗur{ف\m~˰ts{dLl@(St}l8~umiw`2 ; ? zx_@@{+03o ;~\?d0[_Ga':>6~n7@H@ '4Vj-lL`~07:@=7㴁[Y_v$oP%Pîj@[*A`AAA>@[M}ۮ9\``?>qRnsf|++_tN.q`8]PX&/`@}|ߦCpAB". PxJ?CUP` X"ANiAz:/C`AEBάxa =AP`]?GOa_m vv _;@ֆy~C? ~# zv6*_7؛a3r_6? &O*>X+l凉 ֽ7,hg>\X=glAlt07Bx8ykZ\0?~#׿C`$B JO_J WXZAнasW>XϿ l~ez]^OP'?or h4 wo"fC^N0/;d*LK[Vi.EN2܍vg*mIR؂I'ҢNq,MM "zxw;!{B@ .U*)4N*#*M谑)[|tO]%go@oocn^]K(PR_I@LL;4@<1[G/w#SUy b傇1IM\Б# ሔ/7+  Rc 5.#cϬYo@Mw0ʞJ|[Boγ{X$a:>OVeք $Gd!+d`p~B%]F75R#Jfv)pƖw5ݭUbX_ lnwm Z#/?6xo )$2+yUljeA}p_N.k&;{?p7a>~)a`#Ggs`Oq)?te0G_{iZ2#C="@dԾ[Ck4פNX۶s'TGa7O+b_;Zs!j{[w|#\GE0{WSx@Qn&8Cg56D,Nj1X7ؗh>7@87#L˕/NX WϿaz/LGylb0YB σ]{q>ۨ*P_V<9䫠wnGTbb_)q vT޼ TNrT@J]ԡ7>945Ip)^}u{ HDlxow9!Q<ίحҪE*S-f^|~R1=wtQ\>yNʼncÞfM}d ץga2%a%JKM{Dw1dzaF K;bLq7.""a*G wN,*%;F]{H ]HT帨l s|çqGxڎ.qdǂ ^޴9Ó'!^~rMO|inEuVVϬQSyF r~q\|;T*:< k$&oYKӎ3%d[-;m%گ]3QM ECWL L,o!e>[|<#Қei"_pf%U.r9OhɔpG}K(β??=Ea5TtRS"4 6ТltAΙB f}͘7nhetͬQFظn W"WSw2//Q Wbn/]`oD~& Qjq'}Ă??xnQ'>h[`1^Z &[jompisHr\GL49yYf񱫢y6CKr w+̯aېi<·fԑ*ڵ9}Ę**&5=>XHXͱ_8F\_-+{@}%1#W|番0?{k#y y&LYo|%a7~az4Z[o ?\HV*fwѻWt\,ݫ}Lsb jDYmx })._H6LH(dbܯa6xlEܝr4{x7~Ǹyo/v*yZ&Qy63[AzcGdx2pوHʜ.-/[$֯J8VdOb5n7D1-'YVB^FuLpYHSj NS#m@fq Mլns_ܭ;d3h Jtv;Tc!!Qa/Gqɽs]f@RЗڵXy⠱*12$\fąYe>ۮuD O7 ?6T;It( OKiw̢tAn0?VV*upǿO;3s_:9OH}9xpp๝wO=|[T4{3ڸ=|nE6 @R֔CG5KN=ݠhj-~ Dzs!Lx=m#Ozr{6uBݸ]g՜^e>2qU+D'E,ɻiAo†펝Xʼnӏ s <8L}"y@g^~QmZp_lW'I9Ծy+J`|c3V8l}T (0:Z$M,HNJP?r3{W V7&x&2uxyP8z\rfE'W3:hLYY ~.FJ \*yLc\LEx| ߙ>V'rp"0ӈ*֧/[|ߖS>?oQ[Q)Q9`-ƇwQS<Lv݁grg2Tt#M2ſ=eB+aV43M:|&b6IMJG;oF+n+]5d7A_]V9DϽ|]J7A7f%BYeOv 2[Y_&)stKPm2s% y4+QБ'9,&5Ĵys7 NBW蒮JH=y:)+Hr?.v`F83@EQ1pmH :ugmG8ᩢzgڷ"y`CY!2|y Fpf-d?98Oz17bQ17Q}yvǩ2'{jV' K ,هW Zyߎ#_i*{qQ@o {[dj Q+DFn Ĉ&|H1_GQq/)YW-*>>}_,Q,{)Ƙ2TlG,p{)5Z- [MVxr_Ek(1݉g][C(]\Kf0?e}bӊ4 ϡYYoNhXR?{o 9͙G!Mb)D+8["4ԊdVT͉|dW r.LLPeHqdoi _5kd :qvpjMp V7FpЎilm{_ϴZҍY[⪇Կ>}/Q% 17䉎CenP<܂xuk-KMo 3E(.Ђk`c!~a*' ˋJqn ouQj>&S/Nh*dP_}-{%7;2o. mL}vQfrIܺB m@Hw= Fja|p;~O>FzIaF4/KI $Dm4w6l!jD_R0~ھVzʕ+]̃2+J #e%߭Pd*1+?gPyAƁzXw5zz '2myN-s49h\wYXrʡ͒dMZOچWxc1 4}6ixwӲp%7Ö>(H@NB`Ē6 2EJCex;Ks!]I|D >fHJr05Hk) (d;cej6mK\8|2S@y+[ ~$_B~[pSbNf>XNžn婓`]SA)`8&k/&axӘ#Zk7Q86v)Gr#wM_\ξ̊;.p6&ο֟vk'5˃|5 5W_ku]}ɶOb=V/5FO@!#KO.|Ur smHAG?}F͋_Y{:|"SLqfAN8)Yb?^ tƈ-d*HJ M@dwϭڲ$ɚ_3sUKMBeeY NBЪ:4Q3]V˵e;;Gr.%٥u/YN"]17e摔"7Xr_K2%i_5A)Z/#EPRu/a`lq`ĥixE6*8:8f՗ v|c6ߧ%ED\Q-B,ښϵ)ʾr1( Mr5T (^'eNQ 9"%:?dˣv3eu?{.ROϹZ|QS°+4pd%3S;%nXDmecXMwmC#F1pk/i!YAEOO/VP f6SL ^\B~~>^qJ;-^ec↨'[拔_Hs7^'s9-k<:E`|{&$m}cuimTm6hPɪL%x= rCDxR78 yp7ߩ~J(״|n/i4j R16vHxBuo4TYJ[mw?>eppmY||м'0p.~[0Rh E㪷;p*boyR*LCO%ebP*{FO4a67Y`:YaA+cwDn'sN挌H>a>pع=W`m|&pH׍&9_+")g(NQj6966ĤnVE?ۯ.:nU=#LsgHٖzcP~=@\o>wy4>:l(S_dm*X. ͚3y+CS}R8+`nQfNq}#gڧ %~qwz'I+6N?hM3KGcUsDjDyUY(`LMXwnJTU?U>w>hEWFYn)|9n?|, V7^E^NqY_4;@SVDGO%"lO#^yX'ۗ 17*1\r"G)PE]q 5;Ǚ^e>O 4Y⟾$i+z#fAܽ8pr 7{baѶ7VBmA\,PLIVrr&*4څdJm_\_#.k -!92GJkhMAvk+`}^ w k6o52^j,A:'k(A-JXHE>pTSgVPFZC!zN tƻ#wn2>) 5eC[5#3h=t]IA9hb( ?e1bCMRByHpfM6bDa5Ыy1/gTǦLh}$$lIa=ҲL$l=_/$M%CkK*k>I~ZmmO!G{ל@?O;1yd˂d\WE6ʻ/둟Ǣ81*I5̺xc~uKHhWØpH92} 2dL)(VI7JL2GȪ$]R?:\ PnN6&!C{QEqkR$&Uwt-L՚.=Sjңgx8 R]O(Fky=p4N>ٵ)ldSaWy=l:mOZΈV5#x9>Eyr̒NUF)k8d}EdCNwڬ,M9 #4ki97*ts'=v-`~ /ڟF<8^kTł҂bͱ ˆ/rJR/$nlَ̲*Fٌ{H7_1 .M.wS* ,׳ taiẩ &?L0[8L{[?vw=2'**"=F+ xmg;e<t[7b!q{&m;yʹ>}|d07aL!q^Burnl_xR_n,p(ri]蚾us$֠5A/Xp=wNVK ]%""ZFuQ@i7YOQM z E0v.',.w)Q'_z֝̌aga;,O뤾p,T1&$2-͋uLcĪIkK'}Әh/h %\qk̗WRJx$ép.NVO繸T|?Ȟ?\y 61%McpC}0Źgw2ƃLkpOSE3 `L\%.2Lbj^YM4v7R|Χ^bre3yJ@V "և7l o"*_Sc91p+dт$WλـjXMl"̸g֘~|$ylME,?ޜi]&5 Ta9xѭۄf SAcHߣIJ3kgvHJ$t ibP(fcw_yR!)L[KΡ!_OD>~$hv31HfHu$lu9~Kaa?~LC2Aڞiu2Z9LG`,=,Lh&Nߢk/rJkQ)]]y#5Ya*2rG;ϻ(x>ME{ӂA虍YmOLNoQ⫕^9bɷwI8?NPBg}qD.(HB Kh@QNd{')zsxC,TKUHjwq0ݶE#k#lBu+ GHlWn&уb\=,TYWꚜ"PgC^`Ŧ]矸Z}F&z AugJ:F-.*rEiрHRUWMr'4ɦb_ϾlM:3`'oyZi> gPFBMZ^o??dm(gsJ#zk.qk6Mbs,+OЬTg z~ ы!ej;k$?Ctj.A`㦜m] !]3ķ[3>STGS5\C%[ :O0k&K_GZWX /Z`(?M*YR'߮BVО/2Y퇮D'hܜWv7< dIvbH@m#4h~lp.%pe.3h'דS+>ֺ PBяdēD=%U4=}U2/x͜agNFtI}:$5.%32svOrSȾ{&Ԩr| HΑJ'H$G!cbHyE=r$?lݰ İ`!$hTrgKC58Gs?^%p*I{Q 6Η%Bk@$Z!gJB!u7vz;bW%8!x˂ aAv=mo*"T=k(l\C]|_t͓ft?+t$'$2؇eé\KvL<}nSM vo ɬ JOi-G>!eN^M 246VZNØ`ρSܓ ac!w5 ZmQA]1^3ot< yUXcV"`?vGo9|? c|Z`U{R4$U|yrwBg/gYJP3p?6O]a.!sXy+{O}%i?y&Ozw V&&/d 4BgXZo%.(Ti[RCضd4%x1c*oqP5od'1Ժ/d)U@"tGkD3Hsm 6>2Z[kA%UPk#^ Sf IOgBy"4u36ںV_dټK|QL)RѕsXl 9 ܨXH6(W.aB\ñ],i+:d9rl1d>U`t]'~@q79Ic9HoDXc) ;|@SN]bʘv(wtdKӄf C) ɑ[8춄JQ-BT_ٍ|$zWYM?\x!ڱ׉L]u36b9bI18뉑hJ]t]1 BaOKmUdi (e|e [GD@Qy(r cgEUفR^T,dv=i6:';hj=ber+7^iSbtup";"DKcT FX2z亭2n1'S> stream xڍTuXTݷёa`b)E:Dn))}sZZ{w!maH'$T207 /`g7{؍a(8! )B@ 5 @Я?k!.4ڃ+,/bxD@~! ~ ?rH _  ZkÀ$^oNݓo q気ת@7.vS\BV=>0;]'7%98f<`b::__%]K*!H_zBP(/-! |-L;o.xHp~@{$ TD|_?,1 / |W>_0Ԑv@P0!0{63 of]q$T"ĩ:G=g$NS~O7<;Fl 24^+OvdM`Vjk}ymcǯ?'`NXI^$3Dub2Fܔs4`'}Q%}ꕲzhvSKL bߖ=v Yr ^ ONgՐl:ģ+zg;[#սVwٞz+It3( V\JتPnuLϔЯi5ܿǃiWnrL~(@vi]w)ؾԔPoBѢ4 g$nsI;5s2&Xjc}VDU.TC<{к70;1MĕcJ7jc'1J9~8?hz6N7L?#HDr*q*ڷsF#;v~k7O)Rbp )ꥒ+~դOJ`!M-[S#cCӦQNQ*V?^cUY1yF/МPmWlF@ 2XS#no>J[7=E.P fnT%RD)?)I!Vf?#_ t>0c̴Gofj(O[ssA~|uw'-I\{gdڅ&:THc4Ѽ7jk~}Ҁ y6|h%^\KIw+ka\e` f0 _d};Dz[0^m۵Bwq;ߌ2Ӑ.Z6osSɽĘpH$q' aSK`k|IyO]7aLi[n| –iў:h@0{cӬj[)-"]۔c8T V`3ҹ _8^F.RKfsB&um1K_j2%D舯Iz|\g.^> ]ӽq+@tyg3%Kg…U߄Ȓ_jKI@U B!ٍv̏Z'ueLގ`ނ 2蓍uW,AE-6;xfH&I**J*uHr%6 )Pڪf~;Z I杊]:OU3 ݇4,p Sypz6e>$s4Hex1~>)5B֭)dXlxƸCc&C'8Yށܶ+3FOWi Zɸ2? 6Ș4Kk Vm [tLg|w)-sB:NIᲩc`h\.gvRWD;nE1b>&h*[}:sYxYNrJ(G$c>pYOӢAm{)ؑiC8jfIheǍ.CyөI]؎\Nq{FfZMDF=UK|>"F4` 䐣a]}wBu!ݗXfC~W!yjtWBEthʆeѝ\,Gj2 'm:"ǥ;dy,X_S0KK̇ O Q\CDt,;&ͭ峼_|S3i,k̖wSn|5-ֿ׷T}$5&5#4x(7V['78<lErkeJ)fPb.-:mJ1wW퓴/PbaE߀/0cIUK|KJ(sq'khB_RV`x7抟Prka=-ګG$6&\ITƌ4ݶ뵿a1zlj@}ݛon57_{w?IuWQ֨$"NѾ[v dk8Wuw0i<;;K+V1ϻ(4\ws@`CtihaRSN@&KAVFQړNVU,+R۽mZ9<32pm&;AǶiN\J@;Y:ytFjڱgh+gQ&>hӝ‘‚DUʰw˥XE B6.VqI8W`lh!8(;ekVC(WRWT?یynC\hO2k}ZLGQ(ڙc65_6+իvl)mvY& dqe=їUEIMm}-;"VIZC9 Ž6T } 3q"皵c^0 ֺiݏfākdyѝkM_NDTaz#HkpΑ1W<{з2bR=6ae&+?N5IgrvZ< nPSxrU k^DX3~&r)N˴ ~yVY&2&Vk*K>D2 Zrv}cbɲƧ 62VNN̶ή~l14U<ݏ7 ^c*_C'WU؟`mUGr,g 7w^]x:jhp W3]9iZhR3Gr6=,0MMM70BaD`S~L XTOrsg"[(r F~s%6lMau)O"Rmr0uQ'r wA ᢂOD+VGƹއ:?2d`>z+LoxT'θ{QZq'2͵3 އVoE.|:WľTbN(+uS{nrh2cZ6/7 ~_7urzz1V}_3 cMRB2r]D-m'9h/JB$(h*M{ Xt:krA!vN^.~^̘Y7iSZ"c'ò 7O1|3*{JJ O]?!k.Gh?:[yYҔcKmUȼ! 2x$xU֝`/)w0wnxƊ Vƕ]38'f\q[wpZK޸*Xw:}_=k`˽tϛ9 =G&wCq15UG_L?FMBգO%6-<a>{H:f9ʫ'O^eu#z~lx ?wH_琂A_01ZmN[նLGwFi(=6f}A,UХힺRKr#NO_ #DT{m8e4Ő VmCڕ6ݸSgOղk9g^\^βLTTb󜧻!h5RzO:A i))WpئEkh<~w1)}r=or0f4]]9) mn"\m*'4J [i^=1$D\7}*yj+&:1u5} Q9%aW3:!wtuN xLiO\S{][ Nwan.46%ƞ9rj46CV"%CV6xHzgf&fԹhǢ>STi|d˶d0q:3[QV'G`as4-t^lA-@i"O:ajŘֆ{$D4aUg}3; x{Ht$8Hurð.9!N3'D@ѥR^"Sç!SFEji(ホuUpe5gj{9>/f;q KG9^:/ψi*m=(xQq1g 0 y鼽D|=S/nJ3j ޷0y{蘫 IX SUIeMbrZAIKRkaW)fLPW?-b.oE0OAx"߮*p",>N>j͸T^@~_U}`o0ީi-ڡ̹7_Yx\y]QM-DZ꺈|j⫂ǛXO}ӯiF5xo'"]O\5d#:;ݸ"G˼+bB6 ⎜Dgn{6$%bnw K%q6;uTf;q؇[:/COiT[]knŰwp& (skSa]Yp19=bɂn!c[lyK.$cܣa/WjUAp WQuj)D&?iqy6DpD[#uҎE@6F'fZ aa okLW }2Y|Pyx_b4@s$3$ngDOs}l b_uV7 ݼ!Tqj wrq1Sxo~Nxfs,r"Lk$-q(ױx{6<7c ̈́R*hN gڪEX΂Zp@P1ƎvUX`eLdT'޹mڳcR^ϒ1 Jǝ$q|@l{uqr۝Vh+Q:1-B쏏݉FL~sryA#Bj7l[f 02#v,[cJlgw5 VcIBdxx!^I;3jG,-Pϵ9ŭn6b:kmu_H%Iݝ&LUND|%%'b|Iyt(J)VEe>ZÊgfT~؈.)^@领VVll endstream endobj 3832 0 obj << /Length1 1557 /Length2 7210 /Length3 0 /Length 8236 /Filter /FlateDecode >> stream xڍtT?% LJzCdc$iDKZEBR)iIAA@@Sgl~n~?41VuE@Hnhn+*E@ 1R 8 #rQGAhN" '@T *%'*-@ ٿH@w/):;&/P0`FA!`O9O D^"H%~!@0BQPWF`/_,X̑0t`pCBQlzl@t"W 83AzyAp kB0pO v0@Kƶg+ $W5H//(K> 8 >z " pjhAu5aU@I$#* 7Ajl!o7mA?_?FAC0iD .;p?ѱj(K<`2P#dHg?߯ W37T翭jj@FXV ,&) I%e!dY_] ^O$2Bb Cv$?S鿢d<=D?3O~h*" o56۪cWBqKk?XyP/ב@eî{H|mbI5uQ(p)(1IIFdEH4m0CH4C]d@ߒ(@ߢֈqa1Ka%##]Va+Bo6'?`!b~CQ1@P(UMW (4 !BB^ԩWub#&؉ݫ9~{%I~l{If9Nj #a;.)SWG0ǬSTM8֙jre^xNe;;륎\%c,C F|(%NUCk:` ^HHcQUnč94-iْ7>QT㗾5^^LH= u*Iu%4loͫⵄDs4x7Y:φq煪 _g|-ٛ5UOH8@%\Yx9'#_|.ry`N=o1n>)fh]##Oշ3Ltodo6,O0GIdW Tb;z݋7ᒃ5k\> g8pEeͪHt®qf(:’1=/<4AԃckIOlN+-Njr4cڴpX1NAb5jVhߐh LPshrm0ťwt!Vu~ƀZy&ԑsCfR,S:_p$+WЀ'f6Rׯ XFOݱ&Ȑ0 9Uc(С`1Q%&uK2{OC<,Hu O%Sx@k;L0Y?.9>0u}y/f׽_=s.}WOݨGryrK7eOw_.ә{B}61=)"UeX"3xHr>v8$7Ϊmg ֥e~s.͋,_/7N!\c|+PFD@csr,z9M) ȁ0PwerP b|, f Mg ί +nC#PX_S{qvK.N%&;H۳4e6?+'&۲|u҆f{i~G=9uc& @uag(:m< iW/XN)޽XFł~eKHTl*i;jCN_ۗ:C7X՞W(%Co/rW쎖>+!w+07{[Հ(yy^}v d3?ƼDpoL䝉P0Qoj4MlfɼiǭGV&ڶr_R99uF"a7HmdR59a&֠ljv| LD?MPlp50"aΡg@=ȂP̝ꨛ.e֛F0R8})M)] i_ǔ&5rx4ZQѬ2۶Qp=O&F^ڛ5@ Ƨ<ҙAlJ FggV*jǥud4ҿ̄텶?P{nodp If ʹ7CeP/}ʻ) ~BzqV%\F^Lғ/:w/|$cBݚ^Ԅl|W)K]z`;nXp 1q 9PH{Qs ܯo[Yc\A )yהV&b%$MjOr¶Ŧ??ռEitp&ϔ*/ߘA \o*XTǛ&=:a0M-p"$;>զy20SKS/e&b1@eY˜mݏ?TvXy1}8}=͘9=YSYk2"OƧl>01Eo'Cd)_FpZhuq&A$K?TRaԾgKiʔw*ׄҝ'=+Hx<.@p \VnE5׿omֿM#}GH\t+|xro+陴PFyqi@Í%nCV$hb оhŀ%oW  R"ftC >M[Hacb%0@4qCD#TY 7pa͐s0RzC]C DF)̓s77gb-Hk,w|˨LS:*iȎgU]JO'5%2.Mǒ_Vh!4!Rl\ sȾT^ 2>/{:$=1'p0EBEoГq>q>kGHq88<HwǜsGSYc^{HLv]љ?QDuEyە]/VJ'(UvҚZ`|Vi~z޽S8yMp8Ǵ{bg6'J ̿];]:^4h'&_|:?g[qT̤W;r|s1erә Kw0]3 Gk7]3jdykءSY\%GrCN;}2({Tn#7g-۶C]-;L=zSǽisg;jG'>e8<wGDzsd,+-_C[bFٹe8in,jL5)i\K@ҲKɯ5qNtg$) @CNy?! dS"Ig/6dU݃~'Cg7fS_>c+1ӓ+HoiΈI7Z~r*-;9WE@FIR6 qߧ~7˨Q< $_Q ᎗$!/ՠUr5 4RC*Οy-}J:Srm;?^`F̌ȦZ(x{|r̃ f(x]»d9bM0s\|gct-C|&6?C7,_>2AWxHS_.P#N*^_n{BHH\XO_ j]cQ/a| Ɛf}z^V9dd!aPF×Uz/Llzmr8xݶH{`Ou$k|}m1|>cD9%E83(*]gU"<%@;7vxnrq.]zFFsdݖ-w) %|Qc_ P.G\0wG+a^AHx[m$ϭ/җ5GNInb Ց}{D KXieEb)rX]$": Im+Nj߅[Dp#DZ Slҙ1Df&qz!"AnW7>=Hխ>(Dm5_EY-Fb"YJ{\CMOv3ɥx׳͚i:)[>6s#B񬮆Q6d XdtiTOS$wYWnvldyFwLD60yw'D'#ELp?Q#ɮ/\8;{f;+)~f eJ:o79]yٺLs$lҽ&jBqIv $Ywc4ŠT[tӎg}SӨ+RLAN\S}cMO'^ۓq{!/-H /ۄa3j|EYYTpFXw\ڷ `[~"B,Ay恧o~5xn$g̲Jj+̆.2 l3*gfixZFf S׽E`iu,M'd"\ !i[DSbA ~)2cM@F B\4I>CvVS12MZKٲPwEw"*OG 0@ D-|SуYM0kA*iO+f#k9ٴq2_hu-)5{Mo0Mz':_"!e'w(O0Gm9 \WCxSӺVQ ;ҡ5V"|H6;'4[=[TSKpM*+hZ_࣓fѤ]`:- g(.XPpy9f&:Q+:4='+$9(t\Hy̓ "S4oA'e}ۯ(w *Fwy d?uOq䘂oLb8cΔ<;L:"PܾzSfEvwOk0Q\ }YoQCIPfiBbV$34A3![$V_8K6Nxb#s`i}EOthkK1T:81 CqЙa O>Y@WA܃23A)EYQA."Ցt7;?*tq{Tx^Na2x[و:}cv zٖPgv^2$~űSY.8ufk ΃귺H#}V7 NEg*n6Xm;:R:fdV6ȔſNNyh Ss?sxޔ]-fg[2QS\[MuQJR8sLy\^δB`Dh}68V1?:β`m#_dgZ̖zVJӞ[7!Vr߸KH x3܎GncD9Y_%I?!I +)WTDHAaP);zY>, a%'UR8LfسwG\|Rf5Π#4XImTs谱%aUM` ^4!rs˓6.{m!{N4y8`BؗR>x[kGnfq $wwb~/%1;9UFvɱ=9 '^eM)vpsOd-2"_*im|E+(HF0w!iH`:y9G0{_B|26jh"SGzApG(3vنk<ёFݥ"TLW#V3[o<ТCNpΝZYVFqrn.-K+Dϙ*3xp?M.u~{=i{<25QnW4W2sؑ#$M+1-0*[rnkcUVUaY}8<+Lqϧ^֩[NKԚ+-|TV:Y10Q 1V|_k|G`PۊlKoZ!<\BJWxkon+X"b,2(::L Sotmd-&e8Dű hݫUTվҊCTm endstream endobj 3834 0 obj << /Length1 1838 /Length2 8794 /Length3 0 /Length 9989 /Filter /FlateDecode >> stream xڍT?t {Hw4c0!Hw (!H*~y׽Ͻy3v=C~yDBREmC3@HHD@HHC‰M(!/;`J 4D4<(. IEDK@0@[D@QDHWw#__\`nPRR;@m  `\hW)AA/// JC; ('U2@4"v# iCC(u`vkt]?Z6O_` 0 B{ U@{ G!1 O ~@ vQ(W`ڬ("]\4W~J0w(w?B! ʀx #`nPu?9 IP7(k#WooSC+`)b>P O( +" ; AOt c9w7B#? @oVA?G,g?~aI$$ǿ|HbWʞj7\([ 1ogvS(WoF*po;(m$fK51PhfEEDa(7CPyP=$ x 3d`g-H #!MXLrwa1S z3@PDc\Hw_+,#nC""1v _0sp}E'&&;1Aa`;R?L1Q?dLa 8Q_0 V6QI `Dc:_*. W7<1 s "0P B9Cbz`._B` @w? ;{hNhϳHпֿg( &ZCÝ^w\3z[[I4Cs?sVvS=P95sx9m*7d5]`^z.>T&E&~P %O u{޴Ns?&,2w-@&šv̦C%V ~PZe|}9<&{:h(S;=:9vS J Wib-AZg-Mg_Ң[!ֻ:G+d "/9$pMHܧ$M6 !훈ಚKEl[b)꿩Yj#1 ) USO{G}u;VnJڭxfke-Ef E~ozZTK#yOSoG\3չdzRz՚0}#u3~W2HXͬoDoD PZE~~k?q;W{n}\g5umJ-򷰲pJ7OXoŽy}6SϙCr\*cٳ-Slo}]:w7˪,Y6eM4PL[(Wr$'%tȫ_YcWgy-fSBߨ:s/D¼'2Ǿ d8l^o9^1b >3(<*a¢sn~ZXd U='FQa $υ$fI#U%>:=5iMV_VֆB\|=FPL~JA3~f *9c@r;8ߊR*ݶ3,R 7%Oߚvg,lqNO(Q76Y>HNן.N֯ӆtJ']yXcɋd+P,y"6 ^d%MtFL]TPY EO +I}|'FzG4x0~֯D"ȑq>u~]6tsnPEٮ,1H.tkSgq^2`wzA*]tIyn3FdWi7'`ԱA;_UEYVPJn]xH.vsu[7O-@8}fom"~-%8`$ j1nHDCxizylZ6wgMܙ_yf>ic%97lG~ Q`<˝<@)&Ȯ= 3 p1m49PYxPѹ~kivZx\['vqp0Oh^Q$,yޥ< L,.`OUn?yr'Y{p^9>z!J SpUU<!~AU#P.'.kdZjsD=){́wUV?JёGڀR}iuG}[cn0}]R>pme07r*? :BVjN4n\GQ7j\)B/)ZPj_څuR -APc; ebZPg" 릤=ݹ?8]rch2NV68LttӖ}Cfh ~t`[@f2$AdܠĬBS9Sa!%vg>֑9HE?yq`Ҭs  (xIW ǣ,v/$J!OB_hg6Nou@OwXwZS Fkt!Iة? &WT71ls[e£b^P3ܙ{1)”) MvuQ*Ry;GH nSLK0~z$kPGت=X١Vg/f/I<7!|VQG*E_VGk%Xc)ԃw-½,W`*fo?epq5/s=+ׇʖ\$`C |0_-+*a1 79_fk3 |T)gd|:"T6]o`%vd& ~ ݚsq=9ԈB6m\Om|V`69 d;T.jMt!zl% YcC&&rQr0]/Irݵ)FXC`O  6;ny^\f=qGcx U [t&TƲRuI2_gqgROp ?~l_pK\KFʳX^A?ˍiIMYMv/uM2WǃWR9 P:xi(鏆 $oqWӾ$ j2,ھ6K_D42e%rX?aJamܾh~`m|8㢋y᠖zo7L"Aa'ԃ,!,6]eK_8KurTof>$(qjD7c>"ȍKw^%K`ND}S?dᒾ^!Yl4&; s_g6gg6+c}KvE\t"yw5OSbpi]Oo4>c֥2u$v?k9H[(ǵYc˾WH^ҡϜ+(āZn=Q}>Hy=䠫y'^72 Cse r"`nr+Jtҽ;X<jw>K+Bg|I_ vQB@ @1T9/6-\q_p̵MQ]7-vQc}8۠'GS&-sT_-mR/1/ދBu*_/X5##y:ͺTBU\i0#cV3+J.3u8mCiYmI5fjLvƍv!!klzR>l*oՔOLd]O}2ZVUdC{ U5u,ZpՇm h}W w̤]ܰڐp70U޺lQq4@V3ιVuXԣ؟~$5kDl)tZt MiW7,. +K@ɰ=T}5DN♥=Y?K{g9r|E1^[#]0YUXV;Mp!zᙪ)ϨaH JQ+q 1"z%_\1IB*}v> )];l%Deq&4vVn-#)D. \|(B|>ȱ5B*ɋcB.L{?9Cw;/H{GXj縤 uTY̚QŽ;dTrqFSsVAM[}̀E7O<"sSbHN9ߗ1W־c R%~#V<{ԪppF#%ۋN]H34: +Xҕxl͹{Q gCR\2e/uk!!N˨yRY>O9Ah$y%u qN\Zo ~&oBSalg~ҕcKr^,D ֜W) yqzOΤt+RDv(@5]Aھ%ֳf/I/_A/jtm fO[8Vv݄?>U ?K%[Yk1[MQBW];I=t# q/,r֒UnsDDfXHzYCfeә:꺭Щ2ϟa0q`͌Vc3Jz3ϔ{AjɖX|ϽP5(*[Q 7nOގr[r475L ׸\{1,SKC^=^)v+g3,ˢ*39ja꫃OI:{A.iWVygU~f,eə~-kt?qj\ ew(cV Nr²[Z0w׮MN)i[/WUz˻eksLȤӟL~K?պ]{U]kIC]vru˘Ǧ@ *`0kU-c*Gf }ON<1jQޭ"5t/yzOb*{.:"ks:|(ϝ|mA9G+ tRʉ*jXUђt 5E*_< C2MC,pRR\NdӉ`p\wzK 3=PR*qjez丫/%,&y&Wf{7_e@݆[, $z8/yOjY5.I^5+kQH+iUcUx0xjpX+a\ӪoU!"3ǐ8yUXCL7Z*d..ay*QXHp=)/B)6[j \}A㯏q/¨Cf).P]@ rsq -zK,.12HxtlhpGsLK?Z#3OQ[(^p">~^v,Xofþ)~=)zX yҰfw[zYrw*Lܰ@ґp)Տz,}k//VzӆyNx7~S43׮Ny߭x $vɋ`xyuQ9n[S}v_B BPOsn2N04rVCx/NҞMAMMX/r2Z'/^ɹ"%6鍿ݑ]چdZ ŘDPGHRf}*pLaK˫̹JCb8L)z͛ډ׊ݝOpz_i\p=T8Z>(EaޯIFD"C]t @ ,ęmR+<͕iIpΦaoL8LcyMZ+U[{ߒ\hiYp*& 8?ʚ\;lᅥ@:8uzY\^~ `T(_͉=iq>qD+4uPq[cyƥY-SU^A9d $)qsܥbgp(d/lWg*+\~ҼѬgQވ87krXb\a-i- kfs"_{K|t9gMp^5s6%^|*GXWdOgT?ZB񯪿9ϗd)Э}1LvaCkktzI)emS&i-#׾ݷyWq-3}e~pȴhИ11=.F](; H '|EXH9aݎJcb<=^>#m%p&݌jq9D/yth4>y4RulF0;A[)[ܕL- bow}<ƦhB2wMK©LeQRSe*ZL>_+/? Y55M( j d`̾d'Jan): =,x1< 8E-xwZF ҍ3¶Zyl! R(\T++p{^3C*;m;m_lIrXڸ0zNQv||cj@WN/| t wLT-j* NtGv4_9.; L7w[&y>ZΕԧO|eqG;rT1YԙOL $*(]"4ڦV6,WḏS`k]8 `;ED/ejU[zF~^q x4Sq_ڈżZ2"<99*\jgcWk qf8 ߢO\l~ܠ3ծ k'<*W@nrxؚ(4F-nS +5J3f0J;#V7?lakSqL+-p<ӽh{V7r, !IoC}7k4;Ѱ#XLTǍEixU=DoΊ+e1۵u7ujR#1f,Q+ElpyTj ウK4؋E=F]$:D4TkF^(mOP6@W3#ݏ2BU7venbxG}dN ץ,!&HɩHW9d&ܕdJTZ Z VZ~Rݑw ެs,e>_qcKZ9ӷ&J7*ȴY&G e,? EIK#5' 9bigN7tQ#ǢFmKD&@&G抍>V6;jn]@]D#Dc&0Kq7Ϙ>^wpI8 |y> stream xڍvT6)%2RrlhT lt*Ҡҩ R* gl}_w~{ág(CU(0(jK@ 1 $JcxL%p(gSbq8m4 2`I I (A06F1d{~XZZRw8@ @CQm( U 8)䜰X7ooo =o X'@?xFN! pW=Ex`p8P] GkoD`=E"P+`PA^P+9;1_#J۲2 F"(,WJ=n"nF=8 P0_C08Zvqg]e=Kf K±Iqz}~ Dn@ڃ׵KD(DMśʩkYKpѥ=]EP]NdC)bH7LN%Jq#jGᓒw, /Ҭ43u,k1dF۞CŸ/{bqR1R9UUTq[dOGG͒lc i.=TYؚG[/Gɗ$ԑ-]MciRdF> V`pw-m[Z-&vp jʽƫl9%w=*zC'˴(%4#yH d^t; bu.JB,lݮ{ȡώVL$yrKv~&ѽ#7U:T9mAY۩nA4n]##SX~V8R>q.QSyQC}YxkeB-Xku-0kǛ`{+Cm`g/+ܮfMK;3X|)<'q4,͟cXQiݜdrOͣu\$ЖbV!W9]LU}.ca];fN\j$MljvygHݾrٔ̈99W5001. r|#HvF=55 mL7eib9M;G&Y-7}A|f6W-aH<yyZ܆Z>L\Vlp,Ƅu:2Y=oa']^6OjUɲ卫avb6" Ӈh u+øg7xc[FTYf9 1lYjqk/]Zkz{aYu,w51k?\?\e8#]̫oƓ'ГU~D4^2D`~,ӐPMP,L6M:{cJ|$n!BaۏBތt~c8z%wO& eOUu\)sT5O%?kZ0uie]j.2´Cy|vU񜱳\OH7 ?ΣO?G* I@x$E=^x؄aԎ8'VWQ`= k=R`G)뜷wK=@ʭ~^#vJ\ MEpͅ++EpS !.Rigitm%O_edާN-r̟>IͰ-u-F>L:G_k lY+u:ViZ眺!}R? yW{-1o3P|J$qY{aLrE5Ɠy0 OAL"t1Xzooz+Դ&&"zLnXnD @"r}ն$K?9'Ĵs哿 %/?-4 SxR`\@cF*gi$m9(M~B!Juoz˨@ T\f|3(uH.:DQY}9PZult~ݳR*kc}{U/S^JWVe>5rМz%yBRqMs+rhDĢMW@3C%-TUzYd)TNDTd5Q*7xfWK<AW)aS= 쀞FSekXYZ=]5/GaHT(ɚJJClTpY.yb6'k.uYSd ]k1>XJ<`(换£LZa8Hz\'l(ZRS1ա|jVץV,]%txOF܃6U\ˁVVc!YCx^M}gǁ --cKho _tU(Lc^~oI`EL`KKN[HKp򢵯trSSl@VH{ V\FriD|J?*jx7Pc <J[4 ڕ[=^‘<1^ÁVꓥ+N犕=ֲCɯ7_z)RS)2[T:i(K^Y]?"'b~R eL30,033$N9?Hg2tsU+|">Άo02yNYe -#b:q봱? q}hl |8o܀)N='FCOz2`<`^IZ9%۹ߧ_eEJi<wR<- D]b>*^dzIגB]56wt]멢 :?EH+M3"St*੸uȆbzA=ķ_ҢH%M^mZz2 [%0?}")z_X<{*l!~, vKKcy,ϝS4(]E0Vӆ>S)4 i>c#WçonFfQlV~ |Ïӑg~FٺBޟ0:J^)߈:CD*Gfǐ-"h*Tq˯u:ah+Sۢ`ܾdz\%ukhyΗ'VSʇPIĿkbiQ:_*ϹS:$lS$jLJqʛwܩ!'KjsdAȶ#|&G@ClM/eÇs,!U (7ˋdWa" R}]2a.=! ӶCK)p۞}Kb\}fj4-ԸՌ{7v}XOTxjVxƩ7XZ#:(yH=t@Fr~ O >q\4:w12ا >`;~m}Reki<xW rSR:tCf3vMB878L'+umMR\o׵0FrJzK'ب?yx`I +$1T x)6w$|6O(|GF?q+.ܾD2$ vi6'Zoxv,H Z#Fŗ4nɖ*lf?q=tIl[+N7Ԏэ3sPۣʘлX=[Oxe]\0rgQq}:je #F7mR2;)]^*'#^iع t\}}s6kV6+lqɹ`Lq69 ԤKZ؍e>D5Kb/@[ H I,2GQzI*AQ(dzw*~zGʿ/~4(ͥ)IbRdaGx^zJc3Y~Y+@Jf!nskF.~y-ڍ!Iax#4B+!5խb2$d0W(ktH²Bk^M1\>+c-erINHud(g-IorTYPt@!=mZ5;MK3LK;O)%_u_mkə aMK/Jf=o0nŝid*>:')72~1+vKtq= .ħ喿w;c9?H5|"gJnG]XS߽~#,mEu7"y#EG^<\29Rtck,/(؀ǖS!l|0{;ȋ#rr׫"7Xm ?tqtm֏}ZZ'|ݳbZZr'w)ݙce>,ztjE &/zϳۏr{jG ;UwK߶0͗\J2 JYEV ^YvY -O g[hm*3RiyQE- ˠ%QEܱl<{/穣s慎@R9#U`Dݮ)Sfw+aK2_N^umPoxE/,cdXŬ7|E8oFS$F'Xbr:ʎCzy~?rg{p9@F6E5=k955}sۅ̴x- '2)Ɖq_Hy"ad-;'LB;B g#x;y:5. M Sdt1N[9 b#^Ǖy/I|}:(>8 ڪK8_N7 eMҾ}b}$]q%[|+z/Nύ)_4m;$`f1x>dw8 >/+S8ꯌXh><IJjIQnJs endstream endobj 3837 0 obj << /Length1 1455 /Length2 6539 /Length3 0 /Length 7538 /Filter /FlateDecode >> stream xڍwP[.AzBҥ@C {E@(EAzEz"(]iһsޙ{'3ɻUZ{=~'<&*p6j&2@0XxxL8_0"(堆A@qxLQ@8PTJNTZ ;1r@u'u(v qm~BÁ* E8G+~Gh!8WpDD@PW,qPz!q@cDށ"tM?  x C7h ?z P$tEJD`hW7(r#]@z 7NE9B]h|<t~WV1B A ,W"OYWC"P8,W}H ?v?uFP~-(&n"f(B[/<s@`Y)) Y 9Jom;sCM  DqD6{‘0DɎc@=Q ?O6xz(W\O柎cSUE{@aYII$PZZ4P_eF٣{E!w;hܩ*BKxiˮhIs?GR ^ELn z[e̥h=ht-n 9 hf!ԘF7(C!|O,&"Wʖϛ+V߁T),G* Zrp@VQ$a_dܤV *+-q]OJYA]idy.5/KdjtSe?5}+Н=b(=7wW}Wjˆ؇kLIv8bIIu(C+u>fѰ&K֊N/~'6(v|㴪MHe`Hh;0,tp';[f('nν P|8QLhM0IGOC MAs*i#ª\vIv!%AHBĺd6EKG߿zW{KuR&YMATXW&:nx>P;+6Ej|QPV""<0-7Qt4 $ԕV1)V;3TneS+Zlg0 AʙZ}3<M&f65(js!>:sho8cb~|cE<;|ѱkdoA sܗ$FH}Y薪Tx44q©6|q_\]}Bށ]zyR73E!|^26S3i 72 gw8c 2f\i*( r\wҖE?KyGO<}:X-G :K4.ӂנ'L/w!L)a+ ݗhBsu>RW*x@f :c! ׮_ﴱar<=! ̡)~QV_D*i6!Dq1SvDu 0W>=:}bڱǡ%`:\xȝ۪y=G6SPX Qx¶y\8_"&!d kKƷ^4dph%<93v? k DZr5@N R={E;c+V!䢐Cy7;[nE@JzGQsAw;9/k%w}<`nlZI{8ӟgjL%XGLj=(nVcS#7]=%>#ZXDt+:o.'y⚆%]Ř\;0 k)9n/&3;,pm.L|!*("M_&x9^N 3oVXjuO)T^Jw&{뫋I.3TeG rDRs/i]vv3->XVEA* >,/Gmq捯ezBkeS#?pwOΔe3(yM[EAf-t.b gb9kH Hqj/th <:ƲRvɘwr $Ώ_\&R,4Koٲ~@`K4so40~%l7Ue=ȫ͊V@ɫ8RvZhص LƋ=-7%t]^a1hDZf{(N2n'#";Z{O>{6Kl` MߊUMӰ-p wpf/H|yV,Ubqrۜ3 /FŅ!M[҇/~TۄD/+z>qcf{7uG? 9,sCHjG(K1lqߪjHG4>d-sqGEAj a[NMbC2õbW{? D_WC5ҫ&VbaI>S̴S лF)]Px1bW^|BDK 'Y|ѓLd<ɻHvjn'"6RN'{%E&U|y-3-ʪ9XׇD6i8  v 7{h>4l X K[#&T k-z` I3M3b ֪z|70>݊8@|ϬҒH Xr)8玀ø;ݟCJ>*ѯeKF"`;]opȿ(!>,CJ9/R#ySf%KJ6Zʳh[uyb8E]AZ wo\]{@lptx<Eo/^+M wg/u5L7DɸU]ʝB7*K,r*#jCRrĹ$tf\qC0$Pe܄g* smuiV48ȪOoNL8',am{Ҭ}Jš/WCZ߬0}n< r*!mXbJ!.r:»$.J#Nh 6 ؅Wn(TƽeBk9ree$v?Opd8>ۿ'f|qw0#?+;;_8y~~` 3{/7y-^.]% "l@J];$&A5PrZX|@_ub@^W{KӺJ%2{V$_Bdª۾%ݧ|m*v׽+J\;KVo&2"H =K)Gek]:sM_^@q\?xv%]Ut'%R0T5y៥=H;*愼7!BߙQEwnuH4'Of9 ;JPTXweK, *fUB:!]<-7u@36EѡjũEo9J&>"]µ=i-C&YKUkXމֺE(6L|W Ӵz\6:XC}?nج>Q-OsΤpPŇ箿,UmT5Q01BW5r=/یVw>tM ~be<p99#Idmԫ/v^twؘ'dw^C%ZlM A2@mriS*v݌ $"/V [n3o[M[Cs]=+t0qA! 3vQo[Wye;Raw8~5U&SNTy=ִjʲ LIǓG#W_^# Q~r[كP7rtcCX M]}3DjDZ{f-n(J.ٍkxGT:?[ݹԒ]BB )?.!-f X,GqwdE-rU~ڤHi2?loRv&D%ѠOon@ۑG_nQuL^xP5TdN'lUgKV]H3sDUKdeHirV2O͛SJBD[? e@qA k5x_" ؏ ޶vք i4|([r=i?y^z=`]1gy b E]@T^VmX j:[^ HTٙ{sǴ[EvaU"M}Oؗ 5tyW g,*;]uԎrSTXK~}(;LR'yl򂱴s7YuGuIu{u s^!f>@,00+<0s0vƹvۿQ28a8l&2tPcs~ǁ~!F3M)$O1z-u:7 Z|_EL Q^q%^;wX[n" %l_kpaϳGo\]#z5o{9px@(4ũ%?A5*n (= 4踤o:ӖFR<{[Zoׂ[zV|1#Erc'üYQϬ:AГ:#5=~f.3IFSr#YpJ'`6yV˴soiJ}_^H7K&$c&AǟXKOkґZo&IN:-2I?<1RJ`[5% % -#6R)`ފM(#Eٺ.F@]8Pw2|G|ӝCڶ:V)-WT+sr_<$|0 |EXʁn@ dC3F8Y=P*{,߿/,A~Sx犾p z endstream endobj 3839 0 obj << /Length1 2403 /Length2 19889 /Length3 0 /Length 21295 /Filter /FlateDecode >> stream xڌt m';6Vc۶m5v6X ۶m~s}#c$|\sMN,D/hlgh"fgLQdf01201+[8[GKjdag aGgLh(cg r09x9y,LL1sZdRv&Nvf<20sss hchad` 1p67f42(Y8{O*>sgg{FF777';G3j:9@WYKP6p[dgfh -Ll..&`vW_69f_,ll`ddgco`aak06ȉ}epvweh`d7p560@LP`99Z;;18YXU#_am51uv>\+[;7[ S [cӿ0vgTpp1 PGff `gbbb8L܍Jao/%_b` >^vS`&>&?^N&gG*23-&f&c;Z `翟tflgk_G(!'#CsxѳrYؙLNv&Ƒ77?vʮ/5c'@gеؙ?\M_Q_2soǿ- ;._S5WWj% hkhzf6&Nb&FOrDt%3"NCWeca8:x2' Jc 30s`9FF?(qE n'Qb0A,F?( ?"A@.rE\@.0̮+A*0̮quE@=pOkA@FE@5p#acKbc'_hɟ@O/ pa LRZ sq7qf@;gaonb H3@` IPQh |gr:[k?ac$ <9 t3:9]`6;?~[dmd`?ˑ' f` @`\q@o@`x@`<F4q;,F.9 ^;zMLM`x-kY#nvEq\nX#g#6QOXJ>1t7"y0!L w'QOKwuia^Tr2CEp7y$Gl<: ,C0JVpfSY"SZ rV1m@a/$`|W%*=8iT梨b,D?c7]ɸ@{ V.ڨW ZA+9|Ouy27f 5i'NGtt4?e92:e[?/[\ ~]4Q| ?jD7ü9S  63C.E'œ1lM$P b* /Y4XJL͛v ')e)8tq6ⳃׂ-I>-6԰b*hثfVn.dN"q).yU](%c%85Z@P_ FNUd0 E웊ѢIMH]S#k1tR!ᶈ~u0N~!uDPǝMWDZiGoQ,s)<*Q`2<-pV1skIǢlr _Xrs^us|y'toQP|f^fhS29ݸوi+J/` q hvF#a,vt7kQb4H@"|C|3F3''YmG< 5Iٹ,9yʓcezeg ckv(,)$ ֩nԊIm*XۗBYv䣑y'1Ɛ2rGȨB= km?Pӆ%D7 cHl3>?/'(r7@=7C P?DGx)=r=k"ЍM\[(b>coAnrCA"v9PP҄"u茰z36?ǞOhy Y#(^!%-x飥PIoJK0ZERtM^Z6B90\yK;VRM9W-@}I89?OR`blss#[O+_@8gՙIZߢW,s(8U89ZIJ0'I@L6|F%q\VHԅS* NZm_I2.[0`HCs>}R,t hO6_i l©&Z]hL-1jV=3FɩsotyCx| ד+-4hk QJL)ϵf̮nYF|<5Gr)[Zg{׿F7֘,?է}~kҗ[t8gj<q$Ko[v/ww0Kf؉&>Y߭@< P+\SU+|5q \KT$X13}X}ƃiL 2UƬo0lR+^wL$ŃnVP1&!717OX7_ OWpBZ w*w;HFPqY/NQ|"ڱk-Õ0bp[Ɨ)Pn :h|48ݥiߍKaoN^/)^ƃJ/iWgӃF`N~j1fsR>)(!7:OI2= 5;PX|.dgۀֲb N!UP(*~^؏ IbBS[l|V㶒$GBBK}.bⲼȳ֣TN3>yMv̻_=w/h !wpiLXsxFsd;U Bl`?х)qNu^WSE &]ߌ`YUPlF7 D}WedЕ{C׷,رULՋ#@;}аmv$省N^ V-xIrԜc<+#-bY]eY .8S$6 )sj`|iJ$w>Ф`7B±%9\rKM&Y:|`9s ԤgL#m,C`3 {Pj[L\O/ߵ3n16*2\҃7(";ud$_fExq%'7G ?z2*}M wP8L ?O9+顩JCs'dE$Qdw0\&|Ѩ-8ZIMz}H=1PR DЄ*f+=|fy:UT-!U$fwUG=maOﰀDBh5$EY-ˍ5h26W]-% rʋZl(xk{8gxQUO"g4WB?'Y#R.L60阚סrem0u&ݯj 슯Yp*`y.i1_Uz(9y[u# [FWe.rѠ{)AƙfW,!xÆNyIwTh uXB]g=!v ْ?D0NhG;7.J?XmRFZ wc-˯gL\ ;QXG?75t'4gH.q2 WsðUzHٝk̔*^gcz O$?KwZjH? W,cXUb2O*[Y } rs2쬕HqDh餹#]cO+D@W Sʨ7bʲLBXJr§&@D x%Q-|ffk2Ş#Ѫ|zn)Dyi9X#$=[%\8>Ls($Ձ֥ }j?qs˗ͽL1pMrm\`2Rޔ4$k@*S '{! ]M'PsM#T8[zX󉔎8ϹcKO"bV Nڇy\+{$Eh^9JVv<󗯝J>9]mmSe@j$q9?<+k6nr? l~;BB$4' + ' ؀"4)eLi+~sp0Cp6v̆i9^#Eܴެp|A^)pmň]HSwDo¶nhIXRn%}`CSH绥oxCK$R~Zݬoyiu?l<7ǜ:`:7mx&?Y-Aڸ} ewF/:EJێ2bglZ !I&ӹ:+K;8 Q1D6Fd1؞J Ʒi=2%uA}T,Ϣ/_GGEW1C?q0Ui&B艹"ЃL!"CChӾ샓ޥwͶ!wF!f:R6qv`JU|Ut !"eG_jOf!lZΪX1+=%uqJc<ڄL֠'Bccו="7NA<3ZMV_@ N}$7iKO V4WD˩Υ&OMh{ٮ1 !5+6PtDLJ_͊ &!3|<6^ CGR{s)@l-62"!35`@wN[vkKnza>^mGte웥B{55!aG7ꮌ^&"C`7ܣӦ* s|}V)V;܍Yw U|Olo6@:t:GK 6V.ws(C[٫x.MTo_BAֻzR؞ }tmK2`5lP)BK`T6 ]>7Vi/ j?a+e~d5tj:`CDNܑgyt`*ݎْxw[x{$Sc̡ٝvc?n f49Hn~a%KKv-ӾGU:,͸b:41%Fx[kt**@Y-RTU5,0/@gH4%#Bw6#!!9%tq1iAėC=S^ 'U=x aQ (Qc1gtN mV4S,|ƢځYWbݚ ~_(H|3ftF'&d5pqї,uxtiQ 'J3}su 4.xBd݀WL,)',KX-Qʓ &j{@IQ$ #4"}-akOOY𘛎)pgد=p>Cj~xfHDUi"Dxqt(g 'UbdQi%!get<>NtWZ96ŝKs ]L\#U9&RpA55(LA7cZ@0w9z~ηV{r d"B#q_LN3B̎`7n +)>m-$BEb!;2qDu[o,wZbr=ԟC. jk8@F`9貯PA Xj6Ñ AFj ٕadJ&cȼ*>6;I4Fo$|Y/wݜv6^{-Ms:!Y,>۵d$ >[)6B#"Uա1VÃX+ rڲa‹uN88;aUk8ߔo?⾬aoO !hPhy [Dp@ -Z摾rqW{xZe~=L"H19468vq {JSb|H2zQ0lUI4fCH&$Z gZܬė;O_g9g RmCy`w ;A&ö/ mΆCJ8M M1V|MԻy ]L@WfNfO=$;iL&ҫR'wG 9l(\r&tzqGiJ /=VFQI65s~a"50~meL+s#u7Fb ƍLI׌HG#,m#ҷja<%F.2o8ki ZdŖc2;Pߠy/'-{M52INc3iŁR>^#BS/Q֤alN!MqlV1. Xmi.Ai2FX+Tmqzg6?kKY84DhX71ͅ@'?'Ms!rQ-7=̈zxGu-J 4K@2 zzY-wP9; b)u.WJͦΔOl8m7b'Sq-J :2?}dp ܝTL#)b^RH qe&y2Y=f['X OA0MiEhFAiеM0dW/pɃZo<=D&e&QX-\8j-|Zު厜e/pf[H[ȩ|(>y%X$,*/}_Cfc¬"_rz׵0yJ"UfAB\^z\+7q_2>k*RVnD/_RڛmyRiEe  s!L43@HVyw)(s4mA(޹LO6l}͈&>8[<=aU5kq'ƔD  n2O'As}o@HB9NTlqsNPZhw翈>]~_SFs%vпRE:|Iǹ;tj^re5?r[VƸ$2 5I>_4!3+cIq;_J~ŌkF›%|v5DiJimVŲ:=݊)3%+a~} ?s<'%]l}Z ;Ap){^C1bk8?K-If&t~}-u= H ^*w(L1O?+ m^6|+f-)X_z#/-ZԬk-R, wbA9]ڷN ~dt |y <9o)mr߆j0}c̅>_ 3] xMn,\iҞpva='\oI˽+ZYbóKHNSŢ7KX.L+\ngNA;;s\U[lI-PlhUnJ1戦AU|UrGL3Ԝ5 FQL6XÍߨC.O٬Sل%Wկǡ O0 ӧNȷPa_M2 !KN5sn Q(2C5sc+sqct*<_#Mio. ,EcEgF1[ng" cERүK F^I|Zze45j=\{q9wˆ;w*"yO"%5IZ`Mk>!c6n;HI5(.?H շe7LsXM,C1Or"K?ӝŭ 'KyC;5b 7S=}HpU9U FBr*)3#dF_ 6iAI*pM+Ĵ+qʴ \lS0Ot*X'^[ӶE\a[_Own>ُu< /(ҙ9KswœFEm,sxY馿kz+ O"zǯֱg8 ы`I`NIxfP@hFG B5V%Ѿ,d;{UZ[PL};+B5x0V땥j5t6;ai%ƃfr?йxRנC [kʘ.sgP\J#R>mdÏmjT2;}\a,cdnμYzxpEpv?F9|VBi >H[j!@kÀr;1~ Jd2ݨ*'œL,|ǫӏ~N'0M`KA4yCnY1)fyPE1E9<%(2J=)ߨ4T`%5N: n[-ߗ)|ž y/N Cry*jOs6 U}&PÎ\]f2ִ- JڝKGdFoZB\Lҥ_$^Xq.+ KϴZ$ъb^Ofc)̐/g gτVv>*QNPqeҼ nDx;p9l rx,kUG6-<4LsyD̴<45æ/ރc@1n,=p8$g'cj0 O+!OP"ȘwXAҰ-ZGwID85Q T2 4:f@T) Z _io, A=˭Gie<ƣFaRl%Oἇ>ӂ^ Je,gl0|щN4d# DƞoBĹq^svJu\vn+}+*.0͠M'o2&FR3O$huH;Y^ t@Ի'ɟ>A;XjXLÌ] w̮tKh0UɳmY}Yf!AB+_ ;U-i2AL| [\x.2EQjKpm iyD ;7ej(>]JhWC5y ZM0tn9MBLk7S4YL$%H“IE}5/׋2o$'_wm/ZãUJ&E "6L10;}v%[~x]D0 y 12WӇsa^pJ37u :d񡐼eG/$CVe$tY gd<`WI y7׌u(B9 Z.ҍS+t*A:ހyOx`yzK3 Ĕ1;H}iV74gdCH/ 0(f'na=q]_θfɲgvAuXkޠ\#qM92V,ZK&:RJz+kNIJ+A%<ƦI? dtG^y{ގeHr3hay#SեD3żזdMG )+FJF0nqᏍSsgiӤA'6d7mp:SkN(*N>sEb 6qB)Q+iCf?wC`vKድB!iT592MLL=7K3+E&Z/ݒ-/5,tjZ4ĭWWf9i>LXAT,*nFryUn/.mzԳbYQݞ0_r~2!]ݟ)B$K?ފ*y%oMDhw"{X]Z%qZЍrDot1TPAC-\3&8Ju܋]=t!^QI~>- #\1Ꮑ;OҹqlLG(- 769@(^dz`տ%OcHtIos)=lЄ#LN Gٛ v!'k&{嵕0+R  E8qn0O=>%36i&"~6v 0xVqxP/ xq)OClk 0!`H}g34?zS. 1>g8f +ZD+܌&lbAd095bnHdcNJau*Y;bO>B a;* ݘ4X%D՜t\^kC$ZܲSµ !XॷeEm5B.ssE$5WVIXNODJJ0/&Kj\J/vS5βwׯJvQ%WGom[ϻ$P5+ Cj~5I4j#Xv8h_:Ԧ~ޕ+&#:m|+I[x6)deO8X.h+5ιBZRn5jA-Az't8ՊWB.oŜz}U6XZ˃m2L_bCE#2Z! |Pв Cr<Օ6 b n?c\\K8& BUty5_;k>")bc@KJ_7&87} @;Q̎-fw !Y30 D 'W9yn-̾O$ڨ(*;չe?Y#)#*;;CbعOOT/LRI'f!8bM`Ez<Ƞ8YR1rA䶟J:G3Йt Vs5m-Tշ^u|%{cr#D:ݍİɢy1-σ "nShJ!%VKR}#YlA_%fq~g!q65KE@G+w(Br"1ʙƘnܝP:?yg6 .{Z+0yC+ f16"bGkL#w #OAQ;Sh-Jy,"SI1%uLld",tS=c IBw.q[SYDb@geɞVt%i(/F (+څEy݅(eMB nAP]=\kU i8Lg}ӗci~tخ.H1_ :ēR?4[Y}6{z5bRmN |ͭA$/K{""-Q{urQ_>v3KB,3y)w V*dRuGܵvkA }h MtKT|oi:9VsZTɮ{`}&:Xb_2Лi&T⧐PF8&}UkDWNenC+J!A(mD\ե#;?`%Qݾkۈl#dm¯5F=^및%\e٧qўۄeH!Lw|\@'d-a-b;w%pbx7?%D@#0q)`;}Ad 5R%o&'A&Ed|0Biis/'_?RlxS_ J&ˠZ* c\ʭAґ҃'N I_qMtKla# aG:8Ore3UOvAbOֵm68b_;vt}u)=5w)KZ/fd#YՁ‡(*٬ޮCJ-<DPvq{ .lZU`NlZ^O~f1xh3*7|-]J[ " 08E!̒[*,h2|ñR :b6icY gGpo"[LiVYtIsD͈͛)G~ aGMVѵ^%$LUtw͙m丗ibpۿdrAC*CW Z|nϔ"#/#5 ax~Bp ,u/Mp& (߯ꅡ0 mb\k[-y5FF $R>ݑֿK "&= QX% VJ+ƺ_yqYPsr#ܔa;(XkiJp>/5!̓ww0=PCym R(oO`&(o.oe e( ϫBN#?ƐV+fzcDc\|[=%p˿3z2%5Ԏ,M_JGĎ@FAf}<~5t M?י~c~KkAkؕ+}b鞍bv qʠ/=p+6vs{vI|ŢN\S`S\RFcmא2JtX\^|k9MO)XZgeXݗ2@bssjZ!:KdH٠@L#C.}pv^y" 8Z @ϧYdOwo| `_>mÌYFcV䭨qIznd\Wc] g%_svDsua[3YmAT^tгVg%6:U୸3Ԯ?B8Ǎ߽L3ã̴N ZjOvL؀na{6A<1;`o} 8''LY.#%ۋHpدt,1i=vDVI"Q LUrc^_Qͣd_L=9&kFd2f(i7 -˵H l&bQNiם;4./BU|6^_[X h1׸ޡmc|k3“t\#l ?K%bze#\37[CЬ''Q-m}C$D2akMh3N {dgO|.^<1NP- n;1U(߶՜+wj]Qg:g†5y 32xhj[hnRh=mÓ)f6flHG%}y*nC8zG_3RgzL=>J=r3q/'$~i= U,lg# NaLn9٣׍/RRȍqjO8`<[8>8&JѦ}P9>RvE*Na~8issh˺]<tXLUw =S2U9fsN+#.rFu9B,)5[<]#ADž-Q9e;'YhHJ?G]EdH.ԩa+ f2;SIuf6OGWj؜h?Q +|\|$;_T|!ľwq%dh(p!;}MMDLksy?VRɢbFXE]z4獣r+ |5M6"Qtx \A?#u95Ic0d8 Bdd{( AN ^ۡ:n{Qr8(:WzZi 6pB9tw`R 1s!sp+`!#9O׮3'js0)gDLiAj|?ިI~Urª5zkQ;Cؒ&{̀*7C_x lۏ m4|( 1o75P 3%۲Fq9s͋d\6)O׵Jֈ %;BşH~XJ֡F42G1%#,'c䙣}"2sgV/k5,HSxh#oةgAS~l ..)/O~]%(%=րXg f3H1 1:d/0b+p wF<>mW[.5y^]N#<!*LcLjY~8{3M`!0cXhAζsR('h@s[%aj B`.>DMR4(Cs3O[UbkHʐh/]RuiT1[6:|+d\ЩLA7Ta/w/Mטxf/(>Éߔ+?_pK)HDզX%)BL# 2 ;&d-Y,{oÈ_db(h;g٩͒4a62LیAz=V|ir0@$XLv<Uyɤ:ڰ&*ERն,͵!̴Ӊ%|'a8qYj1|(g¬13z ܉ 葂i 23ĝזǺ~ t\]VEU#qyaOM>j(6/3Sm:LFEaHYfTe5gtAɑhK `>T}nNq-Pb_0nPDZ՗ӗl`n1o(Ylo_#qkv`pP؎y~HK4#s"N7? endstream endobj 3841 0 obj << /Length1 2723 /Length2 19451 /Length3 0 /Length 20998 /Filter /FlateDecode >> stream xڌP :.w'\w 'Xpg'{aWzߡ"SQgp4I9:12@ !RQiظف+G8:a!2u$L9w;+;5ttHzXr WD*qG'o+k70h܌DA.6ES7k=hnrnnN|,,̦̎.VBtO7kU2@OïT k(-̧4~#p횿]7kF`v̮/F`?8SW0ٸ63&f涮vJYy@n9g -yp "NpFv7q$Kk8Y,nY8ٙa;(?\Kop~3# !-,m<OZog0Op9n5 N|@p~n_;[/cTX0_),tË\o5 ,w`G +߁9B ? 6w?ܡ#,n.?\˟=\z38? m>w" d4h.FГiw\pjW;wɥ>:+xF4y}uGZd>5Q8Amj qqg`XICdO+K*ٝU%gW}h^5k[+X9=ׂw=T6"8o1!"G4X &# 4W'ko[X$'EPqY}2RNa'(1v;(7K|۠gh.y3WPW.M`g{AwlspXȱOwf9Yz>@+]=N=(z,:r{ U&-A,QSeH^Ln׳MwJU͕8Ķ&|kғzWtJ_ ;%t+S{0ns-@^tv!Wkagm˧Ls<v# TDj[52Bqjg^+џ[ Ŏ)W|+զcx.Cgr4KXxg1IPW=V,P?:R0Z;ц@XNw#uh')g;& |t?,Lbe.EHEwdZ0Bl93uNlH<}VHԮHl+u }Eh CQқJ,=2UcH0tnD /$@\jP%qh}n_b9]пZ_y7ӈ%;?4JL"[E{ai:ԣ ZH_T/-7>o:Ʒ[-:[ë!'OBMz.5m.=ze9U[ B&Νc,[^)qa~Y :b^fO̞a鎌b o!ʩ PMRDwyP~:<1?|?+|9MVCd8kL~@ |ҫ*ri;27F4TJIJoJmTG^$ s"&@QҵM/ ]B3}!qd!xӬyܨC"+;KRGrNH˰N1=ݟJ.5x'};…qH_FuBa(#p͆xv,2Ih!4reNyB(6>B#U9\Eb2!Pܒ(FtSLIO1a BQx 5(6)eMJ"n+0 IQ?ZAE-nfkYP/UepW=pl['nl)Q2'vUd]Cxĉ5, 7b1xтt* ͘D>(91fL,gb|iouEz"{}̀Ua` Μ-rڋTg+Lo{ %eǍ&0UmU.OFh "0aM q !Mh߉r(ǵ{AYBt?W &K> f~rƛ V#u +]]0>>8]HwjRU^̲e-0!lg1LBR89w] Ἧ2:b\54fn蒹Xr7^&*<HVt2乧nntTpA ZAIF|({ppT1ږQ)0~98b&('„chC5ȷ;a-P.āǀ U!(GqP( SՄvr)M봿I[v~W}23ﰉګ>v$!ica {OdSwCpiKesTmER=e=xmܤkVj4]]ZʯM2 ]Ln֞g8 9V᷊ o3͊GU{P:[,͛&gr\:bR8u'w/ -E" 9d\7WX.[Gm~Oz΋?EKL2VhϜ`7fpB$%}ۘ ]mP\CC@rlX8cnb&` bWḣpGv,E#9Zr$%@ d;Z2 >"m Grc֦MQF =hP!J1s@+ajwHxp ֑ {\ʇfzs-Ns9q &ηPQQJR?jPwaiއM( Es[(7np_ZKABO(0 G}WI6m3zn Yj+e졧*2\p~0V@Nx{_z}{q@irU$Ow؉s:4% FEhg?pJw#xЍMǍI,R5}Ilj=\Wp@[¥YlX{(Md?R *ǢpBוd윹M;SS%WրM,G<6tW2a7wKo@#[UE&:|Q8oHiEY^H2U2 tiXH,KIĪ:jaIX14 @$dNGfKVV+fU'F4(໊FwkQw%\8A=]d쐁ot5`jq44L##s',3grf_uܒXDQ}7JvCjrK|TUGJSv-I~.ƙ}7Qn_ Gc/4&r^j;FA &m[x󻲋t:3u _D1OOorQL&ۻ}v%}Oq)U`Jڨ>K(P~{}gSA7Lb$9Kز$u9cǃ},m0u@TyD@2;YZkD^%7 |Oam6{c?=`RO|X MB!ȥ 8R۴Vr-jSsl^1ymъWQUIir Bqu=(iaGY#2"VNuE Y&$S ,L9St80ZDǍmb %ثRjf*MVz}kX?JrC-sáp7~J >-6E2VXBImNY41Tb1q+F>dc.ypAe/ڀ04uڙӹF nfjszkRo"g,VIb]<|qr;a}_mL"EyTS_3GL=)PfB9+KO=s~ j4h{Z}+6Vѱz'‰$qT(x)FR3Hy ~&n);+}hZ?Ѥv|{yvVJni,G0L$}749J[Xk5X| ʣy)Æ}Y;*o'}`7V)S慼)Շ:<'P>VqbP0dej@ t"{vgåMBzLKW6)KIs>ka?56vv9_&DTPhE2R'3-dVO{لtSݶVΨkM֊ZbG\s*]2Fvf%tM^zemZE5X`ѠY]|)F9u_ GMÒ^Wx 2"7|Wr}(IW{mzQm. sQ\/)Ð[#ݵ㧽y3UudG:ܚ+#ÞeH">nLT"t˭'p,'w*˂.cӽ?6/|sae#2F ĝRx;$8nD ._yp:l Ѽ:Dn~ -PTQ} y61S&Ba=)%KFh $[:_jIޔgcf3%3|pbhϷZ 1LXafGpEve׏$]3NbWgn$a"0-hZ['.qmKc ݢʕy@G| M^mq^msrJH[/|k>6vO?"|yz|Mv';t MvdTUJU%*8fˑ8Zsm~o//8[I֡#4 O9^_vup nݪr'<(Yh(~9Uꉒtu_`'m"ĐHs\i7blSW` 'Z_o-JDDDJz{P3 |pe>r'YQ\8T1e Q0ϊ -,mc8{f\K%x+dH`~-&@4감Gư{_d4*v]kU\hkX, ֽWܫKX c(LVv[ 3y ޽,|Ǩ$OtӓvcwG8Ka]ꎂ(fta_Ev'N5;$L=K| HLVBu)o$8saќA16W:O kT Z߱-V3>?j a@\'-X(ZRiӚ2,1 k\`}娠ˮ6g<ݧK:[:WԹ.͕Z:o=cw1W1ʛӃBQ[MaK(jz,Wf\K )2|ÃuJoԯ20!3^4Q1ٹ®x;JIt-96^+Ҋ}1ٺ{N(@?\TXn(4[ܶ>wTCZIXc ȼ WKt|fKwxF(MeͤtV?ÅA2KE[Θ芛F7GM)D2*@^OTXs\xm,3kP3.0ʎMë]HMʺ.ۊP%h*svc"7SH/ܖ7ŕW*Ït|"ϾYH̸|ﺝ%Z枞̉l\ө/3.n+iz)p.~e` A\Ygticv鵅,Z=u(XGM^j ثM>r߯~q =Wtj`p3_(î/8g%VBa-1: F6QS5?i]J8z7:.9TtT^WQ%#~d_;ym$2ԈV0hO~>2KA.;R wH6<׀u?B:Wl9Q?A觳 =E #10Q}s+W GP;)۴r4WNa&wPyERэN M- Bed(68p(e=9/r0 4Tنa ] EG 6ޒ}=2z 2Ăl¾iwjy|ᎈK>:ozM:dz~{&줂\|x)0}J%DSU,77j7Ǟq}ؒ<_R^mYLf0;&;f;D 5-6]Vf$, whh=OGn3~ =~F BMkT2hC7mz-ђ[lOmZ ;xKɳ_+;ChHƊ&oW儰Lx0qϵI$|7[ĉvx&:(SR6|Vsu虭}xr2P}`RfGH#'V/c?ع4lfJ{OD#5̚UA8nC`Ygo>N,]aL٫ة?,'6`6c5ZEZn] yKk>yO"R!=*PdBC&|"0.pKrB Y2ɘ_,?{}ҫZGxjef7Oo@w G|r??șNH*d,Jnl0դ~KNME[4nIuJYTg?k| )5Lmݫv/HO!eL' b`!p@L7&^HaLִz}|.+J;p)IՙYz0g|8$k2 xۊcs6BњoܰN.jÝ9ƽ'G~:Zj=E9@=DOB|Bj?Ax"hśGsv`w,{ 3ąwy:D YC}袟>^liHԃf,Tsթnw6U"pj"2PQ3̲e܉\|썴ѧdZl@<_ + qnwI %.xA^_<3r^zA1}[ ~NqqĻ?^n2Vs`\ʵ_q/f#d1'cdD:3{Iey9#24U A<+.#Uy!lc(tVwGd趬*FD$, |d-۵" LԱTe)E`|BK/jhZN!s{wWτEMϑ'|RHC?0.TDkWyzp4Ay`V)J'41$'_Avx-9UF|-?513.w^Ͱ |b} H0kO1+Z2= GI"/G ,րS$lV'(v$ ]`M>:N\=:h)XYGy9x6KE{RmBdњE5oPs (/>3v/ a|"5dX9šQ;CVjtK3zshjNSC Qi #}@zekKg6E6 ._^ "~Im2u'&V=<- ZwhâE@d;s;R.|`~H<'nRDŽhav ZbL/~H'yrߕ_T зEZN(M ̿E IQrk7?Qf/]%x2?|jr' â.7JkgA05 գqby]j :|+>u]Ꞿ0+JJ YdHJ6U}^=ό)TAǫLSN<p}n=_~}-bbjO^(-Kօ77TB?qR1L9slat(EAƈkAO[C(9Ksyʁ[#iN.*!пuz*Q,S8-PT :FH^yۦ-3:\Fl>^a 'PMқ$x3EĐ:idz;V҉;s&\Ϡ$]HQN#{+3) *4CѨ^hHf v}M/?Z~5b5q  %|cr2E=>&߸ mK$ ԅҠH' Ko9 a-%/3 '5[vCY34 ZHs0wۧ(ks%&++!d^ T쇑H:,d Qbg\GMm <{ 45MM c"lb=$B4 !ٺO(<Ǖ<UA _b]=GkZq<ԏ7k p&^f#\*CN ]Hmć32u&-,;bA3)ȗEq dEy/my76esXlHv1ya2pW )4LB]Pk(]wxa?(I([zG$6K2굫EYِuBP.3j~1 uHezz.j (Zv[gatަ 7}IQe_SBk"VhN-XgH#!NLU.忱FܺO. n Gx{(Xz桗x17>W ͓Ƌf 7xC7֥k|LhsHm J) mgea)*>I!;Pnkg4qo5 -+aknSnܔOt#h _N?T&+n,6͞3"s#-AWxG5f"c_X <3 @:)(p&8%Y.pK}Yѭo GհbDm,L&Ʒ؛%JHޜ8\ח UC X#G# sT8+[A?M@wOG}2r֥#Uؖ "WvO9vS 媚,$֫׮3;Gswt:c%ZA7>%㴔w)< 0w0nviqyƼGxOXtWQo¥yy|w g~ `:p`AcZ'aYו=wIVt2`mˠ6#Iv+ⷷQRLic.JȺP+c7f`#CRƥƜB`% yGrW)BCI<z`,'=l -xE!NEK"̏7/ N[gj!sm9LKDV_6tZI ^ 'UycM8&j^5fhDր+rdH @Ye\2Ÿ=:;]Mzu;.<L|M`sJDC`o*>@7JUrkn\sהt&:GuvJ1ȳg$3봪T3T1DF< E99aA@C)-I=Uʦ=ҼUfKT)yE% IAYku5}8^)f}ʷL׎Bܜ0/Pz*{4]8&% YǚL;#Z%`MɉDqW eyW/Rx1NHxJ Pt)9 5U5DGUYd!̫m\b2~Vz1G?Kf@&VcCV>XMۧ2X5$; fya-MGyi6m"Qm0b+v9=eѾֶ֡1ƒ| Ż\XF225{mM718[^ƭ+ 07mi/퇘CVgmfi`..X[C!Z(T>byJzcNjH@2#" wˀzF}@t1"m[|۳}4^ۡ 'u (B;dh|v7qYU#C8p&he7qMOܐQe/"eCXE{h*mj>Q~?Wlڕ$nͦ/(R3x\ Fp?h{6=-&9:Me}./mBY M ?{L(}G |"L/ o~$bBskRB)zEw#Nc&Quyr' ux{6h=6go  bh"ԄCDjmE!cf`Uc{[;7UCC) |:fKK=!+oݷS}͂ozHV;C]>2m,4|PN5ʬ8l|apcj [̗1G]Ԑ݉ne|=l9dC؎jwcO_=E w)͗{|Mv-v,2b>~3rCe[͵?SU=U6᷺ H-X'smfBp _Ic؏]2 Nn@wk%s`KesmQ0'[){[eμø98(Mju7 Gīl=6d ړy8:\F#qONb^h}F1S~ Lc^=xX 7eۓM(X.Bb* _-b #=ՑE$V]8"wz;fk: F,NtX2~f(K"`I] f֑P GmXvd+\y sG/)cEUQ;FX=2f3eg~V"| U0le9vG!- t55 q`uE[f&be'^DgQO;!OS6)Rh'PHғF(q`>.oud  {O?VÍEkj} ݢ'Mv~0@lR3M꟠ UR^7sSkDh螔d1 삄c6a*H8tX}zZ{ӈNaafC,!w{asQOrBh䗙DY3ժһb_rR=DKst4+;+ loC'18Ŗ:fƭ;SXP8, r=tpV75G^Xl,ѽ/K ;$yF)c 5R(H7[˱!=v JIa°ahO|}( ɹ֟g# ʁ5-;yݭCYgqy\!Ruih/U=@Ѧsɀ6vĢ@xK3<%I;V/^JD!y'L[{ h dمMdf2FP1;6@* Ȟ_\YE K^ľ$ނ@: ̕ c@CU7J77 \X_Wy\-#wgGmF8COYHG޿+bk]%tɸi,P#Bhq(fOO-$E@큔xE,)n"Hd bj ,{WG7~ѷ@Q"K ֳ(:Cn7,?`5df 3S7r"B dUxϢZ9w "pxbH0߹enV=6`ߵymv[IdjԺ~ nހ?F5XZk3/F1ɶZǀ@gA!ĠƆ-օUЛ Oq[wN%6k`J;G9w y؎7|Gy“Heز As .`\C$(vLb'C#',ߟ$OUƜҒ%5WqNQR\1鱇](ê2t: OEp0B+hLIe^֒g}I҅!@;oGİ MhXPdm~~K;IS:AQDhEdc47ckя"ʲҰ7ҁFE:jSj-A67Rl@D1oA%XR:Ϛ5M8''5q=g~Әɀ$J> stream xڍP-$xp e!Cp'&Xp $hd}69罪{*պ&,f` vwefcaH(ihXY9XXYّ5ȑ@.`{?,$A&+P f `qYYc4qX $j G/g+$>l||#Pq]A+=#Hvgɮ/d U$3dWF g \3pAyF?ggbspۚsCFbA\cB>#!e:lAa[lr/{>ٿ 2[bg܉ߓ4r@7w5q+)oxvTokv#o۟9 &!zOoП&ϝt dDBZ!`417 Yi1xNeImfg>tx& t|VCr8B9QsBs̋qBhG"3IH\Aϕs#ll?)90or\ss_.A?'9NGes6cF.L<<)y~q7{(#/S׸9qquA1wB7T7MAR> CQNm F'(yJ 'Ig t#j5ld35tU ?^T`Evdxp&,}t2Zn38E\{)εc0z>Z՟IWeE-\.g&K(| )Xxgo'RW3Ji#|Yמ,,O;R?˺ZiPpkqᝈ=LK]@?ORQI?˃KuHQ .DJMǵ4.󪬒u350fk8^sbhnuLgaI4?*di7|D]0YixAir]Our=451bj"< ^19@d,sǡYb0eIVně|L@)GW 6!Vɳ0[w5M^D(qEWN~r< ~f~M,whddA(g♑T&׻_qNCQg QX.A_ǮtMd7s5.Q>VgY (LfF u^ %'֤u瀅yߎ%H^ ~*V H4LK|k?ܞ*Q^O@N-Ԇ+/K+GTP: @}Ȩ6a\STRYɉ~{vey,SWyr}x|FH+>叇8@ldsFҲ0lHTB{xKYAVո5=*h=֥~xa፼r}asحǙ/8G/;S)>,WYXiζ$Ih5RHMG9ho…FZ㷣ڣ% Q5".#WtHod(twTf^e /3,kh zp9֪gd7!έ KuٶeFbЊKnڢszn@t/ 7HkYU‹2n(y!m`8ɓ: $Lt=#S+<+>5,T e!;=*2L4&t]h.D:^#ہܘC˒ө-4ϬKzP= =;/Vj-GDrgq`2B|NjK8jg|Ҹ W!g]6j<~g4 G :Tۮz+cO[Tpz?@3M~6A}qCM\Yn)j 9º*$]/UaʷĖ`Ch|(EP\&&U#%cm켞d"rTeX,[8:iIr'w cf! _mQrq}|/Ԕj/0D%f'%@|>_Hu; LTiFqõ[O lyzU@-Ұ^vmm9/z%},ػ< 1} i\9hc@Lfa^3Qbxf!I vl{qc Ǻ>B@A2M3c Ԧ3&ΆqLS$5ͥPKvpxAP5Tg]Su`2r锾5~N~_o*x̄@Mpg[9Fߑ8y-KTr {)f3LzQPYšc+DK)+u!:;/DdfQK6u)nf3/j4?)*CaRb/7r{q]aW4L-úQѫٕl΁2:䫃zjQ"H՞v1Sgg׭,rܲ7/8ZCؑ`80׶: z K g1Ծ噚7R-av@ŇK^hI1]'B&{ߒ 9F.H|U^5iV%L,uNC-5ZpӸڇ (B2Y$rUqz#-!_9 PScI]l"H$/GZHxmqSYiK{?p$0~ }ǰBa X%H?>3-ؐ`~,jō#ˡq4sF+|$ޙ 9q Lzk}-nXP/$"yo}r4ꎮJ3}]l=˞='6t`zt+x`߇tq--qPE ^➶E]q~%ɮBLGܱY޷muw%LGEݭ{^\8 B+Sa<𹀘V%V9XRUP@F 'YG9g/I`2`a8mN6FLh@61?_Mwq1.+1݉NȜ APD6uCO/ۄLƝj섙-e hX1@D_f7K"LGUr1ñW"f:-61`{:0)bOJŅCf{Ͱ]']F{ӳv*jqI^GrHrTpviZo7>u4$7iNu ^2^u7mJ!7HXM;+lqþH\A J\#А^CL>P Bfyap%DƐe#8E=?nq\i-HwPJ-Ҳ īՃ8\i49i4Mvv9iC@)a1<7{W0T c.# ^q<95Nk2|;}AH2db/tG>* JVfCm7M=R,(v ,X[൅aR;cX\qi8C)'|)-UoV#oy&;Y%ޙ^P*ub SO,7Vt,̰3r~dC Պ_7*hFʃ♄MrerzDP _m ݥ(~EǠQ;^Iz;",R\ ,l袅KE30Q46 ϛ6tc2N)3!]xwkLѲ/ ̀HX >,LL)MF0R5Y1Q麠O|W5թ(oګVrc'ݰS\0#+>}-y]E4j\-AzO>~ˤ8˪[v>;鄻ܑ9kv`y|!AE">O3foS+8vhIdx>#+s 8Y\Xʢl֙aaodg:L?lJ/ii^at|f+xٖ&r78ko!l$N6W75^OQM'Y kRQdD%◇c_>P)FZRډ-HTԯH,{$307ѩ-JpdQ9S޹B&?CgѤ.r +;YI`cTibju*]*}myޭf~h87 Lv^Ha:UwSbTcHȓN@yS:|' Z23"Df5Y#|.dŽMCTq/?4MT?)n>yq~:WIniaY;;nI&`Re."~y3q^e`'U )с bVG|GOKM*`t '^k<},5~=M>}lĽڂP`P*ɛOQrO]qPoRCVU$,d)&Zrme\E'f8x[jF#sJ[ل_LB IKW]2e%x;g]2~*yL˭eRD݈R яeŚf/MW<54Ҽ!cr&JraIa. 䩬0;aGe9ⶒ:v/dDs'f0{<1*s$%7S}℡^55]RBN0FB2 iMv[fM̪㒢z3r/zXsY 0c;hXe2aM'K~Ǎ7fF_vQ~?El"UF,%*gp[Yj-;Ϝbpi8k01OLވ)Ǩ!>b29M‚=|sǑjAMIy?N~&u1ULŲi"Yo}'M\ iC1#~⛬.cXp0٭խG`#1$dTuܛZaL0, >X$06*oɢ|7n>.܌O3mw:NW%SI SnZQyqQ7b%/! Ib rSAXgo9AEy}ͳCU&s)r֜s$T$*<hz]bs#9.hP/\b/ [J j,U'j2h'j@vhL SYHr<kJƯCMn/ٍa"{l,R{/ VWU Us+R"6Moj3j+""g»5+;J7:Ez{vfLAߪ, ;*(q1Ьd67{:FL/{otwU't{|WNhaop(URiMqsVVفW*Qj$m^G[z]Y6vYx ́}>cqp7q~~T ;)ЯnO0k/\4*nSІGd~Z6=eP߷:njjn`)>(pwba ha6hcgGW04oĶ%;I."4:"HW\U;ՔOl{Okƻ 9**o~qy;GKBݒΈ"6gސkgL]V0Tgopg(Hņ JFQ޻ܺ/ZֆZ$_H-ck~B`%GhyMddcm-H` UeKka4K❪&NUD^xM P]A>)//omPu#aSoHFOi/(AC&ԤSU*+ ?wUj3׮nUyj+:΍fC* Mg J59859B}S0F eL?{ʪjh2oq |S& %Wd2KP/t1J5~;z4% ~ƚGDɲ>: "&܅^z'r[,X{NާL>BH@ }]Чߑ=sIUP,RrT3P7cV*!36qڸEBQ(/ 70N)e:WN%2Ց_0i5 LmWW7OEQwpь)4?65 ?Fc`R)h 7j5!A'c)#tfn~>kXD嘸dHDO[*d|OWcg|]s+|1^Jbc 8V cTv`Ai&"Q MY#ٓj#_ 7]_zu3Qa[q)Yj)0 u[#No@j؆ܕ<5ʨs񶂝3Jsq*lދ =H4ۗQ$.rEkKL8Ea`*pC@ڏSO$S+YSCl쪓x[.fjK&2]MqJ]ߤQü{FX Z@q"fg DPVe͔#ѶEPA^o Z9iߔ)I OWPyLS06A^cՋy Ri;Y`6S>rR0F_ΔU 9}x!:“sZ<́^joiJ«?e`F4!oΎl]Ert WaMCgTzm=wb+Dq:lhNKnpPWBih+B1Y4Kyw@o{M/OZIv#xL,BFP5-C(SՆGs&m& ɀ>+}ֻVpMyM7x辟ɮᒫ4fʣ.Rϐ!j8bA{ϰX '/a@ˠ?t;3 k{}z}/;KU=G`Gm8JJɯ&΅}+ƇXE\.6]'u{OT/ҋ$S#9U(ڢHsuII?V3yx(Ɩ*SLHi/8[1?*Ǐwskkڨ׆ gr.8-;ةaKi[%ƯcU??Q#KnتwIa!}"]oZ?njˋe>JRTaD1畸bXTtTk]|cku~7~{%hדG^CxdJKX2wjs_]C4γXn^?+! C [ͪ[ :G-r߆y8Kq:\H<QvT=&4 %46fc-uWRFLmUυ@9g()܌HdZ hfZX:%1h|#B]>"WPcU-!fS;J`y3ˋ)GsZRTq|*ZqnTBrF 7٭/ V#qn2s:T|mIc+m1BCHgא ϥxK cjѶߺ!l+QSL&j#WRU=J v뱀W(6D}OƌHw2dDyX),JG2Txl8ݧRca?+:i~jI\CtR8TJ苜v~*i:IēxҲ+t~Ns'Eb`w4E1_Q7+ˀO d,]MP6ϹyN%?Y-Sw6HKQk-eUZrLk[JmSԻR5ߞXl<BqT L(&FJTIyRq"Ɏ]Q"9@^CؚG57{u]ᯐcQo.[J] mDKnQaX}3ߏFQT!%sFhbDRWOF[\wHSl MO*9Cxzߨ5mjc/Z.Yz &g,6c.S#Z0'~&Of~r:mhss,.+$yW;> _zAg֕%G0U\F"h_/m<{*b$}hv&ARNow6 /VL8CCͥdӎbWm?v(zk^HulfƱAiMPDқ.Ŷ{hd#Ņ7jbRMɺC`9}m)?$Rg8K`Hy$"+ \gWZ;Jٮr5uwbQT_91k)FpNTygkW0D|7 or-AFU`㇎L2OK4H 4 |S~)P!t$TO45`} ~ՖauQc0>G$[Fr| ltVQBd v*c4{ӶeznwѸW(o' GHBgŷnM:- l^}Mpe㫓YgsL8 ܭA= 񿭊瀌,9r_ Yy~a<﬏wM> k GFx:wQi5`ĘH@4wS! ,uce7J/QCw 7y ~G*sbTw̡vܱhِ&lMRnfZňfT K?esq*3M`Yēs)سrc3 6V?7]7mC;@@~&'ߔڢcHё(NގǙ8v(Ɗ1f7Tw̨^6Mfw(vz =8yz 5j_A"'44$zq-;'c?_bmE!}7:]˒S?rATSB]|LBrB?.-TD T6&N{&}HX<5!))2Ok7..©: @Ҳ)8zmqZ 0lH˳}nNU |+n9gRk2b뢺 Ks@£ RPסX_{ yHHyCa~'+V0ɵ_]~H?䫑-}e >J#PNDES3?+^e%^}j ~Hk&douBeT8DLB| ru(BlP R9IZ h`CSխqʡ5<ʱ uhiIy0.m-:n>\|ð\I7ٝnm8RQ4n~މS }!ϮJV v p/1Lm%hKn5ٗ5 _XxWl>B4Ҏ3!o`MN&Haҗz4K%A}#ƝA -onEޣQ}n>UsF#9 4)rbM6"Hus|eHՖS7Ђ:EK' ,U`h__!,6Q1&PbIl鲲v*,y)}#zƳԕ}8UdSZHY[٪LZ3Az=zF*ae-6ͣ1b\9t|Kٵ4s\jص < endstream endobj 3845 0 obj << /Length1 1445 /Length2 2213 /Length3 0 /Length 3148 /Filter /FlateDecode >> stream xڍTXV@(*bcZp! %aEJAD@  3 ,,(X\Aq]`AP]VS[PV}f??sg c. [`(A#Sf*ULj.$-P`(oS!  CuдMAaP@J  #\"k E$eS?Dqb~ Gt'Á,D8 X·98cCKqDDdLc`,\00$e#)3à ! Dg+[`Sd):@#ӾHCh"-r'@B7AƎ"nO",B-R&lrM1??E!!=2u(NryMp).([MSJjQ`2O:ifP&pRw|H4"x>J0ü)L TB{4@xyb }|)&:31Ahhji&:'q""Pj%6zǯ2=\vY|N/-ɐ,K,"P tL !i!@? #'YE!b QmDDH0u@pRSf (쀉;hШ &QƝ/M6B(D%dIP1\8xRBF1Dwဇ IM HGP"]-@q6 "|E4*I]@I1'/9FÌYY:o2H&;v/w;Fꏾʐ4WwIFh|)ݪH,a(y=ZX6P˦|Q|{٩:QRw ,7\+ӥ7R%tuKE_Z/0z{GWɕ5wUk9 GN*J#xjFeb"^JlJfژU-{r$6%S"krYՎ#abM9es\U\]?kYa&7?_ٚe[j5@*)U8eFmJ{$9쎸 p@pdx >}=NmDvǖS$|Oۖ@5QHK.)M_U)Xrc/}ّݣ&В uL͚+x;oxL:ଛsy3F5#e=t)kW}uNQ4zk׈ի~oL Q%[UGl>IZ-΋ϥMWiffť,gfeu( Mndy_^Ӵ}lcD[C&z 703 F 瞭k>Եp£Z5NyOnCæ -ҲaϩjG;Y'"ݲOٿj—,ryacl3nd+W-^efޕ%W~%&dIoSXjZϱ]d#XqfV?vL>~{)oWdNսޙa|TܷJi=6WsSp]Ԡ7:VxKc0~aꨤ>35%вn4/tOv:gw/ n!EF˛VX#{mJ\^k?a仜^F+ˌŽCVwKəNQ 'e9ˏ(nclc8%¾?XFϗX-ݍ wuȨZ?)Z2۫xy&ܮjna a:*k-0ft´K2jO>CVEV~λe>]{c]3f8JJ7?*)g:KyekI8Ve}|WE {w !7t)Jbwotsc<թ<[ZAJӾxQO0-isIANUwGfK]*R!Zq+Ec7,o>ku`ڜOWw3Ȉr綝ݎ/c/C]x kh⹾ӎ9IU~ _4dmQнyS:1/ ڿܲCZ' )4*?~[xk}ɇ[IC9g߱˥R+wA 5鼛7N]L+J7pb|<߻67 endstream endobj 3847 0 obj << /Length1 1306 /Length2 1345 /Length3 0 /Length 2180 /Filter /FlateDecode >> stream xڍS 8Tޱ]EOQ-O2AR*Yk̬1&Q;]RNH؅JEI]ӖP.]8g h9Y]O1l ōidpqQ St' OvX"E0+pfJ gfjA[eA:j I,8c(,%bb p |8DB(pp,"^BBqWL a`%q"ɐHJ$ֆF@$e`-$'K#N8<0>.$0 B R"Cy'WN ` liMt qH  |DulW2)P|(B?OlzN'J1.%KF2 f{gD0KI %L7hاAy|e<"2nCH_l0T܌`r 1<)D abL Dp8‡?R .a_;H4!\J0;1  6S U|B(B)[re)o3b˄qo~H{| ' !2ѷ^'"v?P\L0\{kBgH"$*:10O<8t\BF1 |LBR)4$b;'G>0 sIM1eL`~LK,qG D/a@QVCSOY7;9Vq5hi JۍvZ=F*w\ɏ+ܕi0o(/Ź.ީ-/!k$%i14TbJY饹6y2eҾ55o_ݹOgxvhҖݭ)vH>Tů4,g5Pi/Xgn5 7D7Պ:3ya AM5o|I_Ԑ'{wζbAOliEiGs 2_fj4rgz9Gf[Wk3}/J9h~?Uk|4R[ٜNTش@__vdݼcp"=Oy\ظ+t38cZs2.-ӱ('5u]팴^Hb+M:wUz.& [G6Z̸9!k&lĕԭR?:I=tm/#Xa RG"2dtOW'=nU$ǃ/:^-2YeINVyé<-GDUn+˝qcxitz8gdYBR%GMܸ}ŗʧns7xfkP*3SLP~PoT$\1 w7Wu}}flYSW-*Nyi/ }xzGxVQ³:3 yFœ9.^o2js> stream x[[Sȶ~W~ڵb I35b˙dy2fץM0%4DjL4H1͑ h¬1δM*HR~PV`)*% >cF L_RLa)H',]tH10& cV!B${i@ d >țN"aN CJ&!ub -qLqci) M5Jdg@.LC0nF)P)3)8CR $ȟ*e W,lep 3D $̀FQ7*'TH+>p((KC4.pIh\XA:JR;~¹hn.l;40+p`qG9ʨJ@\ 6D^h{wtAhځ:Ԑ3: J$0YdSr*Ձp J .fhȐ4h ̉I+MYl @+P\ )@3ȕB!rg SՖsQvuVPfj("Iy= %Ŵ³XIF#ôB]h RZg!,O١K<-ӯS3xh) ~D;qgZIgR C8הpw˙a(P<:?Z>hKabtj#JCVD%Zhnr\V(\gksWOWz<]~q,!of8[/y1[|9=rG烯Íq:Z& f?_Yxl%F?}6-гt.GOpiA"q2,`kxHJ\)] " 9&' yKޑS򁜑srA>K\!&rCRޯܑ{r?Ϧ9d\dӇtDotL#I{FalZy"O?OٔȟdL&dJ4#329l: O-"=o*[9ljVdwrf+O.Ȓ,XiekFV; ?ɿɿ> E ">] >eyC_dUů(t*9I`Kaj0x~l :b20EVSb0Zv3LKc@4xrtqv},|0H%}lx"h JtxH}*ņb#fEu\ΧE6Z|9?E؜A>mŨrDx5"!Ox'E`-` d=o=l(QϠ.{fl{!NW(c5s˵!}lbqZT .J}Wgl/l8+Mt~I^6T *Qutq2.bU)jR|ϝdޯtt;|;Q֊N[8ꖤܾ=Ĕ,qK39kWlx n־m^sOJaN<4}Jl{v^3Fܫ|<vE C2l%j[k|N 0wNj7immI^O/NK5 :-f]9,[SLTUlIv_uT^A`x^AaglhR1WL^lޕ|ZΏ>d[؋jвZQdT/ZHgq#kNb1;8Y?3YwFV@J/ls8`q6buϧ4/~ee1#| o|Lӻ1MPb*A`9BO $Obx݇R!1s|#;kM։jԫm{YRW胴)/_!3$u'OѕOic^E>ɢ>Lr7ϱAw5kEZqR[myTyo}uԣd*=^-ר/+Po*\/j^әfNGeCeմ^u?[d[mD*/ONt*AjQ>1D&b]򟴟W~ OXvsl#o0+:9zcB%9~ +1MFLs5S6L]5ΰ(/q2HiӣƷ^ Ie ,6t?ODDhmA6Lu LW`d-5ځn@LU;R [`%F;XAUn e]Qo[W[^W-[Ok pZſP5Z ߵy;x#ҿzy~m@}2TYM|KWW*|nj;8zSNˉ.ϧNpjs;v V~mD-|{ۏ^l!4S-I?j5%}wp@6Hk-zzKѨ[hy`!NQ[+!6˪Z&hnL7|%Np CL~HZ^Tބ{BHݠ +߳_}HvU\XXF0xo#ߗ)ilv*n(C[7QF>MiȊwE!F"BUqa-#&8P;D` _- %22bʈ∊s*ӑG):1&Tԃg?48 t k D AB9Y:aL$Pp@X g3  cb>/L83z y2j(yƁpQ\e" mD3[.Jw ܉HGxס!ǹ TC2,D4ma.bFJdAFqIh(2PƭKSs\<A[PJ䚈 GʸxW(!':TGftAiĥ#W1Z[1i2]\uTDP&Jib7RDdt!Dan"e+TɸfaC Fcu!'ne]V G| DKP,(D@`PpPT񖏈@}ȂC"(, 0ƒW|/]q ٲ)=.-iRqtCrDdH3 U%B YEO*y!"{"Z\hJXȐH J>$>P!ƅ]T<&}R -FaTPJYTnCw+bWA(RݯEt JAhM_15$ endstream endobj 3857 0 obj << /Type /ObjStm /N 100 /First 955 /Length 1981 /Filter /FlateDecode >> stream xڥX%ߧS3`xg0 '̌ntYGuT9r)6R6E%{?ڤEʖ`_ 5BWhʶ,$P1A- ~`K0`4KDb sy)a>oX4x#` 'JN3 2P i#ޓԺH) $i QN#QQcX=fDRBd bH9B+M,%38X20VҏU#fS+d \mV.bQbjM(:\X Y+!E6%XmK@$yh咋墕Kɠ1bZf@@+a[I`rZZL)q QcB[HQLQ.@FD}*hDO4fh#'uh- t#.8"<c5STM/f5uQXt]o IOdZr]̅E+L2-0+k*QuZ`d'0kIі JPI;Ww?_oۻ_oj8qgCJaՈSܝ~ Tx4H-FhFS $O;N X*1TN܎(C0X, 'ՠvF%j/ыrbb52TPQzR5&pc*QzOU5]%pcSO7#T?&فr>ójp3nwEA1t~w|?i Go~Q{ >f߿|1}C۷?? z\ViJXr>Wu)ayg-_%tpH6m*% 'BN74 " `C :Aҍ q̸ovKN4BSOL54$vD^W[WO/;¨\ "YS. l-eD b9_U:dTeoSN%n&dr@/LN. -ւ??mC5[UiX>3;}׀©\2 ~&Ci ~^ ލ 0 P5rUݨèJk0x\0>0`^65+qp)8tQ.t Ɓ`D^4է`^> q"z tSSH>8Ԡ ` 0LkFtN_} c*L[?t?]Q~~Z?(~$$t%JCut@Y@Ӑk-m&D›C'NMWWWCӵ~$mk| .K.Z* ۭ\0=Kբ>5I>ec٠OV~,(m~nqjgrē#yu0$ă;Sah#;8;g.C(0lyh+]f};};Yb9fX|bϹe֜s\bâV8hsg::%):gi}"5l9-w8q>qK]sgs/ # endstream endobj 3862 0 obj << /Type /ObjStm /N 100 /First 884 /Length 1783 /Filter /FlateDecode >> stream x}XˎDWU'H|춳63gFfFd9fMu+նvn]ƅS6)epMۙ6WdkqtBjێ^izՊm߷JmnԶ**n Uc[quk. Q!RqQq8"Gވ 8`)fKG0#Xq `*S bJc`ÀLd1pe€,Ŋ~ À

    >d;[{ޯ?{%Gӧ_e|_蛪SQm^Tb_j-+{vɳρՒl,ו- "ag+5!E\ed +}uIĒx%a \VXDLrQh) Iփ{ZrO{ʸ'.{ʸ}]r_q_k}q.8`eqU2KO4`Xm7%V}{$wZxxק4{o嗢$[6pw!Z[f 1kB4^b!Ҿ a{΄0Bph)D{B暮M:p(ټ:h[f,A]%V>K]WXTLqUDXjl˒m~}]]NX=/dܳso?9cmڗ{x繷O5UIYyuʮAt ס%V!XAR]J85;.o~fg[& CjV~\}kުdwegܜm2+,f&;9[fl9Xsm nN> stream xڅX[G S(YJzUJ)}\"PZHcmmsc;FҌvG:rt s=T _qhkG|Gk:jG햁uH?z|ǨtHS$kPf ߴzR=Hc[ʇV^/Ae(KC0#uq@*s97r^T|/ fC9EI nC]ټ0qM EɆ&ub T q(cf2D쀨Psg0R*', m ^udOI08Of E9` N}\9ǝ9̥8`1tap׹ TSA~ĽQpsSSj^&Td0̖S4׹,S]X72* ,21 p vUqps9(wc.0z .J eƀe\# nR(VՑM8`rJ98^5sÏ6lMe):8X+so~$Yy~o>=>\O_Cg6eǧ_>'bXq'gKv:y~/_͟?|6NYKE%s4n6sek6k&-!KMˉ(jXdEJ IzI)iYK(HqGD2 ^ޒrx֒q1\ǒ֢,zk|A˦PHdzX쨓3[ϑOͱu6GVG"eW$klXVQvze;v24W-Un2jaۭlaEl7cmٮr2oո[FWl/q_8k}1˖/Ÿop̎v?5xy2#`4Utͫm!G:頲Â!t@ّ09c'y-b)m}:Y\ "k%^.U1D6E"JmNRt xJѵdΌř=`QX8D 3` a+g ֋m*+=";1ږ{gLjfh[#cmwvȎav1";1{gLjf([#clwvȎavȀa;y+_%WwZ~,?`FըۻϢީÌQ#"C5^BQÌQ/XΨZSȨaF @x߆m}|w!c1WȐaŐ䄈 fX yr}=#a^F`ͧWmͰ +EXjXiկOV.=V=Y^Xa!*ޣlcr/Wkc)LzxE6]vu2Hj2Ժr2}UbD(D)}U bI1˖bܗ-q_"q'{zĹ}a*hP'BDPAi# 4д@# `;=h v1et}.$ƴ8Q["rv&G.YWMy9`l$p|fJdcx#5IFkcݚ{DwKuW?\?^k׉#C3]le:<,vqXs> stream x}[[fq}_ܖTCH c?4ñӐvz΄T-JxRIZT*J_gw#{p\X@|x;EHH^KQD:pzh!'GBW9|_UzK_×>Q-dJѯp@WHA(%!QG`ywlEHe* Eɗ pDDHHH:Y՚.W>#'_H`<>Rap #Gt ^Ę\tdfCS|ErR*ף/>JIX d<+Pu Y Ɗxњ9,rՕ/Y=j|p,9+F0+*$+[.:y%T.6YvթX6YxǺH"xgdAgR] cbH}d? MEGb3G-.Oˠ*̖H]̖02[jn, ,I6wG<ӗ?;u?߇?ˇ8l߾o nT٢-wsɎ?lO{}X;)01&,00fɧsOjzCY V-UKd7dLaa_y߱H MvQ_B o}w n1MwQq56_u=\JÞ1m\-IbM{_~zۏ/?4o?xijAĩÿ~>q%MQy~Ys"(M3Z&[/sS@~a2W t)"%?'VM 9EoICNuݘ8m 32<$_i1 }wԈͮͼO_pdO {"V3ckكW^7Ֆzf 66ze"^ZXqeZ85[t5,d]=aZ_ ȋ/L2ċSInز076-i{a˜6-O_氥^5)1Ui1Wi\j}eg;N-ېIs;V87 nnt;ܩ "AޅyάIӴP4‡j hs|r&H~o߉u d^S6\5;;x+TnKsۀkll>NA& Uo2aHy &XZn HȠf"r22fRSsA UC>yQol!)o,$卼1/^C52yc[vFaQ.V tMnhʨ3kPu&jSP{Qܠ[E,^\ 2*&21[k *de Alb+"J{<el-kbz{%lͳ)YZea*ysGqQz60QS%T>K(Y]HW׺AyAP۶(¶Y߄Y +df!4ѧ*PI d\lI}MCrx6 Qb ĚK!J=@ C,NAx ƹ6S{0Dz4HjDZ~=g{tjYX`}w5xv}6l-8Jghkl& 7MhySL}6NlbB3boIQM?0e:{|6$0e6`Sf2qS&'O0'lcM ^IQ?p?Q>pn)48sC+< $78e(8ib3ݞEk .HP^p&N\rgrr \]orgehL℺3+m+]2q⑌BW슷7S2xMj+L\6TޯoSά.9eb8^?Y =Ōa;zOއ3- ȍBh@O12y")Sa)5}nc02')y_ uGo_^l=bT> endobj 3951 0 obj << /Type /ObjStm /N 93 /First 967 /Length 3609 /Filter /FlateDecode >> stream xڝ[ˎ% Ww MlgexѶ;3gIknQwMCMJ9T9˺ 'Xe-%BZJZ SU%`6%/!eJNJA:Z/!@^$- -^Y0iA %79"͈LK\+T#,-1[%/ʒ֢=˟$KJQI"6(,y5-jqR\r ʈҒ9*f` ܨ,%KlR bB(,D,.i`~f G4sYěVAf2Ǻ^W !IQ"T*_@"J(E D9 i1K%BR'&Ea (em& 6Ě,@@m@-5@\( %lE%[TXD4ZԚ[Y n-5DƬ/SfŤb )7ЁM@?*C5$&kZI(dG \jZ,`R X Ljޑ k1h}Q%0Q%\ݫWw_?{z^~7},I.."bD,#Ezn>\bq%zKXǻׯ=jo3UL8X"ߊ[`0vb%4%`D(CRJ HKK)h 4/JJP'Vz!Z߼贘10PM9QKu^*^.4(b/O*/\}qJ;68e(bZ{L2((*=A*xi` k뾤<(`R_^*/\0r+*c3E+Й!BMmNn:|B\sEE"NpCN&ϝ\70ݛ+c9 p.Nnp nMh3%k0+nLj&S' ̵>w0Ww|nc9\؍][e,L;9Y̥mbӌb:Ԟ9th .,fQ+6=9p⊇ժO9͛Cjbdڶ uSfDˡ n[;|umdq*s׉P:*D]C_B6+BZazL;B\V*vm ԡ]W-Hs:[#-vD [:a9Xj t:LòíOzߟIwԁhCsYFzjlv:}%K" X(NXTF:(b TƆL=#fςceeSQ8'uv-ou>RΪ7rJZXKcNV>'kصAplX/rÐe[ XD4$,DӀhMԎimFnŶ8f6qnź(gĺ''u ]lR3bDZ& [v'I&.s|9Vh}d`_z`*`a-z ȱ[(HI[d<~4gc-c9¶C XԆ@Fj̹Z,|_?΢O- >P,*h׍n`a[RM3v){t]mhsN3K}Fs]yn04T16R i{*lD6 +R0)7R?Ui!Fj=䙷 U-[>ϰ%AR?0ALG(X]Կb]`fsx}Vp@<lLN(=o= 8 <4A0DB33510AE8B20DD541BAA00FCA400>] /Length 10027 /Filter /FlateDecode >> stream x%y|iyiI}Ijt%lmC|Ȳ-|vñb2! ӰD0@@,gX*` ҟfL!,4mh& ,w]K~P(áP8dP[Hd[8& Ѷ6Fh-M v0 bhq@P;ͣFIh:ThEЁF]hFnBkF)-Lhh:> m3Zp5X6h=w ׂ~-hw ת'CG;vp GE8FN$и=&h77EJh hhh:U`'Zmpi+43OCۃvp?8ApmE$I0vVb !t@݄ "NMv`]=EkAIhh;*4&v` vZЏJ8ѺѶRhC`f0D6 Ttc:8)LoM3JMIDS MHquH*QиkITh*AB~)]&LO8 dj]`c8AsLU3wJ4qg4AsKx\@ۍ&K]4)/y4x,kh|djpD2bNwTBAE5 PfI4a4}VЈB"hsḧ́QC )98Ji-#%Tt:ThGSEЁߒ)}NЅoFnBoؔNh A/&<~X"\ ֠19~kA?w7;QoD'CGÄm!0 [#` I18&4n8[V49kv4&*]`k\! _gp/؇kpp?y?K!4عHxޜWI0Fa; i4r#< pp΀-|98ggi4ӄ8C9Etu2S9I 1F9h hLqB%RnL*7tuIdh wzst91k5(ہ[(:nѸuGJ6"ʪ49rYB14fL!]M*^mAcFrR$*^mGCHW;иu_bvQ!^M *^u+g'!^ES*^]ƷbARjJWtRA4JWףRa4s*^E7g!^Co5: иUsuq+hz.4&Ug=M^$@ eChC$sA'ĝk%i4m !UQ=Ɵ(CEUO)G)4M=6h1 Z@+A@;p@]@pA> kZ Xփ!0 F&0Zy()`m3l`7t58S(qp3ṕs<.K`̃ڰJ'} X7-pdi6 AhM   A hIځ:@' z ҠU`5XqB{IZhZփ!0 F(F l` ` v {>!p` 8N`48΂ .`\ *`mw9|,c X>𱀏|,c X>𱀏|,c X>9e:B}BW)>q# >>||>>||>>||>>||xi ]|NvSQp#|G8>ɾ# >f1|c3 >f1|c3wY7B-6-6-Fh ,t> akKm%؈Xxt[#݀EH`i5,F˨`--zIN f4Y#F-ju`=42bQL#+E zv`G!p` L`̀z甎wṕ S1"8 ΁k`,Xc:2অod;b?Ya@ Mf]pIlBߊKK,A$5z <j=dA[d[-'tk)^$u\՚:Vq{-cWG @+͎Z erֻX *wf~gIwLg`"o24%Y%Yr%GY4 [;Z[Od?Kd5{M@.$/KB$A!{ \GdO%-Ov@Yfݿ4֬{ή6{flQ NwB)1opDvR3%f(af(RlAoF otLAɣJ E>)a.1)0CludS*%*AJ%lQ%lQRkzOe\AJ[fj5N`V)aV)aPivs#J:(.)sD K J$_JtfE 7J 7]Z GpDtHwɣJx4go˹y٢JJ]k8H@"teUΙ7^Jf'YFgefQlPOj+ &bf=(n !0 F(F w= ` 3vYցf#875>BV sxHۀzg F4naK0tGo|B-CgȬ\=f ʧ䠓lVf<~mhhp{,ܐF^p;5@ w }QU@M .-pd,<iq4~Em$! oO |e7d9j-iq Sip Xě`Ǖv ݮ,]OHcpaWҠ7|BWz-;XkᗼV^[k+~AVp [u+ieo V2n?~B ڧVv[j=#n7V >X9dwOrWVNu? jeRY.XeEX{XLdEIaEHZeZ]TQ+w=|w,NK&BdZCU/ ?-Wj(AyTԸmy4( .SzSr3!khFZU .wgXOMh¿xJCh `5 Y7h(n{-iV;NkE }Hno+ YB'qaN!+ik(qkJ;XN$ X5z=XNOpQ5oB4]ڙ55^KW`W^U 2.YVo XF}Rӷx,34P('!|ujM|B֬2-(˝s-w])`0Cɫ+anΕ|YTwU֣^EuF\JpujT 9\ӊZi`5Шe"Bl^>ZKԇr">5h5TC Rh4@ATcޢi;^[]~ d,I14(h!gr@YthIݢ~ 5IA-ڈSBm@Zϰ֢PǴi|H]`E_a7P;A0aל^p,A58-Xc`'Mg`"`2`=~E;W?p?p?p,rF/|(ywAj7j)ME_0h; (Z K F K 0M ij-6CGW5\ jxFT 0Mm3Kt0vYFS 0M [(M5zj_j_j_jآQW_jvboYƬP>ި]{iLSMk˴ "*nYԖ!tCf/Da4&Q}#4[+Pzڀr}yG;U.E:`~֭Q51CS\~uot4#G.Ag\θmo=_+:fhK񖠝-A;[^j :%wX<-bi{8lM_`i0e;Np ̂9pN|\->qSe0F nZ|Fo П!ŐD@hmF΋_{o1Mbo}[`"):ړFbeE1 *YߦQSŵ@V1KXZ#EqK}EWj%EQTo& (JU r17.?kBj,(TӔ0HE,URE,U%)@.sBB S9ER*ER*ERRE|P[S:,`EP*śG!k~jsZ2/禭yR>n}X*ER3 @l&kyDW+Qq͠ mZա@7H5`5HUYK/kA? X|\o:(Mn/>ֵɭ``' v=`춖 8_Gap_79 ^{ \32i 8Ks8.ב<'uu{ZOxG1`s^lG I^2 XWmp Mp,Z>}X/9yLo {K~yb| <6<~c4s+0W#qX^U_U7U7U~z-Sy'}no[ŔWy,RyRy̕Ry2 TKTT^X*j/Ċ> 'H%Z?~ `cN:HF_a:3ԙUj?*uVg/XՃOP.wim`kڿlz (zLXX/Yc9NpSM i|] fN% 8A4sڥ$Ah7笫9/ҠۜK> ^skt5X F0`΋ktr9iA9[mcnzqs\ Rv[yç4@uLnEApȜm pԜWsπ9pҜ}FD~P@ei8 [p߿.۷kV5_:rnZǣtq2]6Vu|t007Zb2)7Z{JaeT)iK1Rr:nI_:%ZvA:~>ΰ2X/x^ʣ*2µ6+c *cΖ6 l:;l:W}_X|:7>iL˻s˥Q0TKTyu;퇥Xʇa|xFPuk8x/G\Bu ^uV-0Cy:k.)c,੅2&,çeS(c2'/Z.XOޭP0.t\ry9\uW?nc.?cF.й<귮xvɥ>\v`!0<|g2=,a x copydemo("ab") Copying demo ab ... done \end{boxedverbatim} \end{center} } To distinguish commands which are typed to the Unix shell from those which are typed to the \AUTO command line user interface (CLUI) we will use the following two prompts. \begin{tabular}{|l|l|} \hline \verb!>! & Commands which follow this prompt are for the Unix shell. \\ \hline \verb!AUTO>! & Commands which follow this prompt are for the \AUTO CLUI. \\ \hline \end{tabular} \section{ General Overview.} \label{sec:CLUI_Overview} The \AUTO command line user interface (CLUI) is similar to the command language described in Section~\ref{sec:command_mode} in that it facilitates the interactive creating and editing of equations-files and constants-files. It differs from the other command language in that it is based on the object-oriented scripting language \python (see \citename{Lut:96} \citeyear{Lut:96}) and provides extensive programming capabilities. This chapter will provide documentation for the \AUTO CLUI commands, but is not intended as a tutorial for the \python language. We will attempt to make this chapter self contained by describing all \python constructs that we use in the examples, but for more extensive documentation on the \python language, including tutorials and pointers to further documentation, please see \citename{Lut:96} \citeyear{Lut:96} or the web page \url{http://www.python.org} which contains an excellent tutorial at \url{http://www.python.org/doc/current/tut/tut.html}. To use the CLUI for a new equation, change to an empty directory. For an existing equations-file, change to its directory. (\emp{Do not activate the CLUI in the directory \filef{auto/07p} or in any of its subdirectories.}) Then type \centerline {\commandf{auto}.} If your command search path has been correctly set (see Section~\ref{sec:Installation}), this command will start the \AUTO CLUI interactive interpretor and provide you with the \AUTO CLUI prompt. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} > auto Python 2.5.2 (r252:60911, Nov 14 2008, 19:46:32) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (AUTOInteractiveConsole) AUTO> \end{boxedverbatim} \end{center} } \caption[Starting the \AUTO CLUI.] {Typing \commandf{auto} at the Unix shell prompt starts the \AUTO CLUI. } \label{exa:clui_starting} \end{figure} If you have IPython installed (\url{http://ipython.scipy.org}), then you can get a friendlier interface using the command \commandf{auto -i}, enabling TAB completion, persistent command-line history and other features. In addition to the examples in the following sections there are several example scripts which can be found in \filef{auto/07p/demos/python} and are listed in Table~\ref{tbl:demo_scripts}. These scripts are fully annotated and provide good examples of how \AUTO CLUI scripts are written. The scripts in \filef{auto/07p/demos/python/n-body} are especially lucid examples and perform various related parts of a calculation involving the gravitational N-body problem. Scripts which end in the suffix \filef{.auto} are called ``basic'' scripts and can be run by typing \commandf{auto scriptname.auto}. The scripts shown in Section~\ref{sec:clui_first_example} and Section~\ref{sec:clui_complex_example} are examples of basic scripts. Scripts which end in the suffix \filef{.xauto} are called ``expert'' scripts and can be run by typing \commandf{autox scriptname.xauto}. More information on expert scripts can be found in Section~\ref{sec:clui_extending}. See the \filef{README} file in that directory for more information. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline Script & Description \\ \hline demo1.auto & \begin{minipage}{3in}\smallskip The demo script from Section~\ref{sec:clui_first_example}.\smallskip\end{minipage} \\ \hline demo2.auto, demo3.auto, and demo4.auto & \begin{minipage}{3in}\smallskip The demo scripts from Section~\ref{sec:clui_complex_example}.\smallskip\end{minipage} \\ \hline userScript.xauto & \begin{minipage}{3in}\smallskip The expert demo script from Figure~\ref{exa:clui_complex_function}.\smallskip\end{minipage} \\ \hline userScript.py & \begin{minipage}{3in}\smallskip The loadable expert demo script from Figure~\ref{exa:clui_complex_interactive}.\smallskip\end{minipage} \\ \hline branches.auto & \begin{minipage}{3in}\smallskip The branch manipulating script from Figure~\ref{exa:clui branch management}.\smallskip\end{minipage}\\ \hline fullTest.auto & \begin{minipage}{3in}\smallskip A script which uses the entire \AUTO command set, except for the plotting commands.\smallskip\end{minipage} \\ \hline plotter.auto & \begin{minipage}{3in}\smallskip A demonstration of some of the plotting capabilities of \AUTO. \smallskip\end{minipage}\\ \hline tutorial.auto & \begin{minipage}{3in}\smallskip A script which implements the tutorial from Section~\ref{sec:Demos_ab}. \smallskip\end{minipage}\\ \hline n-body/compute\_lagrange\_points\_family.auto & \begin{minipage}{3in}\smallskip A basic script which computes and plots all of the ``Lagrange points'' as a function of the ratio of the masses of the two planets.\smallskip\end{minipage}\\ \hline n-body/compute\_lagrange\_points\_0.5.auto & \begin{minipage}{3in}\smallskip A basic script which computes all of the ``Lagrange points'' for the case where the masses of the two planets are equal, and saves the data. \smallskip\end{minipage}\\ \hline n-body/compute\_periodic\_family.xauto & \begin{minipage}{3in}\smallskip An expert script which starts at a ``Lagrange point'' computed by compute\_lagrange\_points\_0.5.auto and continues in the ratio of the masses until a specified mass ratio is reached. It then computes a family of periodic orbits for each pair of purely complex eigenvalues. \smallskip\end{minipage}\\ \hline n-body/to\_matlab.xauto & \begin{minipage}{3in}\smallskip A script which takes a set of \AUTO data files and creates a set of files formatted for importing into Matlab for either plotting or further calculations. \smallskip\end{minipage}\\ \hline \end{tabular} \caption[Available demo scripts.] {The various demonstration scripts for the \AUTO CLUI.} \label{tbl:demo_scripts} \end{center} \end{table} \section{ First Example } \label{sec:clui_first_example} We begin with a simple example of the \AUTO CLUI. In this example we copy the \filef{ab} demo from the \AUTO installation directory and run it. For more information on the \filef{ab} demo see Section~\ref{sec:Demos_ab}. The commands listed in Table~\ref{tbl:example_clui_1} will copy the demo files to your work directory and run the first part of the demo. The results of running these commands are shown in Figure~\ref{exa:clui_first_example}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\cal Unix}-COMMAND & ACTION \\ \hline %============================================================================== \commandf{auto} & start the \AUTO CLUI\\ \hline \AUTO CLUI COMMAND & ACTION \\ \hline \commandf{demo('ab')} & copy the demo files to the work directory\\ \commandf{ab = load(equation='ab')} & load the filename \filef{ab.f90} into the variable ab\\ \commandf{ab = load(ab, constants='ab.1')} & load the contents of the file \filef{c.ab.1} into the variable ab\\ \commandf{run(ab)} & run \AUTO with the current set of files\\ \hline %============================================================================== \end{tabular} \caption[Running the demo \filef{ab} files.] {Running the demo \filef{ab} files.} \label{tbl:example_clui_1} \end{center} \end{table} \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} > auto Python 2.5.2 (r252:60911, Nov 14 2008, 19:46:32) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (AUTOInteractiveConsole) AUTO> demo('ab') Copying demo ab ... done Runner configured AUTO> ab = load(equation='ab') Runner configured AUTO> ab = load(ab,constants='ab.1') Runner configured AUTO> run(ab) gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/bart/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.181E-01 ab ... done <_=bifDiag instance at 0x0972198c> AUTO> \end{boxedverbatim} \end{center} } \caption[The first example of the \AUTO CLUI.] {Typing \commandf{auto} at the Unix shell prompt starts the \AUTO CLUI. The rest of the commands are interpreted by the \AUTO CLUI.} \label{exa:clui_first_example} \end{figure} Let us examine more closely what action each of the commands performs. First, \commandf{demo('ab')} (Section~\ref{sec:clui_ref_demo} in the reference) copies the files in \filef{\$AUTO\_DIR/demo/ab} into the work directory. Next, \commandf{ab = load(equation='ab')} (Section~\ref{sec:clui_ref_basic} in the reference) informs the \AUTO CLUI that the name of the user defined function file is \filef{ab.f90}. The commands \commandf{load}, and the closely related \commandf{run}, are two of the most commonly used commands in the \AUTO CLUI, since they read and parse the user files which are manipulated by other commands. The \AUTO CLUI stores this setting in the variable {\tt ab} until it is changed by a command, such as another \commandf{load} command. The idea of storing information is one of the ideas that sets the CLUI apart from the command language described in Section~\ref{sec:command_mode}. Next, \commandf{ab = load(ab, constants='ab.1')} parses the \AUTO constants file \filef{c.ab.1} and reads it into memory. Note that \emp{changes to the file \filef{c.ab.1} after it has been loaded in will not be used by \AUTO unless it is loaded in again after the changes are made}. Finally, \commandf{run(ab)} (Section~\ref{sec:clui_ref_basic} in the reference) uses the user defined functions loaded by the \commandf{load(equation='ab')} command, and the \AUTO constants loaded by the \commandf{load(ab, constants = 'ab.1')} to run \AUTO. The \commandf{run} command returns a bifurcation diagram structure. It can be referenced using the special \commandf{\_} variable in interactive sessions, or assigned as \commandf{result=run(ab)}. The result can then be referred to in further calculations, plotted, and saved. Figure~\ref{exa:clui_first_example} showed two of the file types that the \commandf{load} command can read into memory, namely the user defined function file and the \AUTO constants file (Section~\ref{ch:User_supplied_files}). There are two other files types that can be read in using the \commandf{load} command, and they are the restart solution file (Section~\ref{ch:Output_files}) and the {\cal HomCont} parameter file (Section~\ref{sec:HomCont_files}). The \commandf{load} command can also directly load AUTO constants. Note that the name given to the load command is not the same as the filename which is read in, for example \commandf{load(constants='ab.1')} reads in the file \filef{c.ab.1}. This difference is a result of the automatic transformation of the filenames by the \AUTO CLUI into the standard names used by \AUTO. The standard filename transformations are shown in Table~\ref{tbl:clui_filename_translation}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l | l | l |} \hline Long name & Short name & Name entered & Transformed file name \\ \hline equation & e & foo &foo.f90/foo.f/foo.c \\ \hline constants & c & foo & c.foo \\ \hline solution & s & foo & s.foo \\ \hline bifurcationDiagram & b & foo &b.foo \\ \hline diagnostics & d & foo &d.foo \\ \hline homcont & h & foo &h.foo \\ \hline \end{tabular} \caption[Standard \AUTO CLUI filename translations.] {This table shows the standard \AUTO CLUI filename translations. In \filef{load} and \filef{run} commands either the long name or the short name may be used for loading the appropriate files.} \label{tbl:clui_filename_translation} \end{center} \end{table} Since the \commandf{load} command is so common, there are various shorthand versions of it. First, there are short versions of the various arguments as shown in Table~\ref{tbl:clui_filename_translation}. For example, the command \commandf{load(constants='ab.1')} can be shortened to \commandf{load(c='ab.1')}. Next, several different files may be loaded at once using the same \commandf{load} command. For example, the two commands in Figure~\ref{exa:clui_two_command} have the same effect as the single command in Figure~\ref{exa:clui_one_command}. Last, you can bypass the \commandf{load} command, unless the intermediate result is needed, and use the \commandf{run} command directly on the \commandf{load} arguments, as in Figure~\ref{exa:clui_one_run_command}. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> ab = load(e='ab') Runner configured AUTO> ab = load(ab,c='ab.1) Runner configured \end{boxedverbatim} \end{center} } \caption[Loading two files individually] {Loading two files individually.} \label{exa:clui_two_command} \end{figure} \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> ab = load(e='ab',c='ab.1') Runner configured \end{boxedverbatim} \end{center} } \caption[Loading two files at the same time] {Loading two files at the same time.} \label{exa:clui_one_command} \end{figure} \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> runab1 = run(e='ab',c='ab.1') Runner configured \end{boxedverbatim} \end{center} } \caption[Loading two files at the same time and running] {Loading two files at the same time and run using them.} \label{exa:clui_one_run_command} \end{figure} Also, since it is common that several files will be loaded that have the same base name \commandf{load('ab')} performs the same action as \commandf{load(e='ab', c='ab', s='ab', h='ab')}. Note, for the command \commandf{load('ab')} it is not required that all of the files exist. Information from all existing files is used only if they exist, and no error message will be given for non-existing files. However, later \commandf{run} commands may cause \AUTO to err with incomplete information. \section{ Scripting } Section~\ref{sec:clui_first_example} showed commands being interactively entered at the \AUTO CLUI prompt, but since the \AUTO CLUI is based on \python one has the ability to write scripts for performing sequences of commands automatically. A \python script is very similar to the interactive mode shown in Section~\ref{sec:clui_first_example} except that the commands are placed in a file and read all at once. For example, if the commands from Figure~\ref{exa:clui_first_example} where placed into the file \filef{demo1.auto}, in the format shown in Figure~\ref{exa:clui_first_script}, then the commands could be run all at once by typing \commandf{auto demo1.auto}. See Figure~\ref{exa:clui_run_first_script} for the full output. \begin{figure}[htb] {\small \begin{center} \begin{boxedverbatim} demo('ab') ab = load(equation='ab') ab = load(ab, constants='ab.1') run(ab) \end{boxedverbatim} \end{center} } \caption[First example of a \AUTO CLUI script.] {The commands from Figure~\ref{exa:clui_first_example} and they would appear in a \AUTO CLUI script file. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/demo1.auto}. } \label{exa:clui_first_script} \end{figure} \begin{figure}[htb] {\small \begin{center} \begin{boxedverbatim} > cat demo1.auto demo('ab') ab = load(equation='ab') ab = load(ab, constants='ab.1') run(ab) > auto demo1.auto Copying demo ab ... done Runner configured Runner configured Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/bart/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 EP 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.193E-01 ab ... done > \end{boxedverbatim} \end{center} } \caption[Figure of running a simple \AUTO CLUI script.] {This Figure starts by listing the contents of the \filef{demo1.auto} file using the Unix \commandf{cat} command. The file is then run through the \AUTO CLUI by typing {auto demo1.auto} and the output is shown.} \label{exa:clui_run_first_script} \end{figure} \section{ Second Example } \label{sec:clui_complex_example} In Section~\ref{sec:clui_first_example} we showed a very simple \AUTO CLUI script, in this Section we will describe a more complex example, which introduces several new \AUTO CLUI commands as well as a basic \python construct for looping. We will not provide an exhaustive reference for the \python language, but only the very basics. For more extensive documentation we refer the reader to \citename{Lut:96} \citeyear{Lut:96} or the web page \url{http://www.python.org}. In this section we will describe each line of the script in detail, and the full text of the script is in Figure~\ref{exa:clui_complex_script}. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} demo('bvp') bvp = run('bvp') branchpoints = bvp("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) bvp = bvp + merged bvp=relabel(bvp) save(bvp, 'bvp') plot(bvp) wait() \end{boxedverbatim} \end{center} } \caption[A complex example of a \AUTO CLUI script.] {This Figure shows a more complex \AUTO CLUI script. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/demo2.auto}. } \label{exa:clui_complex_script} \end{figure} The script begins with a section, extracted into Figure~\ref{exa:clui_complex_first}, which performs a task identical to that shown in Figure~\ref{exa:clui_first_example} except that the shorthand discussed in Section~\ref{sec:clui_first_example} is used for the \commandf{run} command. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} demo('bvp') bvp = run('bvp') \end{boxedverbatim} \end{center} } \caption[The first part of the complex \AUTO CLUI script.] {The first part of the complex \AUTO CLUI script.} \label{exa:clui_complex_first} \end{figure} Up to this point all of the commands presented have had analogs in the command language discussed in Section~\ref{sec:command_mode}, and the \AUTO CLUI has been designed in this way to make it easy for users to migrate from the old command language to the \AUTO CLUI. The next section of the script extracted into Figure~\ref{exa:clui_complex_first}, introduces a new command, namely \commandf{branchpoints = bvp("BP")}, which is the first command which has no analog in the old command language. The command \commandf{bvp("BP")}, given the output variable \commandf{bvp} from the first run, returns a \python object which represents a list of all branchpoint solutions. Accordingly, this list is stored in the \python variable \commandf{branchpoints}. Note, variables in \python are different from those in languages such as {\cal C} in that their type does not have to be declared before they are created. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} branchpoints = bvp("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) bvp = bvp + merged \end{boxedverbatim} \end{center} } \caption[The second part of the complex \AUTO CLUI script.] {The second part of the complex \AUTO CLUI script.} \label{exa:clui_complex_second} \end{figure} The next command, \commandf{for solution in branchpoints:} is the \python syntax for loops. The \commandf{branchpoints} object is a list of the branch point solutions from the first run. The command \commandf{for solution in branchpoints:} is used to loop over all solutions in the branchpoints variable by setting the variable \commandf{solution} to be one of the solutions in \commandf{branchpoints} and then calling the rest of the code in the block. \python differs from most other computer languages in that blocks of code are not defined by some delimiter, such as \commandf{END DO} in {\cal Fortran}, but by indentation. In Figure~\ref{exa:clui_complex_script} the commands starting with \commandf{bvp=relabel(bvp)} are not part of the loop, because they are indented differently. This can be confusing first time users of \python, but it has the advantage that the code is forced to have a consistent indentation style. The next command in the script, \commandf{bp = load(solution, ISW=-1, NTST=50)} loads a solution with modified AUTO constants. All other constants are the same as they were in the first run. The \parf{ISW} value is changed to \parf{-1} (see Section~\ref{sec:ISW}), so that a branch switch is performed, and the \parf{NTST} value is changed to \parf{50} (see Section~\ref{sec:NTST}). Only ``in memory'' versions of the \AUTO constants are modified; the original file \filef{c.bvp} is \emp{not} modified. Some diagnostics are then printed to the screen using a standard \python \commandf{print} command: the label number of the branch point that we switch at can be found by using \commandf{bp["LAB"]}. In addition, as can be seen in Figure~\ref{exa:clui_complex_second}, the \commandf{\#} character is the \python comment character. When the \python interpretor encounters a \commandf{\#} character it ignores everything from that character to the end of the line. We then use a \commandf{fw=run(bp)} command to perform the calculation of the bifurcating branch from solution \commandf{bp}. We print additional information and use the command \commandf{bw = run(bp,DS='-')} to change the \AUTO initial step size from positive to negative, which causes \AUTO to compute the bifurcating branch in the other direction (see Section~\ref{sec:DS}). This output is appended to the existing output in the \python variable \commandf{bvp} after some more processing. First the command \commandf{both = fw + bw} concatenates, using standard Python list syntax, the forwards and backwards branches. Subsequently \commandf{merged = merge(both)} merges the two branches into one continuous branch where the backwards branch is flipped. Finally, the command \commandf{bvp = bvp + merged} appends the merged branch to the existing results. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} bvp=relabel(bvp) save(bvp, 'bvp') plot(bvp) wait() \end{boxedverbatim} \end{center} } \caption[The third part of the complex \AUTO CLUI script.] {The third part of the complex \AUTO CLUI script.} \label{exa:clui_complex_third} \end{figure} The last section of the script, extracted into Figure~\ref{exa:clui_complex_third}, does some postprocessing and plotting. First, the command \commandf{bvp=relabel(bvp)} relabels so all solutions in the \commandf{bvp} object have unique labels starting at 1. The command \commandf{save(bvp,'bvp')} (Section~\ref{sec:clui_ref_basic} in the reference) saves the results of the \AUTO runs into files using the base name \filef{bvp} and the filename extensions in Table~\ref{tbl:clui_filename_translation}. For example, in this case the bifurcation diagram will be saved as \filef{b.bvp}, the solution will be saved as \filef{s.bvp}, and the diagnostics will be saved as \filef{d.bvp}. Now that the section of script shown in Figure~\ref{exa:clui_complex_third} has finished computing the bifurcation diagram, the command \commandf{plot(bvp)} brings up a plotting window (Section~\ref{sec:clui_ref_plot} in the reference), and the command \commandf{wait()} causes the \AUTO CLUI to wait for input. You may now exit the \AUTO CLUI by pressing any key in the window in which you started the \AUTO CLUI. For convenience, some of these commands have shorter forms. For instance, the \commandf{load}, \commandf{run}, \commandf{merge}, \commandf{relabel}, \commandf{save}, and \commandf{plot} commands have the shorter forms \commandf{ld}, \commandf{r}, \commandf{mb}, \commandf{rl}, \commandf{sv}, and \commandf{pl}, respectively. All algebraic and functional expressions can be combined in the usual way. Combining these techniques, a shorter version of the complex \AUTO CLUI script is given in Figure~\ref{exa:clui_complex_fourth}. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} demo('bvp') bvp=r('bvp') for solution in bvp('BP'): bp = ld(solution,NTST=50,ISW=-1) # Compute forwards and backwards bvp = bvp + mb(r(bp)+r(bp,DS='-')) bvp=rl(bvp) pl(bvp) sv(bvp,'bvp') wait() \end{boxedverbatim} \end{center} } \caption[A complex example of a \AUTO CLUI script.] {This Figure shows a shorter version of the more complex \AUTO CLUI script given above. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/demo3.auto}. } \label{exa:clui_complex_fourth} \end{figure} Even shorter forms are possible to save you typing using features borrowed from ipython, both in \commandf{auto -i} and in plain \commandf{auto}. Those forms use auto-parentheses and auto-quotes: for a command that does not assign to a variable you can skip the parentheses, and by using a ``,'' on the first character of a line you force all parameters to be quoted. For example, you can just type \commandf{pl bvp} to plot the bifurcation diagram and solutions in the object \commandf{bvp}. Beware that these extra short forms are only possible in normal auto scripts and at the AUTO CLUI prompt, and only if they start in the first column, but not in the ``expert'' scripts described in the next section. The even shorter version of the complex \AUTO CLUI script is given in Figure~\ref{exa:clui_complex_fifth}. It should be clear that these super-short forms save you typing at the command prompt but do not help readability in scripts. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} ,demo bvp bvp=r('bvp') for solution in bvp('BP'): bp = ld(solution,NTST=50,ISW=-1) # Compute forwards and backwards bvp = bvp + mb(r(bp)+r(bp,DS='-')) bvp=rl(bvp) pl bvp sv bvp, 'bvp' wait \end{boxedverbatim} \end{center} } \caption[Another complex example of a \AUTO CLUI script.] {This Figure shows an even shorter version of the more complex \AUTO CLUI script given above. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/demo4.auto}. } \label{exa:clui_complex_fifth} \end{figure} \section{ Extending the \AUTO CLUI } \label{sec:clui_extending} The code in Figure~\ref{exa:clui_complex_script} performed a very useful and common procedure, it started an \AUTO calculation and performed additional continuations at every point which \AUTO detected as a bifurcation. Unfortunately, the script as written can only be used for the \filef{bvp} demo. In this section we will generalize the script in Figure~\ref{exa:clui_complex_script} for use with any demo, and demonstrate how it can be imported back into the interactive mode to create a new command for the \AUTO CLUI. Several examples of such ``expert'' scripts can be found in \filef{auto/07p/demos/python/n-body}. Just as loops and conditionals can be used in \python, one can also define functions. For example, Figure~\ref{exa:clui_complex_function} is a functional version of script from Figure~\ref{exa:clui_complex_script}. The changes are actually quite minor. The first line, \commandf{from auto import *}, includes the definitions of the \AUTO CLUI commands, and must be included in all \AUTO CLUI scripts which define functions. The next line, \commandf{def myRun(demoname):}, begins the function definition, and creates a function named \commandf{myRun} which takes one argument \commandf{demoname}. The rest of the script is the same except that it has been indented to indicate that it is part of the function definition, all occurrences of string \commandf{'bvp'} have been replaced with the variable \commandf{demoname}, and the variable \commandf{bvp} was replaced by the variable \commandf{r}. Finally we have added a line \commandf{myRun('bvp')} which actually calls the function we have created and runs the same computation as the original script. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} from auto import * def myRun(demoname): demo(demoname) r = run(demoname) branchpoints = r("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) r = r + merged r=relabel(r) save(r, demoname) plot(r) wait() myRun('bvp') \end{boxedverbatim} \end{center} } \caption[A complex \AUTO CLUI script as a function.] {This Figure shows a complex \AUTO CLUI script written as a function. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/userScript.xauto}. } \label{exa:clui_complex_function} \end{figure} While the script in Figure~\ref{exa:clui_complex_function} is only slightly different then the one showed in Figure~\ref{exa:clui_complex_script} it is much more powerful. Not only can it be used as a script for running any demo by modifying the last line, it can be read back into the interactive mode of the \AUTO CLUI and used to create a new command, as in Figure~\ref{exa:clui_complex_interactive}. First, we create a file called \filef{userScript.py} which contains the script from Figure~\ref{exa:clui_complex_function}, with one minor modification. We want the function only to run when we use it interactively, not when the file \filef{userScript.py} is read in, so we remove the last line where the function is called. We start the \AUTO CLUI with the Unix command \commandf{auto}, and once the \AUTO CLUI is running we use the command \commandf{from userScript import *}, to import the file \filef{userScript.py} into the \AUTO CLUI. The \commandf{import} command makes all functions in that file available for our use (in this case \commandf{myRun} is the only one). It is important to note that \commandf{from userScript import *} does \emp{not} use the \filef{.py} extension on the file name. After importing our new function, we may use it just like any other function in the \AUTO CLUI, for example by typing \commandf{myRun('bvp')}. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} > cp \$AUTO\_DIR/python/demo/userScript.py . > ls userScript.py > cat userScript.py # This is an example script for the AUTO07p command line user # interface. See the "Command Line User Interface" chapter in the # manual for more details. from auto import * def myRun(demoname): demo(demoname) r = run(demoname) branchpoints = r("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) r = r + merged r=relabel(r) save(r, demoname) plot(r) wait() > auto Python 2.5.2 (r252:60911, Nov 14 2008, 19:46:32) [GCC 4.3.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (AUTOInteractiveConsole) AUTO> from userScript import * AUTO> myRun('bvp') ... \end{boxedverbatim} \end{center} } \caption[An example of using a user created function interactively.] {This Figure shows the functional version of the \AUTO CLUI from Figure~\ref{exa:clui_complex_function} being used as an extension to the \AUTO CLUI. The source code for this script can be found in \filef{\$AUTO\_DIR/python/demo/userScript.py }} \label{exa:clui_complex_interactive} \end{figure} \section{ Bifurcation Diagram Objects} The \commandf{run} and \commandf{loadbd} commands (see Section~\ref{sec:clui_ref_basic} in the reference for details) return a ~\python structure which we refer to as a \emph{bifurcation diagram object}. It represents the information that is also stored in \AUTO's output files (\filef{fort.7}, \filef{fort.8}, and \filef{fort.9}, or \filef{b.*}, \filef{s.*}, and \filef{d.*}), and in \AUTO's constant files. For example, the command \commandf{loadbd('ab')} returns an object corresponding to the files \filef{b.ab}, \filef{s.ab}, and \filef{d.ab}. (if you are using the standard filename translations from Table~\ref{tbl:clui_filename_translation}). The command \commandf{run('ab')} returns an object corresponding to the output of the run. The bifurcation diagram object encapsulates all this information in an easy to use form. This object is a list of all of the branches in the appropriate bifurcation diagram file, and each branch behaves like an array (a PyDSTool Pointset subclass, to be precise). This array can be viewed as a list of all of the points in the appropriate bifurcation diagram file, and each point is a \python dictionary with entries for each piece of data for the point. For example, the sequence of commands in Figure~\ref{exa:clui parse diagram}, prints out the label of the first point of a branch in a bifurcation diagram. The query-able parts of the object are listed in Table~\ref{tbl:clui parse diagram}. The individual elements of the array may be accessed in a number of ways: by index of the point using the \commandf{[]} syntax, a column using \commandf{['columnname']} syntax, or by label number or type name plus one-based index using the \commandf{()} syntax. For example, assume that the parsed object is contained in a variable \commandf{data}, and the first branch is in a variable \commandf{br=data[0]}. The first point may then be accessed using the command \commandf{br[0]}, while the column with label \parf{PAR(1)} may be accessed using the command \commandf{br['PAR(1)']}. The point with label \commandf{57} may be accessed using the command \commandf{br(57)}, and the second Hopf bifurcation point using the command \commandf{br('HB2')} Using the \commandf{()} syntax you can also obtain new lists of points: \commandf{br('HB')} gives a list of all Hopf bifurcation points, \commandf{br([1,4])} gives the points with labels 1 and 4, and \commandf{br(['UZ',4])} gives all user defined points and label 4. The \commandf{['columnname']} syntax is especially useful for plotting, as is illustrated in Figure~\ref{exa:bdplot}. Here the \python package matplotlib is directly used to plot a branch. Of course, the command \commandf{plot} may also be used, but sometimes more control may be needed. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> demo('lrz') Copying demo lrz ... done Runner configured AUTO> data=run('lrz') gfortran -fopenmp -O -c lrz.f90 -o lrz.o gfortran -fopenmp -O lrz.o -o lrz.exe /home/bart/auto/07p/lib/*.o Starting lrz ... (...) lrz ... done AUTO> print data BR PT TY LAB rho L2-NORM x y z 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 5 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 13 UZ 3 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB rho L2-NORM x y z 2 42 HB 4 2.47368E+01 2.62685E+01 7.95602E+00 7.95602E+00 2.37368E+01 2 45 UZ 5 3.00000E+01 3.15542E+01 8.79394E+00 8.79394E+00 2.90000E+01 BR PT TY LAB rho L2-NORM x y z 2 42 HB 6 2.47368E+01 2.62685E+01 -7.95602E+00 -7.95602E+00 2.37368E+01 2 45 UZ 7 3.00000E+01 3.15542E+01 -8.79394E+00 -8.79394E+00 2.90000E+01 AUTO> br=data[1] AUTO> print br BR PT TY LAB rho L2-NORM x y z 2 42 HB 4 2.47368E+01 2.62685E+01 7.95602E+00 7.95602E+00 2.37368E+01 2 45 UZ 5 3.00000E+01 3.15542E+01 8.79394E+00 8.79394E+00 2.90000E+01 AUTO> print br[0] {'TY number': 0, 'PT': -1, 'BR': 2, 'index': 0, 'section': 0, 'data': [0.99999994, 0.0, 0.0, 0.0, 0.0], 'TY name': 'No Label', 'LAB': 0} AUTO> print br['rho'] [ 0.99999994 1.001875 1.00747645 1.01786791 1.03426011 1.05801491 1.08738983 1.12195713 1.16544975 1.21923418 1.28474069 1.36345331 (...) 15.15715248 16.76398367 18.53533839 20.48761501 22.63885621 24.73684368 27.10974374 29.72303283 30. ] AUTO> print br(4) BR PT TY LAB ISW NTST NCOL NDIM IPS IPRIV 2 42 HB 4 1 1 0 3 1 0 (...) \end{boxedverbatim} \end{center} } \caption[An example of processing a bifurcation diagram of a run.] {This figure shows an example of parsing a bifurcation diagram. First the demo involving the Lorenz equations named 'lrz' is copied and we perform its first run. We then print the result, its second branch, the first point on this branch, the column corresponding to 'rho', and the point with label 4 on this branch. } \label{exa:clui parse diagram} \end{figure} \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> import pylab AUTO> pylab.plot(br['rho'],br['x']) [] AUTO> pylab.show() \end{boxedverbatim} \end{center} } \caption{Following the example in Figure~\ref{exa:clui parse diagram} we can plot a subset of the bifurcation diagram, that is, the second branch, directly using matplotlib.} \label{exa:bdplot} \end{figure} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline Query string & Meaning \\ \hline TY name & The short name for the solution type (see Table~\ref{tbl:clui type translation}). \\ \hline TY number & The number of the solution type (see Table~\ref{tbl:clui type translation}). \\ \hline BR & The branch number. \\ \hline PT & The point number. \\ \hline LAB & The solution label, if any. \\ \hline section & A unique identifier for each branch in a file with multiple branches. \\ \hline data & An array which contains the \AUTO output. \\ \hline \end{tabular} \caption[Contents of a bifurcation diagram object.] {This table shows the strings that can be used to query a bifurcation diagram object and their meanings.} \label{tbl:clui parse diagram} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l | l |} \hline Type & Short Name & Number \\ \hline No Label & No Label & \\ \hline Branch point (algebraic problem) & BP & 1 \\ \hline Fold (algebraic problem) & LP & 2 \\ \hline Hopf bifurcation (algebraic problem) & HB & 3 \\ \hline Regular point (every NPR steps) & RG & 4 \\ \hline User requested point & UZ & -4 \\ \hline Fold (ODE) & LP & 5 \\ \hline Bifurcation point (ODE) & BP & 6 \\ \hline Period doubling bifurcation (ODE) & PD & 7 \\ \hline Bifurcation to invariant torus (ODE) & TR & 8 \\ \hline Normal begin or end & EP & 9 \\ \hline Abnormal termination & MX & -9 \\ \hline \end{tabular} \caption[Type translations.] {This table shows the various types of points that can be in solution and bifurcation diagram files, with their short names and numbers.} \label{tbl:clui type translation} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l | l |} \hline Type & Short Name & Number \\ \hline Bogdanov-Takens bifurcation (algebraic problem) & BT & -21, -31 \\ \hline Cusp (algebraic problem) & CP & -22 \\ \hline Generalized Hopf bifurcation (algebraic problem) & GH & -32 \\ \hline Zero-Hopf bifurcation (algebraic problem) & ZH & -13, -23, -33 \\ \hline 1:1 Resonance bifurcation (ODE, maps) & R1 & -25, -55, -85 \\ \hline 1:2 Resonance bifurcation (ODE, maps) & R2 & -76, -86 \\ \hline 1:3 Resonance bifurcation (ODE, maps) & R3 & -87 \\ \hline 1:4 Resonance bifurcation (ODE, maps) & R4 & -88 \\ \hline Fold-flip bifurcation (maps) & LPD & 28, 78 \\ \hline Fold-torus bifurcation (maps) & LTR & 23, 83 \\ \hline Flip-torus bifurcation (maps) & PTR & 77, 87 \\ \hline Torus-torus bifurcation (maps) & TTR & 88 \\ \hline \end{tabular} \caption[Codimension-two type translations.] {This table shows the various types of codimension-two points as in Table~\ref{tbl:clui type translation}. The absolute value of the number divided by 10 gives the type of the branch on which the codimension-two bifurcation occurs.} \label{tbl:clui codim2 type translation} \end{center} \end{table} Additionally three special keys can be used to query a branch: use \commandf{br['BR']} to obtain the branch number, \commandf{br['TY']} for the branch type, and \commandf{br['TY number']} for the corresponding number. These keys are also useful to change bifurcation diagram files, as is illustrated in Figure~\ref{exa:clui branch management}. Note that you can interactively change branch numbers, solution numbers and delete branches and solutions using the \commandf{@lb} command (see Chapter~\ref{sec:command_mode}). \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} # get and run the ab demo demo('ab') auto('ab.auto') # load data from b.ab, s.ab, and d.ab ab = loadbd('ab') # change the branch number to either 1 or 2 depending on IPS for branch in ab: branch['BR'] = branch.c['IPS'] # delete the last branch del ab[-1] # subtract the first branch from all other branches with respect to PAR(1) ab = subtract(ab, ab, 'PAR(1)') # plot the branches, coloring by branch number plot(ab, coloring_method='branch', color_list='black red') wait() # save data to b.abnew, s.abnew, and d.abnew save(ab, 'abnew') \end{boxedverbatim} \end{center} } \caption{This example shows how to change branch numbers and delete a branch in the 'ab' demo output file. Using the \parf{coloring\_method='branch'} setting you can then give one color to all branches of fixed points and one other color to all branches of periodic orbits. The source for this script can be found in \filef{\$AUTO\_DIR/demos/python/branches.auto}.} \label{exa:clui branch management} \end{figure} \subsection{ Solutions} You can also obtain solutions from a bifurcation diagram structure, by using the \commandf{()} syntax directly on the diagram instead of on individual branches. For example, in the above example the command \commandf{s=data()} returns an object which encapsulates all solutions in a easy to use form. The object returned in this way is a list of all of the solutions in the appropriate bifurcation solution file, and each solution is a Python dictionary with entries for each piece of data for the solution. For example, the sequence of commands in Figure~\ref{exa:clui parse solution}, prints out the label of the first solution in a bifurcation solution. The query-able parts of the object are listed in Table~\ref{tbl:clui parse solution}. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> s=data() AUTO> sol=s[3] #or s(4), data(4), s('HB1'), or data('HB1') AUTO> print sol BR PT TY LAB ISW NTST NCOL NDIM IPS IPRIV 2 42 HB 4 1 1 0 3 1 0 Pointset lrz (parameterized) Independent variable: t: [ 0.] Coordinates: U(1): [ 7.95601972] U(2): [ 7.95601972] U(3): [ 23.73684367] Labels by index: Empty Active ICP: [1] rldot: [0.69738311435] udotps: Pointset lrz (non-parameterized) Coordinates: UDOT(1): [ 0.11686228] UDOT(2): [ 0.11686228] UDOT(3): [ 0.69738311] Labels by index: Empty PAR(1:5): 2.4736843668E+01 2.6666666667E+00 1.0000000000E+01 0 0 PAR(6:10): 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0 0 PAR(11:11): 6.5283032822E-01 AUTO> print sol['LAB'] 4 AUTO> print sol['L2-NORM'] # or sol.b['L2-NORM'] 26.268502943 AUTO> sol[0] {'u': [7.9560197197999996, 7.9560197197999996, 23.736843667999999], 't': 0.0, 'u dot': [0.11686227712, 0.11686227712, 0.69738311435]} AUTO> sol['t'] array([ 0.]) AUTO> sol['U(1)'] array([ 7.95601972]) AUTO> sol.PAR(1) # or sol['PAR(1)'] 24.736843667999999 AUTO> pylab.plot(sol['U(1)'],sol['U(2)'],'+') [] AUTO> pylab.show() \end{boxedverbatim} \end{center} } \caption[An example of parsing solutions.] {This figure shows an example of parsing solutions. The first command, \commandf{s=data()}, extracts a list of all solutions stored in the bifurcation diagram object \commandf{data} from the 'lrz' demo in Figure~\ref{exa:clui parse diagram} and puts it into the variable \commandf{s}. The command \commandf{sol=s[3]} obtains the fourth solution. Next, \commandf{print sol} displays it. The last commands illustrate how to extract components from this fourth solution: its label, its first point, its time array, its first coordinate array, its first parameter, and a plot of the first two coordinates. } \label{exa:clui parse solution} \end{figure} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline Query string & Meaning \\ \hline data & \begin{minipage}{4in} \smallskip An array which contains the \AUTO output. Each array entry is a Python dictionary with a scalar entry 't' denoting time, and sub-arrays for the solution vector 'u' and the solution direction vector 'u dot'.\\ Other syntax: \commandf{s[0]}, \commandf{s['t']}, \commandf{s['U(1)']}. \smallskip \end{minipage} \\ \hline BR & \begin{minipage}{4in} \smallskip The number of the branch to which the solution belongs. \smallskip \end{minipage} \\ \hline IPRIV & \begin{minipage}{4in} \smallskip A private field for use by toolboxes. \smallskip \end{minipage} \\ \hline IPS & \begin{minipage}{4in} \smallskip The user-specified problem type. See Section~\ref{sec:IPS}. \smallskip \end{minipage} \\ \hline ISW & \begin{minipage}{4in} \smallskip The ISW value used to start the calculation. See Section~\ref{sec:ISW}. \smallskip \end{minipage} \\ \hline LAB & \begin{minipage}{4in} \smallskip The label of the solution. \smallskip \end{minipage} \\ \hline NCOL & \begin{minipage}{4in} \smallskip The number of collocation points used to compute the solution. See Section~\ref{sec:NCOL}. \smallskip \end{minipage} \\ \hline NDIM & \begin{minipage}{4in} \smallskip The user-specified number of dimensions. See Section~\ref{sec:NDIM}. \smallskip \end{minipage} \\ \hline NTST & \begin{minipage}{4in} \smallskip The number of mesh intervals used to compute the solution. See Section~\ref{sec:NTST}. \smallskip \end{minipage} \\ \hline Parameters & \begin{minipage}{4in} \smallskip The value of all of the parameters for the solution. \smallskip \end{minipage} \\ parameters & \begin{minipage}{4in} \smallskip 'p' and 'parameters' are aliases.\end{minipage} \\ p & \begin{minipage}{4in} \smallskip Other syntax: \commandf{s.PAR(1)}, \commandf{s['PAR(1)']} \smallskip \end{minipage} \\ \hline PT & \begin{minipage}{4in} \smallskip The number of the point in the given branch. \smallskip \end{minipage} \\ \hline TY & \begin{minipage}{4in} \smallskip A short string which describes the type of the solution (see Table~\ref{tbl:clui type translation}). \smallskip \end{minipage} \\ \hline TY number & \begin{minipage}{4in} \smallskip A number which describes the type of the solution (see Table~\ref{tbl:clui type translation}). \smallskip \end{minipage} \\ \hline Active ICP & \begin{minipage}{4in} \smallskip The values of the (one-based) indices of the free parameters. \smallskip \end{minipage} \\ \hline rldot & \begin{minipage}{4in} \smallskip The values of the parameter direction vector.\smallskip \end{minipage} \\ \hline \end{tabular} \caption[Contents of a solution object.] {This table shows the strings that can be used to query a solution object and their meanings.} \label{tbl:clui parse solution} \end{center} \end{table} The individual elements of the list may, again, be accessed in two ways, either by the index of the solution using the \commandf{[]} syntax or by label number or type name using the \commandf{()} syntax. For example, assume that the parsed object is contained in a variable \commandf{s=data()}. The first solution may be accessed using the command \commandf{s[0]}, while the solution with label \commandf{57} may be accessed using the command \commandf{s(57)}. Individual solutions can be also be obtained directly from the bifurcation diagram object \commandf{data} in the same way as for individual points above, by using \commandf{s=data(label)}. For example, the solution with label \commandf{57} may be accessed using the command \commandf{data(57)}, and the second Hopf bifurcation solution using the command \commandf{data('HB2')}. All individual solutions can then be used as a starting point for a new run. Similarly, using the \commandf{()} syntax you can also obtain new lists of solutions: \commandf{data('HB')} gives a list of all Hopf bifurcation solutions, \commandf{data([1,4])} gives the solutions with labels 1 and 4, and \commandf{data(['UZ',4])} gives all user defined solutions and label 4. A for loop can then iterate through the list and provide new starting solutions. Solutions can be deleted using the commands \commandf{dlb}, \commandf{dsp}, \commandf{klb}, and \commandf{ksp}, described in the reference, Section~\ref{sec:clui_ref_filemaint}. The command \commandf{relabel}, as described before, gives each solution a unique label starting at 1. Finally, you can change individual solution labels using the \commandf{relabel} \emph{method}: \commandf{data.relabel(9, 57)} relabels label 9 to label 57, making sure that the label changes both in the bifurcation diagram and in the solution. \subsection{Summary and reference} We have defined the following objects: \begin{description} \item[Bifurcation diagram object]: \commandf{bd=run(...)}, \commandf{bd=loadbd(...)}. \item[Branch]: \commandf{bd[0], bd[1], bd[2], ...}. \item[Branch AUTO constants]: \commandf{bd[0].c, bd[1].c, bd[2].c, ...}.\\ \commandf{bd.c} refers to \commandf{bd[0].c}. \item[Branch column]: \commandf{bd['PAR(1')], bd[0]['PAR(1)'], bd[1]['L2-NORM'], ...}.\\ Here \commandf{bd['PAR(1)']} is a shortcut for \commandf{bd[0]['PAR(1)']}. \item[Point]: \commandf{bd[0][0], bd[1](5), bd[1]('UZ1'), bd(1).b, bd('UZ1').b, ...}. \item[Point list]: \commandf{bd[0]('UZ'), bd[0]([1,2]), bd[0](['UZ','HB1',7]), ...}. \item[Solution]: \commandf{bd(5), bd('UZ1'), bd()[0], ...}. \item[Solution list]: \commandf{s=bd(), s('UZ'), bd('UZ'), bd([1,2]), bd(['UZ','HB1',7]), ...}. \item[Solution column]: \commandf{bd('UZ1')['t'], bd('UZ1')['U(1)'], ...}. \item[Solution measures]: \commandf{bd('UZ1')['L2-NORM'], ...}.\\ This example is a shortcut for \commandf{bd('UZ1').b['L2-NORM']}: here you can use any column name from the bifurcation diagram. \item[Solution point]: \commandf{bd('UZ1')(0), bd('UZ1')[0], ...}.\\ Here the \commandf{bd('UZ1')(t)} notation gives the point at time \commandf{t}. \item[Solution AUTO constants]: \commandf{bd(5).c, bd('UZ1').c, bd()[0].c, ...}.\\ These constants are copied from the corresponding branch constants, removing the constants \parf{IRS}, \parf{PAR}, \parf{U}, \parf{sv}, \parf{s}, and \parf{dat}, because those constants need to change between runs. The AUTO constant \parf{IRS} is automatically set to the solution label. \end{description} \section{ Importing data from Python or external tools.} \label{sec:clui_importing} A solution can be created from a Python list or Numerical Python array using the \commandf{load} command. The syntax is slightly different depending on whether you create a point or an orbit. Use \commandf{ s = load(u,PAR=p)} where \commandf{u} is a Python list or a numpy array representing a solution. For a point such an array is just the point itself, for example, \commandf{u = [x, y, z]} or \commandf{u = [0, 0, 0]}. For an orbit such an array must be given column-wise, as \commandf{u = [[t0, ..., tn], [x0, ..., xn], [y0, ..., yn], ...]}. The \commandf{PAR=p} keyword argument takes a dictionary \commandf{p} as described in Section~\ref{sec:PAR}, for instance, \commandf{PAR=\{1:5.0, 2:0.0\}} to set \parf{PAR(1)=5.0} and \parf{PAR(2)=0.0}. You can check your new solution using the command \commandf{print s}. An external orbit from an ASCII file can be directly imported by AUTO via the \parf{dat} AUTO constant, see Section~\ref{sec:dat}. \section{ Exporting output data for use by Python or external visualization tools.} \label{sec:clui_exporting} The bifurcation and solution file classes have three methods that are particularily useful for creating data which can be used in other programs. First, there is a method called \commandf{toArray} which takes a bifurcation diagram or solution and returns a Python array (a list of lists). Second, the method \commandf{toarray} returns a Numerical Python (numpy) array, which works for branches, points and solutions (but not for lists of branches). Third, there is a method called \commandf{writeRawFilename} which will create a standard ASCII file which contains the bifurcation diagram or the solution. In the solution ASCII file, the first element of each row will be the 't' value and the following elements will be the values of the components at that 't' value. Such ASCII files can be readily parsed and plotted by external tools such as Gnuplot and MATLAB. For example, we assume that a bifurcation diagram object is contained in a variable \commandf{bd}, for instance, using \commandf{bd=loadbd('ab')}. If one wanted to have the bifurcation diagram returned as a Python list one would type \commandf{bd.toArray()}. Similarily, if one wanted to write out the bifurcation diagram to the file \commandf{outputfile} one would type \commandf{bd.writeRawFilename('outputfile')}. To get the solution with label \commandf{57} returned as a numpy array one would type \commandf{bd(57).toarray()}. Similarily, if one wanted to write out the solution to the file \commandf{outputfile} one would type \commandf{bd(57).writeRawFilename('outputfile')}. \section{ The \filef{.autorc} or \filef{autorc} File } Much of the default behavior of the \AUTO CLUI can be controlled by the \filef{.autorc} file. The \filef{.autorc} file can exist in either the main \AUTO directory, the users home directory, or the current directory. In the current directory it can also have the name \filef{autorc}, that is, without the dot. For any option which is defined in more then one file, the \filef{.autorc} file in the current directory (if it exists) takes precedence, followed by the \filef{.autorc} file in the users home directory (if it exists), and then the \filef{.autorc} file in the main \AUTO directory. Hence, options may be defined on either a per directory, per user, or global basis. The first section of the \filef{.autorc} file begins with the line \commandf{[AUTO\_command\_aliases]} and this section defines short names, or aliases, for the \AUTO CLUI commands. Each line thereafter is a definition of a command, similiar to \commandf{branchPoint =commandQueryBranchPoint}. The right hand side of the assignment is the internal \AUTO CLUI name for the command, while the left hand side is the desired alias. Aliases and internal names may be used interchangably, but the intention is that the aliases will be more commonly used. A default set of aliases is provided, and these aliases will be used in the examples in the rest of this Chapter. The default aliases are listed in the reference in Section~\ref{sec:clui reference}. %FIXME: Fix the documentation here {\em NOTE: Defaults for the plotting tool may be included in the .autorc file as well.} \section{ Plotting Tool}\label{clui:plotting} The plotting tool can be run by using the command \commandf{plot(bd)} to plot a bifurcation diagram object \parf{bd} after a calculation has been run, or using the command \commandf{plot()} to plot the files \filef{fort.7} and \filef{fort.8}, or using the command \commandf{plot('foo')} to plote the data in the files \filef{s.foo} and \filef{b.foo}. The menu bar provides two buttons. The \commandf{File} button brings up a menu which allows the user to save the current plot as a Postscript file or to quit the plotting tool. The \commandf{Options} button allows the plotter configuration options to be modified. The available options are decribed in Table~\ref{tbl:clui plotter specific options}. In addition, the options can be set and figures can be saved from within the CLUI. For example, the set of commands in Figure~\ref{exa:plotter_example} shows how to create a plot, change its background color to black, and save it. The demo script \filef{auto/07p/demo/python/plotter.py} contains several examples of changing options in plotters. The special argument \commandf{hide=True} to \commandf{plot} does not produce an on-screen plot, which is useful for quick automatic generation of saved figure files. If you are using matplotlib, then you will find seven icons that allow you to use various zoom functions: a home button to go back to the original plot, back and forward buttons to go back and forwards between zooms, a button to select pan/zoom mode, a button to select rectangular zoom mode, a button to which brings up sliders that adjust margins, and a floppy disk button that you can use to save the plot to a file. In ``zoom to rect'' mode, the left mouse button may be held down to create a box in the plot. When the left button is released the plot will zoom to the selected portion of the diagram. Similarly, the right mouse button can be used to zoom out. In ``pan/zoom'' mode, dragging with the left mouse button pressed pans (shifts) the graph, whereas dragging with the right mouse button zooms in and out. If you are \emph{not} using matplotlib, then pressing the right mouse button in the plotting window brings up a menu of buttons which control several aspects of the plotting window. The top two toggle buttons control what function the left button performs. The \commandf{print value} button causes the left button to print out the numerical value underneath the pointer when it is clicked. When \commandf{zoom} button is checked the left mouse button may be held down to create a box in the plot. When the left button is released the plot will zoom to the selected portion of the diagram. The \commandf{unzoom} button returns the diagram to the default zoom. The \commandf{Postscript} button allows the user to save the plot as a Postscript file. The \commandf{Configure...} button brings up the dialog for setting configuration options. \begin{figure}[htbp] {\small \begin{center} \begin{boxedverbatim} AUTO> p=plot() Created plot AUTO> p.config(bg="black") AUTO> p.savefig("black.eps") AUTO> p=plot(hide=True) Created plot AUTO> p.savefig("white.eps") \end{boxedverbatim} \end{center} } \caption[Configuring a plotter.] {This example shows how a plotter is created, how the background color may be changed to black, how a figure is saved, and how an invisible plot is saved to a file. All other configuration options are set similarily. Note, the above commands assume that the files fort.7 and fort.8 exist in the current directory. } \label{exa:plotter_example} \end{figure} \begin{longtable}{| l | l |} \hline Query string & Meaning \\ \hline 1\_1\_resonance\_symbol & The symbol to use for 1:1 resonance points. \\ \hline 1\_2\_resonance\_symbol & The symbol to use for 1:2 resonance points. \\ \hline 1\_3\_resonance\_symbol & The symbol to use for 1:3 resonance points. \\ \hline 1\_4\_resonance\_symbol & The symbol to use for 1:4 resonance points. \\ \hline azimuth & Azimuth of the axes in 3D plots. \\ \hline background & The background color of the plot. \\ \hline bifurcation\_column\_defaults & A set of bifurcation columns the user is likely to use. \\ \hline bifurcation\_coordnames & Names to use instead of PAR(1),... for bifurcation diagrams. \\ \hline bifurcation\_diagram & A parsed bifurcation diagram file to plot. \\ \hline bifurcation\_diagram\_filename & The filename of the bifurcation diagram to plot. \\ \hline bifurcation\_symbol & The symbol to use for bifurcation points. \\ \hline bifurcation\_x & The column to plot along the X-axis for bifurcation diagrams. \\ \hline bifurcation\_y & The column to plot along the Y-axis for bifurcation diagrams. \\ \hline bifurcation\_z & The column to plot along the Z-axis for bifurcation diagrams. \\ \hline bogdanov\_takens\_symbol & The symbol to use for Bogdanov-Takens points. \\ \hline bottom\_margin & The margin between the graph and the bottom edge. \\ \hline color\_list & A list of colors to use for multiple plots. \\ \hline coloring\_method & color\_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). \\ \hline cusp\_symbol & The symbol to use for Cusp points. \\ \hline d0, d1, d2, d3, d4 & Redefine d0, d1, d2, etc. setting to use with {\cal PyPLAUT} (\commandf{@pp}). \\ \hline dashes & List of dash, no-dash lengths for dashed lines. \\ \hline decorations & Turn on or off the axis, tick marks, etc. \\ \hline default\_option & Default d0, d1, d2, etc. setting to use with {\cal PyPLAUT} (\commandf{@pp}). \\ \hline elevation & Elevation of the axes in 3D plots. \\ \hline error\_symbol & The symbol to use for error points. \\ \hline even\_tick\_length & The length of the even tick marks. \\ \hline flip\_torus\_symbol & The symbol to use for flip-torus points. \\ \hline fold\_flip\_symbol & The symbol to use for fold-flip points. \\ \hline fold\_torus\_symbol & The symbol to use for fold-torus points. \\ \hline foreground & The background color of the plot. \\ \hline generalized\_hopf\_symbol & The symbol to use for Generalized Hopf points. \\ \hline grid & Turn on or off the grid. \\ \hline height & Height of the graph. \\ \hline hopf\_symbol & The symbol to use for Hopf bifurcation points. \\ \hline index & An array of indices to plot.\\ \hline label & An array of labels to plot, or 'all' for all labels.\\ \hline labelnames & A dictionary mapping names in \filef{fort.7} to axis labels.\\ \hline label\_defaults & A set of labels that the user is likely to use. \\ \hline left\_margin & The margin between the graph and the left edge. \\ \hline letter\_symbols & Whether to use letter (True) or symbols (False) for special points. \\ \hline limit\_point\_symbol & The symbol to use for limit points. \\ \hline line\_width & Width to use for lines and curves. \\ \hline mark\_t & The t value to marker with a small ball. \\ \hline maxx & The upper bound for the x-axis of the plot. \\ \hline maxy & The upper bound for the y-axis of the plot. \\ \hline maxz & The upper bound for the z-axis of the plot. \\ \hline minx & The lower bound for the x-axis of the plot. \\ \hline miny & The lower bound for the y-axis of the plot. \\ \hline minz & The lower bound for the z-axis of the plot. \\ \hline odd\_tick\_length & The length of the odd tick marks. \\ \hline period\_doubling\_symbol & The symbol to use for period doubling bifurcation points. \\ \hline ps\_colormode & The PostScript output mode: 'color', 'gray' or 'monochrome'. \\ \hline right\_margin & The margin between the graph and the left edge. \\ \hline runner & The runner object from which to get data. \\ \hline smart\_label & Whether to use a smart but slower label placement algorithm. \\ \hline special\_point\_colors & An array of colors used to mark special points. \\ \hline special\_point\_radius & The radius of the spheres used to mark special points. \\ \hline solution & A parsed solution file to plot. \\ \hline solution\_column\_defaults & A set of solution columns the user is likely to use.\\ \hline solution\_coordnames & Variable names to use instead of U(1),... for solutions. \\ \hline solution\_filename & The filename of the solution to plot. \\ \hline solution\_indepvarname & Variable name to use instead of 't' for solutions. \\ \hline solution\_x & The column to plot along the X-axis for solutions. \\ \hline solution\_y & The column to plot along the Y-axis for solutions. \\ \hline solution\_z & The column to plot along the Z-axis for solutions. \\ \hline stability & Turn on or off stability information using dashed curves. \\ \hline symbol\_font & The font to use for marker symbols. \\ \hline symbol\_color & The color to use for the marker symbols. \\ \hline tick\_label\_template & A string which defines the format of the tick labels. \\ \hline tick\_length & The length of the tick marks. \\ \hline top\_margin & The margin between the graph and the top edge. \\ \hline top\_title & The label for the top title. \\ \hline top\_title\_fontsize & The font size for the top title. \\ \hline torus\_symbol & The symbol to use for torus bifurcation points. \\ \hline torus\_torus\_symbol & The symbol to use for torus-torus points. \\ \hline type & The type of the plot, either ``solution'' or ``bifurcation''. \\ \hline use\_labels & Whether or not to display label numbers in the graph. \\ \hline use\_symbols & Whether or not to display bifurcation symbols in the graph. \\ \hline user\_point\_symbol & The symbol to use for user defined output points. \\ \hline width & Width of the graph. \\ \hline xlabel & The label for the x-axis. \\ \hline xlabel\_fontsize & The font size for the x-axis label. \\ \hline xticks & The number of ticks on the x-axis. \\ \hline ylabel & The label for the y-axis. \\ \hline ylabel\_fontsize & The font size for the y-axis label. \\ \hline yticks & The number of ticks on the y-axis. \\ \hline zero\_hopf\_symbol & The symbol to use for zero-Hopf points. \\ \hline zlabel & The label for the z-axis. \\ \hline zlabel\_fontsize & The font size for the z-axis label. \\ \hline zticks & The number of ticks on the z-axis. \\ \hline \caption[The options for the PyPLAUT plotting window.] {This table shows the options that can be set for the PyPLAUT plotting window and their meanings.} \label{tbl:clui plotter specific options} \end{longtable} \section{ The Plotting Tool PLAUT04} The \AUTO plotting tool {\cal PLAUT04} as described in Chapter~\ref{ch:PLAUT04}, can be run from the Python CLUI using the command \commandf{plot3} or \commandf{commandPlotter3D}, in a similar fashion to \commandf{plot}. It does not use the options that are used for the plotting window produced by \commandf{plot}. \section{ Quick Reference } \label{sec:clui quick reference} In this section we have created a table of all of the \AUTO CLUI commands, their abbreviations, and a one line description of what function they perform. Each command may be entered using its full name or any of its aliases. \begin{longtable}{|p{1.1in}|l|p{2.5in}|} \hline Command, Aliases & Long name & Description\\ \hline append ap & commandAppend & Append data files.\\ \hline cat & commandCat & Print the contents of a file\\ \hline cd & commandCd & Change directories.\\ \hline clean cl & commandClean & Clean the current directory.\\ \hline demo dm & commandCopyAndLoadDemo & Copy a demo into the current directory and load it.\\ \hline copy cp & commandCopyDataFiles & Copy data files.\\ \hline copydemo & commandCopyDemo & Copy a demo into the current directory.\\ \hline save sv & commandCopyFortFiles & Save data files.\\ \hline gui & commandCreateGUI & Show AUTOs graphical user interface.\\ \hline delete, dl & commandDeleteDataFiles & Delete data files.\\ \hline df deletefort & commandDeleteFortFiles & Clear the current directory of fort files.\\ \hline dlb & commandDeleteLabels & Delete special labels.\\ \hline dsp & commandDeleteSpecialPoints & Delete special points.\\ \hline double & commandDouble & Double a solution.\\ \hline man & commandInteractiveHelp & Get help on the AUTO commands.\\ \hline klb & commandKeepLabels & Keep special labels.\\ \hline ksp & commandKeepSpecialPoints & Keep special points.\\ \hline ls & commandLs & List the current directory.\\ \hline merge mb & commandMergeBranches & Merge branches in data files. \\ \hline move mv & commandMoveFiles & Move data-files to a new name.\\ \hline cn constantsget & commandParseConstantsFile & Get the current continuation constants.\\ \hline bt diagramandsolutionget & commandParseDiagramAndSolutionFile & Parse both bifurcation diagram and solution.\\ \hline dg diagramget & commandParseDiagramFile & Parse a bifurcation diagram.\\ \hline sl solutionget & commandParseSolutionFile & Parse solution file:\\ \hline plot p2 pl & commandPlotter & plotting of data.\\ \hline plot3 p3 & commandPlotter3D & PLAUT04 plotting of data.\\ \hline branchpoint br bp & commandQueryBranchPoint & Print the ``branch-point function''.\\ \hline eigenvalue ev eg & commandQueryEigenvalue & Print eigenvalues of Jacobian (algebraic case).\\ \hline floquet fl & commandQueryFloquet & Print the Floquet multipliers.\\ \hline hopf hb hp & commandQueryHopf & Print the value of the ``Hopf function''.\\ \hline iterations it & commandQueryIterations & Print the number of Newton interations.\\ \hline limitpoint lm lp & commandQueryLimitpoint & Print the value of the ``limit point function''.\\ \hline note nt & commandQueryNote & Print notes in info file.\\ \hline secondaryperiod sc sp & commandQuerySecondaryPeriod & Print value of ``secondary-periodic bif. fcn''.\\ \hline stepsize ss st & commandQueryStepsize & Print continuation step sizes.\\ \hline quit q & commandQuit & Quit the AUTO CLUI.\\ \hline relabel rl & commandRelabel & Relabel data files.\\ \hline run r rn & commandRun & Run AUTO.\\ \hline ch changeconstant cc & commandRunnerConfigFort2 & Modify continuation constants.\\ \hline hch & commandRunnerConfigFort12 & Modify HomCont continuation constants.\\ \hline load ld & commandRunnerLoadName & Load files into the AUTO runner.\\ \hline printconstant pc pr & commandRunnerPrintFort2 & Print continuation parameters.\\ \hline hpr & commandRunnerPrintFort12 & Print HomCont continuation parameters.\\ \hline shell & commandShell & Run a shell command.\\ \hline splabs & commandSpecialPointLabels & Return special labels.\\ \hline subtract sb & commandSubtractBranches & Subtract branches in data files.\\ \hline triple tr & commandTriple & Triple a solution.\\ \hline us userdata & commandUserData & Covert user-supplied data files.\\ \hline wait & commandWait & Wait for the user to enter a key.\\ \hline auto execfile ex & & Execute an AUTO CLUI script.\\ \hline demofile dmf & & Execute an AUTO CLUI script, line by line (demo mode). \\ \hline \end{longtable} For convenience, you can use ``!'' to run a shell command. Moreover the common shell commands \commandf{clear}, \commandf{less}, \commandf{mkdir}, \commandf{rmdir}, \commandf{cp}, \commandf{mv}, \commandf{rm}, \commandf{ls}, \commandf{cd}, and \commandf{cat}, and all \AUTO Unix commands that are described in Chapter~\ref{sec:command_mode} and start with an ``@''-sign can be entered directly, without the ``!''. \pagebreak \section{ Reference } \label{sec:clui reference} \subsection{Basic commands.} \label{sec:clui_ref_basic} \begin{description} \item[run] Run \AUTO. Type \commandf{r=run([data],[options])} to run \AUTO from solution data with the given \AUTO constants or file keyword options. The results are stored in the bifurcation diagram r which you can later print with \commandf{print r}, obtain branches from via r[0], r[1], ..., and obtain solutions from via r(3), r(5), r('LP2'), where 3 and 5 are label numbers, and 'LP2' refers to the second LP label. \commandf{run(data)} runs \AUTO in the following way for different types of \parf{data}: \begin{itemize} \item A solution: \AUTO starts from solution \parf{data}, with \AUTO constants \parf{data.c}. \item A bifurcation diagram: \AUTO start from the solution specified by the \AUTO constant \parf{IRS}, or if \parf{IRS} is not specified, the last solution in \parf{data}, \parf{data()[-1]}, with \AUTO constants \parf{data()[-1].c}. \item A string: \AUTO uses the solution in the file \filef{s.data} together with the constants in the files \filef{c.data}, and \filef{h.data}. Not all of these files need to be present. \end{itemize} If no solution \parf{data} is specified, then the global values from the \commandf{load} command (below) are used instead, where options which are not explicitly set retain their previous value. Keyword argument options can be \AUTO constants, such as \parf{DS=0.05}, or \parf{ISW=-1}, or specify a constant or solution file. These override the constants in \filef{s.c}, where applicable. See \commandf{load}:\\ \commandf{run(s,options)} is equivalent to \commandf{run(load(s,options))} Example: given a bifurcation diagram bd, with a branch point solution, switch branches and stop at the first Hopf bifurcation:\\ \commandf{hb = run(bd('BP1'),ISW=-1,STOP='HB1')} Special keyword arguments are \parf{sv} and \parf{ap}; \parf{sv} is also an \AUTO constant:\\ \commandf{run(bd('BP1'),ISW=-1,STOP='HB1',sv='hb',ap='all')}\\ saves to the files \filef{b.hb}, \filef{s.hb} and \filef{d.hb}, and appends to \filef{b.all}, \filef{s.all}, and \filef{d.all}. \textbf{Aliases:} r rn commandRun \item[load] Load files into the \AUTO runner or return modified solution data. Type \commandf{result=load([options])} to modify the \AUTO runner.\\ Type \commandf{result=load(data,[options])} to return possibly modified solution data.\\ The type of the result is a solution object. \commandf{load(data,[options])} returns a solution in the following way for different types of data: \begin{itemize} \item A solution: load returns the solution data, with \AUTO constants modified by options. \item A bifurcation diagram or a solution list: returns the solution specified by the \AUTO constant \parf{IRS}, or if \parf{IRS} is not specified, the last solution in \parf{s}. \item A string: \AUTO uses the solution in the file 's.s' together with the constants in the files 'c.s', and 'h.s'. Not all of these files need to be present. \item A Python list array or a numpy array representing a solution, returns a solution with the given contents. Such an array must be given column-wise, as [[t0, ..., tn], [x0, ..., xn], [y0, ..., yn], ...], or for a point solution as [x, y, z, ...]. \end{itemize} There are many possible options: \begin{verbatim} Long name Short name Description ------------------------------------------- equation e The equations file constants c The AUTO constants file homcont h The Homcont parameter file solution s The restart solution file NDIM,IPS,etc AUTO constants. BR,PT,TY,LAB Solution constants. \end{verbatim} If data is not specified or data is a string then options which are not explicitly set retain their previous value. For example one may type: \commandf{s=load(e='ab',c='ab.1')} to use \filef{ab.f90}, \filef{ab.f}, or \filef{ab.c} as the equations file and \filef{c.ab.1} as the constants file. Type \commandf{s=load('name')} to load all files with base 'name'. This does the same thing as running \commandf{s=load(e='name',c='name,h='name',s='name')}. You can also specify \AUTO Constants, e.g., \parf{DS=0.05}, or \parf{IRS=2}. Special values for \parf{DS} are \parf{'+'} (forwards) and \parf{'-'} (backwards).\\ Example: \commandf{s = load(s,DS='-')} changes \parf{s.c['DS']} to \parf{-s.c['DS']}. \textbf{Aliases:} ld commandRunnerLoadName \item[loadbd] Load bifurcation diagram files. Type \commandf{b=loadbd([options])} to load output files or output data. There are three possible options: \begin{verbatim} Long name Short name Description ------------------------------------------- bifurcationdiagram b The bifurcation diagram file solution s The solution file or list of solutions diagnostics d The diagnostics file \end{verbatim} Type \commandf{loadbd('name')} to load all files with base 'name'. This does the same thing as running\\ \commandf{loadbd(b='name',s='name,d='name')}.\\ \commandf{plot(b)} will then plot the 'b' and 's' components. Returns a bifurcation diagram object representing the files in b. \textbf{Aliases:} bd commandParseOutputFiles \item[save] Save data files. Type \commandf{save(x,'xxx')} to save bifurcation diagram \parf{x} to the files \filef{b.xxx}, \filef{s.xxx}, \filef{d.xxx}. Existing files with these names will be overwritten. If \parf{x} is a solution, a list of solutions, or does not contain any bifurcation diagram or diagnostics data, then only the file \filef{s.xxx} is saved to. Type \commandf{save('xxx')} to save the output-files \filef{fort.7}, \filef{fort.8}, \filef{fort.9}, to \filef{b.xxx}, \filef{s.xxx}, \filef{d.xxx}. Existing files with these names will be overwritten. \textbf{Aliases:} commandCopyFortFiles \item[append] Append data files. Type \commandf{append(x,'xxx')} to append bifurcation diagram x to the data-files \filef{b.xxx}, \filef{s.xxx}, and \filef{d.xxx}. This is equivalent to the command\\ \commandf{save(x+load('xxx'),'xxx')} Type \commandf{append('xxx',xxx)} to append existing data-files \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx} to bifurcation diagram x. This is equivalent to the command\\ \commandf{x=load('xxx')+x} Type \commandf{append('xxx')} to append the output-files \filef{fort.7}, \filef{fort.8}, \filef{fort.9}, to existing data-files \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx}. Type \commandf{append('xxx','yyy')} to append existing data-files \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx} to data-files \filef{s.yyy}, \filef{b.yyy}, and \filef{d.yyy}. \textbf{Aliases:} ap commandAppend \end{description} \subsection{Plotting commands.} \label{sec:clui_ref_plot} \begin{description} \item[plot] Plotting of data. Type \commandf{plot(x)} to run the graphics program PyPLAUT for the graphical inspection of bifurcation diagram or solution data in x. Type \commandf{plot('xxx')} to run the graphics program PyPLAUT for the graphical inspection of the data-files \filef{b.xxx} and \filef{s.xxx}. Type \commandf{plot()} to run the graphics program for the graphical inspection of the output-files \filef{fort.7} and \filef{fort.8}. Values also present in the file \filef{autorc}, such as \commandf{color\_list = "black green red blue orange"} can be provided as keyword arguments, as well as \commandf{hide=True} which hides the on-screen plot. The return value, for instance, \commandf{p} for \commandf{p=plot(x)} will be the handle for the graphics window. It has p.config() and p.savefig() methods that allow you to configure and save the plot. When plotting, see \commandf{help(p.config)} and \commandf{help(p.savefig)} for details. \textbf{Aliases:} p2 pl commandPlotter \item[plot3] Plotting of data using PLAUT04. Type \commandf{plot3(x)} to run the graphics program PLAUT04 for the graphical inspection of bifurcation diagram or solution data in x. Type \commandf{plot3('xxx')} to run the graphics program PLAUT04 for the graphical inspection of the data-files \filef{b.xxx} and \filef{s.xxx}. Type \commandf{plot3()} to run the graphics program PLAUT04 for the graphical inspection of the output-files \filef{fort.7} and \filef{fort.8}. Type \commandf{plot3(...,r3b=True)} to run PLAUT04 in restricted three body problem mode. \textbf{Aliases:} p3 commandPlotter3D \end{description} \subsection{File-manipulation.} \label{sec:clui_ref_files} \begin{description} \item[copy] Copy data files. Type \commandf{copy(name1, name2)}, or \commandf{copy(name1, name2, name3)}, or \commandf{copy(name1, name2, name3, name4)} to copy the data-files \filef{dir1/c.xxx}, \filef{dir1/b.xxx}, \filef{dir1/s.xxx}, and \filef{dir1/d.xxx}, to \filef{dir2/c.yyy}, \filef{dir2/b.yyy}, \filef{dir2/s.yyy}, and \filef{dir2/d.yyy}. Type \commandf{copy('xxx','yyy')} to copy the data-files \filef{c.xxx}, \filef{d.xxx}, \filef{b.xxx}, and \filef{h.xxx} to \filef{c.yyy}, \filef{d.yyy}, \filef{b.yyy}, and \filef{h.yyy}. The values of \filef{dir1/?.xxx} and \filef{dir2/?.yyy} are as follows, depending on whether \filef{name1} is a directory or \filef{name2} is a directory: \commandf{copy(name1, name2)}\\ no directory names: \filef{./?.name1} and \filef{./?.name2}\\ \filef{name1} is a directory: \filef{name1/?.name2} and \filef{./?.name2}\\ \filef{name2} is a directory: \filef{./?.name1} and \filef{name2/?.name1} \commandf{copy(name1, name2, name3)}\\ \filef{name1} is a directory: \filef{name1/?.name2} and \filef{./?.name3}\\ \filef{name2} is a directory: \filef{./?.name1} and \filef{name2/?.name3} \commandf{copy(name1, name2, name3, name4)}\\ \filef{name1/?.name2} and \filef{name3/?.name4} \textbf{Aliases:} cp commandCopyDataFiles \item[move] Move data-files to a new name. Type \commandf{move(name1, name2)}, or \commandf{move(name1, name2, name3)}, or \commandf{move(name1, name2, name3, name4)} to move the data-files \filef{dir1/b.xxx}, \filef{dir1/s.xxx}, and \filef{dir1/d.xxx}, to \filef{dir2/b.yyy}, \filef{dir2/s.yyy}, and \filef{dir2/d.yyy}, and copy the constants file \filef{dir1/c.xxx} to \filef{dir2/c.yyy}. The values of \filef{dir1/?.xxx} and \filef{dir2/?.yyy} are determined in the same way as for \commandf{copy} above. \textbf{Aliases:} mv commandMoveFiles \item[df] Clear the current directory of fort files. Type \commandf{df()} to clean the current directory. This command will delete all files of the form \filef{fort.*}. \textbf{Aliases:} deletefort commandDeleteFortFiles \item[clean] Clean the current directory. Type \commandf{clean()} to clean the current directory. This command will delete all files of the form \filef{fort.*}, \filef{*.*\~{}}, \filef{*.o}, and \filef{*.exe}. \textbf{Aliases:} cl commandClean \item[delete] Delete data files. Type \commandf{delete('xxx')} to delete the data-files \filef{d.xxx}, \filef{b.xxx}, and \filef{s.xxx} (if you are using the default filename templates). \textbf{Aliases:} dl commandDeleteDataFiles \end{description} \subsection{Diagnostics.} \label{sec:clui_ref_diagnostics} \begin{description} \item[limitpoint] Print the value of the ``limit point function''. Type \commandf{limitpoint(x)} to list the value of the ``limit point function'' in the diagnostics of the bifurcation diagram object \parf{x}. This function vanishes at a limit point (fold). Type \commandf{limitpoint()} to list the value of the ``limit point function'' in the output-file \filef{fort.9}. Type \commandf{limitpoint('xxx')} to list the value of the ``limit point function'' in the info file \filef{d.xxx}. \textbf{Aliases:} lm lp commandQueryLimitpoint \item[branchpoint] Print the ``branch-point function''. Type \commandf{branchpoint(x)} to list the value of the ``branch-point function'' in the diagnostics of the bifurcation diagram object \parf{x}. This function vanishes at a branch point. Type \commandf{branchpoint()} to list the value of the ``branch-point function'' in the output-file \filef{fort.9}. Type \commandf{branchpoint('xxx')} to list the value of the ``branch-point function'' in the info file \filef{d.xxx}. \textbf{Aliases:} br bp commandQueryBranchPoint \item[hopf] Print the value of the ``Hopf function''. Type \commandf{hopf(x)} to list the value of the ``Hopf function'' in the diagnostics of the bifurcation diagram object \parf{x}. This function vanishes at a Hopf bifurcation point. Type \commandf{hopf()} to list the value of the ``Hopf function'' in the output-file \filef{fort.9}. Type \commandf{hopf('xxx')} to list the value of the ``Hopf function'' in the info file \filef{d.xxx}. \textbf{Aliases:} hb hp commandQueryHopf \item[secondaryperiod] Print value of ``secondary-periodic bif. fcn''. Type \commandf{secondaryperiod(x)} to list the value of the ``secondary-periodic bifurcation function'' in the diagnostics of the bifurcation diagram object \parf{x}. This function vanishes at period-doubling and torus bifurcations. Type \commandf{secondaryperiod()} to list the value of the ``secondary-periodic bifurcation function'' in the output-file \filef{fort.9}. Type \commandf{secondaryperiod('xxx')} to list the value of the ``secondary-periodic bifurcation function'' in the info file \filef{d.xxx}. \textbf{Aliases:} sc sp commandQuerySecondaryPeriod \item[iterations] Print the number of Newton interations. Type \commandf{iterations(x)} to list the number of Newton iterations per continuation step in the diagnostics of the bifurcation diagram object \parf{x}. Type \commandf{iterations()} to list the number of Newton iterations per continuation step in \filef{fort.9}. Type \commandf{iterations('xxx')} to list the number of Newton iterations per continuation step in the info file \filef{d.xxx}. \textbf{Aliases:} it commandQueryIterations \item[note] Print notes in info file. Type \commandf{note(x)} to show any notes in the diagnostics of the bifurcation diagram object \parf{x}. Type \commandf{note()} to show any notes in the output-file \filef{fort.9}. Type \commandf{note('xxx')} to show any notes in the info file \filef{d.xxx}. \textbf{Aliases:} nt commandQueryNote \item[stepsize] Print continuation step sizes. Type \commandf{stepsize(x)} to list the continuation step size for each continuation step in the diagnostics of the bifurcation diagram object \parf{x}. Type \commandf{stepsize()} to list the continuation step size for each continuation step in \filef{fort.9}. Type \commandf{stepsize('xxx')} to list the continuation step size for each continuation step in the info file \filef{d.xxx}. \textbf{Aliases:} ss st commandQueryStepsize \item[eigenvalue] Print eigenvalues of Jacobian (algebraic case). Type \commandf{eigenvalue(x)} to list the eigenvalues of the Jacobian in the diagnostics of the bifurcation diagram object \parf{x}. (Algebraic problems.) Type \commandf{eigenvalue()} to list the eigenvalues of the Jacobian in \filef{fort.9}. Type \commandf{eigenvalue('xxx')} to list the eigenvalues of the Jacobian in the info file \filef{d.xxx}. \textbf{Aliases:} ev eg commandQueryEigenvalue \item[floquet] Print the Floquet multipliers. Type \commandf{floquet(x)} to list the Floquet multipliers in the diagnostics of the bifurcation diagram object \parf{x}. (Differential equations.) Type \commandf{floquet()} to list the in the output-file \filef{fort.9}. Type \commandf{floquet('xxx')} to list the Floquet multipliers in the info file \filef{d.xxx}. \textbf{Aliases:} fl commandQueryFloquet \end{description} \subsection{File-maintenance.} \label{sec:clui_ref_filemaint} \begin{description} \item[relabel] Relabel data files. Type \commandf{y=relabel(x)} to return the python object x, with the solution labels sequentially relabelled starting at 1, as a new object y. Type \commandf{relabel('xxx')} to relabel \filef{s.xxx} and \filef{b.xxx}. Backups of the original files are saved. Type \commandf{relabel('xxx','yyy')} to relabel the existing data-files \filef{s.xxx} and \filef{b.xxx} and save then to \filef{s.yyy} and \filef{b.yyy}; \filef{d.xxx} is copied to \filef{d.yyy}. \textbf{Aliases:} rl commandRelabel \item[double] Double a solution. Type \commandf{double()} to double the solution in \filef{fort.8}. Type \commandf{double('xxx')} to double the solution in \filef{s.xxx}. \textbf{Aliases:} db commandDouble \item[triple] Triple a solution. Type \commandf{triple()} to triple the solution in \filef{fort.8}. Type \commandf{triple('xxx')} to triple the solution in \filef{s.xxx}. \textbf{Aliases:} tr commandTriple \item[us] Convert user-supplied data files. Type \commandf{us('xxx')} to convert a user-supplied data file 'xxx.dat' to \AUTO format. The converted file is called 's.dat'. The original file is left unchanged. \AUTO automatically sets the period in {\tt PAR(11)}. Other parameter values must be set in 'STPNT'. (When necessary, {\tt PAR(11)} may also be redefined there.) The constants-file file 'c.xxx' must be present, as the \AUTO-constants 'NTST' and 'NCOL' are used to define the new mesh. Note: this technique has been obsoleted by the 'dat' \AUTO constant in Section~\ref{sec:dat}. \textbf{Aliases:} userdata commandUserData \item[dlb] Delete special labels. Type \commandf{dlb(x,list)} to delete the special points in list from the Python object x, which must be a solution list or a bifurcation diagram. Type \commandf{dlb(list,'xxx')} to delete from the data-files \filef{b.xxx} and \filef{s.xxx}.\\ Type \commandf{dlb(list,'xxx','yyy')} to save to \filef{b.yyy} and \filef{s.yyy} instead of \filef{?.xxx}.\\ Type \commandf{dlb(list)} to delete from \filef{fort.7} and \filef{fort.8}. \commandf{list} is a label number or type name code, or a list of those, such as 1, or [2, 3], or 'UZ' or ['BP', 'LP'], or it can be None or omitted to mean the special points ['BP', 'LP', 'HB', 'PD', 'TR', 'EP', 'MX'] Alternatively a boolean user-defined function \commandf{f} that takes a solution can be specified for \commandf{list}, such as \begin{verbatim} def f(s): return s["PAR(9)"]<0 \end{verbatim} where all solutions are deleted that satisfy the given condition, or \begin{verbatim} def f(s1,s2): return abs(s1["L2-NORM"] - s2["L2-NORM"]) < 1e-4 \end{verbatim} where all solutions are compared with each other and \commandf{s2} is deleted if the given condition is satisfied, which causes pruning of solutions that are close to each other. Type information is kept in the bifurcation diagram for plotting. \textbf{Alias:} commandDeleteLabels \item[klb] Keep special labels. Type \commandf{klb(x,list)} to only keep the special points in list in the Python object x, which must be a solution list or a bifurcation diagram. Type \commandf{klb(list,'xxx')} to keep them in the data-files \filef{b.xxx} and \filef{s.xxx}.\\ Type \commandf{klb(list,'xxx','yyy')} to save to \filef{b.yyy} and \filef{s.yyy} instead of \filef{?.xxx}.\\ Type \commandf{klb(list)} to keep them in \filef{fort.7} and \filef{fort.8}. \commandf{list} is a label number or type name code, or a list of those, such as 1, or [2, 3], or 'UZ' or ['BP', 'LP'], or it can be None or omitted to mean ['BP', 'LP', 'HB', 'PD', 'TR', 'EP', 'MX'], deleting 'UZ' and regular points. Alternatively a boolean user-defined function \commandf{f} that takes a solution can be specified for \commandf{list}, such as \begin{verbatim} def f(s): return s["PAR(9)"]<0 \end{verbatim} where only solutions are kept that satisfy the given condition. Type information is kept in the bifurcation diagram for plotting. \textbf{Alias:} commandKeepLabels \item[dsp] Delete special points. Type \commandf{dsp(x,list)} to delete the special points in list from the Python object x, which must be a solution list or a bifurcation diagram. Type \commandf{dsp(list,'xxx')} to delete from the data-files \filef{b.xxx}, and \filef{s.xxx}.\\ Type \commandf{dsp(list,'xxx','yyy')} to save to \filef{b.yyy} and \filef{s.yyy} instead of \filef{?.xxx}.\\ Type \commandf{dsp(list)} to delete from \filef{fort.7} and \filef{fort.8}. \commandf{list} is a label number or type name code, or a list of those, such as 1, or [2, 3], or 'UZ' or ['BP', 'LP'], or it can be None or omitted to mean the special points ['BP', 'LP', 'HB', 'PD', 'TR', 'EP', 'MX']\\ Alternatively a boolean user-defined function \commandf{f} that takes a solution can be specified for \commandf{list}, such as \begin{verbatim} def f(s): return s["PAR(9)"]<0 \end{verbatim} where all solutions are deleted that satisfy the given condition, or \begin{verbatim} def f(s1,s2): return abs(s1["L2-NORM"] - s2["L2-NORM"]) < 1e-4 \end{verbatim} where all solutions are compared with each other and \commandf{s2} is deleted if the given condition is satisfied, which causes pruning of solutions that are close to each other. Type information is \emph{not} kept in the bifurcation diagram. \textbf{Alias:} commandDeleteSpecialPoints \item[ksp] Keep special points. Type \commandf{ksp(x,list)} to only keep the special points in list in the Python object x, which must be a solution list or a bifurcation diagram. Type \commandf{ksp(list,'xxx')} to keep them in the data-files \filef{b.xxx}, and \filef{s.xxx}.\\ Type \commandf{ksp(list,'xxx','yyy')} to save to \filef{b.yyy} and \filef{s.yyy} instead of \filef{?.xxx}.\\ Type \commandf{ksp(list)} to keep them in \filef{fort.7} and \filef{fort.8}. \commandf{list} is a label number or type name code, or a list of those, such as 1, or [2, 3], or 'UZ' or ['BP', 'LP'], or it can be None or omitted to mean ['BP', 'LP', 'HB', 'PD', 'TR', 'EP', 'MX'], deleting 'UZ' and regular points.\\ Alternatively a boolean user-defined function \commandf{f} that takes a solution can be specified for \commandf{list}, such as \begin{verbatim} def f(s): return s["PAR(9)"]<0 \end{verbatim} where only solutions are kept that satisfy the given condition. Type information is \emph{not} kept in the bifurcation diagram. \textbf{Alias:} commandKeepSpecialPoints \item[merge] Merge branches in data files. Type \commandf{y=merge(x)} to return the python object x, with its branches merged into continuous curves, as a new object y. Type \commandf{merge('xxx')} to merge branches in \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx}. Backups of the original files are saved. Type \commandf{merge('xxx','yyy')} to merge branches in the existing data-files \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx} and save them to \filef{s.yyy}, \filef{b.yyy}, and \filef{d.yyy}. \textbf{Aliases:} mb commandMergeBranches \item[subtract] Subtract branches in data files. Type \commandf{z=subtract(x,y,ref)} to return the python object x, where, using interpolation, the first branch in y is subtracted from all branches in x, as a new object z. Use 'ref' (e.g., 'PAR(1)') as the reference column in y (only the first monotonically increasing or decreasing part is used). Type \commandf{subtract('xxx','yyy','ref')} to subtract, using interpolation, the first branch in \filef{b.yyy} from all branches in \filef{b.xxx}, and save the result in \filef{b.xxx}. A Backup of the original file is saved. Use optional arguments branch=m, and point=n, to denote the branch and first point on that branch within y or \filef{b.yyy}, where m,n are in {1,2,3,...}. \textbf{Aliases:} sb commandSubtractBranches \end{description} \subsection{Copying a demo.} \label{sec:clui_ref_demo} \begin{description} \item[demo] Copy a demo into the current directory and load it. Type \commandf{demo('xxx')} to copy all files from auto/07p/demos/xxx to the current user directory. Here 'xxx' denotes a demo name; e.g., 'abc'. To avoid the overwriting of existing files, always run demos in a clean work directory. NOTE: This command automatically performs the \commandf{load} command as well. \textbf{Aliases:} dm commandCopyAndLoadDemo \item[copydemo] Copy a demo into the current directory. Type \commandf{copydemo('xxx')} to copy all files from auto/07p/demos/xxx to the current user directory. Here 'xxx' denotes a demo name; e.g., 'abc'. To avoid the overwriting of existing files, always run demos in a clean work directory. \textbf{Aliases:} copydemo commandCopyDemo \end{description} \subsection{Python data structure manipulation functions.} \label{sec:clui_ref_python} All commands here, except for 'man', 'gui', and 'wait' are only provided for backwards compatibility. Alternatives are given. \begin{description} \item[man] Get help on the \AUTO commands. Type \commandf{man} to list all commands with a online help. Type \commandf{man xxx} or \commandf{help xxx} to get help for command \commandf{xxx}. \textbf{Aliases:} commandInteractiveHelp \item[cn] Get the current continuation constants. Type \commandf{cn('xxx')} to get a parsed version of the constants file \filef{c.xxx}. This is equivalent to the command\\ \commandf{loadbd('xxx').c} \textbf{Aliases:} constantsget commandParseConstantsFile \item[dg] Parse a bifurcation diagram. Type \commandf{dg('xxx')} to get a parsed version of the diagram file \filef{b.xxx}. This is equivalent to the command \commandf{loadbd('xxx')} but without the solutions in \filef{s.xxx} and without the diagnostics in \filef{d.xxx}. \textbf{Aliases:} diagramget commandParseDiagramFile \item[sl] Parse solution file: Type \commandf{sl('xxx')} to get a parsed version of the solution file \filef{s.xxx}. This is equivalent to the command\\ \commandf{loadbd('xxx')()} \textbf{Aliases:} solutionget commandParseSolutionFile \item[bt] Parse both bifurcation diagram and solution. Type \commandf{bt('xxx')} to get a parsed version of the diagram file \filef{b.xxx} and solution file \filef{s.xxx}. This is equivalent to the command \commandf{loadbd('xxx')} but without the diagnostics in \filef{d.xxx}. \textbf{Aliases:} diagramandsolutionget commandParseDiagramAndSolutionFile \item[ch] Modify continuation constants. Type \commandf{ch('xxx',yyy)} to change the constant \parf{'xxx'} to have value \parf{yyy}. This is equivalent to the command\\ \commandf{s=load(s,xxx=yyy)}\\ where \parf{s} is a solution. \textbf{Aliases:} changeconstant cc commandRunnerConfigFort2 \item[hch] Modify HomCont continuation constants. Type \commandf{hch('xxx',yyy)} to change the HomCont constant \parf{'xxx'} to have value \parf{yyy}. This is equivalent to the command\\ \commandf{s=load(s,xxx=yyy)}\\ where \parf{s} is a solution. \textbf{Aliases:} commandRunnerConfigFort12 \item[pr] Print continuation parameters. Type \commandf{pr()} to print all the parameters. Type \commandf{pr('xxx')} to return the parameter 'xxx'. These commands are equivalent to the commands\\ \commandf{print s.c}\\ \commandf{print s.c['xxx']}\\ where \parf{s} is a solution. \textbf{Aliases:} pc pr printconstant commandRunnerPrintFort2 \item[hpr] Print HomCont continuation parameters. Type \commandf{hpr()} to print all the HomCont parameters. Type \commandf{hpr('xxx')} to return the HomCont parameter 'xxx'. These commands are equivalent to the commands\\ \commandf{print s.c}\\ \commandf{print s.c['xxx']}\\ where \parf{s} is a solution. \textbf{Aliases:} commandRunnerPrintFort12 \item[splabs] Return special labels. Type \commandf{splabs('xxx',typename)} to get a list of labels with the specified typename, where typename can be one of 'EP', 'MX', 'BP', 'LP', 'UZ', 'HB', 'PD', 'TR', or 'RG'. This is equivalent to the command\\ \commandf{load('xxx')(typename)}\\ which gives a list of the solutions themselves; \commandf{load('xxx')(typename).getLabels()}\\ returns the list of labels. Or use \commandf{splabs(s,typename)} where \parf{s} is a parsed solution from \commandf{sl()}. This is equivalent to the command\\ \commandf{s(typename).getLabels()} \textbf{Aliases:} commandSpecialPointLabels \item[wait] Wait for the user to enter a key. Type \commandf{wait()} to have the \AUTO interface wait until the user hits any key (mainly used in scripts). \textbf{Aliases:} commandWait \item[quit] Quits the \AUTO CLUI \textbf{Aliases:} q commandQuit \item[gui] Show \AUTO's graphical user interface. Type \commandf{gui()} to start \AUTO's graphical user interface. NOTE: This command is not implemented yet. \textbf{Aliases:} commandCreateGUI \end{description} \subsection{Shell Commands.} \label{sec:clui_ref_shell} \begin{description} \item[cat] Print the contents of a file Type \commandf{cat xxx} to list the contents of the file \filef{xxx}. \textbf{Aliases:} commandCat \item[cd] Change directories. Type \commandf{cd xxx} to change to the directory \filef{xxx}. This command understands both shell variables and home directory expansion. \textbf{Aliases:} commandCd \item[ls] List the current directory. Type \commandf{ls} to run the system \commandf{ls} command in the current directory. This command will accept whatever arguments are accepted by the Unix command \commandf{ls}. \textbf{Aliases:} commandLs \item[shell] Run a shell command. Type \commandf{shell('xxx')} to run the command \commandf{xxx} in the Unix shell and display the results in the \AUTO command line user interface. \textbf{Aliases:} commandShell \end{description} %============================================================================== %============================================================================== \chapter{ Running {\cal AUTO} using Unix Commands.} \label{sec:command_mode} %============================================================================== %============================================================================== Apart from the Python commands described in the previous chapter, {\cal AUTO} can also be run with the GUI described in Chapter~\ref{ch:GUI}, or using the Unix commands described below. These Unix commands run both directly in the shell and at the {\tt AUTO} Python prompt. The {\cal AUTO} aliases must have been activated; see Section~\ref{sec:Installation}; and an equations-file {\tt xxx.f90} and a corresponding constants-file {\tt c.xxx} (see Section~\ref{ch:User_supplied_files}) must be in the current user directory. \\ {\it Do not run {\cal AUTO} in the directory {\tt auto/07p} or in any of its subdirectories.} Most commands only need a plain Unix shell but some use \python: the commands that depend on \python are \commandf{@cnvc}, \commandf{@dlb}, \commandf{@dsp}, \commandf{@klb}, \commandf{@ksp}, \commandf{@lbf}, \commandf{@ll}, \commandf{@ls}, \commandf{@mb}, \commandf{@pp}, and \commandf{@sb}. \section{ Basic commands.} \begin{itemize} \item[\tt @r]: Type \commandf{@r xxx} to run {\cal AUTO}. Restart data, if needed, are expected in {\tt s.xxx}, and {\cal AUTO}-constants in {\tt c.xxx}. This is the simplest way to run {\cal AUTO}. \item[-] Type \commandf{@r xxx yyy} to run {\cal AUTO} with equations-file {\tt xxx.f90} and restart data-file {\tt s.yyy}. {\cal AUTO}-constants must be in {\tt c.xxx}. \item[-] Type \commandf{@r xxx yyy zzz} to run {\cal AUTO} with equations-file {\tt xxx.f90}, restart data-file {\tt s.yyy} and constants-file {\tt c.zzz}. \item[\tt @R]~: The command \commandf{@R xxx} is equivalent to the command \commandf{@r xxx} above. \item[-] Type \commandf{@R xxx i} to run {\cal AUTO} with equations-file {\tt xxx.f90}, constants-file {\tt c.xxx.i} and, if needed, restart data-file {\tt s.xxx}. \item[-] Type \commandf{@R xxx i yyy} to run {\cal AUTO} with equations-file {\tt xxx.f90}, constants-file {\tt c.xxx.i} and restart data-file {\tt s.yyy}. \item[-] Use \commandf{@@R} on case-insensitive file systems. \item[\tt @sv]~: Type \commandf{@sv xxx} to save the output-files {\tt fort.7}, {\tt fort.8}, {\tt fort.9}, as {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, respectively. Existing files by these names will be deleted. \item[\tt @ap]~: Type \commandf{@ap xxx} to append the output-files {\tt fort.7}, {\tt fort.8}, {\tt fort.9}, to existing data-files {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, resp. \item[-] Type \commandf{@ap xxx yyy} to append {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, to {\tt b.yyy}, {\tt s.yyy}, {\tt d.yyy}, resp. \item[\tt @ll]~: Type \commandf{@ll} to list all solutions in \filef{fort.8}.\\ Type \commandf{@ll xxx} to list all solutions in \filef{s.xxx}. \item[\tt @ls]~: Type \commandf{@ls} to list the abbreviated contents of \filef{fort.7}.\\ Type \commandf{@ls xxx} to list the abbreviated contents of \filef{b.xxx}.\\ The contents are shown in a similar format as the screen output of AUTO runs. \item[\tt @lbf]~: Type \commandf{@lbf} to list the contents of \filef{fort.7}.\\ Type \commandf{@lbf xxx} to list the contents of \filef{b.xxx}.\\ The contents are shown with less accuracy (6 instead of 11 significant figures) than in the actual file for easier viewing. \end{itemize} \section{ Plotting commands.} \begin{itemize} \item[\tt @pp]~: Type \commandf{@pp xxx} to run the graphics program {\cal PyPLAUT} (See Chapter~\ref{ch:PLAUT}) for the graphical inspection of the data-files {\tt b.xxx} and {\tt s.xxx}. \item[-] Type \commandf{@pp} to run the graphics program {\cal PyPLAUT} for the graphical inspection of the output-files {\tt fort.7} and {\tt fort.8}. \item[\tt @pl]~: The command \commandf{@pl} is equivalent to {\tt @pp} but runs the graphics program {\cal PLAUT04} instead. (See Chapter~\ref{ch:PLAUT04}) \item[\tt @r3b]~: The command \commandf{@r3b} is equivalent to {\tt @pp} but runs the graphics program {\cal PLAUT04} instead in R3B mode. (See Chapter~\ref{ch:PLAUT04}) \item[\tt @p]~: The command \commandf{@p} is equivalent to {\tt @pp} but runs the graphics program {\cal PLAUT} instead. (See Chapter~\ref{ch:PLAUT}) \item[\tt @ps]~: Type \commandf{@ps fig.x} to convert a saved {\cal PLAUT} figure {\tt fig.x} from compact {\cal PLOT10} format to {\cal PostScript} format. The converted file is called {\tt fig.x.ps}. The original file is left unchanged. \end{itemize} \section{ File-manipulation.} \begin{itemize} \item[\tt @cp]~: Type \commandf{@cp name1 name2}, or \commandf{@cp name1 name2 name3}, or \commandf{@cp name1 name2 name3 name4} to copy the data-files \filef{dir1/c.xxx}, \filef{dir1/b.xxx}, \filef{dir1/s.xxx}, and \filef{dir1/d.xxx}, to \filef{dir2/c.yyy}, \filef{dir2/b.yyy}, \filef{dir2/s.yyy}, and \filef{dir2/d.yyy}. The values of \filef{dir1/?.xxx} and \filef{dir2/?.yyy} are as follows, depending on whether \filef{name1} is a directory or \filef{name2} is a directory: \commandf{@cp name1 name2}\\ no directory names: \filef{./?.name1} and \filef{./?.name2}\\ \filef{name1} is a directory: \filef{name1/?.name2} and \filef{./?.name2}\\ \filef{name2} is a directory: \filef{./?.name1} and \filef{name2/?.name1} \commandf{@cp name1 name2 name3}\\ \filef{name1} is a directory: \filef{name1/?.name2} and \filef{./?.name3}\\ \filef{name2} is a directory: \filef{./?.name1} and \filef{name2/?.name3} \commandf{@cp name1 name2 name3 name4}\\ \filef{name1/?.name2} and \filef{name3/?.name4} \item[\tt @mv]~: Type \commandf{@mv name1 name2}, or \commandf{@mv name1 name2 name3)}, or \commandf{@mv name1 name2 name3 name4} to move the data-files \filef{dir1/b.xxx}, \filef{dir1/s.xxx}, and \filef{dir1/d.xxx}, to \filef{dir2/b.yyy}, \filef{dir2/s.yyy}, and \filef{dir2/d.yyy}, and copy the constants file \filef{dir1/c.xxx} to \filef{dir2/c.yyy}. The values of \filef{dir1/?.xxx} and \filef{dir2/?.yyy} are determined in the same way as for \commandf{@cp} above. \item[\tt @df]~: Type \commandf{@df} to delete the output-files {\tt fort.7}, {\tt fort.8}, {\tt fort.9}. \item[\tt @cl]~: Type \commandf{@cl} to clean the current directory. This command will delete all files of the form {\tt fort.*}, {\tt *.o}, {\tt *.*\~{}}, and {\tt *.exe}. \item[\tt @dl]~: Type \commandf{@dl xxx} to delete the data-files {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}. \item[\tt @cnvc]~: Type \commandf{@cnvc xxx yyy} to convert old-format constants files \filef{c.xxx} and \filef{h.xxx} to a new-format constant file \filef{c.yyy}.\\ The command \commandf{@cnvc xxx} overwrites the file \filef{c.xxx} with the new style file and deletes \filef{h.xxx} if it exists. \item[\tt @rn]~: Type \commandf{@rn} to rename, within the current directory, all old-named constants, HomCont, bifurcation diagram, and solution files starting with \filef{r.}, \filef{s.}, \filef{p.}, and \filef{q.} to files with the new prefixes \filef{c.}, \filef{h.}, \filef{b.}, and \filef{s.}. \item[\tt @rc]~: Type \commandf{@rc} to do a recovery by swapping the backup files \filef{fort.7\~{}} and \filef{fort.8\~{}} with the files \filef{fort.7} and \filef{fort.8}.\\ Type \commandf{@rc xxx} to do a recovery by swapping the backup files \filef{b.xxx} and \filef{s.xxx} with the files \filef{b.xxx\~{}} and \filef{s.xxx\~{}}. \item[\tt @gz]~: Type \commandf{@gz} to compress, using \commandf{gzip} all output files in the current directory. \item[\tt @uz]~: Type \commandf{@uz} to decompress, using \commandf{unzip} all output files in the current directory. \item[\tt @sr]~: Type \commandf{@sr xxx y} to copy \filef{c.xxx} to \filef{c.xxx.y}. \end{itemize} \section{ Diagnostics.} \begin{itemize} \item[\tt @lp]~: Type \commandf{@lp} to list the value of the ``limit point function'' in the output-file {\tt fort.9}. This function vanishes at a limit point (fold). \item[-] Type \commandf{@lp xxx} to list the value of the ``limit point function'' in the data-file {\tt d.xxx}. This function vanishes at a limit point (fold). \item[\tt @bp]~: Type \commandf{@bp} to list the value of the ``branch-point function'' in the output-file {\tt fort.9}. This function vanishes at a branch point. \item[-] Type \commandf{@bp xxx} to list the value of the ``branch-point function'' in the data-file {\tt d.xxx}. This function vanishes at a branch point. \item[\tt @hb]~: Type \commandf{@hb} to list the value of the ``Hopf function'' in the output-file {\tt fort.9}. This function vanishes at a Hopf bifurcation point. \item[-] Type \commandf{@hb xxx} to list the value of the ``Hopf function'' in the data-file {\tt d.xxx}. This function vanishes at a Hopf bifurcation point. \item[\tt @ho]~: The command \commandf{@ho} is an alias to \commandf{@hb} above. \item[\tt @sp]~: Type \commandf{@sp} to list the value of the ``secondary-periodic bifurcation function'' in the output-file {\tt fort.9}. This function vanishes at period-doubling and torus bifurcations. \item[-] Type \commandf{@sp xxx} to list the value of the ``secondary-periodic bifurcation function'' in the data-file {\tt d.xxx}. This function vanishes at period-doubling and torus bifurcations. \item[\tt @it]~: Type \commandf{@it} to list the number of Newton iterations per continuation step in {\tt fort.9}. \item[-] Type \commandf{@it xxx} to list the number of Newton iterations per continuation step in {\tt d.xxx}. \item[\tt @st]~: Type \commandf{@st} to list the number of stable eigenvalues or stable Floquet multipliers per continuation step in {\tt fort.9}. \item[\tt @ss]~: Type \commandf{@st} to list the continuation step size for each continuation step in {\tt fort.9}. \item[-] Type \commandf{@st xxx} to list the continuation step size for each continuation step in {\tt d.xxx}. \item[\tt @ev]~: Type \commandf{@ev} to list the eigenvalues of the Jacobian in {\tt fort.9}. (Algebraic problems.) \item[-] Type \commandf{@ev xxx} to list the eigenvalues of the Jacobian in {\tt d.xxx}. (Algebraic problems.) \item[\tt @fl]~: Type \commandf{@fl} to list the Floquet multipliers in the output-file {\tt fort.9}. (Differential equations.) \item[-] Type \commandf{@fl xxx} to list the Floquet multipliers in the data-file {\tt d.xxx}. (Differential equations.) \item[\tt @no]~: Type \commandf{@no} to show any notes in {\tt fort.9}. \item[-] Type \commandf{@no xxx} to show any notes in {\tt d.xxx}. \end{itemize} \section{ File-editing.} \begin{itemize} \item[\tt @e7]~: To use the vi editor to edit the output-file {\tt fort.7}. \item[\tt @e8]~: To use the vi editor to edit the output-file {\tt fort.8}. \item[\tt @e9]~: To use the vi editor to edit the output-file {\tt fort.9}. \item[\tt @j7]~: To use the SGI jot editor to edit the output-file {\tt fort.7}. \item[\tt @j8]~: To use the SGI jot editor to edit the output-file {\tt fort.8}. \item[\tt @j9]~: To use the SGI jot editor to edit the output-file {\tt fort.9}. \end{itemize} \section{ File-maintenance.} \begin{itemize} \item[\tt @rl]~: Type \commandf{@rl} to sequentially relabel solutions with the numbers $1,2,3,\ldots$ in the output-files {\tt fort.7} and {\tt fort.8}. The original files are backed up as {\tt fort.7$\sim$} and {\tt fort.8$\sim$}. \item[-] Type \commandf{@rl xxx} to relabel solutions in the data-files {\tt b.xxx} and {\tt s.xxx}. The original files are backed up as {\tt b.xxx$\sim$} and {\tt s.xxx$\sim$}. \item[-] Type \commandf{@rl xxx yyy} to relabel solutions in the data-files {\tt b.xxx} and {\tt s.xxx}. The modified files are written as {\tt b.yyy} and {\tt s.yyy}. \item[\tt @lb]~: Type \commandf{@lb} to run an interactive utility program for listing, deleting and relabeling solutions and branches in the output-files {\tt fort.7} and {\tt fort.8}. The original files are backed up as {\tt fort.7$\sim$} and {\tt fort.8$\sim$}. \item[-] Type \commandf{@lb xxx} to list, delete and relabel solutions and branches in the data-files {\tt b.xxx} and {\tt s.xxx}. The original files are backed up as {\tt b.xxx$\sim$} and {\tt s.xxx$\sim$}. \item[-] Type \commandf{@lb xxx yyy} to list, delete and relabel solutions in the data-files {\tt b.xxx} and {\tt s.xxx}. The modified files are written as {\tt b.yyy} and {\tt s.yyy}. \item[\tt @LB]~: Type \commandf{@LB} or \commandf{@@LB} on case-insensitive file systems is equivalent to \commandf{@lb} above but moves instead of copies files so that it is much quicker but interrupts may be harmful. \item[\tt @fc]~: Type \commandf{@fc xxx} to convert a user-supplied data file {\tt xxx.dat} to {\cal AUTO} format. The converted file is called {\tt s.dat}. The original file is left unchanged. {\cal AUTO} automatically sets the period in {\tt PAR(11)}. Other parameter values must be set in {\tt STPNT}. (When necessary, {\tt PAR(11)} may also be redefined there.) The constants-file file {\tt c.xxx} must be present, as the {\cal AUTO}-constants {\tt NTST} and {\tt NCOL} (Sections~\ref{sec:NTST} and \ref{sec:NCOL}) are used to define the new mesh. Note: this technique has been obsoleted by the 'dat' AUTO constant in Section~\ref{sec:dat}. \item[\tt @db]~: Type \commandf{@db} to double the solution in \filef{fort.8}. Type \commandf{@db xxx} to double the solution in \filef{s.xxx}. \item[\tt @tr]~: Type \commandf{@tr} to triple the solution in \filef{fort.8}. Type \commandf{@tr xxx} to triple the solution in \filef{s.xxx}. \item[\tt @dlb]~: Type \commandf{@dlb} to delete all special labels in \filef{fort.7} and \filef{fort.8}. Backups are made.\\ Type \commandf{@dlb xxx} to delete all special labels in \filef{b.xxx} and \filef{s.xxx}. Backups are made.\\ Type \commandf{@dlb xxx yyy} to delete all special labels in \filef{b.xxx} and \filef{s.xxx}. The output is written to \filef{b.yyy} and \filef{s.yyy}.\\ Optionally, give an argument of the form \commandf{-UZ}, \commandf{-HB}, \commandf{-LP}, \commandf{-EP}, \commandf{-PD}, \commandf{-TR}, \commandf{-BP}, \commandf{-MX}, or \commandf{-RG} to remove all labels with the given type, as in \commandf{@dlb -UZ xxx}; otherwise only labels with type UZ and regular labels are kept.\\ Type information is kept in the bifurcation diagram for plotting. \item[\tt @klb]~: Type \commandf{@klb} to keep all special labels in \filef{fort.7} and \filef{fort.8}. Backups are made.\\ Type \commandf{@klb xxx} to keep all special labels in \filef{b.xxx} and \filef{s.xxx}. Backups are made.\\ Type \commandf{@klb xxx yyy} to keep all special labels in \filef{b.xxx} and \filef{s.xxx}. The output is written to \filef{b.yyy} and \filef{s.yyy}.\\ Optionally, give an argument of the form \commandf{-UZ}, \commandf{-HB}, \commandf{-LP}, \commandf{-EP}, \commandf{-PD}, \commandf{-TR}, \commandf{-BP}, \commandf{-MX}, or \commandf{-RG} to keep all labels with the given type, as in \commandf{@klb -UZ xxx} and remove all others; otherwise all labels are kept except for labels with type UZ and regular labels.\\ Type information is kept in the bifurcation diagram for plotting. \item[\tt @dsp]~: The command \commandf{@dsp} is equivalent to the command \commandf{@dlb} above, except that type information is \emph{not} kept in the bifurcation diagram for plotting. \item[\tt @ksp]~: The command \commandf{@ksp} is equivalent to the command \commandf{@klb} above, except that type information is \emph{not} kept in the bifurcation diagram for plotting. \item[\tt @dlp]~: The command \commandf{@dlp} is equivalent to the command \commandf{@dsp -LP} above. \item[\tt @kbp]~: The command \commandf{@kbp} is equivalent to the command \commandf{@ksp -BP} above. \item[\tt @klp]~: The command \commandf{@klp} is equivalent to the command \commandf{@ksp -LP} above. \item[\tt @kuz]~: The command \commandf{@kuz} is equivalent to the command \commandf{@ksp -UZ} above. \item[\tt @rd]~: Type \commandf{@rd} to reduce the solution in \filef{fort.7} and \filef{fort.8}.\\ Type \commandf{@rd xxx} to reduce the solution in \filef{b.xxx} and \filef{s.xxx}.\\ Reducing means that all even regular point solutions (from \parf{NPR}: the 2nd, 4th, 6th, etc.) are deleted from the files. \item[\tt @RD]~: The commands \commandf{@RD} and \commandf{@@RD} (for case-insensitive file systems) are equivalent to \commandf{@rd} above but are faster, though not reliable when interrupting, by using moves instead of copies. \item[\tt @mb]~: Type \commandf{@mb} to merge branches into continuous curves in \filef{fort.7}, \filef{fort.8}, and \filef{fort.9}. Backups of the original files are saved.\\ Type \commandf{@mb xxx} to merge branches in \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx}. Backups of the original files are saved.\\ Type \commandf{@mb xxx yyy} to merge branches in \filef{s.xxx}, \filef{b.xxx}, and \filef{d.xxx}, and save them to \filef{s.yyy}, \filef{b.yyy}, and \filef{d.yyy}. \item[\tt @sb]~: Type \commandf{@sb xxx yyy ref} to subtract, using interpolation, the first branch in \filef{b.yyy} from all branches in \filef{b.xxx}, and save the result in \filef{b.xxx}. Use \commandf{ref} (e.g., \commandf{PAR(1)}) as the reference column in \filef{b.yyy}. (only the first monotonically increasing or decreasing part is used). A Backup of the original file is saved. Use optional fourth and fifth arguments \commandf{m}, and \commandf{n}, to denote the branch $m$ and first point $n$ on that branch within \filef{b.yyy}, where $m,n$ are in $\{1,2,3,\ldots\}$. \item[\tt @zr]~: Type \commandf{@zr xxx} to zero all small numbers, with absolute value less than $10^{-16}$ in \filef{s.xxx}. A backup file is made. \end{itemize} \section{ HomCont commands.} Note that the \commandf{@h} and \commandf{@H} are obsolete with new-style constants files, where HomCont constants can be included in the main constant file with a {\tt c.} prefix. \begin{itemize} \item[\tt @h]~: Use {\tt @h} instead of {\tt @r} when using {\cal HomCont}, i.e., when {\tt IPS}=9 (see Chapter~\ref{ch:HomCont}). Type \commandf{@h xxx} to run {\cal AUTO}/{\cal HomCont}. Restart data, if needed, are expected in {\tt s.xxx}, {\cal AUTO}-constants in {\tt c.xxx} and {\cal HomCont}-constants in {\tt h.xxx}. \item[-] Type \commandf{@h xxx yyy} to run {\cal AUTO}/{\cal HomCont} with equations-file {\tt xxx.f90} and restart data-file {\tt s.yyy}. {\cal AUTO}-constants must be in {\tt c.xxx} and {\cal HomCont}-constants in {\tt h.xxx}. \item[-] Type \commandf{@h xxx yyy zzz} to run {\cal AUTO}/{\cal HomCont} with equations-file {\tt xxx.f90}, restart data-file {\tt s.yyy} and constants-files {\tt c.zzz} and {\tt h.zzz}. \item[\tt @H]~: The command \commandf{@H xxx} is equivalent to the command \commandf{@h xxx} above. \item[-] Type \commandf{@H xxx i} to run {\cal AUTO}/{\cal HomCont} with equations-file {\tt xxx.f90} and constants-files {\tt c.xxx.i} and {\tt h.xxx.i} and, if needed, restart data-file {\tt s.xxx}. \item[-] Type \commandf{@H xxx i yyy} to run {\cal AUTO}/{\cal HomCont} with equations-file {\tt xxx.f90}, constants-files {\tt c.xxx.i} and {\tt h.xxx.i}, and restart data-file {\tt s.yyy}. \item[-] Use \commandf{@@H} on case-insensitive file systems. \end{itemize} \section{ Copying a demo.} \begin{itemize} \item[\tt @dm]~: Type \commandf{@dm xxx} to copy all files from {\tt auto/07p/demos/xxx} to the current user directory. Here {\tt xxx} denotes a demo name; e.g., {\tt abc}. Note that the \commandf{@dm} command also copies \filef{.auto} files to the current user directory. To avoid the overwriting of existing files, always run demos in a clean work directory. \end{itemize} \section{ Viewing the manual.} \begin{itemize} \item[\tt @mn]~: Use {\cal gv} or {\cal evince} to view the PDF version of this manual. \end{itemize} \newpage %============================================================================== %============================================================================== \chapter{ Output Files.} \label{ch:Output_files} %============================================================================== %============================================================================== {\cal AUTO} writes to standard output and three output-files~: \begin{itemize} \item[-] standard output:~ A summary of the computation is written to standard output, which usually corresponds to the window in which {\cal AUTO} is run. Only special, labeled solution points are noted, namely those listed in Tables~\ref{tbl:Solution_Types} and \ref{tbl:Codim2_Solution_Types} The letter codes in the Table are used in the screen output. The numerical codes are used internally and in the {\tt fort.7} and {\tt fort.8} output-files described below. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | l |} \hline BP & (1) & Branch point (algebraic systems) \\ \hline LP & (2) & Fold (algebraic systems) \\ \hline HB & (3) & Hopf bifurcation \\ \hline & (4) & User-specified regular output point \\ \hline UZ & (-4) & Output at user-specified parameter value \\ \hline LP & (5) & Fold (differential equations) \\ \hline BP & (6) & Branch point (differential equations) \\ \hline PD & (7) & Period doubling bifurcation \\ \hline TR & (8) & Torus bifurcation \\ \hline EP & (9) & End point of family; normal termination \\ \hline MX & (-9) & Abnormal termination; no convergence \\ \hline \end{tabular} \caption{Solution Types.} \label{tbl:Solution_Types} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | l |} \hline BT & (-21) & Bogdanov-Takens bifurcation on fold curve (algebraic systems)\\ \hline BT & (-31) & Bogdanov-Takens bifurcation on Hopf curve \\ \hline CP & (-22) & Cusp bifurcation on fold curve (algebraic systems)\\ \hline GH & (-32) & Generalized Hopf bifurcation on Hopf curve \\ \hline ZH & (-13) & Zero-Hopf on BP curve (algebraic systems)\\ \hline ZH & (-23) & Zero-Hopf on Fold curve (algebraic systems)\\ \hline ZH & (-33) & Zero-Hopf on Hopf curve \\ \hline R1 & (-25) & 1:1 resonance on Fold (maps) \\ \hline R1 & (-55) & 1:1 resonance on Fold (periodic solutions) \\ \hline R1 & (-85) & 1:1 resonance on Torus (periodic solutions, maps) \\ \hline R2 & (-76) & 1:2 resonance on PD (periodic solutions, maps) \\ \hline R2 & (-86) & 1:2 resonance on Torus (periodic solutions, maps) \\ \hline R3 & (-87) & 1:3 resonance on Torus (periodic solutions, maps) \\ \hline R4 & (-88) & 1:4 resonance on Torus (periodic solutions, maps) \\ \hline LPD & (28) & Fold-flip bifurcation on Fold (maps) \\ \hline LPD & (78) & Fold-flip bifurcation on PD (maps) \\ \hline LTR & (23) & Fold-torus bifurcation on Fold (maps) \\ \hline LTR & (83) & Fold-torus bifurcation on Torus (maps) \\ \hline PTR & (77) & Flip-torus bifurcation on PD (maps) \\ \hline PTR & (87) & Flip-torus bifurcation on Torus (maps) \\ \hline TTR & (88) & Torus-torus bifurcation on Torus (maps) \\ \hline \end{tabular} \caption{Codimension-two solution types. Note that the absolute value of the numerical code divided by 10 gives the type of the curve on which the special point occurs.} \label{tbl:Codim2_Solution_Types} \end{center} \end{table} \item[-] {\tt fort.7}~:~ The {\tt fort.7} output-file contains the bifurcation diagram. Its format is the same as the {\tt fort.6} (screen) output, but the {\tt fort.7} output is more extensive, as every solution point has an output line printed. \item[-] {\tt fort.8}~:~ The {\tt fort.8} output-file contains complete graphics and restart data for selected, labeled solutions. The information per solution is generally much more extensive than that in {\tt fort.7}. The {\tt fort.8} output should normally be kept to a minimum. \item[-] {\tt fort.9}~:~ Diagnostic messages, convergence history, eigenvalues, and Floquet multipliers are written in {\tt fort.9}. It is strongly recommended that this output be habitually inspected. The amount of diagnostic data can be controlled via the {\cal AUTO}-constant {\tt IID}; see Section~\ref{sec:IID}. \end{itemize} The user has some control over the {\tt fort.6} (screen) and {\tt fort.7} output via the {\cal AUTO}-constant {\tt IPLT} (Section~\ref{sec:IPLT}). Furthermore, the routine {\tt PVLS} can be used to define ``solution measures'' which can then be printed by ``parameter overspecification''; see Section~\ref{sec:Parameter_over_specification}. For an example see demo {\tt pvl}. The {\cal AUTO}-commands \commandf{@sv}(\commandf{sv}), \commandf{@ap}(\commandf{ap}), and \commandf{@df}(\commandf{df}) can be used to manipulate the output-files {\tt fort.7}, {\tt fort.8}, and {\tt fort.9}. Furthermore, the {\cal AUTO}-command \commandf{@lb}(\commandf{rl}) can be used to delete and relabel solutions and branches simultaneously in {\tt fort.7} and {\tt fort.8}. For details see Section~\ref{sec:command_mode}. The graphics programs {\cal PLAUT}, {\cal PLAUT04}, and the Python CLUI command \commandf{plot} can be used to graphically inspect the data in {\tt fort.7} and {\tt fort.8}; see Chapters~\ref{ch:PLAUT}, ~\ref{ch:PLAUT04}, and ~\ref{ch:python_mode}. %============================================================================== %============================================================================== \chapter{ The Graphics Programs PLAUT and PyPLAUT.} \label{ch:PLAUT} %============================================================================== %============================================================================== {\cal PLAUT} and {\cal PyPLAUT} can be used to extract graphical information from the {\cal AUTO} output-files {\tt fort.7} and {\tt fort.8}, or from the corresponding data-files {\tt b.xxx} and {\tt s.xxx}. To invoke {\cal PLAUT}, use the \commandf{@p} command defined in Section~\ref{sec:command_mode}. The {\cal PLAUT} window (a Tektronix window) will appear, in which {\cal PLAUT} commands can be entered. To invoke {\cal PyPLAUT}, use the \commandf{@pp} command. The same plotting window as you get by using \commandf{plot} in the \python interface appears (see Section~\ref{clui:plotting}), but you can also manipulate it by typing {\cal PLAUT} commands in the terminal in which you typed \commandf{@pp}. For examples of using {\cal PLAUT} and {\cal PyPLAUT} see the tutorial demos {\tt pp2} and {\tt pp3} in sections~\ref{sec:Demos_pp2} and \ref{sec:Demos_pp3}, respectively. The files \filef{.autorc} and \filef{autorc}, as explained in Section~\ref{clui:plotting}, can be used to customize {\cal PyPLAUT}'s behaviour and appearance. \section{ Basic {\cal PLAUT}-Commands.} \label{sec:main_PLAUT_commands} The principal {\cal PLAUT}-commands are \begin{itemize} \item[\tt bd0]~: This command is useful for an initial overview of the bifurcation diagram as stored in {\tt fort.7}. If you have not previously selected one of the default options {\it d0, d1, d2, d3}, or {\it d4} described below then you will be asked whether you want solution labels, grid lines, titles, or labeled axes. \item[\tt bd]~: This command is the same as the {\it bd0} command, except that you will be asked to enter the minimum and the maximum of the horizontal and vertical axes. This is useful for blowing up portions of a previously displayed bifurcation diagram. \item[\tt ax]~: With the {\it ax} command you can select any pair of columns of real numbers from {\tt fort.7} as horizontal and vertical axis in the bifurcation diagram. (The default is columns 1 and 2). To determine what these columns represent, one can look at the screen ouput of the corresponding {\cal AUTO} run, or one can inspect the column headings in {\tt fort.7}. \item[\tt 2d]~: Upon entering the {\it 2d} command, the labels of all solutions stored in {\tt fort.8} will be listed and you can select one or more of these for display. The number of solution components is also listed and you will be prompted to select two of these as horizontal and vertical axis in the display. Note that the first component is typically the independent time or space variable scaled to the interval [0,1]. \item[\tt sav]~: To save the displayed plot in a file. You will be asked to enter a file name. Each plot must be stored in a separate new file. The plot is stored in compact {\cal PLOT10} format, which can be converted to {\cal PostScript} format with the {\cal AUTO}-commands {\tt @ps}; see Section~\ref{sec:Printing_PLAUT_files}. \item[\tt cl]~: To clear the graphics window. \item[\tt lab]~: To list the labels of all solutions stored in {\tt fort.8}. Note that {\cal PLAUT} requires all labels to be distinct. In case of multiple labels you can use the {\cal AUTO} command \commandf{@lb} to relabel solutions in {\tt fort.7} and {\tt fort.8}. \item[\tt end]~: To end execution of {\cal PLAUT}. \end{itemize} \section{ Default Options.} \label{sec:PLAUT_default} After entering the commands {\it bd0, bd}, or {\it 2d}, you will be asked whether you want solution labels, grid lines, titles, or axes labels. For quick plotting it is convenient to bypass these selections. This can be done by the default commands {\it d0, d1, d2, d3}, or {\it d4} below. These can be entered as a single command or they can be entered as prefixes in the {\it bd0} and {\it bd} commands. Thus, for example, one can enter the command {\it d1bd0}. \begin{itemize} \item[\tt d0]~: Use solid curves, showing symbols, but no solution labels. \item[\tt d1]~: Use solid curves, except use dashed curves for unstable solutions and for solutions of unknown stability. Show solution labels and symbols. \item[\tt d2]~: As {\it d1}, but without solution labels. \item[\tt d3]~: As {\it d1}, but with grid lines. \item[\tt d4]~: As {\it d2}, but with grid lines. \end{itemize} If no default option {\it d0, d1, d2, d3}, or {\it d4} has been selected or if you want to override a default feature, then the following commands can be used. These can be entered as individual commands or as prefixes. For example, one can enter the command {\it sydpbd0}. \begin{itemize} \item[\tt sy]~: Use symbols for special solution points, for example, open square = branch point, solid square = Hopf bifurcation. \item[\tt dp]~: ``Differential Plot'', i.e., show stability of the solutions. Solid curves represent stable solutions. Dashed curves are used for unstable solutions and for solutions of unknown stability. For periodic solutions use solid/open circles to indicate stability/instability (or unknown stability). \item[\tt st]~: Set up titles and axes labels. \item[\tt nu]~: Normal usage (reset special options). \end{itemize} \section{ Other {\cal PLAUT}-Commands.} \label{sec:Other_PLAUT_commands} The full {\cal PLAUT} program has several other capabilities, for example, \begin{itemize} \item[\tt scr]~: To change the diagram size. \item[\tt rss]~: To change the size of special solution point symbols. \end{itemize} These commands are not available in {\cal PyPLAUT}. \section{ Printing {\cal PLAUT} Files.} \label{sec:Printing_PLAUT_files} \begin{itemize} \item[\tt @ps]~: Type \commandf{@ps fig.1} to convert a saved {\cal PLAUT} file {\tt fig.1} to {\cal PostScript} format in {\tt fig.1.ps}. \item[\tt @eps]~: Type \commandf{@eps fig.1} to convert a saved {\cal PLAUT} file {\tt fig.1} to encapsulated {\cal PostScript} format in {\tt fig.1.eps}. \end{itemize} In {\cal PyPLAUT} you can directly save to a variety of file formats, including \filef{.eps} and \filef{.png}. %============================================================================== %============================================================================== \chapter{ The Graphics Program PLAUT04.} \label{ch:PLAUT04} %============================================================================== %============================================================================== % This tex file is also used by the stand-alone user guide you get % when you ask for help in PLAUT04 \newcommand{\PLAUT} {\textsc{Plaut04}} \newcommand{\ETC} {\textit{etc.}} \input{plaut04_user_guide.tex} %============================================================================== %============================================================================== \chapter{ The Graphical User Interface GUI94.} \label{ch:GUI} %============================================================================== %============================================================================== \section{ General Overview.} \label{sec:GUI_Overview} The {\cal AUTO} graphical user interface (GUI) is a tool for creating and editing equations-files and constants-files; see Section~\ref{ch:User_supplied_files} for a description of these files. The GUI can also be used to run {\cal AUTO} and to manipulate and plot output-files and data-files; see Section~\ref{sec:command_mode} for corresponding commands. To use the GUI for a new equation, change to an empty work directory. For an existing equations-file, change to its directory. ({\it Do not activate the GUI in the directory {\tt auto/07p} or in any of its subdirectories.}) Then type \centerline { @{\it auto}, } or its abbreviation @{\it a}. Here we assume that the {\cal AUTO} aliases have been activated; see Section~\ref{sec:Installation}. The GUI includes a window for editing the equations-file, and four groups of buttons, namely, the {\it Menu Bar} at the top of the GUI, the {\it Define Constants}-buttons at the center-left, the {\it Load Constants}-buttons at the lower left, and the {\it Stop- and Exit}-buttons. {\bf Note :}~ Most GUI buttons are activated by point-and-click action with the {\it left} mouse button. If a beep sound results then the {\it right} mouse button must be used. \subsection{ The Menu bar.} It contains the main buttons for running {\cal AUTO} and for manipulating the equations-file, the constants-file, the output-files, and the data-files. In a typical application, these buttons are used from left to right. First the {\it Equations} are defined and, if necessary, {\it Edited}, before being {\it Written}. Then the {\cal AUTO}-constants are {\it Defined}. This is followed by the actual {\it Run} of {\cal AUTO}. The resulting output-files can be {\it Saved} as data-files, or they can be {\it Appended} to existing data-files. Data-files can be {\it Plotted} with the graphics program {\cal PLAUT}, and various file operations can be done with the {\it Files}-button. Auxiliary functions are provided by the {\it Demos-}, {\it Misc-}, and {\it Help}-buttons. The Menu Bar buttons are described in more detail in Section~\ref{sec:GUI_Menu_bar}. \subsection{ The Define-Constants-buttons.} These have the same function as the {\it Define}-button on the Menu Bar, namely to set and change {\cal AUTO}-constants. However, for the {\it Define}-button all constants appear in one panel, while for the Define Constants-buttons they are grouped by function, as in Chapter~\ref{ch:AUTO_constants}, namely {\it Problem} definition constants, {\it Discretization} constants, convergence {\it Tolerances}, continuation {\it Step Size}, diagram {\it Limits}, designation of free {\it Parameters}, constants defining the {\it Computation}, and constants that specify {\it Output} options. \subsection{ The Load-Constants-buttons.} The {\it Previous}-button can be used to load an existing {\cal AUTO}-constants file. Such a file is also loaded, if it exists, by the {\it Equations}-button on the {\it Menu Bar}. The {\it Default}-button can be used to load default values of all {\cal AUTO}-constants. Custom editing is normally necessary. \subsection{ The Stop- and Exit-buttons.} The {\it Stop}-button can be used to abort execution of an {\cal AUTO}-run. This should be done only in exceptional circumstances. Output-files, if any, will normally be incomplete and should be deleted. Use the {\it Exit}-button to end a session. \section{ The Menu Bar.} \label{sec:GUI_Menu_bar} \subsection{ Equations-button.} This pull-down menu contains the items {\it Old}, to load an existing equations-file, {\it New}, to load a model equations-file, and {\it Demo}, to load a selected demo equations-file. Equations-file names are of the form {\tt xxx.f90}. The corresponding constants-file {\tt c.xxx} is also loaded if it exists. The equation name {\tt xxx} remains active until redefined. \subsection{ Edit-button.} This pull-down menu contains the items {\it Cut} and {\it Copy}, to be performed on text in the GUI window highlighted by click-and-drag action of the mouse, and the item {\it Paste}, which places editor buffer text at the location of the cursor. \subsection{ Write-button.} This pull-down menu contains the item {\it Write}, to write the loaded files {\tt xxx.f90} and {\tt c.xxx}, by the active equation name, and the item {\it Write As} to write these files by a selected new name, which then becomes the active name. \subsection{ Define-button.} Clicking this button will display the full {\cal AUTO}-constants panel. Most of its text fields can be edited, but some have restricted input values that can be selected with the right mouse button. Some text fields will display a subpanel for entering data. To actually apply changes made in the panel, click the {\it OK-} or {\it Apply}-button at the bottom of the panel. \subsection{ Run-button.} Clicking this button will write the constants-file {\tt c.xxx} and run {\cal AUTO}. If the equations-file has been edited then it should first be rewritten with the {\it Write}-button. \subsection{ Save-button.} This pull-down menu contains the item {\it Save}, to save the output-files {\tt fort.7}, {\tt fort.8}, {\tt fort.9}, as {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, respectively. Here {\tt xxx} is the active equation name. It also contains the item {\it Save As}, to save the output-files under another name. Existing data-files with the selected name, if any, will be overwritten. \subsection{ Append-button.} This pull-down menu contains the item {\it Append}, to append the output-files {\tt fort.7}, {\tt fort.8}, {\tt fort.9}, to existing data-files {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, respectively. Here {\tt xxx} is the active equation name. It also contains the item {\it Append To}, to append the output-files to other existing data-files. \subsection{ Plot-button.} This pull-down menu contains the items {\it Plot}, to run the plotting program {\cal PLAUT} for the data-files {\tt b.xxx} and {\tt s.xxx}, where {\tt xxx} is the active equation name, and the item {\it Name}, to run {\cal PLAUT} with other data-files. \subsection{ Files-button.} This pull-down menu contains the item {\it Restart}, to redefine the restart file. Normally, when restarting from a previously computed solution, the restart data is expected in the file {\tt s.xxx}, where {\tt xxx} is the active equation name. Use the {\it Restart}-button to read the restart data from another data-file in the immediately following run. The pull-down menu also contains the following items~: \begin{itemize} \item[-]{\it Copy},~ to copy {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, {\tt c.xxx}, to {\tt b.yyy}, {\tt s.yyy}, {\tt d.yyy}, {\tt c.yyy}, resp.; \item[-]{\it Append},~ to append data-files {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, to {\tt b.yyy}, {\tt s.yyy}, {\tt d.yyy}, resp.; \item[-]{\it Move},~ to move {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}, {\tt c.xxx}, to {\tt b.yyy}, {\tt s.yyy}, {\tt d.yyy}, {\tt c.yyy}, resp.; \item[-]{\it Delete},~ to delete data-files {\tt b.xxx}, {\tt s.xxx}, {\tt d.xxx}; \item[-]{\it Clean}, to delete all files of the form {\tt fort.*}, {\tt *.o}, and {\tt *.exe}. \end{itemize} \subsection{ Demos-button.} This pulldown menu contains the items {\it Select}, to view and run a selected {\cal AUTO} demo in the demo directory, and {\it Reset}, to restore the demo directory to its original state. Note that demo files can be copied to the user work directory with the {\it Equations/Demo}-button. \subsection{ Misc.-button.} This pulldown menu contains the items {\it Tek Window} and {\it VT102 Window}, for opening windows; {\it Emacs} and {\it Xedit}, for editing files, and {\it Print}, for printing the active equations-file {\tt xxx.f90}. \subsection{ Help-button.} This pulldown menu contains the items {\it {\cal AUTO}-constants}, for help on {\cal AUTO}-constants, and {\it User Manual}, for viewing the user manual; i.e., this document. \section{ Using the GUI.} \label{sec:Using_the_GUI} {\cal AUTO}-commands are described in Section~\ref{sec:command_mode} and illustrated in the demos. In Table~\ref{tbl:CM_GUI} we list the main {\cal AUTO}-commands together with the corresponding GUI button. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \commandf{@r } & {\it Run} \\ \hline \commandf{@sv } & {\it Save} \\ \hline \commandf{@ap } & {\it Append} \\ \hline \commandf{@p } & {\it Plot} \\ \hline \commandf{@cp } & {\it Files/Copy} \\ \hline \commandf{@mv } & {\it Files/Move} \\ \hline \commandf{@cl } & {\it Files/Clean} \\ \hline \commandf{@dl } & {\it Files/Delete} \\ \hline \commandf{@dm } & {\it Equations/Demo} \\ \hline \end{tabular} \caption{Command Mode - GUI correspondences.} \label{tbl:CM_GUI} \end{center} \end{table} The {\cal AUTO}-command \commandf{@r xxx yyy} is given in the GUI as follows~: click {\it Files/Restart} and enter {\it yyy} as data. Then click {\it Run}. As noted in Section~\ref{sec:command_mode}, this will run {\cal AUTO} with the current equations-file {\tt xxx.f90} and the current constants-file {\tt c.xxx}, while expecting restart data in {\tt s.yyy}. The {\cal AUTO}-command \commandf{@ap xxx yyy} is given in the GUI by clicking {\it Files/Append}. \section{ Customizing the GUI.} \label{sec:Customizing_the_GUI} \subsection{ Print-button.} The {\it Misc/Print}-button on the Menu Bar can be customized by editing the file {\tt GuiConsts.h} in directory {\tt auto/07p/include}. \subsection{ GUI colors.} GUI colors can be customized by creating an X resource file. Two model files can be found in directory {\tt auto/07p/gui}, namely, {\tt Xdefaults.1} and {\tt Xdefaults.2}. To become effective, edit one of these, if desired, and copy it to {\tt .Xdefaults} in your home directory. Color names can often be found in the system file {\tt /usr/lib/X11/rgb.txt}. \subsection{ On-line help.} The file {\tt auto/07p/include/GuiGlobal.h} contains on-line help on {\cal AUTO}-constants and demos. The text can be updated, subject to a modifiable maximum length. On SGI machines this is 10240 bytes, which can be increased, for example, to 20480 bytes, by replacing the line {\it CC = cc -Wf, -XNl10240 -O} in {\tt auto/07p/gui/Makefile} by {\it CC = cc -Wf, -XNl20480 -O} On other machines, the maximum message length is the system defined maximum string literal length. %============================================================================== %============================================================================== \chapter{ Description of {\cal AUTO}-Constants.} \label{ch:AUTO_constants} %============================================================================== %============================================================================== \section{ The {\cal AUTO}-Constants File.} \label{sec:The_AUTO_constants_file} As described in Section~\ref{ch:User_supplied_files}, if the equations-file is {\tt xxx.f90} then the constants that define the computation are normally expected in the file {\tt c.xxx}. The format of this file is free, with constant=value pairs separated by commas or spaces. Comments start with one of the characters ``\#'' and ``!'', and run to the end of a line. An example, with default values, is listed below. In real constant files you only need to specify those values that are different from these, but listing all of them allows for easier editing. Note that this file is not strictly necessary when using the \python interface: you can define all constants inside the scripts if you so wish. \begin{verbatim} # Default AUTO Constants file e = '', s='', dat='', sv='' unames = {}, parnames = {} U = {}, PAR = {} NDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 0, NPR= 0, MXBF= 10, IID = 2, ITMX= 9, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR= 36, THL = {}, THU = {} RL0=-1.7976e+308, RL1=1.7976e+308, A0=-1.7976e+308, A1=1.7976e+308, UZR = {}, UZSTOP = {}, SP = [], STOP = [] IIS = 3, IBR=0, LAB=0, TY='' NUNSTAB = -1, NSTAB = -1, IEQUIB = 1, ITWIST = 0, ISTART = 5 IREV = [], IFIXED = [], IPSI = [] \end{verbatim} The significance of the {\cal AUTO}-constants, grouped by function, is described in the sections below. The HomCont constants \texttt{NUNSTAB}, \texttt{NSTAB}, \texttt{IEQUIB}, \texttt{ITWIST}, \texttt{ISTART}, \texttt{IREV}, \texttt{IFIXED}, and \texttt{IPSI} are explained in Chapter~\ref{ch:HomCont}. Representative demos that illustrate use of the {\cal AUTO}-constants are also mentioned. %===================================================================== \section{ Problem Constants.} \label{sec:Problem_constants} \subsection{\texttt{NDIM}} \label{sec:NDIM} Dimension of the system of equations as specified in the user-supplied routine {\tt FUNC}. \subsection{\texttt{NBC}} \label{sec:NBC} The number of boundary conditions as specified in the user-supplied routine {\tt BCND}. \\ (Demos {\tt exp}, {\tt kar}.) \subsection{\texttt{NINT}} \label{sec:NINT} The number of integral conditions as specified in the user-supplied routine {\tt ICND}. \\ (Demos {\tt int}, {\tt lin}, {\tt obv}.) \subsection{\texttt{NPAR}} \label{sec:NPAR} Maximum parameter number that can be used in all user-supplied routines. \subsection{\texttt{JAC}} \label{sec:JAC} Used to indicate whether derivatives are supplied by the user or to be obtained by differencing~: \begin{itemize} \item[-] {\tt JAC=0}~: No derivatives are given by the user. (Most demos use {\tt JAC}=0.) \item[-] {\tt JAC=1}~: Derivatives with respect to state- and problem-parameters are given in the user-supplied routines {\tt FUNC}, {\tt BCND}, {\tt ICND} and {\tt FOPT}, where applicable. This may be necessary for sensitive problems. It is also recommended for computations in which {\cal AUTO} generates an extended system, for example, when {\tt ISW}=2. (For {\tt ISW} see Section~\ref{sec:ISW}.) \\ (Demos {\tt int}, {\tt dd2}, {\tt obt}, {\tt plp}, {\tt ops}.) \item[-] {\tt JAC=-1}~: As for {\tt JAC=1}, but derivatives with respect to problem-parameters may be omitted in {\tt FUNC}. \\ (Demo {\tt san}.) \end{itemize} %===================================================================== \section{ Discretization Constants.} \label{sec:Discretization_constants} \subsection{\texttt{NTST}} \label{sec:NTST} The number of mesh intervals used for discretization. {\tt NTST} remains fixed during any particular run, but can be changed when restarting. (For mesh adaption see {\tt IAD} in Section~\ref{sec:IAD}.) Recommended value of {\tt NTST} : As small as possible to maintain convergence. \\ (Demos {\tt exp}, {\tt ab}, {\tt spb}.) \subsection{\texttt{NCOL}} \label{sec:NCOL} The number of Gauss collocation points per mesh interval, (2 $\le$ {\tt NCOL} $\le$ 7). {\tt NCOL} remains fixed during any given run, but can be changed when restarting at a previously computed solution. The choice {\tt NCOL}=4, used in most demos, is recommended. If {\tt NDIM} is ``large'' and the solutions ``very smooth'' then {\tt NCOL}=2 may be appropriate. \subsection{\texttt{IAD}} \label{sec:IAD} This constant controls the mesh adaption~: \begin{itemize} \item[-] {\tt IAD=0}~: Fixed mesh. Normally, this choice should never be used, as it may result in spurious solutions. (Demo {\tt ext}.) \item[-] {\tt IAD$>$0}~: Adapt the mesh every {\tt IAD} steps along the family. Most demos use {\tt IAD=3}, which is the strongly recommended value. \end{itemize} When computing ``trivial'' solutions to a boundary value problem, for example, when all solution components are constant, then the mesh adaption may fail under certain circumstances, and overflow may occur. In such case, try recomputing the solution family with a fixed mesh {\tt (IAD=0)}. Be sure to set {\tt IAD} back to {\tt IAD=3} for computing eventual non-trivial bifurcating solution families. %===================================================================== \section{ Tolerances.} \label{sec:Tolerances} \subsection{\texttt{EPSL}} \label{sec:EPSL} Relative convergence criterion for equation parameters in the Newton/Chord method. Most demos use {\tt EPSL}=$10^{-6}$ or {\tt EPSL}=$10^{-7}$, which is the recommended value range. \subsection{\texttt{EPSU}} \label{sec:EPSU} Relative convergence criterion for solution components in the Newton/Chord method. Most demos use {\tt EPSU}=$10^{-6}$ or {\tt EPSU}=$10^{-7}$, which is the recommended value range. \subsection{\texttt{EPSS}} \label{sec:EPSS} Relative arclength convergence criterion for the detection of special solutions. Most demos use {\tt EPSS}=$10^{-4}$ or {\tt EPSS}=$10^{-5}$, which is the recommended value range. Generally, {\tt EPSS} should be approximately 100 to 1000 times the value of {\tt EPSL}, {\tt EPSU}. \subsection{\texttt{ITMX}} \label{sec:ITMX} The maximum number of iterations allowed in the accurate location of special solutions, such as bifurcations, folds, and user output points, by M\"uller's method with bracketing. The recommended value is {\tt ITMX}=8, used in most demos. \subsection{\texttt{NWTN}} \label{sec:NWTN} After {\tt NWTN} Newton iterations the Jacobian is frozen, i.e., {\cal AUTO} uses full Newton for the first {\tt NWTN} iterations and the Chord method for iterations {\tt NWTN}+1 to {\tt ITNW}. The choice {\tt NWTN}=3 is strongly recommended and used in most demos. Note that this constant is only effective for ODEs, i.e., for solving the piecewise polynomial collocation equations. For algebraic systems {\cal AUTO} always uses full Newton. \subsection{\texttt{ITNW}} \label{sec:ITNW} The maximum number of combined Newton-Chord iterations. When this maximum is reached, the step will be retried with half the stepsize. This is repeated until convergence, or until the minimum stepsize is reached. In the latter case the computation of the family is discontinued and a message printed in {\tt fort.9}. The recommended value is {\tt ITNW}=5, but {\tt ITNW}=7 may be used for ``difficult'' problems, for example, demos {\tt spb}, {\tt chu}, {\tt plp}, etc. %===================================================================== \section{ Continuation Step Size.} \label{sec:step_size} \subsection{\texttt{DS}} \label{sec:DS} {\cal AUTO} uses pseudo-arclength continuation for following solution families. The pseudo-arclength stepsize is the distance between the current solution and the next solution on a family. By default, this distance includes all state variables (or state functions) and all free parameters. The constant {\tt DS} defines the pseudo-arclength stepsize to be used for the first attempted step along any family. (Note that if {\tt IADS}$>$0 then {\tt DS} will automatically be adapted for subsequent steps and for failed steps.) {\tt DS} may be chosen positive or negative; changing its sign reverses the direction of computation. The relation {\tt DSMIN} $\le$ $\abs {\tt DS}$ $\le$ {\tt DSMAX} must be satisfied. The precise choice of {\tt DS} is problem-dependent; the demos use a value that was found appropriate after some experimentation. \subsection{\texttt{DSMIN}} \label{sec:DSMIN} This is minimum allowable absolute value of the pseudo-arclength stepsize. {\tt DSMIN} must be positive. It is only effective if the pseudo-arclength step is adaptive, i.e., if {\tt IADS}$>$0. The choice of {\tt DSMIN} is highly problem-dependent; most demos use a value that was found appropriate after some experimentation. See also the discussion in Section~\ref{sec:Efficiency}. \subsection{\texttt{DSMAX}} \label{sec:DSMAX} The maximum allowable absolute value of the pseudo-arclength stepsize. {\tt DSMAX} must be positive. It is only effective if the pseudo-arclength step is adaptive, i.e., if {\tt IADS}$>$0. The choice of {\tt DSMAX} is highly problem-dependent; most demos use a value that was found appropriate after some experimentation. See also the discussion in Section~\ref{sec:Efficiency}. \subsection{\texttt{IADS}} \label{sec:IADS} This constant controls the frequency of adaption of the pseudo-arclength stepsize. \begin{itemize} \item[-] {\tt IADS=0}~: Use fixed pseudo-arclength stepsize, i.e., the stepsize will be equal to the specified value of {\tt DS} for every step. The computation of a family will be discontinued as soon as the maximum number of iterations {\tt ITNW} is reached. This choice is not recommended. \\(Demo {\tt tim}.) \item[-] {\tt IADS$>$0}~: Adapt the pseudo-arclength stepsize after every {\tt IADS} steps. If the Newton/Chord iteration converges rapidly then $\abs{\tt DS}$ will be increased, but never beyond {\tt DSMAX}. If a step fails then it will be retried with half the stepsize. This will be done repeatedly until the step is successful or until $\abs{\tt DS}$ reaches {\tt DSMIN}. In the latter case nonconvergence will be signalled. The strongly recommended value is {\tt IADS}=1, which is used in almost all demos. \end{itemize} \subsection{\texttt{THL}} \label{sec:THL} By default, the pseudo-arclength stepsize includes all state variables (or state functions) and all free parameters. Under certain circumstances one may want to modify the weight accorded to individual parameters in the definition of stepsize. For this purpose, {\tt THL} defines the parameters whose weight is to be modified. If {\tt THL=\{\}} then all weights will have default value 1.0, else one must enter pairs, ~\{{\it Parameter Index} : {\it Weight}, ...\}~. For example, for the computation of periodic solutions it is recommended that the period not be included in the pseudo-arclength continuation stepsize, in order to avoid period-induced limitations on the stepsize near orbits of infinite period. This exclusion can be accomplished by setting {\tt THL=\{11:0.0\}}. If {\tt THL} is not specified this is the default for computing periodic solutions ({\tt IPS=2}). Most demos that compute periodic solutions use this option; see for example demo {\tt ab}. \subsection{\texttt{THU}} \label{sec:THU} Under certain circumstances one may want to modify the weight accorded to individual state variables (or state functions) in the definition of stepsize. For this purpose, {\tt THU} defines the number of states whose weight is to be modified. If {\tt THU}=\{\} then all weights will have default value 1.0, else one must enter pairs, ~\{{\it State Index} : {\it Weight}, ...\}~. At present none of the demos use this option. %===================================================================== \section{ Diagram Limits.} \label{sec:Diagram_limits} There are five ways to limit the computation of a family~: \begin{itemize} \item[-] By specifying a stopping condition in the list associated with the constant {\tt STOP}; see Section~\ref{sec:STOP}. \item[-] By specifying parameters and parameter values in the list associated with the constant {\tt UZSTOP}; see Section~\ref{sec:UZSTOP}. \item[-] By specifying the maximum number of steps, {\tt NMX}. \item[-] By specifying a negative parameter index in the list associated with the constant {\tt UZR}; see Section~\ref{sec:UZR}. \item[-] By appropriate choice of the computational window defined by the constants {\tt RL0}, {\tt RL1}, {\tt A0}, and {\tt A1}. One should always check that the starting solution lies within this computational window, otherwise the computation will stop immediately at the starting point. Most demos do not specify these constants, and use an unbounded window. \end{itemize} \subsection{\texttt{STOP}} \label{sec:STOP} This constant adds stopping conditions. It is specified as a list of bifurcation type strings followed by a number $n$ greater than zero. These strings specify that the contination should stop as soon as the $n$th bifurcation of the associated type has been reached. Example:\\ \begin{description} \item[\parf{STOP=['HB3','UZ3']}] Stop at the third Hopf bifurcation or third user defined point (see Section~\ref{sec:UZR}), whichever comes first. \end{description} \subsection{\texttt{NMX}} \label{sec:NMX} The maximum number of steps to be taken along any family. \subsection{\texttt{RL0}} \label{sec:RL0} The lower bound on the principal continuation parameter. (This is the parameter which appears first in the {\tt ICP} list; see Section~\ref{sec:ICP}.). \subsection{\texttt{RL1}} \label{sec:RL1} The upper bound on the principal continuation parameter. \subsection{\texttt{A0}} \label{sec:A0} The lower bound on the principal solution measure. (By default, if {\tt IPLT}=0, the principal solution measure is the $L_2$-norm of the state vector or state vector function. See the {\cal AUTO}-constant {\tt IPLT} in Section~\ref{sec:IPLT} for choosing another principal solution measure.) \subsection{\texttt{A1}} \label{sec:A1} The upper bound on the principal solution measure. %===================================================================== %===================================================================== \section{ Free Parameters.} \label{sec:Free_parameters} \subsection{\texttt{ICP}} \label{sec:ICP} For each equation type and for each continuation calculation there is a typical (``generic'') number of problem parameters that must be allowed to vary, in order for the calculations to be properly posed. The array {\tt ICP} designates these free parameters. The parameter that appears first in the {\tt ICP} list is called the ``principal continuation parameter''. Specific examples and special cases are described below. %===================================================================== \subsection{ Fixed points.} The simplest case is the continuation of a solution family to the system $ f( u , p ) = 0$, where $f(\cdot,\cdot), u \in \Rn$, cf. Equation~(\ref{1}). Such a system arises in the continuation of ODE stationary solutions and in the continuation of fixed points of discrete dynamical systems. There is only one free parameter here. As a concrete example, consider Run~1 of demo {\tt ab}, where {\tt ICP=[1]}. Thus, in this run {\tt PAR(1)} is designated as the free parameter. %===================================================================== \subsection{ Periodic solutions and rotations.} The continuation of periodic solutions and rotations generically requires two parameters, namely, one problem parameter and the period. For example, in Run~2 of demo {\tt ab} we have {\tt ICP=[1,11]}. Thus, in this run, the free parameters are {\tt PAR(1)} and {\tt PAR(11)}. (Note that {\cal AUTO} reserves {\tt PAR(11)} for the period.) Actually, for periodic solutions, it is sufficient to only specify the index of the free problem parameter, as {\cal AUTO} will automatically add {\tt PAR(11)}. However, in this case the period will not appear in the screen output and in the {\tt fort.7} output-file. For fixed period orbits one must specify two free problem parameters. For example, in Run~7 of demo {\tt pp2}, we have {\tt ICP=[1,2]}, with {\tt PAR(1)} and {\tt PAR(2)} specified as free problem parameters. The period {\tt PAR(11)} is fixed in this run. If the period is large then such a continuation provides a simple and effective method for computing a locus of homoclinic orbits. %===================================================================== \subsection{ Folds and Hopf bifurcations.} The continuation of folds for algebraic problems and the continuation of Hopf bifurcations requires two free problem parameters. For example, to continue a fold in Run~3 of demo {\tt ab}, we have {\tt ICP=[1,3]}, with {\tt PAR(1)} and {\tt PAR(3)} specified as free parameters. Note that one must set {\tt ISW}=2 for computing such loci of special solutions. Also note that in the continuation of folds the principal continuation parameter must be the one with respect to which the fold was located. %===================================================================== \subsection{ Folds and period-doublings.} The continuation of folds, for periodic orbits and rotations, and the continuation of period-doubling and torus bifurcations require two free problem parameters plus the free period. Thus, one would normally specify three parameters. For example, in Run~6 of demo {\tt pen}, where a locus of period-doubling bifurcations is computed for rotations, we have {\tt ICP=[2,3,11]}, with {\tt PAR(2)}, {\tt PAR(3)}, and {\tt PAR(11)} specified as free parameters. Note that one must set {\tt ISW}=2 for computing such loci of special solutions. Also note that in the continuation of folds the principal continuation parameter must be the one with respect to which the fold was located. Actually, one may only specify the problem parameters, as {\cal AUTO} will automatically add the period. For example, in Run~3 of demo {\tt plp}, where a locus of folds is computed for periodic orbits, we have {\tt ICP=[4,1]}, with {\tt PAR(4)} and {\tt PAR(1)} specified as free parameters. However, in this case the period will not appear in the screen output and in the {\tt fort.7} output-file. To continue a locus of folds, period-doubling or torus bifurcations with fixed period, simply specify three problem parameters, not including {\tt PAR(11)}. For torus bifurcations it is also possible to specify four problem parameters (possibly including {\tt PAR(11)}). In that case the angle of the torus ({\tt PAR(12)}) stays fixed. %===================================================================== \subsection{ Boundary value problems.} The simplest case is that of boundary value problems where {\tt NDIM}={\tt NBC} and where {\tt NINT}=0. Then, generically, one free problem parameter is required for computing a solution family. For example, in demo {\tt exp}, we have {\tt NDIM}={\tt NBC}=2, {\tt NINT}=0. Thus, in this demo one free parameter is designated, namely {\tt PAR(1)}. More generally, for boundary value problems with integral constraints, the generic number of free parameters is {\tt NBC} + {\tt NINT}$-${\tt NDIM} +1. For example, in demo {\tt lin}, we have {\tt NDIM}=2, {\tt NBC}=2, and {\tt NINT}=1. Thus {\tt ICP=[1,3]}. Indeed, in this demo two free parameters are designated, namely {\tt PAR(1)} and {\tt PAR(3)}. %===================================================================== \subsection{ Boundary value folds.} To continue a locus of folds for a general boundary value problem with integral constraints, set {\tt \#ICP}={\tt NBC}+{\tt NINT}$-${\tt NDIM}+2, and specify this number of parameter indices to designate the free parameters. %===================================================================== \subsection{ Optimization problems.} In algebraic optimization problems one must set {\tt ICP}(1)=10, as {\cal AUTO} uses {\tt PAR(10)} as principal continuation parameter to monitor the value of the objective function. Furthermore, one must designate one free equation parameter in {\tt ICP}(2). Thus, {\tt ICP=[10,2]} in the first run. Folds with respect to {\tt PAR(10)} correspond to extrema of the objective function. In a second run one can restart at such a fold, with an additional free equation parameter specified in {\tt ICP}(3). Thus, {\tt ICP=[10,2,3]} in the second run. The above procedure can be repeated. For example, folds from the second run can be continued in a third run with three equation parameters specified in addition to {\tt PAR(10)}. Thus, {\tt \#ICP=4} in the third run. For a simple example see demo {\tt opt}, where a four-parameter extremum is located. Note that {\tt \#ICP=5} in each of the four constants-files of this demo, with the indices of {\tt PAR(10)} and {\tt PAR(1)-PAR(4)} specified in {\tt ICP}. Thus, in the first three runs, there are overspecified parameters. However, {\cal AUTO} will always use the correct number of parameters. Although the overspecified parameters will be printed, their values will remain fixed. %===================================================================== \subsection{ Internal free parameters.} The actual continuation scheme in {\cal AUTO} may use additional free parameters that are automatically added. The simplest example is the computation of periodic solutions and rotations, where {\cal AUTO} automatically puts the period, if not specified, in \parf{PAR(11)}. The computation of loci of folds, Hopf bifurcations, and period-doublings also requires additional internal continuation parameters. These will be automatically added, and their indices will be greater than \parf{NPAR}. Other use depends on \parf{IPS}: see Section~\ref{sec:Restrictions_on_PAR}. %===================================================================== \subsection{ Parameter overspecification.} \label{sec:Parameter_over_specification} The number of specified parameter indices is allowed to be be greater than the generic number. In such case there will be ``overspecified'' parameters, whose values will appear in the screen and {\tt fort.7} output, but which are not part of the continuation process. A simple example is provided by demo {\tt opt}, where the first three runs have overspecified parameters whose values, although constant, are printed. There is, however, a more useful application of parameter overspecification. In the user-supplied routine {\tt PVLS} one can define solution measures and assign these to otherwise unused parameters. Such parameters can then be overspecified, in order to print them on the screen and in the {\tt fort.7} output. It is important to note that such overspecified parameters must appear at the end of the {\tt ICP} list, as they cannot be used as true continuation parameters. For an example of using parameter overspecification for printing user-defined solution measures, see demo {\tt pvl}. This is a boundary value problem (Bratu's equation) which has only one true continuation parameter, namely {\tt PAR(1)}. Three solution measures are defined in the routine {\tt PVLS}, namely, the $L_2$-norm of the first solution component, the minimum of the second component, and the left boundary value of the second component. These solution measures are assigned to {\tt PAR(2), PAR(3), PAR(4)}, and {\tt PAR(5)}, respectively. In the constants-file {\tt c.pvl} we have {\tt \#ICP=5}, with {\tt PAR(1)-PAR(5)} specified as parameters. Thus, in this example, {\tt PAR(2)-PAR(5)} are overspecified. Note that {\tt PAR(1)} must appear first in the {\tt ICP} list; the other parameters cannot be used as true continuation parameters. %===================================================================== %===================================================================== \section{ Computation Constants.} \label{sec:Computation_constants} \subsection{\texttt{ILP}} \label{sec:ILP} \begin{itemize} \item[-] {\tt ILP=0}~: No detection of folds. This choice is recommended. \item[-] {\tt ILP=1}~: Detection of folds. To be used if subsequent fold continuation is intended. \end{itemize} \subsection{\texttt{SP}} \label{sec:SP} This constant controls the detection of bifurcations and adds stopping conditions. It is specified as a list of bifurcation type strings followed by an optional number. If this number is 0, then the detection of this bifurcation is turned off, and if it is missing then the detection is turned on. A number $n$ greater than zero specifies that the contination should stop as soon as the $n$th bifurcation of this type has been reached. Examples:\\ \begin{itemize} \item[-] {\tt SP=['LP0']}\\ turn off detection of folds. \item[-] {\tt SP=['LP','HB3','BP0','UZ3']}\\ turn on the detection of folds and Hopf bifurcations, turn off detection of branch points and stop at the third Hopf bifurcation or third user defined point, whichever comes first. \end{itemize} \subsection{\texttt{ISP}} \label{sec:ISP} This constant controls the detection of Hopf bifurcations, branch points, period-doubling bifurcations, and torus bifurcations. \begin{itemize} \item[-] {\tt ISP=0}~: This setting disables the detection of Hopf bifurcations, branch points, period-doubling bifurcations, and torus bifurcations and the computation of Floquet multipliers. \item[-] {\tt ISP=1}~: Branch points and Hopf bifurcations are detected for algebraic equations. Branch points, period-doubling bifurcations and torus bifurcations are not detected for periodic solutions and boundary value problems. However, Floquet multipliers are computed. \item[-] {\tt ISP=2}~: This setting enables the detection of all special solutions. For periodic solutions and rotations, the choice {\tt ISP}=2 should be used with care, due to potential inaccuracy in the computation of the linearized Poincar\'e map and possible rapid variation of the Floquet multipliers. The linearized Poincar\'e map always has a multiplier $z=1$. If this multiplier becomes inaccurate then the automatic detection of secondary periodic bifurcations will be discontinued and a warning message will be printed in {\tt fort.9}. See also Section~\ref{sec:Bifurcations}. \item[-] {\tt ISP=3}~: Hopf bifurcations will not be detected. Branch points will be detected, and {\cal AUTO} will monitor the Floquet multipliers. Period-doubling and torus bifurcations will go undetected. This option is useful for certain problems with non-generic Floquet behavior. \item[-] {\tt ISP=4}~: Branch points and Hopf bifurcations are detected for algebraic equations. Branch points are not detected for periodic solutions and boundary value problems. {\cal AUTO} will monitor the Floquet multipliers, and period-doubling and torus bifurcations will be detected. \end{itemize} \subsection{\texttt{ISW}} \label{sec:ISW} This constant controls branch switching at branch points for the case of differential equations. Note that branch switching is automatic for algebraic equations. \begin{itemize} \item[-] {\tt ISW=1}~: This is the normal value of {\tt ISW}. \item[-] {\tt ISW=$-$1}~: If {\tt IRS} is the label of a branch point or a period-doubling bifurcation then branch switching will be done. For period doubling bifurcations it is recommended that {\tt NTST} be increased. For examples see Run~2 and Run~3 of demo {\tt lor}, where branch switching is done at period-doubling bifurcations, and Run~2 and Run~3 of demo {\tt bvp}, where branch switching is done at a transcritical branch point. \item[-] {\tt ISW=2}~: If {\tt IRS} is the label of a fold, a Hopf bifurcation point, a period-doubling, a torus bifurcation, or, in a non-generic (symmetric) system, a branch point then a locus of such points will be computed. An additional free parameter must be specified for such continuations; see also Section~\ref{sec:Free_parameters}. \item[-] {\tt ISW=3}~: If {\tt IRS} is the label of a branch point in a generic (non-symmetric) system then a locus of such points will be computed. Two additional free parameters must be specified for such continuations; see also Section~\ref{sec:Free_parameters}. \end{itemize} \subsection{\texttt{MXBF}} \label{sec:MXBF} This constant, which is effective for algebraic problems only, sets the maximum number of bifurcations to be treated. Additional branch points will be noted, but the corresponding bifurcating families will not be computed. If {\tt MXBF} is positive then the bifurcating families of the first {\tt MXBF} branch points will be traced out in both directions. If {\tt MXBF} is negative then the bifurcating families of the first $\abs{{\tt MXBF}}$ branch points will be traced out in only one direction. \subsection{\texttt{s}} \label{sec:s} This constant sets the name of the solution file from which the computation is to be restarted, instead of \filef{fort.3}: if {\tt s='xxx'} then the name of the restart file is \filef{s.xxx}. \subsection{\texttt{dat}} \label{sec:dat} This constant, where {\tt dat='xxx'}, sets the name of a user-supplied ASCII data file {\tt xxx.dat}, from which the contination is to be restarted. {\cal AUTO} automatically sets the period in {\tt PAR(11)}. Other parameter values must be set in {\tt STPNT}. (When necessary, {\tt PAR(11)} may also be redefined there.) The first column in the data file denotes the time, which does \emph{not} need to be rescaled to the interval $[0,1]$, and further columns the coordinates of the solution. The constant {\tt IRS} must be set to 0. (Demos {\tt lor}, {\tt pen}.) \subsection{\texttt{U}} \label{sec:U} This constant, where {\tt U=\{i1:x1,i2:x2\}}, changes the value of {\tt U(i1)} to {\tt x1}, {\tt U(i2)} to {\tt x2}, and so on, with respect to the solution to start from. This is only valid for restarting from algebraic problems or a constant-in-time solution. \subsection{\texttt{PAR}} \label{sec:PAR} This constant, where {\tt PAR=\{i1:x1,i2:x2\}}, changes the value of {\tt PAR(i1)} to {\tt x1}, {\tt PAR(i2)} to {\tt x2}, and so on, with respect to the solution to start from. \subsection{\texttt{IRS}} \label{sec:IRS} This constant sets the label of the solution where the computation is to be restarted. \begin{itemize} \item[-] {\tt IRS=0}~: This setting is typically used in the first run of a new problem. In this case a starting solution must be defined in the user-supplied routine {\tt STPNT}. For representative examples of analytical starting solutions see demos {\tt ab} and {\tt frc}. For starting from unlabeled numerical data see the {\tt dat} command above, and demos {\tt lor} and {\tt pen}. \item[-] {\tt IRS$>$0}~: Restart the computation at the previously computed solution with label {\tt IRS}. This solution is normally expected to be in the current data-file {\tt s.xxx}; see also the \commandf{@r} and \commandf{@R} commands in Section~\ref{sec:command_mode}. Various {\cal AUTO}-constants can be modified when restarting. \item[-] {\tt IRS$<$0}~: Restart the computation at the -IRSth computed solution in the restart file. This is especially useful if you do not want to look up label numbers and know for sure that the solution to continue from is at a fixed position. \item[-] {\tt IRS='XYn'}~: Restart the computation at the nth label of type XY in the restart file, for instance 'HB12' to restart at the twelfth Hopf bifurcation. \end{itemize} \subsection{\texttt{TY}} \label{sec:TY} This constant modifies the type from the restart solution. This is sometimes useful in conservative or extended systems, declaring a regular point to be a Hopf bifurcation point ({\tt TY='HB'}) or a branch point ({\tt TY='BP'}). Use {\tt TY='HB4'} to copy the period of the emanating periodic orbit from {\tt PAR(4)} (for example set in the routine {\tt PVLS} in the equations file) to {\tt PAR(11)}. (Demo {\tt r3b}.) \subsection{\texttt{IPS}} \label{sec:IPS} This constant defines the problem type~: \begin{itemize} %===================================================================== \item[-] {\tt IPS=0}~: An algebraic bifurcation problem. Hopf bifurcations will not be detected and stability properties will not be indicated in the {\tt fort.7} output-file. %===================================================================== \item[-] {\tt IPS=1}~: Stationary solutions of ODEs with detection of Hopf bifurcations. The sign of PT, the point number, in {\tt fort.7} is used to indicate stability~: $-$ is stable , + is unstable.\\ (Demo {\tt ab}.) %===================================================================== \item[-] {\tt IPS=$-$1}~: Fixed points of the discrete dynamical system $u^{(k+1)}=f(u^{(k)},p ),$ with detection of Hopf bifurcations. The sign of PT in {\tt fort.7} indicates stability~: $-$ is stable , + is unstable. (Demo {\tt dd2}.) %===================================================================== \item[-] {\tt IPS=$-$2}~: Time integration using implicit Euler. The {\cal AUTO}-constants {\tt DS}, {\tt DSMIN}, {\tt DSMAX}, and {\tt ITNW}, {\tt NWTN} control the stepsize. In fact, pseudo-arclength is used for ``continuation in time''. Note that the time discretization is only first order accurate, so that results should be carefully interpreted. Indeed, this option has been included primarily for the detection of stationary solutions, which can then be entered in the user-supplied routine {\tt STPNT}. \\ (Demo {\tt ivp}.) %===================================================================== \item[-] {\tt IPS=2}~: Computation of periodic solutions. Starting data can be a Hopf bifurcation point (Run~2 of demo {\tt ab}), a periodic orbit from a previous run (Run~4 of demo {\tt pp2}), an analytically known periodic orbit (Run~1 of demo {\tt frc}), or a numerically known periodic orbit (Demo {\tt lor}). The sign of PT in {\tt fort.7} is used to indicate stability~: $-$ is stable , + is unstable or unknown. %===================================================================== \item[-] {\tt IPS=4}~: A boundary value problem. Boundary conditions must be specified in the user-supplied routine {\tt BCND} and integral constraints in {\tt ICND}. The {\cal AUTO}-constants {\tt NBC} and {\tt NINT} must be given correct values. (Demos {\tt exp}, {\tt int}, {\tt kar}.) %===================================================================== \item[-] {\tt IPS=5}~: Algebraic optimization problems. The objective function must be specified in the user-supplied routine {\tt FOPT}. (Demo {\tt opt}.) %===================================================================== \item[-] {\tt IPS=7}~: A boundary value problem with computation of Floquet multipliers. This is a very special option; for most boundary value problems one should use {\tt IPS=4}. Boundary conditions must be specified in the user-supplied routine {\tt BCND} and integral constraints in {\tt ICND}. The {\cal AUTO}-constants {\tt NBC} and {\tt NINT} must be given correct values. %===================================================================== \item[-] {\tt IPS=9}~: This option is used in connection with the {\cal HomCont} algorithms described in Chapters~\ref{ch:HomCont}-\ref{ch:HomCont_rev} for the detection and continuation of homoclinic bifurcations.\\ (Demos {\tt san}, {\tt mtn}, {\tt kpr}, {\tt cir}, {\tt she}, {\tt rev}.) %===================================================================== \item[-] {\tt IPS=11}~: Spatially uniform solutions of a system of parabolic PDEs, with detection of traveling wave bifurcations. The user need only define the nonlinearity (in routine {\tt FUNC}), initialize the wave speed in {\tt PAR(10)}, initialize the diffusion constants in {\tt PAR(15,16,$\cdots$)}, and set a free equation parameter in {\tt ICP}(1). (Run~2 of demo {\tt wav}.) %===================================================================== \item[-] {\tt IPS=12}~: Continuation of traveling wave solutions to a system of parabolic PDEs. Starting data can be a Hopf bifurcation point from a previous run with {\tt IPS}=11, or a traveling wave from a previous run with {\tt IPS}=12. (Run~3 and Run~4 of demo {\tt wav}.) %===================================================================== \item[-] {\tt IPS=14}~: Time evolution for a system of parabolic PDEs subject to periodic boundary conditions. Starting data may be solutions from a previous run with {\tt IPS}=12 or 14. Starting data can also be specified in {\tt STPNT}, in which case the wave length must be specified in {\tt PAR(11)}, and the diffusion constants in {\tt PAR(15,16,$\cdots$)}. {\cal AUTO} uses {\tt PAR(14)} for the time variable. {\tt DS}, {\tt DSMIN}, and {\tt DSMAX} govern the pseudo-arclength continuation in the space-time variables. Note that the time discretization is only first order accurate, so that results should be carefully interpreted. Indeed, this option is mainly intended for the detection of stationary waves. (Run~5 of demo {\tt wav}.) %===================================================================== \item[-] {\tt IPS=15}~: Optimization of periodic solutions. The integrand of the objective functional must be specified in the user supplied routine {\tt FOPT}. Only {\tt PAR(1-9)} should be used for problem parameters. {\tt PAR(10)} is the value of the objective functional, {\tt PAR(11)} the period, {\tt PAR(12)} the norm of the adjoint variables, {\tt PAR(14)} and {\tt PAR(15)} are internal optimality variables. {\tt PAR(21-29)} and {\tt PAR(31)} are used to monitor the optimality functionals associated with the problem parameters and the period. Computations can be started at a solution computed with {\tt IPS}=2 or {\tt IPS}=15. For a detailed example see demo {\tt ops}. %===================================================================== \item[-] {\tt IPS=16}~: This option is similar to {\tt IPS}=14, except that the user supplies the boundary conditions. Thus this option can be used for time-integration of parabolic systems subject to user-defined boundary conditions. For examples see the first runs of demos {\tt pd1}, {\tt pd2}, and {\tt bru}. Note that the space-derivatives of the initial conditions must also be supplied in the user supplied routine {\tt STPNT}. The initial conditions must satisfy the boundary conditions. This option is mainly intended for the detecting stationary solutions. %===================================================================== \item[-] {\tt IPS=17}~: This option can be used to continue stationary solutions of parabolic systems obtained from an evolution run with {\tt IPS}=16. For examples see the second runs of demos {\tt pd1} and {\tt pd2}. \end{itemize} %===================================================================== \section{ Output Control.} \label{sec:Output_control} \subsection{\texttt{unames}} \label{sec:unames} This constant, where {\tt unames=\{i1:s1,i2:s2\}}, changes the names in all output from {\tt U(i1)} to {\tt s1}, from {\tt U(i2)} to {\tt s2}, and so on. You can also refer to these strings, instead of the corresponding indices, in the constants \texttt{U} and \texttt{THU}. \subsection{\texttt{parnames}} \label{sec:parnames} This constant, where {\tt parnames=\{i1:s1,i2:s2\}}, changes the names in all output from {\tt PAR(i1)} to {\tt s1}, from {\tt PAR(i2)} to {\tt s2}, and so on. You can also refer to these strings, instead of the corresponding indices, in the constants \texttt{ICP}, \texttt{THL}, and \texttt{UZR}. \subsection{\texttt{e}} \label{sec:e} This constant, where {\tt e='xxx'}, is only for use by post-processors: it denotes the name of the equations file and is stored in the bifurcation diagram file (\filef{fort.7}), so restarts in the Python interface are possible without needing to specify the equations file. \subsection{\texttt{sv}} \label{sec:sv} This constant specifies a string to write the output to instead of {\tt fort.7}, {\tt fort.8}, and {\tt fort.9}: if {\tt sv='xxx'}, then the output files are {\tt b.xxx}, {\tt s.xxx}, and {\tt d.xxx}. \subsection{\texttt{NPR}} \label{sec:NPR} This constant can be used to regularly write {\tt fort.8} plotting and restart data. IF {\tt NPR}$>$0 then such output is written every {\tt NPR} steps. IF {\tt NPR}$=$0 or if {\tt NPR}$\ge${\tt NMX} then no such output is written. Note that special solutions, such as branch points, folds, end points, etc., are always written in {\tt fort.8}. Furthermore, one can specify parameter values where plotting and restart data is to be written; see Section~\ref{sec:UZR}. For these reasons, and to limit the output volume, it is recommended that {\tt NPR} output be kept to a minimum. \subsection{\texttt{IBR}} \label{sec:IBR} This constant specifies the initial branch number {\tt BR} that is used. The default {\tt IBR=0} means that that this number is determined automatically. \subsection{\texttt{LAB}} \label{sec:LAB} This constant specifies the initial label number {\tt LAB} that is used. The default {\tt LAB=0} means that that this number is determined automatically. Using {\tt LAB=1} means you do not need to relabel after a non-appended continuation if this is desired. \subsection{\texttt{IIS}} \label{sec:IIS} This constant controls the amount of information printed in {\tt fort.8}~: the greater {\tt IIS} the more solutions contain the corresponding vector giving the direction of the branch. The direction of the branch is necessary for restart points when switching branches, but make the solution file almost two times bigger than necessary when switching branches is never performed from solutions in this file. \begin{itemize} \item[-] {\tt IIS=0}~: The direction of the branch is never provided. \item[-] {\tt IIS=1}~: The direction of the branch is only provided at special points from which branch switching can be performed (types LP (boundary value problems only), BP, PD, TR). \item[-] {\tt IIS=2}~: The direction of the branch is provided at all special points but not at regular points without a type label. \item[-] {\tt IIS=3}~: The direction of the branch is always provided. This is the default setting. \end{itemize} \subsection{\texttt{IID}} \label{sec:IID} This constant controls the amount of diagnostic output printed in {\tt fort.9}~: the greater {\tt IID} the more detailed the diagnostic output. \begin{itemize} \item[-] {\tt IID=0}~: No diagnostic output. \item[-] {\tt IID=1}~: Minimal diagnostic output. This setting is not recommended. \item[-] {\tt IID=2}~: Regular diagnostic output. This is the recommended value of {\tt IID}. \item[-] {\tt IID=3}~: This setting gives additional diagnostic output for algebraic equations, namely the Jacobian and the residual vector at the starting point. This information, which is printed at the beginning of {\tt fort.9}, is useful for verifying whether the starting solution in {\tt STPNT} is indeed a solution. \item[-] {\tt IID=4}~: This setting gives additional diagnostic output for differential equations, namely the reduced system and the associated residual vector. This information is printed for every step and for every Newton iteration, and should normally be suppressed. In particular it can be used to verify whether the starting solution is indeed a solution. For this purpose, the stepsize {\tt DS} should be small, and one should look at the residuals printed in the {\tt fort.9} output-file. (Note that the first residual vector printed in {\tt fort.9} may be identically zero, as it may correspond to the computation of the starting direction. Look at the second residual vector in such case.) This residual vector has dimension {\tt NDIM}+{\tt NBC}+{\tt NINT}+1, which accounts for the {\tt NDIM} differential equations, the {\tt NBC} boundary conditions, the {\tt NINT} user-defined integral constraints, and the pseudo-arclength equation. For proper interpretations of these data one may want to refer to the solution algorithm for solving the collocation system, as described in \citename{DoKeKe:91b} \citeyear{DoKeKe:91b}. \item[-] {\tt IID=5}~: This setting gives very extensive diagnostic output for differential equations, namely, debug output from the linear equation solver. This setting should not normally be used as it may result in a huge {\tt fort.9} file. It gives incomplete results when used in combination with MPI parallellization. \end{itemize} \subsection{\texttt{IPLT}} \label{sec:IPLT} This constant allows redefinition of the principal solution measure, which is printed as the second (real) column in the screen output and in the {\tt fort.7} output-file~: \begin{itemize} \item[-] If {\tt IPLT} = 0 then the $L_2$-norm is printed. Most demos use this setting. For algebraic problems, the standard definition of $L_2$-norm is used. For differential equations, the $L_2$-norm is defined as $$ \sqrt{ \int_0^1 \sum_{k=1}^{NDIM} U_k(x)^2 ~ dx}~.$$ Note that the interval of integration is $[0,1]$, the standard interval used by AUTO. For periodic solutions the independent variable is transformed to range from 0 to 1, before the norm is computed. The AUTO-constants THL(*) and THU(*) (see Section~\ref{sec:THL} and Section~\ref{sec:THU}) affect the definition of the $L_2$-norm. \item[-] If 0 $<$ {\tt IPLT} $\le$ {\tt NDIM} then the maximum of the {\tt IPLT}'th solution component is printed. \item[-] If $-${\tt NDIM} $\le$ {\tt IPLT} $<$0 then the minimum of the {\tt IPLT}'th solution component is printed. (Demo {\tt fsh}.) \item[-] If {\tt NDIM} $<$ {\tt IPLT} $\le$ 2*{\tt NDIM} then the integral of the ({\tt IPLT}$-${\tt NDIM})'th solution component is printed. (Demos {\tt exp}, {\tt lor}.) \item[-] If 2*{\tt NDIM} $<$ {\tt IPLT} $\le$ 3*{\tt NDIM} then the $L_2$-norm of the ({\tt IPLT}$-${\tt NDIM})'th solution component is printed. (Demo {\tt frc}.) \end{itemize} Note that for algebraic problems the maximum and the minimum are identical. Also, for ODEs the maximum and the minimum of a solution component are generally much less accurate than the $L_2$-norm and component integrals. Note also that the routine {\tt PVLS} provides a second, more general way of defining solution measures; see Section~\ref{sec:Parameter_over_specification}. \subsection{\texttt{UZR}} \label{sec:UZR} This constant allows the setting of parameter values at which labeled plotting and restart information is to be written in the {\tt fort.8} output-file. Optionally, it also allows the computation to terminate at such a point. \begin{itemize} \item[-] Set {\tt UZR=\{\}} if no such output is needed. Many demos use this setting. \item[-] Else one must enter pairs, ~\{{\it Parameter-Index} : {\it Parameter-Value}, ...\}~,\\ or indices with lists of values, ~\{{\it Parameter-Index} : \[{\it Parameter-Value}, ...\], ...\}~, to designate the parameters and the parameter values at which output is to be written. For examples see demos {\tt exp}, {\tt int}, and {\tt fsh}. \item[-] If such a parameter index is preceded by a minus sign then the computation will terminate at such a solution point. See also \texttt{STOP} in Section~\ref{sec:STOP} above and \texttt{UZSTOP} in Section~\ref{sec:UZSTOP} below for alternative termination methods. (Demos {\tt pen} and {\tt bru}.) \end{itemize} Note that {\tt fort.8} output can also be written at selected values of overspecified parameters. For an example see demo {\tt pvl}. For details on overspecified parameters see Section~\ref{sec:Parameter_over_specification}. \subsection{\texttt{UZSTOP}} \label{sec:UZSTOP} This constant specifies parameter values in the same way as \texttt{UZR} in Section~\ref{sec:UZR} above, but the computation will always terminate if any solution point that is specified is encountered. %===================================================================== \section{ Quick reference} \vspace{-2.5mm} \begin{tabular}{|l|l|} \hline {\tt e}, {\tt s}, {\tt dat}, {\tt sv} & Define file names: equation prefix (.f,.f90,.c), restart solution suffix (s.), \\ & user data prefix (.dat), output suffix (b.,s.,d.)\\ \hline {\tt unames}, {\tt parnames} & Dictionary (mapping) of U(*) and PAR(*) to user-defined names\\ \hline {\tt NDIM} & Problem dimension \\ {\tt IPS} & Problem type; 0=AE, 1=FP(ODEs), -1=FP(maps), 2=PO, -2=IVP,\\ & 4=BVP, 7=BVP with Floquet multipliers, 5=algebraic optimization \\ & problem, 15=optimization of periodic solutions \\ {\tt IRS}, {\tt TY} & Start solution label, start solution type\\ {\tt ILP} & Fold detection; 1=on, 0=off \\ \hline {\tt ICP} & Continuation parameters \\ \hline {\tt NTST} & \# mesh intervals \\ {\tt NCOL} & \# collocation points \\ {\tt IAD} & Mesh adaption every IAD steps; 0=off \\ {\tt ISP} & Bifurcation detection; 0=off, 1=BP(FP), 3=BP(PO,BVP), 2=all \\ {\tt ISW} & Branch switching; 1=normal, -1=switch branch (BP, HB, PD),\\ & 2=switch to two-parameter continuation (LP, BP, HB, TR) \\ & 3=switch to three-parameter continuation (BP) \\ {\tt IPLT} & Select principal solution measure \\ {\tt NBC} & \# boundary conditions \\ {\tt NINT} & \# integral conditions \\ \hline {\tt NMX} & Maximum number of steps \\ {\tt RL0, RL1} & Parameter interval $ RL0 \leq \lambda \leq RL1$ \\ {\tt A0, A1} & Interval of principal solution measure $ A0 \leq \Vert\cdot\Vert \leq A1$ \\ \hline {\tt NPR} & Print and save restart data every NPR steps \\ {\tt MXBF} & Automatic branch switching for the first MXBF bifurcation \\ & points if IPS=0, 1 \\ {\tt IBR}, {\tt LAB} & Set initial branch and label number; 0=automatic \\ {\tt IIS} & Control solution output of branch direction vector; 0=never, 3=always \\ {\tt IID} & Control diagnostic output; 0=none, 1=little, 2=normal, 4=extensive \\ {\tt ITMX} & Maximum \# of iterations for locating special solutions/points \\ {\tt ITNW} & Maximum \# of correction steps \\ {\tt NWTN} & Corrector uses full newton for NWTN steps \\ {\tt JAC} & User defines derivatives; 0=no, 1=yes \\ \hline {\tt EPSL}, {\tt EPSU}, {\tt EPSS} & Convergence criterion: parameters, solution components, special points\\ \hline {\tt DS} & Start step size \\ {\tt DSMIN, DSMAX} & Step size interval $\mathtt{DSMIN} \leq h \leq \mathtt{DSMAX}$ \\ {\tt IADS} & Step size adaption every IADS steps; 0=off \\ \hline {\tt NPAR} & Maximum number of parameters \\ {\tt THL, THU} & list of parameter and solution weights \\ \hline {\tt UZR}, {\tt UZSTOP} & list of values for user defined output\\ {\tt SP}, {\tt STOP} & list of bifurcations to check and bifurcation stop conditions\\ \hline {\tt NUNSTAB}, {\tt NSTAB} & HomCont: unstable and stable manifold dimensions\\ {\tt IEQUIB}, {\tt ITWIST}, {\tt ISTART} & HomCont: control solution types adjoint, starting\\ {\tt IREV}, {\tt IFIXED}, {\tt IPSI} & HomCont: control reversibility, fixed parameters, test functions\\ \hline \end{tabular} %============================================================================== %============================================================================== \chapter{ Notes on Using {\cal AUTO}.} \label{ch:Notes_on_Using_AUTO} %============================================================================== %============================================================================== \section{ Restrictions on the Use of \texttt{PAR}.} \label{sec:Restrictions_on_PAR} The array {\tt PAR} in the user-supplied routines is available for equation parameters that the user wants to vary at some point in the computations. In any particular computation the free parameter(s) must be designated in {\tt ICP}; see Section~\ref{sec:Free_parameters}. The following restrictions apply~: \begin{itemize} \item[-] The default maximum number of parameters, \parf{NPAR} has a pre-defined value in \filef{auto/07p/ include/auto.h}, of \parf{NPARX}=36. Any change \parf{NPARX} must be followed by recompilation of {\cal AUTO}. \item[-] Generally one should avoid certain parameters for equation parameters, as {\cal AUTO} may need those internally, as follows: \begin{description} \item[\parf{IPS}=0,4:] No additional parameters with indices less than or equal to \parf{NPAR} are reserved. \item[\parf{IPS}=$-$1,1,2,7:] \AUTO reserves \parf{PAR(11)} to store the period for stationary solutions at Hopf bifurcations only and continuously for periodic orbits. For \parf{IPS}=2 and \parf{IPS}=7, \AUTO also reserves \parf{PAR(12)} to store the angle of the torus at torus bifurcations. \item[\parf{IPS}=$-$2:] The integration time is stored in \parf{PAR(14)}. \item[\parf{IPS}=5:] The value of the objective functional is stored in \parf{PAR(10)}. \item[\parf{IPS}=9:] The length in time of the truncated homoclinic or heteroclinic orbit is stored in \parf{PAR(11)}. For the adjoint variational equations, \parf{PAR(10)} is used. The equilibria are stored in \parf{PAR(11)} to \parf{PAR(11+NDIM-1)}/\parf{PAR(11+2*NDIM-1)} (homoclinic/heteroclinic). Test function values may be stored in \parf{PAR(21)} to \parf{PAR(36)}. Homoclinic branch switching uses \parf{PAR(20)} and higher to store time intervals and gap sizes. \item[\parf{IPS}=11,12:] The wave speed is in \parf{PAR(10)}, and the diffusion constants in \parf{PAR(15,16,$\cdots$)}. The period (for periodic solutions and at Hopf bifurcations) is stored in \parf{PAR(11)}. \item[\parf{IPS}=14,16:] \AUTO uses \parf{PAR(14)} for the time variable, and the diffusion constants are in \parf{PAR(15,16,$\cdots$)}. The period is stored in \parf{PAR(11)}. The previous time for each step is stored in \parf{PAR(12)}. \item[\parf{IPS}=17:] The diffusion constants are in \parf{PAR(15,16,$\cdots$)}. The period is stored in \parf{PAR(11)}. \item[\parf{IPS}=15:] Only \parf{PAR(1-9)} should be used for problem parameters. \parf{PAR(10)} is the value of the objective functional, \parf{PAR(11)} the period, \parf{PAR(12)} the norm of the adjoint variables, \parf{PAR(14)} and \parf{PAR(15)} are internal optimality variables. \parf{PAR(21-29)} and \parf{PAR(31)} are used to monitor the optimality functionals associated with the problem parameters and the period. \end{description} \end{itemize} \section{ Efficiency.} \label{sec:Efficiency} In {\cal AUTO}, efficiency has at times been sacrificed for generality of programming. This applies in particular to computations in which {\cal AUTO} generates an extended system, for example, computations with {\tt ISW}=2. However, the user has significant control over computational efficiency, in particular through judicious choice of the {\cal AUTO}-constants {\tt DS}, {\tt DSMIN}, and {\tt DSMAX}, and, for ODEs, {\tt NTST} and {\tt NCOL}. Initial experimentation normally suggests appropriate values. Slowly varying solutions to ODEs can often be computed with remarkably small values of {\tt NTST} and {\tt NCOL}, for example, {\tt NTST}=5, {\tt NCOL}=2. Generally, however, it is recommended to set {\tt NCOL}=4, and then to use the ``smallest'' value of {\tt NTST} that maintains convergence. The choice of the pseudo-arclength stepsize parameters {\tt DS}, {\tt DSMIN}, and {\tt DSMAX} is highly problem dependent. Generally, {\tt DSMIN} should not be taken too small, in order to prevent excessive step refinement in case of non-convergence. It should also not be too large, in order to avoid instant non-convergence. {\tt DSMAX} should be sufficiently large, in order to reduce computation time and amount of output data. On the other hand, it should be sufficiently small, in order to prevent stepping over bifurcations without detecting them. For a given equation, appropriate values of these constants can normally be found after some initial experimentation. The constants {\tt ITNW}, {\tt NWTN}, {\tt THL}, {\tt EPSU}, {\tt EPSL}, {\tt EPSS} also affect efficiency. Understanding their significance is therefore useful; see Section~\ref{sec:Tolerances} and Section~\ref{sec:step_size}. Finally, it is recommended that initial computations be done with {\tt ILP=0}; no fold detection; and {\tt ISP}=1; no bifurcation detection for ODEs. \section{ Correctness of Results.} \label{sec:Correctness} {\cal AUTO}-computed solutions to ODEs are almost always structurally correct, because the mesh adaption strategy, if {\tt IAD}$>$0, safeguards to some extent against spurious solutions. If these do occur, possibly near infinite-period orbits, the unusual appearance of the solution family typically serves as a warning. Repeating the computation with increased {\tt NTST} is then recommended. \section{ Bifurcation Points and Folds.} \label{sec:Bifurcations} It is recommended that the detection of folds and bifurcation points be initially disabled. For example, if an equation has a ``vertical'' solution family then {\cal AUTO} may try to locate one fold after another. Generally, degenerate bifurcations cannot be detected. Furthermore, bifurcations that are close to each other may not be noticed when the pseudo-arclength step size is not sufficiently small. Hopf bifurcation points may go unnoticed if no clear crossing of the imaginary axis takes place. This may happen when there are other real or complex eigenvalues near the imaginary axis and when the pseudo-arclength step is large compared to the rate of change of the critical eigenvalue pair. A typical case is a Hopf bifurcation close to a fold. Similarly, Hopf bifurcations may go undetected if switching from real to complex conjugate, followed by crossing of the imaginary axis, occurs rapidly with respect to the pseudo-arclength step size. Secondary periodic bifurcations may not be detected for similar reasons. In case of doubt, carefully inspect the contents of the diagnostics file {\tt fort.9}. \section{ Floquet Multipliers.} \label{sec:Floquet_multipliers} {\cal AUTO} extracts an approximation to the linearized Poincar\'e map from the Jacobian of the linearized collocation system that arises in Newton's method. This procedure is very efficient; the map is computed at negligible extra cost. The linear equations solver of {\cal AUTO} is described in \citename{DoKeKe:91b} \citeyear{DoKeKe:91b}. The actual Floquet multiplier solver was written by \citename{Fa:94} \citeyear{Fa:94}. For a detailed description of the algorithm see \citename{FaJe:91} \citeyear{FaJe:91}. For periodic solutions, the exact linearized Poincar\'e map always has a multiplier $z=1$. A good accuracy check is to inspect this multiplier in the diagnostics output-file {\tt fort.9}. If this multiplier becomes inaccurate then the automatic detection of potential secondary periodic bifurcations (if {\tt ISP}=2) is discontinued and a warning is printed in {\tt fort.9}. It is strongly recommended that the contents of this file be habitually inspected, in particular to verify whether solutions labeled as BP or TR (cf.~Table~\ref{tbl:Solution_Types}) have indeed been correctly classified. \section{ Memory Requirements.} \label{sec:Memory_requirements} The run-time memory requirements depend on the values the user set in the constants file and are roughly proportional to the value ${\tt NTST}\times({\tt NDIM}\times({\tt NCOL}+1)+{\tt NBC})\times ({\tt NDIM}\times{\tt NCOL}+{\tt NINT}+1)$. %============================================================================== %============================================================================== \chapter{ \AUTO Demos : Tutorial.} \label{ch:Demos:_Tutorial} %============================================================================== %============================================================================== \newpage \section{ Introduction.} \label{sec:Tutorial_Introduction} The directory {\tt auto/07p/demos} has a large number of subdirectories, for example {\tt ab}, {\tt pp2}, {\tt exp}, etc., each containing all necessary files for certain illustrative calculations. Each subdirectory, say {\tt xxx}, corresponds to a particular equation and contains one equations-file \filef{xxx.\{f90,f,c\}} and one or more constants-files \filef{c.xxx.i}, one for each successive run of the demo. You also find \python script files \filef{xxx.auto} and \filef{clean.auto}: the command \filef{auto xxx.auto} runs the demo, and the command \filef{auto clean.auto} deletes all generated files. To see how the equations have been programmed, inspect the equations-file. To understand in detail how {\cal AUTO} is instructed to carry out a particular task, inspect the appropriate constants-file and \python script. In this chapter we describe the tutorial demo {\tt cusp} in detail. A brief description of other demos is given in later chapters. \section{ cusp : A Tutorial Demo.} \label{sec:Demos_cusp} This demo illustrates the computation of stationary solutions, locating saddle-node bifurcations of these solutions, and the continuation of a saddle-node bifurcation in two parameters.\\ The cusp normal form equation is given by \begin{equation} \dot x = \mu + \lambda x - x^3. \end{equation} \section{ Copying the Demo Files.} \label{sec:Tutorial_copying} The commands listed in Table~\ref{tbl:demo_cusp_1} will copy the demo files to your work directory. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\cal Unix}-COMMAND & ACTION \\ \hline %============================================================================== \commandf{auto} & start the AUTO-07p Command Line User Interface\\ \hline \AUTO-COMMAND & ACTION \\ \hline \commandf{cd } & go to main directory (or other directory).\\ \commandf{mkdir cusp} & \parbox[t]{3in}{create an empty work directory. Note: the '!' is used to signify a command which is sent to the shell.\vspace{0.2cm}}\\ \commandf{cd cusp} & change to the work directory.\\ \commandf{demo('cusp')} & copy the demo files to the work directory.\\ \hline %============================================================================== \end{tabular} \caption{Copying the demo \filef{cusp} files.} \label{tbl:demo_cusp_1} \end{center} \end{table} Typing \commandf{ls} reveals the existence of 5 files: \begin{enumerate} \item \commandf{cusp.f90}: This file contains the differential equations and the initial values. If you inspect it, you will see that only two routines are used. The subroutine {\tt FUNC} specifies the actual differential equation. The routine {\tt STPNT} gives {\cal AUTO} the initial values of {\tt PAR(1)}$=\lambda$ and {\tt PAR(2)}$=\mu$, which are $1.0$ and $0.0$, and the initial value of $x$, which is $0$. For your own models you would generally copy another equation file and then only change the pieces that actually define the equation. \item \commandf{c.cusp}: The initial computational constants are stored in this file. Most importantly, you see that the dimension of the problem (\parf{NDIM}) is set to 1, and the problem type \parf{IPS} is set to 1 to specify continuation of a stationary solution. The constants given by \parf{ICP} specify the parameters that are used for the continuation. In this case these are 'mu' for $\mu$ and 'lambda' for $\lambda$, which correspond to the indices 2 and 1, respectively, using the constant \parf{parnames}. Since initially we only really continue in one parameter ($\mu$), the second parameter $\lambda$ is \emph{overspecified}. Another important constant is the initial step size {\tt DS}: as it is positive, we initally continue in the positive $\mu$ direction. \item \commandf{cusp.auto}: A script with Python CLUI commands that steer the calculation. \item \commandf{clean.auto}: A script that cleans the directory of all generated files. \item \commandf{autorc}: A file that contains default settings for the 2-dimensional plotting tool {\cal PyPLAUT}. \item \commandf{plaut04.rc}: A file that contains default settings for the 3-dimensional plotting tool {\cal PLAUT04}. \end{enumerate} \section{ Executing all Runs Automatically.} \label{sec:Tutorial_all_runs} To execute all prepared runs of demo \filef{cusp}, simply type the command given in Table~\ref{tbl:demo_cusp_2}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{demofile('cusp.auto')} & \parbox[t]{3in}{execute all runs of demo \filef{cusp} interactively\vspace{0.2cm}}\\ \hline %============================================================================== \end{tabular} \caption{Executing all runs of demo \filef{cusp}.} \label{tbl:demo_cusp_2} \end{center} \end{table} The command in Table~\ref{tbl:demo_cusp_2} begins a tutorial which will proceed one step each time the user presses a key. Each step consists of a single \AUTO command preceded by instructions as to what action the command performs. The tutorial script \filef{cusp.auto} performs the demo by reading in a single \AUTO constants file and then interactively modifying it to perform each of the demo. The essential commands in \filef{cusp.auto} are given in Table~\ref{tbl:demo_cusp_4a}. Note that there are four separate runs, where each \commandf{run} command performs a run. In the first run, a branch of stationary solutions is traced out. Along it, one fold (LP) (limit point, or in this case, a saddle-node bifurcation) is located. The free parameter is $\mu$. The other parameter $\lambda$ remains fixed in this run. Note also that only special, labeled solution points are printed on the screen. Detailed results are saved in the \python variable \parf{mu}. The second run does the same thing but now in the negative direction of $\mu$, i.e., backwards instead of forwards. The backwards continuation is appended to the forwards continuation in the data-files. Afterwards we perform a relabelling to make sure that we have unique labels for each special solution. Next the relabelled result is saved to the data-files \filef{b.mu}, \filef{s.mu}, and \filef{d.mu}. The results are then plotted on the screen. Pressing the enter key at the command line causes an automatic $\mu$ vs. $x$ display that shows the two fold points at labels 2 and 7. In the third run, the fold detected in the first run is followed in the two parameters $\mu$ and $\lambda$. We know that label 2, with solution \parf{mu(2)} is the right solution to start from. However, we did not know this number in advance, and moreover, in sensitive cases, it can be different on different computer types. Another way to specify the starting label is to use the notation \parf{mu('LP1')}: this specifies the first LP-labelled solution of all solutions in \parf{mu}. Furthermore the command that accomplishes this must change the constant {\tt ISW} of the constants file: it must be set to 2 to cause a two-parameter continuation. The fourth run continues this branch in opposite direction. The detailed results of these continuations are saved in the data-files \filef{b.cusp}, \filef{s.cusp}, and \filef{ d.cusp}. Finally, a plot of the cusp is produced. The numerical results are given below in somewhat abbreviated form. Some differences in output are to be expected on different machines. This does not mean that the results have different accuracy, but simply that arithmetic differences have accumulated from step to step, possibly leading to different step size decisions. Next, reset the work directory, by typing the command given in Table~\ref{tbl:demo_cusp_3}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{clean()} & remove temporary files of demo \filef{cusp} \\ \commandf{delete('mu')} & remove 'mu' data-files of demo \filef{cusp} \\ \commandf{delete('cusp')} & remove 'cusp' data-files of demo \filef{cusp} \\ \hline %============================================================================== \end{tabular} \caption{Cleaning the demo \filef{cusp} work directory.} \label{tbl:demo_cusp_3} \end{center} \end{table} \begin{center} \vspace{-0.2in} \begin{verbatim} # Run forwards BR PT TY LAB mu L2-NORM x lambda 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1 14 LP 2 3.84900E-01 5.77360E-01 -5.77360E-01 1.00000E+00 1 20 3 1.26582E-01 9.29410E-01 -9.29410E-01 1.00000E+00 1 40 4 -1.38347E+00 1.40803E+00 -1.40803E+00 1.00000E+00 1 47 UZ 5 -1.99999E+00 1.52138E+00 -1.52138E+00 1.00000E+00 # Run backwards BR PT TY LAB mu L2-NORM x lambda 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1 14 LP 2 -3.84900E-01 5.77360E-01 5.77360E-01 1.00000E+00 1 20 3 -1.26582E-01 9.29410E-01 9.29410E-01 1.00000E+00 1 40 4 1.38347E+00 1.40803E+00 1.40803E+00 1.00000E+00 1 47 UZ 5 1.99999E+00 1.52138E+00 1.52138E+00 1.00000E+00 # Forward continuation of the first fold in two parameters BR PT TY LAB mu L2-NORM x lambda 2 20 11 1.09209E+00 8.17354E-01 -8.17354E-01 2.00420E+00 2 34 UZ 12 1.99995E+00 9.99991E-01 -9.99991E-01 2.99995E+00 # Backward continuation of the fold in two parameters BR PT TY LAB mu L2-NORM x lambda 2 20 11 5.42543E-02 3.00470E-01 -3.00470E-01 2.70847E-01 2 29 CP 12 -2.02768E-12 1.00472E-04 1.00472E-04 3.02837E-08 2 40 13 -9.09414E-02 3.56925E-01 3.56925E-01 3.82187E-01 2 60 14 -5.73716E-01 6.59512E-01 6.59512E-01 1.30487E+00 2 80 15 -1.68023E+00 9.43582E-01 9.43582E-01 2.67104E+00 2 85 UZ 16 -1.99995E+00 9.99992E-01 9.99992E-01 2.99995E+00 \end{verbatim} \end{center} The CLUI was used to generate the constants file at runtime. In the example below, the constant file \filef{c.cusp} will be read in, and the CLUI will be used to make the appropriate changes to perform the calculation. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{cusp = load('cusp')} & load the problem definition \filef{cusp} \\ \commandf{mu = run(cusp)} & execute the run \\ \commandf{mu = mu + run(cusp,DS='-')} & execute the run backwards and \\ & append the results to \parf{mu}\\ \commandf{mu = rl(mu) } & relabel solutions in mu \\ \commandf{save(mu, 'mu')} & save the results in the files \filef{b.mu}, \filef{s.mu}, and \filef{d.mu}\\ \commandf{lp1 = load(mu('LP1'), ISW=2)} & use the first fold (LP) in \parf{mu} as the restart solution,\\ & and change ISW to 2.\\ \commandf{cusp = run(lp1) } & execute the third run of demo \filef{cusp} \\ \commandf{cusp = cusp + run(lp1,DS='-') } & execute the fourth run of demo \filef{cusp} \\ \commandf{save(cusp,'cusp')} & save the results in the files \filef{b.cusp}, \filef{s.cusp}, and \filef{d.cusp}\\ \hline %============================================================================== \end{tabular} \caption{Selected runs of demo \filef{cusp}.} \label{tbl:demo_cusp_4a} \end{center} \end{table} \section{ Plotting the Results with \AUTO.} \label{sec:Tutorial_plotting} The bifurcation diagram computed in the runs above was stored in the files \filef{b.mu} and \filef{b.cusp}, while each labeled solution is fully stored in \filef{s.mu} and \filef{s.cusp}. To use \AUTO to graphically inspect these data-files. type the \AUTO-command given in Table~\ref{tbl:demo_cusp_7}. The saved plots are shown in Figure~\ref{fig:cusp_1} and in Figure~\ref{fig:cusp_2}. Figure~\ref{fig:cusp_1} shows the bifurcation diagrams for the first run, and Figure~\ref{fig:cusp_2} for the second run. The plotting window consists of a menubar at the top, a plotting area, and a control panel with four control widgets at the bottom. By default the first two columns in the bifurcation diagram output are plotted against each other. To obtain a $\mu$ versus $x$ bifurcation diagram you need to plot column 'mu' versus column 'x'. You can do that by changing the ``Y'' box to say ``[x]'', either by typing it there, by using the menu obtained by clicking the downwards facing triangle or by using a scripted command as used in \filef{cusp.auto}. You can also change the mode of the plotting tool from ``bifurcation'' to ``solution''. This is accomplished by clicking on the widget marked ``Type'' on the bottom control panel and setting it from ``bifurcation'' to ``solution''. In the plotting window will appear a plot of the first labeled solution, in this case just a point. You can plot all points by changing the ``Label'' to ``[1,2,3,4,5,6,7,8,9,10]''. The plotting tool can also be used to create Postscript files from plots by selecting the ``File'' on the menubar and then selecting the ``Save Postscript...'' from the drop down menu. This will bring up a dialog into which the user can enter the filename of the postscript file to save the plot in. When using matplotlib you can also click on the floppy disk icon to save using a variety of file formats. Further information on the plotting tool can be found in Section~\ref{clui:plotting}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{plot(mu)} & run \AUTO to graph the contents of \parf{mu}\\ \commandf{plot("mu")} & run \AUTO to graph the contents of \filef{b.mu} and \filef{s.mu}; \\ & (this is the same as \commandf{plot(loadbd("mu"))})\\ %============================================================================== \hline \end{tabular} \caption{Commands for plotting or the bifurcation diagram and solutions of the \python variable \parf{mu}, and the files \filef{b.mu} and \filef{s.mu}} \label{tbl:demo_cusp_7} \end{center} \end{table} \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/cusp1}} \caption{The first bifurcation diagram of demo \filef{cusp}.} \label{fig:cusp_1} \end{figure} \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/cusp2}} \caption{The second bifurcation diagram of demo \filef{cusp}.} \label{fig:cusp_2} \end{figure} \section{ Plotting the Results with \AUTO in 3D.} Whilst not very useful for this simple example, you can also plot your results in 3D, using the \commandf{plot3} command ({\cal PLAUT04}), for example \commandf{plot3('mu')}. Unlike the PyPLAUT tool by default, this shows the stable and unstable parts: blue is stable, and red is unstable. You can also spin the bifurcation diagram around and zoom in using the mouse. \section{ Exporting the Results for different plotters.} It is often useful to use other plotting programs or general-purpose tools to work with AUTO's data. The ``writeRawFilename'' method (see also Section~\ref{sec:clui_exporting}) can be used for this. In this tutorial we can for instance export the bifurcation diagram using\\ \commandf{cusp.writeRawFilename('cusp.dat') }, and then use the command \commandf{plot 'cusp.dat' using 1:4 wi li } to plot the bifurcation diagram in GNUPlot. \newpage \section{ ab : A Programmed Demo.} \label{sec:Demos_ab} %============================================================================== %DEMO=ab======================================================================= %============================================================================== This demo illustrates the computation of stationary solutions, Hopf bifurcations and periodic solutions. The equations, that model an A $\to$ B reaction, are those from \citename{URP:74} \citeyear{URP:74}, namely \begin{equation} \begin{array}{cl} u_1 ' &= -u_1 + p_1 (1-u_1) e^{u_2}, \\ u_2 ' &= -u_2 + p_1 p_2 ( 1-u_1) e^{u_2} - p_3 u_2.\\ \end{array} \end{equation} This demo is fully scripted, see Table~\ref{tbl:demo_ab}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir ab} & create an empty work directory \\ \commandf{cd ab} & change directory \\ \commandf{demo('ab')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{auto('ab.auto')} & run the demo \\ \hline \end{tabular} \caption{Commands for running demo \filef{ab}.} \label{tbl:demo_ab} \end{center} \end{table} If you look at the file \filef{ab.auto } you see that the script computes a stationary solution family for certain values of $p_2$, and that a periodic orbit family is computed for each Hopf bifurcation that was found in the stationary solution families. %============================================================================== %============================================================================== \chapter{ \AUTO Demos : Fixed points.} \label{ch:Demos_Fixed_points} %============================================================================== %============================================================================== %============================================================================== %DEMO=enz====================================================================== %============================================================================== \section{ enz : Stationary Solutions of an Enzyme Model.} \label{sec:Demos_enz} The equations, that model a two-compartment enzyme system (\citename{JPK:80} \citeyear{JPK:80}), are given by \begin{equation} \label{2'} \begin{array}{cl} s_1 '&= (s_0 - s_1) + (s_2 - s_1) - \rho R (s_1), \\ s_2 '&= (s_0 +\mu - s_2) + (s_1 - s_2) - \rho R (s_2), \\\end{array} \end{equation} where $$ R (s)=\frac{s}{1+s+ \kappa s^{2} }.$$ The free parameter is $s_0$. Other parameters are fixed. This equation is also considered in \citename{DoKeKe:91a} \citeyear{DoKeKe:91a}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir enz} & create an empty work directory \\ \commandf{cd enz} & change directory \\ \commandf{demo('enz')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{run('enz')} & compute stationary solution families \\ \commandf{save('enz')} & save output-files as \filef{b.enz, s.enz, d.enz} \\ \hline \end{tabular} \caption{Python commands for running demo \filef{enz}.} \label{tbl:demo_enz} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir enz} & create an empty work directory \\ \commandf{cd enz} & change directory \\ \commandf{@dm enz} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{@r enz} & compute stationary solution families \\ \commandf{@sv enz} & save output-files as \filef{b.enz, s.enz, d.enz} \\ \hline \end{tabular} \caption{Shell commands for running demo \filef{enz}.} \label{tbl:demo_enz2} \end{center} \end{table} \newpage %============================================================================== %DEMO=dd2====================================================================== %============================================================================== \section{ dd2 : Fixed Points of a Discrete Dynamical System.} \label{sec:Demos_dd2} This demo illustrates the computation of a solution family and its bifurcating families for a discrete dynamical system. Also illustrated are the continuation of period-doubling bifurcations, and branch switching at such points. The equations, a discrete predator-prey system, are \begin{equation} \begin{array}{cl} u_1^{k+1} &=p_1 u_1^{k}(1-u_1^{k})-p_2u_1^{k} u_2^{k},\\ u_2^{k+1}&=(1-p_3)u_2^{k}+p_2u_1^{k}u_2^{k}.\\ \end{array} \end{equation} In the first, third, and fourth run $p_1$ is free. In the second run, both $p_1$ and $p_2$ are free. The remaining equation parameter, $p_3$, is fixed in both runs. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir dd2 } & create an empty work directory \\ \commandf{cd dd2 } & change directory \\ \commandf{demo('dd2') } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='dd2',c='dd2')} & 1st run; fixed point solution branches \\ \commandf{save('dd2')} & save output-files as \filef{b.dd2, s.dd2, d.dd2} \\ \hline %============================================================================== \commandf{run(r1("PD1"),ICP=["p1","p2"],ISW=2)} & \parbox[t]{3in}{2nd run; a locus of period-doubling bifurcations. \vspace{0.2cm}}\\ \commandf{save('pd')} & save output-files as \filef{b.pd, s.pd, d.pd} \\ \hline %============================================================================== \commandf{r3=run(r1("PD1"),ISW=-1)} & \parbox[t]{3in}{3rd run; the bifurcating period-2 orbit. \vspace{0.2cm}}\\ \commandf{append('dd2')} & append output-files to \filef{b.dd2, s.dd2, d.dd2} \\ \hline %============================================================================== \commandf{run(r3("PD1"))} & \parbox[t]{3in}{4th run; the bifurcation period-4 orbit. \vspace{0.2cm}}\\ \commandf{append('dd2')} & append output-files to \filef{b.dd2, s.dd2, d.dd2} \\ \hline \end{tabular} \caption{Commands for running demo \filef{dd2}.} \label{tbl:demo_dd2} \end{center} \end{table} \newpage %============================================================================== %DEMO=log====================================================================== %============================================================================== \section{ log : The Logistic Map.} \label{sec:Demos_log} This demo shows 5 subsequent periodic doublings in the logistic map \begin{equation} \begin{array}{cl} x^{k+1} &= \mu x (1-x),\\ \end{array} \end{equation} and approximates the Feigenbaum constant. The script \filef{log.auto} shows a Python loop in which values of $\mu$ for subsequent period-doubling bifurcations are compared. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir log } & create an empty work directory \\ \commandf{cd log } & change directory \\ \commandf{demo('log') } & copy the demo files to the work directory \\ \commandf{auto('log.auto') } & run the script log.auto \\ \commandf{plot('log') } & plot the bifurcation diagram \\ \hline \end{tabular} \caption{Commands for running demo \filef{log}.} \label{tbl:demo_log} \end{center} \end{table} \newpage %============================================================================== %DEMO=hen====================================================================== %============================================================================== \section{ hen: The H\'enon Map.} \label{sec:Demos_hen} In this demo, a two-parameter bifurcation analysis of the H\'enon map \begin{equation} \begin{array}{cl} x^{k+1} &= y,\\ y^{k+1} &= \alpha-\beta x - y^2,\\ \end{array} \end{equation} is performed. This demo features the detection and continuation of Naimark-Sacker, period-doubling, and fold bifurcations in two parameters. On these codimension-one bifurcation curves certain codimension-two bifurcations are detected: the 1:1 (R1), 1:2 (R2), 1:3 (R3), and 1:4 (R4) resonance and fold-flip (LPD) bifurcation points. After running the script \filef{hen.auto}, the results can be plotted using \commandf{plot('hen')} or \commandf{@pp hen}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir hen } & create an empty work directory \\ \commandf{cd hen } & change directory \\ \commandf{demo('hen') } & copy the demo files to the work directory \\ \commandf{r1 = run('hen')} & \parbox[t]{3in}{ fixed point solution branch for $\beta$ ($\alpha=1$) (detects a period-doubling (PD) and a Naimark-Sacker (TR) bifurcation)\vspace{0.1cm}} \\ \commandf{save('beta')} & save output-files as \filef{b.beta, s.beta, d.beta} \\ \hline \parbox[t]{3in}{ \commandf{run(r1("TR1"),ICP=['alpha','beta'], ISW=2,ILP=0,STOP=['R11','R21'])}\vspace{0.1cm}}& \parbox[t]{3in}{ continue the TR bifurcation in two parameters until a 1:1 or 1:2 resonance is found\vspace{0.1cm}}\\ \commandf{save('hen')} & save output-files as \filef{b.hen, s.hen, d.hen} \\ \commandf{run(DS='-')} & compute last continuation the opposite way\\ \commandf{append('hen')} & append output-files to \filef{b.hen, s.hen, d.hen} \\ \hline \parbox[t]{3in}{ \commandf{run(r1("PD1"),ICP=['alpha','beta'], ISW=2,ILP=0)}\vspace{0.1cm}}& \parbox[t]{3in}{ continue the PD bifurcation in two parameters\vspace{0.1cm}}\\ \commandf{append('hen')} & append output-files as \filef{b.hen, s.hen, d.hen} \\ \commandf{run(DS='-')} & compute last continuation the opposite way\\ \commandf{append('hen')} & append output-files to \filef{b.hen, s.hen, d.hen} \\ \hline \parbox[t]{3in}{ \commandf{r4=run(c='hen',ICP=['alpha'], DS='-',STOP=['LP1'])}\vspace{0.1cm}}& \parbox[t]{3in}{ fixed point solution branch for $\alpha$ ($\beta=1$) (detects and stops at a fold (LP))\vspace{0.1cm}} \\ \commandf{save('alpha')} & save output-files as \filef{b.alpha, s.alpha, d.alpha} \\ \hline \parbox[t]{3in}{ \commandf{run(r4("LP1"),ICP=['alpha','beta'], ISW=2,ILP=0)}\vspace{0.1cm}}& \parbox[t]{3in}{ continue the LP bifurcation in two parameters}\\ \commandf{append('hen')} & append output-files as \filef{b.hen, s.hen, d.hen} \\ \commandf{run(DS='-')} & compute last continuation the opposite way\\ \commandf{append('hen')} & append output-files to \filef{b.hen, s.hen, d.hen} \\ \hline \commandf{merge('hen')} & \parbox[t]{3in}{ join all forward and backward branches into single branches\vspace{0.1cm}}\\ \commandf{relabel('hen')} & make all labels unique\\ \hline \end{tabular} \caption{Commands for running demo \filef{hen}.} \label{tbl:demo_hen} \end{center} \end{table} %merge('hen') %relabel('hen') %============================================================================== %============================================================================== \chapter{ {\cal AUTO} Demos : Periodic solutions.} \label{ch:Demos_Periodic} %============================================================================== %============================================================================== %============================================================================== %DEMO=lrz====================================================================== %============================================================================== \newpage \section{ lrz : The Lorenz Equations.} \label{sec:Demos_lrz} This demo computes two symmetric homoclinic orbits in the Lorenz equations \begin{equation} \begin{array}{cl} x' &= \sigma (y - x), \\ y' &= \rho x - y - x z, \\ z' &= x y - \beta z. \\ \end{array} \end{equation} Here $\rho$ is the free parameter, and $\beta=8/3$, $\sigma=10$. The two homoclinic orbits correspond to the final, large period orbits on the two periodic solution families. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir lrz} & create an empty work directory \\ \commandf{cd lrz} & change directory \\ \commandf{demo('lrz')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{lrz=run(e='lrz',c='lrz')} & compute stationary solutions \\ \commandf{save('lrz')} & save all output to \filef{b.lrz, s.lrz, d.lrz} \\ \hline %============================================================================== \parbox[t]{3in}{ \commandf{run(lrz('HB1'),IPS=2,ICP=['rho', 'PERIOD'],NMX=35,NPR=2,DS=0.5)}\vspace{0.2cm}} & \parbox[t]{3in}{ compute periodic solutions; the final orbit is near-homoclinic. \vspace{0.2cm}}\\ \commandf{append('lrz')} & append all output to \filef{b.lrz, s.lrz, d.lrz} \\ \hline %============================================================================== \parbox[t]{3in}{ \commandf{run(lrz('HB2'),IPS=2,ICP=['rho', 'PERIOD'],NMX=35,NPR=2,DS=0.5)} \vspace{0.2cm}} & compute the symmetric periodic solution family \\ \commandf{append('lrz')} & append all output to \filef{b.lrz, s.lrz, d.lrz} \\ \hline \end{tabular} \caption{Commands for running demo \filef{lrz}.} \label{tbl:demo_lrz} \end{center} \end{table} \newpage %============================================================================== %DEMO=abc====================================================================== %============================================================================== \section{ abc : The A \texorpdfstring{$\to$}{to} B \texorpdfstring{$\to$}{to} C Reaction.} \label{sec:Demos_abc} This demo illustrates the computation of stationary solutions, Hopf bifurcations and periodic solutions in the A $\to$ B $\to$ C reaction (\citename{DoHe:83} \citeyear{DoHe:83}). \begin{equation} \begin{array}{cl} u_1 ' &= -u_1 + p_1 (1-u_1) e^{u_3}, \\ u_2 ' &= -u_2 + p_1 e^{u_3} ( 1-u_1 - p_5 u_2 ),\\ u_3 ' &= -u_3 - p_3 u_3 + p_1 p_4 e^{u_3} ( 1-u_1 + p_2 p_5 u_2 ),\\ \end{array} \end{equation} with $p_2=1$, $p_3=1.55$, $p_4=8$, and $p_5=0.04$. The free parameter is $p_1$. The equations, as programmed in the equations-file {\tt abc.f90}, appear in Table~\ref{tbl:demo_abcE1}. The starting point, an equilibrium of the equations, is also defined in the equations-file {\tt abc.f90}, as shown in Table~\ref{tbl:demo_abcE2}. (The equations-file {\tt abc.f90} also contains the skeletons of some other routines, which must be supplied, but which are not used in this application.) A more advanced version, that continues branch points in three parameters is provided by the demo {\tt abcb}. In the constants-file ({\tt c.abc.1}) for the first run, as shown in Table~\ref{tbl:demo_abcC1}, we note the following: \begin{itemize} \item[-] {\tt IPS=1}~: a family of stationary solutions is computed. \item[-] {\tt IRS=0}~: the starting point defined in {\tt STPNT} is to be used (see Table~\ref{tbl:demo_abcE2}). \item[-] {\tt ICP=[1]}~: the continuation parameter is PAR(1) \item[-] {\tt UZR=\{-1:0.4\}}~: there is one user output point, namely at {\tt PAR(1)=0.4}. Moreover, since the index ("{\tt -1}") in the last line of the constants-file {\tt c.abc.1} is negative, the calculation will terminate when the calculation reaches the value {\tt PAR(1)=0.4}.. \end{itemize} In the constants-file ({\tt c.abc.2}) for the second run, as shown in Table~\ref{tbl:demo_abcC2}, we note that: \begin{itemize} \item[-] {\tt IPS=2}~: a family of periodic solutions is computed. \item[-] {\tt IRS=2}~: the starting point is the solution with label 2, (a Hopf bifurcation point), to be read from the solutions-file (here {\tt s.abc}). \item[-] {\tt ICP=[1,11]}~: there are two continuation parameters (namely {\tt PAR(1)}, and the period, {\tt PAR(11)}). \item[-] {\tt UZR=\{-1:0.25\}}~: there is one user output point, now at {\tt PAR(1)=0.25}, where the calculation is to terminate, since the index ("{\tt -1}") is negative. \end{itemize} %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION X1,X2,X3,D,ALPHA,BETA,B,S,E,X1C X1=U(1) X2=U(2) X3=U(3) D=PAR(1) ALPHA=PAR(2) BETA=PAR(3) B=PAR(4) S=PAR(5) E=DEXP(X3) X1C=1-X1 F(1)=-X1 + D*X1C*E F(2)=-X2 + D*E*(X1C - S*X2) F(3)=-X3 - BETA*X3 + D*B*E*(X1C + ALPHA*S*X2) END SUBROUTINE FUNC \end{boxedverbatim} \end{center} } \caption{The equations for demo {\tt abc}, as defined in the equations-file {\tt abc.f90}.} \label{tbl:demo_abcE1} \end{table} %------------------------------------------------------ %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0.0 PAR(2)=1.0 PAR(3)=1.55 PAR(4)=8. PAR(5)=0.04 U(1)=0. U(2)=0. U(3)=0. END SUBROUTINE STPNT \end{boxedverbatim} \end{center} } \caption{The starting solution for demo {\tt abc}, as defined in the equations-file {\tt abc.f90}.} \label{tbl:demo_abcE2} \end{table} %------------------------------------------------------ %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} NDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 130, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {1: 0.4}, STOP = ['UZ1'] \end{boxedverbatim} \end{center} } \caption{The constants-file {\tt c.abc.1} for Run 1 (stationary solutions) of demo {\tt abc}.} \label{tbl:demo_abcC1} \end{table} %------------------------------------------------------ %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} NDIM= 3, IPS = 2, IRS = 2, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {1: 0.25}, STOP = ['UZ1'] \end{boxedverbatim} \end{center} } \caption{The constants-file {\tt c.abc.2} for Run 2 (periodic orbits) of demo {\tt abc}.} \label{tbl:demo_abcC2} \end{table} %------------------------------------------------------ \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir abc} & create an empty work directory \\ \commandf{cd abc} & change directory \\ \commandf{@dm abc} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{@R abc 1} & compute the stationary solution family with four Hopf bifurcations \\ \commandf{@sv abc} & save output-files as {\tt b.abc, s.abc, d.abc} \\ \hline %============================================================================== \commandf{@R abc 2} & compute a family of periodic solutions from the first Hopf point \\ \commandf{@ap abc} & append the output-files to {\tt b.abc, s.abc, d.abc} \\ \hline %============================================================================== \commandf{@R abc 3} & compute a family of periodic solutions from the second Hopf point \\ \commandf{@ap abc} & append the output-files to {\tt b.abc, s.abc, d.abc} \\ \hline %============================================================================== \commandf{@R abc 4} & compute a family of periodic solutions from the third Hopf point \\ \commandf{@ap abc} & append the output-files to {\tt b.abc, s.abc, d.abc} \\ \hline %============================================================================== \commandf{@R abc 5} & compute a family of periodic solutions from the fourth Hopf point \\ \commandf{@ap abc} & append the output-files to {\tt b.abc, s.abc, d.abc} \\ \hline %============================================================================== \end{tabular} \caption{Unix Commands for running demo {\tt abc}.} \label{tbl:demo_abcL} \end{center} \end{table} %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} abc=run(e='abc',c='abc.1') abc=abc+run(abc('HB1'),c='abc.2') abc=abc+run(abc('HB2'),c='abc.3') abc=abc+run(abc('HB3'),c='abc.4') abc=abc+run(abc('HB4'),c='abc.5') save(abc,'abc') \end{boxedverbatim} \end{center} } \caption{Python Commands for running demo {\tt abc}.} \label{tbl:demo_abcP1} \end{table} %------------------------------------------------------ %------------------------------------------------------ \begin{table}[htbp] {\small \begin{center} \begin{boxedverbatim} abc=run(e='abc',c='abc.1') for solution in abc('HB'): abc=abc+run(solution,c='abc.2') abc=rl(abc) save(abc,'abc') \end{boxedverbatim} \end{center} } \caption{Python Program for running demo {\tt abc}.} \label{tbl:demo_abcP2} \end{table} %------------------------------------------------------ \newpage %============================================================================== %DEMO=pp2====================================================================== %============================================================================== \section{ pp2 : A 2D Predator-Prey Model.} \label{sec:Demos_pp2} This demo illustrates the computation of families of stationary solutions, including bifurcating stationary families, as well as the detection of a Hopf bifurcation. The first run computes the families of stationary solutions, bounded by $0\le p_1\le 1$ and $u_1 \ge -0.25$. Then the script \filef{pp2.auto} scans the first run for Hopf bifurcations, finds one, and computes the family of periodic solutions that emanates from the Hopf bifurcation. This family terminates in a heteroclinic orbit. The continuation is configured to stop if the period \parf{PAR(11)}$=36$, when the heteroclinic orbit is very close. The equations, which model a predator-prey system with harvesting, are \begin{equation} \begin{array}{cl} u_1 ' &= p_2 u_1 (1 - u_1 ) - u_1 u_2 - p_1 (1-e^{-p_3 u_1}) ,\\ u_2 ' &= -u_2 + p_4 u_1 u_2 .\end{array} \end{equation} Here $p_1$ (quota) is the principal continuation parameter, while $p_2=p_4=3$ and $p_3=5$, are fixed. The variables $u_1$ and $u_2$ denote prey and predator, for instance fish and sharks. The use of {\cal PLAUT} is also illustrated. The saved plots are shown in Figure~\ref{fig:pp2_1} and Figure~\ref{fig:pp2_2}. You can obtain similar figures using the Python CLUI's plot command and using {\cal PLAUT04}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir pp2} & create an empty work directory \\ \commandf{cd pp2} & change directory \\ \commandf{@dm pp2} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{auto pp2.auto } or & Run the script pp2.auto\\ \commandf{auto('pp2.auto') } & \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo {\tt pp2}.} \label{tbl:demo_pp2_1} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\cal AUTO}-COMMAND & ACTION \\ \hline \commandf{@p pp2} or \commandf{@pp pp2} & \begin{minipage}{10cm}~\\ run {\cal PLAUT} or {\cal PyPLAUT} to graph the contents of {\tt b.pp2} and {\tt s.pp2};\\ \end{minipage} \\ \hline {\cal PLAUT/PyPLAUT}-COMMAND & ACTION \\ \hline \commandf{d2} & set convenient defaults\\ \commandf{ax} & select axes \\ \commandf{1 3} & select real columns 1 and 3 in {\tt b.pp2} \\ \commandf{bd0} & plot the bifurcation diagram; $max~u_1$ versus $p_1$ \\ \hline \commandf{d1} & choose other default settings \\ \commandf{bd} & get blow-up of current bifurcation diagram \\ \commandf{0~ 1 ~-0.25~ 1} & enter diagram limits \\ \commandf{sav} & save plot (see Figure~\ref{fig:pp2_1})\\ \commandf{fig.1} or \commandf{fig1.eps} & upon prompt, enter a new file name, e.g., {\tt fig.1} or {\tt fig.eps}\\ \commandf{cl} & clear the screen \\ \hline \commandf{2d} & enter 2D mode, for plotting labeled solutions\\ \commandf{11 15 19 23} & select these labeled orbits in {\tt s.pp2}\\ \commandf{d} & default orbit display; $u_1$ versus time\\ \hline \commandf{1 3} & select columns 1 and 3 in {\tt s.pp2} \\ \commandf{d} & display the orbits; $u_2$ versus time\\ \hline \commandf{2 3} & select columns 2 and 3 in {\tt s.pp2} \\ \commandf{d} & phase plane display; $u_2$ versus $u_1$\\ \commandf{sav} & save plot (see Figure~\ref{fig:pp2_2})\\ \commandf{fig.2} or \commandf{fig2.eps} & upon prompt, enter a new file name \\ \commandf{ex} & exit from 2D mode \\ \hline \commandf{end} & exit from {\cal PLAUT/PyPLAUT} \\ \hline %============================================================================== \end{tabular} \caption{Plotting commands for demo {\tt pp2}.} \label{tbl:demo_pp2_2} \end{center} \end{table} %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/pp21}} \caption{The bifurcation diagram of demo {\tt pp2}.} \label{fig:pp2_1} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/pp22}} \caption{The phase plot of solutions 11, 15, 19, and 23 in demo {\tt pp2}.} \label{fig:pp2_2} \end{figure} %------------------------------------------------------ \newpage %============================================================================== %DEMO=lor====================================================================== %============================================================================== \section{ lor : Starting an Orbit from Numerical Data.} \label{sec:Demos_lor} This demo illustrates how to start the computation of a family of periodic solutions from numerical data obtained, for example, from an initial value solver. As an illustrative application we consider the Lorenz equations \begin{equation} \begin{array}{cl} x' &= \sigma (y - x), \\ y' &= \rho x - y - x z, \\ z' &= x y - \beta z. \\\end{array} \end{equation} Numerical simulations with a simple initial value solver show the existence of a stable periodic orbit when $\rho=280$, $\beta=8/3$, $\sigma=10$. Numerical data representing one complete periodic oscillation are contained in the file \filef{lor.dat}. Each row in \filef{lor.dat} contains four real numbers, namely, the time variable $t$, $x$, $y$ and $z$. The correponding parameter values are defined in the user-supplied subroutine \filef{STPNT}. The \AUTO constant \parf{dat='lor'} then allows for using the data in \filef{lor.dat} where we also specify \parf{IRS=0}. The mesh will be suitably adapted to the solution, using the number of mesh intervals \parf{NTST} and the number of collocation point per mesh interval \parf{NCOL} specified in the constants-file \filef{c.lor.1}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir lor} & create an empty work directory \\ \commandf{cd lor} & change directory \\ \commandf{demo('lor')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{lor=run('lor',c='lor.1')} & compute a solution family, restart from \filef{lor.dat} \\ & save to bifurcation diagram object \parf{lor} \\ \hline %============================================================================== \commandf{pd=run(lor('PD1'),c='lor.2')} & \parbox[t]{3in}{ switch branches at a period-doubling detected in the first run. Constants changed : {\tt IRS, ISW, NTST} \vspace{0.2cm}} \\ \commandf{save(lor+pd,'lor')} & save the two runs to \filef{b.lor, s.lor, d.lor} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{lor}.} \label{tbl:demo_lor} \end{center} \end{table} \newpage %============================================================================== %DEMO=frc====================================================================== %============================================================================== \section{ frc : A Periodically Forced System.} \label{sec:Demos_frc} This demo illustrates the computation of periodic solutions to a periodically forced system. In \AUTO this can be done by adding a nonlinear oscillator with the desired periodic forcing as one of the solution components. An example of such an oscillator is \begin{equation} \begin{array}{cl} x'&=x + \beta y - x (x^{2} + y^{2}), \\ y'&=-\beta x + y - y (x^{2} + y^{2}), \\\end{array} \end{equation} which has the asymptotically stable solution $x=sin (\beta t)$, $y=cos (\beta t)$. We couple this oscillator to the Fitzhugh-Nagumo equations~: \begin{equation} \begin{array}{cl} v'&=\bigl( F(v) - w \bigr) / \eps, \\ w'&=v - dw - \bigl( b + r \sin(\beta t) \bigr) , \end{array} \end{equation} by replacing $\sin(\beta t)$ by $x$. Above, $F(v) = v (v-a) (1-v)$ and $a,b,\eps$ and $d$ are fixed. The first run is a homotopy from $r=0$, where a solution is known analytically, to $r=0.2$. Part of the solution family with $r=0.2$ and varying $\beta$ is computed in the second run. For detailed results see \citename{AlDoOt:90} \citeyear{AlDoOt:90}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir frc} & create an empty work directory \\ \commandf{cd frc} & change directory \\ \commandf{demo('frc')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='frc',c='frc')} & homotopy to $r=0.2$ \\ \commandf{save(r1,'0')} & save output-files as \filef{b.0, s.0, d.0} \\ \hline %============================================================================== \parbox[t]{3in}{ \commandf{r2=run(r1('UZ1'),ICP=[5,11], NMX=20,DS=-0.5,DSMAX=5.0)}\vspace{0.2cm}} & \parbox[t]{3in}{ compute solution family; restart from \parf{r1}. \vspace{0.2cm}} \\ \commandf{save(r2,'frc')} & save output-files as \filef{b.frc, s.frc, d.frc} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{frc}.} \label{tbl:demo_frc} \end{center} \end{table} \newpage %============================================================================== %DEMO=ppp====================================================================== %============================================================================== \section{ ppp : Continuation of Hopf Bifurcations.} \label{sec:Demos_ppp} This demo illustrates the continuation of Hopf bifurcations in a 3-dimensional predator prey model (\citename{Do:84} \citeyear{Do:84}). This curve contain branch points, where one locus of Hopf points bifurcates from another locus of Hopf points, and generalized Hopf (Bautin) bifurcations (GH), where the Hopf bifurcation changes from sub- to supercritical. The diagnostics file \filef{d.hb} can be inspected to see where the Hopf bifurcation is subcritical and where it is supercritical. The equations are \begin{equation} \begin{array}{cl} u_1 ' &= u_1(1-u_1) - p_4 u_1 u_2 , \\ u_2 ' &= -p_2 u_2 + p_4 u_1 u_2 - p_5 u_2 u_3 -p_1(1-e^{-p_6 u_2}) \\ u_3 ' &= -p_3 u_3 + p_5 u_2 u_3 . \\ \end{array} \end{equation} Here $p_2=1/4$, $p_3=1/2$, $p_4=3$, $p_5=3$, $p_6=5$, and $p_1$ is the free parameter. In the continuation of Hopf points the parameter $p_4$ is also free. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir ppp} & create an empty work directory \\ \commandf{cd ppp} & change directory \\ \commandf{demo('ppp')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{ppp=run(e='ppp',c='ppp')} & \parbox[t]{3in}{ compute stationary solutions; detect Hopf bifurcations \vspace{0.2cm}}\\ \hline %============================================================================== \parbox[t]{3.4in}{ \commandf{ppp=ppp+run(ppp("HB2"),IPS=2,ICP=[1,11], ILP=0,NMX=15,NPR=50,DS=0.1,DSMAX=0.5)}\vspace{0.2cm}} & compute a family of periodic solutions\\ \commandf{save(ppp,'ppp')} & save the output to \filef{b.ppp, s.ppp, d.ppp} \\ \hline %============================================================================== \parbox[t]{3.4in}{ \commandf{hb = run(ppp("HB2"),ICP=[1,4],ILP=0, ISW=2,NMX=100,RL1=0.58,DSMAX=0.1)\vspace{0.2cm}}} & compute Hopf bifurcation curves \\ \commandf{save(hb,'hb')} & save the output-files as \filef{b.hb, s.hb, d.hb} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{ppp}.} \label{tbl:demo_ppp_1} \end{center} \end{table} \newpage %============================================================================== %DEMO=plp====================================================================== %============================================================================== \section{ plp : Fold Continuation for Periodic Solutions.} \label{sec:Demos_plp} This demo, which corresponds to computations in \citename{DoKeKe:91a} \citeyear{DoKeKe:91a}, shows how one can continue folds on a family of periodic solutions in two parameters. The calculation of a locus of Hopf bifurcations is also included. The equations, that model a one-compartment activator-inhibitor system (\citename{JPK:80} \citeyear{JPK:80}), are given by \begin{equation} \begin{array}{cl} s' &= (s_{0} - s) - \rho R (s,a), \\ a' &=\alpha (a_{0} - a) - \rho R (s,a), \\ \end{array} \end{equation} where $$ R(s,a)=\frac{s a}{1+s+ \kappa s^{2} }, \qquad \kappa > 0. $$ The free parameter is $\rho$. In the Hopf and fold continuations the parameter $s_0$ is also free. The computed loci of Hopf points and folds suggest the existence of {\it isolas} of periodic solutions. The computation of one such isola is also included in this demo. All calculations can be carried out by running the Python script \filef{plp.auto} included in the demo. \newpage %============================================================================== %DEMO=ph1====================================================================== %============================================================================== \section{ ph1 : Phase-Shifting using Continuation.} \label{sec:Demos_ph1} This demo, which uses the activator-inhibitor model in \citename{DoKeKe:91a} \citeyear{DoKeKe:91a}, shows how one can phase-shift a periodic solution. This can be useful in applications, for example when one wants a component of a periodic solution to have a specific value at time $0$. The equations are given by \begin{equation} \begin{array}{cl} s' &= (s_{0} - s) - \rho R (s,a)~, \\ a' &=\alpha (a_{0} - a) - \rho R (s,a)~, \\ \end{array} \end{equation} where $$ R(s,a)=\frac{s a}{1+s+ \kappa s^{2} }~.$$ The first two runs compute a family of stationary solutions and a bifurcating family of periodic solutions. The free problem parameter in these runs is $\rho$. The results are saved in the files \filef{b.sa}, \filef{s.sa}, and \filef{d.sa}. The third run starts at a specified periodic solution in \filef{s.sa}, namely, the solution with label $6$, and phase-shifts this solution in time until $s(0)=30$. The above sequence of calculations can be carried out by running the Python script \filef{ph1.auto} included in the demo. The basic idea for doing the phase shift in the third run is to drop the integral phase condition, which is automatically added when the {\cal AUTO}-constant \parf{IPS} has value $2$. For this purpose the third run uses the value $4$ for \parf{IPS}, as specified in \filef{c.ph1}, in which case the periodicity conditions must be specified explicitly in the subroutine {\tt BCND} in the equations-file \filef{ph1.f90}. Also, the interval of periodicity must be scaled explicitly to the interval $[0,1]$, which introduces the period $T$ as an explicit parameter in the differential equations. Note that no integral phase condition is specified in {\tt ICND}. The problem formulation in \filef{ph1.f90} is therefore \begin{equation} \begin{array}{cl} s' &= T[(s_{0} - s) - \rho R (s,a)]~, \\ a' &= T[\alpha (a_{0} - a) - \rho R (s,a)]~, \\ \end{array} \end{equation} \\ with boundary conditions \\ \begin{equation} \begin{array}{cl} s(0) - s(1) &= 0~, \\ a(0) - a(1) &= 0~. \\ \end{array} \end{equation} Note that the \AUTO parameter {\tt PAR(9)}, defined in the subroutine {\tt PVLS} in \filef{ph1.f90}, is used to monitor the value of $s(0)$. Since there are two constraints, the third run requires only one free parameter, namely $T$ ({\tt PAR(11)}). Note that, to numerical accuracy, $T$ does not change during this run. Alternatively one can use the free parameter $\rho$ ({\tt PAR(4)}) in the third run. In this case, to numerical accuracy, $\rho$ does not change during the run. The third run terminates when {\tt PAR(9)} reached the value $30$, as specified in the equations-file \filef{c.ph1}. \newpage %============================================================================== %DEMO=pp3====================================================================== %============================================================================== \section{ pp3 : Periodic Families and Loci of Hopf Points.} \label{sec:Demos_pp3} This demo illustrates the computation of stationary solution families that contain Hopf bifurcations, and the computation of the emanating families of periodic solutions. In this example the periodic solution families intersect at a secondary bifurcation point (a branch point). It it also shown how to compute a locus of Hopf bifurcation points in two parameters. (In this example the locus contains branch points, which lead to another locus!) The equations, which model a 3D predator-prey system with harvesting (\citename{Do:84} \citeyear{Do:84}), are \begin{equation} \begin{array}{cl} u_1 ' &= u_1(1-u_1) - p_4 u_1 u_2 , \\ u_2 ' &= -p_2 u_2 + p_4 u_1 u_2 - p_5 u_2 u_3 -p_1(1-e^{-p_6 u_2}) \\ u_3 ' &= -p_3 u_3 + p_5 u_2 u_3 . \\\end{array} \end{equation} The free parameter is $p_1$, while the other parameters are fixed, namely $p_2=0.25$, $p_3=0.5$, $p_4=4$, $p_5=3$, and $p_6=5$. However, both $p_1$ and $p_4$ are free in the computation of loci of Hopf points. The script in \filef{pp3.auto} first computes the bifurcation diagram involving the stationary solutions. It finds four Hopf bifurcations. A periodic orbit family is computed from each of these four Hopf bifurcations. Then the second Hopf bifurcation from the first run is continued in two parameters, also producing the other locus. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir pp3} & create an empty work directory \\ \commandf{cd pp3} & change directory \\ \commandf{@dm pp3} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{auto pp3.auto } or & Run the script pp3.auto\\ \commandf{auto('pp3.auto') } & \\ %============================================================================== \hline %============================================================================== \end{tabular} \caption{Commands for running demo {\tt pp3}.} \label{tbl:demo_pp3} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\cal AUTO}-COMMAND & ACTION \\ \hline \commandf{@p pp3} or \commandf{@pp pp3} & \begin{minipage}{8cm}~\\ run {\cal PLAUT/PyPLAUT} to graph the contents of {\tt b.pp3} and {\tt s.pp3};\\ \end{minipage} \\ \hline {\cal PLAUT/PyPLAUT}-COMMAND & ACTION \\ \hline \commandf{d2} & set convenient defaults\\ \commandf{ax} & select axes \\ \commandf{1 3} & select real columns 1 and 3 in {\tt b.pp3} \\ \commandf{bd0} & plot the bifurcation diagram; $max~u_1$ versus $p_1$ \\ \hline \commandf{bd} & get blow-up of current bifurcation diagram \\ \commandf{0~ 0.6 ~0~ 1.2} & enter diagram limits \\ \hline \commandf{d1} & choose other default settings (with labels) \\ \commandf{bd} & another blow-up of the bifurcation diagram \\ \commandf{0~ 0.6 ~0~ 0.75} & enter diagram limits \\ \hline \commandf{d2} & set defaults\\ \commandf{2d} & enter 2D mode, for plotting labeled solutions\\ \commandf{13 14 15 } & select these orbits from {\tt s.pp3}\\ \commandf{d} & default orbit display; $u_1$ versus time\\ \hline \commandf{2 3} & select columns 2 and 3 in {\tt s.pp3} \\ \commandf{d} & display the orbits; $u_2$ versus $u_1$\\ \hline \commandf{2d} & enter 2D mode, for plotting labeled solutions\\ \commandf{16 17 18 19} & select these orbits\\ \commandf{d} & default orbit display; $u_1$ versus time\\ \hline \commandf{2 3} & select columns 2 and 3 in {\tt s.pp3} \\ \commandf{d} & phase plane display; $u_2$ versus $u_1$\\ \hline \commandf{2 4} & select columns 2 and 4 in {\tt s.pp3} \\ \commandf{d} & phase plane display; $u_3$ versus $u_1$\\ \commandf{ex} & exit from 2D mode \\ \hline \commandf{end} & exit from {\cal PLAUT} \\ \hline %============================================================================== \end{tabular} \caption{Plotting commands for demo {\tt pp3}.} \label{tbl:demo_pp3_2} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline {\cal AUTO}-COMMAND & ACTION \\ \hline \commandf{@p hb} or \commandf{@pp hb} & run {\cal PLAUT/PyPLAUT} to graph \\ & the contents of {\tt b.hb} and {\tt s.hb}; \\ \hline {\cal PLAUT/PyPLAUT}-COMMAND & ACTION \\ \hline \commandf{d0} & set defaults\\ \commandf{ax} & select axes \\ \commandf{1 6} & select real columns 1 and 6 in {\tt b.hb} \\ \commandf{bd0} & plot the bifurcation diagram; $p_4$ versus $p_1$ \\ \hline \commandf{end} & exit from {\cal PLAUT} \\ \hline %============================================================================== \end{tabular} \caption{Plotting the Hopf loci for demo {\tt pp3}.} \label{tbl:demo_pp3_3} \end{center} \end{table} \newpage %============================================================================== %DEMO=tor====================================================================== %============================================================================== \section{ tor : Detection of Torus Bifurcations.} \label{sec:Demos_tor} This demo uses a model in \citename{FrRLuGaPo:93} \citeyear{FrRLuGaPo:93} to illustrate the detection of a torus bifurcation. It also illustrates branch switching at a secondary periodic bifurcation with double Floquet multiplier at $z=1$. The computational results also include folds, homoclinic orbits, and period-doubling bifurcations. Their continuation is not illustrated here; see instead the demos \filef{plp}, \filef{pp2}, and \filef{pp3}, respectively. The equations are \begin{equation} \begin{array}{cl} x'(t) & = \bigr[ -(\beta+\nu)x + \beta y - a_3 x^3 + b_3 (y-x)^3 \bigr] / r,\\ y'(t) &= \beta x - (\beta + \gamma) y - z - b_3 (y-x)^3, \\ z'(t) &= y,\end{array} \end{equation} where $\gamma=-0.6$, $r=0.6$, $a_3=0.328578$, and $b_3=0.933578$. Initially $\nu=-0.9$ and $\beta=0.5$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir tor} & create an empty work directory \\ \commandf{cd tor} & change directory \\ \commandf{demo('tor')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='tor',c='tor')} & \parbox[t]{3in}{ 1st run; compute a stationary solution family with Hopf bifurcation \vspace{0.2cm}}\\ \hline %============================================================================== \commandf{r2=run(r1("HB1"),IPS=2,ICP=[1,11])} & \parbox[t]{3in}{ compute a family of periodic solutions; restart from \parf{r1}. \vspace{0.2cm}} \\ \hline %============================================================================== \commandf{r3=run(r2("BP1"),ISW=-1,NMX=90)} & \parbox[t]{3in}{ compute a bifurcating family of periodic solutions; restart from \parf{r2}. \vspace{0.2cm}} \\ \commandf{save(r1+r2+r3,'1')} & save output to \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{tor}.} \label{tbl:demo_tor} \end{center} \end{table} \newpage %============================================================================== %DEMO=pen====================================================================== %============================================================================== \section{ pen : Rotations of Coupled Pendula.} \label{sec:Demos_pen} This demo illustrates the computation of rotations, i.e., solutions that are periodic, modulo a phase gain of an even multiple of $\pi$. \AUTO checks the starting data for components with such a phase gain and, if present, it will automatically adjust the computations accordingly. The model equations, a system of two coupled pendula, (\citename{DoArOt:91} \citeyear{DoArOt:91}), are given by \begin{equation} \begin{array}{cl} & \phi_1'' + \eps \phi_1' + \sin \phi_1 = I + \gamma(\phi_2-\phi_1), \\ & \phi_2'' + \eps \phi_2' + \sin \phi_2 = I + \gamma(\phi_1-\phi_2) ,\\ \end{array} \end{equation} or, in equivalent first order form, \begin{equation} \begin{array}{cl} & \phi_1' = \psi_1, \\ & \phi_2' = \psi_2, \\ & \psi_1' = - \eps \psi_1 - \sin \phi_1 + I + \gamma(\phi_2-\phi_1), \\ & \psi_2' = - \eps \psi_2 - \sin \phi_2 + I + \gamma(\phi_1-\phi_2).\\ \end{array} \end{equation} Throughout $\gamma=0.175$. Initially, $\eps=0.1$ and $I=0.4$. Numerical data representing one complete rotation are contained in the file \filef{pen.dat}. Each row in \filef{pen.dat} contains five real numbers, namely, the time variable $t$, $\phi_1$, $\phi_2$, $\psi_1$ and $\psi_2$. The correponding parameter values are defined in the user-supplied subroutine \funcf{ STPNT}. Actually, in this example, a scaled time variable $t$ is given in \filef{pen.dat}. For this reason the period (\parf{PAR(11)}) is also set in \funcf{STPNT}. Normally \AUTO would automatically set the period according to the data in \filef{pen.dat}. The \AUTO-constant \parf{dat='pen'} in \filef{c.pen.1} causes \AUTO to start from the data in \filef{pen.dat}. The mesh will be suitably adapted to the solution, using the number of mesh intervals \parf{NTST} and the number of collocation point per mesh interval \parf{NCOL} specified in the constants-file \filef{c.pen.1}. The first run, with $I$ as free problem parameter, starts from the solution (here \parf{IRS=0}) in \filef{pen.dat}. A period-doubling bifurcation is located, and the period-doubled family is computed in the second run. Two branch points are located, and the bifurcating families are traced out in the third and fourth run, respectively. The fifth run generates starting data for the subsequent computation of a locus of period-doubling bifurcations. The actual computation is done in the sixth run, with $\eps$ and $I$ as free problem parameters. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir pen} & create an empty work directory \\ \commandf{cd pen} & change directory \\ \commandf{demo('pen')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{pen=run('pen',c='pen.1')} & \parbox[t]{3in}{ locate a period doubling bifurcation; restart from \filef{pen.dat}} \\ \hline %============================================================================== \commandf{pen=pen+run(pen('PD1'),c='pen.2')} & \parbox[t]{3in}{ a family of period-doubled (and out-of-phase) rotations. Constants changed : \parf{IPS, NTST, ISW, NMX} \\ append output to bifurcation diagram object \filef{pen}} \\ \hline %============================================================================== \commandf{pen=pen+run(pen('BP1'),c='pen.3')} & \parbox[t]{3in}{ a secondary bifurcating family (without bifurcation detection). Constants changed : \parf{IRS, ISP} \\ append output to bifurcation diagram object \filef{pen}} \\ \hline %============================================================================== \commandf{pen=pen+run(pen('BP2'),c='pen.4')} & \parbox[t]{3in}{ another secondary bifurcating family (without bifurcation detection). Constants changed : \parf{IRS}\\ append output to bifurcation diagram object \filef{pen} \vspace{0.2cm}}\\ \commandf{save(pen,'pen')} & save \parf{pen} to output-files \filef{b.pen, s.pen, d.pen} \\ \hline %============================================================================== \commandf{t=run(pen('PD1'),c='pen.5')} & \parbox[t]{3in}{ generate starting data for period doubling continuation. Constants changed : \parf{IRS, ICP, ICP, ISW, NMX} \vspace{0.2cm}} \\ \hline %============================================================================== \commandf{pd=run(t,sv='pd')} & \parbox[t]{3in}{ compute a locus of period doubling bifurcations; restart from \parf{t}. Constants changed : \parf{IRS} \vspace{0.2cm}} \\ & save output-files as \filef{b.pd, s.pd, d.pd} \\ %\hline %============================================================================== %% \commandf{@pn pen} & run an animation program to view the solutions in \filef{s.pen} \\ %% & (on SGI machines only; see also the file \filef{auto/07p/pendula/README}). % \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{pen}.} \label{tbl:demo_pen} \end{center} \end{table} \newpage %============================================================================== %DEMO=chu====================================================================== %============================================================================== \section{ chu : A Non-Smooth System (Chua's Circuit).} \label{sec:Demos_chu} Chua's circuit is one of the simplest electronic devices to exhibit complex behavior. For related calculations see \citename{KhRoCh:93} \citeyear{KhRoCh:93}. The equations modeling the circuit are \begin{equation} \begin{array}{cl} u_1' &= \alpha \bigl[~ u_2 - h(u_1) ~\bigr]~,\\ u_2' &= u_1 - u_2 + u_3~, \\ u_3' &= - \beta~ u_2~, \end{array} \end{equation} where $$ h(x) = a_1 x + \frac{1}{2}~ (a_0 - a_1) ~ \bigl\{ \abs{x+1} - \abs{x-1} \bigr\}~,$$ and where we take $\beta = 14.3$, $a_0 = - 1/7$, $a_1 = 2/7$. Note that $h(x)$ is not a smooth function, and hence the solution to the equations may have non-smooth derivatives. However, for the orthogonal collocation method to attain its optimal accuracy, it is necessary that the solution be sufficiently smooth. Moreover, the adaptive mesh selection strategy will fail if the solution or one of its lower order derivatives has discontinuities. For these reasons we use the smooth approximation $$ \abs{x} ~\approx~ \frac{2 x}{\pi } ~ {\rm arctan}(Kx),$$ which get better as $K$ increases. In the numerical calculations below we use $K = 10$. The free parameter is $\alpha$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir chu} & create an empty work directory \\ \commandf{cd chu} & change directory \\ \commandf{demo('chu')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='chu',c='chu')} & 1st run; stationary solutions \\ \hline %============================================================================== \commandf{r2=run(r1("HB1"),IPS=2,ICP=[1,11])} & \parbox[t]{3in}{ 2nd run; periodic solutions, with detection of period-doubling. \vspace{0.2cm}} \\ \commandf{save(r1+r2,'chu')} & save all output to \filef{b.chu, s.chu, d.chu} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{chu}.} \label{tbl:demo_chu} \end{center} \end{table} \newpage %============================================================================== %DEMO=phs====================================================================== %============================================================================== \section{ phs : Effect of the Phase Condition.} \label{sec:Demos_phs} This demo illustrates the effect of the phase condition on the computation of periodic solutions. We consider the differential equation \begin{equation} \begin{array}{cl} u_1'&= \lambda u_1 - u_2, \\ u_2'&= u_1 (1-u_1) . \\ \end{array} \end{equation} This equation has a Hopf bifurcation from the trivial solution at $\lambda=0$. The bifurcating family of periodic solutions is vertical and along it the period increases monotonically. The family terminates in a homoclinic orbit containing the saddle point $(u_1,u_2)=(1,0)$. Graphical inspection of the computed periodic orbits, for example $u_1$ versus the scaled time variable $t$, shows how the phase condition has the effect of keeping the ``peak'' in the solution in the same location. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir phs} & create an empty work directory \\ \commandf{cd phs} & change directory \\ \commandf{demo('phs')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='phs',c='phs.1')} & detect Hopf bifurcation \\ \hline %============================================================================== \commandf{r2=run(r1('HB1'),c='phs.2')} & \parbox[t]{3in}{ compute periodic solutions. Constants changed : \parf{IRS, IPS, NPR} \vspace{0.2cm}} \\ \commandf{save(r1+r2,'phs')} & save output to \filef{b.phs, s.phs, d.phs} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{phs}.} \label{tbl:demo_phs} \end{center} \end{table} \newpage %============================================================================== %DEMO=ivp====================================================================== %============================================================================== \section{ ivp : Time Integration with Euler's Method.} \label{sec:Demos_ivp} This demo uses Euler's method to locate a stationary solution of the following predator-prey system with harvesting~: \begin{equation} \begin{array}{cl} u_1 ' &= p_2 u_1 (1 - u_1 ) - u_1 u_2 - p_1 (1-e^{-p_3 u_1}) ,\\ u_2 ' &= -u_2 + p_4 u_1 u_2 ,\\\end{array} \end{equation} where all problem parameters have a fixed value. The equations are the same as those in demo \filef{pp2}. The continuation parameter is the independent time variable, namely \parf{PAR(14)}. Note that Euler time integration is only first order accurate, so that the time step must be sufficiently small to ensure correct results. Indeed, this option has been added only as a convenience, and should generally be used only to locate stationary states. Note that the \AUTO-constants \parf{DS}, \parf{DSMIN}, and \parf{DSMAX} control the step size in the space consisting of time, here \parf{PAR(14)}, and the state vector, here $(u_1,u_2)$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir ivp} & create an empty work directory \\ \commandf{cd ivp} & change directory \\ \commandf{demo('ivp')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='ivp',c='ivp')} & time integration \\ \commandf{save(r1,'ivp')} & save output-files as \filef{b.ivp, s.ivp, d.ivp} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{ivp}.} \label{tbl:demo_ivp} \end{center} \end{table} \newpage %============================================================================== %DEMO=r3b====================================================================== %============================================================================== \section{ r3b : The Circular Restricted 3-Body Problem (CR3BP).} \label{sec:Demo_r3b} This demo computes periodic solutions and two-dimensional unstable manifolds of those periodic solutions in the restricted three body problem: \begin{align*} \dot x &= x_p\\ \dot y &= y_p\\ \dot z &= z_p\\ \dot x_p&= 2y_p+x-(1-\mu)\frac{x+\mu}{{d_E}^3}-\mu\frac{x-1+\mu}{{d_M}^3}+lx_p\\ \dot y_p &= -2x_p +y - (1-\mu)\frac{y}{{d_E}^3} - \mu\frac{y}{{d_M}^3} + l y_p\\ \dot z_p &= -(1-\mu)\frac{z}{{d_E}^3} - \mu\frac{z}{{d_M}^3} + l z_p \end{align*} where $d_E=\sqrt{(x+\mu)^2+y^2+z^2}$ and $d_M=\sqrt{(x-1+\mu)^2+y^2+z^2}$. Here $l\ne 0$ breaks the conservativeness of the system. In general, continuations involve $l$ as a parameter, and $l$ will then approximately stay at zero. \subsection{Computation of Periodic Solutions of the CR3BP} Running the Python script \filef{r3b.auto} will generate the families of periodic solutions L1, H1, and V1, for the case of the mass-ratio $\mu=0.063$: \begin{center} \begin{tabular}{l | l } \commandf{auto r3b.auto} & \commandf{auto('r3b.auto')} \\ \end{tabular} \end{center} where, as in the following examples, the left hand side command can be used at the shell prompt, and the right hand side command at the Python CLUI prompt. Note that the commands starting with @ work in both interfaces, but cannot be used in the expert scripts with a .py suffix. For example, the data generated for the Lyapunov family L1 will consist of \begin{center} \begin{tabular}{l l} \filef{b.L1} & the bifurcation diagram data \\ \filef{s.L1} & a selection of periodic orbits \\ \filef{d.L1} & diagnostic data, including Floquet multipliers \\ \end{tabular} \end{center} The necessary labeled starting solutions are first computed and stored in the file \filef{s.start}. Each starting solution is an equilibrium (``libration point''), and its data also contains the period of a bifurcating family of periodic orbits. The Table below shows the label of each of the starting solutions in s.start, indicating which libration point it corresponds to, and which family of periodic orbits it will generate: \begin{center} \begin{tabular}{| l | l | l |} \hline Label& Libration Pt. &Family \\ \hline 1 & L1 & L1 \\ 2 & L1 & V1 \\ 3 & L2 & L2 \\ 4 & L2 & V2 \\ 5 & L3 & L3 \\ 6 & L3 & V3 \\ 7 & L4 & V4 \\ 8 & L5 & V5 \\ \hline \end{tabular} \end{center} Note (by looking at the constant-files \filef{c.r3b.*}) that actually only the starting solutions labeled 1 and 2 are used in the current calculations, as executed by the Python script. Starting solution for other values of $\mu$ can be generated using the script \filef{compute\_lps.py}, for instance by running \begin{center} \begin{tabular}{l | l} \commandf{autox compute\_lps.py 0.05} & \commandf{import compute\_lps} \\ & \commandf{compute\_lps.compute(0.05)} \\ \end{tabular} \end{center} After that, it is necessary to run \filef{r3b.auto} again to regenerate the families. The demos L1a, H1a, H1b, H1c, V1a, V1b can be run subsequent to the r3b demo to compute 2D unstable manifolds of selected periodic orbits that belong to the L1, V1, and H1 families. \subsection{Computing Unstable Manifolds of Periodic Orbits in the CR3BP} Instructions for computing 2-d unstable manifolds of periodic orbits in the Circular Restricted 3-Body Problem (CR3BP) using AUTO-07p. \subsubsection{The instructions below are for the Halo family L1 in AUTO demo L1a.} Instructions for computing 2-d unstable manifolds of other periodic orbits in the CR3BP are similar (Demos H1a, H1b, H1c, V1a, V1b), and are given after these instructions. Select a labeled solution which has exactly one Floquet multiplier with absolute value greater than 1. (Floquet multipliers can be found in the file \filef{d.L1} generated by demo r3b.) Enter the label of the periodic solution in the file \filef{L1a.auto} at {\tt label=} in \filef{L1a.auto}. Also enter the size of the initial step into the direction of the unstable manifold there at {\tt step=}. Note that representative values of these three quantities have already been entered there.\\ Now run the Python script \filef{L1a.auto}: \begin{center} \begin{tabular}{ l | l } \commandf{auto L1a.auto} & \commandf{auto('L1a.auto')} \end{tabular} \end{center} This will run \filef{r3b.auto} as above if this was not already done. Through various computational steps the execution of the Python script will result in AUTO files \filef{b.L1a}, \filef{s.L1a}, and \filef{d.L1a}, where the orbits in \filef{s.L1a} constitute the manifold, which can be viewed with the graphics program \commandf{plaut04} or \commandf{r3bplaut04}: \begin{center} \begin{tabular}{ l | l } \commandf{@pl L1a} or \commandf{@r3b L1a} & \commandf{plot3('L1a',r3b=True)} \end{tabular} \end{center} The various steps executed by the Python commands in the script file \filef{L1a.auto} are explained below in Tables~\ref{tbl:demo_l1a1} and \ref{tbl:demo_l1a2}, which also show the equivalent Unix shell versions of these AUTO commands. The Python script \filef{L1aX.auto} does the same as \filef{L1a.auto}, but with additional calculations that generate additional AUTO data files, e.g., to detect heteroclinic connections. Some of these additional runs take quite a bit of CPU time and generate big data files. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{mkdir r3b} & \commandf{mkdir r3b} \\ \commandf{cd r3b} & \commandf{cd r3b} \\ \commandf{@dm r3b} & \commandf{demo('r3b')} \\ \multicolumn{2}{|l|}{Copy the r3b demo to the local directory r3b.}\\ \hline \commandf{auto r3b.auto} & \commandf{auto('r3b.auto')} \\ \multicolumn{2}{|l|}{Generate the CR3BP AUTO data files.} \\ \hline \commandf{autox ext.py L1 3 -1e-5} & \commandf{import ext} \\ & \commandf{sext=ext.get('L1',3,-1e-5)} \\ \multicolumn{2}{|p{7in}|}{ Convert the data for a selected labeled solution from \filef{s.L1}, adding a zero adjoint variable. The solution label is 3, and the initial step size into the unstable manifold is $-10^{-5}$. The \filef{ext.py} script looks for the relevant Floquet multiplier in \filef{d.L1}. The converted solution will be written in the file \filef{s.ext} or stored in \parf{sext}.}\\ \hline \commandf{@r flq ext} & \commandf{flq=run(sext,c='flq',e='flq')} \\ \multicolumn{2}{|p{7in}|}{ Compute the Floquet eigenfunction. Free scalar variables in this run (see \filef{c.flq}) are: \begin{tabular}{l@{=}l} \parf{PAR(1)} & unfolding parameter \\ \parf{PAR(4)} & multiplier\\ \parf{PAR(5)} & norm of eigenfunction\\ \end{tabular} If this run is successful then \filef{PAR(5)} should become nonzero, in fact, \filef{PAR(5)} should reach the value 1. If the run is not successful then see REMARK 1 below.}\\ \hline \commandf{@sv flq} & \commandf{save(flq,'flq')} \\ \multicolumn{2}{|l|}{ Save the results in \filef{b.flq}, \filef{s.flq}, and \filef{d.flq}.}\\ \hline \commandf{autox data.py} & \commandf{import data} \\ & \commandf{startman=data.get(flq('UZ1'))} \\ \multicolumn{2}{|p{7in}|}{ Extract data for a selected orbit from \filef{s.flq}. These data are for both the orbit and its Floquet eigenfunction. It is assumed that \filef{s.flq} contains only one labeled solution, with label 2. If you did the ``optional'' computation (see Remark 2) you may need to change the label of the restart solution:}\\ \commandf{autox data.py flq n} & \commandf{startman=data.get(flq(n))} \\ \multicolumn{2}{|p{7in}|}{ where $n$ is the different label number. The extracted data may be saved in a file called \filef{s.startman}, which contains a new starting solution that can be used as a base for the manifold computations. The orbit coordinates are at ``time zero'', and the Floquet eigenfunction are saved at \parf{PAR(25:30)} and \parf{PAR(31:36)}, respectively.}\\ \hline \commandf{@R man L1a.0 startman}& \commandf{startL1a = run(startman,e='man',c='man.L1a.0')} \\ \multicolumn{2}{|p{7in}|}{ This step does a time integration using continuation in the ``period'' $T$, i.e., \parf{PAR(11)}, which here is the ``integration time''. The labeled solutions from this run all correspond to the same orbit, except that the orbit gets longer and longer. The starting point of the orbit is the point on the periodic orbit at ``time zero'' plus a small distance ($\varepsilon$) into the direction of the unstable manifold. In \AUTO, $\varepsilon$ corresponds to \parf{PAR(6)}. This parameter $\varepsilon$ is initialized via the script \filef{ext.py}. (The sign of $\varepsilon$ is significant!) The parameters in this run (see \filef{c.man.L1a.0}) are: \begin{tabular}{l@{=}lll@{=}l} \parf{PAR(3)} & energy & & \parf{PAR(21)} & $x$-coordinate at end point\\ \parf{PAR(11)} & integration time & & \parf{PAR(22)} & $y$-coordinate at end point\\ \parf{PAR(12)} & length of the orbit & & \parf{PAR(23)} & $z$-coordinate at end point \end{tabular} }\\ \hline \commandf{@sv startL1a} & \commandf{save(startL1a,'startL1a')} \\ \multicolumn{2}{|l|}{ Save the results in \filef{b.startL1a}, \filef{s.startL1a}, and \filef{d.startL1a}. }\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the L1a demo (part 1).} \label{tbl:demo_l1a1} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R man L1a.1 startL1a} & \commandf{L1a=run(startL1a,c='man.L1a.1')} \\ \multicolumn{2}{|p{7in}|}{ Look at \filef{c.man.L1a.1} to see from which label in \filef{s.startL1a} this run starts. In this run the y-coordinate of the end point (\parf{PAR(22)}) is kept fixed, while the ``period'' (\parf{PAR(11)}), i.e., the total integration time, is allowed to vary, as is the value of epsilon, i.e., \parf{PAR(6)}. Note that if \parf{PAR(6)} becomes ``large'' then the manifold may no longer be accurate. The free parameters in this run are: \begin{tabular}{l@{=}lll@{=}l} \parf{PAR(3)} & energy & & \parf{PAR(12)} & length of the orbit \\ \parf{PAR(6)} & ``starting distance'' & & \parf{PAR(21)} & $x$-coordinate at end point \\ \parf{PAR(11)} & integration time & & \parf{PAR(23)} & $z$-coordinate at end point \end{tabular} }\\ \hline \commandf{@sv L1a} & \commandf{save(L1a,'L1a')} \\ \multicolumn{2}{|l|}{ Save the results in \filef{b.L1a}, \filef{s.L1a}, and \filef{d.L1a}. }\\ \hline \commandf{@R man L1a.2 startL1a} & \commandf{L1a2=run(startL1a,c='man.L1a.2')} \\ \multicolumn{2}{|p{7in}|}{ Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the orbit winding around the selected periodic L1 orbit. }\\ \hline \commandf{@sv L1a2} & \commandf{save(L1a2,'L1a2')} \\ \multicolumn{2}{|l|}{ Save the results in \filef{b.L1a2}, \filef{s.L1a2}, and \filef{d.L1a2} .}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the L1a demo (part 2).} \label{tbl:demo_l1a2} \end{table} \noindent Use \begin{center} \begin{tabular}{ l | l } \commandf{auto clean.auto} & \commandf{auto('clean.auto')}\\ \end{tabular} \end{center} to remove all generated files. \noindent\textbf{REMARK 1}\\ If the run to compute the Floquet eigenfunction is not successful, i.e., if \parf{PAR(5)} does not become nonzero, then try to compute the Floquet eigenfunction in more stages, as in Table~\ref{tbl:demo_r3b_remark1}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \multicolumn{2}{|p{7in}|}{ Give the label of the selected solution, and a value that is smaller than the associated Floquet multiplier (magnitude greater than 1) .}\\ \commandf{autox ext.py L1 3 -1e-5 2000} & \commandf{import ext} \\ & \commandf{sext=ext.get('L1',3,-1e-5,2000)} \\ \hline \commandf{@R flq 2 ext} & \commandf{flq=run(sext,c='flq.2',e='flq')} \\ \multicolumn{2}{|p{7in}|}{ Continue the approximate multiplier; If all goes well then the actual multiplier will be detected as a branch point (BP) with Label 2. Free scalar variables in this run are: \begin{tabular}{l@{=}l} \parf{PAR(1)} & unfolding parameter \\ \parf{PAR(4)} & multiplier\\ \parf{PAR(5)} & norm of eigenfunction \end{tabular}}\\ \hline \commandf{@sv flq} & \commandf{save(flq,'flq')} \\ \hline \commandf{@R flq 3} & \commandf{flq=run(flq,e='flq',c='flq.3')} \\ \multicolumn{2}{|p{7in}|}{ Switch branches at the BP, thereby generating the nonzero Floquet eigenfunction. The free scalar variables are : \begin{tabular}{l@{=}l} \parf{PAR(1)} & unfolding parameter \\ \parf{PAR(4)} & multiplier\\ \parf{PAR(5)} & norm of eigenfunction \end{tabular} If all goes well then \parf{PAR(5)} should become nonzero, and the corresponding solution should have Label 4. }\\ \hline \commandf{@sv flq} & \commandf{save(flq,'flq')}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for Remark 1.} \label{tbl:demo_r3b_remark1} \end{table} \noindent\textbf{REMARK 2}\\ One can also follow the orbit, its multiplier and eigenfunction, as in Table~\ref{tbl:demo_r3b_remark2}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R flq 4} & \commandf{flq=run(flq,e='flq',c='flq.4')}\\ \multicolumn{2}{|p{7in}|}{ Free scalar variables in this run are \begin{tabular}{l@{=}l} \parf{PAR(1)} & unfolding parameter \\ \parf{PAR(4)} & multiplier \\ \parf{PAR(11)} & period \\ \end{tabular} The norm, \parf{PAR(5)}, of the eigenfunction is fixed in this run. }\\ \hline \commandf{@sv flq} & \commandf{save(flq,'flq')}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for Remark 2.} \label{tbl:demo_r3b_remark2} \end{table} \subsubsection{The instructions below are for the Halo family H1 in AUTO demo H1a.} Follow the instructions for L1a above, where you replace L by H throughout, for instance you can run everything in one go using \begin{center} \begin{tabular}{l|l} \commandf{auto H1a.auto} & \commandf{auto('H1a.auto')} \\ \end{tabular} \end{center} or with the extra calculations: \begin{center} \begin{tabular}{l|l} \commandf{auto H1aX.auto} & \commandf{auto('H1aX.auto')} \\ \end{tabular} \end{center} The Floquet eigenfunction is now computed from label 7 with step size $-10^{-3}$. The detailed commands are likewise, except for the manifold calculations in Table~\ref{tbl:demo_l1a2}, and those are given in Table~\ref{tbl:demo_h1a}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R man H1a.1 startH1a} & \commandf{H1a=run(startH1a,e='man',c='man.H1a.1')}\\ \multicolumn{2}{|p{7in}|}{ Look at c.man.H1a.1 to see from which label in s.startH1a this run starts. In this run the x-coordinate of the end point (\parf{PAR(21)}) is kept fixed, while the ``period'' (\parf{PAR(11)}), i.e., the total integration time, is allowed to vary, as is the value of $\varepsilon$, i.e., \parf{PAR(6)}. Note that if \parf{PAR(6)} becomes ``large'' then the manifold may no longer be accurate. The free parameters in this run are: \begin{tabular}{l@{=}lll@{=}l} \parf{PAR(3)} & energy & & \parf{PAR(12)} & length of the orbit \\ \parf{PAR(6)} & ``starting distance'' & & \parf{PAR(22)} & $y$-coordinate at end point \\ \parf{PAR(11)} & integration time & & \parf{PAR(23)} & $z$-coordinate at end point \end{tabular}}\\ \hline \commandf{@sv H1a} &\commandf{save(H1a,'H1a')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.H1a}, \filef{s.H1a}, and \filef{d.H1a}.}\\ \hline \commandf{@R man H1a.2 startH1a} & \commandf{hetH1a=run(startH1a,e='man',c='man.H1a.2')}\\ \multicolumn{2}{|p{7in}|}{ Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of a connecting orbit. }\\ \hline \commandf{@sv hetH1a} &\commandf{save(hetH1a,'hetH1a')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.hetH1a}, \filef{s.hetH1a}, and \filef{d.hetH1a}.}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the H1a demo.} \label{tbl:demo_h1a} \end{table} \subsubsection{The instructions below are for the Halo family H1 in AUTO demo H1b.} Follow the instructions for L1a above, where you replace L by H, and a by b throughout; for instance you can run everything in one go using \begin{center} \begin{tabular}{l|l} \commandf{auto H1b.auto} & \commandf{auto('H1b.auto')} \\ \end{tabular} \end{center} or with the extra calculations: \begin{center} \begin{tabular}{l|l} \commandf{auto H1bX.auto} & \commandf{auto('H1bX.auto')} \\ \end{tabular} \end{center} The Floquet eigenfunction is now computed from label 3 with step size $-10^{-5}$. The detailed commands follow the ones for H1a above, except that there is one extra run; see Table~\ref{tbl:demo_h1b}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R man H1b.3 startH1b} & \commandf{het2H1b=run(startH1b,e='man',c='man.H1b.3')}\\ \multicolumn{2}{|p{7in}|}{ Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of another connecting orbit. }\\ \hline \commandf{@sv het2H1b} & \commandf{save(het2H1b,'het2H1b')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.het2H1b}, \filef{s.het2H1b}, and \filef{d.het2H1b}.}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the H1b demo.} \label{tbl:demo_h1b} \end{table} \subsubsection{The instructions below are for the Halo family H1 in AUTO demo H1c.} Follow the instructions for L1a above, where you replace L by H, and a by c throughout; for instance you can run everything in one go using \begin{center} \begin{tabular}{l|l} \commandf{auto H1c.auto} & \commandf{auto('H1c.auto')} \\ \end{tabular} \end{center} The Floquet eigenfunction is now computed from label 68 with step size $-10^{-2}$. The detailed commands follow the ones for H1a above, except that the last run is left out, and so the \filef{H1cX.auto} script is not necessary. \subsubsection{The instructions below are for the Halo family V1 in AUTO demo V1a.} Follow the instructions for L1a above, where you replace L by V throughout, for instance you can run everything in one go using \begin{center} \begin{tabular}{l|l} \commandf{auto V1a.auto} & \commandf{auto('V1a.auto')} \\ \end{tabular} \end{center} The Floquet eigenfunction is now computed from label 8 with step size $-10^{-5}$. The detailed commands are likewise, except for the manifold calculations in Table~\ref{tbl:demo_l1a2}, and those are given in Table~\ref{tbl:demo_v1a}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R man V1a.1 startV1a} & \commandf{V1a=run(startV1a,e='man',c='man.V1a.1')}\\ \multicolumn{2}{|p{7in}|}{ Look at \filef{c.man.V1a.1} to see from which label in \filef{s.startV1a} this run starts. In this run the $z$-coordinate of the end point (\parf{PAR(23)}) is kept fixed, while the ``period'' (\parf{PAR(11)}), i.e., the total integration time, is allowed to vary, as is the value of $\varepsilon$, i.e., \parf{PAR(6)}. Note that if \parf{PAR(6)} becomes ``large'' then the manifold may no longer be accurate. The free parameters in this run are: \begin{tabular}{l@{=}lll@{=}l} \parf{PAR(3)} & energy & & \parf{PAR(12)} & length of the orbit \\ \parf{PAR(6)} & ``starting distance'' & & \parf{PAR(21)} & $x$-coordinate at end point \\ \parf{PAR(11)} & integration time & & \parf{PAR(22)} & $y$-coordinate at end point \end{tabular} }\\ \hline \commandf{@sv V1a} & \commandf{save(V1a,'V1a')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.V1a}, \filef{s.V1a}, and \filef{d.V1a}.}\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the V1a demo.} \label{tbl:demo_v1a} \end{table} \subsubsection{The instructions below are for the Halo family V1 in AUTO demo V1b.} Follow the instructions for L1a above, where you replace L by V, and a by b throughout; for instance you can run everything in one go using \begin{center} \begin{tabular}{l|l} \commandf{auto V1b.auto} & \commandf{auto('V1b.auto')} \\ \end{tabular} \end{center} or with the extra calculations: \begin{center} \begin{tabular}{l|l} \commandf{auto V1bX.auto} & \commandf{auto('V1bX.auto')} \\ \end{tabular} \end{center} The Floquet eigenfunction is now computed from label 12 with step size $10^{-5}$. The detailed commands are likewise, except for the manifold calculations in Table~\ref{tbl:demo_l1a2}, and those are given in Table~\ref{tbl:demo_v1b}. \begin{table}[htbp] \begin{center} \begin{tabular}{|l|l|} \hline \commandf{@R man V1b.1 startV1b} & \commandf{V1b=run(startV1b,e='man',c='man.V1b.1')}\\ \multicolumn{2}{|p{7in}|}{ Look at \filef{c.man.V1b.1} to see from which label in \filef{s.startV1b} this run starts. In this run the $x$-coordinate of the end point (\parf{PAR(21)}) is kept fixed, while the ``period'' (\parf{PAR(11)}), i.e., the total integration time, is allowed to vary, as is the value of $\varepsilon$, i.e., \parf{PAR(6)}. Note that if \parf{PAR(6)} becomes ``large'' then the manifold may no longer be accurate. The free parameters in this run are: \begin{tabular}{l@{=}lll@{=}l} \parf{PAR(3)} & energy & & \parf{PAR(12)} & length of the orbit \\ \parf{PAR(6)} & ``starting distance'' & & \parf{PAR(22)} & $y$-coordinate at end point \\ \parf{PAR(11)} & integration time & & \parf{PAR(23)} & $z$-coordinate at end point \end{tabular}}\\ \hline \commandf{@sv V1b} & \commandf{save(V1b,'V1b')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.V1b}, \filef{s.V1b}, and \filef{d.V1b} .}\\ \hline \commandf{@R man V1b.2 startV1b} & \commandf{hetV1b=run(startV1b,e='man',c='man.V1b.2')} \\ \multicolumn{2}{|p{7in}|}{ Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of a connecting orbit.}\\ \hline \commandf{@sv hetV1b} & \commandf{save(hetV1b,'hetV1b')}\\ \multicolumn{2}{|l|}{ Save the results in \filef{b.hetV1b}, \filef{s.hetV1b}, and \filef{d.hetV1b} . }\\ \hline \end{tabular} \end{center} \caption{Detailed AUTO shell and Python commands for the V1b demo.} \label{tbl:demo_v1b} \end{table} %============================================================================== %============================================================================== \chapter{ \AUTO Demos : BVP.} \label{ch:Demos_BVP} %============================================================================== %============================================================================== %============================================================================== %DEMO=exp====================================================================== %============================================================================== \section{ exp : Bratu's Equation.} \label{sec:Demos_exp} This demo illustrates the computation of a solution family to the boundary value problem \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= -p_1 e^{u_1} , \\ \end{array} \end{equation} with boundary conditions $ u_1(0)=0 , \quad u_1(1)=0.$ This equation is also considered in \citename{DoKeKe:91a} \citeyear{DoKeKe:91a}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir exp} & create an empty work directory \\ \commandf{cd exp} & change directory \\ \commandf{demo('exp')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='exp',c='exp')} & 1st run; compute solution family containing fold \\ \hline %============================================================================== \commandf{r2=run(r1,NTST=20)} & 2nd run; restart at the last labeled solution, using increased accuracy\\ \commandf{save(r1+r2,'exp')} & save output to \filef{b.exp, s.exp, d.exp} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{exp}.} \label{tbl:demo_exp} \end{center} \end{table} \newpage %============================================================================== %DEMO=int====================================================================== %============================================================================== \section{ int : Boundary and Integral Constraints.} \label{sec:Demos_int} This demo illustrates the computation of a solution family to the equation \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= -p_1 e^{u_1} , \\\end{array} \end{equation} with a non-separated boundary condition and an integral constraint: $$ u_1(0)-u_1(1)-p_2=0 ,\qquad \int_0^{1}u(t)dt-p_3=0 . $$ The solution family contains a fold, which, in the second run, is continued in two equation parameters. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir int} & create an empty work directory \\ \commandf{cd int} & change directory \\ \commandf{demo('int')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='int',c='int')} & 1st run; detection of a fold \\ \commandf{save(r1,'int')} & save output-files as \filef{b.int, s.int, d.int} \\ \hline %============================================================================== \commandf{r2=run(r1("LP1"),ICP=[1,2],ISW=2)} & 2nd run; generate starting data for a curve of folds.\\ \hline %============================================================================== \commandf{r3=run(r2)} & \parbox[t]{3in}{3rd run; compute a curve of folds; restart from the last and only label in \parf{r2}. \vspace{0.2cm}}\\ \commandf{save(r3,'lp')} & save the output-files as \filef{b.lp, s.lp, d.lp} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{int}.} \label{tbl:demo_int} \end{center} \end{table} \newpage %============================================================================== %DEMO=bvp====================================================================== %============================================================================== \section{ bvp : A Nonlinear ODE Eigenvalue Problem.} \label{sec:Demos_bvp} This demo illustrates the location of eigenvalues of a nonlinear ODE boundary value problem as bifurcations from the trivial solution family. The families of solutions that bifurcate at all five computed eigenvalues, that is, the eigenfunctions, are computed in both directions. The equations are \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &=-(p_1 \pi)^{2}u_1 + u_1^{2} ,\end{array} \end{equation} with boundary conditions $ u_1(0)=0 , \quad u_1(1)=0.$~~~ We add the integral constraint $$ \int_0^{1} u_1(t) dt - p_2 = 0. $$ Then $p_2$ is simply the average of the first solution component. The integral constaint gives a measure: the exact same continuations could be done without any integral conditions in just the one parameter $p_1$, however $p_2$ gives us extra possibilities to plot and stop at desirable solutions. The values that \filef{bvp.auto} sets in \parf{UZR} make sure that solutions are given for $p_2=\pm 3,\pm 6,\pm 9$, and the continuation stops at $p_2=\pm 9$, and also makes sure that $0 \le p_1 \le 5.5$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir bvp} & create an empty work directory \\ \commandf{cd bvp} & change directory \\ \commandf{@dm bvp } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{auto bvp.auto } or & Run the script bvp.auto\\ \commandf{auto('bvp.auto') } & \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{bvp}.} \label{tbl:demo_bvp} \end{center} \end{table} \newpage %============================================================================== %DEMO=lin====================================================================== %============================================================================== \section{ lin : A Linear ODE Eigenvalue Problem.} \label{sec:Demos_lin} This demo illustrates the location of eigenvalues of a linear ODE boundary value problem as bifurcations from the trivial solution family. By means of branch switching an eigenfunction is computed, as is illustrated for the first eigenvalue. This eigenvalue is then continued in two parameters by fixing the $L_2$-norm of the first solution component. The eigenvalue problem is given by the equations \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= (p_1 \pi)^{2} u_1 , \end{array} \end{equation} with boundary conditions $ u_1(0)-p_2=0 $ and $ u_1(1)=0.$ We add the integral constraint $$ \int_0^{1} u_1(t)^{2} dt - p_3 = 0. $$ Then $p_3$ is simply the $L_2$-norm of the first solution component. In the first two runs $p_2$ is fixed, while $p_1$ and $p_3$ are free. In the third run $p_3$ is fixed, while $p_1$ and $p_2$ are free. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir lin} & create an empty work directory \\ \commandf{cd lin} & change directory \\ \commandf{demo('lin')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='lin',c='lin')} & \parbox[t]{3in}{1st run; compute the trivial solution family and locate eigenvalues. \vspace{0.2cm}} \\ \hline %============================================================================== \commandf{r2=run(r1('BP1'),NTST=6,ISW=-1,DSMAX=0.5)} & \parbox[t]{3in}{2nd run; compute a few steps along the bifurcating family. \vspace{0.2cm}}\\ \commandf{save(r1+r2,'lin')} & save all output to \filef{b.lin, s.lin, d.lin} \\ \hline %============================================================================== \commandf{r3=run(r2('UZ1'),ICP=[1,2],NTST=5,ISW=1)} & \parbox[t]{3in}{3rd run; compute a two-parameter curve of eigenvalues. \vspace{0.2cm}} \\ \commandf{save(r3,'2p')} & save the output-files as \filef{b.2p, s.2p, d.2p} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{lin}.} \label{tbl:demo_lin} \end{center} \end{table} \newpage %============================================================================== %DEMO=non====================================================================== %============================================================================== \section{ non : A Non-Autonomous BVP.} \label{sec:Demos_non} This demo illustrates the continuation of solutions to the non-autonomous boundary value problem \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= -p_1 e^{x^3 u_1} , \\\end{array} \end{equation} with boundary conditions $ u_1(0)=0 , \quad u_1(1)=0.$ Here $x$ is the independent variable. This system is first converted to the following equivalent autonomous system~: \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= -p_1 e^{u_3^3 u_1} , \\ u_3 ' &= 1 , \\ \end{array} \end{equation} with boundary conditions $ u_1(0)=0 , \quad u_1(1)=0, \quad u_3(0)=0.$ (For a periodically forced system see demo \filef{frc}). \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir non} & create an empty work directory \\ \commandf{cd non} & change directory \\ \commandf{demo('non')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='non',c='non')} & compute the solution family \\ \commandf{save(r1,'non')} & save output-files as \filef{b.non, s.non, d.non} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{non}.} \label{tbl:demo_non} \end{center} \end{table} \newpage %============================================================================== %DEMO=kar====================================================================== %============================================================================== \section{ kar : The Von Karman Swirling Flows.} \label{sec:Demos_kar} The steady axi-symmetric flow of a viscous incompressible fluid above an infinite rotating disk is modeled by the following ODE boundary value problem (Equation (11) in \citename{LeKe:80} \citeyear{LeKe:80}~: \begin{equation} \begin{array}{cl} u_1' &= T u_2, \\ u_2' &= T u_3, \\ u_3' &= T \bigl[ -2 \gamma u_4 + u_2^2 - 2 u_1 u_3 - u_4^2 \bigr], \\ u_4' &= T u_5, \\ u_5' &= T \bigl[ 2 \gamma u_2 + 2 u_2 u_4 - 2 u_1 u_5 \bigr], \\ \end{array} \end{equation} with left boundary conditions $$ u_1(0)=0, \qquad u_2(0)=0, \qquad u_4(0)=1-\gamma, $$ and (asymptotic) right boundary conditions \begin{equation} \begin{array}{cl} & \bigl[ f_\infty + a(f_\infty,\gamma) \bigr] ~ u_2(1) + u_3(1) - \gamma ~ \frac{ u_4(1) }{ a(f_\infty,\gamma) } = 0, \\ & a(f_\infty,\gamma)~ \frac{ b^2(f_\infty,\gamma) }{ \gamma } ~u_2(1) + \bigl[ f_\infty + a(f_\infty,\gamma) \bigr] ~u_4(1) + u_5(1) = 0, \\ & u_1(1) = f_\infty, \end{array} \end{equation} where \begin{equation} \begin{array}{cl} & a(f_\infty,\gamma) = \frac{1 }{ \sqrt{2} } \bigl[ (f_\infty^4 + 4 \gamma^2)^{1/2} + f_\infty^2 \bigr]^{1/2}, \\ & b(f_\infty,\gamma) = \frac{1 }{ \sqrt{2} } \bigl[ (f_\infty^4 + 4 \gamma^2)^{1/2} - f_\infty^2 \bigr]^{1/2}. \\ \end{array} \end{equation} Note that there are five differential equations and six boundary conditions. Correspondingly, there are two free parameters in the computation of a solution family, namely $\gamma$ and $f_\infty$. The ``period'' $T$ is fixed; $T=500$. The starting solution is $u_i=0$, $i=1,\cdots,5$, at $\gamma=1$, $f_\infty=0$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir kar} & create an empty work directory \\ \commandf{cd kar} & change directory \\ \commandf{demo('kar')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='kar',c='kar')} & computation of the solution family \\ \commandf{save(r1,'kar')} & save output-files as \filef{b.kar, s.kar, d.kar} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{kar}.} \label{tbl:demo_kar} \end{center} \end{table} \newpage %============================================================================== %DEMO=spb====================================================================== %============================================================================== \section{ spb : A Singularly-Perturbed BVP.} \label{sec:Demos_spb} This demo illustrates the use of continuation to compute solutions to the singularly perturbed boundary value problem \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= \frac{\lambda }{ \eps} \bigl( u_1 u_2 (u_1^2 - 1) + u_1 \bigr) , \\ \end{array} \end{equation} with boundary conditions $u_1(0)=3/2$, $u_1(1)=\gamma.$ The parameter $\lambda$ has been introduced into the equations in order to allow a homotopy from a simple equation with known exact solution to the actual equation. This is done in the first run. In the second run $\eps$ is decreased by continuation. In the third run $\eps$ is fixed at $\eps=.001$ and the solution is continued in $\gamma$. This run takes more than 1500 continuation steps. For a detailed analysis of the solution behavior see \citename{JL:82} \citeyear{JL:82}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir spb} & create an empty work directory \\ \commandf{cd spb} & change directory \\ \commandf{demo('spb')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='spb',c='spb.0')} & 1st run; homotopy from $\lambda=0$ to $\lambda=1$ \\ \commandf{save(r1,'0')} & save output-files as \filef{b.0, s.0, d.0} \\ \hline %============================================================================== \commandf{r2=run(r1,c='spb.1')} & \parbox[t]{3in}{2nd run; let $\eps$ tend to zero; restart from the last label of \parf{r0}. constants changed : \parf{IRS, ICP(1), NTST, DS, UZR, STOP} \vspace{0.2cm}}\\ \commandf{save(r2,'1')} & save the output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r3=run(r2('UZ2'),c='spb.3')} & \parbox[t]{3in}{3rd run; continuation in $\gamma$; $\eps=0.001$; restart from 2nd UZ label of \parf{r2}. Constants changed : \parf{IRS, ICP(1), ITNW, EPSL, EPSU, UZR} \vspace{0.2cm}} \\ \commandf{save(r3,'2')} & save the output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{spb}.} \label{tbl:demo_spb} \end{center} \end{table} \newpage %============================================================================== %DEMO=ezp====================================================================== %============================================================================== \section{ ezp : Complex Bifurcation in a BVP.} \label{sec:Demos_ezp} This demo illustrates the computation of a solution family to the complex boundary value problem \begin{equation} \begin{array}{cl} u_1 ' &= u_2 , \\ u_2 ' &= -p_1 e^{u_1} , \\ \end{array} \end{equation} with boundary conditions $ u_1(0)=0 , ~u_1(1)=0.$ Here $u_1$ and $u_2$ are allowed to be complex, while the parameter $p_1$ can only take real values. In the real case, this is Bratu's equation, whose solution family contains a fold; see the demo \filef{exp}. It is known (\citename{HeKe:90} \citeyear{HeKe:90}) that a simple quadratic fold gives rise to a pitch fork bifurcation in the complex equation. This bifurcation is located in the first computation below. In the second and third run, both legs of the bifurcating solution family are computed. On it, both solution components $u_1$ and $u_2$ have nontrivial imaginary part. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir ezp} & create an empty work directory \\ \commandf{cd ezp} & change directory \\ \commandf{demo('ezp')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{ezp=run(e='ezp',c='ezp')} & 1st run; compute solution family containing fold \\ \hline %============================================================================== \commandf{ezp=ezp+run(ezp('BP1'),ISW=-1)} & \parbox[t]{3in}{2nd run; compute bifurcating complex solution family. \vspace{0.2cm}}\\ \commandf{ap('ezp')} & append output-files to \filef{p.ezp, s.ezp, d.ezp} \\ \hline %============================================================================== \commandf{ezp=ezp+run(ezp('BP1'),ISW=-1,DS='-')} & \parbox[t]{3in}{3rd run; compute 2nd leg of bifurcating family. \vspace{0.2cm}}\\ \commandf{save(ezp,'ezp')} & save combined output to \filef{b.ezp, s.ezp, d.ezp} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{ezp}.} \label{tbl:demo_ezp} \end{center} \end{table} %============================================================================== \newpage % %============================================================================== %DEMO=um2====================================================================== %============================================================================== \section{ um2 : Basic computation of a 2D unstable manifold.} \label{sec:Demos_um2} This demo shows how one can compute a 2D unstable manifold of an equilibrium using {\it orbit continuation}. The model equations are given by \begin{equation} \begin{array}{cl} x' &= ~\eps x - y^3~, \\ y' &= ~~y + x^3~. \\ \end{array} \end{equation} The origin has eigenvalues $\eps$ and $1$, where $\eps>0$, so that its unstable manifold is indeed $2$-dimensional. Since the phase space itself is $2$-dimensional, one can also consider this demo as showing how to generate part of a $2$-dimensional phase portrait. However, the basic steps in this demo also apply to the computation of $2$-dimensional unstable manifolds of equilibria in higher-dimensional phase space. In the computations the independent time variable $t$ is scaled to vary in the unit interval, so that the actual integration time $T$ becomes an explicit parameter in the equations, namely, \begin{equation} \begin{array}{cl} x' &= ~T~(\eps x - y^3)~, \\ y' &= ~T~(~y + x^3)~. \\ \end{array} \end{equation} To carry out the calculations run the Python script \filef{um2.auto} included in the demo. In order to better appreciate the power of orbit continuation for computing such manifolds, one can also run the script for a smaller value of $\eps$, {\it e.g.}, $\eps=10^{-2},\cdots,10^{-6}$, by changing the value entered on the last line of the constants-file \filef{c.umn.2}. One can view the phase portrait by plotting the solutions in the solutions-file \filef{s.3} in the $x$-$y$ plane. In the first run an orbit is ``grown'' by continuation in the integration time $T$, starting from a very small value of $T$, so that a solution that is constant in time is an accurate initial approximation. The starting solution is in fact a point on a circle of small radius $r_0$ around the stationary point, {\it i.e.}, around the origin. For illustrative purpose the value of $r_0$ is $0.1$ in this demo, but could be smaller if more accuracy is needed. The precise starting point is in the strongly unstable direction, namely, in the $y$-direction, which is the direction of the eigenvector associated with the ``strongly unstable eigenvalue'', which here has value $1$. The growing of the initial orbit is terminated when the norm of its endpoint reaches the value 0.6, {\it i.e.}, when $\sqrt{x(1)^2+y(1)^2}=0.6$. The value of $\eps$ is $0.5$ in the first run. In the second run continuation is used to decrease the value of $\eps$ to $0.1$ (or, if desired, to a smaller value, as already mentioned above). The norm of the endpoint $(x(1),y(1))$ is fixed in the second run, while $T$ is variable. In the third run the norm of the endpoint remains fixed. However, the initial point $(x(0),y(0))$ is allowed to move around the small circle of radius $r_0$ around the orgin. The endpoint thereby moves around the ``large'' circle of radius $0.6$. The integration time $T$ remains variable. The orbits computed in this run generate the local manifold. When viewing the orbits computed in the third run, as written in the file \filef{s.3}, notice that orbits near the ``weakly unstable direction'', which here corresponds to the $x$ direction, have been well-computed. Such orbits are sensitively dependent on the initial condition $(x(0),y(0))$ when the problem is considered as an initial value problem. It is in fact the {\it continuation} of the {\it entire orbits} using a {\it boundary value approach} which enables their determination. As already mentioned, this feature is even more visible when running this demo with a smaller value of $\eps$. \newpage %============================================================================== %DEMO=um3====================================================================== %============================================================================== \section{ um3 : A 2D unstable manifold in 3D.} \label{sec:Demos_um3} This demo uses {\it orbit continuation} to compute part of the 2D unstable manifold of the origin of the equations \begin{equation} \begin{array}{cl} x' &= ~\eps x - y^3 + z^3~, \\ y' &= ~~y + x^3~, \\ z' &= -z + x^2~. \\ \end{array} \end{equation} The origin has unstable eigenvalues $\eps$ and $1$, where $\eps>0$, so that its unstable manifold is $2$-dimensional. In the computations the independent time variable $t$ is scaled to vary in the unit interval, so that the actual integration time $T$ becomes an explicit parameter in the equations; see, for example, demo \filef{um2}. The calculations can be done by running the Python script \filef{um3.auto} included in the demo. In the first run an orbit is ``grown'' by continuation in the integration time $T$, starting from a very small value of $T$, so that a solution that is constant in time is an accurate initial approximation. The starting solution is in fact a point on a circle of small radius $r_0=0.03$ in the unstable eigenspace of the origin. The precise starting point is in the strongly unstable direction, namely, the $y$-direction. The initial orbit is grown until the $L_2$-norm of its endpoint $(x(1),y(1),z(1))$ reaches the value $1$. The value of $\eps$ is fixed at $0.5$ in the first run. In the second run continuation is used to decrease $\eps$ to $0.01$. The norm of the endpoint $(x(1),y(1),z(1))$ is fixed in this run, while $T$ is variable. In the third run the norm of the endpoint remains fixed, but the initial point $(x(0),y(0),z(0))$ is allowed to move around the small circle of radius $r_0$ in the unstable eigenspace of the origin. The endpoint thereby moves on the surface of the ``large'' sphere of radius $1$. The integration time $T$ remains variable. The orbits computed in this run generate the local manifold. When viewing the orbits computed in the third run, as written in the file \filef{s.3}, notice that there appears to be second equilibrium with a 2D stable manifold which intersects the 2D unstable manifold of the origin. The intersection curve, which corresponds to a heteroclinic orbit, is visible in the graphical representation of the manifold. \newpage % %============================================================================== %DEMO=p2c====================================================================== %============================================================================== \section{ p2c : Point to cycle connections.} \label{sec:Demos_p2c} In this demo a point to cycle heteroclinic connection is computed via homotopy, and then continued in two system parameters, in the Lorenz equations \begin{eqnarray*} u_1' &=& p_3 (u_2 - u_1), \\ u_2' &=& p_1 u_1 - u_2 - u_1 u_3, \\ u_3' &=& u_1 u_2 - p_2 u_3. \end{eqnarray*} Type \commandf{auto p2c.auto} to run the demo and \commandf{auto clean.auto} to remove generated files. Refer to \citename{DoKoVoKu08} \citeyear{DoKoVoKu08} and \url{http://www.bio.vu.nl/thb/research/project/globif/index_main.html} for background information. % %============================================================================== %DEMO=c2c====================================================================== %============================================================================== \section{ c2c : Cycle to cycle connections.} \label{sec:Demos_c2c} In this demo a cycle to cycle heteroclinic connection is computed via homotopy, and then continued in one system parameter, in a food chain model: \begin{eqnarray*} x' &=& x(1 - x) - \frac{5 x y}{1 + 3 x}, \\ y' &=& \frac{5 x y}{1 + 3 x} - p_1 y - \frac{0.1 y z}{1 + 2 y}, \\ z' &=& \frac{0.1 y z}{1 + 2 y} - p_2 z. \end{eqnarray*} Type \commandf{auto c2c.auto} to run the demo. After that it is possible to compute two-parameter continuations of folds of the cycle-to-cycle connection, but since this is computationally intensive it is put in a seperate file: type \commandf{auto c2cfolds.auto}. Type \commandf{auto clean.auto} to remove all generated files. Refer to \citename{DoKoVoKu09} \citeyear{DoKoVoKu09} and \url{http://www.bio.vu.nl/thb/research/project/globif/index_main.html} for background information. \newpage %============================================================================== %DEMO=pcl====================================================================== %============================================================================== \section{ pcl : Lorenz: Point-to-cycle connections with Lin's method.} \label{sec:Demos_pcl} This demo computes a point-to-cycle connection (or EtoP connection; for equilibrium to periodic orbit) in the Lorenz equations \begin{equation} \begin{array}{cl} x' &= \sigma (y - x), \\ y' &= \rho x - y - x z, \\ z' &= x y - \beta z, \\ \end{array} \end{equation} using Lin's method, as described in \citename{KrRi:08} \citeyear{KrRi:08}. Initially, we fix $\beta=8/3$, $\sigma=10$, and let $\rho$ vary, starting from $0$. Here we have a transition from simple to chaotic dynamics. For approximate values of $\rho$ in the interval $[13.9265,24.0579]$ one finds preturbulence, organized by a pair of symmetrically related periodic orbits that emanate from a homoclinic bifurcation at $\rho\approx 13.9265$. For $\rho\approx 24.0579$ there exist two symmetric point-to-cycle connections that mark the appearance of a chaotic attractor for higher values of $\rho$. The computation to find one of these two connections uses the following steps: \begin{enumerate} \item Find the secondary equilibria emanating from the pitchfork bifurcation of the equilibrium at $0$, and their Hopf bifurcations, similarly to the demo \filef{lrz}. \item Follow the periodic orbit emanating from the Hopf bifurcation in $\rho$ and its period $T$, until $\rho=24.0579$, a value close to where a point-to-cycle connection is known to exist. \item Extend the system, putting the variational equation (the eigenfunction) into solution coordinates 4, 5, and 6. The trivial (0) eigenvector is continued until we hit a branch point, corresponding to where $\mu=$ \parf{PAR(12)} equals the natural logarithm of a Floquet multiplier. \item Switch branches and continue the non-trivial eigenvector until its norm $h$ equals 1. \item Extend the system again from 6 to 9 dimensions to calculate a connection from the cross section $\Sigma$, given by $x=10$, to the periodic orbit. The connection starts at the non-trivial eigenvector with respect to the periodic orbit with a distance of $\delta=10^{-7}$, and grows backwards in time until it hits the section $\Sigma$ at time $T^+$. \item Extend the system one last time from 9 to 12 dimensions. We calculate a connection from the equilibrium at 0, starting at its eigenvector over a distance of $\varepsilon=10^{-7}$, to the cross section $\Sigma$, at time $T^-$. The second intersection is the one that is closest to the intersection computed in step 5, and it is the one we want. \item Firstly, in the routine \funcf{PVLS} in the equations file \filef{pcl.f90}, the Lin vector, a normalized vector between the points of intersection computed in steps 5 and 6 is put in $Z_x$, $Z_y$ and $Z_z$ (\parf{PAR(24)-PAR(26)}). Starting data for the Lin gap, which measures the distance between these two points of intersection, is put in $\eta=$ \parf{PAR(23)}. Subsequently, close this gap by continuing in $\eta$, $\rho$, $\delta$, $\varepsilon$, $T^-$, $T^+$, $\mu$, and $T$. This process is illustrated in Figure~\ref{fig:Demos_pcl1}. \item Continue the point to cycle connection obtained in step 7 in the system parameters $\rho$ and $\beta$, together with $\delta$, $\varepsilon$, $T^-$, $T^+$, $\mu$, and $T$. Connections for various values of $(\rho,\beta)$ are shown in Figure \ref{fig:Demos_pcl2}. \end{enumerate} The above sequence of calculations can be carried out by running the Python script \filef{pcl.auto} (without constants files) or \filef{pclc.auto} (with constants files) included in the demo. See the script and the Fortran file \filef{pcl.f90} for details on how all parameters are mapped and which precise AUTO constants are changed at every step. \begin{figure}[htb] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/closegap_pcl_par}} \put(240,-20){\includegraphics[scale=0.48]{include/closegap_pcl}} \end{picture} \caption{Closing the Lin-gap to obtain the point-to-cycle connection. The left panel is a plot of $\rho$ versus the gap size $\eta$, and the right panel shows the corresponding orbit segments, projected onto the $(x,z)$-plane. To obtain these figures run \commandf{plot('closegap')} or \commandf{@pp closegap}.} \label{fig:Demos_pcl1} \end{center} \end{figure} \begin{figure}[ht!] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/cont_pcl_par}} \put(240,-20){\includegraphics[scale=0.48]{include/cont_pcl}} \end{picture} \caption{Parameter space diagram (left) and corresponding orbit segments in phase space (right), where the connection is continued in $\rho$ and $\beta$. To obtain these figures run \commandf{plot('cont')} or \commandf{@pp cont}.} \label{fig:Demos_pcl2} \end{center} \end{figure} \newpage %============================================================================== %DEMO=snh====================================================================== %============================================================================== \section{ snh : SNH with Global reinjection: Point-to-cycle connections with Lin's method.} \label{sec:Demos_snh} This demo computes point-to-cycle (or EtoP connection; for equilibrium to periodic orbit) and homoclinic point-to-point connections in the model vector field \begin{equation} \begin{array}{cl} x' &= \nu_1 x - \omega y - (\alpha x - \beta y) \sin \varphi - (x^2+y^2)x + d (2 \cos \varphi+\nu_2)^2, \\ y' &= \nu_1 y + \omega x - (\alpha y + \beta x) \sin \varphi - (x^2+y^2) y + f (2 \cos \varphi+\nu_2)^2, \\ \varphi' &= \nu_2 + s (x^2+y^2) + 2 \cos \varphi + c(x^2+y^2)^2, \\ \end{array} \end{equation} using Lin's method, as described in Krauskopf and Rie\ss (2008). %\cite{kr} This system describes the dynamics near a saddle-node Hopf bifurcation with global reinjection, as discussed in Krauskopf and Oldeman(2006). We keep the following parameters fixed throughout: $\omega=1$, $\alpha=-1.0$, $\beta=0$, $s=-1$, $c=0$, $d=0.01$, and $f=\pi d$. Initially, we fix $\nu_2=-1.46$, since for that value of $\nu_2$, close to $\nu_1=0.74$, there exists a codimension-one connection from a periodic orbit ($\Gamma$) to an equilibrium ($b$). Together with a codimension-zero connection back to $\Gamma$, it forms a heteroclinic cycle. In this example, the flow is such that the codimension-one connecting orbit is an EtoP orbit where the flow is from the periodic orbit to the equilibrium. A homoclinic orbit to $b$ also approaches this cycle. Below, we compute all three connecting orbits. The below sequences of calculations can be carried out by running the Python script \filef{snh.auto} included in the demo. The individual connections can be computed by running the scripts \filef{h1b.auto} (homoclinic orbit), \filef{cb.auto} (codimension-one EtoP), and \filef{tb.auto} (codimension-zero EtoP). See the scripts and the Fortran file \filef{snh.f90} for details on how all parameters are mapped and which precise AUTO constants are changed at every step. \subsection{The homoclinic point-to-point connection.} The starting point for this investigation is a homoclinic orbit connecting the point $b$ to itself, where the phase of $\varphi$ is shifted by $2\pi$ (in other words, the homoclinic orbit reinjects once and it is a heteroclinic orbit in the covering space). We can most easily compute the homoclinic orbit using a homotopy method (see the {\cal HomCont} section \ref{sec:Starting_strategies} for details): \begin{enumerate} \item We locate the homoclinic orbit, or here, the heteroclinic orbit in the covering space by continuing the one-dimensional stable manifold in negative time. This way, {\cal HomCont} views the stable manifold as a one-dimension unstable manifold to which its standard homotopy method can be applied and which makes the method much more straightfoward than starting with a two-dimensional unstable manifold. We reach the unstable eigenspace of $E^u(b)$ as soon as the artificial dummy parameter $\omega_1$, measuring a distance to $E^u(b)$, vanishes. \item We can now improve this connection by continuing in decreasing negative time, keeping $\omega_1$ fixed, and freeing up the system parameter $\nu_1$. \item The resulting orbit can be continued forwards and backwards in the system parameter $\nu_1$ and $\nu_2$, using standard {\cal HomCont} settings. Note the setting of \parf{IEQUIB=1}: {\cal HomCont} auto-detects the phase shift and only continues one equilibrium instead of treating the orbit as a general heteroclinic orbit. \end{enumerate} The resulting homoclinic orbit snakes in parameter space between the two tangencies of the codimension-zero connection and terminates at a segment of the codimension-one EtoP connection. We show this in Figure~\ref{fig:Demos_snh3}. \subsection{The codimension-one point-to-cycle connection.} To compute the codimension-one point-to-cycle connection, the following steps are used (very similar to those in the demo \commandf{pcl}): \begin{enumerate} \item Continue the first equilibrium $a$ at $x=y=0$, $\varphi=-\mathrm{arccos}(-\nu_2/2)$, which undergoes a Hopf bifurcation at $\nu_1\approx 0.683447$. \item Follow the periodic orbit, emanating from the Hopf bifurcation, in $\nu_1$ and its period $T$, until $\nu_1=0.74$. \item Extend the system, putting the variational equation (the eigenfunction) into solution coordinates 4, 5, and 6. The trivial (0) eigenvector is continued until we hit a branch point, corresponding to where $\mu=$ \parf{PAR(12)} equals the natural logarithm of a Floquet multiplier. \item Switch branches and continue the non-trivial eigenvector until its norm $h$ equals 1. \item Extend the system again from 6 to 9 dimensions to calculate a connection from the periodic orbit to the cross section $\Sigma$, given by $\varphi=\pi$. The connection starts at the non-trivial eigenvector with respect to the periodic orbit with a distance of $\delta=-10^{-5}$, and grows forwards in time until it hits the section $\Sigma$ at time $T^-$. \item Extend the system one last time from 9 to 12 dimensions. We calculate a connection backwards in time from the second equilibrium $b$ at $x=y=0$, $\varphi=\mathrm{arccos}(-\nu_2/2)$, starting at its eigenvector over a distance of $\varepsilon=10^{-6}$, to the cross section $\Sigma$, at time $T^+$. The Lin vector, a normalized vector between the points of intersection computed in steps 5 and 6, is put in $Z_x$, $Z_y$ and $Z_z$ (\parf{PAR(24)-PAR(26)}). Starting data for the Lin gap, which measures the distance between these two points of intersection is put in $\eta=$ \parf{PAR(23)}. \item Close the gap computed in step 6 by continuing in $\eta$, $\nu_1$, $\delta$, $\varepsilon$, $T^+$, $T^-$, $\mu$, and $T$. The connection is found at $\nu_1=7.41189$. This process is illustrated in Figure~\ref{fig:Demos_snh1}. \item Continue the point to cycle connection obtained in step 7 in the system parameters $\nu_1$ and $\nu_2$, together with $\delta$, $\varepsilon$, $T^+$, $T^-$, $\mu$, and $T$. Connections for various values of $(\nu_1,\nu_2)$ are shown in Figure \ref{fig:Demos_snh2}. \end{enumerate} \begin{figure}[htb] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/closegap_snh_par}} \put(250,-15){\includegraphics[scale=0.48]{include/closegap_snh}} \end{picture} \caption{Closing the Lin-gap to obtain the point-to-cycle connection. The left panel is a plot of $\nu_1$ versus the gap size $\eta$, and the right panel shows the corresponding orbit segments. To obtain these figures run \commandf{plot('closegap')} or \commandf{@pp closegap}, and \commandf{plot3('closegap')} or \commandf{@pl closegap}.} \label{fig:Demos_snh1} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/cb_snh_par}} \put(250,-15){\includegraphics[scale=0.48]{include/cb_snh}} \end{picture} \caption{Parameter space diagram (left) and corresponding orbit segments in phase space (right), where the connection is continued in $\nu_1$ and $\nu_2$. To obtain these figures run \commandf{plot('cb')} or \commandf{@pp cb}, and \commandf{plot3('cb')} or \commandf{@pl cb}. Label 13 denotes the largest connection, at a saddle-node bifurcation of limit cycles, and label 16 the smallest one, where the periodic orbit disappears in a Hopf bifurcation.} \label{fig:Demos_snh2} \end{center} \end{figure} \subsection{The codimension-zero point-to-cycle connection.} Next we compute the codimension-zero connection back to the cycle which must also exist near the accumulation of the parameter space curve $h_1^b$. This computation starts in the same way as the computation of the codimension-one connection: steps 1 to 4 are the same except that in step 3 we now find the negative Floquet exponent $\mu$, instead of the positive exponent. Steps 5 to 8 proceed as follows: \begin{enumerate} \item[5.] Similarly to step 5 before, we compute an orbit in the stable manifold of the periodic orbit. However, Lin's method is not used, because it is easier to use a homotopy method to connect directly to the unstable eigenspace $E^u(b)$, which is given by the section where $\varphi=\mathrm{arccos}(-\nu_2/2)$. Because we compute an approximation to the stable rather than the unstable manifold using almost the same boundary value problem, we let $T^-$ be negative. Also the distance from the periodic orbit to the connection is now given by $\delta=10^{-4}$, flipping its sign. \item[6.] Improve the connection computed in step 5, by decreasing the negative value of $T^-$, fixing the starting point in $E^u(b)$ and freeing $\delta$. \item[7.] Follow the codimension-zero connection in the system parameter $\nu_1$, together with $\mu$, $T$, $\delta$, and $T^-$, also adding an integral condition for the connection. \AUTO detects two fold points (LP), corresponding to tangencies of $W^u(b)$ and $W^s(\Gamma)$. \item[8.] Continue the two folds forwards and backwards in two parameters, by adding the system parameter $\nu_2$ and setting the \AUTO constant \parf{ISW=2}. The folds terminate where $\Gamma$ disappears in a Hopf bifurcations (small $\nu_1$) and disappears in a saddle-node bifurcation of limit cycles (large $\nu_1$). In both cases the continued connection and orbit stop converging, so \AUTO reports MX. \end{enumerate} \begin{figure}[h!] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/cont_snh_all_par}} \put(251,-15){\includegraphics[scale=0.45]{include/cont_snh_all}} \end{picture} \caption{Parameter space diagram (left) and the corresponding homoclinic orbit on the snaking curve $h_1^b$ for label 20 (right). The snaking curve is in between the two tangencies for the codimension-zero EtoP connection $t_b$ and terminates at a segment of the codimension-one EtoP connection $c_b$. To obtain these figures run \commandf{plot('all')} or \commandf{@pp all}, and \commandf{plot3('all')} or \commandf{@pl all}.} \label{fig:Demos_snh3} \end{center} \end{figure} \newpage %============================================================================== %DEMO=fnc====================================================================== %============================================================================== \section{ fnc : Canards in the FitzHugh-Nagumo system.} \label{sec:Demos_fnc} This demo computes attracting and repelling slow manifolds in the self-coupled FitzHugh-Nagumo system: \begin{equation} \label{eq:Demos_fnc} \begin{array}{cl} v' &= h - (v^3 - v + 1) / 2 - \gamma s v,\\ h' &= -\varepsilon (2h + 2.6 v),\\ s' &= -\varepsilon \delta s.\\ \end{array} \end{equation} Furthermore, this demo continues canard orbits in parameter space. Typically, trajectories in slow-fast systems such as this one consist of a slow part that follows the attracting slow manifold, followed by a fast part when the trajectory hits a fold with respect to the fast direction. After this jump, the trajectory follows a slow segment again. A canard orbit, on the other hand, does not jump at the fold but follows the repelling slow manifold. A central role is played by the two-dimensional critical manifold $S$ which is given by the nullcline of the fast variable in the limit for $\varepsilon=0$. It consists of attracting and repelling sheets $S^a$ and $S^r$, which generically meet at fold curves $F$ with respect to the fast flow direction. For details, see \citename{DeKrOs:08} \citeyear{DeKrOs:08,DeKrOs:09}. For system (\ref{eq:Demos_fnc}), where we fix $\gamma=0.5$ and $\delta=0.565$, the critical manifold is given by \begin{equation} \label{eq:Demos_fnc_S} S=\{(v,h,s)\in \mathbb{R}^3| 2h-v^3+v-1-vs=0\}, \end{equation} which is folded with respect to the fast variable $v$ along the folded node curve \begin{equation} \label{eq:Demos_fnc_F} F=\{(v,h,s)\in S| 1 - 3v^2=0\}. \end{equation} The computation of the slow manifolds is performed in three steps. They start with a constant-in-time solution at the folded node singularity $(v,h,s)=(-0.49,0.6176,0.2797)$ for $\varepsilon=0.015$ on the scaled time interval $[0,1]$ with time lengths $T^a=0$ and $T^r=0$, respectively. Then, for the computation of the attracting manifold $(v^a,h^a,s^a)$, via boundary conditions we always keep the starting point $(v^a(0),h^a(0),s^a(0))$ on $S$ and $s^a(1)$ fixed to $0.2797$. The steps are as follows: \begin{enumerate} \item Homotopy step 1: grow the orbit segment in $T^a$, continuing also in $v^a(0)$, $h^a(0)$, and $s^a(0)$, where the starting point is kept on the folded node $F$ until $s^a(0)=0.6$. \item Homotopy step 2: the extra boundary condition for $F$ is dropped, and we now instead fix $s^a(0)=0.6$. We continue in $v^a(0)$, $h^a(0)$, and $T^a$ until $h^a(0)=-6.0$. \item Actual computation: we continue in $v^a(0)$, $s^a(0)$, and $T^a$, fixing $h^a(0)=-6.0$. The end-point coordinates $v^a(1)$ and $h^a(1)$ are monitored so they can be matched with starting points of the repelling manifold. These matches were found manually and are now indicated at specific values of $T^a$ as UZ labels. \end{enumerate} For the repelling manifold $(v^r,h^r,s^r)$, we always keep the end point $(v^r(1),h^r(1),s^r(1))$ on $S$ and $s^r(0)$ fixed to $0.2797$. The steps are now as follows: \begin{enumerate} \item Homotopy step 1: grow the orbit segment in $T^r$ until $s^r(1)=0.05$. \item Homotopy step 2: the extra boundary condition for $F$ is dropped, and we now instead fix $s^r(1)=0.05$. We continue until $v^r(1)=0$. \item Actual computation: we continue in $s^r(0)$ and $T^r$, fixing $v^r(1)=0$. The starting point coordinates $v^r(0)$ and $h^r(0)$ are now monitored for matches with the attracting manifold. \end{enumerate} The demo contains one folder \filef{attr} for the "attracting" slow manifold and one folder \filef{rep} for the "repelling" slow manifold. In each of these two folders, the manifolds can be computed by running the commands \filef{auto attr.auto} and \filef{auto rep.auto}, respectively. The alternative script files \filef{attrc.auto} and \filef{repc.auto} use constants files for every step instead of specifying the constants in the script. The main folder contains AUTO files to continue in parameter space six of the secondary canards of this systems. The script \filef{fnc.auto} first computes the attracting and repelling slow manifolds in their respective folders and next concatenates matching manifolds in Python. Six of these canard orbits are then continued in $\varepsilon$ in both decreasing and increasing direction. If $T^a_j$ is the integration time for the canard segment $\xi^a_j$ on the attracting slow manifold and $T^r_j$ is the integration time for the orbit segment $\xi^r_j$ on the repelling slow manifold corresponding to the same canard solution, then the concatenated orbit segment $\xi_j$ has $T^c_j=T^a_j+T^r_j$ as integration time. The orbit $\xi_j$ is obtained from $\xi^a_j$ and $\xi^r_j$ by, concatenating $\xi^a_j$ and $\xi^r_j$, and rescaling the time so that it runs monotonically from 0 to 1. Parameters are then also copied, where only those relating to the start of the attracting manifold and the end of the repelling manifold are kept, for these parameters are used for the boundary conditions of the canard orbits. The new integration time $T^c_j$ is stored in \parf{PAR(11)}. Two constant files are provided. They correspond to the continuation in epsilon in both decreasing (\filef{c.fnc}) and and increasing (\filef{c.fnc.epsplus}) direction. Continuation in any other system parameter is easily obtained by editing the \parf{ICP} entry. The script \filef{plot.auto} produces the plots we show here, in Figures~\ref{fig:Demos_fnc1}, \ref{fig:Demos_fnc2}, and \ref{fig:Demos_fnc3}. \begin{figure}[h!] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/fnc_attrrep1}} \put(251,-15){\includegraphics[scale=0.45]{include/fnc_attrrep2}} \end{picture} \caption{Repelling and attracting slow manifold curves where they match up (left) and their intersection curves at $s=0.2797$ in the $(h,v)$ plane (right).} \label{fig:Demos_fnc1} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \begin{picture}(550,190) \put(-10,-20){\includegraphics[scale=0.48]{include/fnc_canards1}} \put(240,-20){\includegraphics[scale=0.48]{include/fnc_canards2}} \end{picture} \caption{Continuation of canard orbits: the AUTO $L_2$ norm as a function of $\varepsilon$ for all six orbits (left), and a projection of labels 4, 8, 11, and 16 (black, red, blue, green) of the orbit $\xi_3$ on the $(v,s)$ plane (right).} \label{fig:Demos_fnc2} \end{center} \end{figure} \begin{figure}[h!] \begin{center} \begin{picture}(550,130) \put(-17,-20){\includegraphics[scale=0.5]{include/fnc_canards3}} \put(233,-20){\includegraphics[scale=0.5]{include/fnc_canards4}} \put(359,-20){\includegraphics[scale=0.5]{include/fnc_canards5}} \end{picture} \caption{Continuation of canard orbits: projection of all canard orbits on the $(v,s)$ plane for $\varepsilon=0.015$ (left), $\varepsilon=10^{-4}$ (middle), and $\varepsilon=10^{-6}$ (right).} \label{fig:Demos_fnc3} \end{center} \end{figure} %============================================================================== %============================================================================== \chapter{ \AUTO Demos : Parabolic PDEs.} \label{ch:Demos_PDE} %============================================================================== %============================================================================== \newpage %============================================================================== %DEMO=pd1====================================================================== %============================================================================== \section{ pd1 : Stationary States (1D Problem).} \label{sec:Demos_pd1} This demo uses Euler's method to locate a stationary solution of a nonlinear parabolic PDE, followed by continuation of this stationary state in a free problem parameter. The equation is $$ \frac{\partial u }{ \partial t} = D~\frac{\partial^2 u }{ \partial x^2} ~+~ p_1~ u ~( 1-u) , $$ on the space interval $[0,L]$, where $L=$~{\tt PAR(11)}~$=10$ is fixed throughout, as is the diffusion constant $D=$~{\tt PAR(15)}~$=0.1$. The boundary conditions are $u(0) = u(L) = 0$ for all time. In the first run the continuation parameter is the independent time variable, namely \parf{PAR(14)}, while $p_1=1$ is fixed. The \AUTO-constants \parf{DS}, \parf{DSMIN}, and \parf{DSMAX} then control the step size in space-time, here consisting of \parf{PAR(14)} and $u(x)$. Initial data are $u(x)=\sin(\pi x/L)$ at time zero. Note that in the subroutine \funcf{ STPNT} the initial data must be scaled to the unit interval, and that the scaled derivative must also be provided; see the equations-file \filef{pv1.f90}. In the second run the continuation parameter is $p_1$. Euler time integration is only first order accurate, so that the time step must be sufficiently small to ensure correct results. Indeed, this option has been added only as a convenience, and should generally be used only to locate stationary states. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir pd1} & create an empty work directory \\ \commandf{cd pd1} & change directory \\ \commandf{demo('pd1') } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='pd1',c='pd1') } & time integration towards stationary state \\ \commandf{save(r1,'1') } & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \parbox[t]{3.3in}{ \commandf{r2=run(r1,IPS=17,ICP=[1],NTST=20, NMX=100,RL1=50,NPR=25,DS=0.1,DSMAX=0.5)}} & \parbox[t]{3in}{continuation of stationary states; read restart data from the last label of \parf{r1} \vspace{0.2cm}} \\ \commandf{save(r2,'2') } & save output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{pd1}.} \label{tbl:demo_pd1} \end{center} \end{table} \newpage %============================================================================== %DEMO=pd2====================================================================== %============================================================================== \section{ pd2 : Stationary States (2D Problem).} \label{sec:Demos_pd2} This demo uses Euler's method to locate a stationary solution of a nonlinear parabolic PDE, followed by continuation of this stationary state in a free problem parameter. The equations are \begin{equation} \begin{array}{cl} {\partial u_1 / \partial t} &= D_1~{\partial^2 u_1 / \partial x^2} ~+~ p_1~ u ~( 1-u) ~-~ u_1 u_2 , \\ {\partial u_2 / \partial t} &= D_2~{\partial^2 u_2 / \partial x^2} ~-~ u_2 ~+~ u_1 u_2 , \\ \end{array} \end{equation} on the space interval $[0,L]$, where $L=$~\parf{PAR(11)}~$=1$ is fixed throughout, as are the diffusion constants $D_1=$~\parf{PAR(15)}~$=1$ and $D_2=$~\parf{PAR(16)}~$=1$. The boundary conditions are $u_1(0) = u_1(L) = 0$ and $u_2(0) = u_2(L) = 1$, for all time. In the first run the continuation parameter is the independent time variable, namely \parf{PAR(14)}, while $p_1=12$ is fixed. The \AUTO-constants \parf{DS}, \parf{DSMIN}, and \parf{DSMAX} then control the step size in space-time, here consisting of \parf{PAR(14)} and $(u_1(x),u_2(x))$. Initial data at time zero are $u_1(x)=\sin(\pi x/L)$ and $u_2(x)=1$. Note that in the subroutine \funcf{ STPNT} the initial data must be scaled to the unit interval, and that the scaled derivatives must also be provided; see the equations-file \filef{pv2.f90}. In the second run the continuation parameter is $p_1$. A branch point is located during this run. Euler time integration is only first order accurate, so that the time step must be sufficiently small to ensure correct results. Indeed, this option has been added only as a convenience, and should generally be used only to locate stationary states. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir pd2} & create an empty work directory \\ \commandf{cd pd2} & change directory \\ \commandf{demo('pd2') } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='pd2',c='pd2') } & time integration towards stationary state \\ \commandf{save(r1,'1')} & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \parbox[t]{3.4in}{ \commandf{r2 = run(r1,IPS=17,ICP=[1],ISP=2,NMX=15, NPR=50,DS=-0.1,DSMAX=1.0,UZR=\{-1:0.0\})}} & \parbox[t]{3in}{continuation of stationary states; read restart data from \filef{s.1} \vspace{0.2cm}}\\ \commandf{save(r2,'2') } & save output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{pd2}.} \label{tbl:demo_pd2} \end{center} \end{table} \newpage %============================================================================== %DEMO=wav====================================================================== %============================================================================== \section{ wav : Periodic Waves.} \label{sec:Demos_wav} This demo illustrates the computation of various periodic wave solutions to a system of coupled parabolic partial differential equations on the spatial interval $[0,1]$. The equations, that model an enzyme catalyzed reaction (\citename{DoKe:86a} \citeyear{DoKe:86a}) are~: \begin{equation} \begin{array}{cl} {\partial u_1 / \partial t} &= ~{\partial^{2} u_1 / \partial x^{2}} -p_1 \bigl[p_4 R(u_1,u_2) - (p_2 - u_1) \bigr] ,\\ {\partial u_2 / \partial t} &= \beta {\partial^{2} u_2 / \partial x^{2}} -p_1 \bigl[p_4 R(u_1,u_2) - p_7 (p_3 - u_2) \bigr].\\ \end{array} \end{equation} All equation parameters, except $p_3$, are fixed throughout. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir wav} & create an empty work directory \\ \commandf{cd wav} & change directory \\ \commandf{demo('wav')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='wav',c='wav')} & \parbox[t]{3in}{ 1st run; stationary solutions of the system without diffusion \vspace{0.2cm}} \\ \commandf{save(r1,"ode")} & save output-files as \filef{b.ode, s.ode, d.ode} \\ \hline %============================================================================== \commandf{r2=run(e='wav',c='wav',IPS=11)} & \parbox[t]{3in}{2nd run; detect bifurcations to wave train solutions \vspace{0.2cm}}\\ \hline %============================================================================== \parbox[t]{3.5in}{ \commandf{r3=run(r2("HB1"),IPS=12,ICP=[3,11],ILP=0, ISP=0,RL1=700,DS=0.1,DSMAX=1.0, UZR=\{3:[610.0,638.0], -11:500.0\})}} & \parbox[t]{3in}{3rd run; wave train solutions of fixed wave speed \vspace{0.2cm}}\\ \commandf{save(r2+r3,'wav') } & save output to \filef{b.wav, s.wav, d.wav} \\ \hline %============================================================================== \parbox[t]{3.5in}{ \commandf{uz3=load(r3("UZ3"),RL1=1000, DS=0.5,DSMAX=2.0,UZR=\{\})}}& load restart label\\ \commandf{r4=run(uz3,ICP=[3,10],NPR=50)} & \parbox[t]{3in}{4th run; wave train solutions of fixed wave length \vspace{0.2cm}}\\ \commandf{save(r4,'rng') } & save output-files as \filef{b.rng, s.rng, d.rng} \\ \hline %============================================================================== \commandf{r5=run(uz3,IPS=14,ICP=[14],NMX=230,NPR=5)} & \parbox[t]{3in}{5th run; time evolution computation \vspace{0.2cm}}\\ \commandf{save(r5,'tim') } & save output-files as \filef{b.tim, s.tim, d.tim} \\ % %# \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{wav}.} \label{tbl:demo_wav} \end{center} \end{table} \newpage %============================================================================== %DEMO=brc====================================================================== %============================================================================== \section{ brc : Chebyshev Collocation in Space.} \label{sec:Demos_brc} This demo illustrates the computation of stationary solutions and periodic solutions to systems of parabolic PDEs in one space variable, using Chebyshev collocation in space. More precisely, the approximate solution is assumed of the form $u(x,t) = \sum_{k=0}^{n+1} u_k(t) \ell_k(x)$. Here $u_k(t)$ corresponds to $u(x_k,t)$ at the Chebyshev points $\bigl\{ x_k \bigr\}_{k=1}^{n}$ with respect to the interval $[0,1]$. The polynomials $\bigl\{ \ell_k(x) \bigr\}_{k=0}^{n+1}$ are the Lagrange interpolating coefficients with respect to points $\bigl\{ x_k \bigr\}_{k=0}^{n+1}$, where $x_0=0$ and $x_{n+1}=1$. The number of Chebyshev points in $[0,1]$, as well as the number of equations in the PDE system, can be set by the user in the file \filef{brc.f90}. As an illustrative application we consider the Brusselator (\citename{HoKnKu:87} \citeyear{HoKnKu:87}) \begin{equation} \begin{array}{cl} u_t &= {D_x / L^2} u_{xx} + u^2v - (B+1)u + A, \\ v_t &= {D_y / L^2} v_{xx} - u^2v + Bu, \\ \end{array} \end{equation} with boundary conditions $u(0,t)=u(1,t)=A$ and $v(0,t)=v(1,t)=B/A$. Note that, given the non-adaptive spatial discretization, the computational procedure here is not appropriate for PDEs with solutions that rapidly vary in space, and care must be taken to recognize spurious solutions and bifurcations. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir brc} & create an empty work directory \\ \commandf{cd brc} & change directory \\ \commandf{demo('brc')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='brc',c='brc') } & \parbox[t]{3in}{ compute the stationary solution family with Hopf bifurcations. \vspace{0.2cm}}\\ \hline %============================================================================== \commandf{r2=run(r1("HB1"),IPS=2,ICP=[5,11]) } & \parbox[t]{3in}{compute a family of periodic solutions from the first Hopf point. \vspace{0.2cm}}\\ \hline %============================================================================== \commandf{r3=run(r2("BP1"),ISW=-1) } & \parbox[t]{3in}{compute a solution family from a secondary periodic bifurcation. \vspace{0.2cm}}\\ \commandf{save(r1+r2+r3,'brc') } & save all output to \filef{b.brc, s.brc, d.brc} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{brc}.} \label{tbl:demo_brc} \end{center} \end{table} \newpage %============================================================================== %DEMO=brf====================================================================== %============================================================================== \section{ brf : Finite Differences in Space.} \label{sec:Demos_brf} This demo illustrates the computation of stationary solutions and periodic solutions to systems of parabolic PDEs in one space variable. A fourth order accurate finite difference approximation is used to approximate the second order space derivatives. This reduces the PDE to an autonomous ODE of fixed dimension which \AUTO is capable of treating. The spatial mesh is uniform; the number of mesh intervals, as well as the number of equations in the PDE system, can be set by the user in the file \filef{brf.f90}. As an illustrative application we consider the Brusselator (\citename{HoKnKu:87} \citeyear{HoKnKu:87}) \begin{equation} \begin{array}{cl} u_t &= {D_x / L^2} u_{xx} + u^2v - (B+1)u + A, \\ v_t &= {D_y / L^2} v_{xx} - u^2v + Bu, \\ \end{array} \end{equation} with boundary conditions $u(0,t)=u(1,t)=A$ and $v(0,t)=v(1,t)=B/A$. Note that, given the non-adaptive spatial discretization, the computational procedure here is not appropriate for PDEs with solutions that rapidly vary in space, and care must be taken to recognize spurious solutions and bifurcations. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir brf} & create an empty work directory \\ \commandf{cd brf} & change directory \\ \commandf{demo('brf') } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='brf',c='brf') } & \parbox[t]{3in}{compute the stationary solution family with Hopf bifurcations \vspace{0.2cm}} \\ \hline %============================================================================== \parbox[t]{3in}{ \commandf{r2=run(r1("HB1"),IPS=2,ICP=[5,11], NMX=120,EPSL=1e-8) } \vspace{0.2cm}} & \parbox[t]{3in}{compute a family of periodic solutions from the first Hopf point. \vspace{0.2cm}}\\ \hline %============================================================================== \parbox[t]{3in}{ \commandf{r3=run(r2("BP1"),ISW=-1, NMX=100,EPSL=1e-7) } \vspace{0.2cm}} & \parbox[t]{3in}{compute a solution family from a secondary periodic bifurcation.\vspace{0.2cm}}\\ \commandf{save(r1+r2+r3,'brf') } & save all output to \filef{b.brf, s.brf, d.brf} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{brf}.} \label{tbl:demo_brf} \end{center} \end{table} \newpage %============================================================================== %DEMO=bru====================================================================== %============================================================================== \section{ bru : Euler Time Integration (the Brusselator).} \label{sec:Demos_bru} This demo illustrates the use of Euler's method for time integration of a nonlinear parabolic PDE. The example is the Brusselator (\citename{HoKnKu:87} \citeyear{HoKnKu:87}), given by \begin{equation} \begin{array}{cl} u_t &= {D_x / L^2} u_{xx} + u^2v - (B+1)u + A, \\ v_t &= {D_y / L^2} v_{xx} - u^2v + Bu, \\ \end{array} \end{equation} with boundary conditions $u(0,t)=u(1,t)=A$ and $v(0,t)=v(1,t)=B/A$. All parameters are given fixed values for which a stable periodic solution is known to exist. The continuation parameter is the independent time variable, namely \parf{PAR(14)}. The \AUTO-constants \parf{DS}, \parf{DSMIN}, and \parf{DSMAX} then control the step size in space-time, here consisting of \parf{PAR(14)} and $(u(x),v(x))$. Initial data at time zero are $u(x)=A - 0.5 \sin(\pi x)$ and $v(x)=B/A + 0.7 \sin(\pi x)$. Note that in the subroutine \funcf{ STPNT} the space derivatives of $u$ and $v$ must also be provided; see the equations-file \filef{bru.f90}. Euler time integration is only first order accurate, so that the time step must be sufficiently small to ensure correct results. This option has been added only as a convenience, and should generally be used only to locate stationary states. Indeed, in the case of the asymptotic periodic state of this demo, the number of required steps is very large and use of a better time integrator is advisable. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir bru} & create an empty work directory \\ \commandf{cd bru} & change directory \\ \commandf{demo('bru') } & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='bru',c='bru') } & time integration \\ \commandf{save(r1,'bru') } & save output-files as \filef{b.bru, s.bru, d.bru} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{bru}.} \label{tbl:demo_bru} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ \AUTO Demos : Optimization.} \label{ch:Demos_Opt} %============================================================================== %============================================================================== \newpage %============================================================================== %DEMO=opt====================================================================== %============================================================================== \section{ opt : A Model Algebraic Optimization Problem.} \label{sec:Demos_opt} This demo illustrates the method of successive continuation for constrained optimization problems by applying it to the following simple problem~:~ Find the maximum sum of coordinates on the unit sphere in $R^{5}$. Coordinate 1 is treated as the state variable. Coordinates 2-5 are treated as control parameters. For details on the successive continuation procedure see \citename{DoKeKe:91a} \citeyear{DoKeKe:91a}, \citename{DoKeKe:91b} \citeyear{DoKeKe:91b}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir opt} & create an empty work directory \\ \commandf{cd opt} & change directory \\ \commandf{demo('opt')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='opt',c='opt')} & one free equation parameter \\ \commandf{save(r1,'1')} & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r2=run(r1("LP1"))} & \parbox[t]{3in}{two free equation parameters; read restart data from \parf{r1} \vspace{0.2cm}}\\ \commandf{save(r2,'2')} & save output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \commandf{r3=run(r2("LP1"))} & \parbox[t]{3in}{three free equation parameters; read restart data from \parf{r2} \vspace{0.2cm}}\\ \commandf{save(r3,'3')} & save output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \commandf{run(r3("LP1"))} & \parbox[t]{3in}{four free equation parameters; read restart data from \parf{r3} \vspace{0.2cm}}\\ \commandf{save(r4,'4')} & save output-files as \filef{b.4, s.4, d.4} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{opt}.} \label{tbl:demo_opt} \end{center} \end{table} \newpage %============================================================================== %DEMO=ops====================================================================== %============================================================================== \section{ ops : Optimization of Periodic Solutions.} \label{sec:Demos_ops} This demo illustrates the method of successive continuation for the optimization of periodic solutions. For a detailed description of the basic method see \citename{DoKeKe:91b} \citeyear{DoKeKe:91b}. The illustrative system of autonomous ODEs, taken from \citename{Alej:91} \citeyear{Alej:91}, is \begin{equation} \begin{array}{cl} x'(t) & = [-\lambda_4(x^3/3-x) + (z-x)/\lambda_2 - y]/\lambda_1, \\ y'(t) &= x-\lambda_3, \\ z'(t) &= -(z-x)/\lambda_2, \end{array} \end{equation} with objective functional $$ \omega = \int_0^{1} g(x,y,z;\lambda_1,\lambda_2,\lambda_3,\lambda_4) ~ dt, $$ where $g(x,y,z;\lambda_1,\lambda_2,\lambda_3,\lambda_4) \equiv \lambda_3$. Thus, in this application, a one-parameter extremum of $g$ corresponds to a fold with respect to the problem parameter $\lambda_3$, and multi-parameter extrema correspond to generalized folds. Note that, in general, the objective functional is an integral along the periodic orbit, so that a variety of optimization problems can be addressed. For the case of periodic solutions, the extended optimality system can be generated automatically, i.e., one need only define the vector field and the objective functional, as in done in the file \filef{ops.f90}. For reference purpose it is convenient here to write down the full extended system in its general form~: \begin{equation} \begin{array}{cl} &u'(t) = T f \bigl( u(t),\lambda \bigr) , \qquad T\in \R {\rm ~(period)},~ u(\cdot),f(\cdot,\cdot) \in \Rn, ~ \lambda \in \R^{n_{\lambda}}, \\ & \cr &w'(t) = -Tf_u\bigl( u(t),\lambda \bigr)^{*} w(t) + \kappa u_0'(t) + \gamma g_u\bigl( u(t),\lambda \bigr)^{*}, \qquad w(\cdot) \in \Rn,~ \kappa, \gamma \in \R, \\ & \cr &u(1) - u(0) = 0, \qquad w(1) - w(0) = 0, \\ & \cr &\int_{0}^{1} u(t)^{*} u_0'(t)~ dt = 0, \\ & \cr &\int_{0}^{1} \omega - g\bigl(u(t),\lambda\bigr) ~dt = 0, \\ & \cr &\int_0^{1} w(t)^{*}w(t) + \kappa^2 + \gamma^{2} - \alpha ~ dt = 0, \qquad \alpha \in \R, \\ & \cr &\int_0^{1} f\bigl( u(t),\lambda \bigr)^{*}w(t) - \gamma g_{T}\bigl( u(t),\lambda \bigr) - \tau_0 ~ dt= 0, \qquad \tau_0 \in \R, \\ & \cr &\int_0^{1} T f_{\lambda_i}\bigl( u(t),\lambda \bigr)^{*}w(t) - \gamma g_{\lambda_i}\bigl( u(t),\lambda \bigr) - \tau_i ~dt= 0, \qquad \tau_i \in \R, \quad i=1, \cdots, n_{\lambda}.\\ \end{array} \end{equation} Above $u_0$ is a reference solution, namely, the previous solution along a solution family. \newpage In the computations below, the two preliminary runs, with \parf{IPS}=1 and \parf{IPS}=2, respectively, locate periodic solutions. The subsequent runs are with \parf{IPS}=15 and hence use the automatically generated extended system. \begin{itemize} \item[-] \commandf{Run 1.}~ Locate a Hopf bifurcation. The free system parameter is $\lambda_3$. \item[-]\commandf{Run 2.}~ Compute a family of periodic solutions from the Hopf bifurcation. \item[-]\commandf{Run 3.}~ This run retraces part of the periodic solution family, using the full optimality system, but with all adjoint variables, $w(\cdot), \kappa, \gamma$, and hence $\alpha$, equal to zero. The optimality parameters $\tau_0$ and $\tau_3$ are zero throughout. An extremum of the objective functional with respect to $\lambda_3$ is located. Such a point corresponds to a branch point of the extended system. Given the choice of objective functional in this demo, this extremum is also a fold with respect to $\lambda_3$. \item[-]\commandf{Run 4.}~ Branch switching at the above-found branch point yields nonzero values of the adjoint variables. Any point on the bifurcating family away from the branch point can serve as starting solution for the next run. In fact, the branch-switching can be viewed as generating a nonzero eigenvector in an eigenvalue-eigenvector relation. Apart from the adjoint variables, all other variables remain unchanged along the bifurcating family. \item[-]\commandf{Run 5.}~ The above-found starting solution is continued in two system parameters, here $\lambda_3$ and $\lambda_2$; i.e., a two-parameter family of extrema with respect to $\lambda_3$ is computed. Along this family the value of the optimality parameter $\tau_2$ is monitored, i.e., the value of the functional that vanishes at an extremum with respect to the system parameter $\lambda_2$. Such a zero of $\tau_2$ is, in fact, located, and hence an extremum of the objective functional with respect to both $\lambda_2$ and $\lambda_3$ has been found. Note that, in general, $\tau_i$ is the value of the functional that vanishes at an extremum with respect to the system parameter $\lambda_i$. \item[-]\commandf{Run 6.}~ In the final run, the above-found two-parameter extremum is continued in three system parameters, here $\lambda_1$, $\lambda_2$, and $\lambda_3$, toward $\lambda_1=0$. Again, given the particular choice of objective functional, this final continuation has an alternate significance here~: it also represents a three-parameter family of transcritical secondary periodic bifurcations points. \end{itemize} Although not illustrated here, one can restart an ordinary continuation of periodic solutions, using \parf{IPS}=2 or \parf{IPS}=3, from a labeled solution point on a family computed with \parf{IPS}=15. \newpage The free scalar variables specified in the \AUTO constants-files for Run~3 and Run~4 are shown in Table~\ref{tbl:demo_ops_1}. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | r | r | r | r | r | r |} \hline Index& 3 & 11 & 12 & 22 & -22 & -23 & -31 \\ \hline Variable& $\lambda_3$ & $T$ & $\alpha$ & $\tau_2$ & $[\lambda_2]$ & $[\lambda_3]$ & $[T]$ \\ \hline \end{tabular} \caption{\commandf{Runs 3 and 4}~ (files \filef{c.ops.3} and \filef{c.ops.4}).} \label{tbl:demo_ops_1} \end{center} \end{table} The parameter $\alpha$, which is the norm of the adjoint variables, becomes nonzero after branch switching in Run~4. The negative indices (-22, -23, and -31) set the active optimality functionals, namely for $\lambda_2$, $\lambda_3$, and $T$, respectively, with corresponding variables $\tau_2$, $\tau_3$, and $\tau_0$, respectively. These should be set in the first run with \parf{IPS}=15 and remain unchanged in all subsequent runs. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | r | r | r | r | r | r |} \hline Index& 3 & ~2 & 11 & 22 & -22 & -23 & -31 \\ \hline Variable& $\lambda_3$ & $\lambda_2$ & $T$ & $\tau_2$ & $[\lambda_2]$ & $[\lambda_3]$ & $[T]$ \\ \hline \end{tabular} \caption{\commandf{Run 5}~ (file \filef{c.ops.5}).} \label{tbl:demo_ops_2} \end{center} \end{table} In Run~5 the parameter $\alpha$, which has been replaced by $\lambda_2$, remains fixed and nonzero. The variable $\tau_2$ monitors the value of the optimality functional associated with $\lambda_2$. The zero of $\tau_2$ located in this run signals an extremum with respect to $\lambda_2$. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | r | r | r | r | r | r | r |} \hline Index& 3 & ~2 & ~1 & 11 & -22 & -23 & -31 \\ \hline Variable& $\lambda_3$ & $\lambda_2$ & $\lambda_1$ & $T$ & $[\lambda_2]$ & $[\lambda_3]$ & $[T]$ \\ \hline \end{tabular} \caption{\commandf{Run 6}~ (file \filef{c.ops.6}).} \label{tbl:demo_ops_3} \end{center} \end{table} In Run~6 $\tau_2$, which has been replaced by $\lambda_1$, remains zero. Note that $\tau_0$ and $\tau_3$ are not used as variables in any of the runs; in fact, their values remain zero throughout. Also note that the optimality functionals corresponding to $\tau_0$ and $\tau_3$ (or, equivalently, to $T$ and $\lambda_3$) \emp{ are} active in all runs. This set-up allows the detection of the extremum of the objective functional, with $T$ and $\lambda_3$ as scalar equation parameters, as a bifurcation in the third run. The parameter $\lambda_4$, and its corresponding optimality variable $\tau_4$, are not used in this demo. Also, $\lambda_1$ is used in the last run only, and its corresponding optimality variable $\tau_1$ is never used. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir ops} & create an empty work directory \\ \commandf{cd ops} & change directory \\ \commandf{demo('ops')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='ops',c='ops')} & locate a Hopf bifurcation \\ \hline %============================================================================== \commandf{uzr=\{3:[0.92,0.93]\}} & set variable for \parf{UZR} \\ \parbox[t]{3.2in}{\commandf{ r2=run(r1("HB1"),IPS=2,ICP=[3,11], NMX=150,RL0=0.9,UZR=uzr)}} & \parbox[t]{3in}{compute a family of periodic solutions; restart from \parf{r1} \vspace{0.2cm}}\\ \commandf{save(r1+r2,'0')} & save output to \filef{b.0, s.0, d.0} \\ \hline %============================================================================== \commandf{icp=[3,11,12,22,-22,-23,-31]} & set variable for \parf{ICP} \\ \parbox[t]{3.2in}{\commandf{ r3=run(r2("UZ1"),IPS=15,ILP=0, ICP=icp,ISP=2,NMX=25,ITNW=7,DS=-0.05)}} & \parbox[t]{3in}{locate a 1-parameter extremum as a bifurcation; restart from \parf{r2} \vspace{0.2cm}}\\ \hline %============================================================================== \commandf{r4=run(r3("BP1"),ISW=-1,ISP=0,NMX=5)} & \parbox[t]{3in}{switch branches to generate optimality starting data; restart from \parf{r3} \vspace{0.2cm}}\\ \commandf{save(r3+r4,'1')} & save output to \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{icp[1:3]=[2,11]} & set variable for \parf{ICP} \\ \commandf{uzr[22]=0.0} & set variable for \parf{UZR} \\ \parbox[t]{3.2in}{ \commandf{r5=run(r4,ICP=icp,ISW=1,NMX=150, RL0=0.8,RL1=1.9,DS='-',UZR=uzr)}} & \parbox[t]{3in}{compute 2-parameter family of 1-parameter extrema; restart from \parf{r4} \vspace{0.2cm}}\\ \commandf{save(r5,'2')} & save the output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \commandf{icp[2:4]=[1,11]} & set variable for \parf{ICP} \\ \parbox[t]{3.4in}{\commandf{r6=run(r5("UZ4"),IRS=15,ICP=icp,NTST=50, UZR=\{1:[0.1,0.05,0.01,0.005,0.001]\})}} & \parbox[t]{3in}{compute 3-parameter family of 2-parameter extrema; restart from \parf{r5} \vspace{0.2cm}}\\ \commandf{save(r6,'3')} & save the output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{ops}.} \label{tbl:demo_ops_4} \end{center} \end{table} \newpage %============================================================================== %DEMO=obv====================================================================== %============================================================================== \section{ obv : Optimization for a BVP.} \label{sec:Demos_obv} This demo illustrates use of the method of successive continuation for a boundary value optimization problem. A detailed description of the basic method, as well as a discussion of the specific application considered here, is given in \citename{DoKeKe:91b} \citeyear{DoKeKe:91b}. The required extended system is fully programmed here in the user-supplied routines in \filef{obv.f90}. For the case of periodic solutions the optimality system can be generated automatically; see the demo \filef{ops}. Consider the system \begin{equation} \begin{array}{cl} u_1'(t) & = u_2(t), \\ u_2'(t) &= -\lambda_1 e^{p(u_1,\lambda_2,\lambda_3)}, \end{array} \end{equation} where $ p(u_1,\lambda_2,\lambda_3) \equiv u_1 + \lambda_2 u_1^{2} + \lambda_3 u_1^{4},$ with boundary conditions \begin{equation} \begin{array}{cl} u_1(0) &= 0, \\ u_1(1) &= 0. \\ \end{array} \end{equation} The objective functional is $$ \omega = \int_0^{1} (u_1(t)-1)^{2}~ dt + \frac{1}{10} \sum_{k=1}^{3} \lambda_{k}^{2}. $$ The successive continuation equations are given by \begin{equation} \begin{array}{cl} u_1'(t) &= u_2(t), \\ u_2'(t) &= -\lambda_1 e^{p(u_1,\lambda_2,\lambda_3)}, \\ w_1'(t) &= \lambda_1 e^{p(u_1,\lambda_2,\lambda_3)} p_{u_1} w_2(t) + 2 \gamma(u_1(t)-1), \\ w_2'(t) &= -w_1(t), \\ \end{array} \end{equation} where $$ p_{u_1} \equiv \frac{{\partial p} }{ {\partial u_1}} = 1 + 2\lambda_2 u_1 + 4\lambda_3 u_1^{3},$$ with \begin{equation} \begin{array}{cl} u_1(0) = 0,\qquad &w_1(0) - \beta_1 = 0,\qquad w_2(0) = 0, \\ u_1(1) = 0,\qquad &w_1(1) + \beta_2 = 0,\qquad w_2(1) = 0, \\\end{array} \end{equation} $$ \int_0^{1} \bigl[ \omega - (u_1(t)-1)^{2} - \frac{1}{10} \sum_{k=1}^{3} \lambda_{k}^{2} \bigr]~ dt = 0, $$ $$ \int_0^{1} \bigl[w_1^{2}(t) - \alpha_0 \bigr]~ dt = 0, $$ \begin{equation} \begin{array}{cl} &\int_0^{1} \bigl[ -e^{p(u_1,\lambda_2,\lambda_3)} w_2(t) - \frac{1}{5}\gamma \lambda_1 \bigr]~ dt = 0, \\ &\int_0^{1} \bigl[ -\lambda_1 e^{p(u_1,\lambda_2,\lambda_3)} u_1(t)^{2} w_2(t) - \frac{1}{5}\gamma \lambda_2 - \tau_2 \bigr]~ dt = 0, \\ &\int_0^{1} \bigl[ -\lambda_1 e^{p(u_1,\lambda_2,\lambda_3)} u_1(t)^{4} w_2(t) - \frac{1}{5}\gamma \lambda_3 - \tau_3 \bigr]~ dt = 0. \\\end{array} \end{equation} In the first run the free equation parameter is $\lambda_1$. All adjoint variables are zero. Three extrema of the objective function are located. These correspond to branch points and, in the second run, branch switching is done at one of these. Along the bifurcating family the adjoint variables become nonzero, while state variables and $\lambda_1$ remain constant. Any such non-trivial solution point can be used for continuation in two equation parameters, after fixing the $L_2$-norm of one of the adjoint variables. This is done in the third run. Along the resulting family several two-parameter extrema are located by monotoring certain inner products. One of these is further continued in three equation parameters in the final run, where a three-parameter extremum is located. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir obv} & create an empty work directory \\ \commandf{cd obv} & change directory \\ \commandf{demo('obv')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='obv',c='obv')} & locate 1-parameter extrema as branch points \\ \commandf{save(r1,'obv')} & save output-files as \filef{b.obv, s.obv, d.obv} \\ \hline %============================================================================== \commandf{r2=run(r1("BP1"),ISW=-1,NMX=5)} & \parbox[t]{3in}{compute a few step on the first bifurcating family \vspace{0.2cm}}\\ \commandf{save(r2,'1')} & save the output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \parbox[t]{3.2in}{ \commandf{r3=run(r2,ICP=[10,1,2,17,18,13,14,15], ISW=1,NMX=100)}} & \parbox[t]{3in}{locate 2-parameter extremum; restart from \parf{r2} \vspace{0.2cm}}\\ \commandf{save(r3,'2')} & save the output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \parbox[t]{3.2in}{ \commandf{r4=run(r3("UZ2"), ICP=[10,1,2,3,18,13,14,15],NMX=25)}} & \parbox[t]{3in}{locate 3-parameter extremum; restart from \parf{r3} \vspace{0.2cm}}\\ \commandf{save(r4,'3')} & save the output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{obv}.} \label{tbl:demo_obv} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ \AUTO Demos : Connecting orbits.} \label{ch:Demos_Heteroclinics} %============================================================================== %============================================================================== \newpage %============================================================================== %DEMO=fsh====================================================================== %============================================================================== \section{ fsh : A Saddle-Node Connection.} \label{sec:Demos_fsh} This demo illustrates the computation of travelling wave front solutions to the Fisher equation, \begin{equation} \begin{array}{cl} & w_t = w_{xx} + f(w), \qquad -\infty < x < \infty, \quad t > 0, \\ & f(w) \equiv w(1-w) . \\ \end{array} \end{equation} We look for solutions of the form $w(x,t)=u(x+ct)$, where $c$ is the wave speed. This gives the first order system \begin{equation} \begin{array}{cl} & u_1'(z) = u_2(z), \\ & u_2'(z) = c u_2(z) - f\bigl(u_1(z)\bigr). \\ \end{array} \end{equation} Its fixed point $(0,0)$ has two positive eigenvalues when $c>2$. The other fixed point, $(1,0)$, is a saddle point. A family of orbits connecting the two fixed points requires one free parameter; see \citename{FrDo:91} \citeyear{FrDo:91}. Here we take this parameter to be the wave speed $c$. In the first run a starting connecting orbit is computed by continuation in the period $T$. This procedure can be used generally for time integration of an ODE with \AUTO. Starting data in \funcf{STPNT} correspond to a point on the approximate stable manifold of $(1,0)$, with $T$ small. In this demo the ``free'' end point of the orbit necessary approaches the unstable fixed point $(0,0)$. A computed orbit with sufficiently large $T$ is then chosen as restart orbit in the second run, where, typically, one replaces $T$ by $c$ as continuation parameter. However, in the second run below, we also add a phase condition, and both $c$ and $T$ remain free. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir fsh} & create an empty work directory \\ \commandf{cd fsh} & change directory \\ \commandf{demo('fsh')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(e='fsh',c='fsh')} & continuation in the period $T$, with $c$ fixed; no phase condition \\ \commandf{save(r1,'0')} & save output-files as \filef{b.0, s.0, d.0} \\ \hline %============================================================================== \parbox[t]{2in}{ \commandf{r2 = run(r1("EP2"), ICP=[2,11,12,13,14], NINT=1, DS='-', UZR=\{2:[1,2,3,5,10]\})} \vspace{0.2cm}} & \parbox[t]{3in}{continuation in $c$ and $T$, with active phase condition. \vspace{0.2cm}} \\ \commandf{save(r2,'fsh')} & save output-files as \filef{b.fsh, s.fsh, d.fsh} \\ \hline %============================================================================== \end{tabular} \caption{Commands for running demo \filef{fsh}.} \label{tbl:demo_fsh} \end{center} \end{table} \newpage %============================================================================== %DEMO=nag====================================================================== %============================================================================== \section{ nag : A Saddle-Saddle Connection.} \label{sec:Demos_nag} This demo illustrates the computation of traveling wave front solutions to Nagumo's equation, \begin{equation} \begin{array}{cl} & w_t = w_{xx} + f(w,a), \qquad -\infty < x < \infty, \quad t > 0, \\ & f(w,a) \equiv w(1-w)(w-a), \qquad 00} and \parf{ITWIST} has just been increased from zero, then {\cal AUTO} will automatically generate the initial solution to the adjoint. In this case, a dummy Newton-step should be performed, see Section~\ref{sec:Starting_strategies} for more details. \end{itemize} \subsection{\parf{ISTART}} \label{sec:ISTART} \begin{itemize} \item[-] \parf{ISTART=1}~: No special action is taken. \item[-] \parf{ISTART=2}~: If \parf{IRS=0}, an explicit solution must be specified in the subroutine \funcf{ STPNT} in the usual format. \item[-] \parf{ISTART=3}~: The ``homotopy'' approach is used for starting, see Section~\ref{sec:Starting_strategies} for more details. Note that this is not available with the choice \parf{IEQUIB=2}. \item[-] \parf{ISTART=4}~: A phase-shift is performed for homoclinic orbits to let the equilibrium (either fixed or non-fixed, depending on IEQUIB) correspond to $t=0$ and $t=1$. This is necessary if a periodic orbit that is close to a homoclinic orbit is continued into a homoclinic orbit. \item[-] \parf{ISTART=5}~(default): If \parf{IRS=0}, the restart solution comes from a data file, or the restart solution is a homoclinic orbit with problem type \parf{IPS=9}, no special action is taken, as for \parf{ISTART=1}. For other problem types, use a phase-shift, as for \parf{ISTART=4}. \item[-] \parf{ISTART=-N, $N=1,2,3,\ldots$}~: Homoclinic branch switching: this description is for reference only. We refer to the demo in Chapter~\ref{ch:HomCont_hbs} to see how this can be used in actual practice and to \citeasnoun{OlChKr:03} for theory and background. The orbit is split into $N+1$ parts and {\cal AUTO} sees it as an $(N+1)\times$\parf{NDIM}-dimensional object. The first part $u_0$ goes from the equilibrium to the point $x_0$ that is furthest from the equilibrium. Then follow $N-1$ shifted copies of the orbit, which travel from the point $x_0$ back to the point $x_0$. The last part $U_N$ goes from the point $x_0$ back to the equilibrium. The derivatives $\dot{x}_0$ with respect to time of the point that is furthest from the equilibrium are stored at the parameters \parf{PAR(NP-NDIM+1...NP)}, where \parf{NP=max(NPARX,NPAR)}. If \parf{ITWIST=1}, and this was also the case in the preceding run, then a copy of the adjoint vector $\Psi$ at $x_0$ is stored at the parameters \parf{PAR(NP-NDIM*2+1...NP-NDIM)} and Lin's method can be used to do homoclinic branch switching. To be more precise, the individual parts $u_i$ and $u_{i+1}$ are at distances $\varepsilon_i$ away from each other, along the Lin vector $Psi$, at the left- and right-hand end points. These gaps $\varepsilon_i$ are at parameters \parf{PAR(20+2*i)}. Moreover, each part (except $u_{N+1}$) ends at at a Poincar\'e section which goes through $x_0$ and is perpendicular to $\dot{x}_0$. The times $T_i$ that each part $u_i$ takes are stored as follows: $T_0=$\parf{PAR(10)}, $T_N=$\parf{PAR(11)} and $T_i=$\parf{PAR(19+2*i)} for $i=1\ldots N-1$. Through a continuation in problem parameters, gaps $\varepsilon_i$, and times $T_i$ it is possible to switch from a $1$-homoclinic to an $N$-homoclinic orbit. If \parf{ITWIST=0}, the adjoint vector is not computed and Lin's method is not used. Instead, AUTO produces a gap $\varepsilon$=\parf{PAR(22)} at the right-hand end point $p$ of $u_{N+1}$, measuring the distance between the stable manifold of the equilibrium and $p$. This technique can also be used to find 2-homoclinic orbits, by varying in $\varepsilon$ and $T_1$, similar to the method described before, but only if the unstable manifold in one-dimensional. Because this method is more limited than the method using Lin vectors, we do not recommend it for normal usage. To switch back to a normal homoclinic orbit, set \parf{ISTART} back to a positive value such as 1. Now HomCont has lost all the information about the adjoint, so if \parf{ITWIST} is set to 0, HomCont does a normal continuation without the adjoint, and if \parf{ITWIST} is set to 1, one needs to do a Newton dummy step first to recalculate the adhoint. \end{itemize} \subsection{\parf{IREV}} \label{sec:IREV} If \parf{IREV$\ne$[]} then it is assumed that the system is reversible under the transformation $t \to -t$ and $U(i) \to -U(i)$ for all $i$ with \parf{IREV(i)>0}. Then only half the homoclinic solution is solved for with right-hand boundary conditions specifying that the solution is symmetric under the reversibility (see \citeasnoun{ChSp:93}). The number of free parameters is then reduced by one. Otherwise the default applies, \parf{IREV=[]}. \subsection{\parf{IFIXED}} \label{sec:IFIXED} Labels of test functions that are held fixed. E.g., with \parf{IFIXED=[n]} one can compute a locus in one extra parameter of a singularity defined by test function \parf{PSI(n)=0}. The default is \parf{IFIXED=[]}. \subsection{\parf{IPSI}} \label{sec:IPSI} Labels of activated test functions for detecting homoclinic bifurcations, see Section~\ref{sec:HomCont_Test_functions} for a list. If a test function is activated then the corresponding parameter (\parf{IPSI(I)+20}) must be added to the list of continuation parameters \parf{ICP} and zero of this parameter added to the list of user-defined output points \parf{UZR,} in \filef{c.xxx}. The default is \parf{IPSI=[]}. \section{ Restrictions on {\cal HomCont} Constants.} Note that certain combinations of these constants are not allowed in the present implementation. In particular, \begin{itemize} \item[-] The computation of orientation \parf{ITWIST=1} is not implemented for \parf{IEQUIB<0} (heteroclinic orbits), \parf{IEQUIB=2} (saddle-node homoclinics), \parf{IREV$\ne$[]} (reversible systems), \parf{ISTART=3} (homotopy method for starting), or if the equilibrium contains complex eigenvalues in its linearization. \item[-] The homotopy method \parf{ISTART=3} is not fully implemented for heteroclinic connections \parf{IEQUIB<0}, saddle-node homoclinic orbits \parf{IEQUIB=2} or reversible systems \parf{IREV$\ne$[]}. \item[-] Certain test functions are not valid for certain forms of continuation (see Section~\ref{sec:HomCont_Test_functions} below); for example \parf{PSI(13)} and \parf{PSI(14)} only make sense if \parf{ITWIST=1} and \parf{PSI(15)} and \parf{PSI(16)} only apply to \parf{IEQUIB=2}. \end{itemize} \section{ Restrictions on the Use of \parf{PAR}.} The parameters \parf{PAR(1)} -- \parf{PAR(9)} can be used freely by the user. The other parameters are used as follows~: \begin{itemize} \item[-] \parf{PAR(11)}~: The value of \parf{PAR(11)} equals the length of the time interval over which a homoclinic solution is computed. Also referred to as ``period''. This must be specified in \funcf{ STPNT}. \item[-] \parf{PAR(10)}~: If \parf{ITWIST=1} then \parf{PAR(10)} is used internally as a dummy parameter so that the adjoint equation is well-posed. \item[-] \parf{PAR(12)-PAR(20)}~: These are used for specifying the equilibria and (if \parf{ISTART=3}) the artificial parameters of the homotopy method (see Section~\ref{sec:Starting_strategies} below). \item[-] \parf{PAR(21)-PAR(36)}~: These parameters are used for storing the test functions (see Section~\ref{sec:HomCont_Test_functions}). \end{itemize} The output is in an identical format to {\cal AUTO} except that additional information at each computed point is written in \parf{fort.9}. This information comprises the eigenvalues of the (left-hand) equilibrium, the values of each activated test function and, if \parf{ITWIST=1}, whether the saddle homoclinic loop is orientable or not. Note that the statement about orientability is only meaningful if the leading eigenvalues are not complex and the homoclinic solution is not in a flip configuration, that is, none of the test functions $\psi_i$ for $i=11,12,13,14$ is zero (or close to zero), see Section~\ref{sec:HomCont_Test_functions}. Finally, the values of the \parf{IPSI} activated test functions are written. \section{ Test Functions.} \label{sec:HomCont_Test_functions} Codimension-two homoclinic orbits are detected along branches of codim 1 homoclinics by locating zeroes of certain test functions $\psi_i$. The test functions that are ``switched on'' during any continuation are given by the choice of the labels $i$, and are specified by the parameters \parf{IPSI)} in \filef{ c.xxx}. Here \parf{IPSI=[IPSI(1),$\ldots$,IPSI(NPSI)]} gives the labels of the test functions (numbers between 1 and 16). A zero of each labeled test function defines a certain codimension-two homoclinic singularity, specified as follows. The notation used for eigenvalues is the same as that in \citeasnoun{ChKu:94} or \citeasnoun{ChKuSa:95}. \begin{itemize} \item[-] $ i=1$: Resonant eigenvalues (neutral saddle); $\mu_1=-\lambda_1$. \item[-] $ i=2$: Double real leading stable eigenvalues (saddle to saddle-focus transition); $\mu_1=\mu_2$. \item[-] $ i=3$: Double real leading unstable eigenvalues (saddle to saddle-focus transition);\\ $\lambda_1=\lambda_2$. \item[-] $ i=4$: Neutral saddle, saddle-focus or bi-focus (includes $ i=1$); $\mbox{Re}(\mu_1) = - \mbox{Re}(\lambda_1)$. \item[-] $ i=5$: Neutrally-divergent saddle-focus (stable eigenvalues complex);\\ $\mbox{Re}(\lambda_1) = - \mbox{Re}(\mu_1) - \mbox{Re}(\mu_2)$. \item[-] $ i=6$: Neutrally-divergent saddle-focus (unstable eigenvalues complex);\\ $\mbox{Re}(\mu_1) = - \mbox{Re}(\lambda_1) - \mbox{Re}(\lambda_2)$. \item[-] $ i=7$: Three leading eigenvalues (stable); $\mbox{Re}(\lambda_1) = - \mbox{Re}(\mu_1) - \mbox{Re}(\mu_2)$. \item[-] $ i=8$: Three leading eigenvalues (unstable); $\mbox{Re}(\mu_1) = - \mbox{Re}(\lambda_1) - \mbox{Re}(\lambda_2)$. \item[-] $ i=9$: Local bifurcation (zero eigenvalue or Hopf): number of stable eigenvalues decreases; $\mbox{Re}(\mu_1)=0$. \item[-] $ i=10$: Local bifurcation (zero eigenvalue or Hopf): number of unstable eigenvalues decreases; $\mbox{Re}(\lambda_1)=0$. \item[-] $ i=11$: Orbit flip with respect to leading stable direction (e.g., 1D unstable manifold). \item[-] $ i=12$: Orbit flip with respect to leading unstable direction, (e.g., 1D stable manifold). \item[-] $ i=13$: Inclination flip with respect to stable manifold (e.g., 1D unstable manifold). \item[-] $ i=14$: Inclination flip with respect to unstable manifold (e.g., 1D stable manifold). \item[-] $ i=15$: Non-central homoclinic to saddle-node (in stable manifold). \item[-] $ i=16$: Non-central homoclinic to saddle-node (in unstable manifold). \end{itemize} Expert users may wish to add their own test functions by editing the function \funcf{ PSIHO} in \filef{autlib5.f}. {\it It is important to remember that, in order to specify activated test functions, it is required to also add the corresponding label $+20$ to the list of continuation parameters and a zero of this parameter to the list of user-defined output points. Having done this, the corresponding parameters are output to the screen and zeros are accurately located.} \section{ Starting Strategies.} \label{sec:Starting_strategies} There are four possible starting procedures for continuation. \begin{itemize} \item[{\bf(i)}] Data can be read from a previously-obtained output point from {\cal AUTO} (e.g., from continuation of a periodic orbit up to large period; note that if the end-point of the data stored is not close to the equilibrium, a phase shift must be performed by setting \parf{ISTART=4}). These data can be read from fort.8 (saved to \filef{ s.xxx}) by making \parf{IRS} correspond to the label of the data point in question. \item[{\bf(ii)}] Data from numerical integration (e.g.,\ computation of a stable periodic orbit, or an approximate homoclinic obtained by shooting) can be read in from a data file using the \AUTO constant \parf{dat} (see Section~\ref{sec:dat}). The numerical data should be stored in a file \filef{xxx.dat}, in multi-column format according to the read statement \begin{verbatim} READ(...,*) T(J),(U(I,J),I=1,NDIM) \end{verbatim} where $T$ runs in the interval \parf{[0,1]}. When starting from this solution \parf{IRS} should be set to 0 and the value of \parf{ISTART} is irrelevant. \item[{\bf(iii)}] By setting \parf{ISTART=2}, an explicit homoclinic solution can be specified in the routine \funcf{ STPNT} in the usual {\cal AUTO} format, that is $U=...(T)$ where $T$ is scaled to lie in the interval $[0,1]$. \item[{\bf(iv)}] The choice \parf{ISTART=3}, allows for a homotopy method to be used to approach a homoclinic orbit starting from a small approximation to a solution to the linear problem in the unstable manifold \cite{DoFrMo:93}. For details of implementation, the reader is referred to Section~5.1.2.\ of \citeasnoun{ChKu:94}, under the simplification that we do not solve for the adjoint $u(t)$ here. The basic idea is to start with a small solution in the unstable manifold, and perform continuation in \parf{PAR(11)=}$2T$ and dummy initial-condition parameters $\xi_i$ in order to satisfy the correct right-hand boundary conditions, which are defined by zeros of other dummy parameters $\omega_i$. More precisely, the left-hand end point is placed in the tangent space to the unstable manifold of the saddle and is characterized by \parf{NUNSTAB} coordinates $\xi_i$ satisfying the condition $$ \xi_1^2 + \xi_2^2 + \ldots +\xi_\parf{NUNSTAB}^2 = \eps_0^2, $$ where $\eps_0$ is a user-defined small number. At the right-hand end point, \parf{NUNSTUB} values $\omega_i$ measure the deviation of this point from the tangent space to the stable manifold of the saddle. \par Suppose that \parf{IEQUIB=0,1} and set \parf{IP=12+IEQUIB*NDIM}. Then \par \medskip \begin{center} \begin{tabular}{ll} \parf{PAR(IP)} & :$\ \ \eps_0$\\ \parf{PAR(IP+i)} & :$\ \ \xi_\parf{i}$, \parf{i=1,2,...,NUNSTAB}\\ \parf{PAR(IP+NUNSTAB+i)} & :$\ \ \omega_\parf{i}$, \parf{i=1,2,...,NUNSTAB} \end{tabular} \end{center} \par \medskip {\it Note that to avoid interference with the test functions (i.e. \parf{PAR(21)-PAR(36)}), one must have \parf{IP+2*NUNSTAB < 21}.} \par If an $\omega_i$ is vanished, it can be frozen while another dummy or system parameter is allowed to vary in order to make consequently all $\omega_i=0$. The resulting final solution gives the initial homoclinic orbit provided the right-hand end point is sufficiently close to the saddle. See Chapter~\ref{ch:HomCont_kpr} for an example, however, we recommend the homotopy method only for ``expert users''. \end{itemize} To compute the orientation of a homoclinic orbit (in order to detect inclination-flip bifurcations) it is necessary to compute, in tandem, a solution to the modified adjoint variational equation, by setting \parf{ITWIST=1}. In order to obtain starting data for such a computation when restarting from a point where just the homoclinic is computed, upon increasing \parf{ITWIST} to 1, {\cal AUTO} generates trivial data for the adjoint. Because the adjoint equations are linear, only a single step of Newton's method is required to enable these trivial data to converge to the correct unique bounded solution. This can be achieved by making a single continuation step in a trivial parameter (i.e. a parameter that does not appear in the problem). Decreasing \parf{ITWIST} to 0 automatically deletes the data for the adjoint from the continuation problem. \section{ Notes on Running {\cal HomCont} Demos.} \label{sec:HomCont_Tutorial_examples} {\cal HomCont} demos are given in the following chapters. To copy all files of a demo \filef{xxx} (for example, \filef{san}), move to a clean directory and type \commandf{demo('xxx')}. Simply typing \commandf{auto xxx.auto} will then automatically execute all runs of the demo. %To automatically run a demo in ``step-by-step'' mode, %type \commandf{make first}, \commandf{make second}, etc., %to run each separate computation of the demo. At each step, the user is encouraged to plot the data saved by using the command \commandf{plot} (e.g., \commandf{plot(r)} plots the data saved in the \python variable \parf{r}). Of course, in a real application, the runs will not have been prepared in advance, and {\cal AUTO}-commands must be used. Such commands can be found in a table at the end of each chapter. A sequence of detailed \AUTO-commands will be given in these tables as illustrated in Table~\ref{tbl:HomCont_demos_1} and Table~\ref{tbl:HomCont_demos_2} for two representative runs of {\cal HomCont} demo \filef{san}. The user is encouraged to copy the format of one of these demos when constructing new examples. The output of the {\cal HomCont} demos reproduced in the following chapters is somewhat machine dependent, as already noted in Section~\ref{sec:Tutorial_all_runs}. In exceptional circumstances, {\cal AUTO} may reach its maximum number of steps \parf{NMX} before a certain output point, or the label of an output point may change. In such case the user may have to make appropriate changes in the {\cal AUTO} constants-files. \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== \commandf{san=load('san',IPS=9,NDIM=3,ISP=0,ILP=0,} &\\ \commandf{ ITNW=7,JAC=1,NTST=35,IEQUIB=0,DS=0.05)} & set common \AUTO constants\\ \commandf{r1=run(san,ICP=[1,8],UZR=\{-1:0.25\})} & run AUTO using the specified constants\\ \commandf{save(r1,'6')} & save output-files as \filef{b.6, s.6, d.6} \\ \hline %============================================================================== \commandf{@R san 1} & use the constants file \filef{c.san.1} \\ \commandf{@sv 6} & \\ \hline %============================================================================== \end{tabular} \caption{ These two sets of {\cal AUTO}-Commands are equivalent.} \label{tbl:HomCont_demos_1} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline COMMAND & ACTION \\ \hline %============================================================================== \commandf{r9=run(r8,ICP=[2,8],UZR=\{-2:3.0\})} & \parbox[t]{3in}{get the \AUTO constants-file and run \AUTO/{\cal HomCont}; restart from the last label in \parf{r8}\vspace{0.2cm}}\\ \commandf{r6=r6+r9} & append output to the \python variable \parf{r6} \\ \commandf{save(r6,'6')} & save output to the files \filef{b.6, s.6, d.6} \\ \hline %============================================================================== \commandf{@R san 9 6} & use the constants file \filef{c.san.9}, start from the file \filef{s.6} \\ \commandf{@ap 6} & append output to the files \filef{b.6, s.6, d.6} \\ \hline %============================================================================== \end{tabular} \caption{ These two sets of {\cal AUTO}-Commands behave similarly.} \label{tbl:HomCont_demos_2} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : san.} \label{ch:HomCont_san} %============================================================================== %============================================================================== %============================================================================== %DEMO=san====================================================================== %============================================================================== \section{ Sandstede's Model.} \newcommand{\ti}{\tilde} Consider the system \cite{Sa:95b} \begin{equation} \label{bs1} \begin{array}{rcl} \dot{x} & = & a \, x + b \, y - a \, x^2 + (\ti \mu - \alpha \, z) \, x \, (2-3x) \\ \dot{y} & = & b \, x + a \, y - \frac{3}{2} \, b \, x^2 - \frac{3}{2} \, a \, x \, y - (\ti \mu - \alpha \, z) \, 2 \, y \\ \dot{z} & = & c \, z + \mu \, x + \gamma\, x\, y + \alpha \, \beta \, (x^2 \, (1-x) - y^2) \end{array} \end{equation} as given in the file \filef{san.f90}. Choosing the constants appearing in (\ref{bs1}) appropriately allows for computing inclination and orbit flips as well as non-orientable resonant bifurcations, see \cite{Sa:95b} for details and proofs. The starting point for all calculations is $a=0$, $b=1$ where there exists an explicit solution given by $$ (x(t),y(t),z(t)) = \left( 1 - \left(\frac{1-e^t}{1+e^t}\right)^2 , 4 \, e^t \, \frac{1-e^t}{(1+e^t)^3} , 0 \right). $$ This solution is specified in the routine \funcf{ STPNT}. \section{Inclination Flip.} We start by copying the demo to the current work directory and running the first step \begin{center} \commandf{demo('san')}\\ \commandf{san=load('san',IPS=9,NDIM=3,ISP=0,ILP=0,ITNW=7,JAC=1,NTST=35,IEQUIB=0,DS=0.05)} \commandf{r1=run(san,ICP=[1,8],UZR=\{-1:0.25\})} \end{center} This computation starts from the analytic solution above with $a=0$, $b=1$, $c=-2$, $\alpha=0$, $\beta=1$ and $\gamma = \mu=\ti \mu =0$. The homoclinic solution is followed in the parameters $(a,\ti \mu)$ \parf{=(PAR(1), PAR(8))} up to $a=0.25$. The output is summarised on the screen as \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM PAR(8) 1 1 EP 1 0.00000E+00 4.00000E-01 ... 0.00000E+00 1 5 UZ 2 2.50000E-01 4.03054E-01 ... -1.85981E-11 \end{verbatim} and saved in more detail in the \python variable \parf{r1}. Next we want to add a solution to the adjoint equation to the solution obtained at $a=0.25$. This is achieved by starting from the last label, and making the changes \parf{ITWIST = 1}, \parf{NMX = 2} and \parf{ICP(1) = 9}. We also disable any user-defined functions \parf{UZR=\{\}}. The computation so-defined is a single step in a trivial parameter \parf{PAR(9)} (namely a parameter that does not appear in the problem). The effect is to perform a Newton step to enable \AUTO to converge to a solution of the adjoint equation. \begin{center} \commandf{r2=run(r1,ICP=[9,8],ITWIST=1,NMX=2,UZR=\{\})} \end{center} The output is stored in the \python variable \parf{r2}. We can now continue the homoclinic plus adjoint in $(\alpha,\ti \mu)$ \parf{=(PAR(4), PAR(8))} by changing the constants to read \parf{NMX = 50} and \parf{ICP(1) = 4}. We also add \parf{PAR(10)} to the list of continuation parameters \parf{ICP}. Here \parf{PAR(10)} is a dummy parameter used in order to make the continuation of the adjoint well posed. Theoretically, it should be zero if the computation of the adjoint is successful \cite{Sa:95b}. The test functions for detecting resonant bifurcations (\parf{ISPI(1)=1}) and inclination flips (\parf{ISPI(1)=13}) are also activated. Recall that this should be specified in three ways. First we add \parf{PAR(21)} and \parf{PAR(33)} to the list of continuation parameters, second we set up user defined output at zeros of these parameters, and finally we set \parf{IPSI=[1,13]} We also add another user zero for detecting when \parf{PAR(4)=1.0}. Running \begin{center} \commandf{r3=run(r2,ICP=[4,8,10,21,33],IPSI=[1,13],NMX=50,NPR=20,UZR=\{4:1.0,21:0,33:0\})}\\ \commandf{save(r3,'r3')} \end{center} starts from the last, and in this case, only, labelled solution in \parf{r2} and outputs to the screen \begin{verbatim} BR PT TY LAB PAR(4) ... PAR(8) PAR(10) ... PAR(33) 1 20 4 7.84722E-01 ... -2.72146E-11 -4.21812E-09 ... 1.44112E+01 1 27 UZ 5 1.00000E+00 ... -3.91152E-11 -4.38659E-09 ... 5.70167E+00 1 35 UZ 6 1.23086E+00 ... -6.18304E-11 -4.62672E-09 ... -9.48584E-06 1 40 7 1.38397E+00 ... -8.41993E-11 -4.63701E-09 ... -1.34882E+00 1 50 EP 8 1.69521E+00 ... -1.36449E-10 -5.35972E-09 ... -5.31105E-01 \end{verbatim} Full output is stored in \filef{b.3}, \filef{s.3} and \filef{d.3}. \begin{figure}[b] \epsfysize 9.0cm \centerline{\epsffile{include/san1}} \caption{Second versus third component of the solution to the adjoint equation at labels 4, 6 and 8} \label{Ftest1} \end{figure} Note that the artificial parameter $\epsilon=$\parf{PAR(10)} is zero within the allowed tolerance. At label \parf{6}, a zero of test function $\psi_{13}$ has been detected which corresponds to an inclination flip with respect to the stable manifold. That the orientation of the homoclinic loop changes as the family passes through this point can be read from the information in \filef{d.3}. However in \filef{d.3}, the line \begin{verbatim} ORIENTABLE ( 0.2982090775E-03) \end{verbatim} at \parf{PT=35} would seems to contradict the detection of the inclination flip at this point. Nonetheless, the important fact is the zero of the test function; and note that the value of the variable indicating the orientation is small compared to its value at the other regular points. Data for the adjoint equation at \parf{LAB= 4, 6} and \parf{8} at and on either side of the inclination flip are presented in Fig.\ \ref{Ftest1}. The switching of the solution between components of the leading unstable left eigenvector is apparent. Finally, we remark that the Newton step in the dummy parameter \parf{PAR(20)} performed above is crucial to obtain convergence. Indeed, if instead we try to continue the homoclinic orbit and the solution of the adjoint equation directly by setting \begin{verbatim} ITWIST = 1 IRS = 2 NMX = 50 ICP(1) = 4 \end{verbatim} and running \begin{center} \commandf{r4=run(r1,ICP=[4,8,10,21,33],ITWIST=1,IPSI=[1,13],NMX=50,UZR=\{33:0\})} \end{center} we obtain a no convergence error. \section{Non-orientable Resonant Eigenvalues.} Inspecting the output saved in the third run, we observe the existence of a non-orientable homoclinic orbit at the second \parf{UZ} label \parf{6}. We restart at this label, with the first continuation parameter being once again $a=$\parf{PAR(1)}, by changing constants according to \begin{verbatim} DS = -0.05 NMX = 20 ICP(1) = 1 \end{verbatim} Running, \begin{center} \commandf{r5=run(r3('UZ2'),ICP=[1,8,10,21,33],NMX=20,DS='-',sv='5')}\\ \end{center} the output at label \parf{9} \begin{verbatim} BR PT TY LAB PAR(1) PAR(8) PAR(10) PAR(21) 1 8 UZ 9 -1.30447E-07 ... 3.41490E-12 -1.63406E-09 -2.60894E-07 \end{verbatim} indicates that \AUTO has detected a zero of \parf{PAR(21)}, implying that a non-orientable resonant bifurcation occurred at that point. \section{Orbit Flip.} In this section we compute an orbit flip. To this end we restart from the original explicit solution, without computing the orientation. We begin by separately performing continuation in $(\alpha,\ti \mu)$, $(\beta,\ti \mu)$, $(a,\ti \mu)$, $(b,\ti \mu)$ and $(\mu, \ti \mu)$ in order to reach the parameter values $(a,b,\alpha,\beta, \mu)=(0.5,3,1,0,0.25)$. The sequence of continuations up to the desired parameter values are run via \begin{center} \commandf{r6=run(san,ICP=[4,8],UZR=\{-4:1\})\\ r7=run(r6,ICP=[5,8],UZR=\{-5:0\},DS='-')\\ r8=run(r7,ICP=[1,8],UZR=\{-1:0.5\},DS='-')\\ r9=run(r8,ICP=[2,8],UZR=\{-2:3.0\})\\ r10=run(r9,ICP=[7,8],UZR=\{-7:0.25\})\\} \end{center} with appropriate continuation parameters and user output values set. The desired output is stored in \parf{r10}. The final saved point \parf{LAB=6} contains a homoclinic solution at the desired parameter values. From here we perform continuation in the negative direction of $(\mu,\ti \mu)=$ (\parf{PAR(7),PAR(8)}) with the test function $\psi_{11}$ for orbit flips with respect to the stable manifold activated. \begin{center} \commandf{r11=run(r10,ICP=[7,8,31],IPSI=[11],UZR=\{31:0.0,-7:-0.5\},DS='-')\\ save(r11,'11')} \end{center} The output detects an inclination flip (by a zero of \parf{PAR(31)}) at \parf{PAR(7)=0} \begin{verbatim} BR PT TY LAB PAR(7) ... PAR(8) PAR(31) 1 5 UZ 7 6.33545E-06 ... 1.70968E-06 -8.70508E-05 \end{verbatim} at which parameter value the homoclinic orbit is contained in the $(x,y)$-plane (see Fig.\ \ref{Ftest2}). \begin{figure}[t] \epsfysize 9.0cm \centerline{\epsffile{include/san2}} \caption{Orbits on either side of the orbit flip bifurcation. The critical orbit is contained in the $(x,y)$-plane} \label{Ftest2} \end{figure} Finally, we demonstrate that the orbit flip can be continued as three parameters (\parf{PAR(6), PAR(7), PAR(8)}) are varied. \begin{center} \commandf{of = r11('UZ1')\\ r12=run(of,ICP=[7,8,6],IPSI=[],NPR=5,NMX=20,IFIXED=[11],UZR=\{\},DS='-') save(r12,'12')} \end{center} \begin{verbatim} BR PT TY LAB PAR(7) ... PAR(8) PAR(6) 1 5 9 -7.38787E-19 ... -2.91178E-10 -3.25000E-01 1 10 10 -5.27166E-19 ... -2.23972E-10 -8.25000E-01 1 15 11 -6.15227E-19 ... -2.91908E-10 -1.32500E+00 1 20 EP 12 -5.96426E-19 ... -3.20088E-10 -1.82500E+00 \end{verbatim} The orbit flip continues to be defined by a planar homoclinic orbit at \parf{PAR(7)=PAR(8)=0}. \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir san} & create an empty work directory \\ \commandf{cd san} & change directory \\ \commandf{demo('san')} & copy the demo files to the work directory\\ \commandf{san=load('san',IPS=9,NDIM=3,ISP=0,ILP=0,} & \\ \commandf{ ITNW=7,JAC=1,NTST=35,IEQUIB=0,DS=0.05)} & configure common constants\\ \hline %============================================================================== \commandf{r1=run(san,ICP=[1,8],UZR=\{-1:0.25\})}& continuation in \parf{PAR(1)} \\ \hline %============================================================================== \commandf{r2=run(r1,ICP=[9,8],ITWIST=1,NMX=2,UZR=\{\})} & generate adjoint variables \\ \hline %============================================================================= \commandf{r3=run(r2,ICP=[4,8,10,21,33],IPSI=[1,13],} & \\ \commandf{ NMX=50,NPR=20,UZR=\{4:1.0,21:0,33:0\}) } & continue homoclinic orbit and adjoint\\ \commandf{save(r3,'3') } & save output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \commandf{r4=run(r1,ICP=[4,8,10,21,33],ITWIST=1,} & \\ \commandf{ IPSI=[1,13],NMX=50,UZR=\{33:0\}) } & no convergence without dummy step \\ \commandf{sv('4') } & save output-files as \filef{b.4, s.4, d.4} \\ \hline %============================================================================= \commandf{r5=run(r3('UZ2'),ICP=[1,8,10,21,33],NMX=20,} & continue non-orientable orbit\\ \commandf{ DS='-',sv='5') }& save output-files as \filef{b.5, s.5, d.5} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{san}.} \label{tbl:demo_san_1} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{r6=run(san,ICP=[4,8],UZR=\{-4:1\})} & restart and homotopy to \parf{PAR(4)}=1.0 \\ \hline %============================================================================== \commandf{r7=run(r6,ICP=[5,8],UZR=\{-5:0\},DS='-')} & homotopy to \parf{PAR(5)}=0.0 \\ \hline %============================================================================== \commandf{r8=run(r7,ICP=[1,8],UZR=\{-1:0.5\},DS='-')} & homotopy to \parf{PAR(1)}=0.5 \\ \hline \commandf{r9=run(r8,ICP=[2,8],UZR=\{-2:3.0\})} & homotopy to \parf{PAR(2)}=3.0\\ \hline %============================================================================== \commandf{r10=run(r9,ICP=[7,8],UZR=\{-7:0.25\})} & homotopy to \parf{PAR(7)}=0.25\\ \hline %============================================================================== \commandf{r11=run(r10,ICP=[7,8,31],IPSI=[11],} & \\ \commandf{ UZR=\{31:0.0,-7:-0.5\},DS='-')} & continue in \parf{PAR(7)} to detect orbit flip \\ \commandf{save(r11,'11') } & save output-files as \filef{b.11, s.11, d.11} \\ \hline %============================================================================== \commandf{of=r11('UZ1')} & select first UZ-labelled point of \parf{r11} to start from\\ \commandf{r12=run(of,ICP=[7,8,6],IPSI=[],NPR=5,} & \\ \commandf{ NMX=20,IFIXED=[11],UZR=\{\},DS='-') } & three-parameter continuation of orbit flip \\ \commandf{save(r12,'12') } & save output-files as \filef{b.12, s.12, d.12} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{san}.} \label{tbl:demo_san_2} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : mtn.} \label{ch:HomCont_mtn} %============================================================================== %============================================================================== %============================================================================== %DEMO=mtn====================================================================== %============================================================================== \section{ A Predator-Prey Model with Immigration.} Consider the following system of two equations \cite{Sc:95} \begin{equation} \label{sn.1} \begin{array}{rcl} \dot{X} & = & RX\left(1-{\ds \frac{X}{K}}\right) - {\ds \frac{A_1XY}{B_1+X}} + D_0K \\ \dot{Y} & = & E_1 {\ds \frac{A_1XY}{B_1+X}} - D_1Y - {\ds\frac{A_2ZY^2}{B_2^2+Y^2}}. \end{array} \end{equation} \begin{figure}[b] \epsfysize 10.0cm \centerline{\epsffile{include/mtn1}} \caption{Parametric portrait of the predator-prey system } \label{SNF.1} \end{figure} The values of all parameters except $(K,Z)$ are set as follows~: $$ R=0.5,\ A_1=0.4,\ B_1=0.6,\ D_0=0.01,\ E_1=0.6,\ A_2=1.0,\ B_2=0.5,\ D_1=0.15. $$ \par \noindent The parametric portrait of the system (\ref{sn.1}) on the $(Z,K)$-plane is presented in Figure \ref{SNF.1}. It contains fold ($t_{1,2}$) and Hopf ($H$) bifurcation curves, as well as a homoclinic bifurcation curve $P$. The fold curves meet at a cusp singular point $C$, while the Hopf and the homoclinic curves originate at a Bogdanov-Takens point $BT$. Only the homoclinic curve $P$ will be considered here, the other bifurcation curves can be computed using \AUTO or, for example, {\cal locbif} \cite{KhKuLeNi:93}. \section{Continuation of Central Saddle-Node Homoclinics.} Local bifurcation analysis shows that at $K=6.0,\ Z=0.06729762\ldots$, the system has a saddle-node equilibrium $$ (X^0,Y^0) = (5.738626\ldots,0.5108401\ldots), $$ with one zero and one negative eigenvalue. Direct simulations reveal a homoclinic orbit to this saddle-node, departing and returning along its central direction (i.e., tangent to the null-vector). \par Starting from this solution, stored in the file \filef{mtn.dat}, we continue the saddle-node central homoclinic orbit with respect to the parameters $K$ and $Z$ by copying the demo and running it \begin{center} \commandf{dm('mtn')}\\ \commandf{r1=run('mtn',c='mtn.1',sv='1')} \end{center} The file \filef{mtn.f90} contains approximate parameter values $$ K=\parf{PAR(1)}=6.0,\ Z=\parf{PAR(2)}=0.06729762, $$ as well as the coordinates of the saddle-node $$ X^0=\parf{PAR(12)}=5.738626,\ Y^0=\parf{PAR(13)}=0.5108401, $$ and the length of the truncated time-interval $$ T_0=\parf{PAR(11)} = 1046.178 \: . $$ Since a homoclinic orbit to a saddle-node is being followed, we have also made the choice $$ \parf{IEQUIB = 2} $$ in \filef{c.mtn.1}. The two test-functions, $\psi_{15}$ and $\psi_{16}$, to detect non-central saddle-node homoclinic orbits are also activated, which must be specified in three ways. Firstly, in \filef{c.mtn.1}, \parf{IPSI} is set to \parf{[15,16]} so the active test functions are chosen as 15 and 16. This sets up the monitoring of these test functions. Secondly, in \filef{c.mtn.1} user-defined functions (\parf{UZR}) are set up to look for zeros of the parameters corresponding to these test functions. Recall that the parameters to be zeroed are always the test functions plus 20. Finally, these parameters are included in the list of continuation parameters (\parf{ICP}). Among the output there is a line \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(35) PAR(36) 1 26 UZ 4 6.61046E+00 ... 6.93248E-02 5.23950E-09 -6.42344E-02 \end{verbatim} indicating that a zero of the test function \parf{IPSI(1)=15} This means that at $$ D_1=(K^1,Z^1)=(6.6105\ldots, 0.069325\ldots) $$ the homoclinic orbit to the saddle-node becomes {\it non-central}, namely, it returns to the equilibrium along the stable eigenvector, forming a non-smooth loop. The output is saved in \filef{b.1}, \filef{s.1} and \filef{d.1}. Repeating computations in the opposite direction along the curve, \parf{IRS=1, DS=-0.01} in \filef{c.mtn.2}, \begin{center} \commandf{r1=r1+run(r1(1),c='mtn.2',ap='1')} \end{center} one obtains \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(35) PAR(36) 1 34 UZ 10 5.18039E+00 ... 6.38554E-02 8.86654E-10 -7.28132E-02 \end{verbatim} which means another non-central saddle-node homoclinic bifurcation occurs at $$ D_2=(K^2,Z^2)=(5.1803\ldots,0.063855\ldots). $$ Note that these data were obtained using a smaller value of \parf{NTST} than the original computation (compare \filef{c.mtn.1} with \filef{c.mtn.2}). The high original value of \parf{NTST} was only necessary for the first few steps because the original solution is specified on a uniform mesh. \section{Switching between Saddle-Node and Saddle Homoclinic Orbits.} Now we can switch to continuation of saddle homoclinic orbits at the located codim 2 points $D_1$ and $D_2$. \begin{center} \commandf{r1=r1+run(r1('UZ1'),c='mtn.3',ap='1')} \end{center} starts from $D_1$. Note that now \begin{center} \parf{IEQUIB = 1} \end{center} has been specified in \filef{c.mtn.3}. Also, test functions $\psi_9$ and $\psi_{10}$ have been activated in order to monitor for non-hyperbolic equilibria along the homoclinic locus. We get the following output \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(29) PAR(30) 1 10 12 7.11454E+00 ... 7.08176E-02 -4.64986E-01 3.18355E-03 1 20 13 9.17683E+00 ... 7.67874E-02 -4.68491E-01 1.60931E-02 1 30 14 1.21084E+01 ... 8.54348E-02 -4.71887E-01 3.06966E-02 1 40 EP 15 1.50379E+01 ... 9.42805E-02 -4.74379E-01 4.14457E-02 \end{verbatim} The fact that \parf{PAR(29)} and \parf{PAR(30)} do not change sign indicates that there are no further non-hyperbolic equilibria along this family. Note that restarting in the opposite direction with \parf{IRS=15,DS=-0.02} \begin{center} \commandf{r4=run(r1,c='mtn.4',sv='4')} \end{center} will detect the same codim 2 point $D_1$ but now as a zero of the test-function $\psi_{10}$ \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(29) PAR(30) 1 38 UZ 11 6.61046E+00 ... 6.93248E-02 -4.63660E-01 3.13439E-08 \end{verbatim} Note that the values of \parf{PAR(1)} and \parf{PAR(2)} are equal to those at label \parf{4} up to at least six significant figures. Actually, the program runs further and eventually computes the point $D_2$ and the whole lower family of $P$ emanating from it, however, the solutions between $D_1$ and $D_2$ should be considered as spurious\footnote{\label{ft1} The program actually computes the saddle-saddle heteroclinic orbit bifurcating from the non-central saddle-node homoclinic at the point $D_1$, see \citeasnoun[Fig. 2]{ChKuSa:95}, and continues it to the one emanating from $D_2$.}, therefore we do not save these data. The reliable way to compute the lower family of $P$ is to restart computation of saddle homoclinic orbits in the other direction from the point $D_2$ \begin{center} \commandf{r1=r1+run(r1('UZ3'),c='mtn.5',ap='1')} \end{center} This gives the lower family of $P$ approaching the BT point (see Figure \ref{SNF.1}) \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(29) PAR(30) 1 10 16 4.96649E+00 ... 6.29843E-02 -4.38247E-01 4.94481E-03 1 20 17 4.92531E+00 ... 7.96087E-02 -3.39922E-01 3.28829E-02 1 30 18 7.09217E+00 ... 1.58708E-01 -1.69289E-01 3.87631E-02 1 40 EP 19 1.10181E+01 ... 2.80980E-01 -3.48294E-02 2.10449E-02 \end{verbatim} The data are appended to the stored results in \filef{b.1}, \filef{s.1} and \filef{d.1}. One could now display all data using the \AUTO command \commandf{@pp 1} to reproduce the curve $P$ shown in Figure \ref{SNF.1}. \par %------------------------------------------------------ \begin{figure}[p] \epsfysize 10.0cm \centerline{\epsffile{include/mtn2}} \caption{Approximation by a large-period cycle} \label{SNF.2} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/mtn3}} \caption{Projection onto the ($K,D_0$)-plane of the three-parameter curve of non-central saddle-node homoclinic orbit} \label{SNF.3} \end{figure} %------------------------------------------------------ % It is worthwhile to compare the homoclinic curves computed above with a curve $T_0=const$ along which the system has a limit cycle of constant large period $T_0=1046.178$, which can easily be computed using \AUTO or {\cal locbif}. Such a curve is plotted in Figure \ref{SNF.2}. It obviously approximates well the saddle homoclinic loci of $P$, but demonstrates much bigger deviation from the saddle-node homoclinic segment $D_1D_2$. This happens because the period of the limit cycle grows to infinity while approaching both types of homoclinic orbit, but with {\it different asymptotics}: as $-\ln\|\alpha-\alpha^*\|$, in the saddle homoclinic case, and as $\|\alpha-\alpha^*\|^{-1}$ in the saddle-node case. \section{Three-Parameter Continuation.} Finally, we can follow the curve of non-central saddle-node homoclinic orbits in three parameters. The extra continuation parameter is $D_0$=\parf{PAR(3)}. To achieve this we restart at label \parf{4}, corresponding to the codim 2 point $D_1$. We return to continuation of saddle-node homoclinics, \parf{NUNSTAB=0},\parf{IEQUIB=2}, but append the defining equation $\psi_{15}=0$ to the continuation problem (via \parf{IFIXED=[15]}). The new continuation problem is specified in \filef{c.mtn.6}. \begin{center} \commandf{r6=run(r1('UZ1'),c='mtn.6',sv='6')} \end{center} Notice that we set \parf{ILP=1} and choose \parf{PAR(3)} as the first continuation parameter so that \AUTO can detect limit points with respect to this parameter. We also make a user-defined function (\parf{UZR}) to detect intersections with the plane $D_0=0.01$. We get among other output \begin{verbatim} BR PT TY LAB PAR(3) L2-NORM ... PAR(1) PAR(2) 1 22 LP 20 1.08120E-02 5.32589E+00 ... 5.67363E+00 6.60818E-02 1 31 UZ 21 1.00000E-02 4.81969E+00 ... 5.18032E+00 6.38551E-02 \end{verbatim} the first line of which represents the $D_0$ value at which the homoclinic curve $P$ has a tangency with the family $t_2$ of fold bifurcations. Beyond this value of $D_0$, $P$ consists entirely of saddle homoclinic orbits. The data at label \parf{20} reproduce the coordinates of the point $D_2$. The results of this computation and a similar one starting from $D_1$ in the opposite direction (with \parf{DS=-0.01}) are displayed in Figure \ref{SNF.3}. % \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir mtn} & create an empty work directory \\ \commandf{cd mtn} & change directory \\ \commandf{demo('mtn')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run('mtn',c='mtn.1',sv='1')} & continue saddle-node homoclinic orbit from \filef{mnt.dat}\\ & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r1=r1+run(r1(1),c='mtn.2',ap='1')} & continue in opposite direction; restart from label 1 \\ & append output-files to \filef{b.1, s.1, d.1} \\ \hline %============================================================================= \commandf{r1=r1+run(r1('UZ1'),c='mtn.3',ap='1')} & switch to saddle homoclinic orbit ; restart: 1st \parf{UZ} \\ & append output-files to \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r4=run(r1,c='mtn.4',sv='4')} & continue in reverse direction; restart from last label \\ & save output-files as \filef{b.4, s.4, d.4} \\ \hline %============================================================================= \commandf{r1=r1+run(r1('UZ3'),c='mtn.5',ap='1')} & other saddle homoclinic orbit family; restart: 3rd \parf{UZ} \\ & append output-files to \filef{b., s.1, d.1} \\ \hline %============================================================================== \commandf{r6=run(r1('UZ1'),c='mtn.6',sv='6')} & 3-parameter non-central saddle-node homoclinic. \\ & save output-files as \filef{b.6, s.6, d.6} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{mtn}.} \label{tbl:demo_mtn_1} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : kpr.} \label{ch:HomCont_kpr} %============================================================================== %============================================================================== %============================================================================== %DEMO=kpr====================================================================== %============================================================================== \section{ Koper's Extended Van der Pol Model.} % The equation-file \filef{kpr.f90} contains the equations \begin{equation} \label{ko} \begin{array}{rcl} \dot{x} & = & \eps_1^{-1}\:(k\: y - x^3 +3\:x - \lambda) \\ \dot{y} & = & x - 2\: y + z \\ \dot{z} & = & \eps_2(y-z), \end{array} \end{equation} with $\eps_1 =0.1$ and $\eps_2=1$ \cite{Ko:95}. To copy across the demo \filef{kpr} and compile we type \begin{center} \commandf{demo('kpr')} \\ \end{center} \section{The Primary Branch of Homoclinics.} First, we locate a homoclinic orbit using the homotopy method. The file \filef{kpr.f90} already contains approximate parameter values for a homoclinic orbit, namely $\lambda=$\parf{PAR(1)=-1.851185}, $k=$\parf{PAR(2)=-0.15}. The file \filef{c.kpr.1} specifies the appropriate constants for continuation in $2T$\parf{=PAR(11)} (also referred to as \parf{PERIOD}) and the dummy parameter $\omega_1$=\parf{PAR(17)} starting from a small solution in the local unstable manifold; \begin{center} \commandf{r1=run('kpr',c='kpr.1',sv='1')} \end{center} Among the output there is the line \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(17) ... 1 29 UZ 2 1.90018E+01 1.69382E+00 ... 4.46147E-09 ... \end{verbatim} which indicates that a zero of the artificial parameter $\omega_1$ has been located. This means that the right-hand end point of the solution belongs to the plane that is tangent to the stable manifold at the saddle. The output is stored in files \filef{b.1, s.1, d.1}. Upon plotting the data at label \parf{2} (see Figure \ref{kf.1a}) it can be noted that although the right-hand projection boundary condition is satisfied, the solution is still quite away from the equilibrium. The right-hand endpoint can be made to approach the equilibrium by performing a further continuation in $T$ with the right-hand projection condition satisfied (\parf{PAR(17)} fixed) but with $\lambda$ allowed to vary. % \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr1}} \caption{Projection on the $(x,y)$-plane of solutions of the boundary value problem with $2T=19.08778$.} \label{kf.1a} \end{figure} \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr2}} \caption{Projection on the $(x,y)$-plane of solutions of the boundary value problem with $2T = 60.0$.} \label{kf.1b} \end{figure} % \begin{center} \commandf{r2=run(r1('UZ1'),c='kpr.2',sv='2')} \end{center} the output at label \parf{4}, stored in \filef{s.2}, \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(1) ... 1 35 UZ 4 6.00000E+01 1.67281E+00 ... -1.85119E+00 ... \end{verbatim} provides a good approximation to a homoclinic solution (see Figure \ref{kf.1b}). The second stage to obtain a starting solution is to add a solution to the modified adjoint variational equation. This is achieved by setting both \parf{ITWIST} and \parf{ISTART} to 1 (in \filef{c.kpr.3}), which generates a trivial guess for the adjoint equations. Because the adjoint equations are linear, only a single Newton step (by continuation in a trivial parameter) is required to provide a solution. Rather than choose a parameter that might be used internally by \AUTO, in \filef{c.kpr.3} we take the continuation parameter to be \parf{PAR(11)}, which is not quite a trivial parameter but whose affect upon the solution is mild. \begin{center} \commandf{r3=run(r2('UZ1'),c='kpr.3',sv='3')} \end{center} The output at the second point (label \parf{6}) contains the converged homoclinic solution (variables (\parf{U(1), U(2), U(3)}) and the adjoint (\parf{ U(4), U(5), U(6)})). We now have a starting solution and are ready to perform two-parameter continuation. The fourth run \begin{center} \commandf{r3=r3+run(r3,c='kpr.4',ap='3')} \end{center} continues the homoclinic orbit in \parf{PAR(1)} and \parf{PAR(2)}. % %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr4}} \caption{Projection on the $(x,y)$-plane of solutions $\phi(t)$ at \parf{1} ($\lambda=-1.825470, k=-0.1760749$) and \parf{2} ($\lambda=-1.686154, k=-0.3183548$).} \label{kf.2a} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 8.0cm \centerline{\epsffile{include/kpr5}} \caption{Three-dimensional blow-up of the solution curves $\phi(t)$ at labels \parf{1} (dotted) and \parf{2} (solid line) from Figure 3.8.} \label{kf.2b} \end{figure} %------------------------------------------------------ % Note that several other parameters appear in the output. \parf{PAR(10)} is a dummy parameter that should be zero when the adjoint is being computed correctly; \parf{PAR(29)}, \parf{PAR(30)}, \parf{PAR(33)} correspond to the test functions $\psi_9$,$\psi_{10}$ and $\psi_{13}$. That these test functions were activated is specified in three places in \filef{c.kpr.4} as described in Section~\ref{sec:HomCont_Test_functions}. Note that at the end-point of the family (reached when after \parf{NMX=50} steps) \parf{PAR(29)} is approximately zero which corresponds to a zero of $\psi_9$, a non-central saddle-node homoclinic orbit. We shall return to the computation of this codimension-two point later. Before reaching this point, among the output we find two zeroes of \parf{PAR(33)} (test function $\psi_{13}$) which gives the accurate location of two inclination-flip bifurcations, \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(10) ... PAR(33) 1 6 UZ 7 -1.80166E+00 ... -2.00266E-01 -7.25140E-07 ... 1.14077E-04 1 12 UZ 8 -1.56876E+00 ... -4.39547E-01 -2.15617E-07 ... -1.48740E-07 \end{verbatim} That the test function really does have a regular zero at this point can be checked from the data saved in \filef{b.3}, plotting \parf{PAR(33)} as a function of \parf{PAR(1)} or \parf{PAR(2)}. Figure \ref{kf.2a} presents solutions $\phi(t)$ of the modified adjoint variational equation (for details see \citeasnoun{ChKuSa:95}) at parameter values on the homoclinic family before and after the first detected inclination flip. Note that these solutions were obtained by choosing a smaller step \parf{DS} and more output (smaller \parf{NPR}) in \filef{c.kpr.4}. A blow-up of the region close to the origin of this figure is shown in Figure \ref{kf.2b}. It illustrates the flip of the solutions of the adjoint equation while moving through the bifurcation point. Note that the data in this figure were plotted after first performing an additional continuation of the solutions with respect to \parf{PAR(11)}. Continuing in the other direction \begin{center} \commandf{r3=r3+run(r3()[0],c='kpr.5',ap='3')} \end{center} we approach a Bogdanov-Takens point \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(10) ... PAR(33) 1 50 EP 10 -1.93828E+00 ... -7.52334E+00 ... -3.19793E+01 \end{verbatim} %------------------------------------------------------ \begin{figure}[t] \epsfysize 9.0cm \centerline{\epsffile{include/kpr6}} \caption{Computed homoclinic orbits approaching the BT point} \label{kp.6} \end{figure} %------------------------------------------------------ Note that the numerical approximation has ceased to become reliable, since \parf{PAR(10)} has now become large. Phase portraits of homoclinic orbits between the BT point and the first inclination flip are depicted in Figure \ref{kp.6}. Note how the computed homoclinic orbits approaching the BT point have their endpoints well away from the equilibrium. To follow the homoclinic orbit to the BT point with more precision, we would need to first perform continuation in $T$ (\parf{PAR(11)}) to obtain a more accurate homoclinic solution. \section{More Accuracy and Saddle-Node Homoclinic Orbits.} Continuation in $T$ in order to obtain an approximation of the homoclinic orbit over a longer interval is necessary for parameter values near a non-hyperbolic equilibrium (either a saddle-node or BT) where the convergence to the equilibrium is slower. First, we start from the original homoclinic orbit computed via the homotopy method, label \parf{4}, which is well away from the non-hyperbolic equilibrium. Also, we shall no longer be interested in in inclination flips so we set \parf{ITWIST=0} in \filef{c.kpr.6}, and in order to compute up to \parf{PAR(11)=1000}, we set up a user-defined function for this. Running \AUTO with \parf{PAR(11)} and \parf{PAR(2)} as free parameters \begin{center} \commandf{r6=run(r2('EP1'),c='kpr.6',sv='6')} \end{center} we obtain among the output \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(2) 1 35 UZ 6 1.00000E+03 1.66191E+00 ... -1.50000E-01 \end{verbatim} We can now repeat the computation of the family of saddle homoclinic orbits in \parf{PAR(1)} and \parf{PAR(2)} from this point with the test functions $\psi_9$ and $\psi_{10}$ for non-central saddle-node homoclinic orbits activated \begin{center} \commandf{r7=run(r6('UZ1'),c='kpr.7',sv='7')} \end{center} The saddle-node point is now detected at \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(29) PAR(30) 1 29 UZ 8 1.76505E-01 ... -2.40533E+00 -1.74004E-06 2.30933E+01 \end{verbatim} which is stored in \filef{s.7}. That \parf{PAR(29)} ($\psi_9$) is zeroed shows that this is a non-central saddle-node connecting the centre manifold to the strong stable manifold. Note that all output beyond this point, although a well-posed solution to the boundary-value problem, is spurious in that it no longer represents a homoclinic orbit to a saddle equilibrium (see \citeasnoun{ChKuSa:95}). If we had chosen to, we could continue in the other direction in order to approach the BT point more accurately by reversing the sign of \parf{DS} in \filef{c.kpr.7}. The file \filef{c.kpr.8} contains the constants necessary for switching to continuation of the central saddle-node homoclinic curve in two parameters starting from the non-central saddle-node homoclinic orbit stored as label \parf{8} in \filef{s.7}. \begin{center} \commandf{r8=run(r7('UZ1'),c='kpr.8',sv='8')} \end{center} In this run we have activated the test functions for saddle to saddle-node transition points along curves of saddle homoclinic orbits ($\psi_{15}$ and $\psi_{16}$). Among the output we find \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(35) PAR(36) 1 38 UZ 11 1.76509E-01 ... -2.40533E+00 6.89014E-03 3.09956E-05 \end{verbatim} %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr7}} \caption{Two non-central saddle-node homoclinic orbits, \parf{1} and \parf{3}; and, \parf{2}, a central saddle-node homoclinic orbit between these two points \label{kf.7}} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr8}} \caption{The big homoclinic orbit approaching a figure-of-eight} \label{kp.8} \end{figure} %------------------------------------------------------ % which corresponds to the family of homoclinic orbits leaving the locus of saddle-nodes in a second non-central saddle-node homoclinic bifurcation (a zero of $\psi_{16}$). Note that the parameter values do not vary much between the two codimension-two non-central saddle-node points (labels \parf{8} and \parf{11}). However, Figure \ref{kf.7} shows clearly that between the two codimension-two points the homoclinic orbit rotates between the two components of the 1D stable manifold, i.e.\ between the two boundaries of the center-stable manifold of the saddle node. The overall effect of this process is the transformation of a nearby ``small'' saddle homoclinic orbit to a ``big'' saddle homoclinic orbit (i.e.\ with two extra turning points in phase space). Finally, we can switch to continuation of the big saddle homoclinic orbit from the new codim 2 point at label \parf{11}. \begin{center} \commandf{r9=run(r8('UZ1'),c='kpr.9',sv='9')} \end{center} Note that \AUTO takes a large number of steps near the line \parf{PAR(1)=0}, while \parf{PAR(2)} approaches $-2.189\ldots$ (which is why we chose such a large value \parf{NMX=500} in \filef{c.kpr.9}). This particular computation ends at \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM ... PAR(2) 1 500 EP 24 2.04263E-05 2.18126E-01 ... -2.18951E+00 \end{verbatim} By plotting phase portraits of orbits approaching this end point (see Figure \ref{kp.8}) we see a ``canard-like'' like transformation of the big homoclinic orbit to a pair of homoclinic orbits in a figure-of-eight configuration. That we get a figure-of-eight is not a surprise because \parf{PAR(1)=0} corresponds to a symmetry in the differential equations \cite{Ko:94}; note also that the equilibrium, stored as (\parf{PAR(12), PAR(13), PAR(14)}) in \filef{d.9}, approaches the origin as we approach the figure-of-eight homoclinic. \section{Three-Parameter Continuation.} We now consider curves in three parameters of each of the codimension-two points encountered in this model, by freeing the parameter $\eps=$ \parf{PAR(3)}. First we continue the first inclination flip stored at label \parf{7} in \filef{s.3} \begin{center} \commandf{r10=run(r3('UZ1'),c='kpr.10',sv='10')} \end{center} Note that \parf{ITWIST=1} in \filef{c.kpr.10}, so that the adjoint is also continued, and there is one fixed condition \parf{IFIXED(1)=13} so that test function $\psi_{13}$ has been frozen. Among the output there is a codimension-three point (zero of $\psi_9$) where the neutrally twisted homoclinic orbit collides with the saddle-node curve \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(3) PAR(29) ... 1 18 UZ 11 1.28270E-01 ... -2.51932E+00 5.74477E-01 -2.59151E-06 ... \end{verbatim} The other detected inclination flip (at label \parf{8} in \filef{s.3}) is continued similarly \begin{center} \commandf{r11=run(r3('UZ2'),c='kpr.11',sv='11')} \end{center} giving among its output another codim 3 saddle-node inclination-flip point \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(3) PAR(29) ... 1 27 UZ 11 1.53542E-01 ... -2.45810E+00 1.17171E+00 -1.13312E-06 ... \end{verbatim} Output beyond both of these codim 3 points is spurious and both computations end in an \parf{MX} point (no convergence). To continue the non-central saddle-node homoclinic orbits it is necessary to work on the data without the solution $\phi(t)$. We restart from the data saved at \parf{LAB=8} and \parf{LAB=11} in \filef{s.7} and \filef{s.8} respectively. We could continue these codim 2 points in two ways, either by appending the defining condition $\psi_{16} =0$ to the continuation of saddle-node homoclinic orbits (with \parf{IEQUIB=2}, etc.), or by appending $\psi_{9} =0$ to the continuation of a saddle homoclinic orbit (with \parf{IEQUIB=1}). The first approach is used in the example \filef{mtn}, for contrast we shall adopt the second approach here. %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/kpr10}} \caption{Projection onto the \parf{(PAR(3),PAR(2))}-plane of the non-central saddle-node homoclinic orbit curves (labeled \parf{1} and \parf{2}) and the inclination-flip curves (labeled \parf{3} and \parf{4})}. \label{kp.10} \end{figure} %------------------------------------------------------ % \begin{center} \commandf{r12=run(r7('UZ1'),c='kpr.12',sv='12')}\\ \commandf{r12=r12+run(r8('UZ1'),c='kpr.13',ap='12')} \end{center} The projection onto the $(\eps,k)$-plane of all four of these codimension-two curves is given in Figure \ref{kp.10}. The intersection of the inclination-flip lines with one of the non-central saddle-node homoclinic lines is apparent. Note that the two non-central saddle-node homoclinic orbit curves are almost overlaid, but that as in Figure \ref{kf.7} the orbits look quite distinct in phase space. \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir kpr} & create an empty work directory \\ \commandf{cd kpr} & change directory \\ \commandf{demo('kpr')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run('kpr',c='kpr.1',sv='1')} & continuation in the time-length parameter \parf{PAR(11)} \\ & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r2=run(r1('UZ1'),c='kpr.2',sv='2')} & locate the homoclinic orbit \\ & save output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================= \commandf{r3=run(r2('UZ1'),c='kpr.3',sv='3')} & generate adjoint variables\\ & save output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \commandf{r3=r3+run(r3,c='kpr.4',ap='3')} & continue the homoclinic orbit \\ & append output-files to \filef{b.3, s.3, d.3} \\ \hline %============================================================================= \commandf{r3=r3+run(r3()[0],c='kpr.5',ap='3')} & continue in reverse direction\\ & append output-files to \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \commandf{r6=run(r2('EP1'),c='kpr.6',sv='6')} & increase the period \\ & save output-files as \filef{b.6, s.6, d.6} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{kpr}.} \label{tbl:demo_kpr_1} \end{center} \end{table} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{r7=run(r6('UZ1'),c='kpr.7',sv='7')} & recompute the family of homoclinic orbits \\ \commandf{sv('7')} & save output-files as \filef{b.7, s.7, d.7} \\ \hline %============================================================================== \commandf{r8=run(r7('UZ1'),c='kpr.8',sv='8')} & continue central saddle-node homoclinics \\ & save output-files as \filef{b.8, s.8, d.8} \\ \hline %============================================================================== \commandf{r9=run(r8('UZ1'),c='kpr.9',sv='9')} & continue homoclinics from codim-2 point \\ & save output-files as \filef{b.9, s.9, d.9} \\ \hline %============================================================================== \commandf{r10=run(r3('UZ1'),c='kpr.10',} & 3-parameter curve of inclination-flips\\ \commandf{ sv='10')} & save output-files as \filef{b.10, s.10, d.10} \\ \hline %============================================================================== \commandf{r11=run(r3('UZ2'),c='kpr.11',} & another curve of inclination-flips \\ \commandf{ sv='11')} & save output-files as \filef{b.11, s.11, d.11} \\ \hline %============================================================================== \commandf{r12=run(r7('UZ1'),c='kpr.12',} & continue non-central saddle-node homoclinics\\ \commandf{ sv='12')} & save output-files as \filef{b.12, s.12, d.12} \\ \hline %============================================================================== \commandf{r12=r12+run(r8('UZ1'),c='kpr.13',} & continue non-central saddle-node homoclinics\\ \commandf{ ap='12')} & append output-files to \filef{b.12, s.12, d.12} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{kpr}.} \label{tbl:demo_kpr_2} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : cir.} \label{ch:HomCont_cir} %============================================================================== %============================================================================== %============================================================================== %DEMO=cir====================================================================== %============================================================================== \section{ Electronic Circuit of Freire \textit{et al}.} Consider the following model of a three-variable electronic circuit \cite{FrRLuGaPo:93} \begin{equation} \left \{ \begin{array}{rcl} \dot{x} & = & \left [-(\beta+\nu) x + \beta y -a_3 x^3 +b_3(y-x)^3\right ]/r, \\ \dot{y} & = & \beta x -(\beta+\gamma)y -z -b_3(y-x)^3, \\ \dot{z} & = & y. \end{array} \right. \label{5.fr1} \end{equation} These autonomous equations are also considered in the \AUTO demo \filef{tor}. First, we copy the demo into a new directory and compile \begin{center} \commandf{dm('cir')} \\ \end{center} The system is contained in the equation-file \filef{cir.f90} and the initial run-time constants are stored in \filef{c.cir.1}. We begin by starting from the data from \filef{cir.dat} for a saddle-focus homoclinic orbit at $\nu=-0.721309$, $\beta=0.6$, $\gamma=0$, $r=0.6$, $A_3=0.328578$ and $B_3=0.933578$, which was obtained by shooting over the time interval $2T=$\parf{PAR(11)}$=36.13$. We wish to follow the family in the $(\beta,\nu)$-plane, but first we perform continuation in $(T,\nu)$ to obtain a better approximation to a homoclinic orbit. \begin{center} \commandf{r1=run('cir',c='cir.1')} \end{center} yields the output \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(1) 1 21 UZ 2 1.000000E+02 1.286637E-01 ... -7.213093E-01 1 42 UZ 3 2.000000E+02 9.097899E-02 ... -7.213093E-01 1 50 EP 4 2.400000E+02 8.305208E-02 ... -7.213093E-01 \end{verbatim} Note that $\nu=$\parf{PAR(1)} remains constant during the continuation as the parameter values do not change, only the length of the interval over which the approximate homoclinic solution is computed. Note from the eigenvalues, stored in \filef{d.1} that this is a homoclinic orbit to a saddle-focus with a one-dimensional unstable manifold. We now restart at \parf{LAB=3}, corresponding to a time interval $2T=200$, and change the principal continuation parameters to be $(\nu,\beta)$. The new constants defining the continuation are given in \filef{c.cir.2}. We also activate the test functions pertinent to codimension-two singularities which may be encountered along a family of saddle-focus homoclinic orbits, viz.\ $\psi_2$, $\psi_4$, $\psi_5$, $\psi_9$ and $\psi_{10}$. This must be specified in three ways: by appropriate \parf{IPSI} in \filef{c.cir.2}, by adding the corresponding parameter labels to the list of continuation parameters \parf{ICP(I)} in \filef{c.cir.2} (recall that these parameter indices are 20 more than the corresponding $\psi$ indices), and finally adding UZR functions defining zeros of these parameters in \filef{c.cir.2}. Running \begin{center} \commandf{r2=run(r1('UZ2'),c='cir.2',sv='2')} \end{center} results in \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) ... PAR(25) PAR(29) 1 17 UZ 5 -7.256925E-01 ... 4.535645E-01 ... -1.765251E-05 -2.888436E-01 1 75 UZ 6 -1.014704E+00 ... 9.998966E-03 ... 1.664509E+00 -5.035997E-03 1 78 UZ 7 -1.026445E+00 ... -2.330391E-05 ... 1.710804E+00 1.165176E-05 1 81 UZ 8 -1.038012E+00 ... -1.000144E-02 ... 1.756690E+00 4.964621E-03 1 100 EP 9 -1.164160E+00 ... -1.087732E-01 ... 2.230329E+00 5.042736E-02 \end{verbatim} with results saved in \filef{b.2, s.2, d.2}. %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/cir1}} \caption{Solutions of the boundary value problem at labels 6 and 8, either side of the Shil'nikov-Hopf bifurcation} \label{Fcircuit1} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/cir2}} \caption{Phase portraits of three homoclinic orbits on the family, showing the saddle-focus to saddle transition} \label{Fcircuit2} \end{figure} %------------------------------------------------------ Upon inspection of the output, note that label 5, where \parf{PAR(25)}$\approx 0$, corresponds to a neutrally-divergent saddle-focus, $\psi_5=0$. Label 7, where \parf{PAR(29)}$\approx 0$ corresponds to a local bifurcation, $\psi_9=0$, which we note from the eigenvalues stored in \filef{d.2} corresponds to a \emp{ Shil'nikov-Hopf} bifurcation. Note that \parf{PAR(2)} is also approximately zero at label 7, which accords with the analytical observation that the origin of (\ref{5.fr1}) undergoes a Hopf bifurcation when $\beta=0$. Labels 6 and 8 are the user-defined output points, the solutions at which are plotted in Fig.\ \ref{Fcircuit1}. Note that solutions beyond label 7 (e.g., the plotted solution at label 8) do not correspond to homoclinic orbits, but to \emp{ point-to-cycle} heteroclinic orbits (c.f.\ Section~2.2.1 of \citeasnoun{ChKuSa:95}). We now continue in the other direction along the family. It turns out that starting from the initial point in the other direction results in missing a codim 2 point which is close to the starting point. Instead we start from the first saved point from the previous computation (label 5 in \filef{s.2}): \begin{center} \commandf{r3=run(r2('UZ1'),c='cir.3',ap='2')} \end{center} The output \begin{verbatim} BR PT TY LAB PAR(1) ... PAR(2) PAR(22) PAR(24) 1 9 UZ 10 -7.204001E-01 ... 5.912315E-01 -1.725669E+00 -3.295862E-05 1 18 UZ 11 -7.590583E-01 ... 7.428734E-01 3.432139E-05 -2.822988E-01 1 26 UZ 12 -7.746686E-01 ... 7.746147E-01 5.833163E-01 1.637611E-07 1 28 EP 13 -7.746628E-01 ... 7.746453E-01 5.908902E-01 1.426214E-04 \end{verbatim} contains a neutral saddle-focus (a \emp{ Belyakov} transition) at \parf{LAB=10} ($\psi_4=0$), a double real leading eigenvalue (saddle-focus to saddle transition) at \parf{LAB =11} ($\psi_2=0$) and a neutral saddle at \parf{LAB=12} ($\psi_4=0$). Data at several points on the complete family are plotted in Fig.\ \ref{Fcircuit2}. If we had continued further (by increasing \parf{NMX}), the computation would end at a no convergence error \parf{TY=MX} owing to the homoclinic family approaching a Bogdanov-Takens singularity at small amplitude. To compute further towards the BT point we would first need to continue to a higher value of \parf{PAR(11)}. \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir cir} & create an empty work directory \\ \commandf{cd cir} & change directory \\ \commandf{demo('cir')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run(c='cir.1',sv='1')} & increase the truncation interval; restart from \filef{cir.dat}\\ & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r2=run(r1('UZ2'),c='cir.2',sv='2')} & continue saddle-focus homoclinic orbit; restart from \parf{r1} \\ & save output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================= \commandf{r3=run(r2('UZ1'),c='cir.3',ap='2')} & generate adjoint variables ; restart from \parf{r2} \\ & append output-files as \filef{b.2, s.2, d.2} \\ \hline %============================================================================== \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{cir}.} \label{tbl:demo_cir_1} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : she.} \label{ch:HomCont_she} %============================================================================== %============================================================================== %============================================================================== %DEMO=she====================================================================== %============================================================================== \section{ A Heteroclinic Example.} The following system of five equations \citeasnoun{RuMa:95} \begin{equation} \label{sh1} \begin{array}{rcl} \dot{x} & = & \mu \, x + x\, y - z\, u, \\ \dot{y} & = & -y - x^2, \\ \dot{z} & = & \mu\, z + x\, u - 9\sigma\, z / 4(1+\sigma) \\ \dot{u} & = & - \sigma u / 4 - \sigma Q v / 4\pi^2 + 3(1 + \sigma) x z / 4\sigma \\ \dot{v} & = & \zeta u / 4 - \zeta v / 4 \end{array} \end{equation} has been used to describe shearing instabilities in fluid convection. The equations possess a rich structure of local and global bifurcations. Here we shall reproduce a single curve in the $(\sigma,\mu)$-plane of codimension-one heteroclinic orbits connecting a non-trivial equilibrium to the origin for $Q=0$ and $\zeta=4$. The defining problem is contained in equation-file \filef{she.f90}\footnote{The last parameter used to store the equilibria (\parf{PAR(21)}) is overlaped here with the first test-function. In this example, it is harmless since the test functions are irrelevant for heteroclinic continuation.}, and starting data for the orbit at $(\sigma,\mu)=(0.5,0.163875)$ are stored in \filef{she.dat}, with a truncation interval of \parf{PAR(11)=85.07}. We begin by computing towards $\mu=0$ with the option \parf{IEQUIB=-2} which means that both equilibria are solved for as part of the continuation process. \begin{center} \commandf{demo('she')} \\ \commandf{r1=run('she',c='she.1',sv='1')} \end{center} This yields the output \begin{verbatim} BR PT TY LAB PAR(3) L2-NORM ... PAR(1) 1 1 EP 1 5.00000E-01 4.05950E-01 ... 1.63875E-01 1 5 2 4.52847E-01 3.72688E-01 ... 1.36505E-01 1 10 3 3.94351E-01 3.30390E-01 ... 1.04419E-01 1 15 4 3.35908E-01 2.87331E-01 ... 7.51623E-02 1 20 5 2.77287E-01 2.43351E-01 ... 4.95320E-02 1 25 6 2.18210E-01 1.98147E-01 ... 2.84629E-02 1 30 EP 7 1.58178E-01 1.51246E-01 ... 1.29327E-02 \end{verbatim} Alternatively, for this problem there exists an analytic expression for the two equilibria. This is specified in the subroutine \funcf{PVLS} of \filef{she.f90}. Re-running with \parf{IEQUIB=-1} \begin{center} \commandf{r2=run('she',c='she.2')} \end{center} we obtain the output \begin{verbatim} 1 1 EP 1 5.00000E-01 4.05950E-01 ... 1.63875E-01 1 5 2 4.43202E-01 3.65772E-01 ... 1.31056E-01 1 10 3 3.72309E-01 3.14244E-01 ... 9.30098E-02 1 15 4 3.00884E-01 2.61156E-01 ... 5.93397E-02 1 20 5 2.28665E-01 2.06219E-01 ... 3.17994E-02 1 25 6 1.55541E-01 1.49165E-01 ... 1.23990E-02 1 30 EP 7 8.10746E-02 9.14311E-02 ... 2.38662E-03 \end{verbatim} This output is similar to that above, but note that it is obtained slightly more efficiently because the extra parameters \parf{PAR(12-21)} representing the coordinates of the equilibria are no longer part of the continuation problem. Also note that \AUTO has chosen to take slightly larger steps along the family. Finally, we can continue in the opposite direction along the family from the original starting point (again with \parf{IEQUIB=-1}). \begin{center} \commandf{r3=run(r2(2),c='she.3')}\\ \commandf{save(r2+r3,'2')} \end{center} % %------------------------------------------------------ \begin{figure}[b] \epsfysize 9.0cm \centerline{\epsffile{include/she1}} \caption{Projections into $(x,y,z)$-space of the family of heteroclinic orbits.} \label{Fshear} \end{figure} %------------------------------------------------------ % \begin{verbatim} BR PT TY LAB PAR(3) L2-NORM ... PAR(1) 1 5 8 4.99759E-01 4.06015E-01 ... 1.63732E-01 1 10 9 5.70530E-01 4.55187E-01 ... 2.06526E-01 1 15 10 6.41644E-01 5.03184E-01 ... 2.50783E-01 1 20 11 7.13330E-01 5.50067E-01 ... 2.95934E-01 1 25 12 7.85769E-01 5.95871E-01 ... 3.41549E-01 1 30 13 8.59097E-01 6.40618E-01 ... 3.87300E-01 1 35 EP 14 9.33416E-01 6.84317E-01 ... 4.32927E-01 \end{verbatim} The results of both computations are presented in Figure \ref{Fshear}, from which we see that the orbit shrinks to zero as \parf{PAR(1)=}$\mu \to 0$. \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir she} & create an empty work directory \\ \commandf{cd she} & change directory \\ \commandf{demo('she')} & copy the demo files to the work directory \\ \hline %============================================================================== \commandf{r1=run('she',c='she.1',sv='1')} & continue heteroclinic orbit; start from \filef{she.dat}\\ & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r2=run('she',c='she.2')} & repeat with \parf{IEQUIB=-1} \\ \hline %============================================================================= \commandf{r3=run(r2(2),c='she.3')} & continue in reverse direction ;\\ & restart from label 2 of \parf{r2} \\ \commandf{save(r2+r3,'2')} & Save appended results to \filef{b.2, s.2, d.2}\\ \hline %============================================================================= \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{she}.} \label{tbl:demo_she_1} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : rev.} \label{ch:HomCont_rev} %============================================================================== %============================================================================== %============================================================================== %DEMO=rev====================================================================== %============================================================================== \section{ A Reversible System.} The fourth-order differential equation $$ u'''' + P u'' + u -u^3 =0 $$ arises in a number of contexts, e.g., as the travelling-wave equation for a nonlinear-Schr\"{o}dinger equation with fourth-order dissipation \cite{BuAk:95} and as a model of a strut on a symmetric nonlinear elastic foundation \cite{HuBoTh:89}. It may be expressed as a system \begin{equation} \left \{ \begin{array}{rcl} \dot{u_1} & = & u_2 \\ \dot{u_2} & = & u_3 \\ \dot{u_3} & = & u_4 \\ \dot{u_4} & = & -P u_3 - u_1 + u_1^3 \end{array} \right. \label{6.1} \end{equation} Note that (\ref{6.1}) is invariant under two separate reversibilities \begin{equation} R_1: (u_1,u_2,u_3,u_4,t) \mapsto (u_1,-u_2,u_3,-u_4,-t) \label{6.R1} \end{equation} and \begin{equation} R_2: (u_1,u_2,u_3,u_4,t) \mapsto (-u_1,u_2,-u_3,u_4,-t) \label{6.R2} \end{equation} First, we copy the demo into a new directory \begin{center} \commandf{demo('rev')} \end{center} For this example, we shall make two separate starts from data stored in equation and data files \filef{rev.c.1, rev.dat.1} and \filef{rev.c.3, rev.dat.3} respectively. The first of these contains initial data for a solution that is reversible under $R_1$ and the second for data that is reversible under $R_2$. % %Note that \commandf{make} or \commandf{make all} will only run the %first of these. To make the output starting from the %$R_2$-reversible solution we need to \commandf{make run2}. As before, %though we illustrate here the step by step approach. \section{An \texorpdfstring{$R_1$}{R1}-Reversible Homoclinic Solution.} The first run \begin{center} \commandf{r1=run('rev',c='rev.1',sv='1')} \end{center} starts by using the file \filef{rev.dat.1} via the \parf{'dat'} \AUTO-constant in \filef{c.rev.1}. The orbit contained in the data file is a ``primary'' homoclinic solution for $P=1.6$, with truncation (half-)interval \parf{PAR(11) = 39.0448429}. which is reversible under $R_1$. Note that this reversibility is specified in \filef{c.rev.1} via \parf{IREV=[0,1,0,1]}. Note also, from \filef{c.rev.1} that we only have one free parameter \parf{PAR(1)} because symmetric homoclinic orbits in reversible systems are generic rather than of codimension one. The first run results in the output \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM MAX U(1) ... 1 1 EP 1 1.60000E+00 2.85704E-01 3.62232E-01 1 8 UZ 2 1.70000E+00 2.90288E-01 4.18225E-01 1 11 UZ 3 1.80000E+00 2.95723E-01 4.80604E-01 1 14 UZ 4 1.90000E+00 2.74864E-01 4.43069E-01 1 20 EP 5 1.99678E+00 1.13379E-01 9.59430E-02 \end{verbatim} which is consistent with the theoretical result that the solution tends uniformly to zero as $P\to 0$. Note, by plotting the data saved in \filef{s.1} that only ``half'' of the homoclinic orbit is computed up to its point of symmetry. See Figure \ref{Frev1}. %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/rev1}} \caption{$R_1$-Reversible homoclinic solutions on the half-interval $x/T \in [0,1]$ where $T=39.0448429$ for $P$ approaching $2$ (solutions with labels \parf{1-5} respectively have decreasing amplitude)} \label{Frev1} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/rev2}} \caption{$R_1$-reversible homoclinic orbits with oscillatory decay as $x \to -\infty$ (corresponding to label \parf{6}) and monotone decay (at label \parf{10})} \label{Frev2} \end{figure} %------------------------------------------------------ The second run continues in the other direction of \parf{PAR(1)}, with the test function $\psi_2$ activated for the detection of saddle to saddle-focus transition points \begin{center} \commandf{r1=r1+run(r1('UZ1'),c='rev.2',ap='1')} \end{center} The output \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM MAX U(1) ... PAR(22) 1 11 UZ 6 1.00001E+00 2.81700E-01 1.76625E-01 ... -3.00001E+00 1 22 UZ 7 -1.00743E-07 2.89421E-01 4.69706E-02 ... -2.00000E+00 1 33 UZ 8 -1.00000E+00 3.02208E-01 4.32654E-03 ... -1.00000E+00 1 44 UZ 9 -2.00000E+00 3.16798E-01 1.22616E-11 ... 2.66362E-08 1 55 EP 10 -3.09920E+00 3.32927E-01 -4.00188E-10 ... 1.09920E+00 \end{verbatim} shows a saddle to saddle-focus transition (indicated by a zero of \parf{PAR(22)}) at \parf{PAR(1)=-2}. Beyond that label the first component of the solution is negative and (up to the point of symmetry) monotone decreasing. See Figure \ref{Frev2}. \section{An \texorpdfstring{$R_2$}{R2}-Reversible Homoclinic Solution.} \begin{center} \commandf{r3=run('rev',c='rev.3',sv='3')} \end{center} starts by using the file \filef{rev.dat.3} via the \parf{'dat'} \AUTO-constant in \filef{c.rev.3}, and runs them with the constants stored in \filef{c.rev.3}. The orbit contained in the data file is a ``multi-pulse'' homoclinic solution for $P=1.6$, with truncation (half-)interval \parf{PAR(11) = 47.4464189}. which is reversible under $R_2$. This reversibility is specified in \filef{c.rev.1} via \parf{IREV=[1,0,1,0]}. The output \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM MAX U(1) ... 1 1 EP 1 1.60000E+00 3.69766E-01 3.83942E-01 1 7 UZ 2 1.70000E+00 3.83640E-01 4.89066E-01 1 9 LP 3 1.71157E+00 3.92475E-01 5.46080E-01 1 11 UZ 4 1.69884E+00 4.04207E-01 6.10428E-01 1 14 UZ 5 1.60000E+00 4.32940E-01 7.77395E-01 1 26 UZ 6 1.00000E+00 4.80849E-01 1.08252E+00 1 49 UZ 7 -5.38706E-08 5.15846E-01 1.25863E+00 1 128 MX 8 -9.15462E-01 5.44202E-01 1.32395E+00 \end{verbatim} contains the label of a limit point (\parf{ILP} was set to \parf{1} in \filef{c.rev.3}), which corresponds to a ``coalescence'' of two reversible homoclinic orbits. The two solutions on either side of this limit point are displayed in Figure \ref{Frev3}. The computation ends in a no-convergence point. The solution here is depicted in Figure \ref{Frev4}. The lack of convergence is due to the large peak and trough of the solution rapidly moving to the left as $P \to -2$ (cf. \citeasnoun{ChSp:93}). %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/rev3}} \caption{Two $R_2$-reversible homoclinic orbits at $P=1.6$ corresponding to labels \parf{1} (smaller amplitude) and \parf{5} (larger amplitude)} \label{Frev3} \end{figure} %------------------------------------------------------ %------------------------------------------------------ \begin{figure}[p] \epsfysize 9.0cm \centerline{\epsffile{include/rev4}} \caption{An $R_2$-reversible homoclinic orbit at label \parf{8}} \label{Frev4} \end{figure} %------------------------------------------------------ Continuing from the initial solution in the other parameter direction \begin{center} \commandf{r3=r3+run(r3('UZ1'),c='rev.4',ap='3')} \end{center} we obtain the output \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM MAX U(1) ... 1 7 UZ 9 1.60000E+00 3.70171E-01 3.84045E-01 1 33 UZ 10 9.99998E-01 3.61440E-01 1.77504E-01 1 94 UZ 11 -5.14775E-08 3.71301E-01 4.69706E-02 1 153 MX 12 -2.54464E-01 3.75071E-01 3.00627E-02 \end{verbatim} which again ends at a no convergence error for similar reasons. \section{ Detailed \AUTO-Commands.} \begin{table}[htbp] \begin{center} \begin{tabular}{| l | l |} \hline \AUTO-COMMAND & ACTION \\ \hline %============================================================================== \commandf{mkdir rev} & create an empty work directory \\ \commandf{cd rev} & change directory \\ \commandf{demo('rev')} & copy the demo files to the work directory \\ \hline %============================================================================== & use the starting data in \filef{rev.dat.1} \\ \commandf{r1=run('rev',c='rev.1',sv='1')} & increase \parf{PAR(1)} \\ & save output-files as \filef{b.1, s.1, d.1} \\ \hline %============================================================================== \commandf{r1=r1+run(r1('UZ1'),c='rev.2',ap='1')} & continue in reverse direction; restart: 1st \parf{UZ} \\ & append output-files to \filef{b.1, s.1, d.1} \\ \hline %============================================================================= & use the starting data in \filef{rev.dat.3} \\ \commandf{r3=run('rev',c='rev.3',sv='3')} & restart with different reversibility \\ & save output-files as \filef{b.3, s.3, d.3} \\ \hline %============================================================================== \commandf{r3=r3+run(r3('UZ1'),c='rev.4',ap='3')} & continue in reverse direction; restart: 1st \parf{UZ} \\ & append output-files to \filef{b.3, s.3, d.3} \\ \hline %============================================================================= \end{tabular} \caption{Detailed \AUTO-Commands for running demo \filef{rev}.} \label{tbl:demo_rev_1} \end{center} \end{table} %============================================================================== %============================================================================== \chapter{ {\cal HomCont} Demo : Homoclinic branch switching.} \label{ch:HomCont_hbs} %============================================================================== %============================================================================== %============================================================================== %DEMO=hbs====================================================================== %============================================================================== This demo illustrates homoclinic branch switching, which is an implementation of Lin's method \cite{Li:90,Sa:93,Ye:01} as described in \citeasnoun{OlChKr:03}. We use a direct branch switching method to switch from 1- to 2- and 3-homoclinic orbits near an inclination flip bifurcation in a model due to Sandstede, which was introduced in Chapter~\ref{ch:HomCont_san}. This also shows how to obtain a homoclinic orbit through continuation of a periodic orbit born at a Hopf bifurcation. Thereafter, we illustrate homoclinic branch switching for the FitzHugh-Nagumo equations and a 5th-order Korteweg-De Vries model. The equation files in these demos are written in C. \section{ Branch switching at an inclination flip in Sand\-stede's model.} \label{sec:HomCont_hbs_san} Consider the system \cite{Sa:95b} \begin{equation} \begin{array}{rcl} \dot{x} & = & a x + b y - a x^2 - \alpha z x (2-3x), \\ \dot{y} & = & b x + a y - \frac{3}{2} x (b x + a y) + \alpha z 2 y, \\ \dot{z} & = & c z + \mu x + 3 x z + \alpha (x^2 (1-x) - y^2). \end{array} \end{equation} as given in the file \filef{sib.c}, where for simplicity we have set $\tilde\mu=0$, $\beta=1$ and $\gamma=3$. We study an inclination flip that exists for $a=0.375$, $b=0.625$ and $c=-0.75$. This corresponds to the situation where the eigenvalues of the equilibrium at the origin are $a+b=1$, $a-b=-0.25$ and $c=-0.75$. Hence, the corresponding bifurcation diagram consists of a complicated structure involving a fan of infinitely many $n$-periodic and $n$-homoclinic orbits for arbitrary $n$ and a region with horseshoe dynamics; see also \citeasnoun{HoKr:00} and the references therein. This computation starts from an equilibrium at $(2/3,0,0)$, which exists for $a=\mu=\alpha=0$. Also, $b$ is set to $0.625$ (the value we would like it to be) and $c$ is set to $-2.5$ in \funcf{stpnt}. Choosing $c=-2$ at this stage leads to convergence problems. This equilibrium is not the one corresponding to the homoclinic orbit, but it is an equilibrium with complex eigenvalues, that we can follow until it reaches a Hopf bifurcation. A periodic orbit emanates from this Hopf bifurcation and can be followed to the homoclinic orbit. However, first we need to change $a$ from $0$ to $0.375$. All the following commands, except for \commandf{demo('sib')} are contained within the file \commandf{'sib.auto'} which you can either execute in a batch mode by entering\\ \commandf{> auto sib.auto}\\ or step by step using\\ \commandf{AUTO> demofile('sib.auto')}. We start by copying the demo to the current work directory and running the first step \begin{center} \commandf{demo('sib') }\\ \commandf{r1=run(e='sib',c='sib') } \\ \commandf{save(r1,'1') } \end{center} The equilibrium is followed in $a$ until $a$ (or \parf{PAR(1)}) is at our desired value, $0.375$. \begin{verbatim} BR PT TY LAB PAR(1) ... U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 ... 6.66667E-01 0.00000E+00 0.00000E+00 1 5 UZ 2 3.75000E-01 ... 6.66667E-01 -1.33333E-01 0.00000E+00 \end{verbatim} The output is saved in the files \filef{b.1}, \filef{s.1} and \filef{d.1}. Next we continue in $\alpha$ (\parf{PAR(4)}) until a Hopf bifurcation is found: \begin{center} \commandf{r2=run(r1,ICP=[4]) }\\ \commandf{save(r2,'2') } \end{center} or, alternatively, \begin{center} \commandf{rn(c='sib.2',s='1')}\\ \commandf{sv('2') } \end{center} \begin{verbatim} BR PT TY LAB PAR(4) ... U(1) U(2) U(3) 1 6 HB 3 3.18429E-01 ... 6.54375E-01 -1.34754E-01 7.70102E-02 \end{verbatim} The output is saved in the files \filef{b.2}, \filef{s.2} and \filef{d.2}. This Hopf bifurcation can then be continued into a periodic orbit. The periodic orbit eventually reaches a homoclinic bifurcation. We continue in $\mu$=\parf{PAR(5)} and \parf{PAR(11)}, which corresponds to the period, and stop when the period is equal to $35$. \begin{center} \commandf{r3=run(r2('HB1'),IPS=2,ICP=[5,11],NMX=200,DS=0.01,DSMAX=0.01,UZR=\{-11:35\})} \\ \commandf{save(r3,'3')} \end{center} \begin{verbatim} BR PT TY LAB PAR(5) L2-NORM ... PERIOD 3 10 5 -2.41881E-03 6.70569E-01 ... 1.08975E+01 ... 3 40 8 -1.29495E-02 6.14547E-01 ... 1.41297E+01 ... 3 81 UZ 13 -1.04657E-04 4.01829E-01 ... 3.50000E+01 \end{verbatim} The output is saved in the files \filef{b.3}, \filef{s.3} and \filef{d.3}. Note that $\mu$ first decreases and then increases towards $0$, which is precisely what we expect in this model, as homoclinic orbits occur on the line $\mu=0$ in the $(\alpha,\mu)$-plane. It is now instructive to look at a phase space diagram to see what is going on. \begin{center} \commandf{plot(r3) } \end{center} Selecting 'solution' for Type, [5,6,7,8,9,10,11,12,13] for Label, [U(1)] for X and [U(2)] for Y, we obtain the diagram depicted in Figure~\ref{hopfbif}(a), where the periodic orbit grows from the Hopf equilibrium to a homoclinic orbit. \begin{figure}[htb] \begin{center} \begin{picture}(400,180) \put(0,0){ \put(157,148){(a)} \includegraphics[scale=0.5]{include/hopfbif}} \put(200,0){ \put(157,148){(b)} \includegraphics[scale=0.5]{include/notshifted}} \end{picture} \caption{Periodic orbit growing from a Hopf bifurcation to a homoclinic orbit (a). The unshifted homoclinic orbit (b).} \label{hopfbif} \end{center} \end{figure} Note however, that the homoclinic orbit has the wrong left-hand and right-hand end points. This can be seen by plotting the solution corresponding to Label [13] using 't' vs. 'x' (coordinate [U(1)]), as depicted in Figure~\ref{hopfbif}(b). Hence, in order to continue this as a real homoclinic we have to give {\cal HomCont} special instructions, to do a phase-shift in time. This can be done by setting \parf{ISTART=4}. Moreover, since we have not specified the value of the equilibrium at the origin in \filef{sib.c}, we need to set \parf{IEQUIB=1} (this is the default value) to let {\cal HomCont} detect the equilibrium. Note that in this case this is not strictly necessary; however, we do this for instructional purposes. Now we use {\cal HomCont} to continue the homoclinic orbit in $c$ and $\mu$ (\parf{PAR(3)}, \parf{PAR(5)}), to get the desired value $c=-2.0$. \begin{center} \commandf{r4=run(r3,IPS=9,ICP=[3,5],NPR=60,JAC=1,UZR=\{-3:-2.0\},ISTART=4) } \\ \commandf{save(r4,'4')} \end{center} \begin{verbatim} BR PT TY LAB PAR(3) L2-NORM ... PAR(5) 3 51 UZ 14 -2.00000E+00 4.01890E-01 ... 2.66146E-09 \end{verbatim} The output is saved in the files \filef{b.4}, \filef{s.4} and \filef{d.4}. Note that \parf{PAR(5)}=$\mu$ remains zero, which is exactly what we expect. Next we want to add a solution to the adjoint equation to this solution. This is achieved by making the change \parf{ITWIST = 1}. Also, we set \parf{ISTART} to 1 to tell {\cal HomCont} that it should not try to shift the orbit anymore. \begin{center} \commandf{r5=run(r4,ICP=[5,8],NMX=2,ITWIST=1,ISTART=1)} \\ \commandf{save(r5,'5') } \end{center} or, alternatively, \begin{center} \commandf{rn(c='sib.5',s='4')}\\ \commandf{sv('5')}\\ \end{center} The output is stored in \filef{b.5}, \filef{s.5} and \filef{d.5}. \begin{verbatim} BR PT TY LAB PAR(5) L2-NORM ... PAR(8) 3 2 EP 15 2.66146E-09 4.01890E-01 ... 1.00000E-02 \end{verbatim} Here \parf{PAR(8)} is a dummy (unused) parameter and $\mu$ just stays where it is. Now that we have obtained the solution of the adjoint equation, we are able to detect inclination flips. This can be achieved by setting \parf{IPSI} to [13] and monitoring \parf{PAR(33)}. \begin{center} \commandf{r6=run(r5,ICP=[4,5,33],NMX=30,DS=-0.01,DSMAX=1.0,UZR=\{33:0,-4:0\},IPSI=[13])} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) L2-NORM ... PAR(5) PAR(33) 3 19 UZ 16 7.11774E-02 4.01890E-01 ... 1.24376E-11 -2.36702E-07 \end{verbatim} The output is stored in the \python variable \parf{r6}. Hence an inclination flip was found at $\alpha=0.711774$. Now we are ready to perform homoclinic branch switching, using the techniques described in \cite{OlChKr:03}. Our first aim is to find a 2-homoclinic orbit. The ingredients we need are: a homoclinic orbit where $n$-homoclinic orbits are close by, and the solution to the adjoint equation to obtain the Lin vector. Since both ingredients are there, we can now continue in $\mu$, $\varepsilon_1$ and $T_1$, to obtain the initial Lin gap. Recall from Chapter~\ref{ch:HomCont} that the Lin gaps $\varepsilon_i$ correspond to \parf{PAR(20+i*2)} and the time intervals $T_i$ correspond to \parf{PAR(21+i*2)}. We stop when $\varepsilon_1=0.2$. We need to specify \parf{ITWIST=2}, to tell {\cal HomCont} we aim to find a 2-homoclinic orbit, so that it will split it up in three parts with two potential Lin gaps. We effectively have a 9-dimensional system at this point. \begin{center} \commandf{r7=run(r6('UZ1'),ICP=[21,22,5],NMX=300,NPR=10,UZR=\{-22:0.2\},ISTART=-2,IPSI=[])}\\ \commandf{save(r7,'7')} \end{center} \begin{verbatim} BR PT TY LAB PAR(21) L2-NORM ... PAR(22) PAR(5) 3 10 18 3.45897E+01 4.46818E-01 ... 7.87712E-07 -1.55885E-11 3 20 19 2.73699E+01 4.46818E-01 ... 2.91119E-05 -1.63974E-09 3 30 20 1.73720E+01 4.46817E-01 ... 4.42273E-03 -3.10167E-05 3 38 UZ 21 1.01451E+01 4.46796E-01 ... 2.00000E-01 -1.48615E-02 \end{verbatim} The output is stored in \filef{b.7}, \filef{s.7} and \filef{d.7}. Here we see that $T_1$, the time it takes to make the first loop with respect to the Poincar\'e section, decreases. This is illustrated in Figure~\ref{broken}. Next we are ready to close this gap, by continuing in $\alpha$, $\mu$, and $\varepsilon_1$, while keeping $T_1$ at a constant value. \begin{figure}[htb] \begin{center} \begin{picture}(400,180) \put(0,0){ \put(157,148){(a)} \includegraphics[scale=0.5]{include/loop}} \put(200,0){ \put(157,148){(b)} \includegraphics[scale=0.5]{include/broken}} \end{picture} \caption{Behaviour of the second piece of the `broken homoclinic orbit' when creating a Lin gap (a). Projection of the ``broken homoclinic orbit'' onto the $(x,y)$-plane, where $\varepsilon_1=0.2$. To include all the pieces necessary to obtain this figure, the ``X'' box must contain [U(1),U(4),U(7)] and the ``Y'' box must contain [U(2),U(5),U(8)] (b).} \label{broken} \end{center} \end{figure} \begin{center} \commandf{r8=run(r7,ICP=[4,5,22],NPR=310,DS=0.01,DSMAX=0.01,UZR=\{-22:0.0,4:0.074\})} \\ \commandf{r6=r6+r8} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) L2-NORM ... PAR(5) PAR(22) 3 3 UZ 22 7.40000E-02 4.46781E-01 ... -1.43162E-02 1.93746E-01 3 32 UZ 23 1.98414E-01 4.46590E-01 ... -6.05495E-03 2.29300E-06 \end{verbatim} The output is appended to the \python variable \parf{r6}. Now we have obtained a 2-homoclinic orbit at label 23. However, the homoclinic orbit is still split in three parts. We can switch back to a normal orbit by setting \parf{ITWIST} back to 0 and continuing in the usual way. Here we continue back to the inclination flip point in $\alpha$ and $\mu$. \begin{center} \commandf{r9=run(r8,ICP=[4,5],NMX=30,DS='-',DSMAX=0.1,UZR=\{4:0.15\},ISTART=1,ITWIST=0)} \\ \commandf{r6=r6+r9} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) L2-NORM ... PAR(5) 3 7 UZ 24 1.50000E-01 4.94490E-01 ... -3.60248E-03 3 30 EP 25 7.61403E-02 4.98746E-01 ... -2.64847E-06 \end{verbatim} So the 2-homoclinic orbit converges back to the 1-homoclinic orbit at the inclination flip bifurcation. The output is appended to the python variable \parf{r6}. The resulting 2-homoclinic orbits can be seen using \begin{center} \commandf{plot(r6) } \end{center} and is depicted in Figure~\ref{hom2}(a). \begin{figure}[htb] \begin{center} \begin{picture}(400,180) \put(0,0){ \put(157,148){(a)} \includegraphics[scale=0.5]{include/hom2}} \put(200,0){ \put(157,148){(b)} \includegraphics[scale=0.5]{include/hom3}} \end{picture} \caption{The 2-homoclinic orbit as $a$ is changed (a). The two different 3-homoclinic orbits (b).} \label{hom2} \end{center} \end{figure} Next, we aim to find a 3-homoclinic orbit. To do so, we restart at the inclination flip point at label 16 and set \parf{ITWIST=3}. Moreover, we need to continue in one more gap, $\varepsilon_2$=\parf{PAR(24)} and, once again, stop when $\varepsilon_1$=\parf{PAR(22)=0}. Note that the dimension of the boundary value problem we continue is now equal to 12. This is not to be confused with the setting of the \AUTO constant \parf{NDIM=3}, because {\cal HomCont} handles this internally. \begin{center} \commandf{r10=run(r6('UZ1'), ICP=[21,22,24,5], NMX=300, NPR=10, UZR=\{-22:0.2\}, ISTART=-3, IPSI=[])} \\ \commandf{save(r10,'10') } \end{center} \begin{verbatim} BR PT TY LAB PAR(21) ... PAR(22) PAR(24) PAR(5) 3 10 26 3.45896E+01 ... 7.87894E-07 6.42157E-07 -1.06346E-11 3 20 27 2.73699E+01 ... 2.91126E-05 6.51591E-07 -1.63655E-09 3 30 28 1.73719E+01 ... 4.42289E-03 1.44090E-04 -3.10188E-05 3 38 UZ 29 1.01451E+01 ... 2.00000E-01 6.97445E-02 -1.48615E-02 \end{verbatim} The output is stored in \filef{b.10}, \filef{s.10} and \filef{d.10}. Now we need to subsequently close the Lin gaps. Our strategy is to keep $T_1$ fixed. We first continue in $\alpha$, $\mu$, $\varepsilon_1$ and $\varepsilon_2$ until $\varepsilon_1=0$. \begin{center} \commandf{r11=run(r10,ICP=[4,5,22,24],NPR=310,DS=0.01,DSMAX=0.01,UZR=\{-22:0.0,4:0.082\})} \\ \commandf{r6=r6+r11} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) ... PAR(5) PAR(22) PAR(24) 3 6 UZ 30 8.20000E-02 ... -1.29790E-02 1.76995E-01 6.37184E-02 3 32 UZ 31 1.98414E-01 ... -6.05495E-03 2.30717E-06 3.62449E-02 \end{verbatim} The output is appended to the \python variable \parf{r6}. Note that this continuation is very similar to the one where we found a 2-homoclinic orbit. In fact we have now found a 2-homoclinic orbit (numerically) followed by a `broken' 1-homoclinic orbit; only the mesh is not aligned. The next step is to close the gap corresponding to $\varepsilon_2$ to obtain a 3-homoclinic orbit. We replace the continuation parameter $\varepsilon_1$ by $T_2$, because $T_2$ (\parf{PAR(23)}) still has to be decreased from its high value (35) and $\varepsilon_1$ needs to stay at 0. \begin{center} \commandf{r12=run(r11,ICP=[4,5,23,24],NMX=32,NTST=40,DS=-1,DSMAX=1, UZR=\{24:0,4:0.18\})}\\ \commandf{r6=r6+r12} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) ... PAR(5) PAR(23) PAR(24) 3 16 UZ 32 1.98395E-01 ... -6.05536E-03 2.01311E+01 1.82491E-08 3 24 UZ 33 1.80000E-01 ... -6.50293E-03 1.27554E+01 -3.14294E-02 3 30 UZ 34 1.66990E-01 ... -6.89269E-03 9.41745E+00 -1.03179E-06 3 32 EP 35 1.78172E-01 ... -6.55364E-03 9.50300E+00 -7.20367E-02 \end{verbatim} The output is appended to the \python variable \parf{r6}. Note that we have found two zeros of \parf{PAR(24)}, at labels 32 and 34, respectively. The two zeros correspond to two different 3-homoclinic orbits, which, when followed from periodic orbits, both emanate from from the same saddle-node bifurcation. These two 3-homoclinic orbits are depicted in Figure~\ref{hom2}(b). We can follow both of these back to the inclination flip point, by setting \parf{ITWIST} back to 0: \begin{center} \commandf{r13=run(r6('UZ7'), ICP=[4,5], NMX=30, DS=-0.01, DSMAX=0.1, UZR=\{4:0.13\}, ISTART=1, ITWIST=0)}\\ \commandf{r6=r6+r13} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) L2-NORM ... PAR(5) 3 13 UZ 36 1.29999E-01 5.04807E-01 ... -2.33902E-03 3 30 EP 37 9.27258E-02 5.06560E-01 ... -2.76788E-04 \end{verbatim} \begin{center} \commandf{r14=run(r6('UZ9'), ICP=[4,5], NMX=30, DS=-0.01, DSMAX=0.1, UZR=\{4:0.145\}, ISTART=1, ITWIST=0)} \\ \commandf{r6=r6+r14} \commandf{save(r6,'6')} \end{center} \begin{verbatim} BR PT TY LAB PAR(4) L2-NORM ... PAR(5) 3 7 UZ 38 1.45000E-01 5.47347E-01 ... -4.79400E-03 3 30 EP 39 8.39399E-02 5.52605E-01 ... -7.36611E-05 \end{verbatim} All the combined appended output is saved to \filef{b.6}, \filef{s.6} and \filef{d.6}. The bifurcation diagram and the paths we followed when closing the Lin gaps are depicted in Figure~\ref{parspace}. It is possible and straightforward to obtain $4, 5, 6, \dots$-homoclinic orbits by extending the above strategy. \begin{figure}[htb] \begin{center} \includegraphics[scale=0.5]{include/parspace} \caption{Parameter space diagram near an inclination flip. The curve through label 17 corresponds to a 1-homoclinic orbit. The opening of the Lin gaps occurs along the vertical line from label 16 to label 23. The curves through labels 23 and 30 denote the path that is followed when closing the Lin gaps. The (approximately overlaid) curves though labels 25 and 35 correspond to the 2- and one of the 3-homoclinic orbits. Finally, the curve through label 37 corresponds to the other 3-homoclinic orbit, which was obtained for \parf{PAR(23)}=$T_2=12.03201$.} \label{parspace} \end{center} \end{figure} \section{ Branch switching for a Shil'nikov type homoclinic orbit in the FitzHugh-Nagumo equations.} The FitzHugh-Nagumo (FHN) equations \cite{FitzH:61,NaArYo:62} are a simplified version of the Hodgkin-Huxley equations \cite{HoHu:52}. They model nerve axon dynamics and are given by \begin{equation} \begin{split} u_t&=u_{xx}-f_a(u)-w, \\ w_t&=\epsilon(u-\gamma w), \end{split} \label{fhnpde} \end{equation} where \[ f_a(u) = u (u-a)(u-1). \] Travelling wave solutions of the form $(u,w)(x,t)=(u,w)(\xi)$, where $\xi=x+ct$ are solutions of the following ODE system: \begin{equation} \begin{split} \dot u &= v,\\ \dot v &= c v + f_a(u) + w,\\ \dot w &= \frac{\epsilon}{c} (u - \gamma w). \end{split} \label{fhnode} \end{equation} In particular we consider solitary wave solutions of \eqref{fhnpde}. These correspond to orbits homoclinic to $(u,v,w)=0$ in system \eqref{fhnode}. In our numerical example we keep $\gamma=0$. We aim to find a $2$-homoclinic orbit at a Shil'nikov bifurcation. All the commands given here are in the file fnb.auto. First we obtain a homoclinic orbit using a homotopy technique (see \citeasnoun{FrDoMo:94}), using \parf{ISTART=3}, for the parameter values $c=0.21, a=0.2, \epsilon=0.0025$. \begin{center} \commandf{demo('fnb') }\\ \commandf{r1 = run('fhn',sv='1')} \end{center} Among the output we see: \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(17) 1 21 UZ 4 2.91921E+01 2.38053E-01 ... 2.37630E-11 \end{verbatim} and a zero of \parf{PAR(17)} means that a zero of an artificial parameter has been located and the right-hand end point of the corresponding solution belongs to the plane that is tangent to the stable manifold at the saddle. This point still needs to come closer to the equilibrium, which we can achieve by further increasing the period to 300, while keeping \parf{PAR(17)} at 0: \begin{center} \commandf{r2 = run(r1('UZ1'),c='fhn.2',sv='2')} \end{center} \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(2) 1 189 UZ 11 3.00000E+02 7.37932E-02 ... 1.79286E-01 \end{verbatim} Next we stop using the homotopy technique and increase the period even further, to 1000. \begin{center} \commandf{r3 = run(r2('UZ1'),c='fhn.3',sv='3')} \end{center} \begin{verbatim} BR PT TY LAB PERIOD L2-NORM ... PAR(2) 1 80 UZ 14 1.00000E+03 4.04183E-02 ... 1.79286E-01 \end{verbatim} A continuation in \parf{PAR(2)}=$a$ and \parf{PAR(1)}=$c$ needs to be performed to arrive at the place where we wish to find a 2-homoclinic orbit: $a=0$. At the same time we monitor \parf{PAR(22)} to locate Belyakov points. \begin{center} \commandf{r4 = run(r3('UZ1'),c='fhn.4',sv='4')} \end{center} \begin{verbatim} BR PT TY LAB PAR(2) L2-NORM ... PAR(1) PAR(22) 1 6 UZ 16 1.31812E-01 3.28710E-02 ... 2.17166E-01 -6.31253E-06 1 23 UZ 20 -8.55398E-08 1.56158E-02 ... 2.74218E-01 -9.88772E-02 \end{verbatim} Hence, there exists a Belyakov point at $(a,c)=(0.131812,0.21766)$. At label 19 we have a lower value of $a$ than at the Belyakov point, and by inspection of the file \filef{d.4} we can observe that the equilibrium has one positive eigenvalue and a complex conjugate pair of eigenvalues with negative real part, and conclude that this orbit is of Shil'nikov type. Before starting the homoclinic branch switching, we calculate the adjoint to obtain a `Lin vector': \begin{center} \commandf{r5 = run(r4('UZ5'),c='fhn.5',sv='5')} \end{center} \begin{verbatim} BR PT TY LAB PAR(9) L2-NORM ... PAR(3) 1 2 EP 29 -1.00000E+00 1.56158E-02 ... 2.50000E-03 \end{verbatim} Next, we continue in the time $T_1$ (\parf{PAR(21)}), the gap $\varepsilon_1$ (\parf{PAR(22)}) and $c$ (\parf{PAR(1)}), and by setting \parf{ISTART}=-2 we try to locate a 2-homoclinic orbit: \begin{center} \commandf{r6 = run(r5,c='fhn.6',sv='6')} \end{center} In fact we find many of them, exactly as is predicted by the theory: \begin{verbatim} BR PT TY LAB PAR(21) ... PAR(1) PAR(22) ... 1 174 UZ 45 1.64799E+02 ... 2.74218E-01 -3.44422E-11 1 178 UZ 46 1.44799E+02 ... 2.74218E-01 3.29142E-14 1 182 UZ 47 1.24854E+02 ... 2.74218E-01 1.70138E-15 1 187 UZ 48 1.04789E+02 ... 2.74218E-01 -8.57896E-14 1 191 UZ 49 8.49517E+01 ... 2.74218E-01 1.93804E-13 1 196 UZ 50 6.45145E+01 ... 2.74218E-01 -2.26551E-09 \end{verbatim} Each of these homoclinic orbits differ by about 20 in the value $T_1$. This is about the time it takes to make one half-turn close to and around the equilibrium, so that orbits differ by the number of half turns around the equilibrium before a big excursion in phase space. Note that the variation of $c$ is so small that it does not appear. A plot of $T_1$ vs. $\varepsilon_1$ gives insight into how the gap is opened and closed in the continuation process. This is depicted in Figure~\ref{shilgap}. \begin{figure}[htb] \begin{center} \includegraphics[scale=0.5]{include/shilgap} \caption{A plot of $\varepsilon_1$ as a function of $T_1$ during our computation of Shil'nikov-type two-homoclinic orbits. Each zero corresponds to a different orbit.} \label{shilgap} \end{center} \end{figure} We are now in a position to continue each of these orbits as a normal homoclinic orbit by setting \parf{ISTART=1} and \parf{ITWIST=0}. We leave this as an exercise to the reader. \section{ Branch switching to a 3-homoclinic orbit in a 5th-order Korteweg-De Vries model} In \citeasnoun{ChGr:97} the following water wave model was considered: \begin{equation} \frac{2}{15}r''''-b r''+ar+\frac{3}{2}r^2- \frac{1}{2}(r')^2+[rr']' = 0. \label{cgode} \end{equation} It represents solitary-wave solutions $r(x+at)$, $r\to 0$ as $x\to \pm\infty$ of the 5th-order PDE \[ r_t+\frac{2}{15}r_{xxxx}-b r_{xxx}+3r r_x+2 r_x r_{xx}+r r_{xxx=0}, \] where $a$ is the wave speed. The ODE corresponds to a Hamiltonian system with Hamiltonian \[ H=-\frac{1}{2}q_1^3-\frac{1}{2}a q_1^2+p_1 q_2-\frac{1}{2}b q_2^2+ \frac{15}{4}p_2^2+\frac{1}{2}q_2^2 q_1 \] and \[q_1=r, \quad q_2=r', \quad p_1=-\frac{2}{15}r'''+br'-rr', \quad p_2=\frac{2}{15}r''.\] System \eqref{cgode} is also reversible under the transformation \[ t \mapsto -t, (q_1,q_2,p_1,p_2)\mapsto (q_1,-q_2,-p_1,p_2),\] but we do not exploit the reversible structure (\parf{IREV=0}), and instead use it as an example of Hamiltonian system. This system exhibits an orbit flip for a reversible Hamiltonian system. In Hamiltonian systems, homoclinic orbits are codimension-zero phenomena, and we have to add an additional parameter $\lambda$ that breaks the Hamiltonian structure in this system, by introducing artificial friction. Thus, the actual system of equations that is used for continuation is \[\dot x=(\lambda I + J)\nabla H(x),\] where $x=(q_1,q_2,p_1,p_2)$ and $J$ is the usual skew symmetric matrix in $\mathbb{R}^4$. It is now possible to continue a homoclinic orbit in {\cal HomCont} in two parameters ($\lambda$ and either $a$ or $b$); see also \citeasnoun{Be:90a}. An explicit solution exists for $a=3/5(2b+1)(b-2), b\geq -1/2$, and it is given by \[r(t)=3(b+\frac{1}{2})\mathrm{sech}^2\left([\frac{3}{4}(2b+1)]^{1/2}t\right).\] It corresponds to a reversible orbit flip for $b>2$ ($a>0$) We start from this explicit solution, using \parf{ISTART=2}, for $a=3$ and $b=(\sqrt{65}+3)/4$: \begin{center} \commandf{demo('kdv') }\\ \commandf{r1=run('kdv',sv='1')} \end{center} \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM ... PAR(3) 1 1 EP 1 3.00000E+00 5.56544E+00 ... 0.00000E+00 1 2 EP 2 3.04959E+00 5.49141E+00 ... -4.53380E-18 \end{verbatim} Here \parf{PAR(1)}=$a$, \parf{PAR(2)}=$b$, and \parf{PAR(3)}=$\lambda$. We have only done a very small continuation to give \AUTO a chance to create a good mesh and avoid convergence problems later. Next, we set \parf{ITWIST=1} and calculate the adjoint: \begin{center} \commandf{r2=run(r1,c='kdv.2',sv='2')} \end{center} \begin{verbatim} BR PT TY LAB PAR(2) L2-NORM ... PAR(9) 1 2 EP 3 2.76557E+00 5.49141E+00 ... -3.12500E-04 \end{verbatim} We now need to move back to the orbit flip at $a=3$: \begin{center} \commandf{r3=run(r2,c='kdv.3',sv='3')} \end{center} \begin{verbatim} BR PT TY LAB PAR(1) L2-NORM ... PAR(3) 1 14 UZ 5 3.00000E+00 5.47613E+00 ... 1.47725E-09 \end{verbatim} Now all preparations are done to start homoclinic branch switching. This is very similar to the technique used in Sandstede's model in Section~\ref{sec:HomCont_hbs_san}; to find a 3-homoclinic orbit, we open 2 Lin gaps, until $T_1=3.5$, while also varying $\lambda$=\parf{PAR(3)}. \begin{center} \commandf{r4=run(r3('UZ2'),c='kdv.4',sv='4')} \end{center} \begin{verbatim} BR PT TY LAB PAR(3) ... PAR(21) PAR(22) PAR(24) 1 13 8 5.85315E-10 ... 1.65474E+01 -9.20183E-08 -6.11537E-07 1 23 UZ 9 1.52986E-09 ... 9.85223E+00 -6.68578E-12 2.01956E-07 1 26 10 4.09273E-09 ... 6.87525E+00 2.68679E-07 7.64502E-07 1 33 UZ 11 2.15483E-06 ... 3.49999E+00 7.94022E-04 3.99104E-04 \end{verbatim} We then look for an orbit with $a<3$ and close the gap corresponding to $\varepsilon_1$=\parf{PAR(22)}, for decreasing $a$. \begin{center} \commandf{r5=run(r4,c='kdv.5',sv='5')} \end{center} \begin{verbatim} BR PT TY LAB PAR(2) ... PAR(3) PAR(22) PAR(24) 1 10 12 2.57977E+00 ... 2.15713E-06 7.65450E-04 3.82670E-04 1 13 UZ 13 2.32044E+00 ... 3.86701E-11 1.13817E-10 1.58675E-08 1 20 EP 14 -1.47788E-01 ... -9.46232E-04 -7.53666E-01 -3.43203E-01 \end{verbatim} and finally close the gap corresponding to $\varepsilon_2$=\parf{PAR(24)}, \begin{center} \commandf{r6=run(r5('UZ1'),c='kdv.6',sv='6')} \end{center} \begin{verbatim} BR PT TY LAB PAR(2) ... PAR(3) PAR(23) PAR(24) 1 23 UZ 15 2.32044E+00 ... 3.30393E-12 1.48758E+01 -2.30540E-10 1 35 16 2.31894E+00 ... -2.15192E-08 7.69389E+00 -1.07760E-05 1 51 UZ 17 2.33846E+00 ... 2.57829E-07 3.48152E+00 1.29755E-04 1 58 UZ 18 3.08085E+00 ... 2.28299E-12 3.50004E+00 -1.62266E-10 \end{verbatim} so that a three-homoclinic orbit is found. Here the zero at label 17 is the one we are looking for. Label 15 is a false positive since $T_2=PAR(23)$ is still too high. At label 18, $a$=\parf{PAR(1)} has changed considerably to the extend that $a>3$ and a second 3-homoclinic orbit is found. Note that for all zeros of \parf{PAR(24)}=$\varepsilon_2$, the parameter $\lambda$=\parf{PAR(3)} is also zero (within \AUTO accuracy), which it has to be to remain within the original Hamiltonian system. Setting \parf{ISTART=1}, a normal ``trivial'' continuation (with \parf{NMX=1}) of the orbit corresponding to label 17 lets {\cal HomCont} produce a proper concatenated 3-homoclinic orbit: \begin{center} \commandf{r7=run(r6('UZ2'),c='kdv.7',sv='7')} \end{center} \begin{verbatim} BR PT TY LAB PAR(2) L2-NORM ... PAR(3) 1 1 EP 20 2.33846E+00 7.50835E+00 ... 2.57829E-07 \end{verbatim} This 3-homoclinic orbit is depicted in Figure~\ref{kdv3hom}. \begin{figure}[htb] \begin{center} \includegraphics[scale=0.5]{include/kdv3hom} \caption{A 3-homoclinic orbit in a 5th-order Hamiltonian Korteweg-De Vries model.} \label{kdv3hom} \end{center} \end{figure} %============================================================================== %============================================================================== \bibliography{include/auto} \label{sec:bibliography} \end{document} auto/07p/doc/Makefile0000640000175000017500000000375613570013207012462 0ustar sksk# # Makefile 11/1996 # .SUFFIXES: .fig .ps .eps .pdf RM = rm -f I = include/ FIGS = $(I)ab1.pdf $(I)ab2.pdf $(I)ab3.pdf $(I)cir1.pdf $(I)cir2.pdf \ $(I)kpr10.pdf $(I)kpr1.pdf $(I)kpr2.pdf $(I)kpr4.pdf $(I)kpr5.pdf $(I)kpr6.pdf \ $(I)kpr7.pdf $(I)kpr8.pdf $(I)mtn1.pdf $(I)mtn2.pdf $(I)mtn3.pdf $(I)rev1.pdf \ $(I)rev2.pdf $(I)rev3.pdf $(I)rev4.pdf $(I)san1.pdf $(I)san2.pdf $(I)she1.pdf \ $(I)broken.pdf $(I)cb_snh.pdf $(I)cb_snh_par.pdf $(I)closegap_pcl.pdf \ $(I)closegap_pcl_par.pdf $(I)closegap_snh.pdf $(I)closegap_snh_par.pdf \ $(I)cont_pcl.pdf $(I)cont_pcl_par.pdf $(I)cont_snh_all.pdf \ $(I)cont_snh_all_par.pdf $(I)cusp1.pdf $(I)cusp2.pdf $(I)fnc_attrrep1.pdf \ $(I)fnc_attrrep2.pdf $(I)fnc_canards1.pdf $(I)fnc_canards2.pdf \ $(I)fnc_canards3.pdf $(I)fnc_canards4.pdf $(I)fnc_canards5.pdf $(I)hom2.pdf \ $(I)hom3.pdf $(I)hopfbif.pdf $(I)kdv3hom.pdf $(I)loop.pdf $(I)notshifted.pdf \ $(I)parspace.pdf $(I)pp21.pdf $(I)pp22.pdf $(I)shilgap.pdf PLAUT04_FIGS = $(I)2component.pdf $(I)centerMenu.pdf \ $(I)clrLBMu0.pdf $(I)clrTimeMu0.pdf $(I)clrTyMu0.pdf \ $(I)drawCoordMenu.pdf $(I)emL1Sol.pdf $(I)exit.pdf \ $(I)floquet.pdf $(I)helpMenu.pdf $(I)menubar.pdf \ $(I)optionMenu.pdf $(I)styleMenuNew.pdf $(I)typeMenu.pdf all: manual manual: auto.pdf ../plaut04/doc/userguide.pdf ../cmds/@mn auto.pdf:auto.tex $(FIGS) $(PLAUT04_FIGS) pdflatex auto.tex bibtex auto pdflatex auto.tex pdflatex auto.tex pdflatex auto.tex .fig.pdf: fig2dev -Lpdf $< $@ .ps.pdf: perl ./epstopdf.pl $< .eps.pdf: perl ./epstopdf.pl $< ../plaut04/doc/userguide.pdf: user_guide.tex $(PLAUT04_FIGS) pdflatex user_guide.tex pdflatex user_guide.tex mv user_guide.pdf $@ clean: @echo "Cleaning auto.doc ..." @$(RM) *.aux *.log *.bbl *.blg *.toc *.out @$(RM) $(FIGS) $(PLAUT04_FIGS) @for i in include/*.eps; do $(RM) `echo $$i | sed -e "s/\.eps/.pdf/"`; done @for i in include/*.ps; do $(RM) `echo $$i | sed -e "s/\.ps/.pdf/"`; done @echo "Cleaning ... done" superclean: clean @$(RM) auto.pdf manualclean: auto.pdf clean auto/07p/doc/epstopdf.pl0000640000175000017500000005024213570013207013173 0ustar skskeval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q' if 0; use strict; # $Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $ # (Copyright lines below.) # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. 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. # 3. The name of the author may not be used to endorse or promote # products derived from this software without specific prior written # permission. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. # # ---------------------------------------------------------------- # # This is a script to transform an EPS file such that: # a) it is guaranteed to start at the 0,0 coordinate. # b) it sets a page size exactly corresponding to the BoundingBox # This means that when Ghostscript renders it, the result needs no # cropping, and the PDF MediaBox is correct. # c) the result is piped to Ghostscript and a PDF version written. # # It needs a Level 2 PS interpreter. # If the input bounding box is not right, of course there will be problems. # # One thing not allowed for: the case of # "%%BoundingBox: (atend)" when input is not seekable (e.g., from a pipe), # # emacs-page # History # 2010/05/09 v2.16 (Karl Berry) # * make --nogs dump edited PostScript to stdout by default # (report from Reinhard Kotucha). # 2010/03/19 v2.15 (Karl Berry) # * let --outfile override --filter again. # * recognize MSWin64 as well as MSWin32, just in case. # 2010/03/08 v2.14 (Manuel P\'egouri\'e-Gonnard) # * In restricted mode, forbid --gscmd (all platforms) and call GS with full # path relative to self location (Windows). # 2010/02/26 v2.13 (Karl Berry) # * New release. # 2010/02/23 (Manuel P\'egouri\'e-Gonnard) # * Use kpsewhich for filename validation in restricted mode, both input and # output. Requires kpathsea 5.1.0 (TL2010), rejects the name with earlier # versions of kpsewhich. # * Call external programs with full path on win32 in order to avoid obvious # attacks with rogue versions of these programs in the current directory. # 2009/11/27 v2.12 (Karl Berry) # * Make --filter work again # 2009/11/25 (Manuel P\'egouri\'e-Gonnard) # * Better extension detection, suggested by A. Cherepanov. # 2009/10/18 (Manuel P\'egouri\'e-Gonnard) # * Better argument validation (Alexander Cherepanov). # * Use list form of pipe open() (resp. system()) to prevent injection. # Since Perl's fork() emulation doesn't work on Windows with Perl 5.8.8 from # TeX Live 2009, use a temporary file instead of a pipe on Windows. # 2009/10/14 (Manuel P\'egouri\'e-Gonnard) # * Added restricted mode. # 2009/09/27 v2.11 (Karl Berry) # * Fixed two bugs in the (atend) handling code (Martin von Gagern) # * Improved handling of CR line ending (Martin von Gagern) # * More error checking # * --version option # * Create source repository in TeX Live # 2009/07/17 v2.9.11gw # * Added -dSAFER to default gs options # TL2009 wants to use a restricted variant of -shell-escape, # allowing epstopdf to run. However without -dSAFER Ghostscript # allows writing to files (other than given in -sOutputFile) # and running commands (through Ghostscript pipe's language feature). # 2009/05/09 v2.9.10gw # * Changed cygwin name for ghostscript to gs # 2008/08/26 v2.9.9gw # * Switch to embed fonts (default=yes) (J.P. Chretien) # * turned no AutoRotatePages into an option (D. Kreil) (default = None) # * Added resolution switch (D. Kreil) # * Added BSD-style license # 2007/07/18 v2.9.8gw # 2007/05/18 v.2.9.7gw (Gerben Wierda) # * Merged both supplied 2.9.6 versions # 2007/05/15 v2.9.6tp (Theo Papadopoulo) # * Simplified the (atend) support # 2007/01/24 v2.9.6sw (Staszek Wawrykiewicz) # * patched to work also on Windows # 2005/10/06 v2.9.5gw (Gerben Wierda) # * Fixed a horrendous bug in the (atend) handling code # 2005/10/06 v2.9.4gw (Gerben Wierda) # * This has become the official version for now # 2005/10/01 v2.9.3draft (Gerben Wierda) # * Quote OutFilename # 2005/09/29 v2.9.2draft (Gerben Wierda) # * Quote OutFilename # 2004/03/17 v2.9.1draft (Gerben Wierda) # * No autorotate page # 2003/04/22 v2.9draft (Gerben Wierda) # * Fixed bug where with cr-eol files everything up to the first %! # * in the first 2048 bytes was gobbled (double ugh!) # 2002/02/21 v2.8draft (Gerben Wierda) # * Fixed bug where last line of buffer was not copied out (ugh!) # 2002/02/18 v2.8draft (Gerben Wierda) # * Handle different eol styles transparantly # * Applied fix from Peder Axensten for Freehand bug # 2001/03/05 v2.7 (Heiko Oberdiek) # * Newline before grestore for the case that there is no # whitespace at the end of the eps file. # 2000/11/05 v2.6 (Heiko Oberdiek) # * %%HiresBoundingBox corrected to %%HiResBoundingBox # 1999/05/06 v2.5 (Heiko Oberdiek) # * New options: --hires, --exact, --filter, --help. # * Many cosmetics: title, usage, ... # * New code for debug, warning, error # * Detecting of cygwin perl # * Scanning for %%{Hires,Exact,}BoundingBox. # * Scanning only the header in order not to get a wrong # BoundingBox of an included file. # * (atend) supported. # * uses strict; (earlier error detecting). # * changed first comment from '%!PS' to '%!'; # * corrected (atend) pattern: '\s*\(atend\)' # * using of $bbxpat in all BoundingBox cases, # correct the first white space to '...Box:\s*$bb...' # * corrected first line (one line instead of two before 'if 0;'; # # Thomas Esser, Sept. 1998: change initial lines to find # perl along $PATH rather than guessing a fixed location. The above # construction should work with most shells. # # Originally by Sebastian Rahtz, for Elsevier Science # with extra tricks from Hans Hagen's texutil and many more. # emacs-page ### program identification my $program = "epstopdf"; my $ident = '($Id: epstopdf.pl 18319 2010-05-17 16:34:21Z karl $) 2.16'; my $copyright = < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. END_COPYRIGHT my $title = "$program $ident\n"; my $on_windows = $^O =~ /^MSWin/; my $on_windows_or_cygwin = $on_windows || $^O eq "cygwin"; ### ghostscript command name my $GS = $on_windows ? "gswin32c" : "gs"; ### restricted mode my $restricted = 0; $restricted = 1 if $0 =~ /repstopdf/; ### options $::opt_autorotate = "None"; $::opt_compress = 1; $::opt_debug = 0; $::opt_embed = 1; $::opt_exact = 0; $::opt_filter = 0; $::opt_gs = 1; $::opt_gscmd = ""; $::opt_hires = 0; $::opt_outfile = ""; $::opt_res = 0; ### usage my @bool = ("false", "true"); my $resmsg = $::opt_res ? $::opt_res : "[use gs default]"; my $rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; my $usage = <<"END_OF_USAGE"; ${title}Usage: $program [OPTION]... [EPSFILE] Convert EPS to PDF, by default using Ghostscript. Options: --help display this help and exit --version display version information and exit --outfile=FILE write result to FILE --(no)compress use compression (default: $bool[$::opt_compress]) --(no)debug write debugging info (default: $bool[$::opt_debug]) --(no)embed embed fonts (default: $bool[$::opt_embed]) --(no)exact scan ExactBoundingBox (default: $bool[$::opt_exact]) --(no)filter read standard input (default: $bool[$::opt_filter]) --(no)gs run ghostscript (default: $bool[$::opt_gs]) --(no)hires scan HiResBoundingBox (default: $bool[$::opt_hires]) --gscmd=VAL pipe output to VAL (default: $GS) --res=DPI set image resolution (default: $resmsg) --autorotate=VAL set AutoRotatePages (default: $rotmsg) Recognized VAL choices: None, All, PageByPage For EPS files, PageByPage is equivalent to All --restricted use restricted mode (default: $bool[$restricted]) Examples producing test.pdf: * $program test.eps * produce postscript | $program --filter >test.pdf * produce postscript | $program -f -d -o=test.pdf Example: look for HiResBoundingBox and produce corrected PostScript: * $program -d --nogs --hires test.ps >testcorr.ps When reporting bugs, please include an input file and command line options so the problem can be reproduced. Report bugs to: tex-k\@tug.org epstopdf home page: END_OF_USAGE ### process options use Getopt::Long; GetOptions ( "autorotate=s", # \ref{val_autorotate} "compress!", "debug!", "embed!", "exact!", "filter!", "gs!", "gscmd=s", # \ref{val_gscmd} "help", "hires!", "outfile=s", # \ref{openout_any} "res=i", # validated by getopt ('i' specifier) "restricted", "version", ) or die $usage; ### help functions sub debug { print STDERR "* @_\n" if $::opt_debug; } sub warning { print STDERR "==> Warning: @_\n"; } sub error { die "$title!!! Error: @_\n"; } sub errorUsage { die "Error: @_ (try --help for more information)\n"; } ### restricted option $restricted = 1 if $::opt_restricted; debug "Restricted mode activated" if $restricted; ### safer external commands for Windows in restricted mode my $kpsewhich = 'kpsewhich'; if ($restricted && $on_windows) { use File::Basename; my $mydirname = dirname $0; # $mydirname is the location of the Perl script $kpsewhich = "$mydirname/../../../bin/win32/$kpsewhich"; $GS = "$mydirname/../../../tlpkg/tlgs/bin/$GS"; } debug "kpsewhich command: $kpsewhich"; ### check if a name is "safe" according to kpse's open(in|out)_any # return true if name is ok, false otherwise sub safe_name { my ($mode, $name) = @_; my $option = ""; $option = '-safe-in-name' if $mode eq 'in'; $option = '-safe-out-name' if $mode eq 'out'; error "Unknown check mode in safe_name(): $mode" unless $option; my @args = ($kpsewhich, '-progname', 'repstopdf', $option, $name); my $bad = system {$args[0]} @args; return ! $bad; } ### help, version options. if ($::opt_help) { print $usage; exit (0); } if ($::opt_version) { print $title; print $copyright; exit (0); } ### get input filename (\ref{openin_any} for validation) my $InputFilename = ""; if ($::opt_filter) { @ARGV == 0 or errorUsage "Input file cannot be used with filter option"; debug "Filtering: will read standard input"; } else { @ARGV > 0 or errorUsage "Input filename missing"; @ARGV < 2 or errorUsage "Unknown option or too many input files"; $InputFilename = $ARGV[0]; #-r $InputFilename or error "\"$InputFilename\" not readable"; debug "Input filename:", $InputFilename; } ### emacs-page ### option gscmd if ($::opt_gscmd) { if ($restricted) { # \label{val_gscmd} error "Option forbidden in restricted mode: --gscmd"; } else { debug "Switching from $GS to $::opt_gscmd"; $GS = $::opt_gscmd; } } ### start building GS command line for the pipe my @GS = ($GS); push @GS, qw(-q -dNOPAUSE -dSAFER -sDEVICE=pdfwrite); ### option outfile my $OutputFilename = $::opt_outfile; if (! $OutputFilename) { if ($::opt_gs) { if ($::opt_filter) { debug "Filtering: will write standard output"; $OutputFilename = "-"; } else { # Ghostscript, no filter: replace input extension with .pdf. $OutputFilename = $InputFilename; my $ds = $on_windows_or_cygwin ? '\\/' : '/'; $OutputFilename =~ s/\.[^\.$ds]*$//; $OutputFilename .= ".pdf"; } } else { debug "No Ghostscript: will write standard output"; $OutputFilename = "-"; } } debug "Output filename:", $OutputFilename; push @GS, "-sOutputFile=$OutputFilename"; ### options compress, embed, res, autorotate push @GS, ('-dPDFSETTINGS=/prepress', '-dMaxSubsetPct=100', '-dSubsetFonts=true', '-dEmbedAllFonts=true') if $::opt_embed; push @GS, '-dUseFlateCompression=false' unless $::opt_compress; push @GS, "-r$::opt_res" if $::opt_res; $resmsg= $::opt_res ? $::opt_res : "[use gs default]"; push @GS, "-dAutoRotatePages=/$::opt_autorotate" if $::opt_autorotate; $rotmsg = $::opt_autorotate ? $::opt_autorotate : "[use gs default]"; # \label{val_autorotate} error "Invalid value for autorotate: '$::opt_autorotate' " . "(use 'All', 'None' or 'PageByPage')." if ($::opt_autorotate and not $::opt_autorotate =~ /^(None|All|PageByPage)$/); ### option BoundingBox types my $BBName = "%%BoundingBox:"; !($::opt_hires and $::opt_exact) or error "Options --hires and --exact cannot be used together"; $BBName = "%%HiResBoundingBox:" if $::opt_hires; $BBName = "%%ExactBoundingBox:" if $::opt_exact; debug "BoundingBox comment:", $BBName; ### validate input file name in restricted mode \label{openin_any} if ($restricted and not $::opt_filter and not safe_name('in', $InputFilename)) { error "Input filename '$InputFilename' not allowed in restricted mode."; } ### validate output file name in restricted mode \label{openout_any} if ($restricted and not safe_name('out', $OutputFilename)) { error "Output filename '$OutputFilename' not allowed in restricted mode."; } ### option gs if ($::opt_gs) { debug "Ghostscript command:", $GS; debug "Compression:", ($::opt_compress) ? "on" : "off"; debug "Embedding:", ($::opt_embed) ? "on" : "off"; debug "Rotation:", $rotmsg; debug "Resolution:", $resmsg; } ### emacs-page ### open input file if ($::opt_filter) { open(IN, '<-') || error("Cannot open stdin: $!"); } else { open(IN, '<', $InputFilename) || error("Cannot open $InputFilename: $!"); } binmode IN; ### open output file my $outname; # used in error message at end my $tmp_filename; # temporary file for windows my $OUT; # filehandle for output (GS pipe or temporary file) use File::Temp 'tempfile'; if ($::opt_gs) { if (! $on_windows_or_cygwin) { # list piped open works push @GS, qw(- -c quit); debug "Ghostscript pipe:", join(' ', @GS); open($OUT, '|-', @GS) or error "Cannot open Ghostscript for piped input"; } else { # use a temporary file on Windows/Cygwin. ($OUT, $tmp_filename) = tempfile(UNLINK => 1); debug "Using temporary file '$tmp_filename'"; } $outname = $GS; } else { debug "No Ghostscript: opening $OutputFilename"; if ($OutputFilename eq "-") { $OUT = *STDOUT; } else { open($OUT, '>', $OutputFilename) || error ("Cannot write \"$OutputFilename\": $!"); $outname = $OutputFilename; } } binmode $OUT; # reading a cr-eol file on a lf-eol system makes it impossible to parse # the header and besides it will read the intire file into yor line by line # scalar. this is also true the other way around. ### emacs-page ### scan a block, try to determine eol style my $buf; my $buflen; my @bufarray; my $inputpos; # We assume 2048 is big enough. my $EOLSCANBUFSIZE = 2048; $buflen = read(IN, $buf, $EOLSCANBUFSIZE); if ($buflen > 0) { my $crlfpos; my $lfpos; my $crpos; $inputpos = 0; # remove binary junk before header # if there is no header, we assume the file starts with ascii style and # we look for a eol style anyway, to prevent possible loading of the # entire file if ($buf =~ /%!/) { # throw away binary junk before %! $buf =~ s/(.*?)%!/%!/o; $inputpos = length($1); } $lfpos = index($buf, "\n"); $crpos = index($buf, "\r"); $crlfpos = index($buf, "\r\n"); if ($crpos > 0 and ($lfpos == -1 or $lfpos > $crpos+1)) { # The first eol was a cr and it was not immediately followed by a lf $/ = "\r"; debug "The first eol character was a CR ($crpos) and not immediately followed by a LF ($lfpos)"; } # Now we have set the correct eol-character. Get one more line and add # it to our buffer. This will make the buffer contain an entire line # at the end. Then split the buffer in an array. We will draw lines from # that array until it is empty, then move again back to $buf .= unless eof(IN); $buflen = length($buf); # Some extra magic is needed here: if we set $/ to \r, Perl's re engine # still thinks eol is \n in regular expressions (not very nice) so we # cannot split on ^, but have to split on a look-behind for \r. if ($/ eq "\r") { @bufarray = split(/(?<=\r)/ms, $buf); # split after \r } else { @bufarray = split(/^/ms, $buf); } } ### getline sub getline { if ($#bufarray >= 0) { $_ = shift(@bufarray); } else { $_ = ; } $inputpos += length($_) if defined $_; return defined($_); } ### scan first line my $header = 0; getline(); if (/%!/) { # throw away binary junk before %! s/(.*)%!/%!/o; } $header = 1 if /^%/; debug "Scanning header for BoundingBox"; print $OUT $_; ### variables and pattern for BoundingBox search my $bbxpatt = '[0-9eE\.\-]'; # protect backslashes: "\\" gets '\' my $BBValues = "\\s*($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)\\s+($bbxpatt+)"; my $BBCorrected = 0; sub CorrectBoundingBox { my ($llx, $lly, $urx, $ury) = @_; debug "Old BoundingBox:", $llx, $lly, $urx, $ury; my ($width, $height) = ($urx - $llx, $ury - $lly); my ($xoffset, $yoffset) = (-$llx, -$lly); debug "New BoundingBox: 0 0", $width, $height; debug "Offset:", $xoffset, $yoffset; print $OUT "%%BoundingBox: 0 0 $width $height$/"; print $OUT "<< /PageSize [$width $height] >> setpagedevice$/"; print $OUT "gsave $xoffset $yoffset translate$/"; } ### emacs-page ### scan header if ($header) { HEADER: while (getline()) { ### Fix for freehand bug ### by Peder Axensten next HEADER if(!/\S/); ### end of header if (!/^%/ or /^%%EndComments/) { print $OUT $_; last; } ### BoundingBox with values if (/^$BBName$BBValues/o) { CorrectBoundingBox $1, $2, $3, $4; $BBCorrected = 1; last; } ### BoundingBox with (atend) if (/^$BBName\s*\(atend\)/) { debug $BBName, "(atend)"; if ($::opt_filter) { warning "Cannot look for BoundingBox in the trailer", "with option --filter"; last; } my $pos = $inputpos; debug "Current file position:", $pos; # looking for %%BoundingBox while (getline()) { # skip over included documents my $nestDepth = 0; $nestDepth++ if /^%%BeginDocument/; $nestDepth-- if /^%%EndDocument/; if ($nestDepth == 0 && /^$BBName$BBValues/o) { CorrectBoundingBox $1, $2, $3, $4; $BBCorrected = 1; last; } } # go back seek(IN, $pos, 0) or error "Cannot go back to line \"$BBName (atend)\""; last; } # print header line print $OUT $_; } } ### print rest of file while (getline()) { print $OUT $_; } ### emacs-page ### close files close(IN); print $OUT "$/grestore$/" if $BBCorrected; close($OUT); ### actually run GS if we were writing to a temporary file if (defined $tmp_filename) { push @GS, $tmp_filename; push @GS, qw(-c quit); debug "Ghostscript command:", join(' ', @GS); system @GS; } # if ghostscript exited badly, we should too. if ($? & 127) { error(sprintf "Writing to $outname failed, signal %d\n", $? & 127); } elsif ($? != 0) { error(sprintf "Writing to $outname failed, error code %d\n", $? >> 8); } warning "BoundingBox not found" unless $BBCorrected; debug "Done."; # vim: ts=8 sw=2 expandtab: auto/07p/doc/include/0000750000175000017500000000000013570014545012437 5ustar skskauto/07p/doc/include/kpr7.ps0000640000175000017500000004261713570013207013673 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments -30 800 translate -90 rotate 0.75 0.75 scale /lthick 5 def %% line thickness % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (2) 495 460 PR (.) 550 460 PR (0) 605 460 PR 896 460 moveto (-) 896 460 PR (1) 951 460 PR (.) 1006 460 PR (5) 1061 460 PR 1056 540 moveto 1056 600 lineto stroke 1056 600 moveto 1352 460 moveto (-) 1352 460 PR (1) 1407 460 PR (.) 1462 460 PR (0) 1517 460 PR 1512 540 moveto 1512 600 lineto stroke 1512 600 moveto 1808 460 moveto (-) 1808 460 PR (0) 1863 460 PR (.) 1918 460 PR (5) 1973 460 PR 1968 540 moveto 1968 600 lineto stroke 1968 600 moveto 2268 460 moveto (0) 2323 460 PR (.) 2378 460 PR (0) 2433 460 PR 2428 540 moveto 2428 600 lineto stroke 2428 600 moveto 2724 460 moveto (0) 2779 460 PR (.) 2834 460 PR (5) 2889 460 PR 2884 540 moveto 2884 600 lineto stroke 2884 600 moveto 3180 460 moveto (1) 3235 460 PR (.) 3290 460 PR (0) 3345 460 PR 3340 540 moveto 3340 600 lineto stroke 3340 600 moveto 3636 460 moveto (1) 3691 460 PR (.) 3746 460 PR (5) 3801 460 PR 3796 540 moveto 3796 2600 lineto stroke 3796 2600 moveto 4 600 moveto (-) 279 600 PR (1) 334 600 PR (.) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 848 moveto (-) 279 848 PR (0) 334 848 PR (.) 389 848 PR (7) 444 848 PR (5) 499 848 PR 540 848 moveto 600 848 lineto stroke 600 848 moveto 4 1100 moveto (-) 279 1100 PR (0) 334 1100 PR (.) 389 1100 PR (5) 444 1100 PR (0) 499 1100 PR 540 1100 moveto 600 1100 lineto stroke 600 1100 moveto 4 1348 moveto (-) 279 1348 PR (0) 334 1348 PR (.) 389 1348 PR (2) 444 1348 PR (5) 499 1348 PR 540 1348 moveto 600 1348 lineto stroke 600 1348 moveto 4 1600 moveto (0) 334 1600 PR (.) 389 1600 PR (0) 444 1600 PR (0) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1848 moveto (0) 334 1848 PR (.) 389 1848 PR (2) 444 1848 PR (5) 499 1848 PR 540 1848 moveto 600 1848 lineto stroke 600 1848 moveto 4 2100 moveto (0) 334 2100 PR (.) 389 2100 PR (5) 444 2100 PR (0) 499 2100 PR 540 2100 moveto 600 2100 lineto stroke 600 2100 moveto 4 2348 moveto (0) 334 2348 PR (.) 389 2348 PR (7) 444 2348 PR (5) 499 2348 PR 540 2348 moveto 600 2348 lineto stroke 600 2348 moveto 4 2600 moveto (1) 334 2600 PR (.) 389 2600 PR (0) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 2832 2044 moveto 2832 2044 lineto stroke 2832 2044 moveto 2752 2180 moveto 2832 2044 lineto stroke 2832 2044 moveto 2704 2200 moveto (1) 2704 2200 PR 2948 1956 moveto 2948 2156 lineto stroke 2948 2156 moveto 2908 1876 moveto (2) 2963 1876 PR 2828 1796 moveto 2872 2072 lineto stroke 2872 2072 moveto 2780 1716 moveto (3) 2780 1716 PR 0 3068 moveto 2832 2044 moveto lthick setlinewidth 2824 2044 lineto stroke 2824 2044 moveto 2808 2044 lineto stroke 2808 2044 moveto 2800 2040 lineto stroke 2800 2040 moveto 2788 2040 lineto stroke 2788 2040 moveto 2772 2040 lineto stroke 2772 2040 moveto 2748 2040 lineto stroke 2748 2040 moveto 2724 2040 lineto stroke 2724 2040 moveto 2684 2036 lineto stroke 2684 2036 moveto 2632 2036 lineto stroke 2632 2036 moveto 2588 2032 lineto stroke 2588 2032 moveto 2528 2032 lineto stroke 2528 2032 moveto 2452 2028 lineto stroke 2452 2028 moveto 2360 2024 lineto stroke 2360 2024 moveto 2276 2020 lineto stroke 2276 2020 moveto 2180 2016 lineto stroke 2180 2016 moveto 2064 2012 lineto stroke 2064 2012 moveto 1932 2008 lineto stroke 1932 2008 moveto 1776 2004 lineto stroke 1776 2004 moveto 1608 1996 lineto stroke 1608 1996 moveto 1432 1988 lineto stroke 1432 1988 moveto 1264 1976 lineto stroke 1264 1976 moveto 1072 1964 lineto stroke 1072 1964 moveto 928 1948 lineto stroke 928 1948 moveto 836 1932 lineto stroke 836 1932 moveto 784 1916 lineto stroke 784 1916 moveto 744 1892 lineto stroke 744 1892 moveto 736 1868 lineto stroke 736 1868 moveto 736 1844 lineto stroke 736 1844 moveto 740 1820 lineto stroke 740 1820 moveto 760 1748 lineto stroke 760 1748 moveto 780 1684 lineto stroke 780 1684 moveto 800 1624 lineto stroke 800 1624 moveto 820 1572 lineto stroke 820 1572 moveto 852 1484 lineto stroke 852 1484 moveto 880 1408 lineto stroke 880 1408 moveto 908 1340 lineto stroke 908 1340 moveto 932 1284 lineto stroke 932 1284 moveto 964 1216 lineto stroke 964 1216 moveto 996 1156 lineto stroke 996 1156 moveto 1020 1104 lineto stroke 1020 1104 moveto 1048 1060 lineto stroke 1048 1060 moveto 1076 1012 lineto stroke 1076 1012 moveto 1104 968 lineto stroke 1104 968 moveto 1132 932 lineto stroke 1132 932 moveto 1156 900 lineto stroke 1156 900 moveto 1192 856 lineto stroke 1192 856 moveto 1224 824 lineto stroke 1224 824 moveto 1256 792 lineto stroke 1256 792 moveto 1288 768 lineto stroke 1288 768 moveto 1340 732 lineto stroke 1340 732 moveto 1392 708 lineto stroke 1392 708 moveto 1440 696 lineto stroke 1440 696 moveto 1488 688 lineto stroke 1488 688 moveto 1548 688 lineto stroke 1548 688 moveto 1604 700 lineto stroke 1604 700 moveto 1660 720 lineto stroke 1660 720 moveto 1712 744 lineto stroke 1712 744 moveto 1768 776 lineto stroke 1768 776 moveto 1820 816 lineto stroke 1820 816 moveto 1868 856 lineto stroke 1868 856 moveto 1916 896 lineto stroke 1916 896 moveto 1968 948 lineto stroke 1968 948 moveto 2012 996 lineto stroke 2012 996 moveto 2056 1044 lineto stroke 2056 1044 moveto 2096 1092 lineto stroke 2096 1092 moveto 2148 1152 lineto stroke 2148 1152 moveto 2192 1212 lineto stroke 2192 1212 moveto 2236 1264 lineto stroke 2236 1264 moveto 2272 1316 lineto stroke 2272 1316 moveto 2328 1392 lineto stroke 2328 1392 moveto 2376 1456 lineto stroke 2376 1456 moveto 2420 1512 lineto stroke 2420 1512 moveto 2456 1564 lineto stroke 2456 1564 moveto 2492 1616 lineto stroke 2492 1616 moveto 2524 1660 lineto stroke 2524 1660 moveto 2552 1696 lineto stroke 2552 1696 moveto 2576 1728 lineto stroke 2576 1728 moveto 2604 1760 lineto stroke 2604 1760 moveto 2624 1788 lineto stroke 2624 1788 moveto 2640 1812 lineto stroke 2640 1812 moveto 2656 1832 lineto stroke 2656 1832 moveto 2672 1852 lineto stroke 2672 1852 moveto 2688 1872 lineto stroke 2688 1872 moveto 2700 1888 lineto stroke 2700 1888 moveto 2712 1900 lineto stroke 2712 1900 moveto 2724 1916 lineto stroke 2724 1916 moveto 2736 1928 lineto stroke 2736 1928 moveto 2744 1940 lineto stroke 2744 1940 moveto 2752 1948 lineto stroke 2752 1948 moveto 2760 1960 lineto stroke 2760 1960 moveto 2768 1968 lineto stroke 2768 1968 moveto 2776 1976 lineto stroke 2776 1976 moveto 2780 1984 lineto stroke 2780 1984 moveto 2788 1992 lineto stroke 2788 1992 moveto 2792 1996 lineto stroke 2792 1996 moveto 2800 2008 lineto stroke 2800 2008 moveto 2808 2016 lineto stroke 2808 2016 moveto 2816 2020 lineto stroke 2816 2020 moveto 2820 2028 lineto stroke 2820 2028 moveto 2824 2032 lineto stroke 2824 2032 moveto 2860 2072 moveto 2860 2072 lineto stroke 2860 2072 moveto 2860 2072 moveto 2868 2080 lineto stroke 2868 2080 moveto 2872 2084 lineto stroke 2872 2084 moveto 2880 2092 lineto stroke 2880 2092 moveto 2888 2100 lineto stroke 2888 2100 moveto 2896 2112 lineto stroke 2896 2112 moveto 2904 2116 lineto stroke 2904 2116 moveto 2912 2128 lineto stroke 2912 2128 moveto 2920 2132 lineto stroke 2920 2132 moveto 2928 2140 lineto stroke 2928 2140 moveto 2932 2144 lineto stroke 2932 2144 moveto 2940 2152 lineto stroke 2940 2152 moveto 2948 2156 lineto stroke 2948 2156 moveto 2956 2164 lineto stroke 2956 2164 moveto 2960 2172 lineto stroke 2960 2172 moveto 2968 2176 lineto stroke 2968 2176 moveto 2976 2184 lineto stroke 2976 2184 moveto 2988 2192 lineto stroke 2988 2192 moveto 2996 2200 lineto stroke 2996 2200 moveto 3004 2204 lineto stroke 3004 2204 moveto 3012 2212 lineto stroke 3012 2212 moveto 3024 2224 lineto stroke 3024 2224 moveto 3032 2228 lineto stroke 3032 2228 moveto 3040 2232 lineto stroke 3040 2232 moveto 3048 2240 lineto stroke 3048 2240 moveto 3056 2248 lineto stroke 3056 2248 moveto 3064 2252 lineto stroke 3064 2252 moveto 3076 2260 lineto stroke 3076 2260 moveto 3088 2268 lineto stroke 3088 2268 moveto 3104 2276 lineto stroke 3104 2276 moveto 3112 2280 lineto stroke 3112 2280 moveto 3124 2288 lineto stroke 3124 2288 moveto 3140 2292 lineto stroke 3140 2292 moveto 3160 2300 lineto stroke 3160 2300 moveto 3176 2308 lineto stroke 3176 2308 moveto 3200 2316 lineto stroke 3200 2316 moveto 3228 2324 lineto stroke 3228 2324 moveto 3256 2332 lineto stroke 3256 2332 moveto 3268 2340 lineto stroke 3268 2340 moveto 3276 2348 lineto stroke 3276 2348 moveto 3272 2360 lineto stroke 3272 2360 moveto 3260 2364 lineto stroke 3260 2364 moveto 3248 2364 lineto stroke 3248 2364 moveto 3228 2368 lineto stroke 3228 2368 moveto 3204 2368 lineto stroke 3204 2368 moveto 3184 2368 lineto stroke 3184 2368 moveto 3160 2368 lineto stroke 3160 2368 moveto 3132 2368 lineto stroke 3132 2368 moveto 3096 2364 lineto stroke 3096 2364 moveto 3064 2364 lineto stroke 3064 2364 moveto 3024 2360 lineto stroke 3024 2360 moveto 2972 2360 lineto stroke 2972 2360 moveto 2908 2356 lineto stroke 2908 2356 moveto 2848 2352 lineto stroke 2848 2352 moveto 2772 2348 lineto stroke 2772 2348 moveto 2680 2344 lineto stroke 2680 2344 moveto 2552 2336 lineto stroke 2552 2336 moveto 2440 2332 lineto stroke 2440 2332 moveto 2304 2328 lineto stroke 2304 2328 moveto 2132 2320 lineto stroke 2132 2320 moveto 1932 2312 lineto stroke 1932 2312 moveto 1692 2304 lineto stroke 1692 2304 moveto 1440 2292 lineto stroke 1440 2292 moveto 1200 2276 lineto stroke 1200 2276 moveto 996 2260 lineto stroke 996 2260 moveto 792 2236 lineto stroke 792 2236 moveto 696 2208 lineto stroke 696 2208 moveto 660 2184 lineto stroke 660 2184 moveto 652 2156 lineto stroke 652 2156 moveto 664 2072 lineto stroke 664 2072 moveto 684 1996 lineto stroke 684 1996 moveto 704 1924 lineto stroke 704 1924 moveto 724 1860 lineto stroke 724 1860 moveto 772 1708 lineto stroke 772 1708 moveto 816 1584 lineto stroke 816 1584 moveto 852 1484 lineto stroke 852 1484 moveto 888 1396 lineto stroke 888 1396 moveto 932 1288 lineto stroke 932 1288 moveto 972 1200 lineto stroke 972 1200 moveto 1008 1128 lineto stroke 1008 1128 moveto 1044 1068 lineto stroke 1044 1068 moveto 1096 984 lineto stroke 1096 984 moveto 1144 916 lineto stroke 1144 916 moveto 1188 860 lineto stroke 1188 860 moveto 1228 816 lineto stroke 1228 816 moveto 1304 756 lineto stroke 1304 756 moveto 1372 716 lineto stroke 1372 716 moveto 1440 696 lineto stroke 1440 696 moveto 1504 688 lineto stroke 1504 688 moveto 1580 696 lineto stroke 1580 696 moveto 1656 716 lineto stroke 1656 716 moveto 1724 748 lineto stroke 1724 748 moveto 1788 792 lineto stroke 1788 792 moveto 1860 848 lineto stroke 1860 848 moveto 1928 908 lineto stroke 1928 908 moveto 1988 968 lineto stroke 1988 968 moveto 2044 1032 lineto stroke 2044 1032 moveto 2124 1128 lineto stroke 2124 1128 moveto 2196 1216 lineto stroke 2196 1216 moveto 2256 1296 lineto stroke 2256 1296 moveto 2312 1364 lineto stroke 2312 1364 moveto 2384 1464 lineto stroke 2384 1464 moveto 2440 1544 lineto stroke 2440 1544 moveto 2488 1608 lineto stroke 2488 1608 moveto 2528 1664 lineto stroke 2528 1664 moveto 2568 1716 lineto stroke 2568 1716 moveto 2604 1760 lineto stroke 2604 1760 moveto 2628 1796 lineto stroke 2628 1796 moveto 2652 1824 lineto stroke 2652 1824 moveto 2676 1856 lineto stroke 2676 1856 moveto 2696 1884 lineto stroke 2696 1884 moveto 2712 1904 lineto stroke 2712 1904 moveto 2724 1916 lineto stroke 2724 1916 moveto 2744 1940 lineto stroke 2744 1940 moveto 2756 1952 lineto stroke 2756 1952 moveto 2764 1964 lineto stroke 2764 1964 moveto 2772 1976 lineto stroke 2772 1976 moveto 2784 1988 lineto stroke 2784 1988 moveto 2792 1996 lineto stroke 2792 1996 moveto 2796 2004 lineto stroke 2796 2004 moveto 2808 2016 lineto stroke 2808 2016 moveto 2816 2024 lineto stroke 2816 2024 moveto 2824 2032 lineto stroke 2824 2032 moveto 2828 2036 lineto stroke 2828 2036 moveto 2848 2060 moveto 2848 2060 lineto stroke 2848 2060 moveto 2848 2060 moveto 2856 2064 lineto stroke 2856 2064 moveto 2860 2072 lineto stroke 2860 2072 moveto 2868 2072 lineto stroke 2868 2072 moveto 2884 2076 lineto stroke 2884 2076 moveto 2900 2076 lineto stroke 2900 2076 moveto 2936 2076 lineto stroke 2936 2076 moveto 2980 2080 lineto stroke 2980 2080 moveto 3048 2084 lineto stroke 3048 2084 moveto 3144 2088 lineto stroke 3144 2088 moveto 3264 2096 lineto stroke 3264 2096 moveto 3388 2104 lineto stroke 3388 2104 moveto 3500 2120 lineto stroke 3500 2120 moveto 3580 2132 lineto stroke 3580 2132 moveto 3628 2148 lineto stroke 3628 2148 moveto 3656 2168 lineto stroke 3656 2168 moveto 3664 2184 lineto stroke 3664 2184 moveto 3656 2204 lineto stroke 3656 2204 moveto 3648 2220 lineto stroke 3648 2220 moveto 3616 2256 lineto stroke 3616 2256 moveto 3584 2284 lineto stroke 3584 2284 moveto 3552 2304 lineto stroke 3552 2304 moveto 3524 2324 lineto stroke 3524 2324 moveto 3488 2344 lineto stroke 3488 2344 moveto 3452 2356 lineto stroke 3452 2356 moveto 3420 2368 lineto stroke 3420 2368 moveto 3384 2376 lineto stroke 3384 2376 moveto 3360 2380 lineto stroke 3360 2380 moveto 3336 2380 lineto stroke 3336 2380 moveto 3308 2384 lineto stroke 3308 2384 moveto 3276 2384 lineto stroke 3276 2384 moveto 3256 2380 lineto stroke 3256 2380 moveto 3232 2380 lineto stroke 3232 2380 moveto 3204 2380 lineto stroke 3204 2380 moveto 3168 2376 lineto stroke 3168 2376 moveto 3144 2376 lineto stroke 3144 2376 moveto 3116 2372 lineto stroke 3116 2372 moveto 3076 2368 lineto stroke 3076 2368 moveto 3032 2364 lineto stroke 3032 2364 moveto 2984 2360 lineto stroke 2984 2360 moveto 2920 2356 lineto stroke 2920 2356 moveto 2836 2352 lineto stroke 2836 2352 moveto 2716 2344 lineto stroke 2716 2344 moveto 2628 2340 lineto stroke 2628 2340 moveto 2516 2336 lineto stroke 2516 2336 moveto 2376 2328 lineto stroke 2376 2328 moveto 2200 2320 lineto stroke 2200 2320 moveto 1940 2312 lineto stroke 1940 2312 moveto 1628 2296 lineto stroke 1628 2296 moveto 1300 2280 lineto stroke 1300 2280 moveto 1020 2260 lineto stroke 1020 2260 moveto 780 2228 lineto stroke 780 2228 moveto 684 2196 lineto stroke 684 2196 moveto 656 2164 lineto stroke 656 2164 moveto 652 2132 lineto stroke 652 2132 moveto 676 2020 lineto stroke 676 2020 moveto 708 1920 lineto stroke 708 1920 moveto 736 1828 lineto stroke 736 1828 moveto 760 1748 lineto stroke 760 1748 moveto 808 1604 lineto stroke 808 1604 moveto 852 1488 lineto stroke 852 1488 moveto 888 1392 lineto stroke 888 1392 moveto 924 1308 lineto stroke 924 1308 moveto 972 1200 lineto stroke 972 1200 moveto 1016 1116 lineto stroke 1016 1116 moveto 1056 1044 lineto stroke 1056 1044 moveto 1092 988 lineto stroke 1092 988 moveto 1156 900 lineto stroke 1156 900 moveto 1212 836 lineto stroke 1212 836 moveto 1264 784 lineto stroke 1264 784 moveto 1316 748 lineto stroke 1316 748 moveto 1400 708 lineto stroke 1400 708 moveto 1480 688 lineto stroke 1480 688 moveto 1552 688 lineto stroke 1552 688 moveto 1620 704 lineto stroke 1620 704 moveto 1700 736 lineto stroke 1700 736 moveto 1772 780 lineto stroke 1772 780 moveto 1840 828 lineto stroke 1840 828 moveto 1900 884 lineto stroke 1900 884 moveto 1976 960 lineto stroke 1976 960 moveto 2048 1032 lineto stroke 2048 1032 moveto 2108 1108 lineto stroke 2108 1108 moveto 2164 1176 lineto stroke 2164 1176 moveto 2252 1288 lineto stroke 2252 1288 moveto 2324 1380 lineto stroke 2324 1380 moveto 2380 1464 lineto stroke 2380 1464 moveto 2432 1532 lineto stroke 2432 1532 moveto 2488 1608 lineto stroke 2488 1608 moveto 2536 1672 lineto stroke 2536 1672 moveto 2572 1720 lineto stroke 2572 1720 moveto 2600 1760 lineto stroke 2600 1760 moveto 2636 1804 lineto stroke 2636 1804 moveto 2660 1836 lineto stroke 2660 1836 moveto 2684 1864 lineto stroke 2684 1864 moveto 2700 1884 lineto stroke 2700 1884 moveto 2720 1912 lineto stroke 2720 1912 moveto 2736 1932 lineto stroke 2736 1932 moveto 2752 1948 lineto stroke 2752 1948 moveto 2760 1960 lineto stroke 2760 1960 moveto 2776 1976 lineto stroke 2776 1976 moveto 2784 1988 lineto stroke 2784 1988 moveto 2792 1996 lineto stroke 2792 1996 moveto 2796 2004 lineto stroke 2796 2004 moveto 2808 2012 lineto stroke 2808 2012 moveto 2812 2020 lineto stroke 2812 2020 moveto 2820 2028 lineto stroke 2820 2028 moveto 2824 2032 lineto stroke 2824 2032 moveto showpage auto/07p/doc/include/ab3.ps0000640000175000017500000004755613570013207013464 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR (0) 715 460 PR 972 460 moveto (0) 1027 460 PR (.) 1082 460 PR (0) 1137 460 PR (2) 1192 460 PR (5) 1247 460 PR 1132 540 moveto 1132 2600 lineto stroke 1132 2600 moveto 1504 460 moveto (0) 1559 460 PR (.) 1614 460 PR (0) 1669 460 PR (5) 1724 460 PR (0) 1779 460 PR 1664 540 moveto 1664 2600 lineto stroke 1664 2600 moveto 2036 460 moveto (0) 2091 460 PR (.) 2146 460 PR (0) 2201 460 PR (7) 2256 460 PR (5) 2311 460 PR 2196 540 moveto 2196 2600 lineto stroke 2196 2600 moveto 2572 460 moveto (0) 2627 460 PR (.) 2682 460 PR (1) 2737 460 PR (0) 2792 460 PR (0) 2847 460 PR 2732 540 moveto 2732 2600 lineto stroke 2732 2600 moveto 3104 460 moveto (0) 3159 460 PR (.) 3214 460 PR (1) 3269 460 PR (2) 3324 460 PR (5) 3379 460 PR 3264 540 moveto 3264 2600 lineto stroke 3264 2600 moveto 3636 460 moveto (0) 3691 460 PR (.) 3746 460 PR (1) 3801 460 PR (5) 3856 460 PR (0) 3911 460 PR 3796 540 moveto 3796 2600 lineto stroke 3796 2600 moveto 4 600 moveto (0) 389 600 PR (.) 444 600 PR (0) 499 600 PR 4 1000 moveto (0) 389 1000 PR (.) 444 1000 PR (5) 499 1000 PR 540 1000 moveto 3800 1000 lineto stroke 3800 1000 moveto 4 1400 moveto (1) 389 1400 PR (.) 444 1400 PR (0) 499 1400 PR 540 1400 moveto 3800 1400 lineto stroke 3800 1400 moveto 4 1800 moveto (1) 389 1800 PR (.) 444 1800 PR (5) 499 1800 PR 540 1800 moveto 3800 1800 lineto stroke 3800 1800 moveto 4 2200 moveto (2) 389 2200 PR (.) 444 2200 PR (0) 499 2200 PR 540 2200 moveto 3800 2200 lineto stroke 3800 2200 moveto 4 2600 moveto (2) 389 2600 PR (.) 444 2600 PR (5) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 2852 2200 moveto 2852 2200 lineto stroke 2852 2200 moveto 2852 2200 moveto 2872 2212 lineto stroke 2872 2212 moveto 2892 2224 moveto 2912 2240 lineto stroke 2912 2240 moveto 2932 2252 moveto 2944 2264 lineto stroke 2944 2264 moveto 2944 2264 moveto 2948 2268 lineto stroke 2948 2268 moveto 2968 2280 moveto 2980 2288 lineto stroke 2980 2288 moveto 2980 2288 moveto 2988 2292 lineto stroke 2988 2292 moveto 3008 2308 moveto 3012 2312 lineto stroke 3012 2312 moveto 3012 2312 moveto 3028 2320 lineto stroke 3028 2320 moveto 3048 2332 moveto 3048 2336 lineto stroke 3048 2336 moveto 3048 2336 moveto 3068 2348 lineto stroke 3068 2348 moveto 3084 2360 moveto 3104 2372 lineto stroke 3104 2372 moveto 3124 2388 moveto 3144 2400 lineto stroke 3144 2400 moveto 3164 2412 moveto 3184 2424 lineto stroke 3184 2424 moveto 3184 2424 moveto 3184 2424 lineto stroke 3184 2424 moveto 3204 2436 moveto 3216 2444 lineto stroke 3216 2444 moveto 3216 2444 moveto 3224 2448 lineto stroke 3224 2448 moveto 3244 2460 moveto 3248 2464 lineto stroke 3248 2464 moveto 3248 2464 moveto 3264 2476 lineto stroke 3264 2476 moveto 3284 2488 moveto 3304 2500 lineto stroke 3304 2500 moveto 3324 2512 moveto 3340 2520 lineto stroke 3340 2520 moveto 3340 2520 moveto 3344 2524 lineto stroke 3344 2524 moveto 3368 2536 moveto 3368 2536 lineto stroke 3368 2536 moveto 3368 2536 moveto 3388 2544 lineto stroke 3388 2544 moveto 3408 2556 moveto 3416 2560 lineto stroke 3416 2560 moveto 3416 2560 moveto 3428 2568 lineto stroke 3428 2568 moveto 3448 2580 moveto 3452 2580 lineto stroke 3452 2580 moveto 3452 2580 moveto 3464 2588 lineto stroke 3464 2588 moveto 3464 2588 moveto 3468 2592 lineto stroke 3468 2592 moveto 3480 2596 moveto 3472 2592 lineto stroke 3472 2592 moveto 3472 2592 moveto 3464 2588 lineto stroke 3464 2588 moveto 3464 2588 moveto 3456 2584 lineto stroke 3456 2584 moveto 3436 2576 moveto 3420 2568 lineto stroke 3420 2568 moveto 3420 2568 moveto 3412 2564 lineto stroke 3412 2564 moveto 3392 2556 moveto 3384 2552 lineto stroke 3384 2552 moveto 3384 2552 moveto 3372 2548 lineto stroke 3372 2548 moveto 3348 2536 moveto 3344 2536 lineto stroke 3344 2536 moveto 3344 2536 moveto 3328 2528 lineto stroke 3328 2528 moveto 3304 2520 moveto 3296 2516 lineto stroke 3296 2516 moveto 3296 2516 moveto 3284 2512 lineto stroke 3284 2512 moveto 3260 2500 moveto 3240 2492 lineto stroke 3240 2492 moveto 3220 2484 moveto 3196 2476 lineto stroke 3196 2476 moveto 3176 2464 moveto 3152 2456 lineto stroke 3152 2456 moveto 3132 2448 moveto 3108 2440 lineto stroke 3108 2440 moveto 3088 2432 moveto 3064 2420 lineto stroke 3064 2420 moveto 3044 2412 moveto 3040 2412 lineto stroke 3040 2412 moveto 3040 2412 moveto 3020 2404 lineto stroke 3020 2404 moveto 3000 2396 moveto 2976 2388 lineto stroke 2976 2388 moveto 2956 2380 moveto 2932 2368 lineto stroke 2932 2368 moveto 2912 2360 moveto 2904 2356 lineto stroke 2904 2356 moveto 2904 2356 moveto 2888 2352 lineto stroke 2888 2352 moveto 2868 2344 moveto 2844 2336 lineto stroke 2844 2336 moveto 2824 2328 moveto 2800 2316 lineto stroke 2800 2316 moveto 2780 2308 moveto 2756 2300 lineto stroke 2756 2300 moveto 2736 2292 moveto 2712 2284 lineto stroke 2712 2284 moveto 2692 2276 moveto 2692 2276 lineto stroke 2692 2276 moveto 2692 2276 moveto 2668 2268 lineto stroke 2668 2268 moveto 2648 2256 moveto 2628 2248 lineto stroke 2628 2248 moveto 2604 2240 moveto 2584 2232 lineto stroke 2584 2232 moveto 2560 2224 moveto 2540 2216 lineto stroke 2540 2216 moveto 2516 2208 moveto 2496 2196 lineto stroke 2496 2196 moveto 2472 2188 moveto 2452 2180 lineto stroke 2452 2180 moveto 2428 2172 moveto 2408 2164 lineto stroke 2408 2164 moveto 2384 2156 moveto 2364 2144 lineto stroke 2364 2144 moveto 2340 2136 moveto 2320 2128 lineto stroke 2320 2128 moveto 2296 2120 moveto 2276 2112 lineto stroke 2276 2112 moveto 2252 2100 moveto 2232 2092 lineto stroke 2232 2092 moveto 2208 2084 moveto 2188 2076 lineto stroke 2188 2076 moveto 2164 2064 moveto 2144 2056 lineto stroke 2144 2056 moveto 2124 2048 moveto 2100 2040 lineto stroke 2100 2040 moveto 2080 2032 moveto 2056 2020 lineto stroke 2056 2020 moveto 2036 2012 moveto 2012 2004 lineto stroke 2012 2004 moveto 1992 1992 moveto 1968 1984 lineto stroke 1968 1984 moveto 1948 1976 moveto 1928 1968 lineto stroke 1928 1968 moveto 1904 1956 moveto 1884 1948 lineto stroke 1884 1948 moveto 1860 1940 moveto 1840 1928 lineto stroke 1840 1928 moveto 1820 1920 moveto 1796 1908 lineto stroke 1796 1908 moveto 1776 1900 moveto 1752 1892 lineto stroke 1752 1892 moveto 1732 1880 moveto 1712 1872 lineto stroke 1712 1872 moveto 1688 1860 moveto 1668 1852 lineto stroke 1668 1852 moveto 1648 1840 moveto 1624 1832 lineto stroke 1624 1832 moveto 1604 1820 moveto 1584 1812 lineto stroke 1584 1812 moveto 1560 1800 moveto 1540 1792 lineto stroke 1540 1792 moveto 1520 1780 moveto 1496 1768 lineto stroke 1496 1768 moveto 1476 1760 moveto 1456 1748 lineto stroke 1456 1748 moveto 1436 1736 moveto 1412 1728 lineto stroke 1412 1728 moveto 1392 1716 moveto 1384 1712 lineto stroke 1384 1712 moveto 1384 1712 moveto 1372 1704 lineto stroke 1372 1704 moveto 1352 1692 moveto 1332 1680 lineto stroke 1332 1680 moveto 1312 1672 moveto 1288 1660 lineto stroke 1288 1660 moveto 1268 1648 moveto 1256 1640 lineto stroke 1256 1640 moveto 1256 1640 moveto 1248 1636 lineto stroke 1248 1636 moveto 1228 1624 moveto 1208 1612 lineto stroke 1208 1612 moveto 1188 1600 moveto 1168 1588 lineto stroke 1168 1588 moveto 1148 1576 moveto 1148 1572 lineto stroke 1148 1572 moveto 1148 1572 moveto 1128 1560 lineto stroke 1128 1560 moveto 1108 1548 moveto 1088 1536 lineto stroke 1088 1536 moveto 1068 1520 moveto 1056 1512 lineto stroke 1056 1512 moveto 1056 1512 moveto 1052 1508 lineto stroke 1052 1508 moveto 1032 1496 moveto 1012 1480 lineto stroke 1012 1480 moveto 992 1464 moveto 976 1452 lineto stroke 976 1452 moveto 976 1452 moveto 976 1452 lineto stroke 976 1452 moveto 956 1436 moveto 940 1420 lineto stroke 940 1420 moveto 920 1408 moveto 908 1396 lineto stroke 908 1396 moveto 908 1396 moveto 904 1392 lineto stroke 904 1392 moveto 884 1376 moveto 868 1360 lineto stroke 868 1360 moveto 852 1344 moveto 836 1324 lineto stroke 836 1324 moveto 820 1308 moveto 808 1296 lineto stroke 808 1296 moveto 808 1296 moveto 804 1292 lineto stroke 804 1292 moveto 788 1272 moveto 772 1252 lineto stroke 772 1252 moveto 760 1236 moveto 744 1216 lineto stroke 744 1216 moveto 732 1196 moveto 720 1176 lineto stroke 720 1176 moveto 708 1156 moveto 696 1136 lineto stroke 696 1136 moveto 684 1116 moveto 676 1092 lineto stroke 676 1092 moveto 668 1072 moveto 656 1052 lineto stroke 656 1052 moveto 656 1052 moveto 656 1048 lineto stroke 656 1048 moveto 648 1028 moveto 644 1016 lineto stroke 644 1016 moveto 644 1016 moveto 644 1004 lineto stroke 644 1004 moveto 636 984 moveto 632 960 lineto stroke 632 960 moveto 624 936 moveto 620 912 lineto stroke 620 912 moveto 616 888 moveto 612 868 lineto stroke 612 868 moveto 612 844 moveto 608 820 lineto stroke 608 820 moveto 608 820 moveto 608 820 lineto stroke 608 820 moveto 604 796 moveto 604 788 lineto stroke 604 788 moveto 604 788 moveto 604 772 lineto stroke 604 772 moveto 604 748 moveto 600 724 lineto stroke 600 724 moveto 600 724 moveto 600 724 lineto stroke 600 724 moveto 600 700 moveto 600 696 lineto stroke 600 696 moveto 600 696 moveto 600 680 lineto stroke 600 680 moveto 600 656 moveto 600 632 lineto stroke 600 632 moveto 600 632 moveto 600 632 lineto stroke 600 632 moveto 600 608 moveto 600 600 lineto stroke 600 600 moveto 600 600 moveto 600 600 lineto stroke 600 600 moveto 2852 2200 moveto 2852 2200 lineto stroke 2852 2200 moveto 2852 2200 moveto 2836 2184 lineto stroke 2836 2184 moveto 2816 2168 moveto 2796 2156 lineto stroke 2796 2156 moveto 2780 2140 moveto 2764 2132 lineto stroke 2764 2132 moveto 2764 2132 moveto 2760 2128 lineto stroke 2760 2128 moveto 2740 2112 moveto 2720 2100 lineto stroke 2720 2100 moveto 2704 2084 moveto 2684 2068 lineto stroke 2684 2068 moveto 2664 2056 moveto 2664 2056 lineto stroke 2664 2056 moveto 2664 2056 moveto 2648 2040 lineto stroke 2648 2040 moveto 2628 2028 moveto 2616 2016 lineto stroke 2616 2016 moveto 2616 2016 moveto 2612 2012 lineto stroke 2612 2012 moveto 2592 1996 moveto 2572 1980 lineto stroke 2572 1980 moveto 2556 1968 moveto 2536 1952 lineto stroke 2536 1952 moveto 2520 1936 moveto 2500 1920 lineto stroke 2500 1920 moveto 2484 1908 moveto 2476 1900 lineto stroke 2476 1900 moveto 2476 1900 moveto 2464 1892 lineto stroke 2464 1892 moveto 2448 1876 moveto 2432 1864 lineto stroke 2432 1864 moveto 2432 1864 moveto 2428 1860 lineto stroke 2428 1860 moveto 2412 1844 moveto 2392 1832 lineto stroke 2392 1832 moveto 2376 1816 moveto 2356 1800 lineto stroke 2356 1800 moveto 2340 1784 moveto 2320 1768 lineto stroke 2320 1768 moveto 2304 1752 moveto 2288 1736 lineto stroke 2288 1736 moveto 2268 1720 moveto 2252 1704 lineto stroke 2252 1704 moveto 2236 1688 moveto 2216 1672 lineto stroke 2216 1672 moveto 2200 1656 moveto 2180 1640 lineto stroke 2180 1640 moveto 2164 1624 moveto 2148 1608 lineto stroke 2148 1608 moveto 2132 1592 moveto 2112 1576 lineto stroke 2112 1576 moveto 2096 1560 moveto 2084 1548 lineto stroke 2084 1548 moveto 2084 1548 moveto 2080 1544 lineto stroke 2080 1544 moveto 2060 1528 moveto 2044 1512 lineto stroke 2044 1512 moveto 2028 1496 moveto 2020 1488 lineto stroke 2020 1488 moveto 2020 1488 moveto 2012 1480 lineto stroke 2012 1480 moveto 1992 1464 moveto 1976 1448 lineto stroke 1976 1448 moveto 1960 1432 moveto 1960 1432 lineto stroke 1960 1432 moveto 1960 1432 moveto 1944 1412 lineto stroke 1944 1412 moveto 1928 1396 moveto 1908 1380 lineto stroke 1908 1380 moveto 1892 1364 moveto 1876 1348 lineto stroke 1876 1348 moveto 1860 1332 moveto 1844 1312 lineto stroke 1844 1312 moveto 1828 1296 moveto 1812 1280 lineto stroke 1812 1280 moveto 1796 1264 moveto 1776 1244 lineto stroke 1776 1244 moveto 1760 1228 moveto 1756 1220 lineto stroke 1756 1220 moveto 1756 1220 moveto 1744 1212 lineto stroke 1744 1212 moveto 1728 1196 moveto 1712 1176 lineto stroke 1712 1176 moveto 1696 1160 moveto 1680 1144 lineto stroke 1680 1144 moveto 1664 1124 moveto 1648 1108 lineto stroke 1648 1108 moveto 1632 1092 moveto 1616 1072 lineto stroke 1616 1072 moveto 1600 1056 moveto 1588 1044 lineto stroke 1588 1044 moveto 1588 1044 moveto 1584 1040 lineto stroke 1584 1040 moveto 1568 1020 moveto 1552 1004 lineto stroke 1552 1004 moveto 1536 988 moveto 1520 968 lineto stroke 1520 968 moveto 1504 952 moveto 1488 932 lineto stroke 1488 932 moveto 1476 916 moveto 1460 900 lineto stroke 1460 900 moveto 1444 880 moveto 1428 864 lineto stroke 1428 864 moveto 1412 844 moveto 1396 828 lineto stroke 1396 828 moveto 1380 808 moveto 1364 792 lineto stroke 1364 792 moveto 1352 772 moveto 1348 772 lineto stroke 1348 772 moveto 1348 772 moveto 1336 756 lineto stroke 1336 756 moveto 1320 736 moveto 1304 720 lineto stroke 1304 720 moveto 1288 700 moveto 1276 684 lineto stroke 1276 684 moveto 1260 664 moveto 1244 648 lineto stroke 1244 648 moveto 1228 628 moveto 1216 612 lineto stroke 1216 612 moveto 3392 2200 moveto 3392 2200 lineto stroke 3392 2200 moveto 3392 2200 moveto 3368 2192 lineto stroke 3368 2192 moveto 3344 2188 moveto 3320 2184 lineto stroke 3320 2184 moveto 3300 2176 moveto 3276 2172 lineto stroke 3276 2172 moveto 3252 2168 moveto 3228 2164 lineto stroke 3228 2164 moveto 3208 2156 moveto 3184 2152 lineto stroke 3184 2152 moveto 3160 2148 moveto 3136 2140 lineto stroke 3136 2140 moveto 3116 2136 moveto 3108 2136 lineto stroke 3108 2136 moveto 3108 2136 moveto 3092 2132 lineto stroke 3092 2132 moveto 3068 2124 moveto 3044 2120 lineto stroke 3044 2120 moveto 3024 2116 moveto 3000 2108 lineto stroke 3000 2108 moveto 2976 2104 moveto 2968 2104 lineto stroke 2968 2104 moveto 2968 2104 moveto 2952 2100 lineto stroke 2952 2100 moveto 2932 2092 moveto 2908 2088 lineto stroke 2908 2088 moveto 2884 2084 moveto 2860 2076 lineto stroke 2860 2076 moveto 2840 2072 moveto 2816 2068 lineto stroke 2816 2068 moveto 2792 2060 moveto 2768 2056 lineto stroke 2768 2056 moveto 2748 2048 moveto 2724 2044 lineto stroke 2724 2044 moveto 2700 2036 moveto 2680 2032 lineto stroke 2680 2032 moveto 2656 2028 moveto 2632 2020 lineto stroke 2632 2020 moveto 2608 2016 moveto 2588 2008 lineto stroke 2588 2008 moveto 2564 2004 moveto 2540 1996 lineto stroke 2540 1996 moveto 2520 1992 moveto 2496 1984 lineto stroke 2496 1984 moveto 2472 1980 moveto 2452 1972 lineto stroke 2452 1972 moveto 2428 1968 moveto 2408 1964 lineto stroke 2408 1964 moveto 2408 1964 moveto 2404 1960 lineto stroke 2404 1960 moveto 2380 1956 moveto 2360 1948 lineto stroke 2360 1948 moveto 2336 1944 moveto 2312 1936 lineto stroke 2312 1936 moveto 2292 1932 moveto 2268 1924 lineto stroke 2268 1924 moveto 2244 1916 moveto 2224 1912 lineto stroke 2224 1912 moveto 2200 1904 moveto 2176 1900 lineto stroke 2176 1900 moveto 2156 1892 moveto 2132 1884 lineto stroke 2132 1884 moveto 2108 1880 moveto 2100 1876 lineto stroke 2100 1876 moveto 2100 1876 moveto 2088 1872 lineto stroke 2088 1872 moveto 2064 1864 moveto 2040 1860 lineto stroke 2040 1860 moveto 2020 1852 moveto 1996 1844 lineto stroke 1996 1844 moveto 1972 1836 moveto 1964 1836 lineto stroke 1964 1836 moveto 1964 1836 moveto 1952 1832 lineto stroke 1952 1832 moveto 1928 1824 moveto 1908 1816 lineto stroke 1908 1816 moveto 1884 1808 moveto 1860 1800 lineto stroke 1860 1800 moveto 1840 1796 moveto 1816 1788 lineto stroke 1816 1788 moveto 1796 1780 moveto 1772 1772 lineto stroke 1772 1772 moveto 1748 1764 moveto 1728 1756 lineto stroke 1728 1756 moveto 1704 1748 moveto 1684 1740 lineto stroke 1684 1740 moveto 1660 1732 moveto 1640 1724 lineto stroke 1640 1724 moveto 1616 1716 moveto 1596 1708 lineto stroke 1596 1708 moveto 1572 1700 moveto 1552 1692 lineto stroke 1552 1692 moveto 1528 1684 moveto 1524 1684 lineto stroke 1524 1684 moveto 1524 1684 moveto 1508 1676 lineto stroke 1508 1676 moveto 1484 1668 moveto 1464 1656 lineto stroke 1464 1656 moveto 1440 1648 moveto 1436 1648 lineto stroke 1436 1648 moveto 1436 1648 moveto 1420 1640 lineto stroke 1420 1640 moveto 1396 1632 moveto 1376 1620 lineto stroke 1376 1620 moveto 1352 1612 moveto 1332 1604 lineto stroke 1332 1604 moveto 1312 1592 moveto 1288 1584 lineto stroke 1288 1584 moveto 1268 1572 moveto 1248 1564 lineto stroke 1248 1564 moveto 1224 1552 moveto 1216 1548 lineto stroke 1216 1548 moveto 1216 1548 moveto 1204 1540 lineto stroke 1204 1540 moveto 1184 1532 moveto 1164 1520 lineto stroke 1164 1520 moveto 1140 1508 moveto 1120 1496 lineto stroke 1120 1496 moveto 1100 1484 moveto 1080 1472 lineto stroke 1080 1472 moveto 1060 1460 moveto 1040 1448 lineto stroke 1040 1448 moveto 1020 1436 moveto 1000 1424 lineto stroke 1000 1424 moveto 980 1412 moveto 968 1404 lineto stroke 968 1404 moveto 968 1404 moveto 960 1396 lineto stroke 960 1396 moveto 940 1384 moveto 924 1368 lineto stroke 924 1368 moveto 904 1356 moveto 884 1340 lineto stroke 884 1340 moveto 868 1324 moveto 868 1324 lineto stroke 868 1324 moveto 868 1324 moveto 852 1308 lineto stroke 852 1308 moveto 832 1292 moveto 828 1288 lineto stroke 828 1288 moveto 828 1288 moveto 816 1276 lineto stroke 816 1276 moveto 800 1260 moveto 792 1256 lineto stroke 792 1256 moveto 792 1256 moveto 784 1244 lineto stroke 784 1244 moveto 768 1224 moveto 764 1220 lineto stroke 764 1220 moveto 764 1220 moveto 752 1208 lineto stroke 752 1208 moveto 740 1188 moveto 724 1168 lineto stroke 724 1168 moveto 712 1148 moveto 700 1132 lineto stroke 700 1132 moveto 700 1132 moveto 700 1128 lineto stroke 700 1128 moveto 688 1108 moveto 684 1104 lineto stroke 684 1104 moveto 684 1104 moveto 676 1088 lineto stroke 676 1088 moveto 668 1068 moveto 660 1048 lineto stroke 660 1048 moveto 660 1048 moveto 660 1044 lineto stroke 660 1044 moveto 652 1024 moveto 644 1000 lineto stroke 644 1000 moveto 644 1000 moveto 644 1000 lineto stroke 644 1000 moveto 636 976 moveto 632 956 lineto stroke 632 956 moveto 632 956 moveto 632 956 lineto stroke 632 956 moveto 624 932 moveto 620 916 lineto stroke 620 916 moveto 620 916 moveto 620 908 lineto stroke 620 908 moveto 616 884 moveto 616 876 lineto stroke 616 876 moveto 616 876 moveto 612 860 lineto stroke 612 860 moveto 612 840 moveto 608 824 lineto stroke 608 824 moveto 608 824 moveto 608 816 lineto stroke 608 816 moveto 604 792 moveto 604 788 lineto stroke 604 788 moveto 604 788 moveto 604 776 lineto stroke 604 776 moveto 604 776 moveto 604 768 lineto stroke 604 768 moveto 604 744 moveto 604 736 lineto stroke 604 736 moveto 604 736 moveto 600 724 lineto stroke 600 724 moveto 600 724 moveto 600 720 lineto stroke 600 720 moveto 600 696 moveto 600 696 lineto stroke 600 696 moveto 600 696 moveto 600 688 lineto stroke 600 688 moveto 600 688 moveto 600 680 lineto stroke 600 680 moveto 3492 2440 moveto 3484 2596 lineto stroke 3484 2596 moveto 3496 2360 moveto (1) 3496 2360 PR 740 752 moveto 600 672 lineto stroke 600 672 moveto 756 764 moveto (4) 756 764 PR 0 3068 moveto showpage auto/07p/doc/include/floquet.fig0000640000175000017500000000111113570013207014572 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 floquet.png 0 600 12660 600 12660 11550 0 11550 0 600 2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 0 1 2 2 1 2.00 120.00 240.00 12225 2175 10950 2850 2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 0 1 2 2 1 2.00 120.00 240.00 8625 5100 9375 4200 2 1 0 2 4 7 50 0 -1 0.000 0 0 -1 0 1 2 2 1 2.00 120.00 240.00 6600 3450 8025 2775 4 0 7 50 0 0 12 0.0000 4 135 570 10275 3075 STEP 1\001 4 0 7 50 0 0 12 0.0000 4 135 570 8100 2700 STEP 3\001 4 0 7 50 0 0 12 0.0000 4 135 570 9150 4125 STEP 2\001 auto/07p/doc/include/helpMenu.png0000640000175000017500000000052213570013207014714 0ustar skskPNG  IHDR*0IDATx=0 95ʌuDP!(umrO}+j`8F|gIENDB`auto/07p/doc/include/styleMenuNew.png0000640000175000017500000000164213570013207015602 0ustar skskPNG  IHDR[mAw~iIDATx;n0E UTz)f2@0K"{p) ){")~D:)Ɩ'F}FNWqXƘrљv۬FA"F C AȈrV"6IsQzq gh 3MFlxMx|~zi[,|C~4_?t*򘇭bs|X):T ՑW~bkb+%?$7X4cKȈ Vz<UT%[KqDM>}MFAhFAhFA}u)tqYeYMyɳ 4B# 4B# 4d$c6etĠ4giZ>c,);5b zSeY29ΧI 3K/O;2ry=R{WGd{& LuhFA巀; ӆ7"}KIENDB`auto/07p/doc/include/fnc_attrrep2.eps0000640000175000017500000011750013570013207015540 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 3 -10 553 431 %%HiResBoundingBox: 3.653991 -10.278006 552.653991 430.721994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmpVlcytd.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin /F15_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font UTWDTW+CMMI12 %!FontType1-1.0: UTWDTW+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /UTWDTW+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 535 694] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 104 /h put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F40 586391EA9A2414C5CD9EE00D483839FC635AD0D52D643D652F74F041D36A563E 1F56922A8B1764174106A1C5AE5CBF55A318CB60C637EC285473AE27A59D0EBE 48933C8F4CCFBF8D51C73FBBF11266BE8EB73A6A05D670D0C5CA78BD51033D66 BA8433EEF7A39741B5DD1A27E4109154A164F1CC583F83A751AA25D020A6F5C7 6140007FE989CB6A5951A1AB688D4F1C9D4747A5BF333AA2054E5B797C5DBB73 EA3566968A41963605E4ED741E57C73F630B7ED98558DAED6A4F11476AFC82D0 38C09076EEB431E3BDF6BEF21976C9CFC324156F398BB6D69787CFE9EFAFB0FA 121C9BAC9D5CE37222C235F130E6F280A2FBE7C28C1FA573EE1562F6DB86A5D3 3E23C60BD3CE42A4C6FC73363EC4758006149241D98A3C55DB990C92F909A022 917171F01EB313E7B6FFBA17D12336D24D6426DEEFE0365F7AE09A3358076BBF 71C4A3B6B638226ABCAD3886BB426401951D6917F7EB11F19142B5DAD8220632 BFD66F67C6FE54DBC0F951DB233C77B6F9DF2640878B2337145D4DF4CF57DDC9 5CFECE287260C71BCC47E4B8C6933926953566AAA92D62002833E8DEABB6D4DE 93710E0F4A90C962DB48BA3D3F7695729A9715F46BA46FE2178F320A98A2C6B0 4AD19FE5B8BF24734E90CE58E1CA0F69602ED3407A55E817E76A25DEFAC59503 4B2542A74A429AFB7E200758CDBD34C3919DFFB78B9785B824E8EF01515B297F 0806A29D6902A37C103FA0BCCF19D547C128DEECB58A2BCC6070FBC9F53332BD 3C037958719F83E5B61F1B93354E3307BA3F5BB06508BE85A4DE22A8E0DE89BE E5FB1447613EF1EF6BBFE6FDE11E5D578E85B74CC6DE498C98BA54C35E6614CB 7E098A61B9C52EB406DAC6099021067F5B63F662841AF1369A5B29FE1CFD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /UTWDTW+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font BHADEJ+CMR12 %!FontType1-1.0: BHADEJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /BHADEJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32B2F2A11AA8625CB85C4 77A982EF5D4404C917CE65889BBB376BF501413117388A323B55321ECB74D1AB E972C198932773975CABB41D0EC9AEA1EB820394235A546A526839FCCEB4674D 222C98F42BA7486CF2BBEB67D92EBB1E8BB33ACF9B3D4777930D70A4679D2B8E 23CF6C05476CC37D90EF54F4E9B90C10DDAAD54336EE2A564F2A6D4AE17B5484 60FCF9A49FF61806D3C40F6A812D6E5BAC5FFBE095A7B72422757D8B17EFE814 7BB0B787C4720EDD3CBC942920A2A97377C38EC940E673538C582855B446A25E 4F1F79F77EAEE240E3C62B95414D61BA7C4C8F19E4897F4ED18BCC1CB77892EF 7D70CC5FB0015E169F3A86899B980CA31F4C2ECAF495701C907552108325C146 71F5D043FBBA107E121CEC333223942AFDE3EAAAD55B4C75D7B90BD0F9C583A7 578E5D5051221C8C20F7C0AFEAE5E42D702B2CFAF93E847BD8543A118B4491FF 68D81D34DFB4598CA90B04E88F865617CA0762104896D68CD215FA7418904D10 6836A0426D7EB074DA1CC97CEF21526A208453CDC8AFF1BE82E638CF37C3E23C 5DCF6A51CFFB9949D84E3807C4B4775593CB9E46E0414D6BB1DDADA4EC205FD2 D2BBFDD1A65C454EC28192DFBD60BB15A3BE1E85D0C568F02576CBC6FC192FFF E8A86882494EB2D7823C78DE793F82D177132CF8E49FBC8D6AB8F935CF5A7993 7794E54C3A5E53717A783191D97F756001A9B4E4AADFE0DFE3B2BF4015EF1D98 C578FA05369305BA3F57A50FC4C3464618048F06265C02BA7E762343F8E5200A 19642EB547A02F84DE81024D9C5E0E108E47563B488E6D4304A2C9641450E45B 75A950FEE3CEF3CCE40404E34D421AA3ECBE4EDCAF39AA140CABEDC789FB4E01 B0F6213DD33665174CF773091293C789DB348B09AC0D85EB399ABB9E3433B885 9C9B0A3FF2F3FE36985CD0D32C0B1948EF1E503B113ACEE962ECA6BACDA2DD4B 86A8B97F4231150ED9FAFAA35803ACEA94DDAF8CCE987DE750BBA5D8B65663A9 24E0A6D4CC2BEC103D0B457508DA8A306DC87FDA30BEAAC0B015E2C85FD013FF 318349BD253B91DBF05D93C6946F7F2BB0BB1C2F92000227C8EEB0573A2BBD4A 29822D28B53F1FA7377E11A1C0961FB4B6D92D6F57783D1A344D5C6F9A8F0085 94A1424837B7B351A76AAB5C58CDC19A530A0BDEA28A5E75A754A49E2581E143 A1B9A83D07B2289E59E2BD5DEDDD6054AFC8CB8D1F86B64770CBA4B4C7B91DF3 DDDDD52E531DDD8A2930D0AE05420BF4AFA1D8EAABF42FEF5BD625F3FEA0B6F8 D54D9A6F4013274233FE97A50AC743BD10FE096EE9606FDAB110BFDE6375C967 0403FE88558B47E5AF44212A5E5E65C3C3C3F19D63046BF6831FF089BDE49925 F9C890899F5A11F56E6EEA2F5A933AA34FBDE23FE9FC5553A2C1B5A63041C510 79D39122F78AD12A3E601414C0B1EAC283BF79F7E773F3728EEA0E757A50A6C3 F63CC342DB170A2D91199D50E3FEA47B741AB5B4556AAA1CC18655459E815301 0E734D332A5082FA14E5510709D956E2CADAEEA1A83CAA1B87867D2BD2283635 E8F48EFBEE3A922659EAC2C22281771513D6E27DC3F394817BF9E1A32B672462 F0BF6ED043B3721DFA8A8A97FCBC7BBF8F6C49300B5D6111F7A2F23E071A4106 3336A761C9B48DD19C4416BA2BBFC255F54C39589A52F18EEF7F45052131B7D1 6C48981C9A952BA1873E96AC8AACF0A363914045D6D792A9ADF6AE90B0D72DDC DDC5A91FD20C2DDA1FFBF5676A762132CA60E3FDF21E3E9BD19E1A6F00165F8D E29FEF86793D372F87C789E26348DE08CE773F6A70EF7372165A7BD6D99229FD 761DC9A78703000C89B3D36EA657CFD76F0E933C705EA7ED7D5D0B4FFF9451AF 88150D2F3236249D356D5AEB9C2C74B14F6D154B23EEC161E592005199D49EE6 80716287BABC18060AC362837704A306C6B77666493AC3A1FBD74E01C962722A 5C031920D307A8E555687D0812B77C0A28B4258E5164BD99AA80B7B9F19B1242 32B97C0D54D728C8987B22DEBD180011D2B7E5D39C52310F3E29184A64E71A35 FAF718941DE3956F5030A3300EF5937112DAD2B2D5A4E57936EF88A22EA4BE01 D59C2B27F1778531B04F78181F72ED5873FCFB0569A7BDC6B81799D9CDA69E09 C0E5F691305C0FF76D0742EB262872C9B2E1A3662FE40B0BE5A246027AC8C8DD C8B96343236149F1440A90111D730A4168CCFA8F6F040CE7179AA0AD01EB5E5D F6F9FE3C1CE7AE94946757D2190E195F0ADB712FF99A67E0978B52F0CDC71235 40A6385AEDC5D4E5B2BF51D9B463D1C10702E63EBE6B5B7EF3F5D4EE5A2FDA38 770F6A4F6C5A0A451562ECE8DC5852895EE21C9D9B7BA971A1080DCC5EE7907E 4A0D7EA0C0A8757BA30F66B4D70EA3068033C7E4B74846BA1063040AA497CC24 ECD2F84934195B6D47B45A8BAEAB4A105890D0E4BD0F2C54920E92220240B807 A842CF23384DDF530715B5E463ECF3CF1884D81ACAF03C0E8E0EE9853B0810F0 A06EFCD231C885FC19DBA2AEDFB457CDDD0D8C04724C31DAE584DCAFA054CCD5 8EE6D7CE2A8AC44085530F9E429CEC260D094BD143B243755308AB555B8BF46E 00F6E02AEE 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /BHADEJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 549 441 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 720 360 4410 3690 re f q 720 360 4410 3690 re W 20 w /DeviceGray {} CS [0] SC 1346.22 586.082 m 1694.48 680.41 l 2252.67 844.844 l 2749.4 1008.81 l 3187.51 1172.3 l 3569.73 1335.31 l 3898.67 1497.77 l 4089.62 1605.72 l 4258.74 1713.34 l 4406.76 1820.55 l 4534.38 1927.28 l 4642.3 2033.41 l 4731.23 2138.8 l 4801.89 2243.24 l 4827.58 2289.24 l 4852.46 2340.75 l 4873.13 2391.89 l 4889.68 2442.62 l 4902.22 2492.89 l 4910.84 2542.64 l 4916.79 2624.22 l 4914.27 2688.08 l 4905.59 2750.46 l 4891.03 2811.11 l 4870.92 2869.76 l 4836.07 2944.24 l 4804.39 2996.84 l 4768.44 3046.13 l 4728.66 3091.63 l 4685.56 3132.78 l 4639.71 3168.95 l 4591.69 3199.49 l 4542.19 3223.67 l 4491.91 3240.77 l 4441.65 3250.05 l 4389.8 3250.59 l 4347.38 3243.15 l 4316.87 3232.58 l 4278.44 3211.66 l 4243.19 3182.84 l 4211.74 3146.22 l 4184.69 3102.14 l 4167.61 3064.55 l 4148.23 3004.21 l 4136.23 2943.31 l 4130.14 2878.89 l 4130.02 2812.56 l 4135.82 2746.06 l 4147.3 2681.16 l 4164.09 2619.52 l 4185.67 2562.59 l 4211.45 2511.56 l 4240.73 2467.27 l 4272.8 2430.23 l 4306.92 2400.64 l 4342.39 2378.42 l 4378.51 2363.28 l 4414.2 2354.82 l 4454.25 2352.38 l 4492.94 2356.76 l 4529.7 2367.09 l 4564.03 2382.51 l 4595.55 2402.2 l 4636.92 2438.12 l 4670.64 2479.71 l 4696.35 2525.06 l 4713.99 2572.48 l 4723.74 2620.53 l 4725.97 2667.92 l 4721.21 2713.47 l 4708.94 2759.58 l 4691.96 2797.96 l 4670.5 2831.44 l 4645.57 2859.19 l 4618.26 2880.49 l 4589.72 2894.78 l 4561.1 2901.68 l 4533.53 2901.06 l 4508.08 2893.11 l 4485.7 2878.34 l 4467.19 2857.58 l 4467.19 2857.58 l S /DeviceRGB {} CS [1 0 0] SC 1347.06 586.395 m 1456.21 1177.1 l 1805.39 2442.1 l 2033.96 2958.64 l 2352.82 3441.59 l 2774.21 3805.27 l 3076.26 3932.13 l 3319.1 3971.27 l 3524.74 3966.74 l 3703.81 3937.24 l 3862.28 3892.36 l 4131.15 3776.51 l 4349.31 3643.27 l 4526.41 3503.32 l 4668.43 3361.88 l 4779.39 3221.68 l 4862.21 3084.13 l 4919.13 2950.03 l 4951.92 2819.84 l 4962.05 2693.92 l 4950.85 2572.63 l 4919.56 2456.5 l 4869.45 2346.29 l 4801.91 2243.23 l 4720.55 2151.11 l 4623.8 2068.66 l 4515.99 2002.25 l 4400.7 1957.92 l 4282.68 1943.64 l 4168.04 1968.64 l 4064.13 2041.09 l 3978.83 2163.89 l 3919.26 2330.37 l 3890.05 2523.32 l 3892.28 2719.71 l 3923.46 2898.21 l 3978.6 3044.61 l 4051.55 3152.89 l 4226.73 3259.66 l 4408.51 3251.81 l 4441.84 3240.73 l 4523.81 3201.29 l 4597.78 3149.51 l 4662.36 3088.72 l 4716.58 3021.62 l 4759.79 2950.4 l 4791.62 2876.88 l 4811.92 2802.58 l 4820.76 2728.87 l 4818.37 2656.99 l 4805.16 2588.18 l 4781.75 2523.72 l 4748.95 2465.03 l 4707.82 2413.66 l 4659.67 2371.37 l 4606.12 2340.09 l 4549.07 2321.87 l 4490.75 2318.66 l 4433.64 2332.08 l 4380.37 2362.92 l 4372.05 2369.74 l 4326.55 2420.27 l 4290.23 2485.35 l 4264.87 2561.13 l 4251.57 2642.57 l 4250.54 2724.17 l 4261.25 2800.72 l 4282.45 2868.02 l 4312.42 2923.18 l 4349.16 2964.67 l 4390.59 2992.13 l 4434.66 3006.1 l 4479.49 3007.7 l 4523.41 2998.39 l 4564.98 2979.76 l 4602.98 2953.46 l 4636.47 2921.03 l 4664.67 2883.95 l 4687.05 2843.59 l 4703.24 2801.19 l 4713.05 2757.93 l 4715.47 2737.26 l 4715.84 2694.73 l 4710.04 2653.99 l 4698.44 2616.04 l 4681.53 2581.88 l 4659.96 2552.48 l 4634.54 2528.78 l 4606.19 2511.67 l 4575.98 2501.89 l 4545.04 2500.04 l 4514.59 2506.41 l 4485.85 2520.95 l 4460 2543.19 l 4438.07 2572.18 l 4420.94 2606.53 l 4409.22 2644.49 l 4403.25 2684.11 l 4403.07 2723.35 l 4408.43 2760.34 l 4418.84 2793.45 l 4433.59 2821.43 l 4451.85 2843.44 l 4465.02 2854.22 l S 5 w /DeviceGray {} CS [0] SC 1319.22 586.082 m 1211.22 586.082 l S 4815.39 2219.86 m 4891.89 2087.36 l S 4408.55 3278.53 m 4408.55 3386.53 l S 4366.8 2339.32 m 4312.8 2245.79 l S 4689.89 2730.15 m 4545.01 2680.97 l S 4441.59 2840.8 m 4036.29 2606.8 l S 1333.56 609.777 m 1234.56 781.25 l S 4775.83 2236.24 m 4541.11 2173.35 l S 4385.13 3265.31 m 4174.69 3386.81 l S 4353.67 2366.94 m 4068.89 2409.86 l S 4725.33 2762.39 m 4945.63 3323.71 l S 4476.01 2878.88 m 4739.57 3470.86 l S [10 30] 0 d 0 J 720 360 m 720 4050 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 720 360 m 720 400 l S 720 4050 m 720 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 1602 360 m 1602 4050 l S Q 1602 360 m 1602 400 l S 1602 4050 m 1602 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 2484 360 m 2484 4050 l S Q 2484 360 m 2484 400 l S 2484 4050 m 2484 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 3366 360 m 3366 4050 l S Q 3366 360 m 3366 400 l S 3366 4050 m 3366 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 4248 360 m 4248 4050 l S Q 4248 360 m 4248 400 l S 4248 4050 m 4248 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 5130 360 m 5130 4050 l S Q 5130 360 m 5130 400 l S 5130 4050 m 5130 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 720 360 m 5130 360 l S Q 720 360 m 760 360 l S 5130 360 m 5090 360 l S q 720 360 4410 3690 re W [10 30] 0 d 720 821.25 m 5130 821.25 l S Q 720 821.25 m 760 821.25 l S 5130 821.25 m 5090 821.25 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1282.5 m 5130 1282.5 l S Q 720 1282.5 m 760 1282.5 l S 5130 1282.5 m 5090 1282.5 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1743.75 m 5130 1743.75 l S Q 720 1743.75 m 760 1743.75 l S 5130 1743.75 m 5090 1743.75 l S q 720 360 4410 3690 re W [10 30] 0 d 720 2205 m 5130 2205 l S Q 720 2205 m 760 2205 l S 5130 2205 m 5090 2205 l S q 720 360 4410 3690 re W [10 30] 0 d 720 2666.25 m 5130 2666.25 l S Q 720 2666.25 m 760 2666.25 l S 5130 2666.25 m 5090 2666.25 l S q 720 360 4410 3690 re W [10 30] 0 d 720 3127.5 m 5130 3127.5 l S Q 720 3127.5 m 760 3127.5 l S 5130 3127.5 m 5090 3127.5 l S q 720 360 4410 3690 re W [10 30] 0 d 720 3588.75 m 5130 3588.75 l S Q 720 3588.75 m 760 3588.75 l S 5130 3588.75 m 5090 3588.75 l S q 720 360 4410 3690 re W [10 30] 0 d 720 4050 m 5130 4050 l S Q 720 4050 m 760 4050 l S 5130 4050 m 5090 4050 l S 10 w 2 J 720 4050 m 5130 4050 l S 5130 360 m 5130 4050 l S 720 360 m 5130 360 l S 720 360 m 720 4050 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 3475.08] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 61.5949 24.2961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 9.1199 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -5633.31 TJm (0) 5.858 Tj -2.2637 TJm 94.0801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 97.32 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -5633.31 TJm (0) 5.858 Tj -2.2627 TJm 182.2802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 185.52 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -5633.31 TJm (0) 5.858 Tj -2.2627 TJm 270.4802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 273.72 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -5633.31 TJm (0) 5.858 Tj -2.2627 TJm 358.6802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 361.9201 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -5633.31 TJm (0) 5.858 Tj -2.2627 TJm 446.8803 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 450.1201 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm 227.5361 -13.3031 Td /F11_0 11.9552 Tf (h) 6.7427 Tj 1.5479 TJm -17.8509 8.3141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.611 8.3141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.731 8.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5089 8.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -17.8509 54.4391 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6111 54.4391 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.731 54.4391 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5088 54.4391 Td /F9_0 11.9552 Tf (9) 5.858 Tj -2.2632 TJm -17.851 100.5641 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6111 100.5641 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.731 100.5641 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5088 100.5641 Td /F9_0 11.9552 Tf (8) 5.858 Tj -2.2632 TJm -17.851 146.6891 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 146.6891 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7311 146.6891 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5088 146.6891 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2632 TJm -17.851 192.8141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 192.8141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7311 192.8141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5087 192.8141 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2.2632 TJm -17.8511 238.9391 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 238.9391 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7312 238.9391 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5087 238.9391 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -17.8511 285.0641 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6113 285.0641 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7312 285.0641 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5086 285.0641 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm -17.8512 331.1891 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6113 331.1891 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7312 331.1891 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5086 331.1891 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm -17.8512 377.3141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6114 377.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7313 377.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5086 377.3141 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm [0 1 -1 0 38.7441 217.67] Tm 0 0 Td /F11_0 11.9552 Tf (v) 5.6548 Tj 1.6092 TJm [1 0 0 1 112.675 54.3492] Tm 0 0 Td /F15_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm 377.414 144.31 Td (2) 6.6471 Tj 3.9372 TJm 324.857 286.344 Td (3) 6.6471 Tj 3.9372 TJm 311.0578 160.153 Td (4) 6.6471 Tj 3.9372 TJm 333.4738 209.246 Td (5) 6.6471 Tj 3.9372 TJm 282.748 196.937 Td (6) 6.6471 Tj 3.9372 TJm 3.234 25.335 Td (7) 6.6471 Tj 3.9372 TJm 333.05 158.394 Td (8) 6.6471 Tj 3.9372 TJm 296.5879 285.472 Td (9) 6.6471 Tj 3.9372 TJm 279.1399 182.779 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 375.8989 279.697 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 362.0141 294.381 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font UTWDTW+CMMI12 %%+ font BHADEJ+CMR12 %%EOF auto/07p/doc/include/fnc_canards2.eps0000640000175000017500000011312713570013207015473 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 6 -9 556 432 %%HiResBoundingBox: 6.776992 -9.432006 555.776992 431.567994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmp-UQ_s_.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin /F15_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font MVVWGH+CMMI12 %!FontType1-1.0: MVVWGH+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /MVVWGH+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 457 441] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 115 /s put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F40 586391EA9A2414C5CD9EE00D483839FC635AD0D52D643D652F74F041D36A563E 1F56922A8B1764174106A1C5AE5CBF55A318CB60C637EC2D5C88BD00DB9BF961 B96F0B7012AD9169A96092698E8A3011CE963A65F4D362343F71084AFBE9A9E5 4C1B6B64FC7FABF7E631810B6F00DC39F68269DCCED25AA14ED8E38BB54AE733 B48E950EE2ADECB769B107473514572B5DFD404D8E6B2DB619A52904C916A848 F650570C4F5E16DC904727623D2C1A50FC51D3A31AE11A89708097DA2251683C A8040751E06BC2DDE7E42E90A38CFC8655746B7B34D6FDF85A4BAF98D83CD82F 0E64338282B717606331D487D502D3D3103B321D40F93CB247892D4022543348 F60D0CCAE7BD9A9E801AEBFD6FEC833DB7A27F9DD844A007C0E453A7F36484AC 79944C0365B4C67087AA35F1AA4D4F0A36536875A51A85205CA1082094D6C56C C4A845EF6F36B38CED8262286743DFE727047BF5009017C577C1A99BBD3C825D D2D139602AB0E05145F60988CE04712236246A3E70DD5A419B69B0E173167CF0 2560B7CCC0D95F710DC8AB5927A7C13FE0B510E3319605223A4880EA52269078 22782D7E6FF6F27839A79D7FFBA8C0BE9FF44644010057D6BBEBDD76DD6258E2 642EB8FEF97069A6555555A83F2A4FA937BE3C002AC7079FD51B7F40F9565D3A 2E445FD2FE169F475DA41032677B3D65CAC4A7BAB21B40482890AFAD16BED8C6 AAE6B208405298A95AA1DAC10E0AE693D78883DBDE580E22D2F42CEE328A95DE 78122BBA9D52897D652E03B74CD06FFC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /MVVWGH+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font IKMFZJ+CMR12 %!FontType1-1.0: IKMFZJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /IKMFZJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 448 665] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32CCC592339093B951094 0ACE0736A0E458CB04BB1E8F95CA378E22BEB2CB9369393C443A696C2FAF1424 24F18142436D008A5881B806D326E26F1E0B878FF55760F2A9F96F51834F2911 35A26DB89435AF9253D2B3C3D4CA30291F3831DDA6ECE6B54C7CDCE7127DE18A AC02021FD9C0C9A7DE7F7A8778E8561E4C342E0383DAD064B1C8CA4CFE57B36B 1F803B66039679C6ADD7CEB3B52A834D74FB18D4F964C8571D605406ACD69F84 3F13371360F36FCEE099785677F770585094FE17F216969DA26C4E3868C7DED8 55FE9DC0AE0C7A3D008C68376259B9B8B0DB02F34150AC8BF6CF0A5E7D0FC830 51515D51844CA3CEC5BCC0FBAE56C4073FBD2CB5B0A341847FB34F364C9E3259 BA30DECDB2B249F5F54C8A40ABA55B5238F5C86B9AB5B7206EF2CFEE675D159A 4B641158A8E663CC6075C33CF637DE9E674636D039AF13935F04BE182B762FB1 79719938B35B11B6105857EB1ABB7B7C6034724BE4D072215ED3C7FB5F0944CE 5AF9B99C0623687EDD9860A12065067C9E4E879B8B71513D5264E2870A0DFE74 6E0C28A8BB4A9BA5668C2597143C9ECC14FA9531294BC1449081249FB2225851 EC1FEB943AC7A5A2103A6346067908AF8A90D1956CAE3D23D015584944CE91DA FC322A0A86A25FC2EF31590AD5C7F05664C90784895AAFAE24439C63B142B64E EC4AF818A791AC8924832FAEBE160D3C8DD9E40B266B11BF3D001AE78774AA6D 46E491517F66BFC30E692339613CA1AB85124D6A815021375E45877F903D1D7B 644117FE6C40A7A65F2BFED0C2EA94BDD321F140705A7C08F33E78A9FA3498B0 F3FFAC84585A0C665C258F4864A5F98B19EB3ACC9F24EF0C6250CF734CDC0216 504E7E7792233C8DE6C34F6D2AA405C1E40F250770F12C2A4F926B6653AFB77B 09DD6D23FE66410373D884EAA895A87D508C3697794708750A9B2496F831BA77 DFC58992D8A2BDF502D405AA6E0277ADDD72FCFBC7638ADC7200536DBB95CEC3 3C798A2DFBA8BE7F09A720450833767561280743A119EBB7B5E3E6560AE69FDD 085B3DE6E73DCBE2B8EAA89B2BDA2945BA7F0A949E5C5F10610D24CBDB5279F8 7A62404B5F2E3408B6072984052787087B685B5DB3ED4481936B44898065B11D 5952BD02AEDBB15B9321C55C4A3AB74CD96822E58F21D733C75D4531EF8D9AC0 EE3DFA07118E6B9A4C1D91145725671F3E0E76FF4DD377227EBDF32833B07CEB 6459EC3EAE8C4C0FEF371DACA0031E9162EEE054ECBB65226F90C766305797B1 7315B772E559EFC167474C0AAF1CA4924681BB55A287FA5A973302BF2A2EECB6 3A6CDA30934CB6A74083D0534B26FBE27A05F88B81048B28F82A6CF885CC1808 44A9F9C6455FD9C9AA9EC034F1592132A9426D58ED6501FB315F62F0DA89E184 6192D9F087DE9BEE1853ACEA6B1F5C78F47FB0EDB8BA77 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /IKMFZJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 549 441 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 720 360 4410 3690 re f q 720 360 4410 3690 re W 20 w /DeviceGray {} CS [0] SC 708.465 1441.47 m 1426.21 1619.94 l 2315.14 1841.72 l 2502.17 1880.6 l 2635.94 1902.49 l 2762.92 1916.44 l 2887.06 1922.59 l 3078.99 1923.02 l 3184.62 1926.58 l 3272.41 1936.14 l 3350.65 1951.33 l 3430.72 1973.64 l 3520.9 2006.05 l 3651.43 2061.54 l 3747.46 2100.4 l 3799.87 2115.3 l 3844.5 2120.44 l 3876.13 2117.77 l 3908.12 2108.21 l 3940.22 2090.84 l 3972.43 2066.08 l 4067.94 1985.87 l 4089.09 1976.72 l 4110.51 1973.08 l 4131.96 1975.26 l 4152.69 1982.63 l 4184.57 2002.87 l 4216.72 2032.37 l 4254.73 2076.46 l 4302.29 2142.43 l 4364.27 2241.14 l 4431.14 2348 l 4448.43 2368.62 l 4469.36 2381.86 l 4479.97 2380.67 l 4490.56 2371.76 l 4502.47 2349.67 l 4515.61 2306.39 l 4530.61 2228.56 l 4555.17 2051.9 l 4574.23 1934.13 l 4587.45 1891.92 l 4596.44 1881.91 l 4606.63 1884.79 l 4620.48 1905.54 l 4638.38 1949.73 l 4666.78 2040.98 l 4705.28 2189.04 l 4745.8 2371.93 l 4784.96 2548.76 l 4793.32 2569.44 l 4793.32 2569.44 l S /DeviceRGB {} CS [1 0 0] SC 715.258 1389.01 m 1427.68 1590.29 l 2443.88 1879.69 l 2589.64 1911.85 l 2691.89 1928.16 l 2777.58 1935.84 l 2859.68 1936.78 l 2948.55 1930.54 l 3193.4 1906.32 l 3255.15 1910.25 l 3308.34 1919.27 l 3375.99 1938.3 l 3440.19 1963.62 l 3507.59 1996.93 l 3588.7 2044.96 l 3669.69 2100.63 l 3761.42 2172.47 l 3847.42 2248.54 l 3937.52 2337.35 l 4025.03 2424.69 l 4058.4 2448.83 l 4079.95 2455.52 l 4090.9 2454.39 l 4101.72 2449.07 l 4119.06 2428.74 l 4134.58 2393.69 l 4149.41 2340.14 l 4165.05 2257.3 l 4185.39 2108.69 l 4221.47 1835.46 l 4234.33 1779.64 l 4242.52 1758.59 l 4249.39 1748.32 l 4259.62 1742.99 l 4269.97 1746.61 l 4288.4 1767.25 l 4312.91 1809.67 l 4355.04 1899.7 l 4407.3 2028.01 l 4450.41 2150.77 l 4482.97 2263.36 l 4506.92 2369.08 l 4526.96 2487.55 l 4544.8 2634.71 l 4564.13 2858 l 4591.42 3176.03 l 4600.67 3222.54 l 4610.7 3229.11 l 4618.44 3208.84 l 4629.67 3148.49 l 4642.78 3034.82 l 4655.87 2858.91 l 4667.85 2596.19 l 4680.26 2149.79 l 4694.73 1668.37 l 4700.84 1602.42 l 4703.42 1592.37 l 4713.45 1601.35 l 4729.11 1665.06 l 4774.13 1889.03 l 4820.26 2148.36 l 4858.28 2401.57 l 4881.64 2550.63 l 4888.57 2572.16 l 4888.57 2572.16 l S /DeviceRGB {} CS [0 0 1] SC 702.957 1315.05 m 1369.68 1526.33 l 1908.61 1703.91 l 2612.77 1937.52 l 2722.41 1965.52 l 2803.87 1979.61 l 2859.17 1983.89 l 2914.06 1982.32 l 2964 1974.78 l 3016.2 1960.2 l 3075.51 1936.54 l 3197.99 1885.25 l 3241.26 1875.15 l 3283.67 1872.18 l 3319.98 1875.33 l 3357.74 1883.9 l 3407.74 1902.64 l 3453.81 1926.31 l 3515.49 1966.17 l 3577.3 2014.74 l 3633.25 2066.85 l 3678.86 2117.09 l 3716.46 2166.64 l 3747.96 2217.47 l 3779.51 2283.02 l 3801.43 2343.28 l 3822.62 2420.88 l 3842.27 2520.3 l 3861.03 2654.12 l 3880.18 2846.55 l 3908.66 3221.34 l 3928.39 3435.46 l 3940.21 3507.56 l 3951.77 3540.75 l 3962.59 3548.1 l 3973.45 3540.57 l 3987.28 3517.85 l 4011 3459.89 l 4039.51 3371.06 l 4069.99 3252.92 l 4093.75 3134.4 l 4113.52 3003.14 l 4130.73 2843.3 l 4146.27 2631.2 l 4161.38 2322.06 l 4195.96 1534.14 l 4204.65 1471.8 l 4213.82 1450.27 l 4224.32 1453.02 l 4237.76 1473.58 l 4270.68 1543.64 l 4361.61 1756.66 l 4434.58 1943.37 l 4487 2096.04 l 4522.94 2221.31 l 4550.47 2343.63 l 4571.61 2472.08 l 4589.49 2627.21 l 4608.1 2857.39 l 4633.12 3166.16 l 4641.95 3210.61 l 4652.38 3210.59 l 4661.58 3173.39 l 4673.62 3081.99 l 4686.57 2923.21 l 4698.45 2682.45 l 4709.54 2299.85 l 4727.9 1646.59 l 4733.61 1601.82 l 4743.9 1611.76 l 4758.76 1678.46 l 4804.89 1928.31 l 4846.65 2187.05 l 4901.94 2567.31 l 4901.94 2567.31 l S /DeviceRGB {} CS [0 0.5019 0] SC 719.523 385.887 m 1464.57 832.207 l 2091.27 1213.03 l 2456.61 1442.64 l 2698.4 1601.83 l 2880.54 1729.49 l 3005.2 1824.5 l 3087 1893.5 l 3154.87 1958.55 l 3208.13 2019.11 l 3250.51 2078.86 l 3278.5 2128.61 l 3302.49 2182.42 l 3326.65 2254.02 l 3345.31 2329.12 l 3363.05 2426.83 l 3380.55 2563.57 l 3397.9 2759.79 l 3416.96 3063.65 l 3449.13 3590.48 l 3461.52 3691.62 l 3469.9 3726.98 l 3474.23 3737.63 l 3483.3 3748.04 l 3493.55 3747.04 l 3512.3 3727.55 l 3541.97 3679.3 l 3592.57 3581.69 l 3643.92 3467.41 l 3682.89 3364.27 l 3713.57 3265.09 l 3738.16 3164.82 l 3760.78 3042.4 l 3779.63 2898.45 l 3795.14 2726.37 l 3810.19 2477.54 l 3826.3 2085.96 l 3849.75 1521.03 l 3859.15 1417.91 l 3866.62 1379.85 l 3870.84 1369.32 l 3881 1362.7 l 3891.09 1369.7 l 3914.62 1402.52 l 3997.15 1540.06 l 4106.79 1733.26 l 4186.96 1887.07 l 4245.5 2013.91 l 4287.03 2120.81 l 4316.69 2217.01 l 4339.23 2314.9 l 4355.85 2415.22 l 4371.36 2550.17 l 4386.57 2749.17 l 4408.04 3146.83 l 4421.37 3341.53 l 4430.58 3402.43 l 4434.44 3412.47 l 4444.75 3408.82 l 4455.71 3374.88 l 4472.67 3289.64 l 4491.95 3153.93 l 4507.81 2994.32 l 4521 2790.86 l 4532.63 2496.58 l 4547.5 1906.4 l 4558.35 1604.75 l 4565.58 1544.57 l 4575.77 1543.7 l 4590.95 1589 l 4639.78 1772.06 l 4695.93 2005.28 l 4733.39 2190.15 l 4757.77 2345.85 l 4775.27 2505.08 l 4789.52 2701.04 l 4816.37 3109.84 l 4826.14 3097.84 l 4833.38 3023.23 l 4842.23 2848.54 l 4850.33 2545.9 l 4869.52 1641.81 l 4875.36 1652.6 l 4888.25 1744.14 l 4926.77 2075.22 l 4955.44 2377.73 l 4974.42 2568.99 l 4974.42 2568.99 l S 5 w /DeviceGray {} CS [0] SC 742.742 416.059 m 877.316 670.684 l S [10 30] 0 d 0 J 842.5 360 m 842.5 4050 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 842.5 360 m 842.5 400 l S 842.5 4050 m 842.5 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 1455 360 m 1455 4050 l S Q 1455 360 m 1455 400 l S 1455 4050 m 1455 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 2067.5 360 m 2067.5 4050 l S Q 2067.5 360 m 2067.5 400 l S 2067.5 4050 m 2067.5 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 2680 360 m 2680 4050 l S Q 2680 360 m 2680 400 l S 2680 4050 m 2680 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 3292.5 360 m 3292.5 4050 l S Q 3292.5 360 m 3292.5 400 l S 3292.5 4050 m 3292.5 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 3905 360 m 3905 4050 l S Q 3905 360 m 3905 400 l S 3905 4050 m 3905 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 4517.5 360 m 4517.5 4050 l S Q 4517.5 360 m 4517.5 400 l S 4517.5 4050 m 4517.5 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 5130 360 m 5130 4050 l S Q 5130 360 m 5130 400 l S 5130 4050 m 5130 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 720 360 m 5130 360 l S Q 720 360 m 760 360 l S 5130 360 m 5090 360 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1098 m 5130 1098 l S Q 720 1098 m 760 1098 l S 5130 1098 m 5090 1098 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1836 m 5130 1836 l S Q 720 1836 m 760 1836 l S 5130 1836 m 5090 1836 l S q 720 360 4410 3690 re W [10 30] 0 d 720 2574 m 5130 2574 l S Q 720 2574 m 760 2574 l S 5130 2574 m 5090 2574 l S q 720 360 4410 3690 re W [10 30] 0 d 720 3312 m 5130 3312 l S Q 720 3312 m 760 3312 l S 5130 3312 m 5090 3312 l S q 720 360 4410 3690 re W [10 30] 0 d 720 4050 m 5130 4050 l S Q 720 4050 m 760 4050 l S 5130 4050 m 5090 4050 l S 10 w 2 J 720 4050 m 5130 4050 l S 5130 360 m 5130 4050 l S 720 360 m 5130 360 l S 720 360 m 720 4050 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 2041.08] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 72.1219 24.259] Tm 0 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm 15.1199 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 18.3598 0 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm 61.25 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 70.4898 0 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm 76.3699 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 79.6097 0 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 122.4999 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 131.7398 0 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm 137.6198 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 140.8597 0 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm 183.7499 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 192.9897 0 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm 198.8698 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 202.1096 0 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 244.9998 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 254.2397 0 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 260.1198 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 263.3596 0 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm 306.2498 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 315.4896 0 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 321.3697 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 324.6096 0 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 367.4998 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 376.7396 0 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 382.6197 0 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 385.8595 0 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm 433.399 0.0371 Td (0) 5.858 Tj -2.2627 TJm 439.2791 0.0371 Td /F13_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 442.5189 0.0371 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 217.6209 -11.107 Td /F13_0 11.9552 Tf (s) 5.5113 Tj -0.5064 TJm -19.2731 8.3512 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -10.0332 8.3512 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm -19.2731 82.1512 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -10.0332 82.1512 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -19.2731 155.9512 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -10.0332 155.9512 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -9.975 229.2891 Td (0) 5.858 Tj -2.2632 TJm -9.975 303.0891 Td (1) 5.858 Tj -2.2632 TJm -9.975 376.8891 Td (2) 5.858 Tj -2.2632 TJm [0 1 -1 0 47.8488 217.67] Tm 0 0 Td /F13_0 11.9552 Tf (v) 5.6548 Tj 1.6092 TJm [1 0 0 1 88.573 68.9] Tm 0 0 Td /F15_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font MVVWGH+CMMI12 %%+ font IKMFZJ+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/include/optionMenu.png0000640000175000017500000000377513570013207015311 0ustar skskPNG  IHDRۥIDATxAn8E 'Ŝ`:^ei 1<U$K"_Y UE~Dp c{__ޣ2lgxP3<E*nˏC=ӗbˏqоEke!뼝D{ׯ'dfҺ7~gJӧ?뫸!lGR^vcvǧ0f/g:ڄ($ V _ufWÂf&$~EeY@e7jۍcaLAU>j[b9#Qe*0n.} g] IwYB+24;$` +(q,9O>#^>#ƆAm "3Sdqƍ1BٟAfxP3< '0". # $XB4"?gF1{xB"L"8n4t#[zGM=D>S& DTB&3J^E=> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [0.9967 -0.0811 0.0811 0.9967 229.1 32.7145] Tm 0 0 Td /F9_0 11.9552 Tf (x) 5.9776 Tj -1.8747 TJm (g) 6.6471 Tj 3.9359 TJm (a) 6.6471 Tj 3.9379 TJm (m) 9.9587 Tj -0.1127 TJm (m) 9.9587 Tj -0.1127 TJm (a) 6.6471 Tj 3.9359 TJm (,) 3.3235 Tj -294.144 TJm (x) 5.9776 Tj -1.8747 TJm (-) 3.9811 Tj 1.762 TJm (,) 3.3235 Tj -274.059 TJm (x) 5.9776 Tj -1.8747 TJm (+) 6.9818 Tj 1.8235 TJm [1 0 0 1 127.766 50.8602] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -2.2627 TJm 49.3039 -3.2813 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 58.5437 -3.2813 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 64.4238 -3.2813 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 67.6636 -3.2813 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -2.2627 TJm 103.63 -6.5512 Td (0) 5.858 Tj -2.2627 TJm 109.5101 -6.5512 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 112.7499 -6.5512 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2627 TJm 153.6839 -9.882 Td (0) 5.858 Tj -2.2627 TJm 159.564 -9.882 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 162.8039 -9.882 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm 204.1211 -13.2383 Td (0) 5.858 Tj -2.2627 TJm 210.0011 -13.2383 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 213.241 -13.2383 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2627 TJm [0.4865 0.8737 -0.8737 0.4865 449.936 45.4] Tm 0 0 Td /F9_0 11.9552 Tf (y) 5.9776 Tj -1.8742 TJm (g) 6.6471 Tj 3.9373 TJm (a) 6.6471 Tj 3.9393 TJm (m) 9.9587 Tj -0.1139 TJm (m) 9.9587 Tj -0.1135 TJm (a) 6.6471 Tj 3.9373 TJm (,) 3.3235 Tj -294.145 TJm (y) 5.9776 Tj -1.8745 TJm (-) 3.9811 Tj 1.7625 TJm (,) 3.3235 Tj -274.073 TJm (y) 5.9776 Tj -1.874 TJm (+) 6.9818 Tj 1.8237 TJm [1 0 0 1 413.271 53.0109] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2668 TJm 9.107 13.6699 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 18.3469 13.6699 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 24.2269 13.6699 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 27.4668 13.6699 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm 22.5808 26.9519 Td (0) 5.858 Tj -2.2627 TJm 28.4609 26.9519 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 31.7008 26.9519 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2668 TJm 31.1359 39.7929 Td (0) 5.858 Tj -2.2627 TJm 37.016 39.7929 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 40.2558 39.7929 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm 39.434 52.248 Td (0) 5.858 Tj -2.2627 TJm 45.3141 52.248 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 48.5539 52.248 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2668 TJm [0.0177 0.9998 -0.9998 0.0177 499.151 224.532] Tm 0 0 Td /F9_0 11.9552 Tf (p) 6.6471 Tj 3.9358 TJm (h) 6.6471 Tj 3.9378 TJm (i) 2.6541 Tj 1.1745 TJm (g) 6.6471 Tj 3.9378 TJm (a) 6.6471 Tj 3.9358 TJm (m) 9.9587 Tj -0.1103 TJm (m) 9.9587 Tj -0.1124 TJm (a) 6.6471 Tj 3.9378 TJm (,) 3.3235 Tj -294.14 TJm (p) 6.6471 Tj 3.9358 TJm (h) 6.6471 Tj 3.9378 TJm (i) 2.6541 Tj 1.1745 TJm (-) 3.9811 Tj 1.7626 TJm (,) 3.3235 Tj -294.146 TJm (p) 6.6471 Tj 3.9358 TJm (h) 6.6471 Tj 3.9378 TJm (i) 2.6541 Tj 1.1745 TJm (+) 6.9818 Tj 1.8259 TJm [1 0 0 1 472.815 173.468] Tm 0 0 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 0.873 36.248 Td (2) 5.858 Tj -2.2627 TJm 1.7539 72.8242 Td (3) 5.858 Tj -2.2627 TJm 2.643 109.732 Td (4) 5.858 Tj -2.2627 TJm 3.5391 146.9769 Td (5) 5.858 Tj -2.2627 TJm -155.1199 122.3281 Td /F9_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -125.6679 119.8929 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -228.6359 23.7898 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -172.9089 95.3449 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -150.9558 109.2738 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -178.4667 24.6449 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -179.2089 68.2871 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -183.4749 49.6621 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -222.0159 5.3242 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -236.0108 49.2871 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -155.5186 45.6672 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -155.1026 63.9211 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font ODEMPY+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/include/san2.ps0000640000175000017500000034743213570013207013656 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 600 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3800 600 lineto stroke 3800 600 moveto 3636 1692 moveto (z) 3636 1692 PR 2292 2468 moveto (y) 2292 2468 PR 728 888 moveto (x) 728 888 PR 2200 1600 moveto 3720 1600 lineto stroke 3720 1600 moveto 3636 1552 moveto 3720 1600 lineto stroke 3720 1600 moveto 3636 1644 lineto stroke 3636 1644 moveto 2200 1600 moveto 2200 2548 lineto stroke 2200 2548 moveto 2244 2468 moveto 2200 2548 lineto stroke 2200 2548 moveto 2152 2468 lineto stroke 2152 2468 moveto 2200 1600 moveto 680 760 lineto stroke 680 760 moveto 728 840 moveto 680 760 lineto stroke 680 760 moveto 772 760 lineto stroke 772 760 moveto 2824 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 2824 2052 moveto 2820 2052 lineto stroke 2820 2052 moveto 2816 2052 lineto stroke 2816 2052 moveto 2812 2052 lineto stroke 2812 2052 moveto 2808 2052 lineto stroke 2808 2052 moveto 2804 2052 lineto stroke 2804 2052 moveto 2800 2052 lineto stroke 2800 2052 moveto 2792 2052 lineto stroke 2792 2052 moveto 2788 2052 lineto stroke 2788 2052 moveto 2780 2052 lineto stroke 2780 2052 moveto 2772 2052 lineto stroke 2772 2052 moveto 2764 2052 lineto stroke 2764 2052 moveto 2756 2052 lineto stroke 2756 2052 moveto 2744 2052 lineto stroke 2744 2052 moveto 2732 2052 lineto stroke 2732 2052 moveto 2724 2052 lineto stroke 2724 2052 moveto 2708 2052 lineto stroke 2708 2052 moveto 2696 2052 lineto stroke 2696 2052 moveto 2680 2048 lineto stroke 2680 2048 moveto 2664 2048 lineto stroke 2664 2048 moveto 2648 2044 lineto stroke 2648 2044 moveto 2632 2044 lineto stroke 2632 2044 moveto 2612 2040 lineto stroke 2612 2040 moveto 2588 2036 lineto stroke 2588 2036 moveto 2564 2032 lineto stroke 2564 2032 moveto 2540 2028 lineto stroke 2540 2028 moveto 2516 2020 lineto stroke 2516 2020 moveto 2488 2012 lineto stroke 2488 2012 moveto 2464 2004 lineto stroke 2464 2004 moveto 2436 1992 lineto stroke 2436 1992 moveto 2408 1980 lineto stroke 2408 1980 moveto 2384 1968 lineto stroke 2384 1968 moveto 2356 1956 lineto stroke 2356 1956 moveto 2328 1940 lineto stroke 2328 1940 moveto 2304 1924 lineto stroke 2304 1924 moveto 2276 1904 lineto stroke 2276 1904 moveto 2252 1880 lineto stroke 2252 1880 moveto 2228 1860 lineto stroke 2228 1860 moveto 2204 1832 lineto stroke 2204 1832 moveto 2180 1808 lineto stroke 2180 1808 moveto 2160 1776 lineto stroke 2160 1776 moveto 2140 1748 lineto stroke 2140 1748 moveto 2124 1716 lineto stroke 2124 1716 moveto 2112 1688 lineto stroke 2112 1688 moveto 2104 1656 lineto stroke 2104 1656 moveto 2096 1624 lineto stroke 2096 1624 moveto 2088 1588 lineto stroke 2088 1588 moveto 2088 1556 lineto stroke 2088 1556 moveto 2088 1520 lineto stroke 2088 1520 moveto 2092 1488 lineto stroke 2092 1488 moveto 2100 1456 lineto stroke 2100 1456 moveto 2112 1432 lineto stroke 2112 1432 moveto 2128 1404 lineto stroke 2128 1404 moveto 2144 1384 lineto stroke 2144 1384 moveto 2168 1356 lineto stroke 2168 1356 moveto 2196 1336 lineto stroke 2196 1336 moveto 2228 1320 lineto stroke 2228 1320 moveto 2260 1308 lineto stroke 2260 1308 moveto 2288 1304 lineto stroke 2288 1304 moveto 2320 1304 lineto stroke 2320 1304 moveto 2352 1304 lineto stroke 2352 1304 moveto 2384 1308 lineto stroke 2384 1308 moveto 2416 1316 lineto stroke 2416 1316 moveto 2452 1328 lineto stroke 2452 1328 moveto 2484 1340 lineto stroke 2484 1340 moveto 2516 1356 lineto stroke 2516 1356 moveto 2556 1376 lineto stroke 2556 1376 moveto 2588 1400 lineto stroke 2588 1400 moveto 2624 1424 lineto stroke 2624 1424 moveto 2656 1448 lineto stroke 2656 1448 moveto 2688 1480 lineto stroke 2688 1480 moveto 2720 1512 lineto stroke 2720 1512 moveto 2748 1540 lineto stroke 2748 1540 moveto 2772 1572 lineto stroke 2772 1572 moveto 2796 1604 lineto stroke 2796 1604 moveto 2820 1636 lineto stroke 2820 1636 moveto 2840 1664 lineto stroke 2840 1664 moveto 2856 1692 lineto stroke 2856 1692 moveto 2868 1724 lineto stroke 2868 1724 moveto 2884 1748 lineto stroke 2884 1748 moveto 2892 1776 lineto stroke 2892 1776 moveto 2900 1800 lineto stroke 2900 1800 moveto 2908 1824 lineto stroke 2908 1824 moveto 2912 1848 lineto stroke 2912 1848 moveto 2916 1872 lineto stroke 2916 1872 moveto 2920 1892 lineto stroke 2920 1892 moveto 2920 1912 lineto stroke 2920 1912 moveto 2920 1932 lineto stroke 2920 1932 moveto 2916 1952 lineto stroke 2916 1952 moveto 2912 1964 lineto stroke 2912 1964 moveto 2908 1980 lineto stroke 2908 1980 moveto 2900 1992 lineto stroke 2900 1992 moveto 2896 2004 lineto stroke 2896 2004 moveto 2888 2012 lineto stroke 2888 2012 moveto 2884 2020 lineto stroke 2884 2020 moveto 2876 2024 lineto stroke 2876 2024 moveto 2872 2032 lineto stroke 2872 2032 moveto 2864 2036 lineto stroke 2864 2036 moveto 2860 2040 lineto stroke 2860 2040 moveto 2856 2040 lineto stroke 2856 2040 moveto 2852 2044 lineto stroke 2852 2044 moveto 2848 2044 lineto stroke 2848 2044 moveto 2844 2048 lineto stroke 2844 2048 moveto 2836 2048 lineto stroke 2836 2048 moveto 2832 2052 lineto stroke 2832 2052 moveto 2828 2052 lineto stroke 2828 2052 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 3204 2272 moveto 3204 2272 lineto stroke 3204 2272 moveto 3212 2288 moveto 3212 2288 lineto stroke 3212 2288 moveto 3216 2304 moveto 3216 2304 lineto stroke 3216 2304 moveto 3220 2316 moveto 3220 2316 lineto stroke 3220 2316 moveto 3228 2332 moveto 3228 2332 lineto stroke 3228 2332 moveto 3232 2344 moveto 3232 2344 lineto stroke 3232 2344 moveto 3240 2360 moveto 3240 2360 lineto stroke 3240 2360 moveto 3248 2372 moveto 3248 2372 lineto stroke 3248 2372 moveto 3252 2388 moveto 3252 2388 lineto stroke 3252 2388 moveto 3260 2400 moveto 3260 2400 lineto stroke 3260 2400 moveto 3268 2416 moveto 3268 2416 lineto stroke 3268 2416 moveto 3276 2428 moveto 3276 2428 lineto stroke 3276 2428 moveto 3288 2440 moveto 3288 2440 lineto stroke 3288 2440 moveto 3296 2456 moveto 3296 2456 lineto stroke 3296 2456 moveto 3308 2468 moveto 3308 2468 lineto stroke 3308 2468 moveto 3320 2480 moveto 3320 2480 lineto stroke 3320 2480 moveto 3332 2492 moveto 3332 2492 lineto stroke 3332 2492 moveto 3348 2500 moveto 3348 2500 lineto stroke 3348 2500 moveto 3364 2508 moveto 3364 2508 lineto stroke 3364 2508 moveto 3384 2512 moveto 3384 2512 lineto stroke 3384 2512 moveto 3408 2512 moveto 3408 2512 lineto stroke 3408 2512 moveto 3424 2504 moveto 3424 2504 lineto stroke 3424 2504 moveto 3444 2496 moveto 3444 2496 lineto stroke 3444 2496 moveto 3456 2484 moveto 3456 2484 lineto stroke 3456 2484 moveto 3472 2476 moveto 3472 2476 lineto stroke 3472 2476 moveto 3484 2464 moveto 3484 2464 lineto stroke 3484 2464 moveto 3496 2448 moveto 3496 2448 lineto stroke 3496 2448 moveto 3504 2436 moveto 3504 2436 lineto stroke 3504 2436 moveto 3516 2424 moveto 3516 2424 lineto stroke 3516 2424 moveto 3524 2412 moveto 3524 2412 lineto stroke 3524 2412 moveto 3532 2396 moveto 3532 2396 lineto stroke 3532 2396 moveto 3540 2384 moveto 3540 2384 lineto stroke 3540 2384 moveto 3548 2368 moveto 3548 2368 lineto stroke 3548 2368 moveto 3556 2356 moveto 3556 2356 lineto stroke 3556 2356 moveto 3564 2344 moveto 3564 2344 lineto stroke 3564 2344 moveto 3572 2328 moveto 3572 2328 lineto stroke 3572 2328 moveto 3580 2316 moveto 3580 2316 lineto stroke 3580 2316 moveto 3588 2300 moveto 3588 2300 lineto stroke 3588 2300 moveto 3592 2288 moveto 3592 2288 lineto stroke 3592 2288 moveto 3600 2272 moveto 3600 2272 lineto stroke 3600 2272 moveto 3608 2260 moveto 3608 2260 lineto stroke 3608 2260 moveto 3612 2244 moveto 3612 2244 lineto stroke 3612 2244 moveto 3620 2232 moveto 3620 2232 lineto stroke 3620 2232 moveto 3624 2216 moveto 3624 2216 lineto stroke 3624 2216 moveto 3632 2200 moveto 3632 2200 lineto stroke 3632 2200 moveto 3636 2188 moveto 3636 2188 lineto stroke 3636 2188 moveto 3644 2172 moveto 3644 2172 lineto stroke 3644 2172 moveto 3648 2160 moveto 3648 2160 lineto stroke 3648 2160 moveto 3656 2144 moveto 3656 2144 lineto stroke 3656 2144 moveto 3660 2132 moveto 3660 2132 lineto stroke 3660 2132 moveto 3664 2116 moveto 3664 2116 lineto stroke 3664 2116 moveto 3668 2100 moveto 3668 2100 lineto stroke 3668 2100 moveto 3676 2088 moveto 3676 2088 lineto stroke 3676 2088 moveto 3680 2072 moveto 3680 2072 lineto stroke 3680 2072 moveto 3684 2060 moveto 3684 2060 lineto stroke 3684 2060 moveto 3688 2044 moveto 3688 2044 lineto stroke 3688 2044 moveto 3692 2028 moveto 3692 2028 lineto stroke 3692 2028 moveto 3692 2016 moveto 3692 2016 lineto stroke 3692 2016 moveto 3688 2000 moveto 3688 2000 lineto stroke 3688 2000 moveto 3668 2004 moveto 3668 2004 lineto stroke 3668 2004 moveto 3656 2016 moveto 3656 2016 lineto stroke 3656 2016 moveto 3640 2028 moveto 3640 2028 lineto stroke 3640 2028 moveto 3628 2040 moveto 3628 2040 lineto stroke 3628 2040 moveto 3616 2052 moveto 3616 2052 lineto stroke 3616 2052 moveto 3600 2064 moveto 3600 2064 lineto stroke 3600 2064 moveto 3588 2072 moveto 3588 2072 lineto stroke 3588 2072 moveto 3576 2084 moveto 3576 2084 lineto stroke 3576 2084 moveto 3560 2096 moveto 3560 2096 lineto stroke 3560 2096 moveto 3548 2108 moveto 3548 2108 lineto stroke 3548 2108 moveto 3532 2116 moveto 3532 2116 lineto stroke 3532 2116 moveto 3516 2128 moveto 3516 2128 lineto stroke 3516 2128 moveto 3500 2140 moveto 3500 2140 lineto stroke 3500 2140 moveto 3488 2148 moveto 3488 2148 lineto stroke 3488 2148 moveto 3472 2160 moveto 3472 2160 lineto stroke 3472 2160 moveto 3456 2168 moveto 3456 2168 lineto stroke 3456 2168 moveto 3440 2180 moveto 3440 2180 lineto stroke 3440 2180 moveto 3420 2188 moveto 3420 2188 lineto stroke 3420 2188 moveto 3404 2196 moveto 3404 2196 lineto stroke 3404 2196 moveto 3388 2204 moveto 3388 2204 lineto stroke 3388 2204 moveto 3368 2212 moveto 3368 2212 lineto stroke 3368 2212 moveto 3352 2220 moveto 3352 2220 lineto stroke 3352 2220 moveto 3332 2228 moveto 3332 2228 lineto stroke 3332 2228 moveto 3316 2236 moveto 3316 2236 lineto stroke 3316 2236 moveto 3296 2240 moveto 3296 2240 lineto stroke 3296 2240 moveto 3276 2244 moveto 3276 2244 lineto stroke 3276 2244 moveto 3256 2252 moveto 3256 2252 lineto stroke 3256 2252 moveto 3236 2256 moveto 3236 2256 lineto stroke 3236 2256 moveto 3216 2260 moveto 3216 2260 lineto stroke 3216 2260 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 1804 2052 moveto 1804 2052 lineto stroke 1804 2052 moveto 1788 2052 moveto 1788 2052 lineto stroke 1788 2052 moveto 1772 2052 moveto 1772 2052 lineto stroke 1772 2052 moveto 1756 2052 moveto 1756 2052 lineto stroke 1756 2052 moveto 1740 2052 moveto 1740 2052 lineto stroke 1740 2052 moveto 1720 2052 moveto 1720 2052 lineto stroke 1720 2052 moveto 1704 2052 moveto 1704 2052 lineto stroke 1704 2052 moveto 1688 2052 moveto 1688 2052 lineto stroke 1688 2052 moveto 1672 2052 moveto 1672 2052 lineto stroke 1672 2052 moveto 1652 2048 moveto 1652 2048 lineto stroke 1652 2048 moveto 1636 2048 moveto 1636 2048 lineto stroke 1636 2048 moveto 1620 2048 moveto 1620 2048 lineto stroke 1620 2048 moveto 1600 2044 moveto 1600 2044 lineto stroke 1600 2044 moveto 1584 2044 moveto 1584 2044 lineto stroke 1584 2044 moveto 1568 2044 moveto 1568 2044 lineto stroke 1568 2044 moveto 1548 2040 moveto 1548 2040 lineto stroke 1548 2040 moveto 1532 2040 moveto 1532 2040 lineto stroke 1532 2040 moveto 1512 2036 moveto 1512 2036 lineto stroke 1512 2036 moveto 1492 2032 moveto 1492 2032 lineto stroke 1492 2032 moveto 1476 2028 moveto 1476 2028 lineto stroke 1476 2028 moveto 1456 2028 moveto 1456 2028 lineto stroke 1456 2028 moveto 1436 2024 moveto 1436 2024 lineto stroke 1436 2024 moveto 1420 2020 moveto 1420 2020 lineto stroke 1420 2020 moveto 1400 2016 moveto 1400 2016 lineto stroke 1400 2016 moveto 1380 2012 moveto 1380 2012 lineto stroke 1380 2012 moveto 1360 2004 moveto 1360 2004 lineto stroke 1360 2004 moveto 1340 2000 moveto 1340 2000 lineto stroke 1340 2000 moveto 1324 1996 moveto 1324 1996 lineto stroke 1324 1996 moveto 1304 1988 moveto 1304 1988 lineto stroke 1304 1988 moveto 1284 1984 moveto 1284 1984 lineto stroke 1284 1984 moveto 1264 1976 moveto 1264 1976 lineto stroke 1264 1976 moveto 1244 1968 moveto 1244 1968 lineto stroke 1244 1968 moveto 1220 1960 moveto 1220 1960 lineto stroke 1220 1960 moveto 1200 1952 moveto 1200 1952 lineto stroke 1200 1952 moveto 1180 1944 moveto 1180 1944 lineto stroke 1180 1944 moveto 1160 1936 moveto 1160 1936 lineto stroke 1160 1936 moveto 1140 1928 moveto 1140 1928 lineto stroke 1140 1928 moveto 1120 1916 moveto 1120 1916 lineto stroke 1120 1916 moveto 1096 1908 moveto 1096 1908 lineto stroke 1096 1908 moveto 1076 1896 moveto 1076 1896 lineto stroke 1076 1896 moveto 1056 1884 moveto 1056 1884 lineto stroke 1056 1884 moveto 1036 1872 moveto 1036 1872 lineto stroke 1036 1872 moveto 1012 1856 moveto 1012 1856 lineto stroke 1012 1856 moveto 992 1844 moveto 992 1844 lineto stroke 992 1844 moveto 972 1828 moveto 972 1828 lineto stroke 972 1828 moveto 952 1816 moveto 952 1816 lineto stroke 952 1816 moveto 932 1800 moveto 932 1800 lineto stroke 932 1800 moveto 912 1784 moveto 912 1784 lineto stroke 912 1784 moveto 892 1768 moveto 892 1768 lineto stroke 892 1768 moveto 872 1748 moveto 872 1748 lineto stroke 872 1748 moveto 856 1732 moveto 856 1732 lineto stroke 856 1732 moveto 840 1712 moveto 840 1712 lineto stroke 840 1712 moveto 824 1696 moveto 824 1696 lineto stroke 824 1696 moveto 808 1676 moveto 808 1676 lineto stroke 808 1676 moveto 792 1656 moveto 792 1656 lineto stroke 792 1656 moveto 780 1640 moveto 780 1640 lineto stroke 780 1640 moveto 768 1620 moveto 768 1620 lineto stroke 768 1620 moveto 756 1600 moveto 756 1600 lineto stroke 756 1600 moveto 744 1584 moveto 744 1584 lineto stroke 744 1584 moveto 736 1564 moveto 736 1564 lineto stroke 736 1564 moveto 728 1548 moveto 728 1548 lineto stroke 728 1548 moveto 720 1528 moveto 720 1528 lineto stroke 720 1528 moveto 716 1512 moveto 716 1512 lineto stroke 716 1512 moveto 712 1496 moveto 712 1496 lineto stroke 712 1496 moveto 708 1476 moveto 708 1476 lineto stroke 708 1476 moveto 704 1460 moveto 704 1460 lineto stroke 704 1460 moveto 704 1444 moveto 704 1444 lineto stroke 704 1444 moveto 700 1432 moveto 700 1432 lineto stroke 700 1432 moveto 704 1416 moveto 704 1416 lineto stroke 704 1416 moveto 704 1404 moveto 704 1404 lineto stroke 704 1404 moveto 708 1388 moveto 708 1388 lineto stroke 708 1388 moveto 712 1376 moveto 712 1376 lineto stroke 712 1376 moveto 716 1364 moveto 716 1364 lineto stroke 716 1364 moveto 724 1356 moveto 724 1356 lineto stroke 724 1356 moveto 728 1344 moveto 728 1344 lineto stroke 728 1344 moveto 736 1336 moveto 736 1336 lineto stroke 736 1336 moveto 748 1328 moveto 748 1328 lineto stroke 748 1328 moveto 756 1320 moveto 756 1320 lineto stroke 756 1320 moveto 768 1316 moveto 768 1316 lineto stroke 768 1316 moveto 784 1312 moveto 784 1312 lineto stroke 784 1312 moveto 796 1308 moveto 796 1308 lineto stroke 796 1308 moveto 812 1304 moveto 812 1304 lineto stroke 812 1304 moveto 828 1304 moveto 828 1304 lineto stroke 828 1304 moveto 844 1304 moveto 844 1304 lineto stroke 844 1304 moveto 860 1304 moveto 860 1304 lineto stroke 860 1304 moveto 880 1308 moveto 880 1308 lineto stroke 880 1308 moveto 896 1308 moveto 896 1308 lineto stroke 896 1308 moveto 916 1316 moveto 916 1316 lineto stroke 916 1316 moveto 936 1320 moveto 936 1320 lineto stroke 936 1320 moveto 956 1328 moveto 956 1328 lineto stroke 956 1328 moveto 976 1336 moveto 976 1336 lineto stroke 976 1336 moveto 996 1344 moveto 996 1344 lineto stroke 996 1344 moveto 1016 1352 moveto 1016 1352 lineto stroke 1016 1352 moveto 1040 1364 moveto 1040 1364 lineto stroke 1040 1364 moveto 1060 1372 moveto 1060 1372 lineto stroke 1060 1372 moveto 1080 1384 moveto 1080 1384 lineto stroke 1080 1384 moveto 1100 1396 moveto 1100 1396 lineto stroke 1100 1396 moveto 1124 1408 moveto 1124 1408 lineto stroke 1124 1408 moveto 1144 1420 moveto 1144 1420 lineto stroke 1144 1420 moveto 1164 1436 moveto 1164 1436 lineto stroke 1164 1436 moveto 1184 1448 moveto 1184 1448 lineto stroke 1184 1448 moveto 1204 1464 moveto 1204 1464 lineto stroke 1204 1464 moveto 1228 1480 moveto 1228 1480 lineto stroke 1228 1480 moveto 1248 1492 moveto 1248 1492 lineto stroke 1248 1492 moveto 1268 1508 moveto 1268 1508 lineto stroke 1268 1508 moveto 1288 1524 moveto 1288 1524 lineto stroke 1288 1524 moveto 1308 1540 moveto 1308 1540 lineto stroke 1308 1540 moveto 1328 1556 moveto 1328 1556 lineto stroke 1328 1556 moveto 1348 1572 moveto 1348 1572 lineto stroke 1348 1572 moveto 1364 1588 moveto 1364 1588 lineto stroke 1364 1588 moveto 1384 1604 moveto 1384 1604 lineto stroke 1384 1604 moveto 1404 1624 moveto 1404 1624 lineto stroke 1404 1624 moveto 1424 1640 moveto 1424 1640 lineto stroke 1424 1640 moveto 1440 1656 moveto 1440 1656 lineto stroke 1440 1656 moveto 1460 1672 moveto 1460 1672 lineto stroke 1460 1672 moveto 1480 1692 moveto 1480 1692 lineto stroke 1480 1692 moveto 1496 1708 moveto 1496 1708 lineto stroke 1496 1708 moveto 1516 1724 moveto 1516 1724 lineto stroke 1516 1724 moveto 1532 1744 moveto 1532 1744 lineto stroke 1532 1744 moveto 1552 1760 moveto 1552 1760 lineto stroke 1552 1760 moveto 1568 1780 moveto 1568 1780 lineto stroke 1568 1780 moveto 1588 1796 moveto 1588 1796 lineto stroke 1588 1796 moveto 1604 1812 moveto 1604 1812 lineto stroke 1604 1812 moveto 1620 1832 moveto 1620 1832 lineto stroke 1620 1832 moveto 1640 1848 moveto 1640 1848 lineto stroke 1640 1848 moveto 1656 1868 moveto 1656 1868 lineto stroke 1656 1868 moveto 1672 1888 moveto 1672 1888 lineto stroke 1672 1888 moveto 1688 1904 moveto 1688 1904 lineto stroke 1688 1904 moveto 1708 1924 moveto 1708 1924 lineto stroke 1708 1924 moveto 1724 1940 moveto 1724 1940 lineto stroke 1724 1940 moveto 1740 1960 moveto 1740 1960 lineto stroke 1740 1960 moveto 1756 1976 moveto 1756 1976 lineto stroke 1756 1976 moveto 1772 1996 moveto 1772 1996 lineto stroke 1772 1996 moveto 1788 2016 moveto 1788 2016 lineto stroke 1788 2016 moveto 1804 2032 moveto 1804 2032 lineto stroke 1804 2032 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 2824 1392 moveto 2824 1392 lineto stroke 2824 1392 moveto 2808 1380 moveto 2808 1380 lineto stroke 2808 1380 moveto 2792 1368 moveto 2792 1368 lineto stroke 2792 1368 moveto 2776 1356 moveto 2776 1356 lineto stroke 2776 1356 moveto 2756 1344 moveto 2756 1344 lineto stroke 2756 1344 moveto 2740 1332 moveto 2740 1332 lineto stroke 2740 1332 moveto 2724 1324 moveto 2724 1324 lineto stroke 2724 1324 moveto 2708 1312 moveto 2708 1312 lineto stroke 2708 1312 moveto 2692 1300 moveto 2692 1300 lineto stroke 2692 1300 moveto 2676 1288 moveto 2676 1288 lineto stroke 2676 1288 moveto 2660 1276 moveto 2660 1276 lineto stroke 2660 1276 moveto 2644 1264 moveto 2644 1264 lineto stroke 2644 1264 moveto 2628 1256 moveto 2628 1256 lineto stroke 2628 1256 moveto 2612 1244 moveto 2612 1244 lineto stroke 2612 1244 moveto 2600 1232 moveto 2600 1232 lineto stroke 2600 1232 moveto 2584 1220 moveto 2584 1220 lineto stroke 2584 1220 moveto 2568 1208 moveto 2568 1208 lineto stroke 2568 1208 moveto 2552 1196 moveto 2552 1196 lineto stroke 2552 1196 moveto 2536 1188 moveto 2536 1188 lineto stroke 2536 1188 moveto 2520 1176 moveto 2520 1176 lineto stroke 2520 1176 moveto 2504 1164 moveto 2504 1164 lineto stroke 2504 1164 moveto 2488 1152 moveto 2488 1152 lineto stroke 2488 1152 moveto 2476 1140 moveto 2476 1140 lineto stroke 2476 1140 moveto 2460 1132 moveto 2460 1132 lineto stroke 2460 1132 moveto 2444 1120 moveto 2444 1120 lineto stroke 2444 1120 moveto 2428 1108 moveto 2428 1108 lineto stroke 2428 1108 moveto 2416 1096 moveto 2416 1096 lineto stroke 2416 1096 moveto 2400 1084 moveto 2400 1084 lineto stroke 2400 1084 moveto 2384 1076 moveto 2384 1076 lineto stroke 2384 1076 moveto 2372 1064 moveto 2372 1064 lineto stroke 2372 1064 moveto 2356 1052 moveto 2356 1052 lineto stroke 2356 1052 moveto 2344 1040 moveto 2344 1040 lineto stroke 2344 1040 moveto 2328 1028 moveto 2328 1028 lineto stroke 2328 1028 moveto 2316 1020 moveto 2316 1020 lineto stroke 2316 1020 moveto 2300 1008 moveto 2300 1008 lineto stroke 2300 1008 moveto 2288 996 moveto 2288 996 lineto stroke 2288 996 moveto 2272 984 moveto 2272 984 lineto stroke 2272 984 moveto 2260 976 moveto 2260 976 lineto stroke 2260 976 moveto 2248 964 moveto 2248 964 lineto stroke 2248 964 moveto 2232 952 moveto 2232 952 lineto stroke 2232 952 moveto 2220 940 moveto 2220 940 lineto stroke 2220 940 moveto 2208 932 moveto 2208 932 lineto stroke 2208 932 moveto 2196 920 moveto 2196 920 lineto stroke 2196 920 moveto 2184 908 moveto 2184 908 lineto stroke 2184 908 moveto 2172 900 moveto 2172 900 lineto stroke 2172 900 moveto 2160 888 moveto 2160 888 lineto stroke 2160 888 moveto 2152 876 moveto 2152 876 lineto stroke 2152 876 moveto 2140 868 moveto 2140 868 lineto stroke 2140 868 moveto 2132 856 moveto 2132 856 lineto stroke 2132 856 moveto 2120 844 moveto 2120 844 lineto stroke 2120 844 moveto 2112 836 moveto 2112 836 lineto stroke 2112 836 moveto 2104 824 moveto 2104 824 lineto stroke 2104 824 moveto 2096 816 moveto 2096 816 lineto stroke 2096 816 moveto 2092 804 moveto 2092 804 lineto stroke 2092 804 moveto 2088 796 moveto 2088 796 lineto stroke 2088 796 moveto 2088 788 moveto 2088 788 lineto stroke 2088 788 moveto 2092 780 moveto 2092 780 lineto stroke 2092 780 moveto 2100 776 moveto 2100 776 lineto stroke 2100 776 moveto 2120 776 moveto 2120 776 lineto stroke 2120 776 moveto 2144 780 moveto 2144 780 lineto stroke 2144 780 moveto 2176 788 moveto 2176 788 lineto stroke 2176 788 moveto 2204 796 moveto 2204 796 lineto stroke 2204 796 moveto 2232 808 moveto 2232 808 lineto stroke 2232 808 moveto 2260 820 moveto 2260 820 lineto stroke 2260 820 moveto 2284 828 moveto 2284 828 lineto stroke 2284 828 moveto 2308 840 moveto 2308 840 lineto stroke 2308 840 moveto 2332 852 moveto 2332 852 lineto stroke 2332 852 moveto 2356 864 moveto 2356 864 lineto stroke 2356 864 moveto 2380 876 moveto 2380 876 lineto stroke 2380 876 moveto 2400 888 moveto 2400 888 lineto stroke 2400 888 moveto 2424 900 moveto 2424 900 lineto stroke 2424 900 moveto 2444 912 moveto 2444 912 lineto stroke 2444 912 moveto 2464 924 moveto 2464 924 lineto stroke 2464 924 moveto 2484 932 moveto 2484 932 lineto stroke 2484 932 moveto 2504 944 moveto 2504 944 lineto stroke 2504 944 moveto 2524 956 moveto 2524 956 lineto stroke 2524 956 moveto 2544 968 moveto 2544 968 lineto stroke 2544 968 moveto 2564 980 moveto 2564 980 lineto stroke 2564 980 moveto 2580 992 moveto 2580 992 lineto stroke 2580 992 moveto 2600 1004 moveto 2600 1004 lineto stroke 2600 1004 moveto 2616 1016 moveto 2616 1016 lineto stroke 2616 1016 moveto 2632 1024 moveto 2632 1024 lineto stroke 2632 1024 moveto 2652 1036 moveto 2652 1036 lineto stroke 2652 1036 moveto 2668 1048 moveto 2668 1048 lineto stroke 2668 1048 moveto 2684 1060 moveto 2684 1060 lineto stroke 2684 1060 moveto 2700 1072 moveto 2700 1072 lineto stroke 2700 1072 moveto 2716 1084 moveto 2716 1084 lineto stroke 2716 1084 moveto 2728 1092 moveto 2728 1092 lineto stroke 2728 1092 moveto 2744 1104 moveto 2744 1104 lineto stroke 2744 1104 moveto 2756 1116 moveto 2756 1116 lineto stroke 2756 1116 moveto 2772 1128 moveto 2772 1128 lineto stroke 2772 1128 moveto 2784 1140 moveto 2784 1140 lineto stroke 2784 1140 moveto 2796 1148 moveto 2796 1148 lineto stroke 2796 1148 moveto 2808 1160 moveto 2808 1160 lineto stroke 2808 1160 moveto 2820 1172 moveto 2820 1172 lineto stroke 2820 1172 moveto 2832 1180 moveto 2832 1180 lineto stroke 2832 1180 moveto 2844 1192 moveto 2844 1192 lineto stroke 2844 1192 moveto 2852 1204 moveto 2852 1204 lineto stroke 2852 1204 moveto 2864 1212 moveto 2864 1212 lineto stroke 2864 1212 moveto 2872 1224 moveto 2872 1224 lineto stroke 2872 1224 moveto 2880 1232 moveto 2880 1232 lineto stroke 2880 1232 moveto 2888 1244 moveto 2888 1244 lineto stroke 2888 1244 moveto 2896 1252 moveto 2896 1252 lineto stroke 2896 1252 moveto 2900 1264 moveto 2900 1264 lineto stroke 2900 1264 moveto 2904 1272 moveto 2904 1272 lineto stroke 2904 1272 moveto 2912 1280 moveto 2912 1280 lineto stroke 2912 1280 moveto 2916 1292 moveto 2916 1292 lineto stroke 2916 1292 moveto 2916 1300 moveto 2916 1300 lineto stroke 2916 1300 moveto 2920 1308 moveto 2920 1308 lineto stroke 2920 1308 moveto 2920 1316 moveto 2920 1316 lineto stroke 2920 1316 moveto 2920 1324 moveto 2920 1324 lineto stroke 2920 1324 moveto 2920 1332 moveto 2920 1332 lineto stroke 2920 1332 moveto 2916 1340 moveto 2916 1340 lineto stroke 2916 1340 moveto 2912 1348 moveto 2912 1348 lineto stroke 2912 1348 moveto 2908 1356 moveto 2908 1356 lineto stroke 2908 1356 moveto 2904 1360 moveto 2904 1360 lineto stroke 2904 1360 moveto 2896 1368 moveto 2896 1368 lineto stroke 2896 1368 moveto 2888 1372 moveto 2888 1372 lineto stroke 2888 1372 moveto 2876 1376 moveto 2876 1376 lineto stroke 2876 1376 moveto 2864 1384 moveto 2864 1384 lineto stroke 2864 1384 moveto 2852 1388 moveto 2852 1388 lineto stroke 2852 1388 moveto 2836 1388 moveto 2836 1388 lineto stroke 2836 1388 moveto 2824 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 2824 2052 moveto 2820 2052 lineto stroke 2820 2052 moveto 2816 2052 lineto stroke 2816 2052 moveto 2812 2052 lineto stroke 2812 2052 moveto 2804 2052 lineto stroke 2804 2052 moveto 2800 2052 lineto stroke 2800 2052 moveto 2796 2052 lineto stroke 2796 2052 moveto 2792 2052 lineto stroke 2792 2052 moveto 2784 2052 lineto stroke 2784 2052 moveto 2776 2052 lineto stroke 2776 2052 moveto 2768 2052 lineto stroke 2768 2052 moveto 2756 2052 lineto stroke 2756 2052 moveto 2748 2052 lineto stroke 2748 2052 moveto 2732 2052 lineto stroke 2732 2052 moveto 2720 2052 lineto stroke 2720 2052 moveto 2708 2052 lineto stroke 2708 2052 moveto 2696 2052 lineto stroke 2696 2052 moveto 2676 2052 lineto stroke 2676 2052 moveto 2664 2052 lineto stroke 2664 2052 moveto 2644 2048 lineto stroke 2644 2048 moveto 2624 2048 lineto stroke 2624 2048 moveto 2604 2044 lineto stroke 2604 2044 moveto 2580 2044 lineto stroke 2580 2044 moveto 2556 2040 lineto stroke 2556 2040 moveto 2528 2036 lineto stroke 2528 2036 moveto 2500 2028 lineto stroke 2500 2028 moveto 2472 2024 lineto stroke 2472 2024 moveto 2440 2016 lineto stroke 2440 2016 moveto 2408 2008 lineto stroke 2408 2008 moveto 2376 1996 lineto stroke 2376 1996 moveto 2348 1984 lineto stroke 2348 1984 moveto 2316 1972 lineto stroke 2316 1972 moveto 2284 1960 lineto stroke 2284 1960 moveto 2248 1944 lineto stroke 2248 1944 moveto 2216 1928 lineto stroke 2216 1928 moveto 2184 1908 lineto stroke 2184 1908 moveto 2156 1888 lineto stroke 2156 1888 moveto 2124 1864 lineto stroke 2124 1864 moveto 2092 1840 lineto stroke 2092 1840 moveto 2060 1808 lineto stroke 2060 1808 moveto 2032 1780 lineto stroke 2032 1780 moveto 2004 1748 lineto stroke 2004 1748 moveto 1984 1720 lineto stroke 1984 1720 moveto 1964 1688 lineto stroke 1964 1688 moveto 1944 1656 lineto stroke 1944 1656 moveto 1932 1624 lineto stroke 1932 1624 moveto 1916 1592 lineto stroke 1916 1592 moveto 1908 1556 lineto stroke 1908 1556 moveto 1900 1524 lineto stroke 1900 1524 moveto 1900 1492 lineto stroke 1900 1492 moveto 1900 1464 lineto stroke 1900 1464 moveto 1904 1436 lineto stroke 1904 1436 moveto 1908 1412 lineto stroke 1908 1412 moveto 1920 1388 lineto stroke 1920 1388 moveto 1936 1360 lineto stroke 1936 1360 moveto 1956 1340 lineto stroke 1956 1340 moveto 1980 1324 lineto stroke 1980 1324 moveto 2008 1312 lineto stroke 2008 1312 moveto 2032 1304 lineto stroke 2032 1304 moveto 2060 1300 lineto stroke 2060 1300 moveto 2088 1300 lineto stroke 2088 1300 moveto 2120 1300 lineto stroke 2120 1300 moveto 2152 1308 lineto stroke 2152 1308 moveto 2184 1316 lineto stroke 2184 1316 moveto 2220 1328 lineto stroke 2220 1328 moveto 2252 1344 lineto stroke 2252 1344 moveto 2292 1360 lineto stroke 2292 1360 moveto 2328 1384 lineto stroke 2328 1384 moveto 2364 1404 lineto stroke 2364 1404 moveto 2400 1428 lineto stroke 2400 1428 moveto 2444 1464 lineto stroke 2444 1464 moveto 2484 1500 lineto stroke 2484 1500 moveto 2524 1536 lineto stroke 2524 1536 moveto 2560 1568 lineto stroke 2560 1568 moveto 2592 1604 lineto stroke 2592 1604 moveto 2624 1636 lineto stroke 2624 1636 moveto 2652 1668 lineto stroke 2652 1668 moveto 2676 1700 lineto stroke 2676 1700 moveto 2696 1728 lineto stroke 2696 1728 moveto 2716 1752 lineto stroke 2716 1752 moveto 2736 1780 lineto stroke 2736 1780 moveto 2752 1804 lineto stroke 2752 1804 moveto 2768 1828 lineto stroke 2768 1828 moveto 2780 1852 lineto stroke 2780 1852 moveto 2792 1872 lineto stroke 2792 1872 moveto 2800 1892 lineto stroke 2800 1892 moveto 2812 1916 lineto stroke 2812 1916 moveto 2820 1932 lineto stroke 2820 1932 moveto 2824 1952 lineto stroke 2824 1952 moveto 2832 1964 lineto stroke 2832 1964 moveto 2836 1980 lineto stroke 2836 1980 moveto 2836 1992 lineto stroke 2836 1992 moveto 2840 2004 lineto stroke 2840 2004 moveto 2840 2012 lineto stroke 2840 2012 moveto 2840 2020 lineto stroke 2840 2020 moveto 2840 2024 lineto stroke 2840 2024 moveto 2840 2028 lineto stroke 2840 2028 moveto 2836 2032 lineto stroke 2836 2032 moveto 2836 2036 lineto stroke 2836 2036 moveto 2836 2040 lineto stroke 2836 2040 moveto 2832 2044 lineto stroke 2832 2044 moveto 2828 2048 lineto stroke 2828 2048 moveto 2828 2052 lineto stroke 2828 2052 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 3204 2276 moveto 3204 2276 lineto stroke 3204 2276 moveto 3204 2288 moveto 3204 2288 lineto stroke 3204 2288 moveto 3208 2304 moveto 3208 2304 lineto stroke 3208 2304 moveto 3212 2320 moveto 3212 2320 lineto stroke 3212 2320 moveto 3216 2332 moveto 3216 2332 lineto stroke 3216 2332 moveto 3216 2348 moveto 3216 2348 lineto stroke 3216 2348 moveto 3220 2364 moveto 3220 2364 lineto stroke 3220 2364 moveto 3224 2376 moveto 3224 2376 lineto stroke 3224 2376 moveto 3228 2392 moveto 3228 2392 lineto stroke 3228 2392 moveto 3232 2404 moveto 3232 2404 lineto stroke 3232 2404 moveto 3236 2420 moveto 3236 2420 lineto stroke 3236 2420 moveto 3240 2436 moveto 3240 2436 lineto stroke 3240 2436 moveto 3244 2448 moveto 3244 2448 lineto stroke 3244 2448 moveto 3252 2464 moveto 3252 2464 lineto stroke 3252 2464 moveto 3256 2476 moveto 3256 2476 lineto stroke 3256 2476 moveto 3264 2492 moveto 3264 2492 lineto stroke 3264 2492 moveto 3272 2504 moveto 3272 2504 lineto stroke 3272 2504 moveto 3288 2516 moveto 3288 2516 lineto stroke 3288 2516 moveto 3308 2516 moveto 3308 2516 lineto stroke 3308 2516 moveto 3320 2504 moveto 3320 2504 lineto stroke 3320 2504 moveto 3332 2488 moveto 3332 2488 lineto stroke 3332 2488 moveto 3336 2476 moveto 3336 2476 lineto stroke 3336 2476 moveto 3344 2464 moveto 3344 2464 lineto stroke 3344 2464 moveto 3352 2448 moveto 3352 2448 lineto stroke 3352 2448 moveto 3356 2432 moveto 3356 2432 lineto stroke 3356 2432 moveto 3360 2420 moveto 3360 2420 lineto stroke 3360 2420 moveto 3368 2404 moveto 3368 2404 lineto stroke 3368 2404 moveto 3372 2392 moveto 3372 2392 lineto stroke 3372 2392 moveto 3376 2376 moveto 3376 2376 lineto stroke 3376 2376 moveto 3380 2360 moveto 3380 2360 lineto stroke 3380 2360 moveto 3384 2348 moveto 3384 2348 lineto stroke 3384 2348 moveto 3388 2332 moveto 3388 2332 lineto stroke 3388 2332 moveto 3392 2316 moveto 3392 2316 lineto stroke 3392 2316 moveto 3396 2304 moveto 3396 2304 lineto stroke 3396 2304 moveto 3400 2288 moveto 3400 2288 lineto stroke 3400 2288 moveto 3404 2276 moveto 3404 2276 lineto stroke 3404 2276 moveto 3404 2260 moveto 3404 2260 lineto stroke 3404 2260 moveto 3408 2244 moveto 3408 2244 lineto stroke 3408 2244 moveto 3412 2232 moveto 3412 2232 lineto stroke 3412 2232 moveto 3416 2216 moveto 3416 2216 lineto stroke 3416 2216 moveto 3420 2200 moveto 3420 2200 lineto stroke 3420 2200 moveto 3420 2188 moveto 3420 2188 lineto stroke 3420 2188 moveto 3424 2172 moveto 3424 2172 lineto stroke 3424 2172 moveto 3428 2156 moveto 3428 2156 lineto stroke 3428 2156 moveto 3432 2144 moveto 3432 2144 lineto stroke 3432 2144 moveto 3432 2128 moveto 3432 2128 lineto stroke 3432 2128 moveto 3436 2112 moveto 3436 2112 lineto stroke 3436 2112 moveto 3440 2100 moveto 3440 2100 lineto stroke 3440 2100 moveto 3440 2084 moveto 3440 2084 lineto stroke 3440 2084 moveto 3444 2068 moveto 3444 2068 lineto stroke 3444 2068 moveto 3444 2056 moveto 3444 2056 lineto stroke 3444 2056 moveto 3448 2040 moveto 3448 2040 lineto stroke 3448 2040 moveto 3448 2024 moveto 3448 2024 lineto stroke 3448 2024 moveto 3448 2008 moveto 3448 2008 lineto stroke 3448 2008 moveto 3444 2000 moveto 3444 2000 lineto stroke 3444 2000 moveto 3432 2012 moveto 3432 2012 lineto stroke 3432 2012 moveto 3424 2028 moveto 3424 2028 lineto stroke 3424 2028 moveto 3416 2040 moveto 3416 2040 lineto stroke 3416 2040 moveto 3408 2052 moveto 3408 2052 lineto stroke 3408 2052 moveto 3400 2068 moveto 3400 2068 lineto stroke 3400 2068 moveto 3392 2080 moveto 3392 2080 lineto stroke 3392 2080 moveto 3384 2096 moveto 3384 2096 lineto stroke 3384 2096 moveto 3376 2108 moveto 3376 2108 lineto stroke 3376 2108 moveto 3364 2120 moveto 3364 2120 lineto stroke 3364 2120 moveto 3356 2136 moveto 3356 2136 lineto stroke 3356 2136 moveto 3348 2148 moveto 3348 2148 lineto stroke 3348 2148 moveto 3336 2160 moveto 3336 2160 lineto stroke 3336 2160 moveto 3324 2172 moveto 3324 2172 lineto stroke 3324 2172 moveto 3316 2184 moveto 3316 2184 lineto stroke 3316 2184 moveto 3304 2196 moveto 3304 2196 lineto stroke 3304 2196 moveto 3288 2208 moveto 3288 2208 lineto stroke 3288 2208 moveto 3276 2220 moveto 3276 2220 lineto stroke 3276 2220 moveto 3260 2232 moveto 3260 2232 lineto stroke 3260 2232 moveto 3244 2240 moveto 3244 2240 lineto stroke 3244 2240 moveto 3228 2252 moveto 3228 2252 lineto stroke 3228 2252 moveto 3212 2256 moveto 3212 2256 lineto stroke 3212 2256 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 1804 2052 moveto 1804 2052 lineto stroke 1804 2052 moveto 1788 2052 moveto 1788 2052 lineto stroke 1788 2052 moveto 1772 2052 moveto 1772 2052 lineto stroke 1772 2052 moveto 1756 2052 moveto 1756 2052 lineto stroke 1756 2052 moveto 1740 2052 moveto 1740 2052 lineto stroke 1740 2052 moveto 1724 2052 moveto 1724 2052 lineto stroke 1724 2052 moveto 1704 2052 moveto 1704 2052 lineto stroke 1704 2052 moveto 1688 2052 moveto 1688 2052 lineto stroke 1688 2052 moveto 1672 2052 moveto 1672 2052 lineto stroke 1672 2052 moveto 1656 2052 moveto 1656 2052 lineto stroke 1656 2052 moveto 1636 2052 moveto 1636 2052 lineto stroke 1636 2052 moveto 1620 2048 moveto 1620 2048 lineto stroke 1620 2048 moveto 1604 2048 moveto 1604 2048 lineto stroke 1604 2048 moveto 1584 2048 moveto 1584 2048 lineto stroke 1584 2048 moveto 1568 2044 moveto 1568 2044 lineto stroke 1568 2044 moveto 1548 2044 moveto 1548 2044 lineto stroke 1548 2044 moveto 1532 2040 moveto 1532 2040 lineto stroke 1532 2040 moveto 1512 2040 moveto 1512 2040 lineto stroke 1512 2040 moveto 1496 2036 moveto 1496 2036 lineto stroke 1496 2036 moveto 1476 2032 moveto 1476 2032 lineto stroke 1476 2032 moveto 1460 2028 moveto 1460 2028 lineto stroke 1460 2028 moveto 1440 2028 moveto 1440 2028 lineto stroke 1440 2028 moveto 1420 2024 moveto 1420 2024 lineto stroke 1420 2024 moveto 1404 2020 moveto 1404 2020 lineto stroke 1404 2020 moveto 1384 2016 moveto 1384 2016 lineto stroke 1384 2016 moveto 1364 2008 moveto 1364 2008 lineto stroke 1364 2008 moveto 1344 2004 moveto 1344 2004 lineto stroke 1344 2004 moveto 1324 2000 moveto 1324 2000 lineto stroke 1324 2000 moveto 1304 1992 moveto 1304 1992 lineto stroke 1304 1992 moveto 1284 1988 moveto 1284 1988 lineto stroke 1284 1988 moveto 1264 1980 moveto 1264 1980 lineto stroke 1264 1980 moveto 1244 1976 moveto 1244 1976 lineto stroke 1244 1976 moveto 1224 1968 moveto 1224 1968 lineto stroke 1224 1968 moveto 1204 1960 moveto 1204 1960 lineto stroke 1204 1960 moveto 1184 1952 moveto 1184 1952 lineto stroke 1184 1952 moveto 1164 1940 moveto 1164 1940 lineto stroke 1164 1940 moveto 1140 1932 moveto 1140 1932 lineto stroke 1140 1932 moveto 1120 1924 moveto 1120 1924 lineto stroke 1120 1924 moveto 1100 1912 moveto 1100 1912 lineto stroke 1100 1912 moveto 1080 1900 moveto 1080 1900 lineto stroke 1080 1900 moveto 1056 1888 moveto 1056 1888 lineto stroke 1056 1888 moveto 1036 1876 moveto 1036 1876 lineto stroke 1036 1876 moveto 1016 1864 moveto 1016 1864 lineto stroke 1016 1864 moveto 996 1852 moveto 996 1852 lineto stroke 996 1852 moveto 976 1836 moveto 976 1836 lineto stroke 976 1836 moveto 956 1820 moveto 956 1820 lineto stroke 956 1820 moveto 932 1808 moveto 932 1808 lineto stroke 932 1808 moveto 916 1792 moveto 916 1792 lineto stroke 916 1792 moveto 896 1772 moveto 896 1772 lineto stroke 896 1772 moveto 876 1756 moveto 876 1756 lineto stroke 876 1756 moveto 860 1740 moveto 860 1740 lineto stroke 860 1740 moveto 840 1720 moveto 840 1720 lineto stroke 840 1720 moveto 824 1704 moveto 824 1704 lineto stroke 824 1704 moveto 808 1684 moveto 808 1684 lineto stroke 808 1684 moveto 792 1664 moveto 792 1664 lineto stroke 792 1664 moveto 780 1648 moveto 780 1648 lineto stroke 780 1648 moveto 768 1628 moveto 768 1628 lineto stroke 768 1628 moveto 756 1608 moveto 756 1608 lineto stroke 756 1608 moveto 744 1592 moveto 744 1592 lineto stroke 744 1592 moveto 736 1572 moveto 736 1572 lineto stroke 736 1572 moveto 724 1556 moveto 724 1556 lineto stroke 724 1556 moveto 720 1536 moveto 720 1536 lineto stroke 720 1536 moveto 712 1520 moveto 712 1520 lineto stroke 712 1520 moveto 708 1500 moveto 708 1500 lineto stroke 708 1500 moveto 704 1484 moveto 704 1484 lineto stroke 704 1484 moveto 700 1468 moveto 700 1468 lineto stroke 700 1468 moveto 696 1452 moveto 696 1452 lineto stroke 696 1452 moveto 696 1436 moveto 696 1436 lineto stroke 696 1436 moveto 696 1424 moveto 696 1424 lineto stroke 696 1424 moveto 696 1408 moveto 696 1408 lineto stroke 696 1408 moveto 700 1396 moveto 700 1396 lineto stroke 700 1396 moveto 704 1384 moveto 704 1384 lineto stroke 704 1384 moveto 708 1372 moveto 708 1372 lineto stroke 708 1372 moveto 712 1360 moveto 712 1360 lineto stroke 712 1360 moveto 720 1348 moveto 720 1348 lineto stroke 720 1348 moveto 728 1340 moveto 728 1340 lineto stroke 728 1340 moveto 736 1332 moveto 736 1332 lineto stroke 736 1332 moveto 744 1324 moveto 744 1324 lineto stroke 744 1324 moveto 756 1316 moveto 756 1316 lineto stroke 756 1316 moveto 768 1312 moveto 768 1312 lineto stroke 768 1312 moveto 780 1304 moveto 780 1304 lineto stroke 780 1304 moveto 796 1304 moveto 796 1304 lineto stroke 796 1304 moveto 812 1300 moveto 812 1300 lineto stroke 812 1300 moveto 828 1300 moveto 828 1300 lineto stroke 828 1300 moveto 844 1300 moveto 844 1300 lineto stroke 844 1300 moveto 860 1300 moveto 860 1300 lineto stroke 860 1300 moveto 880 1304 moveto 880 1304 lineto stroke 880 1304 moveto 896 1308 moveto 896 1308 lineto stroke 896 1308 moveto 916 1312 moveto 916 1312 lineto stroke 916 1312 moveto 936 1320 moveto 936 1320 lineto stroke 936 1320 moveto 956 1324 moveto 956 1324 lineto stroke 956 1324 moveto 976 1332 moveto 976 1332 lineto stroke 976 1332 moveto 1000 1340 moveto 1000 1340 lineto stroke 1000 1340 moveto 1020 1352 moveto 1020 1352 lineto stroke 1020 1352 moveto 1040 1360 moveto 1040 1360 lineto stroke 1040 1360 moveto 1060 1372 moveto 1060 1372 lineto stroke 1060 1372 moveto 1084 1384 moveto 1084 1384 lineto stroke 1084 1384 moveto 1104 1396 moveto 1104 1396 lineto stroke 1104 1396 moveto 1124 1408 moveto 1124 1408 lineto stroke 1124 1408 moveto 1144 1424 moveto 1144 1424 lineto stroke 1144 1424 moveto 1168 1436 moveto 1168 1436 lineto stroke 1168 1436 moveto 1188 1452 moveto 1188 1452 lineto stroke 1188 1452 moveto 1208 1464 moveto 1208 1464 lineto stroke 1208 1464 moveto 1228 1480 moveto 1228 1480 lineto stroke 1228 1480 moveto 1248 1496 moveto 1248 1496 lineto stroke 1248 1496 moveto 1268 1508 moveto 1268 1508 lineto stroke 1268 1508 moveto 1288 1524 moveto 1288 1524 lineto stroke 1288 1524 moveto 1308 1540 moveto 1308 1540 lineto stroke 1308 1540 moveto 1328 1556 moveto 1328 1556 lineto stroke 1328 1556 moveto 1348 1572 moveto 1348 1572 lineto stroke 1348 1572 moveto 1368 1592 moveto 1368 1592 lineto stroke 1368 1592 moveto 1388 1608 moveto 1388 1608 lineto stroke 1388 1608 moveto 1404 1624 moveto 1404 1624 lineto stroke 1404 1624 moveto 1424 1640 moveto 1424 1640 lineto stroke 1424 1640 moveto 1444 1656 moveto 1444 1656 lineto stroke 1444 1656 moveto 1460 1676 moveto 1460 1676 lineto stroke 1460 1676 moveto 1480 1692 moveto 1480 1692 lineto stroke 1480 1692 moveto 1500 1708 moveto 1500 1708 lineto stroke 1500 1708 moveto 1516 1728 moveto 1516 1728 lineto stroke 1516 1728 moveto 1536 1744 moveto 1536 1744 lineto stroke 1536 1744 moveto 1552 1760 moveto 1552 1760 lineto stroke 1552 1760 moveto 1572 1780 moveto 1572 1780 lineto stroke 1572 1780 moveto 1588 1796 moveto 1588 1796 lineto stroke 1588 1796 moveto 1604 1816 moveto 1604 1816 lineto stroke 1604 1816 moveto 1624 1832 moveto 1624 1832 lineto stroke 1624 1832 moveto 1640 1852 moveto 1640 1852 lineto stroke 1640 1852 moveto 1656 1868 moveto 1656 1868 lineto stroke 1656 1868 moveto 1672 1888 moveto 1672 1888 lineto stroke 1672 1888 moveto 1692 1904 moveto 1692 1904 lineto stroke 1692 1904 moveto 1708 1924 moveto 1708 1924 lineto stroke 1708 1924 moveto 1724 1944 moveto 1724 1944 lineto stroke 1724 1944 moveto 1740 1960 moveto 1740 1960 lineto stroke 1740 1960 moveto 1756 1980 moveto 1756 1980 lineto stroke 1756 1980 moveto 1772 1996 moveto 1772 1996 lineto stroke 1772 1996 moveto 1788 2016 moveto 1788 2016 lineto stroke 1788 2016 moveto 1804 2032 moveto 1804 2032 lineto stroke 1804 2032 moveto 2824 1392 moveto 2824 1392 lineto stroke 2824 1392 moveto 2804 1380 moveto 2804 1380 lineto stroke 2804 1380 moveto 2784 1368 moveto 2784 1368 lineto stroke 2784 1368 moveto 2768 1356 moveto 2768 1356 lineto stroke 2768 1356 moveto 2748 1344 moveto 2748 1344 lineto stroke 2748 1344 moveto 2728 1332 moveto 2728 1332 lineto stroke 2728 1332 moveto 2712 1320 moveto 2712 1320 lineto stroke 2712 1320 moveto 2692 1308 moveto 2692 1308 lineto stroke 2692 1308 moveto 2672 1300 moveto 2672 1300 lineto stroke 2672 1300 moveto 2656 1288 moveto 2656 1288 lineto stroke 2656 1288 moveto 2636 1276 moveto 2636 1276 lineto stroke 2636 1276 moveto 2616 1264 moveto 2616 1264 lineto stroke 2616 1264 moveto 2600 1252 moveto 2600 1252 lineto stroke 2600 1252 moveto 2580 1240 moveto 2580 1240 lineto stroke 2580 1240 moveto 2564 1228 moveto 2564 1228 lineto stroke 2564 1228 moveto 2544 1216 moveto 2544 1216 lineto stroke 2544 1216 moveto 2524 1204 moveto 2524 1204 lineto stroke 2524 1204 moveto 2508 1196 moveto 2508 1196 lineto stroke 2508 1196 moveto 2488 1184 moveto 2488 1184 lineto stroke 2488 1184 moveto 2472 1172 moveto 2472 1172 lineto stroke 2472 1172 moveto 2452 1160 moveto 2452 1160 lineto stroke 2452 1160 moveto 2436 1148 moveto 2436 1148 lineto stroke 2436 1148 moveto 2416 1136 moveto 2416 1136 lineto stroke 2416 1136 moveto 2396 1124 moveto 2396 1124 lineto stroke 2396 1124 moveto 2380 1112 moveto 2380 1112 lineto stroke 2380 1112 moveto 2360 1104 moveto 2360 1104 lineto stroke 2360 1104 moveto 2344 1092 moveto 2344 1092 lineto stroke 2344 1092 moveto 2324 1080 moveto 2324 1080 lineto stroke 2324 1080 moveto 2308 1068 moveto 2308 1068 lineto stroke 2308 1068 moveto 2292 1056 moveto 2292 1056 lineto stroke 2292 1056 moveto 2272 1044 moveto 2272 1044 lineto stroke 2272 1044 moveto 2256 1032 moveto 2256 1032 lineto stroke 2256 1032 moveto 2236 1024 moveto 2236 1024 lineto stroke 2236 1024 moveto 2220 1012 moveto 2220 1012 lineto stroke 2220 1012 moveto 2200 1000 moveto 2200 1000 lineto stroke 2200 1000 moveto 2184 988 moveto 2184 988 lineto stroke 2184 988 moveto 2168 976 moveto 2168 976 lineto stroke 2168 976 moveto 2148 964 moveto 2148 964 lineto stroke 2148 964 moveto 2132 952 moveto 2132 952 lineto stroke 2132 952 moveto 2116 940 moveto 2116 940 lineto stroke 2116 940 moveto 2100 932 moveto 2100 932 lineto stroke 2100 932 moveto 2080 920 moveto 2080 920 lineto stroke 2080 920 moveto 2064 908 moveto 2064 908 lineto stroke 2064 908 moveto 2048 896 moveto 2048 896 lineto stroke 2048 896 moveto 2032 884 moveto 2032 884 lineto stroke 2032 884 moveto 2016 872 moveto 2016 872 lineto stroke 2016 872 moveto 2000 864 moveto 2000 864 lineto stroke 2000 864 moveto 1984 852 moveto 1984 852 lineto stroke 1984 852 moveto 1968 840 moveto 1968 840 lineto stroke 1968 840 moveto 1956 828 moveto 1956 828 lineto stroke 1956 828 moveto 1940 816 moveto 1940 816 lineto stroke 1940 816 moveto 1928 808 moveto 1928 808 lineto stroke 1928 808 moveto 1916 796 moveto 1916 796 lineto stroke 1916 796 moveto 1904 784 moveto 1904 784 lineto stroke 1904 784 moveto 1900 776 moveto 1900 776 lineto stroke 1900 776 moveto 1908 772 moveto 1908 772 lineto stroke 1908 772 moveto 1940 780 moveto 1940 780 lineto stroke 1940 780 moveto 1964 792 moveto 1964 792 lineto stroke 1964 792 moveto 1992 804 moveto 1992 804 lineto stroke 1992 804 moveto 2016 812 moveto 2016 812 lineto stroke 2016 812 moveto 2040 824 moveto 2040 824 lineto stroke 2040 824 moveto 2064 836 moveto 2064 836 lineto stroke 2064 836 moveto 2084 848 moveto 2084 848 lineto stroke 2084 848 moveto 2108 860 moveto 2108 860 lineto stroke 2108 860 moveto 2128 872 moveto 2128 872 lineto stroke 2128 872 moveto 2152 884 moveto 2152 884 lineto stroke 2152 884 moveto 2172 896 moveto 2172 896 lineto stroke 2172 896 moveto 2192 908 moveto 2192 908 lineto stroke 2192 908 moveto 2216 916 moveto 2216 916 lineto stroke 2216 916 moveto 2236 928 moveto 2236 928 lineto stroke 2236 928 moveto 2256 940 moveto 2256 940 lineto stroke 2256 940 moveto 2276 952 moveto 2276 952 lineto stroke 2276 952 moveto 2296 964 moveto 2296 964 lineto stroke 2296 964 moveto 2316 976 moveto 2316 976 lineto stroke 2316 976 moveto 2336 988 moveto 2336 988 lineto stroke 2336 988 moveto 2356 1000 moveto 2356 1000 lineto stroke 2356 1000 moveto 2376 1012 moveto 2376 1012 lineto stroke 2376 1012 moveto 2396 1024 moveto 2396 1024 lineto stroke 2396 1024 moveto 2412 1032 moveto 2412 1032 lineto stroke 2412 1032 moveto 2432 1044 moveto 2432 1044 lineto stroke 2432 1044 moveto 2452 1056 moveto 2452 1056 lineto stroke 2452 1056 moveto 2468 1068 moveto 2468 1068 lineto stroke 2468 1068 moveto 2488 1080 moveto 2488 1080 lineto stroke 2488 1080 moveto 2504 1092 moveto 2504 1092 lineto stroke 2504 1092 moveto 2524 1104 moveto 2524 1104 lineto stroke 2524 1104 moveto 2540 1116 moveto 2540 1116 lineto stroke 2540 1116 moveto 2560 1124 moveto 2560 1124 lineto stroke 2560 1124 moveto 2576 1136 moveto 2576 1136 lineto stroke 2576 1136 moveto 2592 1148 moveto 2592 1148 lineto stroke 2592 1148 moveto 2608 1160 moveto 2608 1160 lineto stroke 2608 1160 moveto 2628 1172 moveto 2628 1172 lineto stroke 2628 1172 moveto 2644 1184 moveto 2644 1184 lineto stroke 2644 1184 moveto 2660 1196 moveto 2660 1196 lineto stroke 2660 1196 moveto 2672 1204 moveto 2672 1204 lineto stroke 2672 1204 moveto 2688 1216 moveto 2688 1216 lineto stroke 2688 1216 moveto 2704 1228 moveto 2704 1228 lineto stroke 2704 1228 moveto 2720 1240 moveto 2720 1240 lineto stroke 2720 1240 moveto 2732 1252 moveto 2732 1252 lineto stroke 2732 1252 moveto 2744 1260 moveto 2744 1260 lineto stroke 2744 1260 moveto 2760 1272 moveto 2760 1272 lineto stroke 2760 1272 moveto 2772 1284 moveto 2772 1284 lineto stroke 2772 1284 moveto 2784 1292 moveto 2784 1292 lineto stroke 2784 1292 moveto 2792 1304 moveto 2792 1304 lineto stroke 2792 1304 moveto 2804 1316 moveto 2804 1316 lineto stroke 2804 1316 moveto 2812 1324 moveto 2812 1324 lineto stroke 2812 1324 moveto 2820 1336 moveto 2820 1336 lineto stroke 2820 1336 moveto 2828 1344 moveto 2828 1344 lineto stroke 2828 1344 moveto 2836 1356 moveto 2836 1356 lineto stroke 2836 1356 moveto 2836 1364 moveto 2836 1364 lineto stroke 2836 1364 moveto 2840 1372 moveto 2840 1372 lineto stroke 2840 1372 moveto 2836 1380 moveto 2836 1380 lineto stroke 2836 1380 moveto 2832 1388 moveto 2832 1388 lineto stroke 2832 1388 moveto 2824 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 2824 2052 moveto 2820 2052 lineto stroke 2820 2052 moveto 2816 2052 lineto stroke 2816 2052 moveto 2812 2052 lineto stroke 2812 2052 moveto 2804 2052 lineto stroke 2804 2052 moveto 2800 2052 lineto stroke 2800 2052 moveto 2792 2052 lineto stroke 2792 2052 moveto 2788 2052 lineto stroke 2788 2052 moveto 2780 2052 lineto stroke 2780 2052 moveto 2772 2052 lineto stroke 2772 2052 moveto 2760 2056 lineto stroke 2760 2056 moveto 2752 2056 lineto stroke 2752 2056 moveto 2740 2056 lineto stroke 2740 2056 moveto 2728 2056 lineto stroke 2728 2056 moveto 2712 2056 lineto stroke 2712 2056 moveto 2700 2056 lineto stroke 2700 2056 moveto 2684 2052 lineto stroke 2684 2052 moveto 2668 2052 lineto stroke 2668 2052 moveto 2648 2052 lineto stroke 2648 2052 moveto 2632 2052 lineto stroke 2632 2052 moveto 2612 2052 lineto stroke 2612 2052 moveto 2588 2048 lineto stroke 2588 2048 moveto 2564 2048 lineto stroke 2564 2048 moveto 2536 2044 lineto stroke 2536 2044 moveto 2508 2040 lineto stroke 2508 2040 moveto 2480 2036 lineto stroke 2480 2036 moveto 2448 2032 lineto stroke 2448 2032 moveto 2416 2024 lineto stroke 2416 2024 moveto 2380 2016 lineto stroke 2380 2016 moveto 2344 2008 lineto stroke 2344 2008 moveto 2308 1996 lineto stroke 2308 1996 moveto 2272 1988 lineto stroke 2272 1988 moveto 2236 1972 lineto stroke 2236 1972 moveto 2196 1960 lineto stroke 2196 1960 moveto 2160 1944 lineto stroke 2160 1944 moveto 2124 1928 lineto stroke 2124 1928 moveto 2088 1908 lineto stroke 2088 1908 moveto 2052 1888 lineto stroke 2052 1888 moveto 2016 1868 lineto stroke 2016 1868 moveto 1980 1844 lineto stroke 1980 1844 moveto 1944 1816 lineto stroke 1944 1816 moveto 1908 1792 lineto stroke 1908 1792 moveto 1880 1764 lineto stroke 1880 1764 moveto 1848 1732 lineto stroke 1848 1732 moveto 1820 1704 lineto stroke 1820 1704 moveto 1796 1672 lineto stroke 1796 1672 moveto 1768 1636 lineto stroke 1768 1636 moveto 1748 1600 lineto stroke 1748 1600 moveto 1728 1564 lineto stroke 1728 1564 moveto 1712 1528 lineto stroke 1712 1528 moveto 1704 1500 lineto stroke 1704 1500 moveto 1696 1468 lineto stroke 1696 1468 moveto 1692 1440 lineto stroke 1692 1440 moveto 1692 1416 lineto stroke 1692 1416 moveto 1696 1384 lineto stroke 1696 1384 moveto 1708 1356 lineto stroke 1708 1356 moveto 1724 1336 lineto stroke 1724 1336 moveto 1744 1316 lineto stroke 1744 1316 moveto 1764 1308 lineto stroke 1764 1308 moveto 1788 1300 lineto stroke 1788 1300 moveto 1816 1296 lineto stroke 1816 1296 moveto 1840 1296 lineto stroke 1840 1296 moveto 1872 1300 lineto stroke 1872 1300 moveto 1904 1304 lineto stroke 1904 1304 moveto 1936 1316 lineto stroke 1936 1316 moveto 1972 1328 lineto stroke 1972 1328 moveto 2008 1344 lineto stroke 2008 1344 moveto 2044 1360 lineto stroke 2044 1360 moveto 2084 1384 lineto stroke 2084 1384 moveto 2120 1404 lineto stroke 2120 1404 moveto 2168 1436 lineto stroke 2168 1436 moveto 2216 1468 lineto stroke 2216 1468 moveto 2256 1500 lineto stroke 2256 1500 moveto 2300 1532 lineto stroke 2300 1532 moveto 2340 1564 lineto stroke 2340 1564 moveto 2376 1596 lineto stroke 2376 1596 moveto 2412 1628 lineto stroke 2412 1628 moveto 2444 1656 lineto stroke 2444 1656 moveto 2476 1688 lineto stroke 2476 1688 moveto 2508 1716 lineto stroke 2508 1716 moveto 2536 1744 lineto stroke 2536 1744 moveto 2560 1768 lineto stroke 2560 1768 moveto 2588 1796 lineto stroke 2588 1796 moveto 2612 1820 lineto stroke 2612 1820 moveto 2636 1844 lineto stroke 2636 1844 moveto 2656 1864 lineto stroke 2656 1864 moveto 2680 1892 lineto stroke 2680 1892 moveto 2700 1912 lineto stroke 2700 1912 moveto 2716 1932 lineto stroke 2716 1932 moveto 2732 1948 lineto stroke 2732 1948 moveto 2748 1968 lineto stroke 2748 1968 moveto 2760 1980 lineto stroke 2760 1980 moveto 2772 1996 lineto stroke 2772 1996 moveto 2780 2004 lineto stroke 2780 2004 moveto 2788 2012 lineto stroke 2788 2012 moveto 2796 2020 lineto stroke 2796 2020 moveto 2800 2028 lineto stroke 2800 2028 moveto 2804 2032 lineto stroke 2804 2032 moveto 2812 2040 lineto stroke 2812 2040 moveto 2816 2044 lineto stroke 2816 2044 moveto 2820 2048 lineto stroke 2820 2048 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 3200 2276 moveto 3200 2276 lineto stroke 3200 2276 moveto 3200 2288 moveto 3200 2288 lineto stroke 3200 2288 moveto 3200 2304 moveto 3200 2304 lineto stroke 3200 2304 moveto 3200 2320 moveto 3200 2320 lineto stroke 3200 2320 moveto 3200 2332 moveto 3200 2332 lineto stroke 3200 2332 moveto 3200 2348 moveto 3200 2348 lineto stroke 3200 2348 moveto 3200 2364 moveto 3200 2364 lineto stroke 3200 2364 moveto 3200 2376 moveto 3200 2376 lineto stroke 3200 2376 moveto 3200 2392 moveto 3200 2392 lineto stroke 3200 2392 moveto 3200 2408 moveto 3200 2408 lineto stroke 3200 2408 moveto 3200 2424 moveto 3200 2424 lineto stroke 3200 2424 moveto 3200 2436 moveto 3200 2436 lineto stroke 3200 2436 moveto 3200 2452 moveto 3200 2452 lineto stroke 3200 2452 moveto 3200 2468 moveto 3200 2468 lineto stroke 3200 2468 moveto 3200 2480 moveto 3200 2480 lineto stroke 3200 2480 moveto 3200 2496 moveto 3200 2496 lineto stroke 3200 2496 moveto 3200 2512 moveto 3200 2512 lineto stroke 3200 2512 moveto 3200 2516 moveto 3200 2516 lineto stroke 3200 2516 moveto 3200 2504 moveto 3200 2504 lineto stroke 3200 2504 moveto 3200 2488 moveto 3200 2488 lineto stroke 3200 2488 moveto 3200 2472 moveto 3200 2472 lineto stroke 3200 2472 moveto 3200 2460 moveto 3200 2460 lineto stroke 3200 2460 moveto 3200 2444 moveto 3200 2444 lineto stroke 3200 2444 moveto 3200 2428 moveto 3200 2428 lineto stroke 3200 2428 moveto 3200 2416 moveto 3200 2416 lineto stroke 3200 2416 moveto 3200 2400 moveto 3200 2400 lineto stroke 3200 2400 moveto 3200 2384 moveto 3200 2384 lineto stroke 3200 2384 moveto 3200 2368 moveto 3200 2368 lineto stroke 3200 2368 moveto 3200 2356 moveto 3200 2356 lineto stroke 3200 2356 moveto 3200 2340 moveto 3200 2340 lineto stroke 3200 2340 moveto 3200 2324 moveto 3200 2324 lineto stroke 3200 2324 moveto 3200 2312 moveto 3200 2312 lineto stroke 3200 2312 moveto 3200 2296 moveto 3200 2296 lineto stroke 3200 2296 moveto 3200 2280 moveto 3200 2280 lineto stroke 3200 2280 moveto 3200 2268 moveto 3200 2268 lineto stroke 3200 2268 moveto 3200 2252 moveto 3200 2252 lineto stroke 3200 2252 moveto 3200 2236 moveto 3200 2236 lineto stroke 3200 2236 moveto 3200 2224 moveto 3200 2224 lineto stroke 3200 2224 moveto 3200 2208 moveto 3200 2208 lineto stroke 3200 2208 moveto 3200 2192 moveto 3200 2192 lineto stroke 3200 2192 moveto 3200 2176 moveto 3200 2176 lineto stroke 3200 2176 moveto 3200 2164 moveto 3200 2164 lineto stroke 3200 2164 moveto 3200 2148 moveto 3200 2148 lineto stroke 3200 2148 moveto 3200 2132 moveto 3200 2132 lineto stroke 3200 2132 moveto 3200 2120 moveto 3200 2120 lineto stroke 3200 2120 moveto 3200 2104 moveto 3200 2104 lineto stroke 3200 2104 moveto 3200 2088 moveto 3200 2088 lineto stroke 3200 2088 moveto 3200 2076 moveto 3200 2076 lineto stroke 3200 2076 moveto 3200 2060 moveto 3200 2060 lineto stroke 3200 2060 moveto 3200 2044 moveto 3200 2044 lineto stroke 3200 2044 moveto 3200 2028 moveto 3200 2028 lineto stroke 3200 2028 moveto 3200 2016 moveto 3200 2016 lineto stroke 3200 2016 moveto 3200 2000 moveto 3200 2000 lineto stroke 3200 2000 moveto 3200 2008 moveto 3200 2008 lineto stroke 3200 2008 moveto 3200 2024 moveto 3200 2024 lineto stroke 3200 2024 moveto 3200 2040 moveto 3200 2040 lineto stroke 3200 2040 moveto 3200 2052 moveto 3200 2052 lineto stroke 3200 2052 moveto 3200 2068 moveto 3200 2068 lineto stroke 3200 2068 moveto 3200 2084 moveto 3200 2084 lineto stroke 3200 2084 moveto 3200 2096 moveto 3200 2096 lineto stroke 3200 2096 moveto 3200 2112 moveto 3200 2112 lineto stroke 3200 2112 moveto 3200 2128 moveto 3200 2128 lineto stroke 3200 2128 moveto 3200 2144 moveto 3200 2144 lineto stroke 3200 2144 moveto 3200 2156 moveto 3200 2156 lineto stroke 3200 2156 moveto 3200 2172 moveto 3200 2172 lineto stroke 3200 2172 moveto 3200 2188 moveto 3200 2188 lineto stroke 3200 2188 moveto 3200 2200 moveto 3200 2200 lineto stroke 3200 2200 moveto 3200 2216 moveto 3200 2216 lineto stroke 3200 2216 moveto 3200 2232 moveto 3200 2232 lineto stroke 3200 2232 moveto 3200 2244 moveto 3200 2244 lineto stroke 3200 2244 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 1804 2052 moveto 1804 2052 lineto stroke 1804 2052 moveto 1788 2052 moveto 1788 2052 lineto stroke 1788 2052 moveto 1772 2052 moveto 1772 2052 lineto stroke 1772 2052 moveto 1756 2056 moveto 1756 2056 lineto stroke 1756 2056 moveto 1740 2056 moveto 1740 2056 lineto stroke 1740 2056 moveto 1724 2056 moveto 1724 2056 lineto stroke 1724 2056 moveto 1708 2056 moveto 1708 2056 lineto stroke 1708 2056 moveto 1688 2056 moveto 1688 2056 lineto stroke 1688 2056 moveto 1672 2052 moveto 1672 2052 lineto stroke 1672 2052 moveto 1656 2052 moveto 1656 2052 lineto stroke 1656 2052 moveto 1640 2052 moveto 1640 2052 lineto stroke 1640 2052 moveto 1620 2052 moveto 1620 2052 lineto stroke 1620 2052 moveto 1604 2052 moveto 1604 2052 lineto stroke 1604 2052 moveto 1588 2048 moveto 1588 2048 lineto stroke 1588 2048 moveto 1568 2048 moveto 1568 2048 lineto stroke 1568 2048 moveto 1552 2044 moveto 1552 2044 lineto stroke 1552 2044 moveto 1532 2044 moveto 1532 2044 lineto stroke 1532 2044 moveto 1516 2040 moveto 1516 2040 lineto stroke 1516 2040 moveto 1496 2040 moveto 1496 2040 lineto stroke 1496 2040 moveto 1480 2036 moveto 1480 2036 lineto stroke 1480 2036 moveto 1460 2032 moveto 1460 2032 lineto stroke 1460 2032 moveto 1444 2028 moveto 1444 2028 lineto stroke 1444 2028 moveto 1424 2024 moveto 1424 2024 lineto stroke 1424 2024 moveto 1404 2024 moveto 1404 2024 lineto stroke 1404 2024 moveto 1384 2016 moveto 1384 2016 lineto stroke 1384 2016 moveto 1368 2012 moveto 1368 2012 lineto stroke 1368 2012 moveto 1348 2008 moveto 1348 2008 lineto stroke 1348 2008 moveto 1328 2004 moveto 1328 2004 lineto stroke 1328 2004 moveto 1308 2000 moveto 1308 2000 lineto stroke 1308 2000 moveto 1288 1992 moveto 1288 1992 lineto stroke 1288 1992 moveto 1268 1984 moveto 1268 1984 lineto stroke 1268 1984 moveto 1248 1980 moveto 1248 1980 lineto stroke 1248 1980 moveto 1228 1972 moveto 1228 1972 lineto stroke 1228 1972 moveto 1208 1964 moveto 1208 1964 lineto stroke 1208 1964 moveto 1188 1956 moveto 1188 1956 lineto stroke 1188 1956 moveto 1164 1948 moveto 1164 1948 lineto stroke 1164 1948 moveto 1144 1940 moveto 1144 1940 lineto stroke 1144 1940 moveto 1124 1928 moveto 1124 1928 lineto stroke 1124 1928 moveto 1104 1920 moveto 1104 1920 lineto stroke 1104 1920 moveto 1084 1908 moveto 1084 1908 lineto stroke 1084 1908 moveto 1060 1896 moveto 1060 1896 lineto stroke 1060 1896 moveto 1040 1884 moveto 1040 1884 lineto stroke 1040 1884 moveto 1020 1872 moveto 1020 1872 lineto stroke 1020 1872 moveto 1000 1856 moveto 1000 1856 lineto stroke 1000 1856 moveto 976 1844 moveto 976 1844 lineto stroke 976 1844 moveto 956 1828 moveto 956 1828 lineto stroke 956 1828 moveto 936 1812 moveto 936 1812 lineto stroke 936 1812 moveto 916 1796 moveto 916 1796 lineto stroke 916 1796 moveto 896 1780 moveto 896 1780 lineto stroke 896 1780 moveto 880 1764 moveto 880 1764 lineto stroke 880 1764 moveto 860 1748 moveto 860 1748 lineto stroke 860 1748 moveto 844 1728 moveto 844 1728 lineto stroke 844 1728 moveto 824 1712 moveto 824 1712 lineto stroke 824 1712 moveto 808 1692 moveto 808 1692 lineto stroke 808 1692 moveto 796 1676 moveto 796 1676 lineto stroke 796 1676 moveto 780 1656 moveto 780 1656 lineto stroke 780 1656 moveto 768 1636 moveto 768 1636 lineto stroke 768 1636 moveto 756 1620 moveto 756 1620 lineto stroke 756 1620 moveto 744 1600 moveto 744 1600 lineto stroke 744 1600 moveto 732 1580 moveto 732 1580 lineto stroke 732 1580 moveto 724 1564 moveto 724 1564 lineto stroke 724 1564 moveto 716 1544 moveto 716 1544 lineto stroke 716 1544 moveto 708 1528 moveto 708 1528 lineto stroke 708 1528 moveto 704 1508 moveto 704 1508 lineto stroke 704 1508 moveto 700 1492 moveto 700 1492 lineto stroke 700 1492 moveto 696 1476 moveto 696 1476 lineto stroke 696 1476 moveto 692 1460 moveto 692 1460 lineto stroke 692 1460 moveto 692 1444 moveto 692 1444 lineto stroke 692 1444 moveto 692 1428 moveto 692 1428 lineto stroke 692 1428 moveto 692 1416 moveto 692 1416 lineto stroke 692 1416 moveto 692 1400 moveto 692 1400 lineto stroke 692 1400 moveto 696 1388 moveto 696 1388 lineto stroke 696 1388 moveto 700 1376 moveto 700 1376 lineto stroke 700 1376 moveto 704 1364 moveto 704 1364 lineto stroke 704 1364 moveto 708 1352 moveto 708 1352 lineto stroke 708 1352 moveto 716 1344 moveto 716 1344 lineto stroke 716 1344 moveto 724 1332 moveto 724 1332 lineto stroke 724 1332 moveto 736 1324 moveto 736 1324 lineto stroke 736 1324 moveto 744 1316 moveto 744 1316 lineto stroke 744 1316 moveto 756 1312 moveto 756 1312 lineto stroke 756 1312 moveto 768 1304 moveto 768 1304 lineto stroke 768 1304 moveto 780 1300 moveto 780 1300 lineto stroke 780 1300 moveto 796 1300 moveto 796 1300 lineto stroke 796 1300 moveto 812 1296 moveto 812 1296 lineto stroke 812 1296 moveto 828 1296 moveto 828 1296 lineto stroke 828 1296 moveto 844 1296 moveto 844 1296 lineto stroke 844 1296 moveto 860 1300 moveto 860 1300 lineto stroke 860 1300 moveto 880 1300 moveto 880 1300 lineto stroke 880 1300 moveto 900 1304 moveto 900 1304 lineto stroke 900 1304 moveto 916 1312 moveto 916 1312 lineto stroke 916 1312 moveto 936 1316 moveto 936 1316 lineto stroke 936 1316 moveto 956 1324 moveto 956 1324 lineto stroke 956 1324 moveto 980 1332 moveto 980 1332 lineto stroke 980 1332 moveto 1000 1340 moveto 1000 1340 lineto stroke 1000 1340 moveto 1020 1352 moveto 1020 1352 lineto stroke 1020 1352 moveto 1040 1360 moveto 1040 1360 lineto stroke 1040 1360 moveto 1064 1372 moveto 1064 1372 lineto stroke 1064 1372 moveto 1084 1384 moveto 1084 1384 lineto stroke 1084 1384 moveto 1104 1396 moveto 1104 1396 lineto stroke 1104 1396 moveto 1124 1408 moveto 1124 1408 lineto stroke 1124 1408 moveto 1148 1424 moveto 1148 1424 lineto stroke 1148 1424 moveto 1168 1436 moveto 1168 1436 lineto stroke 1168 1436 moveto 1188 1448 moveto 1188 1448 lineto stroke 1188 1448 moveto 1208 1464 moveto 1208 1464 lineto stroke 1208 1464 moveto 1228 1480 moveto 1228 1480 lineto stroke 1228 1480 moveto 1248 1496 moveto 1248 1496 lineto stroke 1248 1496 moveto 1268 1508 moveto 1268 1508 lineto stroke 1268 1508 moveto 1288 1524 moveto 1288 1524 lineto stroke 1288 1524 moveto 1308 1540 moveto 1308 1540 lineto stroke 1308 1540 moveto 1328 1556 moveto 1328 1556 lineto stroke 1328 1556 moveto 1348 1572 moveto 1348 1572 lineto stroke 1348 1572 moveto 1368 1592 moveto 1368 1592 lineto stroke 1368 1592 moveto 1388 1608 moveto 1388 1608 lineto stroke 1388 1608 moveto 1404 1624 moveto 1404 1624 lineto stroke 1404 1624 moveto 1424 1640 moveto 1424 1640 lineto stroke 1424 1640 moveto 1444 1656 moveto 1444 1656 lineto stroke 1444 1656 moveto 1460 1676 moveto 1460 1676 lineto stroke 1460 1676 moveto 1480 1692 moveto 1480 1692 lineto stroke 1480 1692 moveto 1500 1708 moveto 1500 1708 lineto stroke 1500 1708 moveto 1516 1728 moveto 1516 1728 lineto stroke 1516 1728 moveto 1536 1744 moveto 1536 1744 lineto stroke 1536 1744 moveto 1552 1764 moveto 1552 1764 lineto stroke 1552 1764 moveto 1572 1780 moveto 1572 1780 lineto stroke 1572 1780 moveto 1588 1800 moveto 1588 1800 lineto stroke 1588 1800 moveto 1604 1816 moveto 1604 1816 lineto stroke 1604 1816 moveto 1624 1836 moveto 1624 1836 lineto stroke 1624 1836 moveto 1640 1852 moveto 1640 1852 lineto stroke 1640 1852 moveto 1656 1872 moveto 1656 1872 lineto stroke 1656 1872 moveto 1672 1888 moveto 1672 1888 lineto stroke 1672 1888 moveto 1692 1908 moveto 1692 1908 lineto stroke 1692 1908 moveto 1708 1924 moveto 1708 1924 lineto stroke 1708 1924 moveto 1724 1944 moveto 1724 1944 lineto stroke 1724 1944 moveto 1740 1960 moveto 1740 1960 lineto stroke 1740 1960 moveto 1756 1980 moveto 1756 1980 lineto stroke 1756 1980 moveto 1772 1996 moveto 1772 1996 lineto stroke 1772 1996 moveto 1788 2016 moveto 1788 2016 lineto stroke 1788 2016 moveto 1804 2036 moveto 1804 2036 lineto stroke 1804 2036 moveto 2824 1392 moveto 2824 1392 lineto stroke 2824 1392 moveto 2804 1380 moveto 2804 1380 lineto stroke 2804 1380 moveto 2780 1368 moveto 2780 1368 lineto stroke 2780 1368 moveto 2760 1356 moveto 2760 1356 lineto stroke 2760 1356 moveto 2740 1344 moveto 2740 1344 lineto stroke 2740 1344 moveto 2716 1332 moveto 2716 1332 lineto stroke 2716 1332 moveto 2696 1320 moveto 2696 1320 lineto stroke 2696 1320 moveto 2676 1308 moveto 2676 1308 lineto stroke 2676 1308 moveto 2656 1296 moveto 2656 1296 lineto stroke 2656 1296 moveto 2632 1284 moveto 2632 1284 lineto stroke 2632 1284 moveto 2612 1276 moveto 2612 1276 lineto stroke 2612 1276 moveto 2592 1264 moveto 2592 1264 lineto stroke 2592 1264 moveto 2572 1252 moveto 2572 1252 lineto stroke 2572 1252 moveto 2548 1240 moveto 2548 1240 lineto stroke 2548 1240 moveto 2528 1228 moveto 2528 1228 lineto stroke 2528 1228 moveto 2508 1216 moveto 2508 1216 lineto stroke 2508 1216 moveto 2488 1204 moveto 2488 1204 lineto stroke 2488 1204 moveto 2464 1192 moveto 2464 1192 lineto stroke 2464 1192 moveto 2444 1180 moveto 2444 1180 lineto stroke 2444 1180 moveto 2424 1168 moveto 2424 1168 lineto stroke 2424 1168 moveto 2400 1160 moveto 2400 1160 lineto stroke 2400 1160 moveto 2380 1148 moveto 2380 1148 lineto stroke 2380 1148 moveto 2360 1136 moveto 2360 1136 lineto stroke 2360 1136 moveto 2340 1124 moveto 2340 1124 lineto stroke 2340 1124 moveto 2316 1112 moveto 2316 1112 lineto stroke 2316 1112 moveto 2296 1100 moveto 2296 1100 lineto stroke 2296 1100 moveto 2276 1088 moveto 2276 1088 lineto stroke 2276 1088 moveto 2256 1076 moveto 2256 1076 lineto stroke 2256 1076 moveto 2232 1064 moveto 2232 1064 lineto stroke 2232 1064 moveto 2212 1052 moveto 2212 1052 lineto stroke 2212 1052 moveto 2192 1044 moveto 2192 1044 lineto stroke 2192 1044 moveto 2172 1032 moveto 2172 1032 lineto stroke 2172 1032 moveto 2148 1020 moveto 2148 1020 lineto stroke 2148 1020 moveto 2128 1008 moveto 2128 1008 lineto stroke 2128 1008 moveto 2108 996 moveto 2108 996 lineto stroke 2108 996 moveto 2084 984 moveto 2084 984 lineto stroke 2084 984 moveto 2064 972 moveto 2064 972 lineto stroke 2064 972 moveto 2044 960 moveto 2044 960 lineto stroke 2044 960 moveto 2024 948 moveto 2024 948 lineto stroke 2024 948 moveto 2000 936 moveto 2000 936 lineto stroke 2000 936 moveto 1980 928 moveto 1980 928 lineto stroke 1980 928 moveto 1960 916 moveto 1960 916 lineto stroke 1960 916 moveto 1940 904 moveto 1940 904 lineto stroke 1940 904 moveto 1916 892 moveto 1916 892 lineto stroke 1916 892 moveto 1896 880 moveto 1896 880 lineto stroke 1896 880 moveto 1876 868 moveto 1876 868 lineto stroke 1876 868 moveto 1856 856 moveto 1856 856 lineto stroke 1856 856 moveto 1832 844 moveto 1832 844 lineto stroke 1832 844 moveto 1812 832 moveto 1812 832 lineto stroke 1812 832 moveto 1792 824 moveto 1792 824 lineto stroke 1792 824 moveto 1772 812 moveto 1772 812 lineto stroke 1772 812 moveto 1748 800 moveto 1748 800 lineto stroke 1748 800 moveto 1728 788 moveto 1728 788 lineto stroke 1728 788 moveto 1708 776 moveto 1708 776 lineto stroke 1708 776 moveto 1700 772 moveto 1700 772 lineto stroke 1700 772 moveto 1720 784 moveto 1720 784 lineto stroke 1720 784 moveto 1740 796 moveto 1740 796 lineto stroke 1740 796 moveto 1764 808 moveto 1764 808 lineto stroke 1764 808 moveto 1784 816 moveto 1784 816 lineto stroke 1784 816 moveto 1804 828 moveto 1804 828 lineto stroke 1804 828 moveto 1824 840 moveto 1824 840 lineto stroke 1824 840 moveto 1848 852 moveto 1848 852 lineto stroke 1848 852 moveto 1868 864 moveto 1868 864 lineto stroke 1868 864 moveto 1888 876 moveto 1888 876 lineto stroke 1888 876 moveto 1908 888 moveto 1908 888 lineto stroke 1908 888 moveto 1932 900 moveto 1932 900 lineto stroke 1932 900 moveto 1952 912 moveto 1952 912 lineto stroke 1952 912 moveto 1972 924 moveto 1972 924 lineto stroke 1972 924 moveto 1992 932 moveto 1992 932 lineto stroke 1992 932 moveto 2016 944 moveto 2016 944 lineto stroke 2016 944 moveto 2036 956 moveto 2036 956 lineto stroke 2036 956 moveto 2056 968 moveto 2056 968 lineto stroke 2056 968 moveto 2080 980 moveto 2080 980 lineto stroke 2080 980 moveto 2100 992 moveto 2100 992 lineto stroke 2100 992 moveto 2120 1004 moveto 2120 1004 lineto stroke 2120 1004 moveto 2140 1016 moveto 2140 1016 lineto stroke 2140 1016 moveto 2164 1028 moveto 2164 1028 lineto stroke 2164 1028 moveto 2184 1040 moveto 2184 1040 lineto stroke 2184 1040 moveto 2204 1048 moveto 2204 1048 lineto stroke 2204 1048 moveto 2224 1060 moveto 2224 1060 lineto stroke 2224 1060 moveto 2248 1072 moveto 2248 1072 lineto stroke 2248 1072 moveto 2268 1084 moveto 2268 1084 lineto stroke 2268 1084 moveto 2288 1096 moveto 2288 1096 lineto stroke 2288 1096 moveto 2308 1108 moveto 2308 1108 lineto stroke 2308 1108 moveto 2332 1120 moveto 2332 1120 lineto stroke 2332 1120 moveto 2352 1132 moveto 2352 1132 lineto stroke 2352 1132 moveto 2372 1144 moveto 2372 1144 lineto stroke 2372 1144 moveto 2392 1156 moveto 2392 1156 lineto stroke 2392 1156 moveto 2416 1164 moveto 2416 1164 lineto stroke 2416 1164 moveto 2436 1176 moveto 2436 1176 lineto stroke 2436 1176 moveto 2456 1188 moveto 2456 1188 lineto stroke 2456 1188 moveto 2480 1200 moveto 2480 1200 lineto stroke 2480 1200 moveto 2500 1212 moveto 2500 1212 lineto stroke 2500 1212 moveto 2520 1224 moveto 2520 1224 lineto stroke 2520 1224 moveto 2540 1236 moveto 2540 1236 lineto stroke 2540 1236 moveto 2564 1248 moveto 2564 1248 lineto stroke 2564 1248 moveto 2584 1260 moveto 2584 1260 lineto stroke 2584 1260 moveto 2604 1272 moveto 2604 1272 lineto stroke 2604 1272 moveto 2624 1280 moveto 2624 1280 lineto stroke 2624 1280 moveto 2648 1292 moveto 2648 1292 lineto stroke 2648 1292 moveto 2668 1304 moveto 2668 1304 lineto stroke 2668 1304 moveto 2688 1316 moveto 2688 1316 lineto stroke 2688 1316 moveto 2708 1328 moveto 2708 1328 lineto stroke 2708 1328 moveto 2732 1340 moveto 2732 1340 lineto stroke 2732 1340 moveto 2752 1352 moveto 2752 1352 lineto stroke 2752 1352 moveto 2772 1364 moveto 2772 1364 lineto stroke 2772 1364 moveto 2796 1376 moveto 2796 1376 lineto stroke 2796 1376 moveto 2816 1388 moveto 2816 1388 lineto stroke 2816 1388 moveto 2824 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 2824 2052 moveto 2820 2052 lineto stroke 2820 2052 moveto 2816 2052 lineto stroke 2816 2052 moveto 2808 2052 lineto stroke 2808 2052 moveto 2800 2052 lineto stroke 2800 2052 moveto 2796 2052 lineto stroke 2796 2052 moveto 2792 2052 lineto stroke 2792 2052 moveto 2784 2052 lineto stroke 2784 2052 moveto 2776 2052 lineto stroke 2776 2052 moveto 2768 2056 lineto stroke 2768 2056 moveto 2756 2056 lineto stroke 2756 2056 moveto 2744 2056 lineto stroke 2744 2056 moveto 2732 2056 lineto stroke 2732 2056 moveto 2720 2056 lineto stroke 2720 2056 moveto 2704 2056 lineto stroke 2704 2056 moveto 2692 2056 lineto stroke 2692 2056 moveto 2676 2056 lineto stroke 2676 2056 moveto 2656 2056 lineto stroke 2656 2056 moveto 2640 2052 lineto stroke 2640 2052 moveto 2620 2052 lineto stroke 2620 2052 moveto 2596 2052 lineto stroke 2596 2052 moveto 2576 2048 lineto stroke 2576 2048 moveto 2548 2048 lineto stroke 2548 2048 moveto 2520 2044 lineto stroke 2520 2044 moveto 2492 2040 lineto stroke 2492 2040 moveto 2460 2036 lineto stroke 2460 2036 moveto 2424 2032 lineto stroke 2424 2032 moveto 2388 2024 lineto stroke 2388 2024 moveto 2352 2016 lineto stroke 2352 2016 moveto 2312 2008 lineto stroke 2312 2008 moveto 2276 2000 lineto stroke 2276 2000 moveto 2232 1988 lineto stroke 2232 1988 moveto 2192 1972 lineto stroke 2192 1972 moveto 2148 1956 lineto stroke 2148 1956 moveto 2112 1944 lineto stroke 2112 1944 moveto 2076 1928 lineto stroke 2076 1928 moveto 2036 1908 lineto stroke 2036 1908 moveto 2000 1888 lineto stroke 2000 1888 moveto 1960 1868 lineto stroke 1960 1868 moveto 1924 1844 lineto stroke 1924 1844 moveto 1884 1820 lineto stroke 1884 1820 moveto 1848 1792 lineto stroke 1848 1792 moveto 1812 1764 lineto stroke 1812 1764 moveto 1780 1736 lineto stroke 1780 1736 moveto 1748 1704 lineto stroke 1748 1704 moveto 1720 1672 lineto stroke 1720 1672 moveto 1692 1640 lineto stroke 1692 1640 moveto 1664 1608 lineto stroke 1664 1608 moveto 1644 1572 lineto stroke 1644 1572 moveto 1624 1540 lineto stroke 1624 1540 moveto 1612 1512 lineto stroke 1612 1512 moveto 1600 1480 lineto stroke 1600 1480 moveto 1592 1452 lineto stroke 1592 1452 moveto 1588 1428 lineto stroke 1588 1428 moveto 1588 1400 lineto stroke 1588 1400 moveto 1592 1376 lineto stroke 1592 1376 moveto 1596 1352 lineto stroke 1596 1352 moveto 1608 1332 lineto stroke 1608 1332 moveto 1624 1320 lineto stroke 1624 1320 moveto 1640 1308 lineto stroke 1640 1308 moveto 1660 1300 lineto stroke 1660 1300 moveto 1684 1296 lineto stroke 1684 1296 moveto 1708 1296 lineto stroke 1708 1296 moveto 1736 1296 lineto stroke 1736 1296 moveto 1768 1300 lineto stroke 1768 1300 moveto 1796 1308 lineto stroke 1796 1308 moveto 1832 1320 lineto stroke 1832 1320 moveto 1872 1336 lineto stroke 1872 1336 moveto 1908 1352 lineto stroke 1908 1352 moveto 1948 1372 lineto stroke 1948 1372 moveto 1992 1396 lineto stroke 1992 1396 moveto 2036 1424 lineto stroke 2036 1424 moveto 2080 1452 lineto stroke 2080 1452 moveto 2120 1484 lineto stroke 2120 1484 moveto 2164 1512 lineto stroke 2164 1512 moveto 2208 1544 lineto stroke 2208 1544 moveto 2248 1576 lineto stroke 2248 1576 moveto 2284 1604 lineto stroke 2284 1604 moveto 2324 1636 lineto stroke 2324 1636 moveto 2360 1664 lineto stroke 2360 1664 moveto 2392 1696 lineto stroke 2392 1696 moveto 2424 1720 lineto stroke 2424 1720 moveto 2456 1748 lineto stroke 2456 1748 moveto 2488 1776 lineto stroke 2488 1776 moveto 2516 1800 lineto stroke 2516 1800 moveto 2544 1824 lineto stroke 2544 1824 moveto 2576 1852 lineto stroke 2576 1852 moveto 2604 1880 lineto stroke 2604 1880 moveto 2632 1904 lineto stroke 2632 1904 moveto 2656 1924 lineto stroke 2656 1924 moveto 2684 1948 lineto stroke 2684 1948 moveto 2708 1964 lineto stroke 2708 1964 moveto 2724 1984 lineto stroke 2724 1984 moveto 2740 1996 lineto stroke 2740 1996 moveto 2756 2004 lineto stroke 2756 2004 moveto 2768 2016 lineto stroke 2768 2016 moveto 2776 2020 lineto stroke 2776 2020 moveto 2784 2028 lineto stroke 2784 2028 moveto 2792 2032 lineto stroke 2792 2032 moveto 2800 2040 lineto stroke 2800 2040 moveto 2808 2044 lineto stroke 2808 2044 moveto 2816 2048 lineto stroke 2816 2048 moveto 2824 2052 lineto stroke 2824 2052 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 3200 2276 moveto 3200 2276 lineto stroke 3200 2276 moveto 3196 2288 moveto 3196 2288 lineto stroke 3196 2288 moveto 3196 2304 moveto 3196 2304 lineto stroke 3196 2304 moveto 3196 2320 moveto 3196 2320 lineto stroke 3196 2320 moveto 3192 2332 moveto 3192 2332 lineto stroke 3192 2332 moveto 3192 2348 moveto 3192 2348 lineto stroke 3192 2348 moveto 3192 2364 moveto 3192 2364 lineto stroke 3192 2364 moveto 3188 2376 moveto 3188 2376 lineto stroke 3188 2376 moveto 3188 2392 moveto 3188 2392 lineto stroke 3188 2392 moveto 3184 2408 moveto 3184 2408 lineto stroke 3184 2408 moveto 3184 2420 moveto 3184 2420 lineto stroke 3184 2420 moveto 3180 2436 moveto 3180 2436 lineto stroke 3180 2436 moveto 3180 2452 moveto 3180 2452 lineto stroke 3180 2452 moveto 3176 2464 moveto 3176 2464 lineto stroke 3176 2464 moveto 3172 2480 moveto 3172 2480 lineto stroke 3172 2480 moveto 3168 2496 moveto 3168 2496 lineto stroke 3168 2496 moveto 3164 2508 moveto 3164 2508 lineto stroke 3164 2508 moveto 3156 2524 moveto 3156 2524 lineto stroke 3156 2524 moveto 3144 2516 moveto 3144 2516 lineto stroke 3144 2516 moveto 3140 2500 moveto 3140 2500 lineto stroke 3140 2500 moveto 3132 2488 moveto 3132 2488 lineto stroke 3132 2488 moveto 3132 2472 moveto 3132 2472 lineto stroke 3132 2472 moveto 3128 2456 moveto 3128 2456 lineto stroke 3128 2456 moveto 3124 2444 moveto 3124 2444 lineto stroke 3124 2444 moveto 3120 2428 moveto 3120 2428 lineto stroke 3120 2428 moveto 3120 2412 moveto 3120 2412 lineto stroke 3120 2412 moveto 3116 2400 moveto 3116 2400 lineto stroke 3116 2400 moveto 3116 2384 moveto 3116 2384 lineto stroke 3116 2384 moveto 3112 2368 moveto 3112 2368 lineto stroke 3112 2368 moveto 3112 2356 moveto 3112 2356 lineto stroke 3112 2356 moveto 3108 2340 moveto 3108 2340 lineto stroke 3108 2340 moveto 3108 2324 moveto 3108 2324 lineto stroke 3108 2324 moveto 3104 2308 moveto 3104 2308 lineto stroke 3104 2308 moveto 3104 2296 moveto 3104 2296 lineto stroke 3104 2296 moveto 3100 2280 moveto 3100 2280 lineto stroke 3100 2280 moveto 3100 2264 moveto 3100 2264 lineto stroke 3100 2264 moveto 3100 2252 moveto 3100 2252 lineto stroke 3100 2252 moveto 3096 2236 moveto 3096 2236 lineto stroke 3096 2236 moveto 3096 2220 moveto 3096 2220 lineto stroke 3096 2220 moveto 3092 2208 moveto 3092 2208 lineto stroke 3092 2208 moveto 3092 2192 moveto 3092 2192 lineto stroke 3092 2192 moveto 3092 2176 moveto 3092 2176 lineto stroke 3092 2176 moveto 3088 2164 moveto 3088 2164 lineto stroke 3088 2164 moveto 3088 2148 moveto 3088 2148 lineto stroke 3088 2148 moveto 3088 2132 moveto 3088 2132 lineto stroke 3088 2132 moveto 3084 2120 moveto 3084 2120 lineto stroke 3084 2120 moveto 3084 2104 moveto 3084 2104 lineto stroke 3084 2104 moveto 3084 2088 moveto 3084 2088 lineto stroke 3084 2088 moveto 3080 2072 moveto 3080 2072 lineto stroke 3080 2072 moveto 3080 2060 moveto 3080 2060 lineto stroke 3080 2060 moveto 3080 2044 moveto 3080 2044 lineto stroke 3080 2044 moveto 3080 2028 moveto 3080 2028 lineto stroke 3080 2028 moveto 3080 2016 moveto 3080 2016 lineto stroke 3080 2016 moveto 3080 2000 moveto 3080 2000 lineto stroke 3080 2000 moveto 3084 2008 moveto 3084 2008 lineto stroke 3084 2008 moveto 3088 2020 moveto 3088 2020 lineto stroke 3088 2020 moveto 3092 2036 moveto 3092 2036 lineto stroke 3092 2036 moveto 3096 2052 moveto 3096 2052 lineto stroke 3096 2052 moveto 3100 2064 moveto 3100 2064 lineto stroke 3100 2064 moveto 3104 2080 moveto 3104 2080 lineto stroke 3104 2080 moveto 3112 2096 moveto 3112 2096 lineto stroke 3112 2096 moveto 3116 2108 moveto 3116 2108 lineto stroke 3116 2108 moveto 3120 2124 moveto 3120 2124 lineto stroke 3120 2124 moveto 3124 2136 moveto 3124 2136 lineto stroke 3124 2136 moveto 3128 2152 moveto 3128 2152 lineto stroke 3128 2152 moveto 3136 2164 moveto 3136 2164 lineto stroke 3136 2164 moveto 3140 2180 moveto 3140 2180 lineto stroke 3140 2180 moveto 3148 2196 moveto 3148 2196 lineto stroke 3148 2196 moveto 3156 2208 moveto 3156 2208 lineto stroke 3156 2208 moveto 3164 2220 moveto 3164 2220 lineto stroke 3164 2220 moveto 3172 2236 moveto 3172 2236 lineto stroke 3172 2236 moveto 3184 2248 moveto 3184 2248 lineto stroke 3184 2248 moveto 3196 2260 moveto 3196 2260 lineto stroke 3196 2260 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 1804 2052 moveto 1804 2052 lineto stroke 1804 2052 moveto 1788 2052 moveto 1788 2052 lineto stroke 1788 2052 moveto 1772 2056 moveto 1772 2056 lineto stroke 1772 2056 moveto 1756 2056 moveto 1756 2056 lineto stroke 1756 2056 moveto 1740 2056 moveto 1740 2056 lineto stroke 1740 2056 moveto 1724 2056 moveto 1724 2056 lineto stroke 1724 2056 moveto 1708 2056 moveto 1708 2056 lineto stroke 1708 2056 moveto 1692 2056 moveto 1692 2056 lineto stroke 1692 2056 moveto 1672 2056 moveto 1672 2056 lineto stroke 1672 2056 moveto 1656 2052 moveto 1656 2052 lineto stroke 1656 2052 moveto 1640 2052 moveto 1640 2052 lineto stroke 1640 2052 moveto 1624 2052 moveto 1624 2052 lineto stroke 1624 2052 moveto 1604 2052 moveto 1604 2052 lineto stroke 1604 2052 moveto 1588 2048 moveto 1588 2048 lineto stroke 1588 2048 moveto 1572 2048 moveto 1572 2048 lineto stroke 1572 2048 moveto 1552 2048 moveto 1552 2048 lineto stroke 1552 2048 moveto 1536 2044 moveto 1536 2044 lineto stroke 1536 2044 moveto 1516 2044 moveto 1516 2044 lineto stroke 1516 2044 moveto 1500 2040 moveto 1500 2040 lineto stroke 1500 2040 moveto 1480 2036 moveto 1480 2036 lineto stroke 1480 2036 moveto 1460 2036 moveto 1460 2036 lineto stroke 1460 2036 moveto 1444 2032 moveto 1444 2032 lineto stroke 1444 2032 moveto 1424 2028 moveto 1424 2028 lineto stroke 1424 2028 moveto 1404 2024 moveto 1404 2024 lineto stroke 1404 2024 moveto 1388 2020 moveto 1388 2020 lineto stroke 1388 2020 moveto 1368 2016 moveto 1368 2016 lineto stroke 1368 2016 moveto 1348 2012 moveto 1348 2012 lineto stroke 1348 2012 moveto 1328 2004 moveto 1328 2004 lineto stroke 1328 2004 moveto 1308 2000 moveto 1308 2000 lineto stroke 1308 2000 moveto 1288 1996 moveto 1288 1996 lineto stroke 1288 1996 moveto 1268 1988 moveto 1268 1988 lineto stroke 1268 1988 moveto 1248 1980 moveto 1248 1980 lineto stroke 1248 1980 moveto 1228 1976 moveto 1228 1976 lineto stroke 1228 1976 moveto 1208 1968 moveto 1208 1968 lineto stroke 1208 1968 moveto 1188 1960 moveto 1188 1960 lineto stroke 1188 1960 moveto 1168 1948 moveto 1168 1948 lineto stroke 1168 1948 moveto 1148 1940 moveto 1148 1940 lineto stroke 1148 1940 moveto 1124 1932 moveto 1124 1932 lineto stroke 1124 1932 moveto 1104 1920 moveto 1104 1920 lineto stroke 1104 1920 moveto 1084 1912 moveto 1084 1912 lineto stroke 1084 1912 moveto 1064 1900 moveto 1064 1900 lineto stroke 1064 1900 moveto 1040 1888 moveto 1040 1888 lineto stroke 1040 1888 moveto 1020 1876 moveto 1020 1876 lineto stroke 1020 1876 moveto 1000 1860 moveto 1000 1860 lineto stroke 1000 1860 moveto 980 1848 moveto 980 1848 lineto stroke 980 1848 moveto 960 1832 moveto 960 1832 lineto stroke 960 1832 moveto 940 1816 moveto 940 1816 lineto stroke 940 1816 moveto 920 1800 moveto 920 1800 lineto stroke 920 1800 moveto 900 1784 moveto 900 1784 lineto stroke 900 1784 moveto 880 1768 moveto 880 1768 lineto stroke 880 1768 moveto 860 1752 moveto 860 1752 lineto stroke 860 1752 moveto 844 1732 moveto 844 1732 lineto stroke 844 1732 moveto 828 1716 moveto 828 1716 lineto stroke 828 1716 moveto 812 1696 moveto 812 1696 lineto stroke 812 1696 moveto 796 1680 moveto 796 1680 lineto stroke 796 1680 moveto 780 1660 moveto 780 1660 lineto stroke 780 1660 moveto 768 1640 moveto 768 1640 lineto stroke 768 1640 moveto 756 1624 moveto 756 1624 lineto stroke 756 1624 moveto 744 1604 moveto 744 1604 lineto stroke 744 1604 moveto 732 1584 moveto 732 1584 lineto stroke 732 1584 moveto 724 1568 moveto 724 1568 lineto stroke 724 1568 moveto 716 1548 moveto 716 1548 lineto stroke 716 1548 moveto 708 1532 moveto 708 1532 lineto stroke 708 1532 moveto 700 1512 moveto 700 1512 lineto stroke 700 1512 moveto 696 1496 moveto 696 1496 lineto stroke 696 1496 moveto 692 1480 moveto 692 1480 lineto stroke 692 1480 moveto 688 1464 moveto 688 1464 lineto stroke 688 1464 moveto 688 1448 moveto 688 1448 lineto stroke 688 1448 moveto 688 1432 moveto 688 1432 lineto stroke 688 1432 moveto 688 1416 moveto 688 1416 lineto stroke 688 1416 moveto 688 1404 moveto 688 1404 lineto stroke 688 1404 moveto 692 1392 moveto 692 1392 lineto stroke 692 1392 moveto 696 1376 moveto 696 1376 lineto stroke 696 1376 moveto 700 1364 moveto 700 1364 lineto stroke 700 1364 moveto 704 1356 moveto 704 1356 lineto stroke 704 1356 moveto 712 1344 moveto 712 1344 lineto stroke 712 1344 moveto 720 1336 moveto 720 1336 lineto stroke 720 1336 moveto 728 1324 moveto 728 1324 lineto stroke 728 1324 moveto 736 1320 moveto 736 1320 lineto stroke 736 1320 moveto 748 1312 moveto 748 1312 lineto stroke 748 1312 moveto 760 1304 moveto 760 1304 lineto stroke 760 1304 moveto 772 1300 moveto 772 1300 lineto stroke 772 1300 moveto 788 1300 moveto 788 1300 lineto stroke 788 1300 moveto 804 1296 moveto 804 1296 lineto stroke 804 1296 moveto 820 1296 moveto 820 1296 lineto stroke 820 1296 moveto 836 1296 moveto 836 1296 lineto stroke 836 1296 moveto 852 1296 moveto 852 1296 lineto stroke 852 1296 moveto 872 1300 moveto 872 1300 lineto stroke 872 1300 moveto 888 1300 moveto 888 1300 lineto stroke 888 1300 moveto 908 1308 moveto 908 1308 lineto stroke 908 1308 moveto 928 1312 moveto 928 1312 lineto stroke 928 1312 moveto 948 1320 moveto 948 1320 lineto stroke 948 1320 moveto 968 1328 moveto 968 1328 lineto stroke 968 1328 moveto 988 1336 moveto 988 1336 lineto stroke 988 1336 moveto 1008 1344 moveto 1008 1344 lineto stroke 1008 1344 moveto 1032 1356 moveto 1032 1356 lineto stroke 1032 1356 moveto 1052 1364 moveto 1052 1364 lineto stroke 1052 1364 moveto 1072 1376 moveto 1072 1376 lineto stroke 1072 1376 moveto 1096 1388 moveto 1096 1388 lineto stroke 1096 1388 moveto 1116 1400 moveto 1116 1400 lineto stroke 1116 1400 moveto 1136 1416 moveto 1136 1416 lineto stroke 1136 1416 moveto 1156 1428 moveto 1156 1428 lineto stroke 1156 1428 moveto 1176 1444 moveto 1176 1444 lineto stroke 1176 1444 moveto 1200 1456 moveto 1200 1456 lineto stroke 1200 1456 moveto 1220 1472 moveto 1220 1472 lineto stroke 1220 1472 moveto 1240 1488 moveto 1240 1488 lineto stroke 1240 1488 moveto 1260 1504 moveto 1260 1504 lineto stroke 1260 1504 moveto 1280 1516 moveto 1280 1516 lineto stroke 1280 1516 moveto 1300 1532 moveto 1300 1532 lineto stroke 1300 1532 moveto 1320 1548 moveto 1320 1548 lineto stroke 1320 1548 moveto 1340 1564 moveto 1340 1564 lineto stroke 1340 1564 moveto 1356 1584 moveto 1356 1584 lineto stroke 1356 1584 moveto 1376 1600 moveto 1376 1600 lineto stroke 1376 1600 moveto 1396 1616 moveto 1396 1616 lineto stroke 1396 1616 moveto 1416 1632 moveto 1416 1632 lineto stroke 1416 1632 moveto 1432 1648 moveto 1432 1648 lineto stroke 1432 1648 moveto 1452 1668 moveto 1452 1668 lineto stroke 1452 1668 moveto 1472 1684 moveto 1472 1684 lineto stroke 1472 1684 moveto 1488 1700 moveto 1488 1700 lineto stroke 1488 1700 moveto 1508 1720 moveto 1508 1720 lineto stroke 1508 1720 moveto 1524 1736 moveto 1524 1736 lineto stroke 1524 1736 moveto 1544 1756 moveto 1544 1756 lineto stroke 1544 1756 moveto 1560 1772 moveto 1560 1772 lineto stroke 1560 1772 moveto 1580 1788 moveto 1580 1788 lineto stroke 1580 1788 moveto 1596 1808 moveto 1596 1808 lineto stroke 1596 1808 moveto 1612 1824 moveto 1612 1824 lineto stroke 1612 1824 moveto 1632 1844 moveto 1632 1844 lineto stroke 1632 1844 moveto 1648 1860 moveto 1648 1860 lineto stroke 1648 1860 moveto 1664 1880 moveto 1664 1880 lineto stroke 1664 1880 moveto 1684 1896 moveto 1684 1896 lineto stroke 1684 1896 moveto 1700 1916 moveto 1700 1916 lineto stroke 1700 1916 moveto 1716 1932 moveto 1716 1932 lineto stroke 1716 1932 moveto 1732 1952 moveto 1732 1952 lineto stroke 1732 1952 moveto 1748 1972 moveto 1748 1972 lineto stroke 1748 1972 moveto 1764 1988 moveto 1764 1988 lineto stroke 1764 1988 moveto 1780 2008 moveto 1780 2008 lineto stroke 1780 2008 moveto 1796 2024 moveto 1796 2024 lineto stroke 1796 2024 moveto 1812 2044 moveto 1812 2044 lineto stroke 1812 2044 moveto 2824 1392 moveto 2824 1392 lineto stroke 2824 1392 moveto 2800 1380 moveto 2800 1380 lineto stroke 2800 1380 moveto 2780 1368 moveto 2780 1368 lineto stroke 2780 1368 moveto 2756 1356 moveto 2756 1356 lineto stroke 2756 1356 moveto 2736 1344 moveto 2736 1344 lineto stroke 2736 1344 moveto 2712 1332 moveto 2712 1332 lineto stroke 2712 1332 moveto 2692 1320 moveto 2692 1320 lineto stroke 2692 1320 moveto 2668 1308 moveto 2668 1308 lineto stroke 2668 1308 moveto 2648 1296 moveto 2648 1296 lineto stroke 2648 1296 moveto 2624 1288 moveto 2624 1288 lineto stroke 2624 1288 moveto 2600 1276 moveto 2600 1276 lineto stroke 2600 1276 moveto 2580 1264 moveto 2580 1264 lineto stroke 2580 1264 moveto 2556 1252 moveto 2556 1252 lineto stroke 2556 1252 moveto 2536 1240 moveto 2536 1240 lineto stroke 2536 1240 moveto 2512 1228 moveto 2512 1228 lineto stroke 2512 1228 moveto 2492 1216 moveto 2492 1216 lineto stroke 2492 1216 moveto 2468 1204 moveto 2468 1204 lineto stroke 2468 1204 moveto 2448 1192 moveto 2448 1192 lineto stroke 2448 1192 moveto 2424 1180 moveto 2424 1180 lineto stroke 2424 1180 moveto 2400 1172 moveto 2400 1172 lineto stroke 2400 1172 moveto 2380 1160 moveto 2380 1160 lineto stroke 2380 1160 moveto 2356 1148 moveto 2356 1148 lineto stroke 2356 1148 moveto 2336 1136 moveto 2336 1136 lineto stroke 2336 1136 moveto 2312 1124 moveto 2312 1124 lineto stroke 2312 1124 moveto 2288 1112 moveto 2288 1112 lineto stroke 2288 1112 moveto 2268 1100 moveto 2268 1100 lineto stroke 2268 1100 moveto 2244 1088 moveto 2244 1088 lineto stroke 2244 1088 moveto 2224 1076 moveto 2224 1076 lineto stroke 2224 1076 moveto 2200 1068 moveto 2200 1068 lineto stroke 2200 1068 moveto 2176 1056 moveto 2176 1056 lineto stroke 2176 1056 moveto 2156 1044 moveto 2156 1044 lineto stroke 2156 1044 moveto 2132 1032 moveto 2132 1032 lineto stroke 2132 1032 moveto 2108 1020 moveto 2108 1020 lineto stroke 2108 1020 moveto 2088 1008 moveto 2088 1008 lineto stroke 2088 1008 moveto 2064 996 moveto 2064 996 lineto stroke 2064 996 moveto 2044 984 moveto 2044 984 lineto stroke 2044 984 moveto 2020 972 moveto 2020 972 lineto stroke 2020 972 moveto 1996 964 moveto 1996 964 lineto stroke 1996 964 moveto 1972 952 moveto 1972 952 lineto stroke 1972 952 moveto 1952 940 moveto 1952 940 lineto stroke 1952 940 moveto 1928 928 moveto 1928 928 lineto stroke 1928 928 moveto 1904 916 moveto 1904 916 lineto stroke 1904 916 moveto 1884 904 moveto 1884 904 lineto stroke 1884 904 moveto 1860 892 moveto 1860 892 lineto stroke 1860 892 moveto 1836 880 moveto 1836 880 lineto stroke 1836 880 moveto 1812 868 moveto 1812 868 lineto stroke 1812 868 moveto 1788 860 moveto 1788 860 lineto stroke 1788 860 moveto 1768 848 moveto 1768 848 lineto stroke 1768 848 moveto 1744 836 moveto 1744 836 lineto stroke 1744 836 moveto 1720 824 moveto 1720 824 lineto stroke 1720 824 moveto 1696 812 moveto 1696 812 lineto stroke 1696 812 moveto 1672 800 moveto 1672 800 lineto stroke 1672 800 moveto 1648 788 moveto 1648 788 lineto stroke 1648 788 moveto 1620 776 moveto 1620 776 lineto stroke 1620 776 moveto 1596 768 moveto 1596 768 lineto stroke 1596 768 moveto 1596 772 moveto 1596 772 lineto stroke 1596 772 moveto 1612 784 moveto 1612 784 lineto stroke 1612 784 moveto 1628 796 moveto 1628 796 lineto stroke 1628 796 moveto 1648 808 moveto 1648 808 lineto stroke 1648 808 moveto 1668 820 moveto 1668 820 lineto stroke 1668 820 moveto 1688 832 moveto 1688 832 lineto stroke 1688 832 moveto 1708 844 moveto 1708 844 lineto stroke 1708 844 moveto 1728 856 moveto 1728 856 lineto stroke 1728 856 moveto 1748 864 moveto 1748 864 lineto stroke 1748 864 moveto 1772 876 moveto 1772 876 lineto stroke 1772 876 moveto 1792 888 moveto 1792 888 lineto stroke 1792 888 moveto 1812 900 moveto 1812 900 lineto stroke 1812 900 moveto 1832 912 moveto 1832 912 lineto stroke 1832 912 moveto 1856 924 moveto 1856 924 lineto stroke 1856 924 moveto 1876 936 moveto 1876 936 lineto stroke 1876 936 moveto 1896 948 moveto 1896 948 lineto stroke 1896 948 moveto 1920 960 moveto 1920 960 lineto stroke 1920 960 moveto 1940 972 moveto 1940 972 lineto stroke 1940 972 moveto 1960 980 moveto 1960 980 lineto stroke 1960 980 moveto 1984 992 moveto 1984 992 lineto stroke 1984 992 moveto 2004 1004 moveto 2004 1004 lineto stroke 2004 1004 moveto 2028 1016 moveto 2028 1016 lineto stroke 2028 1016 moveto 2048 1028 moveto 2048 1028 lineto stroke 2048 1028 moveto 2072 1040 moveto 2072 1040 lineto stroke 2072 1040 moveto 2092 1052 moveto 2092 1052 lineto stroke 2092 1052 moveto 2116 1064 moveto 2116 1064 lineto stroke 2116 1064 moveto 2136 1076 moveto 2136 1076 lineto stroke 2136 1076 moveto 2160 1088 moveto 2160 1088 lineto stroke 2160 1088 moveto 2184 1096 moveto 2184 1096 lineto stroke 2184 1096 moveto 2204 1108 moveto 2204 1108 lineto stroke 2204 1108 moveto 2228 1120 moveto 2228 1120 lineto stroke 2228 1120 moveto 2248 1132 moveto 2248 1132 lineto stroke 2248 1132 moveto 2272 1144 moveto 2272 1144 lineto stroke 2272 1144 moveto 2296 1156 moveto 2296 1156 lineto stroke 2296 1156 moveto 2320 1168 moveto 2320 1168 lineto stroke 2320 1168 moveto 2340 1180 moveto 2340 1180 lineto stroke 2340 1180 moveto 2364 1192 moveto 2364 1192 lineto stroke 2364 1192 moveto 2388 1200 moveto 2388 1200 lineto stroke 2388 1200 moveto 2412 1212 moveto 2412 1212 lineto stroke 2412 1212 moveto 2436 1224 moveto 2436 1224 lineto stroke 2436 1224 moveto 2460 1236 moveto 2460 1236 lineto stroke 2460 1236 moveto 2484 1248 moveto 2484 1248 lineto stroke 2484 1248 moveto 2508 1260 moveto 2508 1260 lineto stroke 2508 1260 moveto 2532 1272 moveto 2532 1272 lineto stroke 2532 1272 moveto 2556 1280 moveto 2556 1280 lineto stroke 2556 1280 moveto 2580 1292 moveto 2580 1292 lineto stroke 2580 1292 moveto 2604 1304 moveto 2604 1304 lineto stroke 2604 1304 moveto 2632 1316 moveto 2632 1316 lineto stroke 2632 1316 moveto 2656 1328 moveto 2656 1328 lineto stroke 2656 1328 moveto 2684 1340 moveto 2684 1340 lineto stroke 2684 1340 moveto 2708 1348 moveto 2708 1348 lineto stroke 2708 1348 moveto 2736 1360 moveto 2736 1360 lineto stroke 2736 1360 moveto 2764 1372 moveto 2764 1372 lineto stroke 2764 1372 moveto 2792 1380 moveto 2792 1380 lineto stroke 2792 1380 moveto 2820 1392 moveto 2820 1392 lineto stroke 2820 1392 moveto 2824 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 2824 2052 moveto 2820 2052 lineto stroke 2820 2052 moveto 2812 2052 lineto stroke 2812 2052 moveto 2808 2052 lineto stroke 2808 2052 moveto 2800 2052 lineto stroke 2800 2052 moveto 2796 2052 lineto stroke 2796 2052 moveto 2788 2052 lineto stroke 2788 2052 moveto 2780 2056 lineto stroke 2780 2056 moveto 2772 2056 lineto stroke 2772 2056 moveto 2764 2056 lineto stroke 2764 2056 moveto 2752 2056 lineto stroke 2752 2056 moveto 2740 2056 lineto stroke 2740 2056 moveto 2728 2056 lineto stroke 2728 2056 moveto 2712 2056 lineto stroke 2712 2056 moveto 2696 2056 lineto stroke 2696 2056 moveto 2680 2056 lineto stroke 2680 2056 moveto 2660 2056 lineto stroke 2660 2056 moveto 2640 2056 lineto stroke 2640 2056 moveto 2620 2056 lineto stroke 2620 2056 moveto 2596 2056 lineto stroke 2596 2056 moveto 2572 2052 lineto stroke 2572 2052 moveto 2544 2052 lineto stroke 2544 2052 moveto 2516 2048 lineto stroke 2516 2048 moveto 2480 2048 lineto stroke 2480 2048 moveto 2448 2044 lineto stroke 2448 2044 moveto 2408 2036 lineto stroke 2408 2036 moveto 2372 2032 lineto stroke 2372 2032 moveto 2332 2028 lineto stroke 2332 2028 moveto 2292 2020 lineto stroke 2292 2020 moveto 2248 2008 lineto stroke 2248 2008 moveto 2204 2000 lineto stroke 2204 2000 moveto 2160 1988 lineto stroke 2160 1988 moveto 2112 1976 lineto stroke 2112 1976 moveto 2068 1960 lineto stroke 2068 1960 moveto 2020 1940 lineto stroke 2020 1940 moveto 1968 1924 lineto stroke 1968 1924 moveto 1920 1900 lineto stroke 1920 1900 moveto 1872 1880 lineto stroke 1872 1880 moveto 1820 1852 lineto stroke 1820 1852 moveto 1772 1828 lineto stroke 1772 1828 moveto 1724 1796 lineto stroke 1724 1796 moveto 1680 1768 lineto stroke 1680 1768 moveto 1640 1736 lineto stroke 1640 1736 moveto 1600 1708 lineto stroke 1600 1708 moveto 1564 1676 lineto stroke 1564 1676 moveto 1532 1644 lineto stroke 1532 1644 moveto 1496 1608 lineto stroke 1496 1608 moveto 1468 1576 lineto stroke 1468 1576 moveto 1440 1540 lineto stroke 1440 1540 moveto 1420 1508 lineto stroke 1420 1508 moveto 1404 1476 lineto stroke 1404 1476 moveto 1388 1448 lineto stroke 1388 1448 moveto 1380 1420 lineto stroke 1380 1420 moveto 1372 1396 lineto stroke 1372 1396 moveto 1372 1368 lineto stroke 1372 1368 moveto 1376 1340 lineto stroke 1376 1340 moveto 1384 1320 lineto stroke 1384 1320 moveto 1400 1308 lineto stroke 1400 1308 moveto 1416 1296 lineto stroke 1416 1296 moveto 1436 1292 lineto stroke 1436 1292 moveto 1460 1292 lineto stroke 1460 1292 moveto 1484 1292 lineto stroke 1484 1292 moveto 1516 1296 lineto stroke 1516 1296 moveto 1548 1304 lineto stroke 1548 1304 moveto 1580 1316 lineto stroke 1580 1316 moveto 1616 1328 lineto stroke 1616 1328 moveto 1656 1348 lineto stroke 1656 1348 moveto 1696 1368 lineto stroke 1696 1368 moveto 1736 1388 lineto stroke 1736 1388 moveto 1780 1412 lineto stroke 1780 1412 moveto 1832 1444 lineto stroke 1832 1444 moveto 1880 1472 lineto stroke 1880 1472 moveto 1928 1504 lineto stroke 1928 1504 moveto 1980 1536 lineto stroke 1980 1536 moveto 2028 1568 lineto stroke 2028 1568 moveto 2072 1600 lineto stroke 2072 1600 moveto 2120 1632 lineto stroke 2120 1632 moveto 2164 1664 lineto stroke 2164 1664 moveto 2204 1692 lineto stroke 2204 1692 moveto 2248 1720 lineto stroke 2248 1720 moveto 2284 1748 lineto stroke 2284 1748 moveto 2324 1772 lineto stroke 2324 1772 moveto 2364 1800 lineto stroke 2364 1800 moveto 2400 1828 lineto stroke 2400 1828 moveto 2436 1848 lineto stroke 2436 1848 moveto 2468 1872 lineto stroke 2468 1872 moveto 2504 1896 lineto stroke 2504 1896 moveto 2540 1916 lineto stroke 2540 1916 moveto 2572 1936 lineto stroke 2572 1936 moveto 2600 1952 lineto stroke 2600 1952 moveto 2632 1972 lineto stroke 2632 1972 moveto 2660 1988 lineto stroke 2660 1988 moveto 2684 2000 lineto stroke 2684 2000 moveto 2708 2008 lineto stroke 2708 2008 moveto 2724 2016 lineto stroke 2724 2016 moveto 2736 2024 lineto stroke 2736 2024 moveto 2752 2028 lineto stroke 2752 2028 moveto 2760 2032 lineto stroke 2760 2032 moveto 2772 2036 lineto stroke 2772 2036 moveto 2780 2040 lineto stroke 2780 2040 moveto 2788 2044 lineto stroke 2788 2044 moveto 2800 2048 lineto stroke 2800 2048 moveto 2808 2048 lineto stroke 2808 2048 moveto 2816 2052 lineto stroke 2816 2052 moveto 2824 2052 lineto stroke 2824 2052 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 3196 2276 moveto 3196 2276 lineto stroke 3196 2276 moveto 3192 2288 moveto 3192 2288 lineto stroke 3192 2288 moveto 3188 2304 moveto 3188 2304 lineto stroke 3188 2304 moveto 3184 2316 moveto 3184 2316 lineto stroke 3184 2316 moveto 3180 2332 moveto 3180 2332 lineto stroke 3180 2332 moveto 3176 2348 moveto 3176 2348 lineto stroke 3176 2348 moveto 3172 2360 moveto 3172 2360 lineto stroke 3172 2360 moveto 3168 2376 moveto 3168 2376 lineto stroke 3168 2376 moveto 3164 2392 moveto 3164 2392 lineto stroke 3164 2392 moveto 3156 2404 moveto 3156 2404 lineto stroke 3156 2404 moveto 3152 2420 moveto 3152 2420 lineto stroke 3152 2420 moveto 3144 2432 moveto 3144 2432 lineto stroke 3144 2432 moveto 3140 2448 moveto 3140 2448 lineto stroke 3140 2448 moveto 3132 2460 moveto 3132 2460 lineto stroke 3132 2460 moveto 3124 2476 moveto 3124 2476 lineto stroke 3124 2476 moveto 3116 2488 moveto 3116 2488 lineto stroke 3116 2488 moveto 3108 2500 moveto 3108 2500 lineto stroke 3108 2500 moveto 3096 2512 moveto 3096 2512 lineto stroke 3096 2512 moveto 3080 2524 moveto 3080 2524 lineto stroke 3080 2524 moveto 3060 2528 moveto 3060 2528 lineto stroke 3060 2528 moveto 3040 2524 moveto 3040 2524 lineto stroke 3040 2524 moveto 3024 2516 moveto 3024 2516 lineto stroke 3024 2516 moveto 3012 2504 moveto 3012 2504 lineto stroke 3012 2504 moveto 3000 2492 moveto 3000 2492 lineto stroke 3000 2492 moveto 2992 2476 moveto 2992 2476 lineto stroke 2992 2476 moveto 2984 2464 moveto 2984 2464 lineto stroke 2984 2464 moveto 2976 2448 moveto 2976 2448 lineto stroke 2976 2448 moveto 2968 2436 moveto 2968 2436 lineto stroke 2968 2436 moveto 2960 2424 moveto 2960 2424 lineto stroke 2960 2424 moveto 2952 2408 moveto 2952 2408 lineto stroke 2952 2408 moveto 2948 2392 moveto 2948 2392 lineto stroke 2948 2392 moveto 2940 2380 moveto 2940 2380 lineto stroke 2940 2380 moveto 2936 2364 moveto 2936 2364 lineto stroke 2936 2364 moveto 2928 2352 moveto 2928 2352 lineto stroke 2928 2352 moveto 2924 2336 moveto 2924 2336 lineto stroke 2924 2336 moveto 2920 2324 moveto 2920 2324 lineto stroke 2920 2324 moveto 2912 2308 moveto 2912 2308 lineto stroke 2912 2308 moveto 2908 2292 moveto 2908 2292 lineto stroke 2908 2292 moveto 2904 2280 moveto 2904 2280 lineto stroke 2904 2280 moveto 2900 2264 moveto 2900 2264 lineto stroke 2900 2264 moveto 2892 2252 moveto 2892 2252 lineto stroke 2892 2252 moveto 2888 2236 moveto 2888 2236 lineto stroke 2888 2236 moveto 2884 2220 moveto 2884 2220 lineto stroke 2884 2220 moveto 2880 2208 moveto 2880 2208 lineto stroke 2880 2208 moveto 2876 2192 moveto 2876 2192 lineto stroke 2876 2192 moveto 2872 2180 moveto 2872 2180 lineto stroke 2872 2180 moveto 2868 2164 moveto 2868 2164 lineto stroke 2868 2164 moveto 2864 2148 moveto 2864 2148 lineto stroke 2864 2148 moveto 2860 2136 moveto 2860 2136 lineto stroke 2860 2136 moveto 2856 2120 moveto 2856 2120 lineto stroke 2856 2120 moveto 2852 2104 moveto 2852 2104 lineto stroke 2852 2104 moveto 2848 2092 moveto 2848 2092 lineto stroke 2848 2092 moveto 2844 2076 moveto 2844 2076 lineto stroke 2844 2076 moveto 2840 2060 moveto 2840 2060 lineto stroke 2840 2060 moveto 2840 2048 moveto 2840 2048 lineto stroke 2840 2048 moveto 2836 2032 moveto 2836 2032 lineto stroke 2836 2032 moveto 2832 2016 moveto 2832 2016 lineto stroke 2832 2016 moveto 2832 2004 moveto 2832 2004 lineto stroke 2832 2004 moveto 2844 2000 moveto 2844 2000 lineto stroke 2844 2000 moveto 2856 2012 moveto 2856 2012 lineto stroke 2856 2012 moveto 2868 2024 moveto 2868 2024 lineto stroke 2868 2024 moveto 2880 2036 moveto 2880 2036 lineto stroke 2880 2036 moveto 2888 2048 moveto 2888 2048 lineto stroke 2888 2048 moveto 2900 2060 moveto 2900 2060 lineto stroke 2900 2060 moveto 2912 2072 moveto 2912 2072 lineto stroke 2912 2072 moveto 2924 2088 moveto 2924 2088 lineto stroke 2924 2088 moveto 2932 2100 moveto 2932 2100 lineto stroke 2932 2100 moveto 2944 2112 moveto 2944 2112 lineto stroke 2944 2112 moveto 2956 2124 moveto 2956 2124 lineto stroke 2956 2124 moveto 2972 2136 moveto 2972 2136 lineto stroke 2972 2136 moveto 2984 2148 moveto 2984 2148 lineto stroke 2984 2148 moveto 2996 2160 moveto 2996 2160 lineto stroke 2996 2160 moveto 3008 2168 moveto 3008 2168 lineto stroke 3008 2168 moveto 3024 2180 moveto 3024 2180 lineto stroke 3024 2180 moveto 3040 2192 moveto 3040 2192 lineto stroke 3040 2192 moveto 3056 2200 moveto 3056 2200 lineto stroke 3056 2200 moveto 3072 2212 moveto 3072 2212 lineto stroke 3072 2212 moveto 3088 2220 moveto 3088 2220 lineto stroke 3088 2220 moveto 3104 2228 moveto 3104 2228 lineto stroke 3104 2228 moveto 3120 2236 moveto 3120 2236 lineto stroke 3120 2236 moveto 3140 2244 moveto 3140 2244 lineto stroke 3140 2244 moveto 3160 2252 moveto 3160 2252 lineto stroke 3160 2252 moveto 3180 2256 moveto 3180 2256 lineto stroke 3180 2256 moveto 3200 2260 moveto 3200 2260 lineto stroke 3200 2260 moveto 1820 2052 moveto 1820 2052 lineto stroke 1820 2052 moveto 1804 2052 moveto 1804 2052 lineto stroke 1804 2052 moveto 1788 2052 moveto 1788 2052 lineto stroke 1788 2052 moveto 1772 2056 moveto 1772 2056 lineto stroke 1772 2056 moveto 1756 2056 moveto 1756 2056 lineto stroke 1756 2056 moveto 1740 2056 moveto 1740 2056 lineto stroke 1740 2056 moveto 1724 2056 moveto 1724 2056 lineto stroke 1724 2056 moveto 1708 2056 moveto 1708 2056 lineto stroke 1708 2056 moveto 1692 2056 moveto 1692 2056 lineto stroke 1692 2056 moveto 1676 2056 moveto 1676 2056 lineto stroke 1676 2056 moveto 1656 2056 moveto 1656 2056 lineto stroke 1656 2056 moveto 1640 2056 moveto 1640 2056 lineto stroke 1640 2056 moveto 1624 2056 moveto 1624 2056 lineto stroke 1624 2056 moveto 1608 2052 moveto 1608 2052 lineto stroke 1608 2052 moveto 1588 2052 moveto 1588 2052 lineto stroke 1588 2052 moveto 1572 2052 moveto 1572 2052 lineto stroke 1572 2052 moveto 1556 2048 moveto 1556 2048 lineto stroke 1556 2048 moveto 1536 2048 moveto 1536 2048 lineto stroke 1536 2048 moveto 1520 2044 moveto 1520 2044 lineto stroke 1520 2044 moveto 1500 2044 moveto 1500 2044 lineto stroke 1500 2044 moveto 1484 2040 moveto 1484 2040 lineto stroke 1484 2040 moveto 1464 2036 moveto 1464 2036 lineto stroke 1464 2036 moveto 1444 2036 moveto 1444 2036 lineto stroke 1444 2036 moveto 1428 2032 moveto 1428 2032 lineto stroke 1428 2032 moveto 1408 2028 moveto 1408 2028 lineto stroke 1408 2028 moveto 1388 2024 moveto 1388 2024 lineto stroke 1388 2024 moveto 1372 2020 moveto 1372 2020 lineto stroke 1372 2020 moveto 1352 2016 moveto 1352 2016 lineto stroke 1352 2016 moveto 1332 2008 moveto 1332 2008 lineto stroke 1332 2008 moveto 1312 2004 moveto 1312 2004 lineto stroke 1312 2004 moveto 1292 2000 moveto 1292 2000 lineto stroke 1292 2000 moveto 1272 1992 moveto 1272 1992 lineto stroke 1272 1992 moveto 1252 1988 moveto 1252 1988 lineto stroke 1252 1988 moveto 1232 1980 moveto 1232 1980 lineto stroke 1232 1980 moveto 1212 1972 moveto 1212 1972 lineto stroke 1212 1972 moveto 1192 1964 moveto 1192 1964 lineto stroke 1192 1964 moveto 1172 1956 moveto 1172 1956 lineto stroke 1172 1956 moveto 1148 1948 moveto 1148 1948 lineto stroke 1148 1948 moveto 1128 1936 moveto 1128 1936 lineto stroke 1128 1936 moveto 1108 1928 moveto 1108 1928 lineto stroke 1108 1928 moveto 1088 1916 moveto 1088 1916 lineto stroke 1088 1916 moveto 1064 1904 moveto 1064 1904 lineto stroke 1064 1904 moveto 1044 1892 moveto 1044 1892 lineto stroke 1044 1892 moveto 1024 1880 moveto 1024 1880 lineto stroke 1024 1880 moveto 1004 1868 moveto 1004 1868 lineto stroke 1004 1868 moveto 980 1856 moveto 980 1856 lineto stroke 980 1856 moveto 960 1840 moveto 960 1840 lineto stroke 960 1840 moveto 940 1824 moveto 940 1824 lineto stroke 940 1824 moveto 920 1808 moveto 920 1808 lineto stroke 920 1808 moveto 900 1792 moveto 900 1792 lineto stroke 900 1792 moveto 884 1776 moveto 884 1776 lineto stroke 884 1776 moveto 864 1760 moveto 864 1760 lineto stroke 864 1760 moveto 844 1744 moveto 844 1744 lineto stroke 844 1744 moveto 828 1724 moveto 828 1724 lineto stroke 828 1724 moveto 812 1704 moveto 812 1704 lineto stroke 812 1704 moveto 796 1688 moveto 796 1688 lineto stroke 796 1688 moveto 780 1668 moveto 780 1668 lineto stroke 780 1668 moveto 768 1648 moveto 768 1648 lineto stroke 768 1648 moveto 756 1632 moveto 756 1632 lineto stroke 756 1632 moveto 744 1612 moveto 744 1612 lineto stroke 744 1612 moveto 732 1592 moveto 732 1592 lineto stroke 732 1592 moveto 720 1576 moveto 720 1576 lineto stroke 720 1576 moveto 712 1556 moveto 712 1556 lineto stroke 712 1556 moveto 704 1540 moveto 704 1540 lineto stroke 704 1540 moveto 700 1520 moveto 700 1520 lineto stroke 700 1520 moveto 692 1504 moveto 692 1504 lineto stroke 692 1504 moveto 688 1488 moveto 688 1488 lineto stroke 688 1488 moveto 684 1472 moveto 684 1472 lineto stroke 684 1472 moveto 684 1456 moveto 684 1456 lineto stroke 684 1456 moveto 680 1440 moveto 680 1440 lineto stroke 680 1440 moveto 680 1424 moveto 680 1424 lineto stroke 680 1424 moveto 684 1408 moveto 684 1408 lineto stroke 684 1408 moveto 684 1396 moveto 684 1396 lineto stroke 684 1396 moveto 688 1384 moveto 688 1384 lineto stroke 688 1384 moveto 692 1372 moveto 692 1372 lineto stroke 692 1372 moveto 696 1360 moveto 696 1360 lineto stroke 696 1360 moveto 700 1348 moveto 700 1348 lineto stroke 700 1348 moveto 708 1336 moveto 708 1336 lineto stroke 708 1336 moveto 716 1328 moveto 716 1328 lineto stroke 716 1328 moveto 724 1320 moveto 724 1320 lineto stroke 724 1320 moveto 736 1312 moveto 736 1312 lineto stroke 736 1312 moveto 748 1308 moveto 748 1308 lineto stroke 748 1308 moveto 760 1300 moveto 760 1300 lineto stroke 760 1300 moveto 772 1296 moveto 772 1296 lineto stroke 772 1296 moveto 788 1292 moveto 788 1292 lineto stroke 788 1292 moveto 800 1292 moveto 800 1292 lineto stroke 800 1292 moveto 816 1292 moveto 816 1292 lineto stroke 816 1292 moveto 836 1292 moveto 836 1292 lineto stroke 836 1292 moveto 852 1292 moveto 852 1292 lineto stroke 852 1292 moveto 872 1296 moveto 872 1296 lineto stroke 872 1296 moveto 888 1300 moveto 888 1300 lineto stroke 888 1300 moveto 908 1304 moveto 908 1304 lineto stroke 908 1304 moveto 928 1312 moveto 928 1312 lineto stroke 928 1312 moveto 948 1316 moveto 948 1316 lineto stroke 948 1316 moveto 968 1324 moveto 968 1324 lineto stroke 968 1324 moveto 988 1332 moveto 988 1332 lineto stroke 988 1332 moveto 1012 1344 moveto 1012 1344 lineto stroke 1012 1344 moveto 1032 1352 moveto 1032 1352 lineto stroke 1032 1352 moveto 1052 1364 moveto 1052 1364 lineto stroke 1052 1364 moveto 1072 1376 moveto 1072 1376 lineto stroke 1072 1376 moveto 1096 1388 moveto 1096 1388 lineto stroke 1096 1388 moveto 1116 1400 moveto 1116 1400 lineto stroke 1116 1400 moveto 1136 1416 moveto 1136 1416 lineto stroke 1136 1416 moveto 1156 1428 moveto 1156 1428 lineto stroke 1156 1428 moveto 1176 1444 moveto 1176 1444 lineto stroke 1176 1444 moveto 1200 1456 moveto 1200 1456 lineto stroke 1200 1456 moveto 1220 1472 moveto 1220 1472 lineto stroke 1220 1472 moveto 1240 1488 moveto 1240 1488 lineto stroke 1240 1488 moveto 1260 1500 moveto 1260 1500 lineto stroke 1260 1500 moveto 1280 1516 moveto 1280 1516 lineto stroke 1280 1516 moveto 1300 1532 moveto 1300 1532 lineto stroke 1300 1532 moveto 1320 1548 moveto 1320 1548 lineto stroke 1320 1548 moveto 1340 1564 moveto 1340 1564 lineto stroke 1340 1564 moveto 1356 1584 moveto 1356 1584 lineto stroke 1356 1584 moveto 1376 1600 moveto 1376 1600 lineto stroke 1376 1600 moveto 1396 1616 moveto 1396 1616 lineto stroke 1396 1616 moveto 1416 1632 moveto 1416 1632 lineto stroke 1416 1632 moveto 1432 1648 moveto 1432 1648 lineto stroke 1432 1648 moveto 1452 1668 moveto 1452 1668 lineto stroke 1452 1668 moveto 1472 1684 moveto 1472 1684 lineto stroke 1472 1684 moveto 1488 1700 moveto 1488 1700 lineto stroke 1488 1700 moveto 1508 1720 moveto 1508 1720 lineto stroke 1508 1720 moveto 1524 1736 moveto 1524 1736 lineto stroke 1524 1736 moveto 1544 1756 moveto 1544 1756 lineto stroke 1544 1756 moveto 1560 1772 moveto 1560 1772 lineto stroke 1560 1772 moveto 1580 1788 moveto 1580 1788 lineto stroke 1580 1788 moveto 1596 1808 moveto 1596 1808 lineto stroke 1596 1808 moveto 1612 1824 moveto 1612 1824 lineto stroke 1612 1824 moveto 1632 1844 moveto 1632 1844 lineto stroke 1632 1844 moveto 1648 1860 moveto 1648 1860 lineto stroke 1648 1860 moveto 1664 1880 moveto 1664 1880 lineto stroke 1664 1880 moveto 1680 1896 moveto 1680 1896 lineto stroke 1680 1896 moveto 1700 1916 moveto 1700 1916 lineto stroke 1700 1916 moveto 1716 1936 moveto 1716 1936 lineto stroke 1716 1936 moveto 1732 1952 moveto 1732 1952 lineto stroke 1732 1952 moveto 1748 1972 moveto 1748 1972 lineto stroke 1748 1972 moveto 1764 1988 moveto 1764 1988 lineto stroke 1764 1988 moveto 1780 2008 moveto 1780 2008 lineto stroke 1780 2008 moveto 1796 2024 moveto 1796 2024 lineto stroke 1796 2024 moveto 1816 2044 moveto 1816 2044 lineto stroke 1816 2044 moveto 2824 1392 moveto 2824 1392 lineto stroke 2824 1392 moveto 2800 1380 moveto 2800 1380 lineto stroke 2800 1380 moveto 2776 1368 moveto 2776 1368 lineto stroke 2776 1368 moveto 2752 1356 moveto 2752 1356 lineto stroke 2752 1356 moveto 2728 1344 moveto 2728 1344 lineto stroke 2728 1344 moveto 2704 1332 moveto 2704 1332 lineto stroke 2704 1332 moveto 2680 1320 moveto 2680 1320 lineto stroke 2680 1320 moveto 2656 1312 moveto 2656 1312 lineto stroke 2656 1312 moveto 2632 1300 moveto 2632 1300 lineto stroke 2632 1300 moveto 2608 1288 moveto 2608 1288 lineto stroke 2608 1288 moveto 2584 1276 moveto 2584 1276 lineto stroke 2584 1276 moveto 2556 1264 moveto 2556 1264 lineto stroke 2556 1264 moveto 2532 1252 moveto 2532 1252 lineto stroke 2532 1252 moveto 2508 1240 moveto 2508 1240 lineto stroke 2508 1240 moveto 2484 1232 moveto 2484 1232 lineto stroke 2484 1232 moveto 2460 1220 moveto 2460 1220 lineto stroke 2460 1220 moveto 2436 1208 moveto 2436 1208 lineto stroke 2436 1208 moveto 2412 1196 moveto 2412 1196 lineto stroke 2412 1196 moveto 2388 1184 moveto 2388 1184 lineto stroke 2388 1184 moveto 2364 1172 moveto 2364 1172 lineto stroke 2364 1172 moveto 2340 1160 moveto 2340 1160 lineto stroke 2340 1160 moveto 2312 1152 moveto 2312 1152 lineto stroke 2312 1152 moveto 2288 1140 moveto 2288 1140 lineto stroke 2288 1140 moveto 2264 1128 moveto 2264 1128 lineto stroke 2264 1128 moveto 2240 1116 moveto 2240 1116 lineto stroke 2240 1116 moveto 2216 1104 moveto 2216 1104 lineto stroke 2216 1104 moveto 2192 1092 moveto 2192 1092 lineto stroke 2192 1092 moveto 2164 1080 moveto 2164 1080 lineto stroke 2164 1080 moveto 2140 1072 moveto 2140 1072 lineto stroke 2140 1072 moveto 2116 1060 moveto 2116 1060 lineto stroke 2116 1060 moveto 2092 1048 moveto 2092 1048 lineto stroke 2092 1048 moveto 2068 1036 moveto 2068 1036 lineto stroke 2068 1036 moveto 2040 1024 moveto 2040 1024 lineto stroke 2040 1024 moveto 2016 1012 moveto 2016 1012 lineto stroke 2016 1012 moveto 1992 1004 moveto 1992 1004 lineto stroke 1992 1004 moveto 1964 992 moveto 1964 992 lineto stroke 1964 992 moveto 1940 980 moveto 1940 980 lineto stroke 1940 980 moveto 1916 968 moveto 1916 968 lineto stroke 1916 968 moveto 1888 956 moveto 1888 956 lineto stroke 1888 956 moveto 1864 944 moveto 1864 944 lineto stroke 1864 944 moveto 1836 936 moveto 1836 936 lineto stroke 1836 936 moveto 1812 924 moveto 1812 924 lineto stroke 1812 924 moveto 1788 912 moveto 1788 912 lineto stroke 1788 912 moveto 1760 900 moveto 1760 900 lineto stroke 1760 900 moveto 1736 888 moveto 1736 888 lineto stroke 1736 888 moveto 1708 880 moveto 1708 880 lineto stroke 1708 880 moveto 1680 868 moveto 1680 868 lineto stroke 1680 868 moveto 1656 856 moveto 1656 856 lineto stroke 1656 856 moveto 1628 844 moveto 1628 844 lineto stroke 1628 844 moveto 1600 836 moveto 1600 836 lineto stroke 1600 836 moveto 1572 824 moveto 1572 824 lineto stroke 1572 824 moveto 1548 812 moveto 1548 812 lineto stroke 1548 812 moveto 1520 804 moveto 1520 804 lineto stroke 1520 804 moveto 1488 792 moveto 1488 792 lineto stroke 1488 792 moveto 1460 784 moveto 1460 784 lineto stroke 1460 784 moveto 1432 772 moveto 1432 772 lineto stroke 1432 772 moveto 1400 764 moveto 1400 764 lineto stroke 1400 764 moveto 1376 764 moveto 1376 764 lineto stroke 1376 764 moveto 1372 768 moveto 1372 768 lineto stroke 1372 768 moveto 1376 780 moveto 1376 780 lineto stroke 1376 780 moveto 1388 788 moveto 1388 788 lineto stroke 1388 788 moveto 1404 800 moveto 1404 800 lineto stroke 1404 800 moveto 1420 812 moveto 1420 812 lineto stroke 1420 812 moveto 1436 824 moveto 1436 824 lineto stroke 1436 824 moveto 1456 836 moveto 1456 836 lineto stroke 1456 836 moveto 1472 848 moveto 1472 848 lineto stroke 1472 848 moveto 1492 860 moveto 1492 860 lineto stroke 1492 860 moveto 1512 868 moveto 1512 868 lineto stroke 1512 868 moveto 1532 880 moveto 1532 880 lineto stroke 1532 880 moveto 1552 892 moveto 1552 892 lineto stroke 1552 892 moveto 1572 904 moveto 1572 904 lineto stroke 1572 904 moveto 1596 916 moveto 1596 916 lineto stroke 1596 916 moveto 1616 928 moveto 1616 928 lineto stroke 1616 928 moveto 1636 940 moveto 1636 940 lineto stroke 1636 940 moveto 1660 952 moveto 1660 952 lineto stroke 1660 952 moveto 1680 964 moveto 1680 964 lineto stroke 1680 964 moveto 1704 972 moveto 1704 972 lineto stroke 1704 972 moveto 1728 984 moveto 1728 984 lineto stroke 1728 984 moveto 1752 996 moveto 1752 996 lineto stroke 1752 996 moveto 1772 1008 moveto 1772 1008 lineto stroke 1772 1008 moveto 1796 1020 moveto 1796 1020 lineto stroke 1796 1020 moveto 1820 1032 moveto 1820 1032 lineto stroke 1820 1032 moveto 1844 1044 moveto 1844 1044 lineto stroke 1844 1044 moveto 1868 1056 moveto 1868 1056 lineto stroke 1868 1056 moveto 1892 1064 moveto 1892 1064 lineto stroke 1892 1064 moveto 1916 1076 moveto 1916 1076 lineto stroke 1916 1076 moveto 1944 1088 moveto 1944 1088 lineto stroke 1944 1088 moveto 1968 1100 moveto 1968 1100 lineto stroke 1968 1100 moveto 1992 1112 moveto 1992 1112 lineto stroke 1992 1112 moveto 2016 1124 moveto 2016 1124 lineto stroke 2016 1124 moveto 2044 1132 moveto 2044 1132 lineto stroke 2044 1132 moveto 2068 1144 moveto 2068 1144 lineto stroke 2068 1144 moveto 2096 1156 moveto 2096 1156 lineto stroke 2096 1156 moveto 2120 1168 moveto 2120 1168 lineto stroke 2120 1168 moveto 2148 1180 moveto 2148 1180 lineto stroke 2148 1180 moveto 2176 1188 moveto 2176 1188 lineto stroke 2176 1188 moveto 2200 1200 moveto 2200 1200 lineto stroke 2200 1200 moveto 2228 1212 moveto 2228 1212 lineto stroke 2228 1212 moveto 2256 1224 moveto 2256 1224 lineto stroke 2256 1224 moveto 2284 1232 moveto 2284 1232 lineto stroke 2284 1232 moveto 2312 1244 moveto 2312 1244 lineto stroke 2312 1244 moveto 2340 1256 moveto 2340 1256 lineto stroke 2340 1256 moveto 2368 1264 moveto 2368 1264 lineto stroke 2368 1264 moveto 2396 1276 moveto 2396 1276 lineto stroke 2396 1276 moveto 2424 1284 moveto 2424 1284 lineto stroke 2424 1284 moveto 2452 1296 moveto 2452 1296 lineto stroke 2452 1296 moveto 2484 1304 moveto 2484 1304 lineto stroke 2484 1304 moveto 2512 1316 moveto 2512 1316 lineto stroke 2512 1316 moveto 2540 1324 moveto 2540 1324 lineto stroke 2540 1324 moveto 2572 1332 moveto 2572 1332 lineto stroke 2572 1332 moveto 2600 1340 moveto 2600 1340 lineto stroke 2600 1340 moveto 2632 1348 moveto 2632 1348 lineto stroke 2632 1348 moveto 2660 1356 moveto 2660 1356 lineto stroke 2660 1356 moveto 2688 1364 moveto 2688 1364 lineto stroke 2688 1364 moveto 2720 1372 moveto 2720 1372 lineto stroke 2720 1372 moveto 2748 1380 moveto 2748 1380 lineto stroke 2748 1380 moveto 2776 1384 moveto 2776 1384 lineto stroke 2776 1384 moveto 2804 1388 moveto 2804 1388 lineto stroke 2804 1388 moveto 2876 2160 moveto showpage grestore auto/07p/doc/include/cont_pcl_par.eps0000640000175000017500000011663713570013207015624 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 38 161 588 603 %%HiResBoundingBox: 38.699885 161.898528 587.699885 602.898528 %................................... %%Creator: GPL Ghostscript 863 (pswrite) %%CreationDate: 2009/07/27 12:04:32 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginProlog % This copyright applies to everything between here and the %%EndProlog: % Copyright (C) 2008 Artifex Software, Inc. All rights reserved. %%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 /GS_pswrite_2_0_1001 80 dict dup begin /PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch 4 index eq and{ pop pop pop}{ PageSize dup 1 5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} { pop/setpagedevice where { pop 1 dict dup /PageSize PageSize put setpagedevice} { /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat setpage}if}ifelse}ifelse}ifelse} bind def /!{bind def}bind def/#{load def}!/N/counttomark # /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! /w/setlinewidth #/J/setlinecap # /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # /m/moveto #/l/lineto #/c/rcurveto # /p{N 2 idiv{N -2 roll rlineto}repeat}! /P{N 0 gt{N -2 roll moveto p}if}! /h{p closepath}!/H{P closepath}! /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! /re{4 -2 roll m exch dup lx exch ly neg lx h}! /^{3 index neg 3 index neg}! /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! /q/gsave #/Q/grestore #/rf{re fill}! /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! /|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! /|{exch string readstring |=}! /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! /@/currentfile #/${+ @ |}! /B{{2 copy string{readstring pop}aload pop 4 array astore cvx 3 1 roll}repeat pop pop true}! /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! /Ic{exch Ix false 3 colorimage}! /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> /CCITTFaxDecode filter}!/FX{< Q Q q 0 0 51000 0 0 66000 ^ Y 0.996264 i K 8333.98 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8983.02 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 8779.98 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 13079 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 13576 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 13373 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 17417.1 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 18170 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 17967 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 22188 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 22122 17023.9 0 -375.85 -242.16 0 H f 22764 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 22561 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 26550 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 27358 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 27155 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 31138 16799.7 m 0 252.36 122.33 292.28 176.04 292.28 c 35.8 0 71.61 -11 90.5 -41 c -11.93 0 -49.73 0 -49.73 -41.01 c 0 -22 14.92 -41 40.78 -41 c 24.86 0 41.84 15 41.84 43.99 c 0 52 -37.9 103.02 -124.54 103.02 c -125.47 0 -256.91 -128.67 -256.91 -348.01 c 0 -274.18 119.4 -335.99 203.98 -335.99 c 108.46 0 201.06 94.55 201.06 223.94 c 0 132.38 -92.46 221.02 -191.85 221.02 c -88.45 0 -121.25 -76.4 -131.18 -104.17 c h 31259.8 16459 m -62.59 0 -92.4 55.71 -101.35 76.6 c -8.94 25.86 -18.87 74.61 -18.87 144.24 c 0 78.59 35.77 177.11 125.19 177.11 c 54.65 0 83.46 -36.84 98.37 -70.66 c 15.91 -36.81 15.91 -86.55 15.91 -129.32 c 0 -50.73 0 -95.5 -18.89 -133.3 c -24.84 -47.75 -60.61 -64.66 -100.36 -64.66 c h f 31951 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 31748 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 36082.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 36545 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 36342 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 40499.9 16812.9 m 50.04 26.92 123.14 72.79 123.14 156.53 c 0 86.74 -83.8 146.62 -175.57 146.62 c -98.75 0 -176.55 -72.84 -176.55 -163.57 c 0 -33.89 9.97 -67.79 37.9 -101.69 c 10.97 -12.96 11.97 -13.95 81.79 -62.81 c -96.75 -44.86 -146.62 -111.66 -146.62 -184.44 c 0 -105.68 100.57 -171.48 202.14 -171.48 c 110.53 0 203.21 81.75 203.21 186.44 c 0 101.7 -71.73 146.55 -149.44 194.41 c h 40364.5 16902.4 m -12.97 8.98 -52.87 34.92 -52.87 83.81 c 0 64.85 67.84 105.77 134.69 105.77 c 71.84 0 135.73 -51.9 135.73 -123.73 c 0 -60.86 -43.94 -109.75 -101.81 -141.68 c h 40411.4 16773.8 m 26.87 -17.96 93.56 -60.79 120.43 -78.72 c 25.88 -16.93 71.66 -47.81 71.66 -108.57 c 0 -75.7 -76.64 -127.49 -156.26 -127.49 c -84.6 0 -157.26 61.75 -157.26 144.42 c 0 77.69 56.73 140.44 121.43 170.36 c h f 41139 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 40936 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 45161 16742.9 m 0 -235.07 -104.41 -283.87 -164.05 -283.87 c -23.86 0 -76.54 2.99 -101.4 37.94 c 5.97 0 p 6.96 -2.12 42.75 3.89 42.75 40.94 c 0 22.03 -14.91 41.07 -40.76 41.07 c -25.84 0 -41.75 -17 -41.75 -42.99 c 0 -61.98 49.76 -103.96 136.35 -103.96 c 124.41 0 244.91 132.6 244.91 348.95 c 0 268.2 -111.51 335.05 -199.07 335.05 c -109.46 0 -205.97 -91.84 -205.97 -223.54 c 0 -131.7 92.42 -221.49 191.81 -221.49 c 73.54 0 111.31 53.89 131.22 104.81 c h 45034.3 16691 m -62.64 0 -89.49 50.87 -98.43 69.82 c -15.91 37.91 -15.91 85.79 -15.91 130.67 c 0 55.86 0 103.74 25.85 144.64 c 17.9 26.93 44.74 55.9 98.44 55.9 c 56.68 0 85.51 -49.91 95.45 -72.86 c 19.91 -48.87 19.91 -133.66 19.91 -148.62 c 0 -83.79 -37.81 -179.54 -125.31 -179.54 c h f 45733 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 45530 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 26282 15662 0 -522.04 84.01 0 0 270.72 P 0 74.64 18.86 123.42 58.56 152.28 c 25.81 18.91 50.62 24.88 108.23 25.98 c 0 85.01 p -13.91 2 -20.86 3 -31.79 3 c -53.62 0 -94.34 -31.88 -142.01 -109.59 c 0 94.64 h f 26613 15866 0 -726.03 83.01 0 0 288.34 P 0 106.76 55.55 176.64 140.85 176.64 c 26.78 0 53.56 -9.02 73.4 -23.98 c 23.81 -16.96 33.74 -41.9 33.74 -78.82 c 0 -362.17 83.01 0 0 394.52 p 0 87.67 -62.66 142.46 -164.03 142.46 c -73.55 0 -118.27 -22.91 -166.96 -86.67 c 0 275.71 h f 27364 15677 m -146.38 0 -235 -104.67 -235 -280.01 c 0 -175.34 87.63 -279.95 236 -279.95 c 146.38 0 236.04 104.61 236.04 275.96 c 0 180.32 -86.68 284 -237.04 284 c h 27365 15600 m 93.38 0 149.02 -76.66 149.02 -205.98 c 0 -122.36 -57.63 -199.95 -149.02 -199.95 c -92.38 0 -149 76.6 -149 202.94 c 0 125.35 56.62 203 149 203 c h f 8076.02 17526 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 17206 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7916.98 21689 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8068.99 25061.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 7813.09 29095 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 7989.97 33228 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 7923.96 33150.9 0 -375.85 -242.16 0 H f 7758 36993.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 7752.98 40613.7 m 0 252.36 122.33 292.28 176.04 292.28 c 35.8 0 71.61 -11 90.5 -41 c -11.93 0 -49.73 0 -49.73 -41.01 c 0 -22 14.92 -41 40.78 -41 c 24.86 0 41.84 15 41.84 43.99 c 0 52 -37.9 103.02 -124.54 103.02 c -125.47 0 -256.91 -128.67 -256.91 -348.01 c 0 -274.18 119.4 -335.99 203.98 -335.99 c 108.46 0 201.06 94.55 201.06 223.94 c 0 132.38 -92.46 221.02 -191.85 221.02 c -88.45 0 -121.25 -76.4 -131.18 -104.17 c h 7874.75 40273 m -62.59 0 -92.4 55.71 -101.35 76.6 c -8.94 25.86 -18.87 74.61 -18.87 144.24 c 0 78.59 35.77 177.11 125.19 177.11 c 54.65 0 83.46 -36.84 98.37 -70.66 c 15.91 -36.81 15.91 -86.55 15.91 -129.32 c 0 -50.73 0 -95.5 -18.89 -133.3 c -24.84 -47.75 -60.61 -64.66 -100.36 -64.66 c h f 8103.23 44728.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 7926.89 48312.9 m 50.04 26.92 123.14 72.79 123.14 156.53 c 0 86.74 -83.8 146.62 -175.57 146.62 c -98.75 0 -176.55 -72.84 -176.55 -163.57 c 0 -33.89 9.97 -67.79 37.9 -101.69 c 10.97 -12.96 11.97 -13.95 81.79 -62.81 c -96.75 -44.86 -146.62 -111.66 -146.62 -184.44 c 0 -105.68 100.57 -171.48 202.14 -171.48 c 110.53 0 203.21 81.75 203.21 186.44 c 0 101.7 -71.73 146.55 -149.44 194.41 c h 7791.47 48402.4 m -12.97 8.98 -52.87 34.92 -52.87 83.81 c 0 64.85 67.84 105.77 134.69 105.77 c 71.84 0 135.73 -51.9 135.73 -123.73 c 0 -60.86 -43.94 -109.75 -101.81 -141.68 c h 7838.4 48273.8 m 26.87 -17.96 93.56 -60.79 120.43 -78.72 c 25.88 -16.93 71.66 -47.81 71.66 -108.57 c 0 -75.7 -76.64 -127.49 -156.26 -127.49 c -84.6 0 -157.26 61.75 -157.26 144.42 c 0 77.69 56.73 140.44 121.43 170.36 c h f 6466.97 32007 726.03 0 0 75.01 -66.75 0 P 60.82 39.79 89.73 92.52 89.73 165.14 c 0 137.29 -112.58 226.85 -285.93 226.85 c -169.37 0 -274.04 -85.62 -274.04 -222.87 c 0 -71.61 26.9 -122.34 85.68 -161.12 c -274.72 0 h 6734.03 32235 m 0 92.36 80.63 151.98 204.98 151.98 c 118.38 0 198.96 -61.61 198.96 -151.98 c 0 -87.39 -79.59 -144.99 -201.94 -144.99 c -122.36 0 -202 57.6 -202 144.99 c h f 6960.02 33014 m -79.72 0 -127.55 -6.05 -166.41 -20.98 c -85.7 -33.86 -137.59 -113.52 -137.59 -211.11 c 0 -145.38 111.64 -238.98 283 -238.98 c 171.36 0 276.96 90.64 276.96 237.05 c 0 119.52 -67.76 202.19 -181.38 223.13 c 0 -83.62 p 68.59 -22.88 104.37 -69.63 104.37 -136.29 c 0 -52.72 -23.86 -97.49 -67.59 -125.35 c -29.82 -19.89 -59.65 -26.86 -111.36 -27.85 c h 6892 32631.5 m -96.37 6.97 -158.98 65.75 -158.98 149.44 c 0 81.7 67.57 144.46 153.02 144.46 c 1.98 0 3.97 0 5.96 -1 c h f 6671.02 33306 0 -84.98 -143.52 0 0 -83.02 ^ 0 -71.04 68.01 0 ^ 394.32 0 P 52.77 0 82.63 35.78 82.63 100.38 c 0 19.88 -1.99 39.75 -6.98 67.62 c -69.8 0 p 2.82 -10.88 3.76 -23.73 3.76 -39.54 c 0 -35.57 -9.95 -45.45 -46.75 -45.45 c -357.18 0 0 84.98 h f 7144.18 33866 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 7028.54 33720 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 9837.99 18729 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 10104.2 18966 47.69 0 P 96.38 0 146.11 -43.67 146.11 -128.02 c 0 -88.32 -54.8 -140.92 -146.32 -140.92 c -95.5 0 -142.26 47.74 -148.23 150.2 c -87.54 0 p 3.98 -56.81 13.94 -93.68 30.87 -125.57 c 35.84 -67.76 105.55 -102.64 202.14 -102.64 c 145.38 0 239.09 86.63 239.09 220.07 c 0 89.62 -34.85 139.41 -119.43 168.29 c 65.63 25.89 98.44 75.68 98.44 146.38 c 0 121.48 -80.68 194.22 -215.11 194.22 c -142.39 0 -218.08 -77.59 -221.06 -227.77 c 87.52 0 p 1 42.64 4.97 66.44 15.91 88.25 c 19.89 38.68 63.65 62.5 118.35 62.5 c 77.58 0 124.38 -45.63 124.38 -119.96 c 0 -49.56 -17.89 -79.29 -56.62 -95.15 c -23.83 -9.91 -54.62 -13.88 -116.19 -14.87 c h f 17256 27968 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 17628 28050 0 -169 88.01 0 ^ 104.02 0 0 79.01 ^ 0 457.97 -64.88 0 -321.27 -444.35 0 -92.63 H 17628 28129 -221.42 0 221.42 308.9 H f 42394 46862 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 42914.1 47481 -364.54 0 -52.79 -384.18 80.6 0 P 40.8 48.4 74.63 65.2 129.36 65.2 c 94.53 0 154.27 -64.62 154.27 -168.97 c 0 -101.37 -58.77 -162.99 -154.29 -162.99 c -76.62 0 -123.39 38.77 -144.29 118.32 c -87.56 0 p 11.95 -57.82 21.91 -85.72 42.82 -111.62 c 39.84 -53.82 111.55 -84.7 191.24 -84.7 c 142.43 0 242.09 103.56 242.09 252.93 c 0 139.41 -92.68 235.06 -228.14 235.06 c -49.8 0 -89.64 -12.88 -130.47 -42.59 c 27.89 196.55 293.82 0 h f cleartomark end end pagesave restore showpage %%PageTrailer %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%Pages: 1 %%EOF auto/07p/doc/include/clrLBMu0.fig0000640000175000017500000000024513570013207014502 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 clrLBMu0.png 75 150 8895 150 8895 7590 75 7590 75 150 auto/07p/doc/include/pp21.eps0000640000175000017500000011424413570013207013733 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 29 160 579 602 %%HiResBoundingBox: 29.384991 160.910988 578.384990 601.910989 % Produced by xpdf/pdftops 3.02 %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 612 792 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font GYJMTW+CMR12 %!FontType1-1.0: GYJMTW+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GYJMTW+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 462 675] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 52 /four put dup 54 /six put dup 56 /eight put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32D9B31D10B260CD4CC1D 847FA11D4A6147194663D6D7E38C5CA39E6E046476ADA46B08E683CE7C25C698 15EFBCC5EAAE453F74AF2BCCFA795B13C467CCD25417481CDDD1B723CAF9168E B9D91CDDCD809DF346718FAEBBCE61CE552A49B54C41E6C7963B3397258C1F7D 567320FB1F0D6E6367D24B5129D81E6BFE767BD2B31EF31250D83A41873594E6 53D2894C282FB09EB2961D1731C6F38C6321C5EF081DDCF2C93008918529462C C1F7B3A482DA5B506FB01CD2CA60EC8B3B870B73C5FA345863BD90F8C0744B31 2D01D764D62A9BC74CA3AE740302673B87C9EB4E432E328A220A7C6E6DE5D99B 64B3B4DF792CEF0B88783822DC1BF4B81196ACFF28B34C035E5BE8FE360414BD 1F782052F6192CEEA432056C5491286C0BD853BA712FEDFDA01298599197BBB6 1948532988BE292E40701E1024B385752A24A29FCC1C885231F62CBB1539034A A95188EA96E473613FAF255F5A47978FE9CAB708BF0D8452F49B0441E1E72210 B3F9C5175D5CB67E70A8C1FD816621B2A4692B7226B6C7D277DD957AC9526AC4 38B8AE0F01A555DA87551C7A556702FD5B952F565726153AC10EA97638B62B2E 8A5437AE8C5B133B9106077B762379D403AAC7E5608D80686DCEE36C87BAC13C 31715626AAC535B542EF3943B9AB28B0AC82DCC5D43554FFA058EC03F139E6D8 BDB38F137FC9971238A38EBBA2ADBEA102EB799CC0DE5B6EC627BAED412F29FB 56E6BDCE2CDFA9BF94F67D7B9636DB09C18749E3666F6E154E8B1AE1CE815122 9BD4379078B93F4B5A36B11D0520A65CADBA58618F0245D06CC2991D4C9116E6 CB016036776E0222861EA7CB3A65BAE136E29EA4CE9B80E738429E3727750DA3 E76ED6C76CB0A50E762986E437C4DB1C062E692EE599F953F55B75F41342F78B 1CBD18EA7155D910214EF5EAE720F6389ADE39D90383094F793BA4F52128A7A1 CF09EA9BE7582ABAB50735E10924E0A39988B5A80F3295FD541BB300CAAC3187 F5241D0D50316C9FC7B75A452394E87ED0EEFE150F73FAFC0B635471CC3463B2 66E6C46CB352C737C71B43E80E02477296F42C087080ED2E4609B680E0A85B67 4DAC1C993C027E3114C42B05A0FB0854B7028619B81C4FA35D16EF6353406D15 A5CFA40E19354E756EFF8DE1D1B5A14352CA93A5E0313BAC66830CFCA00233B3 4575CCEEB90AF8D77F3874D5861D4A105B3970A9849EF1EBF1A4928E1899BE64 8171220D7AA08CF4360C9AEFC808F1F38DA3468D1029C34A3BFE7C01632243EA 113E14AA1A43CDAABA221C76F3D256EF7D337F529F4F1E253F63D24E4DFC083E 1982CDFC6059E94B507E5173DBA11DA9009F0A4EC2925C846F4505C27F4DD9DC 94055AA6DBF9850B9DDA76F7017A29CBEDA7330234694368594F2A1200897F49 3653A622E70756E4BCEA07E2A8879E8F91EF105310D4472C73FB69F6B0E24465 393EF0ACE315BB69DE71B7A82D7A27ED9B747E26125E600313A8EF2F540CD017 C1C6EB440F5AE74EC5D29859904753E2BD04DFF9658C85EBEB488F0F82 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /GYJMTW+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 612 792 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 612 792 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 612 792 re W q q [0.1 0 0 0.1 0 0] cm q 315.602 1754.4 5489.998 4410 re W /DeviceGray {} cs [1] sc 315.602 1754.4 5490 4410 re f 10 w 2 J /DeviceGray {} CS [1] SC 315.602 1754.4 5489.998 4410 re S 1035.6 2114.4 4410 3690 re f /DeviceGray {} CS [0] SC 1035.6 2114.4 4410 3690 re S Q q 1035.6 2114.4 4410 3690 re W [60 60] 0 d 20 w /DeviceGray {} CS [0] SC 1035.6 2852.4 m 3681.6 2852.4 l S [] 0 d 2 J 3681.6 2852.4 m 5445.6 2852.4 l S [60 60] 0 d 0 J /DeviceRGB {} CS [1 0 0] SC 3681.6 2852.4 m 3760.49 2911.44 l 3818.88 2955.69 l 3876.84 3000.19 l 3934.28 3045 l 3991.13 3090.14 l 4047.27 3135.67 l 4102.6 3181.65 l 4157.01 3228.12 l 4210.36 3275.13 l 4262.49 3322.76 l 4313.23 3371.05 l 4362.39 3420.07 l 4409.73 3469.88 l 4455.01 3520.55 l 4497.93 3572.13 l 4538.14 3624.67 l 4575.28 3678.23 l 4608.91 3732.81 l 4638.55 3788.41 l 4660.2 3836.4 l 4681.09 3893.76 l 4696.48 3951.89 l 4705.87 4010.6 l 4708.82 4066.15 l 4705.41 4125.14 l 4695.11 4183.78 l 4677.97 4241.69 l 4654.18 4298.55 l 4624.14 4354.06 l 4588.32 4408.01 l 4547.26 4460.26 l 4501.53 4510.74 l 4451.66 4559.44 l 4398.15 4606.38 l 4341.47 4651.61 l 4282 4695.21 l 4220.09 4737.26 l 4156.05 4777.86 l 4090.12 4817.08 l 4022.55 4855.02 l 3953.51 4891.76 l 3883.16 4927.38 l 3811.66 4961.94 l 3739.11 4995.52 l 3665.64 5028.18 l 3591.32 5059.98 l 3516.24 5090.96 l 3440.47 5121.18 l 3364.07 5150.68 l 3287.09 5179.5 l 3209.59 5207.68 l 3131.6 5235.25 l 3053.16 5262.25 l 2974.31 5288.71 l 2895.08 5314.65 l 2815.5 5340.1 l 2735.58 5365.08 l 2655.36 5389.62 l 2574.85 5413.73 l 2494.07 5437.44 l 2413.04 5460.75 l 2331.77 5483.7 l 2250.29 5506.29 l 2168.59 5528.54 l 2086.69 5550.45 l 2004.61 5572.06 l 1922.35 5593.36 l 1839.92 5614.37 l 1757.33 5635.1 l 1674.6 5655.55 l 1591.72 5675.75 l 1508.7 5695.69 l 1425.56 5715.39 l 1342.29 5734.85 l 1258.9 5754.08 l 1175.4 5773.1 l 1091.79 5791.9 l 1035.6 5804.4 l S [] 0 d 2 J /DeviceRGB {} CS [0 0.5019 0] SC 3681.6 2852.4 m 3601.82 2793.36 l 3542.43 2749.71 l 3482.91 2706.14 l 3423.31 2662.62 l 3363.69 2619.12 l 3274.31 2553.82 l 3140.71 2455.59 l 3008.11 2356.75 l 2877.03 2257.02 l 2747.94 2156.12 l 2695.76 2114.4 l S [60 60] 0 d 0 J /DeviceRGB {} CS [0 0 1] SC 4660.2 3836.4 m 4090.09 3836.4 l S [] 0 d 2 J 4090.09 3836.4 m 1035.6 3836.4 l S [60 60] 0 d 0 J /DeviceGray {} CS [0] SC 4660.2 3836.4 m 5445.6 3836.4 l S [] 0 d 2 J /DeviceRGB {} CS [1 0 0] SC 3997.33 3836.4 m 3997.84 3877.27 l 3999.37 3919.34 l 4001.92 3962.51 l 4005.48 4006.72 l 4010.04 4051.98 l 4015.58 4098.32 l 4022.07 4145.46 l 4029.47 4193.37 l 4037.73 4241.79 l 4046.78 4290.74 l 4056.5 4339.81 l 4066.78 4388.6 l 4077.44 4436.72 l 4088.3 4483.67 l 4099.12 4529 l 4109.65 4571.94 l 4119.62 4612 l 4128.75 4648.76 l 4136.78 4681.01 l 4143.52 4708.51 l 4148.83 4730.91 l 4152.72 4748.1 l 4155.32 4760.36 l 4156.87 4768.3 l 4157.62 4772.54 l S /DeviceGray {} cs [1] sc 3651.6 2822.4 60 59.9961 re f 5 w 0 J /DeviceGray {} CS [0] SC 3651.6 2822.4 60 60 re S 4630.2 3806.4 60 60 re f 4630.2 3806.4 60 60 re S /DeviceRGB {} cs [1 0 0] sc 3967.33 3806.4 60 60 re f 3967.33 3806.4 60 60 re S 2 J 1055.9 2870.2 m 1170.93 2971.08 l S 3695.1 2829.02 m 3749.1 2735.49 l S 5422.96 2867.11 m 5256.9 2974.94 l S 4646.7 3859.78 m 4570.2 3992.28 l S 4732.2 4079.65 m 4825.73 4133.65 l S 2695.76 2141.4 m 2695.76 2249.4 l S 3983.83 3813.02 m 3929.83 3719.49 l S 1057.02 3819.96 m 1178.4 3726.82 l S 5422.22 3822.9 m 5250.74 3723.9 l S 4021.22 3890.77 m 4153.72 3967.27 l S 3974.92 3962.51 m 3866.92 3962.51 l S 3990.95 4071.07 m 3914.58 4147.44 l S 4049.07 4145.46 m 4157.07 4145.46 l S 4061.12 4255.29 m 4193.62 4331.79 l S 4038.7 4360.11 m 3937.82 4475.14 l S 4100.82 4450.22 m 4233.33 4526.72 l S 4081.32 4549.3 m 3980.44 4664.34 l S 4139.41 4630.36 m 4350.53 4826.25 l S 4136.78 4708.01 m 4136.78 4951.01 l S 4165.27 4752.33 m 4367.99 5016.51 l S 4155.32 4787.36 m 4155.32 5165.36 l S 4130.72 4774.89 m 3754.16 4807.83 l S [10 30] 0 d 0 J 1035.6 2114.4 m 1035.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 2154.4 l S 1035.6 5804.4 m 1035.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1917.6 2114.4 m 1917.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1917.6 2114.4 m 1917.6 2154.4 l S 1917.6 5804.4 m 1917.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 2799.6 2114.4 m 2799.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 2799.6 2114.4 m 2799.6 2154.4 l S 2799.6 5804.4 m 2799.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3681.6 2114.4 m 3681.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3681.6 2114.4 m 3681.6 2154.4 l S 3681.6 5804.4 m 3681.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 4563.6 2114.4 m 4563.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 4563.6 2114.4 m 4563.6 2154.4 l S 4563.6 5804.4 m 4563.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 2154.4 l S 5445.6 5804.4 m 5445.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2262 m 5445.6 2262 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2262 m 1075.6 2262 l S 5445.6 2262 m 5405.6 2262 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2852.4 m 5445.6 2852.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2852.4 m 1075.6 2852.4 l S 5445.6 2852.4 m 5405.6 2852.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3442.8 m 5445.6 3442.8 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3442.8 m 1075.6 3442.8 l S 5445.6 3442.8 m 5405.6 3442.8 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4033.2 m 5445.6 4033.2 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4033.2 m 1075.6 4033.2 l S 5445.6 4033.2 m 5405.6 4033.2 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4623.6 m 5445.6 4623.6 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4623.6 m 1075.6 4623.6 l S 5445.6 4623.6 m 5405.6 4623.6 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5214 m 5445.6 5214 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5214 m 1075.6 5214 l S 5445.6 5214 m 5405.6 5214 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 1075.6 5804.4 l S 5445.6 5804.4 m 5405.6 5804.4 l S 10 w 2 J 1035.6 2114.4 4410 3690 re S Q q 720 7200 m 720 7200 l 720 7200 l 720 7200 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -644.52 6187.08] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 95.0602 197.44] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 9.1199 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -6125.15 TJm (0) 5.858 Tj -2.2637 TJm 94.0801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 97.32 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -6125.15 TJm (0) 5.858 Tj -2.2627 TJm 182.2802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 185.52 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -6125.14 TJm (0) 5.858 Tj -2.2627 TJm 270.4802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 273.72 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -6125.11 TJm (0) 5.858 Tj -2.2627 TJm 358.6798 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 361.9197 0 Td /F9_0 11.9552 Tf (8) 5.858 Tj -6125.15 TJm (1) 5.858 Tj -2.2627 TJm 446.8799 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 450.1197 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 208.9997 -15.4797 Td /F13_0 11.9552 Tf (P) 7.9741 Tj 124.968 TJm (A) 7.9741 Tj 4.5254 TJm (R) 8.6317 Tj -0.7005 TJm (\() 3.9811 Tj 1.7644 TJm (1) 6.6471 Tj 3.9372 TJm (\)) 3.9811 Tj 1.7624 TJm -21.5003 24.2203 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -12.2604 24.2203 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -6.3804 24.2203 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.1405 24.2203 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -12.5003 82.8 Td (0) 5.858 Tj -2.2632 TJm -6.6202 82.8 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 82.8 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.5003 141.8402 Td (0) 5.858 Tj -2.2632 TJm -6.6202 141.8402 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 141.8402 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -12.5003 200.88 Td (0) 5.858 Tj -2.2632 TJm -6.6202 200.88 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 200.88 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm -12.5003 259.9202 Td (0) 5.858 Tj -2.2632 TJm -6.6202 259.9202 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 259.9202 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2.2632 TJm -12.5003 318.96 Td (0) 5.858 Tj -2.2632 TJm -6.6202 318.96 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 318.96 Td /F9_0 11.9552 Tf (8) 5.858 Tj -2.2632 TJm -12.5003 377.9998 Td (1) 5.858 Tj -2.2632 TJm -6.6202 377.9998 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3804 377.9998 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 66.0398 383.44] Tm 0 0 Td /F13_0 11.9552 Tf (U) 8.6317 Tj -0.6984 TJm (\() 3.9811 Tj 1.7624 TJm (1) 6.6471 Tj 3.9372 TJm (\)) 3.9811 Tj 1.7624 TJm [1 0 0 1 118.446 298.295] Tm 0 0 Td /F13_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm 257.364 -36.3047 Td (2) 6.6471 Tj 3.9372 TJm 396.734 0.4199 Td (3) 6.6471 Tj 3.9372 TJm 328.6738 102.4919 Td (4) 6.6471 Tj 3.9372 TJm 365.6859 116.2099 Td (5) 6.6471 Tj 3.9372 TJm 146.6299 -71.5551 Td (7) 6.6471 Tj 3.9372 TJm 264.6369 62.3349 Td (8) 6.6471 Tj 3.9372 TJm 0.8219 63.5318 Td (9) 6.6471 Tj 3.9372 TJm 390.0699 63.4349 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 298.4847 99.3318 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 251.4456 92.956 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm 256.739 117.9619 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm 299.0609 111.251 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm 302.4749 136.024 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm 259.1487 150.8119 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm 306.4448 155.2767 Td (1) 6.6471 Tj 3.9372 TJm (7) 6.6471 Tj 3.9372 TJm 263.4108 169.7318 Td (1) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm 317.9256 185.7939 Td (1) 6.6471 Tj 3.9372 TJm (9) 6.6471 Tj 3.9372 TJm 287.7318 198.8459 Td (2) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 319.4478 204.7838 Td (2) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 289.5857 220.0408 Td (2) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm 240.1767 177.8849 Td (2) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font GJCTBM+CMMI12 %%+ font GYJMTW+CMR12 %%EOF auto/07p/doc/include/broken.eps0000640000175000017500000027574313570013207014445 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .137488724.136567180 %%CreationDate: Sat Dec 15 03:59:46 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: broken.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.142016487 242.177520609 moveto 80.1482049039 242.185252985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1482049039 242.185252985 moveto 80.1546628737 242.193322056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1546628737 242.193322056 moveto 80.1614021322 242.201742468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1614021322 242.201742468 moveto 80.1684349258 242.210529507 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1684349258 242.210529507 moveto 80.1767124973 242.22087164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1767124973 242.22087164 moveto 80.1853966856 242.231721599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.1853966856 242.231721599 moveto 80.194507454 242.243104291 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.194507454 242.243104291 moveto 80.2040657448 242.255045846 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2040657448 242.255045846 moveto 80.2138748622 242.267300491 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2138748622 242.267300491 moveto 80.2241552636 242.280143614 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2241552636 242.280143614 moveto 80.2349295767 242.293603437 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2349295767 242.293603437 moveto 80.2462215137 242.307709532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2462215137 242.307709532 moveto 80.2582568845 242.322743918 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2582568845 242.322743918 moveto 80.2708802305 242.338512326 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2708802305 242.338512326 moveto 80.284120252 242.355050535 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.284120252 242.355050535 moveto 80.2980070475 242.372396065 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.2980070475 242.372396065 moveto 80.3119319523 242.389788607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.3119319523 242.389788607 moveto 80.3265071199 242.40799271 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.3265071199 242.40799271 moveto 80.341762884 242.427046169 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.341762884 242.427046169 moveto 80.3577309899 242.446988534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.3577309899 242.446988534 moveto 80.3760586338 242.46987673 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.3760586338 242.46987673 moveto 80.3953245752 242.493935591 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.3953245752 242.493935591 moveto 80.4155767888 242.519224853 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.4155767888 242.519224853 moveto 80.4368656956 242.545807284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.4368656956 242.545807284 moveto 80.460552767 242.575382541 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.460552767 242.575382541 moveto 80.4855230404 242.6065581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.4855230404 242.6065581 moveto 80.5118459188 242.639420301 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.5118459188 242.639420301 moveto 80.5395945467 242.674060118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.5395945467 242.674060118 moveto 80.5671197802 242.708418699 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.5671197802 242.708418699 moveto 80.59604762 242.744525553 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.59604762 242.744525553 moveto 80.6264493949 242.782469321 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.6264493949 242.782469321 moveto 80.658400046 242.822343103 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.658400046 242.822343103 moveto 80.6933977124 242.866015848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.6933977124 242.866015848 moveto 80.7302533172 242.912002939 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.7302533172 242.912002939 moveto 80.7690652486 242.960426482 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.7690652486 242.960426482 moveto 80.8099370777 243.011414962 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.8099370777 243.011414962 moveto 80.8559592636 243.068822376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.8559592636 243.068822376 moveto 80.9045923901 243.129479446 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.9045923901 243.129479446 moveto 80.9559841228 243.193569118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80.9559841228 243.193569118 moveto 81.0102904241 243.261284517 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0102904241 243.261284517 moveto 81.0696195329 243.335252387 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0696195329 243.335252387 moveto 81.1324258731 243.413543451 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1324258731 243.413543451 moveto 81.1989124454 243.49640864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1989124454 243.49640864 moveto 81.269294004 243.584113239 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.269294004 243.584113239 moveto 81.3415049055 243.674081308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.3415049055 243.674081308 moveto 81.4178138313 243.769137378 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.4178138313 243.769137378 moveto 81.4984521986 243.869566687 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.4984521986 243.869566687 moveto 81.583664357 243.975670169 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.583664357 243.975670169 moveto 81.6790741001 244.094444338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.6790741001 244.094444338 moveto 81.7802141925 244.220320957 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.7802141925 244.220320957 moveto 81.8874266529 244.353720058 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.8874266529 244.353720058 moveto 82.0010736442 244.495085932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.0010736442 244.495085932 moveto 82.140780606 244.668812325 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.140780606 244.668812325 moveto 82.2902026391 244.854551639 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.2902026391 244.854551639 moveto 82.450009854 245.053122649 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.450009854 245.053122649 moveto 82.6209177866 245.265398208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.6209177866 245.265398208 moveto 82.8027261014 245.491111745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.8027261014 245.491111745 moveto 82.99708062 245.732286352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.99708062 245.732286352 moveto 83.2048378806 245.989961011 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.2048378806 245.989961011 moveto 83.4269115612 246.265241626 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.4269115612 246.265241626 moveto 83.6706643278 246.567216672 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.6706643278 246.567216672 moveto 83.9316367059 246.890316929 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.9316367059 246.890316929 moveto 84.2110279468 247.235982968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.2110279468 247.235982968 moveto 84.5101182744 247.605748082 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.5101182744 247.605748082 moveto 84.8553286044 248.032180364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.8553286044 248.032180364 moveto 85.2267216276 248.490535586 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.2267216276 248.490535586 moveto 85.6262454056 248.983121793 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.6262454056 248.983121793 moveto 86.0559869076 249.512400867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.0559869076 249.512400867 moveto 86.5795143032 250.156398836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.5795143032 250.156398836 moveto 87.1477350404 250.854392326 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.1477350404 250.854392326 moveto 87.7643636564 251.610690675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.7643636564 251.610690675 moveto 88.4334051336 252.429907679 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.4334051336 252.429907679 moveto 89.26299783 253.443736873 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.26299783 253.443736873 moveto 90.1727408012 254.552997795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.1727408012 254.552997795 moveto 91.1700792468 255.766030953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.1700792468 255.766030953 moveto 92.2630881764 257.091772511 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.2630881764 257.091772511 moveto 93.4926081216 258.578517843 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.4926081216 258.578517843 moveto 94.8421637184 260.204825848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.8421637184 260.204825848 moveto 96.3227950992 261.982343402 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.3227950992 261.982343402 moveto 97.9464147712 263.923380428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.9464147712 263.923380428 moveto 99.6539715504 265.955551052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.6539715504 265.955551052 moveto 101.517727062 268.162801137 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.517727062 268.162801137 moveto 103.550722634 270.557559106 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.550722634 270.557559106 moveto 105.766840055 273.152596179 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.766840055 273.152596179 moveto 108.08102328 275.845216909 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.08102328 275.845216909 moveto 110.591422999 278.746123959 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.591422999 278.746123959 moveto 113.312497176 281.866820557 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.312497176 281.866820557 moveto 116.259360459 285.218546047 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.259360459 285.218546047 moveto 119.327626639 288.677319215 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.327626639 288.677319215 moveto 122.634744288 292.36966238 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.634744288 292.36966238 moveto 126.19564306 296.303656605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.19564306 296.303656605 moveto 130.025538376 300.48619578 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.025538376 300.48619578 moveto 134.035785792 304.81122476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.035785792 304.81122476 moveto 138.331005296 309.38123998 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.331005296 309.38123998 moveto 142.92535926 314.19743101 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 142.92535926 314.19743101 moveto 147.83268934 319.25851564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.83268934 319.25851564 moveto 153.111108276 324.60528225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.111108276 324.60528225 moveto 158.734148424 330.18910235 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.734148424 330.18910235 moveto 164.713608044 335.998300545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.713608044 335.998300545 moveto 171.059913232 342.01676027 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.059913232 342.01676027 moveto 178.228097296 348.629370875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.228097296 348.629370875 moveto 185.82980742 355.423149905 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.82980742 355.423149905 moveto 193.86983384 362.358516705 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.86983384 362.358516705 moveto 202.349277768 369.387939485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.349277768 369.387939485 moveto 211.286059988 376.47190245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.286059988 376.47190245 moveto 220.653296908 383.529636285 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.653296908 383.529636285 moveto 230.437780092 390.488094025 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.437780092 390.488094025 moveto 240.62057114 397.26619659 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.62057114 397.26619659 moveto 250.284885616 403.24643561 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.284885616 403.24643561 moveto 260.23905464 408.92786348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.23905464 408.92786348 moveto 270.454502472 414.234039915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.454502472 414.234039915 moveto 280.898059784 419.08602214 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.898059784 419.08602214 moveto 290.803539556 423.12847874 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.803539556 423.12847874 moveto 300.840571264 426.64193788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.840571264 426.64193788 moveto 310.972247368 429.563038685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.972247368 429.563038685 moveto 321.158919804 431.830973945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.158919804 431.830973945 moveto 331.197258112 433.3698079 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.197258112 433.3698079 moveto 341.206180564 434.17103007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.206180564 434.17103007 moveto 351.142388588 434.19093411 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.142388588 434.19093411 moveto 360.96170484 433.39271713 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.96170484 433.39271713 moveto 370.916972516 431.682316445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.916972516 431.682316445 moveto 380.65196284 429.049106925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.65196284 429.049106925 moveto 390.118997 425.481411565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.118997 425.481411565 moveto 399.271941224 420.978483245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.271941224 420.978483245 moveto 408.201570676 415.4583423 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.201570676 415.4583423 moveto 416.718605128 409.00677973 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 416.718605128 409.00677973 moveto 424.783391604 401.65780305 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.783391604 401.65780305 moveto 432.360264256 393.45621153 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 432.360264256 393.45621153 moveto 439.737889928 384.01308822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.737889928 384.01308822 moveto 446.51574646 373.768287145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.51574646 373.768287145 moveto 452.66934792 362.803851765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.66934792 362.803851765 moveto 458.180226964 351.208989765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.180226964 351.208989765 moveto 462.586569828 340.2953257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.586569828 340.2953257 moveto 466.45549716 329.017971135 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.45549716 329.017971135 moveto 469.785772172 317.44968846 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.785772172 317.44968846 moveto 472.57973732 305.66330622 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.57973732 305.66330622 moveto 474.82870874 293.81697624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.82870874 293.81697624 moveto 476.56332206 281.895256131 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.56332206 281.895256131 moveto 477.794938132 269.964202779 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.794938132 269.964202779 moveto 478.53738364 258.086684726 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.53738364 258.086684726 moveto 478.750260628 251.237622624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.750260628 251.237622624 moveto 478.80699464 244.437591946 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.80699464 244.437591946 moveto 478.711217228 237.697042384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.711217228 237.697042384 moveto 478.466736312 231.025907115 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.466736312 231.025907115 moveto 478.018963996 223.616508812 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.018963996 223.616508812 moveto 477.393918376 216.319383276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.393918376 216.319383276 moveto 476.597646276 209.146210419 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.597646276 209.146210419 moveto 475.63635698 202.107783157 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.63635698 202.107783157 moveto 474.5418625 195.359286328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.5418625 195.359286328 moveto 473.301429396 188.7578138 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 473.301429396 188.7578138 moveto 471.921175748 182.311034 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.921175748 182.311034 moveto 470.40727108 176.02582914 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.40727108 176.02582914 moveto 468.737659596 169.80831057 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 468.737659596 169.80831057 moveto 466.942862524 163.769710295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.942862524 163.769710295 moveto 465.029395908 157.914880865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.029395908 157.914880865 moveto 463.00374868 152.24792612 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 463.00374868 152.24792612 moveto 460.966036508 147.0035385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.966036508 147.0035385 moveto 458.83707902 141.936701975 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.83707902 141.936701975 moveto 456.622410708 137.049238835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 456.622410708 137.049238835 moveto 454.327492424 132.342445385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.327492424 132.342445385 moveto 451.73081546 127.40022721 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 451.73081546 127.40022721 moveto 449.051411836 122.67565607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 449.051411836 122.67565607 moveto 446.296050712 118.16849694 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.296050712 118.16849694 moveto 443.471342864 113.877923675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.471342864 113.877923675 moveto 440.417505616 109.576889925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.417505616 109.576889925 moveto 437.30078226 105.51402883 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.30078226 105.51402883 moveto 434.128327916 101.68652331 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.128327916 101.68652331 moveto 430.907054684 98.09102982 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 430.907054684 98.09102982 moveto 427.83253326 94.91146701 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.83253326 94.91146701 moveto 424.725937424 91.9310322349999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.725937424 91.9310322349999 moveto 421.592426284 89.14588018 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.592426284 89.14588018 moveto 418.436948944 86.551898775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.436948944 86.551898775 moveto 415.133234204 84.049513035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.133234204 84.049513035 moveto 411.815940788 81.744516365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.815940788 81.744516365 moveto 408.489918284 79.63156743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.489918284 79.63156743 moveto 405.159765508 77.705157045 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 405.159765508 77.705157045 moveto 401.6055293 75.848367165 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.6055293 75.848367165 moveto 398.056517828 74.19067336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.056517828 74.19067336 moveto 394.517393696 72.7249846849999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.517393696 72.7249846849999 moveto 390.99250894 71.444151 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.99250894 71.444151 moveto 387.370823608 70.30761541 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 387.370823608 70.30761541 moveto 383.772776244 69.35274722 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.772776244 69.35274722 moveto 380.202169508 68.5716887999999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.202169508 68.5716887999999 moveto 376.662490264 67.956655155 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 376.662490264 67.956655155 moveto 373.261354212 67.5114063049999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.261354212 67.5114063049999 moveto 369.894960128 67.20825266 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.894960128 67.20825266 moveto 366.565705424 67.0404227799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.565705424 67.0404227799999 moveto 363.27575312 67.00129273 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 363.27575312 67.00129273 moveto 359.840288836 67.092820285 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.840288836 67.092820285 moveto 356.453018736 67.3137111949999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.453018736 67.3137111949999 moveto 353.115739048 67.65676301 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.115739048 67.65676301 moveto 349.83001634 68.115018695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.83001634 68.115018695 moveto 346.1026185 68.77858205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.1026185 68.77858205 moveto 342.447487128 69.5768880649999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.447487128 69.5768880649999 moveto 338.866063704 70.5005349899999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.866063704 70.5005349899999 moveto 335.359504612 71.540602375 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.359504612 71.540602375 moveto 331.946021008 72.68253471 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.946021008 72.68253471 moveto 328.608196024 73.9235155999999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.608196024 73.9235155999999 moveto 325.346503908 75.2561765649999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.346503908 75.2561765649999 moveto 322.161251644 76.67360877 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.161251644 76.67360877 moveto 318.97275052 78.209257125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.97275052 78.209257125 moveto 315.864932884 79.8208532649999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.864932884 79.8208532649999 moveto 312.837735228 81.50237167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.837735228 81.50237167 moveto 309.8910066 83.248241005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.8910066 83.248241005 moveto 306.811463308 85.19181296 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.811463308 85.19181296 moveto 303.824402448 87.1980364349999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.824402448 87.1980364349999 moveto 300.929448944 89.26159366 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.929448944 89.26159366 moveto 298.1262072 91.3776693799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.1262072 91.3776693799999 moveto 295.075316984 93.82090714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.075316984 93.82090714 moveto 292.139942336 96.319853655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.139942336 96.319853655 moveto 289.319587644 98.8696318699999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.319587644 98.8696318699999 moveto 286.613828252 101.465981895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.613828252 101.465981895 moveto 283.677089576 104.46898267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.677089576 104.46898267 moveto 280.887640572 107.522799515 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.887640572 107.522799515 moveto 278.245347876 110.62360566 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.245347876 110.62360566 moveto 275.750288496 113.768274485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.750288496 113.768274485 moveto 273.344619528 117.03637318 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.344619528 117.03637318 moveto 271.094702876 120.34588394 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.094702876 120.34588394 moveto 269.001365392 123.695228895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.001365392 123.695228895 moveto 267.065687616 127.08328035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.065687616 127.08328035 moveto 265.354731048 130.37610981 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.354731048 130.37610981 moveto 263.792097028 133.70362743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.792097028 133.70362743 moveto 262.379374392 137.065644515 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.379374392 137.065644515 moveto 261.118337424 140.46212612 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.118337424 140.46212612 moveto 260.051936796 143.75629205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.051936796 143.75629205 moveto 259.129074792 147.08240769 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.129074792 147.08240769 moveto 258.351729496 150.44057019 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.351729496 150.44057019 moveto 257.721980516 153.8308298 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.721980516 153.8308298 moveto 257.256766264 157.128396755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.256766264 157.128396755 moveto 256.9326327 160.45558484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.9326327 160.45558484 moveto 256.751606164 163.812079775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.751606164 163.812079775 moveto 256.71572718 167.197369845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.71572718 167.197369845 moveto 256.822540232 170.52698318 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.822540232 170.52698318 moveto 257.071289104 173.88234007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.071289104 173.88234007 moveto 257.463776792 177.26219336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.463776792 177.26219336 moveto 258.001726676 180.664963685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.001726676 180.664963685 moveto 258.693054432 184.117164715 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.693054432 184.117164715 moveto 259.5354295 187.588260885 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.5354295 187.588260885 moveto 260.530193788 191.075359695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.530193788 191.075359695 moveto 261.67848004 194.57505969 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.67848004 194.57505969 moveto 263.070450396 198.309722782 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.070450396 198.309722782 moveto 264.638092516 202.048689047 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.638092516 202.048689047 moveto 266.381701212 205.785658229 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.381701212 205.785658229 moveto 268.301095124 209.513483629 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.301095124 209.513483629 moveto 270.400580384 213.232644104 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.400580384 213.232644104 moveto 272.674633464 216.925549513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.674633464 216.925549513 moveto 275.121281736 220.582255322 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.121281736 220.582255322 moveto 277.737838852 224.191870138 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.737838852 224.191870138 moveto 280.28305742 227.449697648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.28305742 227.449697648 moveto 282.964930852 230.648211192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.964930852 230.648211192 moveto 285.77958024 233.776991711 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.77958024 233.776991711 moveto 288.72248778 236.825032911 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.72248778 236.825032911 moveto 291.576146352 239.582909257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.576146352 239.582909257 moveto 294.531991576 242.250903838 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.531991576 242.250903838 moveto 297.58477424 244.818985202 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 297.58477424 244.818985202 moveto 300.728716728 247.27687167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.728716728 247.27687167 moveto 303.905793932 249.578105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.905793932 249.578105 moveto 307.158551436 251.752382306 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.158551436 251.752382306 moveto 310.479996388 253.789606066 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.479996388 253.789606066 moveto 313.86266598 255.679739973 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.86266598 255.679739973 moveto 317.406312404 257.464191581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.406312404 257.464191581 moveto 320.997480268 259.071170735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.997480268 259.071170735 moveto 324.626570052 260.490503729 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.626570052 260.490503729 moveto 328.283575104 261.712522216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.283575104 261.712522216 moveto 332.0158076 262.742404495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.0158076 262.742404495 moveto 335.754946136 263.550694362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.754946136 263.550694362 moveto 339.489538688 264.129602751 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.489538688 264.129602751 moveto 343.20793688 264.472364465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.20793688 264.472364465 moveto 347.071742732 264.572049256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.071742732 264.572049256 moveto 350.891290436 264.40155771 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 350.891290436 264.40155771 moveto 354.65304788 263.957458822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.65304788 263.957458822 moveto 358.343626796 263.237998379 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 358.343626796 263.237998379 moveto 361.598458896 262.353439018 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.598458896 262.353439018 moveto 364.775373332 261.246340438 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 364.775373332 261.246340438 moveto 367.865269672 259.919136742 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 367.865269672 259.919136742 moveto 370.85939214 258.375457041 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.85939214 258.375457041 moveto 373.72898538 256.633478869 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.72898538 256.633478869 moveto 376.488192228 254.68870416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 376.488192228 254.68870416 moveto 379.129753124 252.548047116 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.129753124 252.548047116 moveto 381.646929488 250.219453118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.468779704 253.940057048 moveto 429.916905412 244.791460151 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.916905412 244.791460151 moveto 431.821691496 235.439895673 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 431.821691496 235.439895673 moveto 433.19039836 225.961617125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.19039836 225.961617125 moveto 434.034311912 216.429845368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.034311912 216.429845368 moveto 434.374979616 205.730044298 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.374979616 205.730044298 moveto 434.095929252 195.140873865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.095929252 195.140873865 moveto 433.226226164 184.744184775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.226226164 184.744184775 moveto 431.797615116 174.61216708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 431.797615116 174.61216708 moveto 429.890538456 165.012169015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.890538456 165.012169015 moveto 427.512592492 155.774485075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.512592492 155.774485075 moveto 424.696266368 146.939519785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.696266368 146.939519785 moveto 421.473713016 138.539423225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.473713016 138.539423225 moveto 417.813706744 130.470997965 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.813706744 130.470997965 moveto 413.798160628 122.89575374 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 413.798160628 122.89575374 moveto 409.457469416 115.825779685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.457469416 115.825779685 moveto 404.820493772 109.267598865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.820493772 109.267598865 moveto 400.13050222 103.47214316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.13050222 103.47214316 moveto 395.216732248 98.145257575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.216732248 98.145257575 moveto 390.100579696 93.28247373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.100579696 93.28247373 moveto 384.802361156 88.8771478749999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.802361156 88.8771478749999 moveto 378.819347744 84.57101661 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.819347744 84.57101661 moveto 372.665820284 80.78964304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 372.665820284 80.78964304 moveto 366.36519414 77.518699085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.36519414 77.518699085 moveto 359.940202812 74.742683615 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.940202812 74.742683615 moveto 353.038674076 72.32833547 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.038674076 72.32833547 moveto 346.048761092 70.42814114 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.048761092 70.42814114 moveto 338.995785712 69.0208572199999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.995785712 69.0208572199999 moveto 331.90463294 68.0844096949999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.90463294 68.0844096949999 moveto 325.20865544 67.6122908149999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.20865544 67.6122908149999 moveto 318.520245936 67.518210315 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.520245936 67.518210315 moveto 311.858523652 67.78172618 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 311.858523652 67.78172618 moveto 305.241727984 68.381815035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.241727984 68.381815035 moveto 298.418584776 69.3410628349999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.418584776 69.3410628349999 moveto 291.68073674 70.616996195 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.68073674 70.616996195 moveto 285.04449748 72.1844488249999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.04449748 72.1844488249999 moveto 278.524394616 74.018087985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.524394616 74.018087985 moveto 271.70726002 76.24044262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.70726002 76.24044262 moveto 265.049772908 78.7067612899999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.049772908 78.7067612899999 moveto 258.562391924 81.38722494 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.562391924 81.38722494 moveto 252.253169816 84.252940945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.253169816 84.252940945 moveto 245.929405172 87.378082075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.929405172 87.378082075 moveto 239.805904836 90.64234717 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.805904836 90.64234717 moveto 233.884611344 94.0186244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.884611344 94.0186244 moveto 228.165634772 97.48179158 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.165634772 97.48179158 moveto 222.809831 100.902483675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.809831 100.902483675 moveto 217.640554844 104.36414152 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.640554844 104.36414152 moveto 212.65442314 107.849539055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.65442314 107.849539055 moveto 207.847339692 111.343291535 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.847339692 111.343291535 moveto 202.951729748 115.03330671 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.951729748 115.03330671 moveto 198.245342892 118.703400395 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.245342892 118.703400395 moveto 193.721929428 122.34145807 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.721929428 122.34145807 moveto 189.37507038 125.937163635 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.37507038 125.937163635 moveto 184.567837292 130.02437283 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.567837292 130.02437283 moveto 179.977366156 134.032717075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 179.977366156 134.032717075 moveto 175.593934912 137.953539925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.593934912 137.953539925 moveto 171.408090568 141.780156825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.408090568 141.780156825 moveto 167.430639308 145.488837005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 167.430639308 145.488837005 moveto 163.6311048 149.095854085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.6311048 149.095854085 moveto 160.00123482 152.59888516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.00123482 152.59888516 moveto 156.533152036 155.99659505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.533152036 155.99659505 moveto 153.13513458 159.37271215 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.13513458 159.37271215 moveto 149.891823112 162.63762413 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.891823112 162.63762413 moveto 146.795891336 165.79212563 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.795891336 165.79212563 moveto 143.840379112 168.83750305 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.840379112 168.83750305 moveto 140.810993904 171.992845345 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.810993904 171.992845345 moveto 137.928584304 175.026424085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.928584304 175.026424085 moveto 135.185768468 177.94104792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.185768468 177.94104792 moveto 132.575555536 180.7397635 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.575555536 180.7397635 moveto 129.783558788 183.760073125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.783558788 183.760073125 moveto 127.142740756 186.641958335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.142740756 186.641958335 moveto 124.644665328 189.39032699 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.644665328 189.39032699 moveto 122.281387316 192.01013928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.281387316 192.01013928 moveto 119.749400139 194.838118178 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.749400139 194.838118178 moveto 117.371599773 197.513662823 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.371599773 197.513662823 moveto 115.138343704 200.043893295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.138343704 200.043893295 moveto 113.040614402 202.435772494 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.040614402 202.435772494 moveto 111.021143044 204.752260197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.021143044 204.752260197 moveto 109.126857206 206.93743433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.126857206 206.93743433 moveto 107.349812818 208.998125903 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.349812818 208.998125903 moveto 105.682587004 210.940903759 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.682587004 210.940903759 moveto 104.176907077 212.703259007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.176907077 212.703259007 moveto 102.760539828 214.367832048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.760539828 214.367832048 moveto 101.428079148 215.939755548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.428079148 215.939755548 moveto 100.17445644 217.423933546 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.17445644 217.423933546 moveto 99.0403852704 218.770957156 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.0403852704 218.770957156 moveto 97.9706829084 220.045333056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.9706829084 220.045333056 moveto 96.9616324044 221.250833157 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.9616324044 221.250833157 moveto 96.0097374924 222.39105242 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.0097374924 222.39105242 moveto 95.1433926676 223.431325585 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.1433926676 223.431325585 moveto 94.3243033236 224.417069223 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.3243033236 224.417069223 moveto 93.5498542408 225.351065029 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.5498542408 225.351065029 moveto 92.817578502 226.235962088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.817578502 226.235962088 moveto 92.1416100624 227.05433529 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.1416100624 227.05433529 moveto 91.5015246248 227.83060863 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.5015246248 227.83060863 moveto 90.8953941404 228.566904891 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.8953941404 228.566904891 moveto 90.3213963552 229.265244785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.3213963552 229.265244785 moveto 89.7734256852 229.9328958 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.7734256852 229.9328958 moveto 89.2547036912 230.565787868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.2547036912 230.565787868 moveto 88.7636533732 231.165703592 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.7636533732 231.165703592 moveto 88.2987842856 231.734337231 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.2987842856 231.734337231 moveto 87.8311413156 232.307053743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.8311413156 232.307053743 moveto 87.3899652804 232.847990261 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.3899652804 232.847990261 moveto 86.9737458124 233.35889047 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.9737458124 233.35889047 moveto 86.581060016 233.841404725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.581060016 233.841404725 moveto 86.2097403296 234.298112546 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.2097403296 234.298112546 moveto 85.8594447008 234.729359888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.8594447008 234.729359888 moveto 85.5289747304 235.1365541 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.5289747304 235.1365541 moveto 85.2172011604 235.521026135 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.2172011604 235.521026135 moveto 84.946884944 235.854621229 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.946884944 235.854621229 moveto 84.69061399 236.17109513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.69061399 236.17109513 moveto 84.4476545036 236.471320784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.4476545036 236.471320784 moveto 84.2173114076 236.756127237 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.2173114076 236.756127237 moveto 84.0134144968 237.00837312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.0134144968 237.00837312 moveto 83.8193981718 237.248516253 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.8193981718 237.248516253 moveto 83.6347814253 237.477134272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.6347814253 237.477134272 moveto 83.459106854 237.694777526 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.459106854 237.694777526 moveto 83.2945207167 237.898770431 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.2945207167 237.898770431 moveto 83.1377802674 238.093117279 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.1377802674 238.093117279 moveto 82.9885100167 238.278272197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.9885100167 238.278272197 moveto 82.8463525542 238.454668094 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.8463525542 238.454668094 moveto 82.7068606344 238.627816452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.7068606344 238.627816452 moveto 82.5742146956 238.792521669 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.5742146956 238.792521669 moveto 82.4480774976 238.949193834 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.4480774976 238.949193834 moveto 82.3281284647 239.098223196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.3281284647 239.098223196 moveto 82.2123201515 239.24214717 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.2123201515 239.24214717 moveto 82.1022778386 239.378939838 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.1022778386 239.378939838 moveto 81.997713223 239.508953021 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.997713223 239.508953021 moveto 81.8983523793 239.632521141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.8983523793 239.632521141 moveto 81.7995944616 239.755361486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.7995944616 239.755361486 moveto 81.7059743719 239.871828506 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.7059743719 239.871828506 moveto 81.6172229984 239.982250623 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.6172229984 239.982250623 moveto 81.5330850833 240.086939034 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.5330850833 240.086939034 moveto 81.460994749 240.17663749 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.460994749 240.17663749 moveto 81.3922873881 240.262121689 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.3922873881 240.262121689 moveto 81.3268018856 240.343586696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.3268018856 240.343586696 moveto 81.2643843812 240.421218026 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.2643843812 240.421218026 moveto 81.2053056885 240.494672603 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.2053056885 240.494672603 moveto 81.1489685302 240.564686088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1489685302 240.564686088 moveto 81.095241115 240.631413988 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.095241115 240.631413988 moveto 81.0439970746 240.695003657 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 392 moveto 64 392 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 392 [ (3.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 392 moveto 480 392 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 342 moveto 64 342 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 342 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 342 moveto 480 342 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 292 moveto 64 292 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 292 [ (1.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 292 moveto 480 292 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 242 moveto 64 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 242 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 242 moveto 480 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 192 moveto 64 192 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 192 [ (-1.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 192 moveto 480 192 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 142 moveto 64 142 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 142 [ (-2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 142 moveto 480 142 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 92 moveto 64 92 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 92 [ (-3.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 92 moveto 480 92 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (-4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 1 4 7) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 0 3 6) ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/hom3.eps0000640000175000017500000020726013570013207014020 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .139250916.139283964 %%CreationDate: Fri Nov 30 13:56:14 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: hom3.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 42.895742841 moveto 83.4657322653 43.57731002 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.4657322653 43.57731002 moveto 86.9314645308 44.768681161 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.9314645308 44.768681161 moveto 90.397196796 46.8523182659999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.397196796 46.8523182659999 moveto 93.8629290612 50.4929309459999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.8629290612 50.4929309459999 moveto 96.1828248992 54.3186107939999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.1828248992 54.3186107939999 moveto 98.5027207372 59.812235722 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.5027207372 59.812235722 moveto 100.822616575 67.645063684 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.822616575 67.645063684 moveto 103.142512413 78.695166128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.142512413 78.695166128 moveto 105.00083534 90.5919478879999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.00083534 90.5919478879999 moveto 106.859158266 105.88405532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.859158266 105.88405532 moveto 108.717481193 125.205871928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.717481193 125.205871928 moveto 110.57580412 149.083803568 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.57580412 149.083803568 moveto 112.086242647 172.0548142 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.086242647 172.0548142 moveto 113.596681174 198.158561692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.596681174 198.158561692 moveto 115.107119702 227.04740346 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.107119702 227.04740346 moveto 116.617558229 258.049582636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.617558229 258.049582636 moveto 118.192978854 291.55226628 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.192978854 291.55226628 moveto 119.76839948 324.792718756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.76839948 324.792718756 moveto 121.343820104 356.147068284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.343820104 356.147068284 moveto 122.919240732 384.037200944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.919240732 384.037200944 moveto 124.347382212 405.19897724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.347382212 405.19897724 moveto 125.775523692 421.732325084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.775523692 421.732325084 moveto 127.203665176 433.29842408 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.203665176 433.29842408 moveto 128.631806656 439.889705948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.631806656 439.889705948 moveto 130.214140616 441.728504172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.214140616 441.728504172 moveto 131.796474572 438.480374616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.796474572 438.480374616 moveto 133.378808532 430.980133216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.378808532 430.980133216 moveto 134.961142492 420.118473924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.961142492 420.118473924 moveto 136.7416363 404.951727576 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.7416363 404.951727576 moveto 138.522130108 387.711561208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.522130108 387.711561208 moveto 140.302623916 369.303728328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.302623916 369.303728328 moveto 142.083117724 350.44406994 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 142.083117724 350.44406994 moveto 144.188370528 328.283884172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 144.188370528 328.283884172 moveto 146.293623336 306.84123224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.293623336 306.84123224 moveto 148.39887614 286.4962813 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.39887614 286.4962813 moveto 150.504128944 267.461051648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 150.504128944 267.461051648 moveto 153.112994608 245.825096004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.112994608 245.825096004 moveto 155.721860272 226.38672338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.721860272 226.38672338 moveto 158.330725936 209.11987248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.330725936 209.11987248 moveto 160.9395916 193.977043168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.9395916 193.977043168 moveto 164.059393528 178.612388376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.059393528 178.612388376 moveto 167.179195456 166.25847086 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 167.179195456 166.25847086 moveto 170.298997384 157.071577004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 170.298997384 157.071577004 moveto 173.418799312 151.393717356 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 173.418799312 151.393717356 moveto 175.632440044 149.798129328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.632440044 149.798129328 moveto 177.846080772 150.54769562 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.846080772 150.54769562 moveto 180.0597215 154.007653428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.0597215 154.007653428 moveto 182.273362228 160.600589112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.273362228 160.600589112 moveto 184.403194048 170.317600808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.403194048 170.317600808 moveto 186.533025864 183.712323076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.533025864 183.712323076 moveto 188.662857684 201.00652464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.662857684 201.00652464 moveto 190.7926895 222.16265522 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 190.7926895 222.16265522 moveto 192.683359844 243.85697266 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.683359844 243.85697266 moveto 194.574030188 267.650389548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 194.574030188 267.650389548 moveto 196.464700532 292.601306344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 196.464700532 292.601306344 moveto 198.355370876 317.506677976 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.355370876 317.506677976 moveto 199.997317464 338.046991008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.997317464 338.046991008 moveto 201.639264052 356.658057344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 201.639264052 356.658057344 moveto 203.281210636 372.587321772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 203.281210636 372.587321772 moveto 204.923157224 385.270853676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.923157224 385.270853676 moveto 206.831241652 395.502771024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.831241652 395.502771024 moveto 208.739326076 400.802184176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.739326076 400.802184176 moveto 210.647410504 401.42221262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.647410504 401.42221262 moveto 212.555494932 397.86952732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.555494932 397.86952732 moveto 214.33718332 391.358225832 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.33718332 391.358225832 moveto 216.118871704 382.318013164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.118871704 382.318013164 moveto 217.900560092 371.257003504 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.900560092 371.257003504 moveto 219.682248476 358.624740072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.682248476 358.624740072 moveto 221.78434808 342.221532408 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.78434808 342.221532408 moveto 223.88644768 324.698868976 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.88644768 324.698868976 moveto 225.988547284 306.52082368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.988547284 306.52082368 moveto 228.090646884 288.107861316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.090646884 288.107861316 moveto 230.644185532 265.973664112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.644185532 265.973664112 moveto 233.197724176 244.652940992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.197724176 244.652940992 moveto 235.751262824 224.595222052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.751262824 224.595222052 moveto 238.304801468 206.079631024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.304801468 206.079631024 moveto 241.063314616 187.940471736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.063314616 187.940471736 moveto 243.821827764 171.713109636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.821827764 171.713109636 moveto 246.580340908 157.280421764 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.580340908 157.280421764 moveto 249.338854056 144.478302716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.338854056 144.478302716 moveto 253.752137716 126.951242396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.752137716 126.951242396 moveto 258.16542138 112.49301236 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.16542138 112.49301236 moveto 262.57870504 100.555732552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.57870504 100.555732552 moveto 266.9919887 90.691034596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.9919887 90.691034596 moveto 271.09371054 83.0677456359999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.09371054 83.0677456359999 moveto 275.19543238 76.697261164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.19543238 76.697261164 moveto 279.297154216 71.403722054 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.297154216 71.403722054 moveto 283.398876056 67.06767597 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.398876056 67.06767597 moveto 286.984102888 64.020340602 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.984102888 64.020340602 moveto 290.569329716 61.690169791 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.569329716 61.690169791 moveto 294.154556548 60.195722543 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.154556548 60.195722543 moveto 297.739783376 59.807740876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 297.739783376 59.807740876 moveto 300.43144888 60.5358034819999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.43144888 60.5358034819999 moveto 303.123114384 62.518369808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.123114384 62.518369808 moveto 305.814779888 66.291528582 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.814779888 66.291528582 moveto 308.506445392 72.63945791 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.506445392 72.63945791 moveto 310.410254428 79.263517256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.410254428 79.263517256 moveto 312.314063468 88.210318368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.314063468 88.210318368 moveto 314.217872504 100.057869432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.217872504 100.057869432 moveto 316.121681544 115.434944092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.121681544 115.434944092 moveto 317.857440028 133.056442912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.857440028 133.056442912 moveto 319.593198512 154.51312906 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.593198512 154.51312906 moveto 321.328956996 179.983673172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.328956996 179.983673172 moveto 323.06471548 209.317755476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.06471548 209.317755476 moveto 324.864097896 243.17459072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.864097896 243.17459072 moveto 326.663480308 279.273253692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.663480308 279.273253692 moveto 328.462862724 315.78457236 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.462862724 315.78457236 moveto 330.262245136 350.52635336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.262245136 350.52635336 moveto 331.770754332 376.647137636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.770754332 376.647137636 moveto 333.279263528 398.819343428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.279263528 398.819343428 moveto 334.787772724 416.233406872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.787772724 416.233406872 moveto 336.296281916 428.458184508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.296281916 428.458184508 moveto 338.092041528 436.200351668 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.092041528 436.200351668 moveto 339.88780114 437.061353856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.88780114 437.061353856 moveto 341.683560752 431.98321036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.683560752 431.98321036 moveto 343.479320364 422.117531104 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.479320364 422.117531104 moveto 345.502104616 406.753237996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.502104616 406.753237996 moveto 347.524888868 388.346026108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.524888868 388.346026108 moveto 349.54767312 368.15502798 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.54767312 368.15502798 moveto 351.570457376 347.160118812 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.570457376 347.160118812 moveto 354.09165004 320.934461208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.09165004 320.934461208 moveto 356.612842708 295.500783692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.612842708 295.500783692 moveto 359.134035376 271.435525656 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.134035376 271.435525656 moveto 361.65522804 249.05454618 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.65522804 249.05454618 moveto 365.032243724 221.9249165 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.032243724 221.9249165 moveto 368.409259408 198.0408458 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.409259408 198.0408458 moveto 371.786275092 177.205590992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 371.786275092 177.205590992 moveto 375.163290772 159.12282588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.163290772 159.12282588 moveto 380.91752376 133.735066784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.91752376 133.735066784 moveto 386.671756744 113.920239044 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.671756744 113.920239044 moveto 392.425989732 98.4592951999999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.425989732 98.4592951999999 moveto 398.180222716 86.373128184 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.180222716 86.373128184 moveto 408.406316668 70.994009432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.406316668 70.994009432 moveto 418.63241062 60.998379304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.63241062 60.998379304 moveto 428.858504572 54.475489248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 428.858504572 54.475489248 moveto 439.084598524 50.196256022 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.084598524 50.196256022 moveto 449.313448892 47.389955916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 449.313448892 47.389955916 moveto 459.54229926 45.547853992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.54229926 45.547853992 moveto 469.771149632 44.336142584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.771149632 44.336142584 moveto 480 43.536604746 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 42.6963741229999 moveto 83.7130248483 43.184703109 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.7130248483 43.184703109 moveto 87.4260496968 44.0108179189999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.4260496968 44.0108179189999 moveto 91.1390745448 45.409514814 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.1390745448 45.409514814 moveto 94.8520993932 47.777806228 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.8520993932 47.777806228 moveto 97.7935291944 50.7554427219999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.7935291944 50.7554427219999 moveto 100.734958995 55.2292027959999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.734958995 55.2292027959999 moveto 103.676388796 61.909807158 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.676388796 61.909807158 moveto 106.617818598 71.788138338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.617818598 71.788138338 moveto 108.567295918 80.722871842 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.567295918 80.722871842 moveto 110.51677324 92.090238264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.51677324 92.090238264 moveto 112.466250561 106.386442196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.466250561 106.386442196 moveto 114.415727882 124.10206722 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.415727882 124.10206722 moveto 116.218554023 143.89620712 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.218554023 143.89620712 moveto 118.021380164 167.178168764 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.021380164 167.178168764 moveto 119.824206306 193.922692044 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.824206306 193.922692044 moveto 121.627032448 223.791819576 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.627032448 223.791819576 moveto 123.394540492 255.425184732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 123.394540492 255.425184732 moveto 125.16204854 288.319085364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.16204854 288.319085364 moveto 126.929556584 321.111407868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.929556584 321.111407868 moveto 128.697064632 352.267944536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.697064632 352.267944536 moveto 130.246192516 377.01339344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.246192516 377.01339344 moveto 131.7953204 398.424096608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.7953204 398.424096608 moveto 133.344448284 415.82831582 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.344448284 415.82831582 moveto 134.893576168 428.823747544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.893576168 428.823747544 moveto 136.583842428 437.83706588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.583842428 437.83706588 moveto 138.274108688 441.652773076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.274108688 441.652773076 moveto 139.964374948 440.729311592 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.964374948 440.729311592 moveto 141.654641212 435.70102854 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.654641212 435.70102854 moveto 143.586857224 425.85613714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.586857224 425.85613714 moveto 145.519073236 412.677549548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 145.519073236 412.677549548 moveto 147.451289248 397.1591844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.451289248 397.1591844 moveto 149.383505256 380.160137848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.383505256 380.160137848 moveto 151.635719836 359.404524376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.635719836 359.404524376 moveto 153.887934416 338.431911616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.887934416 338.431911616 moveto 156.140148992 317.84381654 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.140148992 317.84381654 moveto 158.392363572 298.041375744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.392363572 298.041375744 moveto 160.934653036 276.93248652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.934653036 276.93248652 moveto 163.4769425 257.317752328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.4769425 257.317752328 moveto 166.019231964 239.2722303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.019231964 239.2722303 moveto 168.561521428 222.803169156 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.561521428 222.803169156 moveto 171.625848908 205.005682492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.625848908 205.005682492 moveto 174.690176384 189.388170472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 174.690176384 189.388170472 moveto 177.754503864 175.896680172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.754503864 175.896680172 moveto 180.818831344 164.514857676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.818831344 164.514857676 moveto 183.975264504 155.043777544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.975264504 155.043777544 moveto 187.131697668 148.001361352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.131697668 148.001361352 moveto 190.288130828 143.661427744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 190.288130828 143.661427744 moveto 193.444563988 142.458869916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.444563988 142.458869916 moveto 195.687343792 143.843007876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.687343792 143.843007876 moveto 197.930123592 147.40312346 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 197.930123592 147.40312346 moveto 200.172903396 153.462019136 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.172903396 153.462019136 moveto 202.415683196 162.361083692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.415683196 162.361083692 moveto 204.56014802 173.8262271 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.56014802 173.8262271 moveto 206.70461284 188.405038728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.70461284 188.405038728 moveto 208.849077664 206.17598688 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.849077664 206.17598688 moveto 210.993542488 227.00134738 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.993542488 227.00134738 moveto 212.79341794 246.540524188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.79341794 246.540524188 moveto 214.593293392 267.501274452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.593293392 267.501274452 moveto 216.393168848 289.277457604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.393168848 289.277457604 moveto 218.1930443 311.1232084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.1930443 311.1232084 moveto 220.006921104 332.360832716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.006921104 332.360832716 moveto 221.820797912 351.95356946 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.820797912 351.95356946 moveto 223.634674716 369.121977108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.634674716 369.121977108 moveto 225.44855152 383.24534224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.44855152 383.24534224 moveto 227.196423592 393.58641602 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.196423592 393.58641602 moveto 228.94429566 400.558074756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.94429566 400.558074756 moveto 230.692167732 404.188172212 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.692167732 404.188172212 moveto 232.440039804 404.659111464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.440039804 404.659111464 moveto 234.387196744 401.829778896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.387196744 401.829778896 moveto 236.334353688 395.951205948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.334353688 395.951205948 moveto 238.281510632 387.549478004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.281510632 387.549478004 moveto 240.228667572 377.130308824 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.228667572 377.130308824 moveto 242.828275416 360.858703744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.828275416 360.858703744 moveto 245.427883256 342.710218048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.427883256 342.710218048 moveto 248.0274911 323.42544016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.0274911 323.42544016 moveto 250.627098944 303.62070178 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.627098944 303.62070178 moveto 253.052328112 285.137777428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.052328112 285.137777428 moveto 255.47755728 267.030918964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.47755728 267.030918964 moveto 257.902786448 249.612251248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.902786448 249.612251248 moveto 260.328015616 233.126134372 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.328015616 233.126134372 moveto 263.005134572 216.214947728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.005134572 216.214947728 moveto 265.682253528 200.78020292 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.682253528 200.78020292 moveto 268.359372484 186.87767224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.359372484 186.87767224 moveto 271.03649144 174.514000076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.03649144 174.514000076 moveto 274.165171648 161.99566474 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.165171648 161.99566474 moveto 277.29385186 151.551519232 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.29385186 151.551519232 moveto 280.422532068 143.234631368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.422532068 143.234631368 moveto 283.551212276 137.194709464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.551212276 137.194709464 moveto 285.89096928 134.327184208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.89096928 134.327184208 moveto 288.23072628 133.06435366 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.23072628 133.06435366 moveto 290.570483284 133.645325716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.570483284 133.645325716 moveto 292.910240284 136.374266836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.910240284 136.374266836 moveto 295.484134888 142.295975448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.484134888 142.295975448 moveto 298.058029492 151.823398716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.058029492 151.823398716 moveto 300.631924096 165.522850388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.631924096 165.522850388 moveto 303.2058187 183.85379756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.2058187 183.85379756 moveto 304.96946466 199.211044636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.96946466 199.211044636 moveto 306.733110624 216.785571748 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.733110624 216.785571748 moveto 308.496756588 236.371326648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.496756588 236.371326648 moveto 310.260402552 257.594545952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.260402552 257.594545952 moveto 312.074134808 280.54957558 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.074134808 280.54957558 moveto 313.887867064 303.875344728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.887867064 303.875344728 moveto 315.70159932 326.672948864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.70159932 326.672948864 moveto 317.51533158 348.003067468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.51533158 348.003067468 moveto 319.14537718 365.182793332 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.14537718 365.182793332 moveto 320.775422784 379.914570616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.775422784 379.914570616 moveto 322.405468384 391.801735572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.405468384 391.801735572 moveto 324.035513988 400.611974704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.035513988 400.611974704 moveto 325.998766224 407.055860264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.998766224 407.055860264 moveto 327.96201846 409.121684304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.96201846 409.121684304 moveto 329.9252707 407.206623648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.9252707 407.206623648 moveto 331.888522936 401.845539344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.888522936 401.845539344 moveto 333.8025558 393.86928118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.8025558 393.86928118 moveto 335.716588664 383.716142508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.716588664 383.716142508 moveto 337.630621528 371.870062564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.630621528 371.870062564 moveto 339.544654392 358.751883472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.544654392 358.751883472 moveto 341.97503158 340.815161572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.97503158 340.815161572 moveto 344.405408772 322.00078376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 344.405408772 322.00078376 moveto 346.835785964 302.810880892 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.835785964 302.810880892 moveto 349.266163152 283.675339616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.266163152 283.675339616 moveto 352.637271432 257.896452972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 352.637271432 257.896452972 moveto 356.008379708 233.680570396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.008379708 233.680570396 moveto 359.379487984 211.50493224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.379487984 211.50493224 moveto 362.75059626 191.571141076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 362.75059626 191.571141076 moveto 366.42675534 172.362886252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.42675534 172.362886252 moveto 370.102914424 155.601142216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.102914424 155.601142216 moveto 373.779073504 141.023422128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.779073504 141.023422128 moveto 377.455232584 128.355987608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 377.455232584 128.355987608 moveto 383.098635024 112.05451234 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.098635024 112.05451234 moveto 388.74203746 98.890534384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.74203746 98.890534384 moveto 394.3854399 88.2452946679999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.3854399 88.2452946679999 moveto 400.028842336 79.622442787 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.028842336 79.622442787 moveto 410.024720344 68.1485466859999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 410.024720344 68.1485466859999 moveto 420.020598352 60.208230236 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.020598352 60.208230236 moveto 430.01647636 54.6971505139999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 430.01647636 54.6971505139999 moveto 440.012354368 50.859417099 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.012354368 50.859417099 moveto 450.009265776 48.186100039 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 450.009265776 48.186100039 moveto 460.006177184 46.322190051 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.006177184 46.322190051 moveto 470.003088592 45.020567175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.003088592 45.020567175 moveto 480 44.1088922679999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 64 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 362 [ (8.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 480 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 282 moveto 64 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 282 [ (6.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 282 moveto 480 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 202 moveto 64 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 202 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 202 moveto 480 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 122 moveto 64 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 122 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 122 moveto 480 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 0) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 't') ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/typeMenu.png0000640000175000017500000000106313570013207014746 0ustar skskPNG  IHDR[.ȻIDATx10E J;P PB8܁2F[ xMQEHqi_rIPU;#//@Y @m_dE}?2Q9,~]k_>D9(0tE9k9ޕ%/p!Z瑰Ʊ)@crנw>'5i")<ͬ/cך]e8>ElALALAߧ/Ž8JC7#z~&?ai𫌬H(+γRϯ?kГ3sY&_=Tw1X'NR \t3TiZ$X8/*#c":ϱ6.' x`n)")"}wg QrwfYIENDB`auto/07p/doc/include/kpr1.ps0000640000175000017500000002220213570013207013651 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors /lthick 5 def %% line thickness % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (1) 495 460 PR (.) 550 460 PR (0) 605 460 PR (2) 660 460 PR (0) 715 460 PR 840 340 moveto (-) 840 340 PR (1) 895 340 PR (.) 950 340 PR (0) 1005 340 PR (1) 1060 340 PR (0) 1115 340 PR 1000 540 moveto 1000 600 lineto stroke 1000 600 moveto 1240 460 moveto (-) 1240 460 PR (1) 1295 460 PR (.) 1350 460 PR (0) 1405 460 PR (0) 1460 460 PR (0) 1515 460 PR 1400 540 moveto 1400 600 lineto stroke 1400 600 moveto 1640 340 moveto (-) 1640 340 PR (0) 1695 340 PR (.) 1750 340 PR (9) 1805 340 PR (9) 1860 340 PR (0) 1915 340 PR 1800 540 moveto 1800 600 lineto stroke 1800 600 moveto 2040 460 moveto (-) 2040 460 PR (0) 2095 460 PR (.) 2150 460 PR (9) 2205 460 PR (8) 2260 460 PR (0) 2315 460 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2440 340 moveto (-) 2440 340 PR (0) 2495 340 PR (.) 2550 340 PR (9) 2605 340 PR (7) 2660 340 PR (0) 2715 340 PR 2600 540 moveto 2600 600 lineto stroke 2600 600 moveto 2840 460 moveto (-) 2840 460 PR (0) 2895 460 PR (.) 2950 460 PR (9) 3005 460 PR (6) 3060 460 PR (0) 3115 460 PR 3000 540 moveto 3000 600 lineto stroke 3000 600 moveto 3240 340 moveto (-) 3240 340 PR (0) 3295 340 PR (.) 3350 340 PR (9) 3405 340 PR (5) 3460 340 PR (0) 3515 340 PR 3400 540 moveto 3400 600 lineto stroke 3400 600 moveto 3640 460 moveto (-) 3640 460 PR (0) 3695 460 PR (.) 3750 460 PR (9) 3805 460 PR (4) 3860 460 PR (0) 3915 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 224 600 PR (1) 279 600 PR (.) 334 600 PR (0) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 1000 moveto (-) 224 1000 PR (0) 279 1000 PR (.) 334 1000 PR (9) 389 1000 PR (9) 444 1000 PR (0) 499 1000 PR 540 1000 moveto 600 1000 lineto stroke 600 1000 moveto 4 1400 moveto (-) 224 1400 PR (0) 279 1400 PR (.) 334 1400 PR (9) 389 1400 PR (8) 444 1400 PR (0) 499 1400 PR 540 1400 moveto 600 1400 lineto stroke 600 1400 moveto 4 1800 moveto (-) 224 1800 PR (0) 279 1800 PR (.) 334 1800 PR (9) 389 1800 PR (7) 444 1800 PR (0) 499 1800 PR 540 1800 moveto 600 1800 lineto stroke 600 1800 moveto 4 2200 moveto (-) 224 2200 PR (0) 279 2200 PR (.) 334 2200 PR (9) 389 2200 PR (6) 444 2200 PR (0) 499 2200 PR 540 2200 moveto 600 2200 lineto stroke 600 2200 moveto 4 2600 moveto (-) 224 2600 PR (0) 279 2600 PR (.) 334 2600 PR (9) 389 2600 PR (5) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3032 2232 moveto 3032 2232 lineto stroke 3032 2232 moveto 3032 2232 moveto lthick setlinewidth 3024 2232 lineto stroke 3024 2232 moveto 3016 2228 lineto stroke 3016 2228 moveto 3008 2228 lineto stroke 3008 2228 moveto 2996 2224 lineto stroke 2996 2224 moveto 2988 2220 lineto stroke 2988 2220 moveto 2976 2220 lineto stroke 2976 2220 moveto 2968 2216 lineto stroke 2968 2216 moveto 2952 2212 lineto stroke 2952 2212 moveto 2936 2208 lineto stroke 2936 2208 moveto 2916 2200 lineto stroke 2916 2200 moveto 2896 2196 lineto stroke 2896 2196 moveto 2868 2188 lineto stroke 2868 2188 moveto 2836 2176 lineto stroke 2836 2176 moveto 2808 2168 lineto stroke 2808 2168 moveto 2776 2160 lineto stroke 2776 2160 moveto 2740 2152 lineto stroke 2740 2152 moveto 2700 2140 lineto stroke 2700 2140 moveto 2664 2128 lineto stroke 2664 2128 moveto 2628 2116 lineto stroke 2628 2116 moveto 2584 2104 lineto stroke 2584 2104 moveto 2540 2088 lineto stroke 2540 2088 moveto 2492 2072 lineto stroke 2492 2072 moveto 2444 2056 lineto stroke 2444 2056 moveto 2388 2040 lineto stroke 2388 2040 moveto 2336 2020 lineto stroke 2336 2020 moveto 2276 2000 lineto stroke 2276 2000 moveto 2212 1976 lineto stroke 2212 1976 moveto 2148 1952 lineto stroke 2148 1952 moveto 2080 1928 lineto stroke 2080 1928 moveto 2016 1900 lineto stroke 2016 1900 moveto 1948 1872 lineto stroke 1948 1872 moveto 1880 1844 lineto stroke 1880 1844 moveto 1812 1816 lineto stroke 1812 1816 moveto 1748 1784 lineto stroke 1748 1784 moveto 1684 1756 lineto stroke 1684 1756 moveto 1620 1724 lineto stroke 1620 1724 moveto 1560 1692 lineto stroke 1560 1692 moveto 1496 1656 lineto stroke 1496 1656 moveto 1436 1620 lineto stroke 1436 1620 moveto 1380 1584 lineto stroke 1380 1584 moveto 1324 1552 lineto stroke 1324 1552 moveto 1272 1516 lineto stroke 1272 1516 moveto 1224 1480 lineto stroke 1224 1480 moveto 1180 1444 lineto stroke 1180 1444 moveto 1140 1408 lineto stroke 1140 1408 moveto 1104 1368 lineto stroke 1104 1368 moveto 1068 1332 lineto stroke 1068 1332 moveto 1040 1300 lineto stroke 1040 1300 moveto 1012 1264 lineto stroke 1012 1264 moveto 988 1228 lineto stroke 988 1228 moveto 972 1196 lineto stroke 972 1196 moveto 956 1164 lineto stroke 956 1164 moveto 944 1136 lineto stroke 944 1136 moveto 932 1104 lineto stroke 932 1104 moveto 928 1072 lineto stroke 928 1072 moveto 924 1044 lineto stroke 924 1044 moveto 924 1016 lineto stroke 924 1016 moveto 928 980 lineto stroke 928 980 moveto 936 948 lineto stroke 936 948 moveto 948 920 lineto stroke 948 920 moveto 960 892 lineto stroke 960 892 moveto 976 872 lineto stroke 976 872 moveto 992 848 lineto stroke 992 848 moveto 1012 832 lineto stroke 1012 832 moveto 1032 816 lineto stroke 1032 816 moveto 1056 796 lineto stroke 1056 796 moveto 1080 784 lineto stroke 1080 784 moveto 1104 772 lineto stroke 1104 772 moveto 1128 760 lineto stroke 1128 760 moveto 1156 748 lineto stroke 1156 748 moveto 1188 740 lineto stroke 1188 740 moveto 1220 732 lineto stroke 1220 732 moveto 1248 728 lineto stroke 1248 728 moveto 1280 724 lineto stroke 1280 724 moveto 1316 720 lineto stroke 1316 720 moveto 1348 720 lineto stroke 1348 720 moveto 1380 720 lineto stroke 1380 720 moveto 1416 724 lineto stroke 1416 724 moveto 1452 728 lineto stroke 1452 728 moveto 1484 732 lineto stroke 1484 732 moveto 1520 740 lineto stroke 1520 740 moveto 1564 752 lineto stroke 1564 752 moveto 1608 764 lineto stroke 1608 764 moveto 1648 776 lineto stroke 1648 776 moveto 1688 792 lineto stroke 1688 792 moveto 1736 812 lineto stroke 1736 812 moveto 1784 836 lineto stroke 1784 836 moveto 1828 860 lineto stroke 1828 860 moveto 1872 884 lineto stroke 1872 884 moveto 1920 912 lineto stroke 1920 912 moveto 1964 940 lineto stroke 1964 940 moveto 2008 972 lineto stroke 2008 972 moveto 2052 1004 lineto stroke 2052 1004 moveto 2096 1040 lineto stroke 2096 1040 moveto 2140 1076 lineto stroke 2140 1076 moveto 2184 1116 lineto stroke 2184 1116 moveto 2224 1152 lineto stroke 2224 1152 moveto 2268 1196 lineto stroke 2268 1196 moveto 2308 1236 lineto stroke 2308 1236 moveto 2348 1276 lineto stroke 2348 1276 moveto 2384 1316 lineto stroke 2384 1316 moveto 2420 1356 lineto stroke 2420 1356 moveto 2456 1396 lineto stroke 2456 1396 moveto 2488 1436 lineto stroke 2488 1436 moveto 2520 1472 lineto stroke 2520 1472 moveto 2552 1512 lineto stroke 2552 1512 moveto 2580 1548 lineto stroke 2580 1548 moveto 2608 1584 lineto stroke 2608 1584 moveto 2632 1616 lineto stroke 2632 1616 moveto 2656 1648 lineto stroke 2656 1648 moveto 2680 1680 lineto stroke 2680 1680 moveto 2700 1708 lineto stroke 2700 1708 moveto 2720 1736 lineto stroke 2720 1736 moveto 2732 1760 lineto stroke 2732 1760 moveto 2748 1780 lineto stroke 2748 1780 moveto 2760 1796 lineto stroke 2760 1796 moveto 2776 1816 lineto stroke 2776 1816 moveto 2784 1832 lineto stroke 2784 1832 moveto 2792 1844 lineto stroke 2792 1844 moveto 2804 1856 lineto stroke 2804 1856 moveto 2812 1868 lineto stroke 2812 1868 moveto 2820 1880 lineto stroke 2820 1880 moveto 2832 1896 lineto stroke 2832 1896 moveto 2840 1908 lineto stroke 2840 1908 moveto 2852 1920 lineto stroke 2852 1920 moveto 0 3068 moveto grestore showpage auto/07p/doc/include/rev2.ps0000640000175000017500000003663613570013207013672 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3805 320 PR (/) 3860 320 PR (T) 3915 320 PR 300 2720 moveto (u) 300 2720 PR 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR 760 340 moveto (0) 815 340 PR (.) 870 340 PR (1) 925 340 PR (0) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (0) 1135 460 PR (.) 1190 460 PR (2) 1245 460 PR (0) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (0) 1455 340 PR (.) 1510 340 PR (3) 1565 340 PR (0) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (0) 1775 460 PR (.) 1830 460 PR (4) 1885 460 PR (0) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (0) 2095 340 PR (.) 2150 340 PR (5) 2205 340 PR (0) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (0) 2415 460 PR (.) 2470 460 PR (6) 2525 460 PR (0) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (0) 2735 340 PR (.) 2790 340 PR (7) 2845 340 PR (0) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (0) 3055 460 PR (.) 3110 460 PR (8) 3165 460 PR (0) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (0) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 279 600 PR (1) 334 600 PR (.) 389 600 PR (5) 444 600 PR (0) 499 600 PR 4 884 moveto (-) 279 884 PR (1) 334 884 PR (.) 389 884 PR (2) 444 884 PR (5) 499 884 PR 540 884 moveto 600 884 lineto stroke 600 884 moveto 4 1168 moveto (-) 279 1168 PR (1) 334 1168 PR (.) 389 1168 PR (0) 444 1168 PR (0) 499 1168 PR 540 1168 moveto 600 1168 lineto stroke 600 1168 moveto 4 1456 moveto (-) 279 1456 PR (0) 334 1456 PR (.) 389 1456 PR (7) 444 1456 PR (5) 499 1456 PR 540 1456 moveto 600 1456 lineto stroke 600 1456 moveto 4 1740 moveto (-) 279 1740 PR (0) 334 1740 PR (.) 389 1740 PR (5) 444 1740 PR (0) 499 1740 PR 540 1740 moveto 600 1740 lineto stroke 600 1740 moveto 4 2028 moveto (-) 279 2028 PR (0) 334 2028 PR (.) 389 2028 PR (2) 444 2028 PR (5) 499 2028 PR 540 2028 moveto 600 2028 lineto stroke 600 2028 moveto 4 2312 moveto (0) 334 2312 PR (.) 389 2312 PR (0) 444 2312 PR (0) 499 2312 PR 540 2312 moveto 600 2312 lineto stroke 600 2312 moveto 4 2600 moveto (0) 334 2600 PR (.) 389 2600 PR (2) 444 2600 PR (5) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 2312 moveto 600 2312 lineto stroke 600 2312 moveto 600 2312 moveto 764 2312 lineto stroke 764 2312 moveto 932 2312 lineto stroke 932 2312 moveto 1096 2312 lineto stroke 1096 2312 moveto 1264 2312 lineto stroke 1264 2312 moveto 1360 2312 lineto stroke 1360 2312 moveto 1456 2312 lineto stroke 1456 2312 moveto 1552 2312 lineto stroke 1552 2312 moveto 1648 2312 lineto stroke 1648 2312 moveto 1712 2312 lineto stroke 1712 2312 moveto 1776 2312 lineto stroke 1776 2312 moveto 1844 2312 lineto stroke 1844 2312 moveto 1908 2312 lineto stroke 1908 2312 moveto 1956 2312 lineto stroke 1956 2312 moveto 2004 2312 lineto stroke 2004 2312 moveto 2056 2312 lineto stroke 2056 2312 moveto 2104 2312 lineto stroke 2104 2312 moveto 2144 2312 lineto stroke 2144 2312 moveto 2184 2312 lineto stroke 2184 2312 moveto 2228 2312 lineto stroke 2228 2312 moveto 2268 2312 lineto stroke 2268 2312 moveto 2304 2312 lineto stroke 2304 2312 moveto 2340 2312 lineto stroke 2340 2312 moveto 2376 2312 lineto stroke 2376 2312 moveto 2408 2312 lineto stroke 2408 2312 moveto 2444 2312 lineto stroke 2444 2312 moveto 2476 2312 lineto stroke 2476 2312 moveto 2508 2312 lineto stroke 2508 2312 moveto 2540 2312 lineto stroke 2540 2312 moveto 2568 2312 lineto stroke 2568 2312 moveto 2592 2312 lineto stroke 2592 2312 moveto 2620 2312 lineto stroke 2620 2312 moveto 2644 2312 lineto stroke 2644 2312 moveto 2672 2312 lineto stroke 2672 2312 moveto 2696 2312 lineto stroke 2696 2312 moveto 2720 2312 lineto stroke 2720 2312 moveto 2744 2312 lineto stroke 2744 2312 moveto 2764 2316 lineto stroke 2764 2316 moveto 2788 2316 lineto stroke 2788 2316 moveto 2808 2316 lineto stroke 2808 2316 moveto 2828 2316 lineto stroke 2828 2316 moveto 2848 2316 lineto stroke 2848 2316 moveto 2864 2316 lineto stroke 2864 2316 moveto 2884 2316 lineto stroke 2884 2316 moveto 2900 2316 lineto stroke 2900 2316 moveto 2916 2316 lineto stroke 2916 2316 moveto 2936 2316 lineto stroke 2936 2316 moveto 2952 2316 lineto stroke 2952 2316 moveto 2968 2312 lineto stroke 2968 2312 moveto 2984 2312 lineto stroke 2984 2312 moveto 3000 2308 lineto stroke 3000 2308 moveto 3016 2308 lineto stroke 3016 2308 moveto 3036 2304 lineto stroke 3036 2304 moveto 3048 2300 lineto stroke 3048 2300 moveto 3064 2300 lineto stroke 3064 2300 moveto 3080 2296 lineto stroke 3080 2296 moveto 3096 2292 lineto stroke 3096 2292 moveto 3108 2288 lineto stroke 3108 2288 moveto 3124 2284 lineto stroke 3124 2284 moveto 3136 2284 lineto stroke 3136 2284 moveto 3152 2280 lineto stroke 3152 2280 moveto 3164 2280 lineto stroke 3164 2280 moveto 3176 2280 lineto stroke 3176 2280 moveto 3188 2280 lineto stroke 3188 2280 moveto 3204 2280 lineto stroke 3204 2280 moveto 3216 2284 lineto stroke 3216 2284 moveto 3228 2284 lineto stroke 3228 2284 moveto 3240 2288 lineto stroke 3240 2288 moveto 3252 2296 lineto stroke 3252 2296 moveto 3264 2300 lineto stroke 3264 2300 moveto 3272 2308 lineto stroke 3272 2308 moveto 3284 2316 lineto stroke 3284 2316 moveto 3296 2324 lineto stroke 3296 2324 moveto 3308 2336 lineto stroke 3308 2336 moveto 3320 2348 lineto stroke 3320 2348 moveto 3332 2360 lineto stroke 3332 2360 moveto 3344 2376 lineto stroke 3344 2376 moveto 3356 2388 lineto stroke 3356 2388 moveto 3364 2404 lineto stroke 3364 2404 moveto 3376 2420 lineto stroke 3376 2420 moveto 3388 2432 lineto stroke 3388 2432 moveto 3396 2448 lineto stroke 3396 2448 moveto 3408 2460 lineto stroke 3408 2460 moveto 3416 2472 lineto stroke 3416 2472 moveto 3428 2484 lineto stroke 3428 2484 moveto 3436 2492 lineto stroke 3436 2492 moveto 3448 2500 lineto stroke 3448 2500 moveto 3456 2508 lineto stroke 3456 2508 moveto 3468 2512 lineto stroke 3468 2512 moveto 3476 2516 lineto stroke 3476 2516 moveto 3488 2512 lineto stroke 3488 2512 moveto 3496 2512 lineto stroke 3496 2512 moveto 3504 2504 lineto stroke 3504 2504 moveto 3512 2496 lineto stroke 3512 2496 moveto 3524 2484 lineto stroke 3524 2484 moveto 3532 2468 lineto stroke 3532 2468 moveto 3540 2448 lineto stroke 3540 2448 moveto 3548 2428 lineto stroke 3548 2428 moveto 3556 2408 lineto stroke 3556 2408 moveto 3560 2384 lineto stroke 3560 2384 moveto 3568 2356 lineto stroke 3568 2356 moveto 3576 2328 lineto stroke 3576 2328 moveto 3584 2296 lineto stroke 3584 2296 moveto 3588 2264 lineto stroke 3588 2264 moveto 3596 2228 lineto stroke 3596 2228 moveto 3604 2188 lineto stroke 3604 2188 moveto 3612 2148 lineto stroke 3612 2148 moveto 3616 2104 lineto stroke 3616 2104 moveto 3624 2060 lineto stroke 3624 2060 moveto 3632 2012 lineto stroke 3632 2012 moveto 3640 1960 lineto stroke 3640 1960 moveto 3644 1904 lineto stroke 3644 1904 moveto 3652 1848 lineto stroke 3652 1848 moveto 3660 1804 lineto stroke 3660 1804 moveto 3664 1760 lineto stroke 3664 1760 moveto 3668 1712 lineto stroke 3668 1712 moveto 3676 1668 lineto stroke 3676 1668 moveto 3680 1624 lineto stroke 3680 1624 moveto 3688 1580 lineto stroke 3688 1580 moveto 3692 1536 lineto stroke 3692 1536 moveto 3696 1496 lineto stroke 3696 1496 moveto 3700 1456 lineto stroke 3700 1456 moveto 3708 1416 lineto stroke 3708 1416 moveto 3712 1376 lineto stroke 3712 1376 moveto 3716 1340 lineto stroke 3716 1340 moveto 3724 1300 lineto stroke 3724 1300 moveto 3728 1260 lineto stroke 3728 1260 moveto 3732 1224 lineto stroke 3732 1224 moveto 3740 1192 lineto stroke 3740 1192 moveto 3744 1164 lineto stroke 3744 1164 moveto 3748 1136 lineto stroke 3748 1136 moveto 3756 1112 lineto stroke 3756 1112 moveto 3760 1088 lineto stroke 3760 1088 moveto 3764 1072 lineto stroke 3764 1072 moveto 3768 1052 lineto stroke 3768 1052 moveto 3772 1040 lineto stroke 3772 1040 moveto 3780 1028 lineto stroke 3780 1028 moveto 3784 1020 lineto stroke 3784 1020 moveto 3788 1012 lineto stroke 3788 1012 moveto 3800 1008 lineto stroke 3800 1008 moveto 600 2312 moveto 600 2312 lineto stroke 600 2312 moveto 600 2312 moveto 796 2312 lineto stroke 796 2312 moveto 992 2312 lineto stroke 992 2312 moveto 1188 2312 lineto stroke 1188 2312 moveto 1384 2312 lineto stroke 1384 2312 moveto 1492 2312 lineto stroke 1492 2312 moveto 1600 2312 lineto stroke 1600 2312 moveto 1708 2312 lineto stroke 1708 2312 moveto 1816 2312 lineto stroke 1816 2312 moveto 1888 2312 lineto stroke 1888 2312 moveto 1960 2312 lineto stroke 1960 2312 moveto 2032 2312 lineto stroke 2032 2312 moveto 2100 2312 lineto stroke 2100 2312 moveto 2152 2312 lineto stroke 2152 2312 moveto 2208 2312 lineto stroke 2208 2312 moveto 2260 2312 lineto stroke 2260 2312 moveto 2312 2312 lineto stroke 2312 2312 moveto 2352 2312 lineto stroke 2352 2312 moveto 2392 2312 lineto stroke 2392 2312 moveto 2432 2312 lineto stroke 2432 2312 moveto 2476 2312 lineto stroke 2476 2312 moveto 2508 2312 lineto stroke 2508 2312 moveto 2544 2312 lineto stroke 2544 2312 moveto 2576 2312 lineto stroke 2576 2312 moveto 2608 2312 lineto stroke 2608 2312 moveto 2636 2312 lineto stroke 2636 2312 moveto 2664 2312 lineto stroke 2664 2312 moveto 2696 2312 lineto stroke 2696 2312 moveto 2724 2312 lineto stroke 2724 2312 moveto 2748 2312 lineto stroke 2748 2312 moveto 2772 2308 lineto stroke 2772 2308 moveto 2796 2308 lineto stroke 2796 2308 moveto 2820 2308 lineto stroke 2820 2308 moveto 2844 2308 lineto stroke 2844 2308 moveto 2864 2308 lineto stroke 2864 2308 moveto 2884 2308 lineto stroke 2884 2308 moveto 2908 2304 lineto stroke 2908 2304 moveto 2928 2304 lineto stroke 2928 2304 moveto 2948 2304 lineto stroke 2948 2304 moveto 2968 2304 lineto stroke 2968 2304 moveto 2988 2300 lineto stroke 2988 2300 moveto 3004 2300 lineto stroke 3004 2300 moveto 3024 2296 lineto stroke 3024 2296 moveto 3044 2296 lineto stroke 3044 2296 moveto 3064 2292 lineto stroke 3064 2292 moveto 3080 2288 lineto stroke 3080 2288 moveto 3096 2284 lineto stroke 3096 2284 moveto 3116 2280 lineto stroke 3116 2280 moveto 3132 2276 lineto stroke 3132 2276 moveto 3148 2272 lineto stroke 3148 2272 moveto 3164 2268 lineto stroke 3164 2268 moveto 3176 2264 lineto stroke 3176 2264 moveto 3192 2260 lineto stroke 3192 2260 moveto 3204 2252 lineto stroke 3204 2252 moveto 3220 2248 lineto stroke 3220 2248 moveto 3232 2240 lineto stroke 3232 2240 moveto 3244 2232 lineto stroke 3244 2232 moveto 3256 2224 lineto stroke 3256 2224 moveto 3268 2220 lineto stroke 3268 2220 moveto 3280 2208 lineto stroke 3280 2208 moveto 3292 2200 lineto stroke 3292 2200 moveto 3304 2192 lineto stroke 3304 2192 moveto 3312 2184 lineto stroke 3312 2184 moveto 3324 2172 lineto stroke 3324 2172 moveto 3332 2160 lineto stroke 3332 2160 moveto 3344 2152 lineto stroke 3344 2152 moveto 3352 2140 lineto stroke 3352 2140 moveto 3360 2128 lineto stroke 3360 2128 moveto 3372 2116 lineto stroke 3372 2116 moveto 3380 2104 lineto stroke 3380 2104 moveto 3388 2088 lineto stroke 3388 2088 moveto 3396 2076 lineto stroke 3396 2076 moveto 3408 2060 lineto stroke 3408 2060 moveto 3416 2044 lineto stroke 3416 2044 moveto 3424 2028 lineto stroke 3424 2028 moveto 3432 2012 lineto stroke 3432 2012 moveto 3440 1992 lineto stroke 3440 1992 moveto 3448 1976 lineto stroke 3448 1976 moveto 3452 1960 lineto stroke 3452 1960 moveto 3460 1940 lineto stroke 3460 1940 moveto 3468 1920 lineto stroke 3468 1920 moveto 3476 1900 lineto stroke 3476 1900 moveto 3484 1880 lineto stroke 3484 1880 moveto 3492 1860 lineto stroke 3492 1860 moveto 3496 1840 lineto stroke 3496 1840 moveto 3504 1820 lineto stroke 3504 1820 moveto 3512 1796 lineto stroke 3512 1796 moveto 3516 1776 lineto stroke 3516 1776 moveto 3524 1752 lineto stroke 3524 1752 moveto 3528 1728 lineto stroke 3528 1728 moveto 3536 1704 lineto stroke 3536 1704 moveto 3544 1680 lineto stroke 3544 1680 moveto 3548 1656 lineto stroke 3548 1656 moveto 3556 1632 lineto stroke 3556 1632 moveto 3560 1608 lineto stroke 3560 1608 moveto 3568 1580 lineto stroke 3568 1580 moveto 3572 1556 lineto stroke 3572 1556 moveto 3580 1528 lineto stroke 3580 1528 moveto 3584 1500 lineto stroke 3584 1500 moveto 3592 1476 lineto stroke 3592 1476 moveto 3596 1448 lineto stroke 3596 1448 moveto 3604 1420 lineto stroke 3604 1420 moveto 3608 1392 lineto stroke 3608 1392 moveto 3616 1364 lineto stroke 3616 1364 moveto 3620 1332 lineto stroke 3620 1332 moveto 3628 1308 lineto stroke 3628 1308 moveto 3632 1280 lineto stroke 3632 1280 moveto 3636 1256 lineto stroke 3636 1256 moveto 3644 1228 lineto stroke 3644 1228 moveto 3648 1204 lineto stroke 3648 1204 moveto 3652 1180 lineto stroke 3652 1180 moveto 3660 1152 lineto stroke 3660 1152 moveto 3664 1128 lineto stroke 3664 1128 moveto 3668 1104 lineto stroke 3668 1104 moveto 3672 1080 lineto stroke 3672 1080 moveto 3680 1060 lineto stroke 3680 1060 moveto 3684 1036 lineto stroke 3684 1036 moveto 3688 1016 lineto stroke 3688 1016 moveto 3692 996 lineto stroke 3692 996 moveto 3696 976 lineto stroke 3696 976 moveto 3700 956 lineto stroke 3700 956 moveto 3708 936 lineto stroke 3708 936 moveto 3712 912 lineto stroke 3712 912 moveto 3716 892 lineto stroke 3716 892 moveto 3724 876 lineto stroke 3724 876 moveto 3728 856 lineto stroke 3728 856 moveto 3732 840 lineto stroke 3732 840 moveto 3740 828 lineto stroke 3740 828 moveto 3744 812 lineto stroke 3744 812 moveto 3748 800 lineto stroke 3748 800 moveto 3752 792 lineto stroke 3752 792 moveto 3756 780 lineto stroke 3756 780 moveto 3760 772 lineto stroke 3760 772 moveto 3764 764 lineto stroke 3764 764 moveto 3772 756 lineto stroke 3772 756 moveto 3780 744 lineto stroke 3780 744 moveto 3788 740 lineto stroke 3788 740 moveto 3800 736 lineto stroke 3800 736 moveto 0 3068 moveto showpage auto/07p/doc/include/exit.fig0000640000175000017500000000046313570013207014075 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 exit.png 0 600 6930 600 6930 3300 0 3300 0 600 2 1 0 3 20 7 50 0 -1 0.000 0 0 -1 0 1 2 2 1 1.00 150.00 255.00 825 2475 1725 3825 4 0 0 50 0 0 12 0.0000 4 180 1200 1725 3900 Exit the system\001 auto/07p/doc/include/fnc_canards4.eps0000640000175000017500000010501113570013207015466 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -11 -8 259 424 %%HiResBoundingBox: -11.475004 -8.937006 258.524996 423.062994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmpL33hxE.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 270 432 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font MVVWGH+CMMI12 %!FontType1-1.0: MVVWGH+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /MVVWGH+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 457 441] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 115 /s put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F40 586391EA9A2414C5CD9EE00D483839FC635AD0D52D643D652F74F041D36A563E 1F56922A8B1764174106A1C5AE5CBF55A318CB60C637EC2D5C88BD00DB9BF961 B96F0B7012AD9169A96092698E8A3011CE963A65F4D362343F71084AFBE9A9E5 4C1B6B64FC7FABF7E631810B6F00DC39F68269DCCED25AA14ED8E38BB54AE733 B48E950EE2ADECB769B107473514572B5DFD404D8E6B2DB619A52904C916A848 F650570C4F5E16DC904727623D2C1A50FC51D3A31AE11A89708097DA2251683C A8040751E06BC2DDE7E42E90A38CFC8655746B7B34D6FDF85A4BAF98D83CD82F 0E64338282B717606331D487D502D3D3103B321D40F93CB247892D4022543348 F60D0CCAE7BD9A9E801AEBFD6FEC833DB7A27F9DD844A007C0E453A7F36484AC 79944C0365B4C67087AA35F1AA4D4F0A36536875A51A85205CA1082094D6C56C C4A845EF6F36B38CED8262286743DFE727047BF5009017C577C1A99BBD3C825D D2D139602AB0E05145F60988CE04712236246A3E70DD5A419B69B0E173167CF0 2560B7CCC0D95F710DC8AB5927A7C13FE0B510E3319605223A4880EA52269078 22782D7E6FF6F27839A79D7FFBA8C0BE9FF44644010057D6BBEBDD76DD6258E2 642EB8FEF97069A6555555A83F2A4FA937BE3C002AC7079FD51B7F40F9565D3A 2E445FD2FE169F475DA41032677B3D65CAC4A7BAB21B40482890AFAD16BED8C6 AAE6B208405298A95AA1DAC10E0AE693D78883DBDE580E22D2F42CEE328A95DE 78122BBA9D52897D652E03B74CD06FFC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /MVVWGH+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font ODEMPY+CMR12 %!FontType1-1.0: ODEMPY+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /ODEMPY+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 462 675] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32D9B31D10B260CD4CC1D 847FA11D4A6147194663D6D7E38C5CA39E6E046476ADA46B08E683CE7C25C698 15EFBCC5EAAE453F74AF2BCCFA79473CC353DD32A422478BE98D45F989B2FFAC 9DBCC02D82871D7C15CDEF1651F506F55F8C051F9A75CC5185172980E3C14A1A 039164C95A74C41450ED48A75D60A04941D2E0B329FE14FA3E6F21382E5BC1F0 BE50D8541D6B8EE98E10D38259B5191CBE4E97701889DCDD024877181D3AF5B4 3AC29B8815D07DFB91E742B77962C82702376D369F6FCE4DAC618C1C705EFE0B 64BA1CA2C2C4E35E89B86E11CFC54D8CAA8F3850C4D8861AE188C89072BCBF58 6C91103FCB9518599CA4AEFD99EEE8FD10CB9D3A5B3DEC236BFD0BF2CE9AD079 FCE9B4D302DD9EE968CCCF3DE67715CC88D2FF26654F599DDBB604AA82080749 57E8519F193A1FE7473B791E8EE7D7921AB36AB24C415509847B020BFFCABB36 6AADECBB040EEA48A455A2789E805BB21F7D5A2704F7CF9B4837CBD7ED9CC7FB 01CAC8B06A6AF3FA8A721425753C4C707E562A3FC46CE230852ECEA40722978D 0A333D713DC0672877029ECD86EE9C5D905106C1D11828094E70F2EF39CFBFE7 CC318E50177220752C76C692F29A6BCED06DCA4FC97EC6D5B2FC460A6FD1651F C4B67A832F3746BDDC7001C4003ED4F32CE1F4DD0613CC03A0FFF164F8474275 464B68D445803B867ECC4050B2BE34C207243CCF42C9A8C6D491D2B57B6AF23D C0E003EBBD7F899A16DBB92F60A46F862E37541C6606A43DBBF78DA613677FEB 90A28465BA47A6699E9BF81BE39FE6EA372B7FCF17424212EAD9202954BB97E8 B082B63EA1B59BA15342378A5D289A8803CF99D262A19A9AC687CB6CAB543FC6 6ECA494190F8A2F291BD7A0AFF338CC13053128E5305E594BA2D0DA0876FB05B 9859B066EECA5B46D5AB8F5B31C041E63B067A8F5B3C70123E22D92E8C18FD69 D66811559E762DA049382AFF408C4C02B6D2BFAF2108799E3D29FB887BFB62D5 824B3266E35F8A85B094C415FDC32B6D3498F01ED0A36B6B58C7C3439A5760EC 65C424B8FC7936822387F0646AE40C33768DB28245D352C86EDB3C0909C6041A 02E9E26EAAB228692394B6ABA4396D6894589961774AFB735F7E34A1C8409AC2 34E3B21AD6CD7E99351266F24E666D182C07252571CE94C199D1A226C3AD2330 86F628A655FE4E27FC8EE08BA3A19884B5CC49E233C38363012486BE9CE15B99 535E67DEBA780DBF916A1A99AC961B8A64E8EE9956A0F2B93C8F0DF55891F45A FB8D2E618FE8465EEC1FCF276859F15EB3FAF4078B348A78A2539378829C1D3E 656BAC23F5D42710443F2DE5BD21FDA280D6F6C26200951CFFFB470DA559028D FC6B1386BB61D927F4A25D75AA5E90817701308399CD740CF0ACA06A2F6EED17 5E476960408DCDEB67DECAA17964CB175EF3EFF7D5F771668630EF7A54B198EF 17441080CF7D9876833D4FA2A544EA49236B6DADE8D86FAB8AAF180F61C4606D 505B2331E24FE45439D4AC717680DE3AD456A80910F19C5719312C761922394B F7409A9038FEAA024D0B4DD33599C676EF2FE2C04971EE1555DF3528D5F4AA02 4236519492D9407F4F95A37C8326735FDCF6BD62C9A72E4ED620F0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /ODEMPY+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 270 432 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 270 432 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 270 432 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 2700 4320 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 2700 4320 re S 337.5 432 2092.5 3456 re f q 337.5 432 2092 3456 re W 20 w /DeviceGray {} CS [0] SC 2191.9 0 m 1831.42 744.395 l 1580.13 1277.65 l 1380.8 1716.04 l 1225.57 2072.92 l 1093.17 2394.05 l 985.34 2672.69 l 885.602 2949.66 l 846.762 3054.61 l 836.691 3054.8 l 830.715 3034.48 l 820.566 3030.83 l 808.609 3051.1 l 798.523 3048.61 l 790.191 3028.49 l 780.051 3035.92 l 774.602 3046.06 l 764.602 3054.45 l 754.484 3024.01 l 744.461 3031.56 l 723.344 3092.98 l 670.445 3273.38 l 617.484 3477.03 l 572.16 3677.53 l 534.43 3875.59 l 532.703 3885.62 l 532.703 3885.62 l S /DeviceRGB {} CS [1 0 0] SC 2227.14 0 m 1863.26 742.883 l 1606.26 1282.13 l 1410.67 1707.29 l 1251.47 2068.74 l 1119.48 2384.66 l 1008.82 2666.54 l 906.281 2946.63 l 866.949 3050.45 l 856.852 3056.58 l 848.391 3036.3 l 838.336 3034.24 l 831.023 3044.25 l 820.953 3051.23 l 813.52 3041.19 l 803.422 3033.3 l 793.789 3043.38 l 783.777 3048.87 l 776.836 3038.79 l 766.824 3031.34 l 748.488 3051.31 l 739.277 3031.05 l 729.145 3028.2 l 713.199 3069.56 l 670.141 3211.78 l 616.223 3412.41 l 568.043 3617.55 l 528.23 3816.99 l 516.969 3881.14 l 516.969 3881.14 l S /DeviceRGB {} CS [0 0 1] SC 2262.85 0 m 1894.88 742.715 l 1638.15 1275.14 l 1441.73 1696.88 l 1280.69 2057.77 l 1145.23 2377.64 l 1032.08 2661.85 l 926.441 2945.86 l 885.539 3050 l 875.488 3055.43 l 863.605 3035.23 l 853.367 3039.88 l 843.273 3049.1 l 823.121 3036.5 l 802.883 3046.47 l 792.867 3038.56 l 782.785 3036.52 l 772.754 3044 l 762.676 3043.01 l 753.312 3032.93 l 743.262 3037.66 l 733.516 3047.74 l 724.277 3037.57 l 719.586 3027.38 l 709.461 3032.92 l 693.961 3074.14 l 653.996 3206.25 l 599.625 3409.34 l 553.836 3604.74 l 514.301 3802.06 l 500.566 3880.31 l 500.566 3880.31 l S /DeviceRGB {} CS [0 0.5019 0] SC 2299.22 0 m 1927.53 741.652 l 1665.4 1279.11 l 1467.02 1700.28 l 1304.6 2060.16 l 1170.93 2371.94 l 1054.04 2661.65 l 942.801 2956.32 l 909.254 3040.96 l 903.395 3051.17 l 893.273 3053.61 l 886.848 3043.49 l 876.719 3037.91 l 866.512 3045.59 l 856.328 3047.83 l 846.145 3040.77 l 836.043 3040.29 l 825.945 3044.76 l 795.621 3040.75 l 785.578 3043.53 l 765.477 3037.02 l 755.281 3041.72 l 745.234 3041.4 l 735.117 3033.86 l 714.75 3045.3 l 695.922 3027.48 l 685.348 3048.1 l 660.891 3122.13 l 612.219 3293.04 l 560.496 3499.14 l 517.816 3695.8 l 483.152 3885.09 l 483.152 3885.09 l S /DeviceGray {} CS [0.5019] SC 2336.3 0 m 1960.6 741.027 l 1697.66 1273.83 l 1499.52 1689.32 l 1330.87 2058.3 l 1192.88 2376.35 l 1075.13 2664.72 l 951.559 2987.09 l 923.484 3049.69 l 913.32 3054.03 l 904.918 3043.96 l 894.883 3040.26 l 884.832 3045.98 l 874.625 3047.33 l 864.453 3042.46 l 813.816 3041.49 l 803.547 3042.83 l 783.238 3039.2 l 763.023 3040.8 l 752.73 3037.54 l 722.688 3037.12 l 712.633 3034.36 l 702.371 3040.77 l 692.309 3040.32 l 685.621 3030.19 l 675.438 3031.51 l 661.922 3063.23 l 631.688 3159.61 l 581.703 3341.66 l 532.441 3546.1 l 489.781 3753.01 l 466.613 3884.31 l 466.613 3884.31 l S /DeviceRGB {} CS [1 0.6465 0] SC 2374.1 0 m 2000.32 728.562 l 1731.69 1266.27 l 1529.72 1684.61 l 1365.92 2038.16 l 1228.38 2350.06 l 1108.31 2638.7 l 992.156 2936.01 l 949.395 3039.44 l 943.129 3049.44 l 932.945 3053.85 l 922.758 3044.29 l 912.543 3042.52 l 902.316 3046.82 l 892.215 3046.98 l 871.785 3043.32 l 851.449 3043.88 l 831.398 3042.4 l 790.562 3041.2 l 709.426 3038.45 l 699.18 3034.52 l 679.008 3040.89 l 668.98 3031.51 l 658.938 3030.14 l 644.512 3061.6 l 613.398 3160.5 l 562.371 3347.96 l 515.02 3546.6 l 474.871 3742.28 l 449.73 3885.37 l 449.73 3885.37 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 337.5 432 m 337.5 3888 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 337.5 432 m 337.5 472 l S 337.5 3888 m 337.5 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 628.125 432 m 628.125 3888 l S Q 628.125 432 m 628.125 472 l S 628.125 3888 m 628.125 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 918.75 432 m 918.75 3888 l S Q 918.75 432 m 918.75 472 l S 918.75 3888 m 918.75 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1209.38 432 m 1209.38 3888 l S Q 1209.38 432 m 1209.38 472 l S 1209.38 3888 m 1209.38 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1500 432 m 1500 3888 l S Q 1500 432 m 1500 472 l S 1500 3888 m 1500 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1790.62 432 m 1790.62 3888 l S Q 1790.62 432 m 1790.62 472 l S 1790.62 3888 m 1790.62 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 2081.25 432 m 2081.25 3888 l S Q 2081.25 432 m 2081.25 472 l S 2081.25 3888 m 2081.25 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 2371.87 432 m 2371.87 3888 l S Q 2371.87 432 m 2371.87 472 l S 2371.87 3888 m 2371.87 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 432 m 2430 432 l S Q 337.5 432 m 377.5 432 l S 2430 432 m 2390 432 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 1296 m 2430 1296 l S Q 337.5 1296 m 377.5 1296 l S 2430 1296 m 2390 1296 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 2160 m 2430 2160 l S Q 337.5 2160 m 377.5 2160 l S 2430 2160 m 2390 2160 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 3024 m 2430 3024 l S Q 337.5 3024 m 377.5 3024 l S 2430 3024 m 2390 3024 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 3888 m 2430 3888 l S Q 337.5 3888 m 377.5 3888 l S 2430 3888 m 2390 3888 l S 10 w 2 J 337.5 3888 m 2430 3888 l S 2430 432 m 2430 3888 l S 337.5 432 m 2430 432 l S 337.5 432 m 337.5 3888 l S q 720 3600 m 720 3600 l 720 3600 l 720 3600 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 1802.28] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 23.3449 31.4961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9718 TJm 9.1199 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2632 TJm 34.9422 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 38.1821 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm (5) 5.858 Tj -686.735 TJm (0) 5.858 Tj -2.2632 TJm 64.0051 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 67.2449 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2637 TJm 93.0672 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 96.307 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -686.734 TJm (0) 5.858 Tj -2.2637 TJm 122.13 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 125.3699 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2637 TJm 151.1922 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 154.432 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -686.734 TJm (0) 5.858 Tj -2.2637 TJm 180.255 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 183.4949 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -686.668 TJm (0) 5.858 Tj -2.2627 TJm 209.3172 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 212.557 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm 112.273 -10.148 Td /F11_0 11.9552 Tf (s) 5.5113 Tj -0.5054 TJm -17.851 8.3141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 8.3141 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -2.7311 8.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5088 8.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -17.851 94.7141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 94.7141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.7311 94.7141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5087 94.7141 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -17.8511 181.1141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 181.1141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.7312 181.1141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5087 181.1141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -17.8511 267.5137 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6113 267.5137 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7312 267.5137 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5086 267.5137 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5531 353.452 Td (0) 5.858 Tj -2.2632 TJm -2.673 353.452 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5668 353.452 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 0.4941 213.17] Tm 0 0 Td /F11_0 11.9552 Tf (v) 5.6548 Tj 1.6092 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font MVVWGH+CMMI12 %%+ font ODEMPY+CMR12 %%EOF auto/07p/doc/include/helpMenu.fig0000640000175000017500000000024413570013207014676 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 helpMenu.png 225 150 855 150 855 870 225 870 225 150 auto/07p/doc/include/kpr6.ps0000640000175000017500000011512613570013207013666 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments -30 800 translate -90 rotate 0.75 0.75 scale /lthick 5 def %% line thickness % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (1) 495 460 PR (.) 550 460 PR (0) 605 460 PR (3) 660 460 PR (0) 715 460 PR 760 340 moveto (-) 760 340 PR (1) 815 340 PR (.) 870 340 PR (0) 925 340 PR (2) 980 340 PR (0) 1035 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (-) 1080 460 PR (1) 1135 460 PR (.) 1190 460 PR (0) 1245 460 PR (1) 1300 460 PR (0) 1355 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (-) 1400 340 PR (1) 1455 340 PR (.) 1510 340 PR (0) 1565 340 PR (0) 1620 340 PR (0) 1675 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (-) 1720 460 PR (0) 1775 460 PR (.) 1830 460 PR (9) 1885 460 PR (9) 1940 460 PR (0) 1995 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (-) 2040 340 PR (0) 2095 340 PR (.) 2150 340 PR (9) 2205 340 PR (8) 2260 340 PR (0) 2315 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (-) 2360 460 PR (0) 2415 460 PR (.) 2470 460 PR (9) 2525 460 PR (7) 2580 460 PR (0) 2635 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (-) 2680 340 PR (0) 2735 340 PR (.) 2790 340 PR (9) 2845 340 PR (6) 2900 340 PR (0) 2955 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (-) 3000 460 PR (0) 3055 460 PR (.) 3110 460 PR (9) 3165 460 PR (5) 3220 460 PR (0) 3275 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (-) 3320 340 PR (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (4) 3540 340 PR (0) 3595 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (-) 3640 460 PR (0) 3695 460 PR (.) 3750 460 PR (9) 3805 460 PR (3) 3860 460 PR (0) 3915 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 224 600 PR (1) 279 600 PR (.) 334 600 PR (0) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 884 moveto (-) 224 884 PR (0) 279 884 PR (.) 334 884 PR (9) 389 884 PR (9) 444 884 PR (0) 499 884 PR 540 884 moveto 600 884 lineto stroke 600 884 moveto 4 1168 moveto (-) 224 1168 PR (0) 279 1168 PR (.) 334 1168 PR (9) 389 1168 PR (8) 444 1168 PR (0) 499 1168 PR 540 1168 moveto 600 1168 lineto stroke 600 1168 moveto 4 1456 moveto (-) 224 1456 PR (0) 279 1456 PR (.) 334 1456 PR (9) 389 1456 PR (7) 444 1456 PR (0) 499 1456 PR 540 1456 moveto 600 1456 lineto stroke 600 1456 moveto 4 1740 moveto (-) 224 1740 PR (0) 279 1740 PR (.) 334 1740 PR (9) 389 1740 PR (6) 444 1740 PR (0) 499 1740 PR 540 1740 moveto 600 1740 lineto stroke 600 1740 moveto 4 2028 moveto (-) 224 2028 PR (0) 279 2028 PR (.) 334 2028 PR (9) 389 2028 PR (5) 444 2028 PR (0) 499 2028 PR 540 2028 moveto 600 2028 lineto stroke 600 2028 moveto 4 2312 moveto (-) 224 2312 PR (0) 279 2312 PR (.) 334 2312 PR (9) 389 2312 PR (4) 444 2312 PR (0) 499 2312 PR 540 2312 moveto 600 2312 lineto stroke 600 2312 moveto 4 2600 moveto (-) 224 2600 PR (0) 279 2600 PR (.) 334 2600 PR (9) 389 2600 PR (3) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 2884 1780 moveto 2884 1780 lineto stroke 2884 1780 moveto lthick setlinewidth 2884 1780 moveto 2876 1780 lineto stroke 2876 1780 moveto 2864 1776 lineto stroke 2864 1776 moveto 2856 1776 lineto stroke 2856 1776 moveto 2848 1772 lineto stroke 2848 1772 moveto 2840 1772 lineto stroke 2840 1772 moveto 2828 1768 lineto stroke 2828 1768 moveto 2812 1764 lineto stroke 2812 1764 moveto 2796 1760 lineto stroke 2796 1760 moveto 2780 1756 lineto stroke 2780 1756 moveto 2760 1752 lineto stroke 2760 1752 moveto 2736 1744 lineto stroke 2736 1744 moveto 2712 1740 lineto stroke 2712 1740 moveto 2684 1732 lineto stroke 2684 1732 moveto 2656 1724 lineto stroke 2656 1724 moveto 2620 1716 lineto stroke 2620 1716 moveto 2584 1704 lineto stroke 2584 1704 moveto 2548 1696 lineto stroke 2548 1696 moveto 2504 1684 lineto stroke 2504 1684 moveto 2456 1668 lineto stroke 2456 1668 moveto 2408 1656 lineto stroke 2408 1656 moveto 2356 1640 lineto stroke 2356 1640 moveto 2300 1624 lineto stroke 2300 1624 moveto 2240 1604 lineto stroke 2240 1604 moveto 2180 1584 lineto stroke 2180 1584 moveto 2120 1564 lineto stroke 2120 1564 moveto 2056 1540 lineto stroke 2056 1540 moveto 1988 1516 lineto stroke 1988 1516 moveto 1924 1492 lineto stroke 1924 1492 moveto 1856 1468 lineto stroke 1856 1468 moveto 1792 1440 lineto stroke 1792 1440 moveto 1728 1412 lineto stroke 1728 1412 moveto 1664 1380 lineto stroke 1664 1380 moveto 1600 1348 lineto stroke 1600 1348 moveto 1544 1316 lineto stroke 1544 1316 moveto 1488 1288 lineto stroke 1488 1288 moveto 1436 1252 lineto stroke 1436 1252 moveto 1388 1220 lineto stroke 1388 1220 moveto 1344 1184 lineto stroke 1344 1184 moveto 1304 1152 lineto stroke 1304 1152 moveto 1272 1116 lineto stroke 1272 1116 moveto 1240 1084 lineto stroke 1240 1084 moveto 1216 1052 lineto stroke 1216 1052 moveto 1200 1024 lineto stroke 1200 1024 moveto 1184 988 lineto stroke 1184 988 moveto 1172 956 lineto stroke 1172 956 moveto 1168 924 lineto stroke 1168 924 moveto 1168 896 lineto stroke 1168 896 moveto 1172 864 lineto stroke 1172 864 moveto 1184 840 lineto stroke 1184 840 moveto 1196 816 lineto stroke 1196 816 moveto 1212 796 lineto stroke 1212 796 moveto 1232 776 lineto stroke 1232 776 moveto 1252 756 lineto stroke 1252 756 moveto 1276 744 lineto stroke 1276 744 moveto 1300 728 lineto stroke 1300 728 moveto 1328 716 lineto stroke 1328 716 moveto 1356 708 lineto stroke 1356 708 moveto 1384 700 lineto stroke 1384 700 moveto 1416 692 lineto stroke 1416 692 moveto 1448 688 lineto stroke 1448 688 moveto 1484 688 lineto stroke 1484 688 moveto 1516 684 lineto stroke 1516 684 moveto 1552 688 lineto stroke 1552 688 moveto 1592 692 lineto stroke 1592 692 moveto 1632 696 lineto stroke 1632 696 moveto 1672 704 lineto stroke 1672 704 moveto 1712 712 lineto stroke 1712 712 moveto 1760 728 lineto stroke 1760 728 moveto 1808 744 lineto stroke 1808 744 moveto 1852 760 lineto stroke 1852 760 moveto 1896 780 lineto stroke 1896 780 moveto 1944 804 lineto stroke 1944 804 moveto 1992 832 lineto stroke 1992 832 moveto 2036 860 lineto stroke 2036 860 moveto 2080 888 lineto stroke 2080 888 moveto 2128 920 lineto stroke 2128 920 moveto 2176 956 lineto stroke 2176 956 moveto 2220 992 lineto stroke 2220 992 moveto 2260 1024 lineto stroke 2260 1024 moveto 2304 1064 lineto stroke 2304 1064 moveto 2340 1100 lineto stroke 2340 1100 moveto 2380 1140 lineto stroke 2380 1140 moveto 2412 1172 lineto stroke 2412 1172 moveto 2448 1212 lineto stroke 2448 1212 moveto 2480 1248 lineto stroke 2480 1248 moveto 2512 1280 lineto stroke 2512 1280 moveto 2540 1316 lineto stroke 2540 1316 moveto 2572 1348 lineto stroke 2572 1348 moveto 2596 1384 lineto stroke 2596 1384 moveto 2620 1416 lineto stroke 2620 1416 moveto 2644 1444 lineto stroke 2644 1444 moveto 2668 1476 lineto stroke 2668 1476 moveto 2692 1504 lineto stroke 2692 1504 moveto 2712 1532 lineto stroke 2712 1532 moveto 2728 1556 lineto stroke 2728 1556 moveto 2752 1588 lineto stroke 2752 1588 moveto 2772 1616 lineto stroke 2772 1616 moveto 2788 1640 lineto stroke 2788 1640 moveto 2804 1660 lineto stroke 2804 1660 moveto 2816 1676 lineto stroke 2816 1676 moveto 2824 1692 lineto stroke 2824 1692 moveto 2832 1704 lineto stroke 2832 1704 moveto 2840 1716 lineto stroke 2840 1716 moveto 2848 1728 lineto stroke 2848 1728 moveto 2852 1736 lineto stroke 2852 1736 moveto 2856 1744 lineto stroke 2856 1744 moveto 2864 1756 lineto stroke 2864 1756 moveto 2872 1764 lineto stroke 2872 1764 moveto 2876 1768 lineto stroke 2876 1768 moveto 2880 1776 lineto stroke 2880 1776 moveto 3124 1996 moveto 3124 1996 lineto stroke 3124 1996 moveto 3124 1996 moveto 3116 1996 lineto stroke 3116 1996 moveto 3108 1992 lineto stroke 3108 1992 moveto 3096 1992 lineto stroke 3096 1992 moveto 3088 1988 lineto stroke 3088 1988 moveto 3072 1984 lineto stroke 3072 1984 moveto 3048 1980 lineto stroke 3048 1980 moveto 3020 1976 lineto stroke 3020 1976 moveto 2988 1968 lineto stroke 2988 1968 moveto 2948 1960 lineto stroke 2948 1960 moveto 2896 1948 lineto stroke 2896 1948 moveto 2832 1932 lineto stroke 2832 1932 moveto 2764 1916 lineto stroke 2764 1916 moveto 2680 1896 lineto stroke 2680 1896 moveto 2584 1868 lineto stroke 2584 1868 moveto 2472 1840 lineto stroke 2472 1840 moveto 2360 1808 lineto stroke 2360 1808 moveto 2240 1776 lineto stroke 2240 1776 moveto 2108 1736 lineto stroke 2108 1736 moveto 1976 1688 lineto stroke 1976 1688 moveto 1836 1640 lineto stroke 1836 1640 moveto 1700 1584 lineto stroke 1700 1584 moveto 1568 1528 lineto stroke 1568 1528 moveto 1448 1468 lineto stroke 1448 1468 moveto 1356 1416 lineto stroke 1356 1416 moveto 1276 1364 lineto stroke 1276 1364 moveto 1204 1312 lineto stroke 1204 1312 moveto 1148 1264 lineto stroke 1148 1264 moveto 1100 1212 lineto stroke 1100 1212 moveto 1060 1164 lineto stroke 1060 1164 moveto 1036 1120 lineto stroke 1036 1120 moveto 1016 1076 lineto stroke 1016 1076 moveto 1004 1032 lineto stroke 1004 1032 moveto 1004 992 lineto stroke 1004 992 moveto 1008 956 lineto stroke 1008 956 moveto 1016 920 lineto stroke 1016 920 moveto 1028 892 lineto stroke 1028 892 moveto 1048 864 lineto stroke 1048 864 moveto 1064 840 lineto stroke 1064 840 moveto 1088 820 lineto stroke 1088 820 moveto 1112 800 lineto stroke 1112 800 moveto 1140 780 lineto stroke 1140 780 moveto 1168 764 lineto stroke 1168 764 moveto 1196 752 lineto stroke 1196 752 moveto 1220 740 lineto stroke 1220 740 moveto 1248 732 lineto stroke 1248 732 moveto 1276 724 lineto stroke 1276 724 moveto 1304 716 lineto stroke 1304 716 moveto 1332 708 lineto stroke 1332 708 moveto 1360 704 lineto stroke 1360 704 moveto 1388 700 lineto stroke 1388 700 moveto 1416 700 lineto stroke 1416 700 moveto 1448 696 lineto stroke 1448 696 moveto 1480 696 lineto stroke 1480 696 moveto 1512 696 lineto stroke 1512 696 moveto 1544 700 lineto stroke 1544 700 moveto 1568 700 lineto stroke 1568 700 moveto 1596 704 lineto stroke 1596 704 moveto 1620 708 lineto stroke 1620 708 moveto 1644 712 lineto stroke 1644 712 moveto 1672 716 lineto stroke 1672 716 moveto 1700 720 lineto stroke 1700 720 moveto 1724 728 lineto stroke 1724 728 moveto 1752 736 lineto stroke 1752 736 moveto 1780 744 lineto stroke 1780 744 moveto 1812 752 lineto stroke 1812 752 moveto 1840 764 lineto stroke 1840 764 moveto 1868 772 lineto stroke 1868 772 moveto 1896 784 lineto stroke 1896 784 moveto 1924 796 lineto stroke 1924 796 moveto 1952 808 lineto stroke 1952 808 moveto 1980 824 lineto stroke 1980 824 moveto 2000 832 lineto stroke 2000 832 moveto 2024 844 lineto stroke 2024 844 moveto 2044 856 lineto stroke 2044 856 moveto 2068 868 lineto stroke 2068 868 moveto 2088 884 lineto stroke 2088 884 moveto 2112 896 lineto stroke 2112 896 moveto 2132 912 lineto stroke 2132 912 moveto 2156 924 lineto stroke 2156 924 moveto 2180 940 lineto stroke 2180 940 moveto 2200 956 lineto stroke 2200 956 moveto 2224 972 lineto stroke 2224 972 moveto 2244 988 lineto stroke 2244 988 moveto 2268 1004 lineto stroke 2268 1004 moveto 2292 1024 lineto stroke 2292 1024 moveto 2316 1040 lineto stroke 2316 1040 moveto 2336 1060 lineto stroke 2336 1060 moveto 2356 1076 lineto stroke 2356 1076 moveto 2376 1092 lineto stroke 2376 1092 moveto 2396 1108 lineto stroke 2396 1108 moveto 2412 1124 lineto stroke 2412 1124 moveto 2432 1144 lineto stroke 2432 1144 moveto 2452 1160 lineto stroke 2452 1160 moveto 2472 1176 lineto stroke 2472 1176 moveto 2488 1196 lineto stroke 2488 1196 moveto 2512 1216 lineto stroke 2512 1216 moveto 2532 1236 lineto stroke 2532 1236 moveto 2552 1260 lineto stroke 2552 1260 moveto 2572 1280 lineto stroke 2572 1280 moveto 2596 1304 lineto stroke 2596 1304 moveto 2616 1328 lineto stroke 2616 1328 moveto 2640 1352 lineto stroke 2640 1352 moveto 2660 1372 lineto stroke 2660 1372 moveto 2680 1396 lineto stroke 2680 1396 moveto 2696 1416 lineto stroke 2696 1416 moveto 2716 1436 lineto stroke 2716 1436 moveto 2732 1456 lineto stroke 2732 1456 moveto 2752 1480 lineto stroke 2752 1480 moveto 2768 1504 lineto stroke 2768 1504 moveto 2788 1524 lineto stroke 2788 1524 moveto 2804 1544 lineto stroke 2804 1544 moveto 2824 1572 lineto stroke 2824 1572 moveto 2848 1600 lineto stroke 2848 1600 moveto 2864 1624 lineto stroke 2864 1624 moveto 2884 1648 lineto stroke 2884 1648 moveto 2920 1696 lineto stroke 2920 1696 moveto 2948 1740 lineto stroke 2948 1740 moveto 2976 1776 lineto stroke 2976 1776 moveto 2996 1804 lineto stroke 2996 1804 moveto 3040 1868 lineto stroke 3040 1868 moveto 3068 1912 lineto stroke 3068 1912 moveto 3088 1940 lineto stroke 3088 1940 moveto 3100 1960 lineto stroke 3100 1960 moveto 3112 1980 lineto stroke 3112 1980 moveto 3120 1988 lineto stroke 3120 1988 moveto 3124 1996 lineto stroke 3124 1996 moveto 3364 2212 moveto 3364 2212 lineto stroke 3364 2212 moveto 3364 2212 moveto 3356 2208 lineto stroke 3356 2208 moveto 3344 2204 lineto stroke 3344 2204 moveto 3332 2204 lineto stroke 3332 2204 moveto 3320 2200 lineto stroke 3320 2200 moveto 3296 2196 lineto stroke 3296 2196 moveto 3268 2192 lineto stroke 3268 2192 moveto 3236 2184 lineto stroke 3236 2184 moveto 3192 2176 lineto stroke 3192 2176 moveto 3140 2164 lineto stroke 3140 2164 moveto 3068 2152 lineto stroke 3068 2152 moveto 2992 2132 lineto stroke 2992 2132 moveto 2896 2112 lineto stroke 2896 2112 moveto 2784 2088 lineto stroke 2784 2088 moveto 2652 2056 lineto stroke 2652 2056 moveto 2516 2024 lineto stroke 2516 2024 moveto 2368 1984 lineto stroke 2368 1984 moveto 2208 1940 lineto stroke 2208 1940 moveto 2040 1892 lineto stroke 2040 1892 moveto 1848 1828 lineto stroke 1848 1828 moveto 1660 1760 lineto stroke 1660 1760 moveto 1484 1688 lineto stroke 1484 1688 moveto 1324 1612 lineto stroke 1324 1612 moveto 1208 1548 lineto stroke 1208 1548 moveto 1112 1484 lineto stroke 1112 1484 moveto 1032 1420 lineto stroke 1032 1420 moveto 964 1360 lineto stroke 964 1360 moveto 916 1304 lineto stroke 916 1304 moveto 880 1248 lineto stroke 880 1248 moveto 856 1196 lineto stroke 856 1196 moveto 840 1148 lineto stroke 840 1148 moveto 836 1096 lineto stroke 836 1096 moveto 840 1052 lineto stroke 840 1052 moveto 848 1008 lineto stroke 848 1008 moveto 868 972 lineto stroke 868 972 moveto 888 936 lineto stroke 888 936 moveto 916 904 lineto stroke 916 904 moveto 944 872 lineto stroke 944 872 moveto 976 848 lineto stroke 976 848 moveto 1008 824 lineto stroke 1008 824 moveto 1044 804 lineto stroke 1044 804 moveto 1080 788 lineto stroke 1080 788 moveto 1116 772 lineto stroke 1116 772 moveto 1148 760 lineto stroke 1148 760 moveto 1180 752 lineto stroke 1180 752 moveto 1212 740 lineto stroke 1212 740 moveto 1244 732 lineto stroke 1244 732 moveto 1280 728 lineto stroke 1280 728 moveto 1312 724 lineto stroke 1312 724 moveto 1348 720 lineto stroke 1348 720 moveto 1380 716 lineto stroke 1380 716 moveto 1416 712 lineto stroke 1416 712 moveto 1448 712 lineto stroke 1448 712 moveto 1480 712 lineto stroke 1480 712 moveto 1516 716 lineto stroke 1516 716 moveto 1544 716 lineto stroke 1544 716 moveto 1576 720 lineto stroke 1576 720 moveto 1604 724 lineto stroke 1604 724 moveto 1632 728 lineto stroke 1632 728 moveto 1664 732 lineto stroke 1664 732 moveto 1696 736 lineto stroke 1696 736 moveto 1724 744 lineto stroke 1724 744 moveto 1752 752 lineto stroke 1752 752 moveto 1784 760 lineto stroke 1784 760 moveto 1816 768 lineto stroke 1816 768 moveto 1848 780 lineto stroke 1848 780 moveto 1876 788 lineto stroke 1876 788 moveto 1908 800 lineto stroke 1908 800 moveto 1936 812 lineto stroke 1936 812 moveto 1964 824 lineto stroke 1964 824 moveto 1996 836 lineto stroke 1996 836 moveto 2020 848 lineto stroke 2020 848 moveto 2044 860 lineto stroke 2044 860 moveto 2072 872 lineto stroke 2072 872 moveto 2096 884 lineto stroke 2096 884 moveto 2120 900 lineto stroke 2120 900 moveto 2144 912 lineto stroke 2144 912 moveto 2168 928 lineto stroke 2168 928 moveto 2192 940 lineto stroke 2192 940 moveto 2220 956 lineto stroke 2220 956 moveto 2244 976 lineto stroke 2244 976 moveto 2272 992 lineto stroke 2272 992 moveto 2296 1008 lineto stroke 2296 1008 moveto 2324 1028 lineto stroke 2324 1028 moveto 2348 1048 lineto stroke 2348 1048 moveto 2376 1068 lineto stroke 2376 1068 moveto 2404 1088 lineto stroke 2404 1088 moveto 2428 1104 lineto stroke 2428 1104 moveto 2448 1124 lineto stroke 2448 1124 moveto 2472 1144 lineto stroke 2472 1144 moveto 2492 1160 lineto stroke 2492 1160 moveto 2516 1180 lineto stroke 2516 1180 moveto 2540 1200 lineto stroke 2540 1200 moveto 2560 1220 lineto stroke 2560 1220 moveto 2580 1240 lineto stroke 2580 1240 moveto 2604 1264 lineto stroke 2604 1264 moveto 2632 1288 lineto stroke 2632 1288 moveto 2652 1308 lineto stroke 2652 1308 moveto 2676 1332 lineto stroke 2676 1332 moveto 2704 1356 lineto stroke 2704 1356 moveto 2728 1384 lineto stroke 2728 1384 moveto 2752 1408 lineto stroke 2752 1408 moveto 2772 1432 lineto stroke 2772 1432 moveto 2796 1460 lineto stroke 2796 1460 moveto 2820 1484 lineto stroke 2820 1484 moveto 2840 1508 lineto stroke 2840 1508 moveto 2860 1532 lineto stroke 2860 1532 moveto 2884 1556 lineto stroke 2884 1556 moveto 2908 1584 lineto stroke 2908 1584 moveto 2928 1608 lineto stroke 2928 1608 moveto 2948 1636 lineto stroke 2948 1636 moveto 2976 1672 lineto stroke 2976 1672 moveto 3004 1704 lineto stroke 3004 1704 moveto 3028 1736 lineto stroke 3028 1736 moveto 3052 1768 lineto stroke 3052 1768 moveto 3100 1832 lineto stroke 3100 1832 moveto 3144 1888 lineto stroke 3144 1888 moveto 3176 1936 lineto stroke 3176 1936 moveto 3208 1976 lineto stroke 3208 1976 moveto 3260 2056 lineto stroke 3260 2056 moveto 3296 2108 lineto stroke 3296 2108 moveto 3320 2144 lineto stroke 3320 2144 moveto 3336 2164 lineto stroke 3336 2164 moveto 3348 2188 lineto stroke 3348 2188 moveto 3356 2200 lineto stroke 3356 2200 moveto 3360 2208 lineto stroke 3360 2208 moveto 2624 1552 moveto 2624 1552 lineto stroke 2624 1552 moveto 2624 1552 moveto 2616 1548 lineto stroke 2616 1548 moveto 2604 1548 lineto stroke 2604 1548 moveto 2592 1540 lineto stroke 2592 1540 moveto 2580 1540 lineto stroke 2580 1540 moveto 2564 1536 lineto stroke 2564 1536 moveto 2548 1528 lineto stroke 2548 1528 moveto 2524 1524 lineto stroke 2524 1524 moveto 2500 1516 lineto stroke 2500 1516 moveto 2468 1504 lineto stroke 2468 1504 moveto 2428 1492 lineto stroke 2428 1492 moveto 2392 1484 lineto stroke 2392 1484 moveto 2352 1468 lineto stroke 2352 1468 moveto 2304 1456 lineto stroke 2304 1456 moveto 2252 1436 lineto stroke 2252 1436 moveto 2196 1416 lineto stroke 2196 1416 moveto 2132 1396 lineto stroke 2132 1396 moveto 2064 1368 lineto stroke 2064 1368 moveto 1996 1340 lineto stroke 1996 1340 moveto 1932 1316 lineto stroke 1932 1316 moveto 1864 1288 lineto stroke 1864 1288 moveto 1800 1256 lineto stroke 1800 1256 moveto 1736 1224 lineto stroke 1736 1224 moveto 1680 1192 lineto stroke 1680 1192 moveto 1624 1160 lineto stroke 1624 1160 moveto 1576 1128 lineto stroke 1576 1128 moveto 1528 1096 lineto stroke 1528 1096 moveto 1488 1064 lineto stroke 1488 1064 moveto 1452 1032 lineto stroke 1452 1032 moveto 1420 1000 lineto stroke 1420 1000 moveto 1396 972 lineto stroke 1396 972 moveto 1376 944 lineto stroke 1376 944 moveto 1360 920 lineto stroke 1360 920 moveto 1352 896 lineto stroke 1352 896 moveto 1344 872 lineto stroke 1344 872 moveto 1340 852 lineto stroke 1340 852 moveto 1340 828 lineto stroke 1340 828 moveto 1340 812 lineto stroke 1340 812 moveto 1344 792 lineto stroke 1344 792 moveto 1352 776 lineto stroke 1352 776 moveto 1360 764 lineto stroke 1360 764 moveto 1372 748 lineto stroke 1372 748 moveto 1384 736 lineto stroke 1384 736 moveto 1396 728 lineto stroke 1396 728 moveto 1412 720 lineto stroke 1412 720 moveto 1424 712 lineto stroke 1424 712 moveto 1440 704 lineto stroke 1440 704 moveto 1456 700 lineto stroke 1456 700 moveto 1472 696 lineto stroke 1472 696 moveto 1492 692 lineto stroke 1492 692 moveto 1508 688 lineto stroke 1508 688 moveto 1528 688 lineto stroke 1528 688 moveto 1548 684 lineto stroke 1548 684 moveto 1564 684 lineto stroke 1564 684 moveto 1584 684 lineto stroke 1584 684 moveto 1600 688 lineto stroke 1600 688 moveto 1620 688 lineto stroke 1620 688 moveto 1636 692 lineto stroke 1636 692 moveto 1652 692 lineto stroke 1652 692 moveto 1672 696 lineto stroke 1672 696 moveto 1688 700 lineto stroke 1688 700 moveto 1708 708 lineto stroke 1708 708 moveto 1724 712 lineto stroke 1724 712 moveto 1744 716 lineto stroke 1744 716 moveto 1760 724 lineto stroke 1760 724 moveto 1776 728 lineto stroke 1776 728 moveto 1796 736 lineto stroke 1796 736 moveto 1812 744 lineto stroke 1812 744 moveto 1832 752 lineto stroke 1832 752 moveto 1848 760 lineto stroke 1848 760 moveto 1864 768 lineto stroke 1864 768 moveto 1880 776 lineto stroke 1880 776 moveto 1896 788 lineto stroke 1896 788 moveto 1912 796 lineto stroke 1912 796 moveto 1928 804 lineto stroke 1928 804 moveto 1944 816 lineto stroke 1944 816 moveto 1960 824 lineto stroke 1960 824 moveto 1976 832 lineto stroke 1976 832 moveto 1988 844 lineto stroke 1988 844 moveto 2004 856 lineto stroke 2004 856 moveto 2020 864 lineto stroke 2020 864 moveto 2036 876 lineto stroke 2036 876 moveto 2048 888 lineto stroke 2048 888 moveto 2064 900 lineto stroke 2064 900 moveto 2080 912 lineto stroke 2080 912 moveto 2096 928 lineto stroke 2096 928 moveto 2112 940 lineto stroke 2112 940 moveto 2128 952 lineto stroke 2128 952 moveto 2144 968 lineto stroke 2144 968 moveto 2160 980 lineto stroke 2160 980 moveto 2172 992 lineto stroke 2172 992 moveto 2184 1004 lineto stroke 2184 1004 moveto 2200 1016 lineto stroke 2200 1016 moveto 2212 1028 lineto stroke 2212 1028 moveto 2224 1040 lineto stroke 2224 1040 moveto 2236 1056 lineto stroke 2236 1056 moveto 2248 1068 lineto stroke 2248 1068 moveto 2264 1080 lineto stroke 2264 1080 moveto 2276 1096 lineto stroke 2276 1096 moveto 2288 1112 lineto stroke 2288 1112 moveto 2304 1128 lineto stroke 2304 1128 moveto 2316 1140 lineto stroke 2316 1140 moveto 2328 1156 lineto stroke 2328 1156 moveto 2344 1172 lineto stroke 2344 1172 moveto 2356 1188 lineto stroke 2356 1188 moveto 2368 1204 lineto stroke 2368 1204 moveto 2384 1216 lineto stroke 2384 1216 moveto 2392 1232 lineto stroke 2392 1232 moveto 2404 1244 lineto stroke 2404 1244 moveto 2416 1260 lineto stroke 2416 1260 moveto 2424 1272 lineto stroke 2424 1272 moveto 2436 1288 lineto stroke 2436 1288 moveto 2448 1300 lineto stroke 2448 1300 moveto 2460 1312 lineto stroke 2460 1312 moveto 2468 1328 lineto stroke 2468 1328 moveto 2480 1344 lineto stroke 2480 1344 moveto 2492 1360 lineto stroke 2492 1360 moveto 2504 1376 lineto stroke 2504 1376 moveto 2516 1388 lineto stroke 2516 1388 moveto 2532 1412 lineto stroke 2532 1412 moveto 2544 1432 lineto stroke 2544 1432 moveto 2556 1452 lineto stroke 2556 1452 moveto 2568 1464 lineto stroke 2568 1464 moveto 2584 1492 lineto stroke 2584 1492 moveto 2600 1508 lineto stroke 2600 1508 moveto 2608 1524 lineto stroke 2608 1524 moveto 2612 1532 lineto stroke 2612 1532 moveto 2620 1540 lineto stroke 2620 1540 moveto 2624 1548 lineto stroke 2624 1548 moveto 2356 1316 moveto 2356 1316 lineto stroke 2356 1316 moveto 2356 1316 moveto 2344 1312 lineto stroke 2344 1312 moveto 2328 1308 lineto stroke 2328 1308 moveto 2320 1304 lineto stroke 2320 1304 moveto 2308 1300 lineto stroke 2308 1300 moveto 2292 1292 lineto stroke 2292 1292 moveto 2276 1288 lineto stroke 2276 1288 moveto 2260 1280 lineto stroke 2260 1280 moveto 2240 1276 lineto stroke 2240 1276 moveto 2216 1268 lineto stroke 2216 1268 moveto 2192 1256 lineto stroke 2192 1256 moveto 2168 1248 lineto stroke 2168 1248 moveto 2136 1236 lineto stroke 2136 1236 moveto 2104 1224 lineto stroke 2104 1224 moveto 2072 1208 lineto stroke 2072 1208 moveto 2036 1196 lineto stroke 2036 1196 moveto 2000 1176 lineto stroke 2000 1176 moveto 1960 1160 lineto stroke 1960 1160 moveto 1924 1144 lineto stroke 1924 1144 moveto 1884 1124 lineto stroke 1884 1124 moveto 1848 1104 lineto stroke 1848 1104 moveto 1812 1084 lineto stroke 1812 1084 moveto 1776 1068 lineto stroke 1776 1068 moveto 1744 1048 lineto stroke 1744 1048 moveto 1712 1028 lineto stroke 1712 1028 moveto 1684 1004 lineto stroke 1684 1004 moveto 1656 984 lineto stroke 1656 984 moveto 1628 964 lineto stroke 1628 964 moveto 1608 944 lineto stroke 1608 944 moveto 1584 924 lineto stroke 1584 924 moveto 1568 908 lineto stroke 1568 908 moveto 1552 888 lineto stroke 1552 888 moveto 1536 868 lineto stroke 1536 868 moveto 1528 852 lineto stroke 1528 852 moveto 1520 836 lineto stroke 1520 836 moveto 1512 824 lineto stroke 1512 824 moveto 1508 808 lineto stroke 1508 808 moveto 1504 796 lineto stroke 1504 796 moveto 1504 784 lineto stroke 1504 784 moveto 1504 772 lineto stroke 1504 772 moveto 1508 760 lineto stroke 1508 760 moveto 1512 752 lineto stroke 1512 752 moveto 1516 740 lineto stroke 1516 740 moveto 1524 736 lineto stroke 1524 736 moveto 1528 728 lineto stroke 1528 728 moveto 1536 720 lineto stroke 1536 720 moveto 1544 716 lineto stroke 1544 716 moveto 1556 712 lineto stroke 1556 712 moveto 1564 708 lineto stroke 1564 708 moveto 1576 704 lineto stroke 1576 704 moveto 1588 704 lineto stroke 1588 704 moveto 1600 700 lineto stroke 1600 700 moveto 1612 700 lineto stroke 1612 700 moveto 1624 700 lineto stroke 1624 700 moveto 1636 700 lineto stroke 1636 700 moveto 1648 700 lineto stroke 1648 700 moveto 1656 704 lineto stroke 1656 704 moveto 1668 704 lineto stroke 1668 704 moveto 1680 708 lineto stroke 1680 708 moveto 1692 708 lineto stroke 1692 708 moveto 1704 712 lineto stroke 1704 712 moveto 1716 716 lineto stroke 1716 716 moveto 1732 720 lineto stroke 1732 720 moveto 1744 724 lineto stroke 1744 724 moveto 1756 728 lineto stroke 1756 728 moveto 1768 736 lineto stroke 1768 736 moveto 1784 740 lineto stroke 1784 740 moveto 1796 748 lineto stroke 1796 748 moveto 1808 752 lineto stroke 1808 752 moveto 1820 760 lineto stroke 1820 760 moveto 1836 768 lineto stroke 1836 768 moveto 1848 776 lineto stroke 1848 776 moveto 1860 780 lineto stroke 1860 780 moveto 1872 788 lineto stroke 1872 788 moveto 1884 796 lineto stroke 1884 796 moveto 1892 804 lineto stroke 1892 804 moveto 1904 812 lineto stroke 1904 812 moveto 1916 820 lineto stroke 1916 820 moveto 1924 828 lineto stroke 1924 828 moveto 1936 836 lineto stroke 1936 836 moveto 1948 844 lineto stroke 1948 844 moveto 1956 852 lineto stroke 1956 852 moveto 1972 860 lineto stroke 1972 860 moveto 1984 872 lineto stroke 1984 872 moveto 1992 880 lineto stroke 1992 880 moveto 2004 892 lineto stroke 2004 892 moveto 2016 900 lineto stroke 2016 900 moveto 2028 912 lineto stroke 2028 912 moveto 2040 920 lineto stroke 2040 920 moveto 2048 932 lineto stroke 2048 932 moveto 2060 940 lineto stroke 2060 940 moveto 2068 948 lineto stroke 2068 948 moveto 2076 960 lineto stroke 2076 960 moveto 2088 968 lineto stroke 2088 968 moveto 2096 976 lineto stroke 2096 976 moveto 2104 988 lineto stroke 2104 988 moveto 2112 996 lineto stroke 2112 996 moveto 2120 1004 lineto stroke 2120 1004 moveto 2132 1016 lineto stroke 2132 1016 moveto 2140 1024 lineto stroke 2140 1024 moveto 2148 1036 lineto stroke 2148 1036 moveto 2156 1044 lineto stroke 2156 1044 moveto 2168 1056 lineto stroke 2168 1056 moveto 2176 1068 lineto stroke 2176 1068 moveto 2188 1080 lineto stroke 2188 1080 moveto 2196 1088 lineto stroke 2196 1088 moveto 2204 1100 lineto stroke 2204 1100 moveto 2216 1112 lineto stroke 2216 1112 moveto 2224 1124 lineto stroke 2224 1124 moveto 2232 1132 lineto stroke 2232 1132 moveto 2240 1144 lineto stroke 2240 1144 moveto 2244 1152 lineto stroke 2244 1152 moveto 2252 1160 lineto stroke 2252 1160 moveto 2260 1168 lineto stroke 2260 1168 moveto 2264 1176 lineto stroke 2264 1176 moveto 2272 1188 lineto stroke 2272 1188 moveto 2276 1196 lineto stroke 2276 1196 moveto 2284 1204 lineto stroke 2284 1204 moveto 2292 1212 lineto stroke 2292 1212 moveto 2296 1220 lineto stroke 2296 1220 moveto 2304 1228 lineto stroke 2304 1228 moveto 2308 1236 lineto stroke 2308 1236 moveto 2316 1248 lineto stroke 2316 1248 moveto 2324 1256 lineto stroke 2324 1256 moveto 2328 1264 lineto stroke 2328 1264 moveto 2332 1272 lineto stroke 2332 1272 moveto 2340 1284 lineto stroke 2340 1284 moveto 2348 1292 lineto stroke 2348 1292 moveto 2352 1300 lineto stroke 2352 1300 moveto 2360 1312 lineto stroke 2360 1312 moveto 2364 1320 lineto stroke 2364 1320 moveto 2152 1144 moveto 2152 1144 lineto stroke 2152 1144 moveto 2152 1144 moveto 2140 1140 lineto stroke 2140 1140 moveto 2132 1136 lineto stroke 2132 1136 moveto 2120 1132 lineto stroke 2120 1132 moveto 2108 1128 lineto stroke 2108 1128 moveto 2100 1120 lineto stroke 2100 1120 moveto 2084 1116 lineto stroke 2084 1116 moveto 2072 1108 lineto stroke 2072 1108 moveto 2056 1104 lineto stroke 2056 1104 moveto 2040 1096 lineto stroke 2040 1096 moveto 2020 1088 lineto stroke 2020 1088 moveto 2000 1076 lineto stroke 2000 1076 moveto 1980 1068 lineto stroke 1980 1068 moveto 1960 1056 lineto stroke 1960 1056 moveto 1936 1044 lineto stroke 1936 1044 moveto 1912 1032 lineto stroke 1912 1032 moveto 1892 1020 lineto stroke 1892 1020 moveto 1868 1008 lineto stroke 1868 1008 moveto 1848 996 lineto stroke 1848 996 moveto 1824 984 lineto stroke 1824 984 moveto 1804 972 lineto stroke 1804 972 moveto 1784 956 lineto stroke 1784 956 moveto 1764 944 lineto stroke 1764 944 moveto 1744 928 lineto stroke 1744 928 moveto 1728 916 lineto stroke 1728 916 moveto 1708 900 lineto stroke 1708 900 moveto 1696 888 lineto stroke 1696 888 moveto 1680 876 lineto stroke 1680 876 moveto 1668 864 lineto stroke 1668 864 moveto 1656 852 lineto stroke 1656 852 moveto 1648 840 lineto stroke 1648 840 moveto 1640 828 lineto stroke 1640 828 moveto 1632 816 lineto stroke 1632 816 moveto 1628 808 lineto stroke 1628 808 moveto 1624 800 lineto stroke 1624 800 moveto 1620 788 lineto stroke 1620 788 moveto 1616 780 lineto stroke 1616 780 moveto 1616 772 lineto stroke 1616 772 moveto 1616 760 lineto stroke 1616 760 moveto 1620 748 lineto stroke 1620 748 moveto 1628 740 lineto stroke 1628 740 moveto 1636 732 lineto stroke 1636 732 moveto 1648 728 lineto stroke 1648 728 moveto 1660 724 lineto stroke 1660 724 moveto 1676 724 lineto stroke 1676 724 moveto 1688 724 lineto stroke 1688 724 moveto 1704 728 lineto stroke 1704 728 moveto 1712 732 lineto stroke 1712 732 moveto 1720 732 lineto stroke 1720 732 moveto 1728 736 lineto stroke 1728 736 moveto 1736 736 lineto stroke 1736 736 moveto 1744 740 lineto stroke 1744 740 moveto 1756 744 lineto stroke 1756 744 moveto 1764 748 lineto stroke 1764 748 moveto 1772 752 lineto stroke 1772 752 moveto 1780 756 lineto stroke 1780 756 moveto 1792 760 lineto stroke 1792 760 moveto 1800 764 lineto stroke 1800 764 moveto 1808 772 lineto stroke 1808 772 moveto 1816 776 lineto stroke 1816 776 moveto 1828 780 lineto stroke 1828 780 moveto 1836 788 lineto stroke 1836 788 moveto 1844 792 lineto stroke 1844 792 moveto 1852 800 lineto stroke 1852 800 moveto 1860 804 lineto stroke 1860 804 moveto 1868 808 lineto stroke 1868 808 moveto 1876 816 lineto stroke 1876 816 moveto 1884 820 lineto stroke 1884 820 moveto 1888 828 lineto stroke 1888 828 moveto 1896 832 lineto stroke 1896 832 moveto 1904 840 lineto stroke 1904 840 moveto 1912 844 lineto stroke 1912 844 moveto 1920 852 lineto stroke 1920 852 moveto 1928 860 lineto stroke 1928 860 moveto 1936 868 lineto stroke 1936 868 moveto 1944 876 lineto stroke 1944 876 moveto 1952 884 lineto stroke 1952 884 moveto 1960 888 lineto stroke 1960 888 moveto 1968 896 lineto stroke 1968 896 moveto 1976 904 lineto stroke 1976 904 moveto 1984 912 lineto stroke 1984 912 moveto 1992 920 lineto stroke 1992 920 moveto 2000 928 lineto stroke 2000 928 moveto 2004 932 lineto stroke 2004 932 moveto 2012 940 lineto stroke 2012 940 moveto 2016 948 lineto stroke 2016 948 moveto 2024 952 lineto stroke 2024 952 moveto 2028 960 lineto stroke 2028 960 moveto 2036 964 lineto stroke 2036 964 moveto 2040 972 lineto stroke 2040 972 moveto 2044 980 lineto stroke 2044 980 moveto 2052 984 lineto stroke 2052 984 moveto 2056 992 lineto stroke 2056 992 moveto 2064 1000 lineto stroke 2064 1000 moveto 2068 1004 lineto stroke 2068 1004 moveto 2076 1012 lineto stroke 2076 1012 moveto 2080 1020 lineto stroke 2080 1020 moveto 2088 1028 lineto stroke 2088 1028 moveto 2092 1036 lineto stroke 2092 1036 moveto 2100 1044 lineto stroke 2100 1044 moveto 2104 1048 lineto stroke 2104 1048 moveto 2108 1056 lineto stroke 2108 1056 moveto 2120 1068 lineto stroke 2120 1068 moveto 2128 1076 lineto stroke 2128 1076 moveto 2136 1088 lineto stroke 2136 1088 moveto 2140 1096 lineto stroke 2140 1096 moveto 2148 1108 lineto stroke 2148 1108 moveto 2156 1116 lineto stroke 2156 1116 moveto 2160 1124 lineto stroke 2160 1124 moveto 2168 1132 lineto stroke 2168 1132 moveto 2172 1140 lineto stroke 2172 1140 moveto 2176 1148 lineto stroke 2176 1148 moveto 2184 1156 lineto stroke 2184 1156 moveto 1992 1012 moveto 1992 1012 lineto stroke 1992 1012 moveto 1992 1012 moveto 1984 1008 lineto stroke 1984 1008 moveto 1976 1004 lineto stroke 1976 1004 moveto 1964 996 lineto stroke 1964 996 moveto 1956 992 lineto stroke 1956 992 moveto 1944 988 lineto stroke 1944 988 moveto 1932 980 lineto stroke 1932 980 moveto 1920 972 lineto stroke 1920 972 moveto 1908 968 lineto stroke 1908 968 moveto 1896 960 lineto stroke 1896 960 moveto 1884 952 lineto stroke 1884 952 moveto 1872 944 lineto stroke 1872 944 moveto 1860 936 lineto stroke 1860 936 moveto 1844 928 lineto stroke 1844 928 moveto 1832 920 lineto stroke 1832 920 moveto 1820 912 lineto stroke 1820 912 moveto 1808 904 lineto stroke 1808 904 moveto 1796 896 lineto stroke 1796 896 moveto 1788 888 lineto stroke 1788 888 moveto 1776 880 lineto stroke 1776 880 moveto 1768 872 lineto stroke 1768 872 moveto 1756 860 lineto stroke 1756 860 moveto 1748 852 lineto stroke 1748 852 moveto 1740 844 lineto stroke 1740 844 moveto 1732 836 lineto stroke 1732 836 moveto 1724 832 lineto stroke 1724 832 moveto 1720 824 lineto stroke 1720 824 moveto 1716 816 lineto stroke 1716 816 moveto 1708 812 lineto stroke 1708 812 moveto 1704 800 lineto stroke 1704 800 moveto 1696 788 lineto stroke 1696 788 moveto 1696 780 lineto stroke 1696 780 moveto 1696 772 lineto stroke 1696 772 moveto 1696 760 lineto stroke 1696 760 moveto 1704 756 lineto stroke 1704 756 moveto 1716 752 lineto stroke 1716 752 moveto 1724 752 lineto stroke 1724 752 moveto 1736 756 lineto stroke 1736 756 moveto 1744 756 lineto stroke 1744 756 moveto 1752 760 lineto stroke 1752 760 moveto 1764 764 lineto stroke 1764 764 moveto 1776 768 lineto stroke 1776 768 moveto 1788 776 lineto stroke 1788 776 moveto 1800 784 lineto stroke 1800 784 moveto 1808 788 lineto stroke 1808 788 moveto 1820 796 lineto stroke 1820 796 moveto 1832 804 lineto stroke 1832 804 moveto 1844 812 lineto stroke 1844 812 moveto 1852 820 lineto stroke 1852 820 moveto 1864 828 lineto stroke 1864 828 moveto 1872 836 lineto stroke 1872 836 moveto 1884 848 lineto stroke 1884 848 moveto 1892 856 lineto stroke 1892 856 moveto 1900 860 lineto stroke 1900 860 moveto 1908 872 lineto stroke 1908 872 moveto 1920 880 lineto stroke 1920 880 moveto 1928 892 lineto stroke 1928 892 moveto 1940 900 lineto stroke 1940 900 moveto 1948 908 lineto stroke 1948 908 moveto 1956 920 lineto stroke 1956 920 moveto 1960 928 lineto stroke 1960 928 moveto 1968 936 lineto stroke 1968 936 moveto 1976 944 lineto stroke 1976 944 moveto 1984 952 lineto stroke 1984 952 moveto 1992 960 lineto stroke 1992 960 moveto 1996 968 lineto stroke 1996 968 moveto 2004 976 lineto stroke 2004 976 moveto 2012 984 lineto stroke 2012 984 moveto 2016 992 lineto stroke 2016 992 moveto 2020 1000 lineto stroke 2020 1000 moveto 2028 1008 lineto stroke 2028 1008 moveto 2032 1016 lineto stroke 2032 1016 moveto 2040 1020 lineto stroke 2040 1020 moveto 2044 1028 lineto stroke 2044 1028 moveto 2048 1036 lineto stroke 2048 1036 moveto 1868 904 moveto 1868 904 lineto stroke 1868 904 moveto 1868 904 moveto 1856 896 lineto stroke 1856 896 moveto 1844 888 lineto stroke 1844 888 moveto 1832 880 lineto stroke 1832 880 moveto 1828 876 lineto stroke 1828 876 moveto 1820 868 lineto stroke 1820 868 moveto 1808 860 lineto stroke 1808 860 moveto 1800 852 lineto stroke 1800 852 moveto 1788 844 lineto stroke 1788 844 moveto 1780 836 lineto stroke 1780 836 moveto 1772 828 lineto stroke 1772 828 moveto 1764 820 lineto stroke 1764 820 moveto 1760 812 lineto stroke 1760 812 moveto 1752 804 lineto stroke 1752 804 moveto 1748 800 lineto stroke 1748 800 moveto 1748 792 lineto stroke 1748 792 moveto 1748 784 lineto stroke 1748 784 moveto 1752 780 lineto stroke 1752 780 moveto 1760 780 lineto stroke 1760 780 moveto 1772 780 lineto stroke 1772 780 moveto 1780 784 lineto stroke 1780 784 moveto 1788 792 lineto stroke 1788 792 moveto 1796 796 lineto stroke 1796 796 moveto 1804 800 lineto stroke 1804 800 moveto 1808 804 lineto stroke 1808 804 moveto 1816 808 lineto stroke 1816 808 moveto 1824 812 lineto stroke 1824 812 moveto 1828 820 lineto stroke 1828 820 moveto 1836 824 lineto stroke 1836 824 moveto 1840 828 lineto stroke 1840 828 moveto 1844 832 lineto stroke 1844 832 moveto 1852 840 lineto stroke 1852 840 moveto 1856 844 lineto stroke 1856 844 moveto 1864 852 lineto stroke 1864 852 moveto 1872 856 lineto stroke 1872 856 moveto 1876 864 lineto stroke 1876 864 moveto 1884 868 lineto stroke 1884 868 moveto 1888 876 lineto stroke 1888 876 moveto 1896 884 lineto stroke 1896 884 moveto 1900 888 lineto stroke 1900 888 moveto 1908 896 lineto stroke 1908 896 moveto 1912 904 lineto stroke 1912 904 moveto 1920 908 lineto stroke 1920 908 moveto 1924 916 lineto stroke 1924 916 moveto 1932 924 lineto stroke 1932 924 moveto 1936 928 lineto stroke 1936 928 moveto 1940 936 lineto stroke 1940 936 moveto 1948 944 lineto stroke 1948 944 moveto 1952 948 lineto stroke 1952 948 moveto 0 3068 moveto showpage auto/07p/doc/include/clrTyMu0.png0000640000175000017500000024417713570013207014636 0ustar skskPNG  IHDRVNbKGD pHYs  ~tIME  IDATxwxTeLN%@hQ)"( ac."EHU@WHH$!8L&LpSqy'9s]A!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B_@ 7ߨzxI}6'iՊ=qbBߗDbcrLSPr _Ng_R_@ …m[v&3Vؾ]yo޽p羣w#(PJkV%ؠKNv6m][o}}ޝRNWm.HmTOy9^˚5SIvcBRSq8֭f/UTVUW@}]PQA|<}Ưbӵ+ LJ^;wyeϖ:ѨV+TVҨџe@QVVー[Tldd0s&?={O|-X((!pn4hÁ˅|-!N"Pm':n4~} z4o3Dxq͛k`b}@NOb\br}?!H"Pav%1͛ٿ|:tQթ;((A]+V͛),Q#fr4z7uu'N`в%#GVKV*,B?Dܹ6'z5iillȸq xu9q{l6s__yHObkj7[\8֙U`7BA$E]ս;N'Ltd~MbǏw\ڵÈcj޾lX,TTnc>sibXP@e%@Ba$Ņn uuTe%ǏwGs8DDв%re}^fЩle^ZlVڵ;ξCbN\.*SI WBR1hahCm`Dm^-2 5iSVv_ =[,Ns}NM%0޽wУͪUdfbjO*PBxs\>̒%DGS\L.pݻӦ f1b>zJ.j54lᢋ " ,.h33U۶5LHv;f # % #GT椤0}:3f{u|^D'Nd~~lSڷYӧ f3mZiՊoW4n rOTVr[ !@qiْ3gذKk-]GcG\.JJ=sV ̞]8brQVV-p`߾XYIicB9²l $;K7HLAAf=JLLXQ-frN6|twpVٰl,Z JwTnk3Ʃ8u萊QjNz9uZm7#s:ΦuksW.R)V,<\^jsjeKv.{QZ,4i_XqjP()!/2 (,<<.@p8X.={W ҭ?٦MfXZ,޳07jXU3b\!@?VdMc֬!&__9|;jM5ctDyy\v[LNF)~{_~1Ut1\.;ZɌ!@g;~\?;L~|S?ZDde~lշg1BoFAW^ɏ?llvDEpp%{h ܶ /Ÿ\\:^:G"PoWM5|..e@bb۹FolUz(->Uł?? ۽QuAA1sT@!&@ -[><3g*1QzzJ>>>?ko{\ʵ7R&=O-h1D);$hWGGUq(;v)Sη)Ssy's*c&ʹE׿ѣ\u qpPYJPv;͛{ygFXuDuDBC).fӦh1M7A8b ǓGq1~~kӵkˣqcF4oqȇ|rTٿee !D!(~7ctY^撁yo@FW_5YK͛ƍdeجO?D9CPWmF?yyХKg_tc]FqX;IJ 6K_{$SE<ƍ$ Z7)XR}^ /xq;TMfp1 ^RPU, NLQgO6i׎=~NTII*6VJKq:#֕loOt4 ^⭸ !0Lu9#{ `Ӧϯs l蹵DuD{ߟ xUq:ٽf&qiؐ#;s9l\vo͡CX, š55S#th%08/Ii 3 ̄f m^vY}x>7OB\x7V>h&O櫯:, #32mz43HOnϏ;7ILT#FxItRRzVgOLNbQ#vU￯ =3˱Ziޜ믯Yᆱ33QZfxE \8(BAv $.iX tt$SL ~$&͛k.d 3wݥ'N\. "!]9(ťz{=_)+XHX,4lh6;}._a~nE\9uz㍔^Rةw0biuS7VƎU>>paiсy ]_|+HI!4,OjpeYޝw(N oTn.@(.[;4;|M**j t@y7IlXWB)+ ݻKZ,32sIj'Nc 0dBևǃRPLJz:aV{O۲%t{+VR&Ux EEP!$uk,RS9xP>U *!A=&:!r/ṲCRS1 Az$'/Ή9stL V+{3lX`˖PQA,Y y{ΈXBA?O!ո1ZEf&))8AZsRRԾ}jΥ<|rl6/'s搚ɓ8ԫMs옹iuӦ o11{ a^v.8iVU+VÁ:ʣ3YbQrduD ?T6>BI GW|OVӪBFVbFŗ_2o_'N`S>}A²ez4~b '+6m5KѢyAdealK#jZV.ڕڪW!ąG"Pժ[722ؾb ~Eڥ۷UѣuY>>n͔)Ci)m2f 'N4:+Sq8hЀk)8a1cFL%z0~9/fP,,+nS'pEq9#IzL ee}gIX<"P ZNNx8qEX8dey9 (.Ϗ֭;V?>IX' W/22Ti)@`V]Z?\C׮7yGؤ &l'=R]23BxÇ{?pbs#;p8=V0֭Uci.} #%e;V-Xη__wMw+Y8VnuJr2 r :W `l(ڬ>hYe6s'N'^KZlٽr%;wۄV_kX\L@9ÁvEq7B\0$w99lԩf͗zz9XT~u,`JK 䩧GպYvr2v; 2>gFb͛su/U~Zǣii 7\4a 3#"fXT[ viv#.!_^,Z5"-UXw߶m4`/1a~oW\{y#ԐA8Y9Cv$%lx1.3d!!U'f k.{1#j,1w1UIiwB\H$W\a5' 6lP[s))LJ.]ؼYYFY{U[^+F!x8}%KΦU+=NLL4U _|Nc}TBBHNxsѣh!!pЩwn_Xh. `9#%mWUfB DcG|}IN&*JƪY34 8،Νi׎.]x% TNJHP;v)SԡCX֒W纤 sg7QY7sH TTР =mYYWJk7'6yHOE y.W_q$+'㥗 bx#ss-||jBel!uB5l֤El,7r%?C,_ڵIL өÆNA&Fx?oQ/_NA;xBv57~9l:u"&F74m]wzvvk']P`Vݻ/r]YVM aH Q&njJJHOg$#=sR̀S'7+֭bZ&,&?w'!A9wzYGEݒcO?UCvLİa*' ͣ`#\v{}7ulR^}oqߕb>1|oaBBXH(/ό=ҧl E`u)[C0ݫ".*+)*b*HL\Z`ظQϛGO?ӟ}F~>tB ݮjVj/ӣFTVr-QQQ,WuDyytʕ*+ ͟~-NѼ9O*ݫB>cc;gj@kUݫJKٻExi|94mʀ9ܓ}{.Xx*)I_]'Á{|?[ng.ᩧh7w7mjh4u+\=/ྱ[}q~:t00:ByNUg.)ߟ/> jDc!d:uD`6U^Nt4 -`nuv6v[O>\`V{1cXLBC=ջ* =zTTа!6ޫvϜY3ڷ7CGqpoWE`$;:5__y ?ߌ=:`KJ];0M  W ʕڥZϯ֥X~ --#W;vPRBp0͛{/(ד's99ĥcGƍNOiBBXм1#  $2q:;)SÁ͚Ѣi'ORYIP^kՊla:sD)ڶ>3?j{fzD@Ǥoݧ+HM%4^`}|>|SwdW̘_z~N355y1c BC1C_ߟfP#O5 A 2d[Xu͙#=+XjYe4JK k]O*{ѣY3g(.&(n:7jk__CAxmw3ghLٓ')+ߟ&0kGmڤkWAA?|lXleex*PF"osg ؿS>o]݊:#??nΙٸ*/?2Eu~* IDAT4;)+I բEOtE3h}iS͖325cbΟOv6M2vZߦ >>\sّ#8ѭ*-5'l\B`Z-/c[ <.fP֩Ֆ-j~ W?N7=}gM(*"8ɓZ?qYRa˖-ccBB1cUGDl6 tY6s6{_99ԯGK8Ȩ[VpTB5_ol6ٰAMԡC*3͹bڶMڴ}{.=0k%,Νjr/椘ޫtv;磔9@$$5PY ^6 7חb7QN$1'hܘ5xE/ۛv- ,eKZU+BC T\Mb";z kZ^=K/\窫U~7h -M VFjPcu-fdб#!!ӱ#j G?Tά^M׮lءS_KêC b+hl`7jV@!&MR6 3czLa>rDa͛XЁ:T_s0gVRRZ,!3'y3s.*^=x!=y2RǻkJc6LGDPRB߾[g1\ZJϞ 1 S'F` }g6po|YXX0*D%w`,*+2EGEyT{Fֶ4xmfn$f=Z?0@Ol;C` 7>\a=~<֙?V@l4X<JKfsV˼y84h+`OsBRUÁ+Wc d@…8deEW ̎W.PC~]vSmp8ee)+3￿JI0y>\'M"&.S'**TN{~9/O7ԃIOS'޽Ӹ1w-ϧ :7|ڵe:e GS5)5 6d8,_?cM#0.]'xZ99X6Ԗ*PF"e$աgΰv-@XuWGsBVϛGv6Lʱc4n̽RZ1t /B'3gKXARNgt`c/i\.Z`"`yy\rsw/ee8o>y[n1졬HEIMŘ3th?@!=))aTVpŵ>j$}$[#j6"曙4 9|!C(-U?d&GtG_h?dzc`'DE_r@˖w?V74w :YiRhۖV_SVfF`6M~>(-uW))TT`*UuD…#GX ?AgLJyZBO cgsEFRRBTVú{w=>br~PV}~Z7߬Ù::ԣ֭zxhؐ%K65Wǿ4o΄ fD`Ê_'0y AcW/O':V{dc0~57/3 k;zyŘsΝz:vTv_"ڶ套ԤI^6]ڴ^=F`4JpC͖s-4n̯ru_lzl|'E nB5w>\w W/TIItd~ax}"#uZjݚ}q80\:wjvz, D"P!.<͛U~jvqZRM^]U.9YRfT'O*@9T$5q$c%hGO?p!B\kdzRT*.|/y~~\}5 p0'B|.+qcƍ< KhCdsSZ#LSR׏D] ܶ<ժU#TkTiB D—_*__||F˖$ $$rѡmzφf͘1nXWAUWŋY Ё8}6~B'33X&Nrb 5|7ln{/7yu.m|w?7EtHV3en4;ilc_AL˖sBBq[Rrj{#ez.}?SP5א(/?3'ϬY*- P чS>3f-_]:dȜ9:>__sI8} 22l҄)STTEEl2ϞZ &E p:2ZA"le̙}F^ Gk}?\~9Wk!r%eet>\۶QQAv&PQA>k[f6B {$'Bt44k޺Guojs̮]U1g.E5g4ij2m,s4H [7~A`ѹ3}Μ1W7hp6-w&Wֹ3%%q:) ƍ4^q{O1cBm<>rO sϙ!\s^)+_?wYc<2#Fٵ^̈@zyvŤrqLRy0k۬;u_m**6uk<>KÇxc ˚>]UTxmtҬy YY4jĿ]׮LJyZHNW_QqkyF_{'}Wq{k;VpQ:v`d#%0'7nn+Zkl647GNU#GTxhݚ;Vohi`cTP!)/-߿f/P}XڕUJ:uJ>4#C=$s=,^v>v ;F&# 1 e<p9rv96m֌{x%Kԩip`˖ :T?Nz,\hmX|6غ\f ^=̛go)+aC^ݼ>w.t`@~`sDp85kNU`h(N'3{6˾2/Ex<,3B#$p88~}e:Z+eQQS:ͬZO?5װx1ѫzq#KOoϡCsME|@;f\p,[O-U+FPFvٲroj"H(D]~0@O^gS^nVP7ވAV˞={pUk7=͚kiY6׭YcO&YСz,vHO'#"aJM:կM _/:#~[Ӭ|c?.ww1u*5hP!]u邿?O];f:7ל@e%m۲cyv`Uت9|k:nIIDF2w.x뮣CZ7voՈ( kWb6CA  5k(.M@vod>?KÆ6w͹.um:<!CT8ukv a_zF8|LN&8^btFp0<@fYvN9}'1ț3B}|Z$-,l t!SN7{6[;<#"p8ܙv#G>"ڵcTp!994jġCfؾ=ǎQYIh(ii9ur$a#$yGbLXYY~Sd6'څJ<۽[g)cOkmx1%%yY쳺o_f!xt* ohЀC+/gFN bJKiԝ>W0wD{Eqۗi.,/I7,##и:E >\WaΦEQH[$$inVoDyZr%.]zR_gZKmgQTVҽ;}PP@X*9YUmv}W_[of>e(*gONhۖ1c?SRBϞZ{iiX,j/kњ]cmKCBعdNFl/;4֭Ո:< 櫯p0%%(źutQ-Z"#)*is8E s8M !#ØCpph*ad,P:B"/oɓDEiK/GϪ1cjFuz5rs %<\ũÇULZV͙B͛Gy9;3{4w 5'ޝW\֭ddв%w8s`noFGEQZJ*O?#"JKiԈ7xm3t̾+Vt)EEoΝdgs v;66~Nf:w[:;XEf !ğo2zLɓUbZ{8sPyyj 23Ua*,T*+UiU>rsUA*.VP\-[áΜQUy1uZ-ZTkcJkn0~Z^%'+C>o iiRm߮RSk63GۧRNvuUyyjdubbTE:xPM>@xum*3SݫV?NR'ȑԆ *=]&M믫7PY,"H_J&dfr/ccU IDAT0 Ϗwe"6^y#Tq1%%!z<3w`|kuncGݛw!9BhтP99ꭷHIf3硜k`NP˗{4>\#"غiْRkBCB6m6o",)S/=8y)+XDl6^x͎P#q:iӆ_ΎVVym6eE"/ǧ (/',>I~UGx1=|޼Jz;ϸ_CY{bc1c%$hF"("HDz {a y'}|{gYk]X\s7ϋĦ}̓- OK %x118  %%@SSx+آE;l띰o+).&L'TTѣ,'Ÿqիpu`r2 矸}[sB2I&ñcHK b8}."Į#ϊzՈȑA˖Xoَa).Y¢ =vbBOѨ͕+$Y؄ ޞu C[+V`lQJJ #uK3w놬,X[#/z㙗D"oXYA]&13 @D/_gm7o_~Ay9̄Q]0dM;v}66x2/YYJ,hj") UUXF@Sà .P@ ϊJhjW/AB= v`h֬Q/Q]=߳/ѣѦreː}}>FS[7"4Ν0t0*=z ?)f ?F\y3\]ۛA[#F$$MӁ` ظϞAM s%!lmq8`j+r--ܺR|%JJprA"Fx( Ф\gD7-;ǂw!6(^3g=|l/*7a/^@]17t Ø>۳]9BCQT˗ Ð!K%'ܿ"`&? D5 ii`l1cڵ}DGCO||۶3A]wkWڴC,z{ѽ;~"23!B[۷и8TWp55HK/tAY!:/^(Bc䍮\AEvm4= i4` fbdR3ƦOgΝ%Ff&tu1mz7GVTc`d~c01ټ- C_\ޡ::cqΜiiaj$$@KS[##7Wp4]5j>+^)4Qb"(ƔsPN)>GL 舜wΝк16~<ě7` 3Gqѣlp6v,rsʇ‡7my"t1>=X ooB*"nFf&\]8W\0M~& b|wוer ]9{mFC]\x7sfR~#y/w]wwC߾֍=} H$ DPSC߾ /\D|.trEGqXr2jj`iɗGa!vEv6Ц d2`BOA$,-! 0**HJD"PS>}Ha( D\5 LJoW.dC0OO~MPXڗ/@_в%VRC~= |5ss۷@;w33L ooΆT --/]\.X@S@p-[IIл?$[[}]]HHO۷F` ŋ-s'ڵc֬}{־=f֬];feN@I ڷGPz=H"%;#:[,Y**$ !y[ի() .^T'Ofiiсbw26l됗nްG>,MO_|yI&L>&4`l6gvǐ`ocǐ|[ UUK$J(P@@@͍nޤ3Y^8w~e>z)"h@JN|sHZI$[s*+1R,G7Sa!UTЍGOTQAՔKTUEEEdgH*<[RKL UWӻw%&(l.\R^ e!RS kTVFtefRY=}JDB_ݿO 1Fǎ唐@d QUEGɓD4sfF=x@DkІ 4ujc'55Ԁ)7=z` QPQ8sCd: V<ɞ<aÝ6~OԩMY۳۶cG`DF6nEJ  _~w.]()6m6Et4?,M05šC|㠱1 IIBq1缂X }}x)SXD8c`\5n99p %a(A Ct]D ;w('bbhF)k#gt:PAR` x$ ""*(< '} %k -iFR^ѲePy9c?YHnVnCT^N|tv(UTPiiúP9$Rd$SJ Sz:zEUVRB);䭁rNRʢΝ)?Y()Ht $ZV) EBGH}}1p ޼!ׯ3yع3- |"w[ܽ : ._cB&?R+}}{}˖!+ φ[{ӆ oغhw+z^WK{߾a4(vO(ٽq%%PGe KK.1g: deaJ>qK{Py |5)9e,,L %a`ܽ"t'B;t@B=–-@N?&T_û@0M6y.\R(gc7n@,F^ ;jy> `m/(+$$/=..@trt튮]ѽ;zF~4ÆaFddeK\ pm(>޼!GGyMMC>?8hkcXY5ܽv 02% l@=>ܲΟW\Ҡ1|8GNڶE|<%&˖1wwVT`HTV"'UUhgo @]͚ŐJ l#/5u.Tvf1t(jĢE1QFpqAe%u۷Gz:8 :Ç**0GD޽Cd$޿Gt4ېHХ \]2pag0b߭1cbcߟ<Gڲsr{YFtuM#G&gφ#bbxߟO'ggPhkyTW Fֱ ##1[FAS>>HKsW#0 .P@@@5kU~*'(4\D))D;vPVRBQTѫW=KTRB@xbbNTUXLgΐ>YXPGAA-͟O$SY? &>^I,2:|WSv6Dž'NPQegʕK?^z:UVg޿`H!*)hϧc]*+zntzRSٙŅh\ڲfϾq?&;Z>)(icdUU^LEݝtAx8i޿Gx8Əу۳٢ETUa*k_0x_ _]ׯq9#-EFY߾{wv" ۈARyՔsN+VBbl;<ӛ7JrOgϞu`m"ttн;NeO0iRR @K wy2?2f mfe۷ƹsχ!**PVFOοG!O~R+TTM`0޽^Hlۦd 1H~k$ FFS44pW̙b .P@ *qػw ׏x9NN&;0hrPU)ST _4?&*:+9add@[[MFfQ^Pw(| ai ''Ӻuoxܹ| ( Z 1e ɓMY;sef'|>z4i$hkO#!@utEB@@ !Tʋe" lތd!( UXI  kVp'`TWc4|Z;~h>>JN8yyx@]z)vEe%:wի w cƺu4o"699HKhzFF]*Vg3x@khjbLӱcLu5RRh8닜7o=|" 2J?EO6m@T-׺ut:݋Rt lk/Ba!p|޾*]J377TTK^u'Oq ˗_`hhf5}IؠAsgի=TUѷ/I$O^wG\RE|jҥhwחma|뇨(+w7K,;}}n<<߼AN.P@!ݻL$B68Az!'G.]2郺}rux'JJжD9s--|5-Y<<}V7sӦaҤ|8hjbZŷ N- بQl$.fL7n $fBZ440p`bcQ].] vvxcL)afxTU#<FFȠI. 4D$@&?S&LZ@u5-p9dsVV5k_s]ӦqOr dܐ!03C.ڸ:tznlh}z͹=al {{zyyܠA00pր\hgςPY n'ѷ/`a).iߞ8w"*+n֭!ҒSQXVڷ0Ez:qlmQ]t,80& Yiт zz(+Cx8BBʧ=d={rhZqO*/^8kkcs Ͳe11]!1 IDAT07G׮6ׯˆ ڴAޭg/31u)Əޮlh01Ѳcmaj ##S"?35 fOb  hs\R ӧ+9ccɉ]$Ӈ]'Ol%\˖Ӄ6WZD~Zq1tt-[p zHѻ7.W}- q=yB۶QJWPTӎf;Xͥ@j:fXzo`;Wp;w$!!TYIJ""H&[GRQс-GɡBڳRRK^}*-znMTVF.Q]!PŅI>͍޾":BBH,+W,͛i ֯ ~8»&W_ѳgPQA^06Vb0w.&OGc^p&v Ѯ]CJƍ|?cLlɈlI$D‹(Mgq;MGt*͞M{"3J^L?bz[Vo{yi3f ;͛c|NRΒ]; ^))- **prMJJxi{i>ef 0M 6yafBjy89 ''兝vdgɉ"#**$3w`NcPR""* K">G<(-EnxGG;]1h&Nğ⯿燪*+W͍.]} ,* 9060' -4DD >**y{zqqF ͚aR|I!!|w? ѽ;(%R)ttv-CB"fߡ?6K&rrxO`eը:{Oc6s'y{?`{qBj*QV{CCڅᅦkтlɌ) e۶!#8sݻܜ3SSfľٚ5HH>6l␔4dgo_^GcX;׈brk6>""GG*W~Bj*Z]Xca#~͞͞=FvCSorrXh(=܉dhi%!- yyƁHM.C}_)9VPߟ0C].@,F˖,EV>cGDDБ#4s&:u*<<3ƌQ$BmlЮ7I1zYƚLM|1] K@_6 BfGGV\viI6A_HHX~p򓓒ȑ,8;*..lz$'yslyZ._}>DM zg w'L`8L#G9ݺ)YHЭ1dՋM%Kgϰp!bc3"bJ=ʒ!C0>5jtG;B>)!9)'/ w koKqcSJ4Y͚IZ֭޺u^] lڔC[ތP;v66pq!7723HDFb,L޽cfb1t/uzx%*+1x0ظ둘ly]]ennPU=<<>Ed$83f`z;wBpBK.V;>!980''&g@j*``= c|| (op\y'WW}ݻ#8h WP^;*44мyص ݻ+P?E[4׶c qՒΝZ~Odڪ?ش-ӧQRH$7\YOpJv:D"kKhQIO@&CSb1۸ҥZLμad|z=~ ;zW?,zOB" 0n.Db"xٳBO?ѺuL.tQY 3366|hkS'̝po +,-ݻF °u(OӨ8ͪqZBffNyO?6mѬ:vx4M˗QR`k֭_u+ۻ01 o׳g!S'K:ŋ"89)ѬKaԨnQR[ۆZ˖ѣQw`ۧXAb\P6y2:]B&CV9aarjÇ,155!!c|.TG&ѺulDȻ|HM k[mmSԕIdɤvL[44PSSS]-|x) !͍FF|o:}R{*7 к5Gc.ŋ=0a\\-YnB~>,-qlto0ggCSS6*0z4*ƏoX_L> f Ώ1FFT4ǝ=]nBQZNѼ9224m Ǐ֭\M˗3WPVB?ѣӓ[;t &Ld2sgܼ ''(ZVSYY-Je2TZ,U0V%iH-~@ ˜&O^\04DǎrsB` s}ݺĄS2);7Wvm`DE%f2EV]r3+,=x sst=[?/?k667JM\hvvܝ;J_?hCQw׽;п?wl, 8p@a<~<צ 0hrE}=ant튅 +WhhpϞeQQZcsp45alRD00'ad2CK 2o K~VeŅ:&F[8D8%LRpvn4 `,ƿ{ oQby[ mؐ!/< BCql*@?[O7owzXhh`0b1deAW]'dfs/ab#G uk кrr DGVVHOGM 1|8 VHC` adXZb@,] mmӧ(0XRVi{=/>O9Jt|ܻװ9:``PCh7߰kאss]6l @e%FV^&:|8Gu5ƍJ񈌄pPݕ+{[ qMk 6ǵ?ϒCѮo|*KLz=)Hcc,\sL$$VV&yb@uQQHNFE |Hr# gg85k{7<<0n\cBArbib»o_MLKɼ ~4B"s`".- mR)$v}{ukXXy{¸]af;; 1UYޜWTT%٠AڵÈ20n@S')ҳYY W/`z⺯_sFeKX[lY۶\N02B.  CC[r00@N=צ TUk}[vL]4 ͛ +9}}BGꜧ'qCֱ#׻7TUѣqffɐTV: SQ9F.ee06^ӡ奥e%%"QIiUa^uVVDXb~f l,[F͛#"h(-U<=e`:w<^F۷\01A.\vrzm~=!<FFɓ731bhۖ{H :Z6mתf#GrPSCOHh1{67ag`CC`"TJе+bbСr%yhh@Uee\T'}7}APWGy9ٙK` ޼aS0??0^)9;+\+g_϶nEl,451e٣G|[^XUruew##͛cϞzsӦ uK`&Mbr5ɓϞ1oo0qC0++>/8231cOOY7{wTX,`!!(+ӡkkACvv((`,>8/pƗzzֆ>֬=EY/*+笜XF1>VuYؾ˹sl#0Ooh¦NEP0thvfwy+O`кadgeK9A[Ʊ/S[hhh`-/gֆ#7nd))E]1k w(櫯xי|^Jh(3iip`DZOA[Gvv04ĝ;ؾM#xA#`ggW?<[CCʬY,.͚ٹae]~[gOO>\/p &3˼PU=mCO9>s%%hgΠc? 33\ Ŗ3""gg%^QPsz_mm;χ.^-bǤI 3vb%6ܿ3bwG\1C_D55 [[XZB[na8iSNпa\;;;;;ίIhٲL….oeJKكhia8<}Jff -gd7na^稖ŋ͛EV8z۶)v?7cys~+#mތd`~q. ZzA"-Νa))ӫדpohۛoX_II lmC1ig".C_ćpܢEh07޽0@>|1r$P oGP\ }}|f {":wÇ_ MHr"6=]ۻoaw#1KܹS`*vozv6v`i/ӧ +'L`!!Ѐ#֬YON [ڰr/XS,?:? UUͯ:RRF9aa(+㇠/G:/Y= kkȫla''i3gݻѥKÏH@@#X6OFѧ;͛(( ֮Ӎ~^&L`O8sq,v:Тk83l|ȅGO=٦MOc(+5""10N)45b;mmҍ,* aؿ_sU>&VvN&]Q"t ~㌍af--KKaxb^̚=!Ѧ1M]-[b%ߤ'NӫUTп?ޥa]<hh`p<}JJJ׭c_}`H0AApa=wبQSTUwo{5x{UU886>ssX }X_=UU {jy%%T8Z77*+ѥ N'L`rswbrȯlƊ`hsNQu P] ##VU558@K ; gOb|XZӦa$'ǂjQF5~B4IhQ[-g4m_lxrk{ e'GP^++ޭltvJKѮ7ߟM qV >x !,ތq?^Aݶy [,`QQҪ兊 iy3EgPVSSINdFqq`e@a!TTxG@CCGB.—_:ش ukzqPUŘ1U$$$49tߧ!Cߟ\ zi w z)-h_M/^PNsF b*+1bK^H(8z` UUXL~D"E0:kXL p(%E=UWSl,ҪedTJ׮պI*)wWtJJ3 H@hӣ5kh8X**J)4)4jj3J zޥ+G( 䯿ՕΜ!y?LϞQXEDеkT[6Ç)$)3=6m_LGIItRC=S*.Rz,,uJI~TZiPϧ)', dׯI"3gs ds͍.^ٳP:w;ӿ?ݼɇd)0rs>%+fnQQRTT@Mbb #KK{Iy9I$Xtr$(1j'oHE!!TYIyy@lJtt@(7vLHRm60˩V#8 HXYijZƌyYͥ'nޤry*+K W\]I"-[( 23).Vc( IDAT; %ذ<0'Ohݺ~d ͚ P~>)ZND*),; KTXHb1*;nXL (4THkO?H,&oo~eTJNrz_ٽ (/jCCI&ׯ_υUy,dJIߤ'ee/,iڼ֬)/BC֖i~ 77H(2**DnVUUQn.I$GJ};ݻGt7ݿOϞѭ[bcCNQXOt%cҝ;L0ӱ#ݿDGSmݝ/ ׆f c_請wI&#QUI$TۧEE5y JUPEcâ:ۂ K%h4鱤11r<bc K;C/C61&or޳8q7k{XcEgA[[-FE0)UU:.6mb^ S~7o&'3?)):؈nM X^Ά>L7o``z: 屹lh`F+*l^|fe14dedddKYePϞĉ]XA[[&&2=))rCYap0 XRH~]FFFF濝UheEё|r_͍))d|CS'HK)bJhHi^,-sfZsrXWi0J%ZڲEEB oop xϖZH3, dNYTb.=*2222ulJGG3*{^^LKcv="m+wmXe"3w'tp*Ώ?6~]Fw;UטM=zii4XZ*ٰc𵶲LtVCͪ*T"hkKƘ cu?u*h^n̗_ Shn.ss`˼5/RQ7voR65̚ؾt)k}Bwn.[[>$++Y[={ݝ"dܺyyW_+J%aY☐@{\hh0䰡66Z͛ӱliaBu:a[xڨVΎ:b651?11fI 5GaFssrR1!7nΎgˊ(##߄9졟Kgg 2 T*D;kFŋwېۓ9p}IW3"fUu:fgsRq#T_;'$5ݝ:u:ӡz= kׄTr萨Jan-_ϧFGLN|>7o櫯y2%!!'Y[SD9kǨ( QP@QQgk+CC ljVK//j4gRh0HTdZ1 ɡJŚɠ FE1%(,/gAAk;d8K__FD0.Wa`3CafHw8|:+ė._fy9XR":"l JU DSDEXVjZZxi̞J5Nꅜbl  RMzXV{af}ѷ/R9>,> >}ѧݺ{w45 *q]>ӇCQtnP && z=PYJ89)##K̯p!F9:wFh@ݽ o 9hiA@,Ѻg҂@< .XF\5k855_mwt''6-c + i8g0q͍g## ze({k{ZZ"04 P1cѷ/1j,@Am8jkm^f[ǔ)Ph*x:wƬY4uu9w1bjj_Ǖ+=CÎ>}x2 RڊN~xQ(eϞMQR!16""if!Cs'݇ѵBI%Py9YeǑ%P7G2W*+ xyyz.\ѫLLPS4ߏH-_b?:wFYbcfK|qna? زnnx g~~| psK/icb8it:lۆ|Cd$FFr4a`|-a^غ]b~(ظz=xrY:ibcRᥗP\`RLx?A %KPU mRnjAv6O8ss$%)lڄѣouBQ[y0z4t:\F̘cѥ jj0d1zQ9:z y;xCX֣Gѣ".j O/="~5uصQML܌J!#!AVD?Ye~Æ1bx@ }ᶵl_~ǣ  ·j̚ŏ>”)05E͛شI|5<LLR!<i_…UUŋ8p<AAXĘOk8s&q \#>5JgAc#ll{1h"LOĉX>ct__LnK7mJqQfe[BÃj8|8_GSVFCx@)Sނ鉘lڄ޽agrz""~= @r2ڵX{yᥗnn|AxuӜ02P?Ν9F>uu(-;oS{,,x挈wqaKN//j(;J.&&r>PA@?Sr%x#G{wq*(@n. {֨Qܼ&Dv4?" | Ln`b \CslaF|!,01A@}6610kQq#._O6gODD`\ml,~O%KBk+СxM46bV|%pδsJK1c6)ݺa< fF|Ð!(*¼yŌhlɓ>"&ӧk]]x1v#\\X ˗03VsiʊS(.رDKK ,,AAXTO;; *B=Дk09# FD`˖|#*'r 9[طOe,2YY`aÅvB h̘1~p- 7xÜ IDAT<01ASbbp6n4 O>iLVV⩧Ч#D,0 X}HO++ ӧ S Ly9̴ii;xxyagnPеOBMM!:^|yy6M1c7fdp !\Ap*}WEDǹz5zXZY`0aء󣤂XL{Ǹq"- G  <=Z$^ȑ<=zx!YfG05ZR\"wO^(W/TAT1Mz;}{rP-"_,w\Yex-Μ A ak AܱcbQQ?֭2ÆuuGi)fB/|9&L@NHKڵpvƐ!A*VcRthѿ?q(/!>VV?ѷ/wA[Nca\`V\aj$pP_0W@ƌn cǢ Z\d?L}G7Ǎ94x{Ǐsx &7mz%aI}׮a{ː!,ʼ<.4>J[[1pbRJ Rɺ:64Օ7o ̍1lmeSiicmT7n32X~++YUoetXt0昛7#w-|l=KYR¯h($Z-#" U*n :Zy7 `v``F"cڗ ;:z=kko8<{qqU\;^S̜64ܽ.NTR{sM1>J%XYZ0:1 H1&LNfF#"*> ?Ux圙)0"vv>S,&>K{{*BhcÜլ/oNh  77CBfK( VaScbxY]CVfeq~VU։վLNJݻ\I~ |Rڎ ϏbD` j++ge%+*  킐<~ʲ2j&'X[˶6oM">8Fɓܭ rxdnP}ij;g2,jY[K_~yNHGjKeH^8#bmEI 2dmmL__޼ɨ(19114zee{2-V6 ÇЩ:uBu5i0fGڊt46bdF&<Us&^x&&B@^{ 曈u~0e qacvZ++.[ӧk(+ĉuktڵpqFEq8g_|? ž}Z''.\('Ѐ͛qbt5K|Y 0u@{iPG|ɓ#G 65.+lm͢"T?Ia@X\zS<={~~af& X^N ImʊWˋ ct4ymPFFOe\`}=y( ^&TLJ뙑HҾ2; gR[[M776405..hI)cN;ҶaInbn YZZ~\f{>+K<ǎF狇,x8JŖQ 1Zz{9&=ͬ;|11,.fK >IуNN`N׳BfdXFRJhb`:E;;zxϏ;/\LigPc\T2$DxG #0/fe%ER}PA??j4ꙑAyyyS$WFC{55ܷj5|95&&29J%?ܴGgٺbRB&Off&E|gM-ba![[3XUōʼṇGgK ʌۉw`p0h|%3$%%YY)^\ʸ8WF\DDw/Ғ^^uii d޸!~07ZJ__ϏWȓddd ]hm̀Z%tvfY@IIIٳ18X`@``s3әHEELH^Olld\XSCggSoRSm5+=]!\2޼iLx/2rcUˋ1V˼~ղ%%ܾ.+WB(E?У]\-*z=KJߡ%3r$=<Δ1/a*ջ7ӼzqB(##ܜ۶9޸ȃ7Q18N1%?'L`NHqhmmlj'ɉlhk,)a]XRBn󣏨V39,+#`P'|L>-JwJљĊ 2ѫ!x糪{T* Z Aa7dl;w2-lnD3gDGCp崳s'odu5~ӗrѥlmee%ӹ~=Ɔ7n0%ET kjWMOO޺e|FF!ZY530ׯ˖ӧdŅGPZΟgn.mm@OOtT*kBfAa9ym5s&t-笯gh'׳=$w%geAݝ 6&3Zʼn66aQxf Hqr 520?T,.83Qln:]ٳau5u:, ~ hkBSTz=3$mlZ(H0Ջ;w1^$| o'xfe*x8x+OOI illiaM -^ϜfgScHYSSX]͂Q\kk˜={ҟ9sEE4}%%%WJJ˕8AUUܲE\,*R( `avmϩز11lm^O7nKmn;?Jqp`BU*!IIBvT)T,SSLJ11LMen.KKG//\hY^BOO^r̟̋/y:%lNFGGE64U651$Dl{67ylZ-]]YSCvyy"I(YB~9 yyN>oo[IIS*= c}!12fQθ?Z7߈M^{aaB:ܵ)<,9|Xn&#q:̚2FE&ȟo_1&F &W ȫWEOEj*PU۶qnmmK;!֭@Z[sRbSo-V~~YSݻi0*cm-mlYtvfUȿC$''BIf66`TxTYVƹsVco*CƊx&'C}POmϝJH67S}w`kˤ$jlh`i)?'LLdy_شcp0Q񿮹P1i11\mb̎^ʳg ̜(go›7igMdT>藗U*x r֬XRprVN"֯gfh7kj1YZzz~RVVύR:OɶmbJihv$7ێ/+*,?]3dڻ I''&%PK~z{3)IzQYɔ;ۥԔDHRٹ+7y(/_lk3f 젅QQtpwM0Y_#GLJ,+[oNNMŜ=\|T8ffrfBc-8UUaiNIC3":wѣhfAbc0pvNGwޯ-9}ZdYV!RZj4ܓ^x:Ùra ҥ]`~׮ߟQQLKcVCC ߃$|'xOA6477SR¤$ &"QD N'61|Ú^Š ;G6+W"c7XYi;ƲjǚcڵϧFc06l`QQw(EK !?W wެaTztw%\]E'ɴCU 2b64h@@߾xy T*I77.[{E׹e s|=zx01h%MOH5=ļzQ>Zh640>*O$z+3Ӹݝ}TgnN w'.C Oce%jc$EE\xhg' 8sEEJӎLZ*w ^Ϫ*lB͍))~Ռ}θ8沺ZqWq$EPΨ(zx"#@r:~SI=2222]NbU<~..bFs{h |׳oŲ25ロMgvµ/  57?< Y]͋ɓOތF,嗙%쬷A{{>>dFX(?kkL01&Izx05j5XRb ϖlM탳/]]2w7Ùhzz( /oj(moBuH~Xnpr*d:mn':s$o`^> Ŵ4w_P@_' fjٓ{'K++2(B?…\_|#Gxz*=kƆ11,(Y AacXPŋʺ:2=W>Ʈ2;ŞhFD͍o䫯rv:c1FU 뒕/,T틇Ǝٳaa+abZD8jHIX=z G](VP  NNzݧ9]IQ[0sb((="%c1hN/A&_?)n?bpÇenn)SWS 1yN)Fј7Oq=z``<{OOP(`f ~LOO~8Es3LL0p &N#^^?]⢷Ohl^=0|8֯WXS'fC#abc2^HKuOSR+:w ߗ̟Ƣ"8@LrF9COO&&l"rejѫr"ʌQ,.66{qȠZaí'`a![ZE%Ev8`s3[[RޓH_ή]`c#us+I;w)0;eVV/wo>;UUT*:H>+Wè(q=!y2222 «W甆\IkkQHVғ'}^(JSmӨܨV3$x=Ҏ֯oM)m0l2ɸ67S˴Y[{3EޕϚt,-9`沩UULOն=c*+Ͱ0Y{P=AOO,#|9?e _c@KK9a33YP"ۛK!^ʰ0!&$ՕGԔƚOyy%QdUUqqA:};+* "o&TbZZme%054Ç"ڨ}ڏp"vﺝ=E6-L3=+Wxh +:aq̟B?qvc! &;/1{6,-1p :u JKr% ̠PS'tEE(*lmx8{_~d ooX!N/) IDAT8w.0adfr0aq8maft<5;xb7nԩhn3<ɧ9Z|W1e :uBn.Əv壏bHB3}'/n֖c YY7u;=zYqPQ^'ksJֿ?P]+ųM9s`n;v!022ww}c"(c$88kW<}`a kRb4ea5K1b9#Nso_)1{"2RD߯bD )SW+=98Q Γz<z)f 77A`f'ѱ_oe1Cѯ(W?sF?}K  nȑ{CNgTwoS̟OvvCs3Æa:+(Ο-`b }Ç _=}OQOA@_Rs"&ӧcr ݱ~=ƏǬY05ESwG^4ӦaS\z45ACθ>!C0q"*+ЀEE JԤx9 J_T1bLMquzzWVQp8 ϜQƊO<07dHH 1l&M^7ޚ{+С8s~)YN+i;WGTG ӧ+^\xQ1s&Z[ѯF nnBW({ z=H7 (]:{ﰨ,ʢ{/"EƚX؍=$j9'xMbD+v VTn`~̎k_5Y{k}x(ʮ]w//ڶ2Rxz@\W >5 hereKk̚EꅛVVLN\ B`lvvLR/?0}:5*+40g,X@vh4,\ΒeKqq['DÆT]t2d$EQ/pu%,#ؽY3HicKJpP,-qtGak+V"(++CİhM3HIG"#ܙIcc#.W_%8`յk8/dpwkk##9i|54ewӓ˗ Q CٰJ֭2) 44{kjٸ1..l#G>pKJj!!RXȉ2, OO<=)( '^TC燇 v-3gOF>>xzVKzznX[~FƏ7,>5 QOde) ٲ e(Ɔ  -LMF_{^Vۋ۵)-Zqˣ##WW0:6GGŶm˄F\\uR!%,LTW'N("&wwz}W< lޱ#Wk oo8P|e̒%JP/ѱEYP UUĉǧ땟~R5 GZՑ}[*˖)QQo_1oceiiʡCח pv&1a=%&FanΣN 5 P˼ MU+XMqsȈ;:t 2++}Sx9-(&0 iV.LN߾I3s0g\\pv }:NϏ>}(-ELFPAetU…JVm15++\] G22z6mDi|"^4j=z :"(Fݚs2wҼח^?_XZKX:ԳrJWTUac' a(tBzӢ+~!**Ԓd/vz!ʊ֭Ŗ-J޲M|})*bN0OCha$y&o0u*4nLh5xǎ@DVVϱcE~>GA7or2W3v6٬/S#8uJ&%ѭ͚qZnөc!'/~<D̘! Ã,|}\VIIp nM:%99͟/ L#rGt)Q23#h|lؐhٳ$+ǎBA x"H{~4mմl̚E|>XYq6˖?y%sþiVIrrhBǛ֭٪&g]9夦RXc-(xr@r8pY;'(?$5Npsc"Z##7cc._&%_׾lժzhQ'O{]˝;Mkk9f 燏R\˼.B߾_/[)SXD 6mh FsrL ?7u\.] ;yUsSQ-< dlgllؐP9q>F8p!~x1+Ȱ0|}131%_}騨 #416f$C  <)1sJff|}1z4/@l,FFܸҷ/qqclü2v1s&Z FFܽ˩S|%:shH|E2KFFr2/3b.Ա?YPG0mF?/=x;\^aoV˺uK='v%(77t:IyX<.0$0HO нvMjUN2+9s?>IiBع,pt@>nMbdDYNp! Vϡ[ʄ ??@QɓɸJBBOؐʨQ$$д)۫hkNW-oWgڔٮ:'NIeNRY5z=edRPuddX_=qwٳ#;}t/gz-$mjciaX 4`I!bb03CUN|OB۶Gh(g舿?VV*3ܼ?ӧk/V˅9X[Et"ġC P\,Z&9Y[V&*+RQ[7Ѥ`p*pv¢^J& ,Mvt2r"?7)*##++!4D&MBp<Ǐ덙իe]9s-F gj+l&t:41n:ټYUUXZ" @e hBj4$'(odHȿ_s'#GRVFvG΄1g͚qOFFo =Ě5ss 1  w/VU>XB꿠\224{CF8;SPP{KX8JJ3 O0cbfƙ3ڭ[٭ۦWwY89dfҡ+VЮu:RS9{D02E磏?/$&F]E6z>]Z^ZA_SիL_}UM_1=PSSJ5.<|QnG6mۣok̴isg8s1^-#"pt%K>1/eDܽ˚5̜׎/␒}D -Zp务.O.Ѐ'EUΟo; ++GڕUK ", <=dH $&iӴ? !puwj%>cc,,4ˋTbb?6mR:v&ojRY;8Gb"!Z }VVBBYNXJ\ˋ^jb^姟-3)-YDG aË IDATG gg~T@!%z_ qi#۷ٙR~LC]  Uz^{M.Y">{k.Y>k-[E((Ѐ'‚ qgdg3d3b͚1`oEP΄wDPXAY$(=h89o "҈ՕsEir떲fxDQAJi֌}EՖFќv/-MYRsP^NAeeu~У#G hF̛iJ%4Tc;i}Xq-,-%(f/hҬ͍1c6{}abS}$&ccѐȑ!%ŬXAz!g  ,dq,.{!CH-]*;wTy玚˓{9sd۶5YQ!O|`dq[V[_{M.]*w풧O˼-Eモ۷LU 3r*٪,-U?N֮%%@~q1mș3U_32/OJZSrvh|U3ɓ=YZ*?dcR)ˏ!33fmdvxQc\8b[gܹSΘQDžS Iy>$&)#z"qrgů*@׮r$1ahooͩy֭[[ŁU? 4`"05\xP{Kbc9x>}8|7ߤA}77! WWll6`jp@q.SjMMF oOӦb2P,Qvvm@Ң:`.o_닿?}*:$wkkpsAQ jOoiܘ?{zUٹS7N$&Ҳ%WRVƭ[SYjj;; #.NkceE")I4mEիpaoFC׮xzg^E k',yTR2|8Z1t0AKx8AY.oiDXeA\0dFaiի5k3}$;l<;w~< 9uuZ7ט8OOٳ$t-7-13m8P"ͱȈ'xM6oc7Oܙh֣ii$'k{;;v3;5I4kF` $NGy9/r"1i|u4NqIO>rd7=,P];t[oXmmBmu}uU%%rwp6w\~˶mUOUرuksj{wٶ-..8;NGVlwߩÆIE#OA x@˗gu#<|WcrVw9}]Ƞ,1b{7m"%7n0k+:ws | >Kd$FFoWcl֌SعDծiWpKy93f&y$)IN@بxӧ4IrIM}X矗&Ci)|G>Kj-{~w s.%%Z2:KKΟgֲU+5찲GGkXIo ?͙35>QJ9jQQtA\$Ѐ':[l׎u]9>#;[5"x5=ә4?$ ?d <,~~`k&H8 x 7f=ӧ#;zb#ϓ@e%6uoF憛@V545UݔVJ|TYƁwKf&׮un2) WWnެ#KL{΍Lj 0CN('NgSΝez'y떼rE.\( 2*J8!+*MLEdnrv=iZ?/ݓAV'w풥}]%/'Oʒ8r:9sd~}[vSu㲠@-+)99r^OpァV_PȑrNYV&ڇ)cu2?_ȕ+,oѣĉ9agn<%モ+W700`ே7NlԨLϞrʔ[eVܳGLpϗgȉr)]Rrry]ʴ4Uw@U/__=Λ'ϞUUgX/2=C{JV^R|@#"Ϟ%%jf^9C?D'ꗇCU,)˗?%WwȜfc(М9 yأ'$wߕKȹsk\TΛտ 6lذi?#Y;h4WSzz9xyZ8k̞sB-_zIvZ}S'9eʿ-\~* Ofdș3[rFŋeA,)ʪ*;RQ+22R/{aio/eAwOԈ:t))@Ry8I9.N.]*OO?UO^0j@~ܺU9#Տje^LMKvj\ײPVV>{àArYZ*KJҥ$*ÇU2;1bܹq&?4HΙ#War|~˿nP50lT|7Dw;AUDgQ\~RXQ^j(c bc15D9{V=內M7lɞ=̞Ν HV ;G=J` ]Ңm8;ӥ Ʉ+{sℰ%;;;gDJ(*R._V.T܄cGZ/F`P03 8Ph!VP77wVߑ[,X8 )*B}P8Pt*Νʆ Jh ܹۛ0rbb"4 ""A;XXKKqwysti{R;;ae >>x{;빪Rxx`k;$'˄(({yLVFF[W%gPXHUZSs<  (L$T@1 #0LQXHh(:}@@Zt88/eKFfF_?zDùr!CX`X48zT;vP%ɉm#:S8rGG W/qVkHCb=[U%bbpr"8X̙]BYBPU>|? '#C͚F6̘ݽ[YX;XTT!Ct4):wM],2"d^Q *\/~np]etO <2ؘ 16Vd@v7kFR:ii63y27W_Il,Ǐ@X克 II>7nFCp0w3h^^ҽ;bXm>ݝ"^{M_Ɏ=AA (bcśoj[xy' *+W* ۛΝ~0uUDEEaiiҥʏ?*G"Ԗz;;|}f1r]j%BBj8-9X[ }d$Wӧ둴~ST <=d.%*JBxK;uS$BB03ݻrݻ1{h(;A>Gm/\nRRUUP &P 3C%܄˦O <rLMټY{z];bb}{NNlH~L̙$%iNN\FPФ %%\Nd$ŤѲ%܉VKR66de1|8 ӧoǕjεkeBZþs'KTT7ސݻ ӑ?q(͚՞wٶ-aah4jK8u,zafΝt@U8PnMjPhg-Ge%dd?o_D~>[Qڕ}IKe׮DD(o_c<qvV+/^d+pҥȸ]vOi! | Qjj@̼* pHKS"ZXpmcRΰ/ Q#LL(,T]SDE3>'||}[[ڵe^c|""pq5<=yehEY23TceX(4";[YX89ԷޢgObb;WWe%"BXYao;}pNNh46*ڳG?_)*ff]BC=Zt$**DzzV)mHԺ'gg{QXHYEEܻ5[!0Xfȭ[>́6ߏtw88Щ|S%+nn[[:t+W*Wİab(7kkk8|)&%寵>&Mz п(&a89_\G+qSQa"/ rc&&t|i ES~7EBT|4< o'" уvϏ?$*Y0\\ /8z7Ԍh۶8j[>>ҹ3b>eF9 II+V(ii llݻڕ>c6OKS-RΝVV 66ѭ=zk^(5ӓHfz6ۧ^E nߦQ#mVΦTmZU*%x{VVL* }nD6"1Q@=HS-~~h-EEXY1q:||ptKHMex`z͟G ЧRyBgVv`;+hzM n(XXWV-piS3OKxTeҲe'{_9_OJU;v0p ^^z&O歷ZBQS'Hʘ7v#' XFzl [[YCռܲeys\]=5GsD=gٷ [ZN鄄)xs&_}ggӉ'Iwrd>Zܴ"2HlmBC6TBRot.eeRV6U~ 0 IDAT)e_kk浌#\rrajVPrٰ!ZjO7 A"V^UV36uo-[~ؼsR9C܆>}J}oܾ}' c}C`gG$@vNHWn&LOAڷgPvm[spn"+xx} ZRݟ@n.xy;lLϞr0MvdȐy260vj*_}uL~~rr iJ5 aQO/kg͒Æacï:g٫е- !0AISrT/oFFT).V=rsY\%?08 u@C"!*Lͬ,ܜd rW*~S赫E׮62˽kkܻWE,.ʺ##y% _? qw&&{{FY3\]iْ/ <''BBxVظ= \\ CJjjGG4 )I̛WիM/EΪ'夜{!F Hd]Ǚ0@D@T@D&UwHrR~>ݡ-aյ7 mVO?uԗ_>}D|<?̩S\HZ>M)/"JKuk(/BIO9}MX,,WoPѾ=K{D͂bDwk{W{fJֶՎVfRPg)l,- *p r3?~ίaA::i5-Ib"/-7\o:0~~cRWѣEM |ٳ#=;iiDFjӓ,੧=#1z.\`T]?zr.|e`9u* PRf˗AWbHookfxyeڴaۅJCʗ^];˙0mWm ť+[Q۫tv֧Fͱ*+)."o=ap9d>>ddpr@t741Ew=pw+;JKKkz[ ,-<4aaug2a08*+y!^݇7W_II0祩Rx3-ô_HU4YhUU7jUEֹg[_ 5YYUuu%w cfF`-7jJ_dI DE-Ki)|9YYxz_89ɓѻ7:Dm-mp:U;qvf/f֯ooz+u/{{BBXtӇKL7:$)__%xqƱcͶءoM?46J\?LnܹS~ dsjOa!:tgֶn%- ;;f2}9Bm-aaڥKakg534Hjee ,VVy5bΐ &IbZ[VZ^[S^UU|L&}="L#BBN &[[N "9yIM%$m9rP<<عKK/ ||K ܈g6OhfӳŒ%*#C  chL0nntD׮bRiVV[˧RZ>=:bzu䈊8;ck+a؁o?wwjk77|}iۖ?QwUenժhݚuk_b~mffooN_ㅫ+ܘ$GߟmO4aIVona`G ?A:3,=8?(ۣi^ĹsM&WV[R{uk;V0A88s'Ѹӳ'=!%r:!!˴ooCW/aѹxqQFt499Y6nT&BB&0aĖ-a'8zٙƏe?^Ӫ={j۶ pwݝXFۋ'x@a5e7PT˭edS)fCR]qqL&x@t nmܨڵsgymT|LJŪUwOIQnn''eԿ'Qf{=Ln xil,47jl 54A9dU6_!bbN9Ӵ755Mb m@DHQQ嗵*'t$-Syyj"ա.3ݩ. nnƊ-R11ggxQ ^]0@gSGOO]ݝx22ظݑvfMcm?P^NǎZ^&0:vd4QRΝ<8V1gΝ34=#4slwj^xz΢EV; WWmc8ڴAJ**ذSoJ(fP 2ȇ|HC7IItu]5P99K9oǁSh?,v )wo.\ 8;;庫'(HLNb"DD,zKһ]lŅ DD+`**1 зxFۛ}t23iőJe%ik&S[[1k~?_]*** 33ۛ6m8 : qsxx0`PCD>wH!$F 1B3? wb ϐO>){N&&6[9RK_/ʟ~2?_n"_fgt)zUVW͛-RdzW^ kk+SNW^ʳge}~]Ι#cA]JxB>-R29Y!Ye%Y_/YYodQ,,SP<ٯܴIuuݨ>%퓚&]ki" duղB˼{u*_yV׻sr8}_BoaDCr2 ,eN$%၃.ic(AF. dgk˗Ncóر8dootT0&1\88YӴ8p mڐsuYYvtueb:<<()!0p?zfϦ_?:te$\]INCiSV_3`;F(ׯ;J}=;w2hЭO>{MCׯoɚ5w+| ǎё~b@m$پ=11Mg7>7Y8e߬}3RP@f&~+`0F9Q\LT IJ--~hșXH99vf\յ ‚m~@XX\]IL˗@Q-^xAz/CGAxyѷ/al߮~YC#֮m*(-U˖)>>zZ ~z}1|8NN|%Rbf nn">lѥ&ǂ~Pډ`}mܨ-RfV99ers)/rPI4P>"H[[C(-%?t.]bVf࣏UZ]`eʕF o# 40!xQ뵹s55lrjKNi)VVLʕڑ#ݝY+3prbxyUƎW/JKy]z``Y׎QYɗ_'Qpw''ɓ?֬=zLE}$;m[vɉUCev@y9;5q%3p1x{₝\ĎH޽}wo?On.[9[zyၓθ266zR 7T._WxR>750000h9e|ylqH9m{zU{YP w 2/O%J8 RY 9"en|EٳLNJɒ9y>LZyQΕYYNVWe˚'/^+EOFPأܺUf))3\YW׻>(V^ RJk%rRY^.OܹdJ,+;v[5'ej9o)7lW`ٽ1CZ%?Ĩ c$B J Ű0ܨ3g E.U"!Qsg<,}V&'pLM,}d^ܸQ~\7XX/.ȿU_OMs}di2=].^,;tYYAܷ%Kٳ2=]h2/Oȕ++yy3͜)m*%ի| 7r>u0c$B #OϒNs&.\ښ$5M{{>DKNFL#BOZ%'OfZ**t>FareeMe%lJv=} mf qqGٺ^}U֞yC07'"_f lNM m6B|u͙?i2t(+Wk;xU6apqObΞ%;: `@M#+K>-'Nd^4V$)p89d y=Οgt#8ZΟ&o"?h!W.5-JcȫCPV"9YΝuqE _|DB~~ES3ms$<=?t[SV&>waNdN77}PVCBz+jB qu%,[Ц ~~wXBrNgKxyaecC0{j)Ek˗EQffЀ-FTUѽHH'O_YծDZ )yFtkgoi Fk#8:XѴ8`I)w'- 6m5`nLs\f歷UdϞɲU+._23#?9|X{ICb" ҧkҿ?dgءǏ/Hl,Jq$C#ril~kWy]fhI|4Hܼ~Rjҡ%>@>|!oGeR88`gfJQ[f+EYRVFy.Nq1bmi>=z<2;s9v:UNlW/9m|᧟))r֬f?XfdHS&nɑ;wJ@JyIWeV,. JM>(YVUS'srRҥ2/OL?4%Q/i1u23iҋ/ۥgΔ/˂Y_/efܾ]-;vȊ qz IDAT|;q'3U-eU~&dqϗ23Sfdt&SSeJLIѿmJzU>,^~|9#j`F\F\رE"";Ӯ |mS?,hlGh/Eh(EEX>>+WҺ5t,/W;wҚdn.TVr0~~xxн;VV⧟PX-R; __<<Ёfwߩ*퍿?nnѣnnU~;O#WmKp0:ʙ3jVp:zW^Nq1R_`eX[h/nVVRRBv6Wr\Rad0@ѱ0AxxؼY֯WJ ]}m0qξ589Mt4 SEOo† j|{쌥%N۔)woag'N*%_}"z;zuWՙ3!giZ^##* 33MNV npsM !FS4ťbM ffx{_9ɘsCOwByU TVK/iEExz2en| s1e߸|^?{cǰW/֬!2״5lmya,hzϓOr Bǚ5Z.bmMּ>&YR^}ٵkݛwe]nZmNˉ )oRVQYW܂i<%7Ͷ2]a@Jy"׿j՜:Ee^hzx ]/-2R˗SXH` &~4x]zf(,Ã{Eq駤bk˘1|UmٶJ|}<~b`wwʕT^]KO֖ KmP-4T[˗)/ё} w ?ggf̸s'qG!Ь,4 !n]پ=`}b$B "3XMxzRUGCPT=zC֖y+//XZۧ  mʉlܨQ]P<8 vߟ\}rѺ5DF LSa#"Dt)j{))MydtՋ;;faf&mQtq *oWϔ++9ލ|v+WT+;LZ!%̇Ku5Ws႑}b@:`e%rsUYiQKm:}z@Gn.^^R=$\\;wQTDHB++ѾqشIݫ!!OqZBwk*(P/ SKVxx~iuߟPu|oW=$<<((࣏ # //uYc]2`[r >>@B#GRqé߯ μO?m:t5Ky{ ;;//i׎}9RDGW"uk\\B>f"6GG0գޝjj8~y={6xx?QNLM//_[4V99eS^ ssW_5_盶;'5M t"Ouu23S/.ϟJfCQVUbًzYVl,dMϗ7&6m&$#WBȌ qcʬ,ir֬_LZ%͓gʴ4YT$ղH^&/]+Wʷnaʕܹ&iFΞ-7l|Yr6wܲEF/# 40;8ihPP&:wDn늦LѶ-ffzw (:tښs?~be… XZ=gOtmggZ֩kהR"&oo:t`\\**D\R^.S@^ էۛ#ь7(OO}l` FZqE"-VT55\] bDѭXR9AAxy5 oyq;Weerll''<= &!gO=%x@t"ڷZJ W„JINxyaaAI w/ ǏŅ2믛GϏNܳGҥx^ƍLX!g֯ёŋye S9b[o黶m:QZʇqpt!O~YSTK/7Md.XX3ϰmx{ݺԳ7^(,$ _#G55s書0g/t'r0Y$Z^HjjjZ()u_갰++pt 33ihsD1@gn Ņ :p $;OOJJرCcE6xB,Y‘#ag}l٢~XȢE ?^LX};T"4 xEu+xzҭzdYxy=0c}7fd/Taa"8y!gg|}Ŗ-Q?WNNz'$$pZ_߼=񡱑S"3MCӨ AAL`I=''S(NY>ڶmF 40;(D؈rUP`ZS].^ ;gQQXZl~_qXV;VL入ؿ_z-ػW֊KݝDsJ5h us2{6xxе+iiMu+~EHűmݺ5[nؠI%(naAA1sf3k=[ __Ӑ(ŹssBWmzj^wj|5g.CI EESRBy9GYEE瓑+Y7#Gj)10000DN$MC6#{N> &ϟ?,O{4XXIS۶mTZu([eQQdړ'%Hff6JRdFiiMrM/UY]-_[6wBY]-cr(YV&zKK{O9#dU4!?RI9Sޡb֭rǎ;U_/whhhnr(*x-*+c{tn.ݍeʸrEnxcg<=y䑦| ._ٙ)S'NP[|%xynjoMʹsѯ761z6g/$$˸q6͛FL BrW hYYXXp-c`Ҥll(,9KD]CӦ }ɤN AAEEC*_{QѩW+ %Em+BCqsUq{3}:x{sT$s =%/Ç1 Q5+jjѹ3"+K\,{;W oo\\&/[ۖAسG͟bg?[bP)h7:Z4B ;;Ѿ=ps"г8OOxi# 40kh٦o/] 17%iӦޜ,-uBY FnǵLx6lrssmCӈѣC`m JJe~y$JôiڪU;3MQTQ֧e մjŬY̙B5f6s&OS[K62nnr4l@J 55е+/ Oۏ''n-rf/]~Cns# 40vZc ׮ʣGĉbhl gOYZ?>S \\pv$%ӘcvTqq"(oo231 8rD̙yxP<=i^/q #FGʘw|sk@oZP ??퉈GڵֵedC=ӧOH!!$%1q8P(^^{3 ӴS|Eѳ'44pߋ &z"RSouH7ၳ3n͘1"(HAa]yjd+hhooёJIHzKүpvGG1f7X\\Ix.n"ڴ1e?).V׮{023qw7I4vmPW7ߨc.aaa<XYGD#nX.[ d ]2cIJ[)%Z֣qrsȑb$Ӂ-oۢ_?>%: xzymqp 'i֭juP KKjkAt4;3y4I+Cs=쌹9yyϻMٳ") KK**0uǻrzptqaa@y={{Ξbnѣ䄥Z^Uqq"2ww,` \\2DkZGXҀ  +G٣cTaÃ(Z3[7ѣqv&077իɳݻӽ;_իx{#%AA$$0jhllU ??lmfm…jlU_/L5546bm#nnu:z/ceEe%;SOib@h)QJr;uu"p挚0A_O|<,YtTqq"$''VO4H2DOpB6ss\/ZoorsjHFp0GoRRDl,>>DFҶXJ>zHWƌѬ3bkrljX##Fh|Åvvҡ>(t$ҧ>j:էpuII!;2(-J*+.\RR'fdl`!{LN&njѿG>9֭2+K#￵zӲHN.?P^ ϟ/dc.gΔUUr 88ȓ'eqJrܷOΜ)ǎm [o eZx9r_"6[[@:%llV>}à1~%$DpSSTT4*-5IebcU[kL #ZG߸9xzcct)?_EEPy󕗧tYa7? n![o)>^vsWkkקpx@ZQbcUX8zu},K7ϼ皘К5QBjjV^nʲz%'Ϻa٩ zZ['::]jIjjO?nmؠvƒdۚvS/lWVwm:c۫s4=-KrrizZ:qB۶[@b^OT8~,PVkjmؘg55١t~MzWmS<=~\Y}a޽V$g344^h_kX]ڜ{5nFFI?ntNRRFƬ.F7޲8zԉ5~RS^g= 9Ѯ^,QN6n~s Zp_32/?:;+L W3AI4v78&5i~㏝R+3Sm捎<ԲeURbfM|s]fR%%)7Wt)ZkSLm`K)#C))JL˥quu7?XD pr#'ǬXޭY#[[իM$lB!߯`P/Gґ#N0h/WVn>7+W]JKSY LOϬɛ+)I>֮UI fG1?,[۷ۍؘ+Jv}=Op n۱*(ɓڷoTMavRzBknWc>?,:M{ 2:r4`]~ ~ {y|jqHE)M#3PZJ+jY+ٞnctyR^_Ä'sl+-8Eýj6~ј ̻;><3cG"ql 9y2i¼iF"XMn^j?^Bp*c2l^ׁ\A $}}ϴ5qwS#W3Q6{?Sـכ@U'U'U'U'U'U'U'U'֪d3go-a3$ҥfEk|?\o= R[hgDJIW"K6rU`J}kNcv[@91yN7\aZN!U5G 8u_ɥrל)[;ds{5ǩ[ͥ[{j·֛Kԣ[{*u@W@W@W@W@W@W@W@Wd79[UN#V5%gO~2%+Xi@|{zW, xRɚ7fo*5~mYJVx|}/@ zh۶G WN:::x0g MD IENDB`auto/07p/doc/include/hopfbif.eps0000640000175000017500000075540013570013207014573 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .138629716.138798820 %%CreationDate: Fri Nov 30 10:27:57 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: hopfbif.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.382848472 241.761927653 moveto 382.652003608 239.342755338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.652003608 239.342755338 moveto 384.80292644 236.752775026 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.80292644 236.752775026 moveto 386.830348088 234.000128556 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.830348088 234.000128556 moveto 388.729450048 231.093653904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.729450048 231.093653904 moveto 390.57261994 227.901493943 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.57261994 227.901493943 moveto 392.266413752 224.563103914 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.266413752 224.563103914 moveto 393.806978244 221.090544185 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 393.806978244 221.090544185 moveto 395.19103076 217.496371041 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.19103076 217.496371041 moveto 396.28426812 214.22097704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.28426812 214.22097704 moveto 397.251005324 210.8695272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.251005324 210.8695272 moveto 398.090064276 207.451384016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.090064276 207.451384016 moveto 398.800600368 203.976003737 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.800600368 203.976003737 moveto 399.361116876 200.595968378 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.361116876 200.595968378 moveto 399.80261728 197.180381183 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.80261728 197.180381183 moveto 400.125176316 193.737607742 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.125176316 193.737607742 moveto 400.329119328 190.275946525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.329119328 190.275946525 moveto 400.414904192 186.817530605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.414904192 186.817530605 moveto 400.384374332 183.35649325 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.384374332 183.35649325 moveto 400.238537124 179.90065964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.238537124 179.90065964 moveto 399.978608992 176.457679585 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.978608992 176.457679585 moveto 399.597084396 172.964184825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.597084396 172.964184825 moveto 399.09986858 169.499544135 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.09986858 169.499544135 moveto 398.488868876 166.071196425 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.488868876 166.071196425 moveto 397.766179464 162.68630896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.766179464 162.68630896 moveto 396.892378008 159.196635555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.892378008 159.196635555 moveto 395.901456016 155.76968206 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.901456016 155.76968206 moveto 394.7964096 152.41261978 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.7964096 152.41261978 moveto 393.580416144 149.1322362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 393.580416144 149.1322362 moveto 392.102831996 145.584073705 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.102831996 145.584073705 moveto 390.497172304 142.14672061 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.497172304 142.14672061 moveto 388.768499412 138.827758945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.768499412 138.827758945 moveto 386.922091528 135.63414755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.922091528 135.63414755 moveto 384.869746488 132.433191625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.869746488 132.433191625 moveto 382.700966524 129.382964695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.700966524 129.382964695 moveto 380.422449904 126.4892442 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.422449904 126.4892442 moveto 378.041077464 123.757066525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.041077464 123.757066525 moveto 375.805087412 121.42923007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.805087412 121.42923007 moveto 373.496063384 119.239676735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.496063384 119.239676735 moveto 371.11939024 117.19060678 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 371.11939024 117.19060678 moveto 368.680517732 115.28375658 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.680517732 115.28375658 moveto 366.38943588 113.658126015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.38943588 113.658126015 moveto 364.054776324 112.154325205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 364.054776324 112.154325205 moveto 361.68084508 110.7727172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.68084508 110.7727172 moveto 359.271951292 109.513370505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.271951292 109.513370505 moveto 356.906008236 108.40842487 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.906008236 108.40842487 moveto 354.51512712 107.41786897 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.51512712 107.41786897 moveto 352.103191304 106.54103143 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 352.103191304 106.54103143 moveto 349.674049376 105.777022205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.674049376 105.777022205 moveto 347.220026108 105.121945795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.220026108 105.121945795 moveto 344.756282332 104.57833955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 344.756282332 104.57833955 moveto 342.286562048 104.1447091 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.286562048 104.1447091 moveto 339.814539972 103.819389345 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.814539972 103.819389345 moveto 337.223172016 103.592558975 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.223172016 103.592558975 moveto 334.637283824 103.48060587 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.637283824 103.48060587 moveto 332.060820716 103.48110654 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.060820716 103.48110654 moveto 329.497613652 103.5915026 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.497613652 103.5915026 moveto 326.581478696 103.84967014 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.581478696 103.84967014 moveto 323.693003868 104.244443015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.693003868 104.244443015 moveto 320.837352964 104.771507955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.837352964 104.771507955 moveto 318.019466476 105.426453815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.019466476 105.426453815 moveto 315.07470268 106.25664679 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.07470268 106.25664679 moveto 312.183172852 107.22050711 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.183172852 107.22050711 moveto 309.349963296 108.312641065 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.349963296 108.312641065 moveto 306.579888028 109.527691735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.579888028 109.527691735 moveto 303.963133632 110.815824795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.963133632 110.815824795 moveto 301.413691772 112.209451655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.413691772 112.209451655 moveto 298.935255588 113.703981295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.935255588 113.703981295 moveto 296.531321408 115.29495485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.531321408 115.29495485 moveto 294.077956688 117.074458225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.077956688 117.074458225 moveto 291.715007604 118.95177306 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.715007604 118.95177306 moveto 289.445974476 120.922240565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.445974476 120.922240565 moveto 287.274183456 122.981427015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.274183456 122.981427015 moveto 285.287460436 125.033748095 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.287460436 125.033748095 moveto 283.395586136 127.160158545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.395586136 127.160158545 moveto 281.601125744 129.357355255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.601125744 129.357355255 moveto 279.906553472 131.62222464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.906553472 131.62222464 moveto 278.262245656 134.03169461 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.262245656 134.03169461 moveto 276.729820116 136.507316055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.729820116 136.507316055 moveto 275.311776856 139.04622775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.311776856 139.04622775 moveto 274.010556312 141.645734875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.010556312 141.645734875 moveto 272.84873706 144.25499861 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.84873706 144.25499861 moveto 271.804095972 146.91794825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.804095972 146.91794825 moveto 270.878809192 149.63238265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.878809192 149.63238265 moveto 270.075012832 152.3961707 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.075012832 152.3961707 moveto 269.413187532 155.123153475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.413187532 155.123153475 moveto 268.869598264 157.89275125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.869598264 157.89275125 moveto 268.446077424 160.703061445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.446077424 160.703061445 moveto 268.144408736 163.552143945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.144408736 163.552143945 moveto 267.963267716 166.515713105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.963267716 166.515713105 moveto 267.914208928 169.51577266 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.914208928 169.51577266 moveto 267.998945128 172.5499088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.998945128 172.5499088 moveto 268.21908886 175.61553366 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.21908886 175.61553366 moveto 268.617052508 179.003954335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.617052508 179.003954335 moveto 269.180822232 182.42274352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.180822232 182.42274352 moveto 269.911944772 185.867480875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.911944772 185.867480875 moveto 270.811703396 189.333278895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.811703396 189.333278895 moveto 271.863818132 192.762523436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.863818132 192.762523436 moveto 273.081128308 196.201245097 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.081128308 196.201245097 moveto 274.463881796 199.643138516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.463881796 199.643138516 moveto 276.01191928 203.081266945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.01191928 203.081266945 moveto 277.650760396 206.367041739 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.650760396 206.367041739 moveto 279.440017052 209.635065762 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.440017052 209.635065762 moveto 281.378268824 212.877421895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.378268824 212.877421895 moveto 283.463603488 216.085569905 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.463603488 216.085569905 moveto 285.636497556 219.17237999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.636497556 219.17237999 moveto 287.944174128 222.20887064 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.944174128 222.20887064 moveto 290.38332288 225.185419758 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.38332288 225.185419758 moveto 292.950073068 228.091876885 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.950073068 228.091876885 moveto 295.48314086 230.758601137 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.48314086 230.758601137 moveto 298.121478072 233.344247537 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.121478072 233.344247537 moveto 300.8603759 235.839202117 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.8603759 235.839202117 moveto 303.694632312 238.233579598 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.694632312 238.233579598 moveto 306.321581416 240.293637861 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.321581416 240.293637861 moveto 309.016627748 242.256624771 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.016627748 242.256624771 moveto 311.77495472 244.115016073 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 311.77495472 244.115016073 moveto 314.591429292 245.861274093 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.591429292 245.861274093 moveto 317.307664048 247.404997019 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.307664048 247.404997019 moveto 320.066309616 248.835092106 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.066309616 248.835092106 moveto 322.862267356 250.145367715 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.862267356 250.145367715 moveto 325.690222032 251.329786584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.690222032 251.329786584 moveto 328.479122536 252.359945279 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.479122536 252.359945279 moveto 331.287983876 253.259133088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.287983876 253.259133088 moveto 334.11133286 254.022388549 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.11133286 254.022388549 moveto 336.943560496 254.645051787 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.943560496 254.645051787 moveto 339.801576524 255.126021511 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.801576524 255.126021511 moveto 342.656829556 255.455717703 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.656829556 255.455717703 moveto 345.50327928 255.630535085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.50327928 255.630535085 moveto 348.334831788 255.647332438 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.334831788 255.647332438 moveto 351.338555484 255.487536862 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.338555484 255.487536862 moveto 354.310763604 255.141554508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.310763604 255.141554508 moveto 357.243999268 254.607545711 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.243999268 254.607545711 moveto 360.130870676 253.884425355 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.130870676 253.884425355 moveto 362.947790788 252.977733709 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 362.947790788 252.977733709 moveto 365.70463932 251.884294939 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.70463932 251.884294939 moveto 368.39454874 250.605375399 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.39454874 250.605375399 moveto 371.0108484 249.143031895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 371.0108484 249.143031895 moveto 373.481696812 247.54544089 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.481696812 247.54544089 moveto 375.870910684 245.779940987 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.870910684 245.779940987 moveto 378.173025036 243.850545486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.173025036 243.850545486 moveto 380.382848472 241.761927653 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.087817816 282.20905219 moveto 397.649959992 278.587974641 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.649959992 278.587974641 moveto 401.025900896 274.677736204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.025900896 274.677736204 moveto 404.20689816 270.493015426 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.20689816 270.493015426 moveto 407.185128628 266.049972599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 407.185128628 266.049972599 moveto 409.86687396 261.522311258 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.86687396 261.522311258 moveto 412.347028964 256.786106502 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 412.347028964 256.786106502 moveto 414.621057572 251.859050279 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.621057572 251.859050279 moveto 416.685258196 246.759523247 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 416.685258196 246.759523247 moveto 418.567352536 241.412939903 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.567352536 241.412939903 moveto 420.227026992 235.927698241 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.227026992 235.927698241 moveto 421.662931248 230.324349293 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.662931248 230.324349293 moveto 422.874511644 224.623516812 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 422.874511644 224.623516812 moveto 423.81585672 219.149623625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.81585672 219.149623625 moveto 424.556688736 213.623957221 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.556688736 213.623957221 moveto 425.09831862 208.063549013 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.09831862 208.063549013 moveto 425.442563472 202.48506493 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.442563472 202.48506493 moveto 425.59251728 196.816723713 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.59251728 196.816723713 moveto 425.544026712 191.16293145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.544026712 191.16293145 moveto 425.300368332 185.539529005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.300368332 185.539529005 moveto 424.86520282 179.96168831 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.86520282 179.96168831 moveto 424.163149464 173.843886815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.163149464 173.843886815 moveto 423.236224268 167.818624655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.236224268 167.818624655 moveto 422.090773664 161.90339118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 422.090773664 161.90339118 moveto 420.73351722 156.11447051 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.73351722 156.11447051 moveto 419.192192904 150.53634542 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.192192904 150.53634542 moveto 417.458251764 145.109436015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.458251764 145.109436015 moveto 415.539003924 139.84592066 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.539003924 139.84592066 moveto 413.441974864 134.75683267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 413.441974864 134.75683267 moveto 411.156437808 129.81433741 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.156437808 129.81433741 moveto 408.70623172 125.068086845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.70623172 125.068086845 moveto 406.09958388 120.52598271 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.09958388 120.52598271 moveto 403.344858432 116.19484931 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 403.344858432 116.19484931 moveto 400.136414384 111.65792186 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.136414384 111.65792186 moveto 396.768891296 107.39240085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.768891296 107.39240085 moveto 393.254035824 103.403212995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 393.254035824 103.403212995 moveto 389.603694408 99.69389 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 389.603694408 99.69389 moveto 386.253565316 96.632356875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.253565316 96.632356875 moveto 382.814130908 93.79455844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.814130908 93.79455844 moveto 379.293793636 91.180423405 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.293793636 91.180423405 moveto 375.70093458 88.78915054 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.70093458 88.78915054 moveto 372.295388376 86.7603581949999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 372.295388376 86.7603581949999 moveto 368.840810376 84.922019155 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.840810376 84.922019155 moveto 365.34381584 83.271937685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.34381584 83.271937685 moveto 361.810928808 81.807475775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.810928808 81.807475775 moveto 358.294179344 80.54080035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 358.294179344 80.54080035 moveto 354.754747908 79.448754835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.754747908 79.448754835 moveto 351.198540384 78.52769747 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.198540384 78.52769747 moveto 347.631304916 77.773679185 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.631304916 77.773679185 moveto 343.890819408 77.1586390449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.890819408 77.1586390449999 moveto 340.15053248 76.716913765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.15053248 76.716913765 moveto 336.41637724 76.44310724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.41637724 76.44310724 moveto 332.6940304 76.33160618 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.6940304 76.33160618 moveto 328.610788868 76.38982187 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.610788868 76.38982187 moveto 324.555320152 76.6302753749999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.555320152 76.6302753749999 moveto 320.534060868 77.044874615 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.534060868 77.044874615 moveto 316.553024768 77.62544693 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.553024768 77.62544693 moveto 312.24675412 78.441797855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.24675412 78.441797855 moveto 308.002165412 79.436590695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.002165412 79.436590695 moveto 303.8254383 80.59924644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.8254383 80.59924644 moveto 299.72218866 81.919390715 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.72218866 81.919390715 moveto 295.8736096 83.319093595 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.8736096 83.319093595 moveto 292.100801028 84.844896635 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.100801028 84.844896635 moveto 288.407374176 86.4885792499999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.407374176 86.4885792499999 moveto 284.796578944 88.24227522 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.796578944 88.24227522 moveto 281.125350272 90.178507805 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.125350272 90.178507805 moveto 277.549958836 92.2180621599999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.549958836 92.2180621599999 moveto 274.073061176 94.35344911 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.073061176 94.35344911 moveto 270.69704792 96.57769868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.69704792 96.57769868 moveto 267.402570576 98.90004017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.402570576 98.90004017 moveto 264.214535904 101.299884915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.214535904 101.299884915 moveto 261.134808944 103.771757785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.134808944 103.771757785 moveto 258.165138676 106.310727725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.165138676 106.310727725 moveto 255.26491362 108.95213262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.26491362 108.95213262 moveto 252.4814996 111.65410637 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.4814996 111.65410637 moveto 249.816570288 114.41314739 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.816570288 114.41314739 moveto 247.271809836 117.2262788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 247.271809836 117.2262788 moveto 244.673442812 120.30636314 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.673442812 120.30636314 moveto 242.218011476 123.443607435 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.218011476 123.443607435 moveto 239.907851024 126.63618049 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.907851024 126.63618049 moveto 237.745441864 129.882829525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.745441864 129.882829525 moveto 235.123419792 134.247230245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.123419792 134.247230245 moveto 232.769744244 138.704258905 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.769744244 138.704258905 moveto 230.69168236 143.254974085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.69168236 143.254974085 moveto 228.897214372 147.90162701 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.897214372 147.90162701 moveto 227.710872168 151.55810793 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.710872168 151.55810793 moveto 226.703226328 155.275592045 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.703226328 155.275592045 moveto 225.8788917 159.056137935 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.8788917 159.056137935 moveto 225.242754616 162.90195741 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.242754616 162.90195741 moveto 224.830624432 166.472671135 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.830624432 166.472671135 moveto 224.583808968 170.10147235 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.583808968 170.10147235 moveto 224.506567208 173.79004324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.506567208 173.79004324 moveto 224.603298456 177.539942045 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.603298456 177.539942045 moveto 224.862534916 181.18280201 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.862534916 181.18280201 moveto 225.288870152 184.88391561 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.288870152 184.88391561 moveto 225.88637932 188.643959255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.88637932 188.643959255 moveto 226.659158396 192.463250804 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.659158396 192.463250804 moveto 227.594940532 196.280345401 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.594940532 196.280345401 moveto 228.708338872 200.154147239 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.708338872 200.154147239 moveto 230.003107668 204.083500871 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.003107668 204.083500871 moveto 231.482865148 208.066608964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.482865148 208.066608964 moveto 233.20216776 212.218450819 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.20216776 212.218450819 moveto 235.124435212 216.420889446 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.124435212 216.420889446 moveto 237.252798892 220.669258158 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.252798892 220.669258158 moveto 239.58997486 224.957772321 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.58997486 224.957772321 moveto 242.691958552 230.177040914 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.691958552 230.177040914 moveto 246.104094936 235.429655144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.104094936 235.429655144 moveto 249.82768648 240.697717328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.82768648 240.697717328 moveto 253.862339732 245.960118723 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.862339732 245.960118723 moveto 257.736811232 250.647000506 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.736811232 250.647000506 moveto 261.855685472 255.289874349 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.855685472 255.289874349 moveto 266.214291544 259.866598627 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.214291544 259.866598627 moveto 270.806301824 264.352826028 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.806301824 264.352826028 moveto 275.365671656 268.496411287 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.365671656 268.496411287 moveto 280.11893302 272.510787884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.11893302 272.510787884 moveto 285.056078168 276.370321292 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.056078168 276.370321292 moveto 290.165486444 280.048111463 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.165486444 280.048111463 moveto 294.546196852 282.954476676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.546196852 282.954476676 moveto 299.028847612 285.698602066 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.028847612 285.698602066 moveto 303.604107164 288.263686746 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.604107164 288.263686746 moveto 308.261878172 290.632850396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.261878172 290.632850396 moveto 312.655749872 292.64455752 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.655749872 292.64455752 moveto 317.102298412 294.459157725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.102298412 294.459157725 moveto 321.591780664 296.0636573 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.591780664 296.0636573 moveto 326.113997576 297.44549979 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.113997576 297.44549979 moveto 330.556894388 298.569759225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.556894388 298.569759225 moveto 335.010678992 299.459134275 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.010678992 299.459134275 moveto 339.464813596 300.103816605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.464813596 300.103816605 moveto 343.908530436 300.494862565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.908530436 300.494862565 moveto 348.475962964 300.624022635 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.475962964 300.624022635 moveto 353.008412604 300.4664765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.008412604 300.4664765 moveto 357.493638964 300.015967355 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.493638964 300.015967355 moveto 361.919420832 299.267658855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.919420832 299.267658855 moveto 366.45067308 298.1686598 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.45067308 298.1686598 moveto 370.890864108 296.74133423 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.890864108 296.74133423 moveto 375.226804392 294.985611925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.226804392 294.985611925 moveto 379.44568668 292.903346675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.44568668 292.903346675 moveto 383.302638244 290.64595967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.302638244 290.64595967 moveto 387.03481748 288.106741023 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 387.03481748 288.106741023 moveto 390.632830272 285.291893295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.632830272 285.291893295 moveto 394.087817816 282.20905219 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.648784104 323.5212243 moveto 406.533036644 319.03089823 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.533036644 319.03089823 moveto 411.170146972 314.11904512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.170146972 314.11904512 moveto 415.546808952 308.80654238 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.546808952 308.80654238 moveto 419.651208504 303.11695554 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.651208504 303.11695554 moveto 423.307627204 297.35468227 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.307627204 297.35468227 moveto 426.698707984 291.296511374 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.698707984 291.296511374 moveto 429.818173924 284.968263304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.818173924 284.968263304 moveto 432.661064976 278.39692055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 432.661064976 278.39692055 moveto 435.305476672 271.377360548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.305476672 271.377360548 moveto 437.647757408 264.159248364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.647757408 264.159248364 moveto 439.686670024 256.774381075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.686670024 256.774381075 moveto 441.422300356 249.254599049 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 441.422300356 249.254599049 moveto 442.8514998 241.658303695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 442.8514998 241.658303695 moveto 443.98333778 233.990193744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.98333778 233.990193744 moveto 444.821340664 226.280272634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 444.821340664 226.280272634 moveto 445.369998884 218.55758586 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.369998884 218.55758586 moveto 445.640302256 210.48384032 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.640302256 210.48384032 moveto 445.606025416 202.457280825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.606025416 202.457280825 moveto 445.27505786 194.506753983 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.27505786 194.506753983 moveto 444.655991712 186.659275595 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 444.655991712 186.659275595 moveto 443.751714068 178.89334474 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.751714068 178.89334474 moveto 442.574991724 171.28068451 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 442.574991724 171.28068451 moveto 441.136098424 163.84280521 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 441.136098424 163.84280521 moveto 439.445633552 156.59917793 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.445633552 156.59917793 moveto 437.522201796 149.59345826 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.522201796 149.59345826 moveto 435.370778616 142.81315334 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.370778616 142.81315334 moveto 433.002388912 136.271690295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.002388912 136.271690295 moveto 430.428129776 129.98068001 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 430.428129776 129.98068001 moveto 427.529008452 123.68257517 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.529008452 123.68257517 moveto 424.429777628 117.67828197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.429777628 117.67828197 moveto 421.143103468 111.975278495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.143103468 111.975278495 moveto 417.681582872 106.579284745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.681582872 106.579284745 moveto 412.934801464 100.02228077 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 412.934801464 100.02228077 moveto 407.940249716 93.9972196099999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 407.940249716 93.9972196099999 moveto 402.724790744 88.5051903749999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 402.724790744 88.5051903749999 moveto 397.314820532 83.54362607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.314820532 83.54362607 moveto 392.862936368 79.9514874 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.862936368 79.9514874 moveto 388.316037756 76.69091217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.316037756 76.69091217 moveto 383.6868139 73.756387935 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.6868139 73.756387935 moveto 378.987645568 71.14138757 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.987645568 71.14138757 moveto 374.525240572 68.97152893 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 374.525240572 68.97152893 moveto 370.021507104 67.06964362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.021507104 67.06964362 moveto 365.485782616 65.4283429399999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.485782616 65.4283429399999 moveto 360.92706776 64.039731255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.92706776 64.039731255 moveto 356.196075584 62.860243225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.196075584 62.860243225 moveto 351.458862372 61.93258687 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.458862372 61.93258687 moveto 346.724102912 61.24674436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.724102912 61.24674436 moveto 341.999991764 60.7924112399999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.999991764 60.7924112399999 moveto 336.865881788 60.54839936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.865881788 60.54839936 moveto 331.762924312 60.5536760549999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.762924312 60.5536760549999 moveto 326.699699904 60.79427017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.699699904 60.79427017 moveto 321.684054832 61.2562054 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.684054832 61.2562054 moveto 315.82124304 62.06952611 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.82124304 62.06952611 moveto 310.045445024 63.15053194 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.045445024 63.15053194 moveto 304.365799876 64.4770698799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.365799876 64.4770698799999 moveto 298.790157712 66.027667575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.790157712 66.027667575 moveto 293.834082208 67.608633255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.834082208 67.608633255 moveto 288.972967656 69.34182697 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.972967656 69.34182697 moveto 284.210259372 71.213227495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.210259372 71.213227495 moveto 279.54877028 73.20954061 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.54877028 73.20954061 moveto 274.743324144 75.43711444 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.743324144 75.43711444 moveto 270.0550347 77.7759827199999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.0550347 77.7759827199999 moveto 265.485384344 80.213347565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.485384344 80.213347565 moveto 261.035388928 82.73739153 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.035388928 82.73739153 moveto 256.76322722 85.301765475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.76322722 85.301765475 moveto 252.608405724 87.9304413899999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.608405724 87.9304413899999 moveto 248.570970264 90.614799365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.570970264 90.614799365 moveto 244.650777148 93.34707351 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.650777148 93.34707351 moveto 240.598853624 96.305975825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.598853624 96.305975825 moveto 236.679491936 99.304063615 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.679491936 99.304063615 moveto 232.892173652 102.33487763 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.892173652 102.33487763 moveto 229.23636932 105.392883595 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.23636932 105.392883595 moveto 225.132648004 108.99252175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.132648004 108.99252175 moveto 221.2069766 112.61695445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.2069766 112.61695445 moveto 217.458931036 116.261648365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.458931036 116.261648365 moveto 213.8883834 119.923438535 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.8883834 119.923438535 moveto 210.379012748 123.73056773 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.379012748 123.73056773 moveto 207.060884104 127.553335985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.060884104 127.553335985 moveto 203.935296864 131.39238471 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 203.935296864 131.39238471 moveto 201.00417432 135.24963481 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 201.00417432 135.24963481 moveto 198.289877856 139.09907919 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.289877856 139.09907919 moveto 195.772994304 142.97380486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.772994304 142.97380486 moveto 193.457607 146.879178695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.457607 146.879178695 moveto 191.34865668 150.821664575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.34865668 150.821664575 moveto 189.413155856 154.896078065 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.413155856 154.896078065 moveto 187.706596632 159.026273685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.706596632 159.026273685 moveto 186.237433932 163.22251734 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.237433932 163.22251734 moveto 185.015330688 167.496133815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.015330688 167.496133815 moveto 184.1241816 171.477826585 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.1241816 171.477826585 moveto 183.457565076 175.54441754 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.457565076 175.54441754 moveto 183.025730824 179.70653581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.025730824 179.70653581 moveto 182.839901164 183.975286575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.839901164 183.975286575 moveto 182.891859788 187.88799268 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.891859788 187.88799268 moveto 183.159205416 191.9032604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.159205416 191.9032604 moveto 183.651911368 196.029430029 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.651911368 196.029430029 moveto 184.380539996 200.274737765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.380539996 200.274737765 moveto 185.28239752 204.348090631 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.28239752 204.348090631 moveto 186.408505972 208.53814258 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.408505972 208.53814258 moveto 187.76861126 212.850535948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.76861126 212.850535948 moveto 189.372731056 217.290254047 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.372731056 217.290254047 moveto 191.18208934 221.747034817 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.18208934 221.747034817 moveto 193.242872052 226.331738492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.242872052 226.331738492 moveto 195.564650576 231.046015631 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.564650576 231.046015631 moveto 198.156877848 235.890084427 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.156877848 235.890084427 moveto 200.961822704 240.750582226 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.961822704 240.750582226 moveto 204.042382424 245.730609257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.042382424 245.730609257 moveto 207.406273924 250.824915735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.406273924 250.824915735 moveto 211.060525276 256.025924937 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.060525276 256.025924937 moveto 215.645432576 262.145828663 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.645432576 262.145828663 moveto 220.632710252 268.373780772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.632710252 268.373780772 moveto 226.027661072 274.683786987 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.027661072 274.683786987 moveto 231.83277444 281.043794239 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.83277444 281.043794239 moveto 236.921559884 286.292579184 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.921559884 286.292579184 moveto 242.285792824 291.524419862 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.285792824 291.524419862 moveto 247.921211528 296.71129879 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 247.921211528 296.71129879 moveto 253.821466592 301.82209312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.821466592 301.82209312 moveto 259.814933444 306.694489705 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.814933444 306.694489705 moveto 266.041419852 311.428147625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.041419852 311.428147625 moveto 272.488570224 315.98656864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.488570224 315.98656864 moveto 279.141714476 320.331200925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.141714476 320.331200925 moveto 285.358155688 324.063600605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.358155688 324.063600605 moveto 291.716465152 327.554621665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.716465152 327.554621665 moveto 298.20053376 330.772588275 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.20053376 330.772588275 moveto 304.792701676 333.685688005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.792701676 333.685688005 moveto 310.797117372 336.01883549 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.797117372 336.01883549 moveto 316.858593552 338.05744017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.858593552 338.05744017 moveto 322.961415404 339.779765915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.961415404 339.779765915 moveto 329.089118768 341.16507985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.089118768 341.16507985 moveto 335.165637212 342.1857766 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.165637212 342.1857766 moveto 341.232603484 342.83939141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.232603484 342.83939141 moveto 347.272456372 343.110272895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.272456372 343.110272895 moveto 353.26735104 342.98475186 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.26735104 342.98475186 moveto 360.471099128 342.281556985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.471099128 342.281556985 moveto 367.549325468 340.959447755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 367.549325468 340.959447755 moveto 374.469982336 339.00826341 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 374.469982336 339.00826341 moveto 381.20171798 336.423815565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 381.20171798 336.423815565 moveto 386.575439072 333.82471957 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.575439072 333.82471957 moveto 391.784647388 330.802722355 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 391.784647388 330.802722355 moveto 396.813939408 327.364929085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.813939408 327.364929085 moveto 401.648784104 323.5212243 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.287897056 364.939533715 moveto 407.599567364 360.198038995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 407.599567364 360.198038995 moveto 413.623607584 354.885271425 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 413.623607584 354.885271425 moveto 419.340038808 349.024434125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 419.340038808 349.024434125 moveto 424.730900068 342.643231345 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 424.730900068 342.643231345 moveto 429.747270884 335.82169037 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 429.747270884 335.82169037 moveto 434.413550252 328.55294698 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 434.413550252 328.55294698 moveto 438.718657968 320.874719785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 438.718657968 320.874719785 moveto 442.653765264 312.827222725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 442.653765264 312.827222725 moveto 446.185890004 304.51940699 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 446.185890004 304.51940699 moveto 449.343020232 295.932181945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 449.343020232 295.932181945 moveto 452.1229371 287.108887775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 452.1229371 287.108887775 moveto 454.525402552 278.093169986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 454.525402552 278.093169986 moveto 456.651143584 268.428822795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 456.651143584 268.428822795 moveto 458.363325984 258.649159424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 458.363325984 258.649159424 moveto 459.667956012 248.803022846 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 459.667956012 248.803022846 moveto 460.572834756 238.937489798 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 460.572834756 238.937489798 moveto 461.112867096 228.283320632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 461.112867096 228.283320632 moveto 461.20890956 217.712823122 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 461.20890956 217.712823122 moveto 460.87637824 207.275922891 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 460.87637824 207.275922891 moveto 460.132037272 197.018463333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 460.132037272 197.018463333 moveto 459.06135218 187.4902732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 459.06135218 187.4902732 moveto 457.651988936 178.19297963 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 457.651988936 178.19297963 moveto 455.920368552 169.15495677 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 455.920368552 169.15495677 moveto 453.883240884 160.401099545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 453.883240884 160.401099545 moveto 451.55602572 151.947776525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 451.55602572 151.947776525 moveto 448.956920376 143.81875191 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 448.956920376 143.81875191 moveto 446.102895756 136.029171875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 446.102895756 136.029171875 moveto 443.010777972 128.591231325 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 443.010777972 128.591231325 moveto 439.431259936 120.980505525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 439.431259936 120.980505525 moveto 435.614945956 113.797451305 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 435.614945956 113.797451305 moveto 431.581769804 107.047358145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 431.581769804 107.047358145 moveto 427.351145352 100.73262361 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 427.351145352 100.73262361 moveto 422.20569336 93.93344411 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 422.20569336 93.93344411 moveto 416.847138328 87.71879974 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 416.847138328 87.71879974 moveto 411.302984312 82.080657545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 411.302984312 82.080657545 moveto 405.599552336 77.0077461 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 405.599552336 77.0077461 moveto 400.00540498 72.66204091 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 400.00540498 72.66204091 moveto 394.309010908 68.808491135 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 394.309010908 68.808491135 moveto 388.53037386 65.431029925 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 388.53037386 65.431029925 moveto 382.688431868 62.51221819 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 382.688431868 62.51221819 moveto 376.603137856 59.957806225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 376.603137856 59.957806225 moveto 370.487791068 57.85199644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 370.487791068 57.85199644 moveto 364.359637544 56.1726020649999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 364.359637544 56.1726020649999 moveto 358.234670612 54.89693634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 358.234670612 54.89693634 moveto 352.168671448 54.006812625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 352.168671448 54.006812625 moveto 346.133582856 53.469697015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 346.133582856 53.469697015 moveto 340.141429504 53.263059555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 340.141429504 53.263059555 moveto 334.203057028 53.364602465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 334.203057028 53.364602465 moveto 327.798893816 53.8009586 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 327.798893816 53.8009586 moveto 321.48128192 54.5500357849999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 321.48128192 54.5500357849999 moveto 315.25978692 55.584905745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 315.25978692 55.584905745 moveto 309.142550056 56.879631895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 309.142550056 56.879631895 moveto 302.767722736 58.5114254549999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 302.767722736 58.5114254549999 moveto 296.524759248 60.380019005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 296.524759248 60.380019005 moveto 290.418855848 62.458739205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 290.418855848 62.458739205 moveto 284.453917044 64.72256914 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 284.453917044 64.72256914 moveto 278.8353305 67.06020445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 278.8353305 67.06020445 moveto 273.35208176 69.528944575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 273.35208176 69.528944575 moveto 268.004986456 72.11077132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 268.004986456 72.11077132 moveto 262.794201404 74.789080865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 262.794201404 74.789080865 moveto 257.636436864 77.5949335049999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 257.636436864 77.5949335049999 moveto 252.618180284 80.470155705 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 252.618180284 80.470155705 moveto 247.738096168 83.401483545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 247.738096168 83.401483545 moveto 242.994513832 86.37692265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 242.994513832 86.37692265 moveto 237.913523568 89.70028414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 237.913523568 89.70028414 moveto 232.993659012 93.051334955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 232.993659012 93.051334955 moveto 228.231816828 96.418655105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 228.231816828 96.418655105 moveto 223.624751276 99.7922377799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 223.624751276 99.7922377799999 moveto 218.134321844 103.9616513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 218.134321844 103.9616513 moveto 212.869339796 108.11341964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 212.869339796 108.11341964 moveto 207.82352534 112.23601445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 207.82352534 112.23601445 moveto 202.990758452 116.320121565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 202.990758452 116.320121565 moveto 198.300218596 120.41605061 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 198.300218596 120.41605061 moveto 193.817033004 124.459077205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 193.817033004 124.459077205 moveto 189.535797304 128.445105425 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 189.535797304 128.445105425 moveto 185.45156122 132.3715752 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 185.45156122 132.3715752 moveto 181.157731244 136.644321245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 181.157731244 136.644321245 moveto 177.094333332 140.84313453 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 177.094333332 140.84313453 moveto 173.257106924 144.97017021 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 173.257106924 144.97017021 moveto 169.642832032 149.02935639 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 169.642832032 149.02935639 moveto 166.477907908 152.75073936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 166.477907908 152.75073936 moveto 163.50356106 156.424184685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 163.50356106 156.424184685 moveto 160.720174512 160.05696039 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 160.720174512 160.05696039 moveto 158.12930294 163.657730245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 158.12930294 163.657730245 moveto 155.688656676 167.3068787 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 155.688656676 167.3068787 moveto 153.455691032 170.94570589 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 153.455691032 170.94570589 moveto 151.436713008 174.58846977 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 151.436713008 174.58846977 moveto 149.63996958 178.251412845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 149.63996958 178.251412845 moveto 147.98666578 182.18452246 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 147.98666578 182.18452246 moveto 146.611238144 186.186070335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 146.611238144 186.186070335 moveto 145.53257448 190.28420251 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 145.53257448 190.28420251 moveto 144.77339474 194.510531511 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 144.77339474 194.510531511 moveto 144.360751188 198.898032737 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 144.360751188 198.898032737 moveto 144.325747632 203.487846843 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 144.325747632 203.487846843 moveto 144.705087132 208.322794673 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 144.705087132 208.322794673 moveto 145.54097776 213.449360901 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 145.54097776 213.449360901 moveto 146.44899194 217.336522088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 146.44899194 217.336522088 moveto 147.636525796 221.418750767 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 147.636525796 221.418750767 moveto 149.124901024 225.715718307 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 149.124901024 225.715718307 moveto 150.937054928 230.247242855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 150.937054928 230.247242855 moveto 152.793013028 234.389298676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 152.793013028 234.389298676 moveto 154.928731636 238.735569844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 154.928731636 238.735569844 moveto 157.361919276 243.297711991 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 157.361919276 243.297711991 moveto 160.110919076 248.086275625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 160.110919076 248.086275625 moveto 163.06266928 252.901729303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 163.06266928 252.901729303 moveto 166.339364112 257.940168573 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 166.339364112 257.940168573 moveto 169.957948328 263.205589342 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 169.957948328 263.205589342 moveto 173.93518424 268.699259995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 173.93518424 268.699259995 moveto 177.98318748 274.02823986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 177.98318748 274.02823986 moveto 182.370174408 279.54947299 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 182.370174408 279.54947299 moveto 187.107920716 285.254798442 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 187.107920716 285.254798442 moveto 192.2070481 291.132125902 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 192.2070481 291.132125902 moveto 198.315682712 297.85262104 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 198.315682712 297.85262104 moveto 204.8928442 304.735665415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 204.8928442 304.735665415 moveto 211.944981616 311.743143645 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 211.944981616 311.743143645 moveto 219.474413596 318.82805241 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 219.474413596 318.82805241 moveto 226.19482822 324.823050915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 226.19482822 324.823050915 moveto 233.248686664 330.79407475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 233.248686664 330.79407475 moveto 240.628415216 336.69710261 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 240.628415216 336.69710261 moveto 248.323116932 342.48335216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 248.323116932 342.48335216 moveto 255.686964068 347.670681065 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 255.686964068 347.670681065 moveto 263.292379988 352.668439915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 263.292379988 352.668439915 moveto 271.122433892 357.42915649 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 271.122433892 357.42915649 moveto 279.157361112 361.903268465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 279.157361112 361.903268465 moveto 287.149397088 365.932344715 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 287.149397088 365.932344715 moveto 295.290603788 369.593990845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 295.290603788 369.593990845 moveto 303.555226232 372.84041295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 303.555226232 372.84041295 moveto 311.915240328 375.62452073 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 311.915240328 375.62452073 moveto 319.5286419 377.70514493 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 319.5286419 377.70514493 moveto 327.17183116 379.338653645 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 327.17183116 379.338653645 moveto 334.820196104 380.495053255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 334.820196104 380.495053255 moveto 342.448251424 381.14691326 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 342.448251424 381.14691326 moveto 350.416824116 381.261458795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 350.416824116 381.261458795 moveto 358.303123864 380.767266845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 358.303123864 380.767266845 moveto 366.076051924 379.644982535 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 366.076051924 379.644982535 moveto 373.704623068 377.880489785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 373.704623068 377.880489785 moveto 380.911557184 375.55679042 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 380.911557184 375.55679042 moveto 387.928182144 372.622702415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 387.928182144 372.622702415 moveto 394.728546356 369.08095423 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 394.728546356 369.08095423 moveto 401.287897056 364.939533715 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 388.46194956 402.45955007 moveto 396.697793972 398.4241648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.697793972 398.4241648 moveto 404.62704734 393.59472506 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.62704734 393.59472506 moveto 412.215893044 387.98842301 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 412.215893044 387.98842301 moveto 419.433084056 381.63069844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.433084056 381.63069844 moveto 426.716334396 374.02849495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.716334396 374.02849495 moveto 433.510331096 365.65321361 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.510331096 365.65321361 moveto 439.788855532 356.563300045 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.788855532 356.563300045 moveto 445.53038486 346.824464325 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.53038486 346.824464325 moveto 450.367620456 337.259982865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 450.367620456 337.259982865 moveto 454.71742068 327.258504315 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.71742068 327.258504315 moveto 458.57363854 316.883340115 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.57363854 316.883340115 moveto 461.933542832 306.199185365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 461.933542832 306.199185365 moveto 465.004688688 294.391778825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.004688688 294.391778825 moveto 467.502641052 282.381545011 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 467.502641052 282.381545011 moveto 469.435899648 270.247962057 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.435899648 270.247962057 moveto 470.816416604 258.067622593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.816416604 258.067622593 moveto 471.736190276 244.19627119 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.736190276 244.19627119 moveto 471.981629992 230.459929953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.981629992 230.459929953 moveto 471.582940652 216.950889429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.582940652 216.950889429 moveto 470.573246332 203.751927579 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.573246332 203.751927579 moveto 469.183815112 192.286045099 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.183815112 192.286045099 moveto 467.361455256 181.17081796 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 467.361455256 181.17081796 moveto 465.132958456 170.445004205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.132958456 170.445004205 moveto 462.525404312 160.14119002 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.525404312 160.14119002 moveto 459.51164528 150.11924594 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.51164528 150.11924594 moveto 456.161913252 140.583734835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 456.161913252 140.583734835 moveto 452.504011912 131.551207975 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.504011912 131.551207975 moveto 448.565093836 123.033068765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 448.565093836 123.033068765 moveto 443.682176172 113.811291075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.682176172 113.811291075 moveto 438.496536504 105.29287936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 438.496536504 105.29287936 moveto 433.045826252 97.47460543 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.045826252 97.47460543 moveto 427.365745604 90.347513915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.365745604 90.347513915 moveto 421.208202016 83.609618685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.208202016 83.609618685 moveto 414.872263776 77.593840315 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.872263776 77.593840315 moveto 408.391684396 72.275677425 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.391684396 72.275677425 moveto 401.797762168 67.627547435 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.797762168 67.627547435 moveto 395.267840884 63.70143816 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.267840884 63.70143816 moveto 388.681999668 60.35780749 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.681999668 60.35780749 moveto 382.063004768 57.56607289 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.063004768 57.56607289 moveto 375.431625216 55.295057095 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.431625216 55.295057095 moveto 368.591140852 53.46315004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.591140852 53.46315004 moveto 361.776228276 52.118472875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.776228276 52.118472875 moveto 355.003607952 51.22699966 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 355.003607952 51.22699966 moveto 348.288124512 50.75539391 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.288124512 50.75539391 moveto 340.705093272 50.6888431699999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.705093272 50.6888431699999 moveto 333.230401264 51.08105051 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.230401264 51.08105051 moveto 325.878277008 51.8875115449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.878277008 51.8875115449999 moveto 318.660552948 53.06599303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.660552948 53.06599303 moveto 311.085015644 54.69681583 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 311.085015644 54.69681583 moveto 303.684250728 56.663343655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.684250728 56.663343655 moveto 296.465319408 58.9229876499999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.465319408 58.9229876499999 moveto 289.433248544 61.43644333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.433248544 61.43644333 moveto 282.775699428 64.0903982249999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.775699428 64.0903982249999 moveto 276.29960394 66.9199759449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.29960394 66.9199759449999 moveto 270.0054057 69.897489265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.0054057 69.897489265 moveto 263.892561388 72.997801335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.892561388 72.997801335 moveto 257.707113984 76.33855211 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.707113984 76.33855211 moveto 251.715194628 79.76506303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.715194628 79.76506303 moveto 245.91381734 83.2566169749999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.91381734 83.2566169749999 moveto 240.299481256 86.7947812099999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.299481256 86.7947812099999 moveto 233.993552412 90.951141465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.993552412 90.951141465 moveto 227.929175412 95.1261132399999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.929175412 95.1261132399999 moveto 222.099321424 99.3002968449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.099321424 99.3002968449999 moveto 216.496720684 103.45708537 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.496720684 103.45708537 moveto 210.353144892 108.1757295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.353144892 108.1757295 moveto 204.486465744 112.835491855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.486465744 112.835491855 moveto 198.88560708 117.42190358 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.88560708 117.42190358 moveto 193.53965644 121.923285975 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.53965644 121.923285975 moveto 187.799184952 126.889786145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.799184952 126.889786145 moveto 182.354911844 131.72607987 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.354911844 131.72607987 moveto 177.192509288 136.424761555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.192509288 136.424761555 moveto 172.298245212 140.98078367 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 172.298245212 140.98078367 moveto 166.946904596 146.076067455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.946904596 146.076067455 moveto 161.918545448 150.97396055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.918545448 150.97396055 moveto 157.195130116 155.674956145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.195130116 155.674956145 moveto 152.75985564 160.181604675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.75985564 160.181604675 moveto 148.21392416 164.900143025 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.21392416 164.900143025 moveto 143.976444824 169.398390345 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.976444824 169.398390345 moveto 140.03069734 173.685915995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.03069734 173.685915995 moveto 136.361967864 177.774034 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.361967864 177.774034 moveto 133.219383776 181.37150628 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.219383776 181.37150628 moveto 130.292664044 184.822577765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.292664044 184.822577765 moveto 127.575543212 188.14016634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.575543212 188.14016634 moveto 125.063787032 191.33882159 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.063787032 191.33882159 moveto 123.091971992 193.971952088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 123.091971992 193.971952088 moveto 121.266852624 196.542590458 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.266852624 196.542590458 moveto 119.590283444 199.063514287 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.590283444 199.063514287 moveto 118.065917933 201.549199854 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.065917933 201.549199854 moveto 116.803640026 203.817422593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.803640026 203.817422593 moveto 115.681021214 206.08433126 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.681021214 206.08433126 moveto 114.706286522 208.366537067 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.706286522 208.366537067 moveto 113.889962445 210.683014411 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.889962445 210.683014411 moveto 113.24094597 213.074009357 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.24094597 213.074009357 moveto 112.782763505 215.547291749 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.782763505 215.547291749 moveto 112.535728836 218.132127906 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.535728836 218.132127906 moveto 112.524398495 220.862109372 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.524398495 220.862109372 moveto 112.759862568 223.63447339 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.759862568 223.63447339 moveto 113.266258002 226.611428863 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.266258002 226.611428863 moveto 114.078967893 229.835732569 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.078967893 229.835732569 moveto 115.239220486 233.355359579 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.239220486 233.355359579 moveto 116.517453854 236.579826035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.517453854 236.579826035 moveto 118.106707204 240.084939678 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.106707204 240.084939678 moveto 120.042914104 243.907783758 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.042914104 243.907783758 moveto 122.36598208 248.087643852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.36598208 248.087643852 moveto 124.52778832 251.708578712 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.52778832 251.708578712 moveto 126.98845364 255.604502566 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.98845364 255.604502566 moveto 129.773904828 259.796661526 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.773904828 259.796661526 moveto 132.911626896 264.305797418 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.911626896 264.305797418 moveto 136.04959506 268.636358838 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.04959506 268.636358838 moveto 139.51596666 273.250778599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.51596666 273.250778599 moveto 143.333056268 278.160248489 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.333056268 278.160248489 moveto 147.523567248 283.373613705 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.523567248 283.373613705 moveto 152.011663484 288.779751556 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.011663484 288.779751556 moveto 156.9011085 294.48493204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.9011085 294.48493204 moveto 162.212539536 300.48667277 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 162.212539536 300.48667277 moveto 167.96556214 306.777269255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 167.96556214 306.777269255 moveto 175.121630984 314.320127155 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.121630984 314.320127155 moveto 182.904626708 322.191434815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.904626708 322.191434815 moveto 191.333321908 330.34471267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.333321908 330.34471267 moveto 200.420171764 338.71761417 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.420171764 338.71761417 moveto 208.327067336 345.65852966 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.327067336 345.65852966 moveto 216.673693072 352.640662825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.673693072 352.640662825 moveto 225.453387836 359.60322892 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.453387836 359.60322892 moveto 234.654287128 366.47704986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.654287128 366.47704986 moveto 243.28405632 372.52604138 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.28405632 372.52604138 moveto 252.224148744 378.37885577 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.224148744 378.37885577 moveto 261.453394568 383.969470215 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.453394568 383.969470215 moveto 270.946338836 389.228199665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.946338836 389.228199665 moveto 280.468509024 393.98611373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.468509024 393.98611373 moveto 290.18303208 398.286761355 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.18303208 398.286761355 moveto 300.054184384 402.06035256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.054184384 402.06035256 moveto 310.042675232 405.23808125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.042675232 405.23808125 moveto 319.281065568 407.574085555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.281065568 407.574085555 moveto 328.54743134 409.30291281 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.54743134 409.30291281 moveto 337.805000744 410.379647485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.805000744 410.379647485 moveto 347.015669216 410.76401468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.015669216 410.76401468 moveto 357.714340796 410.285283195 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.714340796 410.285283195 moveto 368.23059168 408.760008695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.23059168 408.760008695 moveto 378.50065364 406.156920455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.50065364 406.156920455 moveto 388.46194956 402.45955007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.949664524 426.72353134 moveto 368.700581364 425.15587217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.700581364 425.15587217 moveto 379.20666946 422.509997265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.20666946 422.509997265 moveto 389.406832048 418.768700955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 389.406832048 418.768700955 moveto 399.242077764 413.929874575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.242077764 413.929874575 moveto 408.462538328 408.14275316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.462538328 408.14275316 moveto 417.230779412 401.34337425 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.230779412 401.34337425 moveto 425.502322436 393.57200834 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.502322436 393.57200834 moveto 433.237620668 384.881624795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.237620668 384.881624795 moveto 440.223820764 375.59496299 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.223820764 375.59496299 moveto 446.64254356 365.56647255 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.64254356 365.56647255 moveto 452.472868 354.872439345 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.472868 354.872439345 moveto 457.699305756 343.595105165 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.699305756 343.595105165 moveto 462.46554068 331.391212435 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.46554068 331.391212435 moveto 466.567802732 318.753689605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.567802732 318.753689605 moveto 470.006576604 305.78271839 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.006576604 305.78271839 moveto 472.787729556 292.57776091 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.787729556 292.57776091 moveto 475.069918808 278.130842792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.069918808 278.130842792 moveto 476.61374112 263.641725105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.61374112 263.641725105 moveto 477.444018636 249.221438596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.444018636 249.221438596 moveto 477.590023292 234.972562108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.590023292 234.972562108 moveto 477.094182728 221.148728161 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.094182728 221.148728161 moveto 475.996578952 207.663474001 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.996578952 207.663474001 moveto 474.333662416 194.586853207 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.333662416 194.586853207 moveto 472.143194576 181.978816945 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.143194576 181.978816945 moveto 469.42536984 169.73404284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.42536984 169.73404284 moveto 466.2457834 158.06353756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.2457834 158.06353756 moveto 462.64432232 146.999800665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.64432232 146.999800665 moveto 458.66015766 136.566488385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.66015766 136.566488385 moveto 453.210446468 124.45614391 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 453.210446468 124.45614391 moveto 447.295324292 113.365138195 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 447.295324292 113.365138195 moveto 440.981966496 103.29280704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.981966496 103.29280704 moveto 434.333296432 94.22568473 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.333296432 94.22568473 moveto 427.446457884 86.181427405 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.446457884 86.181427405 moveto 420.338680876 79.0755262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.338680876 79.0755262 moveto 413.058368412 72.8697790849999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 413.058368412 72.8697790849999 moveto 405.649507144 67.521267405 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 405.649507144 67.521267405 moveto 398.391161232 63.11593076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.391161232 63.11593076 moveto 391.081919704 59.426915245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 391.081919704 59.426915245 moveto 383.750776176 56.409456385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.750776176 56.409456385 moveto 376.423535728 54.018568865 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 376.423535728 54.018568865 moveto 368.358642508 52.051576815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.358642508 52.051576815 moveto 360.353167812 50.73617634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.353167812 50.73617634 moveto 352.430226032 50.01527545 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 352.430226032 50.01527545 moveto 344.609502048 49.8341090249999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 344.609502048 49.8341090249999 moveto 335.67421034 50.23250761 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.67421034 50.23250761 moveto 326.920367004 51.2122132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.920367004 51.2122132 moveto 318.364808164 52.7018421399999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.364808164 52.7018421399999 moveto 310.020472248 54.635550565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.020472248 54.635550565 moveto 301.784193592 56.98806084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.784193592 56.98806084 moveto 293.781816188 59.677884885 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.781816188 59.677884885 moveto 286.017668724 62.6531186899999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.017668724 62.6531186899999 moveto 278.493883472 65.866991815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.493883472 65.866991815 moveto 271.089916808 69.3365786799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.089916808 69.3365786799999 moveto 263.933465668 72.9702369949999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.933465668 72.9702369949999 moveto 257.021925676 76.73301048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.021925676 76.73301048 moveto 250.351630396 80.593981825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.351630396 80.593981825 moveto 242.942476796 85.13968878 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.942476796 85.13968878 moveto 235.841013368 89.74377021 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.841013368 89.74377021 moveto 229.038401548 94.3750205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.038401548 94.3750205 moveto 222.525214864 99.00687884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.525214864 99.00687884 moveto 215.293695512 104.370767305 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.293695512 104.370767305 moveto 208.425372612 109.67585162 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.425372612 109.67585162 moveto 201.90434102 114.898330745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 201.90434102 114.898330745 moveto 195.71478906 120.019178245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.71478906 120.019178245 moveto 188.6169776 126.083986125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.6169776 126.083986125 moveto 181.958536136 131.956769065 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 181.958536136 131.956769065 moveto 175.713317384 137.62340939 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.713317384 137.62340939 moveto 169.856295888 143.07468396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.856295888 143.07468396 moveto 163.340189444 149.29259642 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.340189444 149.29259642 moveto 157.305132512 155.193257285 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.305132512 155.193257285 moveto 151.715465472 160.778317855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.715465472 160.778317855 moveto 146.5379745 166.053056235 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.5379745 166.053056235 moveto 140.174585368 172.668218565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.174585368 172.668218565 moveto 134.431926688 178.762154375 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.431926688 178.762154375 moveto 129.2483576 184.363252415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.2483576 184.363252415 moveto 124.568473068 189.50193931 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.568473068 189.50193931 moveto 120.020971944 194.570668381 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.020971944 194.570668381 moveto 115.947904789 199.175697001 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.947904789 199.175697001 moveto 112.299992202 203.355776798 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.299992202 203.355776798 moveto 109.03391196 207.148534108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.03391196 207.148534108 moveto 106.696611794 209.897484915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.696611794 209.897484915 moveto 104.558126896 212.444692427 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.558126896 212.444692427 moveto 102.604305306 214.807587982 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.604305306 214.807587982 moveto 100.823185082 217.003680651 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.823185082 217.003680651 moveto 99.4961226444 218.677973954 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.4961226444 218.677973954 moveto 98.2728286376 220.263981131 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.2728286376 220.263981131 moveto 97.150727388 221.772456387 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.150727388 221.772456387 moveto 96.1287819196 223.215156923 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.1287819196 223.215156923 moveto 95.336737752 224.403615957 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.336737752 224.403615957 moveto 94.6198223256 225.562981098 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.6198223256 225.562981098 moveto 93.98119646 226.703846349 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.98119646 226.703846349 moveto 93.4257357524 227.83852632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.4257357524 227.83852632 moveto 93.0103562272 228.845514297 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.0103562272 228.845514297 moveto 92.6713707568 229.870555362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.6713707568 229.870555362 moveto 92.4170097164 230.927370939 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.4170097164 230.927370939 moveto 92.2577248856 232.032170707 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.2577248856 232.032170707 moveto 92.2063339484 233.115903797 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.2063339484 233.115903797 moveto 92.2607106184 234.275348966 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.2607106184 234.275348966 moveto 92.4365310592 235.531738817 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.4365310592 235.531738817 moveto 92.7527896588 236.910049132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.7527896588 236.910049132 moveto 93.3011156756 238.632066134 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.3011156756 238.632066134 moveto 94.0925792416 240.591838072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.0925792416 240.591838072 moveto 95.1746731812 242.847215641 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.1746731812 242.847215641 moveto 96.6051003988 245.466728358 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.6051003988 245.466728358 moveto 98.4154985152 248.470382489 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.4154985152 248.470382489 moveto 100.707417292 251.990848205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.707417292 251.990848205 moveto 103.574473519 256.129146201 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.574473519 256.129146201 moveto 107.126724713 260.998738363 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.126724713 260.998738363 moveto 109.66912198 264.361786253 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.66912198 264.361786253 moveto 112.542305631 268.068888676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.542305631 268.068888676 moveto 115.780728153 272.149795275 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.780728153 272.149795275 moveto 119.421321894 276.634127568 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.421321894 276.634127568 moveto 122.985461684 280.932822554 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.985461684 280.932822554 moveto 126.918832 285.583778895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.918832 285.583778895 moveto 131.25045644 290.603155892 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.25045644 290.603155892 moveto 136.010076688 296.004246245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.010076688 296.004246245 moveto 141.097007836 301.65291127 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.097007836 301.65291127 moveto 146.64821478 307.678421385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.64821478 307.678421385 moveto 152.69088712 314.079086735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.69088712 314.079086735 moveto 159.250915876 320.846128005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 159.250915876 320.846128005 moveto 166.781767276 328.38593599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.781767276 328.38593599 moveto 174.943365896 336.284129895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 174.943365896 336.284129895 moveto 183.755531324 344.49375564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.755531324 344.49375564 moveto 193.2317787 352.951675285 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.2317787 352.951675285 moveto 202.155245504 360.561526445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.155245504 360.561526445 moveto 211.599092084 368.23439642 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.599092084 368.23439642 moveto 221.554806836 375.890623575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.554806836 375.890623575 moveto 232.006614216 383.43876044 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.006614216 383.43876044 moveto 241.736854656 390.00213278 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.736854656 390.00213278 moveto 251.821080024 396.317449225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.821080024 396.317449225 moveto 262.231031788 402.2989461 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.231031788 402.2989461 moveto 272.932674004 407.85632777 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.932674004 407.85632777 moveto 283.39974872 412.68666294 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.39974872 412.68666294 moveto 294.057417676 416.961106125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.057417676 416.961106125 moveto 304.861573168 420.59742944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.861573168 420.59742944 moveto 315.763981504 423.51564685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.763981504 423.51564685 moveto 326.372565864 425.58643267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.372565864 425.58643267 moveto 336.974652804 426.847816695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.974652804 426.847816695 moveto 347.518180508 427.24298819 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.518180508 427.24298819 moveto 357.949664524 426.72353134 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.763047272 429.804631655 moveto 333.153967816 431.666994875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.153967816 431.666994875 moveto 345.489541956 432.38878953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.489541956 432.38878953 moveto 357.687386096 431.8909806 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.687386096 431.8909806 moveto 369.663637396 430.111608815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.663637396 430.111608815 moveto 380.746023532 427.199411895 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.746023532 427.199411895 moveto 391.483153788 423.076489995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 391.483153788 423.076489995 moveto 401.807551368 417.74271192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.807551368 417.74271192 moveto 411.655598848 411.216583225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.655598848 411.216583225 moveto 421.932187524 402.645696445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.932187524 402.645696445 moveto 431.481875968 392.734235625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 431.481875968 392.734235625 moveto 440.243746396 381.581271145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.243746396 381.581271145 moveto 448.167981672 369.3067666 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 448.167981672 369.3067666 moveto 454.43416722 357.653052505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.43416722 357.653052505 moveto 459.999712912 345.33559194 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.999712912 345.33559194 moveto 464.853261856 332.46248636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 464.853261856 332.46248636 moveto 468.990371444 319.144904095 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 468.990371444 319.144904095 moveto 472.628159688 304.520979415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.628159688 304.520979415 moveto 475.4576406 289.651788883 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.4576406 289.651788883 moveto 477.496359128 274.668473212 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.496359128 274.668473212 moveto 478.76820208 259.695470628 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.76820208 259.695470628 moveto 479.314639836 243.642778141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.314639836 243.642778141 moveto 479.041078288 227.87133515 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.041078288 227.87133515 moveto 477.995257184 212.499593859 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.995257184 212.499593859 moveto 476.228385008 197.630166681 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.228385008 197.630166681 moveto 473.861815728 183.69493709 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 473.861815728 183.69493709 moveto 470.911091084 170.385622485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.911091084 170.385622485 moveto 467.427130872 157.754288735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 467.427130872 157.754288735 moveto 463.46036336 145.840100745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 463.46036336 145.840100745 moveto 458.3802058 133.093352005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.3802058 133.093352005 moveto 452.801705088 121.3489947 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.801705088 121.3489947 moveto 446.793174008 110.614622445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.793174008 110.614622445 moveto 440.418931236 100.883943815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.418931236 100.883943815 moveto 433.41040344 91.742054175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.41040344 91.742054175 moveto 426.129640276 83.6511954499999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.129640276 83.6511954499999 moveto 418.634794276 76.57087202 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.634794276 76.57087202 moveto 410.978546028 70.45396124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 410.978546028 70.45396124 moveto 403.041952348 65.14723237 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 403.041952348 65.14723237 moveto 395.031321088 60.73265552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.031321088 60.73265552 moveto 386.986410896 57.15007149 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.986410896 57.15007149 moveto 378.942128016 54.33885186 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.942128016 54.33885186 moveto 369.715464988 51.9782276049999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.715464988 51.9782276049999 moveto 360.569548256 50.47183051 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.569548256 50.47183051 moveto 351.537672024 49.733637 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.537672024 49.733637 moveto 342.647364696 49.68200481 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.647364696 49.68200481 moveto 332.69291434 50.36501421 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.69291434 50.36501421 moveto 322.97860118 51.7379928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.97860118 51.7379928 moveto 313.524321428 53.70400836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.524321428 53.70400836 moveto 304.344472032 56.175142995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.344472032 56.175142995 moveto 295.510982484 59.05029229 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.510982484 59.05029229 moveto 286.963389164 62.275948495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.963389164 62.275948495 moveto 278.704411436 65.7902264449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.704411436 65.7902264449999 moveto 270.734228268 69.53823416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.734228268 69.53823416 moveto 262.357234664 73.8417831 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.357234664 73.8417831 moveto 254.317690416 78.3113319449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.317690416 78.3113319449999 moveto 246.609097112 82.8991567099999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.609097112 82.8991567099999 moveto 239.223565788 87.5641914849999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.223565788 87.5641914849999 moveto 230.432493564 93.45092463 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.432493564 93.45092463 moveto 222.113193396 99.34654217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.113193396 99.34654217 moveto 214.245661696 105.204485785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.245661696 105.204485785 moveto 206.809343688 110.98736141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.809343688 110.98736141 moveto 198.762334716 117.5080339 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.762334716 117.5080339 moveto 191.227274512 123.85597649 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.227274512 123.85597649 moveto 184.173775168 130.00577675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.173775168 130.00577675 moveto 177.57246936 135.939492685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.57246936 135.939492685 moveto 169.968176432 142.984262815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.968176432 142.984262815 moveto 162.965980976 149.665992315 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 162.965980976 149.665992315 moveto 156.518391192 155.980656955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.518391192 155.980656955 moveto 150.581227012 161.930634875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 150.581227012 161.930634875 moveto 143.853305476 168.82745839 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.853305476 168.82745839 moveto 137.77891334 175.1932451 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.77891334 175.1932451 moveto 132.29326352 181.05371324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.29326352 181.05371324 moveto 127.337940052 186.43749101 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.337940052 186.43749101 moveto 121.829315008 192.52148858 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.829315008 192.52148858 moveto 116.972099778 197.971694968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.972099778 197.971694968 moveto 112.687412485 202.845456725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.687412485 202.845456725 moveto 108.906154514 207.197417861 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.906154514 207.197417861 moveto 105.098014974 211.628331299 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.098014974 211.628331299 moveto 101.797407744 215.50762312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.797407744 215.50762312 moveto 98.9355362696 218.90068685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.9355362696 218.90068685 moveto 96.453264558 221.866265043 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.453264558 221.866265043 moveto 94.3739973536 224.367512443 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.3739973536 224.367512443 moveto 92.5608380248 226.563006269 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.5608380248 226.563006269 moveto 90.9802984292 228.490527433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.9802984292 228.490527433 moveto 89.6039012444 230.184262791 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.6039012444 230.184262791 moveto 88.7263264436 231.276024964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.7263264436 231.276024964 moveto 87.934725458 232.274132645 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.934725458 232.274132645 moveto 87.2231290012 233.18955044 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.2231290012 233.18955044 moveto 86.5871148916 234.033481899 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.5871148916 234.033481899 moveto 86.1319450672 234.663628886 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.1319450672 234.663628886 moveto 85.7228998408 235.26248894 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.7228998408 235.26248894 moveto 85.3608512332 235.837688565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.3608512332 235.837688565 moveto 85.04816304 236.398220455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.04816304 236.398220455 moveto 84.828034444 236.862480647 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.828034444 236.862480647 moveto 84.6489456252 237.331754093 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.6489456252 237.331754093 moveto 84.5162174248 237.815479218 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.5162174248 237.815479218 moveto 84.4371295724 238.32533483 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.4371295724 238.32533483 moveto 84.4193985628 238.798950127 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.4193985628 238.798950127 moveto 84.4572794384 239.314586143 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.4572794384 239.314586143 moveto 84.56116433 239.886487353 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.56116433 239.886487353 moveto 84.74415972 240.532122956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.74415972 240.532122956 moveto 84.9957410464 241.207891529 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.9957410464 241.207891529 moveto 85.3434326952 241.983829638 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.3434326952 241.983829638 moveto 85.8064907372 242.884221733 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.8064907372 242.884221733 moveto 86.4084416752 243.938332803 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.4084416752 243.938332803 moveto 87.173924044 245.175080303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.173924044 245.175080303 moveto 88.13954791 246.640336265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.13954791 246.640336265 moveto 89.3467741396 248.383549763 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.3467741396 248.383549763 moveto 90.8455869636 250.463352003 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.8455869636 250.463352003 moveto 92.5390517204 252.740697824 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.5390517204 252.740697824 moveto 94.587472154 255.426004376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.587472154 255.426004376 moveto 97.056255256 258.590830536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.056255256 258.590830536 moveto 100.021530062 262.315730827 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.021530062 262.315730827 moveto 102.647914268 265.560025732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.647914268 265.560025732 moveto 105.651296555 269.217254798 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.651296555 269.217254798 moveto 109.078777261 273.330695673 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.078777261 273.330695673 moveto 112.981744741 277.944567059 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.981744741 277.944567059 moveto 116.65902743 282.228524435 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.65902743 282.228524435 moveto 120.743985628 286.919694125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.743985628 286.919694125 moveto 125.273058768 292.04090295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.273058768 292.04090295 moveto 130.28398168 297.611857005 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.28398168 297.611857005 moveto 135.400224128 303.198950795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.400224128 303.198950795 moveto 140.995931892 309.19433353 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.995931892 309.19433353 moveto 147.101684944 315.599559935 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.101684944 315.599559935 moveto 153.746954224 322.40882706 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.746954224 322.40882706 moveto 161.47749584 330.116930935 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.47749584 330.116930935 moveto 169.88604798 338.238414145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.88604798 338.238414145 moveto 178.997387032 346.72549415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.997387032 346.72549415 moveto 188.829365 355.511798605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.829365 355.511798605 moveto 198.679858216 363.91895437 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.679858216 363.91895437 moveto 209.167448352 372.423350765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.167448352 372.423350765 moveto 220.281819688 380.918845475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.281819688 380.918845475 moveto 232.001915196 389.281661375 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.001915196 389.281661375 moveto 242.585703708 396.28926267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.585703708 396.28926267 moveto 253.56808344 402.993394115 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.56808344 402.993394115 moveto 264.912773664 409.287170955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.912773664 409.287170955 moveto 276.575939776 415.05827866 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.575939776 415.05827866 moveto 287.406735608 419.751667855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.406735608 419.751667855 moveto 298.414435956 423.83058696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.414435956 423.83058696 moveto 309.550709268 427.209116475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.550709268 427.209116475 moveto 320.763047272 429.804631655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.350761204 419.60974416 moveto 294.617130556 424.02398654 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 294.617130556 424.02398654 moveto 306.035857924 427.729515245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 306.035857924 427.729515245 moveto 317.5515983 430.635651205 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 317.5515983 430.635651205 moveto 329.104812868 432.656937655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 329.104812868 432.656937655 moveto 342.937778404 433.80552886 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 342.937778404 433.80552886 moveto 356.61983738 433.450341665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 356.61983738 433.450341665 moveto 370.034475728 431.501366635 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 370.034475728 431.501366635 moveto 383.065133728 427.898635795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 383.065133728 427.898635795 moveto 394.590948204 423.112018075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 394.590948204 423.112018075 moveto 405.612991056 416.91439336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 405.612991056 416.91439336 moveto 416.052968864 409.336599725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 416.052968864 409.336599725 moveto 425.83981568 400.434181555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 425.83981568 400.434181555 moveto 434.658759544 390.596495505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 434.658759544 390.596495505 moveto 442.754125096 379.67512503 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 442.754125096 379.67512503 moveto 450.086434924 367.776856675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 450.086434924 367.776856675 moveto 456.625694556 355.021380915 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 456.625694556 355.021380915 moveto 462.411206872 341.38295323 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 462.411206872 341.38295323 moveto 467.353597112 327.14081155 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 467.353597112 327.14081155 moveto 471.450985304 312.43808579 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 471.450985304 312.43808579 moveto 474.710298444 297.417541785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 474.710298444 297.417541785 moveto 477.499015616 279.476499491 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 477.499015616 279.476499491 moveto 479.179676144 261.504947788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 479.179676144 261.504947788 moveto 479.801097384 243.703928518 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 479.801097384 243.703928518 moveto 479.421404728 226.254287292 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 479.421404728 226.254287292 moveto 478.212555796 210.338724423 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 478.212555796 210.338724423 moveto 476.237411548 194.984128881 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 476.237411548 194.984128881 moveto 473.55623128 180.28362297 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 473.55623128 180.28362297 moveto 470.230383284 166.312113685 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 470.230383284 166.312113685 moveto 466.033558404 152.25333165 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 466.033558404 152.25333165 moveto 461.244515524 139.142120455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 461.244515524 139.142120455 moveto 455.934630416 127.009437625 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 455.934630416 127.009437625 moveto 450.17220594 115.869473525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 450.17220594 115.869473525 moveto 443.252812456 104.55840175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 443.252812456 104.55840175 moveto 435.930608352 94.4757086149999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 435.930608352 94.4757086149999 moveto 428.283628552 85.5873587899999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 428.283628552 85.5873587899999 moveto 420.382877264 77.84725302 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 420.382877264 77.84725302 moveto 412.130604056 71.07907114 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 412.130604056 71.07907114 moveto 403.741476876 65.382277195 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 403.741476876 65.382277195 moveto 395.26905272 60.687491665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 395.26905272 60.687491665 moveto 386.760310208 56.92315336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 386.760310208 56.92315336 moveto 377.050692056 53.669783835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 377.050692056 53.669783835 moveto 367.398691208 51.4298515949999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 367.398691208 51.4298515949999 moveto 357.847747424 50.10082853 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 357.847747424 50.10082853 moveto 348.43372516 49.584915405 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 348.43372516 49.584915405 moveto 337.68125338 49.886664475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 337.68125338 49.886664475 moveto 327.189923444 51.03145221 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 327.189923444 51.03145221 moveto 316.986954344 52.89624735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 316.986954344 52.89624735 moveto 307.091971284 55.3699286199999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 307.091971284 55.3699286199999 moveto 297.491976996 58.36189726 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 297.491976996 58.36189726 moveto 288.223099468 61.7768285099999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 288.223099468 61.7768285099999 moveto 279.289229472 65.53578953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 279.289229472 65.53578953 moveto 270.690786224 69.569393735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 270.690786224 69.569393735 moveto 261.544639928 74.2904976799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 261.544639928 74.2904976799999 moveto 252.801642764 79.203571085 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 252.801642764 79.203571085 moveto 244.452976844 84.247653105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 244.452976844 84.247653105 moveto 236.48796078 89.371065725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 236.48796078 89.371065725 moveto 227.25491066 95.6789110149999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 227.25491066 95.6789110149999 moveto 218.553382184 101.97553737 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 218.553382184 101.97553737 moveto 210.358589752 108.208838845 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 210.358589752 108.208838845 moveto 202.645272888 114.337799415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 202.645272888 114.337799415 moveto 193.756345084 121.70811784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 193.756345084 121.70811784 moveto 185.515234776 128.82823495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 185.515234776 128.82823495 moveto 177.877181012 135.66813392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 177.877181012 135.66813392 moveto 170.799444208 142.20869117 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 170.799444208 142.20869117 moveto 162.839967324 149.792195755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 162.839967324 149.792195755 moveto 155.590378024 156.905636785 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 155.590378024 156.905636785 moveto 148.987021152 163.553036805 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 148.987021152 163.553036805 moveto 142.971519976 169.74577011 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 142.971519976 169.74577011 moveto 136.102461428 176.974777595 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 136.102461428 176.974777595 moveto 129.996473668 183.539825095 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 129.996473668 183.539825095 moveto 124.5668234 189.48613505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 124.5668234 189.48613505 moveto 119.736706221 194.860470967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 119.736706221 194.860470967 moveto 113.743513749 201.638566855 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 113.743513749 201.638566855 moveto 108.666576988 207.474440807 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 108.666576988 207.474440807 moveto 104.362788408 212.488471281 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 104.362788408 212.488471281 moveto 100.711915932 216.789221757 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 100.711915932 216.789221757 moveto 97.6776551832 220.396672949 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 97.6776551832 220.396672949 moveto 95.0916307004 223.494746968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 95.0916307004 223.494746968 moveto 92.8866522016 226.153367495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 92.8866522016 226.153367495 moveto 91.0058158108 228.43346233 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 91.0058158108 228.43346233 moveto 89.2625167788 230.557011897 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 89.2625167788 230.557011897 moveto 87.7967377268 232.350179844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 87.7967377268 232.350179844 moveto 86.5639905456 233.863915647 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 86.5639905456 233.863915647 moveto 85.5270985752 235.141581252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 85.5270985752 235.141581252 moveto 84.7635537632 236.085719074 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 84.7635537632 236.085719074 moveto 84.106659986 236.901352034 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 84.106659986 236.901352034 moveto 83.5421654186 237.606777491 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 83.5421654186 237.606777491 moveto 83.0583340186 238.218453791 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 83.0583340186 238.218453791 moveto 82.7541662495 238.610039799 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.7541662495 238.610039799 moveto 82.4845535231 238.966462399 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.4845535231 238.966462399 moveto 82.2478739059 239.293641124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.2478739059 239.293641124 moveto 82.0437043996 239.598183593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.0437043996 239.598183593 moveto 81.9076286521 239.825077849 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.9076286521 239.825077849 moveto 81.7934485122 240.047485067 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.7934485122 240.047485067 moveto 81.7037425845 240.271164608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.7037425845 240.271164608 moveto 81.6426122019 240.503567853 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.6426122019 240.503567853 moveto 81.6180101981 240.707489378 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.6180101981 240.707489378 moveto 81.6214470153 240.930801783 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.6214470153 240.930801783 moveto 81.6593566686 241.182535414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.6593566686 241.182535414 moveto 81.7403572186 241.474358118 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.7403572186 241.474358118 moveto 81.8520203677 241.766259216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 81.8520203677 241.766259216 moveto 82.0124448906 242.110082464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.0124448906 242.110082464 moveto 82.2332658833 242.520705338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.2332658833 242.520705338 moveto 82.5292051968 243.016748648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.5292051968 243.016748648 moveto 82.877779075 243.559516078 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.877779075 243.559516078 moveto 83.320365773 244.212763579 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 83.320365773 244.212763579 moveto 83.8781135406 245.002561979 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 83.8781135406 245.002561979 moveto 84.5770077528 245.960683399 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 84.5770077528 245.960683399 moveto 85.4285853952 247.098865988 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 85.4285853952 247.098865988 moveto 86.4822277104 248.478867006 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 86.4822277104 248.478867006 moveto 87.7821410868 250.153034774 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 87.7821410868 250.153034774 moveto 89.3818192368 252.183789122 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 89.3818192368 252.183789122 moveto 91.1854280752 254.445217589 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 91.1854280752 254.445217589 moveto 93.3615282444 257.143274177 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 93.3615282444 257.143274177 moveto 95.9815655616 260.355879502 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 95.9815655616 260.355879502 moveto 99.1289891312 264.171014332 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 99.1289891312 264.171014332 moveto 101.84160839 267.424523516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 101.84160839 267.424523516 moveto 104.936283535 271.099945523 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 104.936283535 271.099945523 moveto 108.460864313 275.240923428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 108.460864313 275.240923428 moveto 112.467499844 279.891921295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 112.467499844 279.891921295 moveto 116.34416102 284.336253418 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 116.34416102 284.336253418 moveto 120.65761436 289.217719549 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 120.65761436 289.217719549 moveto 125.44779654 294.56063176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 125.44779654 294.56063176 moveto 130.755994872 300.385525375 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 130.755994872 300.385525375 moveto 136.132927036 306.18297953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 136.132927036 306.18297953 moveto 142.016712264 312.40768927 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 142.016712264 312.40768927 moveto 148.43947012 319.05914454 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 148.43947012 319.05914454 moveto 155.431871056 326.128382695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 155.431871056 326.128382695 moveto 163.830607396 334.37886421 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 163.830607396 334.37886421 moveto 172.988472328 343.07057779 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 172.988472328 343.07057779 moveto 182.93127486 352.139793015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 182.93127486 352.139793015 moveto 193.675479892 361.49902873 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 193.675479892 361.49902873 moveto 203.95933776 370.01627461 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 203.95933776 370.01627461 moveto 214.881394668 378.575172485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 214.881394668 378.575172485 moveto 226.425267172 387.057978775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 226.425267172 387.057978775 moveto 238.562974788 395.32933775 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 238.562974788 395.32933775 moveto 249.255386148 402.043727235 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 249.255386148 402.043727235 moveto 260.311324296 408.3993301 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 260.311324296 408.3993301 moveto 271.691793764 414.2910017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 271.691793764 414.2910017 moveto 283.350761204 419.60974416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 267.835903996 412.63196368 moveto 278.941308728 417.94353522 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.941308728 417.94353522 moveto 290.273356476 422.66324632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.273356476 422.66324632 moveto 301.781738696 426.693512505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.781738696 426.693512505 moveto 313.41091652 429.938937265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.41091652 429.938937265 moveto 325.01370862 432.29436961 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.01370862 432.29436961 moveto 336.613411128 433.704843745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.613411128 433.704843745 moveto 348.144400148 434.0976317 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.144400148 434.0976317 moveto 359.539103036 433.41144461 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.539103036 433.41144461 moveto 371.31171364 431.4707846 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 371.31171364 431.4707846 moveto 382.777748816 428.24371615 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.777748816 428.24371615 moveto 393.859543164 423.71283872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 393.859543164 423.71283872 moveto 404.482750872 417.88196176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.482750872 417.88196176 moveto 415.980039448 409.653748695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.980039448 409.653748695 moveto 426.692087512 399.83077755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.692087512 399.83077755 moveto 436.536856012 388.51794399 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 436.536856012 388.51794399 moveto 445.44624274 375.84992314 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.44624274 375.84992314 moveto 452.448509324 363.748592365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.448509324 363.748592365 moveto 458.66406704 350.84767898 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.66406704 350.84767898 moveto 464.076154568 337.275409475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 464.076154568 337.275409475 moveto 468.676978512 323.164946485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 468.676978512 323.164946485 moveto 472.822048404 307.094136125 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.822048404 307.094136125 moveto 475.988170084 290.711181238 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.988170084 290.711181238 moveto 478.198267416 274.190637788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.198267416 274.190637788 moveto 479.484512064 257.697289226 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.484512064 257.697289226 moveto 479.885741532 240.861646694 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.885741532 240.861646694 moveto 479.39631648 224.367824337 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.39631648 224.367824337 moveto 478.072569516 208.347923017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.072569516 208.347923017 moveto 475.974611248 192.914736061 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.974611248 192.914736061 moveto 473.07862626 177.768082735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 473.07862626 177.768082735 moveto 469.500239848 163.41961248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.500239848 163.41961248 moveto 465.307954112 149.929954655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.307954112 149.929954655 moveto 460.568983304 137.34137615 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.568983304 137.34137615 moveto 454.11571938 123.188330695 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.11571938 123.188330695 moveto 447.053590636 110.441564735 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 447.053590636 110.441564735 moveto 439.488429864 99.091390055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.488429864 99.091390055 moveto 431.517612944 89.105914555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 431.517612944 89.105914555 moveto 423.425857688 80.6231404 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.425857688 80.6231404 moveto 415.1057916 73.33694376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.1057916 73.33694376 moveto 406.623663952 67.1811913 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.623663952 67.1811913 moveto 398.038111252 62.0843239999999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.038111252 62.0843239999999 moveto 388.38983484 57.551687985 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.38983484 57.551687985 moveto 378.738292612 54.14119334 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.738292612 54.14119334 moveto 369.135888844 51.74855667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.135888844 51.74855667 moveto 359.626547356 50.2725001 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.626547356 50.2725001 moveto 348.384400744 49.5749035599999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.384400744 49.5749035599999 moveto 337.37862934 49.90156188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.37862934 49.90156188 moveto 326.647905644 51.107818105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.647905644 51.107818105 moveto 316.221007768 53.062126395 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.221007768 53.062126395 moveto 306.01566402 55.6756435149999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.01566402 55.6756435149999 moveto 296.155293212 58.822926605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.155293212 58.822926605 moveto 286.6481876 62.407463905 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.6481876 62.407463905 moveto 277.497930604 66.344355365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.497930604 66.344355365 moveto 267.74199038 71.045643145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.74199038 71.045643145 moveto 258.422285924 76.0030682 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.422285924 76.0030682 moveto 249.530818188 81.141601365 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.530818188 81.141601365 moveto 241.056990244 86.39775416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.056990244 86.39775416 moveto 231.30317012 92.8674326149999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.30317012 92.8674326149999 moveto 222.122676284 99.35418342 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.122676284 99.35418342 moveto 213.489005944 105.79543561 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.489005944 105.79543561 moveto 205.37483196 112.141985355 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.37483196 112.141985355 moveto 195.006645036 120.653268645 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.006645036 120.653268645 moveto 185.499867844 128.84299216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.499867844 128.84299216 moveto 176.786772768 136.66426429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 176.786772768 136.66426429 moveto 168.803089664 144.08909636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.803089664 144.08909636 moveto 160.12332216 152.4356317 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.12332216 152.4356317 moveto 152.306943344 160.191616815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.306943344 160.191616815 moveto 145.267346904 167.367483495 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 145.267346904 167.367483495 moveto 138.926082188 173.98339426 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.926082188 173.98339426 moveto 132.1564284 181.20288582 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.1564284 181.20288582 moveto 126.178403552 187.710778455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.178403552 187.710778455 moveto 120.89722722 193.562169555 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.89722722 193.562169555 moveto 116.229612175 198.812392883 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.229612175 198.812392883 moveto 111.186328084 204.567418214 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.186328084 204.567418214 moveto 106.854291699 209.578393307 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.854291699 209.578393307 moveto 103.131065961 213.934611892 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.131065961 213.934611892 moveto 99.9293377084 217.716797835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.9293377084 217.716797835 moveto 96.9051580004 221.319860343 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.9051580004 221.319860343 moveto 94.3435606412 224.394918637 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.3435606412 224.394918637 moveto 92.1727817428 227.017354634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.1727817428 227.017354634 moveto 90.3324142188 229.252395964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.3324142188 229.252395964 moveto 88.5675065572 231.405966378 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.5675065572 231.405966378 moveto 87.1053959472 233.197594155 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.1053959472 233.197594155 moveto 85.8937179048 234.687566465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.8937179048 234.687566465 moveto 84.8892936348 235.92633105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.8892936348 235.92633105 moveto 84.0455325956 236.969745636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.0455325956 236.969745636 moveto 83.3480245068 237.834678464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.3480245068 237.834678464 moveto 82.7716555586 238.552003384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.7716555586 238.552003384 moveto 82.2960758529 239.147807873 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.2960758529 239.147807873 moveto 82.0190924218 239.498705335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.0190924218 239.498705335 moveto 81.7780207038 239.809549258 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.7780207038 239.809549258 moveto 81.5698840571 240.086968516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.5698840571 240.086968516 moveto 81.3930621662 240.338022789 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.3930621662 240.338022789 moveto 81.2827955404 240.510857145 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.2827955404 240.510857145 moveto 81.1905032561 240.677771538 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1905032561 240.677771538 moveto 81.1182213539 240.843894471 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1182213539 240.843894471 moveto 81.0695350408 241.016049822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0695350408 241.016049822 moveto 81.051391158 241.162732471 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.051391158 241.162732471 moveto 81.0557578826 241.32511982 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0557578826 241.32511982 moveto 81.0884865386 241.511405077 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0884865386 241.511405077 moveto 81.1576650611 241.73249433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.1576650611 241.73249433 moveto 81.2509463429 241.953535015 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.2509463429 241.953535015 moveto 81.3855089976 242.219555645 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.3855089976 242.219555645 moveto 81.57227268 242.54449 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.57227268 242.54449 moveto 81.8253274346 242.946144673 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.8253274346 242.946144673 moveto 82.1131951817 243.375251107 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.1131951817 243.375251107 moveto 82.4797257693 243.898020209 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.4797257693 243.898020209 moveto 82.9435446291 244.537488578 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.9435446291 244.537488578 moveto 83.5277495962 245.322035207 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.5277495962 245.322035207 moveto 84.2033057836 246.211332245 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.2033057836 246.211332245 moveto 85.0352943096 247.28965175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.0352943096 247.28965175 moveto 86.0577376484 248.597757857 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.0577376484 248.597757857 moveto 87.3118323916 250.184460481 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.3118323916 250.184460481 moveto 88.81465608 252.067163307 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.81465608 252.067163307 moveto 90.644088214 254.338094099 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.644088214 254.338094099 moveto 92.867121348 257.072573257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.867121348 257.072573257 moveto 95.5631621832 260.357533992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.5631621832 260.357533992 moveto 98.1278250528 263.453931396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.1278250528 263.453931396 moveto 101.111171356 267.023416881 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.111171356 267.023416881 moveto 104.575255868 271.126326486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.575255868 271.126326486 moveto 108.589219514 275.826123581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.589219514 275.826123581 moveto 112.189621855 279.993015948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.189621855 279.993015948 moveto 116.219129545 284.602522835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.219129545 284.602522835 moveto 120.720522376 289.684616263 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.720522376 289.684616263 moveto 125.738649932 295.26645934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.738649932 295.26645934 moveto 130.800884984 300.807759765 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.800884984 300.807759765 moveto 136.366604632 306.79572141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.366604632 306.79572141 moveto 142.471528748 313.23684348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 142.471528748 313.23684348 moveto 149.150580112 320.12987476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.150580112 320.12987476 moveto 156.082217564 327.11142627 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.082217564 327.11142627 moveto 163.592293156 334.474664415 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.592293156 334.474664415 moveto 171.703918032 342.18884686 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.703918032 342.18884686 moveto 180.435750976 350.210114265 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.435750976 350.210114265 moveto 189.702709764 358.39516789 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.702709764 358.39516789 moveto 199.596136784 366.75155714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.596136784 366.75155714 moveto 210.113886492 375.190468575 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.113886492 375.190468575 moveto 221.2445219 383.606065445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.2445219 383.606065445 moveto 232.195603564 391.351100325 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.195603564 391.351100325 moveto 243.63722528 398.854915505 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.63722528 398.854915505 moveto 255.532808516 405.99308443 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.532808516 405.99308443 moveto 267.835903996 412.63196368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 342 moveto 64 342 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 342 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 342 moveto 480 342 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 242 moveto 64 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 242 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 242 moveto 480 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 142 moveto 64 142 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 142 [ (-2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 142 moveto 480 142 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (-4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 1) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 0) ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/kpr5.ps0000640000175000017500000000775713570013207013677 0ustar sksk%!PS-Adobe-2.0 %%Creator: gnuplot %%DocumentFonts: Helvetica %%BoundingBox: 50 50 770 554 %%Pages: (atend) %%EndComments /gnudict 40 dict def gnudict begin /Color false def /Solid false def /gnulinewidth 16.000 def /vshift -46 def /dl {10 mul} def /hpt 31.5 def /vpt 31.5 def /M {moveto} bind def /L {lineto} bind def /R {rmoveto} bind def /V {rlineto} bind def /vpt2 vpt 2 mul def /hpt2 hpt 2 mul def /Lshow { currentpoint stroke M 0 vshift R show } def /Rshow { currentpoint stroke M dup stringwidth pop neg vshift R show } def /Cshow { currentpoint stroke M dup stringwidth pop -2 div vshift R show } def /DL { Color {setrgbcolor Solid {pop []} if 0 setdash } {pop pop pop Solid {pop []} if 0 setdash} ifelse } def /BL { stroke gnulinewidth 0.5 mul setlinewidth } def /AL { stroke gnulinewidth 2 div setlinewidth } def /PL { stroke gnulinewidth setlinewidth } def /LTb { BL [] 0 0 0 DL } def /LTa { AL [1 dl 2 dl] 0 setdash 0 0 0 setrgbcolor } def /LT0 { PL [] 0 1 0 DL } def /LT1 { PL [4 dl 2 dl] 0 0 1 DL } def /LT2 { PL [2 dl 3 dl] 1 0 0 DL } def /LT3 { PL [1 dl 1.5 dl] 1 0 1 DL } def /LT4 { PL [5 dl 2 dl 1 dl 2 dl] 0 1 1 DL } def /LT5 { PL [4 dl 3 dl 1 dl 3 dl] 1 1 0 DL } def /LT6 { PL [2 dl 2 dl 2 dl 4 dl] 0 0 0 DL } def /LT7 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 1 0.3 0 DL } def /LT8 { PL [2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 2 dl 4 dl] 0.5 0.5 0.5 DL } def /P { stroke [] 0 setdash currentlinewidth 2 div sub M 0 currentlinewidth V stroke } def /D { stroke [] 0 setdash 2 copy vpt add M hpt neg vpt neg V hpt vpt neg V hpt vpt V hpt neg vpt V closepath stroke P } def /A { stroke [] 0 setdash vpt sub M 0 vpt2 V currentpoint stroke M hpt neg vpt neg R hpt2 0 V stroke } def /B { stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M 0 vpt2 neg V hpt2 0 V 0 vpt2 V hpt2 neg 0 V closepath stroke P } def /C { stroke [] 0 setdash exch hpt sub exch vpt add M hpt2 vpt2 neg V currentpoint stroke M hpt2 neg 0 R hpt2 vpt2 V stroke } def /T { stroke [] 0 setdash 2 copy vpt 1.12 mul add M hpt neg vpt -1.62 mul V hpt 2 mul 0 V hpt neg vpt 1.62 mul V closepath stroke P } def /S { 2 copy A C} def end %%EndProlog %%Page: 1 1 gnudict begin gsave 50 50 translate 0.100 0.100 scale 0 setgray /Helvetica findfont 140 scalefont setfont newpath LTb LT0 6486 4486 M ('1') Rshow 6570 4486 M 252 0 V 3600 2877 M 0 -1 V -1 -2 V -1 -2 V -1 -3 V -4 -7 V -3 -6 V -4 -9 V -6 -12 V -8 -18 V -5 -9 V -5 -12 V -6 -13 V -8 -15 V -4 -9 V -4 -9 V -5 -10 V -5 -11 V -4 -7 V -4 -8 V -4 -8 V -4 -9 V -4 -8 V -4 -8 V -5 -8 V -5 -10 V -5 -9 V -6 -10 V -6 -12 V -8 -14 V -7 -14 V -7 -18 V -7 -22 V -6 -27 V -3 -29 V 3 -36 V 11 -45 V 25 -55 V 41 -60 V 67 -72 V 100 -85 V 149 -100 V 206 -114 V 281 -129 V 371 -145 V 480 -159 V 637 -177 V 791 -183 V 366 -70 V 695 4689 M 138 -94 V 823 -541 V 604 -383 V 432 -267 V 303 -182 V 217 -128 V 143 -82 V 92 -52 V 59 -33 V 55 -29 V 24 -13 V 9 -5 V 4 -2 V 2 -1 V LTb 971 1221 M 4304 601 L 6229 1674 L 2896 2294 L 971 1221 L 1596 1105 M 55 30 V 1431 1014 M (-0.5) Rshow 2638 911 M 55 30 V 2473 820 M (0) Rshow 3679 717 M 55 30 V 3514 625 M (0.5) Rshow 4665 802 M -61 11 V 246 -45 R (-0.5) Lshow 5267 1138 M -61 11 V 246 -45 R (0) Lshow 5868 1473 M -61 11 V 246 -45 R (0.5) Lshow 971 1459 M 63 0 V -126 0 R (-5) Rshow 971 2650 M 63 0 V -126 0 R (0) Rshow 971 3843 M 63 0 V -126 0 R (5) Rshow 971 1221 M 0 3468 V LTa 2157 643 M (x) Cshow 6100 983 M (y) Cshow 500 3200 M (z) Cshow LT1 6486 4346 M ('2') Rshow 6570 4346 M 252 0 V 3600 2877 M 0 1 V 1 1 V 1 2 V 2 2 V 4 5 V 6 7 V 11 14 V 9 12 V 13 15 V 17 22 V 23 29 V 9 12 V 11 13 V 11 14 V 13 16 V 6 9 V 7 8 V 7 9 V 8 10 V 4 6 V 5 6 V 4 6 V 3 6 V 3 4 V 1 4 V 1 4 V -2 3 V -3 3 V -6 1 V -10 2 V -16 0 V -21 -1 V -29 -3 V -42 -5 V -56 -7 V -78 -12 V -104 -17 V -134 -26 V -170 -36 V -258 -63 V -317 -92 V 2161 2730 L 1747 2550 L 1394 2360 L 1049 2123 L 740 1836 L 499 1496 L 358 1073 L 387 591 L 501 351 L 1585 4689 M 68 -71 V 596 -579 V 433 -399 V 315 -278 V 214 -182 V 144 -116 V 93 -74 V 79 -60 V 39 -29 V 19 -13 V 9 -6 V 6 -5 V stroke grestore end showpage %%Trailer %%Pages: 1 auto/07p/doc/include/harvard.sty0000640000175000017500000002332613570013207014630 0ustar sksk%% harvard.sty - harvard bibliography style Version 2.0.5 %% Author: Peter Williams pwil3058@bigpond.net.au %% Copyright: Peter Williams 1994 %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainers of this work are Peter Williams and Thorsten Schnier. %% %% This work consists of all files listed in manifest.txt. %% %% Licence notice added on behalf of Peter Williams and Thorsten Schnier %% by Clea F. Rees 2009/01/30. \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{include/harvard} \RequirePackage{ifthen} \IfFileExists{html.sty}{\RequirePackage{html} \newcommand{\harvardurl}[1]{\htmladdnormallink*{\textbf{URL:} \textit{##1}}{##1}} }{ \newcommand{\harvardurl}[1]{\textbf{URL:} \textit{##1}} } \DeclareOption{full}{\citationmode{full}} \DeclareOption{abbr}{\citationmode{abbr}} \DeclareOption{default}{\citationmode{default}} \DeclareOption{agsmcite}{\citationstyle{agsm}} \DeclareOption{dcucite}{\citationstyle{dcu}} \DeclareOption{round}{\harvardparenthesis{round}\harvardyearparenthesis{round}} \DeclareOption{curly}{\harvardparenthesis{curly}\harvardyearparenthesis{curly}} \DeclareOption{angle}{\harvardparenthesis{angle}\harvardyearparenthesis{angle}} \DeclareOption{square}{\harvardparenthesis{square}\harvardyearparenthesis{square}} \DeclareOption{none}{\harvardparenthesis{none}\harvardyearparenthesis{none}} \DeclareOption*{ \global\edef\HAR@tmp{\CurrentOption} %% Berwin A. Turlach \AtEndDocument{\bibliographystyle{\HAR@tmp}} } %% Kristoffer H. Rose 1995/03/01: %% do not expand macros in citations: put definitions on .aux file instead. {\catcode`\:=12 \catcode`\-=12 \catcode`\>=12 \catcode`\<=12 % \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}% \gdef\codeof@#1:->#2<-:{#2}} \def\harvardpreambletext{\catcode`\#=12 \harvardpreambletext@} \def\harvardpreambletext@#1{\def\next{#1}\catcode`\#=6 % \immediate\write\@auxout{\string\harvardpreambledefs{% \string\AtBeginDocument{\codeof\next}}}} \def\harvardpreambledefs#1{#1\gdef\harvardpreambledefs##1{}} \newcommand{\harvarditem}[4][\null]{\item[]% \if@filesw{ \def\protect##1{\string ##1\space}% \ifthenelse{\equal{#1}{\null}} {\def\next{{#4}{#2}{#2}{#3}}} {\def\next{{#4}{#2}{#1}{#3}}} \immediate\write\@auxout{\string\harvardcite\codeof\next}% }\fi% \protect\hspace*{-\labelwidth}\protect\hspace*{-\labelsep}\ignorespaces% } \newcommand{\harvardcite}[4]{ \global\@namedef{HAR@fn@#1}{#2} \global\@namedef{HAR@an@#1}{#3} \global\@namedef{HAR@yr@#1}{#4} \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname} } \newcommand{\citationmode}[1]{ \renewcommand{\HAR@citemode}{\csname HAR@cite@#1\endcsname} } \newcommand{\HAR@cite@full}{HAR@fn@} \newcommand{\HAR@cite@abbr}{HAR@an@} \newcommand{\HAR@cite@default}{HAR@df@} \newcommand{\HAR@citemode}{\HAR@cite@default} \newcommand{\HAR@citetoaux}[1]{% \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi% } \newcommand{\HAR@checkdef}[2]{\@ifundefined{HAR@df@#1}% {\textbf{?}\@warning{Citation '#1' on page \thepage \space undefined}}% {#2}% } \newcommand{\HAR@dolist}[2]{\def\@citea{\null}\@for\@citeb:=#1\do% {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}% {#2{\@citeb}\HAR@hysep\penalty\@m\ % \HAR@year{\@citeb}\HAR@setd{\@citeb}}}% } \def\@enamedef#1{\expandafter\def\csname #1\expandafter\endcsname\expandafter} \newcommand{\HAR@name}[1]{\csname \HAR@citemode#1\endcsname} \newcommand{\HAR@fname}[1]{\csname HAR@fn@#1\endcsname} \newcommand{\HAR@aname}[1]{\csname HAR@an@#1\endcsname} \newcommand{\HAR@year}[1]{\csname HAR@yr@#1\endcsname} \newcommand{\HAR@setd}[1]{% \global\@enamedef{HAR@df@#1}{\csname HAR@an@#1\endcsname}% } %% Berwin A. Turlach \global\@namedef{HAR@df@*}{\csname HAR@fn@*\endcsname} \renewcommand{\nocite}[1]{\HAR@citetoaux{#1}% \@for\@citeb:=#1\do% {\HAR@checkdef{\@citeb}{}}}% \renewcommand{\cite}{\@ifstar{\@ifstar{\HAR@acite}{\HAR@fcite}}{\HAR@dcite}} \newcommand{\HAR@dcite}[2][\null]{\HAR@citetoaux{#2}% {\harvardleft\HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\HAR@acite}[2][\null]{\HAR@citetoaux{#2}% {\harvardleft\HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\HAR@fcite}[2][\null]{\HAR@citetoaux{#2}% {\harvardleft\HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\citeaffixed}{\@ifstar{\@ifstar{\HAR@aciteaff}{\HAR@fciteaff}}% {\HAR@dciteaff}% } \newcommand{\HAR@fciteaff}[3][\null]{\HAR@citetoaux{#2}% {\harvardleft#3\ \HAR@dolist{#2}{\HAR@fname}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\HAR@aciteaff}[3][\null]{\HAR@citetoaux{#2}% {\harvardleft#3\ \HAR@dolist{#2}{\HAR@aname}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\HAR@dciteaff}[3][\null]{\HAR@citetoaux{#2}% {\harvardleft#3\ \HAR@dolist{#2}{\HAR@name}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\citeasnoun}{\@ifstar{\@ifstar{\HAR@aciteasn}{\HAR@fciteasn}}% {\HAR@dciteasn}% } \newcommand{\HAR@fciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@fname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\HAR@aciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@aname{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\HAR@dciteasn}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@name{#2}\ \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\possessivecite}{\@ifstar{\@ifstar{\HAR@acitepos}{\HAR@fcitepos}}% {\HAR@dcitepos}% } \newcommand{\HAR@fcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@fname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\HAR@acitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@aname{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\HAR@dcitepos}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@name{#2}'s \harvardyearleft\HAR@year{#2}\ifthenelse{\equal{#1}{\null}} {}{, #1}\harvardyearright}\HAR@setd{#2}}% } \newcommand{\citename}{\@ifstar{\@ifstar{\HAR@acitenam}\HAR@fcitenam}% {\HAR@dcitenam}% } \newcommand{\HAR@fcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@fname{#2}\ifthenelse{\equal{#1}{\null}} {}{\ \harvardleft#1\harvardright}}}% } \newcommand{\HAR@acitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@aname{#2}\ifthenelse{\equal{#1}{\null}} {}{\ \harvardleft#1\harvardright}}}% } \newcommand{\HAR@dcitenam}[2][\null]{\HAR@citetoaux{#2}\HAR@checkdef{#2}{% {\HAR@name{#2}\ifthenelse{\equal{#1}{\null}} {}{\ \harvardleft#1\harvardright}}}% } \newcommand{\citeyear}{\@ifstar{\HAR@citeyrnb}{\HAR@citeyr}} \newcommand{\HAR@citeyrnb}[2][\null]{\HAR@citetoaux{#2}% {\def\@citea{\null}\@for\@citeb:=#2\do% {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}% {\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}% {}{, #1}}% } \newcommand{\HAR@citeyr}[2][\null]{\HAR@citetoaux{#2}% {\harvardleft\def\@citea{\null}\@for\@citeb:=#2\do% {\@citea\def\@citea{\HAR@hisep\penalty\@m\ }\HAR@checkdef{\@citeb}% {\HAR@year{\@citeb}}}\ifthenelse{\equal{#1}{\null}}% {}{, #1}\harvardright}% } \newcommand{\HAR@hysep@apsr}{\null} \newcommand{\HAR@hisep@apsr}{;} \newcommand{\HAR@hysep@agsm}{\null} \newcommand{\HAR@hisep@agsm}{,} \newcommand{\HAR@hysep@dcu}{,} \newcommand{\HAR@hisep@dcu}{;} \newcommand{\HAR@and@agsm}{\&} \newcommand{\HAR@and@dcu}{and} \newcommand{\HAR@and@apsr}{and} \newcommand{\HAR@hysep}{\HAR@hysep@agsm} \newcommand{\HAR@hisep}{\HAR@hisep@agsm} \newcommand{\harvardand}{\HAR@and@agsm} \newcommand{\citationstyle}[1]{% \renewcommand{\HAR@hysep}{\csname HAR@hysep@#1\endcsname} \renewcommand{\HAR@hisep}{\csname HAR@hisep@#1\endcsname} \renewcommand{\harvardand}{\csname HAR@and@#1\endcsname} } \newcommand{\HAR@bl@round}{(} \newcommand{\HAR@br@round}{)} \newcommand{\HAR@bl@square}{[} \newcommand{\HAR@br@square}{]} \newcommand{\HAR@bl@curly}{\{} \newcommand{\HAR@br@curly}{\}} \newcommand{\HAR@bl@angle}{$<$} \newcommand{\HAR@br@angle}{$>$} \newcommand{\HAR@bl@none}{} \newcommand{\HAR@br@none}{} \newcommand{\harvardleft}{\HAR@bl@round} \newcommand{\harvardright}{\HAR@br@round} \newcommand{\harvardparenthesis}[1]{ \renewcommand{\harvardleft}{\csname HAR@bl@#1\endcsname} \renewcommand{\harvardright}{\csname HAR@br@#1\endcsname} \harvardyearparenthesis{#1} } \newcommand{\harvardyearleft}{\HAR@bl@round} \newcommand{\harvardyearright}{\HAR@br@round} \newcommand{\harvardyearparenthesis}[1]{ \renewcommand{\harvardyearleft}{\csname HAR@bl@#1\endcsname} \renewcommand{\harvardyearright}{\csname HAR@br@#1\endcsname} } \newcommand{\HAR@checkcitations}[4]{ \def\HAR@tempa{#2}\expandafter \ifx \csname HAR@fn@#1\endcsname \HAR@tempa \def\HAR@tempa{#3}\expandafter \ifx \csname HAR@an@#1\endcsname \HAR@tempa \def\HAR@tempa{#4}\expandafter \ifx \csname HAR@yr@#1\endcsname \HAR@tempa \else \@tempswatrue \fi \else \@tempswatrue \fi \else \@tempswatrue \fi } \AtEndDocument{\renewcommand{\harvardcite}{\HAR@checkcitations}} \ExecuteOptions{agsm,agsmcite,default,round} \ProcessOptions* auto/07p/doc/include/centerMenu.fig0000640000175000017500000000025213570013207015225 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 centerMenu.png 225 150 2580 150 2580 1500 225 1500 225 150 auto/07p/doc/include/drawCoordMenu.png0000640000175000017500000000201713570013207015711 0ustar skskPNG  IHDRmoiR IDATx=N$1 "iB@'@s8#mG"F^r1AcySn7#\_z3p<>Q^'xċ蜻KK #aA j ETJ=WQJOs:G=: ROY qWCSgnD/<`Ygv,!$g/PA2l$NLuEה1Sׁ}Gb<ᦜWq )PG ×u!EN |\I#ꈁ:b#)O<#ubǢ5}_-f^o'F. 9KJ|d¼NSGvbj㉿11%%ER]Hf}ΐcuk{0`uόǚ[:殖DnGW+~#?sެy3sϦPF1ut+u@1PG u@1PG C?94Rkvp6,* Bizz J }bE_i;VamM>Zblc'ε+GţGb;㶐 rMgJuN,e?j[NH5' \ܿWݝk]$iʙ}up$u@1PG u@1PG u0ϕf\>pfΏ5b_\A >Ҵ1D>\s5 A #@\H#ꈁ:b>{ \u?3 #ꈁ:by$iLmqq`ն|w[T"/]M3@  ~;* wBr[|Uo2Vs~N ;Xiiԩy> KlQk/]PG u@1wp ^h2IENDB`auto/07p/doc/include/exit.png0000640000175000017500000000155213570013207014114 0ustar skskPNG  IHDRoZ9)1IDATxn (O0^[a klKܑ.JM LZs e3uT.gPI4.PᲥʬ5 M]6$7$h,?ŽGQ,͖"w!C:E=|Hlxjާk`j"HW|…߆`R}Mg &j"H&~ɡс cR8X.: hbd굢hx2³|8ce4+Lͺ'g܀(gC 7/mx^wb銔ES*x"H&:H^ Xs aHIENDB`auto/07p/doc/include/emL1Sol.fig0000640000175000017500000000024313570013207014374 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 emL1Sol.png 75 75 10215 75 10215 8295 75 8295 75 75 auto/07p/doc/include/kpr8.ps0000640000175000017500000012765313570013207013700 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments -30 800 translate -90 rotate 0.75 0.75 scale /lthick 5 def %% line thickness % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (2) 495 460 PR (.) 550 460 PR (0) 605 460 PR 840 460 moveto (-) 840 460 PR (1) 895 460 PR (.) 950 460 PR (5) 1005 460 PR 1000 540 moveto 1000 600 lineto stroke 1000 600 moveto 1240 460 moveto (-) 1240 460 PR (1) 1295 460 PR (.) 1350 460 PR (0) 1405 460 PR 1400 540 moveto 1400 600 lineto stroke 1400 600 moveto 1640 460 moveto (-) 1640 460 PR (0) 1695 460 PR (.) 1750 460 PR (5) 1805 460 PR 1800 540 moveto 1800 600 lineto stroke 1800 600 moveto 2040 460 moveto (0) 2095 460 PR (.) 2150 460 PR (0) 2205 460 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2440 460 moveto (0) 2495 460 PR (.) 2550 460 PR (5) 2605 460 PR 2600 540 moveto 2600 600 lineto stroke 2600 600 moveto 2840 460 moveto (1) 2895 460 PR (.) 2950 460 PR (0) 3005 460 PR 3000 540 moveto 3000 600 lineto stroke 3000 600 moveto 3240 460 moveto (1) 3295 460 PR (.) 3350 460 PR (5) 3405 460 PR 3400 540 moveto 3400 600 lineto stroke 3400 600 moveto 3640 460 moveto (2) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 279 600 PR (1) 334 600 PR (.) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 848 moveto (-) 279 848 PR (0) 334 848 PR (.) 389 848 PR (7) 444 848 PR (5) 499 848 PR 540 848 moveto 600 848 lineto stroke 600 848 moveto 4 1100 moveto (-) 279 1100 PR (0) 334 1100 PR (.) 389 1100 PR (5) 444 1100 PR (0) 499 1100 PR 540 1100 moveto 600 1100 lineto stroke 600 1100 moveto 4 1348 moveto (-) 279 1348 PR (0) 334 1348 PR (.) 389 1348 PR (2) 444 1348 PR (5) 499 1348 PR 540 1348 moveto 600 1348 lineto stroke 600 1348 moveto 4 1600 moveto (0) 334 1600 PR (.) 389 1600 PR (0) 444 1600 PR (0) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1848 moveto (0) 334 1848 PR (.) 389 1848 PR (2) 444 1848 PR (5) 499 1848 PR 540 1848 moveto 600 1848 lineto stroke 600 1848 moveto 4 2100 moveto (0) 334 2100 PR (.) 389 2100 PR (5) 444 2100 PR (0) 499 2100 PR 540 2100 moveto 600 2100 lineto stroke 600 2100 moveto 4 2348 moveto (0) 334 2348 PR (.) 389 2348 PR (7) 444 2348 PR (5) 499 2348 PR 540 2348 moveto 600 2348 lineto stroke 600 2348 moveto 4 2600 moveto (1) 334 2600 PR (.) 389 2600 PR (0) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 2272 1692 moveto 2272 1692 lineto stroke 2272 1692 moveto 2296 1420 moveto (1) 2296 1420 PR 1964 1552 moveto 2200 1600 lineto stroke 2200 1600 moveto 1864 1536 moveto (2) 1864 1536 PR 3288 1556 moveto 3340 1664 lineto stroke 3340 1664 moveto 3232 1480 moveto (3) 3232 1480 PR 3608 1924 moveto 3504 1864 lineto stroke 3504 1864 moveto 3628 1936 moveto (4) 3628 1936 PR 3396 2444 moveto 3256 2364 lineto stroke 3256 2364 moveto 3412 2452 moveto (5) 3412 2452 PR 2800 2276 moveto 2720 2368 lineto stroke 2720 2368 moveto 2784 2208 moveto (6) 2784 2208 PR 2488 1808 moveto 2332 1824 lineto stroke 2332 1824 moveto 2508 1804 moveto (7) 2508 1804 PR 2536 1496 moveto 2288 1756 lineto stroke 2288 1756 moveto 2524 1428 moveto (8) 2524 1428 PR 1764 1548 moveto 2088 1704 lineto stroke 2088 1704 moveto 1676 1504 moveto (9) 1676 1504 PR 864 1072 moveto 968 1132 lineto stroke 968 1132 moveto 780 1024 moveto (1) 780 1024 PR (0) 835 1024 PR 0 3068 moveto 2324 1496 moveto 2284 1692 lineto stroke 2284 1692 moveto lthick setlinewidth 2304 1692 lineto stroke 2304 1692 moveto 2328 1692 lineto stroke 2328 1692 moveto 2372 1696 lineto stroke 2372 1696 moveto 2444 1696 lineto stroke 2444 1696 moveto 2572 1704 lineto stroke 2572 1704 moveto 2708 1708 lineto stroke 2708 1708 moveto 2876 1716 lineto stroke 2876 1716 moveto 3064 1728 lineto stroke 3064 1728 moveto 3232 1744 lineto stroke 3232 1744 moveto 3360 1760 lineto stroke 3360 1760 moveto 3432 1780 lineto stroke 3432 1780 moveto 3472 1796 lineto stroke 3472 1796 moveto 3488 1816 lineto stroke 3488 1816 moveto 3492 1844 lineto stroke 3492 1844 moveto 3488 1872 lineto stroke 3488 1872 moveto 3480 1900 lineto stroke 3480 1900 moveto 3468 1924 lineto stroke 3468 1924 moveto 3428 2016 lineto stroke 3428 2016 moveto 3392 2092 lineto stroke 3392 2092 moveto 3360 2152 lineto stroke 3360 2152 moveto 3332 2200 lineto stroke 3332 2200 moveto 3284 2272 lineto stroke 3284 2272 moveto 3244 2324 lineto stroke 3244 2324 moveto 3204 2364 lineto stroke 3204 2364 moveto 3172 2392 lineto stroke 3172 2392 moveto 3140 2416 lineto stroke 3140 2416 moveto 3108 2432 lineto stroke 3108 2432 moveto 3080 2444 lineto stroke 3080 2444 moveto 3048 2452 lineto stroke 3048 2452 moveto 3032 2456 lineto stroke 3032 2456 moveto 3012 2460 lineto stroke 3012 2460 moveto 2992 2460 lineto stroke 2992 2460 moveto 2972 2460 lineto stroke 2972 2460 moveto 2956 2460 lineto stroke 2956 2460 moveto 2944 2456 lineto stroke 2944 2456 moveto 2928 2456 lineto stroke 2928 2456 moveto 2908 2452 lineto stroke 2908 2452 moveto 2896 2452 lineto stroke 2896 2452 moveto 2880 2448 lineto stroke 2880 2448 moveto 2860 2444 lineto stroke 2860 2444 moveto 2836 2440 lineto stroke 2836 2440 moveto 2816 2440 lineto stroke 2816 2440 moveto 2796 2436 lineto stroke 2796 2436 moveto 2768 2432 lineto stroke 2768 2432 moveto 2728 2428 lineto stroke 2728 2428 moveto 2696 2424 lineto stroke 2696 2424 moveto 2656 2420 lineto stroke 2656 2420 moveto 2600 2416 lineto stroke 2600 2416 moveto 2528 2412 lineto stroke 2528 2412 moveto 2460 2408 lineto stroke 2460 2408 moveto 2372 2400 lineto stroke 2372 2400 moveto 2256 2396 lineto stroke 2256 2396 moveto 2104 2388 lineto stroke 2104 2388 moveto 1900 2376 lineto stroke 1900 2376 moveto 1640 2364 lineto stroke 1640 2364 moveto 1344 2348 lineto stroke 1344 2348 moveto 1064 2328 lineto stroke 1064 2328 moveto 728 2280 lineto stroke 728 2280 moveto 656 2228 lineto stroke 656 2228 moveto 652 2176 lineto stroke 652 2176 moveto 660 2128 lineto stroke 660 2128 moveto 696 1980 lineto stroke 696 1980 moveto 728 1856 lineto stroke 728 1856 moveto 756 1744 lineto stroke 756 1744 moveto 784 1652 lineto stroke 784 1652 moveto 832 1492 lineto stroke 832 1492 moveto 872 1372 lineto stroke 872 1372 moveto 908 1272 lineto stroke 908 1272 moveto 940 1192 lineto stroke 940 1192 moveto 996 1068 lineto stroke 996 1068 moveto 1044 976 lineto stroke 1044 976 moveto 1088 904 lineto stroke 1088 904 moveto 1132 844 lineto stroke 1132 844 moveto 1204 764 lineto stroke 1204 764 moveto 1276 712 lineto stroke 1276 712 moveto 1340 688 lineto stroke 1340 688 moveto 1400 684 lineto stroke 1400 684 moveto 1480 696 lineto stroke 1480 696 moveto 1552 728 lineto stroke 1552 728 moveto 1616 772 lineto stroke 1616 772 moveto 1672 824 lineto stroke 1672 824 moveto 1748 900 lineto stroke 1748 900 moveto 1816 980 lineto stroke 1816 980 moveto 1872 1056 lineto stroke 1872 1056 moveto 1920 1128 lineto stroke 1920 1128 moveto 2008 1256 lineto stroke 2008 1256 moveto 2072 1360 lineto stroke 2072 1360 moveto 2120 1440 lineto stroke 2120 1440 moveto 2156 1500 lineto stroke 2156 1500 moveto 2196 1564 lineto stroke 2196 1564 moveto 2220 1604 lineto stroke 2220 1604 moveto 2236 1632 lineto stroke 2236 1632 moveto 2248 1652 lineto stroke 2248 1652 moveto 2260 1672 lineto stroke 2260 1672 moveto 2268 1680 lineto stroke 2268 1680 moveto 2272 1688 lineto stroke 2272 1688 moveto 2200 1600 moveto 2200 1600 lineto stroke 2200 1600 moveto 2200 1600 moveto 2204 1600 lineto stroke 2204 1600 moveto 2228 1600 lineto stroke 2228 1600 moveto 2252 1600 lineto stroke 2252 1600 moveto 2280 1600 lineto stroke 2280 1600 moveto 2328 1604 lineto stroke 2328 1604 moveto 2400 1608 lineto stroke 2400 1608 moveto 2504 1612 lineto stroke 2504 1612 moveto 2632 1616 lineto stroke 2632 1616 moveto 2796 1624 lineto stroke 2796 1624 moveto 2988 1636 lineto stroke 2988 1636 moveto 3180 1648 lineto stroke 3180 1648 moveto 3320 1660 lineto stroke 3320 1660 moveto 3420 1676 lineto stroke 3420 1676 moveto 3480 1692 lineto stroke 3480 1692 moveto 3512 1708 lineto stroke 3512 1708 moveto 3532 1732 lineto stroke 3532 1732 moveto 3536 1752 lineto stroke 3536 1752 moveto 3532 1772 lineto stroke 3532 1772 moveto 3528 1792 lineto stroke 3528 1792 moveto 3512 1852 lineto stroke 3512 1852 moveto 3492 1904 lineto stroke 3492 1904 moveto 3472 1952 lineto stroke 3472 1952 moveto 3456 1996 lineto stroke 3456 1996 moveto 3408 2108 lineto stroke 3408 2108 moveto 3364 2192 lineto stroke 3364 2192 moveto 3328 2256 lineto stroke 3328 2256 moveto 3296 2304 lineto stroke 3296 2304 moveto 3256 2364 lineto stroke 3256 2364 moveto 3220 2404 lineto stroke 3220 2404 moveto 3184 2440 lineto stroke 3184 2440 moveto 3152 2464 lineto stroke 3152 2464 moveto 3100 2496 lineto stroke 3100 2496 moveto 3048 2512 lineto stroke 3048 2512 moveto 3000 2516 lineto stroke 3000 2516 moveto 2956 2512 lineto stroke 2956 2512 moveto 2936 2508 lineto stroke 2936 2508 moveto 2916 2504 lineto stroke 2916 2504 moveto 2900 2496 lineto stroke 2900 2496 moveto 2880 2488 lineto stroke 2880 2488 moveto 2872 2484 lineto stroke 2872 2484 moveto 2864 2480 lineto stroke 2864 2480 moveto 2856 2476 lineto stroke 2856 2476 moveto 2848 2472 lineto stroke 2848 2472 moveto 2836 2464 lineto stroke 2836 2464 moveto 2828 2464 lineto stroke 2828 2464 moveto 2820 2460 lineto stroke 2820 2460 moveto 2804 2456 lineto stroke 2804 2456 moveto 2792 2452 lineto stroke 2792 2452 moveto 2776 2448 lineto stroke 2776 2448 moveto 2764 2448 lineto stroke 2764 2448 moveto 2748 2444 lineto stroke 2748 2444 moveto 2724 2440 lineto stroke 2724 2440 moveto 2696 2440 lineto stroke 2696 2440 moveto 2672 2436 lineto stroke 2672 2436 moveto 2640 2432 lineto stroke 2640 2432 moveto 2600 2428 lineto stroke 2600 2428 moveto 2548 2424 lineto stroke 2548 2424 moveto 2500 2420 lineto stroke 2500 2420 moveto 2436 2416 lineto stroke 2436 2416 moveto 2356 2412 lineto stroke 2356 2412 moveto 2248 2408 lineto stroke 2248 2408 moveto 2088 2400 lineto stroke 2088 2400 moveto 1868 2388 lineto stroke 1868 2388 moveto 1588 2376 lineto stroke 1588 2376 moveto 1276 2356 lineto stroke 1276 2356 moveto 764 2300 lineto stroke 764 2300 moveto 664 2240 lineto stroke 664 2240 moveto 664 2180 lineto stroke 664 2180 moveto 676 2120 lineto stroke 676 2120 moveto 708 1972 lineto stroke 708 1972 moveto 740 1848 lineto stroke 740 1848 moveto 768 1736 lineto stroke 768 1736 moveto 796 1644 lineto stroke 796 1644 moveto 828 1524 lineto stroke 828 1524 moveto 860 1428 lineto stroke 860 1428 moveto 888 1344 lineto stroke 888 1344 moveto 916 1276 lineto stroke 916 1276 moveto 960 1156 lineto stroke 960 1156 moveto 1004 1064 lineto stroke 1004 1064 moveto 1040 988 lineto stroke 1040 988 moveto 1076 928 lineto stroke 1076 928 moveto 1148 824 lineto stroke 1148 824 moveto 1216 756 lineto stroke 1216 756 moveto 1276 712 lineto stroke 1276 712 moveto 1336 688 lineto stroke 1336 688 moveto 1408 680 lineto stroke 1408 680 moveto 1476 692 lineto stroke 1476 692 moveto 1536 716 lineto stroke 1536 716 moveto 1592 756 lineto stroke 1592 756 moveto 1656 808 lineto stroke 1656 808 moveto 1716 868 lineto stroke 1716 868 moveto 1768 932 lineto stroke 1768 932 moveto 1816 988 lineto stroke 1816 988 moveto 1896 1104 lineto stroke 1896 1104 moveto 1960 1200 lineto stroke 1960 1200 moveto 2012 1280 lineto stroke 2012 1280 moveto 2052 1348 lineto stroke 2052 1348 moveto 2092 1420 lineto stroke 2092 1420 moveto 2124 1472 lineto stroke 2124 1472 moveto 2148 1508 lineto stroke 2148 1508 moveto 2160 1536 lineto stroke 2160 1536 moveto 2176 1564 lineto stroke 2176 1564 moveto 2188 1580 lineto stroke 2188 1580 moveto 2192 1588 lineto stroke 2192 1588 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2208 1600 lineto stroke 2208 1600 moveto 2224 1600 lineto stroke 2224 1600 moveto 2240 1600 lineto stroke 2240 1600 moveto 2276 1600 lineto stroke 2276 1600 moveto 2340 1604 lineto stroke 2340 1604 moveto 2452 1608 lineto stroke 2452 1608 moveto 2580 1612 lineto stroke 2580 1612 moveto 2756 1620 lineto stroke 2756 1620 moveto 2972 1632 lineto stroke 2972 1632 moveto 3188 1648 lineto stroke 3188 1648 moveto 3340 1664 lineto stroke 3340 1664 moveto 3444 1680 lineto stroke 3444 1680 moveto 3500 1700 lineto stroke 3500 1700 moveto 3524 1720 lineto stroke 3524 1720 moveto 3536 1744 lineto stroke 3536 1744 moveto 3536 1764 lineto stroke 3536 1764 moveto 3532 1788 lineto stroke 3532 1788 moveto 3524 1808 lineto stroke 3524 1808 moveto 3492 1904 lineto stroke 3492 1904 moveto 3460 1984 lineto stroke 3460 1984 moveto 3432 2052 lineto stroke 3432 2052 moveto 3408 2108 lineto stroke 3408 2108 moveto 3360 2204 lineto stroke 3360 2204 moveto 3320 2272 lineto stroke 3320 2272 moveto 3284 2324 lineto stroke 3284 2324 moveto 3252 2368 lineto stroke 3252 2368 moveto 3200 2428 lineto stroke 3200 2428 moveto 3152 2464 lineto stroke 3152 2464 moveto 3104 2492 lineto stroke 3104 2492 moveto 3064 2508 lineto stroke 3064 2508 moveto 2988 2516 lineto stroke 2988 2516 moveto 2924 2504 lineto stroke 2924 2504 moveto 2860 2480 lineto stroke 2860 2480 moveto 2804 2444 lineto stroke 2804 2444 moveto 2776 2420 lineto stroke 2776 2420 moveto 2748 2396 lineto stroke 2748 2396 moveto 2720 2372 lineto stroke 2720 2372 moveto 2696 2344 lineto stroke 2696 2344 moveto 2688 2336 lineto stroke 2688 2336 moveto 2684 2332 lineto stroke 2684 2332 moveto 2676 2324 lineto stroke 2676 2324 moveto 2672 2316 lineto stroke 2672 2316 moveto 2664 2308 lineto stroke 2664 2308 moveto 2656 2304 lineto stroke 2656 2304 moveto 2648 2300 lineto stroke 2648 2300 moveto 2640 2296 lineto stroke 2640 2296 moveto 2628 2292 lineto stroke 2628 2292 moveto 2616 2292 lineto stroke 2616 2292 moveto 2600 2288 lineto stroke 2600 2288 moveto 2572 2288 lineto stroke 2572 2288 moveto 2536 2284 lineto stroke 2536 2284 moveto 2504 2280 lineto stroke 2504 2280 moveto 2464 2280 lineto stroke 2464 2280 moveto 2408 2276 lineto stroke 2408 2276 moveto 2332 2272 lineto stroke 2332 2272 moveto 2220 2264 lineto stroke 2220 2264 moveto 2068 2256 lineto stroke 2068 2256 moveto 1856 2248 lineto stroke 1856 2248 moveto 1576 2236 lineto stroke 1576 2236 moveto 1096 2204 lineto stroke 1096 2204 moveto 788 2168 lineto stroke 788 2168 moveto 700 2124 lineto stroke 700 2124 moveto 688 2084 lineto stroke 688 2084 moveto 708 1964 lineto stroke 708 1964 moveto 736 1856 lineto stroke 736 1856 moveto 760 1764 lineto stroke 760 1764 moveto 784 1680 lineto stroke 784 1680 moveto 828 1524 lineto stroke 828 1524 moveto 868 1404 lineto stroke 868 1404 moveto 904 1304 lineto stroke 904 1304 moveto 932 1224 lineto stroke 932 1224 moveto 988 1100 lineto stroke 988 1100 moveto 1032 1004 lineto stroke 1032 1004 moveto 1076 928 lineto stroke 1076 928 moveto 1116 868 lineto stroke 1116 868 moveto 1192 776 lineto stroke 1192 776 moveto 1264 720 lineto stroke 1264 720 moveto 1332 688 lineto stroke 1332 688 moveto 1392 680 lineto stroke 1392 680 moveto 1468 692 lineto stroke 1468 692 moveto 1540 720 lineto stroke 1540 720 moveto 1600 760 lineto stroke 1600 760 moveto 1656 808 lineto stroke 1656 808 moveto 1728 884 lineto stroke 1728 884 moveto 1788 956 lineto stroke 1788 956 moveto 1844 1028 lineto stroke 1844 1028 moveto 1888 1092 lineto stroke 1888 1092 moveto 1972 1216 lineto stroke 1972 1216 moveto 2032 1316 lineto stroke 2032 1316 moveto 2076 1388 lineto stroke 2076 1388 moveto 2108 1444 lineto stroke 2108 1444 moveto 2140 1500 lineto stroke 2140 1500 moveto 2160 1532 lineto stroke 2160 1532 moveto 2176 1556 lineto stroke 2176 1556 moveto 2184 1572 lineto stroke 2184 1572 moveto 2192 1588 lineto stroke 2192 1588 moveto 2196 1596 lineto stroke 2196 1596 moveto 2200 1600 moveto 2200 1600 lineto stroke 2200 1600 moveto 2200 1600 moveto 2212 1600 lineto stroke 2212 1600 moveto 2224 1600 lineto stroke 2224 1600 moveto 2252 1600 lineto stroke 2252 1600 moveto 2280 1600 lineto stroke 2280 1600 moveto 2324 1604 lineto stroke 2324 1604 moveto 2392 1608 lineto stroke 2392 1608 moveto 2492 1612 lineto stroke 2492 1612 moveto 2632 1616 lineto stroke 2632 1616 moveto 2812 1624 lineto stroke 2812 1624 moveto 3024 1636 lineto stroke 3024 1636 moveto 3228 1652 lineto stroke 3228 1652 moveto 3396 1672 lineto stroke 3396 1672 moveto 3484 1696 lineto stroke 3484 1696 moveto 3524 1716 lineto stroke 3524 1716 moveto 3536 1740 lineto stroke 3536 1740 moveto 3532 1784 lineto stroke 3532 1784 moveto 3520 1828 lineto stroke 3520 1828 moveto 3504 1864 lineto stroke 3504 1864 moveto 3492 1900 lineto stroke 3492 1900 moveto 3452 2008 lineto stroke 3452 2008 moveto 3416 2092 lineto stroke 3416 2092 moveto 3384 2156 lineto stroke 3384 2156 moveto 3356 2212 lineto stroke 3356 2212 moveto 3312 2284 lineto stroke 3312 2284 moveto 3272 2340 lineto stroke 3272 2340 moveto 3240 2380 lineto stroke 3240 2380 moveto 3212 2412 lineto stroke 3212 2412 moveto 3148 2468 lineto stroke 3148 2468 moveto 3092 2500 lineto stroke 3092 2500 moveto 3036 2512 lineto stroke 3036 2512 moveto 2988 2516 lineto stroke 2988 2516 moveto 2912 2500 lineto stroke 2912 2500 moveto 2844 2468 lineto stroke 2844 2468 moveto 2784 2428 lineto stroke 2784 2428 moveto 2728 2376 lineto stroke 2728 2376 moveto 2684 2332 lineto stroke 2684 2332 moveto 2648 2288 lineto stroke 2648 2288 moveto 2612 2244 lineto stroke 2612 2244 moveto 2576 2204 lineto stroke 2576 2204 moveto 2568 2192 lineto stroke 2568 2192 moveto 2560 2180 lineto stroke 2560 2180 moveto 2552 2168 lineto stroke 2552 2168 moveto 2544 2156 lineto stroke 2544 2156 moveto 2540 2148 lineto stroke 2540 2148 moveto 2532 2144 lineto stroke 2532 2144 moveto 2528 2136 lineto stroke 2528 2136 moveto 2512 2132 lineto stroke 2512 2132 moveto 2504 2132 lineto stroke 2504 2132 moveto 2492 2128 lineto stroke 2492 2128 moveto 2468 2128 lineto stroke 2468 2128 moveto 2444 2128 lineto stroke 2444 2128 moveto 2412 2124 lineto stroke 2412 2124 moveto 2368 2120 lineto stroke 2368 2120 moveto 2304 2116 lineto stroke 2304 2116 moveto 2220 2112 lineto stroke 2220 2112 moveto 2100 2108 lineto stroke 2100 2108 moveto 1936 2100 lineto stroke 1936 2100 moveto 1712 2088 lineto stroke 1712 2088 moveto 1268 2064 lineto stroke 1268 2064 moveto 908 2032 lineto stroke 908 2032 moveto 760 1996 lineto stroke 760 1996 moveto 724 1960 lineto stroke 724 1960 moveto 736 1848 lineto stroke 736 1848 moveto 764 1748 lineto stroke 764 1748 moveto 788 1664 lineto stroke 788 1664 moveto 812 1588 lineto stroke 812 1588 moveto 844 1468 lineto stroke 844 1468 moveto 880 1372 lineto stroke 880 1372 moveto 908 1292 lineto stroke 908 1292 moveto 932 1224 lineto stroke 932 1224 moveto 976 1120 lineto stroke 976 1120 moveto 1016 1036 lineto stroke 1016 1036 moveto 1048 972 lineto stroke 1048 972 moveto 1080 916 lineto stroke 1080 916 moveto 1152 820 lineto stroke 1152 820 moveto 1212 756 lineto stroke 1212 756 moveto 1272 712 lineto stroke 1272 712 moveto 1328 688 lineto stroke 1328 688 moveto 1404 680 lineto stroke 1404 680 moveto 1472 692 lineto stroke 1472 692 moveto 1536 720 lineto stroke 1536 720 moveto 1596 756 lineto stroke 1596 756 moveto 1664 816 lineto stroke 1664 816 moveto 1728 880 lineto stroke 1728 880 moveto 1780 948 lineto stroke 1780 948 moveto 1832 1008 lineto stroke 1832 1008 moveto 1904 1112 lineto stroke 1904 1112 moveto 1960 1204 lineto stroke 1960 1204 moveto 2008 1280 lineto stroke 2008 1280 moveto 2048 1340 lineto stroke 2048 1340 moveto 2096 1424 lineto stroke 2096 1424 moveto 2128 1480 lineto stroke 2128 1480 moveto 2152 1520 lineto stroke 2152 1520 moveto 2168 1544 lineto stroke 2168 1544 moveto 2180 1568 lineto stroke 2180 1568 moveto 2188 1580 lineto stroke 2188 1580 moveto 2192 1588 lineto stroke 2192 1588 moveto 2200 1600 lineto stroke 2200 1600 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2208 1600 lineto stroke 2208 1600 moveto 2216 1600 lineto stroke 2216 1600 moveto 2232 1600 lineto stroke 2232 1600 moveto 2252 1600 lineto stroke 2252 1600 moveto 2292 1600 lineto stroke 2292 1600 moveto 2360 1604 lineto stroke 2360 1604 moveto 2440 1608 lineto stroke 2440 1608 moveto 2556 1612 lineto stroke 2556 1612 moveto 2716 1620 lineto stroke 2716 1620 moveto 2916 1628 lineto stroke 2916 1628 moveto 3100 1640 lineto stroke 3100 1640 moveto 3260 1656 lineto stroke 3260 1656 moveto 3384 1668 lineto stroke 3384 1668 moveto 3460 1688 lineto stroke 3460 1688 moveto 3508 1704 lineto stroke 3508 1704 moveto 3528 1724 lineto stroke 3528 1724 moveto 3536 1744 lineto stroke 3536 1744 moveto 3536 1764 lineto stroke 3536 1764 moveto 3520 1820 lineto stroke 3520 1820 moveto 3504 1872 lineto stroke 3504 1872 moveto 3488 1916 lineto stroke 3488 1916 moveto 3472 1960 lineto stroke 3472 1960 moveto 3420 2080 lineto stroke 3420 2080 moveto 3376 2172 lineto stroke 3376 2172 moveto 3340 2236 lineto stroke 3340 2236 moveto 3308 2288 lineto stroke 3308 2288 moveto 3256 2364 lineto stroke 3256 2364 moveto 3212 2412 lineto stroke 3212 2412 moveto 3172 2448 lineto stroke 3172 2448 moveto 3136 2476 lineto stroke 3136 2476 moveto 3068 2508 lineto stroke 3068 2508 moveto 3008 2516 lineto stroke 3008 2516 moveto 2952 2512 lineto stroke 2952 2512 moveto 2896 2496 lineto stroke 2896 2496 moveto 2824 2456 lineto stroke 2824 2456 moveto 2760 2404 lineto stroke 2760 2404 moveto 2700 2348 lineto stroke 2700 2348 moveto 2648 2292 lineto stroke 2648 2292 moveto 2600 2232 lineto stroke 2600 2232 moveto 2560 2176 lineto stroke 2560 2176 moveto 2520 2124 lineto stroke 2520 2124 moveto 2488 2072 lineto stroke 2488 2072 moveto 2480 2060 lineto stroke 2480 2060 moveto 2472 2048 lineto stroke 2472 2048 moveto 2464 2036 lineto stroke 2464 2036 moveto 2456 2024 lineto stroke 2456 2024 moveto 2452 2016 lineto stroke 2452 2016 moveto 2444 2008 lineto stroke 2444 2008 moveto 2440 2004 lineto stroke 2440 2004 moveto 2428 2000 lineto stroke 2428 2000 moveto 2416 1996 lineto stroke 2416 1996 moveto 2408 1996 lineto stroke 2408 1996 moveto 2396 1996 lineto stroke 2396 1996 moveto 2376 1996 lineto stroke 2376 1996 moveto 2344 1992 lineto stroke 2344 1992 moveto 2308 1992 lineto stroke 2308 1992 moveto 2252 1988 lineto stroke 2252 1988 moveto 2172 1984 lineto stroke 2172 1984 moveto 2060 1980 lineto stroke 2060 1980 moveto 1840 1968 lineto stroke 1840 1968 moveto 1528 1952 lineto stroke 1528 1952 moveto 1180 1932 lineto stroke 1180 1932 moveto 924 1904 lineto stroke 924 1904 moveto 748 1832 lineto stroke 748 1832 moveto 768 1760 lineto stroke 768 1760 moveto 776 1696 lineto stroke 776 1696 moveto 800 1632 lineto stroke 800 1632 moveto 840 1480 lineto stroke 840 1480 moveto 884 1360 lineto stroke 884 1360 moveto 916 1264 lineto stroke 916 1264 moveto 948 1188 lineto stroke 948 1188 moveto 1000 1072 lineto stroke 1000 1072 moveto 1044 988 lineto stroke 1044 988 moveto 1080 920 lineto stroke 1080 920 moveto 1116 868 lineto stroke 1116 868 moveto 1176 792 lineto stroke 1176 792 moveto 1232 740 lineto stroke 1232 740 moveto 1284 708 lineto stroke 1284 708 moveto 1336 688 lineto stroke 1336 688 moveto 1408 680 lineto stroke 1408 680 moveto 1476 692 lineto stroke 1476 692 moveto 1540 720 lineto stroke 1540 720 moveto 1596 760 lineto stroke 1596 760 moveto 1668 816 lineto stroke 1668 816 moveto 1728 880 lineto stroke 1728 880 moveto 1780 944 lineto stroke 1780 944 moveto 1828 1008 lineto stroke 1828 1008 moveto 1900 1108 lineto stroke 1900 1108 moveto 1956 1192 lineto stroke 1956 1192 moveto 2000 1264 lineto stroke 2000 1264 moveto 2036 1328 lineto stroke 2036 1328 moveto 2088 1412 lineto stroke 2088 1412 moveto 2124 1472 lineto stroke 2124 1472 moveto 2148 1512 lineto stroke 2148 1512 moveto 2164 1540 lineto stroke 2164 1540 moveto 2180 1568 lineto stroke 2180 1568 moveto 2188 1584 lineto stroke 2188 1584 moveto 2192 1592 lineto stroke 2192 1592 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2208 1600 lineto stroke 2208 1600 moveto 2216 1600 lineto stroke 2216 1600 moveto 2236 1600 lineto stroke 2236 1600 moveto 2272 1600 lineto stroke 2272 1600 moveto 2344 1604 lineto stroke 2344 1604 moveto 2420 1608 lineto stroke 2420 1608 moveto 2528 1612 lineto stroke 2528 1612 moveto 2684 1620 lineto stroke 2684 1620 moveto 2884 1628 lineto stroke 2884 1628 moveto 3072 1640 lineto stroke 3072 1640 moveto 3248 1652 lineto stroke 3248 1652 moveto 3376 1668 lineto stroke 3376 1668 moveto 3460 1688 lineto stroke 3460 1688 moveto 3512 1708 lineto stroke 3512 1708 moveto 3532 1732 lineto stroke 3532 1732 moveto 3536 1752 lineto stroke 3536 1752 moveto 3532 1772 lineto stroke 3532 1772 moveto 3516 1836 lineto stroke 3516 1836 moveto 3496 1892 lineto stroke 3496 1892 moveto 3476 1944 lineto stroke 3476 1944 moveto 3460 1992 lineto stroke 3460 1992 moveto 3412 2100 lineto stroke 3412 2100 moveto 3372 2180 lineto stroke 3372 2180 moveto 3336 2240 lineto stroke 3336 2240 moveto 3308 2292 lineto stroke 3308 2292 moveto 3260 2356 lineto stroke 3260 2356 moveto 3220 2404 lineto stroke 3220 2404 moveto 3184 2440 lineto stroke 3184 2440 moveto 3148 2468 lineto stroke 3148 2468 moveto 3084 2500 lineto stroke 3084 2500 moveto 3024 2516 lineto stroke 3024 2516 moveto 2968 2516 lineto stroke 2968 2516 moveto 2916 2504 lineto stroke 2916 2504 moveto 2844 2468 lineto stroke 2844 2468 moveto 2776 2420 lineto stroke 2776 2420 moveto 2720 2368 lineto stroke 2720 2368 moveto 2668 2312 lineto stroke 2668 2312 moveto 2608 2240 lineto stroke 2608 2240 moveto 2556 2172 lineto stroke 2556 2172 moveto 2508 2104 lineto stroke 2508 2104 moveto 2468 2048 lineto stroke 2468 2048 moveto 2448 2016 lineto stroke 2448 2016 moveto 2428 1984 lineto stroke 2428 1984 moveto 2412 1956 lineto stroke 2412 1956 moveto 2396 1932 lineto stroke 2396 1932 moveto 2388 1920 lineto stroke 2388 1920 moveto 2380 1908 lineto stroke 2380 1908 moveto 2376 1900 lineto stroke 2376 1900 moveto 2368 1896 lineto stroke 2368 1896 moveto 2356 1892 lineto stroke 2356 1892 moveto 2344 1892 lineto stroke 2344 1892 moveto 2320 1892 lineto stroke 2320 1892 moveto 2300 1888 lineto stroke 2300 1888 moveto 2268 1888 lineto stroke 2268 1888 moveto 2224 1884 lineto stroke 2224 1884 moveto 2160 1884 lineto stroke 2160 1884 moveto 2060 1876 lineto stroke 2060 1876 moveto 1912 1872 lineto stroke 1912 1872 moveto 1708 1864 lineto stroke 1708 1864 moveto 1448 1848 lineto stroke 1448 1848 moveto 1108 1824 lineto stroke 1108 1824 moveto 888 1796 lineto stroke 888 1796 moveto 804 1764 lineto stroke 804 1764 moveto 780 1732 lineto stroke 780 1732 moveto 796 1628 lineto stroke 796 1628 moveto 824 1540 lineto stroke 824 1540 moveto 848 1460 lineto stroke 848 1460 moveto 872 1388 lineto stroke 872 1388 moveto 920 1260 lineto stroke 920 1260 moveto 960 1160 lineto stroke 960 1160 moveto 992 1080 lineto stroke 992 1080 moveto 1024 1020 lineto stroke 1024 1020 moveto 1076 928 lineto stroke 1076 928 moveto 1120 860 lineto stroke 1120 860 moveto 1160 808 lineto stroke 1160 808 moveto 1200 768 lineto stroke 1200 768 moveto 1268 716 lineto stroke 1268 716 moveto 1332 688 lineto stroke 1332 688 moveto 1392 680 lineto stroke 1392 680 moveto 1444 684 lineto stroke 1444 684 moveto 1516 708 lineto stroke 1516 708 moveto 1580 744 lineto stroke 1580 744 moveto 1636 792 lineto stroke 1636 792 moveto 1692 840 lineto stroke 1692 840 moveto 1760 916 lineto stroke 1760 916 moveto 1816 992 lineto stroke 1816 992 moveto 1868 1064 lineto stroke 1868 1064 moveto 1912 1128 lineto stroke 1912 1128 moveto 1984 1236 lineto stroke 1984 1236 moveto 2036 1324 lineto stroke 2036 1324 moveto 2076 1388 lineto stroke 2076 1388 moveto 2104 1440 lineto stroke 2104 1440 moveto 2140 1496 lineto stroke 2140 1496 moveto 2160 1532 lineto stroke 2160 1532 moveto 2172 1556 lineto stroke 2172 1556 moveto 2184 1572 lineto stroke 2184 1572 moveto 2192 1588 lineto stroke 2192 1588 moveto 2196 1596 lineto stroke 2196 1596 moveto 2200 1600 moveto 2200 1600 lineto stroke 2200 1600 moveto 2200 1600 moveto 2212 1600 lineto stroke 2212 1600 moveto 2228 1600 lineto stroke 2228 1600 moveto 2264 1600 lineto stroke 2264 1600 moveto 2304 1604 lineto stroke 2304 1604 moveto 2368 1604 lineto stroke 2368 1604 moveto 2464 1608 lineto stroke 2464 1608 moveto 2612 1616 lineto stroke 2612 1616 moveto 2772 1624 lineto stroke 2772 1624 moveto 2960 1632 lineto stroke 2960 1632 moveto 3152 1644 lineto stroke 3152 1644 moveto 3316 1660 lineto stroke 3316 1660 moveto 3428 1680 lineto stroke 3428 1680 moveto 3492 1700 lineto stroke 3492 1700 moveto 3524 1716 lineto stroke 3524 1716 moveto 3532 1736 lineto stroke 3532 1736 moveto 3532 1776 lineto stroke 3532 1776 moveto 3524 1812 lineto stroke 3524 1812 moveto 3512 1844 lineto stroke 3512 1844 moveto 3500 1876 lineto stroke 3500 1876 moveto 3452 2004 lineto stroke 3452 2004 moveto 3412 2100 lineto stroke 3412 2100 moveto 3372 2176 lineto stroke 3372 2176 moveto 3340 2236 lineto stroke 3340 2236 moveto 3292 2316 lineto stroke 3292 2316 moveto 3248 2376 lineto stroke 3248 2376 moveto 3208 2416 lineto stroke 3208 2416 moveto 3172 2448 lineto stroke 3172 2448 moveto 3104 2492 lineto stroke 3104 2492 moveto 3044 2512 lineto stroke 3044 2512 moveto 2988 2516 lineto stroke 2988 2516 moveto 2932 2508 lineto stroke 2932 2508 moveto 2856 2476 lineto stroke 2856 2476 moveto 2788 2428 lineto stroke 2788 2428 moveto 2728 2376 lineto stroke 2728 2376 moveto 2672 2320 lineto stroke 2672 2320 moveto 2600 2232 lineto stroke 2600 2232 moveto 2536 2148 lineto stroke 2536 2148 moveto 2484 2072 lineto stroke 2484 2072 moveto 2440 2004 lineto stroke 2440 2004 moveto 2412 1960 lineto stroke 2412 1960 moveto 2388 1916 lineto stroke 2388 1916 moveto 2364 1880 lineto stroke 2364 1880 moveto 2344 1848 lineto stroke 2344 1848 moveto 2340 1836 lineto stroke 2340 1836 moveto 2332 1824 lineto stroke 2332 1824 moveto 2328 1820 lineto stroke 2328 1820 moveto 2320 1816 lineto stroke 2320 1816 moveto 2308 1812 lineto stroke 2308 1812 moveto 2296 1812 lineto stroke 2296 1812 moveto 2276 1812 lineto stroke 2276 1812 moveto 2252 1808 lineto stroke 2252 1808 moveto 2212 1808 lineto stroke 2212 1808 moveto 2148 1804 lineto stroke 2148 1804 moveto 2052 1800 lineto stroke 2052 1800 moveto 1880 1792 lineto stroke 1880 1792 moveto 1616 1780 lineto stroke 1616 1780 moveto 1296 1764 lineto stroke 1296 1764 moveto 1020 1740 lineto stroke 1020 1740 moveto 784 1648 lineto stroke 784 1648 moveto 832 1564 lineto stroke 832 1564 moveto 836 1492 lineto stroke 836 1492 moveto 872 1424 lineto stroke 872 1424 moveto 904 1288 lineto stroke 904 1288 moveto 948 1188 lineto stroke 948 1188 moveto 980 1108 lineto stroke 980 1108 moveto 1016 1040 lineto stroke 1016 1040 moveto 1064 944 lineto stroke 1064 944 moveto 1112 876 lineto stroke 1112 876 moveto 1148 824 lineto stroke 1148 824 moveto 1188 780 lineto stroke 1188 780 moveto 1256 724 lineto stroke 1256 724 moveto 1320 692 lineto stroke 1320 692 moveto 1380 680 lineto stroke 1380 680 moveto 1436 680 lineto stroke 1436 680 moveto 1508 704 lineto stroke 1508 704 moveto 1580 744 lineto stroke 1580 744 moveto 1640 792 lineto stroke 1640 792 moveto 1696 844 lineto stroke 1696 844 moveto 1768 932 lineto stroke 1768 932 moveto 1832 1012 lineto stroke 1832 1012 moveto 1888 1088 lineto stroke 1888 1088 moveto 1932 1160 lineto stroke 1932 1160 moveto 2020 1296 lineto stroke 2020 1296 moveto 2080 1396 lineto stroke 2080 1396 moveto 2120 1460 lineto stroke 2120 1460 moveto 2144 1508 lineto stroke 2144 1508 moveto 2164 1540 lineto stroke 2164 1540 moveto 2180 1564 lineto stroke 2180 1564 moveto 2184 1576 lineto stroke 2184 1576 moveto 2192 1584 lineto stroke 2192 1584 moveto 2196 1596 lineto stroke 2196 1596 moveto 2200 1600 moveto 2200 1600 lineto stroke 2200 1600 moveto 2200 1600 moveto 2208 1600 lineto stroke 2208 1600 moveto 2220 1600 lineto stroke 2220 1600 moveto 2240 1600 lineto stroke 2240 1600 moveto 2268 1600 lineto stroke 2268 1600 moveto 2308 1604 lineto stroke 2308 1604 moveto 2376 1604 lineto stroke 2376 1604 moveto 2476 1608 lineto stroke 2476 1608 moveto 2596 1616 lineto stroke 2596 1616 moveto 2748 1620 lineto stroke 2748 1620 moveto 2932 1632 lineto stroke 2932 1632 moveto 3128 1644 lineto stroke 3128 1644 moveto 3284 1656 lineto stroke 3284 1656 moveto 3400 1672 lineto stroke 3400 1672 moveto 3472 1688 lineto stroke 3472 1688 moveto 3508 1708 lineto stroke 3508 1708 moveto 3532 1732 lineto stroke 3532 1732 moveto 3536 1756 lineto stroke 3536 1756 moveto 3532 1780 lineto stroke 3532 1780 moveto 3528 1804 lineto stroke 3528 1804 moveto 3500 1880 lineto stroke 3500 1880 moveto 3476 1948 lineto stroke 3476 1948 moveto 3452 2004 lineto stroke 3452 2004 moveto 3432 2056 lineto stroke 3432 2056 moveto 3380 2160 lineto stroke 3380 2160 moveto 3340 2236 lineto stroke 3340 2236 moveto 3304 2296 lineto stroke 3304 2296 moveto 3272 2340 lineto stroke 3272 2340 moveto 3224 2400 lineto stroke 3224 2400 moveto 3180 2440 lineto stroke 3180 2440 moveto 3140 2472 lineto stroke 3140 2472 moveto 3104 2492 lineto stroke 3104 2492 moveto 3032 2516 lineto stroke 3032 2516 moveto 2964 2516 lineto stroke 2964 2516 moveto 2904 2496 lineto stroke 2904 2496 moveto 2844 2468 lineto stroke 2844 2468 moveto 2776 2420 lineto stroke 2776 2420 moveto 2712 2360 lineto stroke 2712 2360 moveto 2656 2300 lineto stroke 2656 2300 moveto 2608 2240 lineto stroke 2608 2240 moveto 2536 2144 lineto stroke 2536 2144 moveto 2476 2060 lineto stroke 2476 2060 moveto 2428 1984 lineto stroke 2428 1984 moveto 2388 1920 lineto stroke 2388 1920 moveto 2364 1880 lineto stroke 2364 1880 moveto 2340 1844 lineto stroke 2340 1844 moveto 2324 1812 lineto stroke 2324 1812 moveto 2308 1784 lineto stroke 2308 1784 moveto 2300 1772 lineto stroke 2300 1772 moveto 2296 1764 lineto stroke 2296 1764 moveto 2288 1756 lineto stroke 2288 1756 moveto 2280 1756 lineto stroke 2280 1756 moveto 2264 1752 lineto stroke 2264 1752 moveto 2252 1752 lineto stroke 2252 1752 moveto 2236 1752 lineto stroke 2236 1752 moveto 2212 1752 lineto stroke 2212 1752 moveto 2176 1748 lineto stroke 2176 1748 moveto 2116 1748 lineto stroke 2116 1748 moveto 2028 1744 lineto stroke 2028 1744 moveto 1900 1736 lineto stroke 1900 1736 moveto 1716 1728 lineto stroke 1716 1728 moveto 1368 1712 lineto stroke 1368 1712 moveto 1048 1684 lineto stroke 1048 1684 moveto 880 1652 lineto stroke 880 1652 moveto 824 1620 lineto stroke 824 1620 moveto 828 1504 lineto stroke 828 1504 moveto 868 1404 lineto stroke 868 1404 moveto 892 1320 lineto stroke 892 1320 moveto 924 1252 lineto stroke 924 1252 moveto 972 1128 lineto stroke 972 1128 moveto 1016 1040 lineto stroke 1016 1040 moveto 1048 972 lineto stroke 1048 972 moveto 1084 916 lineto stroke 1084 916 moveto 1144 828 lineto stroke 1144 828 moveto 1200 768 lineto stroke 1200 768 moveto 1248 728 lineto stroke 1248 728 moveto 1296 700 lineto stroke 1296 700 moveto 1368 680 lineto stroke 1368 680 moveto 1436 680 lineto stroke 1436 680 moveto 1496 700 lineto stroke 1496 700 moveto 1552 728 lineto stroke 1552 728 moveto 1624 776 lineto stroke 1624 776 moveto 1684 836 lineto stroke 1684 836 moveto 1740 896 lineto stroke 1740 896 moveto 1792 956 lineto stroke 1792 956 moveto 1868 1064 lineto stroke 1868 1064 moveto 1932 1160 lineto stroke 1932 1160 moveto 1984 1240 lineto stroke 1984 1240 moveto 2028 1308 lineto stroke 2028 1308 moveto 2080 1392 lineto stroke 2080 1392 moveto 2116 1456 lineto stroke 2116 1456 moveto 2140 1496 lineto stroke 2140 1496 moveto 2156 1528 lineto stroke 2156 1528 moveto 2176 1564 lineto stroke 2176 1564 moveto 2188 1580 lineto stroke 2188 1580 moveto 2192 1588 lineto stroke 2192 1588 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2208 1600 lineto stroke 2208 1600 moveto 2228 1600 lineto stroke 2228 1600 moveto 2256 1600 lineto stroke 2256 1600 moveto 2284 1600 lineto stroke 2284 1600 moveto 2332 1604 lineto stroke 2332 1604 moveto 2408 1608 lineto stroke 2408 1608 moveto 2520 1612 lineto stroke 2520 1612 moveto 2648 1616 lineto stroke 2648 1616 moveto 2812 1624 lineto stroke 2812 1624 moveto 2996 1636 lineto stroke 2996 1636 moveto 3180 1648 lineto stroke 3180 1648 moveto 3324 1660 lineto stroke 3324 1660 moveto 3424 1676 lineto stroke 3424 1676 moveto 3484 1692 lineto stroke 3484 1692 moveto 3516 1712 lineto stroke 3516 1712 moveto 3532 1736 lineto stroke 3532 1736 moveto 3536 1760 lineto stroke 3536 1760 moveto 3532 1784 lineto stroke 3532 1784 moveto 3524 1808 lineto stroke 3524 1808 moveto 3500 1884 lineto stroke 3500 1884 moveto 3472 1952 lineto stroke 3472 1952 moveto 3448 2012 lineto stroke 3448 2012 moveto 3428 2064 lineto stroke 3428 2064 moveto 3380 2164 lineto stroke 3380 2164 moveto 3340 2240 lineto stroke 3340 2240 moveto 3304 2296 lineto stroke 3304 2296 moveto 3272 2340 lineto stroke 3272 2340 moveto 3228 2396 lineto stroke 3228 2396 moveto 3184 2436 lineto stroke 3184 2436 moveto 3148 2468 lineto stroke 3148 2468 moveto 3112 2488 lineto stroke 3112 2488 moveto 3036 2516 lineto stroke 3036 2516 moveto 2968 2516 lineto stroke 2968 2516 moveto 2908 2500 lineto stroke 2908 2500 moveto 2848 2472 lineto stroke 2848 2472 moveto 2780 2424 lineto stroke 2780 2424 moveto 2720 2368 lineto stroke 2720 2368 moveto 2668 2312 lineto stroke 2668 2312 moveto 2616 2252 lineto stroke 2616 2252 moveto 2548 2160 lineto stroke 2548 2160 moveto 2488 2076 lineto stroke 2488 2076 moveto 2440 2000 lineto stroke 2440 2000 moveto 2400 1936 lineto stroke 2400 1936 moveto 2360 1872 lineto stroke 2360 1872 moveto 2328 1816 lineto stroke 2328 1816 moveto 2300 1772 lineto stroke 2300 1772 moveto 2280 1740 lineto stroke 2280 1740 moveto 2272 1728 lineto stroke 2272 1728 moveto 2268 1720 lineto stroke 2268 1720 moveto 2264 1712 lineto stroke 2264 1712 moveto 2252 1712 lineto stroke 2252 1712 moveto 2240 1708 lineto stroke 2240 1708 moveto 2228 1708 lineto stroke 2228 1708 moveto 2200 1708 lineto stroke 2200 1708 moveto 2160 1704 lineto stroke 2160 1704 moveto 2088 1704 lineto stroke 2088 1704 moveto 1972 1696 lineto stroke 1972 1696 moveto 1780 1688 lineto stroke 1780 1688 moveto 1504 1676 lineto stroke 1504 1676 moveto 1180 1656 lineto stroke 1180 1656 moveto 952 1628 lineto stroke 952 1628 moveto 856 1596 lineto stroke 856 1596 moveto 832 1568 lineto stroke 832 1568 moveto 852 1432 lineto stroke 852 1432 moveto 896 1324 lineto stroke 896 1324 moveto 928 1232 lineto stroke 928 1232 moveto 960 1160 lineto stroke 960 1160 moveto 1008 1044 lineto stroke 1008 1044 moveto 1056 964 lineto stroke 1056 964 moveto 1092 904 lineto stroke 1092 904 moveto 1124 856 lineto stroke 1124 856 moveto 1172 796 lineto stroke 1172 796 moveto 1216 752 lineto stroke 1216 752 moveto 1260 720 lineto stroke 1260 720 moveto 1296 700 lineto stroke 1296 700 moveto 1372 680 lineto stroke 1372 680 moveto 1444 684 lineto stroke 1444 684 moveto 1504 704 lineto stroke 1504 704 moveto 1564 736 lineto stroke 1564 736 moveto 1628 784 lineto stroke 1628 784 moveto 1688 840 lineto stroke 1688 840 moveto 1740 896 lineto stroke 1740 896 moveto 1788 952 lineto stroke 1788 952 moveto 1864 1056 lineto stroke 1864 1056 moveto 1924 1148 lineto stroke 1924 1148 moveto 1976 1224 lineto stroke 1976 1224 moveto 2016 1292 lineto stroke 2016 1292 moveto 2072 1380 lineto stroke 2072 1380 moveto 2108 1444 lineto stroke 2108 1444 moveto 2136 1488 lineto stroke 2136 1488 moveto 2152 1520 lineto stroke 2152 1520 moveto 2172 1552 lineto stroke 2172 1552 moveto 2180 1572 lineto stroke 2180 1572 moveto 2188 1580 lineto stroke 2188 1580 moveto 2192 1588 lineto stroke 2192 1588 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2196 1596 moveto 2216 1600 lineto stroke 2216 1600 moveto 2228 1600 lineto stroke 2228 1600 moveto 2252 1600 lineto stroke 2252 1600 moveto 2300 1600 lineto stroke 2300 1600 moveto 2380 1604 lineto stroke 2380 1604 moveto 2480 1608 lineto stroke 2480 1608 moveto 2624 1616 lineto stroke 2624 1616 moveto 2824 1624 lineto stroke 2824 1624 moveto 3056 1636 lineto stroke 3056 1636 moveto 3256 1652 lineto stroke 3256 1652 moveto 3400 1672 lineto stroke 3400 1672 moveto 3480 1692 lineto stroke 3480 1692 moveto 3520 1712 lineto stroke 3520 1712 moveto 3536 1744 lineto stroke 3536 1744 moveto 3532 1776 lineto stroke 3532 1776 moveto 3528 1804 lineto stroke 3528 1804 moveto 3516 1832 lineto stroke 3516 1832 moveto 3480 1932 lineto stroke 3480 1932 moveto 3448 2012 lineto stroke 3448 2012 moveto 3420 2080 lineto stroke 3420 2080 moveto 3392 2136 lineto stroke 3392 2136 moveto 3344 2232 lineto stroke 3344 2232 moveto 3300 2300 lineto stroke 3300 2300 moveto 3264 2352 lineto stroke 3264 2352 moveto 3232 2388 lineto stroke 3232 2388 moveto 3180 2444 lineto stroke 3180 2444 moveto 3128 2480 lineto stroke 3128 2480 moveto 3084 2504 lineto stroke 3084 2504 moveto 3040 2512 lineto stroke 3040 2512 moveto 2964 2516 lineto stroke 2964 2516 moveto 2896 2496 lineto stroke 2896 2496 moveto 2836 2464 lineto stroke 2836 2464 moveto 2776 2420 lineto stroke 2776 2420 moveto 2704 2352 lineto stroke 2704 2352 moveto 2640 2280 lineto stroke 2640 2280 moveto 2584 2208 lineto stroke 2584 2208 moveto 2536 2144 lineto stroke 2536 2144 moveto 2468 2044 lineto stroke 2468 2044 moveto 2412 1960 lineto stroke 2412 1960 moveto 2372 1892 lineto stroke 2372 1892 moveto 2336 1832 lineto stroke 2336 1832 moveto 2312 1792 lineto stroke 2312 1792 moveto 2292 1756 lineto stroke 2292 1756 moveto 2272 1728 lineto stroke 2272 1728 moveto 2260 1704 lineto stroke 2260 1704 moveto 2252 1692 lineto stroke 2252 1692 moveto 2248 1684 lineto stroke 2248 1684 moveto 2244 1680 lineto stroke 2244 1680 moveto 2228 1676 lineto stroke 2228 1676 moveto 2216 1676 lineto stroke 2216 1676 moveto 2192 1676 lineto stroke 2192 1676 moveto 2148 1676 lineto stroke 2148 1676 moveto 2072 1672 lineto stroke 2072 1672 moveto 1940 1664 lineto stroke 1940 1664 moveto 1716 1656 lineto stroke 1716 1656 moveto 1404 1640 lineto stroke 1404 1640 moveto 1100 1616 lineto stroke 1100 1616 moveto 856 1564 lineto stroke 856 1564 moveto 840 1508 lineto stroke 840 1508 moveto 848 1460 lineto stroke 848 1460 moveto 864 1412 lineto stroke 864 1412 moveto 904 1296 lineto stroke 904 1296 moveto 940 1208 lineto stroke 940 1208 moveto 968 1132 lineto stroke 968 1132 moveto 996 1072 lineto stroke 996 1072 moveto 1052 968 lineto stroke 1052 968 moveto 1096 896 lineto stroke 1096 896 moveto 1136 840 lineto stroke 1136 840 moveto 1168 800 lineto stroke 1168 800 moveto 1236 740 lineto stroke 1236 740 moveto 1292 704 lineto stroke 1292 704 moveto 1348 684 lineto stroke 1348 684 moveto 1400 680 lineto stroke 1400 680 moveto 1472 692 lineto stroke 1472 692 moveto 1540 720 lineto stroke 1540 720 moveto 1596 760 lineto stroke 1596 760 moveto 1652 804 lineto stroke 1652 804 moveto 1724 876 lineto stroke 1724 876 moveto 1784 952 lineto stroke 1784 952 moveto 1840 1024 lineto stroke 1840 1024 moveto 1888 1092 lineto stroke 1888 1092 moveto 1960 1200 lineto stroke 1960 1200 moveto 2012 1288 lineto stroke 2012 1288 moveto 2056 1356 lineto stroke 2056 1356 moveto 2088 1412 lineto stroke 2088 1412 moveto 2132 1484 lineto stroke 2132 1484 moveto 2156 1528 lineto stroke 2156 1528 moveto 2172 1556 lineto stroke 2172 1556 moveto 2184 1572 lineto stroke 2184 1572 moveto 2192 1584 lineto stroke 2192 1584 moveto 2196 1592 lineto stroke 2196 1592 moveto showpage auto/07p/doc/include/she1.ps0000640000175000017500000064326313570013207013654 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 600 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3800 600 lineto stroke 3800 600 moveto 3636 1692 moveto (X) 3636 1692 PR 2292 2468 moveto (Y) 2292 2468 PR 728 904 moveto (Z) 728 904 PR 2200 1600 moveto 3720 1600 lineto stroke 3720 1600 moveto 3636 1552 moveto 3720 1600 lineto stroke 3720 1600 moveto 3636 1644 lineto stroke 3636 1644 moveto 2200 1600 moveto 2200 2548 lineto stroke 2200 2548 moveto 2244 2468 moveto 2200 2548 lineto stroke 2200 2548 moveto 2152 2468 lineto stroke 2152 2468 moveto 2200 1600 moveto 680 780 lineto stroke 680 780 moveto 728 860 moveto 680 780 lineto stroke 680 780 moveto 772 776 lineto stroke 772 776 moveto 3112 2116 moveto 3112 2116 lineto stroke 3112 2116 moveto 3112 2116 moveto 3108 2116 lineto stroke 3108 2116 moveto 3100 2112 lineto stroke 3100 2112 moveto 3092 2108 lineto stroke 3092 2108 moveto 3080 2100 lineto stroke 3080 2100 moveto 3072 2096 lineto stroke 3072 2096 moveto 3060 2092 lineto stroke 3060 2092 moveto 3048 2084 lineto stroke 3048 2084 moveto 3036 2080 lineto stroke 3036 2080 moveto 3024 2072 lineto stroke 3024 2072 moveto 3012 2068 lineto stroke 3012 2068 moveto 2984 2056 lineto stroke 2984 2056 moveto 2956 2044 lineto stroke 2956 2044 moveto 2928 2028 lineto stroke 2928 2028 moveto 2900 2016 lineto stroke 2900 2016 moveto 2852 2000 lineto stroke 2852 2000 moveto 2792 1976 lineto stroke 2792 1976 moveto 2736 1956 lineto stroke 2736 1956 moveto 2676 1932 lineto stroke 2676 1932 moveto 2592 1912 lineto stroke 2592 1912 moveto 2488 1888 lineto stroke 2488 1888 moveto 2388 1868 lineto stroke 2388 1868 moveto 2284 1848 lineto stroke 2284 1848 moveto 2180 1840 lineto stroke 2180 1840 moveto 2068 1840 lineto stroke 2068 1840 moveto 1984 1864 lineto stroke 1984 1864 moveto 1908 1892 lineto stroke 1908 1892 moveto 1872 1944 lineto stroke 1872 1944 moveto 1848 1996 lineto stroke 1848 1996 moveto 1868 2060 lineto stroke 1868 2060 moveto 1888 2120 lineto stroke 1888 2120 moveto 1928 2172 lineto stroke 1928 2172 moveto 1968 2224 lineto stroke 1968 2224 moveto 2008 2264 lineto stroke 2008 2264 moveto 2048 2300 lineto stroke 2048 2300 moveto 2080 2328 lineto stroke 2080 2328 moveto 2108 2348 lineto stroke 2108 2348 moveto 2128 2364 lineto stroke 2128 2364 moveto 2148 2376 lineto stroke 2148 2376 moveto 2160 2384 lineto stroke 2160 2384 moveto 2172 2392 lineto stroke 2172 2392 moveto 2176 2396 lineto stroke 2176 2396 moveto 2184 2400 lineto stroke 2184 2400 moveto 2192 2404 lineto stroke 2192 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3112 2116 moveto 3112 2116 lineto stroke 3112 2116 moveto 3092 2124 moveto 3092 2124 lineto stroke 3092 2124 moveto 3076 2132 moveto 3076 2132 lineto stroke 3076 2132 moveto 3056 2140 moveto 3056 2140 lineto stroke 3056 2140 moveto 3040 2148 moveto 3040 2148 lineto stroke 3040 2148 moveto 3020 2156 moveto 3020 2156 lineto stroke 3020 2156 moveto 3000 2160 moveto 3000 2160 lineto stroke 3000 2160 moveto 2984 2168 moveto 2984 2168 lineto stroke 2984 2168 moveto 2964 2176 moveto 2964 2176 lineto stroke 2964 2176 moveto 2944 2184 moveto 2944 2184 lineto stroke 2944 2184 moveto 2928 2192 moveto 2928 2192 lineto stroke 2928 2192 moveto 2908 2196 moveto 2908 2196 lineto stroke 2908 2196 moveto 2892 2204 moveto 2892 2204 lineto stroke 2892 2204 moveto 2872 2212 moveto 2872 2212 lineto stroke 2872 2212 moveto 2852 2220 moveto 2852 2220 lineto stroke 2852 2220 moveto 2836 2224 moveto 2836 2224 lineto stroke 2836 2224 moveto 2816 2232 moveto 2816 2232 lineto stroke 2816 2232 moveto 2796 2240 moveto 2796 2240 lineto stroke 2796 2240 moveto 2776 2248 moveto 2776 2248 lineto stroke 2776 2248 moveto 2760 2252 moveto 2760 2252 lineto stroke 2760 2252 moveto 2740 2260 moveto 2740 2260 lineto stroke 2740 2260 moveto 2720 2268 moveto 2720 2268 lineto stroke 2720 2268 moveto 2704 2272 moveto 2704 2272 lineto stroke 2704 2272 moveto 2684 2280 moveto 2684 2280 lineto stroke 2684 2280 moveto 2664 2288 moveto 2664 2288 lineto stroke 2664 2288 moveto 2644 2292 moveto 2644 2292 lineto stroke 2644 2292 moveto 2628 2300 moveto 2628 2300 lineto stroke 2628 2300 moveto 2608 2308 moveto 2608 2308 lineto stroke 2608 2308 moveto 2588 2312 moveto 2588 2312 lineto stroke 2588 2312 moveto 2568 2320 moveto 2568 2320 lineto stroke 2568 2320 moveto 2548 2324 moveto 2548 2324 lineto stroke 2548 2324 moveto 2532 2332 moveto 2532 2332 lineto stroke 2532 2332 moveto 2512 2336 moveto 2512 2336 lineto stroke 2512 2336 moveto 2492 2344 moveto 2492 2344 lineto stroke 2492 2344 moveto 2472 2348 moveto 2472 2348 lineto stroke 2472 2348 moveto 2452 2356 moveto 2452 2356 lineto stroke 2452 2356 moveto 2432 2360 moveto 2432 2360 lineto stroke 2432 2360 moveto 2412 2364 moveto 2412 2364 lineto stroke 2412 2364 moveto 2396 2372 moveto 2396 2372 lineto stroke 2396 2372 moveto 2376 2376 moveto 2376 2376 lineto stroke 2376 2376 moveto 2356 2380 moveto 2356 2380 lineto stroke 2356 2380 moveto 2336 2388 moveto 2336 2388 lineto stroke 2336 2388 moveto 2316 2392 moveto 2316 2392 lineto stroke 2316 2392 moveto 2296 2396 moveto 2296 2396 lineto stroke 2296 2396 moveto 2276 2400 moveto 2276 2400 lineto stroke 2276 2400 moveto 2252 2404 moveto 2252 2404 lineto stroke 2252 2404 moveto 2232 2408 moveto 2232 2408 lineto stroke 2232 2408 moveto 2212 2408 moveto 2212 2408 lineto stroke 2212 2408 moveto 2200 2116 moveto 2200 2116 lineto stroke 2200 2116 moveto 2176 2108 moveto 2176 2108 lineto stroke 2176 2108 moveto 2156 2096 moveto 2156 2096 lineto stroke 2156 2096 moveto 2136 2084 moveto 2136 2084 lineto stroke 2136 2084 moveto 2112 2072 moveto 2112 2072 lineto stroke 2112 2072 moveto 2092 2064 moveto 2092 2064 lineto stroke 2092 2064 moveto 2072 2052 moveto 2072 2052 lineto stroke 2072 2052 moveto 2052 2040 moveto 2052 2040 lineto stroke 2052 2040 moveto 2028 2032 moveto 2028 2032 lineto stroke 2028 2032 moveto 2008 2020 moveto 2008 2020 lineto stroke 2008 2020 moveto 1988 2012 moveto 1988 2012 lineto stroke 1988 2012 moveto 1968 2000 moveto 1968 2000 lineto stroke 1968 2000 moveto 1944 1992 moveto 1944 1992 lineto stroke 1944 1992 moveto 1924 1984 moveto 1924 1984 lineto stroke 1924 1984 moveto 1904 1972 moveto 1904 1972 lineto stroke 1904 1972 moveto 1884 1964 moveto 1884 1964 lineto stroke 1884 1964 moveto 1860 1952 moveto 1860 1952 lineto stroke 1860 1952 moveto 1840 1944 moveto 1840 1944 lineto stroke 1840 1944 moveto 1820 1936 moveto 1820 1936 lineto stroke 1820 1936 moveto 1800 1928 moveto 1800 1928 lineto stroke 1800 1928 moveto 1780 1920 moveto 1780 1920 lineto stroke 1780 1920 moveto 1756 1912 moveto 1756 1912 lineto stroke 1756 1912 moveto 1736 1904 moveto 1736 1904 lineto stroke 1736 1904 moveto 1716 1900 moveto 1716 1900 lineto stroke 1716 1900 moveto 1696 1892 moveto 1696 1892 lineto stroke 1696 1892 moveto 1676 1884 moveto 1676 1884 lineto stroke 1676 1884 moveto 1656 1880 moveto 1656 1880 lineto stroke 1656 1880 moveto 1636 1872 moveto 1636 1872 lineto stroke 1636 1872 moveto 1616 1864 moveto 1616 1864 lineto stroke 1616 1864 moveto 1596 1860 moveto 1596 1860 lineto stroke 1596 1860 moveto 1576 1852 moveto 1576 1852 lineto stroke 1576 1852 moveto 1556 1848 moveto 1556 1848 lineto stroke 1556 1848 moveto 1536 1844 moveto 1536 1844 lineto stroke 1536 1844 moveto 1520 1840 moveto 1520 1840 lineto stroke 1520 1840 moveto 1500 1840 moveto 1500 1840 lineto stroke 1500 1840 moveto 1484 1840 moveto 1484 1840 lineto stroke 1484 1840 moveto 1468 1840 moveto 1468 1840 lineto stroke 1468 1840 moveto 1460 1848 moveto 1460 1848 lineto stroke 1460 1848 moveto 1452 1860 moveto 1452 1860 lineto stroke 1452 1860 moveto 1456 1876 moveto 1456 1876 lineto stroke 1456 1876 moveto 1456 1892 moveto 1456 1892 lineto stroke 1456 1892 moveto 1472 1908 moveto 1472 1908 lineto stroke 1472 1908 moveto 1488 1928 moveto 1488 1928 lineto stroke 1488 1928 moveto 1504 1948 moveto 1504 1948 lineto stroke 1504 1948 moveto 1520 1964 moveto 1520 1964 lineto stroke 1520 1964 moveto 1540 1980 moveto 1540 1980 lineto stroke 1540 1980 moveto 1556 2000 moveto 1556 2000 lineto stroke 1556 2000 moveto 1576 2016 moveto 1576 2016 lineto stroke 1576 2016 moveto 1596 2028 moveto 1596 2028 lineto stroke 1596 2028 moveto 1620 2044 moveto 1620 2044 lineto stroke 1620 2044 moveto 1640 2060 moveto 1640 2060 lineto stroke 1640 2060 moveto 1660 2076 moveto 1660 2076 lineto stroke 1660 2076 moveto 1680 2092 moveto 1680 2092 lineto stroke 1680 2092 moveto 1700 2104 moveto 1700 2104 lineto stroke 1700 2104 moveto 1720 2120 moveto 1720 2120 lineto stroke 1720 2120 moveto 1740 2136 moveto 1740 2136 lineto stroke 1740 2136 moveto 1760 2148 moveto 1760 2148 lineto stroke 1760 2148 moveto 1780 2160 moveto 1780 2160 lineto stroke 1780 2160 moveto 1804 2176 moveto 1804 2176 lineto stroke 1804 2176 moveto 1824 2188 moveto 1824 2188 lineto stroke 1824 2188 moveto 1844 2204 moveto 1844 2204 lineto stroke 1844 2204 moveto 1864 2216 moveto 1864 2216 lineto stroke 1864 2216 moveto 1888 2228 moveto 1888 2228 lineto stroke 1888 2228 moveto 1908 2244 moveto 1908 2244 lineto stroke 1908 2244 moveto 1928 2256 moveto 1928 2256 lineto stroke 1928 2256 moveto 1948 2268 moveto 1948 2268 lineto stroke 1948 2268 moveto 1972 2280 moveto 1972 2280 lineto stroke 1972 2280 moveto 1992 2292 moveto 1992 2292 lineto stroke 1992 2292 moveto 2012 2304 moveto 2012 2304 lineto stroke 2012 2304 moveto 2032 2316 moveto 2032 2316 lineto stroke 2032 2316 moveto 2056 2328 moveto 2056 2328 lineto stroke 2056 2328 moveto 2076 2344 moveto 2076 2344 lineto stroke 2076 2344 moveto 2096 2356 moveto 2096 2356 lineto stroke 2096 2356 moveto 2116 2364 moveto 2116 2364 lineto stroke 2116 2364 moveto 2140 2376 moveto 2140 2376 lineto stroke 2140 2376 moveto 2160 2388 moveto 2160 2388 lineto stroke 2160 2388 moveto 2180 2400 moveto 2180 2400 lineto stroke 2180 2400 moveto 3112 1600 moveto 3112 1600 lineto stroke 3112 1600 moveto 3092 1588 moveto 3092 1588 lineto stroke 3092 1588 moveto 3068 1576 moveto 3068 1576 lineto stroke 3068 1576 moveto 3048 1564 moveto 3048 1564 lineto stroke 3048 1564 moveto 3024 1552 moveto 3024 1552 lineto stroke 3024 1552 moveto 3004 1540 moveto 3004 1540 lineto stroke 3004 1540 moveto 2980 1528 moveto 2980 1528 lineto stroke 2980 1528 moveto 2956 1520 moveto 2956 1520 lineto stroke 2956 1520 moveto 2932 1508 moveto 2932 1508 lineto stroke 2932 1508 moveto 2912 1496 moveto 2912 1496 lineto stroke 2912 1496 moveto 2884 1484 moveto 2884 1484 lineto stroke 2884 1484 moveto 2860 1472 moveto 2860 1472 lineto stroke 2860 1472 moveto 2836 1464 moveto 2836 1464 lineto stroke 2836 1464 moveto 2812 1452 moveto 2812 1452 lineto stroke 2812 1452 moveto 2784 1440 moveto 2784 1440 lineto stroke 2784 1440 moveto 2760 1428 moveto 2760 1428 lineto stroke 2760 1428 moveto 2736 1416 moveto 2736 1416 lineto stroke 2736 1416 moveto 2708 1408 moveto 2708 1408 lineto stroke 2708 1408 moveto 2684 1396 moveto 2684 1396 lineto stroke 2684 1396 moveto 2656 1384 moveto 2656 1384 lineto stroke 2656 1384 moveto 2632 1376 moveto 2632 1376 lineto stroke 2632 1376 moveto 2604 1364 moveto 2604 1364 lineto stroke 2604 1364 moveto 2576 1352 moveto 2576 1352 lineto stroke 2576 1352 moveto 2544 1344 moveto 2544 1344 lineto stroke 2544 1344 moveto 2516 1332 moveto 2516 1332 lineto stroke 2516 1332 moveto 2488 1324 moveto 2488 1324 lineto stroke 2488 1324 moveto 2460 1312 moveto 2460 1312 lineto stroke 2460 1312 moveto 2432 1304 moveto 2432 1304 lineto stroke 2432 1304 moveto 2404 1292 moveto 2404 1292 lineto stroke 2404 1292 moveto 2372 1284 moveto 2372 1284 lineto stroke 2372 1284 moveto 2344 1272 moveto 2344 1272 lineto stroke 2344 1272 moveto 2316 1264 moveto 2316 1264 lineto stroke 2316 1264 moveto 2288 1252 moveto 2288 1252 lineto stroke 2288 1252 moveto 2256 1244 moveto 2256 1244 lineto stroke 2256 1244 moveto 2228 1240 moveto 2228 1240 lineto stroke 2228 1240 moveto 2200 1232 moveto 2200 1232 lineto stroke 2200 1232 moveto 2168 1224 moveto 2168 1224 lineto stroke 2168 1224 moveto 2140 1216 moveto 2140 1216 lineto stroke 2140 1216 moveto 2112 1212 moveto 2112 1212 lineto stroke 2112 1212 moveto 2080 1204 moveto 2080 1204 lineto stroke 2080 1204 moveto 2056 1200 moveto 2056 1200 lineto stroke 2056 1200 moveto 2032 1200 moveto 2032 1200 lineto stroke 2032 1200 moveto 2008 1196 moveto 2008 1196 lineto stroke 2008 1196 moveto 1984 1196 moveto 1984 1196 lineto stroke 1984 1196 moveto 1964 1196 moveto 1964 1196 lineto stroke 1964 1196 moveto 1944 1196 moveto 1944 1196 lineto stroke 1944 1196 moveto 1924 1196 moveto 1924 1196 lineto stroke 1924 1196 moveto 1904 1200 moveto 1904 1200 lineto stroke 1904 1200 moveto 1896 1204 moveto 1896 1204 lineto stroke 1896 1204 moveto 1888 1212 moveto 1888 1212 lineto stroke 1888 1212 moveto 1880 1216 moveto 1880 1216 lineto stroke 1880 1216 moveto 1872 1220 moveto 1872 1220 lineto stroke 1872 1220 moveto 1864 1228 moveto 1864 1228 lineto stroke 1864 1228 moveto 1860 1232 moveto 1860 1232 lineto stroke 1860 1232 moveto 1856 1240 moveto 1856 1240 lineto stroke 1856 1240 moveto 1852 1248 moveto 1852 1248 lineto stroke 1852 1248 moveto 1848 1256 moveto 1848 1256 lineto stroke 1848 1256 moveto 1852 1264 moveto 1852 1264 lineto stroke 1852 1264 moveto 1856 1272 moveto 1856 1272 lineto stroke 1856 1272 moveto 1860 1280 moveto 1860 1280 lineto stroke 1860 1280 moveto 1864 1292 moveto 1864 1292 lineto stroke 1864 1292 moveto 1868 1300 moveto 1868 1300 lineto stroke 1868 1300 moveto 1876 1308 moveto 1876 1308 lineto stroke 1876 1308 moveto 1880 1320 moveto 1880 1320 lineto stroke 1880 1320 moveto 1884 1328 moveto 1884 1328 lineto stroke 1884 1328 moveto 1888 1336 moveto 1888 1336 lineto stroke 1888 1336 moveto 1896 1348 moveto 1896 1348 lineto stroke 1896 1348 moveto 1904 1356 moveto 1904 1356 lineto stroke 1904 1356 moveto 1912 1368 moveto 1912 1368 lineto stroke 1912 1368 moveto 1924 1376 moveto 1924 1376 lineto stroke 1924 1376 moveto 1932 1388 moveto 1932 1388 lineto stroke 1932 1388 moveto 1940 1396 moveto 1940 1396 lineto stroke 1940 1396 moveto 1952 1408 moveto 1952 1408 lineto stroke 1952 1408 moveto 1960 1416 moveto 1960 1416 lineto stroke 1960 1416 moveto 1972 1428 moveto 1972 1428 lineto stroke 1972 1428 moveto 1984 1440 moveto 1984 1440 lineto stroke 1984 1440 moveto 1996 1448 moveto 1996 1448 lineto stroke 1996 1448 moveto 2008 1460 moveto 2008 1460 lineto stroke 2008 1460 moveto 2020 1472 moveto 2020 1472 lineto stroke 2020 1472 moveto 2036 1480 moveto 2036 1480 lineto stroke 2036 1480 moveto 2048 1492 moveto 2048 1492 lineto stroke 2048 1492 moveto 2060 1504 moveto 2060 1504 lineto stroke 2060 1504 moveto 2076 1516 moveto 2076 1516 lineto stroke 2076 1516 moveto 2092 1524 moveto 2092 1524 lineto stroke 2092 1524 moveto 2104 1536 moveto 2104 1536 lineto stroke 2104 1536 moveto 2120 1548 moveto 2120 1548 lineto stroke 2120 1548 moveto 2136 1560 moveto 2136 1560 lineto stroke 2136 1560 moveto 2152 1568 moveto 2152 1568 lineto stroke 2152 1568 moveto 2172 1580 moveto 2172 1580 lineto stroke 2172 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 3004 2180 moveto 3004 2180 lineto stroke 3004 2180 moveto 3004 2180 moveto 3000 2180 lineto stroke 3000 2180 moveto 2992 2176 lineto stroke 2992 2176 moveto 2988 2172 lineto stroke 2988 2172 moveto 2980 2168 lineto stroke 2980 2168 moveto 2972 2164 lineto stroke 2972 2164 moveto 2960 2160 lineto stroke 2960 2160 moveto 2956 2156 lineto stroke 2956 2156 moveto 2948 2152 lineto stroke 2948 2152 moveto 2940 2148 lineto stroke 2940 2148 moveto 2932 2144 lineto stroke 2932 2144 moveto 2924 2140 lineto stroke 2924 2140 moveto 2916 2136 lineto stroke 2916 2136 moveto 2904 2132 lineto stroke 2904 2132 moveto 2892 2124 lineto stroke 2892 2124 moveto 2880 2120 lineto stroke 2880 2120 moveto 2864 2112 lineto stroke 2864 2112 moveto 2852 2108 lineto stroke 2852 2108 moveto 2836 2100 lineto stroke 2836 2100 moveto 2820 2092 lineto stroke 2820 2092 moveto 2804 2084 lineto stroke 2804 2084 moveto 2788 2080 lineto stroke 2788 2080 moveto 2768 2072 lineto stroke 2768 2072 moveto 2748 2064 lineto stroke 2748 2064 moveto 2728 2056 lineto stroke 2728 2056 moveto 2708 2048 lineto stroke 2708 2048 moveto 2684 2040 lineto stroke 2684 2040 moveto 2660 2032 lineto stroke 2660 2032 moveto 2640 2024 lineto stroke 2640 2024 moveto 2616 2016 lineto stroke 2616 2016 moveto 2592 2008 lineto stroke 2592 2008 moveto 2568 2000 lineto stroke 2568 2000 moveto 2544 1996 lineto stroke 2544 1996 moveto 2516 1988 lineto stroke 2516 1988 moveto 2488 1980 lineto stroke 2488 1980 moveto 2460 1972 lineto stroke 2460 1972 moveto 2432 1968 lineto stroke 2432 1968 moveto 2404 1960 lineto stroke 2404 1960 moveto 2376 1956 lineto stroke 2376 1956 moveto 2348 1948 lineto stroke 2348 1948 moveto 2320 1944 lineto stroke 2320 1944 moveto 2288 1940 lineto stroke 2288 1940 moveto 2260 1936 lineto stroke 2260 1936 moveto 2232 1936 lineto stroke 2232 1936 moveto 2204 1932 lineto stroke 2204 1932 moveto 2176 1932 lineto stroke 2176 1932 moveto 2148 1932 lineto stroke 2148 1932 moveto 2120 1932 lineto stroke 2120 1932 moveto 2096 1936 lineto stroke 2096 1936 moveto 2076 1936 lineto stroke 2076 1936 moveto 2052 1940 lineto stroke 2052 1940 moveto 2032 1944 lineto stroke 2032 1944 moveto 2012 1952 lineto stroke 2012 1952 moveto 1992 1960 lineto stroke 1992 1960 moveto 1972 1968 lineto stroke 1972 1968 moveto 1956 1976 lineto stroke 1956 1976 moveto 1944 1984 lineto stroke 1944 1984 moveto 1932 1996 lineto stroke 1932 1996 moveto 1924 2008 lineto stroke 1924 2008 moveto 1916 2020 lineto stroke 1916 2020 moveto 1912 2032 lineto stroke 1912 2032 moveto 1908 2048 lineto stroke 1908 2048 moveto 1908 2060 lineto stroke 1908 2060 moveto 1908 2076 lineto stroke 1908 2076 moveto 1908 2092 lineto stroke 1908 2092 moveto 1912 2104 lineto stroke 1912 2104 moveto 1916 2120 lineto stroke 1916 2120 moveto 1924 2136 lineto stroke 1924 2136 moveto 1932 2152 lineto stroke 1932 2152 moveto 1940 2172 lineto stroke 1940 2172 moveto 1952 2188 lineto stroke 1952 2188 moveto 1964 2204 lineto stroke 1964 2204 moveto 1976 2216 lineto stroke 1976 2216 moveto 1988 2232 lineto stroke 1988 2232 moveto 2000 2244 lineto stroke 2000 2244 moveto 2012 2260 lineto stroke 2012 2260 moveto 2024 2272 lineto stroke 2024 2272 moveto 2036 2284 lineto stroke 2036 2284 moveto 2048 2296 lineto stroke 2048 2296 moveto 2060 2308 lineto stroke 2060 2308 moveto 2076 2320 lineto stroke 2076 2320 moveto 2088 2328 lineto stroke 2088 2328 moveto 2100 2340 lineto stroke 2100 2340 moveto 2108 2348 lineto stroke 2108 2348 moveto 2120 2356 lineto stroke 2120 2356 moveto 2128 2364 lineto stroke 2128 2364 moveto 2140 2368 lineto stroke 2140 2368 moveto 2148 2376 lineto stroke 2148 2376 moveto 2156 2380 lineto stroke 2156 2380 moveto 2164 2388 lineto stroke 2164 2388 moveto 2168 2392 lineto stroke 2168 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2404 lineto stroke 2184 2404 moveto 2192 2404 lineto stroke 2192 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3004 2180 moveto 3004 2180 lineto stroke 3004 2180 moveto 2988 2188 moveto 2988 2188 lineto stroke 2988 2188 moveto 2968 2196 moveto 2968 2196 lineto stroke 2968 2196 moveto 2948 2204 moveto 2948 2204 lineto stroke 2948 2204 moveto 2932 2208 moveto 2932 2208 lineto stroke 2932 2208 moveto 2912 2216 moveto 2912 2216 lineto stroke 2912 2216 moveto 2892 2224 moveto 2892 2224 lineto stroke 2892 2224 moveto 2876 2228 moveto 2876 2228 lineto stroke 2876 2228 moveto 2856 2236 moveto 2856 2236 lineto stroke 2856 2236 moveto 2836 2244 moveto 2836 2244 lineto stroke 2836 2244 moveto 2816 2248 moveto 2816 2248 lineto stroke 2816 2248 moveto 2800 2256 moveto 2800 2256 lineto stroke 2800 2256 moveto 2780 2264 moveto 2780 2264 lineto stroke 2780 2264 moveto 2760 2268 moveto 2760 2268 lineto stroke 2760 2268 moveto 2740 2276 moveto 2740 2276 lineto stroke 2740 2276 moveto 2720 2280 moveto 2720 2280 lineto stroke 2720 2280 moveto 2704 2288 moveto 2704 2288 lineto stroke 2704 2288 moveto 2684 2292 moveto 2684 2292 lineto stroke 2684 2292 moveto 2664 2300 moveto 2664 2300 lineto stroke 2664 2300 moveto 2644 2304 moveto 2644 2304 lineto stroke 2644 2304 moveto 2624 2312 moveto 2624 2312 lineto stroke 2624 2312 moveto 2608 2320 moveto 2608 2320 lineto stroke 2608 2320 moveto 2588 2324 moveto 2588 2324 lineto stroke 2588 2324 moveto 2568 2328 moveto 2568 2328 lineto stroke 2568 2328 moveto 2548 2336 moveto 2548 2336 lineto stroke 2548 2336 moveto 2528 2340 moveto 2528 2340 lineto stroke 2528 2340 moveto 2508 2348 moveto 2508 2348 lineto stroke 2508 2348 moveto 2488 2352 moveto 2488 2352 lineto stroke 2488 2352 moveto 2468 2356 moveto 2468 2356 lineto stroke 2468 2356 moveto 2448 2364 moveto 2448 2364 lineto stroke 2448 2364 moveto 2428 2368 moveto 2428 2368 lineto stroke 2428 2368 moveto 2408 2372 moveto 2408 2372 lineto stroke 2408 2372 moveto 2388 2376 moveto 2388 2376 lineto stroke 2388 2376 moveto 2368 2384 moveto 2368 2384 lineto stroke 2368 2384 moveto 2348 2388 moveto 2348 2388 lineto stroke 2348 2388 moveto 2328 2392 moveto 2328 2392 lineto stroke 2328 2392 moveto 2308 2396 moveto 2308 2396 lineto stroke 2308 2396 moveto 2288 2400 moveto 2288 2400 lineto stroke 2288 2400 moveto 2268 2404 moveto 2268 2404 lineto stroke 2268 2404 moveto 2248 2404 moveto 2248 2404 lineto stroke 2248 2404 moveto 2228 2408 moveto 2228 2408 lineto stroke 2228 2408 moveto 2204 2408 moveto 2204 2408 lineto stroke 2204 2408 moveto 2200 2180 moveto 2200 2180 lineto stroke 2200 2180 moveto 2176 2172 moveto 2176 2172 lineto stroke 2176 2172 moveto 2156 2160 moveto 2156 2160 lineto stroke 2156 2160 moveto 2136 2148 moveto 2136 2148 lineto stroke 2136 2148 moveto 2112 2136 moveto 2112 2136 lineto stroke 2112 2136 moveto 2092 2128 moveto 2092 2128 lineto stroke 2092 2128 moveto 2072 2116 moveto 2072 2116 lineto stroke 2072 2116 moveto 2052 2104 moveto 2052 2104 lineto stroke 2052 2104 moveto 2028 2096 moveto 2028 2096 lineto stroke 2028 2096 moveto 2008 2084 moveto 2008 2084 lineto stroke 2008 2084 moveto 1988 2076 moveto 1988 2076 lineto stroke 1988 2076 moveto 1968 2064 moveto 1968 2064 lineto stroke 1968 2064 moveto 1944 2056 moveto 1944 2056 lineto stroke 1944 2056 moveto 1924 2044 moveto 1924 2044 lineto stroke 1924 2044 moveto 1904 2036 moveto 1904 2036 lineto stroke 1904 2036 moveto 1884 2028 moveto 1884 2028 lineto stroke 1884 2028 moveto 1860 2016 moveto 1860 2016 lineto stroke 1860 2016 moveto 1840 2008 moveto 1840 2008 lineto stroke 1840 2008 moveto 1820 2000 moveto 1820 2000 lineto stroke 1820 2000 moveto 1800 1992 moveto 1800 1992 lineto stroke 1800 1992 moveto 1780 1984 moveto 1780 1984 lineto stroke 1780 1984 moveto 1756 1976 moveto 1756 1976 lineto stroke 1756 1976 moveto 1736 1968 moveto 1736 1968 lineto stroke 1736 1968 moveto 1716 1964 moveto 1716 1964 lineto stroke 1716 1964 moveto 1696 1956 moveto 1696 1956 lineto stroke 1696 1956 moveto 1676 1948 moveto 1676 1948 lineto stroke 1676 1948 moveto 1656 1944 moveto 1656 1944 lineto stroke 1656 1944 moveto 1636 1940 moveto 1636 1940 lineto stroke 1636 1940 moveto 1620 1936 moveto 1620 1936 lineto stroke 1620 1936 moveto 1600 1932 moveto 1600 1932 lineto stroke 1600 1932 moveto 1584 1932 moveto 1584 1932 lineto stroke 1584 1932 moveto 1568 1932 moveto 1568 1932 lineto stroke 1568 1932 moveto 1556 1940 moveto 1556 1940 lineto stroke 1556 1940 moveto 1548 1952 moveto 1548 1952 lineto stroke 1548 1952 moveto 1552 1968 moveto 1552 1968 lineto stroke 1552 1968 moveto 1564 1988 moveto 1564 1988 lineto stroke 1564 1988 moveto 1580 2004 moveto 1580 2004 lineto stroke 1580 2004 moveto 1600 2024 moveto 1600 2024 lineto stroke 1600 2024 moveto 1620 2040 moveto 1620 2040 lineto stroke 1620 2040 moveto 1636 2056 moveto 1636 2056 lineto stroke 1636 2056 moveto 1656 2072 moveto 1656 2072 lineto stroke 1656 2072 moveto 1676 2088 moveto 1676 2088 lineto stroke 1676 2088 moveto 1696 2104 moveto 1696 2104 lineto stroke 1696 2104 moveto 1716 2116 moveto 1716 2116 lineto stroke 1716 2116 moveto 1740 2132 moveto 1740 2132 lineto stroke 1740 2132 moveto 1760 2148 moveto 1760 2148 lineto stroke 1760 2148 moveto 1780 2160 moveto 1780 2160 lineto stroke 1780 2160 moveto 1800 2176 moveto 1800 2176 lineto stroke 1800 2176 moveto 1820 2188 moveto 1820 2188 lineto stroke 1820 2188 moveto 1844 2200 moveto 1844 2200 lineto stroke 1844 2200 moveto 1864 2216 moveto 1864 2216 lineto stroke 1864 2216 moveto 1884 2228 moveto 1884 2228 lineto stroke 1884 2228 moveto 1904 2240 moveto 1904 2240 lineto stroke 1904 2240 moveto 1924 2256 moveto 1924 2256 lineto stroke 1924 2256 moveto 1948 2268 moveto 1948 2268 lineto stroke 1948 2268 moveto 1968 2280 moveto 1968 2280 lineto stroke 1968 2280 moveto 1988 2292 moveto 1988 2292 lineto stroke 1988 2292 moveto 2012 2304 moveto 2012 2304 lineto stroke 2012 2304 moveto 2032 2316 moveto 2032 2316 lineto stroke 2032 2316 moveto 2052 2328 moveto 2052 2328 lineto stroke 2052 2328 moveto 2072 2340 moveto 2072 2340 lineto stroke 2072 2340 moveto 2096 2352 moveto 2096 2352 lineto stroke 2096 2352 moveto 2116 2364 moveto 2116 2364 lineto stroke 2116 2364 moveto 2136 2376 moveto 2136 2376 lineto stroke 2136 2376 moveto 2156 2388 moveto 2156 2388 lineto stroke 2156 2388 moveto 2180 2400 moveto 2180 2400 lineto stroke 2180 2400 moveto 3004 1600 moveto 3004 1600 lineto stroke 3004 1600 moveto 2984 1588 moveto 2984 1588 lineto stroke 2984 1588 moveto 2964 1576 moveto 2964 1576 lineto stroke 2964 1576 moveto 2940 1564 moveto 2940 1564 lineto stroke 2940 1564 moveto 2920 1552 moveto 2920 1552 lineto stroke 2920 1552 moveto 2896 1540 moveto 2896 1540 lineto stroke 2896 1540 moveto 2872 1528 moveto 2872 1528 lineto stroke 2872 1528 moveto 2848 1520 moveto 2848 1520 lineto stroke 2848 1520 moveto 2828 1508 moveto 2828 1508 lineto stroke 2828 1508 moveto 2804 1496 moveto 2804 1496 lineto stroke 2804 1496 moveto 2776 1484 moveto 2776 1484 lineto stroke 2776 1484 moveto 2752 1472 moveto 2752 1472 lineto stroke 2752 1472 moveto 2728 1464 moveto 2728 1464 lineto stroke 2728 1464 moveto 2704 1452 moveto 2704 1452 lineto stroke 2704 1452 moveto 2676 1440 moveto 2676 1440 lineto stroke 2676 1440 moveto 2652 1428 moveto 2652 1428 lineto stroke 2652 1428 moveto 2624 1420 moveto 2624 1420 lineto stroke 2624 1420 moveto 2600 1408 moveto 2600 1408 lineto stroke 2600 1408 moveto 2572 1396 moveto 2572 1396 lineto stroke 2572 1396 moveto 2544 1388 moveto 2544 1388 lineto stroke 2544 1388 moveto 2516 1376 moveto 2516 1376 lineto stroke 2516 1376 moveto 2488 1364 moveto 2488 1364 lineto stroke 2488 1364 moveto 2460 1356 moveto 2460 1356 lineto stroke 2460 1356 moveto 2432 1344 moveto 2432 1344 lineto stroke 2432 1344 moveto 2404 1336 moveto 2404 1336 lineto stroke 2404 1336 moveto 2376 1324 moveto 2376 1324 lineto stroke 2376 1324 moveto 2344 1316 moveto 2344 1316 lineto stroke 2344 1316 moveto 2316 1308 moveto 2316 1308 lineto stroke 2316 1308 moveto 2284 1300 moveto 2284 1300 lineto stroke 2284 1300 moveto 2256 1288 moveto 2256 1288 lineto stroke 2256 1288 moveto 2228 1280 moveto 2228 1280 lineto stroke 2228 1280 moveto 2196 1276 moveto 2196 1276 lineto stroke 2196 1276 moveto 2168 1268 moveto 2168 1268 lineto stroke 2168 1268 moveto 2140 1264 moveto 2140 1264 lineto stroke 2140 1264 moveto 2108 1256 moveto 2108 1256 lineto stroke 2108 1256 moveto 2084 1252 moveto 2084 1252 lineto stroke 2084 1252 moveto 2056 1252 moveto 2056 1252 lineto stroke 2056 1252 moveto 2032 1248 moveto 2032 1248 lineto stroke 2032 1248 moveto 2012 1248 moveto 2012 1248 lineto stroke 2012 1248 moveto 1992 1248 moveto 1992 1248 lineto stroke 1992 1248 moveto 1972 1252 moveto 1972 1252 lineto stroke 1972 1252 moveto 1956 1252 moveto 1956 1252 lineto stroke 1956 1252 moveto 1944 1256 moveto 1944 1256 lineto stroke 1944 1256 moveto 1932 1260 moveto 1932 1260 lineto stroke 1932 1260 moveto 1924 1268 moveto 1924 1268 lineto stroke 1924 1268 moveto 1920 1272 moveto 1920 1272 lineto stroke 1920 1272 moveto 1912 1280 moveto 1912 1280 lineto stroke 1912 1280 moveto 1908 1288 moveto 1908 1288 lineto stroke 1908 1288 moveto 1908 1292 moveto 1908 1292 lineto stroke 1908 1292 moveto 1908 1300 moveto 1908 1300 lineto stroke 1908 1300 moveto 1908 1308 moveto 1908 1308 lineto stroke 1908 1308 moveto 1908 1320 moveto 1908 1320 lineto stroke 1908 1320 moveto 1912 1328 moveto 1912 1328 lineto stroke 1912 1328 moveto 1916 1336 moveto 1916 1336 lineto stroke 1916 1336 moveto 1920 1344 moveto 1920 1344 lineto stroke 1920 1344 moveto 1924 1356 moveto 1924 1356 lineto stroke 1924 1356 moveto 1928 1364 moveto 1928 1364 lineto stroke 1928 1364 moveto 1936 1372 moveto 1936 1372 lineto stroke 1936 1372 moveto 1944 1384 moveto 1944 1384 lineto stroke 1944 1384 moveto 1952 1392 moveto 1952 1392 lineto stroke 1952 1392 moveto 1960 1404 moveto 1960 1404 lineto stroke 1960 1404 moveto 1968 1412 moveto 1968 1412 lineto stroke 1968 1412 moveto 1976 1424 moveto 1976 1424 lineto stroke 1976 1424 moveto 1988 1432 moveto 1988 1432 lineto stroke 1988 1432 moveto 2000 1444 moveto 2000 1444 lineto stroke 2000 1444 moveto 2008 1456 moveto 2008 1456 lineto stroke 2008 1456 moveto 2020 1464 moveto 2020 1464 lineto stroke 2020 1464 moveto 2032 1476 moveto 2032 1476 lineto stroke 2032 1476 moveto 2044 1488 moveto 2044 1488 lineto stroke 2044 1488 moveto 2056 1496 moveto 2056 1496 lineto stroke 2056 1496 moveto 2072 1508 moveto 2072 1508 lineto stroke 2072 1508 moveto 2084 1520 moveto 2084 1520 lineto stroke 2084 1520 moveto 2100 1528 moveto 2100 1528 lineto stroke 2100 1528 moveto 2112 1540 moveto 2112 1540 lineto stroke 2112 1540 moveto 2128 1552 moveto 2128 1552 lineto stroke 2128 1552 moveto 2144 1564 moveto 2144 1564 lineto stroke 2144 1564 moveto 2160 1572 moveto 2160 1572 lineto stroke 2160 1572 moveto 2176 1584 moveto 2176 1584 lineto stroke 2176 1584 moveto 2196 1596 moveto 2196 1596 lineto stroke 2196 1596 moveto 2864 2256 moveto 2864 2256 lineto stroke 2864 2256 moveto 2864 2256 moveto 2860 2252 lineto stroke 2860 2252 moveto 2856 2248 lineto stroke 2856 2248 moveto 2848 2244 lineto stroke 2848 2244 moveto 2844 2244 lineto stroke 2844 2244 moveto 2836 2240 lineto stroke 2836 2240 moveto 2828 2236 lineto stroke 2828 2236 moveto 2816 2228 lineto stroke 2816 2228 moveto 2812 2228 lineto stroke 2812 2228 moveto 2804 2224 lineto stroke 2804 2224 moveto 2796 2220 lineto stroke 2796 2220 moveto 2788 2216 lineto stroke 2788 2216 moveto 2780 2212 lineto stroke 2780 2212 moveto 2772 2208 lineto stroke 2772 2208 moveto 2760 2204 lineto stroke 2760 2204 moveto 2752 2200 lineto stroke 2752 2200 moveto 2740 2192 lineto stroke 2740 2192 moveto 2728 2188 lineto stroke 2728 2188 moveto 2716 2184 lineto stroke 2716 2184 moveto 2704 2176 lineto stroke 2704 2176 moveto 2692 2172 lineto stroke 2692 2172 moveto 2676 2168 lineto stroke 2676 2168 moveto 2660 2160 lineto stroke 2660 2160 moveto 2648 2156 lineto stroke 2648 2156 moveto 2632 2148 lineto stroke 2632 2148 moveto 2612 2140 lineto stroke 2612 2140 moveto 2596 2136 lineto stroke 2596 2136 moveto 2580 2128 lineto stroke 2580 2128 moveto 2560 2124 lineto stroke 2560 2124 moveto 2544 2116 lineto stroke 2544 2116 moveto 2524 2112 lineto stroke 2524 2112 moveto 2504 2104 lineto stroke 2504 2104 moveto 2484 2100 lineto stroke 2484 2100 moveto 2464 2092 lineto stroke 2464 2092 moveto 2440 2088 lineto stroke 2440 2088 moveto 2420 2084 lineto stroke 2420 2084 moveto 2396 2076 lineto stroke 2396 2076 moveto 2376 2072 lineto stroke 2376 2072 moveto 2352 2068 lineto stroke 2352 2068 moveto 2328 2064 lineto stroke 2328 2064 moveto 2308 2060 lineto stroke 2308 2060 moveto 2284 2056 lineto stroke 2284 2056 moveto 2264 2052 lineto stroke 2264 2052 moveto 2236 2052 lineto stroke 2236 2052 moveto 2212 2048 lineto stroke 2212 2048 moveto 2188 2048 lineto stroke 2188 2048 moveto 2164 2048 lineto stroke 2164 2048 moveto 2148 2048 lineto stroke 2148 2048 moveto 2128 2048 lineto stroke 2128 2048 moveto 2112 2052 lineto stroke 2112 2052 moveto 2096 2052 lineto stroke 2096 2052 moveto 2076 2056 lineto stroke 2076 2056 moveto 2060 2060 lineto stroke 2060 2060 moveto 2044 2068 lineto stroke 2044 2068 moveto 2028 2072 lineto stroke 2028 2072 moveto 2020 2080 lineto stroke 2020 2080 moveto 2008 2084 lineto stroke 2008 2084 moveto 2000 2092 lineto stroke 2000 2092 moveto 1992 2100 lineto stroke 1992 2100 moveto 1988 2108 lineto stroke 1988 2108 moveto 1980 2120 lineto stroke 1980 2120 moveto 1980 2128 lineto stroke 1980 2128 moveto 1976 2140 lineto stroke 1976 2140 moveto 1976 2152 lineto stroke 1976 2152 moveto 1976 2160 lineto stroke 1976 2160 moveto 1980 2172 lineto stroke 1980 2172 moveto 1980 2184 lineto stroke 1980 2184 moveto 1988 2196 lineto stroke 1988 2196 moveto 1992 2208 lineto stroke 1992 2208 moveto 1996 2220 lineto stroke 1996 2220 moveto 2004 2228 lineto stroke 2004 2228 moveto 2012 2240 lineto stroke 2012 2240 moveto 2020 2252 lineto stroke 2020 2252 moveto 2028 2264 lineto stroke 2028 2264 moveto 2036 2276 lineto stroke 2036 2276 moveto 2048 2288 lineto stroke 2048 2288 moveto 2056 2296 lineto stroke 2056 2296 moveto 2068 2308 lineto stroke 2068 2308 moveto 2076 2316 lineto stroke 2076 2316 moveto 2084 2324 lineto stroke 2084 2324 moveto 2096 2332 lineto stroke 2096 2332 moveto 2104 2340 lineto stroke 2104 2340 moveto 2112 2348 lineto stroke 2112 2348 moveto 2120 2356 lineto stroke 2120 2356 moveto 2132 2364 lineto stroke 2132 2364 moveto 2136 2368 lineto stroke 2136 2368 moveto 2144 2372 lineto stroke 2144 2372 moveto 2152 2380 lineto stroke 2152 2380 moveto 2160 2384 lineto stroke 2160 2384 moveto 2164 2388 lineto stroke 2164 2388 moveto 2172 2392 lineto stroke 2172 2392 moveto 2176 2396 lineto stroke 2176 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2404 lineto stroke 2184 2404 moveto 2192 2404 lineto stroke 2192 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 2864 2256 moveto 2864 2256 lineto stroke 2864 2256 moveto 2848 2260 moveto 2848 2260 lineto stroke 2848 2260 moveto 2828 2268 moveto 2828 2268 lineto stroke 2828 2268 moveto 2808 2272 moveto 2808 2272 lineto stroke 2808 2272 moveto 2788 2280 moveto 2788 2280 lineto stroke 2788 2280 moveto 2768 2284 moveto 2768 2284 lineto stroke 2768 2284 moveto 2748 2292 moveto 2748 2292 lineto stroke 2748 2292 moveto 2728 2296 moveto 2728 2296 lineto stroke 2728 2296 moveto 2712 2300 moveto 2712 2300 lineto stroke 2712 2300 moveto 2692 2308 moveto 2692 2308 lineto stroke 2692 2308 moveto 2672 2312 moveto 2672 2312 lineto stroke 2672 2312 moveto 2652 2320 moveto 2652 2320 lineto stroke 2652 2320 moveto 2632 2324 moveto 2632 2324 lineto stroke 2632 2324 moveto 2612 2328 moveto 2612 2328 lineto stroke 2612 2328 moveto 2592 2336 moveto 2592 2336 lineto stroke 2592 2336 moveto 2572 2340 moveto 2572 2340 lineto stroke 2572 2340 moveto 2552 2344 moveto 2552 2344 lineto stroke 2552 2344 moveto 2532 2352 moveto 2532 2352 lineto stroke 2532 2352 moveto 2512 2356 moveto 2512 2356 lineto stroke 2512 2356 moveto 2492 2360 moveto 2492 2360 lineto stroke 2492 2360 moveto 2472 2364 moveto 2472 2364 lineto stroke 2472 2364 moveto 2452 2368 moveto 2452 2368 lineto stroke 2452 2368 moveto 2432 2376 moveto 2432 2376 lineto stroke 2432 2376 moveto 2412 2380 moveto 2412 2380 lineto stroke 2412 2380 moveto 2392 2384 moveto 2392 2384 lineto stroke 2392 2384 moveto 2372 2388 moveto 2372 2388 lineto stroke 2372 2388 moveto 2352 2392 moveto 2352 2392 lineto stroke 2352 2392 moveto 2332 2396 moveto 2332 2396 lineto stroke 2332 2396 moveto 2312 2400 moveto 2312 2400 lineto stroke 2312 2400 moveto 2292 2400 moveto 2292 2400 lineto stroke 2292 2400 moveto 2268 2404 moveto 2268 2404 lineto stroke 2268 2404 moveto 2248 2408 moveto 2248 2408 lineto stroke 2248 2408 moveto 2228 2408 moveto 2228 2408 lineto stroke 2228 2408 moveto 2208 2408 moveto 2208 2408 lineto stroke 2208 2408 moveto 2196 2256 moveto 2196 2256 lineto stroke 2196 2256 moveto 2176 2244 moveto 2176 2244 lineto stroke 2176 2244 moveto 2156 2232 moveto 2156 2232 lineto stroke 2156 2232 moveto 2136 2220 moveto 2136 2220 lineto stroke 2136 2220 moveto 2112 2208 moveto 2112 2208 lineto stroke 2112 2208 moveto 2092 2200 moveto 2092 2200 lineto stroke 2092 2200 moveto 2072 2188 moveto 2072 2188 lineto stroke 2072 2188 moveto 2052 2180 moveto 2052 2180 lineto stroke 2052 2180 moveto 2028 2168 moveto 2028 2168 lineto stroke 2028 2168 moveto 2008 2156 moveto 2008 2156 lineto stroke 2008 2156 moveto 1988 2148 moveto 1988 2148 lineto stroke 1988 2148 moveto 1968 2140 moveto 1968 2140 lineto stroke 1968 2140 moveto 1944 2128 moveto 1944 2128 lineto stroke 1944 2128 moveto 1924 2120 moveto 1924 2120 lineto stroke 1924 2120 moveto 1904 2112 moveto 1904 2112 lineto stroke 1904 2112 moveto 1884 2104 moveto 1884 2104 lineto stroke 1884 2104 moveto 1860 2092 moveto 1860 2092 lineto stroke 1860 2092 moveto 1840 2084 moveto 1840 2084 lineto stroke 1840 2084 moveto 1820 2076 moveto 1820 2076 lineto stroke 1820 2076 moveto 1800 2072 moveto 1800 2072 lineto stroke 1800 2072 moveto 1780 2064 moveto 1780 2064 lineto stroke 1780 2064 moveto 1760 2060 moveto 1760 2060 lineto stroke 1760 2060 moveto 1740 2052 moveto 1740 2052 lineto stroke 1740 2052 moveto 1720 2048 moveto 1720 2048 lineto stroke 1720 2048 moveto 1704 2048 moveto 1704 2048 lineto stroke 1704 2048 moveto 1688 2052 moveto 1688 2052 lineto stroke 1688 2052 moveto 1684 2060 moveto 1684 2060 lineto stroke 1684 2060 moveto 1692 2080 moveto 1692 2080 lineto stroke 1692 2080 moveto 1708 2096 moveto 1708 2096 lineto stroke 1708 2096 moveto 1724 2116 moveto 1724 2116 lineto stroke 1724 2116 moveto 1744 2132 moveto 1744 2132 lineto stroke 1744 2132 moveto 1764 2148 moveto 1764 2148 lineto stroke 1764 2148 moveto 1784 2160 moveto 1784 2160 lineto stroke 1784 2160 moveto 1808 2176 moveto 1808 2176 lineto stroke 1808 2176 moveto 1828 2192 moveto 1828 2192 lineto stroke 1828 2192 moveto 1848 2204 moveto 1848 2204 lineto stroke 1848 2204 moveto 1868 2216 moveto 1868 2216 lineto stroke 1868 2216 moveto 1888 2232 moveto 1888 2232 lineto stroke 1888 2232 moveto 1912 2244 moveto 1912 2244 lineto stroke 1912 2244 moveto 1932 2256 moveto 1932 2256 lineto stroke 1932 2256 moveto 1952 2272 moveto 1952 2272 lineto stroke 1952 2272 moveto 1972 2284 moveto 1972 2284 lineto stroke 1972 2284 moveto 1996 2296 moveto 1996 2296 lineto stroke 1996 2296 moveto 2016 2308 moveto 2016 2308 lineto stroke 2016 2308 moveto 2036 2320 moveto 2036 2320 lineto stroke 2036 2320 moveto 2056 2332 moveto 2056 2332 lineto stroke 2056 2332 moveto 2080 2344 moveto 2080 2344 lineto stroke 2080 2344 moveto 2100 2356 moveto 2100 2356 lineto stroke 2100 2356 moveto 2120 2368 moveto 2120 2368 lineto stroke 2120 2368 moveto 2140 2380 moveto 2140 2380 lineto stroke 2140 2380 moveto 2164 2392 moveto 2164 2392 lineto stroke 2164 2392 moveto 2184 2404 moveto 2184 2404 lineto stroke 2184 2404 moveto 2864 1596 moveto 2864 1596 lineto stroke 2864 1596 moveto 2844 1588 moveto 2844 1588 lineto stroke 2844 1588 moveto 2824 1576 moveto 2824 1576 lineto stroke 2824 1576 moveto 2800 1564 moveto 2800 1564 lineto stroke 2800 1564 moveto 2776 1552 moveto 2776 1552 lineto stroke 2776 1552 moveto 2756 1540 moveto 2756 1540 lineto stroke 2756 1540 moveto 2732 1528 moveto 2732 1528 lineto stroke 2732 1528 moveto 2708 1520 moveto 2708 1520 lineto stroke 2708 1520 moveto 2684 1508 moveto 2684 1508 lineto stroke 2684 1508 moveto 2656 1496 moveto 2656 1496 lineto stroke 2656 1496 moveto 2632 1484 moveto 2632 1484 lineto stroke 2632 1484 moveto 2608 1476 moveto 2608 1476 lineto stroke 2608 1476 moveto 2580 1464 moveto 2580 1464 lineto stroke 2580 1464 moveto 2556 1452 moveto 2556 1452 lineto stroke 2556 1452 moveto 2528 1440 moveto 2528 1440 lineto stroke 2528 1440 moveto 2500 1432 moveto 2500 1432 lineto stroke 2500 1432 moveto 2472 1420 moveto 2472 1420 lineto stroke 2472 1420 moveto 2444 1412 moveto 2444 1412 lineto stroke 2444 1412 moveto 2416 1400 moveto 2416 1400 lineto stroke 2416 1400 moveto 2388 1392 moveto 2388 1392 lineto stroke 2388 1392 moveto 2360 1380 moveto 2360 1380 lineto stroke 2360 1380 moveto 2328 1372 moveto 2328 1372 lineto stroke 2328 1372 moveto 2300 1364 moveto 2300 1364 lineto stroke 2300 1364 moveto 2268 1356 moveto 2268 1356 lineto stroke 2268 1356 moveto 2240 1348 moveto 2240 1348 lineto stroke 2240 1348 moveto 2208 1340 moveto 2208 1340 lineto stroke 2208 1340 moveto 2180 1332 moveto 2180 1332 lineto stroke 2180 1332 moveto 2152 1328 moveto 2152 1328 lineto stroke 2152 1328 moveto 2124 1324 moveto 2124 1324 lineto stroke 2124 1324 moveto 2100 1320 moveto 2100 1320 lineto stroke 2100 1320 moveto 2076 1320 moveto 2076 1320 lineto stroke 2076 1320 moveto 2056 1320 moveto 2056 1320 lineto stroke 2056 1320 moveto 2036 1320 moveto 2036 1320 lineto stroke 2036 1320 moveto 2020 1324 moveto 2020 1324 lineto stroke 2020 1324 moveto 2008 1328 moveto 2008 1328 lineto stroke 2008 1328 moveto 1996 1332 moveto 1996 1332 lineto stroke 1996 1332 moveto 1988 1340 moveto 1988 1340 lineto stroke 1988 1340 moveto 1984 1344 moveto 1984 1344 lineto stroke 1984 1344 moveto 1980 1352 moveto 1980 1352 lineto stroke 1980 1352 moveto 1976 1360 moveto 1976 1360 lineto stroke 1976 1360 moveto 1976 1368 moveto 1976 1368 lineto stroke 1976 1368 moveto 1976 1376 moveto 1976 1376 lineto stroke 1976 1376 moveto 1980 1384 moveto 1980 1384 lineto stroke 1980 1384 moveto 1980 1392 moveto 1980 1392 lineto stroke 1980 1392 moveto 1984 1400 moveto 1984 1400 lineto stroke 1984 1400 moveto 1992 1412 moveto 1992 1412 lineto stroke 1992 1412 moveto 1996 1420 moveto 1996 1420 lineto stroke 1996 1420 moveto 2004 1428 moveto 2004 1428 lineto stroke 2004 1428 moveto 2012 1440 moveto 2012 1440 lineto stroke 2012 1440 moveto 2020 1448 moveto 2020 1448 lineto stroke 2020 1448 moveto 2028 1460 moveto 2028 1460 lineto stroke 2028 1460 moveto 2036 1468 moveto 2036 1468 lineto stroke 2036 1468 moveto 2048 1480 moveto 2048 1480 lineto stroke 2048 1480 moveto 2060 1492 moveto 2060 1492 lineto stroke 2060 1492 moveto 2072 1500 moveto 2072 1500 lineto stroke 2072 1500 moveto 2084 1512 moveto 2084 1512 lineto stroke 2084 1512 moveto 2096 1524 moveto 2096 1524 lineto stroke 2096 1524 moveto 2108 1532 moveto 2108 1532 lineto stroke 2108 1532 moveto 2120 1544 moveto 2120 1544 lineto stroke 2120 1544 moveto 2136 1556 moveto 2136 1556 lineto stroke 2136 1556 moveto 2152 1564 moveto 2152 1564 lineto stroke 2152 1564 moveto 2164 1576 moveto 2164 1576 lineto stroke 2164 1576 moveto 2184 1588 moveto 2184 1588 lineto stroke 2184 1588 moveto 2716 2316 moveto 2716 2316 lineto stroke 2716 2316 moveto 2716 2316 moveto 2712 2312 lineto stroke 2712 2312 moveto 2704 2308 lineto stroke 2704 2308 moveto 2700 2308 lineto stroke 2700 2308 moveto 2692 2304 lineto stroke 2692 2304 moveto 2684 2300 lineto stroke 2684 2300 moveto 2676 2296 lineto stroke 2676 2296 moveto 2664 2288 lineto stroke 2664 2288 moveto 2660 2288 lineto stroke 2660 2288 moveto 2652 2284 lineto stroke 2652 2284 moveto 2648 2280 lineto stroke 2648 2280 moveto 2640 2276 lineto stroke 2640 2276 moveto 2632 2272 lineto stroke 2632 2272 moveto 2624 2272 lineto stroke 2624 2272 moveto 2616 2268 lineto stroke 2616 2268 moveto 2608 2264 lineto stroke 2608 2264 moveto 2600 2260 lineto stroke 2600 2260 moveto 2588 2256 lineto stroke 2588 2256 moveto 2580 2252 lineto stroke 2580 2252 moveto 2568 2248 lineto stroke 2568 2248 moveto 2556 2244 lineto stroke 2556 2244 moveto 2548 2236 lineto stroke 2548 2236 moveto 2536 2232 lineto stroke 2536 2232 moveto 2524 2228 lineto stroke 2524 2228 moveto 2508 2224 lineto stroke 2508 2224 moveto 2496 2220 lineto stroke 2496 2220 moveto 2484 2216 lineto stroke 2484 2216 moveto 2472 2212 lineto stroke 2472 2212 moveto 2456 2208 lineto stroke 2456 2208 moveto 2444 2200 lineto stroke 2444 2200 moveto 2428 2196 lineto stroke 2428 2196 moveto 2412 2192 lineto stroke 2412 2192 moveto 2396 2188 lineto stroke 2396 2188 moveto 2380 2184 lineto stroke 2380 2184 moveto 2364 2180 lineto stroke 2364 2180 moveto 2348 2176 lineto stroke 2348 2176 moveto 2332 2172 lineto stroke 2332 2172 moveto 2316 2168 lineto stroke 2316 2168 moveto 2300 2168 lineto stroke 2300 2168 moveto 2284 2164 lineto stroke 2284 2164 moveto 2264 2160 lineto stroke 2264 2160 moveto 2248 2160 lineto stroke 2248 2160 moveto 2232 2156 lineto stroke 2232 2156 moveto 2216 2156 lineto stroke 2216 2156 moveto 2200 2156 lineto stroke 2200 2156 moveto 2184 2156 lineto stroke 2184 2156 moveto 2172 2156 lineto stroke 2172 2156 moveto 2156 2156 lineto stroke 2156 2156 moveto 2144 2156 lineto stroke 2144 2156 moveto 2132 2156 lineto stroke 2132 2156 moveto 2120 2160 lineto stroke 2120 2160 moveto 2108 2160 lineto stroke 2108 2160 moveto 2100 2164 lineto stroke 2100 2164 moveto 2088 2168 lineto stroke 2088 2168 moveto 2080 2172 lineto stroke 2080 2172 moveto 2072 2176 lineto stroke 2072 2176 moveto 2064 2180 lineto stroke 2064 2180 moveto 2060 2184 lineto stroke 2060 2184 moveto 2052 2188 lineto stroke 2052 2188 moveto 2048 2196 lineto stroke 2048 2196 moveto 2044 2200 lineto stroke 2044 2200 moveto 2044 2208 lineto stroke 2044 2208 moveto 2040 2216 lineto stroke 2040 2216 moveto 2040 2224 lineto stroke 2040 2224 moveto 2040 2232 lineto stroke 2040 2232 moveto 2040 2240 lineto stroke 2040 2240 moveto 2044 2244 lineto stroke 2044 2244 moveto 2044 2252 lineto stroke 2044 2252 moveto 2048 2260 lineto stroke 2048 2260 moveto 2052 2268 lineto stroke 2052 2268 moveto 2060 2280 lineto stroke 2060 2280 moveto 2064 2288 lineto stroke 2064 2288 moveto 2068 2296 lineto stroke 2068 2296 moveto 2076 2304 lineto stroke 2076 2304 moveto 2080 2312 lineto stroke 2080 2312 moveto 2088 2316 lineto stroke 2088 2316 moveto 2096 2324 lineto stroke 2096 2324 moveto 2100 2332 lineto stroke 2100 2332 moveto 2108 2340 lineto stroke 2108 2340 moveto 2116 2344 lineto stroke 2116 2344 moveto 2120 2352 lineto stroke 2120 2352 moveto 2128 2356 lineto stroke 2128 2356 moveto 2132 2364 lineto stroke 2132 2364 moveto 2140 2368 lineto stroke 2140 2368 moveto 2144 2372 lineto stroke 2144 2372 moveto 2152 2376 lineto stroke 2152 2376 moveto 2156 2380 lineto stroke 2156 2380 moveto 2160 2384 lineto stroke 2160 2384 moveto 2168 2388 lineto stroke 2168 2388 moveto 2172 2392 lineto stroke 2172 2392 moveto 2176 2396 lineto stroke 2176 2396 moveto 2184 2400 lineto stroke 2184 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2192 2408 lineto stroke 2192 2408 moveto 2196 2408 lineto stroke 2196 2408 moveto 2716 2316 moveto 2716 2316 lineto stroke 2716 2316 moveto 2696 2320 moveto 2696 2320 lineto stroke 2696 2320 moveto 2676 2328 moveto 2676 2328 lineto stroke 2676 2328 moveto 2656 2332 moveto 2656 2332 lineto stroke 2656 2332 moveto 2636 2336 moveto 2636 2336 lineto stroke 2636 2336 moveto 2616 2340 moveto 2616 2340 lineto stroke 2616 2340 moveto 2596 2344 moveto 2596 2344 lineto stroke 2596 2344 moveto 2576 2352 moveto 2576 2352 lineto stroke 2576 2352 moveto 2556 2356 moveto 2556 2356 lineto stroke 2556 2356 moveto 2536 2360 moveto 2536 2360 lineto stroke 2536 2360 moveto 2516 2364 moveto 2516 2364 lineto stroke 2516 2364 moveto 2496 2368 moveto 2496 2368 lineto stroke 2496 2368 moveto 2476 2372 moveto 2476 2372 lineto stroke 2476 2372 moveto 2456 2376 moveto 2456 2376 lineto stroke 2456 2376 moveto 2436 2380 moveto 2436 2380 lineto stroke 2436 2380 moveto 2416 2384 moveto 2416 2384 lineto stroke 2416 2384 moveto 2396 2388 moveto 2396 2388 lineto stroke 2396 2388 moveto 2376 2392 moveto 2376 2392 lineto stroke 2376 2392 moveto 2352 2396 moveto 2352 2396 lineto stroke 2352 2396 moveto 2332 2396 moveto 2332 2396 lineto stroke 2332 2396 moveto 2312 2400 moveto 2312 2400 lineto stroke 2312 2400 moveto 2292 2404 moveto 2292 2404 lineto stroke 2292 2404 moveto 2272 2404 moveto 2272 2404 lineto stroke 2272 2404 moveto 2248 2408 moveto 2248 2408 lineto stroke 2248 2408 moveto 2228 2408 moveto 2228 2408 lineto stroke 2228 2408 moveto 2208 2412 moveto 2208 2412 lineto stroke 2208 2412 moveto 2196 2316 moveto 2196 2316 lineto stroke 2196 2316 moveto 2176 2304 moveto 2176 2304 lineto stroke 2176 2304 moveto 2156 2292 moveto 2156 2292 lineto stroke 2156 2292 moveto 2136 2284 moveto 2136 2284 lineto stroke 2136 2284 moveto 2112 2272 moveto 2112 2272 lineto stroke 2112 2272 moveto 2092 2260 moveto 2092 2260 lineto stroke 2092 2260 moveto 2072 2252 moveto 2072 2252 lineto stroke 2072 2252 moveto 2052 2240 moveto 2052 2240 lineto stroke 2052 2240 moveto 2028 2232 moveto 2028 2232 lineto stroke 2028 2232 moveto 2008 2220 moveto 2008 2220 lineto stroke 2008 2220 moveto 1988 2212 moveto 1988 2212 lineto stroke 1988 2212 moveto 1968 2200 moveto 1968 2200 lineto stroke 1968 2200 moveto 1944 2192 moveto 1944 2192 lineto stroke 1944 2192 moveto 1924 2184 moveto 1924 2184 lineto stroke 1924 2184 moveto 1904 2176 moveto 1904 2176 lineto stroke 1904 2176 moveto 1884 2168 moveto 1884 2168 lineto stroke 1884 2168 moveto 1864 2164 moveto 1864 2164 lineto stroke 1864 2164 moveto 1844 2156 moveto 1844 2156 lineto stroke 1844 2156 moveto 1824 2156 moveto 1824 2156 lineto stroke 1824 2156 moveto 1812 2160 moveto 1812 2160 lineto stroke 1812 2160 moveto 1824 2176 moveto 1824 2176 lineto stroke 1824 2176 moveto 1844 2192 moveto 1844 2192 lineto stroke 1844 2192 moveto 1864 2208 moveto 1864 2208 lineto stroke 1864 2208 moveto 1884 2224 moveto 1884 2224 lineto stroke 1884 2224 moveto 1904 2240 moveto 1904 2240 lineto stroke 1904 2240 moveto 1924 2252 moveto 1924 2252 lineto stroke 1924 2252 moveto 1944 2264 moveto 1944 2264 lineto stroke 1944 2264 moveto 1964 2280 moveto 1964 2280 lineto stroke 1964 2280 moveto 1988 2292 moveto 1988 2292 lineto stroke 1988 2292 moveto 2008 2304 moveto 2008 2304 lineto stroke 2008 2304 moveto 2028 2316 moveto 2028 2316 lineto stroke 2028 2316 moveto 2052 2328 moveto 2052 2328 lineto stroke 2052 2328 moveto 2072 2340 moveto 2072 2340 lineto stroke 2072 2340 moveto 2092 2352 moveto 2092 2352 lineto stroke 2092 2352 moveto 2112 2364 moveto 2112 2364 lineto stroke 2112 2364 moveto 2136 2376 moveto 2136 2376 lineto stroke 2136 2376 moveto 2156 2388 moveto 2156 2388 lineto stroke 2156 2388 moveto 2176 2400 moveto 2176 2400 lineto stroke 2176 2400 moveto 2716 1596 moveto 2716 1596 lineto stroke 2716 1596 moveto 2696 1588 moveto 2696 1588 lineto stroke 2696 1588 moveto 2672 1576 moveto 2672 1576 lineto stroke 2672 1576 moveto 2652 1564 moveto 2652 1564 lineto stroke 2652 1564 moveto 2628 1552 moveto 2628 1552 lineto stroke 2628 1552 moveto 2604 1540 moveto 2604 1540 lineto stroke 2604 1540 moveto 2580 1532 moveto 2580 1532 lineto stroke 2580 1532 moveto 2556 1520 moveto 2556 1520 lineto stroke 2556 1520 moveto 2528 1508 moveto 2528 1508 lineto stroke 2528 1508 moveto 2504 1496 moveto 2504 1496 lineto stroke 2504 1496 moveto 2476 1488 moveto 2476 1488 lineto stroke 2476 1488 moveto 2448 1476 moveto 2448 1476 lineto stroke 2448 1476 moveto 2420 1464 moveto 2420 1464 lineto stroke 2420 1464 moveto 2392 1456 moveto 2392 1456 lineto stroke 2392 1456 moveto 2364 1444 moveto 2364 1444 lineto stroke 2364 1444 moveto 2336 1436 moveto 2336 1436 lineto stroke 2336 1436 moveto 2304 1428 moveto 2304 1428 lineto stroke 2304 1428 moveto 2276 1416 moveto 2276 1416 lineto stroke 2276 1416 moveto 2244 1412 moveto 2244 1412 lineto stroke 2244 1412 moveto 2216 1404 moveto 2216 1404 lineto stroke 2216 1404 moveto 2188 1396 moveto 2188 1396 lineto stroke 2188 1396 moveto 2160 1392 moveto 2160 1392 lineto stroke 2160 1392 moveto 2136 1392 moveto 2136 1392 lineto stroke 2136 1392 moveto 2112 1392 moveto 2112 1392 lineto stroke 2112 1392 moveto 2092 1392 moveto 2092 1392 lineto stroke 2092 1392 moveto 2076 1392 moveto 2076 1392 lineto stroke 2076 1392 moveto 2064 1396 moveto 2064 1396 lineto stroke 2064 1396 moveto 2056 1404 moveto 2056 1404 lineto stroke 2056 1404 moveto 2048 1408 moveto 2048 1408 lineto stroke 2048 1408 moveto 2044 1416 moveto 2044 1416 lineto stroke 2044 1416 moveto 2040 1424 moveto 2040 1424 lineto stroke 2040 1424 moveto 2040 1432 moveto 2040 1432 lineto stroke 2040 1432 moveto 2040 1440 moveto 2040 1440 lineto stroke 2040 1440 moveto 2044 1448 moveto 2044 1448 lineto stroke 2044 1448 moveto 2048 1456 moveto 2048 1456 lineto stroke 2048 1456 moveto 2052 1464 moveto 2052 1464 lineto stroke 2052 1464 moveto 2060 1476 moveto 2060 1476 lineto stroke 2060 1476 moveto 2068 1484 moveto 2068 1484 lineto stroke 2068 1484 moveto 2076 1496 moveto 2076 1496 lineto stroke 2076 1496 moveto 2084 1504 moveto 2084 1504 lineto stroke 2084 1504 moveto 2096 1516 moveto 2096 1516 lineto stroke 2096 1516 moveto 2104 1528 moveto 2104 1528 lineto stroke 2104 1528 moveto 2116 1536 moveto 2116 1536 lineto stroke 2116 1536 moveto 2128 1548 moveto 2128 1548 lineto stroke 2128 1548 moveto 2144 1560 moveto 2144 1560 lineto stroke 2144 1560 moveto 2156 1568 moveto 2156 1568 lineto stroke 2156 1568 moveto 2172 1580 moveto 2172 1580 lineto stroke 2172 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 2564 2364 moveto 2564 2364 lineto stroke 2564 2364 moveto 2564 2364 moveto 2556 2360 lineto stroke 2556 2360 moveto 2552 2356 lineto stroke 2552 2356 moveto 2544 2352 lineto stroke 2544 2352 moveto 2536 2348 lineto stroke 2536 2348 moveto 2528 2348 lineto stroke 2528 2348 moveto 2524 2344 lineto stroke 2524 2344 moveto 2512 2340 lineto stroke 2512 2340 moveto 2504 2336 lineto stroke 2504 2336 moveto 2496 2328 lineto stroke 2496 2328 moveto 2484 2324 lineto stroke 2484 2324 moveto 2476 2324 lineto stroke 2476 2324 moveto 2472 2320 lineto stroke 2472 2320 moveto 2464 2316 lineto stroke 2464 2316 moveto 2456 2312 lineto stroke 2456 2312 moveto 2448 2312 lineto stroke 2448 2312 moveto 2440 2308 lineto stroke 2440 2308 moveto 2432 2304 lineto stroke 2432 2304 moveto 2424 2300 lineto stroke 2424 2300 moveto 2416 2300 lineto stroke 2416 2300 moveto 2408 2296 lineto stroke 2408 2296 moveto 2400 2292 lineto stroke 2400 2292 moveto 2392 2288 lineto stroke 2392 2288 moveto 2384 2288 lineto stroke 2384 2288 moveto 2376 2284 lineto stroke 2376 2284 moveto 2364 2280 lineto stroke 2364 2280 moveto 2356 2280 lineto stroke 2356 2280 moveto 2344 2276 lineto stroke 2344 2276 moveto 2336 2272 lineto stroke 2336 2272 moveto 2324 2268 lineto stroke 2324 2268 moveto 2316 2268 lineto stroke 2316 2268 moveto 2304 2264 lineto stroke 2304 2264 moveto 2292 2264 lineto stroke 2292 2264 moveto 2284 2260 lineto stroke 2284 2260 moveto 2272 2256 lineto stroke 2272 2256 moveto 2264 2256 lineto stroke 2264 2256 moveto 2252 2256 lineto stroke 2252 2256 moveto 2240 2252 lineto stroke 2240 2252 moveto 2232 2252 lineto stroke 2232 2252 moveto 2220 2248 lineto stroke 2220 2248 moveto 2212 2248 lineto stroke 2212 2248 moveto 2200 2248 lineto stroke 2200 2248 moveto 2192 2248 lineto stroke 2192 2248 moveto 2184 2248 lineto stroke 2184 2248 moveto 2176 2248 lineto stroke 2176 2248 moveto 2168 2248 lineto stroke 2168 2248 moveto 2160 2248 lineto stroke 2160 2248 moveto 2152 2248 lineto stroke 2152 2248 moveto 2144 2252 lineto stroke 2144 2252 moveto 2136 2252 lineto stroke 2136 2252 moveto 2132 2252 lineto stroke 2132 2252 moveto 2124 2256 lineto stroke 2124 2256 moveto 2120 2260 lineto stroke 2120 2260 moveto 2116 2260 lineto stroke 2116 2260 moveto 2112 2264 lineto stroke 2112 2264 moveto 2108 2268 lineto stroke 2108 2268 moveto 2104 2268 lineto stroke 2104 2268 moveto 2100 2272 lineto stroke 2100 2272 moveto 2100 2276 lineto stroke 2100 2276 moveto 2096 2280 lineto stroke 2096 2280 moveto 2096 2284 lineto stroke 2096 2284 moveto 2096 2288 lineto stroke 2096 2288 moveto 2096 2292 lineto stroke 2096 2292 moveto 2096 2296 lineto stroke 2096 2296 moveto 2096 2300 lineto stroke 2096 2300 moveto 2100 2308 lineto stroke 2100 2308 moveto 2100 2312 lineto stroke 2100 2312 moveto 2104 2316 lineto stroke 2104 2316 moveto 2104 2320 lineto stroke 2104 2320 moveto 2108 2328 lineto stroke 2108 2328 moveto 2112 2332 lineto stroke 2112 2332 moveto 2116 2336 lineto stroke 2116 2336 moveto 2120 2340 lineto stroke 2120 2340 moveto 2124 2344 lineto stroke 2124 2344 moveto 2128 2352 lineto stroke 2128 2352 moveto 2132 2356 lineto stroke 2132 2356 moveto 2136 2360 lineto stroke 2136 2360 moveto 2140 2364 lineto stroke 2140 2364 moveto 2144 2368 lineto stroke 2144 2368 moveto 2148 2368 lineto stroke 2148 2368 moveto 2152 2372 lineto stroke 2152 2372 moveto 2156 2376 lineto stroke 2156 2376 moveto 2160 2380 lineto stroke 2160 2380 moveto 2160 2384 lineto stroke 2160 2384 moveto 2164 2388 lineto stroke 2164 2388 moveto 2168 2388 lineto stroke 2168 2388 moveto 2176 2392 lineto stroke 2176 2392 moveto 2180 2400 lineto stroke 2180 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2192 2404 lineto stroke 2192 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 2564 2364 moveto 2564 2364 lineto stroke 2564 2364 moveto 2544 2368 moveto 2544 2368 lineto stroke 2544 2368 moveto 2524 2372 moveto 2524 2372 lineto stroke 2524 2372 moveto 2500 2376 moveto 2500 2376 lineto stroke 2500 2376 moveto 2480 2380 moveto 2480 2380 lineto stroke 2480 2380 moveto 2460 2384 moveto 2460 2384 lineto stroke 2460 2384 moveto 2440 2384 moveto 2440 2384 lineto stroke 2440 2384 moveto 2420 2388 moveto 2420 2388 lineto stroke 2420 2388 moveto 2400 2392 moveto 2400 2392 lineto stroke 2400 2392 moveto 2380 2396 moveto 2380 2396 lineto stroke 2380 2396 moveto 2356 2396 moveto 2356 2396 lineto stroke 2356 2396 moveto 2336 2400 moveto 2336 2400 lineto stroke 2336 2400 moveto 2316 2404 moveto 2316 2404 lineto stroke 2316 2404 moveto 2296 2404 moveto 2296 2404 lineto stroke 2296 2404 moveto 2272 2408 moveto 2272 2408 lineto stroke 2272 2408 moveto 2252 2408 moveto 2252 2408 lineto stroke 2252 2408 moveto 2232 2408 moveto 2232 2408 lineto stroke 2232 2408 moveto 2212 2412 moveto 2212 2412 lineto stroke 2212 2412 moveto 2196 2364 moveto 2196 2364 lineto stroke 2196 2364 moveto 2176 2352 moveto 2176 2352 lineto stroke 2176 2352 moveto 2156 2340 moveto 2156 2340 lineto stroke 2156 2340 moveto 2136 2332 moveto 2136 2332 lineto stroke 2136 2332 moveto 2112 2320 moveto 2112 2320 lineto stroke 2112 2320 moveto 2092 2308 moveto 2092 2308 lineto stroke 2092 2308 moveto 2072 2300 moveto 2072 2300 lineto stroke 2072 2300 moveto 2052 2288 moveto 2052 2288 lineto stroke 2052 2288 moveto 2028 2280 moveto 2028 2280 lineto stroke 2028 2280 moveto 2008 2272 moveto 2008 2272 lineto stroke 2008 2272 moveto 1988 2260 moveto 1988 2260 lineto stroke 1988 2260 moveto 1968 2252 moveto 1968 2252 lineto stroke 1968 2252 moveto 1948 2248 moveto 1948 2248 lineto stroke 1948 2248 moveto 1940 2256 moveto 1940 2256 lineto stroke 1940 2256 moveto 1960 2272 moveto 1960 2272 lineto stroke 1960 2272 moveto 1980 2284 moveto 1980 2284 lineto stroke 1980 2284 moveto 2004 2300 moveto 2004 2300 lineto stroke 2004 2300 moveto 2024 2312 moveto 2024 2312 lineto stroke 2024 2312 moveto 2044 2324 moveto 2044 2324 lineto stroke 2044 2324 moveto 2064 2336 moveto 2064 2336 lineto stroke 2064 2336 moveto 2088 2348 moveto 2088 2348 lineto stroke 2088 2348 moveto 2108 2360 moveto 2108 2360 lineto stroke 2108 2360 moveto 2128 2372 moveto 2128 2372 lineto stroke 2128 2372 moveto 2148 2384 moveto 2148 2384 lineto stroke 2148 2384 moveto 2172 2396 moveto 2172 2396 lineto stroke 2172 2396 moveto 2192 2408 moveto 2192 2408 lineto stroke 2192 2408 moveto 2564 1596 moveto 2564 1596 lineto stroke 2564 1596 moveto 2540 1588 moveto 2540 1588 lineto stroke 2540 1588 moveto 2520 1576 moveto 2520 1576 lineto stroke 2520 1576 moveto 2496 1564 moveto 2496 1564 lineto stroke 2496 1564 moveto 2472 1552 moveto 2472 1552 lineto stroke 2472 1552 moveto 2444 1540 moveto 2444 1540 lineto stroke 2444 1540 moveto 2420 1532 moveto 2420 1532 lineto stroke 2420 1532 moveto 2392 1520 moveto 2392 1520 lineto stroke 2392 1520 moveto 2364 1508 moveto 2364 1508 lineto stroke 2364 1508 moveto 2336 1500 moveto 2336 1500 lineto stroke 2336 1500 moveto 2308 1488 moveto 2308 1488 lineto stroke 2308 1488 moveto 2280 1480 moveto 2280 1480 lineto stroke 2280 1480 moveto 2248 1472 moveto 2248 1472 lineto stroke 2248 1472 moveto 2220 1468 moveto 2220 1468 lineto stroke 2220 1468 moveto 2192 1460 moveto 2192 1460 lineto stroke 2192 1460 moveto 2164 1460 moveto 2164 1460 lineto stroke 2164 1460 moveto 2144 1456 moveto 2144 1456 lineto stroke 2144 1456 moveto 2124 1460 moveto 2124 1460 lineto stroke 2124 1460 moveto 2112 1464 moveto 2112 1464 lineto stroke 2112 1464 moveto 2104 1468 moveto 2104 1468 lineto stroke 2104 1468 moveto 2100 1476 moveto 2100 1476 lineto stroke 2100 1476 moveto 2096 1484 moveto 2096 1484 lineto stroke 2096 1484 moveto 2096 1492 moveto 2096 1492 lineto stroke 2096 1492 moveto 2100 1500 moveto 2100 1500 lineto stroke 2100 1500 moveto 2104 1508 moveto 2104 1508 lineto stroke 2104 1508 moveto 2108 1516 moveto 2108 1516 lineto stroke 2108 1516 moveto 2116 1528 moveto 2116 1528 lineto stroke 2116 1528 moveto 2124 1536 moveto 2124 1536 lineto stroke 2124 1536 moveto 2136 1548 moveto 2136 1548 lineto stroke 2136 1548 moveto 2148 1560 moveto 2148 1560 lineto stroke 2148 1560 moveto 2160 1568 moveto 2160 1568 lineto stroke 2160 1568 moveto 2172 1580 moveto 2172 1580 lineto stroke 2172 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 2412 2396 moveto 2412 2396 lineto stroke 2412 2396 moveto 2412 2396 moveto 2404 2392 lineto stroke 2404 2392 moveto 2400 2388 lineto stroke 2400 2388 moveto 2392 2384 lineto stroke 2392 2384 moveto 2384 2384 lineto stroke 2384 2384 moveto 2380 2380 lineto stroke 2380 2380 moveto 2372 2376 lineto stroke 2372 2376 moveto 2364 2372 lineto stroke 2364 2372 moveto 2356 2368 lineto stroke 2356 2368 moveto 2348 2364 lineto stroke 2348 2364 moveto 2340 2364 lineto stroke 2340 2364 moveto 2332 2360 lineto stroke 2332 2360 moveto 2324 2356 lineto stroke 2324 2356 moveto 2316 2352 lineto stroke 2316 2352 moveto 2308 2352 lineto stroke 2308 2352 moveto 2300 2348 lineto stroke 2300 2348 moveto 2288 2344 lineto stroke 2288 2344 moveto 2280 2340 lineto stroke 2280 2340 moveto 2268 2340 lineto stroke 2268 2340 moveto 2260 2336 lineto stroke 2260 2336 moveto 2248 2332 lineto stroke 2248 2332 moveto 2236 2332 lineto stroke 2236 2332 moveto 2228 2328 lineto stroke 2228 2328 moveto 2216 2328 lineto stroke 2216 2328 moveto 2204 2324 lineto stroke 2204 2324 moveto 2196 2324 lineto stroke 2196 2324 moveto 2188 2324 lineto stroke 2188 2324 moveto 2180 2324 lineto stroke 2180 2324 moveto 2172 2324 lineto stroke 2172 2324 moveto 2164 2324 lineto stroke 2164 2324 moveto 2160 2328 lineto stroke 2160 2328 moveto 2156 2328 lineto stroke 2156 2328 moveto 2148 2332 lineto stroke 2148 2332 moveto 2144 2336 lineto stroke 2144 2336 moveto 2144 2340 lineto stroke 2144 2340 moveto 2140 2344 lineto stroke 2140 2344 moveto 2140 2348 lineto stroke 2140 2348 moveto 2144 2352 lineto stroke 2144 2352 moveto 2144 2356 lineto stroke 2144 2356 moveto 2144 2360 lineto stroke 2144 2360 moveto 2148 2364 lineto stroke 2148 2364 moveto 2152 2368 lineto stroke 2152 2368 moveto 2156 2372 lineto stroke 2156 2372 moveto 2160 2376 lineto stroke 2160 2376 moveto 2164 2380 lineto stroke 2164 2380 moveto 2168 2384 lineto stroke 2168 2384 moveto 2172 2388 lineto stroke 2172 2388 moveto 2172 2392 lineto stroke 2172 2392 moveto 2176 2396 lineto stroke 2176 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2404 lineto stroke 2184 2404 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 2412 2396 moveto 2412 2396 lineto stroke 2412 2396 moveto 2388 2396 moveto 2388 2396 lineto stroke 2388 2396 moveto 2368 2400 moveto 2368 2400 lineto stroke 2368 2400 moveto 2348 2400 moveto 2348 2400 lineto stroke 2348 2400 moveto 2328 2404 moveto 2328 2404 lineto stroke 2328 2404 moveto 2304 2404 moveto 2304 2404 lineto stroke 2304 2404 moveto 2284 2408 moveto 2284 2408 lineto stroke 2284 2408 moveto 2264 2408 moveto 2264 2408 lineto stroke 2264 2408 moveto 2244 2408 moveto 2244 2408 lineto stroke 2244 2408 moveto 2220 2408 moveto 2220 2408 lineto stroke 2220 2408 moveto 2200 2412 moveto 2200 2412 lineto stroke 2200 2412 moveto 2196 2396 moveto 2196 2396 lineto stroke 2196 2396 moveto 2176 2384 moveto 2176 2384 lineto stroke 2176 2384 moveto 2156 2372 moveto 2156 2372 lineto stroke 2156 2372 moveto 2136 2360 moveto 2136 2360 lineto stroke 2136 2360 moveto 2112 2352 moveto 2112 2352 lineto stroke 2112 2352 moveto 2092 2340 moveto 2092 2340 lineto stroke 2092 2340 moveto 2072 2332 moveto 2072 2332 lineto stroke 2072 2332 moveto 2052 2324 moveto 2052 2324 lineto stroke 2052 2324 moveto 2072 2340 moveto 2072 2340 lineto stroke 2072 2340 moveto 2092 2352 moveto 2092 2352 lineto stroke 2092 2352 moveto 2112 2364 moveto 2112 2364 lineto stroke 2112 2364 moveto 2132 2376 moveto 2132 2376 lineto stroke 2132 2376 moveto 2156 2388 moveto 2156 2388 lineto stroke 2156 2388 moveto 2176 2400 moveto 2176 2400 lineto stroke 2176 2400 moveto 2412 1596 moveto 2412 1596 lineto stroke 2412 1596 moveto 2388 1588 moveto 2388 1588 lineto stroke 2388 1588 moveto 2364 1576 moveto 2364 1576 lineto stroke 2364 1576 moveto 2340 1564 moveto 2340 1564 lineto stroke 2340 1564 moveto 2312 1552 moveto 2312 1552 lineto stroke 2312 1552 moveto 2284 1544 moveto 2284 1544 lineto stroke 2284 1544 moveto 2256 1532 moveto 2256 1532 lineto stroke 2256 1532 moveto 2224 1524 moveto 2224 1524 lineto stroke 2224 1524 moveto 2196 1520 moveto 2196 1520 lineto stroke 2196 1520 moveto 2172 1520 moveto 2172 1520 lineto stroke 2172 1520 moveto 2156 1520 moveto 2156 1520 lineto stroke 2156 1520 moveto 2144 1524 moveto 2144 1524 lineto stroke 2144 1524 moveto 2144 1532 moveto 2144 1532 lineto stroke 2144 1532 moveto 2144 1540 moveto 2144 1540 lineto stroke 2144 1540 moveto 2148 1548 moveto 2148 1548 lineto stroke 2148 1548 moveto 2152 1560 moveto 2152 1560 lineto stroke 2152 1560 moveto 2164 1568 moveto 2164 1568 lineto stroke 2164 1568 moveto 2172 1580 moveto 2172 1580 lineto stroke 2172 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 2272 2408 moveto 2272 2408 lineto stroke 2272 2408 moveto 2272 2408 moveto 2268 2404 lineto stroke 2268 2404 moveto 2260 2400 lineto stroke 2260 2400 moveto 2256 2396 lineto stroke 2256 2396 moveto 2248 2396 lineto stroke 2248 2396 moveto 2240 2392 lineto stroke 2240 2392 moveto 2232 2388 lineto stroke 2232 2388 moveto 2224 2388 lineto stroke 2224 2388 moveto 2216 2384 lineto stroke 2216 2384 moveto 2208 2384 lineto stroke 2208 2384 moveto 2200 2380 lineto stroke 2200 2380 moveto 2192 2380 lineto stroke 2192 2380 moveto 2188 2380 lineto stroke 2188 2380 moveto 2180 2380 lineto stroke 2180 2380 moveto 2176 2380 lineto stroke 2176 2380 moveto 2172 2384 lineto stroke 2172 2384 moveto 2172 2388 lineto stroke 2172 2388 moveto 2176 2392 lineto stroke 2176 2392 moveto 2176 2396 lineto stroke 2176 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2400 lineto stroke 2184 2400 moveto 2276 2408 moveto 2276 2408 lineto stroke 2276 2408 moveto 2256 2408 moveto 2256 2408 lineto stroke 2256 2408 moveto 2232 2408 moveto 2232 2408 lineto stroke 2232 2408 moveto 2212 2412 moveto 2212 2412 lineto stroke 2212 2412 moveto 2196 2408 moveto 2196 2408 lineto stroke 2196 2408 moveto 2176 2396 moveto 2176 2396 lineto stroke 2176 2396 moveto 2152 2384 moveto 2152 2384 lineto stroke 2152 2384 moveto 2152 2384 moveto 2152 2384 lineto stroke 2152 2384 moveto 2172 2396 moveto 2172 2396 lineto stroke 2172 2396 moveto 2272 1596 moveto 2272 1596 lineto stroke 2272 1596 moveto 2248 1584 moveto 2248 1584 lineto stroke 2248 1584 moveto 2220 1576 moveto 2220 1576 lineto stroke 2220 1576 moveto 2192 1568 moveto 2192 1568 lineto stroke 2192 1568 moveto 2176 1568 moveto 2176 1568 lineto stroke 2176 1568 moveto 2172 1576 moveto 2172 1576 lineto stroke 2172 1576 moveto 2180 1588 moveto 2180 1588 lineto stroke 2180 1588 moveto 3212 2052 moveto 3212 2052 lineto stroke 3212 2052 moveto 3212 2052 moveto 3204 2048 lineto stroke 3204 2048 moveto 3200 2044 lineto stroke 3200 2044 moveto 3192 2040 lineto stroke 3192 2040 moveto 3184 2036 lineto stroke 3184 2036 moveto 3176 2032 lineto stroke 3176 2032 moveto 3164 2028 lineto stroke 3164 2028 moveto 3160 2024 lineto stroke 3160 2024 moveto 3152 2020 lineto stroke 3152 2020 moveto 3144 2016 lineto stroke 3144 2016 moveto 3132 2008 lineto stroke 3132 2008 moveto 3124 2004 lineto stroke 3124 2004 moveto 3108 2000 lineto stroke 3108 2000 moveto 3096 1992 lineto stroke 3096 1992 moveto 3084 1984 lineto stroke 3084 1984 moveto 3068 1980 lineto stroke 3068 1980 moveto 3052 1972 lineto stroke 3052 1972 moveto 3032 1964 lineto stroke 3032 1964 moveto 3016 1956 lineto stroke 3016 1956 moveto 2996 1944 lineto stroke 2996 1944 moveto 2976 1936 lineto stroke 2976 1936 moveto 2952 1928 lineto stroke 2952 1928 moveto 2928 1920 lineto stroke 2928 1920 moveto 2904 1908 lineto stroke 2904 1908 moveto 2876 1896 lineto stroke 2876 1896 moveto 2852 1888 lineto stroke 2852 1888 moveto 2824 1876 lineto stroke 2824 1876 moveto 2792 1864 lineto stroke 2792 1864 moveto 2756 1852 lineto stroke 2756 1852 moveto 2728 1844 lineto stroke 2728 1844 moveto 2696 1832 lineto stroke 2696 1832 moveto 2664 1824 lineto stroke 2664 1824 moveto 2628 1812 lineto stroke 2628 1812 moveto 2592 1804 lineto stroke 2592 1804 moveto 2556 1792 lineto stroke 2556 1792 moveto 2516 1784 lineto stroke 2516 1784 moveto 2476 1776 lineto stroke 2476 1776 moveto 2440 1768 lineto stroke 2440 1768 moveto 2400 1760 lineto stroke 2400 1760 moveto 2360 1752 lineto stroke 2360 1752 moveto 2320 1748 lineto stroke 2320 1748 moveto 2280 1740 lineto stroke 2280 1740 moveto 2240 1736 lineto stroke 2240 1736 moveto 2200 1736 lineto stroke 2200 1736 moveto 2160 1732 lineto stroke 2160 1732 moveto 2120 1732 lineto stroke 2120 1732 moveto 2084 1736 lineto stroke 2084 1736 moveto 2052 1736 lineto stroke 2052 1736 moveto 2016 1740 lineto stroke 2016 1740 moveto 1984 1744 lineto stroke 1984 1744 moveto 1956 1752 lineto stroke 1956 1752 moveto 1928 1760 lineto stroke 1928 1760 moveto 1904 1768 lineto stroke 1904 1768 moveto 1880 1780 lineto stroke 1880 1780 moveto 1860 1792 lineto stroke 1860 1792 moveto 1840 1808 lineto stroke 1840 1808 moveto 1824 1820 lineto stroke 1824 1820 moveto 1812 1836 lineto stroke 1812 1836 moveto 1800 1856 lineto stroke 1800 1856 moveto 1792 1872 lineto stroke 1792 1872 moveto 1788 1892 lineto stroke 1788 1892 moveto 1784 1916 lineto stroke 1784 1916 moveto 1784 1936 lineto stroke 1784 1936 moveto 1788 1960 lineto stroke 1788 1960 moveto 1792 1980 lineto stroke 1792 1980 moveto 1800 2004 lineto stroke 1800 2004 moveto 1808 2028 lineto stroke 1808 2028 moveto 1820 2048 lineto stroke 1820 2048 moveto 1832 2072 lineto stroke 1832 2072 moveto 1848 2096 lineto stroke 1848 2096 moveto 1864 2120 lineto stroke 1864 2120 moveto 1880 2140 lineto stroke 1880 2140 moveto 1900 2160 lineto stroke 1900 2160 moveto 1916 2184 lineto stroke 1916 2184 moveto 1936 2200 lineto stroke 1936 2200 moveto 1956 2220 lineto stroke 1956 2220 moveto 1972 2236 lineto stroke 1972 2236 moveto 1992 2256 lineto stroke 1992 2256 moveto 2012 2272 lineto stroke 2012 2272 moveto 2028 2288 lineto stroke 2028 2288 moveto 2044 2300 lineto stroke 2044 2300 moveto 2060 2316 lineto stroke 2060 2316 moveto 2076 2328 lineto stroke 2076 2328 moveto 2092 2336 lineto stroke 2092 2336 moveto 2104 2348 lineto stroke 2104 2348 moveto 2116 2356 lineto stroke 2116 2356 moveto 2128 2364 lineto stroke 2128 2364 moveto 2140 2372 lineto stroke 2140 2372 moveto 2148 2380 lineto stroke 2148 2380 moveto 2160 2384 lineto stroke 2160 2384 moveto 2168 2392 lineto stroke 2168 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2176 2396 lineto stroke 2176 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3212 2052 moveto 3212 2052 lineto stroke 3212 2052 moveto 3192 2060 moveto 3192 2060 lineto stroke 3192 2060 moveto 3176 2068 moveto 3176 2068 lineto stroke 3176 2068 moveto 3156 2076 moveto 3156 2076 lineto stroke 3156 2076 moveto 3140 2080 moveto 3140 2080 lineto stroke 3140 2080 moveto 3120 2088 moveto 3120 2088 lineto stroke 3120 2088 moveto 3104 2096 moveto 3104 2096 lineto stroke 3104 2096 moveto 3084 2104 moveto 3084 2104 lineto stroke 3084 2104 moveto 3068 2112 moveto 3068 2112 lineto stroke 3068 2112 moveto 3048 2120 moveto 3048 2120 lineto stroke 3048 2120 moveto 3032 2128 moveto 3032 2128 lineto stroke 3032 2128 moveto 3012 2136 moveto 3012 2136 lineto stroke 3012 2136 moveto 2996 2144 moveto 2996 2144 lineto stroke 2996 2144 moveto 2976 2152 moveto 2976 2152 lineto stroke 2976 2152 moveto 2960 2160 moveto 2960 2160 lineto stroke 2960 2160 moveto 2940 2168 moveto 2940 2168 lineto stroke 2940 2168 moveto 2920 2172 moveto 2920 2172 lineto stroke 2920 2172 moveto 2904 2180 moveto 2904 2180 lineto stroke 2904 2180 moveto 2884 2188 moveto 2884 2188 lineto stroke 2884 2188 moveto 2868 2196 moveto 2868 2196 lineto stroke 2868 2196 moveto 2848 2204 moveto 2848 2204 lineto stroke 2848 2204 moveto 2828 2212 moveto 2828 2212 lineto stroke 2828 2212 moveto 2812 2216 moveto 2812 2216 lineto stroke 2812 2216 moveto 2792 2224 moveto 2792 2224 lineto stroke 2792 2224 moveto 2776 2232 moveto 2776 2232 lineto stroke 2776 2232 moveto 2756 2240 moveto 2756 2240 lineto stroke 2756 2240 moveto 2736 2248 moveto 2736 2248 lineto stroke 2736 2248 moveto 2720 2256 moveto 2720 2256 lineto stroke 2720 2256 moveto 2700 2260 moveto 2700 2260 lineto stroke 2700 2260 moveto 2680 2268 moveto 2680 2268 lineto stroke 2680 2268 moveto 2664 2276 moveto 2664 2276 lineto stroke 2664 2276 moveto 2644 2284 moveto 2644 2284 lineto stroke 2644 2284 moveto 2624 2288 moveto 2624 2288 lineto stroke 2624 2288 moveto 2608 2296 moveto 2608 2296 lineto stroke 2608 2296 moveto 2588 2304 moveto 2588 2304 lineto stroke 2588 2304 moveto 2568 2308 moveto 2568 2308 lineto stroke 2568 2308 moveto 2548 2316 moveto 2548 2316 lineto stroke 2548 2316 moveto 2532 2324 moveto 2532 2324 lineto stroke 2532 2324 moveto 2512 2328 moveto 2512 2328 lineto stroke 2512 2328 moveto 2492 2336 moveto 2492 2336 lineto stroke 2492 2336 moveto 2472 2340 moveto 2472 2340 lineto stroke 2472 2340 moveto 2456 2348 moveto 2456 2348 lineto stroke 2456 2348 moveto 2436 2352 moveto 2436 2352 lineto stroke 2436 2352 moveto 2416 2360 moveto 2416 2360 lineto stroke 2416 2360 moveto 2396 2364 moveto 2396 2364 lineto stroke 2396 2364 moveto 2376 2372 moveto 2376 2372 lineto stroke 2376 2372 moveto 2356 2376 moveto 2356 2376 lineto stroke 2356 2376 moveto 2336 2384 moveto 2336 2384 lineto stroke 2336 2384 moveto 2316 2388 moveto 2316 2388 lineto stroke 2316 2388 moveto 2296 2392 moveto 2296 2392 lineto stroke 2296 2392 moveto 2276 2396 moveto 2276 2396 lineto stroke 2276 2396 moveto 2256 2400 moveto 2256 2400 lineto stroke 2256 2400 moveto 2236 2404 moveto 2236 2404 lineto stroke 2236 2404 moveto 2216 2408 moveto 2216 2408 lineto stroke 2216 2408 moveto 2200 2052 moveto 2200 2052 lineto stroke 2200 2052 moveto 2176 2040 moveto 2176 2040 lineto stroke 2176 2040 moveto 2156 2028 moveto 2156 2028 lineto stroke 2156 2028 moveto 2136 2016 moveto 2136 2016 lineto stroke 2136 2016 moveto 2112 2004 moveto 2112 2004 lineto stroke 2112 2004 moveto 2092 1996 moveto 2092 1996 lineto stroke 2092 1996 moveto 2072 1984 moveto 2072 1984 lineto stroke 2072 1984 moveto 2052 1972 moveto 2052 1972 lineto stroke 2052 1972 moveto 2028 1964 moveto 2028 1964 lineto stroke 2028 1964 moveto 2008 1952 moveto 2008 1952 lineto stroke 2008 1952 moveto 1988 1944 moveto 1988 1944 lineto stroke 1988 1944 moveto 1968 1932 moveto 1968 1932 lineto stroke 1968 1932 moveto 1944 1924 moveto 1944 1924 lineto stroke 1944 1924 moveto 1924 1912 moveto 1924 1912 lineto stroke 1924 1912 moveto 1904 1904 moveto 1904 1904 lineto stroke 1904 1904 moveto 1880 1892 moveto 1880 1892 lineto stroke 1880 1892 moveto 1860 1884 moveto 1860 1884 lineto stroke 1860 1884 moveto 1840 1876 moveto 1840 1876 lineto stroke 1840 1876 moveto 1820 1864 moveto 1820 1864 lineto stroke 1820 1864 moveto 1800 1856 moveto 1800 1856 lineto stroke 1800 1856 moveto 1776 1848 moveto 1776 1848 lineto stroke 1776 1848 moveto 1756 1840 moveto 1756 1840 lineto stroke 1756 1840 moveto 1736 1828 moveto 1736 1828 lineto stroke 1736 1828 moveto 1716 1820 moveto 1716 1820 lineto stroke 1716 1820 moveto 1696 1812 moveto 1696 1812 lineto stroke 1696 1812 moveto 1672 1804 moveto 1672 1804 lineto stroke 1672 1804 moveto 1652 1800 moveto 1652 1800 lineto stroke 1652 1800 moveto 1632 1792 moveto 1632 1792 lineto stroke 1632 1792 moveto 1612 1784 moveto 1612 1784 lineto stroke 1612 1784 moveto 1592 1776 moveto 1592 1776 lineto stroke 1592 1776 moveto 1572 1772 moveto 1572 1772 lineto stroke 1572 1772 moveto 1552 1764 moveto 1552 1764 lineto stroke 1552 1764 moveto 1532 1760 moveto 1532 1760 lineto stroke 1532 1760 moveto 1512 1752 moveto 1512 1752 lineto stroke 1512 1752 moveto 1492 1748 moveto 1492 1748 lineto stroke 1492 1748 moveto 1472 1744 moveto 1472 1744 lineto stroke 1472 1744 moveto 1456 1740 moveto 1456 1740 lineto stroke 1456 1740 moveto 1436 1736 moveto 1436 1736 lineto stroke 1436 1736 moveto 1416 1736 moveto 1416 1736 lineto stroke 1416 1736 moveto 1400 1732 moveto 1400 1732 lineto stroke 1400 1732 moveto 1384 1732 moveto 1384 1732 lineto stroke 1384 1732 moveto 1368 1736 moveto 1368 1736 lineto stroke 1368 1736 moveto 1352 1740 moveto 1352 1740 lineto stroke 1352 1740 moveto 1344 1744 moveto 1344 1744 lineto stroke 1344 1744 moveto 1336 1756 moveto 1336 1756 lineto stroke 1336 1756 moveto 1332 1772 moveto 1332 1772 lineto stroke 1332 1772 moveto 1340 1788 moveto 1340 1788 lineto stroke 1340 1788 moveto 1348 1804 moveto 1348 1804 lineto stroke 1348 1804 moveto 1360 1824 moveto 1360 1824 lineto stroke 1360 1824 moveto 1376 1844 moveto 1376 1844 lineto stroke 1376 1844 moveto 1392 1860 moveto 1392 1860 lineto stroke 1392 1860 moveto 1408 1880 moveto 1408 1880 lineto stroke 1408 1880 moveto 1424 1896 moveto 1424 1896 lineto stroke 1424 1896 moveto 1444 1912 moveto 1444 1912 lineto stroke 1444 1912 moveto 1464 1932 moveto 1464 1932 lineto stroke 1464 1932 moveto 1484 1948 moveto 1484 1948 lineto stroke 1484 1948 moveto 1504 1964 moveto 1504 1964 lineto stroke 1504 1964 moveto 1524 1980 moveto 1524 1980 lineto stroke 1524 1980 moveto 1544 1996 moveto 1544 1996 lineto stroke 1544 1996 moveto 1564 2012 moveto 1564 2012 lineto stroke 1564 2012 moveto 1584 2024 moveto 1584 2024 lineto stroke 1584 2024 moveto 1604 2040 moveto 1604 2040 lineto stroke 1604 2040 moveto 1624 2056 moveto 1624 2056 lineto stroke 1624 2056 moveto 1644 2068 moveto 1644 2068 lineto stroke 1644 2068 moveto 1664 2084 moveto 1664 2084 lineto stroke 1664 2084 moveto 1684 2100 moveto 1684 2100 lineto stroke 1684 2100 moveto 1704 2112 moveto 1704 2112 lineto stroke 1704 2112 moveto 1728 2128 moveto 1728 2128 lineto stroke 1728 2128 moveto 1748 2140 moveto 1748 2140 lineto stroke 1748 2140 moveto 1768 2156 moveto 1768 2156 lineto stroke 1768 2156 moveto 1788 2168 moveto 1788 2168 lineto stroke 1788 2168 moveto 1808 2180 moveto 1808 2180 lineto stroke 1808 2180 moveto 1832 2196 moveto 1832 2196 lineto stroke 1832 2196 moveto 1852 2208 moveto 1852 2208 lineto stroke 1852 2208 moveto 1872 2220 moveto 1872 2220 lineto stroke 1872 2220 moveto 1892 2232 moveto 1892 2232 lineto stroke 1892 2232 moveto 1916 2248 moveto 1916 2248 lineto stroke 1916 2248 moveto 1936 2260 moveto 1936 2260 lineto stroke 1936 2260 moveto 1956 2272 moveto 1956 2272 lineto stroke 1956 2272 moveto 1976 2284 moveto 1976 2284 lineto stroke 1976 2284 moveto 2000 2296 moveto 2000 2296 lineto stroke 2000 2296 moveto 2020 2308 moveto 2020 2308 lineto stroke 2020 2308 moveto 2040 2320 moveto 2040 2320 lineto stroke 2040 2320 moveto 2060 2336 moveto 2060 2336 lineto stroke 2060 2336 moveto 2084 2348 moveto 2084 2348 lineto stroke 2084 2348 moveto 2104 2360 moveto 2104 2360 lineto stroke 2104 2360 moveto 2124 2372 moveto 2124 2372 lineto stroke 2124 2372 moveto 2148 2380 moveto 2148 2380 lineto stroke 2148 2380 moveto 2168 2392 moveto 2168 2392 lineto stroke 2168 2392 moveto 2188 2404 moveto 2188 2404 lineto stroke 2188 2404 moveto 3212 1600 moveto 3212 1600 lineto stroke 3212 1600 moveto 3192 1588 moveto 3192 1588 lineto stroke 3192 1588 moveto 3168 1576 moveto 3168 1576 lineto stroke 3168 1576 moveto 3148 1564 moveto 3148 1564 lineto stroke 3148 1564 moveto 3124 1552 moveto 3124 1552 lineto stroke 3124 1552 moveto 3104 1540 moveto 3104 1540 lineto stroke 3104 1540 moveto 3080 1528 moveto 3080 1528 lineto stroke 3080 1528 moveto 3056 1520 moveto 3056 1520 lineto stroke 3056 1520 moveto 3036 1508 moveto 3036 1508 lineto stroke 3036 1508 moveto 3012 1496 moveto 3012 1496 lineto stroke 3012 1496 moveto 2988 1484 moveto 2988 1484 lineto stroke 2988 1484 moveto 2964 1472 moveto 2964 1472 lineto stroke 2964 1472 moveto 2940 1460 moveto 2940 1460 lineto stroke 2940 1460 moveto 2916 1452 moveto 2916 1452 lineto stroke 2916 1452 moveto 2892 1440 moveto 2892 1440 lineto stroke 2892 1440 moveto 2868 1428 moveto 2868 1428 lineto stroke 2868 1428 moveto 2844 1416 moveto 2844 1416 lineto stroke 2844 1416 moveto 2816 1404 moveto 2816 1404 lineto stroke 2816 1404 moveto 2792 1396 moveto 2792 1396 lineto stroke 2792 1396 moveto 2768 1384 moveto 2768 1384 lineto stroke 2768 1384 moveto 2740 1372 moveto 2740 1372 lineto stroke 2740 1372 moveto 2716 1360 moveto 2716 1360 lineto stroke 2716 1360 moveto 2688 1352 moveto 2688 1352 lineto stroke 2688 1352 moveto 2664 1340 moveto 2664 1340 lineto stroke 2664 1340 moveto 2636 1328 moveto 2636 1328 lineto stroke 2636 1328 moveto 2608 1320 moveto 2608 1320 lineto stroke 2608 1320 moveto 2580 1308 moveto 2580 1308 lineto stroke 2580 1308 moveto 2552 1296 moveto 2552 1296 lineto stroke 2552 1296 moveto 2524 1288 moveto 2524 1288 lineto stroke 2524 1288 moveto 2496 1276 moveto 2496 1276 lineto stroke 2496 1276 moveto 2468 1268 moveto 2468 1268 lineto stroke 2468 1268 moveto 2440 1256 moveto 2440 1256 lineto stroke 2440 1256 moveto 2412 1248 moveto 2412 1248 lineto stroke 2412 1248 moveto 2384 1236 moveto 2384 1236 lineto stroke 2384 1236 moveto 2356 1228 moveto 2356 1228 lineto stroke 2356 1228 moveto 2324 1216 moveto 2324 1216 lineto stroke 2324 1216 moveto 2296 1208 moveto 2296 1208 lineto stroke 2296 1208 moveto 2264 1200 moveto 2264 1200 lineto stroke 2264 1200 moveto 2236 1192 moveto 2236 1192 lineto stroke 2236 1192 moveto 2208 1184 moveto 2208 1184 lineto stroke 2208 1184 moveto 2176 1176 moveto 2176 1176 lineto stroke 2176 1176 moveto 2148 1168 moveto 2148 1168 lineto stroke 2148 1168 moveto 2116 1160 moveto 2116 1160 lineto stroke 2116 1160 moveto 2088 1156 moveto 2088 1156 lineto stroke 2088 1156 moveto 2060 1148 moveto 2060 1148 lineto stroke 2060 1148 moveto 2032 1144 moveto 2032 1144 lineto stroke 2032 1144 moveto 2004 1140 moveto 2004 1140 lineto stroke 2004 1140 moveto 1976 1136 moveto 1976 1136 lineto stroke 1976 1136 moveto 1952 1132 moveto 1952 1132 lineto stroke 1952 1132 moveto 1928 1132 moveto 1928 1132 lineto stroke 1928 1132 moveto 1908 1132 moveto 1908 1132 lineto stroke 1908 1132 moveto 1888 1132 moveto 1888 1132 lineto stroke 1888 1132 moveto 1868 1136 moveto 1868 1136 lineto stroke 1868 1136 moveto 1852 1136 moveto 1852 1136 lineto stroke 1852 1136 moveto 1840 1140 moveto 1840 1140 lineto stroke 1840 1140 moveto 1828 1144 moveto 1828 1144 lineto stroke 1828 1144 moveto 1816 1148 moveto 1816 1148 lineto stroke 1816 1148 moveto 1808 1152 moveto 1808 1152 lineto stroke 1808 1152 moveto 1800 1160 moveto 1800 1160 lineto stroke 1800 1160 moveto 1792 1168 moveto 1792 1168 lineto stroke 1792 1168 moveto 1788 1172 moveto 1788 1172 lineto stroke 1788 1172 moveto 1788 1180 moveto 1788 1180 lineto stroke 1788 1180 moveto 1784 1188 moveto 1784 1188 lineto stroke 1784 1188 moveto 1784 1196 moveto 1784 1196 lineto stroke 1784 1196 moveto 1784 1204 moveto 1784 1204 lineto stroke 1784 1204 moveto 1784 1212 moveto 1784 1212 lineto stroke 1784 1212 moveto 1788 1220 moveto 1788 1220 lineto stroke 1788 1220 moveto 1792 1228 moveto 1792 1228 lineto stroke 1792 1228 moveto 1792 1240 moveto 1792 1240 lineto stroke 1792 1240 moveto 1800 1248 moveto 1800 1248 lineto stroke 1800 1248 moveto 1804 1256 moveto 1804 1256 lineto stroke 1804 1256 moveto 1808 1264 moveto 1808 1264 lineto stroke 1808 1264 moveto 1816 1276 moveto 1816 1276 lineto stroke 1816 1276 moveto 1820 1284 moveto 1820 1284 lineto stroke 1820 1284 moveto 1828 1296 moveto 1828 1296 lineto stroke 1828 1296 moveto 1836 1304 moveto 1836 1304 lineto stroke 1836 1304 moveto 1844 1316 moveto 1844 1316 lineto stroke 1844 1316 moveto 1852 1324 moveto 1852 1324 lineto stroke 1852 1324 moveto 1864 1336 moveto 1864 1336 lineto stroke 1864 1336 moveto 1872 1344 moveto 1872 1344 lineto stroke 1872 1344 moveto 1884 1356 moveto 1884 1356 lineto stroke 1884 1356 moveto 1892 1364 moveto 1892 1364 lineto stroke 1892 1364 moveto 1904 1376 moveto 1904 1376 lineto stroke 1904 1376 moveto 1916 1388 moveto 1916 1388 lineto stroke 1916 1388 moveto 1928 1396 moveto 1928 1396 lineto stroke 1928 1396 moveto 1940 1408 moveto 1940 1408 lineto stroke 1940 1408 moveto 1952 1420 moveto 1952 1420 lineto stroke 1952 1420 moveto 1964 1428 moveto 1964 1428 lineto stroke 1964 1428 moveto 1976 1440 moveto 1976 1440 lineto stroke 1976 1440 moveto 1988 1452 moveto 1988 1452 lineto stroke 1988 1452 moveto 2004 1460 moveto 2004 1460 lineto stroke 2004 1460 moveto 2016 1472 moveto 2016 1472 lineto stroke 2016 1472 moveto 2032 1484 moveto 2032 1484 lineto stroke 2032 1484 moveto 2044 1496 moveto 2044 1496 lineto stroke 2044 1496 moveto 2060 1504 moveto 2060 1504 lineto stroke 2060 1504 moveto 2076 1516 moveto 2076 1516 lineto stroke 2076 1516 moveto 2092 1528 moveto 2092 1528 lineto stroke 2092 1528 moveto 2108 1540 moveto 2108 1540 lineto stroke 2108 1540 moveto 2124 1548 moveto 2124 1548 lineto stroke 2124 1548 moveto 2140 1560 moveto 2140 1560 lineto stroke 2140 1560 moveto 2156 1572 moveto 2156 1572 lineto stroke 2156 1572 moveto 2172 1584 moveto 2172 1584 lineto stroke 2172 1584 moveto 2192 1596 moveto 2192 1596 lineto stroke 2192 1596 moveto 3328 1964 moveto 3328 1964 lineto stroke 3328 1964 moveto 3328 1964 moveto 3324 1960 lineto stroke 3324 1960 moveto 3316 1956 lineto stroke 3316 1956 moveto 3312 1952 lineto stroke 3312 1952 moveto 3304 1948 lineto stroke 3304 1948 moveto 3296 1944 lineto stroke 3296 1944 moveto 3288 1944 lineto stroke 3288 1944 moveto 3284 1940 lineto stroke 3284 1940 moveto 3276 1936 lineto stroke 3276 1936 moveto 3268 1932 lineto stroke 3268 1932 moveto 3260 1928 lineto stroke 3260 1928 moveto 3252 1924 lineto stroke 3252 1924 moveto 3240 1916 lineto stroke 3240 1916 moveto 3228 1912 lineto stroke 3228 1912 moveto 3216 1904 lineto stroke 3216 1904 moveto 3200 1896 lineto stroke 3200 1896 moveto 3184 1888 lineto stroke 3184 1888 moveto 3168 1880 lineto stroke 3168 1880 moveto 3148 1872 lineto stroke 3148 1872 moveto 3128 1864 lineto stroke 3128 1864 moveto 3108 1856 lineto stroke 3108 1856 moveto 3084 1844 lineto stroke 3084 1844 moveto 3056 1832 lineto stroke 3056 1832 moveto 3032 1824 lineto stroke 3032 1824 moveto 3008 1812 lineto stroke 3008 1812 moveto 2980 1800 lineto stroke 2980 1800 moveto 2948 1788 lineto stroke 2948 1788 moveto 2916 1776 lineto stroke 2916 1776 moveto 2884 1764 lineto stroke 2884 1764 moveto 2848 1752 lineto stroke 2848 1752 moveto 2812 1740 lineto stroke 2812 1740 moveto 2776 1728 lineto stroke 2776 1728 moveto 2740 1716 lineto stroke 2740 1716 moveto 2704 1704 lineto stroke 2704 1704 moveto 2664 1692 lineto stroke 2664 1692 moveto 2620 1680 lineto stroke 2620 1680 moveto 2576 1668 lineto stroke 2576 1668 moveto 2532 1660 lineto stroke 2532 1660 moveto 2484 1648 lineto stroke 2484 1648 moveto 2440 1640 lineto stroke 2440 1640 moveto 2396 1632 lineto stroke 2396 1632 moveto 2348 1624 lineto stroke 2348 1624 moveto 2304 1616 lineto stroke 2304 1616 moveto 2256 1612 lineto stroke 2256 1612 moveto 2208 1608 lineto stroke 2208 1608 moveto 2160 1604 lineto stroke 2160 1604 moveto 2116 1604 lineto stroke 2116 1604 moveto 2072 1604 lineto stroke 2072 1604 moveto 2032 1608 lineto stroke 2032 1608 moveto 1992 1612 lineto stroke 1992 1612 moveto 1956 1616 lineto stroke 1956 1616 moveto 1920 1624 lineto stroke 1920 1624 moveto 1888 1632 lineto stroke 1888 1632 moveto 1856 1640 lineto stroke 1856 1640 moveto 1828 1652 lineto stroke 1828 1652 moveto 1800 1668 lineto stroke 1800 1668 moveto 1776 1684 lineto stroke 1776 1684 moveto 1756 1700 lineto stroke 1756 1700 moveto 1740 1716 lineto stroke 1740 1716 moveto 1728 1736 lineto stroke 1728 1736 moveto 1716 1760 lineto stroke 1716 1760 moveto 1708 1780 lineto stroke 1708 1780 moveto 1704 1804 lineto stroke 1704 1804 moveto 1700 1832 lineto stroke 1700 1832 moveto 1704 1860 lineto stroke 1704 1860 moveto 1708 1888 lineto stroke 1708 1888 moveto 1716 1916 lineto stroke 1716 1916 moveto 1728 1944 lineto stroke 1728 1944 moveto 1740 1972 lineto stroke 1740 1972 moveto 1756 1996 lineto stroke 1756 1996 moveto 1772 2024 lineto stroke 1772 2024 moveto 1792 2052 lineto stroke 1792 2052 moveto 1812 2076 lineto stroke 1812 2076 moveto 1832 2104 lineto stroke 1832 2104 moveto 1852 2128 lineto stroke 1852 2128 moveto 1876 2152 lineto stroke 1876 2152 moveto 1896 2172 lineto stroke 1896 2172 moveto 1916 2196 lineto stroke 1916 2196 moveto 1940 2216 lineto stroke 1940 2216 moveto 1964 2236 lineto stroke 1964 2236 moveto 1984 2256 lineto stroke 1984 2256 moveto 2008 2272 lineto stroke 2008 2272 moveto 2024 2288 lineto stroke 2024 2288 moveto 2044 2304 lineto stroke 2044 2304 moveto 2064 2320 lineto stroke 2064 2320 moveto 2080 2332 lineto stroke 2080 2332 moveto 2092 2340 lineto stroke 2092 2340 moveto 2112 2352 lineto stroke 2112 2352 moveto 2128 2364 lineto stroke 2128 2364 moveto 2140 2372 lineto stroke 2140 2372 moveto 2148 2380 lineto stroke 2148 2380 moveto 2160 2388 lineto stroke 2160 2388 moveto 2168 2392 lineto stroke 2168 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2400 lineto stroke 2184 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3328 1964 moveto 3328 1964 lineto stroke 3328 1964 moveto 3312 1972 moveto 3312 1972 lineto stroke 3312 1972 moveto 3292 1980 moveto 3292 1980 lineto stroke 3292 1980 moveto 3276 1988 moveto 3276 1988 lineto stroke 3276 1988 moveto 3260 1996 moveto 3260 1996 lineto stroke 3260 1996 moveto 3240 2004 moveto 3240 2004 lineto stroke 3240 2004 moveto 3224 2012 moveto 3224 2012 lineto stroke 3224 2012 moveto 3204 2020 moveto 3204 2020 lineto stroke 3204 2020 moveto 3188 2028 moveto 3188 2028 lineto stroke 3188 2028 moveto 3172 2036 moveto 3172 2036 lineto stroke 3172 2036 moveto 3152 2044 moveto 3152 2044 lineto stroke 3152 2044 moveto 3136 2052 moveto 3136 2052 lineto stroke 3136 2052 moveto 3116 2060 moveto 3116 2060 lineto stroke 3116 2060 moveto 3100 2068 moveto 3100 2068 lineto stroke 3100 2068 moveto 3080 2076 moveto 3080 2076 lineto stroke 3080 2076 moveto 3064 2084 moveto 3064 2084 lineto stroke 3064 2084 moveto 3044 2092 moveto 3044 2092 lineto stroke 3044 2092 moveto 3028 2100 moveto 3028 2100 lineto stroke 3028 2100 moveto 3012 2108 moveto 3012 2108 lineto stroke 3012 2108 moveto 2992 2116 moveto 2992 2116 lineto stroke 2992 2116 moveto 2976 2124 moveto 2976 2124 lineto stroke 2976 2124 moveto 2956 2132 moveto 2956 2132 lineto stroke 2956 2132 moveto 2940 2140 moveto 2940 2140 lineto stroke 2940 2140 moveto 2920 2148 moveto 2920 2148 lineto stroke 2920 2148 moveto 2904 2156 moveto 2904 2156 lineto stroke 2904 2156 moveto 2884 2164 moveto 2884 2164 lineto stroke 2884 2164 moveto 2868 2172 moveto 2868 2172 lineto stroke 2868 2172 moveto 2848 2180 moveto 2848 2180 lineto stroke 2848 2180 moveto 2832 2188 moveto 2832 2188 lineto stroke 2832 2188 moveto 2812 2196 moveto 2812 2196 lineto stroke 2812 2196 moveto 2796 2204 moveto 2796 2204 lineto stroke 2796 2204 moveto 2776 2212 moveto 2776 2212 lineto stroke 2776 2212 moveto 2760 2220 moveto 2760 2220 lineto stroke 2760 2220 moveto 2740 2228 moveto 2740 2228 lineto stroke 2740 2228 moveto 2720 2236 moveto 2720 2236 lineto stroke 2720 2236 moveto 2704 2244 moveto 2704 2244 lineto stroke 2704 2244 moveto 2684 2248 moveto 2684 2248 lineto stroke 2684 2248 moveto 2668 2256 moveto 2668 2256 lineto stroke 2668 2256 moveto 2648 2264 moveto 2648 2264 lineto stroke 2648 2264 moveto 2632 2272 moveto 2632 2272 lineto stroke 2632 2272 moveto 2612 2280 moveto 2612 2280 lineto stroke 2612 2280 moveto 2592 2288 moveto 2592 2288 lineto stroke 2592 2288 moveto 2576 2296 moveto 2576 2296 lineto stroke 2576 2296 moveto 2556 2300 moveto 2556 2300 lineto stroke 2556 2300 moveto 2536 2308 moveto 2536 2308 lineto stroke 2536 2308 moveto 2520 2316 moveto 2520 2316 lineto stroke 2520 2316 moveto 2500 2324 moveto 2500 2324 lineto stroke 2500 2324 moveto 2480 2328 moveto 2480 2328 lineto stroke 2480 2328 moveto 2464 2336 moveto 2464 2336 lineto stroke 2464 2336 moveto 2444 2344 moveto 2444 2344 lineto stroke 2444 2344 moveto 2424 2348 moveto 2424 2348 lineto stroke 2424 2348 moveto 2404 2356 moveto 2404 2356 lineto stroke 2404 2356 moveto 2388 2360 moveto 2388 2360 lineto stroke 2388 2360 moveto 2368 2368 moveto 2368 2368 lineto stroke 2368 2368 moveto 2348 2376 moveto 2348 2376 lineto stroke 2348 2376 moveto 2328 2380 moveto 2328 2380 lineto stroke 2328 2380 moveto 2308 2384 moveto 2308 2384 lineto stroke 2308 2384 moveto 2288 2392 moveto 2288 2392 lineto stroke 2288 2392 moveto 2268 2396 moveto 2268 2396 lineto stroke 2268 2396 moveto 2248 2400 moveto 2248 2400 lineto stroke 2248 2400 moveto 2228 2404 moveto 2228 2404 lineto stroke 2228 2404 moveto 2208 2408 moveto 2208 2408 lineto stroke 2208 2408 moveto 2200 1964 moveto 2200 1964 lineto stroke 2200 1964 moveto 2176 1952 moveto 2176 1952 lineto stroke 2176 1952 moveto 2156 1940 moveto 2156 1940 lineto stroke 2156 1940 moveto 2136 1928 moveto 2136 1928 lineto stroke 2136 1928 moveto 2112 1920 moveto 2112 1920 lineto stroke 2112 1920 moveto 2092 1908 moveto 2092 1908 lineto stroke 2092 1908 moveto 2072 1896 moveto 2072 1896 lineto stroke 2072 1896 moveto 2052 1884 moveto 2052 1884 lineto stroke 2052 1884 moveto 2028 1876 moveto 2028 1876 lineto stroke 2028 1876 moveto 2008 1864 moveto 2008 1864 lineto stroke 2008 1864 moveto 1988 1856 moveto 1988 1856 lineto stroke 1988 1856 moveto 1964 1844 moveto 1964 1844 lineto stroke 1964 1844 moveto 1944 1832 moveto 1944 1832 lineto stroke 1944 1832 moveto 1924 1824 moveto 1924 1824 lineto stroke 1924 1824 moveto 1904 1812 moveto 1904 1812 lineto stroke 1904 1812 moveto 1880 1804 moveto 1880 1804 lineto stroke 1880 1804 moveto 1860 1796 moveto 1860 1796 lineto stroke 1860 1796 moveto 1840 1784 moveto 1840 1784 lineto stroke 1840 1784 moveto 1820 1776 moveto 1820 1776 lineto stroke 1820 1776 moveto 1800 1764 moveto 1800 1764 lineto stroke 1800 1764 moveto 1776 1756 moveto 1776 1756 lineto stroke 1776 1756 moveto 1756 1748 moveto 1756 1748 lineto stroke 1756 1748 moveto 1736 1740 moveto 1736 1740 lineto stroke 1736 1740 moveto 1716 1732 moveto 1716 1732 lineto stroke 1716 1732 moveto 1692 1720 moveto 1692 1720 lineto stroke 1692 1720 moveto 1672 1712 moveto 1672 1712 lineto stroke 1672 1712 moveto 1652 1704 moveto 1652 1704 lineto stroke 1652 1704 moveto 1632 1696 moveto 1632 1696 lineto stroke 1632 1696 moveto 1612 1688 moveto 1612 1688 lineto stroke 1612 1688 moveto 1592 1680 moveto 1592 1680 lineto stroke 1592 1680 moveto 1572 1676 moveto 1572 1676 lineto stroke 1572 1676 moveto 1548 1668 moveto 1548 1668 lineto stroke 1548 1668 moveto 1528 1660 moveto 1528 1660 lineto stroke 1528 1660 moveto 1508 1652 moveto 1508 1652 lineto stroke 1508 1652 moveto 1488 1648 moveto 1488 1648 lineto stroke 1488 1648 moveto 1468 1640 moveto 1468 1640 lineto stroke 1468 1640 moveto 1448 1636 moveto 1448 1636 lineto stroke 1448 1636 moveto 1428 1628 moveto 1428 1628 lineto stroke 1428 1628 moveto 1408 1624 moveto 1408 1624 lineto stroke 1408 1624 moveto 1392 1620 moveto 1392 1620 lineto stroke 1392 1620 moveto 1372 1616 moveto 1372 1616 lineto stroke 1372 1616 moveto 1352 1612 moveto 1352 1612 lineto stroke 1352 1612 moveto 1332 1608 moveto 1332 1608 lineto stroke 1332 1608 moveto 1316 1608 moveto 1316 1608 lineto stroke 1316 1608 moveto 1296 1604 moveto 1296 1604 lineto stroke 1296 1604 moveto 1280 1604 moveto 1280 1604 lineto stroke 1280 1604 moveto 1264 1604 moveto 1264 1604 lineto stroke 1264 1604 moveto 1248 1608 moveto 1248 1608 lineto stroke 1248 1608 moveto 1232 1608 moveto 1232 1608 lineto stroke 1232 1608 moveto 1220 1616 moveto 1220 1616 lineto stroke 1220 1616 moveto 1208 1620 moveto 1208 1620 lineto stroke 1208 1620 moveto 1204 1632 moveto 1204 1632 lineto stroke 1204 1632 moveto 1200 1644 moveto 1200 1644 lineto stroke 1200 1644 moveto 1200 1660 moveto 1200 1660 lineto stroke 1200 1660 moveto 1208 1680 moveto 1208 1680 lineto stroke 1208 1680 moveto 1216 1696 moveto 1216 1696 lineto stroke 1216 1696 moveto 1228 1716 moveto 1228 1716 lineto stroke 1228 1716 moveto 1240 1736 moveto 1240 1736 lineto stroke 1240 1736 moveto 1256 1752 moveto 1256 1752 lineto stroke 1256 1752 moveto 1272 1772 moveto 1272 1772 lineto stroke 1272 1772 moveto 1292 1788 moveto 1292 1788 lineto stroke 1292 1788 moveto 1308 1808 moveto 1308 1808 lineto stroke 1308 1808 moveto 1328 1824 moveto 1328 1824 lineto stroke 1328 1824 moveto 1344 1840 moveto 1344 1840 lineto stroke 1344 1840 moveto 1364 1860 moveto 1364 1860 lineto stroke 1364 1860 moveto 1384 1876 moveto 1384 1876 lineto stroke 1384 1876 moveto 1404 1892 moveto 1404 1892 lineto stroke 1404 1892 moveto 1424 1908 moveto 1424 1908 lineto stroke 1424 1908 moveto 1444 1924 moveto 1444 1924 lineto stroke 1444 1924 moveto 1460 1940 moveto 1460 1940 lineto stroke 1460 1940 moveto 1484 1956 moveto 1484 1956 lineto stroke 1484 1956 moveto 1504 1968 moveto 1504 1968 lineto stroke 1504 1968 moveto 1524 1984 moveto 1524 1984 lineto stroke 1524 1984 moveto 1544 2000 moveto 1544 2000 lineto stroke 1544 2000 moveto 1564 2016 moveto 1564 2016 lineto stroke 1564 2016 moveto 1584 2028 moveto 1584 2028 lineto stroke 1584 2028 moveto 1604 2044 moveto 1604 2044 lineto stroke 1604 2044 moveto 1624 2060 moveto 1624 2060 lineto stroke 1624 2060 moveto 1644 2072 moveto 1644 2072 lineto stroke 1644 2072 moveto 1668 2088 moveto 1668 2088 lineto stroke 1668 2088 moveto 1688 2100 moveto 1688 2100 lineto stroke 1688 2100 moveto 1708 2116 moveto 1708 2116 lineto stroke 1708 2116 moveto 1728 2128 moveto 1728 2128 lineto stroke 1728 2128 moveto 1748 2144 moveto 1748 2144 lineto stroke 1748 2144 moveto 1772 2156 moveto 1772 2156 lineto stroke 1772 2156 moveto 1792 2168 moveto 1792 2168 lineto stroke 1792 2168 moveto 1812 2184 moveto 1812 2184 lineto stroke 1812 2184 moveto 1832 2196 moveto 1832 2196 lineto stroke 1832 2196 moveto 1852 2208 moveto 1852 2208 lineto stroke 1852 2208 moveto 1876 2224 moveto 1876 2224 lineto stroke 1876 2224 moveto 1896 2236 moveto 1896 2236 lineto stroke 1896 2236 moveto 1916 2248 moveto 1916 2248 lineto stroke 1916 2248 moveto 1936 2260 moveto 1936 2260 lineto stroke 1936 2260 moveto 1960 2272 moveto 1960 2272 lineto stroke 1960 2272 moveto 1980 2284 moveto 1980 2284 lineto stroke 1980 2284 moveto 2000 2300 moveto 2000 2300 lineto stroke 2000 2300 moveto 2024 2312 moveto 2024 2312 lineto stroke 2024 2312 moveto 2044 2324 moveto 2044 2324 lineto stroke 2044 2324 moveto 2064 2336 moveto 2064 2336 lineto stroke 2064 2336 moveto 2084 2348 moveto 2084 2348 lineto stroke 2084 2348 moveto 2108 2360 moveto 2108 2360 lineto stroke 2108 2360 moveto 2128 2372 moveto 2128 2372 lineto stroke 2128 2372 moveto 2148 2384 moveto 2148 2384 lineto stroke 2148 2384 moveto 2168 2396 moveto 2168 2396 lineto stroke 2168 2396 moveto 2192 2408 moveto 2192 2408 lineto stroke 2192 2408 moveto 3328 1600 moveto 3328 1600 lineto stroke 3328 1600 moveto 3308 1588 moveto 3308 1588 lineto stroke 3308 1588 moveto 3288 1576 moveto 3288 1576 lineto stroke 3288 1576 moveto 3264 1564 moveto 3264 1564 lineto stroke 3264 1564 moveto 3244 1552 moveto 3244 1552 lineto stroke 3244 1552 moveto 3220 1540 moveto 3220 1540 lineto stroke 3220 1540 moveto 3200 1528 moveto 3200 1528 lineto stroke 3200 1528 moveto 3176 1520 moveto 3176 1520 lineto stroke 3176 1520 moveto 3152 1508 moveto 3152 1508 lineto stroke 3152 1508 moveto 3132 1496 moveto 3132 1496 lineto stroke 3132 1496 moveto 3108 1484 moveto 3108 1484 lineto stroke 3108 1484 moveto 3084 1472 moveto 3084 1472 lineto stroke 3084 1472 moveto 3060 1460 moveto 3060 1460 lineto stroke 3060 1460 moveto 3036 1452 moveto 3036 1452 lineto stroke 3036 1452 moveto 3012 1440 moveto 3012 1440 lineto stroke 3012 1440 moveto 2988 1428 moveto 2988 1428 lineto stroke 2988 1428 moveto 2964 1416 moveto 2964 1416 lineto stroke 2964 1416 moveto 2940 1404 moveto 2940 1404 lineto stroke 2940 1404 moveto 2916 1396 moveto 2916 1396 lineto stroke 2916 1396 moveto 2892 1384 moveto 2892 1384 lineto stroke 2892 1384 moveto 2864 1372 moveto 2864 1372 lineto stroke 2864 1372 moveto 2840 1360 moveto 2840 1360 lineto stroke 2840 1360 moveto 2816 1348 moveto 2816 1348 lineto stroke 2816 1348 moveto 2788 1340 moveto 2788 1340 lineto stroke 2788 1340 moveto 2764 1328 moveto 2764 1328 lineto stroke 2764 1328 moveto 2736 1316 moveto 2736 1316 lineto stroke 2736 1316 moveto 2712 1304 moveto 2712 1304 lineto stroke 2712 1304 moveto 2684 1296 moveto 2684 1296 lineto stroke 2684 1296 moveto 2656 1284 moveto 2656 1284 lineto stroke 2656 1284 moveto 2632 1272 moveto 2632 1272 lineto stroke 2632 1272 moveto 2604 1264 moveto 2604 1264 lineto stroke 2604 1264 moveto 2576 1252 moveto 2576 1252 lineto stroke 2576 1252 moveto 2548 1240 moveto 2548 1240 lineto stroke 2548 1240 moveto 2520 1232 moveto 2520 1232 lineto stroke 2520 1232 moveto 2492 1220 moveto 2492 1220 lineto stroke 2492 1220 moveto 2464 1212 moveto 2464 1212 lineto stroke 2464 1212 moveto 2436 1200 moveto 2436 1200 lineto stroke 2436 1200 moveto 2408 1192 moveto 2408 1192 lineto stroke 2408 1192 moveto 2380 1180 moveto 2380 1180 lineto stroke 2380 1180 moveto 2348 1172 moveto 2348 1172 lineto stroke 2348 1172 moveto 2320 1160 moveto 2320 1160 lineto stroke 2320 1160 moveto 2292 1152 moveto 2292 1152 lineto stroke 2292 1152 moveto 2260 1144 moveto 2260 1144 lineto stroke 2260 1144 moveto 2232 1136 moveto 2232 1136 lineto stroke 2232 1136 moveto 2200 1124 moveto 2200 1124 lineto stroke 2200 1124 moveto 2172 1116 moveto 2172 1116 lineto stroke 2172 1116 moveto 2140 1108 moveto 2140 1108 lineto stroke 2140 1108 moveto 2112 1100 moveto 2112 1100 lineto stroke 2112 1100 moveto 2084 1096 moveto 2084 1096 lineto stroke 2084 1096 moveto 2052 1088 moveto 2052 1088 lineto stroke 2052 1088 moveto 2024 1080 moveto 2024 1080 lineto stroke 2024 1080 moveto 1996 1076 moveto 1996 1076 lineto stroke 1996 1076 moveto 1968 1072 moveto 1968 1072 lineto stroke 1968 1072 moveto 1940 1068 moveto 1940 1068 lineto stroke 1940 1068 moveto 1912 1064 moveto 1912 1064 lineto stroke 1912 1064 moveto 1888 1060 moveto 1888 1060 lineto stroke 1888 1060 moveto 1864 1060 moveto 1864 1060 lineto stroke 1864 1060 moveto 1844 1060 moveto 1844 1060 lineto stroke 1844 1060 moveto 1820 1060 moveto 1820 1060 lineto stroke 1820 1060 moveto 1804 1060 moveto 1804 1060 lineto stroke 1804 1060 moveto 1784 1064 moveto 1784 1064 lineto stroke 1784 1064 moveto 1772 1064 moveto 1772 1064 lineto stroke 1772 1064 moveto 1756 1068 moveto 1756 1068 lineto stroke 1756 1068 moveto 1744 1072 moveto 1744 1072 lineto stroke 1744 1072 moveto 1736 1080 moveto 1736 1080 lineto stroke 1736 1080 moveto 1724 1084 moveto 1724 1084 lineto stroke 1724 1084 moveto 1720 1088 moveto 1720 1088 lineto stroke 1720 1088 moveto 1712 1096 moveto 1712 1096 lineto stroke 1712 1096 moveto 1708 1104 moveto 1708 1104 lineto stroke 1708 1104 moveto 1704 1108 moveto 1704 1108 lineto stroke 1704 1108 moveto 1704 1116 moveto 1704 1116 lineto stroke 1704 1116 moveto 1704 1124 moveto 1704 1124 lineto stroke 1704 1124 moveto 1700 1132 moveto 1700 1132 lineto stroke 1700 1132 moveto 1704 1140 moveto 1704 1140 lineto stroke 1704 1140 moveto 1704 1148 moveto 1704 1148 lineto stroke 1704 1148 moveto 1708 1160 moveto 1708 1160 lineto stroke 1708 1160 moveto 1708 1168 moveto 1708 1168 lineto stroke 1708 1168 moveto 1712 1176 moveto 1712 1176 lineto stroke 1712 1176 moveto 1716 1184 moveto 1716 1184 lineto stroke 1716 1184 moveto 1724 1196 moveto 1724 1196 lineto stroke 1724 1196 moveto 1728 1204 moveto 1728 1204 lineto stroke 1728 1204 moveto 1736 1212 moveto 1736 1212 lineto stroke 1736 1212 moveto 1740 1224 moveto 1740 1224 lineto stroke 1740 1224 moveto 1748 1232 moveto 1748 1232 lineto stroke 1748 1232 moveto 1756 1244 moveto 1756 1244 lineto stroke 1756 1244 moveto 1764 1252 moveto 1764 1252 lineto stroke 1764 1252 moveto 1772 1264 moveto 1772 1264 lineto stroke 1772 1264 moveto 1780 1272 moveto 1780 1272 lineto stroke 1780 1272 moveto 1792 1284 moveto 1792 1284 lineto stroke 1792 1284 moveto 1800 1292 moveto 1800 1292 lineto stroke 1800 1292 moveto 1812 1304 moveto 1812 1304 lineto stroke 1812 1304 moveto 1820 1312 moveto 1820 1312 lineto stroke 1820 1312 moveto 1832 1324 moveto 1832 1324 lineto stroke 1832 1324 moveto 1844 1336 moveto 1844 1336 lineto stroke 1844 1336 moveto 1856 1344 moveto 1856 1344 lineto stroke 1856 1344 moveto 1864 1356 moveto 1864 1356 lineto stroke 1864 1356 moveto 1876 1368 moveto 1876 1368 lineto stroke 1876 1368 moveto 1892 1376 moveto 1892 1376 lineto stroke 1892 1376 moveto 1904 1388 moveto 1904 1388 lineto stroke 1904 1388 moveto 1916 1400 moveto 1916 1400 lineto stroke 1916 1400 moveto 1928 1408 moveto 1928 1408 lineto stroke 1928 1408 moveto 1944 1420 moveto 1944 1420 lineto stroke 1944 1420 moveto 1956 1432 moveto 1956 1432 lineto stroke 1956 1432 moveto 1968 1440 moveto 1968 1440 lineto stroke 1968 1440 moveto 1984 1452 moveto 1984 1452 lineto stroke 1984 1452 moveto 2000 1464 moveto 2000 1464 lineto stroke 2000 1464 moveto 2012 1476 moveto 2012 1476 lineto stroke 2012 1476 moveto 2028 1484 moveto 2028 1484 lineto stroke 2028 1484 moveto 2044 1496 moveto 2044 1496 lineto stroke 2044 1496 moveto 2060 1508 moveto 2060 1508 lineto stroke 2060 1508 moveto 2076 1520 moveto 2076 1520 lineto stroke 2076 1520 moveto 2092 1532 moveto 2092 1532 lineto stroke 2092 1532 moveto 2108 1540 moveto 2108 1540 lineto stroke 2108 1540 moveto 2124 1552 moveto 2124 1552 lineto stroke 2124 1552 moveto 2144 1564 moveto 2144 1564 lineto stroke 2144 1564 moveto 2160 1576 moveto 2160 1576 lineto stroke 2160 1576 moveto 2180 1588 moveto 2180 1588 lineto stroke 2180 1588 moveto 3436 1872 moveto 3436 1872 lineto stroke 3436 1872 moveto 3436 1872 moveto 3432 1868 lineto stroke 3432 1868 moveto 3428 1868 lineto stroke 3428 1868 moveto 3420 1864 lineto stroke 3420 1864 moveto 3412 1856 lineto stroke 3412 1856 moveto 3400 1852 lineto stroke 3400 1852 moveto 3396 1848 lineto stroke 3396 1848 moveto 3388 1844 lineto stroke 3388 1844 moveto 3380 1840 lineto stroke 3380 1840 moveto 3372 1836 lineto stroke 3372 1836 moveto 3360 1832 lineto stroke 3360 1832 moveto 3352 1828 lineto stroke 3352 1828 moveto 3336 1820 lineto stroke 3336 1820 moveto 3324 1812 lineto stroke 3324 1812 moveto 3308 1804 lineto stroke 3308 1804 moveto 3292 1796 lineto stroke 3292 1796 moveto 3272 1788 lineto stroke 3272 1788 moveto 3252 1780 lineto stroke 3252 1780 moveto 3232 1768 lineto stroke 3232 1768 moveto 3208 1760 lineto stroke 3208 1760 moveto 3184 1748 lineto stroke 3184 1748 moveto 3160 1736 lineto stroke 3160 1736 moveto 3128 1724 lineto stroke 3128 1724 moveto 3100 1712 lineto stroke 3100 1712 moveto 3072 1700 lineto stroke 3072 1700 moveto 3040 1688 lineto stroke 3040 1688 moveto 3004 1672 lineto stroke 3004 1672 moveto 2968 1660 lineto stroke 2968 1660 moveto 2932 1648 lineto stroke 2932 1648 moveto 2892 1632 lineto stroke 2892 1632 moveto 2848 1620 lineto stroke 2848 1620 moveto 2808 1604 lineto stroke 2808 1604 moveto 2768 1592 lineto stroke 2768 1592 moveto 2724 1580 lineto stroke 2724 1580 moveto 2676 1568 lineto stroke 2676 1568 moveto 2628 1552 lineto stroke 2628 1552 moveto 2576 1540 lineto stroke 2576 1540 moveto 2520 1528 lineto stroke 2520 1528 moveto 2464 1516 lineto stroke 2464 1516 moveto 2412 1504 lineto stroke 2412 1504 moveto 2364 1496 lineto stroke 2364 1496 moveto 2312 1488 lineto stroke 2312 1488 moveto 2260 1484 lineto stroke 2260 1484 moveto 2204 1480 lineto stroke 2204 1480 moveto 2148 1476 lineto stroke 2148 1476 moveto 2092 1472 lineto stroke 2092 1472 moveto 2040 1472 lineto stroke 2040 1472 moveto 1992 1476 lineto stroke 1992 1476 moveto 1952 1480 lineto stroke 1952 1480 moveto 1908 1484 lineto stroke 1908 1484 moveto 1868 1492 lineto stroke 1868 1492 moveto 1828 1504 lineto stroke 1828 1504 moveto 1792 1516 lineto stroke 1792 1516 moveto 1756 1528 lineto stroke 1756 1528 moveto 1728 1548 lineto stroke 1728 1548 moveto 1700 1564 lineto stroke 1700 1564 moveto 1680 1584 lineto stroke 1680 1584 moveto 1660 1604 lineto stroke 1660 1604 moveto 1644 1628 lineto stroke 1644 1628 moveto 1632 1652 lineto stroke 1632 1652 moveto 1624 1680 lineto stroke 1624 1680 moveto 1616 1708 lineto stroke 1616 1708 moveto 1616 1740 lineto stroke 1616 1740 moveto 1620 1768 lineto stroke 1620 1768 moveto 1624 1800 lineto stroke 1624 1800 moveto 1636 1832 lineto stroke 1636 1832 moveto 1644 1860 lineto stroke 1644 1860 moveto 1660 1896 lineto stroke 1660 1896 moveto 1680 1928 lineto stroke 1680 1928 moveto 1700 1960 lineto stroke 1700 1960 moveto 1720 1992 lineto stroke 1720 1992 moveto 1744 2020 lineto stroke 1744 2020 moveto 1768 2052 lineto stroke 1768 2052 moveto 1792 2080 lineto stroke 1792 2080 moveto 1816 2104 lineto stroke 1816 2104 moveto 1844 2132 lineto stroke 1844 2132 moveto 1868 2160 lineto stroke 1868 2160 moveto 1896 2184 lineto stroke 1896 2184 moveto 1920 2204 lineto stroke 1920 2204 moveto 1948 2228 lineto stroke 1948 2228 moveto 1972 2252 lineto stroke 1972 2252 moveto 1996 2268 lineto stroke 1996 2268 moveto 2016 2284 lineto stroke 2016 2284 moveto 2040 2304 lineto stroke 2040 2304 moveto 2060 2316 lineto stroke 2060 2316 moveto 2076 2332 lineto stroke 2076 2332 moveto 2092 2340 lineto stroke 2092 2340 moveto 2108 2352 lineto stroke 2108 2352 moveto 2124 2364 lineto stroke 2124 2364 moveto 2136 2372 lineto stroke 2136 2372 moveto 2148 2380 lineto stroke 2148 2380 moveto 2156 2384 lineto stroke 2156 2384 moveto 2168 2392 lineto stroke 2168 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2184 2400 lineto stroke 2184 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3436 1872 moveto 3436 1872 lineto stroke 3436 1872 moveto 3420 1880 moveto 3420 1880 lineto stroke 3420 1880 moveto 3404 1888 moveto 3404 1888 lineto stroke 3404 1888 moveto 3388 1900 moveto 3388 1900 lineto stroke 3388 1900 moveto 3368 1908 moveto 3368 1908 lineto stroke 3368 1908 moveto 3352 1916 moveto 3352 1916 lineto stroke 3352 1916 moveto 3336 1924 moveto 3336 1924 lineto stroke 3336 1924 moveto 3316 1932 moveto 3316 1932 lineto stroke 3316 1932 moveto 3300 1940 moveto 3300 1940 lineto stroke 3300 1940 moveto 3284 1952 moveto 3284 1952 lineto stroke 3284 1952 moveto 3264 1960 moveto 3264 1960 lineto stroke 3264 1960 moveto 3248 1968 moveto 3248 1968 lineto stroke 3248 1968 moveto 3232 1976 moveto 3232 1976 lineto stroke 3232 1976 moveto 3212 1984 moveto 3212 1984 lineto stroke 3212 1984 moveto 3196 1992 moveto 3196 1992 lineto stroke 3196 1992 moveto 3180 2000 moveto 3180 2000 lineto stroke 3180 2000 moveto 3160 2012 moveto 3160 2012 lineto stroke 3160 2012 moveto 3144 2020 moveto 3144 2020 lineto stroke 3144 2020 moveto 3128 2028 moveto 3128 2028 lineto stroke 3128 2028 moveto 3108 2036 moveto 3108 2036 lineto stroke 3108 2036 moveto 3092 2044 moveto 3092 2044 lineto stroke 3092 2044 moveto 3076 2052 moveto 3076 2052 lineto stroke 3076 2052 moveto 3056 2060 moveto 3056 2060 lineto stroke 3056 2060 moveto 3040 2068 moveto 3040 2068 lineto stroke 3040 2068 moveto 3020 2076 moveto 3020 2076 lineto stroke 3020 2076 moveto 3004 2088 moveto 3004 2088 lineto stroke 3004 2088 moveto 2988 2096 moveto 2988 2096 lineto stroke 2988 2096 moveto 2968 2104 moveto 2968 2104 lineto stroke 2968 2104 moveto 2952 2112 moveto 2952 2112 lineto stroke 2952 2112 moveto 2932 2120 moveto 2932 2120 lineto stroke 2932 2120 moveto 2916 2128 moveto 2916 2128 lineto stroke 2916 2128 moveto 2900 2136 moveto 2900 2136 lineto stroke 2900 2136 moveto 2880 2144 moveto 2880 2144 lineto stroke 2880 2144 moveto 2864 2152 moveto 2864 2152 lineto stroke 2864 2152 moveto 2844 2160 moveto 2844 2160 lineto stroke 2844 2160 moveto 2828 2168 moveto 2828 2168 lineto stroke 2828 2168 moveto 2812 2176 moveto 2812 2176 lineto stroke 2812 2176 moveto 2792 2184 moveto 2792 2184 lineto stroke 2792 2184 moveto 2776 2192 moveto 2776 2192 lineto stroke 2776 2192 moveto 2756 2200 moveto 2756 2200 lineto stroke 2756 2200 moveto 2740 2208 moveto 2740 2208 lineto stroke 2740 2208 moveto 2720 2216 moveto 2720 2216 lineto stroke 2720 2216 moveto 2704 2224 moveto 2704 2224 lineto stroke 2704 2224 moveto 2684 2232 moveto 2684 2232 lineto stroke 2684 2232 moveto 2668 2240 moveto 2668 2240 lineto stroke 2668 2240 moveto 2648 2248 moveto 2648 2248 lineto stroke 2648 2248 moveto 2632 2256 moveto 2632 2256 lineto stroke 2632 2256 moveto 2612 2264 moveto 2612 2264 lineto stroke 2612 2264 moveto 2596 2272 moveto 2596 2272 lineto stroke 2596 2272 moveto 2576 2280 moveto 2576 2280 lineto stroke 2576 2280 moveto 2560 2288 moveto 2560 2288 lineto stroke 2560 2288 moveto 2540 2296 moveto 2540 2296 lineto stroke 2540 2296 moveto 2524 2304 moveto 2524 2304 lineto stroke 2524 2304 moveto 2504 2308 moveto 2504 2308 lineto stroke 2504 2308 moveto 2484 2316 moveto 2484 2316 lineto stroke 2484 2316 moveto 2468 2324 moveto 2468 2324 lineto stroke 2468 2324 moveto 2448 2332 moveto 2448 2332 lineto stroke 2448 2332 moveto 2428 2340 moveto 2428 2340 lineto stroke 2428 2340 moveto 2412 2344 moveto 2412 2344 lineto stroke 2412 2344 moveto 2392 2352 moveto 2392 2352 lineto stroke 2392 2352 moveto 2372 2360 moveto 2372 2360 lineto stroke 2372 2360 moveto 2356 2368 moveto 2356 2368 lineto stroke 2356 2368 moveto 2336 2372 moveto 2336 2372 lineto stroke 2336 2372 moveto 2316 2380 moveto 2316 2380 lineto stroke 2316 2380 moveto 2296 2384 moveto 2296 2384 lineto stroke 2296 2384 moveto 2276 2392 moveto 2276 2392 lineto stroke 2276 2392 moveto 2260 2396 moveto 2260 2396 lineto stroke 2260 2396 moveto 2240 2404 moveto 2240 2404 lineto stroke 2240 2404 moveto 2220 2408 moveto 2220 2408 lineto stroke 2220 2408 moveto 2200 1872 moveto 2200 1872 lineto stroke 2200 1872 moveto 2176 1860 moveto 2176 1860 lineto stroke 2176 1860 moveto 2156 1848 moveto 2156 1848 lineto stroke 2156 1848 moveto 2136 1840 moveto 2136 1840 lineto stroke 2136 1840 moveto 2112 1828 moveto 2112 1828 lineto stroke 2112 1828 moveto 2092 1816 moveto 2092 1816 lineto stroke 2092 1816 moveto 2072 1804 moveto 2072 1804 lineto stroke 2072 1804 moveto 2052 1796 moveto 2052 1796 lineto stroke 2052 1796 moveto 2028 1784 moveto 2028 1784 lineto stroke 2028 1784 moveto 2008 1772 moveto 2008 1772 lineto stroke 2008 1772 moveto 1988 1764 moveto 1988 1764 lineto stroke 1988 1764 moveto 1964 1752 moveto 1964 1752 lineto stroke 1964 1752 moveto 1944 1744 moveto 1944 1744 lineto stroke 1944 1744 moveto 1924 1732 moveto 1924 1732 lineto stroke 1924 1732 moveto 1904 1724 moveto 1904 1724 lineto stroke 1904 1724 moveto 1880 1712 moveto 1880 1712 lineto stroke 1880 1712 moveto 1860 1704 moveto 1860 1704 lineto stroke 1860 1704 moveto 1840 1692 moveto 1840 1692 lineto stroke 1840 1692 moveto 1820 1684 moveto 1820 1684 lineto stroke 1820 1684 moveto 1796 1672 moveto 1796 1672 lineto stroke 1796 1672 moveto 1776 1664 moveto 1776 1664 lineto stroke 1776 1664 moveto 1756 1656 moveto 1756 1656 lineto stroke 1756 1656 moveto 1736 1648 moveto 1736 1648 lineto stroke 1736 1648 moveto 1716 1636 moveto 1716 1636 lineto stroke 1716 1636 moveto 1692 1628 moveto 1692 1628 lineto stroke 1692 1628 moveto 1672 1620 moveto 1672 1620 lineto stroke 1672 1620 moveto 1652 1612 moveto 1652 1612 lineto stroke 1652 1612 moveto 1632 1604 moveto 1632 1604 lineto stroke 1632 1604 moveto 1612 1596 moveto 1612 1596 lineto stroke 1612 1596 moveto 1588 1588 moveto 1588 1588 lineto stroke 1588 1588 moveto 1568 1580 moveto 1568 1580 lineto stroke 1568 1580 moveto 1548 1572 moveto 1548 1572 lineto stroke 1548 1572 moveto 1528 1564 moveto 1528 1564 lineto stroke 1528 1564 moveto 1508 1556 moveto 1508 1556 lineto stroke 1508 1556 moveto 1488 1548 moveto 1488 1548 lineto stroke 1488 1548 moveto 1468 1540 moveto 1468 1540 lineto stroke 1468 1540 moveto 1448 1536 moveto 1448 1536 lineto stroke 1448 1536 moveto 1428 1528 moveto 1428 1528 lineto stroke 1428 1528 moveto 1404 1520 moveto 1404 1520 lineto stroke 1404 1520 moveto 1384 1516 moveto 1384 1516 lineto stroke 1384 1516 moveto 1364 1508 moveto 1364 1508 lineto stroke 1364 1508 moveto 1348 1504 moveto 1348 1504 lineto stroke 1348 1504 moveto 1328 1500 moveto 1328 1500 lineto stroke 1328 1500 moveto 1308 1496 moveto 1308 1496 lineto stroke 1308 1496 moveto 1288 1488 moveto 1288 1488 lineto stroke 1288 1488 moveto 1268 1484 moveto 1268 1484 lineto stroke 1268 1484 moveto 1248 1484 moveto 1248 1484 lineto stroke 1248 1484 moveto 1232 1480 moveto 1232 1480 lineto stroke 1232 1480 moveto 1212 1476 moveto 1212 1476 lineto stroke 1212 1476 moveto 1196 1476 moveto 1196 1476 lineto stroke 1196 1476 moveto 1176 1472 moveto 1176 1472 lineto stroke 1176 1472 moveto 1160 1472 moveto 1160 1472 lineto stroke 1160 1472 moveto 1144 1472 moveto 1144 1472 lineto stroke 1144 1472 moveto 1128 1476 moveto 1128 1476 lineto stroke 1128 1476 moveto 1112 1480 moveto 1112 1480 lineto stroke 1112 1480 moveto 1100 1484 moveto 1100 1484 lineto stroke 1100 1484 moveto 1088 1488 moveto 1088 1488 lineto stroke 1088 1488 moveto 1080 1496 moveto 1080 1496 lineto stroke 1080 1496 moveto 1072 1508 moveto 1072 1508 lineto stroke 1072 1508 moveto 1068 1520 moveto 1068 1520 lineto stroke 1068 1520 moveto 1068 1536 moveto 1068 1536 lineto stroke 1068 1536 moveto 1068 1552 moveto 1068 1552 lineto stroke 1068 1552 moveto 1076 1568 moveto 1076 1568 lineto stroke 1076 1568 moveto 1084 1588 moveto 1084 1588 lineto stroke 1084 1588 moveto 1096 1604 moveto 1096 1604 lineto stroke 1096 1604 moveto 1108 1624 moveto 1108 1624 lineto stroke 1108 1624 moveto 1124 1644 moveto 1124 1644 lineto stroke 1124 1644 moveto 1140 1660 moveto 1140 1660 lineto stroke 1140 1660 moveto 1156 1680 moveto 1156 1680 lineto stroke 1156 1680 moveto 1172 1700 moveto 1172 1700 lineto stroke 1172 1700 moveto 1192 1716 moveto 1192 1716 lineto stroke 1192 1716 moveto 1208 1732 moveto 1208 1732 lineto stroke 1208 1732 moveto 1228 1752 moveto 1228 1752 lineto stroke 1228 1752 moveto 1244 1768 moveto 1244 1768 lineto stroke 1244 1768 moveto 1264 1784 moveto 1264 1784 lineto stroke 1264 1784 moveto 1284 1800 moveto 1284 1800 lineto stroke 1284 1800 moveto 1304 1820 moveto 1304 1820 lineto stroke 1304 1820 moveto 1324 1836 moveto 1324 1836 lineto stroke 1324 1836 moveto 1340 1852 moveto 1340 1852 lineto stroke 1340 1852 moveto 1360 1868 moveto 1360 1868 lineto stroke 1360 1868 moveto 1380 1884 moveto 1380 1884 lineto stroke 1380 1884 moveto 1400 1896 moveto 1400 1896 lineto stroke 1400 1896 moveto 1420 1912 moveto 1420 1912 lineto stroke 1420 1912 moveto 1440 1928 moveto 1440 1928 lineto stroke 1440 1928 moveto 1460 1944 moveto 1460 1944 lineto stroke 1460 1944 moveto 1484 1960 moveto 1484 1960 lineto stroke 1484 1960 moveto 1504 1972 moveto 1504 1972 lineto stroke 1504 1972 moveto 1524 1988 moveto 1524 1988 lineto stroke 1524 1988 moveto 1544 2004 moveto 1544 2004 lineto stroke 1544 2004 moveto 1564 2016 moveto 1564 2016 lineto stroke 1564 2016 moveto 1584 2032 moveto 1584 2032 lineto stroke 1584 2032 moveto 1604 2048 moveto 1604 2048 lineto stroke 1604 2048 moveto 1628 2060 moveto 1628 2060 lineto stroke 1628 2060 moveto 1648 2076 moveto 1648 2076 lineto stroke 1648 2076 moveto 1668 2088 moveto 1668 2088 lineto stroke 1668 2088 moveto 1688 2104 moveto 1688 2104 lineto stroke 1688 2104 moveto 1708 2116 moveto 1708 2116 lineto stroke 1708 2116 moveto 1728 2128 moveto 1728 2128 lineto stroke 1728 2128 moveto 1752 2144 moveto 1752 2144 lineto stroke 1752 2144 moveto 1772 2156 moveto 1772 2156 lineto stroke 1772 2156 moveto 1792 2172 moveto 1792 2172 lineto stroke 1792 2172 moveto 1812 2184 moveto 1812 2184 lineto stroke 1812 2184 moveto 1836 2196 moveto 1836 2196 lineto stroke 1836 2196 moveto 1856 2208 moveto 1856 2208 lineto stroke 1856 2208 moveto 1876 2224 moveto 1876 2224 lineto stroke 1876 2224 moveto 1896 2236 moveto 1896 2236 lineto stroke 1896 2236 moveto 1920 2248 moveto 1920 2248 lineto stroke 1920 2248 moveto 1940 2260 moveto 1940 2260 lineto stroke 1940 2260 moveto 1960 2272 moveto 1960 2272 lineto stroke 1960 2272 moveto 1980 2288 moveto 1980 2288 lineto stroke 1980 2288 moveto 2004 2300 moveto 2004 2300 lineto stroke 2004 2300 moveto 2024 2312 moveto 2024 2312 lineto stroke 2024 2312 moveto 2044 2324 moveto 2044 2324 lineto stroke 2044 2324 moveto 2064 2336 moveto 2064 2336 lineto stroke 2064 2336 moveto 2088 2348 moveto 2088 2348 lineto stroke 2088 2348 moveto 2108 2360 moveto 2108 2360 lineto stroke 2108 2360 moveto 2128 2372 moveto 2128 2372 lineto stroke 2128 2372 moveto 2152 2384 moveto 2152 2384 lineto stroke 2152 2384 moveto 2172 2396 moveto 2172 2396 lineto stroke 2172 2396 moveto 2192 2408 moveto 2192 2408 lineto stroke 2192 2408 moveto 3436 1600 moveto 3436 1600 lineto stroke 3436 1600 moveto 3416 1588 moveto 3416 1588 lineto stroke 3416 1588 moveto 3396 1576 moveto 3396 1576 lineto stroke 3396 1576 moveto 3372 1564 moveto 3372 1564 lineto stroke 3372 1564 moveto 3352 1552 moveto 3352 1552 lineto stroke 3352 1552 moveto 3332 1540 moveto 3332 1540 lineto stroke 3332 1540 moveto 3308 1528 moveto 3308 1528 lineto stroke 3308 1528 moveto 3284 1520 moveto 3284 1520 lineto stroke 3284 1520 moveto 3264 1508 moveto 3264 1508 lineto stroke 3264 1508 moveto 3240 1496 moveto 3240 1496 lineto stroke 3240 1496 moveto 3216 1484 moveto 3216 1484 lineto stroke 3216 1484 moveto 3196 1472 moveto 3196 1472 lineto stroke 3196 1472 moveto 3172 1460 moveto 3172 1460 lineto stroke 3172 1460 moveto 3148 1452 moveto 3148 1452 lineto stroke 3148 1452 moveto 3124 1440 moveto 3124 1440 lineto stroke 3124 1440 moveto 3100 1428 moveto 3100 1428 lineto stroke 3100 1428 moveto 3076 1416 moveto 3076 1416 lineto stroke 3076 1416 moveto 3052 1404 moveto 3052 1404 lineto stroke 3052 1404 moveto 3028 1392 moveto 3028 1392 lineto stroke 3028 1392 moveto 3004 1384 moveto 3004 1384 lineto stroke 3004 1384 moveto 2980 1372 moveto 2980 1372 lineto stroke 2980 1372 moveto 2956 1360 moveto 2956 1360 lineto stroke 2956 1360 moveto 2932 1348 moveto 2932 1348 lineto stroke 2932 1348 moveto 2904 1340 moveto 2904 1340 lineto stroke 2904 1340 moveto 2880 1328 moveto 2880 1328 lineto stroke 2880 1328 moveto 2856 1316 moveto 2856 1316 lineto stroke 2856 1316 moveto 2828 1304 moveto 2828 1304 lineto stroke 2828 1304 moveto 2804 1292 moveto 2804 1292 lineto stroke 2804 1292 moveto 2776 1284 moveto 2776 1284 lineto stroke 2776 1284 moveto 2752 1272 moveto 2752 1272 lineto stroke 2752 1272 moveto 2724 1260 moveto 2724 1260 lineto stroke 2724 1260 moveto 2700 1252 moveto 2700 1252 lineto stroke 2700 1252 moveto 2672 1240 moveto 2672 1240 lineto stroke 2672 1240 moveto 2644 1228 moveto 2644 1228 lineto stroke 2644 1228 moveto 2616 1216 moveto 2616 1216 lineto stroke 2616 1216 moveto 2592 1208 moveto 2592 1208 lineto stroke 2592 1208 moveto 2564 1196 moveto 2564 1196 lineto stroke 2564 1196 moveto 2536 1188 moveto 2536 1188 lineto stroke 2536 1188 moveto 2508 1176 moveto 2508 1176 lineto stroke 2508 1176 moveto 2480 1164 moveto 2480 1164 lineto stroke 2480 1164 moveto 2452 1156 moveto 2452 1156 lineto stroke 2452 1156 moveto 2424 1144 moveto 2424 1144 lineto stroke 2424 1144 moveto 2392 1136 moveto 2392 1136 lineto stroke 2392 1136 moveto 2364 1124 moveto 2364 1124 lineto stroke 2364 1124 moveto 2336 1116 moveto 2336 1116 lineto stroke 2336 1116 moveto 2308 1104 moveto 2308 1104 lineto stroke 2308 1104 moveto 2276 1096 moveto 2276 1096 lineto stroke 2276 1096 moveto 2248 1088 moveto 2248 1088 lineto stroke 2248 1088 moveto 2220 1076 moveto 2220 1076 lineto stroke 2220 1076 moveto 2188 1068 moveto 2188 1068 lineto stroke 2188 1068 moveto 2160 1060 moveto 2160 1060 lineto stroke 2160 1060 moveto 2128 1052 moveto 2128 1052 lineto stroke 2128 1052 moveto 2100 1044 moveto 2100 1044 lineto stroke 2100 1044 moveto 2068 1036 moveto 2068 1036 lineto stroke 2068 1036 moveto 2040 1028 moveto 2040 1028 lineto stroke 2040 1028 moveto 2012 1024 moveto 2012 1024 lineto stroke 2012 1024 moveto 1980 1016 moveto 1980 1016 lineto stroke 1980 1016 moveto 1952 1008 moveto 1952 1008 lineto stroke 1952 1008 moveto 1924 1004 moveto 1924 1004 lineto stroke 1924 1004 moveto 1896 1000 moveto 1896 1000 lineto stroke 1896 1000 moveto 1868 996 moveto 1868 996 lineto stroke 1868 996 moveto 1844 992 moveto 1844 992 lineto stroke 1844 992 moveto 1816 992 moveto 1816 992 lineto stroke 1816 992 moveto 1792 988 moveto 1792 988 lineto stroke 1792 988 moveto 1772 988 moveto 1772 988 lineto stroke 1772 988 moveto 1748 988 moveto 1748 988 lineto stroke 1748 988 moveto 1732 988 moveto 1732 988 lineto stroke 1732 988 moveto 1712 992 moveto 1712 992 lineto stroke 1712 992 moveto 1696 992 moveto 1696 992 lineto stroke 1696 992 moveto 1684 996 moveto 1684 996 lineto stroke 1684 996 moveto 1668 1000 moveto 1668 1000 lineto stroke 1668 1000 moveto 1660 1004 moveto 1660 1004 lineto stroke 1660 1004 moveto 1648 1008 moveto 1648 1008 lineto stroke 1648 1008 moveto 1640 1016 moveto 1640 1016 lineto stroke 1640 1016 moveto 1632 1020 moveto 1632 1020 lineto stroke 1632 1020 moveto 1628 1028 moveto 1628 1028 lineto stroke 1628 1028 moveto 1624 1036 moveto 1624 1036 lineto stroke 1624 1036 moveto 1620 1040 moveto 1620 1040 lineto stroke 1620 1040 moveto 1620 1048 moveto 1620 1048 lineto stroke 1620 1048 moveto 1616 1056 moveto 1616 1056 lineto stroke 1616 1056 moveto 1616 1064 moveto 1616 1064 lineto stroke 1616 1064 moveto 1616 1072 moveto 1616 1072 lineto stroke 1616 1072 moveto 1620 1080 moveto 1620 1080 lineto stroke 1620 1080 moveto 1620 1088 moveto 1620 1088 lineto stroke 1620 1088 moveto 1624 1100 moveto 1624 1100 lineto stroke 1624 1100 moveto 1628 1108 moveto 1628 1108 lineto stroke 1628 1108 moveto 1632 1116 moveto 1632 1116 lineto stroke 1632 1116 moveto 1636 1124 moveto 1636 1124 lineto stroke 1636 1124 moveto 1640 1136 moveto 1640 1136 lineto stroke 1640 1136 moveto 1648 1144 moveto 1648 1144 lineto stroke 1648 1144 moveto 1652 1152 moveto 1652 1152 lineto stroke 1652 1152 moveto 1660 1164 moveto 1660 1164 lineto stroke 1660 1164 moveto 1668 1172 moveto 1668 1172 lineto stroke 1668 1172 moveto 1676 1184 moveto 1676 1184 lineto stroke 1676 1184 moveto 1684 1192 moveto 1684 1192 lineto stroke 1684 1192 moveto 1692 1204 moveto 1692 1204 lineto stroke 1692 1204 moveto 1700 1212 moveto 1700 1212 lineto stroke 1700 1212 moveto 1708 1224 moveto 1708 1224 lineto stroke 1708 1224 moveto 1720 1232 moveto 1720 1232 lineto stroke 1720 1232 moveto 1728 1244 moveto 1728 1244 lineto stroke 1728 1244 moveto 1740 1256 moveto 1740 1256 lineto stroke 1740 1256 moveto 1748 1264 moveto 1748 1264 lineto stroke 1748 1264 moveto 1760 1276 moveto 1760 1276 lineto stroke 1760 1276 moveto 1772 1284 moveto 1772 1284 lineto stroke 1772 1284 moveto 1784 1296 moveto 1784 1296 lineto stroke 1784 1296 moveto 1796 1308 moveto 1796 1308 lineto stroke 1796 1308 moveto 1808 1316 moveto 1808 1316 lineto stroke 1808 1316 moveto 1820 1328 moveto 1820 1328 lineto stroke 1820 1328 moveto 1832 1340 moveto 1832 1340 lineto stroke 1832 1340 moveto 1844 1348 moveto 1844 1348 lineto stroke 1844 1348 moveto 1856 1360 moveto 1856 1360 lineto stroke 1856 1360 moveto 1872 1372 moveto 1872 1372 lineto stroke 1872 1372 moveto 1884 1380 moveto 1884 1380 lineto stroke 1884 1380 moveto 1896 1392 moveto 1896 1392 lineto stroke 1896 1392 moveto 1912 1404 moveto 1912 1404 lineto stroke 1912 1404 moveto 1924 1416 moveto 1924 1416 lineto stroke 1924 1416 moveto 1940 1424 moveto 1940 1424 lineto stroke 1940 1424 moveto 1956 1436 moveto 1956 1436 lineto stroke 1956 1436 moveto 1968 1448 moveto 1968 1448 lineto stroke 1968 1448 moveto 1984 1460 moveto 1984 1460 lineto stroke 1984 1460 moveto 2000 1468 moveto 2000 1468 lineto stroke 2000 1468 moveto 2016 1480 moveto 2016 1480 lineto stroke 2016 1480 moveto 2032 1492 moveto 2032 1492 lineto stroke 2032 1492 moveto 2048 1504 moveto 2048 1504 lineto stroke 2048 1504 moveto 2064 1512 moveto 2064 1512 lineto stroke 2064 1512 moveto 2080 1524 moveto 2080 1524 lineto stroke 2080 1524 moveto 2100 1536 moveto 2100 1536 lineto stroke 2100 1536 moveto 2116 1548 moveto 2116 1548 lineto stroke 2116 1548 moveto 2132 1560 moveto 2132 1560 lineto stroke 2132 1560 moveto 2152 1568 moveto 2152 1568 lineto stroke 2152 1568 moveto 2168 1580 moveto 2168 1580 lineto stroke 2168 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 3540 1780 moveto 3540 1780 lineto stroke 3540 1780 moveto 3540 1780 moveto 3532 1776 lineto stroke 3532 1776 moveto 3528 1776 lineto stroke 3528 1776 moveto 3524 1772 lineto stroke 3524 1772 moveto 3516 1768 lineto stroke 3516 1768 moveto 3504 1764 lineto stroke 3504 1764 moveto 3500 1760 lineto stroke 3500 1760 moveto 3492 1756 lineto stroke 3492 1756 moveto 3484 1752 lineto stroke 3484 1752 moveto 3476 1748 lineto stroke 3476 1748 moveto 3468 1744 lineto stroke 3468 1744 moveto 3456 1736 lineto stroke 3456 1736 moveto 3444 1732 lineto stroke 3444 1732 moveto 3432 1724 lineto stroke 3432 1724 moveto 3416 1716 lineto stroke 3416 1716 moveto 3400 1708 lineto stroke 3400 1708 moveto 3380 1700 lineto stroke 3380 1700 moveto 3360 1692 lineto stroke 3360 1692 moveto 3340 1680 lineto stroke 3340 1680 moveto 3316 1668 lineto stroke 3316 1668 moveto 3292 1656 lineto stroke 3292 1656 moveto 3264 1648 lineto stroke 3264 1648 moveto 3236 1632 lineto stroke 3236 1632 moveto 3204 1620 lineto stroke 3204 1620 moveto 3172 1608 lineto stroke 3172 1608 moveto 3140 1592 lineto stroke 3140 1592 moveto 3104 1580 lineto stroke 3104 1580 moveto 3064 1564 lineto stroke 3064 1564 moveto 3028 1548 lineto stroke 3028 1548 moveto 2984 1532 lineto stroke 2984 1532 moveto 2940 1520 lineto stroke 2940 1520 moveto 2892 1504 lineto stroke 2892 1504 moveto 2852 1488 lineto stroke 2852 1488 moveto 2804 1472 lineto stroke 2804 1472 moveto 2756 1460 lineto stroke 2756 1460 moveto 2708 1444 lineto stroke 2708 1444 moveto 2652 1428 lineto stroke 2652 1428 moveto 2592 1416 lineto stroke 2592 1416 moveto 2528 1400 lineto stroke 2528 1400 moveto 2464 1388 lineto stroke 2464 1388 moveto 2408 1376 lineto stroke 2408 1376 moveto 2352 1368 lineto stroke 2352 1368 moveto 2296 1360 lineto stroke 2296 1360 moveto 2240 1352 lineto stroke 2240 1352 moveto 2176 1348 lineto stroke 2176 1348 moveto 2116 1344 lineto stroke 2116 1344 moveto 2056 1340 lineto stroke 2056 1340 moveto 1996 1344 lineto stroke 1996 1344 moveto 1944 1344 lineto stroke 1944 1344 moveto 1896 1348 lineto stroke 1896 1348 moveto 1848 1356 lineto stroke 1848 1356 moveto 1804 1364 lineto stroke 1804 1364 moveto 1760 1376 lineto stroke 1760 1376 moveto 1720 1392 lineto stroke 1720 1392 moveto 1680 1408 lineto stroke 1680 1408 moveto 1648 1428 lineto stroke 1648 1428 moveto 1620 1448 lineto stroke 1620 1448 moveto 1592 1468 lineto stroke 1592 1468 moveto 1572 1492 lineto stroke 1572 1492 moveto 1556 1520 lineto stroke 1556 1520 moveto 1540 1552 lineto stroke 1540 1552 moveto 1532 1588 lineto stroke 1532 1588 moveto 1528 1628 lineto stroke 1528 1628 moveto 1532 1664 lineto stroke 1532 1664 moveto 1536 1700 lineto stroke 1536 1700 moveto 1544 1736 lineto stroke 1544 1736 moveto 1556 1768 lineto stroke 1556 1768 moveto 1572 1804 lineto stroke 1572 1804 moveto 1596 1844 lineto stroke 1596 1844 moveto 1620 1888 lineto stroke 1620 1888 moveto 1648 1928 lineto stroke 1648 1928 moveto 1676 1964 lineto stroke 1676 1964 moveto 1704 2000 lineto stroke 1704 2000 moveto 1732 2032 lineto stroke 1732 2032 moveto 1760 2060 lineto stroke 1760 2060 moveto 1788 2088 lineto stroke 1788 2088 moveto 1820 2120 lineto stroke 1820 2120 moveto 1852 2152 lineto stroke 1852 2152 moveto 1880 2180 lineto stroke 1880 2180 moveto 1908 2204 lineto stroke 1908 2204 moveto 1936 2228 lineto stroke 1936 2228 moveto 1964 2248 lineto stroke 1964 2248 moveto 1988 2268 lineto stroke 1988 2268 moveto 2012 2284 lineto stroke 2012 2284 moveto 2036 2304 lineto stroke 2036 2304 moveto 2056 2316 lineto stroke 2056 2316 moveto 2076 2332 lineto stroke 2076 2332 moveto 2092 2344 lineto stroke 2092 2344 moveto 2108 2356 lineto stroke 2108 2356 moveto 2124 2364 lineto stroke 2124 2364 moveto 2136 2372 lineto stroke 2136 2372 moveto 2148 2380 lineto stroke 2148 2380 moveto 2160 2388 lineto stroke 2160 2388 moveto 2168 2392 lineto stroke 2168 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2192 2408 lineto stroke 2192 2408 moveto 3540 1780 moveto 3540 1780 lineto stroke 3540 1780 moveto 3524 1788 moveto 3524 1788 lineto stroke 3524 1788 moveto 3504 1800 moveto 3504 1800 lineto stroke 3504 1800 moveto 3488 1808 moveto 3488 1808 lineto stroke 3488 1808 moveto 3472 1816 moveto 3472 1816 lineto stroke 3472 1816 moveto 3456 1824 moveto 3456 1824 lineto stroke 3456 1824 moveto 3436 1836 moveto 3436 1836 lineto stroke 3436 1836 moveto 3420 1844 moveto 3420 1844 lineto stroke 3420 1844 moveto 3404 1852 moveto 3404 1852 lineto stroke 3404 1852 moveto 3388 1860 moveto 3388 1860 lineto stroke 3388 1860 moveto 3372 1872 moveto 3372 1872 lineto stroke 3372 1872 moveto 3352 1880 moveto 3352 1880 lineto stroke 3352 1880 moveto 3336 1888 moveto 3336 1888 lineto stroke 3336 1888 moveto 3320 1896 moveto 3320 1896 lineto stroke 3320 1896 moveto 3304 1908 moveto 3304 1908 lineto stroke 3304 1908 moveto 3284 1916 moveto 3284 1916 lineto stroke 3284 1916 moveto 3268 1924 moveto 3268 1924 lineto stroke 3268 1924 moveto 3252 1932 moveto 3252 1932 lineto stroke 3252 1932 moveto 3236 1940 moveto 3236 1940 lineto stroke 3236 1940 moveto 3216 1952 moveto 3216 1952 lineto stroke 3216 1952 moveto 3200 1960 moveto 3200 1960 lineto stroke 3200 1960 moveto 3184 1968 moveto 3184 1968 lineto stroke 3184 1968 moveto 3168 1976 moveto 3168 1976 lineto stroke 3168 1976 moveto 3148 1988 moveto 3148 1988 lineto stroke 3148 1988 moveto 3132 1996 moveto 3132 1996 lineto stroke 3132 1996 moveto 3116 2004 moveto 3116 2004 lineto stroke 3116 2004 moveto 3096 2012 moveto 3096 2012 lineto stroke 3096 2012 moveto 3080 2020 moveto 3080 2020 lineto stroke 3080 2020 moveto 3064 2032 moveto 3064 2032 lineto stroke 3064 2032 moveto 3048 2040 moveto 3048 2040 lineto stroke 3048 2040 moveto 3028 2048 moveto 3028 2048 lineto stroke 3028 2048 moveto 3012 2056 moveto 3012 2056 lineto stroke 3012 2056 moveto 2996 2064 moveto 2996 2064 lineto stroke 2996 2064 moveto 2976 2072 moveto 2976 2072 lineto stroke 2976 2072 moveto 2960 2084 moveto 2960 2084 lineto stroke 2960 2084 moveto 2944 2092 moveto 2944 2092 lineto stroke 2944 2092 moveto 2924 2100 moveto 2924 2100 lineto stroke 2924 2100 moveto 2908 2108 moveto 2908 2108 lineto stroke 2908 2108 moveto 2892 2116 moveto 2892 2116 lineto stroke 2892 2116 moveto 2872 2124 moveto 2872 2124 lineto stroke 2872 2124 moveto 2856 2132 moveto 2856 2132 lineto stroke 2856 2132 moveto 2840 2144 moveto 2840 2144 lineto stroke 2840 2144 moveto 2820 2152 moveto 2820 2152 lineto stroke 2820 2152 moveto 2804 2160 moveto 2804 2160 lineto stroke 2804 2160 moveto 2788 2168 moveto 2788 2168 lineto stroke 2788 2168 moveto 2768 2176 moveto 2768 2176 lineto stroke 2768 2176 moveto 2752 2184 moveto 2752 2184 lineto stroke 2752 2184 moveto 2736 2192 moveto 2736 2192 lineto stroke 2736 2192 moveto 2716 2200 moveto 2716 2200 lineto stroke 2716 2200 moveto 2700 2208 moveto 2700 2208 lineto stroke 2700 2208 moveto 2680 2216 moveto 2680 2216 lineto stroke 2680 2216 moveto 2664 2228 moveto 2664 2228 lineto stroke 2664 2228 moveto 2648 2236 moveto 2648 2236 lineto stroke 2648 2236 moveto 2628 2244 moveto 2628 2244 lineto stroke 2628 2244 moveto 2612 2252 moveto 2612 2252 lineto stroke 2612 2252 moveto 2592 2260 moveto 2592 2260 lineto stroke 2592 2260 moveto 2576 2268 moveto 2576 2268 lineto stroke 2576 2268 moveto 2556 2276 moveto 2556 2276 lineto stroke 2556 2276 moveto 2540 2284 moveto 2540 2284 lineto stroke 2540 2284 moveto 2520 2292 moveto 2520 2292 lineto stroke 2520 2292 moveto 2504 2300 moveto 2504 2300 lineto stroke 2504 2300 moveto 2484 2308 moveto 2484 2308 lineto stroke 2484 2308 moveto 2468 2316 moveto 2468 2316 lineto stroke 2468 2316 moveto 2448 2324 moveto 2448 2324 lineto stroke 2448 2324 moveto 2432 2328 moveto 2432 2328 lineto stroke 2432 2328 moveto 2412 2336 moveto 2412 2336 lineto stroke 2412 2336 moveto 2396 2344 moveto 2396 2344 lineto stroke 2396 2344 moveto 2376 2352 moveto 2376 2352 lineto stroke 2376 2352 moveto 2356 2360 moveto 2356 2360 lineto stroke 2356 2360 moveto 2340 2368 moveto 2340 2368 lineto stroke 2340 2368 moveto 2320 2372 moveto 2320 2372 lineto stroke 2320 2372 moveto 2300 2380 moveto 2300 2380 lineto stroke 2300 2380 moveto 2284 2388 moveto 2284 2388 lineto stroke 2284 2388 moveto 2264 2392 moveto 2264 2392 lineto stroke 2264 2392 moveto 2244 2400 moveto 2244 2400 lineto stroke 2244 2400 moveto 2224 2404 moveto 2224 2404 lineto stroke 2224 2404 moveto 2204 2408 moveto 2204 2408 lineto stroke 2204 2408 moveto 2200 1780 moveto 2200 1780 lineto stroke 2200 1780 moveto 2176 1768 moveto 2176 1768 lineto stroke 2176 1768 moveto 2156 1760 moveto 2156 1760 lineto stroke 2156 1760 moveto 2136 1748 moveto 2136 1748 lineto stroke 2136 1748 moveto 2112 1736 moveto 2112 1736 lineto stroke 2112 1736 moveto 2092 1724 moveto 2092 1724 lineto stroke 2092 1724 moveto 2072 1716 moveto 2072 1716 lineto stroke 2072 1716 moveto 2052 1704 moveto 2052 1704 lineto stroke 2052 1704 moveto 2028 1692 moveto 2028 1692 lineto stroke 2028 1692 moveto 2008 1680 moveto 2008 1680 lineto stroke 2008 1680 moveto 1988 1672 moveto 1988 1672 lineto stroke 1988 1672 moveto 1964 1660 moveto 1964 1660 lineto stroke 1964 1660 moveto 1944 1652 moveto 1944 1652 lineto stroke 1944 1652 moveto 1924 1640 moveto 1924 1640 lineto stroke 1924 1640 moveto 1904 1632 moveto 1904 1632 lineto stroke 1904 1632 moveto 1880 1620 moveto 1880 1620 lineto stroke 1880 1620 moveto 1860 1612 moveto 1860 1612 lineto stroke 1860 1612 moveto 1840 1600 moveto 1840 1600 lineto stroke 1840 1600 moveto 1820 1592 moveto 1820 1592 lineto stroke 1820 1592 moveto 1796 1580 moveto 1796 1580 lineto stroke 1796 1580 moveto 1776 1572 moveto 1776 1572 lineto stroke 1776 1572 moveto 1756 1560 moveto 1756 1560 lineto stroke 1756 1560 moveto 1736 1552 moveto 1736 1552 lineto stroke 1736 1552 moveto 1712 1544 moveto 1712 1544 lineto stroke 1712 1544 moveto 1692 1536 moveto 1692 1536 lineto stroke 1692 1536 moveto 1672 1524 moveto 1672 1524 lineto stroke 1672 1524 moveto 1652 1516 moveto 1652 1516 lineto stroke 1652 1516 moveto 1632 1508 moveto 1632 1508 lineto stroke 1632 1508 moveto 1608 1500 moveto 1608 1500 lineto stroke 1608 1500 moveto 1588 1492 moveto 1588 1492 lineto stroke 1588 1492 moveto 1568 1484 moveto 1568 1484 lineto stroke 1568 1484 moveto 1548 1476 moveto 1548 1476 lineto stroke 1548 1476 moveto 1528 1468 moveto 1528 1468 lineto stroke 1528 1468 moveto 1508 1460 moveto 1508 1460 lineto stroke 1508 1460 moveto 1484 1452 moveto 1484 1452 lineto stroke 1484 1452 moveto 1464 1444 moveto 1464 1444 lineto stroke 1464 1444 moveto 1444 1436 moveto 1444 1436 lineto stroke 1444 1436 moveto 1424 1428 moveto 1424 1428 lineto stroke 1424 1428 moveto 1404 1420 moveto 1404 1420 lineto stroke 1404 1420 moveto 1384 1416 moveto 1384 1416 lineto stroke 1384 1416 moveto 1364 1408 moveto 1364 1408 lineto stroke 1364 1408 moveto 1344 1400 moveto 1344 1400 lineto stroke 1344 1400 moveto 1324 1396 moveto 1324 1396 lineto stroke 1324 1396 moveto 1304 1388 moveto 1304 1388 lineto stroke 1304 1388 moveto 1284 1384 moveto 1284 1384 lineto stroke 1284 1384 moveto 1264 1376 moveto 1264 1376 lineto stroke 1264 1376 moveto 1244 1372 moveto 1244 1372 lineto stroke 1244 1372 moveto 1224 1368 moveto 1224 1368 lineto stroke 1224 1368 moveto 1204 1364 moveto 1204 1364 lineto stroke 1204 1364 moveto 1184 1360 moveto 1184 1360 lineto stroke 1184 1360 moveto 1168 1356 moveto 1168 1356 lineto stroke 1168 1356 moveto 1148 1352 moveto 1148 1352 lineto stroke 1148 1352 moveto 1128 1348 moveto 1128 1348 lineto stroke 1128 1348 moveto 1112 1344 moveto 1112 1344 lineto stroke 1112 1344 moveto 1092 1344 moveto 1092 1344 lineto stroke 1092 1344 moveto 1076 1344 moveto 1076 1344 lineto stroke 1076 1344 moveto 1056 1340 moveto 1056 1340 lineto stroke 1056 1340 moveto 1040 1340 moveto 1040 1340 lineto stroke 1040 1340 moveto 1024 1344 moveto 1024 1344 lineto stroke 1024 1344 moveto 1008 1344 moveto 1008 1344 lineto stroke 1008 1344 moveto 992 1348 moveto 992 1348 lineto stroke 992 1348 moveto 980 1352 moveto 980 1352 lineto stroke 980 1352 moveto 968 1356 moveto 968 1356 lineto stroke 968 1356 moveto 956 1364 moveto 956 1364 lineto stroke 956 1364 moveto 948 1372 moveto 948 1372 lineto stroke 948 1372 moveto 940 1380 moveto 940 1380 lineto stroke 940 1380 moveto 936 1396 moveto 936 1396 lineto stroke 936 1396 moveto 936 1408 moveto 936 1408 lineto stroke 936 1408 moveto 936 1424 moveto 936 1424 lineto stroke 936 1424 moveto 940 1440 moveto 940 1440 lineto stroke 940 1440 moveto 948 1460 moveto 948 1460 lineto stroke 948 1460 moveto 956 1476 moveto 956 1476 lineto stroke 956 1476 moveto 968 1496 moveto 968 1496 lineto stroke 968 1496 moveto 980 1516 moveto 980 1516 lineto stroke 980 1516 moveto 992 1532 moveto 992 1532 lineto stroke 992 1532 moveto 1008 1552 moveto 1008 1552 lineto stroke 1008 1552 moveto 1024 1572 moveto 1024 1572 lineto stroke 1024 1572 moveto 1040 1588 moveto 1040 1588 lineto stroke 1040 1588 moveto 1056 1608 moveto 1056 1608 lineto stroke 1056 1608 moveto 1076 1624 moveto 1076 1624 lineto stroke 1076 1624 moveto 1092 1644 moveto 1092 1644 lineto stroke 1092 1644 moveto 1108 1660 moveto 1108 1660 lineto stroke 1108 1660 moveto 1128 1676 moveto 1128 1676 lineto stroke 1128 1676 moveto 1148 1696 moveto 1148 1696 lineto stroke 1148 1696 moveto 1164 1712 moveto 1164 1712 lineto stroke 1164 1712 moveto 1184 1728 moveto 1184 1728 lineto stroke 1184 1728 moveto 1204 1744 moveto 1204 1744 lineto stroke 1204 1744 moveto 1224 1760 moveto 1224 1760 lineto stroke 1224 1760 moveto 1244 1776 moveto 1244 1776 lineto stroke 1244 1776 moveto 1264 1796 moveto 1264 1796 lineto stroke 1264 1796 moveto 1284 1812 moveto 1284 1812 lineto stroke 1284 1812 moveto 1300 1824 moveto 1300 1824 lineto stroke 1300 1824 moveto 1320 1840 moveto 1320 1840 lineto stroke 1320 1840 moveto 1340 1856 moveto 1340 1856 lineto stroke 1340 1856 moveto 1364 1872 moveto 1364 1872 lineto stroke 1364 1872 moveto 1384 1888 moveto 1384 1888 lineto stroke 1384 1888 moveto 1404 1904 moveto 1404 1904 lineto stroke 1404 1904 moveto 1424 1916 moveto 1424 1916 lineto stroke 1424 1916 moveto 1444 1932 moveto 1444 1932 lineto stroke 1444 1932 moveto 1464 1948 moveto 1464 1948 lineto stroke 1464 1948 moveto 1484 1964 moveto 1484 1964 lineto stroke 1484 1964 moveto 1504 1976 moveto 1504 1976 lineto stroke 1504 1976 moveto 1524 1992 moveto 1524 1992 lineto stroke 1524 1992 moveto 1544 2008 moveto 1544 2008 lineto stroke 1544 2008 moveto 1568 2020 moveto 1568 2020 lineto stroke 1568 2020 moveto 1588 2036 moveto 1588 2036 lineto stroke 1588 2036 moveto 1608 2048 moveto 1608 2048 lineto stroke 1608 2048 moveto 1628 2064 moveto 1628 2064 lineto stroke 1628 2064 moveto 1648 2076 moveto 1648 2076 lineto stroke 1648 2076 moveto 1668 2092 moveto 1668 2092 lineto stroke 1668 2092 moveto 1692 2104 moveto 1692 2104 lineto stroke 1692 2104 moveto 1712 2116 moveto 1712 2116 lineto stroke 1712 2116 moveto 1732 2132 moveto 1732 2132 lineto stroke 1732 2132 moveto 1752 2144 moveto 1752 2144 lineto stroke 1752 2144 moveto 1776 2160 moveto 1776 2160 lineto stroke 1776 2160 moveto 1796 2172 moveto 1796 2172 lineto stroke 1796 2172 moveto 1816 2184 moveto 1816 2184 lineto stroke 1816 2184 moveto 1836 2196 moveto 1836 2196 lineto stroke 1836 2196 moveto 1860 2212 moveto 1860 2212 lineto stroke 1860 2212 moveto 1880 2224 moveto 1880 2224 lineto stroke 1880 2224 moveto 1900 2236 moveto 1900 2236 lineto stroke 1900 2236 moveto 1920 2248 moveto 1920 2248 lineto stroke 1920 2248 moveto 1944 2264 moveto 1944 2264 lineto stroke 1944 2264 moveto 1964 2276 moveto 1964 2276 lineto stroke 1964 2276 moveto 1984 2288 moveto 1984 2288 lineto stroke 1984 2288 moveto 2004 2300 moveto 2004 2300 lineto stroke 2004 2300 moveto 2028 2312 moveto 2028 2312 lineto stroke 2028 2312 moveto 2048 2324 moveto 2048 2324 lineto stroke 2048 2324 moveto 2068 2336 moveto 2068 2336 lineto stroke 2068 2336 moveto 2088 2348 moveto 2088 2348 lineto stroke 2088 2348 moveto 2112 2360 moveto 2112 2360 lineto stroke 2112 2360 moveto 2132 2372 moveto 2132 2372 lineto stroke 2132 2372 moveto 2152 2384 moveto 2152 2384 lineto stroke 2152 2384 moveto 2172 2396 moveto 2172 2396 lineto stroke 2172 2396 moveto 3540 1600 moveto 3540 1600 lineto stroke 3540 1600 moveto 3520 1588 moveto 3520 1588 lineto stroke 3520 1588 moveto 3496 1576 moveto 3496 1576 lineto stroke 3496 1576 moveto 3476 1564 moveto 3476 1564 lineto stroke 3476 1564 moveto 3452 1552 moveto 3452 1552 lineto stroke 3452 1552 moveto 3432 1540 moveto 3432 1540 lineto stroke 3432 1540 moveto 3408 1528 moveto 3408 1528 lineto stroke 3408 1528 moveto 3388 1520 moveto 3388 1520 lineto stroke 3388 1520 moveto 3364 1508 moveto 3364 1508 lineto stroke 3364 1508 moveto 3344 1496 moveto 3344 1496 lineto stroke 3344 1496 moveto 3320 1484 moveto 3320 1484 lineto stroke 3320 1484 moveto 3296 1472 moveto 3296 1472 lineto stroke 3296 1472 moveto 3276 1460 moveto 3276 1460 lineto stroke 3276 1460 moveto 3252 1452 moveto 3252 1452 lineto stroke 3252 1452 moveto 3228 1440 moveto 3228 1440 lineto stroke 3228 1440 moveto 3204 1428 moveto 3204 1428 lineto stroke 3204 1428 moveto 3180 1416 moveto 3180 1416 lineto stroke 3180 1416 moveto 3156 1404 moveto 3156 1404 lineto stroke 3156 1404 moveto 3132 1392 moveto 3132 1392 lineto stroke 3132 1392 moveto 3108 1384 moveto 3108 1384 lineto stroke 3108 1384 moveto 3084 1372 moveto 3084 1372 lineto stroke 3084 1372 moveto 3060 1360 moveto 3060 1360 lineto stroke 3060 1360 moveto 3036 1348 moveto 3036 1348 lineto stroke 3036 1348 moveto 3012 1336 moveto 3012 1336 lineto stroke 3012 1336 moveto 2988 1328 moveto 2988 1328 lineto stroke 2988 1328 moveto 2964 1316 moveto 2964 1316 lineto stroke 2964 1316 moveto 2936 1304 moveto 2936 1304 lineto stroke 2936 1304 moveto 2912 1292 moveto 2912 1292 lineto stroke 2912 1292 moveto 2888 1280 moveto 2888 1280 lineto stroke 2888 1280 moveto 2860 1272 moveto 2860 1272 lineto stroke 2860 1272 moveto 2836 1260 moveto 2836 1260 lineto stroke 2836 1260 moveto 2808 1248 moveto 2808 1248 lineto stroke 2808 1248 moveto 2784 1236 moveto 2784 1236 lineto stroke 2784 1236 moveto 2756 1228 moveto 2756 1228 lineto stroke 2756 1228 moveto 2732 1216 moveto 2732 1216 lineto stroke 2732 1216 moveto 2704 1204 moveto 2704 1204 lineto stroke 2704 1204 moveto 2680 1196 moveto 2680 1196 lineto stroke 2680 1196 moveto 2652 1184 moveto 2652 1184 lineto stroke 2652 1184 moveto 2624 1172 moveto 2624 1172 lineto stroke 2624 1172 moveto 2596 1164 moveto 2596 1164 lineto stroke 2596 1164 moveto 2568 1152 moveto 2568 1152 lineto stroke 2568 1152 moveto 2544 1140 moveto 2544 1140 lineto stroke 2544 1140 moveto 2516 1132 moveto 2516 1132 lineto stroke 2516 1132 moveto 2488 1120 moveto 2488 1120 lineto stroke 2488 1120 moveto 2460 1108 moveto 2460 1108 lineto stroke 2460 1108 moveto 2432 1100 moveto 2432 1100 lineto stroke 2432 1100 moveto 2400 1088 moveto 2400 1088 lineto stroke 2400 1088 moveto 2372 1080 moveto 2372 1080 lineto stroke 2372 1080 moveto 2344 1068 moveto 2344 1068 lineto stroke 2344 1068 moveto 2316 1060 moveto 2316 1060 lineto stroke 2316 1060 moveto 2288 1048 moveto 2288 1048 lineto stroke 2288 1048 moveto 2256 1040 moveto 2256 1040 lineto stroke 2256 1040 moveto 2228 1032 moveto 2228 1032 lineto stroke 2228 1032 moveto 2200 1020 moveto 2200 1020 lineto stroke 2200 1020 moveto 2168 1012 moveto 2168 1012 lineto stroke 2168 1012 moveto 2140 1004 moveto 2140 1004 lineto stroke 2140 1004 moveto 2108 996 moveto 2108 996 lineto stroke 2108 996 moveto 2080 988 moveto 2080 988 lineto stroke 2080 988 moveto 2048 980 moveto 2048 980 lineto stroke 2048 980 moveto 2020 972 moveto 2020 972 lineto stroke 2020 972 moveto 1992 964 moveto 1992 964 lineto stroke 1992 964 moveto 1960 956 moveto 1960 956 lineto stroke 1960 956 moveto 1932 948 moveto 1932 948 lineto stroke 1932 948 moveto 1900 944 moveto 1900 944 lineto stroke 1900 944 moveto 1872 936 moveto 1872 936 lineto stroke 1872 936 moveto 1844 932 moveto 1844 932 lineto stroke 1844 932 moveto 1816 928 moveto 1816 928 lineto stroke 1816 928 moveto 1792 924 moveto 1792 924 lineto stroke 1792 924 moveto 1764 920 moveto 1764 920 lineto stroke 1764 920 moveto 1740 920 moveto 1740 920 lineto stroke 1740 920 moveto 1716 916 moveto 1716 916 lineto stroke 1716 916 moveto 1692 916 moveto 1692 916 lineto stroke 1692 916 moveto 1672 916 moveto 1672 916 lineto stroke 1672 916 moveto 1652 916 moveto 1652 916 lineto stroke 1652 916 moveto 1632 920 moveto 1632 920 lineto stroke 1632 920 moveto 1616 920 moveto 1616 920 lineto stroke 1616 920 moveto 1604 924 moveto 1604 924 lineto stroke 1604 924 moveto 1588 928 moveto 1588 928 lineto stroke 1588 928 moveto 1576 932 moveto 1576 932 lineto stroke 1576 932 moveto 1568 936 moveto 1568 936 lineto stroke 1568 936 moveto 1556 940 moveto 1556 940 lineto stroke 1556 940 moveto 1552 948 moveto 1552 948 lineto stroke 1552 948 moveto 1544 952 moveto 1544 952 lineto stroke 1544 952 moveto 1540 960 moveto 1540 960 lineto stroke 1540 960 moveto 1536 968 moveto 1536 968 lineto stroke 1536 968 moveto 1532 976 moveto 1532 976 lineto stroke 1532 976 moveto 1532 984 moveto 1532 984 lineto stroke 1532 984 moveto 1528 988 moveto 1528 988 lineto stroke 1528 988 moveto 1528 996 moveto 1528 996 lineto stroke 1528 996 moveto 1528 1008 moveto 1528 1008 lineto stroke 1528 1008 moveto 1532 1016 moveto 1532 1016 lineto stroke 1532 1016 moveto 1532 1024 moveto 1532 1024 lineto stroke 1532 1024 moveto 1536 1032 moveto 1536 1032 lineto stroke 1536 1032 moveto 1540 1040 moveto 1540 1040 lineto stroke 1540 1040 moveto 1544 1048 moveto 1544 1048 lineto stroke 1544 1048 moveto 1548 1060 moveto 1548 1060 lineto stroke 1548 1060 moveto 1552 1068 moveto 1552 1068 lineto stroke 1552 1068 moveto 1556 1076 moveto 1556 1076 lineto stroke 1556 1076 moveto 1564 1088 moveto 1564 1088 lineto stroke 1564 1088 moveto 1572 1096 moveto 1572 1096 lineto stroke 1572 1096 moveto 1576 1108 moveto 1576 1108 lineto stroke 1576 1108 moveto 1584 1116 moveto 1584 1116 lineto stroke 1584 1116 moveto 1592 1124 moveto 1592 1124 lineto stroke 1592 1124 moveto 1600 1136 moveto 1600 1136 lineto stroke 1600 1136 moveto 1608 1144 moveto 1608 1144 lineto stroke 1608 1144 moveto 1616 1156 moveto 1616 1156 lineto stroke 1616 1156 moveto 1628 1168 moveto 1628 1168 lineto stroke 1628 1168 moveto 1636 1176 moveto 1636 1176 lineto stroke 1636 1176 moveto 1648 1188 moveto 1648 1188 lineto stroke 1648 1188 moveto 1656 1196 moveto 1656 1196 lineto stroke 1656 1196 moveto 1668 1208 moveto 1668 1208 lineto stroke 1668 1208 moveto 1680 1216 moveto 1680 1216 lineto stroke 1680 1216 moveto 1688 1228 moveto 1688 1228 lineto stroke 1688 1228 moveto 1700 1240 moveto 1700 1240 lineto stroke 1700 1240 moveto 1712 1248 moveto 1712 1248 lineto stroke 1712 1248 moveto 1724 1260 moveto 1724 1260 lineto stroke 1724 1260 moveto 1736 1272 moveto 1736 1272 lineto stroke 1736 1272 moveto 1748 1280 moveto 1748 1280 lineto stroke 1748 1280 moveto 1760 1292 moveto 1760 1292 lineto stroke 1760 1292 moveto 1772 1304 moveto 1772 1304 lineto stroke 1772 1304 moveto 1788 1312 moveto 1788 1312 lineto stroke 1788 1312 moveto 1800 1324 moveto 1800 1324 lineto stroke 1800 1324 moveto 1812 1336 moveto 1812 1336 lineto stroke 1812 1336 moveto 1828 1344 moveto 1828 1344 lineto stroke 1828 1344 moveto 1840 1356 moveto 1840 1356 lineto stroke 1840 1356 moveto 1856 1368 moveto 1856 1368 lineto stroke 1856 1368 moveto 1868 1380 moveto 1868 1380 lineto stroke 1868 1380 moveto 1884 1388 moveto 1884 1388 lineto stroke 1884 1388 moveto 1900 1400 moveto 1900 1400 lineto stroke 1900 1400 moveto 1916 1412 moveto 1916 1412 lineto stroke 1916 1412 moveto 1928 1424 moveto 1928 1424 lineto stroke 1928 1424 moveto 1944 1432 moveto 1944 1432 lineto stroke 1944 1432 moveto 1960 1444 moveto 1960 1444 lineto stroke 1960 1444 moveto 1976 1456 moveto 1976 1456 lineto stroke 1976 1456 moveto 1992 1468 moveto 1992 1468 lineto stroke 1992 1468 moveto 2008 1480 moveto 2008 1480 lineto stroke 2008 1480 moveto 2024 1488 moveto 2024 1488 lineto stroke 2024 1488 moveto 2040 1500 moveto 2040 1500 lineto stroke 2040 1500 moveto 2060 1512 moveto 2060 1512 lineto stroke 2060 1512 moveto 2076 1524 moveto 2076 1524 lineto stroke 2076 1524 moveto 2092 1532 moveto 2092 1532 lineto stroke 2092 1532 moveto 2112 1544 moveto 2112 1544 lineto stroke 2112 1544 moveto 2128 1556 moveto 2128 1556 lineto stroke 2128 1556 moveto 2148 1568 moveto 2148 1568 lineto stroke 2148 1568 moveto 2164 1580 moveto 2164 1580 lineto stroke 2164 1580 moveto 2184 1592 moveto 2184 1592 lineto stroke 2184 1592 moveto 3632 1688 moveto 3632 1688 lineto stroke 3632 1688 moveto 3632 1688 moveto 3628 1684 lineto stroke 3628 1684 moveto 3620 1684 lineto stroke 3620 1684 moveto 3616 1680 lineto stroke 3616 1680 moveto 3608 1676 lineto stroke 3608 1676 moveto 3596 1668 lineto stroke 3596 1668 moveto 3588 1664 lineto stroke 3588 1664 moveto 3580 1660 lineto stroke 3580 1660 moveto 3576 1656 lineto stroke 3576 1656 moveto 3564 1652 lineto stroke 3564 1652 moveto 3556 1648 lineto stroke 3556 1648 moveto 3544 1640 lineto stroke 3544 1640 moveto 3528 1636 lineto stroke 3528 1636 moveto 3512 1628 lineto stroke 3512 1628 moveto 3496 1620 lineto stroke 3496 1620 moveto 3476 1608 lineto stroke 3476 1608 moveto 3456 1600 lineto stroke 3456 1600 moveto 3436 1588 lineto stroke 3436 1588 moveto 3412 1576 lineto stroke 3412 1576 moveto 3384 1564 lineto stroke 3384 1564 moveto 3356 1552 lineto stroke 3356 1552 moveto 3328 1540 lineto stroke 3328 1540 moveto 3296 1524 lineto stroke 3296 1524 moveto 3260 1512 lineto stroke 3260 1512 moveto 3228 1496 lineto stroke 3228 1496 moveto 3188 1480 lineto stroke 3188 1480 moveto 3148 1464 lineto stroke 3148 1464 moveto 3104 1448 lineto stroke 3104 1448 moveto 3064 1432 lineto stroke 3064 1432 moveto 3016 1416 lineto stroke 3016 1416 moveto 2968 1396 lineto stroke 2968 1396 moveto 2916 1380 lineto stroke 2916 1380 moveto 2868 1364 lineto stroke 2868 1364 moveto 2816 1348 lineto stroke 2816 1348 moveto 2764 1332 lineto stroke 2764 1332 moveto 2708 1316 lineto stroke 2708 1316 moveto 2644 1300 lineto stroke 2644 1300 moveto 2576 1284 lineto stroke 2576 1284 moveto 2504 1268 lineto stroke 2504 1268 moveto 2428 1252 lineto stroke 2428 1252 moveto 2368 1244 lineto stroke 2368 1244 moveto 2308 1232 lineto stroke 2308 1232 moveto 2244 1224 lineto stroke 2244 1224 moveto 2184 1220 lineto stroke 2184 1220 moveto 2112 1212 lineto stroke 2112 1212 moveto 2044 1212 lineto stroke 2044 1212 moveto 1976 1212 lineto stroke 1976 1212 moveto 1912 1212 lineto stroke 1912 1212 moveto 1856 1216 lineto stroke 1856 1216 moveto 1804 1224 lineto stroke 1804 1224 moveto 1756 1232 lineto stroke 1756 1232 moveto 1708 1244 lineto stroke 1708 1244 moveto 1660 1260 lineto stroke 1660 1260 moveto 1616 1280 lineto stroke 1616 1280 moveto 1576 1300 lineto stroke 1576 1300 moveto 1540 1328 lineto stroke 1540 1328 moveto 1512 1352 lineto stroke 1512 1352 moveto 1488 1376 lineto stroke 1488 1376 moveto 1472 1404 lineto stroke 1472 1404 moveto 1456 1436 lineto stroke 1456 1436 moveto 1444 1472 lineto stroke 1444 1472 moveto 1440 1512 lineto stroke 1440 1512 moveto 1440 1552 lineto stroke 1440 1552 moveto 1444 1596 lineto stroke 1444 1596 moveto 1452 1632 lineto stroke 1452 1632 moveto 1464 1672 lineto stroke 1464 1672 moveto 1480 1712 lineto stroke 1480 1712 moveto 1500 1752 lineto stroke 1500 1752 moveto 1528 1796 lineto stroke 1528 1796 moveto 1556 1840 lineto stroke 1556 1840 moveto 1588 1884 lineto stroke 1588 1884 moveto 1620 1924 lineto stroke 1620 1924 moveto 1652 1964 lineto stroke 1652 1964 moveto 1680 2000 lineto stroke 1680 2000 moveto 1712 2032 lineto stroke 1712 2032 moveto 1744 2064 lineto stroke 1744 2064 moveto 1784 2100 lineto stroke 1784 2100 moveto 1820 2132 lineto stroke 1820 2132 moveto 1852 2160 lineto stroke 1852 2160 moveto 1884 2188 lineto stroke 1884 2188 moveto 1916 2216 lineto stroke 1916 2216 moveto 1948 2240 lineto stroke 1948 2240 moveto 1972 2260 lineto stroke 1972 2260 moveto 1996 2276 lineto stroke 1996 2276 moveto 2024 2296 lineto stroke 2024 2296 moveto 2048 2316 lineto stroke 2048 2316 moveto 2068 2328 lineto stroke 2068 2328 moveto 2088 2340 lineto stroke 2088 2340 moveto 2108 2352 lineto stroke 2108 2352 moveto 2124 2364 lineto stroke 2124 2364 moveto 2136 2372 lineto stroke 2136 2372 moveto 2148 2380 lineto stroke 2148 2380 moveto 2156 2384 lineto stroke 2156 2384 moveto 2164 2392 lineto stroke 2164 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2176 2400 lineto stroke 2176 2400 moveto 2184 2400 lineto stroke 2184 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3632 1688 moveto 3632 1688 lineto stroke 3632 1688 moveto 3616 1700 moveto 3616 1700 lineto stroke 3616 1700 moveto 3600 1708 moveto 3600 1708 lineto stroke 3600 1708 moveto 3584 1716 moveto 3584 1716 lineto stroke 3584 1716 moveto 3568 1728 moveto 3568 1728 lineto stroke 3568 1728 moveto 3552 1736 moveto 3552 1736 lineto stroke 3552 1736 moveto 3536 1744 moveto 3536 1744 lineto stroke 3536 1744 moveto 3516 1756 moveto 3516 1756 lineto stroke 3516 1756 moveto 3500 1764 moveto 3500 1764 lineto stroke 3500 1764 moveto 3484 1772 moveto 3484 1772 lineto stroke 3484 1772 moveto 3468 1780 moveto 3468 1780 lineto stroke 3468 1780 moveto 3452 1792 moveto 3452 1792 lineto stroke 3452 1792 moveto 3436 1800 moveto 3436 1800 lineto stroke 3436 1800 moveto 3416 1808 moveto 3416 1808 lineto stroke 3416 1808 moveto 3400 1820 moveto 3400 1820 lineto stroke 3400 1820 moveto 3384 1828 moveto 3384 1828 lineto stroke 3384 1828 moveto 3368 1836 moveto 3368 1836 lineto stroke 3368 1836 moveto 3352 1848 moveto 3352 1848 lineto stroke 3352 1848 moveto 3336 1856 moveto 3336 1856 lineto stroke 3336 1856 moveto 3316 1864 moveto 3316 1864 lineto stroke 3316 1864 moveto 3300 1872 moveto 3300 1872 lineto stroke 3300 1872 moveto 3284 1884 moveto 3284 1884 lineto stroke 3284 1884 moveto 3268 1892 moveto 3268 1892 lineto stroke 3268 1892 moveto 3252 1900 moveto 3252 1900 lineto stroke 3252 1900 moveto 3236 1912 moveto 3236 1912 lineto stroke 3236 1912 moveto 3216 1920 moveto 3216 1920 lineto stroke 3216 1920 moveto 3200 1928 moveto 3200 1928 lineto stroke 3200 1928 moveto 3184 1936 moveto 3184 1936 lineto stroke 3184 1936 moveto 3168 1948 moveto 3168 1948 lineto stroke 3168 1948 moveto 3152 1956 moveto 3152 1956 lineto stroke 3152 1956 moveto 3132 1964 moveto 3132 1964 lineto stroke 3132 1964 moveto 3116 1976 moveto 3116 1976 lineto stroke 3116 1976 moveto 3100 1984 moveto 3100 1984 lineto stroke 3100 1984 moveto 3084 1992 moveto 3084 1992 lineto stroke 3084 1992 moveto 3068 2000 moveto 3068 2000 lineto stroke 3068 2000 moveto 3048 2012 moveto 3048 2012 lineto stroke 3048 2012 moveto 3032 2020 moveto 3032 2020 lineto stroke 3032 2020 moveto 3016 2028 moveto 3016 2028 lineto stroke 3016 2028 moveto 3000 2036 moveto 3000 2036 lineto stroke 3000 2036 moveto 2980 2048 moveto 2980 2048 lineto stroke 2980 2048 moveto 2964 2056 moveto 2964 2056 lineto stroke 2964 2056 moveto 2948 2064 moveto 2948 2064 lineto stroke 2948 2064 moveto 2932 2072 moveto 2932 2072 lineto stroke 2932 2072 moveto 2912 2084 moveto 2912 2084 lineto stroke 2912 2084 moveto 2896 2092 moveto 2896 2092 lineto stroke 2896 2092 moveto 2880 2100 moveto 2880 2100 lineto stroke 2880 2100 moveto 2864 2108 moveto 2864 2108 lineto stroke 2864 2108 moveto 2844 2116 moveto 2844 2116 lineto stroke 2844 2116 moveto 2828 2128 moveto 2828 2128 lineto stroke 2828 2128 moveto 2812 2136 moveto 2812 2136 lineto stroke 2812 2136 moveto 2796 2144 moveto 2796 2144 lineto stroke 2796 2144 moveto 2776 2152 moveto 2776 2152 lineto stroke 2776 2152 moveto 2760 2160 moveto 2760 2160 lineto stroke 2760 2160 moveto 2744 2172 moveto 2744 2172 lineto stroke 2744 2172 moveto 2724 2180 moveto 2724 2180 lineto stroke 2724 2180 moveto 2708 2188 moveto 2708 2188 lineto stroke 2708 2188 moveto 2692 2196 moveto 2692 2196 lineto stroke 2692 2196 moveto 2672 2204 moveto 2672 2204 lineto stroke 2672 2204 moveto 2656 2212 moveto 2656 2212 lineto stroke 2656 2212 moveto 2640 2224 moveto 2640 2224 lineto stroke 2640 2224 moveto 2620 2232 moveto 2620 2232 lineto stroke 2620 2232 moveto 2604 2240 moveto 2604 2240 lineto stroke 2604 2240 moveto 2588 2248 moveto 2588 2248 lineto stroke 2588 2248 moveto 2568 2256 moveto 2568 2256 lineto stroke 2568 2256 moveto 2552 2264 moveto 2552 2264 lineto stroke 2552 2264 moveto 2536 2272 moveto 2536 2272 lineto stroke 2536 2272 moveto 2516 2280 moveto 2516 2280 lineto stroke 2516 2280 moveto 2500 2288 moveto 2500 2288 lineto stroke 2500 2288 moveto 2480 2296 moveto 2480 2296 lineto stroke 2480 2296 moveto 2464 2304 moveto 2464 2304 lineto stroke 2464 2304 moveto 2448 2312 moveto 2448 2312 lineto stroke 2448 2312 moveto 2428 2320 moveto 2428 2320 lineto stroke 2428 2320 moveto 2412 2328 moveto 2412 2328 lineto stroke 2412 2328 moveto 2392 2336 moveto 2392 2336 lineto stroke 2392 2336 moveto 2376 2344 moveto 2376 2344 lineto stroke 2376 2344 moveto 2356 2352 moveto 2356 2352 lineto stroke 2356 2352 moveto 2340 2360 moveto 2340 2360 lineto stroke 2340 2360 moveto 2320 2368 moveto 2320 2368 lineto stroke 2320 2368 moveto 2300 2376 moveto 2300 2376 lineto stroke 2300 2376 moveto 2284 2384 moveto 2284 2384 lineto stroke 2284 2384 moveto 2264 2388 moveto 2264 2388 lineto stroke 2264 2388 moveto 2244 2396 moveto 2244 2396 lineto stroke 2244 2396 moveto 2228 2404 moveto 2228 2404 lineto stroke 2228 2404 moveto 2208 2408 moveto 2208 2408 lineto stroke 2208 2408 moveto 2200 1688 moveto 2200 1688 lineto stroke 2200 1688 moveto 2176 1676 moveto 2176 1676 lineto stroke 2176 1676 moveto 2156 1668 moveto 2156 1668 lineto stroke 2156 1668 moveto 2136 1656 moveto 2136 1656 lineto stroke 2136 1656 moveto 2112 1644 moveto 2112 1644 lineto stroke 2112 1644 moveto 2092 1632 moveto 2092 1632 lineto stroke 2092 1632 moveto 2072 1624 moveto 2072 1624 lineto stroke 2072 1624 moveto 2052 1612 moveto 2052 1612 lineto stroke 2052 1612 moveto 2028 1600 moveto 2028 1600 lineto stroke 2028 1600 moveto 2008 1588 moveto 2008 1588 lineto stroke 2008 1588 moveto 1988 1580 moveto 1988 1580 lineto stroke 1988 1580 moveto 1964 1568 moveto 1964 1568 lineto stroke 1964 1568 moveto 1944 1560 moveto 1944 1560 lineto stroke 1944 1560 moveto 1924 1548 moveto 1924 1548 lineto stroke 1924 1548 moveto 1904 1536 moveto 1904 1536 lineto stroke 1904 1536 moveto 1880 1528 moveto 1880 1528 lineto stroke 1880 1528 moveto 1860 1516 moveto 1860 1516 lineto stroke 1860 1516 moveto 1840 1508 moveto 1840 1508 lineto stroke 1840 1508 moveto 1820 1496 moveto 1820 1496 lineto stroke 1820 1496 moveto 1796 1488 moveto 1796 1488 lineto stroke 1796 1488 moveto 1776 1480 moveto 1776 1480 lineto stroke 1776 1480 moveto 1756 1468 moveto 1756 1468 lineto stroke 1756 1468 moveto 1736 1460 moveto 1736 1460 lineto stroke 1736 1460 moveto 1712 1448 moveto 1712 1448 lineto stroke 1712 1448 moveto 1692 1440 moveto 1692 1440 lineto stroke 1692 1440 moveto 1672 1432 moveto 1672 1432 lineto stroke 1672 1432 moveto 1652 1424 moveto 1652 1424 lineto stroke 1652 1424 moveto 1632 1412 moveto 1632 1412 lineto stroke 1632 1412 moveto 1608 1404 moveto 1608 1404 lineto stroke 1608 1404 moveto 1588 1396 moveto 1588 1396 lineto stroke 1588 1396 moveto 1568 1388 moveto 1568 1388 lineto stroke 1568 1388 moveto 1548 1380 moveto 1548 1380 lineto stroke 1548 1380 moveto 1528 1372 moveto 1528 1372 lineto stroke 1528 1372 moveto 1504 1360 moveto 1504 1360 lineto stroke 1504 1360 moveto 1484 1352 moveto 1484 1352 lineto stroke 1484 1352 moveto 1464 1344 moveto 1464 1344 lineto stroke 1464 1344 moveto 1444 1340 moveto 1444 1340 lineto stroke 1444 1340 moveto 1424 1332 moveto 1424 1332 lineto stroke 1424 1332 moveto 1404 1324 moveto 1404 1324 lineto stroke 1404 1324 moveto 1380 1316 moveto 1380 1316 lineto stroke 1380 1316 moveto 1360 1308 moveto 1360 1308 lineto stroke 1360 1308 moveto 1340 1300 moveto 1340 1300 lineto stroke 1340 1300 moveto 1320 1296 moveto 1320 1296 lineto stroke 1320 1296 moveto 1300 1288 moveto 1300 1288 lineto stroke 1300 1288 moveto 1280 1280 moveto 1280 1280 lineto stroke 1280 1280 moveto 1260 1276 moveto 1260 1276 lineto stroke 1260 1276 moveto 1240 1268 moveto 1240 1268 lineto stroke 1240 1268 moveto 1220 1264 moveto 1220 1264 lineto stroke 1220 1264 moveto 1200 1256 moveto 1200 1256 lineto stroke 1200 1256 moveto 1180 1252 moveto 1180 1252 lineto stroke 1180 1252 moveto 1160 1248 moveto 1160 1248 lineto stroke 1160 1248 moveto 1140 1240 moveto 1140 1240 lineto stroke 1140 1240 moveto 1120 1236 moveto 1120 1236 lineto stroke 1120 1236 moveto 1104 1232 moveto 1104 1232 lineto stroke 1104 1232 moveto 1084 1228 moveto 1084 1228 lineto stroke 1084 1228 moveto 1064 1224 moveto 1064 1224 lineto stroke 1064 1224 moveto 1044 1220 moveto 1044 1220 lineto stroke 1044 1220 moveto 1028 1220 moveto 1028 1220 lineto stroke 1028 1220 moveto 1008 1216 moveto 1008 1216 lineto stroke 1008 1216 moveto 992 1212 moveto 992 1212 lineto stroke 992 1212 moveto 972 1212 moveto 972 1212 lineto stroke 972 1212 moveto 956 1212 moveto 956 1212 lineto stroke 956 1212 moveto 936 1212 moveto 936 1212 lineto stroke 936 1212 moveto 920 1212 moveto 920 1212 lineto stroke 920 1212 moveto 904 1212 moveto 904 1212 lineto stroke 904 1212 moveto 888 1212 moveto 888 1212 lineto stroke 888 1212 moveto 876 1216 moveto 876 1216 lineto stroke 876 1216 moveto 860 1220 moveto 860 1220 lineto stroke 860 1220 moveto 848 1224 moveto 848 1224 lineto stroke 848 1224 moveto 836 1232 moveto 836 1232 lineto stroke 836 1232 moveto 824 1240 moveto 824 1240 lineto stroke 824 1240 moveto 816 1248 moveto 816 1248 lineto stroke 816 1248 moveto 812 1256 moveto 812 1256 lineto stroke 812 1256 moveto 808 1272 moveto 808 1272 lineto stroke 808 1272 moveto 804 1284 moveto 804 1284 lineto stroke 804 1284 moveto 804 1300 moveto 804 1300 lineto stroke 804 1300 moveto 808 1316 moveto 808 1316 lineto stroke 808 1316 moveto 812 1332 moveto 812 1332 lineto stroke 812 1332 moveto 820 1352 moveto 820 1352 lineto stroke 820 1352 moveto 828 1368 moveto 828 1368 lineto stroke 828 1368 moveto 840 1388 moveto 840 1388 lineto stroke 840 1388 moveto 852 1408 moveto 852 1408 lineto stroke 852 1408 moveto 864 1424 moveto 864 1424 lineto stroke 864 1424 moveto 880 1444 moveto 880 1444 lineto stroke 880 1444 moveto 896 1464 moveto 896 1464 lineto stroke 896 1464 moveto 908 1480 moveto 908 1480 lineto stroke 908 1480 moveto 928 1500 moveto 928 1500 lineto stroke 928 1500 moveto 944 1520 moveto 944 1520 lineto stroke 944 1520 moveto 960 1536 moveto 960 1536 lineto stroke 960 1536 moveto 976 1552 moveto 976 1552 lineto stroke 976 1552 moveto 996 1572 moveto 996 1572 lineto stroke 996 1572 moveto 1012 1588 moveto 1012 1588 lineto stroke 1012 1588 moveto 1032 1608 moveto 1032 1608 lineto stroke 1032 1608 moveto 1052 1624 moveto 1052 1624 lineto stroke 1052 1624 moveto 1068 1640 moveto 1068 1640 lineto stroke 1068 1640 moveto 1088 1656 moveto 1088 1656 lineto stroke 1088 1656 moveto 1108 1676 moveto 1108 1676 lineto stroke 1108 1676 moveto 1128 1692 moveto 1128 1692 lineto stroke 1128 1692 moveto 1144 1708 moveto 1144 1708 lineto stroke 1144 1708 moveto 1164 1724 moveto 1164 1724 lineto stroke 1164 1724 moveto 1184 1740 moveto 1184 1740 lineto stroke 1184 1740 moveto 1204 1756 moveto 1204 1756 lineto stroke 1204 1756 moveto 1224 1772 moveto 1224 1772 lineto stroke 1224 1772 moveto 1244 1788 moveto 1244 1788 lineto stroke 1244 1788 moveto 1264 1804 moveto 1264 1804 lineto stroke 1264 1804 moveto 1284 1816 moveto 1284 1816 lineto stroke 1284 1816 moveto 1304 1832 moveto 1304 1832 lineto stroke 1304 1832 moveto 1324 1848 moveto 1324 1848 lineto stroke 1324 1848 moveto 1344 1864 moveto 1344 1864 lineto stroke 1344 1864 moveto 1364 1880 moveto 1364 1880 lineto stroke 1364 1880 moveto 1384 1892 moveto 1384 1892 lineto stroke 1384 1892 moveto 1408 1908 moveto 1408 1908 lineto stroke 1408 1908 moveto 1428 1924 moveto 1428 1924 lineto stroke 1428 1924 moveto 1448 1940 moveto 1448 1940 lineto stroke 1448 1940 moveto 1468 1952 moveto 1468 1952 lineto stroke 1468 1952 moveto 1488 1968 moveto 1488 1968 lineto stroke 1488 1968 moveto 1508 1980 moveto 1508 1980 lineto stroke 1508 1980 moveto 1528 1996 moveto 1528 1996 lineto stroke 1528 1996 moveto 1552 2012 moveto 1552 2012 lineto stroke 1552 2012 moveto 1572 2024 moveto 1572 2024 lineto stroke 1572 2024 moveto 1592 2040 moveto 1592 2040 lineto stroke 1592 2040 moveto 1612 2052 moveto 1612 2052 lineto stroke 1612 2052 moveto 1632 2068 moveto 1632 2068 lineto stroke 1632 2068 moveto 1652 2080 moveto 1652 2080 lineto stroke 1652 2080 moveto 1676 2092 moveto 1676 2092 lineto stroke 1676 2092 moveto 1696 2108 moveto 1696 2108 lineto stroke 1696 2108 moveto 1716 2120 moveto 1716 2120 lineto stroke 1716 2120 moveto 1736 2136 moveto 1736 2136 lineto stroke 1736 2136 moveto 1760 2148 moveto 1760 2148 lineto stroke 1760 2148 moveto 1780 2160 moveto 1780 2160 lineto stroke 1780 2160 moveto 1800 2176 moveto 1800 2176 lineto stroke 1800 2176 moveto 1820 2188 moveto 1820 2188 lineto stroke 1820 2188 moveto 1840 2200 moveto 1840 2200 lineto stroke 1840 2200 moveto 1864 2212 moveto 1864 2212 lineto stroke 1864 2212 moveto 1884 2228 moveto 1884 2228 lineto stroke 1884 2228 moveto 1904 2240 moveto 1904 2240 lineto stroke 1904 2240 moveto 1924 2252 moveto 1924 2252 lineto stroke 1924 2252 moveto 1948 2264 moveto 1948 2264 lineto stroke 1948 2264 moveto 1968 2276 moveto 1968 2276 lineto stroke 1968 2276 moveto 1988 2292 moveto 1988 2292 lineto stroke 1988 2292 moveto 2008 2304 moveto 2008 2304 lineto stroke 2008 2304 moveto 2032 2316 moveto 2032 2316 lineto stroke 2032 2316 moveto 2052 2328 moveto 2052 2328 lineto stroke 2052 2328 moveto 2072 2340 moveto 2072 2340 lineto stroke 2072 2340 moveto 2096 2352 moveto 2096 2352 lineto stroke 2096 2352 moveto 2116 2364 moveto 2116 2364 lineto stroke 2116 2364 moveto 2136 2376 moveto 2136 2376 lineto stroke 2136 2376 moveto 2156 2388 moveto 2156 2388 lineto stroke 2156 2388 moveto 2180 2400 moveto 2180 2400 lineto stroke 2180 2400 moveto 3632 1600 moveto 3632 1600 lineto stroke 3632 1600 moveto 3612 1588 moveto 3612 1588 lineto stroke 3612 1588 moveto 3592 1576 moveto 3592 1576 lineto stroke 3592 1576 moveto 3568 1564 moveto 3568 1564 lineto stroke 3568 1564 moveto 3548 1552 moveto 3548 1552 lineto stroke 3548 1552 moveto 3528 1540 moveto 3528 1540 lineto stroke 3528 1540 moveto 3504 1528 moveto 3504 1528 lineto stroke 3504 1528 moveto 3484 1520 moveto 3484 1520 lineto stroke 3484 1520 moveto 3460 1508 moveto 3460 1508 lineto stroke 3460 1508 moveto 3440 1496 moveto 3440 1496 lineto stroke 3440 1496 moveto 3416 1484 moveto 3416 1484 lineto stroke 3416 1484 moveto 3392 1472 moveto 3392 1472 lineto stroke 3392 1472 moveto 3372 1460 moveto 3372 1460 lineto stroke 3372 1460 moveto 3348 1452 moveto 3348 1452 lineto stroke 3348 1452 moveto 3324 1440 moveto 3324 1440 lineto stroke 3324 1440 moveto 3300 1428 moveto 3300 1428 lineto stroke 3300 1428 moveto 3280 1416 moveto 3280 1416 lineto stroke 3280 1416 moveto 3256 1404 moveto 3256 1404 lineto stroke 3256 1404 moveto 3232 1392 moveto 3232 1392 lineto stroke 3232 1392 moveto 3208 1384 moveto 3208 1384 lineto stroke 3208 1384 moveto 3184 1372 moveto 3184 1372 lineto stroke 3184 1372 moveto 3160 1360 moveto 3160 1360 lineto stroke 3160 1360 moveto 3136 1348 moveto 3136 1348 lineto stroke 3136 1348 moveto 3112 1336 moveto 3112 1336 lineto stroke 3112 1336 moveto 3088 1324 moveto 3088 1324 lineto stroke 3088 1324 moveto 3064 1316 moveto 3064 1316 lineto stroke 3064 1316 moveto 3036 1304 moveto 3036 1304 lineto stroke 3036 1304 moveto 3012 1292 moveto 3012 1292 lineto stroke 3012 1292 moveto 2988 1280 moveto 2988 1280 lineto stroke 2988 1280 moveto 2964 1272 moveto 2964 1272 lineto stroke 2964 1272 moveto 2936 1260 moveto 2936 1260 lineto stroke 2936 1260 moveto 2912 1248 moveto 2912 1248 lineto stroke 2912 1248 moveto 2888 1236 moveto 2888 1236 lineto stroke 2888 1236 moveto 2860 1224 moveto 2860 1224 lineto stroke 2860 1224 moveto 2836 1216 moveto 2836 1216 lineto stroke 2836 1216 moveto 2808 1204 moveto 2808 1204 lineto stroke 2808 1204 moveto 2784 1192 moveto 2784 1192 lineto stroke 2784 1192 moveto 2756 1180 moveto 2756 1180 lineto stroke 2756 1180 moveto 2732 1172 moveto 2732 1172 lineto stroke 2732 1172 moveto 2704 1160 moveto 2704 1160 lineto stroke 2704 1160 moveto 2676 1148 moveto 2676 1148 lineto stroke 2676 1148 moveto 2652 1140 moveto 2652 1140 lineto stroke 2652 1140 moveto 2624 1128 moveto 2624 1128 lineto stroke 2624 1128 moveto 2596 1116 moveto 2596 1116 lineto stroke 2596 1116 moveto 2568 1108 moveto 2568 1108 lineto stroke 2568 1108 moveto 2544 1096 moveto 2544 1096 lineto stroke 2544 1096 moveto 2516 1084 moveto 2516 1084 lineto stroke 2516 1084 moveto 2488 1076 moveto 2488 1076 lineto stroke 2488 1076 moveto 2460 1064 moveto 2460 1064 lineto stroke 2460 1064 moveto 2432 1056 moveto 2432 1056 lineto stroke 2432 1056 moveto 2404 1044 moveto 2404 1044 lineto stroke 2404 1044 moveto 2376 1032 moveto 2376 1032 lineto stroke 2376 1032 moveto 2344 1024 moveto 2344 1024 lineto stroke 2344 1024 moveto 2316 1012 moveto 2316 1012 lineto stroke 2316 1012 moveto 2288 1004 moveto 2288 1004 lineto stroke 2288 1004 moveto 2260 996 moveto 2260 996 lineto stroke 2260 996 moveto 2232 984 moveto 2232 984 lineto stroke 2232 984 moveto 2200 976 moveto 2200 976 lineto stroke 2200 976 moveto 2172 964 moveto 2172 964 lineto stroke 2172 964 moveto 2144 956 moveto 2144 956 lineto stroke 2144 956 moveto 2112 948 moveto 2112 948 lineto stroke 2112 948 moveto 2084 940 moveto 2084 940 lineto stroke 2084 940 moveto 2052 928 moveto 2052 928 lineto stroke 2052 928 moveto 2024 920 moveto 2024 920 lineto stroke 2024 920 moveto 1992 912 moveto 1992 912 lineto stroke 1992 912 moveto 1964 904 moveto 1964 904 lineto stroke 1964 904 moveto 1932 900 moveto 1932 900 lineto stroke 1932 900 moveto 1904 892 moveto 1904 892 lineto stroke 1904 892 moveto 1876 884 moveto 1876 884 lineto stroke 1876 884 moveto 1844 876 moveto 1844 876 lineto stroke 1844 876 moveto 1816 872 moveto 1816 872 lineto stroke 1816 872 moveto 1788 868 moveto 1788 868 lineto stroke 1788 868 moveto 1760 860 moveto 1760 860 lineto stroke 1760 860 moveto 1732 856 moveto 1732 856 lineto stroke 1732 856 moveto 1704 852 moveto 1704 852 lineto stroke 1704 852 moveto 1680 852 moveto 1680 852 lineto stroke 1680 852 moveto 1656 848 moveto 1656 848 lineto stroke 1656 848 moveto 1632 848 moveto 1632 848 lineto stroke 1632 848 moveto 1608 848 moveto 1608 848 lineto stroke 1608 848 moveto 1588 848 moveto 1588 848 lineto stroke 1588 848 moveto 1568 848 moveto 1568 848 lineto stroke 1568 848 moveto 1548 848 moveto 1548 848 lineto stroke 1548 848 moveto 1532 852 moveto 1532 852 lineto stroke 1532 852 moveto 1516 852 moveto 1516 852 lineto stroke 1516 852 moveto 1504 856 moveto 1504 856 lineto stroke 1504 856 moveto 1492 860 moveto 1492 860 lineto stroke 1492 860 moveto 1480 864 moveto 1480 864 lineto stroke 1480 864 moveto 1472 872 moveto 1472 872 lineto stroke 1472 872 moveto 1464 876 moveto 1464 876 lineto stroke 1464 876 moveto 1456 884 moveto 1456 884 lineto stroke 1456 884 moveto 1452 888 moveto 1452 888 lineto stroke 1452 888 moveto 1448 896 moveto 1448 896 lineto stroke 1448 896 moveto 1444 904 moveto 1444 904 lineto stroke 1444 904 moveto 1440 908 moveto 1440 908 lineto stroke 1440 908 moveto 1440 916 moveto 1440 916 lineto stroke 1440 916 moveto 1440 924 moveto 1440 924 lineto stroke 1440 924 moveto 1440 932 moveto 1440 932 lineto stroke 1440 932 moveto 1440 940 moveto 1440 940 lineto stroke 1440 940 moveto 1440 948 moveto 1440 948 lineto stroke 1440 948 moveto 1444 960 moveto 1444 960 lineto stroke 1444 960 moveto 1444 968 moveto 1444 968 lineto stroke 1444 968 moveto 1448 976 moveto 1448 976 lineto stroke 1448 976 moveto 1452 984 moveto 1452 984 lineto stroke 1452 984 moveto 1456 996 moveto 1456 996 lineto stroke 1456 996 moveto 1464 1004 moveto 1464 1004 lineto stroke 1464 1004 moveto 1468 1012 moveto 1468 1012 lineto stroke 1468 1012 moveto 1476 1024 moveto 1476 1024 lineto stroke 1476 1024 moveto 1480 1032 moveto 1480 1032 lineto stroke 1480 1032 moveto 1488 1040 moveto 1488 1040 lineto stroke 1488 1040 moveto 1496 1052 moveto 1496 1052 lineto stroke 1496 1052 moveto 1504 1060 moveto 1504 1060 lineto stroke 1504 1060 moveto 1512 1072 moveto 1512 1072 lineto stroke 1512 1072 moveto 1520 1080 moveto 1520 1080 lineto stroke 1520 1080 moveto 1528 1092 moveto 1528 1092 lineto stroke 1528 1092 moveto 1536 1100 moveto 1536 1100 lineto stroke 1536 1100 moveto 1548 1112 moveto 1548 1112 lineto stroke 1548 1112 moveto 1556 1124 moveto 1556 1124 lineto stroke 1556 1124 moveto 1564 1132 moveto 1564 1132 lineto stroke 1564 1132 moveto 1576 1144 moveto 1576 1144 lineto stroke 1576 1144 moveto 1588 1152 moveto 1588 1152 lineto stroke 1588 1152 moveto 1596 1164 moveto 1596 1164 lineto stroke 1596 1164 moveto 1608 1172 moveto 1608 1172 lineto stroke 1608 1172 moveto 1620 1184 moveto 1620 1184 lineto stroke 1620 1184 moveto 1632 1196 moveto 1632 1196 lineto stroke 1632 1196 moveto 1644 1204 moveto 1644 1204 lineto stroke 1644 1204 moveto 1656 1216 moveto 1656 1216 lineto stroke 1656 1216 moveto 1668 1228 moveto 1668 1228 lineto stroke 1668 1228 moveto 1680 1236 moveto 1680 1236 lineto stroke 1680 1236 moveto 1692 1248 moveto 1692 1248 lineto stroke 1692 1248 moveto 1704 1260 moveto 1704 1260 lineto stroke 1704 1260 moveto 1720 1268 moveto 1720 1268 lineto stroke 1720 1268 moveto 1732 1280 moveto 1732 1280 lineto stroke 1732 1280 moveto 1744 1292 moveto 1744 1292 lineto stroke 1744 1292 moveto 1760 1304 moveto 1760 1304 lineto stroke 1760 1304 moveto 1772 1312 moveto 1772 1312 lineto stroke 1772 1312 moveto 1788 1324 moveto 1788 1324 lineto stroke 1788 1324 moveto 1804 1336 moveto 1804 1336 lineto stroke 1804 1336 moveto 1816 1344 moveto 1816 1344 lineto stroke 1816 1344 moveto 1832 1356 moveto 1832 1356 lineto stroke 1832 1356 moveto 1848 1368 moveto 1848 1368 lineto stroke 1848 1368 moveto 1860 1380 moveto 1860 1380 lineto stroke 1860 1380 moveto 1876 1392 moveto 1876 1392 lineto stroke 1876 1392 moveto 1892 1400 moveto 1892 1400 lineto stroke 1892 1400 moveto 1908 1412 moveto 1908 1412 lineto stroke 1908 1412 moveto 1924 1424 moveto 1924 1424 lineto stroke 1924 1424 moveto 1940 1436 moveto 1940 1436 lineto stroke 1940 1436 moveto 1956 1444 moveto 1956 1444 lineto stroke 1956 1444 moveto 1972 1456 moveto 1972 1456 lineto stroke 1972 1456 moveto 1988 1468 moveto 1988 1468 lineto stroke 1988 1468 moveto 2008 1480 moveto 2008 1480 lineto stroke 2008 1480 moveto 2024 1492 moveto 2024 1492 lineto stroke 2024 1492 moveto 2040 1500 moveto 2040 1500 lineto stroke 2040 1500 moveto 2056 1512 moveto 2056 1512 lineto stroke 2056 1512 moveto 2076 1524 moveto 2076 1524 lineto stroke 2076 1524 moveto 2092 1536 moveto 2092 1536 lineto stroke 2092 1536 moveto 2112 1548 moveto 2112 1548 lineto stroke 2112 1548 moveto 2128 1556 moveto 2128 1556 lineto stroke 2128 1556 moveto 2148 1568 moveto 2148 1568 lineto stroke 2148 1568 moveto 2168 1580 moveto 2168 1580 lineto stroke 2168 1580 moveto 2188 1592 moveto 2188 1592 lineto stroke 2188 1592 moveto 3720 1596 moveto 3720 1596 lineto stroke 3720 1596 moveto 3720 1596 moveto 3720 1596 lineto stroke 3720 1596 moveto 3720 1596 moveto 3716 1596 lineto stroke 3716 1596 moveto 3740 1596 moveto 3736 1608 lineto stroke 3736 1608 moveto 3728 1616 lineto stroke 3728 1616 moveto 3716 1616 lineto stroke 3716 1616 moveto 3704 1608 lineto stroke 3704 1608 moveto 3700 1596 lineto stroke 3700 1596 moveto 3704 1588 lineto stroke 3704 1588 moveto 3716 1580 lineto stroke 3716 1580 moveto 3728 1580 lineto stroke 3728 1580 moveto 3736 1588 lineto stroke 3736 1588 moveto 3740 1596 lineto stroke 3740 1596 moveto 3736 1596 moveto 3736 1608 lineto stroke 3736 1608 moveto 3728 1612 lineto stroke 3728 1612 moveto 3716 1612 lineto stroke 3716 1612 moveto 3708 1608 lineto stroke 3708 1608 moveto 3704 1596 lineto stroke 3704 1596 moveto 3708 1588 lineto stroke 3708 1588 moveto 3716 1584 lineto stroke 3716 1584 moveto 3728 1584 lineto stroke 3728 1584 moveto 3736 1588 lineto stroke 3736 1588 moveto 3736 1596 lineto stroke 3736 1596 moveto 3732 1596 moveto 3732 1604 lineto stroke 3732 1604 moveto 3724 1608 lineto stroke 3724 1608 moveto 3716 1608 lineto stroke 3716 1608 moveto 3712 1604 lineto stroke 3712 1604 moveto 3708 1596 lineto stroke 3708 1596 moveto 3712 1592 lineto stroke 3712 1592 moveto 3716 1588 lineto stroke 3716 1588 moveto 3724 1588 lineto stroke 3724 1588 moveto 3732 1592 lineto stroke 3732 1592 moveto 3732 1596 lineto stroke 3732 1596 moveto 3728 1596 moveto 3728 1604 lineto stroke 3728 1604 moveto 3724 1604 lineto stroke 3724 1604 moveto 3720 1604 lineto stroke 3720 1604 moveto 3716 1604 lineto stroke 3716 1604 moveto 3712 1596 lineto stroke 3712 1596 moveto 3716 1592 lineto stroke 3716 1592 moveto 3720 1592 lineto stroke 3720 1592 moveto 3724 1592 lineto stroke 3724 1592 moveto 3728 1592 lineto stroke 3728 1592 moveto 3728 1596 lineto stroke 3728 1596 moveto 3724 1596 moveto 3724 1600 lineto stroke 3724 1600 moveto 3720 1600 lineto stroke 3720 1600 moveto 3716 1596 lineto stroke 3716 1596 moveto 3720 1596 lineto stroke 3720 1596 moveto 3724 1596 lineto stroke 3724 1596 moveto 3716 1596 moveto 3712 1592 lineto stroke 3712 1592 moveto 3740 1596 moveto 3736 1608 lineto stroke 3736 1608 moveto 3728 1616 lineto stroke 3728 1616 moveto 3716 1616 lineto stroke 3716 1616 moveto 3704 1608 lineto stroke 3704 1608 moveto 3700 1596 lineto stroke 3700 1596 moveto 3704 1588 lineto stroke 3704 1588 moveto 3716 1580 lineto stroke 3716 1580 moveto 3728 1580 lineto stroke 3728 1580 moveto 3736 1588 lineto stroke 3736 1588 moveto 3740 1596 lineto stroke 3740 1596 moveto 3736 1596 moveto 3736 1608 lineto stroke 3736 1608 moveto 3728 1612 lineto stroke 3728 1612 moveto 3716 1612 lineto stroke 3716 1612 moveto 3708 1608 lineto stroke 3708 1608 moveto 3704 1596 lineto stroke 3704 1596 moveto 3708 1588 lineto stroke 3708 1588 moveto 3716 1584 lineto stroke 3716 1584 moveto 3728 1584 lineto stroke 3728 1584 moveto 3736 1588 lineto stroke 3736 1588 moveto 3736 1596 lineto stroke 3736 1596 moveto 3732 1596 moveto 3732 1604 lineto stroke 3732 1604 moveto 3724 1608 lineto stroke 3724 1608 moveto 3716 1608 lineto stroke 3716 1608 moveto 3712 1604 lineto stroke 3712 1604 moveto 3708 1596 lineto stroke 3708 1596 moveto 3712 1592 lineto stroke 3712 1592 moveto 3716 1588 lineto stroke 3716 1588 moveto 3724 1588 lineto stroke 3724 1588 moveto 3732 1592 lineto stroke 3732 1592 moveto 3732 1596 lineto stroke 3732 1596 moveto 3728 1596 moveto 3728 1604 lineto stroke 3728 1604 moveto 3724 1604 lineto stroke 3724 1604 moveto 3720 1604 lineto stroke 3720 1604 moveto 3716 1604 lineto stroke 3716 1604 moveto 3712 1596 lineto stroke 3712 1596 moveto 3716 1592 lineto stroke 3716 1592 moveto 3720 1592 lineto stroke 3720 1592 moveto 3724 1592 lineto stroke 3724 1592 moveto 3728 1592 lineto stroke 3728 1592 moveto 3728 1596 lineto stroke 3728 1596 moveto 3724 1596 moveto 3724 1600 lineto stroke 3724 1600 moveto 3720 1600 lineto stroke 3720 1600 moveto 3716 1596 lineto stroke 3716 1596 moveto 3720 1596 lineto stroke 3720 1596 moveto 3724 1596 lineto stroke 3724 1596 moveto 3712 1592 moveto 3704 1588 lineto stroke 3704 1588 moveto 3696 1584 lineto stroke 3696 1584 moveto 3688 1580 lineto stroke 3688 1580 moveto 3680 1576 lineto stroke 3680 1576 moveto 3676 1572 lineto stroke 3676 1572 moveto 3664 1568 lineto stroke 3664 1568 moveto 3656 1564 lineto stroke 3656 1564 moveto 3648 1560 lineto stroke 3648 1560 moveto 3636 1552 lineto stroke 3636 1552 moveto 3624 1544 lineto stroke 3624 1544 moveto 3608 1540 lineto stroke 3608 1540 moveto 3592 1532 lineto stroke 3592 1532 moveto 3572 1520 lineto stroke 3572 1520 moveto 3552 1512 lineto stroke 3552 1512 moveto 3532 1500 lineto stroke 3532 1500 moveto 3508 1488 lineto stroke 3508 1488 moveto 3480 1476 lineto stroke 3480 1476 moveto 3448 1464 lineto stroke 3448 1464 moveto 3420 1448 lineto stroke 3420 1448 moveto 3388 1436 lineto stroke 3388 1436 moveto 3352 1420 lineto stroke 3352 1420 moveto 3316 1404 lineto stroke 3316 1404 moveto 3276 1388 lineto stroke 3276 1388 moveto 3236 1372 lineto stroke 3236 1372 moveto 3192 1352 lineto stroke 3192 1352 moveto 3144 1336 lineto stroke 3144 1336 moveto 3100 1316 lineto stroke 3100 1316 moveto 3048 1300 lineto stroke 3048 1300 moveto 2996 1280 lineto stroke 2996 1280 moveto 2936 1260 lineto stroke 2936 1260 moveto 2884 1244 lineto stroke 2884 1244 moveto 2832 1228 lineto stroke 2832 1228 moveto 2772 1212 lineto stroke 2772 1212 moveto 2712 1192 lineto stroke 2712 1192 moveto 2640 1176 lineto stroke 2640 1176 moveto 2568 1156 lineto stroke 2568 1156 moveto 2492 1140 lineto stroke 2492 1140 moveto 2412 1124 lineto stroke 2412 1124 moveto 2344 1112 lineto stroke 2344 1112 moveto 2280 1104 lineto stroke 2280 1104 moveto 2212 1096 lineto stroke 2212 1096 moveto 2144 1088 lineto stroke 2144 1088 moveto 2064 1084 lineto stroke 2064 1084 moveto 1988 1080 lineto stroke 1988 1080 moveto 1912 1080 lineto stroke 1912 1080 moveto 1836 1084 lineto stroke 1836 1084 moveto 1780 1092 lineto stroke 1780 1092 moveto 1724 1100 lineto stroke 1724 1100 moveto 1672 1112 lineto stroke 1672 1112 moveto 1624 1124 lineto stroke 1624 1124 moveto 1568 1144 lineto stroke 1568 1144 moveto 1520 1164 lineto stroke 1520 1164 moveto 1476 1192 lineto stroke 1476 1192 moveto 1440 1220 lineto stroke 1440 1220 moveto 1412 1248 lineto stroke 1412 1248 moveto 1388 1280 lineto stroke 1388 1280 moveto 1372 1312 lineto stroke 1372 1312 moveto 1360 1344 lineto stroke 1360 1344 moveto 1348 1388 lineto stroke 1348 1388 moveto 1344 1432 lineto stroke 1344 1432 moveto 1348 1476 lineto stroke 1348 1476 moveto 1356 1520 lineto stroke 1356 1520 moveto 1368 1564 lineto stroke 1368 1564 moveto 1384 1608 lineto stroke 1384 1608 moveto 1404 1652 lineto stroke 1404 1652 moveto 1424 1692 lineto stroke 1424 1692 moveto 1456 1744 lineto stroke 1456 1744 moveto 1488 1792 lineto stroke 1488 1792 moveto 1520 1836 lineto stroke 1520 1836 moveto 1556 1880 lineto stroke 1556 1880 moveto 1592 1924 lineto stroke 1592 1924 moveto 1628 1960 lineto stroke 1628 1960 moveto 1664 2000 lineto stroke 1664 2000 moveto 1700 2032 lineto stroke 1700 2032 moveto 1740 2072 lineto stroke 1740 2072 moveto 1780 2108 lineto stroke 1780 2108 moveto 1820 2140 lineto stroke 1820 2140 moveto 1852 2168 lineto stroke 1852 2168 moveto 1888 2196 lineto stroke 1888 2196 moveto 1920 2224 lineto stroke 1920 2224 moveto 1952 2244 lineto stroke 1952 2244 moveto 1980 2264 lineto stroke 1980 2264 moveto 2008 2288 lineto stroke 2008 2288 moveto 2036 2308 lineto stroke 2036 2308 moveto 2060 2324 lineto stroke 2060 2324 moveto 2080 2340 lineto stroke 2080 2340 moveto 2100 2352 lineto stroke 2100 2352 moveto 2120 2360 lineto stroke 2120 2360 moveto 2132 2372 lineto stroke 2132 2372 moveto 2144 2380 lineto stroke 2144 2380 moveto 2156 2384 lineto stroke 2156 2384 moveto 2164 2392 lineto stroke 2164 2392 moveto 2172 2396 lineto stroke 2172 2396 moveto 2176 2396 lineto stroke 2176 2396 moveto 2180 2400 lineto stroke 2180 2400 moveto 2188 2404 lineto stroke 2188 2404 moveto 2196 2408 lineto stroke 2196 2408 moveto 3720 1596 moveto 3720 1596 lineto stroke 3720 1596 moveto 3704 1608 moveto 3704 1608 lineto stroke 3704 1608 moveto 3688 1616 moveto 3688 1616 lineto stroke 3688 1616 moveto 3672 1628 moveto 3672 1628 lineto stroke 3672 1628 moveto 3656 1636 moveto 3656 1636 lineto stroke 3656 1636 moveto 3640 1644 moveto 3640 1644 lineto stroke 3640 1644 moveto 3624 1656 moveto 3624 1656 lineto stroke 3624 1656 moveto 3608 1664 moveto 3608 1664 lineto stroke 3608 1664 moveto 3592 1676 moveto 3592 1676 lineto stroke 3592 1676 moveto 3576 1684 moveto 3576 1684 lineto stroke 3576 1684 moveto 3560 1692 moveto 3560 1692 lineto stroke 3560 1692 moveto 3544 1704 moveto 3544 1704 lineto stroke 3544 1704 moveto 3524 1712 moveto 3524 1712 lineto stroke 3524 1712 moveto 3508 1720 moveto 3508 1720 lineto stroke 3508 1720 moveto 3492 1732 moveto 3492 1732 lineto stroke 3492 1732 moveto 3476 1740 moveto 3476 1740 lineto stroke 3476 1740 moveto 3460 1752 moveto 3460 1752 lineto stroke 3460 1752 moveto 3444 1760 moveto 3444 1760 lineto stroke 3444 1760 moveto 3428 1768 moveto 3428 1768 lineto stroke 3428 1768 moveto 3412 1780 moveto 3412 1780 lineto stroke 3412 1780 moveto 3396 1788 moveto 3396 1788 lineto stroke 3396 1788 moveto 3380 1796 moveto 3380 1796 lineto stroke 3380 1796 moveto 3364 1808 moveto 3364 1808 lineto stroke 3364 1808 moveto 3344 1816 moveto 3344 1816 lineto stroke 3344 1816 moveto 3328 1824 moveto 3328 1824 lineto stroke 3328 1824 moveto 3312 1836 moveto 3312 1836 lineto stroke 3312 1836 moveto 3296 1844 moveto 3296 1844 lineto stroke 3296 1844 moveto 3280 1852 moveto 3280 1852 lineto stroke 3280 1852 moveto 3264 1864 moveto 3264 1864 lineto stroke 3264 1864 moveto 3248 1872 moveto 3248 1872 lineto stroke 3248 1872 moveto 3232 1884 moveto 3232 1884 lineto stroke 3232 1884 moveto 3212 1892 moveto 3212 1892 lineto stroke 3212 1892 moveto 3196 1900 moveto 3196 1900 lineto stroke 3196 1900 moveto 3180 1912 moveto 3180 1912 lineto stroke 3180 1912 moveto 3164 1920 moveto 3164 1920 lineto stroke 3164 1920 moveto 3148 1928 moveto 3148 1928 lineto stroke 3148 1928 moveto 3132 1940 moveto 3132 1940 lineto stroke 3132 1940 moveto 3116 1948 moveto 3116 1948 lineto stroke 3116 1948 moveto 3100 1956 moveto 3100 1956 lineto stroke 3100 1956 moveto 3080 1968 moveto 3080 1968 lineto stroke 3080 1968 moveto 3064 1976 moveto 3064 1976 lineto stroke 3064 1976 moveto 3048 1984 moveto 3048 1984 lineto stroke 3048 1984 moveto 3032 1992 moveto 3032 1992 lineto stroke 3032 1992 moveto 3016 2004 moveto 3016 2004 lineto stroke 3016 2004 moveto 3000 2012 moveto 3000 2012 lineto stroke 3000 2012 moveto 2980 2020 moveto 2980 2020 lineto stroke 2980 2020 moveto 2964 2032 moveto 2964 2032 lineto stroke 2964 2032 moveto 2948 2040 moveto 2948 2040 lineto stroke 2948 2040 moveto 2932 2048 moveto 2932 2048 lineto stroke 2932 2048 moveto 2916 2060 moveto 2916 2060 lineto stroke 2916 2060 moveto 2900 2068 moveto 2900 2068 lineto stroke 2900 2068 moveto 2880 2076 moveto 2880 2076 lineto stroke 2880 2076 moveto 2864 2084 moveto 2864 2084 lineto stroke 2864 2084 moveto 2848 2096 moveto 2848 2096 lineto stroke 2848 2096 moveto 2832 2104 moveto 2832 2104 lineto stroke 2832 2104 moveto 2816 2112 moveto 2816 2112 lineto stroke 2816 2112 moveto 2800 2124 moveto 2800 2124 lineto stroke 2800 2124 moveto 2780 2132 moveto 2780 2132 lineto stroke 2780 2132 moveto 2764 2140 moveto 2764 2140 lineto stroke 2764 2140 moveto 2748 2148 moveto 2748 2148 lineto stroke 2748 2148 moveto 2732 2160 moveto 2732 2160 lineto stroke 2732 2160 moveto 2712 2168 moveto 2712 2168 lineto stroke 2712 2168 moveto 2696 2176 moveto 2696 2176 lineto stroke 2696 2176 moveto 2680 2184 moveto 2680 2184 lineto stroke 2680 2184 moveto 2664 2196 moveto 2664 2196 lineto stroke 2664 2196 moveto 2644 2204 moveto 2644 2204 lineto stroke 2644 2204 moveto 2628 2212 moveto 2628 2212 lineto stroke 2628 2212 moveto 2612 2220 moveto 2612 2220 lineto stroke 2612 2220 moveto 2596 2228 moveto 2596 2228 lineto stroke 2596 2228 moveto 2576 2240 moveto 2576 2240 lineto stroke 2576 2240 moveto 2560 2248 moveto 2560 2248 lineto stroke 2560 2248 moveto 2544 2256 moveto 2544 2256 lineto stroke 2544 2256 moveto 2528 2264 moveto 2528 2264 lineto stroke 2528 2264 moveto 2508 2272 moveto 2508 2272 lineto stroke 2508 2272 moveto 2492 2284 moveto 2492 2284 lineto stroke 2492 2284 moveto 2476 2292 moveto 2476 2292 lineto stroke 2476 2292 moveto 2456 2300 moveto 2456 2300 lineto stroke 2456 2300 moveto 2440 2308 moveto 2440 2308 lineto stroke 2440 2308 moveto 2424 2316 moveto 2424 2316 lineto stroke 2424 2316 moveto 2404 2324 moveto 2404 2324 lineto stroke 2404 2324 moveto 2388 2332 moveto 2388 2332 lineto stroke 2388 2332 moveto 2368 2340 moveto 2368 2340 lineto stroke 2368 2340 moveto 2352 2348 moveto 2352 2348 lineto stroke 2352 2348 moveto 2332 2356 moveto 2332 2356 lineto stroke 2332 2356 moveto 2316 2364 moveto 2316 2364 lineto stroke 2316 2364 moveto 2296 2372 moveto 2296 2372 lineto stroke 2296 2372 moveto 2280 2380 moveto 2280 2380 lineto stroke 2280 2380 moveto 2260 2388 moveto 2260 2388 lineto stroke 2260 2388 moveto 2244 2396 moveto 2244 2396 lineto stroke 2244 2396 moveto 2224 2404 moveto 2224 2404 lineto stroke 2224 2404 moveto 2204 2408 moveto 2204 2408 lineto stroke 2204 2408 moveto 2200 1596 moveto 2200 1596 lineto stroke 2200 1596 moveto 2176 1588 moveto 2176 1588 lineto stroke 2176 1588 moveto 2156 1576 moveto 2156 1576 lineto stroke 2156 1576 moveto 2136 1564 moveto 2136 1564 lineto stroke 2136 1564 moveto 2112 1552 moveto 2112 1552 lineto stroke 2112 1552 moveto 2092 1544 moveto 2092 1544 lineto stroke 2092 1544 moveto 2072 1532 moveto 2072 1532 lineto stroke 2072 1532 moveto 2052 1520 moveto 2052 1520 lineto stroke 2052 1520 moveto 2028 1508 moveto 2028 1508 lineto stroke 2028 1508 moveto 2008 1500 moveto 2008 1500 lineto stroke 2008 1500 moveto 1988 1488 moveto 1988 1488 lineto stroke 1988 1488 moveto 1964 1476 moveto 1964 1476 lineto stroke 1964 1476 moveto 1944 1468 moveto 1944 1468 lineto stroke 1944 1468 moveto 1924 1456 moveto 1924 1456 lineto stroke 1924 1456 moveto 1904 1448 moveto 1904 1448 lineto stroke 1904 1448 moveto 1880 1436 moveto 1880 1436 lineto stroke 1880 1436 moveto 1860 1424 moveto 1860 1424 lineto stroke 1860 1424 moveto 1840 1416 moveto 1840 1416 lineto stroke 1840 1416 moveto 1820 1404 moveto 1820 1404 lineto stroke 1820 1404 moveto 1796 1396 moveto 1796 1396 lineto stroke 1796 1396 moveto 1776 1384 moveto 1776 1384 lineto stroke 1776 1384 moveto 1756 1376 moveto 1756 1376 lineto stroke 1756 1376 moveto 1736 1368 moveto 1736 1368 lineto stroke 1736 1368 moveto 1712 1356 moveto 1712 1356 lineto stroke 1712 1356 moveto 1692 1348 moveto 1692 1348 lineto stroke 1692 1348 moveto 1672 1340 moveto 1672 1340 lineto stroke 1672 1340 moveto 1652 1328 moveto 1652 1328 lineto stroke 1652 1328 moveto 1628 1320 moveto 1628 1320 lineto stroke 1628 1320 moveto 1608 1312 moveto 1608 1312 lineto stroke 1608 1312 moveto 1588 1300 moveto 1588 1300 lineto stroke 1588 1300 moveto 1568 1292 moveto 1568 1292 lineto stroke 1568 1292 moveto 1548 1284 moveto 1548 1284 lineto stroke 1548 1284 moveto 1524 1276 moveto 1524 1276 lineto stroke 1524 1276 moveto 1504 1268 moveto 1504 1268 lineto stroke 1504 1268 moveto 1484 1260 moveto 1484 1260 lineto stroke 1484 1260 moveto 1464 1252 moveto 1464 1252 lineto stroke 1464 1252 moveto 1444 1244 moveto 1444 1244 lineto stroke 1444 1244 moveto 1424 1236 moveto 1424 1236 lineto stroke 1424 1236 moveto 1400 1228 moveto 1400 1228 lineto stroke 1400 1228 moveto 1380 1220 moveto 1380 1220 lineto stroke 1380 1220 moveto 1360 1212 moveto 1360 1212 lineto stroke 1360 1212 moveto 1340 1204 moveto 1340 1204 lineto stroke 1340 1204 moveto 1320 1196 moveto 1320 1196 lineto stroke 1320 1196 moveto 1300 1188 moveto 1300 1188 lineto stroke 1300 1188 moveto 1280 1180 moveto 1280 1180 lineto stroke 1280 1180 moveto 1260 1176 moveto 1260 1176 lineto stroke 1260 1176 moveto 1236 1168 moveto 1236 1168 lineto stroke 1236 1168 moveto 1216 1160 moveto 1216 1160 lineto stroke 1216 1160 moveto 1196 1156 moveto 1196 1156 lineto stroke 1196 1156 moveto 1176 1148 moveto 1176 1148 lineto stroke 1176 1148 moveto 1156 1144 moveto 1156 1144 lineto stroke 1156 1144 moveto 1136 1136 moveto 1136 1136 lineto stroke 1136 1136 moveto 1116 1132 moveto 1116 1132 lineto stroke 1116 1132 moveto 1096 1124 moveto 1096 1124 lineto stroke 1096 1124 moveto 1076 1120 moveto 1076 1120 lineto stroke 1076 1120 moveto 1060 1116 moveto 1060 1116 lineto stroke 1060 1116 moveto 1040 1112 moveto 1040 1112 lineto stroke 1040 1112 moveto 1020 1108 moveto 1020 1108 lineto stroke 1020 1108 moveto 1000 1104 moveto 1000 1104 lineto stroke 1000 1104 moveto 980 1100 moveto 980 1100 lineto stroke 980 1100 moveto 964 1096 moveto 964 1096 lineto stroke 964 1096 moveto 944 1092 moveto 944 1092 lineto stroke 944 1092 moveto 924 1088 moveto 924 1088 lineto stroke 924 1088 moveto 908 1088 moveto 908 1088 lineto stroke 908 1088 moveto 888 1084 moveto 888 1084 lineto stroke 888 1084 moveto 872 1084 moveto 872 1084 lineto stroke 872 1084 moveto 852 1080 moveto 852 1080 lineto stroke 852 1080 moveto 836 1080 moveto 836 1080 lineto stroke 836 1080 moveto 820 1080 moveto 820 1080 lineto stroke 820 1080 moveto 804 1080 moveto 804 1080 lineto stroke 804 1080 moveto 788 1084 moveto 788 1084 lineto stroke 788 1084 moveto 772 1084 moveto 772 1084 lineto stroke 772 1084 moveto 756 1088 moveto 756 1088 lineto stroke 756 1088 moveto 744 1092 moveto 744 1092 lineto stroke 744 1092 moveto 728 1096 moveto 728 1096 lineto stroke 728 1096 moveto 716 1100 moveto 716 1100 lineto stroke 716 1100 moveto 704 1108 moveto 704 1108 lineto stroke 704 1108 moveto 696 1116 moveto 696 1116 lineto stroke 696 1116 moveto 688 1124 moveto 688 1124 lineto stroke 688 1124 moveto 680 1136 moveto 680 1136 lineto stroke 680 1136 moveto 676 1148 moveto 676 1148 lineto stroke 676 1148 moveto 676 1160 moveto 676 1160 lineto stroke 676 1160 moveto 676 1176 moveto 676 1176 lineto stroke 676 1176 moveto 676 1192 moveto 676 1192 lineto stroke 676 1192 moveto 680 1208 moveto 680 1208 lineto stroke 680 1208 moveto 688 1228 moveto 688 1228 lineto stroke 688 1228 moveto 696 1244 moveto 696 1244 lineto stroke 696 1244 moveto 704 1264 moveto 704 1264 lineto stroke 704 1264 moveto 716 1284 moveto 716 1284 lineto stroke 716 1284 moveto 728 1300 moveto 728 1300 lineto stroke 728 1300 moveto 740 1320 moveto 740 1320 lineto stroke 740 1320 moveto 752 1340 moveto 752 1340 lineto stroke 752 1340 moveto 768 1356 moveto 768 1356 lineto stroke 768 1356 moveto 784 1376 moveto 784 1376 lineto stroke 784 1376 moveto 800 1396 moveto 800 1396 lineto stroke 800 1396 moveto 816 1412 moveto 816 1412 lineto stroke 816 1412 moveto 832 1432 moveto 832 1432 lineto stroke 832 1432 moveto 848 1448 moveto 848 1448 lineto stroke 848 1448 moveto 864 1468 moveto 864 1468 lineto stroke 864 1468 moveto 884 1484 moveto 884 1484 lineto stroke 884 1484 moveto 900 1504 moveto 900 1504 lineto stroke 900 1504 moveto 920 1520 moveto 920 1520 lineto stroke 920 1520 moveto 940 1536 moveto 940 1536 lineto stroke 940 1536 moveto 956 1556 moveto 956 1556 lineto stroke 956 1556 moveto 976 1572 moveto 976 1572 lineto stroke 976 1572 moveto 996 1588 moveto 996 1588 lineto stroke 996 1588 moveto 1012 1604 moveto 1012 1604 lineto stroke 1012 1604 moveto 1032 1620 moveto 1032 1620 lineto stroke 1032 1620 moveto 1052 1640 moveto 1052 1640 lineto stroke 1052 1640 moveto 1072 1656 moveto 1072 1656 lineto stroke 1072 1656 moveto 1092 1672 moveto 1092 1672 lineto stroke 1092 1672 moveto 1112 1688 moveto 1112 1688 lineto stroke 1112 1688 moveto 1132 1704 moveto 1132 1704 lineto stroke 1132 1704 moveto 1152 1720 moveto 1152 1720 lineto stroke 1152 1720 moveto 1168 1736 moveto 1168 1736 lineto stroke 1168 1736 moveto 1188 1752 moveto 1188 1752 lineto stroke 1188 1752 moveto 1208 1764 moveto 1208 1764 lineto stroke 1208 1764 moveto 1228 1780 moveto 1228 1780 lineto stroke 1228 1780 moveto 1252 1796 moveto 1252 1796 lineto stroke 1252 1796 moveto 1272 1812 moveto 1272 1812 lineto stroke 1272 1812 moveto 1292 1828 moveto 1292 1828 lineto stroke 1292 1828 moveto 1312 1844 moveto 1312 1844 lineto stroke 1312 1844 moveto 1332 1856 moveto 1332 1856 lineto stroke 1332 1856 moveto 1352 1872 moveto 1352 1872 lineto stroke 1352 1872 moveto 1372 1888 moveto 1372 1888 lineto stroke 1372 1888 moveto 1392 1900 moveto 1392 1900 lineto stroke 1392 1900 moveto 1412 1916 moveto 1412 1916 lineto stroke 1412 1916 moveto 1432 1932 moveto 1432 1932 lineto stroke 1432 1932 moveto 1456 1944 moveto 1456 1944 lineto stroke 1456 1944 moveto 1476 1960 moveto 1476 1960 lineto stroke 1476 1960 moveto 1496 1972 moveto 1496 1972 lineto stroke 1496 1972 moveto 1516 1988 moveto 1516 1988 lineto stroke 1516 1988 moveto 1536 2004 moveto 1536 2004 lineto stroke 1536 2004 moveto 1556 2016 moveto 1556 2016 lineto stroke 1556 2016 moveto 1580 2032 moveto 1580 2032 lineto stroke 1580 2032 moveto 1600 2044 moveto 1600 2044 lineto stroke 1600 2044 moveto 1620 2060 moveto 1620 2060 lineto stroke 1620 2060 moveto 1640 2072 moveto 1640 2072 lineto stroke 1640 2072 moveto 1660 2084 moveto 1660 2084 lineto stroke 1660 2084 moveto 1684 2100 moveto 1684 2100 lineto stroke 1684 2100 moveto 1704 2112 moveto 1704 2112 lineto stroke 1704 2112 moveto 1724 2128 moveto 1724 2128 lineto stroke 1724 2128 moveto 1744 2140 moveto 1744 2140 lineto stroke 1744 2140 moveto 1764 2152 moveto 1764 2152 lineto stroke 1764 2152 moveto 1788 2168 moveto 1788 2168 lineto stroke 1788 2168 moveto 1808 2180 moveto 1808 2180 lineto stroke 1808 2180 moveto 1828 2192 moveto 1828 2192 lineto stroke 1828 2192 moveto 1848 2204 moveto 1848 2204 lineto stroke 1848 2204 moveto 1872 2220 moveto 1872 2220 lineto stroke 1872 2220 moveto 1892 2232 moveto 1892 2232 lineto stroke 1892 2232 moveto 1912 2244 moveto 1912 2244 lineto stroke 1912 2244 moveto 1932 2256 moveto 1932 2256 lineto stroke 1932 2256 moveto 1956 2268 moveto 1956 2268 lineto stroke 1956 2268 moveto 1976 2284 moveto 1976 2284 lineto stroke 1976 2284 moveto 1996 2296 moveto 1996 2296 lineto stroke 1996 2296 moveto 2016 2308 moveto 2016 2308 lineto stroke 2016 2308 moveto 2040 2320 moveto 2040 2320 lineto stroke 2040 2320 moveto 2060 2332 moveto 2060 2332 lineto stroke 2060 2332 moveto 2080 2344 moveto 2080 2344 lineto stroke 2080 2344 moveto 2100 2356 moveto 2100 2356 lineto stroke 2100 2356 moveto 2124 2368 moveto 2124 2368 lineto stroke 2124 2368 moveto 2144 2380 moveto 2144 2380 lineto stroke 2144 2380 moveto 2164 2392 moveto 2164 2392 lineto stroke 2164 2392 moveto 2188 2404 moveto 2188 2404 lineto stroke 2188 2404 moveto 3720 1600 moveto 3720 1600 lineto stroke 3720 1600 moveto 3700 1588 moveto 3700 1588 lineto stroke 3700 1588 moveto 3680 1576 moveto 3680 1576 lineto stroke 3680 1576 moveto 3656 1564 moveto 3656 1564 lineto stroke 3656 1564 moveto 3636 1552 moveto 3636 1552 lineto stroke 3636 1552 moveto 3616 1540 moveto 3616 1540 lineto stroke 3616 1540 moveto 3592 1528 moveto 3592 1528 lineto stroke 3592 1528 moveto 3572 1520 moveto 3572 1520 lineto stroke 3572 1520 moveto 3548 1508 moveto 3548 1508 lineto stroke 3548 1508 moveto 3528 1496 moveto 3528 1496 lineto stroke 3528 1496 moveto 3504 1484 moveto 3504 1484 lineto stroke 3504 1484 moveto 3480 1472 moveto 3480 1472 lineto stroke 3480 1472 moveto 3460 1460 moveto 3460 1460 lineto stroke 3460 1460 moveto 3436 1452 moveto 3436 1452 lineto stroke 3436 1452 moveto 3412 1440 moveto 3412 1440 lineto stroke 3412 1440 moveto 3392 1428 moveto 3392 1428 lineto stroke 3392 1428 moveto 3368 1416 moveto 3368 1416 lineto stroke 3368 1416 moveto 3344 1404 moveto 3344 1404 lineto stroke 3344 1404 moveto 3320 1392 moveto 3320 1392 lineto stroke 3320 1392 moveto 3296 1384 moveto 3296 1384 lineto stroke 3296 1384 moveto 3276 1372 moveto 3276 1372 lineto stroke 3276 1372 moveto 3252 1360 moveto 3252 1360 lineto stroke 3252 1360 moveto 3228 1348 moveto 3228 1348 lineto stroke 3228 1348 moveto 3204 1336 moveto 3204 1336 lineto stroke 3204 1336 moveto 3180 1324 moveto 3180 1324 lineto stroke 3180 1324 moveto 3156 1316 moveto 3156 1316 lineto stroke 3156 1316 moveto 3132 1304 moveto 3132 1304 lineto stroke 3132 1304 moveto 3108 1292 moveto 3108 1292 lineto stroke 3108 1292 moveto 3080 1280 moveto 3080 1280 lineto stroke 3080 1280 moveto 3056 1268 moveto 3056 1268 lineto stroke 3056 1268 moveto 3032 1260 moveto 3032 1260 lineto stroke 3032 1260 moveto 3008 1248 moveto 3008 1248 lineto stroke 3008 1248 moveto 2984 1236 moveto 2984 1236 lineto stroke 2984 1236 moveto 2956 1224 moveto 2956 1224 lineto stroke 2956 1224 moveto 2932 1212 moveto 2932 1212 lineto stroke 2932 1212 moveto 2908 1204 moveto 2908 1204 lineto stroke 2908 1204 moveto 2880 1192 moveto 2880 1192 lineto stroke 2880 1192 moveto 2856 1180 moveto 2856 1180 lineto stroke 2856 1180 moveto 2828 1168 moveto 2828 1168 lineto stroke 2828 1168 moveto 2804 1160 moveto 2804 1160 lineto stroke 2804 1160 moveto 2776 1148 moveto 2776 1148 lineto stroke 2776 1148 moveto 2752 1136 moveto 2752 1136 lineto stroke 2752 1136 moveto 2724 1128 moveto 2724 1128 lineto stroke 2724 1128 moveto 2700 1116 moveto 2700 1116 lineto stroke 2700 1116 moveto 2672 1104 moveto 2672 1104 lineto stroke 2672 1104 moveto 2644 1092 moveto 2644 1092 lineto stroke 2644 1092 moveto 2616 1084 moveto 2616 1084 lineto stroke 2616 1084 moveto 2592 1072 moveto 2592 1072 lineto stroke 2592 1072 moveto 2564 1060 moveto 2564 1060 lineto stroke 2564 1060 moveto 2536 1052 moveto 2536 1052 lineto stroke 2536 1052 moveto 2508 1040 moveto 2508 1040 lineto stroke 2508 1040 moveto 2480 1028 moveto 2480 1028 lineto stroke 2480 1028 moveto 2452 1020 moveto 2452 1020 lineto stroke 2452 1020 moveto 2424 1008 moveto 2424 1008 lineto stroke 2424 1008 moveto 2396 1000 moveto 2396 1000 lineto stroke 2396 1000 moveto 2368 988 moveto 2368 988 lineto stroke 2368 988 moveto 2340 980 moveto 2340 980 lineto stroke 2340 980 moveto 2312 968 moveto 2312 968 lineto stroke 2312 968 moveto 2284 960 moveto 2284 960 lineto stroke 2284 960 moveto 2256 948 moveto 2256 948 lineto stroke 2256 948 moveto 2228 940 moveto 2228 940 lineto stroke 2228 940 moveto 2196 928 moveto 2196 928 lineto stroke 2196 928 moveto 2168 920 moveto 2168 920 lineto stroke 2168 920 moveto 2140 908 moveto 2140 908 lineto stroke 2140 908 moveto 2108 900 moveto 2108 900 lineto stroke 2108 900 moveto 2080 892 moveto 2080 892 lineto stroke 2080 892 moveto 2048 884 moveto 2048 884 lineto stroke 2048 884 moveto 2020 872 moveto 2020 872 lineto stroke 2020 872 moveto 1992 864 moveto 1992 864 lineto stroke 1992 864 moveto 1960 856 moveto 1960 856 lineto stroke 1960 856 moveto 1932 848 moveto 1932 848 lineto stroke 1932 848 moveto 1900 840 moveto 1900 840 lineto stroke 1900 840 moveto 1872 832 moveto 1872 832 lineto stroke 1872 832 moveto 1840 824 moveto 1840 824 lineto stroke 1840 824 moveto 1812 820 moveto 1812 820 lineto stroke 1812 820 moveto 1784 812 moveto 1784 812 lineto stroke 1784 812 moveto 1752 804 moveto 1752 804 lineto stroke 1752 804 moveto 1724 800 moveto 1724 800 lineto stroke 1724 800 moveto 1696 796 moveto 1696 796 lineto stroke 1696 796 moveto 1668 792 moveto 1668 792 lineto stroke 1668 792 moveto 1640 788 moveto 1640 788 lineto stroke 1640 788 moveto 1616 784 moveto 1616 784 lineto stroke 1616 784 moveto 1588 780 moveto 1588 780 lineto stroke 1588 780 moveto 1564 780 moveto 1564 780 lineto stroke 1564 780 moveto 1540 776 moveto 1540 776 lineto stroke 1540 776 moveto 1520 776 moveto 1520 776 lineto stroke 1520 776 moveto 1500 776 moveto 1500 776 lineto stroke 1500 776 moveto 1480 776 moveto 1480 776 lineto stroke 1480 776 moveto 1460 780 moveto 1460 780 lineto stroke 1460 780 moveto 1444 780 moveto 1444 780 lineto stroke 1444 780 moveto 1428 784 moveto 1428 784 lineto stroke 1428 784 moveto 1416 788 moveto 1416 788 lineto stroke 1416 788 moveto 1404 792 moveto 1404 792 lineto stroke 1404 792 moveto 1392 796 moveto 1392 796 lineto stroke 1392 796 moveto 1384 800 moveto 1384 800 lineto stroke 1384 800 moveto 1372 808 moveto 1372 808 lineto stroke 1372 808 moveto 1368 812 moveto 1368 812 lineto stroke 1368 812 moveto 1360 820 moveto 1360 820 lineto stroke 1360 820 moveto 1356 824 moveto 1356 824 lineto stroke 1356 824 moveto 1352 832 moveto 1352 832 lineto stroke 1352 832 moveto 1348 840 moveto 1348 840 lineto stroke 1348 840 moveto 1348 848 moveto 1348 848 lineto stroke 1348 848 moveto 1348 856 moveto 1348 856 lineto stroke 1348 856 moveto 1344 864 moveto 1344 864 lineto stroke 1344 864 moveto 1348 872 moveto 1348 872 lineto stroke 1348 872 moveto 1348 880 moveto 1348 880 lineto stroke 1348 880 moveto 1348 888 moveto 1348 888 lineto stroke 1348 888 moveto 1352 896 moveto 1352 896 lineto stroke 1352 896 moveto 1356 904 moveto 1356 904 lineto stroke 1356 904 moveto 1360 916 moveto 1360 916 lineto stroke 1360 916 moveto 1364 924 moveto 1364 924 lineto stroke 1364 924 moveto 1368 932 moveto 1368 932 lineto stroke 1368 932 moveto 1372 940 moveto 1372 940 lineto stroke 1372 940 moveto 1380 952 moveto 1380 952 lineto stroke 1380 952 moveto 1384 960 moveto 1384 960 lineto stroke 1384 960 moveto 1392 972 moveto 1392 972 lineto stroke 1392 972 moveto 1396 980 moveto 1396 980 lineto stroke 1396 980 moveto 1404 988 moveto 1404 988 lineto stroke 1404 988 moveto 1412 1000 moveto 1412 1000 lineto stroke 1412 1000 moveto 1420 1008 moveto 1420 1008 lineto stroke 1420 1008 moveto 1428 1020 moveto 1428 1020 lineto stroke 1428 1020 moveto 1436 1028 moveto 1436 1028 lineto stroke 1436 1028 moveto 1448 1040 moveto 1448 1040 lineto stroke 1448 1040 moveto 1456 1048 moveto 1456 1048 lineto stroke 1456 1048 moveto 1464 1060 moveto 1464 1060 lineto stroke 1464 1060 moveto 1476 1072 moveto 1476 1072 lineto stroke 1476 1072 moveto 1484 1080 moveto 1484 1080 lineto stroke 1484 1080 moveto 1496 1092 moveto 1496 1092 lineto stroke 1496 1092 moveto 1508 1100 moveto 1508 1100 lineto stroke 1508 1100 moveto 1516 1112 moveto 1516 1112 lineto stroke 1516 1112 moveto 1528 1124 moveto 1528 1124 lineto stroke 1528 1124 moveto 1540 1132 moveto 1540 1132 lineto stroke 1540 1132 moveto 1552 1144 moveto 1552 1144 lineto stroke 1552 1144 moveto 1564 1156 moveto 1564 1156 lineto stroke 1564 1156 moveto 1576 1164 moveto 1576 1164 lineto stroke 1576 1164 moveto 1588 1176 moveto 1588 1176 lineto stroke 1588 1176 moveto 1600 1188 moveto 1600 1188 lineto stroke 1600 1188 moveto 1612 1196 moveto 1612 1196 lineto stroke 1612 1196 moveto 1628 1208 moveto 1628 1208 lineto stroke 1628 1208 moveto 1640 1220 moveto 1640 1220 lineto stroke 1640 1220 moveto 1652 1228 moveto 1652 1228 lineto stroke 1652 1228 moveto 1668 1240 moveto 1668 1240 lineto stroke 1668 1240 moveto 1680 1252 moveto 1680 1252 lineto stroke 1680 1252 moveto 1696 1260 moveto 1696 1260 lineto stroke 1696 1260 moveto 1708 1272 moveto 1708 1272 lineto stroke 1708 1272 moveto 1724 1284 moveto 1724 1284 lineto stroke 1724 1284 moveto 1736 1296 moveto 1736 1296 lineto stroke 1736 1296 moveto 1752 1304 moveto 1752 1304 lineto stroke 1752 1304 moveto 1768 1316 moveto 1768 1316 lineto stroke 1768 1316 moveto 1780 1328 moveto 1780 1328 lineto stroke 1780 1328 moveto 1796 1340 moveto 1796 1340 lineto stroke 1796 1340 moveto 1812 1348 moveto 1812 1348 lineto stroke 1812 1348 moveto 1828 1360 moveto 1828 1360 lineto stroke 1828 1360 moveto 1844 1372 moveto 1844 1372 lineto stroke 1844 1372 moveto 1860 1384 moveto 1860 1384 lineto stroke 1860 1384 moveto 1876 1392 moveto 1876 1392 lineto stroke 1876 1392 moveto 1892 1404 moveto 1892 1404 lineto stroke 1892 1404 moveto 1908 1416 moveto 1908 1416 lineto stroke 1908 1416 moveto 1924 1428 moveto 1924 1428 lineto stroke 1924 1428 moveto 1940 1440 moveto 1940 1440 lineto stroke 1940 1440 moveto 1956 1448 moveto 1956 1448 lineto stroke 1956 1448 moveto 1976 1460 moveto 1976 1460 lineto stroke 1976 1460 moveto 1992 1472 moveto 1992 1472 lineto stroke 1992 1472 moveto 2008 1484 moveto 2008 1484 lineto stroke 2008 1484 moveto 2028 1496 moveto 2028 1496 lineto stroke 2028 1496 moveto 2044 1504 moveto 2044 1504 lineto stroke 2044 1504 moveto 2064 1516 moveto 2064 1516 lineto stroke 2064 1516 moveto 2080 1528 moveto 2080 1528 lineto stroke 2080 1528 moveto 2100 1540 moveto 2100 1540 lineto stroke 2100 1540 moveto 2116 1552 moveto 2116 1552 lineto stroke 2116 1552 moveto 2136 1564 moveto 2136 1564 lineto stroke 2136 1564 moveto 2156 1572 moveto 2156 1572 lineto stroke 2156 1572 moveto 2176 1584 moveto 2176 1584 lineto stroke 2176 1584 moveto showpage grestore auto/07p/doc/include/kpr4.ps0000640000175000017500000002463713570013207013672 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale /lthick 5 def %% line thickness % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (4) 495 460 PR (.) 550 460 PR 896 460 moveto (-) 896 460 PR (3) 951 460 PR (.) 1006 460 PR 1056 540 moveto 1056 600 lineto stroke 1056 600 moveto 1352 460 moveto (-) 1352 460 PR (2) 1407 460 PR (.) 1462 460 PR 1512 540 moveto 1512 600 lineto stroke 1512 600 moveto 1808 460 moveto (-) 1808 460 PR (1) 1863 460 PR (.) 1918 460 PR 1968 540 moveto 1968 600 lineto stroke 1968 600 moveto 2268 460 moveto (0) 2323 460 PR (.) 2378 460 PR 2428 540 moveto 2428 600 lineto stroke 2428 600 moveto 2724 460 moveto (1) 2779 460 PR (.) 2834 460 PR 2884 540 moveto 2884 600 lineto stroke 2884 600 moveto 3180 460 moveto (2) 3235 460 PR (.) 3290 460 PR 3340 540 moveto 3340 600 lineto stroke 3340 600 moveto 3636 460 moveto (3) 3691 460 PR (.) 3746 460 PR 3796 540 moveto 3796 2600 lineto stroke 3796 2600 moveto 4 600 moveto (-) 389 600 PR (2) 444 600 PR (.) 499 600 PR 4 820 moveto (-) 389 820 PR (1) 444 820 PR (.) 499 820 PR 540 820 moveto 600 820 lineto stroke 600 820 moveto 4 1044 moveto (0) 444 1044 PR (.) 499 1044 PR 540 1044 moveto 600 1044 lineto stroke 600 1044 moveto 4 1264 moveto (1) 444 1264 PR (.) 499 1264 PR 540 1264 moveto 600 1264 lineto stroke 600 1264 moveto 4 1488 moveto (2) 444 1488 PR (.) 499 1488 PR 540 1488 moveto 600 1488 lineto stroke 600 1488 moveto 4 1708 moveto (3) 444 1708 PR (.) 499 1708 PR 540 1708 moveto 600 1708 lineto stroke 600 1708 moveto 4 1932 moveto (4) 444 1932 PR (.) 499 1932 PR 540 1932 moveto 600 1932 lineto stroke 600 1932 moveto 4 2152 moveto (5) 444 2152 PR (.) 499 2152 PR 540 2152 moveto 600 2152 lineto stroke 600 2152 moveto 4 2376 moveto (6) 444 2376 PR (.) 499 2376 PR 540 2376 moveto 600 2376 lineto stroke 600 2376 moveto 4 2596 moveto (7) 444 2596 PR (.) 499 2596 PR 540 2596 moveto 3800 2596 lineto stroke 3800 2596 moveto 2428 1040 moveto 2428 1040 lineto stroke 2428 1040 moveto 2556 1136 moveto 2432 1036 lineto stroke 2432 1036 moveto 2572 1148 moveto (1) 2572 1148 PR 2300 948 moveto 2424 1048 lineto stroke 2424 1048 moveto 2224 884 moveto (2) 2224 884 PR 0 3068 moveto 2428 1040 moveto lthick setlinewidth 2432 1032 lineto stroke 2432 1032 moveto 2440 1028 lineto stroke 2440 1028 moveto 2448 1020 lineto stroke 2448 1020 moveto 2456 1016 lineto stroke 2456 1016 moveto 2468 1008 lineto stroke 2468 1008 moveto 2476 1008 lineto stroke 2476 1008 moveto 2488 1004 lineto stroke 2488 1004 moveto 2500 1000 lineto stroke 2500 1000 moveto 2512 996 lineto stroke 2512 996 moveto 2528 992 lineto stroke 2528 992 moveto 2548 988 lineto stroke 2548 988 moveto 2568 980 lineto stroke 2568 980 moveto 2596 976 lineto stroke 2596 976 moveto 2624 972 lineto stroke 2624 972 moveto 2656 968 lineto stroke 2656 968 moveto 2692 964 lineto stroke 2692 964 moveto 2732 964 lineto stroke 2732 964 moveto 2772 964 lineto stroke 2772 964 moveto 2816 964 lineto stroke 2816 964 moveto 2860 964 lineto stroke 2860 964 moveto 2908 968 lineto stroke 2908 968 moveto 2956 976 lineto stroke 2956 976 moveto 3004 988 lineto stroke 3004 988 moveto 3044 996 lineto stroke 3044 996 moveto 3084 1012 lineto stroke 3084 1012 moveto 3120 1032 lineto stroke 3120 1032 moveto 3152 1052 lineto stroke 3152 1052 moveto 3176 1076 lineto stroke 3176 1076 moveto 3196 1104 lineto stroke 3196 1104 moveto 3204 1136 lineto stroke 3204 1136 moveto 3204 1172 lineto stroke 3204 1172 moveto 3192 1216 lineto stroke 3192 1216 moveto 3164 1264 lineto stroke 3164 1264 moveto 3120 1316 lineto stroke 3120 1316 moveto 3060 1368 lineto stroke 3060 1368 moveto 2996 1420 lineto stroke 2996 1420 moveto 2920 1468 lineto stroke 2920 1468 moveto 2832 1520 lineto stroke 2832 1520 moveto 2736 1572 lineto stroke 2736 1572 moveto 2616 1628 lineto stroke 2616 1628 moveto 2492 1680 lineto stroke 2492 1680 moveto 2356 1732 lineto stroke 2356 1732 moveto 2216 1780 lineto stroke 2216 1780 moveto 2048 1832 lineto stroke 2048 1832 moveto 1880 1880 lineto stroke 1880 1880 moveto 1712 1920 lineto stroke 1712 1920 moveto 1552 1952 lineto stroke 1552 1952 moveto 1388 1980 lineto stroke 1388 1980 moveto 1236 2000 lineto stroke 1236 2000 moveto 1104 2008 lineto stroke 1104 2008 moveto 988 2012 lineto stroke 988 2012 moveto 900 2004 lineto stroke 900 2004 moveto 832 1996 lineto stroke 832 1996 moveto 780 1976 lineto stroke 780 1976 moveto 740 1956 lineto stroke 740 1956 moveto 716 1928 lineto stroke 716 1928 moveto 712 1896 lineto stroke 712 1896 moveto 720 1860 lineto stroke 720 1860 moveto 744 1820 lineto stroke 744 1820 moveto 788 1772 lineto stroke 788 1772 moveto 844 1724 lineto stroke 844 1724 moveto 912 1672 lineto stroke 912 1672 moveto 988 1624 lineto stroke 988 1624 moveto 1084 1568 lineto stroke 1084 1568 moveto 1188 1516 lineto stroke 1188 1516 moveto 1292 1464 lineto stroke 1292 1464 moveto 1396 1416 lineto stroke 1396 1416 moveto 1496 1372 lineto stroke 1496 1372 moveto 1588 1332 lineto stroke 1588 1332 moveto 1676 1296 lineto stroke 1676 1296 moveto 1760 1264 lineto stroke 1760 1264 moveto 1844 1232 lineto stroke 1844 1232 moveto 1920 1204 lineto stroke 1920 1204 moveto 1992 1180 lineto stroke 1992 1180 moveto 2052 1160 lineto stroke 2052 1160 moveto 2124 1136 lineto stroke 2124 1136 moveto 2180 1116 lineto stroke 2180 1116 moveto 2232 1100 lineto stroke 2232 1100 moveto 2272 1088 lineto stroke 2272 1088 moveto 2312 1076 lineto stroke 2312 1076 moveto 2340 1068 lineto stroke 2340 1068 moveto 2364 1060 lineto stroke 2364 1060 moveto 2380 1056 lineto stroke 2380 1056 moveto 2396 1052 lineto stroke 2396 1052 moveto 2404 1048 lineto stroke 2404 1048 moveto 2416 1044 lineto stroke 2416 1044 moveto 2424 1044 lineto stroke 2424 1044 moveto 2424 1044 moveto 2424 1044 lineto stroke 2424 1044 moveto 2424 1044 moveto 2420 1044 lineto stroke 2420 1044 moveto 2412 1036 lineto stroke 2412 1036 moveto 2408 1024 lineto stroke 2408 1024 moveto 2408 1012 lineto stroke 2408 1012 moveto 2412 1004 lineto stroke 2412 1004 moveto 2416 992 lineto stroke 2416 992 moveto 2420 984 lineto stroke 2420 984 moveto 2428 972 lineto stroke 2428 972 moveto 2444 956 lineto stroke 2444 956 moveto 2460 940 lineto stroke 2460 940 moveto 2480 924 lineto stroke 2480 924 moveto 2512 908 lineto stroke 2512 908 moveto 2544 892 lineto stroke 2544 892 moveto 2588 872 lineto stroke 2588 872 moveto 2636 856 lineto stroke 2636 856 moveto 2688 844 lineto stroke 2688 844 moveto 2748 832 lineto stroke 2748 832 moveto 2812 824 lineto stroke 2812 824 moveto 2880 820 lineto stroke 2880 820 moveto 2952 820 lineto stroke 2952 820 moveto 3024 824 lineto stroke 3024 824 moveto 3096 836 lineto stroke 3096 836 moveto 3164 856 lineto stroke 3164 856 moveto 3232 884 lineto stroke 3232 884 moveto 3288 920 lineto stroke 3288 920 moveto 3336 964 lineto stroke 3336 964 moveto 3376 1016 lineto stroke 3376 1016 moveto 3396 1076 lineto stroke 3396 1076 moveto 3404 1148 lineto stroke 3404 1148 moveto 3392 1228 lineto stroke 3392 1228 moveto 3364 1312 lineto stroke 3364 1312 moveto 3312 1404 lineto stroke 3312 1404 moveto 3236 1504 lineto stroke 3236 1504 moveto 3136 1608 lineto stroke 3136 1608 moveto 3020 1712 lineto stroke 3020 1712 moveto 2880 1816 lineto stroke 2880 1816 moveto 2728 1916 lineto stroke 2728 1916 moveto 2560 2012 lineto stroke 2560 2012 moveto 2388 2100 lineto stroke 2388 2100 moveto 2208 2176 lineto stroke 2208 2176 moveto 2024 2248 lineto stroke 2024 2248 moveto 1844 2304 lineto stroke 1844 2304 moveto 1672 2348 lineto stroke 1672 2348 moveto 1512 2380 lineto stroke 1512 2380 moveto 1364 2400 lineto stroke 1364 2400 moveto 1232 2408 lineto stroke 1232 2408 moveto 1116 2400 lineto stroke 1116 2400 moveto 1024 2384 lineto stroke 1024 2384 moveto 952 2352 lineto stroke 952 2352 moveto 900 2312 lineto stroke 900 2312 moveto 872 2264 lineto stroke 872 2264 moveto 864 2208 lineto stroke 864 2208 moveto 876 2140 lineto stroke 876 2140 moveto 908 2068 lineto stroke 908 2068 moveto 960 1992 lineto stroke 960 1992 moveto 1024 1912 lineto stroke 1024 1912 moveto 1112 1824 lineto stroke 1112 1824 moveto 1208 1740 lineto stroke 1208 1740 moveto 1312 1660 lineto stroke 1312 1660 moveto 1416 1584 lineto stroke 1416 1584 moveto 1528 1508 lineto stroke 1528 1508 moveto 1640 1440 lineto stroke 1640 1440 moveto 1744 1376 lineto stroke 1744 1376 moveto 1840 1320 lineto stroke 1840 1320 moveto 1928 1276 lineto stroke 1928 1276 moveto 2004 1232 lineto stroke 2004 1232 moveto 2076 1196 lineto stroke 2076 1196 moveto 2136 1168 lineto stroke 2136 1168 moveto 2200 1140 lineto stroke 2200 1140 moveto 2252 1116 lineto stroke 2252 1116 moveto 2296 1096 lineto stroke 2296 1096 moveto 2328 1080 lineto stroke 2328 1080 moveto 2356 1068 lineto stroke 2356 1068 moveto 2380 1060 lineto stroke 2380 1060 moveto 2396 1052 lineto stroke 2396 1052 moveto 2408 1048 lineto stroke 2408 1048 moveto 2412 1048 lineto stroke 2412 1048 moveto 2420 1044 lineto stroke 2420 1044 moveto showpage auto/07p/doc/include/pp22.eps0000640000175000017500000011335013570013207013731 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 34 160 584 602 %%HiResBoundingBox: 34.037990 160.910988 583.037990 601.910989 % Produced by xpdf/pdftops 3.02 %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 612 792 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font XSTBFC+CMR12 %!FontType1-1.0: XSTBFC+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /XSTBFC+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA3238AF3EFFD3873EDB9D6 67A8FAFE3D0CEE9145957731453B5E20FC4D3BA4DEB725B8264148A3DBFC6C3C 33E93BEC610344F1E09F358AF50B1F6936107077DB86A38A0F47C3E9C6C3F986 E37DF2D1C07A580A3C81975DE27D9857FF8447C2D2B95627B846F50EF9A956FF 584EC84BEED6E9FFE02F58449AED32ED524CB138740078565B1DC693D43F80EF 4A0620932565B05EDC1AC9F704C60C8FCE14CFBF86FA797B220056BE39044F40 ABC0E21D485EF33C1C1D95B14208569184F917BD7DCBD0C0176B446BB1C6F871 564458A379803DC9D5BFB4440478A2A5DC92C6440448E34CFE792BAF02C33723 E1E822F0C0478692CB339B296ECBD0831779B4376BF3C8B65A4D11684302DEB1 82BAE6A8144A66A89D6257CDD3852FC5480F3C1A8B4724A73A45276EE1EF96AD 51B1B02A50E0FCCA7894F5971DB896BAB4BB74C94F41FF078359396D60193155 8F5A49C04FE15324D6F045FAC208562B06525928A143AA617D8AB06DA0D7435A E73F98A49D27438E816D6B169F22A504BA52DB0FBA58816FAD8E166587369492 4CDF4BE8E146F54BF27E87BFC614E0D3A2D3068E2EFC80B2751E50E63FCF9E15 1339C51AE24DFEB4CC7CB49F138CECA44B17B0071E3CBDBF077706EFACAA45B3 0A2157B6ED40BA7407D5F607069E12068C2D7A4AF52C535A736C5B7FC8B2FF23 C237BF400FDA4345E4B1F7A466CF2A8B4C6302C342484883A0B9900DEB04365D D5F719BF416D0481B5187275E2BE857727162022342E6332C3BAE929D4C31645 BCABACECE29B109BD68FC811F89F50A08F95F6FEF750A9F1BB6B5DA119A6FB37 EEAA7B393962D51C52403C916FEDE9F99EDC0BA862497197DCEEE95AB7D11C37 386AD13DD1E9FFCA487755215254219512CC676D1690700B77A4D8AEA097D8B4 49BBED0D6754D5F4A7BF23A4FAF3A28EE835021B9C394725C450A64D986AE676 6062EDAE3B90C0487B1F4891DDC376322759611E3B0C412BDD51592C2FA6CB68 68E2530913A7A4CB1C41282EA99864389CFD774745842403A915C224BABCB4A8 C984F263CA177FC973A11060B59389B626BCB30F18710B1E8069D3E18B98A329 32C91D75585F88594AEDF04E0F92488FE9E5873DD3BF067284042185F35EEAA1 9051EC9A7401E232C869F5F9DF61B3572F581E06B8C0F8104BEB6518D5868D21 4E039D6C2D2D1DADAFD49E4C50E3C88C46FC9F03F91F4DF8D5BCFF1D7FE844B3 3B5DE0F672636C7A16862B7A264AE3F9C65906F0B72DAEAE3DAC1F6153A6E322 FE282DD9092C02DCB7280476EFD913E5E999618C8BA4D448FAF1A5405F224AC6 A10F29F96A8CBD4DC6B7B671A5D61383CF4C457973C77C1A0C4ABC7971390432 41146569148A604276F68B4318346DE328142E8F6A2D754CA2B2C8837C9482EC 16B20C636AE6E1CDA1BAD7D406865C91AF530F848125CC619F60CF33D51959E1 7D965235EDAE60119451844BA66FA64D874597158C19D8C1F7E56B7E89E724E5 D8542F77106446DCD7B281B45E1D5802527089307923B629985DA424C82F1F23 A913C297AE3B00549022ABB79985F6D6542E65FA1606DB15C997A91FE2D34EBA 07C4A82C58360801DF0F5F46A429B3A6E272AE7E133470DB832C894F503477F0 43F8481BCBF5CA083CFE4AAD5382575B03CDA46F0EFC549D49693DF6E514B609 3E30A327CFD54CE563BB5C78C8FE13DFD28875B8865AC088FF7306D4022CB82E 75DA4E3C868FEAE12911A993F50296D68B2AAC4447E8EE237851AC7827643D01 131D4E0A348D7D1CC2F5E6C2E709F6AEA93A4B77173FBC8EF71C0E155CC53709 E07CEA29F7CB53FA01C160FDBB786C8A447D3CF238941EEBAC0EEBEF5B2B1A9E EAA054493A3DA5D76AFCF4464DA74997C6EA088B365E52928CAEBFDEF1434ACC 29FF1CC668D38BB48244C6BBAA4C7808CBDE091A6FD2C4F493B0B1F61EF59E25 5738BFA1BEE4FB257FFFD3229F7161749703EE663A0F96024C27F694DAF33BE8 C3606E1CE3863D62ABA4BF96B94694F4C99F2E08EB748E7F86E99C03C87EFD65 271AA35E81E30A85832C3B50F33E53B686D51C9563E06F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /XSTBFC+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 612 792 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 612 792 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 612 792 re W q q [0.1 0 0 0.1 0 0] cm q 315.602 1754.4 5489.998 4410 re W /DeviceGray {} cs [1] sc 315.602 1754.4 5490 4410 re f 10 w 2 J /DeviceGray {} CS [1] SC 315.602 1754.4 5489.998 4410 re S 1035.6 2114.4 4410 3690 re f /DeviceGray {} CS [0] SC 1035.6 2114.4 4410 3690 re S Q q 1035.6 2114.4 4410 3690 re W 5 w 2 J /DeviceGray {} CS [0] SC 2778.3 4537.25 m 2806.25 4641.57 l S 2473.44 5353.9 m 2566.97 5299.9 l S 1680.95 4253.75 m 1572.95 4253.75 l S 1286.8 2257.74 m 1419.3 2334.24 l S 20 w 2821.69 4468.41 m 2816.92 4475.29 l 2811.89 4481.7 l 2806.62 4487.6 l 2801.13 4492.98 l 2795.45 4497.8 l 2789.6 4502.05 l 2783.62 4505.7 l 2777.51 4508.75 l 2771.31 4511.17 l 2765.04 4512.96 l 2758.73 4514.11 l 2752.41 4514.62 l 2746.09 4514.48 l 2739.81 4513.7 l 2733.59 4512.28 l 2727.44 4510.24 l 2721.41 4507.58 l 2715.5 4504.31 l 2709.75 4500.46 l 2704.17 4496.04 l 2698.78 4491.08 l 2693.6 4485.59 l 2688.66 4479.61 l 2683.96 4473.16 l 2679.53 4466.27 l 2675.38 4458.98 l 2671.53 4451.31 l 2667.99 4443.3 l 2664.76 4434.98 l 2661.87 4426.39 l 2659.32 4417.57 l 2657.12 4408.55 l 2655.27 4399.37 l 2653.79 4390.07 l 2652.68 4380.68 l 2651.94 4371.24 l 2651.57 4361.78 l 2651.58 4352.35 l 2651.96 4342.98 l 2652.72 4333.69 l 2653.84 4324.54 l 2655.34 4315.55 l 2657.19 4306.74 l 2659.4 4298.17 l 2661.96 4289.84 l 2664.86 4281.8 l 2668.09 4274.07 l 2671.64 4266.68 l 2675.49 4259.65 l 2679.64 4253 l 2684.07 4246.77 l 2688.76 4240.96 l 2693.7 4235.61 l 2698.86 4230.72 l 2704.24 4226.31 l 2709.81 4222.41 l 2715.55 4219.02 l 2721.44 4216.15 l 2727.46 4213.82 l 2733.59 4212.03 l 2739.8 4210.79 l 2746.06 4210.11 l 2752.36 4209.98 l 2758.67 4210.42 l 2764.96 4211.42 l 2771.22 4212.98 l 2777.4 4215.09 l 2783.5 4217.76 l 2789.48 4220.96 l 2795.31 4224.71 l 2800.98 4228.97 l 2806.46 4233.75 l 2811.73 4239.02 l 2816.76 4244.77 l 2821.54 4250.98 l 2826.03 4257.63 l 2830.23 4264.7 l 2834.1 4272.17 l 2837.65 4280 l 2840.84 4288.16 l 2843.67 4296.64 l 2846.11 4305.4 l 2848.17 4314.4 l 2849.84 4323.62 l 2851.09 4333.01 l 2851.93 4342.54 l 2852.36 4352.17 l 2852.37 4361.86 l 2851.96 4371.58 l 2851.14 4381.28 l 2849.9 4390.92 l 2848.25 4400.46 l 2846.21 4409.86 l 2843.77 4419.08 l 2840.96 4428.08 l 2837.78 4436.82 l 2834.24 4445.26 l 2830.37 4453.36 l 2826.18 4461.09 l 2821.69 4468.41 l S /DeviceRGB {} CS [1 0 0] SC 3398.95 4976.53 m 3357.48 5042.12 l 3314.67 5104.66 l 3270.71 5163.75 l 3225.75 5219.03 l 3171.91 5278.64 l 3117.24 5331.98 l 3062.04 5378.6 l 3006.58 5418.13 l 2949.18 5451.27 l 2892.07 5476.27 l 2835.52 5493.02 l 2779.78 5501.48 l 2727.91 5501.93 l 2677.14 5495.15 l 2627.62 5481.34 l 2579.49 5460.79 l 2534.85 5435.1 l 2491.68 5403.85 l 2450.06 5367.4 l 2410.05 5326.13 l 2370.74 5279.2 l 2333.22 5228.06 l 2297.53 5173.17 l 2263.68 5114.98 l 2228.29 5047.06 l 2195.19 4976.23 l 2164.37 4903.07 l 2135.84 4828.12 l 2104.07 4735 l 2075.6 4640.85 l 2050.38 4546.48 l 2028.34 4452.57 l 2009.67 4361.01 l 1993.96 4271.01 l 1981.18 4183.01 l 1971.25 4097.37 l 1963.71 4008.11 l 1959.37 3922.23 l 1958.21 3839.97 l 1960.18 3761.5 l 1965.01 3689.77 l 1972.71 3621.7 l 1983.28 3557.32 l 1996.73 3496.62 l 2012.1 3442.66 l 2030.09 3391.94 l 2050.71 3344.42 l 2074 3300.05 l 2099.47 3259.59 l 2127.57 3222.05 l 2158.35 3187.4 l 2191.85 3155.58 l 2228.55 3126.21 l 2268.09 3099.66 l 2310.48 3075.88 l 2355.72 3054.86 l 2410.54 3034.3 l 2468.95 3017.26 l 2530.85 3003.74 l 2596.07 2993.78 l 2662.04 2987.59 l 2730.62 2984.83 l 2801.47 2985.6 l 2874.17 2990.02 l 2933.65 2996.31 l 2993.71 3005.13 l 3054.03 3016.58 l 3114.27 3030.75 l 3167.85 3045.84 l 3220.79 3063.31 l 3272.79 3083.22 l 3323.56 3105.69 l 3371.32 3129.99 l 3417.38 3156.87 l 3461.46 3186.42 l 3503.33 3218.74 l 3544.33 3255.45 l 3582.39 3295.37 l 3617.26 3338.56 l 3648.72 3385.12 l 3683.07 3448.4 l 3711.4 3517.15 l 3733.45 3591.43 l 3749 3671.19 l 3758.21 3761.11 l 3759.96 3856.76 l 3754.24 3957.76 l 3741.14 4063.58 l 3726.91 4143.93 l 3708.87 4226.19 l 3687.11 4309.98 l 3661.78 4394.9 l 3636.3 4471.15 l 3608.2 4547.57 l 3577.62 4623.78 l 3544.69 4699.36 l 3510.95 4771.05 l 3475.31 4841.41 l 3437.93 4910.03 l 3398.95 4976.53 l S /DeviceRGB {} CS [0 0.5019 0] SC 4021.75 4500.8 m 3947.84 4635.45 l 3870.86 4768.78 l 3791.1 4899.44 l 3708.93 5026.02 l 3615.84 5159.34 l 3520.8 5284.08 l 3424.38 5398.45 l 3327.18 5500.81 l 3219.73 5598.07 l 3112.82 5677.37 l 3007.19 5737.55 l 2903.52 5777.92 l 2806.57 5797.79 l 2712.48 5799.45 l 2621.63 5783.45 l 2534.37 5750.67 l 2453.38 5703.91 l 2376.17 5643.67 l 2302.84 5571.32 l 2233.45 5488.3 l 2163.38 5389.09 l 2097.82 5281.17 l 2036.67 5166.35 l 1979.81 5046.33 l 1914.15 4890.44 l 1854.72 4731.7 l 1801.12 4572.59 l 1752.99 4415.19 l 1707.95 4253.75 l 1668.07 4097.62 l 1632.94 3947.99 l 1602.19 3805.67 l 1572.56 3655.89 l 1547.5 3516.32 l 1526.61 3387.05 l 1509.55 3267.96 l 1494.24 3142.97 l 1483.22 3030.42 l 1476.16 2929.51 l 1472.81 2839.37 l 1473.49 2742.94 l 1479.18 2659.54 l 1489.79 2587.63 l 1505.35 2525.81 l 1527.25 2470.18 l 1555.14 2422.98 l 1589.5 2383.02 l 1630.99 2349.28 l 1671.46 2325.34 l 1718.02 2304.65 l 1771.36 2286.83 l 1832.28 2271.55 l 1888.22 2260.78 l 1950.34 2251.39 l 2019.21 2243.27 l 2095.42 2236.34 l 2177.19 2230.66 l 2266.98 2225.98 l 2365.2 2222.27 l 2472.17 2219.52 l 2578.17 2217.85 l 2691.55 2216.99 l 2811.95 2217 l 2938.77 2217.91 l 3061.17 2219.62 l 3187.31 2222.25 l 3315.99 2225.87 l 3445.81 2230.61 l 3579.56 2236.8 l 3711.07 2244.51 l 3838.58 2253.93 l 3960.39 2265.3 l 4072.54 2278.6 l 4176.64 2294.36 l 4271.77 2312.96 l 4357.28 2334.79 l 4423.89 2356.93 l 4482.72 2382.27 l 4533.73 2411.21 l 4576.99 2444.18 l 4611.83 2480.67 l 4639.55 2521.93 l 4660.29 2568.46 l 4674.19 2620.8 l 4681.5 2681.77 l 4681.71 2750.23 l 4674.87 2826.81 l 4661.02 2912.13 l 4640.58 3004.9 l 4613.34 3107.1 l 4579.22 3219.06 l 4538.17 3340.98 l 4488.98 3475.85 l 4432.44 3620.83 l 4368.53 3775.33 l 4297.34 3938.36 l 4234.99 4074.54 l 4168.15 4214.43 l 4097 4356.93 l 4021.75 4500.8 l S /DeviceRGB {} CS [0 0 1] SC 4811.19 2811.82 m 4746.61 2964.71 l 4669.25 3143.99 l 4577.55 3350.84 l 4470.22 3584.86 l 4380.38 3773.76 l 4281.39 3974.22 l 4173.35 4183.38 l 4056.65 4397.48 l 3924.71 4623.9 l 3785.05 4844.33 l 3639.18 5051.96 l 3488.91 5239.9 l 3319.28 5417.69 l 3149.52 5555.74 l 2982.42 5648.73 l 2820.46 5693.99 l 2666.57 5691.64 l 2521.48 5644.58 l 2386.29 5557.25 l 2261.64 5435.53 l 2129.88 5259.09 l 2012.52 5055.87 l 1908.88 4836.12 l 1817.99 4608.86 l 1721.26 4327.67 l 1640.11 4057.05 l 1572.34 3804.16 l 1515.92 3573.17 l 1467.09 3356.98 l 1426.93 3166.86 l 1393.92 3001.69 l 1366.81 2859.61 l 1340.51 2715.7 l 1319.81 2597.83 l 1303.55 2501.97 l 1290.81 2424.44 l 1278.5 2346.79 l 1269.65 2288.23 l 1263.41 2244.24 l 1259.16 2211.28 l 1255.99 2181.36 l 1254.7 2160.66 l 1254.92 2146.36 l 1256.46 2136.48 l 1259.39 2129.45 l 1263.74 2124.68 l 1269.69 2121.42 l 1277.54 2119.21 l 1287.22 2117.75 l 1299.57 2116.74 l 1315.27 2116.04 l 1335.29 2115.56 l 1361.23 2115.22 l 1394.66 2114.98 l 1438 2114.82 l 1494.68 2114.7 l 1551.97 2114.64 l 1623.72 2114.59 l 1714.19 2114.55 l 1828.9 2114.53 l 1945.17 2114.51 l 2086.72 2114.5 l 2258.32 2114.49 l 2464.26 2114.48 l 2660.87 2114.48 l 2881.71 2114.48 l 3123.32 2114.48 l 3378.91 2114.49 l 3686.37 2114.5 l 3980.18 2114.52 l 4243.06 2114.55 l 4463.93 2114.59 l 4617.62 2114.64 l 4739.37 2114.71 l 4833.11 2114.82 l 4903.7 2114.95 l 4968.66 2115.21 l 5011.74 2115.59 l 5039.86 2116.18 l 5057.96 2117.05 l 5068.2 2118.17 l 5074.84 2119.77 l 5078.89 2122.05 l 5080.97 2125.31 l 5081.43 2130.06 l 5080.32 2136.88 l 5077.55 2146.65 l 5072.79 2160.65 l 5066.84 2176.89 l 5058.57 2198.75 l 5047.25 2228.12 l 5031.91 2267.46 l 5018.29 2302.11 l 5001.62 2344.29 l 4981.26 2395.48 l 4956.48 2457.38 l 4928.92 2525.7 l 4896.1 2606.41 l 4857.17 2701.21 l 4811.19 2811.82 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 2154.4 l S 1035.6 5804.4 m 1035.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 2154.4 l S 1770.6 5804.4 m 1770.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 2154.4 l S 2505.6 5804.4 m 2505.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 2154.4 l S 3240.6 5804.4 m 3240.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 2154.4 l S 3975.6 5804.4 m 3975.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 2154.4 l S 4710.6 5804.4 m 4710.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 2154.4 l S 5445.6 5804.4 m 5445.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 5445.6 2114.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1075.6 2114.4 l S 5445.6 2114.4 m 5405.6 2114.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2729.4 m 5445.6 2729.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2729.4 m 1075.6 2729.4 l S 5445.6 2729.4 m 5405.6 2729.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3344.4 m 5445.6 3344.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3344.4 m 1075.6 3344.4 l S 5445.6 3344.4 m 5405.6 3344.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3959.4 m 5445.6 3959.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3959.4 m 1075.6 3959.4 l S 5445.6 3959.4 m 5405.6 3959.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4574.4 m 5445.6 4574.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4574.4 m 1075.6 4574.4 l S 5445.6 4574.4 m 5405.6 4574.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5189.4 m 5445.6 5189.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5189.4 m 1075.6 5189.4 l S 5445.6 5189.4 m 5405.6 5189.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 1075.6 5804.4 l S 5445.6 5804.4 m 5405.6 5804.4 l S 10 w 2 J 1035.6 2114.4 4410 3690 re S Q q 720 7200 m 720 7200 l 720 7200 l 720 7200 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -644.52 4154.28] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 95.0602 197.44] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 9.1199 0 Td /F9_0 11.9552 Tf (1) 5.858 Tj -4895.55 TJm (0) 5.858 Tj -2.2637 TJm 79.3801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 82.62 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -4895.55 TJm (0) 5.858 Tj -2.2627 TJm 152.8802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 156.12 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -4895.55 TJm (0) 5.858 Tj -2.2627 TJm 226.3802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 229.62 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -4895.55 TJm (0) 5.858 Tj -2.2627 TJm 299.8802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 303.1201 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -4895.52 TJm (0) 5.858 Tj -2.2627 TJm 373.3799 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 376.6197 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -4895.55 TJm (0) 5.858 Tj -2.2627 TJm 446.8799 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 450.1198 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm 216.4998 -15.4797 Td /F13_0 11.9552 Tf (U) 8.6317 Tj -0.6984 TJm (\() 3.9811 Tj 1.7624 TJm (1) 6.6471 Tj 3.9372 TJm (\)) 3.9811 Tj 1.7624 TJm -12.5002 9.0004 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -6.6202 9.0004 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 9.0004 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.5002 70.5004 Td (0) 5.858 Tj -2.2632 TJm -6.6202 70.5004 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 70.5004 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -12.5002 132.0004 Td (0) 5.858 Tj -2.2632 TJm -6.6202 132.0004 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 132.0004 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -12.5002 193.5 Td (0) 5.858 Tj -2.2632 TJm -6.6202 193.5 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 193.5 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm -12.5002 255.0004 Td (0) 5.858 Tj -2.2632 TJm -6.6202 255.0004 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 255.0004 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm -12.5002 316.5004 Td (0) 5.858 Tj -2.2632 TJm -6.6202 316.5004 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 316.5004 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.5002 378 Td (0) 5.858 Tj -2.2632 TJm -6.6202 378 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3803 378 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2.2632 TJm [0 1 -1 0 75.0398 383.44] Tm 0 0 Td /F13_0 11.9552 Tf (U) 8.6317 Tj -0.6984 TJm (\() 3.9811 Tj 1.7624 TJm (2) 6.6471 Tj 3.9372 TJm (\)) 3.9811 Tj 1.7624 TJm [1 0 0 1 273.591 465.896] Tm 0 0 Td /F13_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -15.3352 53.434 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -133.0962 -45.2812 Td (1) 6.6471 Tj 3.9372 TJm (9) 6.6471 Tj 3.9372 TJm -130.1021 -231.3322 Td (2) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font XSTBFC+CMR12 %%EOF auto/07p/doc/include/closegap_snh_par.eps0000640000175000017500000020455013570013207016460 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 32 162 582 604 %%HiResBoundingBox: 32.456803 162.396129 581.456803 603.396129 %................................... %%Creator: GPL Ghostscript 863 (pswrite) %%CreationDate: 2009/07/27 15:49:07 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginProlog % This copyright applies to everything between here and the %%EndProlog: % Copyright (C) 2008 Artifex Software, Inc. All rights reserved. %%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 /GS_pswrite_2_0_1001 80 dict dup begin /PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch 4 index eq and{ pop pop pop}{ PageSize dup 1 5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} { pop/setpagedevice where { pop 1 dict dup /PageSize PageSize put setpagedevice} { /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat setpage}if}ifelse}ifelse}ifelse} bind def /!{bind def}bind def/#{load def}!/N/counttomark # /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! /w/setlinewidth #/J/setlinecap # /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # /m/moveto #/l/lineto #/c/rcurveto # /p{N 2 idiv{N -2 roll rlineto}repeat}! /P{N 0 gt{N -2 roll moveto p}if}! /h{p closepath}!/H{P closepath}! /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! /re{4 -2 roll m exch dup lx exch ly neg lx h}! /^{3 index neg 3 index neg}! /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! /q/gsave #/Q/grestore #/rf{re fill}! /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! /|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! /|{exch string readstring |=}! /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! /@/currentfile #/${+ @ |}! /B{{2 copy string{readstring pop}aload pop 4 array astore cvx 3 1 roll}repeat pop pop true}! /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! /Ic{exch Ix false 3 colorimage}! /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> /CCITTFaxDecode filter}!/FX{< Q Q q 0 0 51000 0 0 66000 ^ Y 0.996264 i K 7659.02 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7455.98 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7886 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 8446.23 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 8646.09 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 9249.89 16812.9 m 50.04 26.92 123.14 72.79 123.14 156.53 c 0 86.74 -83.8 146.62 -175.57 146.62 c -98.75 0 -176.55 -72.84 -176.55 -163.57 c 0 -33.89 9.97 -67.79 37.9 -101.69 c 10.97 -12.96 11.97 -13.95 81.79 -62.81 c -96.75 -44.86 -146.62 -111.66 -146.62 -184.44 c 0 -105.68 100.57 -171.48 202.14 -171.48 c 110.53 0 203.21 81.75 203.21 186.44 c 0 101.7 -71.73 146.55 -149.44 194.41 c h 9114.47 16902.4 m -12.97 8.98 -52.87 34.92 -52.87 83.81 c 0 64.85 67.84 105.77 134.69 105.77 c 71.84 0 135.73 -51.9 135.73 -123.73 c 0 -60.86 -43.94 -109.75 -101.81 -141.68 c h 9161.4 16773.8 m 26.87 -17.96 93.56 -60.79 120.43 -78.72 c 25.88 -16.93 71.66 -47.81 71.66 -108.57 c 0 -75.7 -76.64 -127.49 -156.26 -127.49 c -84.6 0 -157.26 61.75 -157.26 144.42 c 0 77.69 56.73 140.44 121.43 170.36 c h f 9571 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 13784 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 13581 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 14011 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 14571.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 14771.1 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 15442 16742.9 m 0 -235.07 -104.41 -283.87 -164.05 -283.87 c -23.86 0 -76.54 2.99 -101.4 37.94 c 5.97 0 p 6.96 -2.12 42.75 3.89 42.75 40.94 c 0 22.03 -14.91 41.07 -40.76 41.07 c -25.84 0 -41.75 -17 -41.75 -42.99 c 0 -61.98 49.76 -103.96 136.35 -103.96 c 124.41 0 244.91 132.6 244.91 348.95 c 0 268.2 -111.51 335.05 -199.07 335.05 c -109.46 0 -205.97 -91.84 -205.97 -223.54 c 0 -131.7 92.42 -221.49 191.81 -221.49 c 73.54 0 111.31 53.89 131.22 104.81 c h 15315.3 16691 m -62.64 0 -89.49 50.87 -98.43 69.82 c -15.91 37.91 -15.91 85.79 -15.91 130.67 c 0 55.86 0 103.74 25.85 144.64 c 17.9 26.93 44.74 55.9 98.44 55.9 c 56.68 0 85.51 -49.91 95.45 -72.86 c 19.91 -48.87 19.91 -133.66 19.91 -148.62 c 0 -83.79 -37.81 -179.54 -125.31 -179.54 c h f 16014 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 15811 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 19909 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 19706 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 20136 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 20696.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 20896.1 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 21567 16742.9 m 0 -235.07 -104.41 -283.87 -164.05 -283.87 c -23.86 0 -76.54 2.99 -101.4 37.94 c 5.97 0 p 6.96 -2.12 42.75 3.89 42.75 40.94 c 0 22.03 -14.91 41.07 -40.76 41.07 c -25.84 0 -41.75 -17 -41.75 -42.99 c 0 -61.98 49.76 -103.96 136.35 -103.96 c 124.41 0 244.91 132.6 244.91 348.95 c 0 268.2 -111.51 335.05 -199.07 335.05 c -109.46 0 -205.97 -91.84 -205.97 -223.54 c 0 -131.7 92.42 -221.49 191.81 -221.49 c 73.54 0 111.31 53.89 131.22 104.81 c h 21440.3 16691 m -62.64 0 -89.49 50.87 -98.43 69.82 c -15.91 37.91 -15.91 85.79 -15.91 130.67 c 0 55.86 0 103.74 25.85 144.64 c 17.9 26.93 44.74 55.9 98.44 55.9 c 56.68 0 85.51 -49.91 95.45 -72.86 c 19.91 -48.87 19.91 -133.66 19.91 -148.62 c 0 -83.79 -37.81 -179.54 -125.31 -179.54 c h f 21821 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 26034 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 25831 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 26261 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 26821.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 27198 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 27132 17023.9 0 -375.85 -242.16 0 H f 27774 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 27571 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 28264 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 28061 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 32159 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 31956 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 32386 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 32946.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 33323 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 33257 17023.9 0 -375.85 -242.16 0 H f 33899 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 33696 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 34071 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 38284 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 38081 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 38511 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 39071.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 39448 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 39382 17023.9 0 -375.85 -242.16 0 H f 39865 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 40514 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 40311 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 44409 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 44206 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 44636 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 45196.2 17071.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 45573 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 45507 17023.9 0 -375.85 -242.16 0 H f 45990 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 46321 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 26158 15745 0 -522.04 84.01 0 0 287.71 P 0 106.52 55.55 176.27 140.85 176.27 c 65.46 0 107.13 -39.88 107.13 -102.6 c 0 -361.37 83.01 0 0 394.52 p 0 86.68 -64.62 142.46 -165.02 142.46 c -77.54 0 -127.24 -29.89 -172.97 -102.61 c 0 87.67 h f 27108 15222.9 0 522.04 -83.01 0 0 -295.74 P 0 -106.52 -55.57 -176.21 -141.86 -176.21 c -65.46 0 -107.12 39.82 -107.12 102.54 c 0 369.41 -83.01 0 0 -402.49 p 0 -86.68 64.61 -142.46 166.01 -142.46 c 76.54 0 125.25 26.9 173.98 95.64 c 0 -72.73 h f 27436 15725.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 6289.12 17471 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 6846.02 17561 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6642.98 17241 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7073 17290 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7606.02 17561 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7402.98 17241 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7936.98 17881 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 6826.02 20318 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 19998 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 20047 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 20318 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 19998 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 8076.02 20318 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 19998 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 6826.02 23113 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 22793 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 22842 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 23113 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 22793 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7916.98 23433 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 6826.02 25909 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 25589 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 25638 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 25909 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 25589 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 8068.99 25757.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 6826.02 28704 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 28384 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 28433 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 28704 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 28384 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7813.09 28743 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 6826.02 31500 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 31180 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 31229 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 31500 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 31180 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7989.97 31829 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 7923.96 31751.9 0 -375.85 -242.16 0 H f 6826.02 34295 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 33975 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 34024 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 34295 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 33975 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7758 34546.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 6826.02 37090 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 36770 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 36819 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 37090 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 36770 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7752.98 37117.7 m 0 252.36 122.33 292.28 176.04 292.28 c 35.8 0 71.61 -11 90.5 -41 c -11.93 0 -49.73 0 -49.73 -41.01 c 0 -22 14.92 -41 40.78 -41 c 24.86 0 41.84 15 41.84 43.99 c 0 52 -37.9 103.02 -124.54 103.02 c -125.47 0 -256.91 -128.67 -256.91 -348.01 c 0 -274.18 119.4 -335.99 203.98 -335.99 c 108.46 0 201.06 94.55 201.06 223.94 c 0 132.38 -92.46 221.02 -191.85 221.02 c -88.45 0 -121.25 -76.4 -131.18 -104.17 c h 7874.75 36777 m -62.59 0 -92.4 55.71 -101.35 76.6 c -8.94 25.86 -18.87 74.61 -18.87 144.24 c 0 78.59 35.77 177.11 125.19 177.11 c 54.65 0 83.46 -36.84 98.37 -70.66 c 15.91 -36.81 15.91 -86.55 15.91 -129.32 c 0 -50.73 0 -95.5 -18.89 -133.3 c -24.84 -47.75 -60.61 -64.66 -100.36 -64.66 c h f 6826.02 39886 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 39566 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 39615 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 39886 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 39566 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 8103.23 40185.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 6826.02 42681 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 42361 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 42410 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 42681 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 42361 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7926.89 42721.9 m 50.04 26.92 123.14 72.79 123.14 156.53 c 0 86.74 -83.8 146.62 -175.57 146.62 c -98.75 0 -176.55 -72.84 -176.55 -163.57 c 0 -33.89 9.97 -67.79 37.9 -101.69 c 10.97 -12.96 11.97 -13.95 81.79 -62.81 c -96.75 -44.86 -146.62 -111.66 -146.62 -184.44 c 0 -105.68 100.57 -171.48 202.14 -171.48 c 110.53 0 203.21 81.75 203.21 186.44 c 0 101.7 -71.73 146.55 -149.44 194.41 c h 7791.47 42811.4 m -12.97 8.98 -52.87 34.92 -52.87 83.81 c 0 64.85 67.84 105.77 134.69 105.77 c 71.84 0 135.73 -51.9 135.73 -123.73 c 0 -60.86 -43.94 -109.75 -101.81 -141.68 c h 7838.4 42682.8 m 26.87 -17.96 93.56 -60.79 120.43 -78.72 c 25.88 -16.93 71.66 -47.81 71.66 -108.57 c 0 -75.7 -76.64 -127.49 -156.26 -127.49 c -84.6 0 -157.26 61.75 -157.26 144.42 c 0 77.69 56.73 140.44 121.43 170.36 c h f 6826.02 45477 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 45157 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 45206 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7586.02 45477 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7382.98 45157 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7994 45447.9 m 0 -235.07 -104.41 -283.87 -164.05 -283.87 c -23.86 0 -76.54 2.99 -101.4 37.94 c 5.97 0 p 6.96 -2.12 42.75 3.89 42.75 40.94 c 0 22.03 -14.91 41.07 -40.76 41.07 c -25.84 0 -41.75 -17 -41.75 -42.99 c 0 -61.98 49.76 -103.96 136.35 -103.96 c 124.41 0 244.91 132.6 244.91 348.95 c 0 268.2 -111.51 335.05 -199.07 335.05 c -109.46 0 -205.97 -91.84 -205.97 -223.54 c 0 -131.7 92.42 -221.49 191.81 -221.49 c 73.54 0 111.31 53.89 131.22 104.81 c h 7867.33 45396 m -62.64 0 -89.49 50.87 -98.43 69.82 c -15.91 37.91 -15.91 85.79 -15.91 130.67 c 0 55.86 0 103.74 25.85 144.64 c 17.9 26.93 44.74 55.9 98.44 55.9 c 56.68 0 85.51 -49.91 95.45 -72.86 c 19.91 -48.87 19.91 -133.66 19.91 -148.62 c 0 -83.79 -37.81 -179.54 -125.31 -179.54 c h f 6826.02 48272 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 6622.98 47952 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7053 48001 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 7426.98 48592 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8076.02 48272 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 47952 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 4960.02 32714 m -79.72 0 -127.55 -6.05 -166.41 -20.98 c -85.7 -33.86 -137.59 -113.52 -137.59 -211.11 c 0 -145.38 111.64 -238.98 283 -238.98 c 171.36 0 276.96 90.64 276.96 237.05 c 0 119.52 -67.76 202.19 -181.38 223.13 c 0 -83.62 p 68.59 -22.88 104.37 -69.63 104.37 -136.29 c 0 -52.72 -23.86 -97.49 -67.59 -125.35 c -29.82 -19.89 -59.65 -26.86 -111.36 -27.85 c h 4892 32331.5 m -96.37 6.97 -158.98 65.75 -158.98 149.44 c 0 81.7 67.57 144.46 153.02 144.46 c 1.98 0 3.97 0 5.96 -1 c h f 4671.02 33006 0 -84.98 -143.52 0 0 -83.02 ^ 0 -71.04 68.01 0 ^ 394.32 0 P 52.77 0 82.63 35.78 82.63 100.38 c 0 19.88 -1.99 39.75 -6.98 67.62 c -69.8 0 p 2.82 -10.88 3.76 -23.73 3.76 -39.54 c 0 -35.57 -9.95 -45.45 -46.75 -45.45 c -357.18 0 0 84.98 h f 5144.18 33566 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 5028.54 33420 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 18245.5 44116.3 m 72.58 43.82 96.45 79.66 96.45 146.38 c 0 110.53 -86.65 188.25 -212.03 188.25 c -124.38 0 -211.95 -77.71 -211.95 -188.25 c 0 -65.72 23.85 -101.57 95.39 -146.38 c -80.62 -38.83 -120.43 -97.59 -120.43 -175.25 c 0 -129.45 97.59 -219.07 237 -219.07 c 139.41 0 237.04 89.62 237.04 218.07 c 0 78.66 -39.85 137.42 -121.48 176.25 c h 18130 44373 m 74.38 0 121.98 -43.62 121.98 -111.98 c 0 -65.39 -48.59 -108.97 -121.98 -108.97 c -73.38 0 -121.97 43.59 -121.97 109.96 c 0 67.36 48.59 110.99 121.97 110.99 c h 18130 44078 m 87.39 0 147.03 -55.8 147.03 -138.49 c 0 -83.68 -59.64 -139.48 -149.02 -139.48 c -85.41 0 -144.99 56.79 -144.99 139.48 c 0 82.69 59.59 138.49 146.98 138.49 c h f 11844.8 32434.4 m 16.89 -115.61 92.43 -184.37 199.76 -184.37 c 77.52 0 148.08 37.84 188.82 100.57 c 44.72 68.71 64.63 155.34 64.63 283.79 c 0 118.5 -17.94 194.18 -59.67 256.91 c -38.75 56.76 -100.35 87.68 -177.85 87.68 c -134.13 0 -230.51 -99.64 -230.51 -238.02 c 0 -131.41 89.51 -223.99 216.81 -223.99 c 66.64 0 115.37 23.69 161.21 78.01 c -1 -171.69 -56.73 -266.94 -157.23 -266.94 c -61.7 0 -104.48 38.76 -118.41 106.36 c h 12060.2 32902 m 81.55 0 143.23 -67.6 143.23 -158.98 c 0 -86.42 -60.68 -148.01 -146.21 -148.01 c -84.54 0 -137.25 58.61 -137.25 152.97 c 0 89.4 59.67 154.02 140.23 154.02 c h f 24345 28075.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 24910.9 28279 m -65.71 0 -125.44 -29 -162.27 -78.01 c -45.8 -61.73 -68.69 -156.29 -68.69 -286.67 c 0 -237.87 79.64 -364.27 230.96 -364.27 c 149.33 0 231.05 126.4 231.05 358.3 c 0 137.35 -21.99 228.91 -68.79 292.64 c -36.83 50.01 -95.57 78.01 -162.27 78.01 c h 24911 28201 m 94.32 0 141.01 -95.57 141.01 -284.54 c 0 -199.91 -45.7 -293.39 -142.99 -293.39 c -92.34 0 -139 97.46 -139 290.41 c 0 192.95 46.66 287.52 140.98 287.52 c h f 33953 24278.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 34503 24278.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 42935 21555.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 43731 21140 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f cleartomark end end pagesave restore showpage %%PageTrailer %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%Pages: 1 %%EOF auto/07p/doc/include/parspace.eps0000640000175000017500000014300613570013207014745 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .138941420.138860468 %%CreationDate: Fri Nov 30 21:21:06 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%+ font Fixed-Bold %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: parspace.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%IncludeResource: font Fixed-Bold %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 216.94192 308.666666815 moveto 206.94192 318.666666815 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 206.94192 318.666666815 [ (16) ] 14 -1 1 0 false DrawText grestore gsave 159.8967016 308.67133516 moveto 169.8967016 318.67133516 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 169.8967016 318.67133516 [ (17) ] 14 -0 1 0 false DrawText grestore gsave 219.2 116.154666667 moveto 229.2 126.154666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 229.2 126.154666667 [ (23) ] 14 -0 1 0 false DrawText grestore gsave 319.3824 227.488266667 moveto 329.3824 237.488266667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 329.3824 237.488266667 [ (24) ] 14 -0 1 0 false DrawText grestore gsave 280 260.633466667 moveto 290 270.633466667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 290 270.633466667 [ (25) ] 14 -0 1 0 false DrawText grestore gsave 220.90912 308.631329867 moveto 230.90912 318.631329867 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 230.90912 318.631329867 [ (26) ] 14 -0 1 0 false DrawText grestore gsave 225.6 134.137333333 moveto 235.6 144.137333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 235.6 144.137333333 [ (30) ] 14 -0 1 0 false DrawText grestore gsave 319.3832 227.489066667 moveto 329.3832 237.489066667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 329.3832 237.489066667 [ (31) ] 14 -0 1 0 false DrawText grestore gsave 319.368 227.4836 moveto 309.368 237.4836 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 309.368 237.4836 [ (32) ] 14 -1 1 0 false DrawText grestore gsave 304 221.229466667 moveto 294 231.229466667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 294 231.229466667 [ (33) ] 14 -1 1 0 false DrawText grestore gsave 273.8952 202.989333333 moveto 263.8952 212.989333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 263.8952 212.989333333 [ (34) ] 14 -1 1 0 false DrawText grestore gsave 264 277.479333333 moveto 274 287.479333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 274 287.479333333 [ (35) ] 14 -0 1 0 false DrawText grestore gsave 232.6032 306.032853333 moveto 242.6032 316.032853333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 242.6032 316.032853333 [ (36) ] 14 -0 1 0 false DrawText grestore gsave 275.9992 244.747066667 moveto 285.9992 254.747066667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 285.9992 254.747066667 [ (37) ] 14 -0 1 0 false DrawText grestore gsave 224.35488 308.495168 moveto 234.35488 318.495168 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 234.35488 318.495168 [ (38) ] 14 -0 1 0 false DrawText grestore gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.7416 308.666700678 moveto 392.3752 308.666697658 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.3752 308.666697658 moveto 369.4408 308.666694485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.4408 308.666694485 moveto 346.1656 308.666691087 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.1656 308.666691087 moveto 322.7992 308.666687513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.7992 308.666687513 moveto 299.704 308.666683784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.704 308.666683784 moveto 277.412 308.666679973 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.412 308.666679973 moveto 256.632 308.666676115 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.632 308.666676115 moveto 238.104 308.66667222 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.104 308.66667222 moveto 222.2808 308.666668341 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.2808 308.666668341 moveto 216.94192 308.666666815 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.94192 308.666666815 moveto 200.5168 308.666660955 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.5168 308.666660955 moveto 187.83536 308.66665362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.83536 308.66665362 moveto 177.62688 308.666642033 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.62688 308.666642033 moveto 168.7052 308.666612974 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.7052 308.666612974 moveto 160.1510728 308.663495933 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.1510728 308.663495933 moveto 159.8967016 308.67133516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.94192 108.821333333 moveto 218.9692 115.430666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.9692 115.430666667 moveto 219.2 116.154666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.2 116.154666667 moveto 221.34048 122.596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.34048 122.596 moveto 223.58872 128.885333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.58872 128.885333333 moveto 225.94736 135.010666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.94736 135.010666667 moveto 228.41928 140.964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.41928 140.964 moveto 231.00656 146.738666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.00656 146.738666667 moveto 233.7108 152.328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.7108 152.328 moveto 236.53296 157.725333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.53296 157.725333333 moveto 239.47312 162.925333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.47312 162.925333333 moveto 242.5304 167.922666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.5304 167.922666667 moveto 245.704 172.717333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.704 172.717333333 moveto 248.9904 177.303466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.9904 177.303466667 moveto 252.3864 181.682533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.3864 181.682533333 moveto 255.8888 185.854533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.8888 185.854533333 moveto 259.4928 189.8208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.4928 189.8208 moveto 263.192 193.584266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.192 193.584266667 moveto 266.9816 197.1484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.9816 197.1484 moveto 270.8536 200.517866667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.8536 200.517866667 moveto 274.8024 203.697866667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.8024 203.697866667 moveto 278.82 206.694666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.82 206.694666667 moveto 282.9 209.5144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.9 209.5144 moveto 287.0328 212.164133333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.0328 212.164133333 moveto 291.212 214.6508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.212 214.6508 moveto 295.4296 216.981733333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.4296 216.981733333 moveto 299.6776 219.164266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.6776 219.164266667 moveto 303.9488 221.205333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.9488 221.205333333 moveto 308.2344 223.1124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.2344 223.1124 moveto 312.5272 224.892133333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.5272 224.892133333 moveto 316.82 226.551466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.82 226.551466667 moveto 319.3824 227.488266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3824 227.488266667 moveto 313.3384 231.744533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.3384 231.744533333 moveto 306.9432 236.5476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.9432 236.5476 moveto 300.292 241.9008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.292 241.9008 moveto 293.452 247.8092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.452 247.8092 moveto 286.532 254.212666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.532 254.212666667 moveto 280 260.633466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280 260.633466667 moveto 271.0224 269.9548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.0224 269.9548 moveto 262.7752 278.805333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.7752 278.805333333 moveto 256.036 285.9864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.036 285.9864 moveto 250.5136 291.6264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.5136 291.6264 moveto 245.9576 295.96536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.9576 295.96536 moveto 242.1704 299.256666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.1704 299.256666667 moveto 238.99832 301.728453333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.99832 301.728453333 moveto 236.3212 303.571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.3212 303.571 moveto 234.046 304.93656 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.046 304.93656 moveto 232.09968 305.94388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.09968 305.94388 moveto 230.42432 306.68404 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.42432 306.68404 moveto 228.974 307.226093333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.974 307.226093333 moveto 227.71184 307.621966667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.71184 307.621966667 moveto 226.608 307.910358667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.608 307.910358667 moveto 225.63824 308.120022667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.63824 308.120022667 moveto 224.78264 308.27218 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.78264 308.27218 moveto 224.02504 308.382488 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.02504 308.382488 moveto 223.35168 308.462361333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.35168 308.462361333 moveto 222.75128 308.520189333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.75128 308.520189333 moveto 222.21432 308.562108667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.21432 308.562108667 moveto 221.73272 308.5925708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.73272 308.5925708 moveto 221.2996 308.614846267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.2996 308.614846267 moveto 220.90912 308.631329867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.94192 108.822666667 moveto 220.90952 121.337333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 220.90952 121.337333333 moveto 225.6 134.137333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 225.6 134.137333333 moveto 236.95176 158.492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 236.95176 158.492 moveto 252.2584 181.524533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 252.2584 181.524533333 moveto 272.1568 201.5952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 272.1568 201.5952 moveto 296.62 217.609866667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 296.62 217.609866667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.489066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.489066667 moveto 319.3832 227.488933333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3832 227.488933333 moveto 319.3824 227.4888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3824 227.4888 moveto 319.3808 227.488266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3808 227.488266667 moveto 319.3768 227.4868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3768 227.4868 moveto 319.368 227.4836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.368 227.4836 moveto 319.3432 227.474533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.3432 227.474533333 moveto 319.2776 227.4512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.2776 227.4512 moveto 319.1104 227.390933333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.1104 227.390933333 moveto 318.6832 227.2368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.6832 227.2368 moveto 317.6088 226.8444 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.6088 226.8444 moveto 314.9496 225.842933333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.9496 225.842933333 moveto 308.5656 223.254666667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.5656 223.254666667 moveto 304 221.229466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304 221.229466667 moveto 287.6112 212.519866667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.6112 212.519866667 moveto 271.8944 201.380266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.8944 201.380266667 moveto 273.8952 202.989333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.8952 202.989333333 moveto 273.8952 202.989333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.368 227.4836 moveto 302.8272 239.798533333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.8272 239.798533333 moveto 290.0376 250.899466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.0376 250.899466667 moveto 280.7536 259.861333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.7536 259.861333333 moveto 273.7264 267.086 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.7264 267.086 moveto 268.1592 273.003466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.1592 273.003466667 moveto 264 277.479333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264 277.479333333 moveto 258.3912 283.495466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.3912 283.495466667 moveto 253.808 288.2968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.808 288.2968 moveto 250.0416 292.089733333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.0416 292.089733333 moveto 248.42 293.663466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.42 293.663466667 moveto 246.9392 295.061733333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.9392 295.061733333 moveto 245.5688 296.318546667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.5688 296.318546667 moveto 244.2984 297.450013333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.2984 297.450013333 moveto 243.1152 298.470306667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.1152 298.470306667 moveto 242.0128 299.39072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.0128 299.39072 moveto 240.9808 300.223586667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.9808 300.223586667 moveto 240.016 300.97648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.016 300.97648 moveto 239.11128 301.658213333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.11128 301.658213333 moveto 238.26216 302.27624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.26216 302.27624 moveto 237.46616 302.836426667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.46616 302.836426667 moveto 236.71984 303.34476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.71984 303.34476 moveto 236.02152 303.806253333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.02152 303.806253333 moveto 235.37072 304.225173333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.37072 304.225173333 moveto 234.76832 304.605306667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.76832 304.605306667 moveto 234.21696 304.949813333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.21696 304.949813333 moveto 233.7196 305.262026667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.7196 305.262026667 moveto 233.27784 305.546333333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.27784 305.546333333 moveto 232.90544 305.80164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.90544 305.80164 moveto 232.6032 306.032853333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304 221.229466667 moveto 279.6968 238.66 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.6968 238.66 moveto 275.9992 244.747066667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.9992 244.747066667 moveto 267.6568 258.602 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.6568 258.602 moveto 260.6096 270.145866667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.6096 270.145866667 moveto 254.7672 279.314266667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.7672 279.314266667 moveto 249.9072 286.449466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.9072 286.449466667 moveto 245.844 291.926933333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.844 291.926933333 moveto 242.4232 296.093546667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.4232 296.093546667 moveto 239.52416 299.243733333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.52416 299.243733333 moveto 237.05008 301.6156 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.05008 301.6156 moveto 234.92392 303.396466667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.92392 303.396466667 moveto 233.08472 304.73112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.08472 304.73112 moveto 231.48368 305.730573333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.48368 305.730573333 moveto 230.08128 306.479626667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.08128 306.479626667 moveto 228.8456 307.0424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.8456 307.0424 moveto 227.75016 307.468309333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.75016 307.468309333 moveto 226.772 307.796341333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.772 307.796341333 moveto 225.89064 308.058429333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.89064 308.058429333 moveto 225.484 308.172669333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.484 308.172669333 moveto 225.09576 308.280768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.09576 308.280768 moveto 224.7204 308.387048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.7204 308.387048 moveto 224.35488 308.495168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (-1.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (1.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (3.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e-02) ] 14 -1 0.5 0 false DrawText grestore gsave 80 308.666666667 moveto 64 308.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 308.666666667 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 308.666666667 moveto 480 308.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 175.333333333 moveto 64 175.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 175.333333333 [ (-1.00e-02) ] 14 -1 0.5 0 false DrawText grestore gsave 80 175.333333333 moveto 480 175.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (-2.00e-02) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (mu) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (alpha) ] 14 -1 1 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 216.94192 308.666666815 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 219.2 116.154666667 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 280 260.633466667 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 225.6 134.137333333 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 319.368 227.4836 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 304 221.229466667 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 273.8952 202.989333333 [ (X) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 264 277.479333333 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 275.9992 244.747066667 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/cusp2.eps0000640000175000017500000011044713570013207014206 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 32 162 582 604 %%HiResBoundingBox: 32.723991 162.404988 581.723991 603.404988 % Produced by xpdf/pdftops 3.02 %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 612 792 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font IKMFZJ+CMR12 %!FontType1-1.0: IKMFZJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /IKMFZJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 448 665] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32CCC592339093B951094 0ACE0736A0E458CB04BB1E8F95CA378E22BEB2CB9369393C443A696C2FAF1424 24F18142436D008A5881B806D326FEFC8F53142F27F06E7F4C8104CD016443B9 56245B23742F278A3B7289B91E1329500B64808EA8DCE83FA2FD81E04E716151 34FD4D04A61FA8E33B7750DA9926EDEF5739CBF8CE2B215BD800BAEBDAE4F7E7 5AC1DDEC921F72E64E0E74B6C58D38D6AD2ABBA7D7F1DA4AC010BC5005D71A97 DE4042548BCC1A9B8A79C10DC2322366ACBB003025933A4A3E950F87DA5BCEDD 657C6AF445E6B4B64491FC861EB3F44BCB01DD3A17682EAEB1B4FA067828B389 9CF3260B02CE2E917A322E07EFA7042A5C0B8CB34B1B47FFD248CD5486EF8BA5 85B740B4B177E063E0D260C579F3630B267E3C2656AFD4E20BE96DCA0041367E FE473D913ACEA5F0D07D22AE0B6E245AFC887FE8298C74A76D8FFFE0CFABC5AF 0E742861F3A8203F9F6C83E908A7327FA7E846CFBABC1508FB8718A9B0FE2B69 1395051C49393919C8B80A8EBA169E88015444E722E10B68AAC25B53C5593C17 752D2B0563CC1272D84B715FDF2EE9E1588377D20F08EF36B0759E9B1C8D6405 331EB54D08C63602E0A13854CF39665DC6AE9B0A77CDC1F2C127C1E2E0BD0C31 3E866CE51E4041FBD0E6BDEC16E8267B34F119766D0761FC3A543E060A718188 A892DBA001BB05CE7BF4ECFEFF7A097F4880C49BD10D1FBE03FE3F7C425B16F3 DEB2A22B9AFF0CFA97D1D514C77532A7C82B4A6B8BB300E5A6BFE1B3C73B28AB D302A2E3F1DA73BDB13CBC6FE88E3A6A420376AA72F2EEA43B1FDC1FF6E69117 8675C332586CB1DAFC4EB054B3B14555EC9CF3D2AE74AA23A3B64A9FA77D5446 13EF1463DB3DE12C017EAD90DDD5D1E42994621EDBC29D04A7E765552766B19C 19DF2033C47FC4B0DC08F25AA558F1C7146608AAC39FE30ED9F4771EA8CDAF2F CFB148EDA5139F375123616E8A8165E09F58E5A3D5B2EA6B8893FB3C2C2D45F7 EF2282017E40FAD289E80CB2F5A12C3172D571233273876D7F0D9472AA258562 D7F2EEDC32134F6DFBDD2E258C305DFD83398F86BBC9F345F1CB3961ACC121B1 22DB97182ABB0689826D38A33E0A8FF68CB426926D3F2CE9E79EA371E8DE2EC0 0FEBC431ED8223E4C2FB0EE09DA1ACDEB92FEE76199E419CDDC7B7AA73C9F443 80B7FB8D9491CAD614FC270A21F866EC2C09CA3CF3D986ED9EF7B828A2F9DAD0 C20BAE5DCFCA7FD3D51ED2BAC33113669DD6CF856895BB05022F829E72B85967 4415F4C5898FD201F043F7F5280BFC6CD96EFFAC6B5A188B439121384A1BE588 86EA19188D75D72696F8F7D46AC5641CABFB123405AA586257CB51BE23B672D6 843F5530A515B2B0AA09735DC77BB877E08B8DB968BF536957945DDD19B82628 22D3FDF874096FE41D08AE1DAAA577047022FFC406E39B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /IKMFZJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 612 792 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 612 792 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 612 792 re W q q [0.1 0 0 0.1 0 0] cm q 315.602 1754.4 5489.998 4410 re W /DeviceGray {} cs [1] sc 315.602 1754.4 5490 4410 re f 10 w 2 J /DeviceGray {} CS [1] SC 315.602 1754.4 5489.998 4410 re S 1035.6 2114.4 4410 3690 re f /DeviceGray {} CS [0] SC 1035.6 2114.4 4410 3690 re S Q q 1035.6 2114.4 4410 3690 re W 5 w 2 J /DeviceGray {} CS [0] SC 4024.2 4246.94 m 3947.83 4323.31 l S 4754.39 5320.1 m 4847.92 5374.1 l S 3299.57 2381.83 m 3375.94 2305.46 l S 3141.08 2537.39 m 3036.76 2509.44 l S 2784.13 3501.94 m 2690.6 3447.94 l S 1998.27 4989.83 m 2074.64 5066.2 l S 1747.13 5357.74 m 1840.66 5411.74 l S 20 w 3523.5 3169.44 m 3530.66 3187.14 l 3536.06 3200.39 l 3544.2 3220.25 l 3556.54 3249.97 l 3575.28 3294.41 l 3603.92 3360.74 l 3633.16 3426.69 l 3662.97 3492.25 l 3693.31 3557.42 l 3724.16 3622.22 l 3755.5 3686.64 l 3787.3 3750.68 l 3819.54 3814.36 l 3852.21 3877.67 l 3885.27 3940.62 l 3918.72 4003.23 l 3952.55 4065.49 l 3997.63 4146.96 l 4043.29 4227.85 l 4089.51 4308.18 l 4136.26 4387.96 l 4183.51 4467.2 l 4231.24 4545.91 l 4279.43 4624.11 l 4328.07 4701.81 l 4377.12 4779.02 l 4426.58 4855.74 l 4476.43 4932 l 4526.66 5007.8 l 4577.24 5083.15 l 4628.16 5158.06 l 4679.42 5232.54 l 4731.01 5306.6 l S /DeviceRGB {} CS [1 0 0] SC 3523.5 3169.44 m 3516.4 3151.72 l 3511.1 3138.41 l 3503.21 3118.42 l 3491.5 3088.37 l 3474.21 3043.16 l 3457.29 2997.79 l 3440.74 2952.27 l 3424.58 2906.6 l 3408.84 2860.8 l 3393.53 2814.88 l 3378.69 2768.85 l 3364.33 2722.74 l 3350.49 2676.56 l 3337.2 2630.35 l 3324.49 2584.16 l 3312.42 2538.03 l 3301.02 2492.05 l 3290.35 2446.3 l 3280.48 2400.92 l 3271.47 2356.11 l 3263.4 2312.12 l 3256.39 2269.38 l 3250.54 2228.51 l 3245.98 2190.52 l 3242.83 2157.14 l 3241.12 2131.23 l 3240.62 2116.96 l 3240.57 2118.07 l 3239.93 2134.21 l 3238.03 2161.38 l 3234.68 2195.53 l 3229.93 2233.99 l 3223.91 2275.18 l 3216.75 2318.12 l 3208.55 2362.24 l 3199.41 2407.14 l 3189.42 2452.58 l 3178.65 2498.37 l 3167.16 2544.38 l 3154.99 2590.52 l 3142.21 2636.71 l 3128.84 2682.92 l 3114.92 2729.09 l 3100.5 2775.2 l 3085.59 2821.21 l 3070.22 2867.12 l 3054.42 2912.9 l 3038.21 2958.55 l 3021.6 3004.05 l 3004.63 3049.39 l 2987.3 3094.58 l 2969.63 3139.6 l 2951.63 3184.46 l 2933.32 3229.15 l 2914.71 3273.67 l 2895.82 3318.01 l 2866.96 3384.21 l 2837.52 3450.02 l 2807.52 3515.44 l 2776.99 3580.48 l 2745.96 3645.14 l 2714.46 3709.43 l 2682.5 3773.34 l 2650.1 3836.88 l 2617.29 3900.07 l 2584.09 3962.9 l 2550.5 4025.38 l 2505.72 4107.14 l 2460.34 4188.31 l 2414.39 4268.92 l 2367.9 4348.96 l 2320.89 4428.47 l 2273.39 4507.44 l 2225.42 4585.89 l 2177 4663.83 l 2128.15 4741.27 l 2078.88 4818.23 l 2029.22 4894.72 l 1979.18 4970.74 l 1928.77 5046.31 l 1878.02 5121.44 l 1826.92 5196.13 l 1775.49 5270.39 l 1723.75 5344.24 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 2154.4 l S 1035.6 5804.4 m 1035.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 2154.4 l S 1770.6 5804.4 m 1770.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 2154.4 l S 2505.6 5804.4 m 2505.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 2154.4 l S 3240.6 5804.4 m 3240.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 2154.4 l S 3975.6 5804.4 m 3975.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 2154.4 l S 4710.6 5804.4 m 4710.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 2154.4 l S 5445.6 5804.4 m 5445.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2115.45 m 5445.6 2115.45 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2115.45 m 1075.6 2115.45 l S 5445.6 2115.45 m 5405.6 2115.45 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2642.45 m 5445.6 2642.45 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2642.45 m 1075.6 2642.45 l S 5445.6 2642.45 m 5405.6 2642.45 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3169.44 m 5445.6 3169.44 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3169.44 m 1075.6 3169.44 l S 5445.6 3169.44 m 5405.6 3169.44 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3696.43 m 5445.6 3696.43 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3696.43 m 1075.6 3696.43 l S 5445.6 3696.43 m 5405.6 3696.43 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4223.42 m 5445.6 4223.42 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4223.42 m 1075.6 4223.42 l S 5445.6 4223.42 m 5405.6 4223.42 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4750.42 m 5445.6 4750.42 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4750.42 m 1075.6 4750.42 l S 5445.6 4750.42 m 5405.6 4750.42 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5277.41 m 5445.6 5277.41 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5277.41 m 1075.6 5277.41 l S 5445.6 5277.41 m 5405.6 5277.41 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 1075.6 5804.4 l S 5445.6 5804.4 m 5405.6 5804.4 l S 10 w 2 J 1035.6 2114.4 4410 3690 re S Q q 720 7200 m 720 7200 l 720 7200 l 720 7200 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -644.52 4633.08] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 95.0602 197.4] Tm 0 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm 73.5 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 82.7399 0 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2637 TJm 147.0001 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 156.2399 0 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 225.0001 0.0402 Td (0) 5.858 Tj -5658.39 TJm (1) 5.858 Tj -5658.39 TJm (2) 5.858 Tj -5658.4 TJm (3) 5.858 Tj -2.2627 TJm 220.0001 -14.72 Td /F13_0 11.9552 Tf (m) 9.9587 Tj 9.937 TJm (u) 6.6471 Tj 3.9372 TJm -12.4999 9.1448 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -6.6198 9.1448 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 9.1448 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.4999 61.8448 Td (0) 5.858 Tj -2.2632 TJm -6.6198 61.8448 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 61.8448 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.4999 114.544 Td (1) 5.858 Tj -2.2632 TJm -6.6198 114.544 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 114.544 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.4999 167.2428 Td (1) 5.858 Tj -2.2632 TJm -6.6198 167.2428 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 167.2428 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.4999 219.942 Td (2) 5.858 Tj -2.2632 TJm -6.6198 219.942 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 219.942 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.4999 272.6416 Td (2) 5.858 Tj -2.2632 TJm -6.6198 272.6416 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 272.6416 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.4999 325.3408 Td (3) 5.858 Tj -2.2632 TJm -6.6198 325.3408 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 325.3408 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.4999 378.0396 Td (3) 5.858 Tj -2.2632 TJm -6.6198 378.0396 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.38 378.0396 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm [0 1 -1 0 77.3199 375.44] Tm 0 0 Td /F13_0 11.9552 Tf (l) 2.6541 Tj 1.1763 TJm (a) 6.6471 Tj 3.9372 TJm (m) 9.9587 Tj -0.1144 TJm (b) 6.6471 Tj 3.9372 TJm (d) 6.6471 Tj 3.9372 TJm (a) 6.6471 Tj 3.9372 TJm [1 0 0 1 378.51 433.604] Tm 0 0 Td /F13_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 107.841 104.706 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -39.644 -214.33 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -91.5729 -188.1261 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -126.0081 -99.4702 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -169.7729 74.2888 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -192.885 108.7099 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font IKMFZJ+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/include/styleMenuNew.fig0000640000175000017500000000025413570013207015561 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 styleMenuNew.png 225 450 1590 450 1590 2085 225 2085 225 450 auto/07p/doc/include/shilgap.eps0000640000175000017500000007126313570013207014603 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .137488724.136567180 %%CreationDate: Sat Dec 15 05:03:34 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%+ font Fixed-Bold %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: shilgap.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%IncludeResource: font Fixed-Bold %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 529.476 213.428571544 moveto 519.476 203.428571544 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 519.476 203.428571544 [ (42) ] 14 -1 0 0 false DrawText grestore gsave 489.514 213.428571197 moveto 479.514 223.428571197 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 479.514 223.428571197 [ (43) ] 14 -1 1 0 false DrawText grestore gsave 449.548 213.428571843 moveto 439.548 203.428571843 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 439.548 203.428571843 [ (44) ] 14 -1 0 0 false DrawText grestore gsave 409.59 213.428570107 moveto 399.59 223.428570107 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 399.59 223.428570107 [ (45) ] 14 -1 1 0 false DrawText grestore gsave 369.612 213.428572275 moveto 379.612 223.428572275 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 379.612 223.428572275 [ (46) ] 14 -0 1 0 false DrawText grestore gsave 329.676 213.428571429 moveto 319.676 223.428571429 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 319.676 223.428571429 [ (47) ] 14 -1 1 0 false DrawText grestore gsave 289.638 213.428574409 moveto 299.638 223.428574409 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 299.638 223.428574409 [ (48) ] 14 -0 1 0 false DrawText grestore gsave 249.7484 213.428571429 moveto 239.7484 223.428571429 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 239.7484 223.428571429 [ (49) ] 14 -1 1 0 false DrawText grestore gsave 209.267 213.428561122 moveto 219.267 223.428561122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 219.267 223.428561122 [ (50) ] 14 -0 1 0 false DrawText grestore gsave 193.017 411.3468571429 moveto 183.017 421.3468571429 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 183.017 421.3468571429 [ (51) ] 14 -1 1 0 false DrawText grestore gsave 192.5582 397.3251428571 moveto 182.5582 407.3251428571 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 182.5582 407.3251428571 [ (52) ] 14 -1 1 0 false DrawText grestore gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 529.476 213.428571544 moveto 519.476 213.813822286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 519.476 213.813822286 moveto 509.476 214.084491429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 509.476 214.084491429 moveto 499.476 213.986093143 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 499.476 213.986093143 moveto 489.514 213.428571197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 489.514 213.428571197 moveto 479.514 212.615914286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 479.514 212.615914286 moveto 469.514 212.041565714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.514 212.041565714 moveto 459.514 212.246348571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.514 212.246348571 moveto 449.548 213.428571843 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 449.548 213.428571843 moveto 439.548 215.149171429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.548 215.149171429 moveto 429.548 216.349834286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.548 216.349834286 moveto 419.548 215.90368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.548 215.90368 moveto 409.59 213.428570107 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.59 213.428570107 moveto 399.59 209.8138 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.59 209.8138 moveto 389.59 207.223542857 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 389.59 207.223542857 moveto 379.59 208.103645714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.59 208.103645714 moveto 369.612 213.428572275 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.612 213.428572275 moveto 359.612 221.150171429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.612 221.150171429 moveto 349.612 226.371371429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.612 226.371371429 moveto 339.612 224.243828571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.612 224.243828571 moveto 329.676 213.428571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.676 213.428571429 moveto 319.676 197.488571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.676 197.488571429 moveto 309.676 185.401771429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.676 185.401771429 moveto 299.676 188.620685714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.676 188.620685714 moveto 289.676 213.302452571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.676 213.302452571 moveto 289.638 213.428574409 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.638 213.428574409 moveto 279.6384 248.971371429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.6384 248.971371429 moveto 269.6384 269.197885714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.6384 269.197885714 moveto 259.6384 257.562114286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.6384 257.562114286 moveto 249.7484 213.428571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.7484 213.428571429 moveto 239.7484 144.922857143 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.7484 144.922857143 moveto 229.7484 82.665714286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.7484 82.665714286 moveto 219.7484 79.92 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.7484 79.92 moveto 209.7484 203.494571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.7484 203.494571429 moveto 209.267 213.428561122 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.267 213.428561122 moveto 199.267 431.7325714286 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.267 431.7325714286 moveto 194.267 426.304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 194.267 426.304 moveto 193.017 411.3468571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.017 411.3468571429 moveto 192.7046 404.8171428571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.7046 404.8171428571 moveto 192.6264 402.1988571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.6264 402.1988571429 moveto 192.5874 400.2737142857 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.5874 400.2737142857 moveto 192.5678 398.7708571429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.5678 398.7708571429 moveto 192.5582 397.3251428571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.5582 397.3251428571 moveto 192.5582 397.3251428571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 280 42 moveto 280 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 280 26 [ (1.00e+02) ] 14 -0.5 0 0 false DrawText grestore gsave 280 42 moveto 280 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 34 [ (2.00e+02) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (4.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 384.8571428571 moveto 64 384.8571428571 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 384.8571428571 [ (3.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 384.8571428571 moveto 480 384.8571428571 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 327.714285714 moveto 64 327.714285714 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 327.714285714 [ (2.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 327.714285714 moveto 480 327.714285714 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 270.571428571 moveto 64 270.571428571 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 270.571428571 [ (1.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 270.571428571 moveto 480 270.571428571 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 213.428571429 moveto 64 213.428571429 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 213.428571429 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 213.428571429 moveto 480 213.428571429 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 156.285714286 moveto 64 156.285714286 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 156.285714286 [ (-1.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 156.285714286 moveto 480 156.285714286 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 99.142857143 moveto 64 99.142857143 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 99.142857143 [ (-2.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave 80 99.142857143 moveto 480 99.142857143 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (-3.00e-03) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Column 6) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Column 0) ] 14 -1 1 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 489.514 213.428571197 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 449.548 213.428571843 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 409.59 213.428570107 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 369.612 213.428572275 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 329.676 213.428571429 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 289.638 213.428574409 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 249.7484 213.428571429 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 209.267 213.428561122 [ (U) ] 13 -0.5 0.5 0 false DrawText grestore gsave /Fixed-Bold findfont 9 scalefont ISOEncode setfont 1.000 0.000 0.000 setrgbcolor AdjustColor 192.5582 397.3251428571 [ (X) ] 13 -0.5 0.5 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/closegap_pcl.eps0000640000175000017500000034316013570013207015605 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 35 160 585 602 %%HiResBoundingBox: 35.574142 160.932258 584.574142 601.932258 %................................... %%Creator: GPL Ghostscript 863 (pswrite) %%CreationDate: 2009/07/27 12:03:24 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginProlog % This copyright applies to everything between here and the %%EndProlog: % Copyright (C) 2008 Artifex Software, Inc. All rights reserved. %%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 /GS_pswrite_2_0_1001 80 dict dup begin /PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch 4 index eq and{ pop pop pop}{ PageSize dup 1 5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} { pop/setpagedevice where { pop 1 dict dup /PageSize PageSize put setpagedevice} { /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat setpage}if}ifelse}ifelse}ifelse} bind def /!{bind def}bind def/#{load def}!/N/counttomark # /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! /w/setlinewidth #/J/setlinecap # /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # /m/moveto #/l/lineto #/c/rcurveto # /p{N 2 idiv{N -2 roll rlineto}repeat}! /P{N 0 gt{N -2 roll moveto p}if}! /h{p closepath}!/H{P closepath}! /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! /re{4 -2 roll m exch dup lx exch ly neg lx h}! /^{3 index neg 3 index neg}! /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! /q/gsave #/Q/grestore #/rf{re fill}! /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! /|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! /|{exch string readstring |=}! /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! /@/currentfile #/${+ @ |}! /B{{2 copy string{readstring pop}aload pop 4 array astore cvx 3 1 roll}repeat pop pop true}! /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! /Ic{exch Ix false 3 colorimage}! /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> /CCITTFaxDecode filter}!/FX{< Q Q q 0 0 51000 0 0 66000 ^ Y 0.996264 i K 8331.12 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 8728.98 17089 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 9060 17020.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 13581.1 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 13979 17089 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 14628 16769 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 14425 16449 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 19081.1 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 19320 17020.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 24493 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 24290 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 29425 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 34584 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 35233 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 35030 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 39834 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 40165 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 45236 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 45733 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 45530 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 23795.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 24415 15695 0 -75.66 P -41.79 61.77 -92.53 90.66 -159.18 90.66 c -132.31 0 -221.84 -115.63 -221.84 -284.99 c 0 -85.68 22.87 -155.42 65.64 -205.23 c 38.79 -43.84 94.48 -69.74 149.18 -69.74 c 65.64 0 111.39 27.91 158.21 93.71 c 0 -26.86 p 0 -70.58 -8.98 -113.32 -29.87 -142.16 c -21.89 -30.82 -64.66 -48.71 -115.4 -48.71 c -37.8 0 -71.63 9.91 -94.51 27.74 c -18.9 14.86 -26.86 28.74 -31.83 59.47 c -84.56 0 p 8.94 -98.52 85.45 -157.22 207.66 -157.22 c 77.5 0 144.07 24.89 177.85 66.71 c 39.74 47.8 54.66 113.52 54.66 236 c 0 436.26 h 24265 15633 m 89.38 0 142.03 -75.66 142.03 -205.98 c 0 -124.35 -53.64 -199.95 -141.04 -199.95 c -90.37 0 -144.99 76.6 -144.99 202.94 c 0 125.35 55.61 203 144 203 c h f 25088 15221.8 m -9 -1.78 -13 -1.78 -18 -1.78 c -29.01 0 -45.01 14.94 -45.01 40.82 c 0 306.7 p 0 92.61 -67.75 142.43 -196.17 142.43 c -75.66 0 -138.38 -21.92 -173.22 -60.77 c -23.89 -26.9 -33.85 -56.79 -35.84 -108.59 c 83.52 0 p 6.96 63.54 44.74 92.35 122.3 92.35 c 74.58 0 116.39 -27.99 116.39 -77.77 c 0 -21.9 p 0 -34.84 -20.94 -49.77 -86.55 -57.74 c -117.3 -14.93 -135.2 -18.91 -167 -31.86 c -60.64 -24.89 -91.45 -71.68 -91.45 -139.37 c 0 -94.57 65.72 -154.3 171.27 -154.3 c 65.72 0 118.5 22.93 177.25 76.77 c 5.97 -52.85 31.86 -76.77 85.64 -76.77 c 16.93 0 29.87 1.99 56.88 8.97 c h 24942 15337.5 m 0 -27.86 -7.98 -44.78 -32.78 -67.66 c -33.73 -30.84 -74.41 -46.77 -123.02 -46.77 c -64.49 0 -102.19 30.84 -102.19 83.58 c 0 54.73 36.71 82.59 125.01 95.52 c 87.3 11.95 105.16 15.92 132.98 28.89 c h f 25175 15695 0 -522.04 84.01 0 0 327.53 P 0 75.66 54.48 136.45 121.85 136.45 c 61.42 0 96.11 -37.89 96.11 -104.59 c 0 -359.39 84.01 0 0 327.53 p 0 75.66 54.75 136.45 122.45 136.45 c 60.73 0 96.59 -38.89 96.59 -104.59 c 0 -359.39 84.01 0 0 391.53 p 0 93.65 -53.81 145.45 -151.32 145.45 c -69.66 0 -111.45 -20.92 -160.21 -79.7 c -30.84 55.79 -72.64 79.7 -140.3 79.7 c -69.65 0 -115.43 -25.9 -160.2 -88.66 c 0 73.72 h f 26005 15695 0 -522.04 84.01 0 0 327.53 P 0 75.66 54.48 136.45 121.85 136.45 c 61.42 0 96.11 -37.89 96.11 -104.59 c 0 -359.39 84.01 0 0 327.53 p 0 75.66 54.75 136.45 122.45 136.45 c 60.73 0 96.59 -38.89 96.59 -104.59 c 0 -359.39 84.01 0 0 391.53 p 0 93.65 -53.81 145.45 -151.32 145.45 c -69.66 0 -111.45 -20.92 -160.21 -79.7 c -30.84 55.79 -72.64 79.7 -140.3 79.7 c -69.65 0 -115.43 -25.9 -160.2 -88.66 c 0 73.72 h f 27298 15221.8 m -9 -1.78 -13 -1.78 -18 -1.78 c -29.01 0 -45.01 14.94 -45.01 40.82 c 0 306.7 p 0 92.61 -67.75 142.43 -196.17 142.43 c -75.66 0 -138.38 -21.92 -173.22 -60.77 c -23.89 -26.9 -33.85 -56.79 -35.84 -108.59 c 83.52 0 p 6.96 63.54 44.74 92.35 122.3 92.35 c 74.58 0 116.39 -27.99 116.39 -77.77 c 0 -21.9 p 0 -34.84 -20.94 -49.77 -86.55 -57.74 c -117.3 -14.93 -135.2 -18.91 -167 -31.86 c -60.64 -24.89 -91.45 -71.68 -91.45 -139.37 c 0 -94.57 65.72 -154.3 171.27 -154.3 c 65.72 0 118.5 22.93 177.25 76.77 c 5.97 -52.85 31.86 -76.77 85.64 -76.77 c 16.93 0 29.87 1.99 56.88 8.97 c h 27152 15337.5 m 0 -27.86 -7.98 -44.78 -32.78 -67.66 c -33.73 -30.84 -74.41 -46.77 -123.02 -46.77 c -64.49 0 -102.19 30.84 -102.19 83.58 c 0 54.73 36.71 82.59 125.01 95.52 c 87.3 11.95 105.16 15.92 132.98 28.89 c h f 27401 15277 0 -104.02 60.01 0 0 -18.02 P 0 -68.99 -13 -88.99 -60.01 -90.99 c 0 -38.01 p 70.01 0 105.02 45 105.02 130.98 c 0 120.04 h f 28165.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 28907 15439 -206.02 0 0 206.23 -70.01 0 ^ -206.16 0 0 -70.01 ^ 0 -205.95 70.01 0 ^ 206.02 0 H f 29041 15277 0 -104.02 60.01 0 0 -18.02 P 0 -68.99 -13 -88.99 -60.01 -90.99 c 0 -38.01 p 70.01 0 105.02 45 105.02 130.98 c 0 120.04 h f 29805.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 30061 15412 237.035 72.0078 re f 8076.02 17523 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 17203 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7416.98 23993 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8066.02 23673 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 23353 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7568.99 29671.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 8066.02 29823 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 29503 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7313.09 36012 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 8066.02 35973 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 35653 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7489.97 42451 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 7423.96 42373.9 0 -375.85 -242.16 0 H f 8066.02 42122 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 41802 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7258 48523.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 8066.02 48272 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 47952 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 5961.02 29936 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 5961.02 30405 75.66 0 P -61.77 -41.81 -90.66 -92.54 -90.66 -159.17 c 0 -132.28 115.63 -221.79 284.99 -221.79 c 85.68 0 155.42 22.87 205.23 65.64 c 43.84 38.79 69.74 94.48 69.74 149.18 c 0 65.64 -27.91 111.39 -93.71 158.15 c 26.86 0 p 70.58 0 113.32 -8.98 142.16 -29.87 c 30.82 -21.89 48.71 -64.66 48.71 -115.4 c 0 -37.8 -9.91 -71.63 -27.75 -94.51 c -14.86 -18.9 -28.73 -26.86 -59.46 -31.83 c 0 -84.56 p 98.52 8.94 157.22 85.45 157.22 207.66 c 0 77.5 -24.89 144.07 -66.71 177.85 c -47.8 39.74 -113.52 54.66 -236 54.66 c -436.26 0 h 6023.03 30255 m 0 89.36 75.66 142 205.98 142 c 124.35 0 199.95 -53.63 199.95 -141.01 c 0 -90.35 -76.6 -144.95 -202.94 -144.95 c -125.35 0 -203 55.6 -203 143.96 c h f 6434.18 31078 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 6318.54 30932 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 5960.96 31165 522.04 0 0 84.01 -327.53 0 P -75.66 0 -136.45 54.48 -136.45 121.85 c 0 61.42 37.89 96.11 104.59 96.11 c 359.39 0 0 84.01 -327.53 0 p -75.66 0 -136.45 54.75 -136.45 122.45 c 0 60.73 38.88 96.59 104.59 96.59 c 359.39 0 0 84.01 -391.53 0 p -93.65 0 -145.45 -53.81 -145.45 -151.32 c 0 -69.66 20.92 -111.45 79.7 -160.21 c -55.79 -30.84 -79.7 -72.64 -79.7 -140.3 c 0 -69.65 25.9 -115.43 88.67 -160.2 c -73.73 0 h f 5960.96 31995 522.04 0 0 84.01 -327.53 0 P -75.66 0 -136.45 54.48 -136.45 121.85 c 0 61.42 37.89 96.11 104.59 96.11 c 359.39 0 0 84.01 -327.53 0 p -75.66 0 -136.45 54.75 -136.45 122.45 c 0 60.73 38.88 96.59 104.59 96.59 c 359.39 0 0 84.01 -391.53 0 p -93.65 0 -145.45 -53.81 -145.45 -151.32 c 0 -69.66 20.92 -111.45 79.7 -160.21 c -55.79 -30.84 -79.7 -72.64 -79.7 -140.3 c 0 -69.65 25.9 -115.43 88.67 -160.2 c -73.73 0 h f 6434.18 33288 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 6318.54 33142 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 6378.98 33390.9 104.02 0 0 60.01 17.86 0 P 68.36 0 88.17 -13 90.15 -60.01 c 38.01 0 p 0 70.01 -44.82 105.02 -130.48 105.02 c -119.55 0 h f 5961.02 34306.1 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 6217 34897 0 -206.02 -206.23 0 0 -70.01 ^ 0 -206.16 70.01 0 ^ 205.95 0 0 70.01 ^ 0 206.02 H f 6378.98 35030.9 104.02 0 0 60.01 17.86 0 P 68.36 0 88.17 -13 90.15 -60.01 c 38.01 0 p 0 70.01 -44.82 105.02 -130.48 105.02 c -119.55 0 h f 5961.02 35946.1 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 6172.01 36051 72.0117 237.035 re f cleartomark end end pagesave restore showpage %%PageTrailer %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%Pages: 1 %%EOF auto/07p/doc/include/rev3.ps0000640000175000017500000003721313570013207013663 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3805 320 PR (/) 3860 320 PR (T) 3915 320 PR 300 2720 moveto (u) 300 2720 PR 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR 760 340 moveto (0) 815 340 PR (.) 870 340 PR (1) 925 340 PR (0) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (0) 1135 460 PR (.) 1190 460 PR (2) 1245 460 PR (0) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (0) 1455 340 PR (.) 1510 340 PR (3) 1565 340 PR (0) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (0) 1775 460 PR (.) 1830 460 PR (4) 1885 460 PR (0) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (0) 2095 340 PR (.) 2150 340 PR (5) 2205 340 PR (0) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (0) 2415 460 PR (.) 2470 460 PR (6) 2525 460 PR (0) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (0) 2735 340 PR (.) 2790 340 PR (7) 2845 340 PR (0) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (0) 3055 460 PR (.) 3110 460 PR (8) 3165 460 PR (0) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (0) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 279 600 PR (1) 334 600 PR (.) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 848 moveto (-) 279 848 PR (0) 334 848 PR (.) 389 848 PR (7) 444 848 PR (5) 499 848 PR 540 848 moveto 600 848 lineto stroke 600 848 moveto 4 1100 moveto (-) 279 1100 PR (0) 334 1100 PR (.) 389 1100 PR (5) 444 1100 PR (0) 499 1100 PR 540 1100 moveto 600 1100 lineto stroke 600 1100 moveto 4 1348 moveto (-) 279 1348 PR (0) 334 1348 PR (.) 389 1348 PR (2) 444 1348 PR (5) 499 1348 PR 540 1348 moveto 600 1348 lineto stroke 600 1348 moveto 4 1600 moveto (0) 334 1600 PR (.) 389 1600 PR (0) 444 1600 PR (0) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1848 moveto (0) 334 1848 PR (.) 389 1848 PR (2) 444 1848 PR (5) 499 1848 PR 540 1848 moveto 600 1848 lineto stroke 600 1848 moveto 4 2100 moveto (0) 334 2100 PR (.) 389 2100 PR (5) 444 2100 PR (0) 499 2100 PR 540 2100 moveto 600 2100 lineto stroke 600 2100 moveto 4 2348 moveto (0) 334 2348 PR (.) 389 2348 PR (7) 444 2348 PR (5) 499 2348 PR 540 2348 moveto 600 2348 lineto stroke 600 2348 moveto 4 2600 moveto (1) 334 2600 PR (.) 389 2600 PR (0) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 1596 moveto 600 1596 lineto stroke 600 1596 moveto 600 1596 moveto 620 1596 lineto stroke 620 1596 moveto 644 1600 lineto stroke 644 1600 moveto 668 1600 lineto stroke 668 1600 moveto 688 1600 lineto stroke 688 1600 moveto 712 1600 lineto stroke 712 1600 moveto 736 1600 lineto stroke 736 1600 moveto 760 1600 lineto stroke 760 1600 moveto 780 1600 lineto stroke 780 1600 moveto 804 1600 lineto stroke 804 1600 moveto 828 1600 lineto stroke 828 1600 moveto 848 1600 lineto stroke 848 1600 moveto 872 1596 lineto stroke 872 1596 moveto 896 1596 lineto stroke 896 1596 moveto 920 1596 lineto stroke 920 1596 moveto 940 1596 lineto stroke 940 1596 moveto 964 1596 lineto stroke 964 1596 moveto 988 1596 lineto stroke 988 1596 moveto 1008 1596 lineto stroke 1008 1596 moveto 1032 1596 lineto stroke 1032 1596 moveto 1056 1596 lineto stroke 1056 1596 moveto 1080 1600 lineto stroke 1080 1600 moveto 1100 1600 lineto stroke 1100 1600 moveto 1124 1600 lineto stroke 1124 1600 moveto 1148 1600 lineto stroke 1148 1600 moveto 1168 1600 lineto stroke 1168 1600 moveto 1192 1600 lineto stroke 1192 1600 moveto 1216 1600 lineto stroke 1216 1600 moveto 1240 1600 lineto stroke 1240 1600 moveto 1260 1600 lineto stroke 1260 1600 moveto 1284 1600 lineto stroke 1284 1600 moveto 1308 1596 lineto stroke 1308 1596 moveto 1328 1596 lineto stroke 1328 1596 moveto 1352 1596 lineto stroke 1352 1596 moveto 1376 1596 lineto stroke 1376 1596 moveto 1400 1596 lineto stroke 1400 1596 moveto 1420 1596 lineto stroke 1420 1596 moveto 1444 1596 lineto stroke 1444 1596 moveto 1468 1596 lineto stroke 1468 1596 moveto 1488 1596 lineto stroke 1488 1596 moveto 1512 1596 lineto stroke 1512 1596 moveto 1536 1600 lineto stroke 1536 1600 moveto 1560 1600 lineto stroke 1560 1600 moveto 1580 1600 lineto stroke 1580 1600 moveto 1604 1600 lineto stroke 1604 1600 moveto 1628 1600 lineto stroke 1628 1600 moveto 1648 1600 lineto stroke 1648 1600 moveto 1672 1600 lineto stroke 1672 1600 moveto 1696 1600 lineto stroke 1696 1600 moveto 1720 1600 lineto stroke 1720 1600 moveto 1740 1600 lineto stroke 1740 1600 moveto 1764 1596 lineto stroke 1764 1596 moveto 1788 1596 lineto stroke 1788 1596 moveto 1808 1596 lineto stroke 1808 1596 moveto 1832 1596 lineto stroke 1832 1596 moveto 1856 1596 lineto stroke 1856 1596 moveto 1880 1596 lineto stroke 1880 1596 moveto 1900 1596 lineto stroke 1900 1596 moveto 1924 1596 lineto stroke 1924 1596 moveto 1948 1596 lineto stroke 1948 1596 moveto 1968 1596 lineto stroke 1968 1596 moveto 1992 1600 lineto stroke 1992 1600 moveto 2016 1600 lineto stroke 2016 1600 moveto 2040 1600 lineto stroke 2040 1600 moveto 2060 1604 lineto stroke 2060 1604 moveto 2084 1604 lineto stroke 2084 1604 moveto 2108 1604 lineto stroke 2108 1604 moveto 2128 1604 lineto stroke 2128 1604 moveto 2152 1600 lineto stroke 2152 1600 moveto 2176 1600 lineto stroke 2176 1600 moveto 2200 1596 lineto stroke 2200 1596 moveto 2220 1596 lineto stroke 2220 1596 moveto 2244 1592 lineto stroke 2244 1592 moveto 2268 1588 lineto stroke 2268 1588 moveto 2288 1584 lineto stroke 2288 1584 moveto 2312 1584 lineto stroke 2312 1584 moveto 2336 1584 lineto stroke 2336 1584 moveto 2360 1584 lineto stroke 2360 1584 moveto 2380 1588 lineto stroke 2380 1588 moveto 2404 1592 lineto stroke 2404 1592 moveto 2428 1600 lineto stroke 2428 1600 moveto 2448 1612 lineto stroke 2448 1612 moveto 2472 1620 lineto stroke 2472 1620 moveto 2496 1632 lineto stroke 2496 1632 moveto 2520 1640 lineto stroke 2520 1640 moveto 2540 1644 lineto stroke 2540 1644 moveto 2564 1640 lineto stroke 2564 1640 moveto 2588 1636 lineto stroke 2588 1636 moveto 2608 1624 lineto stroke 2608 1624 moveto 2632 1604 lineto stroke 2632 1604 moveto 2656 1580 lineto stroke 2656 1580 moveto 2680 1552 lineto stroke 2680 1552 moveto 2700 1524 lineto stroke 2700 1524 moveto 2724 1500 lineto stroke 2724 1500 moveto 2748 1480 lineto stroke 2748 1480 moveto 2768 1472 lineto stroke 2768 1472 moveto 2792 1476 lineto stroke 2792 1476 moveto 2816 1496 lineto stroke 2816 1496 moveto 2840 1536 lineto stroke 2840 1536 moveto 2860 1592 lineto stroke 2860 1592 moveto 2884 1660 lineto stroke 2884 1660 moveto 2908 1740 lineto stroke 2908 1740 moveto 2928 1820 lineto stroke 2928 1820 moveto 2952 1888 lineto stroke 2952 1888 moveto 2976 1940 lineto stroke 2976 1940 moveto 3000 1960 lineto stroke 3000 1960 moveto 3020 1940 lineto stroke 3020 1940 moveto 3044 1872 lineto stroke 3044 1872 moveto 3068 1760 lineto stroke 3068 1760 moveto 3088 1604 lineto stroke 3088 1604 moveto 3112 1416 lineto stroke 3112 1416 moveto 3136 1212 lineto stroke 3136 1212 moveto 3160 1008 lineto stroke 3160 1008 moveto 3180 832 lineto stroke 3180 832 moveto 3204 712 lineto stroke 3204 712 moveto 3228 660 lineto stroke 3228 660 moveto 3248 688 lineto stroke 3248 688 moveto 3272 788 lineto stroke 3272 788 moveto 3296 952 lineto stroke 3296 952 moveto 3320 1148 lineto stroke 3320 1148 moveto 3340 1360 lineto stroke 3340 1360 moveto 3364 1560 lineto stroke 3364 1560 moveto 3388 1732 lineto stroke 3388 1732 moveto 3408 1860 lineto stroke 3408 1860 moveto 3432 1944 lineto stroke 3432 1944 moveto 3456 1980 lineto stroke 3456 1980 moveto 3480 1972 lineto stroke 3480 1972 moveto 3500 1928 lineto stroke 3500 1928 moveto 3524 1856 lineto stroke 3524 1856 moveto 3548 1768 lineto stroke 3548 1768 moveto 3568 1680 lineto stroke 3568 1680 moveto 3592 1592 lineto stroke 3592 1592 moveto 3616 1520 lineto stroke 3616 1520 moveto 3640 1464 lineto stroke 3640 1464 moveto 3660 1432 lineto stroke 3660 1432 moveto 3684 1416 lineto stroke 3684 1416 moveto 3708 1424 lineto stroke 3708 1424 moveto 3728 1452 lineto stroke 3728 1452 moveto 3752 1492 lineto stroke 3752 1492 moveto 3776 1544 lineto stroke 3776 1544 moveto 3800 1600 lineto stroke 3800 1600 moveto 600 1596 moveto 600 1596 lineto stroke 600 1596 moveto 600 1596 moveto 708 1600 lineto stroke 708 1600 moveto 820 1600 lineto stroke 820 1600 moveto 932 1596 lineto stroke 932 1596 moveto 1044 1596 lineto stroke 1044 1596 moveto 1120 1600 lineto stroke 1120 1600 moveto 1196 1600 lineto stroke 1196 1600 moveto 1272 1600 lineto stroke 1272 1600 moveto 1348 1596 lineto stroke 1348 1596 moveto 1408 1596 lineto stroke 1408 1596 moveto 1464 1596 lineto stroke 1464 1596 moveto 1524 1600 lineto stroke 1524 1600 moveto 1580 1600 lineto stroke 1580 1600 moveto 1628 1600 lineto stroke 1628 1600 moveto 1676 1600 lineto stroke 1676 1600 moveto 1724 1600 lineto stroke 1724 1600 moveto 1772 1596 lineto stroke 1772 1596 moveto 1816 1596 lineto stroke 1816 1596 moveto 1856 1596 lineto stroke 1856 1596 moveto 1896 1596 lineto stroke 1896 1596 moveto 1936 1596 lineto stroke 1936 1596 moveto 1972 1600 lineto stroke 1972 1600 moveto 2008 1600 lineto stroke 2008 1600 moveto 2044 1600 lineto stroke 2044 1600 moveto 2080 1604 lineto stroke 2080 1604 moveto 2108 1604 lineto stroke 2108 1604 moveto 2140 1600 lineto stroke 2140 1600 moveto 2172 1600 lineto stroke 2172 1600 moveto 2204 1596 lineto stroke 2204 1596 moveto 2228 1592 lineto stroke 2228 1592 moveto 2256 1588 lineto stroke 2256 1588 moveto 2284 1588 lineto stroke 2284 1588 moveto 2312 1584 lineto stroke 2312 1584 moveto 2336 1584 lineto stroke 2336 1584 moveto 2364 1588 lineto stroke 2364 1588 moveto 2388 1592 lineto stroke 2388 1592 moveto 2412 1600 lineto stroke 2412 1600 moveto 2436 1608 lineto stroke 2436 1608 moveto 2460 1616 lineto stroke 2460 1616 moveto 2484 1624 lineto stroke 2484 1624 moveto 2504 1632 lineto stroke 2504 1632 moveto 2528 1636 lineto stroke 2528 1636 moveto 2548 1636 lineto stroke 2548 1636 moveto 2568 1636 lineto stroke 2568 1636 moveto 2592 1628 lineto stroke 2592 1628 moveto 2612 1616 lineto stroke 2612 1616 moveto 2632 1604 lineto stroke 2632 1604 moveto 2648 1584 lineto stroke 2648 1584 moveto 2668 1564 lineto stroke 2668 1564 moveto 2688 1544 lineto stroke 2688 1544 moveto 2708 1524 lineto stroke 2708 1524 moveto 2724 1504 lineto stroke 2724 1504 moveto 2744 1492 lineto stroke 2744 1492 moveto 2764 1484 lineto stroke 2764 1484 moveto 2780 1484 lineto stroke 2780 1484 moveto 2800 1496 lineto stroke 2800 1496 moveto 2820 1516 lineto stroke 2820 1516 moveto 2836 1544 lineto stroke 2836 1544 moveto 2852 1580 lineto stroke 2852 1580 moveto 2868 1624 lineto stroke 2868 1624 moveto 2884 1672 lineto stroke 2884 1672 moveto 2900 1716 lineto stroke 2900 1716 moveto 2916 1764 lineto stroke 2916 1764 moveto 2932 1808 lineto stroke 2932 1808 moveto 2944 1848 lineto stroke 2944 1848 moveto 2960 1880 lineto stroke 2960 1880 moveto 2972 1904 lineto stroke 2972 1904 moveto 2988 1916 lineto stroke 2988 1916 moveto 3004 1916 lineto stroke 3004 1916 moveto 3016 1904 lineto stroke 3016 1904 moveto 3028 1876 lineto stroke 3028 1876 moveto 3044 1832 lineto stroke 3044 1832 moveto 3056 1776 lineto stroke 3056 1776 moveto 3068 1716 lineto stroke 3068 1716 moveto 3080 1644 lineto stroke 3080 1644 moveto 3092 1564 lineto stroke 3092 1564 moveto 3100 1476 lineto stroke 3100 1476 moveto 3112 1400 lineto stroke 3112 1400 moveto 3120 1320 lineto stroke 3120 1320 moveto 3132 1236 lineto stroke 3132 1236 moveto 3140 1156 lineto stroke 3140 1156 moveto 3152 1084 lineto stroke 3152 1084 moveto 3160 1012 lineto stroke 3160 1012 moveto 3168 948 lineto stroke 3168 948 moveto 3180 888 lineto stroke 3180 888 moveto 3188 840 lineto stroke 3188 840 moveto 3196 796 lineto stroke 3196 796 moveto 3204 768 lineto stroke 3204 768 moveto 3216 748 lineto stroke 3216 748 moveto 3224 744 lineto stroke 3224 744 moveto 3236 752 lineto stroke 3236 752 moveto 3244 772 lineto stroke 3244 772 moveto 3252 808 lineto stroke 3252 808 moveto 3264 860 lineto stroke 3264 860 moveto 3272 924 lineto stroke 3272 924 moveto 3284 1000 lineto stroke 3284 1000 moveto 3292 1084 lineto stroke 3292 1084 moveto 3304 1184 lineto stroke 3304 1184 moveto 3316 1288 lineto stroke 3316 1288 moveto 3324 1396 lineto stroke 3324 1396 moveto 3336 1512 lineto stroke 3336 1512 moveto 3344 1624 lineto stroke 3344 1624 moveto 3356 1740 lineto stroke 3356 1740 moveto 3368 1848 lineto stroke 3368 1848 moveto 3376 1952 lineto stroke 3376 1952 moveto 3388 2044 lineto stroke 3388 2044 moveto 3396 2128 lineto stroke 3396 2128 moveto 3408 2204 lineto stroke 3408 2204 moveto 3416 2264 lineto stroke 3416 2264 moveto 3428 2312 lineto stroke 3428 2312 moveto 3436 2348 lineto stroke 3436 2348 moveto 3448 2368 lineto stroke 3448 2368 moveto 3456 2376 lineto stroke 3456 2376 moveto 3464 2368 lineto stroke 3464 2368 moveto 3476 2352 lineto stroke 3476 2352 moveto 3484 2320 lineto stroke 3484 2320 moveto 3496 2276 lineto stroke 3496 2276 moveto 3504 2220 lineto stroke 3504 2220 moveto 3516 2152 lineto stroke 3516 2152 moveto 3528 2076 lineto stroke 3528 2076 moveto 3536 1996 lineto stroke 3536 1996 moveto 3548 1892 lineto stroke 3548 1892 moveto 3560 1784 lineto stroke 3560 1784 moveto 3576 1680 lineto stroke 3576 1680 moveto 3588 1576 lineto stroke 3588 1576 moveto 3600 1476 lineto stroke 3600 1476 moveto 3616 1384 lineto stroke 3616 1384 moveto 3628 1308 lineto stroke 3628 1308 moveto 3640 1244 lineto stroke 3640 1244 moveto 3656 1200 lineto stroke 3656 1200 moveto 3668 1172 lineto stroke 3668 1172 moveto 3680 1160 lineto stroke 3680 1160 moveto 3692 1160 lineto stroke 3692 1160 moveto 3708 1180 lineto stroke 3708 1180 moveto 3720 1208 lineto stroke 3720 1208 moveto 3732 1256 lineto stroke 3732 1256 moveto 3744 1308 lineto stroke 3744 1308 moveto 3760 1372 lineto stroke 3760 1372 moveto 3772 1444 lineto stroke 3772 1444 moveto 3784 1520 lineto stroke 3784 1520 moveto 3800 1600 lineto stroke 3800 1600 moveto 0 3068 moveto showpage auto/07p/doc/include/clrTyMu0.fig0000640000175000017500000000024213570013207014576 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 clrTyMu0.png 75 75 9045 75 9045 6945 75 6945 75 75 auto/07p/doc/include/cont_pcl.eps0000640000175000017500000022561013570013207014752 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 32 160 582 602 %%HiResBoundingBox: 32.634131 160.932258 581.634131 601.932258 %................................... %%Creator: GPL Ghostscript 863 (pswrite) %%CreationDate: 2009/07/27 12:03:59 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginProlog % This copyright applies to everything between here and the %%EndProlog: % Copyright (C) 2008 Artifex Software, Inc. All rights reserved. %%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 /GS_pswrite_2_0_1001 80 dict dup begin /PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch 4 index eq and{ pop pop pop}{ PageSize dup 1 5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} { pop/setpagedevice where { pop 1 dict dup /PageSize PageSize put setpagedevice} { /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat setpage}if}ifelse}ifelse}ifelse} bind def /!{bind def}bind def/#{load def}!/N/counttomark # /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! /w/setlinewidth #/J/setlinecap # /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # /m/moveto #/l/lineto #/c/rcurveto # /p{N 2 idiv{N -2 roll rlineto}repeat}! /P{N 0 gt{N -2 roll moveto p}if}! /h{p closepath}!/H{P closepath}! /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! /re{4 -2 roll m exch dup lx exch ly neg lx h}! /^{3 index neg 3 index neg}! /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! /q/gsave #/Q/grestore #/rf{re fill}! /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! /|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! /|{exch string readstring |=}! /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! /@/currentfile #/${+ @ |}! /B{{2 copy string{readstring pop}aload pop 4 array astore cvx 3 1 roll}repeat pop pop true}! /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! /Ic{exch Ix false 3 colorimage}! /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> /CCITTFaxDecode filter}!/FX{< Q Q q 0 0 51000 0 0 66000 ^ Y 0.996264 i K 8331.12 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 8801.97 17098 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 8735.96 17020.9 0 -375.85 -242.16 0 H f 9378.02 16769 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 9174.98 16449 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 12414.1 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 12708.1 16808 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 13461 16769 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 13258 16449 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 16497.1 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 17047 16617.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 17544 16769 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 17341 16449 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 20581.1 16679 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 20979 17089 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 21628 16769 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 21425 16449 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 25076 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 24873 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 28750 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 29399 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 29196 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 32986 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 33483 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 33280 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 36813.1 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 37566 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 37363 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 41073 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 41007 17023.9 0 -375.85 -242.16 0 H f 41649 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 41446 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 44925 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 45733 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 45530 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 23795.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 24415 15695 0 -75.66 P -41.79 61.77 -92.53 90.66 -159.18 90.66 c -132.31 0 -221.84 -115.63 -221.84 -284.99 c 0 -85.68 22.87 -155.42 65.64 -205.23 c 38.79 -43.84 94.48 -69.74 149.18 -69.74 c 65.64 0 111.39 27.91 158.21 93.71 c 0 -26.86 p 0 -70.58 -8.98 -113.32 -29.87 -142.16 c -21.89 -30.82 -64.66 -48.71 -115.4 -48.71 c -37.8 0 -71.63 9.91 -94.51 27.74 c -18.9 14.86 -26.86 28.74 -31.83 59.47 c -84.56 0 p 8.94 -98.52 85.45 -157.22 207.66 -157.22 c 77.5 0 144.07 24.89 177.85 66.71 c 39.74 47.8 54.66 113.52 54.66 236 c 0 436.26 h 24265 15633 m 89.38 0 142.03 -75.66 142.03 -205.98 c 0 -124.35 -53.64 -199.95 -141.04 -199.95 c -90.37 0 -144.99 76.6 -144.99 202.94 c 0 125.35 55.61 203 144 203 c h f 25088 15221.8 m -9 -1.78 -13 -1.78 -18 -1.78 c -29.01 0 -45.01 14.94 -45.01 40.82 c 0 306.7 p 0 92.61 -67.75 142.43 -196.17 142.43 c -75.66 0 -138.38 -21.92 -173.22 -60.77 c -23.89 -26.9 -33.85 -56.79 -35.84 -108.59 c 83.52 0 p 6.96 63.54 44.74 92.35 122.3 92.35 c 74.58 0 116.39 -27.99 116.39 -77.77 c 0 -21.9 p 0 -34.84 -20.94 -49.77 -86.55 -57.74 c -117.3 -14.93 -135.2 -18.91 -167 -31.86 c -60.64 -24.89 -91.45 -71.68 -91.45 -139.37 c 0 -94.57 65.72 -154.3 171.27 -154.3 c 65.72 0 118.5 22.93 177.25 76.77 c 5.97 -52.85 31.86 -76.77 85.64 -76.77 c 16.93 0 29.87 1.99 56.88 8.97 c h 24942 15337.5 m 0 -27.86 -7.98 -44.78 -32.78 -67.66 c -33.73 -30.84 -74.41 -46.77 -123.02 -46.77 c -64.49 0 -102.19 30.84 -102.19 83.58 c 0 54.73 36.71 82.59 125.01 95.52 c 87.3 11.95 105.16 15.92 132.98 28.89 c h f 25175 15695 0 -522.04 84.01 0 0 327.53 P 0 75.66 54.48 136.45 121.85 136.45 c 61.42 0 96.11 -37.89 96.11 -104.59 c 0 -359.39 84.01 0 0 327.53 p 0 75.66 54.75 136.45 122.45 136.45 c 60.73 0 96.59 -38.89 96.59 -104.59 c 0 -359.39 84.01 0 0 391.53 p 0 93.65 -53.81 145.45 -151.32 145.45 c -69.66 0 -111.45 -20.92 -160.21 -79.7 c -30.84 55.79 -72.64 79.7 -140.3 79.7 c -69.65 0 -115.43 -25.9 -160.2 -88.66 c 0 73.72 h f 26005 15695 0 -522.04 84.01 0 0 327.53 P 0 75.66 54.48 136.45 121.85 136.45 c 61.42 0 96.11 -37.89 96.11 -104.59 c 0 -359.39 84.01 0 0 327.53 p 0 75.66 54.75 136.45 122.45 136.45 c 60.73 0 96.59 -38.89 96.59 -104.59 c 0 -359.39 84.01 0 0 391.53 p 0 93.65 -53.81 145.45 -151.32 145.45 c -69.66 0 -111.45 -20.92 -160.21 -79.7 c -30.84 55.79 -72.64 79.7 -140.3 79.7 c -69.65 0 -115.43 -25.9 -160.2 -88.66 c 0 73.72 h f 27298 15221.8 m -9 -1.78 -13 -1.78 -18 -1.78 c -29.01 0 -45.01 14.94 -45.01 40.82 c 0 306.7 p 0 92.61 -67.75 142.43 -196.17 142.43 c -75.66 0 -138.38 -21.92 -173.22 -60.77 c -23.89 -26.9 -33.85 -56.79 -35.84 -108.59 c 83.52 0 p 6.96 63.54 44.74 92.35 122.3 92.35 c 74.58 0 116.39 -27.99 116.39 -77.77 c 0 -21.9 p 0 -34.84 -20.94 -49.77 -86.55 -57.74 c -117.3 -14.93 -135.2 -18.91 -167 -31.86 c -60.64 -24.89 -91.45 -71.68 -91.45 -139.37 c 0 -94.57 65.72 -154.3 171.27 -154.3 c 65.72 0 118.5 22.93 177.25 76.77 c 5.97 -52.85 31.86 -76.77 85.64 -76.77 c 16.93 0 29.87 1.99 56.88 8.97 c h 27152 15337.5 m 0 -27.86 -7.98 -44.78 -32.78 -67.66 c -33.73 -30.84 -74.41 -46.77 -123.02 -46.77 c -64.49 0 -102.19 30.84 -102.19 83.58 c 0 54.73 36.71 82.59 125.01 95.52 c 87.3 11.95 105.16 15.92 132.98 28.89 c h f 27401 15277 0 -104.02 60.01 0 0 -18.02 P 0 -68.99 -13 -88.99 -60.01 -90.99 c 0 -38.01 p 70.01 0 105.02 45 105.02 130.98 c 0 120.04 h f 28165.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 28907 15439 -206.02 0 0 206.23 -70.01 0 ^ -206.16 0 0 -70.01 ^ 0 -205.95 70.01 0 ^ 206.02 0 H f 29041 15277 0 -104.02 60.01 0 0 -18.02 P 0 -68.99 -13 -88.99 -60.01 -90.99 c 0 -38.01 p 70.01 0 105.02 45 105.02 130.98 c 0 120.04 h f 29805.9 15442.9 175.34 252.06 -93.65 0 -125.53 -189.23 -125.53 189.23 -94.64 0 174.35 -256.04 -184.31 -265.94 94.64 0 132.5 200.25 130.51 -200.25 96.64 0 H f 30061 15412 237.035 72.0078 re f 8076.02 17522 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 17202 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7568.99 22495.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 7748 22898.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 7258 28023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 8066.02 27772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7862.98 27452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7603.23 33196.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 7748 33148.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 6916.98 38342 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 7566.02 38022 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7362.98 37702 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 8056.02 38022 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7852.98 37702 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 6916.98 43467 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 7558.99 42995.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 7738 43398.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 6916.98 48592 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 7248 48523.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 8056.02 48272 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7852.98 47952 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 5471.02 29936 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 5471.02 30405 75.66 0 P -61.77 -41.81 -90.66 -92.54 -90.66 -159.17 c 0 -132.28 115.63 -221.79 284.99 -221.79 c 85.68 0 155.42 22.87 205.23 65.64 c 43.84 38.79 69.74 94.48 69.74 149.18 c 0 65.64 -27.91 111.39 -93.71 158.15 c 26.86 0 p 70.58 0 113.32 -8.98 142.16 -29.87 c 30.82 -21.89 48.71 -64.66 48.71 -115.4 c 0 -37.8 -9.91 -71.63 -27.75 -94.51 c -14.86 -18.9 -28.73 -26.86 -59.46 -31.83 c 0 -84.56 p 98.52 8.94 157.22 85.45 157.22 207.66 c 0 77.5 -24.89 144.07 -66.71 177.85 c -47.8 39.74 -113.52 54.66 -236 54.66 c -436.26 0 h 5533.03 30255 m 0 89.36 75.66 142 205.98 142 c 124.35 0 199.95 -53.63 199.95 -141.01 c 0 -90.35 -76.6 -144.95 -202.94 -144.95 c -125.35 0 -203 55.6 -203 143.96 c h f 5944.18 31078 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 5828.54 30932 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 5470.96 31165 522.04 0 0 84.01 -327.53 0 P -75.66 0 -136.45 54.48 -136.45 121.85 c 0 61.42 37.89 96.11 104.59 96.11 c 359.39 0 0 84.01 -327.53 0 p -75.66 0 -136.45 54.75 -136.45 122.45 c 0 60.73 38.88 96.59 104.59 96.59 c 359.39 0 0 84.01 -391.53 0 p -93.65 0 -145.45 -53.81 -145.45 -151.32 c 0 -69.66 20.92 -111.45 79.7 -160.21 c -55.79 -30.84 -79.7 -72.64 -79.7 -140.3 c 0 -69.65 25.9 -115.43 88.67 -160.2 c -73.73 0 h f 5470.96 31995 522.04 0 0 84.01 -327.53 0 P -75.66 0 -136.45 54.48 -136.45 121.85 c 0 61.42 37.89 96.11 104.59 96.11 c 359.39 0 0 84.01 -327.53 0 p -75.66 0 -136.45 54.75 -136.45 122.45 c 0 60.73 38.88 96.59 104.59 96.59 c 359.39 0 0 84.01 -391.53 0 p -93.65 0 -145.45 -53.81 -145.45 -151.32 c 0 -69.66 20.92 -111.45 79.7 -160.21 c -55.79 -30.84 -79.7 -72.64 -79.7 -140.3 c 0 -69.65 25.9 -115.43 88.67 -160.2 c -73.73 0 h f 5944.18 33288 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 5828.54 33142 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 5888.98 33390.9 104.02 0 0 60.01 17.86 0 P 68.36 0 88.17 -13 90.15 -60.01 c 38.01 0 p 0 70.01 -44.82 105.02 -130.48 105.02 c -119.55 0 h f 5471.02 34306.1 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 5727 34897 0 -206.02 -206.23 0 0 -70.01 ^ 0 -206.16 70.01 0 ^ 205.95 0 0 70.01 ^ 0 206.02 H f 5888.98 35030.9 104.02 0 0 60.01 17.86 0 P 68.36 0 88.17 -13 90.15 -60.01 c 38.01 0 p 0 70.01 -44.82 105.02 -130.48 105.02 c -119.55 0 h f 5471.02 35946.1 0 -389.06 73.01 0 0 290.72 374.32 -311.71 74.64 0 0 424.07 -73.01 0 0 -323.57 -375.96 309.55 H f 5682.01 36051 72.0117 237.035 re f 20387 20136 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 20653.2 20373 47.69 0 P 96.38 0 146.11 -43.67 146.11 -128.02 c 0 -88.32 -54.8 -140.92 -146.32 -140.92 c -95.5 0 -142.26 47.74 -148.23 150.2 c -87.54 0 p 3.98 -56.81 13.94 -93.68 30.87 -125.57 c 35.84 -67.76 105.55 -102.64 202.14 -102.64 c 145.38 0 239.09 86.63 239.09 220.07 c 0 89.62 -34.85 139.41 -119.43 168.29 c 65.63 25.89 98.44 75.68 98.44 146.38 c 0 121.48 -80.68 194.22 -215.11 194.22 c -142.39 0 -218.08 -77.59 -221.06 -227.77 c 87.52 0 p 1 42.64 4.97 66.44 15.91 88.25 c 19.89 38.68 63.65 62.5 118.35 62.5 c 77.58 0 124.38 -45.63 124.38 -119.96 c 0 -49.56 -17.89 -79.29 -56.62 -95.15 c -23.83 -9.91 -54.62 -13.88 -116.19 -14.87 c h f 29519 23108 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 29784.2 23345 47.69 0 P 96.38 0 146.11 -43.67 146.11 -128.02 c 0 -88.32 -54.8 -140.92 -146.32 -140.92 c -95.5 0 -142.26 47.74 -148.23 150.2 c -87.54 0 p 3.98 -56.81 13.94 -93.68 30.87 -125.57 c 35.84 -67.76 105.55 -102.64 202.14 -102.64 c 145.38 0 239.09 86.63 239.09 220.07 c 0 89.62 -34.85 139.41 -119.43 168.29 c 65.63 25.89 98.44 75.68 98.44 146.38 c 0 121.48 -80.68 194.22 -215.11 194.22 c -142.39 0 -218.08 -77.59 -221.06 -227.77 c 87.52 0 p 1 42.64 4.97 66.44 15.91 88.25 c 19.89 38.68 63.65 62.5 118.35 62.5 c 77.58 0 124.38 -45.63 124.38 -119.96 c 0 -49.56 -17.89 -79.29 -56.62 -95.15 c -23.83 -9.91 -54.62 -13.88 -116.19 -14.87 c h f 26646 19426 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 26912.2 19663 47.69 0 P 96.38 0 146.11 -43.67 146.11 -128.02 c 0 -88.32 -54.8 -140.92 -146.32 -140.92 c -95.5 0 -142.26 47.74 -148.23 150.2 c -87.54 0 p 3.98 -56.81 13.94 -93.68 30.87 -125.57 c 35.84 -67.76 105.55 -102.64 202.14 -102.64 c 145.38 0 239.09 86.63 239.09 220.07 c 0 89.62 -34.85 139.41 -119.43 168.29 c 65.63 25.89 98.44 75.68 98.44 146.38 c 0 121.48 -80.68 194.22 -215.11 194.22 c -142.39 0 -218.08 -77.59 -221.06 -227.77 c 87.52 0 p 1 42.64 4.97 66.44 15.91 88.25 c 19.89 38.68 63.65 62.5 118.35 62.5 c 77.58 0 124.38 -45.63 124.38 -119.96 c 0 -49.56 -17.89 -79.29 -56.62 -95.15 c -23.83 -9.91 -54.62 -13.88 -116.19 -14.87 c h f 18435 23230 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 18807 23312 0 -169 88.01 0 ^ 104.02 0 0 79.01 ^ 0 457.97 -64.88 0 -321.27 -444.35 0 -92.63 H 18807 23391 -221.42 0 221.42 308.9 H f 24155 24496 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 24527 24578 0 -169 88.01 0 ^ 104.02 0 0 79.01 ^ 0 457.97 -64.88 0 -321.27 -444.35 0 -92.63 H 24527 24657 -221.42 0 221.42 308.9 H f 27591 20978 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 27963 21060 0 -169 88.01 0 ^ 104.02 0 0 79.01 ^ 0 457.97 -64.88 0 -321.27 -444.35 0 -92.63 H 27963 21139 -221.42 0 221.42 308.9 H f 15884 38338 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 16403.1 38957 -364.54 0 -52.79 -384.18 80.6 0 P 40.8 48.4 74.63 65.2 129.36 65.2 c 94.53 0 154.27 -64.62 154.27 -168.97 c 0 -101.37 -58.77 -162.99 -154.29 -162.99 c -76.62 0 -123.39 38.77 -144.29 118.32 c -87.56 0 p 11.95 -57.82 21.91 -85.72 42.82 -111.62 c 39.84 -53.82 111.55 -84.7 191.24 -84.7 c 142.43 0 242.09 103.56 242.09 252.93 c 0 139.41 -92.68 235.06 -228.14 235.06 c -49.8 0 -89.64 -12.88 -130.47 -42.59 c 27.89 196.55 293.82 0 h f 19844 26960 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 20364.1 27579 -364.54 0 -52.79 -384.18 80.6 0 P 40.8 48.4 74.63 65.2 129.36 65.2 c 94.53 0 154.27 -64.62 154.27 -168.97 c 0 -101.37 -58.77 -162.99 -154.29 -162.99 c -76.62 0 -123.39 38.77 -144.29 118.32 c -87.56 0 p 11.95 -57.82 21.91 -85.72 42.82 -111.62 c 39.84 -53.82 111.55 -84.7 191.24 -84.7 c 142.43 0 242.09 103.56 242.09 252.93 c 0 139.41 -92.68 235.06 -228.14 235.06 c -49.8 0 -89.64 -12.88 -130.47 -42.59 c 27.89 196.55 293.82 0 h f 20541 18612 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 21061.1 19231 -364.54 0 -52.79 -384.18 80.6 0 P 40.8 48.4 74.63 65.2 129.36 65.2 c 94.53 0 154.27 -64.62 154.27 -168.97 c 0 -101.37 -58.77 -162.99 -154.29 -162.99 c -76.62 0 -123.39 38.77 -144.29 118.32 c -87.56 0 p 11.95 -57.82 21.91 -85.72 42.82 -111.62 c 39.84 -53.82 111.55 -84.7 191.24 -84.7 c 142.43 0 242.09 103.56 242.09 252.93 c 0 139.41 -92.68 235.06 -228.14 235.06 c -49.8 0 -89.64 -12.88 -130.47 -42.59 c 27.89 196.55 293.82 0 h f cleartomark end end pagesave restore showpage %%PageTrailer %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%Pages: 1 %%EOF auto/07p/doc/include/typeMenu.fig0000640000175000017500000000023513570013207014727 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 typeMenu.png 0 75 1365 75 1365 765 0 765 0 75 auto/07p/doc/include/closegap_pcl_par.eps0000640000175000017500000013064313570013207016447 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 36 161 586 603 %%HiResBoundingBox: 36.873131 161.898528 585.873131 602.898528 %................................... %%Creator: GPL Ghostscript 863 (pswrite) %%CreationDate: 2009/07/27 15:48:27 %%DocumentData: Clean7Bit %%LanguageLevel: 2 %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginProlog % This copyright applies to everything between here and the %%EndProlog: % Copyright (C) 2008 Artifex Software, Inc. All rights reserved. %%BeginResource: procset GS_pswrite_2_0_1001 1.001 0 /GS_pswrite_2_0_1001 80 dict dup begin /PageSize 2 array def/setpagesize{ PageSize aload pop 3 index eq exch 4 index eq and{ pop pop pop}{ PageSize dup 1 5 -1 roll put 0 4 -1 roll put dup null eq {false} {dup where} ifelse{ exch get exec} { pop/setpagedevice where { pop 1 dict dup /PageSize PageSize put setpagedevice} { /setpage where{ pop PageSize aload pop pageparams 3 {exch pop} repeat setpage}if}ifelse}ifelse}ifelse} bind def /!{bind def}bind def/#{load def}!/N/counttomark # /rG{3{3 -1 roll 255 div}repeat setrgbcolor}!/G{255 div setgray}!/K{0 G}! /r6{dup 3 -1 roll rG}!/r5{dup 3 1 roll rG}!/r3{dup rG}! /w/setlinewidth #/J/setlinecap # /j/setlinejoin #/M/setmiterlimit #/d/setdash #/i/setflat # /m/moveto #/l/lineto #/c/rcurveto # /p{N 2 idiv{N -2 roll rlineto}repeat}! /P{N 0 gt{N -2 roll moveto p}if}! /h{p closepath}!/H{P closepath}! /lx{0 rlineto}!/ly{0 exch rlineto}!/v{0 0 6 2 roll c}!/y{2 copy c}! /re{4 -2 roll m exch dup lx exch ly neg lx h}! /^{3 index neg 3 index neg}! /f{P fill}!/f*{P eofill}!/s{H stroke}!/S{P stroke}! /q/gsave #/Q/grestore #/rf{re fill}! /Y{P clip newpath}!/Y*{P eoclip newpath}!/rY{re Y}! /|={pop exch 4 1 roll 1 array astore cvx 3 array astore cvx exch 1 index def exec}! /|{exch string readstring |=}! /+{dup type/nametype eq{2 index 7 add -3 bitshift 2 index mul}if}! /@/currentfile #/${+ @ |}! /B{{2 copy string{readstring pop}aload pop 4 array astore cvx 3 1 roll}repeat pop pop true}! /Ix{[1 0 0 1 11 -2 roll exch neg exch neg]exch}! /,{true exch Ix imagemask}!/If{false exch Ix imagemask}!/I{exch Ix image}! /Ic{exch Ix false 3 colorimage}! /F{/Columns counttomark 3 add -2 roll/Rows exch/K -1/BlackIs1 true>> /CCITTFaxDecode filter}!/FX{< Q Q q 0 0 51000 0 0 66000 ^ Y 0.996264 i K 8110.99 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 8521.97 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 8455.96 17023.9 0 -375.85 -242.16 0 H f 8835 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 9368.02 16772 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 9164.98 16452 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 14236 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 14647 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 14581 17023.9 0 -375.85 -242.16 0 H f 14960 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 15334 17092 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 20361 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 20772 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 20706 17023.9 0 -375.85 -242.16 0 H f 21085 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 21611 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 26486 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 26897 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 26831 17023.9 0 -375.85 -242.16 0 H f 27210 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 27480.1 16811 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 32611 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 33022 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 32956 17023.9 0 -375.85 -242.16 0 H f 33335 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 33782 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 33716 17023.9 0 -375.85 -242.16 0 H f 38736 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 39147 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 39081 17023.9 0 -375.85 -242.16 0 H f 39460 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 39675 17023.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 44861 16620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 45272 17101 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 45206 17023.9 0 -375.85 -242.16 0 H f 45585 16501 m 0 29 -24 49.01 -48.01 49.01 c -29 0 -49.01 -24 -49.01 -48.01 c 0 -29 24 -49.01 48.01 -49.01 c 29.01 0 49.01 24 49.01 48.01 c h f 45795 16799.7 m 0 252.36 122.33 292.28 176.04 292.28 c 35.8 0 71.61 -11 90.5 -41 c -11.93 0 -49.73 0 -49.73 -41.01 c 0 -22 14.92 -41 40.78 -41 c 24.86 0 41.84 15 41.84 43.99 c 0 52 -37.9 103.02 -124.54 103.02 c -125.47 0 -256.91 -128.67 -256.91 -348.01 c 0 -274.18 119.4 -335.99 203.98 -335.99 c 108.46 0 201.06 94.55 201.06 223.94 c 0 132.38 -92.46 221.02 -191.85 221.02 c -88.45 0 -121.25 -76.4 -131.18 -104.17 c h 45916.8 16459 m -62.59 0 -92.4 55.71 -101.35 76.6 c -8.94 25.86 -18.87 74.61 -18.87 144.24 c 0 78.59 35.77 177.11 125.19 177.11 c 54.65 0 83.46 -36.84 98.37 -70.66 c 15.91 -36.81 15.91 -86.55 15.91 -129.32 c 0 -50.73 0 -95.5 -18.89 -133.3 c -24.84 -47.75 -60.61 -64.66 -100.36 -64.66 c h f 26282 15662 0 -522.04 84.01 0 0 270.72 P 0 74.64 18.86 123.42 58.56 152.28 c 25.81 18.91 50.62 24.88 108.23 25.98 c 0 85.01 p -13.91 2 -20.86 3 -31.79 3 c -53.62 0 -94.34 -31.88 -142.01 -109.59 c 0 94.64 h f 26613 15866 0 -726.03 83.01 0 0 288.34 P 0 106.76 55.55 176.64 140.85 176.64 c 26.78 0 53.56 -9.02 73.4 -23.98 c 23.81 -16.96 33.74 -41.9 33.74 -78.82 c 0 -362.17 83.01 0 0 394.52 p 0 87.67 -62.66 142.46 -164.03 142.46 c -73.55 0 -118.27 -22.91 -166.96 -86.67 c 0 275.71 h f 27364 15677 m -146.38 0 -235 -104.67 -235 -280.01 c 0 -175.34 87.63 -279.95 236 -279.95 c 146.38 0 236.04 104.61 236.04 275.96 c 0 180.32 -86.68 284 -237.04 284 c h 27365 15600 m 93.38 0 149.02 -76.66 149.02 -205.98 c 0 -122.36 -57.63 -199.95 -149.02 -199.95 c -92.38 0 -149 76.6 -149 202.94 c 0 125.35 56.62 203 149 203 c h f 7539.12 17471 m 13.96 0 32.98 0 32.98 20 c 0 20 -19.02 20 -32.98 20 c -543.23 0 p -13.96 0 -32.89 0 -32.89 -20 c 0 -20 18.94 -20 32.89 -20 c h f 7936.98 17881 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8076.02 20939 m 0 82.75 -5.04 163.51 -40.86 239.28 c -40.8 82.75 -112.44 104.75 -161.2 104.75 c -57.71 0 -128.36 -28.97 -165.18 -111.72 c -27.86 -62.81 -37.81 -124.62 -37.81 -232.3 c 0 -96.71 6.96 -169.49 42.79 -240.28 c 38.8 -75.77 107.46 -99.7 159.21 -99.7 c 86.57 0 136.32 51.84 165.18 109.67 c 35.82 74.77 37.88 172.48 37.88 230.3 c h 7872.98 20619 m -31.75 0 -96.24 17.94 -115.09 126.58 c -10.91 59.81 -10.91 135.56 -10.91 205.33 c 0 81.73 0 155.5 15.87 214.3 c 16.86 66.78 67.46 97.77 110.13 97.77 c 37.7 0 95.24 -23.02 114.09 -108.74 c 12.93 -56.81 12.93 -135.56 12.93 -203.34 c 0 -66.78 0 -142.54 -10.95 -203.34 c -18.85 -109.64 -81.36 -128.58 -116.07 -128.58 c h f 7916.98 24676 m 0 22.93 0 24 -19.94 24 c -23.92 -27 -73.75 -64.01 -176.38 -64.01 c 0 -29 p 22.87 0 72.6 0 127.32 25.77 c 0 -518.95 p 0 -35.86 -2.99 -47.81 -90.51 -47.81 c -30.83 0 0 -29 p 26.9 1.99 123.54 1.99 156.41 1.99 c 32.88 0 128.52 0 155.42 -1.99 c 0 29 -30.89 0 p -87.6 0 -90.59 11.96 -90.59 47.84 c h f 8068.99 27620.4 -21.97 0 P -3 -16.89 -10.98 -71.53 -20.96 -87.42 c -6.99 -8.94 -63.89 -8.94 -93.83 -8.94 c -184.67 0 p 26.95 22.92 87.84 86.7 113.8 110.61 c 151.73 139.51 207.64 191.33 207.64 289.98 c 0 114.6 -90.82 191.41 -206.5 191.41 c -115.68 0 -183.49 -99.02 -183.49 -185.04 c 0 -51.01 44.01 -51.01 47.01 -51.01 c 21 0 47.01 15 47.01 47.01 c 0 28 -19.11 47.01 -47.25 47.01 c -9.05 0 -11.06 0 -14.07 0 c 18.94 67.41 72.8 113.02 137.61 113.02 c 84.77 0 136.67 -70.85 136.67 -162.55 c 0 -84.72 -48.88 -158.48 -105.68 -222.27 c -201.29 -225.27 0 -23.92 363.99 0 h f 7813.09 31228 m -16.89 -1 -20.86 -2 -20.86 -11 c 0 -10 4.96 -10 22.85 -10 c 45.7 0 p 84.46 0 122.22 -69.82 122.22 -165.51 c 0 -130.57 -67.61 -165.46 -116.32 -165.46 c -47.71 0 -129.23 22.72 -158.06 87.93 c 31.81 -4.29 60.64 13.59 60.64 49.34 c 0 28.8 -20.87 48.68 -48.71 48.68 c -23.86 0 -49.7 -13.95 -49.7 -51.76 c 0 -88.56 88.58 -161.2 199.06 -161.2 c 118.44 0 206.11 90.73 206.11 191.42 c 0 91.72 -73.68 163.5 -169.16 180.45 c 86.53 24.93 142.22 97.71 142.22 175.47 c 0 78.76 -81.55 136.65 -178.03 136.65 c -99.46 0 -173.05 -61 -173.05 -133.99 c 0 -40 31 -48 46.01 -48 c 21 0 45 15 45 45.01 c 0 32 -24.17 46.01 -46.32 46.01 c -6.04 0 -8.05 0 -11.07 0 c 37.75 66.96 131.16 66.96 136.12 66.96 c 32.79 0 97.37 -15 97.37 -112.64 c 0 -18.93 -2.98 -74.72 -31.79 -117.56 c -29.81 -43.83 -63.59 -46.82 -90.41 -47.82 c h f 7989.97 34935 m 0 18.92 0 24.01 -14.03 24.01 c -7.98 0 -10.97 0 -18.95 -12.06 c -300.09 -464.91 0 -29 262.02 0 0 -90.35 p 0 -36.72 -1.99 -46.65 -74.72 -46.65 c -19.93 0 0 -29 p 22.91 1.99 101.62 1.99 129.52 1.99 c 27.89 0 107.6 0 130.51 -1.99 c 0 29 -19.86 0 p -71.48 0 -74.46 9.93 -74.46 46.65 c 0 90.35 100.3 0 0 29 ^ h 7923.96 34857.9 0 -375.85 -242.16 0 H f 7758 38273.9 m 42.75 -13.87 77.56 -14.86 88.49 -14.86 c 112.36 0 184 83.01 184 97.02 c 0 4 -2.06 9 -8.02 9 c -1.99 0 -3.98 0 -12.93 -4 c -55.71 -24 -103.46 -27 -129.33 -27 c -65.66 0 -112.41 20 -131.31 28 c -6.96 3 -8.96 3 -9.95 3 c -7.96 0 -7.96 -6.07 -7.96 -22.02 c 0 -296.25 p 0 -17.96 0 -23.94 11.57 -23.94 c 4.82 0 5.79 0.99 15.43 12.86 c 27.99 40.57 74.97 64.33 124.96 64.33 c 52.98 0 78.97 -48.76 86.97 -65.68 c 16.99 -38.8 18.04 -87.54 18.04 -125.35 c 0 -37.8 0 -94.5 -27.93 -139.27 c -21.94 -35.82 -60.83 -60.68 -104.71 -60.68 c -65.82 0 -130.64 44.81 -148.59 117.52 c 4.99 -2.39 10.97 -3.58 15.96 -3.58 c 16.95 0 43.88 10 43.88 44.01 c 0 28 -18.95 44 -43.88 44 c -17.95 0 -43.88 -9 -43.88 -47.81 c 0 -84.6 67.84 -181.14 178.59 -181.14 c 112.74 0 211.57 94.55 211.57 220.95 c 0 118.44 -79.8 217.03 -184.43 217.03 c -56.8 0 -100.65 -24.71 -126.55 -52.37 c h f 7752.98 41466.7 m 0 252.36 122.33 292.28 176.04 292.28 c 35.8 0 71.61 -11 90.5 -41 c -11.93 0 -49.73 0 -49.73 -41.01 c 0 -22 14.92 -41 40.78 -41 c 24.86 0 41.84 15 41.84 43.99 c 0 52 -37.9 103.02 -124.54 103.02 c -125.47 0 -256.91 -128.67 -256.91 -348.01 c 0 -274.18 119.4 -335.99 203.98 -335.99 c 108.46 0 201.06 94.55 201.06 223.94 c 0 132.38 -92.46 221.02 -191.85 221.02 c -88.45 0 -121.25 -76.4 -131.18 -104.17 c h 7874.75 41126 m -62.59 0 -92.4 55.71 -101.35 76.6 c -8.94 25.86 -18.87 74.61 -18.87 144.24 c 0 78.59 35.77 177.11 125.19 177.11 c 54.65 0 83.46 -36.84 98.37 -70.66 c 15.91 -36.81 15.91 -86.55 15.91 -129.32 c 0 -50.73 0 -95.5 -18.89 -133.3 c -24.84 -47.75 -60.61 -64.66 -100.36 -64.66 c h f 8103.23 45155.9 0 23.04 -240.1 0 P -120.55 0 -122.54 12.6 -126.52 31.01 c -21.92 0 -30.89 -198.75 ^ p 2.99 17.95 11.96 79.78 24.91 90.75 c 7.97 5.99 82.69 5.99 96.64 5.99 c 211.21 0 -105.77 -151.49 p -26.93 -38.86 -127.68 -202.29 -127.68 -389.63 c 0 -10.96 0 -50.82 41.01 -50.82 c 42 0 42 38.87 42 51.83 c 0 49.84 p 0 148.52 23.91 264.14 70.73 330.92 c h f 7926.89 48312.9 m 50.04 26.92 123.14 72.79 123.14 156.53 c 0 86.74 -83.8 146.62 -175.57 146.62 c -98.75 0 -176.55 -72.84 -176.55 -163.57 c 0 -33.89 9.97 -67.79 37.9 -101.69 c 10.97 -12.96 11.97 -13.95 81.79 -62.81 c -96.75 -44.86 -146.62 -111.66 -146.62 -184.44 c 0 -105.68 100.57 -171.48 202.14 -171.48 c 110.53 0 203.21 81.75 203.21 186.44 c 0 101.7 -71.73 146.55 -149.44 194.41 c h 7791.47 48402.4 m -12.97 8.98 -52.87 34.92 -52.87 83.81 c 0 64.85 67.84 105.77 134.69 105.77 c 71.84 0 135.73 -51.9 135.73 -123.73 c 0 -60.86 -43.94 -109.75 -101.81 -141.68 c h 7838.4 48273.8 m 26.87 -17.96 93.56 -60.79 120.43 -78.72 c 25.88 -16.93 71.66 -47.81 71.66 -108.57 c 0 -75.7 -76.64 -127.49 -156.26 -127.49 c -84.6 0 -157.26 61.75 -157.26 144.42 c 0 77.69 56.73 140.44 121.43 170.36 c h f 6210.02 32714 m -79.72 0 -127.55 -6.05 -166.41 -20.98 c -85.7 -33.86 -137.59 -113.52 -137.59 -211.11 c 0 -145.38 111.64 -238.98 283 -238.98 c 171.36 0 276.96 90.64 276.96 237.05 c 0 119.52 -67.76 202.19 -181.38 223.13 c 0 -83.62 p 68.59 -22.88 104.37 -69.63 104.37 -136.29 c 0 -52.72 -23.86 -97.49 -67.59 -125.35 c -29.82 -19.89 -59.65 -26.86 -111.36 -27.85 c h 6142 32331.5 m -96.37 6.97 -158.98 65.75 -158.98 149.44 c 0 81.7 67.57 144.46 153.02 144.46 c 1.98 0 3.97 0 5.96 -1 c h f 5921.02 33006 0 -84.98 -143.52 0 0 -83.02 ^ 0 -71.04 68.01 0 ^ 394.32 0 P 52.77 0 82.63 35.78 82.63 100.38 c 0 19.88 -1.99 39.75 -6.98 67.62 c -69.8 0 p 2.82 -10.88 3.76 -23.73 3.76 -39.54 c 0 -35.57 -9.95 -45.45 -46.75 -45.45 c -357.18 0 0 84.98 h f 6394.18 33566 m 1.78 -9 1.78 -13 1.78 -18 c 0 -29.01 -14.93 -45.01 -40.82 -45.01 c -306.7 0 p -92.61 0 -142.43 -67.75 -142.43 -196.17 c 0 -75.66 21.92 -138.38 60.77 -173.22 c 26.9 -23.89 56.79 -33.85 108.59 -35.84 c 0 83.52 p -63.54 6.96 -92.35 44.74 -92.35 122.3 c 0 74.58 27.99 116.39 77.77 116.39 c 21.9 0 p 34.84 0 49.77 -20.94 57.74 -86.55 c 14.93 -117.3 18.91 -135.2 31.86 -167 c 24.89 -60.64 71.68 -91.45 139.38 -91.45 c 94.57 0 154.3 65.72 154.3 171.27 c 0 65.72 -22.93 118.5 -76.77 177.25 c 52.85 5.97 76.77 31.86 76.77 85.64 c 0 16.93 -1.99 29.87 -8.97 56.88 c h 6278.54 33420 m 27.86 0 44.78 -7.98 67.66 -32.78 c 30.84 -33.73 46.77 -74.41 46.77 -123.02 c 0 -64.49 -30.84 -102.19 -83.58 -102.19 c -54.73 0 -82.59 36.71 -95.52 125.01 c -11.94 87.3 -15.92 105.16 -28.89 132.98 c h f 16909 47202.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 17705 46787 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 25052 44922.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 25564.2 44744 47.69 0 P 96.38 0 146.11 -43.67 146.11 -128.02 c 0 -88.32 -54.8 -140.92 -146.32 -140.92 c -95.5 0 -142.26 47.74 -148.23 150.2 c -87.54 0 p 3.98 -56.81 13.94 -93.68 30.87 -125.57 c 35.84 -67.76 105.55 -102.64 202.14 -102.64 c 145.38 0 239.09 86.63 239.09 220.07 c 0 89.62 -34.85 139.41 -119.43 168.29 c 65.63 25.89 98.44 75.68 98.44 146.38 c 0 121.48 -80.68 194.22 -215.11 194.22 c -142.39 0 -218.08 -77.59 -221.06 -227.77 c 87.52 0 p 1 42.64 4.97 66.44 15.91 88.25 c 19.89 38.68 63.65 62.5 118.35 62.5 c 77.58 0 124.38 -45.63 124.38 -119.96 c 0 -49.56 -17.89 -79.29 -56.62 -95.15 c -23.83 -9.91 -54.62 -13.88 -116.19 -14.87 c h f 33469 42295.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 34087 41962 0 -169 88.01 0 ^ 104.02 0 0 79.01 ^ 0 457.97 -64.88 0 -321.27 -444.35 0 -92.63 H 34087 42041 -221.42 0 221.42 308.9 H f 39931 39465.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 40697.1 39669 -364.54 0 -52.79 -384.18 80.6 0 P 40.8 48.4 74.63 65.2 129.36 65.2 c 94.53 0 154.27 -64.62 154.27 -168.97 c 0 -101.37 -58.77 -162.99 -154.29 -162.99 c -76.62 0 -123.39 38.77 -144.29 118.32 c -87.56 0 p 11.95 -57.82 21.91 -85.72 42.82 -111.62 c 39.84 -53.82 111.55 -84.7 191.24 -84.7 c 142.43 0 242.09 103.56 242.09 252.93 c 0 139.41 -92.68 235.06 -228.14 235.06 c -49.8 0 -89.64 -12.88 -130.47 -42.59 c 27.89 196.55 293.82 0 h f 39994 34384.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 40782.1 34404 m -16.96 115.37 -92.48 184 -199.79 184 c -77.5 0 -147.05 -37.88 -188.78 -100.62 c -43.72 -68.71 -63.59 -155.34 -63.59 -283.8 c 0 -118.5 17.88 -194.17 59.61 -256.91 c 37.75 -56.76 99.36 -87.63 176.86 -87.63 c 134.13 0 230.56 99.55 230.56 237.93 c 0 131.41 -89.6 224.02 -215.91 224.02 c -69.62 0 -124.32 -26.68 -162.11 -78.02 c 0.99 171.68 56.7 267 157.18 267 c 61.68 0 104.46 -38.64 118.39 -105.98 c h 40569.7 34243 m 84.56 0 137.29 -58.65 137.29 -153 c 0 -88.38 -59.7 -152.93 -140.27 -152.93 c -81.57 0 -143.25 67.53 -143.25 157.9 c 0 87.39 59.69 148.03 146.23 148.03 c h f 41249 33449.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 42058 33653 -472.07 0 0 -87.01 381.38 0 P -168.29 -239.86 -237 -387.12 -289.77 -618.96 c 93.6 0 p 38.84 225.98 127.46 420.11 286.86 632.16 c h f 40751 31545.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 41432.5 31414.3 m 72.58 43.82 96.45 79.66 96.45 146.38 c 0 110.53 -86.65 188.25 -212.03 188.25 c -124.38 0 -211.95 -77.71 -211.95 -188.25 c 0 -65.72 23.85 -101.57 95.39 -146.38 c -80.62 -38.83 -120.43 -97.59 -120.43 -175.25 c 0 -129.45 97.59 -219.07 237 -219.07 c 139.41 0 237.04 89.62 237.04 218.07 c 0 78.66 -39.85 137.42 -121.48 176.25 c h 41317 31671 m 74.38 0 121.98 -43.62 121.98 -111.98 c 0 -65.39 -48.59 -108.97 -121.98 -108.97 c -73.38 0 -121.97 43.59 -121.97 109.96 c 0 67.36 48.59 110.99 121.97 110.99 c h 41317 31376 m 87.39 0 147.03 -55.8 147.03 -138.49 c 0 -83.68 -59.64 -139.48 -149.02 -139.48 c -85.41 0 -144.99 56.79 -144.99 139.48 c 0 82.69 59.59 138.49 146.98 138.49 c h f 35934 28605.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 36278.8 28264.4 m 16.89 -115.61 92.43 -184.37 199.76 -184.37 c 77.52 0 148.08 37.84 188.82 100.57 c 44.72 68.71 64.63 155.34 64.63 283.79 c 0 118.5 -17.94 194.18 -59.67 256.91 c -38.75 56.76 -100.35 87.68 -177.85 87.68 c -134.13 0 -230.51 -99.64 -230.51 -238.02 c 0 -131.41 89.51 -223.99 216.81 -223.99 c 66.64 0 115.37 23.69 161.21 78.01 c -1 -171.69 -56.73 -266.94 -157.23 -266.94 c -61.7 0 -104.48 38.76 -118.41 106.36 c h 36494.2 28732 m 81.55 0 143.23 -67.6 143.23 -158.98 c 0 -86.42 -60.68 -148.01 -146.21 -148.01 c -84.54 0 -137.25 58.61 -137.25 152.97 c 0 89.4 59.67 154.02 140.23 154.02 c h f 29426 25976 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 29744.9 26595 m -65.71 0 -125.44 -29 -162.27 -78.01 c -45.8 -61.73 -68.69 -156.29 -68.69 -286.67 c 0 -237.87 79.64 -364.27 230.96 -364.27 c 149.33 0 231.05 126.4 231.05 358.3 c 0 137.35 -21.99 228.91 -68.79 292.64 c -36.83 50.01 -95.57 78.01 -162.27 78.01 c h 29745 26517 m 94.32 0 141.01 -95.57 141.01 -284.54 c 0 -199.91 -45.7 -293.39 -142.99 -293.39 c -92.34 0 -139 97.46 -139 290.41 c 0 192.95 46.66 287.52 140.98 287.52 c h f 21557 23981 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 21861 24396.9 0 -502.86 88.02 0 0 706.11 -57.89 0 P -30.91 -108.64 -50.86 -123.58 -186.48 -140.51 c 0 -62.74 h f 12385 22355 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f 12935 22355 -371.52 0 P 8.96 57.71 40.84 94.53 127.49 145.28 c 99.61 53.73 p 98.61 53.73 149.46 126.37 149.46 212.94 c 0 58.71 -23.96 113.44 -65.79 151.25 c -41.83 37.81 -93.62 55.77 -160.36 55.77 c -89.64 0 -156.37 -31.87 -195.22 -91.55 c -24.9 -37.79 -35.86 -81.55 -37.85 -153.16 c 87.56 0 p 2.98 47.62 8.96 76.39 20.89 99.21 c 22.89 42.66 68.66 68.48 121.39 68.48 c 79.61 0 139.35 -56.81 139.35 -132.44 c 0 -55.72 -32.9 -103.48 -95.59 -139.31 c -91.55 -51.74 p -147.26 -83.59 -190.05 -150.25 -198.01 -305.48 c 470.12 0 h f cleartomark end end pagesave restore showpage %%PageTrailer %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%Pages: 1 %%EOF auto/07p/doc/include/agsm.bst0000640000175000017500000005714213570013207014104 0ustar sksk% BibTeX standard bibliography style `agsm' (one of the harvard family) % version 0.99a for BibTeX versions 0.99a or later, LaTeX version 2.09. % Copyright (C) 1991, all rights reserved. % Copying of this file is authorized only if either % (1) you make absolutely no changes to your copy, including name, or % (2) if you do make changes, you name it something other than % btxbst.doc, plain.bst, unsrt.bst, alpha.bst, abbrv.bst, agsm.bst, % dcu.bst or kluwer.bst. % This restriction helps ensure that all standard styles are identical. % The file harvard.tex has the documentation for this style. % ACKNOWLEDGEMENT: % This document is a modified version of alpha.bst to which it owes much of % its functionality. % AUTHOR % Peter Williams, Key Centre for Design Quality, Sydney University % e-mail: peterw@archsci.arch.su.oz.au ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type volume year } { field.used etal.allowed etal.required} %%%XXX change { extra.label sort.label list.year } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := } STRINGS { s t f } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ s } FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ } FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ } FUNCTION {item.check} { 't := empty$ { "empty " t * " in " * cite$ * warning$ } { skip$ } if$ } FUNCTION {fin.entry} { add.period$ write$ newline$ } FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ } FUNCTION {not} { { #0 } { #1 } if$ } FUNCTION {and} { 'skip$ { pop$ #0 } if$ } FUNCTION {or} { { pop$ #1 } 'skip$ if$ } FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ } FUNCTION {emphasize} { duplicate$ empty$ { pop$ "" } { "{\em " swap$ * "}" * } if$ } FUNCTION {embolden} { duplicate$ empty$ { pop$ "" } { "{\bf " swap$ * "}" * } if$ } FUNCTION {quote} { duplicate$ empty$ { pop$ "" } { "`" swap$ * "'" * } if$ } INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := 'f := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr f format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { t "others" = { " et~al." * } { " \& " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } FUNCTION {format.authors} { author empty$ { "" } { "{vv~}{ll}{, jj}{, f.}" author format.names } if$ } FUNCTION {format.editors} { editor empty$ { "" } { "{vv~}{ll}{, jj}{, f.}" editor format.names editor num.names$ #1 > { ", eds" * } { ", ed." * } if$ } if$ } FUNCTION {format.editors.reverse} { editor empty$ { "" } { "{f.~}{vv~}{ll}{, jj}" editor format.names editor num.names$ #1 > { ", eds" * } { ", ed." * } if$ } if$ } FUNCTION {format.title} { title empty$ { "" } { title "t" change.case$ } if$ } FUNCTION {n.dashify} { 't := "" { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ } FUNCTION {format.btitle} { title emphasize } FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * } FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ } FUNCTION {format.bvolume} { volume empty$ { "" } { "Vol." volume tie.or.space.connect series empty$ 'skip$ { " of " * series emphasize * } if$ "volume and number" number either.or.check } if$ } FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { "number" } { "Number" } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { " {\em in} " * series quote * } if$ } if$ } { "" } if$ } FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { edition "l" change.case$ " edn" * } { edition "t" change.case$ " edn" * } if$ } if$ } INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult } FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { "pp.~" pages n.dashify * } { "p.~" pages * } if$ } if$ } FUNCTION {format.vol.num.pages} { volume embolden field.or.null number empty$ 'skip$ { "(" number * ")" * * volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } { ",~" * pages n.dashify * } if$ } if$ } FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { "chapter" } { type "l" change.case$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ } FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { "{\em in} " booktitle quote * } { "{\em in} " format.editors.reverse * ", " * booktitle quote * } if$ } if$ } FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ } FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ } FUNCTION {format.tr.number} { type empty$ { "Technical Report" } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ } FUNCTION {format.article.crossref} { key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { "in {\em " journal * "\/} \cite{" * crossref * "}" *} if$ } { "{\em in} \citeasnoun{" crossref * "}" * } if$ } FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ "in " } { "Vol." volume tie.or.space.connect " of " * } if$ editor empty$ editor field.or.null author field.or.null = or { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { "{\em " * series * "\/} \cite{" * crossref * "}" *} if$ } { " \citeasnoun{" * crossref * "}" * } if$ } { " \citeasnoun{" * crossref * "}" * } if$ } FUNCTION {format.incoll.inproc.crossref} { editor empty$ editor field.or.null author field.or.null = or { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { "in {\em " booktitle * "\/}" * " \cite{" * crossref * "}" *} if$ } { "{\em in} \citeasnoun{" crossref * "}" * } if$ } { "{\em in} \citeasnoun{" crossref * "}" * } if$ } INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ } FUNCTION {format.lab.names.abbr} { 's := s num.names$ 'numnames := numnames #1 > { numnames #2 > { s #1 "{vv~}{ll}" format.name$ " et al." * } { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = { s #1 "{vv~}{ll}" format.name$ " et al." * } { s #1 "{vv~}{ll}" format.name$ " \& " * s #2 "{vv~}{ll}" format.name$ * } if$ } if$ } { s #1 "{vv~}{ll}" format.name$ } if$ } FUNCTION {format.lab.names.full} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { t "others" = { " et~al." * } { " \& " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ } INTEGERS { author.field editor.field organization.field title.field key.field } FUNCTION {init.field.constants} { #0 'author.field := #1 'editor.field := #2 'organization.field := #3 'title.field := #4 'key.field := } FUNCTION {make.list.label} { author.field field.used = { format.authors } { editor.field field.used = { format.editors } { organization.field field.used = { "The " #4 organization chop.word #3 text.prefix$ } { title.field field.used = { format.btitle } { key.field field.used = { key #3 text.prefix$ } { "Internal error :001 on " cite$ * " label" * warning$ } if$ } if$ } if$ } if$ } if$ } FUNCTION {make.full.label} { author.field field.used = { author format.lab.names.full } { editor.field field.used = { editor format.lab.names.full } { organization.field field.used = { "The " #4 organization chop.word #3 text.prefix$ } { title.field field.used = { format.btitle } { key.field field.used = { key #3 text.prefix$ } { "Internal error :001 on " cite$ * " label" * warning$ } if$ } if$ } if$ } if$ } if$ } FUNCTION {make.abbr.label} %%%XXX change { etal.allowed { author.field field.used = { author format.lab.names.abbr } { editor.field field.used = { editor format.lab.names.abbr } { organization.field field.used = { "The " #4 organization chop.word #3 text.prefix$ } { title.field field.used = { format.btitle } { key.field field.used = { key #3 text.prefix$ } {"Internal error :001 on " cite$ * " label" * warning$ } if$ } if$ } if$ } if$ } if$ } { make.full.label } if$ } FUNCTION {output.bibitem} { newline$ etal.allowed %%%XXX change etal.required and { "\harvarditem[" write$ make.abbr.label write$ "]{" write$ } { "\harvarditem{" write$ } if$ make.full.label write$ "}{" write$ list.year write$ "}{" write$ cite$ write$ "}" write$ newline$ "" before.all 'output.state := } FUNCTION {list.label.output} { make.list.label " " * write$ } FUNCTION {article} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author "author" item.check title.field field.used = { skip$ } { format.title quote "title" output.check } if$ crossref missing$ { journal emphasize "journal" duplicate$ item.check pages empty$ { output } { " " * format.vol.num.pages * output } if$ } { format.article.crossref output.nonnull format.pages output } if$ new.block note output fin.entry } FUNCTION {book} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author empty$ { editor "author and editor" item.check } { crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ title.field field.used = { skip$ } { format.btitle "title" output.check } if$ crossref missing$ { format.bvolume output format.number.series output format.edition output publisher "publisher" output.check address output } { format.book.crossref output.nonnull format.edition output } if$ new.block note output fin.entry } FUNCTION {booklet} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.title quote "title" output.check } if$ howpublished output address output new.block note output fin.entry } FUNCTION {inbook} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author empty$ { editor "author and editor" item.check } { crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ title.field field.used = { skip$ } { format.btitle "title" output.check } if$ crossref missing$ { format.bvolume output format.number.series output format.edition output publisher "publisher" output.check address output } { format.book.crossref output.nonnull format.edition output } if$ format.chapter.pages "chapter and pages" output.check new.block note output fin.entry } FUNCTION {incollection} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.title "title" output.check } if$ author "author" item.check crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.edition output format.bvolume output format.number.series output publisher "publisher" output.check address output } { format.incoll.inproc.crossref output.nonnull } if$ format.chapter.pages output new.block note output fin.entry } FUNCTION {inproceedings} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.title "title" output.check } if$ author "author" item.check crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output address empty$ { organization output publisher output } { organization output publisher output address output.nonnull } if$ } { format.incoll.inproc.crossref output.nonnull } if$ format.pages output new.block note output fin.entry } FUNCTION {conference} { inproceedings } FUNCTION {manual} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.btitle "title" output.check } if$ format.edition output author empty$ { organization empty$ { address output } 'skip$ if$ } { organization output address output } if$ new.block note output fin.entry } FUNCTION {mastersthesis} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author "author" item.check title.field field.used = { skip$ } { format.title "title" output.check } if$ "Master's thesis" format.thesis.type output.nonnull school "school" output.check address output new.block note output fin.entry } FUNCTION {misc} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.title quote output } if$ howpublished output new.block note output fin.entry empty.misc.check } FUNCTION {phdthesis} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author "author" item.check title.field field.used = { skip$ } { title "title" output.check } if$ "PhD thesis" format.thesis.type output.nonnull school "school" output.check address output new.block note output fin.entry } FUNCTION {proceedings} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull title.field field.used = { skip$ } { format.btitle "title" output.check } if$ format.bvolume output format.number.series output address empty$ { editor empty$ { skip$ } { organization output } if$ publisher output } { editor empty$ 'skip$ { organization output } if$ publisher output address output.nonnull } if$ new.block note output fin.entry } FUNCTION {techreport} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author "author" item.check title.field field.used = { skip$ } { format.title "title" output.check } if$ format.tr.number output.nonnull institution "institution" output.check address output new.block note output fin.entry } FUNCTION {unpublished} { output.bibitem list.label.output " (" list.year * ")" * output.nonnull author "author" item.check title.field field.used = { skip$ } { format.title "title" output.check } if$ note "note" output.check fin.entry } FUNCTION {default.type} { misc } MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} READ EXECUTE {init.field.constants} FUNCTION {sortify} { purify$ "l" change.case$ } FUNCTION {author.key.label} { author empty$ { key empty$ { title.field 'field.used := } { key.field 'field.used := } if$ } { author.field 'field.used := } if$ } FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { title.field 'field.used := } { key.field 'field.used := } if$ } { editor.field 'field.used := } if$ } { author.field 'field.used := } if$ } FUNCTION {author.key.organization.label} { author empty$ { key empty$ { organization empty$ { title.field 'field.used := } { organization.field 'field.used := } if$ } { key.field 'field.used := } if$ } { author.field 'field.used := } if$ } FUNCTION {editor.key.organization.label} { editor empty$ { key empty$ { organization empty$ { title.field 'field.used := } { organization.field 'field.used := } if$ } { key.field 'field.used := } if$ } { editor.field 'field.used := } if$ } FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ } FUNCTION {calc.label} %%%XXX change { make.abbr.label title.field field.used = { sort.format.title } { sortify } if$ year field.or.null purify$ #-1 #4 substring$ sortify * 'sort.label := } FUNCTION {preliminaries} %%%XXX change { type$ "book" = type$ "inbook" = or 'author.editor.key.label { type$ "proceedings" = 'editor.key.organization.label { type$ "manual" = 'author.key.organization.label 'author.key.label if$ } if$ } if$ author.field field.used = %%%XXX change { author num.names$ #2 > { #1 } { #0 } if$ 'etal.required := } { editor.field field.used = { editor num.names$ #2 > { #1 } { #0 } if$ } { #0 } if$ 'etal.required := } if$ #1 'etal.allowed := } FUNCTION {first.presort} { calc.label sort.label title.field field.used = { skip$ } { " " * make.list.label sortify * " " * title field.or.null sort.format.title * } if$ #1 entry.max$ substring$ 'sort.key$ := } ITERATE {preliminaries} ITERATE {first.presort} SORT STRINGS { last.sort.label next.extra last.full.label} INTEGERS { last.extra.num last.etal.allowed} FUNCTION {initialize.confusion} { #0 int.to.chr$ 'last.sort.label := #0 int.to.chr$ 'last.full.label := #1 'last.etal.allowed := } FUNCTION {confusion.pass} { last.sort.label sort.label = { last.etal.allowed { last.full.label make.full.label sortify = { skip$ } { #0 'etal.allowed := #0 'last.etal.allowed := } if$ } { #0 'etal.allowed := } if$ } { sort.label 'last.sort.label := make.full.label sortify 'last.full.label := #1 'last.etal.allowed := } if$ } EXECUTE {initialize.confusion} ITERATE {confusion.pass} EXECUTE {initialize.confusion} REVERSE {confusion.pass} FUNCTION {initialize.last.extra.num} { #0 int.to.chr$ 'last.sort.label := "" 'next.extra := #0 'last.extra.num := } FUNCTION {forward.pass} { last.sort.label sort.label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := sort.label 'last.sort.label := } if$ } FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ year empty$ { "n.d." extra.label emphasize * 'list.year := } { year extra.label emphasize * 'list.year := } if$ extra.label 'next.extra := } ITERATE {first.presort} SORT EXECUTE {initialize.last.extra.num} ITERATE {forward.pass} REVERSE {reverse.pass} FUNCTION {second.presort} { make.list.label title.field field.used = { sort.format.title } { sortify } if$ " " * list.year field.or.null sortify * " " * title.field field.used = { skip$ } { title field.or.null sort.format.title * } if$ #1 entry.max$ substring$ 'sort.key$ := } ITERATE {second.presort} SORT FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ "\begin{thebibliography}{xx}" write$ newline$ } EXECUTE {begin.bib} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ } EXECUTE {end.bib} auto/07p/doc/include/cb_snh_par.eps0000640000175000017500000011532213570013207015245 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 -10 550 431 %%HiResBoundingBox: 0.251992 -10.683006 549.251992 430.316994 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.00 0 %%Copyright: Copyright 1996-2004 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font BHADEJ+CMR12 %!FontType1-1.0: BHADEJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /BHADEJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32B2F2A11AA8625CB85C4 77A982EF5D4404C917CE65889BBB376BF501413117388A323B55321ECB74D1AB E972C198932773975CABB41D0EC9AEB36E76FD3DC57E2DEF9F06F87D5A8B1FF2 071F711D73CD121FE6DC7C86BFE234501EAE24CA8B4B32DB9C35522EC6876400 2670DBAF578D9AFD8A9FBBA2624D1F3BF5993F109220B774F1BC32CBF0DF3346 16E290B9C83A564C6FC59DAECD3A9594D3E0C6EF9E75AA0A31CE59C0A04AA53A 48FAD794B4F10A665876C531E40959348542747E503D420EE82306DC56D0D3BD 01A80ED5A841EB00CDC47829D82BBD3A238D30B61500E5AFF1198B9098BABE0F 390B6B1327A973D36B588F48DB01EE8ADA552F2C08466381C650FE6382170A5B E972A7E58712342282D5F871D3A2497E0E009E0726509B5E8446FC6ECC2D8FBE 2556DDFAE8063E52AA9D32C23F178A4CA2F121C5D393ECBA45255D8F3190B9F5 4F0E8243EB804F3269682A2BF64E37C0B4B9D791801AB15C7BDCD1EE1BE27E13 3C898E6D232440D076347CC434B918340B61E00593F1C01722CC948E6FCBD4A0 EFE43DA3D16DF1D7BEC9D2D9F319466934F1BF711353083C64B35AE8AF4D3783 931ADD2D7E89D7A2ACB68F9EEB68753FCF4A0F3B101CA9E5726895A0A9E709BA 5201C077DA30B2A9AACB952834BE77067C82474CF9E7F5A0200449B10CB551C2 F133439F98603F330FDA153E18358E45033403EB4CE391B5A6B3D7455CB4F83A 9D01B2A14557F030E64EC26FE6C58B3BE6C4B569DB09F04CB470E5E0CC37A3C1 C76189540D08EF26EF7367E95DC4385E766589D6F968B91F97AF7D88A1F83643 DE8C4082A6C3BABE7F118E8E8A46C1242FAC3AC9ABDFFE818968507E59447796 2E5FD09A29353397FA59ED661560D1FFD627A8B56C482E0FBAAF6B259D81BED7 1C1FD9F5D30EC36A131168579719CAFDF1A869B0BC98BE9C733349A34941BF14 23D1FF32F710F42BD66ECAF8E304BA0FEE099A984140C48CACAAD1F62E1D4858 DB1F8950D30C5F79F3FCA104BA545ED1B95E589228B1563266102D6E8E4E8BDD 73AA1F16EB6762FA6CA3EF87C8841F330C37CC30F383B2DAD7ADC739013D584E 0E9DB146873A324B0AB6BF329ACD4558EA742E23972534AE6649AC3AC1D16E24 A2CED953779503FF54F612460EA143AD3AB7D2D0916502CF1775298E025DF3B3 61DC8F5018BBBF869EA1E3055D3DADD25D5F0C5F482B0240A14F78D46A248CA4 B6E1202B1E6936ABA68DB8693B50FF501B6DE460C127DE7F02D3746D8128B4EB 9473C3D116546675EFB105B510DD08096C06D0D6578C1A1B0404610A44234285 18B664BF1594FF2DAC887048E4E3D057687329B42E169C8F79476F6F0DC59C61 B6C5327D26B3F5532B5F3C7A161399DAC705CF86B553528ACD498A9B5D37E25A EC063E267B815DE9A7EC8F16A5FFBA8F5F81C99CEDBBBCCB9733DC6B62D6B845 817DAED1C4DB22C8DA80427963F7C3004FAE20B110DA9FC8050A8145FA66D016 2418B8F2FD287C784A307C890B6042CBBE999497E466A8F50C50F3B61FAD0F60 213E7A7EC1958B8071FD94FBBDE426ADFB71287C18850BD947E247346DC677EF 89C2FDEA04C92628EA1128C19EED5B5F7CB6D7259AC52966478635ABC9F4F528 3ADB901CEC489F136EAB0B6DD01689F812A1A6369AA1021EC7361FCCC97D99F0 E2150100555F703763F8DDA2671277B03499831E4D0325CC250AF6E419939AC5 8ED96B81D520D159BD12811171138391C6C5F071389323530458D0E014B033E0 E701D4455B27AD381666D51909908EF4999FAAD6FE7A2F0BA981B14B6F1D9CD3 37515580E54333B88E1E685D05929ACC7E56DF929B72E41E6825DCEB5A93CAFF 3BA904040C35D5D4FE2C2909D640A68D0EFCDD3764ABEDDFA431D92E57FA3191 3C6EC99257780FF4F0B8E8397D1B3F66CCC34C42A317F775EDFAF625EAA28A48 F3C0B09D6B3DD1D10404690D760E353635204D01A7753BF3B7DB333EAF742D06 A097457A5BBEE0746959B980D06DAC31AD46EF7727E2CCC2885EF24927FE585A BCE6736C2E0FACA909B9DCF37AB635368DDDA96BBBA1AAE94D86012B1B2437BB 8D9ADC6BA60A349C12BF484F0F77BEACE440E7BE493DD52221673257D3652550 D43E3CAFE0BC90579DE992A74F0D4F038DA5B05638EDDBF93C7ECF0EB047287B 4B969D8310F3A1FED3CF1251F44D8E8829A2DA9A1A9ED2BF52B060E87768C080 51ED6FF454F31BC584BA685B8F655BF7984EDD1225E11E6C54E438F99FC52C61 A89CEE6CA3018A6BFDBBAF2D1E83280E8D1DA783AFE15C092765F364DABFC6B3 0B471FB2F47FA8E181B478E9715044523466C902A89B43E56FCCB8AC5B58E3D3 46B4E6BCEE0249004BA9BBC3D6F6E59242432BD5336D14073DFED09E0C054FDF 6A6CE11BDD049AE117049AED6CAB2D94ACFFE39E0D7322C740FAAD238A107C88 E24FB0223133910BBE16FFA0A55A6D43B083E5987DCEC7209DE3819692C207D0 1D11FB87AF8C2F546E043B3E3160971AF640C3E9FAF56C804334D99319F24A78 EA69E1EA3BBEB0590F2F8DF4099B7F2A12AC6BBA8928E829352FE0453A0DC226 EC9971F72A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /BHADEJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 720 360 4410 3690 re f q 720 360 4410 3690 re W 5 w /DeviceGray {} CS [0] SC 3306.46 802.996 m 3306.46 910.996 l S 4742.64 2171.65 m 4836.17 2225.65 l S 3851.27 3317.81 m 3879.22 3422.13 l S 839.719 4008.45 m 859.691 3856.75 l S 20 w 3306.46 775.996 m 3306.46 775.988 l 3306.56 775.961 l 3306.79 775.957 l 3307.17 775.977 l 3307.69 776.031 l 3308.37 776.121 l 3309.2 776.246 l 3310.21 776.41 l 3311.38 776.621 l 3312.73 776.875 l 3314.26 777.18 l 3315.97 777.535 l 3317.88 777.945 l 3319.98 778.414 l 3322.27 778.945 l 3324.77 779.539 l 3327.47 780.199 l 3330.38 780.93 l 3333.5 781.73 l 3336.83 782.609 l 3340.38 783.566 l 3344.16 784.602 l 3348.15 785.719 l 3352.37 786.926 l 3356.82 788.219 l 3361.5 789.605 l 3366.41 791.09 l 3371.56 792.668 l 3376.94 794.344 l 3382.56 796.125 l 3388.42 798.016 l 3394.53 800.012 l 3400.88 802.121 l 3407.47 804.344 l 3414.31 806.684 l 3421.41 809.148 l 3428.75 811.734 l 3436.34 814.445 l 3444.19 817.293 l 3452.3 820.27 l 3460.66 823.383 l 3469.28 826.637 l 3478.16 830.039 l 3487.3 833.582 l 3496.69 837.277 l 3506.36 841.129 l 3516.28 845.137 l 3526.47 849.309 l 3536.92 853.645 l 3547.64 858.148 l 3558.63 862.828 l 3569.88 867.688 l 3581.4 872.723 l 3593.19 877.949 l 3605.25 883.363 l 3617.58 888.977 l 3630.17 894.785 l 3643.04 900.801 l 3656.17 907.027 l 3669.57 913.465 l 3683.25 920.125 l 3697.19 927.012 l 3711.4 934.129 l 3725.88 941.484 l 3740.62 949.082 l 3755.64 956.926 l 3770.92 965.027 l 3786.46 973.395 l 3802.27 982.027 l 3818.35 990.941 l 3834.68 1000.14 l 3851.28 1009.63 l 3868.14 1019.42 l 3885.25 1029.52 l 3902.62 1039.93 l 3920.25 1050.68 l 3938.12 1061.77 l 3956.25 1073.2 l 3974.62 1085 l 3993.23 1097.17 l 4012.09 1109.72 l 4031.18 1122.68 l 4050.5 1136.04 l 4070.05 1149.84 l 4089.83 1164.08 l 4109.83 1178.78 l 4130.04 1193.96 l 4150.46 1209.64 l 4171.08 1225.85 l 4191.9 1242.6 l 4212.9 1259.93 l 4234.09 1277.85 l 4255.45 1296.41 l 4276.97 1315.63 l 4298.64 1335.55 l 4320.45 1356.22 l 4342.38 1377.67 l 4364.41 1399.96 l 4386.54 1423.14 l 4408.73 1447.28 l 4430.97 1472.45 l 4453.22 1498.74 l 4475.46 1526.23 l 4497.63 1555.03 l 4519.7 1585.27 l 4541.6 1617.1 l 4563.26 1650.68 l 4584.58 1686.22 l 4605.45 1723.97 l 4625.71 1764.21 l 4645.14 1807.28 l 4663.48 1853.6 l 4680.33 1903.62 l 4695.17 1957.86 l 4707.25 2016.75 l 4715.63 2080.46 l 4719.2 2148.49 l 4719.25 2158.15 l 4716.31 2228.12 l 4707.33 2298.66 l 4693.01 2366.31 l 4674.46 2429.65 l 4652.76 2488.35 l 4628.73 2542.69 l 4602.97 2593.13 l 4575.9 2640.17 l 4547.8 2684.23 l 4518.9 2725.69 l 4489.35 2764.85 l 4459.26 2801.99 l 4428.73 2837.32 l 4397.83 2871.04 l 4366.61 2903.28 l 4335.11 2934.2 l 4303.37 2963.91 l 4271.43 2992.51 l 4239.29 3020.08 l 4206.99 3046.7 l 4174.54 3072.43 l 4141.96 3097.35 l 4109.25 3121.49 l 4076.43 3144.91 l 4043.51 3167.65 l 4010.5 3189.75 l 3977.4 3211.25 l 3944.23 3232.16 l 3910.98 3252.53 l 3877.66 3272.38 l 3844.28 3291.73 l 3810.84 3310.6 l 3777.34 3329.03 l 3743.79 3347.01 l 3710.19 3364.58 l 3676.55 3381.74 l 3642.86 3398.52 l 3609.13 3414.92 l 3575.37 3430.97 l 3541.56 3446.66 l 3507.72 3462.02 l 3473.85 3477.05 l 3439.95 3491.77 l 3406.01 3506.18 l 3372.05 3520.29 l 3338.06 3534.12 l 3304.04 3547.66 l 3270 3560.93 l 3235.94 3573.93 l 3201.85 3586.67 l 3167.74 3599.16 l 3133.61 3611.4 l 3099.46 3623.4 l 3065.29 3635.17 l 3031.1 3646.7 l 2996.89 3658.01 l 2962.67 3669.09 l 2928.43 3679.96 l 2894.18 3690.62 l 2859.9 3701.07 l 2825.62 3711.32 l 2791.32 3721.36 l 2757.01 3731.21 l 2722.68 3740.86 l 2688.34 3750.33 l 2653.99 3759.6 l 2619.63 3768.7 l 2585.25 3777.61 l 2550.87 3786.35 l 2516.47 3794.9 l 2482.07 3803.29 l 2447.65 3811.51 l 2413.22 3819.56 l 2378.79 3827.44 l 2344.34 3835.16 l 2309.89 3842.72 l 2275.43 3850.12 l 2240.96 3857.36 l 2206.48 3864.44 l 2172 3871.38 l 2137.51 3878.16 l 2103.01 3884.79 l 2068.5 3891.27 l 2033.99 3897.61 l 1999.47 3903.8 l 1964.95 3909.85 l 1930.42 3915.76 l 1895.88 3921.52 l 1861.34 3927.14 l 1826.79 3932.63 l 1792.24 3937.98 l 1757.68 3943.19 l 1723.12 3948.27 l 1688.55 3953.22 l 1653.98 3958.03 l 1619.4 3962.71 l 1584.82 3967.26 l 1550.24 3971.68 l 1515.65 3975.97 l 1481.06 3980.14 l 1446.46 3984.17 l 1411.86 3988.09 l 1377.26 3991.87 l 1342.66 3995.53 l 1308.05 3999.07 l 1273.43 4002.48 l 1238.82 4005.77 l 1204.2 4008.94 l 1169.58 4011.99 l 1134.96 4014.91 l 1100.33 4017.72 l 1065.7 4020.41 l 1031.07 4022.97 l 996.438 4025.42 l 961.801 4027.75 l 927.156 4029.96 l 892.508 4032.06 l 857.832 4034.04 l 849.07 4034.52 l 844.77 4034.75 l 840.469 4034.99 l 836.195 4035.21 l 836.195 4035.21 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 720 360 m 720 400 l S 720 4050 m 720 4010 l S 1161 360 m 1161 400 l S 1161 4050 m 1161 4010 l S 1602 360 m 1602 400 l S 1602 4050 m 1602 4010 l S 2043 360 m 2043 400 l S 2043 4050 m 2043 4010 l S 2484 360 m 2484 400 l S 2484 4050 m 2484 4010 l S 2925 360 m 2925 400 l S 2925 4050 m 2925 4010 l S 3366 360 m 3366 400 l S 3366 4050 m 3366 4010 l S 3807 360 m 3807 400 l S 3807 4050 m 3807 4010 l S 4248 360 m 4248 400 l S 4248 4050 m 4248 4010 l S 4689 360 m 4689 400 l S 4689 4050 m 4689 4010 l S 5130 360 m 5130 400 l S 5130 4050 m 5130 4010 l S 720 360 m 760 360 l S 5130 360 m 5090 360 l S 720 821.25 m 760 821.25 l S 5130 821.25 m 5090 821.25 l S 720 1282.5 m 760 1282.5 l S 5130 1282.5 m 5090 1282.5 l S 720 1743.75 m 760 1743.75 l S 5130 1743.75 m 5090 1743.75 l S 720 2205 m 760 2205 l S 5130 2205 m 5090 2205 l S 720 2666.25 m 760 2666.25 l S 5130 2666.25 m 5090 2666.25 l S 720 3127.5 m 760 3127.5 l S 5130 3127.5 m 5090 3127.5 l S 720 3588.75 m 760 3588.75 l S 5130 3588.75 m 5090 3588.75 l S 720 4050 m 760 4050 l S 5130 4050 m 5090 4050 l S 10 w 2 J 720 4050 m 5130 4050 l S 5130 360 m 5130 4050 l S 720 360 m 5130 360 l S 720 360 m 720 4050 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 3117.48] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 64.5211 24.2961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 9.1199 0 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2637 TJm 49.9801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 53.22 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2637 TJm 94.0802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 97.32 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2637 TJm 138.1802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 141.42 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2627 TJm 182.2802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 185.5201 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2627 TJm 226.3803 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 229.6201 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2627 TJm 270.4803 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 273.7202 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2627 TJm 314.5804 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 317.8202 0 Td /F9_0 11.9552 Tf (8) 5.858 Tj -2436.36 TJm (0) 5.858 Tj -2.2627 TJm 358.6804 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 361.9202 0 Td /F9_0 11.9552 Tf (9) 5.858 Tj -2436.36 TJm (1) 5.858 Tj -2.2627 TJm 402.7804 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 406.0203 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2436.36 TJm (1) 5.858 Tj -2.2627 TJm 446.8805 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 450.1203 0 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 218.0683 -13.4941 Td /F13_0 11.9552 Tf (n) 6.6471 Tj 13.9682 TJm (u) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -20.7767 8.3141 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.5368 8.3141 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -5.6568 8.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.4169 8.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -20.7767 54.4391 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.5369 54.4391 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -5.6568 54.4391 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.417 54.4391 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -20.7768 100.5641 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.5369 100.5641 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -5.6568 100.5641 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.417 100.5641 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -20.7768 146.6891 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.537 146.6891 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -5.6569 146.6891 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.417 146.6891 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -11.4788 192.352 Td (0) 5.858 Tj -2.2632 TJm -5.5987 192.352 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.3588 192.352 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -11.4788 238.477 Td (0) 5.858 Tj -2.2632 TJm -5.5987 238.477 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.3588 238.477 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -11.4788 284.602 Td (1) 5.858 Tj -2.2632 TJm -5.5987 284.602 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.3588 284.602 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -11.4788 330.727 Td (1) 5.858 Tj -2.2632 TJm -5.5987 330.727 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.3588 330.727 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -11.4788 376.852 Td (2) 5.858 Tj -2.2632 TJm -5.5987 376.852 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.3588 376.852 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 38.5039 210.589] Tm 0 0 Td /F13_0 11.9552 Tf (n) 6.6471 Tj 13.9682 TJm (u) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm [1 0 0 1 323.999 93.1398] Tm 0 0 Td /F13_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm 161.177 130.325 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm 57.742 251.052 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -244.442 282.2583 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font GJCTBM+CMMI12 %%+ font BHADEJ+CMR12 %%EOF auto/07p/doc/include/clrTimeMu0.fig0000640000175000017500000000025213570013207015101 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 clrTimeMu0.png 150 150 8970 150 8970 7680 150 7680 150 150 auto/07p/doc/include/mtn3.ps0000640000175000017500000001615313570013207013665 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors /lthick 5 def %% line thickness % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto ( K) 3640 320 PR 300 2720 moveto ( d_0) 300 2720 PR 440 460 moveto (2) 605 460 PR (.) 660 460 PR (5) 715 460 PR 1080 460 moveto (5) 1245 460 PR (.) 1300 460 PR (0) 1355 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1720 460 moveto (7) 1885 460 PR (.) 1940 460 PR (5) 1995 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2360 460 moveto (1) 2470 460 PR (0) 2525 460 PR (.) 2580 460 PR (0) 2635 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 3000 460 moveto (1) 3110 460 PR (2) 3165 460 PR (.) 3220 460 PR (5) 3275 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3640 460 moveto (1) 3750 460 PR (5) 3805 460 PR (.) 3860 460 PR (0) 3915 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (0) 279 600 PR (.) 334 600 PR (0) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 1000 moveto (0) 279 1000 PR (.) 334 1000 PR (0) 389 1000 PR (0) 444 1000 PR (3) 499 1000 PR 540 1000 moveto 600 1000 lineto stroke 600 1000 moveto 4 1400 moveto (0) 279 1400 PR (.) 334 1400 PR (0) 389 1400 PR (0) 444 1400 PR (5) 499 1400 PR 540 1400 moveto 600 1400 lineto stroke 600 1400 moveto 4 1800 moveto (0) 279 1800 PR (.) 334 1800 PR (0) 389 1800 PR (0) 444 1800 PR (8) 499 1800 PR 540 1800 moveto 600 1800 lineto stroke 600 1800 moveto 4 2200 moveto (0) 279 2200 PR (.) 334 2200 PR (0) 389 2200 PR (1) 444 2200 PR (0) 499 2200 PR 540 2200 moveto 600 2200 lineto stroke 600 2200 moveto 4 2600 moveto (0) 279 2600 PR (.) 334 2600 PR (0) 389 2600 PR (1) 444 2600 PR (2) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 1652 2200 moveto 1652 2200 lineto stroke 1652 2200 moveto 1652 2200 moveto lthick setlinewidth 1648 2200 lineto stroke 1648 2200 moveto 1644 2204 lineto stroke 1644 2204 moveto 1640 2204 lineto stroke 1640 2204 moveto 1632 2212 lineto stroke 1632 2212 moveto 1624 2216 lineto stroke 1624 2216 moveto 1612 2228 lineto stroke 1612 2228 moveto 1600 2236 lineto stroke 1600 2236 moveto 1584 2244 lineto stroke 1584 2244 moveto 1572 2256 lineto stroke 1572 2256 moveto 1560 2264 lineto stroke 1560 2264 moveto 1548 2272 lineto stroke 1548 2272 moveto 1536 2280 lineto stroke 1536 2280 moveto 1520 2288 lineto stroke 1520 2288 moveto 1508 2296 lineto stroke 1508 2296 moveto 1496 2304 lineto stroke 1496 2304 moveto 1484 2308 lineto stroke 1484 2308 moveto 1472 2316 lineto stroke 1472 2316 moveto 1456 2320 lineto stroke 1456 2320 moveto 1444 2324 lineto stroke 1444 2324 moveto 1432 2324 lineto stroke 1432 2324 moveto 1420 2328 lineto stroke 1420 2328 moveto 1412 2328 lineto stroke 1412 2328 moveto 1396 2328 lineto stroke 1396 2328 moveto 1384 2324 lineto stroke 1384 2324 moveto 1372 2320 lineto stroke 1372 2320 moveto 1360 2312 lineto stroke 1360 2312 moveto 1348 2304 lineto stroke 1348 2304 moveto 1336 2292 lineto stroke 1336 2292 moveto 1324 2276 lineto stroke 1324 2276 moveto 1312 2256 lineto stroke 1312 2256 moveto 1300 2232 lineto stroke 1300 2232 moveto 1288 2204 lineto stroke 1288 2204 moveto 1284 2200 lineto stroke 1284 2200 moveto 1272 2164 lineto stroke 1272 2164 moveto 1260 2120 lineto stroke 1260 2120 moveto 1248 2072 lineto stroke 1248 2072 moveto 1236 2012 lineto stroke 1236 2012 moveto 1228 1948 lineto stroke 1228 1948 moveto 1216 1868 lineto stroke 1216 1868 moveto 1204 1776 lineto stroke 1204 1776 moveto 1192 1672 lineto stroke 1192 1672 moveto 1184 1548 lineto stroke 1184 1548 moveto 1172 1404 lineto stroke 1172 1404 moveto 1164 1240 lineto stroke 1164 1240 moveto 1156 1052 lineto stroke 1156 1052 moveto 1148 828 lineto stroke 1148 828 moveto 1140 600 lineto stroke 1140 600 moveto 1652 2200 moveto 1652 2200 lineto stroke 1652 2200 moveto 1652 2200 moveto 1652 2196 lineto stroke 1652 2196 moveto 1656 2192 lineto stroke 1656 2192 moveto 1660 2192 lineto stroke 1660 2192 moveto 1668 2184 lineto stroke 1668 2184 moveto 1676 2180 lineto stroke 1676 2180 moveto 1692 2168 lineto stroke 1692 2168 moveto 1712 2152 lineto stroke 1712 2152 moveto 1736 2132 lineto stroke 1736 2132 moveto 1764 2116 lineto stroke 1764 2116 moveto 1792 2092 lineto stroke 1792 2092 moveto 1824 2072 lineto stroke 1824 2072 moveto 1856 2048 lineto stroke 1856 2048 moveto 1896 2020 lineto stroke 1896 2020 moveto 1940 1992 lineto stroke 1940 1992 moveto 1984 1964 lineto stroke 1984 1964 moveto 2036 1932 lineto stroke 2036 1932 moveto 2092 1900 lineto stroke 2092 1900 moveto 2156 1864 lineto stroke 2156 1864 moveto 2220 1832 lineto stroke 2220 1832 moveto 2284 1800 lineto stroke 2284 1800 moveto 2348 1768 lineto stroke 2348 1768 moveto 2416 1740 lineto stroke 2416 1740 moveto 2480 1712 lineto stroke 2480 1712 moveto 2544 1684 lineto stroke 2544 1684 moveto 2612 1660 lineto stroke 2612 1660 moveto 2676 1636 lineto stroke 2676 1636 moveto 2740 1612 lineto stroke 2740 1612 moveto 2804 1592 lineto stroke 2804 1592 moveto 2872 1568 lineto stroke 2872 1568 moveto 2936 1548 lineto stroke 2936 1548 moveto 3000 1532 lineto stroke 3000 1532 moveto 3068 1512 lineto stroke 3068 1512 moveto 3132 1496 lineto stroke 3132 1496 moveto 3196 1476 lineto stroke 3196 1476 moveto 3260 1460 lineto stroke 3260 1460 moveto 3328 1444 lineto stroke 3328 1444 moveto 3392 1428 lineto stroke 3392 1428 moveto 3456 1416 lineto stroke 3456 1416 moveto 3524 1400 lineto stroke 3524 1400 moveto 3588 1388 lineto stroke 3588 1388 moveto 3652 1372 lineto stroke 3652 1372 moveto 3720 1360 lineto stroke 3720 1360 moveto 3784 1348 lineto stroke 3784 1348 moveto 3800 1344 lineto stroke 3800 1344 moveto 0 3068 moveto auto/07p/doc/include/rev1.ps0000640000175000017500000010053613570013207013660 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3805 320 PR (/) 3860 320 PR (T) 3915 320 PR 300 2720 moveto (u) 300 2720 PR 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR 760 340 moveto (0) 815 340 PR (.) 870 340 PR (1) 925 340 PR (0) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (0) 1135 460 PR (.) 1190 460 PR (2) 1245 460 PR (0) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (0) 1455 340 PR (.) 1510 340 PR (3) 1565 340 PR (0) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (0) 1775 460 PR (.) 1830 460 PR (4) 1885 460 PR (0) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (0) 2095 340 PR (.) 2150 340 PR (5) 2205 340 PR (0) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (0) 2415 460 PR (.) 2470 460 PR (6) 2525 460 PR (0) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (0) 2735 340 PR (.) 2790 340 PR (7) 2845 340 PR (0) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (0) 3055 460 PR (.) 3110 460 PR (8) 3165 460 PR (0) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (0) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 279 600 PR (1) 334 600 PR (.) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 932 moveto (-) 279 932 PR (0) 334 932 PR (.) 389 932 PR (7) 444 932 PR (5) 499 932 PR 540 932 moveto 600 932 lineto stroke 600 932 moveto 4 1264 moveto (-) 279 1264 PR (0) 334 1264 PR (.) 389 1264 PR (5) 444 1264 PR (0) 499 1264 PR 540 1264 moveto 600 1264 lineto stroke 600 1264 moveto 4 1600 moveto (-) 279 1600 PR (0) 334 1600 PR (.) 389 1600 PR (2) 444 1600 PR (5) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1932 moveto (0) 334 1932 PR (.) 389 1932 PR (0) 444 1932 PR (0) 499 1932 PR 540 1932 moveto 600 1932 lineto stroke 600 1932 moveto 4 2264 moveto (0) 334 2264 PR (.) 389 2264 PR (2) 444 2264 PR (5) 499 2264 PR 540 2264 moveto 600 2264 lineto stroke 600 2264 moveto 4 2600 moveto (0) 334 2600 PR (.) 389 2600 PR (5) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 1932 moveto 600 1932 lineto stroke 600 1932 moveto 600 1932 moveto 620 1932 lineto stroke 620 1932 moveto 644 1932 lineto stroke 644 1932 moveto 668 1932 lineto stroke 668 1932 moveto 688 1932 lineto stroke 688 1932 moveto 712 1932 lineto stroke 712 1932 moveto 736 1932 lineto stroke 736 1932 moveto 760 1932 lineto stroke 760 1932 moveto 780 1932 lineto stroke 780 1932 moveto 804 1932 lineto stroke 804 1932 moveto 828 1932 lineto stroke 828 1932 moveto 848 1932 lineto stroke 848 1932 moveto 872 1932 lineto stroke 872 1932 moveto 896 1932 lineto stroke 896 1932 moveto 920 1932 lineto stroke 920 1932 moveto 940 1932 lineto stroke 940 1932 moveto 964 1932 lineto stroke 964 1932 moveto 988 1932 lineto stroke 988 1932 moveto 1008 1932 lineto stroke 1008 1932 moveto 1032 1932 lineto stroke 1032 1932 moveto 1056 1932 lineto stroke 1056 1932 moveto 1080 1932 lineto stroke 1080 1932 moveto 1100 1932 lineto stroke 1100 1932 moveto 1124 1932 lineto stroke 1124 1932 moveto 1148 1932 lineto stroke 1148 1932 moveto 1168 1932 lineto stroke 1168 1932 moveto 1192 1932 lineto stroke 1192 1932 moveto 1216 1932 lineto stroke 1216 1932 moveto 1240 1932 lineto stroke 1240 1932 moveto 1260 1932 lineto stroke 1260 1932 moveto 1284 1932 lineto stroke 1284 1932 moveto 1308 1932 lineto stroke 1308 1932 moveto 1328 1932 lineto stroke 1328 1932 moveto 1352 1932 lineto stroke 1352 1932 moveto 1376 1932 lineto stroke 1376 1932 moveto 1400 1932 lineto stroke 1400 1932 moveto 1420 1932 lineto stroke 1420 1932 moveto 1444 1932 lineto stroke 1444 1932 moveto 1468 1932 lineto stroke 1468 1932 moveto 1488 1932 lineto stroke 1488 1932 moveto 1512 1932 lineto stroke 1512 1932 moveto 1536 1932 lineto stroke 1536 1932 moveto 1560 1932 lineto stroke 1560 1932 moveto 1580 1932 lineto stroke 1580 1932 moveto 1604 1932 lineto stroke 1604 1932 moveto 1628 1932 lineto stroke 1628 1932 moveto 1648 1932 lineto stroke 1648 1932 moveto 1672 1932 lineto stroke 1672 1932 moveto 1696 1932 lineto stroke 1696 1932 moveto 1720 1932 lineto stroke 1720 1932 moveto 1740 1932 lineto stroke 1740 1932 moveto 1764 1932 lineto stroke 1764 1932 moveto 1788 1932 lineto stroke 1788 1932 moveto 1808 1932 lineto stroke 1808 1932 moveto 1832 1932 lineto stroke 1832 1932 moveto 1856 1932 lineto stroke 1856 1932 moveto 1880 1932 lineto stroke 1880 1932 moveto 1900 1932 lineto stroke 1900 1932 moveto 1924 1932 lineto stroke 1924 1932 moveto 1948 1932 lineto stroke 1948 1932 moveto 1968 1932 lineto stroke 1968 1932 moveto 1992 1932 lineto stroke 1992 1932 moveto 2016 1932 lineto stroke 2016 1932 moveto 2040 1932 lineto stroke 2040 1932 moveto 2060 1932 lineto stroke 2060 1932 moveto 2084 1928 lineto stroke 2084 1928 moveto 2108 1928 lineto stroke 2108 1928 moveto 2128 1928 lineto stroke 2128 1928 moveto 2152 1928 lineto stroke 2152 1928 moveto 2176 1928 lineto stroke 2176 1928 moveto 2200 1928 lineto stroke 2200 1928 moveto 2220 1928 lineto stroke 2220 1928 moveto 2244 1932 lineto stroke 2244 1932 moveto 2268 1932 lineto stroke 2268 1932 moveto 2288 1932 lineto stroke 2288 1932 moveto 2312 1932 lineto stroke 2312 1932 moveto 2336 1936 lineto stroke 2336 1936 moveto 2360 1936 lineto stroke 2360 1936 moveto 2380 1936 lineto stroke 2380 1936 moveto 2404 1940 lineto stroke 2404 1940 moveto 2428 1940 lineto stroke 2428 1940 moveto 2448 1940 lineto stroke 2448 1940 moveto 2472 1936 lineto stroke 2472 1936 moveto 2496 1936 lineto stroke 2496 1936 moveto 2520 1932 lineto stroke 2520 1932 moveto 2540 1932 lineto stroke 2540 1932 moveto 2564 1928 lineto stroke 2564 1928 moveto 2588 1924 lineto stroke 2588 1924 moveto 2608 1920 lineto stroke 2608 1920 moveto 2632 1916 lineto stroke 2632 1916 moveto 2656 1912 lineto stroke 2656 1912 moveto 2680 1912 lineto stroke 2680 1912 moveto 2700 1912 lineto stroke 2700 1912 moveto 2724 1912 lineto stroke 2724 1912 moveto 2748 1912 lineto stroke 2748 1912 moveto 2768 1920 lineto stroke 2768 1920 moveto 2792 1924 lineto stroke 2792 1924 moveto 2816 1932 lineto stroke 2816 1932 moveto 2840 1944 lineto stroke 2840 1944 moveto 2860 1956 lineto stroke 2860 1956 moveto 2884 1964 lineto stroke 2884 1964 moveto 2908 1976 lineto stroke 2908 1976 moveto 2928 1984 lineto stroke 2928 1984 moveto 2952 1988 lineto stroke 2952 1988 moveto 2976 1992 lineto stroke 2976 1992 moveto 3000 1988 lineto stroke 3000 1988 moveto 3020 1980 lineto stroke 3020 1980 moveto 3044 1964 lineto stroke 3044 1964 moveto 3068 1944 lineto stroke 3068 1944 moveto 3088 1920 lineto stroke 3088 1920 moveto 3112 1892 lineto stroke 3112 1892 moveto 3136 1860 lineto stroke 3136 1860 moveto 3160 1828 lineto stroke 3160 1828 moveto 3180 1800 lineto stroke 3180 1800 moveto 3204 1780 lineto stroke 3204 1780 moveto 3228 1764 lineto stroke 3228 1764 moveto 3248 1760 lineto stroke 3248 1760 moveto 3272 1772 lineto stroke 3272 1772 moveto 3296 1796 lineto stroke 3296 1796 moveto 3320 1840 lineto stroke 3320 1840 moveto 3340 1896 lineto stroke 3340 1896 moveto 3364 1968 lineto stroke 3364 1968 moveto 3388 2052 lineto stroke 3388 2052 moveto 3408 2140 lineto stroke 3408 2140 moveto 3432 2228 lineto stroke 3432 2228 moveto 3456 2304 lineto stroke 3456 2304 moveto 3480 2368 lineto stroke 3480 2368 moveto 3500 2408 lineto stroke 3500 2408 moveto 3524 2412 lineto stroke 3524 2412 moveto 3548 2380 lineto stroke 3548 2380 moveto 3568 2308 lineto stroke 3568 2308 moveto 3592 2192 lineto stroke 3592 2192 moveto 3616 2036 lineto stroke 3616 2036 moveto 3640 1844 lineto stroke 3640 1844 moveto 3660 1628 lineto stroke 3660 1628 moveto 3684 1400 lineto stroke 3684 1400 moveto 3708 1176 lineto stroke 3708 1176 moveto 3728 976 lineto stroke 3728 976 moveto 3752 812 lineto stroke 3752 812 moveto 3776 708 lineto stroke 3776 708 moveto 3800 672 lineto stroke 3800 672 moveto 600 1932 moveto 600 1932 lineto stroke 600 1932 moveto 600 1932 moveto 680 1932 lineto stroke 680 1932 moveto 760 1932 lineto stroke 760 1932 moveto 840 1932 lineto stroke 840 1932 moveto 924 1932 lineto stroke 924 1932 moveto 988 1932 lineto stroke 988 1932 moveto 1052 1932 lineto stroke 1052 1932 moveto 1120 1932 lineto stroke 1120 1932 moveto 1184 1932 lineto stroke 1184 1932 moveto 1240 1932 lineto stroke 1240 1932 moveto 1296 1932 lineto stroke 1296 1932 moveto 1348 1932 lineto stroke 1348 1932 moveto 1404 1932 lineto stroke 1404 1932 moveto 1452 1932 lineto stroke 1452 1932 moveto 1500 1932 lineto stroke 1500 1932 moveto 1548 1932 lineto stroke 1548 1932 moveto 1596 1932 lineto stroke 1596 1932 moveto 1636 1932 lineto stroke 1636 1932 moveto 1680 1932 lineto stroke 1680 1932 moveto 1720 1932 lineto stroke 1720 1932 moveto 1760 1932 lineto stroke 1760 1932 moveto 1800 1932 lineto stroke 1800 1932 moveto 1840 1932 lineto stroke 1840 1932 moveto 1880 1932 lineto stroke 1880 1932 moveto 1920 1936 lineto stroke 1920 1936 moveto 1952 1932 lineto stroke 1952 1932 moveto 1984 1932 lineto stroke 1984 1932 moveto 2016 1932 lineto stroke 2016 1932 moveto 2052 1928 lineto stroke 2052 1928 moveto 2080 1928 lineto stroke 2080 1928 moveto 2112 1928 lineto stroke 2112 1928 moveto 2144 1924 lineto stroke 2144 1924 moveto 2172 1924 lineto stroke 2172 1924 moveto 2204 1924 lineto stroke 2204 1924 moveto 2232 1928 lineto stroke 2232 1928 moveto 2260 1928 lineto stroke 2260 1928 moveto 2288 1932 lineto stroke 2288 1932 moveto 2312 1932 lineto stroke 2312 1932 moveto 2340 1936 lineto stroke 2340 1936 moveto 2364 1940 lineto stroke 2364 1940 moveto 2388 1944 lineto stroke 2388 1944 moveto 2412 1944 lineto stroke 2412 1944 moveto 2440 1948 lineto stroke 2440 1948 moveto 2464 1948 lineto stroke 2464 1948 moveto 2488 1944 lineto stroke 2488 1944 moveto 2512 1944 lineto stroke 2512 1944 moveto 2532 1940 lineto stroke 2532 1940 moveto 2556 1932 lineto stroke 2556 1932 moveto 2580 1924 lineto stroke 2580 1924 moveto 2600 1920 lineto stroke 2600 1920 moveto 2624 1912 lineto stroke 2624 1912 moveto 2644 1904 lineto stroke 2644 1904 moveto 2664 1900 lineto stroke 2664 1900 moveto 2684 1896 lineto stroke 2684 1896 moveto 2704 1892 lineto stroke 2704 1892 moveto 2728 1892 lineto stroke 2728 1892 moveto 2748 1896 lineto stroke 2748 1896 moveto 2768 1900 lineto stroke 2768 1900 moveto 2788 1908 lineto stroke 2788 1908 moveto 2804 1916 lineto stroke 2804 1916 moveto 2824 1928 lineto stroke 2824 1928 moveto 2844 1944 lineto stroke 2844 1944 moveto 2860 1956 lineto stroke 2860 1956 moveto 2876 1968 lineto stroke 2876 1968 moveto 2896 1984 lineto stroke 2896 1984 moveto 2912 1996 lineto stroke 2912 1996 moveto 2932 2008 lineto stroke 2932 2008 moveto 2948 2020 lineto stroke 2948 2020 moveto 2964 2024 lineto stroke 2964 2024 moveto 2984 2028 lineto stroke 2984 2028 moveto 3000 2024 lineto stroke 3000 2024 moveto 3016 2020 lineto stroke 3016 2020 moveto 3032 2008 lineto stroke 3032 2008 moveto 3048 1996 lineto stroke 3048 1996 moveto 3064 1976 lineto stroke 3064 1976 moveto 3080 1952 lineto stroke 3080 1952 moveto 3096 1928 lineto stroke 3096 1928 moveto 3112 1900 lineto stroke 3112 1900 moveto 3128 1876 lineto stroke 3128 1876 moveto 3140 1844 lineto stroke 3140 1844 moveto 3156 1816 lineto stroke 3156 1816 moveto 3168 1788 lineto stroke 3168 1788 moveto 3184 1764 lineto stroke 3184 1764 moveto 3200 1740 lineto stroke 3200 1740 moveto 3216 1720 lineto stroke 3216 1720 moveto 3228 1708 lineto stroke 3228 1708 moveto 3244 1700 lineto stroke 3244 1700 moveto 3256 1696 lineto stroke 3256 1696 moveto 3272 1704 lineto stroke 3272 1704 moveto 3284 1716 lineto stroke 3284 1716 moveto 3300 1736 lineto stroke 3300 1736 moveto 3312 1768 lineto stroke 3312 1768 moveto 3328 1804 lineto stroke 3328 1804 moveto 3340 1844 lineto stroke 3340 1844 moveto 3352 1888 lineto stroke 3352 1888 moveto 3368 1940 lineto stroke 3368 1940 moveto 3380 1996 lineto stroke 3380 1996 moveto 3392 2044 lineto stroke 3392 2044 moveto 3400 2096 lineto stroke 3400 2096 moveto 3412 2148 lineto stroke 3412 2148 moveto 3424 2200 lineto stroke 3424 2200 moveto 3436 2252 lineto stroke 3436 2252 moveto 3444 2300 lineto stroke 3444 2300 moveto 3456 2348 lineto stroke 3456 2348 moveto 3468 2388 lineto stroke 3468 2388 moveto 3480 2420 lineto stroke 3480 2420 moveto 3488 2448 lineto stroke 3488 2448 moveto 3500 2468 lineto stroke 3500 2468 moveto 3508 2484 lineto stroke 3508 2484 moveto 3520 2488 lineto stroke 3520 2488 moveto 3532 2484 lineto stroke 3532 2484 moveto 3544 2472 lineto stroke 3544 2472 moveto 3556 2444 lineto stroke 3556 2444 moveto 3568 2408 lineto stroke 3568 2408 moveto 3576 2360 lineto stroke 3576 2360 moveto 3588 2300 lineto stroke 3588 2300 moveto 3600 2228 lineto stroke 3600 2228 moveto 3612 2160 lineto stroke 3612 2160 moveto 3620 2084 lineto stroke 3620 2084 moveto 3632 2000 lineto stroke 3632 2000 moveto 3640 1912 lineto stroke 3640 1912 moveto 3648 1832 lineto stroke 3648 1832 moveto 3656 1748 lineto stroke 3656 1748 moveto 3668 1664 lineto stroke 3668 1664 moveto 3676 1576 lineto stroke 3676 1576 moveto 3684 1500 lineto stroke 3684 1500 moveto 3692 1420 lineto stroke 3692 1420 moveto 3700 1344 lineto stroke 3700 1344 moveto 3708 1268 lineto stroke 3708 1268 moveto 3716 1196 lineto stroke 3716 1196 moveto 3724 1124 lineto stroke 3724 1124 moveto 3732 1056 lineto stroke 3732 1056 moveto 3740 996 lineto stroke 3740 996 moveto 3748 944 lineto stroke 3748 944 moveto 3752 900 lineto stroke 3752 900 moveto 3760 860 lineto stroke 3760 860 moveto 3768 828 lineto stroke 3768 828 moveto 3776 804 lineto stroke 3776 804 moveto 3784 784 lineto stroke 3784 784 moveto 3792 772 lineto stroke 3792 772 moveto 3800 768 lineto stroke 3800 768 moveto 600 1932 moveto 600 1932 lineto stroke 600 1932 moveto 600 1932 moveto 664 1932 lineto stroke 664 1932 moveto 732 1932 lineto stroke 732 1932 moveto 800 1932 lineto stroke 800 1932 moveto 864 1932 lineto stroke 864 1932 moveto 924 1932 lineto stroke 924 1932 moveto 980 1932 lineto stroke 980 1932 moveto 1040 1932 lineto stroke 1040 1932 moveto 1096 1932 lineto stroke 1096 1932 moveto 1152 1932 lineto stroke 1152 1932 moveto 1204 1932 lineto stroke 1204 1932 moveto 1256 1932 lineto stroke 1256 1932 moveto 1312 1932 lineto stroke 1312 1932 moveto 1356 1932 lineto stroke 1356 1932 moveto 1400 1932 lineto stroke 1400 1932 moveto 1444 1932 lineto stroke 1444 1932 moveto 1488 1932 lineto stroke 1488 1932 moveto 1528 1932 lineto stroke 1528 1932 moveto 1564 1928 lineto stroke 1564 1928 moveto 1604 1928 lineto stroke 1604 1928 moveto 1644 1928 lineto stroke 1644 1928 moveto 1680 1928 lineto stroke 1680 1928 moveto 1712 1928 lineto stroke 1712 1928 moveto 1748 1928 lineto stroke 1748 1928 moveto 1784 1932 lineto stroke 1784 1932 moveto 1816 1932 lineto stroke 1816 1932 moveto 1848 1936 lineto stroke 1848 1936 moveto 1884 1940 lineto stroke 1884 1940 moveto 1916 1940 lineto stroke 1916 1940 moveto 1944 1940 lineto stroke 1944 1940 moveto 1976 1940 lineto stroke 1976 1940 moveto 2008 1936 lineto stroke 2008 1936 moveto 2036 1932 lineto stroke 2036 1932 moveto 2064 1928 lineto stroke 2064 1928 moveto 2092 1924 lineto stroke 2092 1924 moveto 2120 1920 lineto stroke 2120 1920 moveto 2148 1916 lineto stroke 2148 1916 moveto 2176 1912 lineto stroke 2176 1912 moveto 2204 1912 lineto stroke 2204 1912 moveto 2228 1912 lineto stroke 2228 1912 moveto 2256 1916 lineto stroke 2256 1916 moveto 2280 1920 lineto stroke 2280 1920 moveto 2308 1928 lineto stroke 2308 1928 moveto 2332 1936 lineto stroke 2332 1936 moveto 2356 1944 lineto stroke 2356 1944 moveto 2380 1952 lineto stroke 2380 1952 moveto 2408 1960 lineto stroke 2408 1960 moveto 2432 1968 lineto stroke 2432 1968 moveto 2456 1968 lineto stroke 2456 1968 moveto 2480 1968 lineto stroke 2480 1968 moveto 2504 1968 lineto stroke 2504 1968 moveto 2524 1960 lineto stroke 2524 1960 moveto 2548 1952 lineto stroke 2548 1952 moveto 2568 1940 lineto stroke 2568 1940 moveto 2592 1924 lineto stroke 2592 1924 moveto 2612 1912 lineto stroke 2612 1912 moveto 2632 1896 lineto stroke 2632 1896 moveto 2652 1880 lineto stroke 2652 1880 moveto 2676 1868 lineto stroke 2676 1868 moveto 2696 1860 lineto stroke 2696 1860 moveto 2716 1852 lineto stroke 2716 1852 moveto 2736 1852 lineto stroke 2736 1852 moveto 2756 1856 lineto stroke 2756 1856 moveto 2776 1864 lineto stroke 2776 1864 moveto 2796 1876 lineto stroke 2796 1876 moveto 2816 1896 lineto stroke 2816 1896 moveto 2832 1916 lineto stroke 2832 1916 moveto 2852 1940 lineto stroke 2852 1940 moveto 2872 1968 lineto stroke 2872 1968 moveto 2888 1992 lineto stroke 2888 1992 moveto 2904 2016 lineto stroke 2904 2016 moveto 2924 2040 lineto stroke 2924 2040 moveto 2940 2060 lineto stroke 2940 2060 moveto 2956 2080 lineto stroke 2956 2080 moveto 2976 2088 lineto stroke 2976 2088 moveto 2992 2096 lineto stroke 2992 2096 moveto 3012 2092 lineto stroke 3012 2092 moveto 3028 2084 lineto stroke 3028 2084 moveto 3048 2064 lineto stroke 3048 2064 moveto 3064 2036 lineto stroke 3064 2036 moveto 3080 2004 lineto stroke 3080 2004 moveto 3096 1964 lineto stroke 3096 1964 moveto 3112 1924 lineto stroke 3112 1924 moveto 3128 1880 lineto stroke 3128 1880 moveto 3144 1832 lineto stroke 3144 1832 moveto 3160 1788 lineto stroke 3160 1788 moveto 3172 1748 lineto stroke 3172 1748 moveto 3188 1708 lineto stroke 3188 1708 moveto 3200 1676 lineto stroke 3200 1676 moveto 3216 1644 lineto stroke 3216 1644 moveto 3232 1620 lineto stroke 3232 1620 moveto 3244 1604 lineto stroke 3244 1604 moveto 3260 1600 lineto stroke 3260 1600 moveto 3276 1604 lineto stroke 3276 1604 moveto 3288 1620 lineto stroke 3288 1620 moveto 3304 1644 lineto stroke 3304 1644 moveto 3320 1684 lineto stroke 3320 1684 moveto 3332 1728 lineto stroke 3332 1728 moveto 3348 1784 lineto stroke 3348 1784 moveto 3360 1848 lineto stroke 3360 1848 moveto 3376 1920 lineto stroke 3376 1920 moveto 3388 1988 lineto stroke 3388 1988 moveto 3400 2056 lineto stroke 3400 2056 moveto 3412 2128 lineto stroke 3412 2128 moveto 3424 2200 lineto stroke 3424 2200 moveto 3436 2264 lineto stroke 3436 2264 moveto 3448 2324 lineto stroke 3448 2324 moveto 3456 2380 lineto stroke 3456 2380 moveto 3468 2432 lineto stroke 3468 2432 moveto 3480 2476 lineto stroke 3480 2476 moveto 3492 2516 lineto stroke 3492 2516 moveto 3504 2544 lineto stroke 3504 2544 moveto 3516 2564 lineto stroke 3516 2564 moveto 3528 2572 lineto stroke 3528 2572 moveto 3540 2568 lineto stroke 3540 2568 moveto 3552 2548 lineto stroke 3552 2548 moveto 3564 2516 lineto stroke 3564 2516 moveto 3576 2472 lineto stroke 3576 2472 moveto 3588 2416 lineto stroke 3588 2416 moveto 3596 2348 lineto stroke 3596 2348 moveto 3608 2272 lineto stroke 3608 2272 moveto 3620 2192 lineto stroke 3620 2192 moveto 3632 2104 lineto stroke 3632 2104 moveto 3640 2012 lineto stroke 3640 2012 moveto 3652 1916 lineto stroke 3652 1916 moveto 3660 1824 lineto stroke 3660 1824 moveto 3672 1736 lineto stroke 3672 1736 moveto 3680 1644 lineto stroke 3680 1644 moveto 3692 1552 lineto stroke 3692 1552 moveto 3700 1464 lineto stroke 3700 1464 moveto 3708 1376 lineto stroke 3708 1376 moveto 3720 1292 lineto stroke 3720 1292 moveto 3728 1220 lineto stroke 3728 1220 moveto 3736 1156 lineto stroke 3736 1156 moveto 3748 1100 lineto stroke 3748 1100 moveto 3756 1052 lineto stroke 3756 1052 moveto 3764 1012 lineto stroke 3764 1012 moveto 3772 984 lineto stroke 3772 984 moveto 3780 960 lineto stroke 3780 960 moveto 3788 948 lineto stroke 3788 948 moveto 3800 940 lineto stroke 3800 940 moveto 600 1928 moveto 600 1928 lineto stroke 600 1928 moveto 600 1928 moveto 644 1928 lineto stroke 644 1928 moveto 692 1928 lineto stroke 692 1928 moveto 736 1928 lineto stroke 736 1928 moveto 784 1932 lineto stroke 784 1932 moveto 828 1932 lineto stroke 828 1932 moveto 872 1936 lineto stroke 872 1936 moveto 916 1936 lineto stroke 916 1936 moveto 956 1936 lineto stroke 956 1936 moveto 1000 1936 lineto stroke 1000 1936 moveto 1040 1932 lineto stroke 1040 1932 moveto 1080 1928 lineto stroke 1080 1928 moveto 1120 1924 lineto stroke 1120 1924 moveto 1156 1924 lineto stroke 1156 1924 moveto 1196 1924 lineto stroke 1196 1924 moveto 1232 1924 lineto stroke 1232 1924 moveto 1268 1928 lineto stroke 1268 1928 moveto 1308 1932 lineto stroke 1308 1932 moveto 1344 1936 lineto stroke 1344 1936 moveto 1380 1940 lineto stroke 1380 1940 moveto 1416 1944 lineto stroke 1416 1944 moveto 1452 1944 lineto stroke 1452 1944 moveto 1488 1944 lineto stroke 1488 1944 moveto 1520 1940 lineto stroke 1520 1940 moveto 1556 1932 lineto stroke 1556 1932 moveto 1592 1924 lineto stroke 1592 1924 moveto 1628 1920 lineto stroke 1628 1920 moveto 1660 1912 lineto stroke 1660 1912 moveto 1696 1908 lineto stroke 1696 1908 moveto 1728 1912 lineto stroke 1728 1912 moveto 1760 1916 lineto stroke 1760 1916 moveto 1796 1924 lineto stroke 1796 1924 moveto 1828 1932 lineto stroke 1828 1932 moveto 1856 1944 lineto stroke 1856 1944 moveto 1888 1952 lineto stroke 1888 1952 moveto 1916 1960 lineto stroke 1916 1960 moveto 1948 1968 lineto stroke 1948 1968 moveto 1976 1968 lineto stroke 1976 1968 moveto 2004 1964 lineto stroke 2004 1964 moveto 2032 1956 lineto stroke 2032 1956 moveto 2060 1944 lineto stroke 2060 1944 moveto 2084 1932 lineto stroke 2084 1932 moveto 2108 1916 lineto stroke 2108 1916 moveto 2132 1904 lineto stroke 2132 1904 moveto 2160 1888 lineto stroke 2160 1888 moveto 2184 1880 lineto stroke 2184 1880 moveto 2208 1872 lineto stroke 2208 1872 moveto 2232 1872 lineto stroke 2232 1872 moveto 2256 1876 lineto stroke 2256 1876 moveto 2280 1884 lineto stroke 2280 1884 moveto 2300 1896 lineto stroke 2300 1896 moveto 2324 1916 lineto stroke 2324 1916 moveto 2348 1936 lineto stroke 2348 1936 moveto 2372 1956 lineto stroke 2372 1956 moveto 2396 1980 lineto stroke 2396 1980 moveto 2420 2000 lineto stroke 2420 2000 moveto 2444 2016 lineto stroke 2444 2016 moveto 2464 2028 lineto stroke 2464 2028 moveto 2488 2032 lineto stroke 2488 2032 moveto 2508 2028 lineto stroke 2508 2028 moveto 2532 2016 lineto stroke 2532 2016 moveto 2552 2000 lineto stroke 2552 2000 moveto 2572 1976 lineto stroke 2572 1976 moveto 2592 1948 lineto stroke 2592 1948 moveto 2612 1920 lineto stroke 2612 1920 moveto 2636 1884 lineto stroke 2636 1884 moveto 2656 1852 lineto stroke 2656 1852 moveto 2676 1820 lineto stroke 2676 1820 moveto 2700 1796 lineto stroke 2700 1796 moveto 2720 1780 lineto stroke 2720 1780 moveto 2736 1772 lineto stroke 2736 1772 moveto 2756 1772 lineto stroke 2756 1772 moveto 2776 1780 lineto stroke 2776 1780 moveto 2796 1796 lineto stroke 2796 1796 moveto 2816 1824 lineto stroke 2816 1824 moveto 2836 1860 lineto stroke 2836 1860 moveto 2856 1904 lineto stroke 2856 1904 moveto 2872 1944 lineto stroke 2872 1944 moveto 2888 1988 lineto stroke 2888 1988 moveto 2908 2032 lineto stroke 2908 2032 moveto 2924 2076 lineto stroke 2924 2076 moveto 2940 2116 lineto stroke 2940 2116 moveto 2960 2148 lineto stroke 2960 2148 moveto 2976 2172 lineto stroke 2976 2172 moveto 2992 2188 lineto stroke 2992 2188 moveto 3012 2196 lineto stroke 3012 2196 moveto 3032 2184 lineto stroke 3032 2184 moveto 3052 2160 lineto stroke 3052 2160 moveto 3072 2116 lineto stroke 3072 2116 moveto 3088 2072 lineto stroke 3088 2072 moveto 3104 2016 lineto stroke 3104 2016 moveto 3124 1956 lineto stroke 3124 1956 moveto 3140 1888 lineto stroke 3140 1888 moveto 3156 1828 lineto stroke 3156 1828 moveto 3168 1764 lineto stroke 3168 1764 moveto 3184 1704 lineto stroke 3184 1704 moveto 3200 1652 lineto stroke 3200 1652 moveto 3216 1608 lineto stroke 3216 1608 moveto 3228 1568 lineto stroke 3228 1568 moveto 3244 1540 lineto stroke 3244 1540 moveto 3260 1524 lineto stroke 3260 1524 moveto 3276 1520 lineto stroke 3276 1520 moveto 3292 1532 lineto stroke 3292 1532 moveto 3308 1560 lineto stroke 3308 1560 moveto 3324 1608 lineto stroke 3324 1608 moveto 3340 1664 lineto stroke 3340 1664 moveto 3356 1732 lineto stroke 3356 1732 moveto 3372 1812 lineto stroke 3372 1812 moveto 3388 1900 lineto stroke 3388 1900 moveto 3400 1980 lineto stroke 3400 1980 moveto 3416 2060 lineto stroke 3416 2060 moveto 3428 2140 lineto stroke 3428 2140 moveto 3440 2220 lineto stroke 3440 2220 moveto 3456 2288 lineto stroke 3456 2288 moveto 3468 2352 lineto stroke 3468 2352 moveto 3480 2408 lineto stroke 3480 2408 moveto 3492 2456 lineto stroke 3492 2456 moveto 3508 2492 lineto stroke 3508 2492 moveto 3520 2512 lineto stroke 3520 2512 moveto 3532 2520 lineto stroke 3532 2520 moveto 3544 2520 lineto stroke 3544 2520 moveto 3556 2500 lineto stroke 3556 2500 moveto 3572 2468 lineto stroke 3572 2468 moveto 3584 2420 lineto stroke 3584 2420 moveto 3596 2360 lineto stroke 3596 2360 moveto 3612 2284 lineto stroke 3612 2284 moveto 3624 2200 lineto stroke 3624 2200 moveto 3640 2108 lineto stroke 3640 2108 moveto 3652 2008 lineto stroke 3652 2008 moveto 3664 1908 lineto stroke 3664 1908 moveto 3676 1812 lineto stroke 3676 1812 moveto 3688 1716 lineto stroke 3688 1716 moveto 3704 1624 lineto stroke 3704 1624 moveto 3716 1544 lineto stroke 3716 1544 moveto 3728 1468 lineto stroke 3728 1468 moveto 3740 1404 lineto stroke 3740 1404 moveto 3752 1344 lineto stroke 3752 1344 moveto 3764 1300 lineto stroke 3764 1300 moveto 3776 1268 lineto stroke 3776 1268 moveto 3788 1248 lineto stroke 3788 1248 moveto 3800 1240 lineto stroke 3800 1240 moveto 600 1912 moveto 600 1912 lineto stroke 600 1912 moveto 600 1912 moveto 628 1888 lineto stroke 628 1888 moveto 660 1872 lineto stroke 660 1872 moveto 688 1860 lineto stroke 688 1860 moveto 720 1860 lineto stroke 720 1860 moveto 744 1868 lineto stroke 744 1868 moveto 772 1880 lineto stroke 772 1880 moveto 800 1900 lineto stroke 800 1900 moveto 824 1924 lineto stroke 824 1924 moveto 852 1948 lineto stroke 852 1948 moveto 876 1968 lineto stroke 876 1968 moveto 900 1988 lineto stroke 900 1988 moveto 924 2000 lineto stroke 924 2000 moveto 948 2008 lineto stroke 948 2008 moveto 972 2008 lineto stroke 972 2008 moveto 996 2004 lineto stroke 996 2004 moveto 1020 1992 lineto stroke 1020 1992 moveto 1044 1976 lineto stroke 1044 1976 moveto 1068 1956 lineto stroke 1068 1956 moveto 1092 1932 lineto stroke 1092 1932 moveto 1112 1908 lineto stroke 1112 1908 moveto 1136 1888 lineto stroke 1136 1888 moveto 1160 1868 lineto stroke 1160 1868 moveto 1184 1856 lineto stroke 1184 1856 moveto 1208 1848 lineto stroke 1208 1848 moveto 1232 1848 lineto stroke 1232 1848 moveto 1256 1856 lineto stroke 1256 1856 moveto 1284 1868 lineto stroke 1284 1868 moveto 1308 1888 lineto stroke 1308 1888 moveto 1328 1912 lineto stroke 1328 1912 moveto 1352 1936 lineto stroke 1352 1936 moveto 1376 1960 lineto stroke 1376 1960 moveto 1400 1984 lineto stroke 1400 1984 moveto 1424 2004 lineto stroke 1424 2004 moveto 1444 2016 lineto stroke 1444 2016 moveto 1468 2020 lineto stroke 1468 2020 moveto 1492 2020 lineto stroke 1492 2020 moveto 1516 2016 lineto stroke 1516 2016 moveto 1536 2000 lineto stroke 1536 2000 moveto 1560 1980 lineto stroke 1560 1980 moveto 1584 1956 lineto stroke 1584 1956 moveto 1608 1928 lineto stroke 1608 1928 moveto 1636 1900 lineto stroke 1636 1900 moveto 1660 1876 lineto stroke 1660 1876 moveto 1684 1852 lineto stroke 1684 1852 moveto 1704 1840 lineto stroke 1704 1840 moveto 1728 1836 lineto stroke 1728 1836 moveto 1752 1836 lineto stroke 1752 1836 moveto 1772 1844 lineto stroke 1772 1844 moveto 1796 1860 lineto stroke 1796 1860 moveto 1816 1880 lineto stroke 1816 1880 moveto 1840 1904 lineto stroke 1840 1904 moveto 1864 1928 lineto stroke 1864 1928 moveto 1888 1960 lineto stroke 1888 1960 moveto 1912 1988 lineto stroke 1912 1988 moveto 1936 2012 lineto stroke 1936 2012 moveto 1964 2028 lineto stroke 1964 2028 moveto 1988 2036 lineto stroke 1988 2036 moveto 2012 2032 lineto stroke 2012 2032 moveto 2036 2020 lineto stroke 2036 2020 moveto 2060 2004 lineto stroke 2060 2004 moveto 2084 1980 lineto stroke 2084 1980 moveto 2104 1952 lineto stroke 2104 1952 moveto 2128 1924 lineto stroke 2128 1924 moveto 2148 1896 lineto stroke 2148 1896 moveto 2172 1872 lineto stroke 2172 1872 moveto 2192 1848 lineto stroke 2192 1848 moveto 2216 1832 lineto stroke 2216 1832 moveto 2240 1824 lineto stroke 2240 1824 moveto 2260 1824 lineto stroke 2260 1824 moveto 2284 1828 lineto stroke 2284 1828 moveto 2304 1844 lineto stroke 2304 1844 moveto 2328 1868 lineto stroke 2328 1868 moveto 2348 1892 lineto stroke 2348 1892 moveto 2372 1920 lineto stroke 2372 1920 moveto 2392 1948 lineto stroke 2392 1948 moveto 2416 1976 lineto stroke 2416 1976 moveto 2436 2004 lineto stroke 2436 2004 moveto 2460 2024 lineto stroke 2460 2024 moveto 2480 2040 lineto stroke 2480 2040 moveto 2504 2044 lineto stroke 2504 2044 moveto 2524 2044 lineto stroke 2524 2044 moveto 2548 2036 lineto stroke 2548 2036 moveto 2568 2016 lineto stroke 2568 2016 moveto 2592 1996 lineto stroke 2592 1996 moveto 2612 1968 lineto stroke 2612 1968 moveto 2632 1936 lineto stroke 2632 1936 moveto 2656 1908 lineto stroke 2656 1908 moveto 2676 1880 lineto stroke 2676 1880 moveto 2696 1852 lineto stroke 2696 1852 moveto 2720 1832 lineto stroke 2720 1832 moveto 2740 1816 lineto stroke 2740 1816 moveto 2764 1812 lineto stroke 2764 1812 moveto 2784 1816 lineto stroke 2784 1816 moveto 2808 1824 lineto stroke 2808 1824 moveto 2828 1844 lineto stroke 2828 1844 moveto 2852 1868 lineto stroke 2852 1868 moveto 2872 1896 lineto stroke 2872 1896 moveto 2892 1928 lineto stroke 2892 1928 moveto 2916 1960 lineto stroke 2916 1960 moveto 2936 1988 lineto stroke 2936 1988 moveto 2956 2016 lineto stroke 2956 2016 moveto 2980 2036 lineto stroke 2980 2036 moveto 3004 2052 lineto stroke 3004 2052 moveto 3024 2056 lineto stroke 3024 2056 moveto 3048 2052 lineto stroke 3048 2052 moveto 3068 2040 lineto stroke 3068 2040 moveto 3088 2020 lineto stroke 3088 2020 moveto 3112 1992 lineto stroke 3112 1992 moveto 3132 1964 lineto stroke 3132 1964 moveto 3152 1932 lineto stroke 3152 1932 moveto 3172 1900 lineto stroke 3172 1900 moveto 3196 1872 lineto stroke 3196 1872 moveto 3216 1844 lineto stroke 3216 1844 moveto 3240 1824 lineto stroke 3240 1824 moveto 3260 1808 lineto stroke 3260 1808 moveto 3284 1804 lineto stroke 3284 1804 moveto 3304 1808 lineto stroke 3304 1808 moveto 3324 1820 lineto stroke 3324 1820 moveto 3348 1840 lineto stroke 3348 1840 moveto 3368 1868 lineto stroke 3368 1868 moveto 3388 1900 lineto stroke 3388 1900 moveto 3412 1932 lineto stroke 3412 1932 moveto 3432 1964 lineto stroke 3432 1964 moveto 3452 1992 lineto stroke 3452 1992 moveto 3476 2024 lineto stroke 3476 2024 moveto 3500 2044 lineto stroke 3500 2044 moveto 3524 2056 lineto stroke 3524 2056 moveto 3548 2060 lineto stroke 3548 2060 moveto 3568 2052 lineto stroke 3568 2052 moveto 3588 2036 lineto stroke 3588 2036 moveto 3608 2016 lineto stroke 3608 2016 moveto 3632 1988 lineto stroke 3632 1988 moveto 3652 1956 lineto stroke 3652 1956 moveto 3672 1924 lineto stroke 3672 1924 moveto 3692 1892 lineto stroke 3692 1892 moveto 3716 1864 lineto stroke 3716 1864 moveto 3736 1840 lineto stroke 3736 1840 moveto 3756 1820 lineto stroke 3756 1820 moveto 3776 1808 lineto stroke 3776 1808 moveto 3800 1804 lineto stroke 3800 1804 moveto 0 3068 moveto showpage auto/07p/doc/include/loop.eps0000640000175000017500000037463213570013207014133 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .140786604.140904284 %%CreationDate: Fri Nov 30 11:10:38 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: loop.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 441.844042232 moveto 81.6892266744 441.862549524 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.6892266744 441.862549524 moveto 83.3784533488 440.750383172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.3784533488 440.750383172 moveto 85.0676800232 438.59547494 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.0676800232 438.59547494 moveto 86.7569066976 435.490587844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.7569066976 435.490587844 moveto 88.561211566 431.2323484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.561211566 431.2323484 moveto 90.3655164344 426.114295952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.3655164344 426.114295952 moveto 92.1698213032 420.24902784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.1698213032 420.24902784 moveto 93.9741261716 413.744414956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.9741261716 413.744414956 moveto 95.9944840432 405.827487024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.9944840432 405.827487024 moveto 98.0148419152 397.368351604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.0148419152 397.368351604 moveto 100.035199787 388.48678018 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.035199787 388.48678018 moveto 102.055557659 379.290051364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.055557659 379.290051364 moveto 104.097939335 369.769471 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.097939335 369.769471 moveto 106.140321012 360.109319828 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.140321012 360.109319828 moveto 108.182702688 350.383580516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.182702688 350.383580516 moveto 110.225084364 340.65550906 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.225084364 340.65550906 moveto 112.898375968 328.006739668 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.898375968 328.006739668 moveto 115.57166757 315.542057768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.57166757 315.542057768 moveto 118.244959174 303.33720512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.244959174 303.33720512 moveto 120.918250776 291.449460344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.918250776 291.449460344 moveto 123.488162644 280.359266448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 123.488162644 280.359266448 moveto 126.058074508 269.626803244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.058074508 269.626803244 moveto 128.627986376 259.269458808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.627986376 259.269458808 moveto 131.19789824 249.297469868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.19789824 249.297469868 moveto 133.921522156 239.154471756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.921522156 239.154471756 moveto 136.645146068 229.448934168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.645146068 229.448934168 moveto 139.368769984 220.176229672 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.368769984 220.176229672 moveto 142.092393896 211.328337932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 142.092393896 211.328337932 moveto 145.190674552 201.766282528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 145.190674552 201.766282528 moveto 148.288955208 192.721822536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.288955208 192.721822536 moveto 151.387235864 184.174644648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.387235864 184.174644648 moveto 154.48551652 176.103201048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 154.48551652 176.103201048 moveto 157.949432592 167.61518242 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.949432592 167.61518242 moveto 161.413348664 159.66292166 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.413348664 159.66292166 moveto 164.877264736 152.215663272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.877264736 152.215663272 moveto 168.341180804 145.243398796 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.341180804 145.243398796 moveto 172.4491411 137.550664756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 172.4491411 137.550664756 moveto 176.557101392 130.439250948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 176.557101392 130.439250948 moveto 180.665061688 123.865799096 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.665061688 123.865799096 moveto 184.77302198 117.789675912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.77302198 117.789675912 moveto 189.359947728 111.546412232 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.359947728 111.546412232 moveto 193.946873472 105.82731508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.946873472 105.82731508 moveto 198.533799216 100.587614784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.533799216 100.587614784 moveto 203.120724964 95.786271796 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 203.120724964 95.786271796 moveto 208.102178892 91.02487014 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.102178892 91.02487014 moveto 213.083632816 86.692557312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.083632816 86.692557312 moveto 218.065086744 82.749696432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.065086744 82.749696432 moveto 223.046540672 79.160381276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.046540672 79.160381276 moveto 228.84919218 75.382109967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.84919218 75.382109967 moveto 234.651843692 71.993500828 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.651843692 71.993500828 moveto 240.4544952 68.953446696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.4544952 68.953446696 moveto 246.257146708 66.225303965 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.257146708 66.225303965 moveto 252.777926956 63.491331772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.777926956 63.491331772 moveto 259.298707204 61.069118046 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.298707204 61.069118046 moveto 265.819487448 58.922529896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.819487448 58.922529896 moveto 272.340267696 57.019756733 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.340267696 57.019756733 moveto 278.37054104 55.4527936859999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.37054104 55.4527936859999 moveto 284.400814384 54.050834371 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.400814384 54.050834371 moveto 290.431087732 52.7965013229999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.431087732 52.7965013229999 moveto 296.461361076 51.6744016839999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.461361076 51.6744016839999 moveto 301.759083296 50.78694688 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.759083296 50.78694688 moveto 307.056805516 49.982929638 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.056805516 49.982929638 moveto 312.354527736 49.255194852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.354527736 49.255194852 moveto 317.652249956 48.597559831 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.652249956 48.597559831 moveto 322.339516912 48.069978732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.339516912 48.069978732 moveto 327.026783864 47.590332119 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.026783864 47.590332119 moveto 331.71405082 47.1565276889999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.71405082 47.1565276889999 moveto 336.401317772 46.767402908 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.401317772 46.767402908 moveto 340.703909316 46.449490339 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.703909316 46.449490339 moveto 345.006500864 46.170215384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.006500864 46.170215384 moveto 349.309092408 45.931973596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.309092408 45.931973596 moveto 353.611683952 45.7389251739999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.611683952 45.7389251739999 moveto 357.536137012 45.6076451939999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.536137012 45.6076451939999 moveto 361.460590072 45.526341869 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.460590072 45.526341869 moveto 365.385043132 45.504912483 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.385043132 45.504912483 moveto 369.309496196 45.556933739 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.309496196 45.556933739 moveto 372.907493236 45.684681986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 372.907493236 45.684681986 moveto 376.505490272 45.908099167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 376.505490272 45.908099167 moveto 380.103487312 46.251599485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.103487312 46.251599485 moveto 383.701484352 46.746924036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.701484352 46.746924036 moveto 386.914129424 47.350567179 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 386.914129424 47.350567179 moveto 390.126774492 48.1446043079999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.126774492 48.1446043079999 moveto 393.339419564 49.17533707 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 393.339419564 49.17533707 moveto 396.552064632 50.5004748009999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.552064632 50.5004748009999 moveto 399.646905092 52.1219418809999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.646905092 52.1219418809999 moveto 402.741745552 54.161094185 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 402.741745552 54.161094185 moveto 405.836586012 56.7134807639999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 405.836586012 56.7134807639999 moveto 408.931426468 59.894515935 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.931426468 59.894515935 moveto 411.60472222 63.2535119259999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.60472222 63.2535119259999 moveto 414.278017972 67.2878711279999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.278017972 67.2878711279999 moveto 416.951313728 72.116284076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 416.951313728 72.116284076 moveto 419.62460948 77.872341364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.62460948 77.872341364 moveto 421.973757908 83.8128923279999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 421.973757908 83.8128923279999 moveto 424.32290634 90.69173814 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.32290634 90.69173814 moveto 426.672054772 98.621546064 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.672054772 98.621546064 moveto 429.021203204 107.716232708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.021203204 107.716232708 moveto 431.569456408 119.02726168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 431.569456408 119.02726168 moveto 434.117709616 131.966809992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.117709616 131.966809992 moveto 436.66596282 146.634663708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 436.66596282 146.634663708 moveto 439.214216028 163.087964764 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.214216028 163.087964764 moveto 441.467387384 179.124272608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 441.467387384 179.124272608 moveto 443.72055874 196.505854304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.72055874 196.505854304 moveto 445.973730096 215.125433724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 445.973730096 215.125433724 moveto 448.226901452 234.813444628 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 448.226901452 234.813444628 moveto 450.153152668 252.31687342 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 450.153152668 252.31687342 moveto 452.079403884 270.2468319 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.079403884 270.2468319 moveto 454.005655096 288.3891979 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.005655096 288.3891979 moveto 455.931906312 306.50514192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 455.931906312 306.50514192 moveto 457.962117556 325.287624532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.962117556 325.287624532 moveto 459.9923288 343.44698498 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.9923288 343.44698498 moveto 462.02254004 360.680337448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.02254004 360.680337448 moveto 464.052751284 376.70397414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 464.052751284 376.70397414 moveto 466.0464368 391.017517868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.0464368 391.017517868 moveto 468.04012232 403.72262368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 468.04012232 403.72262368 moveto 470.033807836 414.66836528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.033807836 414.66836528 moveto 472.027493356 423.754372452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.027493356 423.754372452 moveto 474.020620016 430.929605548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.020620016 430.929605548 moveto 476.013746676 436.196719192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.013746676 436.196719192 moveto 478.00687334 439.598545448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.00687334 439.598545448 moveto 480 441.214727028 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 441.844038764 moveto 81.799503989 441.92101726 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.799503989 441.92101726 moveto 83.599007978 441.111255968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.599007978 441.111255968 moveto 85.3985119672 439.474290864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.3985119672 439.474290864 moveto 87.198015956 437.072983196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.198015956 437.072983196 moveto 89.084581252 433.805505344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.084581252 433.805505344 moveto 90.9711465484 429.844373204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.9711465484 429.844373204 moveto 92.8577118444 425.263937724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.8577118444 425.263937724 moveto 94.7442771408 420.136641716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.7442771408 420.136641716 moveto 96.8608068512 413.81961496 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.8608068512 413.81961496 moveto 98.977336562 406.99492778 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.977336562 406.99492778 moveto 101.093866272 399.749207224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.093866272 399.749207224 moveto 103.210395983 392.162240932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.210395983 392.162240932 moveto 105.300487651 384.40625194 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.300487651 384.40625194 moveto 107.39057932 376.451633148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.39057932 376.451633148 moveto 109.480670988 368.35505516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.480670988 368.35505516 moveto 111.570762656 360.166908396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.570762656 360.166908396 moveto 114.06280614 350.345809128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.06280614 350.345809128 moveto 116.554849623 340.5224713 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.554849623 340.5224713 moveto 119.046893107 330.75188334 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.046893107 330.75188334 moveto 121.538936592 321.07995626 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.538936592 321.07995626 moveto 124.169684668 311.018382396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.169684668 311.018382396 moveto 126.800432748 301.144699036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.800432748 301.144699036 moveto 129.431180824 291.487310024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.431180824 291.487310024 moveto 132.061928904 282.06811014 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.061928904 282.06811014 moveto 134.801111316 272.5312736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.801111316 272.5312736 moveto 137.540293728 263.283316524 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.540293728 263.283316524 moveto 140.27947614 254.332749584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.27947614 254.332749584 moveto 143.018658552 245.684296376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.018658552 245.684296376 moveto 146.052529636 236.459855816 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.052529636 236.459855816 moveto 149.08640072 227.606497616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.08640072 227.606497616 moveto 152.120271804 219.119887388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.120271804 219.119887388 moveto 155.154142892 210.993378044 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.154142892 210.993378044 moveto 158.423405488 202.629729944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.423405488 202.629729944 moveto 161.692668084 194.66221908 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.692668084 194.66221908 moveto 164.96193068 187.077465216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.96193068 187.077465216 moveto 168.231193276 179.861286056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.231193276 179.861286056 moveto 172.085476708 171.807245476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 172.085476708 171.807245476 moveto 175.939760144 164.220782276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.939760144 164.220782276 moveto 179.79404358 157.07767102 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 179.79404358 157.07767102 moveto 183.648327016 150.354069272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.648327016 150.354069272 moveto 188.214689704 142.89935822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.214689704 142.89935822 moveto 192.781052396 135.963799388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.781052396 135.963799388 moveto 197.347415084 129.512082472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 197.347415084 129.512082472 moveto 201.913777772 123.510805944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 201.913777772 123.510805944 moveto 206.626369068 117.756384184 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.626369068 117.756384184 moveto 211.338960364 112.41594414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.338960364 112.41594414 moveto 216.051551656 107.459350248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.051551656 107.459350248 moveto 220.764142952 102.85855906 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.764142952 102.85855906 moveto 226.078033832 98.065058804 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.078033832 98.065058804 moveto 231.391924708 93.65647614 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.391924708 93.65647614 moveto 236.705815588 89.601218052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.705815588 89.601218052 moveto 242.019706464 85.8703256599999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.019706464 85.8703256599999 moveto 248.534517584 81.7001821449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.534517584 81.7001821449999 moveto 255.049328708 77.933652946 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.049328708 77.933652946 moveto 261.564139828 74.531079376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.564139828 74.531079376 moveto 268.078950948 71.456970283 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.078950948 71.456970283 moveto 274.132800848 68.8670464419999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.132800848 68.8670464419999 moveto 280.186650744 66.510693703 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.186650744 66.510693703 moveto 286.24050064 64.367655301 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.24050064 64.367655301 moveto 292.29435054 62.420008564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.29435054 62.420008564 moveto 297.333638188 60.93646176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 297.333638188 60.93646176 moveto 302.37292584 59.569632941 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.37292584 59.569632941 moveto 307.412213492 58.31289638 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.412213492 58.31289638 moveto 312.45150114 57.1608985419999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.45150114 57.1608985419999 moveto 316.975750648 56.212593528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.975750648 56.212593528 moveto 321.500000156 55.3437839129999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.500000156 55.3437839129999 moveto 326.024249664 54.554023838 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.024249664 54.554023838 moveto 330.548499172 53.8444068809999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.548499172 53.8444068809999 moveto 334.67875052 53.269023534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.67875052 53.269023534 moveto 338.809001868 52.766776818 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.809001868 52.766776818 moveto 342.939253216 52.343616241 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.939253216 52.343616241 moveto 347.069504564 52.007997697 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.069504564 52.007997697 moveto 351.115897392 51.7751724619999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.115897392 51.7751724619999 moveto 355.16229022 51.651844944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 355.16229022 51.651844944 moveto 359.208683044 51.6569966569999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.208683044 51.6569966569999 moveto 363.255075872 51.815245341 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 363.255075872 51.815245341 moveto 366.99521828 52.124849639 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.99521828 52.124849639 moveto 370.735360692 52.6234916659999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.735360692 52.6234916659999 moveto 374.4755031 53.350436714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 374.4755031 53.350436714 moveto 378.215645508 54.354406112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.215645508 54.354406112 moveto 381.765594608 55.617925472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 381.765594608 55.617925472 moveto 385.315543708 57.247436016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 385.315543708 57.247436016 moveto 388.865492808 59.3185739 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.865492808 59.3185739 moveto 392.415441904 61.922047648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.415441904 61.922047648 moveto 395.426221788 64.62686657 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.426221788 64.62686657 moveto 398.437001672 67.868161891 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 398.437001672 67.868161891 moveto 401.44778156 71.7329665299999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 401.44778156 71.7329665299999 moveto 404.458561444 76.3192442129999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.458561444 76.3192442129999 moveto 407.08356474 80.991322643 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 407.08356474 80.991322643 moveto 409.708568036 86.3728457639999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.708568036 86.3728457639999 moveto 412.333571332 92.547077468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 412.333571332 92.547077468 moveto 414.958574628 99.600636828 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.958574628 99.600636828 moveto 417.59069996 107.644605284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.59069996 107.644605284 moveto 420.222825292 116.748017924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.222825292 116.748017924 moveto 422.854950624 126.991330868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 422.854950624 126.991330868 moveto 425.487075956 138.443544588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.487075956 138.443544588 moveto 427.989303224 150.499003052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 427.989303224 150.499003052 moveto 430.491530492 163.717885096 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 430.491530492 163.717885096 moveto 432.99375776 178.09729112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 432.99375776 178.09729112 moveto 435.495985032 193.601851432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.495985032 193.601851432 moveto 437.755502852 208.509525112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.755502852 208.509525112 moveto 440.015020676 224.192160864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.015020676 224.192160864 moveto 442.2745385 240.536324092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 442.2745385 240.536324092 moveto 444.534056324 257.398609476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 444.534056324 257.398609476 moveto 446.731551632 274.131684736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.731551632 274.131684736 moveto 448.92904694 291.01062154 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 448.92904694 291.01062154 moveto 451.126542252 307.836208292 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 451.126542252 307.836208292 moveto 453.32403756 324.39721894 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 453.32403756 324.39721894 moveto 455.627841692 341.238850876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 455.627841692 341.238850876 moveto 457.931645824 357.305160264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.931645824 357.305160264 moveto 460.235449952 372.363953912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.235449952 372.363953912 moveto 462.539254084 386.205832244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.539254084 386.205832244 moveto 464.723152876 398.040649708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 464.723152876 398.040649708 moveto 466.907051672 408.498836432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.907051672 408.498836432 moveto 469.090950464 417.491332492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.090950464 417.491332492 moveto 471.274849256 424.962698788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.274849256 424.962698788 moveto 473.456136944 430.884452188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 473.456136944 430.884452188 moveto 475.637424628 435.275338204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.637424628 435.275338204 moveto 477.818712316 438.17150994 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.818712316 438.17150994 moveto 480 439.632607364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 441.843561968 moveto 81.8999275496 441.970199344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.8999275496 441.970199344 moveto 83.7998550993 441.470597616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.7998550993 441.470597616 moveto 85.6997826488 440.378956068 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.6997826488 440.378956068 moveto 87.5997101984 438.731349376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.5997101984 438.731349376 moveto 89.5616127224 436.486173876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.5616127224 436.486173876 moveto 91.5235152464 433.729858088 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.5235152464 433.729858088 moveto 93.4854177704 430.504359496 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.4854177704 430.504359496 moveto 95.4473202944 426.851265512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.4473202944 426.851265512 moveto 97.5171625868 422.578682792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.5171625868 422.578682792 moveto 99.5870048796 417.922030672 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.5870048796 417.922030672 moveto 101.656847172 412.925917428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.656847172 412.925917428 moveto 103.726689465 407.6328339 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.726689465 407.6328339 moveto 105.827466416 401.998259036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.827466416 401.998259036 moveto 107.928243368 396.138546028 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.928243368 396.138546028 moveto 110.029020319 390.090397988 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.029020319 390.090397988 moveto 112.12979727 383.88780954 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.12979727 383.88780954 moveto 114.587461368 376.477310364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.587461368 376.477310364 moveto 117.045125467 368.943716888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.045125467 368.943716888 moveto 119.502789566 361.327862996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.502789566 361.327862996 moveto 121.960453664 353.666106188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.960453664 353.666106188 moveto 124.564433784 345.5338143 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.564433784 345.5338143 moveto 127.1684139 337.419459764 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.1684139 337.419459764 moveto 129.77239402 329.352002768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.77239402 329.352002768 moveto 132.376374136 321.356304676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.376374136 321.356304676 moveto 135.067517224 313.190783708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.067517224 313.190783708 moveto 137.758660312 305.144045864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.758660312 305.144045864 moveto 140.4498034 297.232341888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.4498034 297.232341888 moveto 143.140946488 289.468940396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.140946488 289.468940396 moveto 146.051486408 281.251776276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.051486408 281.251776276 moveto 148.962026328 273.230892664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.962026328 273.230892664 moveto 151.872566244 265.414038156 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.872566244 265.414038156 moveto 154.783106164 257.80663884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 154.783106164 257.80663884 moveto 157.748572684 250.274630664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.748572684 250.274630664 moveto 160.714039204 242.96544694 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.714039204 242.96544694 moveto 163.679505724 235.879430264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.679505724 235.879430264 moveto 166.64497224 229.0156567 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.64497224 229.0156567 moveto 169.959235128 221.60508844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.959235128 221.60508844 moveto 173.273498012 214.465597364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 173.273498012 214.465597364 moveto 176.587760896 207.592123624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 176.587760896 207.592123624 moveto 179.90202378 200.978781176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 179.90202378 200.978781176 moveto 184.103293944 192.959105228 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.103293944 192.959105228 moveto 188.304564112 185.332610368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.304564112 185.332610368 moveto 192.505834276 178.084269772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.505834276 178.084269772 moveto 196.707104444 171.198638344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 196.707104444 171.198638344 moveto 200.98172604 164.548947128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.98172604 164.548947128 moveto 205.25634764 158.242243888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.25634764 158.242243888 moveto 209.530969236 152.262437884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.530969236 152.262437884 moveto 213.805590836 146.593806916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.805590836 146.593806916 moveto 218.71093306 140.452504164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.71093306 140.452504164 moveto 223.616275288 134.67873362 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.616275288 134.67873362 moveto 228.521617512 129.251352148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.521617512 129.251352148 moveto 233.42695974 124.150287308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.42695974 124.150287308 moveto 239.36018368 118.389353396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.36018368 118.389353396 moveto 245.293407624 113.046790008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.293407624 113.046790008 moveto 251.226631568 108.093664244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.226631568 108.093664244 moveto 257.159855508 103.503443188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.159855508 103.503443188 moveto 262.897813312 99.3867703719999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.897813312 99.3867703719999 moveto 268.635771112 95.567280308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.635771112 95.567280308 moveto 274.373728916 92.027486872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.373728916 92.027486872 moveto 280.11168672 88.752156124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.11168672 88.752156124 moveto 285.104555792 86.1072480879999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.104555792 86.1072480879999 moveto 290.097424868 83.645926116 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.097424868 83.645926116 moveto 295.090293944 81.362956254 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.090293944 81.362956254 moveto 300.083163016 79.254943485 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.083163016 79.254943485 moveto 304.558282612 77.513076986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.558282612 77.513076986 moveto 309.033402204 75.9113555619999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.033402204 75.9113555619999 moveto 313.508521796 74.452293774 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.508521796 74.452293774 moveto 317.983641388 73.140526565 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.983641388 73.140526565 moveto 322.137662068 72.060854182 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.137662068 72.060854182 moveto 326.291682744 71.12209867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.291682744 71.12209867 moveto 330.44570342 70.334769239 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.44570342 70.334769239 moveto 334.5997241 69.7123975979999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.5997241 69.7123975979999 moveto 338.611494424 69.28387807 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.611494424 69.28387807 moveto 342.623264748 69.044105271 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.623264748 69.044105271 moveto 346.635035072 69.016393055 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.635035072 69.016393055 moveto 350.646805396 69.229017906 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 350.646805396 69.229017906 moveto 354.763218796 69.732671025 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.763218796 69.732671025 moveto 358.879632196 70.56911059 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 358.879632196 70.56911059 moveto 362.996045596 71.790839696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 362.996045596 71.790839696 moveto 367.112458996 73.460017727 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 367.112458996 73.460017727 moveto 370.920997968 75.46595714 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.920997968 75.46595714 moveto 374.72953694 77.984042007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 374.72953694 77.984042007 moveto 378.538075912 81.0905499539999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 378.538075912 81.0905499539999 moveto 382.346614884 84.87154414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.346614884 84.87154414 moveto 385.401389236 88.45608236 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 385.401389236 88.45608236 moveto 388.456163584 92.589935348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.456163584 92.589935348 moveto 391.510937936 97.33038654 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 391.510937936 97.33038654 moveto 394.565712284 102.737447336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.565712284 102.737447336 moveto 397.366185624 108.33284252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.366185624 108.33284252 moveto 400.16665896 114.588334252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.16665896 114.588334252 moveto 402.9671323 121.550698896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 402.9671323 121.550698896 moveto 405.767605636 129.264098052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 405.767605636 129.264098052 moveto 408.834499944 138.61984948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 408.834499944 138.61984948 moveto 411.901394252 148.967023132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.901394252 148.967023132 moveto 414.968288564 160.334755516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 414.968288564 160.334755516 moveto 418.035182872 172.73411544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.035182872 172.73411544 moveto 420.94068308 185.422792108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.94068308 185.422792108 moveto 423.846183292 198.99556646 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.846183292 198.99556646 moveto 426.7516835 213.395347384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 426.7516835 213.395347384 moveto 429.657183712 228.537727488 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.657183712 228.537727488 moveto 432.128817644 241.919805256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 432.128817644 241.919805256 moveto 434.60045158 255.671806652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.60045158 255.671806652 moveto 437.072085516 269.693229784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.072085516 269.693229784 moveto 439.543719452 283.870494144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.543719452 283.870494144 moveto 442.20954794 299.192589092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 442.20954794 299.192589092 moveto 444.875376428 314.38299922 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 444.875376428 314.38299922 moveto 447.541204916 329.267819444 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 447.541204916 329.267819444 moveto 450.207033404 343.671901948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 450.207033404 343.671901948 moveto 452.788032532 356.998124856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.788032532 356.998124856 moveto 455.369031664 369.5667963 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 455.369031664 369.5667963 moveto 457.950030796 381.245054904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.950030796 381.245054904 moveto 460.531029928 391.917101512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.531029928 391.917101512 moveto 462.9665082 400.978094952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.9665082 400.978094952 moveto 465.401986468 408.995114144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.401986468 408.995114144 moveto 467.837464736 415.924039996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 467.837464736 415.924039996 moveto 470.272943008 421.739055456 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.272943008 421.739055456 moveto 472.704707256 426.425805124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.704707256 426.425805124 moveto 475.136471504 430.002559252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.136471504 430.002559252 moveto 477.568235752 432.492548132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.568235752 432.492548132 moveto 480 433.931885808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 441.788596304 moveto 82.0733240395 441.934735972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 82.0733240395 441.934735972 moveto 84.1466480792 441.671301432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 84.1466480792 441.671301432 moveto 86.2199721184 441.015780132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 86.2199721184 441.015780132 moveto 88.293296158 439.986560092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 88.293296158 439.986560092 moveto 90.3495621748 438.615502824 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 90.3495621748 438.615502824 moveto 92.4058281916 436.914705856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 92.4058281916 436.914705856 moveto 94.4620942084 434.903493316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 94.4620942084 434.903493316 moveto 96.5183602252 432.601291424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 96.5183602252 432.601291424 moveto 98.6394278372 429.942174212 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 98.6394278372 429.942174212 moveto 100.760495449 427.01513544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 100.760495449 427.01513544 moveto 102.881563061 423.840893192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 102.881563061 423.840893192 moveto 105.002630673 420.439707272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 105.002630673 420.439707272 moveto 107.138780435 416.80493308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 107.138780435 416.80493308 moveto 109.274930196 412.979440936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 109.274930196 412.979440936 moveto 111.411079958 408.981978656 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 111.411079958 408.981978656 moveto 113.54722972 404.830520216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 113.54722972 404.830520216 moveto 116.191800666 399.503233452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 116.191800666 399.503233452 moveto 118.836371613 393.996949616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 118.836371613 393.996949616 moveto 121.48094256 388.340437772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 121.48094256 388.340437772 moveto 124.125513508 382.56045476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 124.125513508 382.56045476 moveto 126.67329186 376.898393844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 126.67329186 376.898393844 moveto 129.221070212 371.165143884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 129.221070212 371.165143884 moveto 131.768848564 365.3794928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 131.768848564 365.3794928 moveto 134.316626916 359.558654244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 134.316626916 359.558654244 moveto 137.042279168 353.3102327 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 137.042279168 353.3102327 moveto 139.76793142 347.05689504 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 139.76793142 347.05689504 moveto 142.493583672 340.814285008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 142.493583672 340.814285008 moveto 145.219235924 334.596388004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 145.219235924 334.596388004 moveto 148.151901908 327.94804262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 148.151901908 327.94804262 moveto 151.084567892 321.356307308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 151.084567892 321.356307308 moveto 154.017233872 314.833060452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 154.017233872 314.833060452 moveto 156.949899856 308.38856934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 156.949899856 308.38856934 moveto 159.680059608 302.467608432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 159.680059608 302.467608432 moveto 162.410219356 296.628593408 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 162.410219356 296.628593408 moveto 165.140379108 290.876686508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 165.140379108 290.876686508 moveto 167.870538856 285.216233948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 167.870538856 285.216233948 moveto 170.761817856 279.32543884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 170.761817856 279.32543884 moveto 173.65309686 273.544727056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 173.65309686 273.544727056 moveto 176.54437586 267.876848984 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 176.54437586 267.876848984 moveto 179.43565486 262.323904728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 179.43565486 262.323904728 moveto 182.94932372 255.732475524 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 182.94932372 255.732475524 moveto 186.46299258 249.314760956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 186.46299258 249.314760956 moveto 189.97666144 243.071602412 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 189.97666144 243.071602412 moveto 193.4903303 237.003067816 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 193.4903303 237.003067816 moveto 197.119692552 230.917437588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 197.119692552 230.917437588 moveto 200.749054808 225.016273052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 200.749054808 225.016273052 moveto 204.37841706 219.297880588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 204.37841706 219.297880588 moveto 208.007779316 213.76019146 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 208.007779316 213.76019146 moveto 211.796910164 208.168981272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 211.796910164 208.168981272 moveto 215.586041012 202.769242228 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 215.586041012 202.769242228 moveto 219.37517186 197.557901544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 219.37517186 197.557901544 moveto 223.164302708 192.53180058 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 223.164302708 192.53180058 moveto 227.348159312 187.193481072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 227.348159312 187.193481072 moveto 231.532015912 182.072901736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 231.532015912 182.072901736 moveto 235.715872512 177.165987152 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 235.715872512 177.165987152 moveto 239.899729112 172.468882284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 239.899729112 172.468882284 moveto 244.983121268 167.039103676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 244.983121268 167.039103676 moveto 250.066513424 161.908149936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 250.066513424 161.908149936 moveto 255.14990558 157.071346388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 255.14990558 157.071346388 moveto 260.23329774 152.525169432 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 260.23329774 152.525169432 moveto 265.406215544 148.19501596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 265.406215544 148.19501596 moveto 270.579133352 144.162861 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 270.579133352 144.162861 moveto 275.752051156 140.429917904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 275.752051156 140.429917904 moveto 280.92496896 136.999535148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 280.92496896 136.999535148 moveto 285.664698112 134.126886264 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 285.664698112 134.126886264 moveto 290.404427264 131.519447508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 290.404427264 131.519447508 moveto 295.144156416 129.18578464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 295.144156416 129.18578464 moveto 299.883885564 127.136841416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 299.883885564 127.136841416 moveto 304.427471148 125.452503456 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 304.427471148 125.452503456 moveto 308.971056728 124.05669384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 308.971056728 124.05669384 moveto 313.514642308 122.966560636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 313.514642308 122.966560636 moveto 318.058227892 122.202176324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 318.058227892 122.202176324 moveto 322.566441568 121.788571972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 322.566441568 121.788571972 moveto 327.074655248 121.744478632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 327.074655248 121.744478632 moveto 331.582868924 122.099334796 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 331.582868924 122.099334796 moveto 336.091082604 122.886178944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 336.091082604 122.886178944 moveto 340.06977688 123.968671572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 340.06977688 123.968671572 moveto 344.048471156 125.443781588 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 344.048471156 125.443781588 moveto 348.027165436 127.341244692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 348.027165436 127.341244692 moveto 352.005859712 129.692760492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 352.005859712 129.692760492 moveto 355.67639716 132.29365868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 355.67639716 132.29365868 moveto 359.346934604 135.336687484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 359.346934604 135.336687484 moveto 363.017472048 138.84966066 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 363.017472048 138.84966066 moveto 366.688009492 142.860499532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 366.688009492 142.860499532 moveto 370.236386048 147.236986968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 370.236386048 147.236986968 moveto 373.7847626 152.128247912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 373.7847626 152.128247912 moveto 377.333139156 157.556245864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 377.333139156 157.556245864 moveto 380.881515708 163.540306376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 380.881515708 163.540306376 moveto 384.355423924 169.952691244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 384.355423924 169.952691244 moveto 387.829332144 176.923743932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 387.829332144 176.923743932 moveto 391.30324036 184.458615612 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 391.30324036 184.458615612 moveto 394.77714858 192.556067324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 394.77714858 192.556067324 moveto 397.959255456 200.459833396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 397.959255456 200.459833396 moveto 401.141362336 208.81562014 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 401.141362336 208.81562014 moveto 404.323469212 217.603906496 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 404.323469212 217.603906496 moveto 407.505576088 226.798050132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 407.505576088 226.798050132 moveto 410.53016352 235.882270052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 410.53016352 235.882270052 moveto 413.554750948 245.26657728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 413.554750948 245.26657728 moveto 416.579338376 254.908842996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 416.579338376 254.908842996 moveto 419.603925804 264.760776536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 419.603925804 264.760776536 moveto 422.567431952 274.5649832 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 422.567431952 274.5649832 moveto 425.530938104 284.462632668 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 425.530938104 284.462632668 moveto 428.494444252 294.393700708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 428.494444252 294.393700708 moveto 431.4579504 304.294808348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 431.4579504 304.294808348 moveto 434.850082204 315.506432852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 434.850082204 315.506432852 moveto 438.242214004 326.491796224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 438.242214004 326.491796224 moveto 441.634345808 337.150503552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 441.634345808 337.150503552 moveto 445.026477612 347.384727208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 445.026477612 347.384727208 moveto 448.040560788 356.046847244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 448.040560788 356.046847244 moveto 451.05464396 364.239687532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 451.05464396 364.239687532 moveto 454.068727136 371.908342956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 454.068727136 371.908342956 moveto 457.082810312 379.004433032 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 457.082810312 379.004433032 moveto 459.950219556 385.186079416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 459.950219556 385.186079416 moveto 462.8176288 390.783362608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 462.8176288 390.783362608 moveto 465.685038048 395.774050864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 465.685038048 395.774050864 moveto 468.552447292 400.142591076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 468.552447292 400.142591076 moveto 471.414335468 403.873442664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 471.414335468 403.873442664 moveto 474.276223648 406.973061348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 474.276223648 406.973061348 moveto 477.138111824 409.444800404 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 477.138111824 409.444800404 moveto 480 411.29749008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 1.000 setrgbcolor AdjustColor stroke grestore gsave 80 440.728980024 moveto 82.1065607751 440.792484268 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.1065607751 440.792484268 moveto 84.21312155 440.627499216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.21312155 440.627499216 moveto 86.3196823252 440.241120472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.3196823252 440.241120472 moveto 88.4262431004 439.640785928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.4262431004 439.640785928 moveto 90.8032144584 438.716168012 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.8032144584 438.716168012 moveto 93.1801858164 437.540477436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.1801858164 437.540477436 moveto 95.5571571744 436.125507852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.5571571744 436.125507852 moveto 97.9341285324 434.483291572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.9341285324 434.483291572 moveto 100.233886824 432.68961546 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.233886824 432.68961546 moveto 102.533645116 430.705778168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.533645116 430.705778168 moveto 104.833403407 428.542947252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.833403407 428.542947252 moveto 107.133161699 426.212273412 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.133161699 426.212273412 moveto 109.268409368 423.907753664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.268409368 423.907753664 moveto 111.403657037 421.476904852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.403657037 421.476904852 moveto 113.538904706 418.928419252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.538904706 418.928419252 moveto 115.674152375 416.270861956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.674152375 416.270861956 moveto 118.066380463 413.174304224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.066380463 413.174304224 moveto 120.458608552 409.96298566 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.458608552 409.96298566 moveto 122.85083664 406.648190992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.85083664 406.648190992 moveto 125.243064728 403.240881136 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.243064728 403.240881136 moveto 127.6372268 399.748819444 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.6372268 399.748819444 moveto 130.031388872 396.184994344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.031388872 396.184994344 moveto 132.42555094 392.559287096 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 132.42555094 392.559287096 moveto 134.819713012 388.881177116 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.819713012 388.881177116 moveto 137.126830284 385.295690592 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.126830284 385.295690592 moveto 139.433947556 381.677704952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.433947556 381.677704952 moveto 141.741064832 378.034590924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.741064832 378.034590924 moveto 144.048182104 374.37334596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 144.048182104 374.37334596 moveto 146.47988946 370.50205084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.47988946 370.50205084 moveto 148.911596816 366.625270804 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.911596816 366.625270804 moveto 151.343304172 362.749850632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.343304172 362.749850632 moveto 153.775011524 358.882181024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.775011524 358.882181024 moveto 156.389925516 354.738555616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.389925516 354.738555616 moveto 159.004839504 350.61758356 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 159.004839504 350.61758356 moveto 161.619753492 346.525521776 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.619753492 346.525521776 moveto 164.23466748 342.468076196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.23466748 342.468076196 moveto 166.840265364 338.4646581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.840265364 338.4646581 moveto 169.445863252 334.505364148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.445863252 334.505364148 moveto 172.051461136 330.594335768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 172.051461136 330.594335768 moveto 174.657059024 326.735262328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 174.657059024 326.735262328 moveto 177.425873692 322.6950338 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 177.425873692 322.6950338 moveto 180.194688356 318.720570456 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.194688356 318.720570456 moveto 182.963503024 314.81482158 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.963503024 314.81482158 moveto 185.732317692 310.980300332 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.732317692 310.980300332 moveto 189.06398992 306.4636604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.06398992 306.4636604 moveto 192.395662152 302.056173448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.395662152 302.056173448 moveto 195.727334384 297.76015804 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.727334384 297.76015804 moveto 199.059006612 293.577344068 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.059006612 293.577344068 moveto 202.238537856 289.692225324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.238537856 289.692225324 moveto 205.418069096 285.912006704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.418069096 285.912006704 moveto 208.597600336 282.23708116 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.597600336 282.23708116 moveto 211.777131576 278.667592544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.777131576 278.667592544 moveto 215.13860884 275.008433244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.13860884 275.008433244 moveto 218.500086108 271.466794084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.500086108 271.466794084 moveto 221.861563376 268.042274932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.861563376 268.042274932 moveto 225.22304064 264.734378572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.22304064 264.734378572 moveto 229.012571892 261.144400628 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.012571892 261.144400628 moveto 232.80210314 257.701110472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.80210314 257.701110472 moveto 236.591634388 254.403715792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.591634388 254.403715792 moveto 240.38116564 251.251496776 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.38116564 251.251496776 moveto 244.805274448 247.754291288 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.805274448 247.754291288 moveto 249.229383256 244.453410912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.229383256 244.453410912 moveto 253.653492064 241.348462896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.653492064 241.348462896 moveto 258.077600872 238.439413272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.077600872 238.439413272 moveto 262.73518646 235.588911644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.73518646 235.588911644 moveto 267.392772044 232.956814576 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.392772044 232.956814576 moveto 272.050357628 230.544513352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.050357628 230.544513352 moveto 276.707943212 228.353893984 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.707943212 228.353893984 moveto 281.069111464 226.505753736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.069111464 226.505753736 moveto 285.430279716 224.856361736 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.430279716 224.856361736 moveto 289.791447968 223.408359316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.791447968 223.408359316 moveto 294.15261622 222.164691336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.15261622 222.164691336 moveto 298.315232472 221.17119048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.315232472 221.17119048 moveto 302.477848728 220.369772008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.477848728 220.369772008 moveto 306.64046498 219.763592032 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.64046498 219.763592032 moveto 310.803081232 219.355927024 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.803081232 219.355927024 moveto 314.79389924 219.15458966 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.79389924 219.15458966 moveto 318.784717248 219.14178876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.784717248 219.14178876 moveto 322.775535256 219.3204852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.775535256 219.3204852 moveto 326.766353264 219.693571124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.766353264 219.693571124 moveto 330.72252414 220.258014328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.72252414 220.258014328 moveto 334.678695016 221.018743448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.678695016 221.018743448 moveto 338.634865892 221.978050836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.634865892 221.978050836 moveto 342.591036768 223.13793036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.591036768 223.13793036 moveto 347.030325984 224.68026392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.030325984 224.68026392 moveto 351.469615204 226.478829692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.469615204 226.478829692 moveto 355.90890442 228.534420512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 355.90890442 228.534420512 moveto 360.34819364 230.84684782 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.34819364 230.84684782 moveto 364.469125876 233.222190808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 364.469125876 233.222190808 moveto 368.590058112 235.81571262 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.590058112 235.81571262 moveto 372.710990348 238.624325408 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 372.710990348 238.624325408 moveto 376.831922584 241.643788524 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 376.831922584 241.643788524 moveto 380.6624548 244.634778524 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 380.6624548 244.634778524 moveto 384.492987016 247.797789164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.492987016 247.797789164 moveto 388.323519232 251.126329668 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.323519232 251.126329668 moveto 392.154051448 254.612813584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.154051448 254.612813584 moveto 395.698963956 257.972496192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 395.698963956 257.972496192 moveto 399.24387646 261.452205372 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.24387646 261.452205372 moveto 402.788788968 265.043298912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 402.788788968 265.043298912 moveto 406.333701472 268.73628516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.333701472 268.73628516 moveto 409.982505956 272.63302002 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.982505956 272.63302002 moveto 413.631310444 276.614595584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 413.631310444 276.614595584 moveto 417.280114928 280.667982492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 417.280114928 280.667982492 moveto 420.928919412 284.779339772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.928919412 284.779339772 moveto 424.692303496 289.065083836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.692303496 289.065083836 moveto 428.45568758 293.38023354 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 428.45568758 293.38023354 moveto 432.219071664 297.707428276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 432.219071664 297.707428276 moveto 435.982455744 302.0288083 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.982455744 302.0288083 moveto 439.97831082 306.59039766 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.97831082 306.59039766 moveto 443.974165892 311.102811988 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.974165892 311.102811988 moveto 447.970020964 315.543959028 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 447.970020964 315.543959028 moveto 451.965876036 319.891933724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 451.965876036 319.891933724 moveto 455.47125714 323.612494248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 455.47125714 323.612494248 moveto 458.976638248 327.230675988 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.976638248 327.230675988 moveto 462.482019352 330.732869344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.482019352 330.732869344 moveto 465.98740046 334.106074372 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.98740046 334.106074372 moveto 469.490550344 337.335987844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.490550344 337.335987844 moveto 472.993700228 340.41334058 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.993700228 340.41334058 moveto 476.496850116 343.327573864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.496850116 343.327573864 moveto 480 346.069098244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 64 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 362 [ (8.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 480 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 282 moveto 64 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 282 [ (6.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 282 moveto 480 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 202 moveto 64 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 202 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 202 moveto 480 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 122 moveto 64 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 122 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 122 moveto 480 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 3) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 't') ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/mtn1.ps0000640000175000017500000066620313570013207013672 0ustar sksk%!PS-Adobe-2.0 EPSF-2.0 %%Creator: GSS*CGI PostScript Driver %%Title: C:\LOCBIF\LBLC\CLEARW\FG1000.EPS %%CreationDate: 29 March 1995 16:22 %%DocumentFonts: Courier %%BoundingBox: 103 242 449 565 %%EndComments /bd{bind def}bind def /cp{closepath}bd /f{eofill}bd /gr{grestore}bd /gs{gsave}bd /lp{setdash}bd /lw{setlinewidth}bd /np{newpath}bd /s{stroke}bd /sp{strokepath}bd /S{setdash stroke}bd /c{clip}bd /k{setrgbcolor}bd /sc{1000 div}bd /t{show np}bd /rt{10 div rotate}bd /l{p lineto}bd /m{p moveto}bd /p{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform }bd /a{10 div exch 10 div exch arc }bd /an{10 div exch 10 div exch arcn }bd /b{m l l l cp}bd /el{ /savematrix matrix currentmatrix def translate scale 0 0 1 5 -2 roll a savematrix setmatrix }bd /eln{ /savematrix matrix currentmatrix def translate scale 0 0 1 5 -2 roll an savematrix setmatrix }bd /r{clear initstate restore /initstate save def }bd /F{findfont exch scalefont setfont}bd /R{ findfont begin currentdict dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /FontName exch def dup length 0 ne{ /Encoding Encoding 256 array copy def 0 exch{ dup type/nametype eq{ Encoding 2 index 2 index put pop 1 add }{ exch pop }ifelse }forall }if pop currentdict dup end end /FontName get exch definefont pop }bd /V437[0/macron/acute/tilde/grave/circumflex/dotlessi/dieresis/cedilla 127/question/Ccedilla/udieresis/eacute/acircumflex /adieresis/agrave/aring/ccedilla/ecircumflex/edieresis/egrave /idieresis/icircumflex/igrave/Adieresis/Aring/Eacute/ae/AE /ocircumflex/odieresis/ograve/ucircumflex/ugrave/ydieresis/Odieresis /Udieresis/cent/sterling/yen/question/florin/aacute/iacute/oacute /uacute/ntilde/Ntilde/ordfeminine/ordmasculine/questiondown/question /question/question/question/exclamdown/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/ring/bullet/periodcentered/question/question/question /question/question ]def /V850[155/oslash 157/Oslash 175/question 181/Aacute/Acircumflex/Agrave 190/cent/yen 198/atilde/Atilde 207/currency 210/Ecircumflex /Edieresis/Egrave/dotlessi/Iacute/Icircumflex/Idieresis 221/bar /Igrave 224/Oacute 226/Ocircumflex/Ograve/otilde/Otilde 233/Uacute /Ucircumflex/Ugrave 238/macron/acute/tilde 244/paragraph/section 247/cedilla 249/dieresis ]def /V860[131/atilde 134/Aacute 137/Ecircumflex 139/Iacute/Oacute 142/Atilde/Acircumflex 145/Agrave/Egrave 148/otilde 150/Uacute 152/Igrave/Otilde 155/cent 157/Ugrave 159/Oacute 169/Ograve 175/question ]def /V863[132/Acircumflex 134/paragraph 141/question/Agrave/section 145/Egrave/Ecircumflex 148/Edieresis/Idieresis 152/currency /Ocircumflex 155/cent 157/Ugrave/Ucircumflex 160/bar/acute 164/dieresis/cedilla/question/macron/Icircumflex 173/question 175/question ]def /V865[155/oslash 157/Oslash 175/currency]def /init{ statusdict begin /waittimeout 0 def /jobtimeout 0 def end /y_border exch def /x_border exch def /NewMat matrix currentmatrix def NewMat 0 get 0 eq{ /x_scale NewMat 2 get def NewMat 2 x_scale 72 mul round 300 div put /y_scale NewMat 1 get def NewMat 1 y_scale 72 mul round 300 div put } { /x_scale NewMat 0 get def NewMat 0 x_scale 72 mul round 300 div put /y_scale NewMat 3 get def NewMat 3 y_scale 72 mul round 300 div put }ifelse /ty NewMat 5 get def NewMat 5 y_border y_scale mul ty add put /tx NewMat 4 get def NewMat 4 x_border x_scale mul tx add put NewMat setmatrix 1 eq{ 0 translate 90 rotate }{pop}ifelse []0 lp 1 lw 0 0 0 k 2 setlinejoin 0 setlinecap /initstate save def }bd /P{ /Y exch def /X exch def /Y2 exch def /X2 exch def /Y1 exch def /X1 exch def }bd /B{4 bt}bd /bt{X1 Y1 moveto X2 Y1 lineto /Y1 exch Y1 add def }bd /lr{X1 Y1 moveto X1 Y2 lineto /X1 exch X1 add def }bd /P1{ Y 2 mul{ B[8]0 S B[8]12 S B[8]8 S B[8]4 S }repeat }bd /P2{ Y 2 mul{ B[4 12]0 S B[4 12]12 S B[4 12]8 S B[4 12]4 S }repeat }bd /P3{ Y{ B[4 28]0 S B[4 28]28 S B[4 28]24 S B[4 28]20 S B[4 28]16 S B[4 28]12 S B[4 28]8 S B[4 28]4 S }repeat }bd /P4{ Y 4 mul{ B[4]0 S B[4]4 S }repeat }bd /P5{ Y 2 mul{ B[4 12]0 S B[4]4 S B[4 12]8 S B[4]4 S }repeat }bd /P6{ Y{ B[4 28]0 S B[4 4 4 20]4 S B[4 12]8 S B[4 20 4 4]12 S B[4 28]16 S B[4 20 4 4]12 S B[4 12]8 S B[4 4 4 20]4 S }repeat }bd /P7{ X 2 mul{ 4 lr[4]4 S 4 lr[]0 S 4 lr[4]0 S 4 lr[]0 S }repeat }bd /P8{ X 4 mul{ 8 lr }repeat []0 S }bd /P9{ Y 2 mul{ B[12 4]12 S B[12 4]8 S B[12 4]4 S B[12 4]0 S }repeat }bd /P10{ X 2 mul{ 16 lr }repeat []0 S }bd /P11{ Y{ B B B[4 28]16 S B[]0 S B B B[4 28]0 S B[]0 S }repeat }bd /P12{ Y{ 32 bt }repeat [4 28]0 S }bd /P13{ Y{ B B B[4 28]4 S B[4 20 4 4]0 S B[4 12]12 S B[12 8 4 8]24 S B[4 12]12 S B[4 20 4 4]0 S }repeat }bd /P14{ Y{ B[4 4 12 12]4 S B[4 12]8 S B[12 12 4 4]12 S B[20 12]16 S B[12 4 4 12]12 S B[4 12]8 S B[4 12 12 4]12 S B[20 12]0 S }repeat }bd /P15{ Y{ B B[4 28]12 S B[4 20 4 4]8 S B[4]4 S B B[4 28]28 S B[4 4 4 20]0 S B[4]4 S }repeat }bd /P16{ Y{ B[4 20 4 4]16 S B[4 12]12 S B[4 8 4 8 4 4]0 S B[4 8 4 4 4 8]4 S B[4 8 4 4 4 8]0 S B[4 4 4 8 4 8]4 S B[4 12]8 S B[4 20 4 4]12 S }repeat }bd /P17{ X{ 16 lr[4 12]4 S 16 lr[4 12]12 S }repeat }bd /P18{ /Y1 Y1 4 add def Y 2 mul{ 8 bt[4 12]8 S 8 bt[4 12]0 S }repeat }bd /P19{ X 2 mul{ 8 lr[4]4 S 8 lr[4]0 S }repeat }bd /P20{ /Y1 Y1 4 add def Y 4 mul{ 8 bt }repeat []0 S }bd /P21{ /Y1 Y1 12 add def Y 2 mul{ 16 bt }repeat []0 S }bd /P22{ Y{ B B B B B B B[4 28]0 S B[]0 S }repeat }bd /P23{ Y{ B[4 28]12 S B[4 28]8 S B[4 28]4 S B[4 28]0 S B[12 20]4 S B[4 12]8 S B[12 20]20 S B[4 28]16 S }repeat }bd /P24{ /Y1 Y1 8 add def Y{ B[4 20 4 4]8 S 12 bt[4 28]12 S B[4 4 4 20]0 S 12 bt[4 28]28 S }repeat }bd /P25{ Y{ B B[4 28]4 S B[4 28]8 S B[8 24]16 S B[8 24]24 S B[4 16 4 8]16 S B[4 16 4 8]0 S B[8 24]8 S }repeat }bd /P26{ Y{ B[20 12]8 S B[4 20 4 4]12 S B B[4 28]16 S B[20 12]24 S B[4 4 4 20]4 S B B[4 28]0 S }repeat }bd /P27{ Y{ B[4 28]16 S B[4 28]12 S B[4 28]8 S B[]0 S B[4]0 S B[4 12 4 4 4 4]12 S B[4 28]24 S B[4 28]20 S }repeat }bd /P28{ Y{ B B[20 12]0 S B[4 8 8 12]0 S B[12 4]12 S B B[20 12]16 S B[8 12 4 8]4 S B[12 4]12 S }repeat }bd /P29{ Y{ B[4 28]16 S B[4 20 4 4]12 S B[4 12 4 4 4 4]8 S B[4]4 S B[4 12 4 4 4 4]8 S B[4 20 4 4]12 S 8 bt[4 28]16 S }repeat }bd /P30{ Y{ 16 bt[4 28]0 S 16 bt[4 28]16 S }repeat }bd /P31{ Y{ B[12 20]4 S B[12 20]0 S B[12 20]28 S B[12 20]24 S B[12 20]20 S B[12 20]16 S B[12 20]12 S B[12 20]8 S }repeat }bd /P32{ X{ 16 lr[12 20]16 S 16 lr[12 20]0 S }repeat }bd /P33{ X{ 4 lr 4 lr 4 lr[4 28]16 S 4 lr[]0 S 4 lr 4 lr 4 lr[4 28]0 S 4 lr[]0 S }repeat }bd %%EndProlog %%BeginSetup 2327 0 18 18 init %%EndSetup -1 3357 2328 3357 2328 -1 -1 -1 b c np 2 lw []0 lp 0 sc 0 sc 0 sc k gs 578 2263 584 2263 584 1094 578 1094 b c np 581 1097 m 581 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1100 602 1100 602 1094 578 1094 b c np 581 1097 m 599 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1333 602 1333 602 1327 578 1327 b c np 581 1330 m 599 1330 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1565 602 1565 602 1559 578 1559 b c np 581 1562 m 599 1562 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1798 602 1798 602 1792 578 1792 b c np 581 1795 m 599 1795 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2030 602 2030 602 2024 578 2024 b c np 581 2027 m 599 2027 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2263 602 2263 602 2257 578 2257 b c np 581 2260 m 599 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1119 545 1119 545 1079 516 1079 b c np 528 1116 m 524 1115 l 520 1110 l 519 1102 l 519 1097 l 520 1089 l 524 1084 l 528 1082 l 532 1082 l 537 1084 l 540 1089 l 542 1097 l 542 1102 l 540 1110 l 537 1115 l 532 1116 l 528 1116 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1352 545 1352 545 1312 516 1312 b c np 522 1349 m 540 1349 l 530 1336 l 535 1336 l 538 1335 l 540 1333 l 542 1328 l 542 1325 l 540 1320 l 537 1316 l 532 1315 l 527 1315 l 522 1316 l 520 1318 l 519 1321 l 0 setlinejoin 4 setmiterlimit s gr gs 517 1585 545 1585 545 1544 517 1544 b c np 540 1577 m 538 1580 l 533 1582 l 530 1582 l 525 1580 l 522 1575 l 520 1567 l 520 1559 l 522 1552 l 525 1549 l 530 1547 l 532 1547 l 537 1549 l 540 1552 l 542 1557 l 542 1559 l 540 1564 l 537 1567 l 532 1569 l 530 1569 l 525 1567 l 522 1564 l 520 1559 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1817 543 1817 543 1777 516 1777 b c np 540 1803 m 538 1798 l 535 1795 l 530 1793 l 528 1793 l 524 1795 l 520 1798 l 519 1803 l 519 1805 l 520 1809 l 524 1813 l 528 1814 l 530 1814 l 535 1813 l 538 1809 l 540 1803 l 540 1795 l 538 1787 l 535 1782 l 530 1780 l 527 1780 l 522 1782 l 520 1785 l 0 setlinejoin 4 setmiterlimit s gr gs 486 2050 500 2050 500 2010 486 2010 b c np 489 2040 m 492 2042 l 497 2047 l 497 2013 l 0 setlinejoin 4 setmiterlimit s gr gs 516 2050 545 2050 545 2010 516 2010 b c np 520 2039 m 520 2040 l 522 2044 l 524 2045 l 527 2047 l 533 2047 l 537 2045 l 538 2044 l 540 2040 l 540 2037 l 538 2034 l 535 2029 l 519 2013 l 542 2013 l 0 setlinejoin 4 setmiterlimit s gr gs 486 2282 500 2282 500 2242 486 2242 b c np 489 2273 m 492 2275 l 497 2279 l 497 2245 l 0 setlinejoin 4 setmiterlimit s gr gs 516 2282 545 2282 545 2242 516 2242 b c np 538 2279 m 522 2279 l 520 2265 l 522 2266 l 527 2268 l 532 2268 l 537 2266 l 540 2263 l 542 2258 l 542 2255 l 540 2250 l 537 2247 l 532 2245 l 527 2245 l 522 2247 l 520 2248 l 519 2252 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 2263 1747 2263 1747 1094 1741 1094 b c np 1744 1097 m 1744 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 1100 1747 1100 1747 1094 1723 1094 b c np 1744 1097 m 1726 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 1333 1747 1333 1747 1327 1723 1327 b c np 1744 1330 m 1726 1330 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 1565 1747 1565 1747 1559 1723 1559 b c np 1744 1562 m 1726 1562 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 1798 1747 1798 1747 1792 1723 1792 b c np 1744 1795 m 1726 1795 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 2030 1747 2030 1747 2024 1723 2024 b c np 1744 2027 m 1726 2027 l 0 setlinejoin 4 setmiterlimit s gr gs 1723 2263 1747 2263 1747 2257 1723 2257 b c np 1744 2260 m 1726 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1100 1747 1100 1747 1094 578 1094 b c np 581 1097 m 1744 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1117 584 1117 584 1094 578 1094 b c np 581 1097 m 581 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 810 1117 816 1117 816 1094 810 1094 b c np 813 1097 m 813 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 1043 1117 1049 1117 1049 1094 1043 1094 b c np 1046 1097 m 1046 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 1275 1117 1281 1117 1281 1094 1275 1094 b c np 1278 1097 m 1278 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 1508 1117 1514 1117 1514 1094 1508 1094 b c np 1511 1097 m 1511 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 1117 1747 1117 1747 1094 1741 1094 b c np 1744 1097 m 1744 1114 l 0 setlinejoin 4 setmiterlimit s gr gs 519 1064 548 1064 548 1024 519 1024 b c np 532 1061 m 527 1060 l 524 1055 l 522 1047 l 522 1042 l 524 1034 l 527 1029 l 532 1027 l 535 1027 l 540 1029 l 543 1034 l 545 1042 l 545 1047 l 543 1055 l 540 1060 l 535 1061 l 532 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 556 1033 565 1033 565 1024 556 1024 b c np 560 1030 m 559 1029 l 560 1027 l 562 1029 l 560 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 573 1064 602 1064 602 1024 573 1024 b c np 585 1061 m 581 1060 l 577 1055 l 576 1047 l 576 1042 l 577 1034 l 581 1029 l 585 1027 l 589 1027 l 594 1029 l 597 1034 l 599 1042 l 599 1047 l 597 1055 l 594 1060 l 589 1061 l 585 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 608 1064 637 1064 637 1024 608 1024 b c np 620 1061 m 616 1060 l 612 1055 l 611 1047 l 611 1042 l 612 1034 l 616 1029 l 620 1027 l 624 1027 l 629 1029 l 632 1034 l 634 1042 l 634 1047 l 632 1055 l 629 1060 l 624 1061 l 620 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 751 1064 780 1064 780 1024 751 1024 b c np 764 1061 m 759 1060 l 756 1055 l 754 1047 l 754 1042 l 756 1034 l 759 1029 l 764 1027 l 767 1027 l 772 1029 l 776 1034 l 777 1042 l 777 1047 l 776 1055 l 772 1060 l 767 1061 l 764 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 788 1033 797 1033 797 1024 788 1024 b c np 793 1030 m 791 1029 l 793 1027 l 794 1029 l 793 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 805 1064 834 1064 834 1024 805 1024 b c np 818 1061 m 813 1060 l 810 1055 l 808 1047 l 808 1042 l 810 1034 l 813 1029 l 818 1027 l 821 1027 l 826 1029 l 829 1034 l 831 1042 l 831 1047 l 829 1055 l 826 1060 l 821 1061 l 818 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 847 1064 869 1064 869 1024 847 1024 b c np 866 1061 m 850 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 840 1064 869 1064 869 1058 840 1058 b c np 843 1061 m 866 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 984 1064 1013 1064 1013 1024 984 1024 b c np 997 1061 m 992 1060 l 989 1055 l 987 1047 l 987 1042 l 989 1034 l 992 1029 l 997 1027 l 1000 1027 l 1005 1029 l 1008 1034 l 1010 1042 l 1010 1047 l 1008 1055 l 1005 1060 l 1000 1061 l 997 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1021 1033 1030 1033 1030 1024 1021 1024 b c np 1025 1030 m 1024 1029 l 1025 1027 l 1027 1029 l 1025 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1043 1064 1057 1064 1057 1024 1043 1024 b c np 1046 1055 m 1049 1056 l 1054 1061 l 1054 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1073 1064 1103 1064 1103 1035 1073 1035 b c np 1092 1061 m 1076 1038 l 1100 1038 l 0 setlinejoin 4 setmiterlimit s gr gs 1089 1064 1095 1064 1095 1024 1089 1024 b c np 1092 1061 m 1092 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1216 1064 1245 1064 1245 1024 1216 1024 b c np 1229 1061 m 1224 1060 l 1221 1055 l 1219 1047 l 1219 1042 l 1221 1034 l 1224 1029 l 1229 1027 l 1233 1027 l 1237 1029 l 1241 1034 l 1242 1042 l 1242 1047 l 1241 1055 l 1237 1060 l 1233 1061 l 1229 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1253 1033 1262 1033 1262 1024 1253 1024 b c np 1258 1030 m 1256 1029 l 1258 1027 l 1259 1029 l 1258 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1270 1064 1299 1064 1299 1024 1270 1024 b c np 1275 1053 m 1275 1055 l 1276 1058 l 1278 1060 l 1281 1061 l 1288 1061 l 1291 1060 l 1293 1058 l 1294 1055 l 1294 1051 l 1293 1048 l 1290 1043 l 1273 1027 l 1296 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1310 1064 1324 1064 1324 1024 1310 1024 b c np 1313 1055 m 1316 1056 l 1321 1061 l 1321 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1449 1064 1478 1064 1478 1024 1449 1024 b c np 1462 1061 m 1457 1060 l 1454 1055 l 1452 1047 l 1452 1042 l 1454 1034 l 1457 1029 l 1462 1027 l 1465 1027 l 1470 1029 l 1474 1034 l 1475 1042 l 1475 1047 l 1474 1055 l 1470 1060 l 1465 1061 l 1462 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1486 1033 1495 1033 1495 1024 1486 1024 b c np 1491 1030 m 1489 1029 l 1491 1027 l 1492 1029 l 1491 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1503 1064 1532 1064 1532 1024 1503 1024 b c np 1508 1053 m 1508 1055 l 1509 1058 l 1511 1060 l 1514 1061 l 1521 1061 l 1524 1060 l 1526 1058 l 1527 1055 l 1527 1051 l 1526 1048 l 1522 1043 l 1506 1027 l 1529 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1538 1064 1567 1064 1567 1024 1538 1024 b c np 1549 1061 m 1544 1060 l 1543 1056 l 1543 1053 l 1544 1050 l 1547 1048 l 1554 1047 l 1559 1045 l 1562 1042 l 1564 1038 l 1564 1034 l 1562 1030 l 1561 1029 l 1556 1027 l 1549 1027 l 1544 1029 l 1543 1030 l 1541 1034 l 1541 1038 l 1543 1042 l 1546 1045 l 1551 1047 l 1557 1048 l 1561 1050 l 1562 1053 l 1562 1056 l 1561 1060 l 1556 1061 l 1549 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1682 1064 1711 1064 1711 1024 1682 1024 b c np 1695 1061 m 1690 1060 l 1686 1055 l 1685 1047 l 1685 1042 l 1686 1034 l 1690 1029 l 1695 1027 l 1698 1027 l 1703 1029 l 1706 1034 l 1708 1042 l 1708 1047 l 1706 1055 l 1703 1060 l 1698 1061 l 1695 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1718 1033 1728 1033 1728 1024 1718 1024 b c np 1723 1030 m 1721 1029 l 1723 1027 l 1725 1029 l 1723 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1735 1064 1764 1064 1764 1024 1735 1024 b c np 1742 1061 m 1760 1061 l 1750 1048 l 1755 1048 l 1758 1047 l 1760 1045 l 1761 1040 l 1761 1037 l 1760 1032 l 1757 1029 l 1752 1027 l 1747 1027 l 1742 1029 l 1740 1030 l 1738 1034 l 0 setlinejoin 4 setmiterlimit s gr gs 1771 1064 1799 1064 1799 1024 1771 1024 b c np 1793 1061 m 1777 1061 l 1775 1047 l 1777 1048 l 1782 1050 l 1787 1050 l 1792 1048 l 1795 1045 l 1796 1040 l 1796 1037 l 1795 1032 l 1792 1029 l 1787 1027 l 1782 1027 l 1777 1029 l 1775 1030 l 1774 1034 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2263 1747 2263 1747 2257 578 2257 b c np 581 2260 m 1744 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2263 584 2263 584 2239 578 2239 b c np 581 2260 m 581 2242 l 0 setlinejoin 4 setmiterlimit s gr gs 810 2263 816 2263 816 2239 810 2239 b c np 813 2260 m 813 2242 l 0 setlinejoin 4 setmiterlimit s gr gs 1043 2263 1049 2263 1049 2239 1043 2239 b c np 1046 2260 m 1046 2242 l 0 setlinejoin 4 setmiterlimit s gr gs 1275 2263 1281 2263 1281 2239 1275 2239 b c np 1278 2260 m 1278 2242 l 0 setlinejoin 4 setmiterlimit s gr gs 1508 2263 1514 2263 1514 2239 1508 2239 b c np 1511 2260 m 1511 2242 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 2263 1747 2263 1747 2239 1741 2239 b c np 1744 2260 m 1744 2242 l 0 setlinejoin 4 setmiterlimit s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np 1 lw []0 lp gs 1142 973 1175 973 1175 935 1142 935 b c np 1173 971 m 1144 937 l s gr gs 1144 973 1177 973 1177 935 1144 935 b c np 1175 971 m 1146 937 l s gr gs 1145 973 1179 973 1179 935 1145 935 b c np 1177 971 m 1147 937 l s gr gs 1149 973 1179 973 1179 959 1149 959 b c np 1177 971 m 1154 971 l 1151 961 l s gr gs 1142 949 1172 949 1172 935 1142 935 b c np 1144 937 m 1167 937 l 1170 947 l s gr gs 1149 973 1157 973 1157 959 1149 959 b c np 1155 971 m 1151 961 l s gr gs 1150 973 1159 973 1159 964 1150 964 b c np 1157 971 m 1152 966 l s gr gs 1152 973 1162 973 1162 968 1152 968 b c np 1160 971 m 1154 970 l s gr gs 1158 940 1169 940 1169 935 1158 935 b c np 1160 937 m 1167 938 l s gr gs 1161 944 1170 944 1170 935 1161 935 b c np 1163 937 m 1168 942 l s gr gs 1163 949 1172 949 1172 935 1163 935 b c np 1165 937 m 1170 947 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 876 1571 890 1571 890 1532 876 1532 b c np 888 1569 m 878 1534 l s gr gs 878 1571 892 1571 892 1532 878 1532 b c np 890 1569 m 880 1534 l s gr gs 880 1571 893 1571 893 1532 880 1532 b c np 891 1569 m 882 1534 l s gr gs 881 1571 911 1571 911 1549 881 1549 b c np 883 1569 m 903 1569 l 908 1567 l 909 1564 l 909 1561 l 908 1556 l 904 1553 l 898 1551 l 885 1551 l s gr gs 901 1569 910 1569 910 1551 901 1551 b c np 906 1567 m 908 1564 l 908 1561 l 906 1556 l 903 1553 l s gr gs 896 1571 908 1571 908 1549 896 1549 b c np 903 1569 m 904 1567 l 906 1564 l 906 1561 l 904 1556 l 901 1553 l 898 1551 l s gr gs 871 1536 888 1536 888 1532 871 1532 b c np 873 1534 m 886 1534 l s gr gs 883 1571 892 1571 892 1565 883 1565 b c np 885 1569 m 890 1567 l s gr gs 884 1571 890 1571 890 1564 884 1564 b c np 886 1569 m 888 1566 l s gr gs 888 1571 895 1571 895 1564 888 1564 b c np 893 1569 m 890 1566 l s gr gs 888 1571 897 1571 897 1565 888 1565 b c np 895 1569 m 890 1567 l s gr gs 873 1538 882 1538 882 1532 873 1532 b c np 880 1536 m 875 1534 l s gr gs 875 1540 882 1540 882 1532 875 1532 b c np 880 1538 m 877 1534 l s gr gs 880 1540 885 1540 885 1532 880 1532 b c np 882 1538 m 883 1534 l s gr gs 878 1538 887 1538 887 1532 878 1532 b c np 880 1536 m 885 1534 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 961 1454 976 1454 976 1416 961 1416 b c np 969 1452 m 965 1434 l 963 1428 l 963 1423 l 965 1420 l 966 1418 l 969 1418 l 973 1421 l 974 1424 l s gr gs 963 1454 973 1454 973 1418 963 1418 b c np 971 1452 m 966 1434 l 965 1428 l 965 1420 l s gr gs 963 1454 975 1454 975 1421 963 1421 b c np 969 1452 m 973 1452 l 966 1429 l 965 1423 l s gr gs 958 1443 978 1443 978 1439 958 1439 b c np 960 1441 m 976 1441 l s gr gs 980 1422 1002 1422 1002 1392 980 1392 b c np 984 1415 m 985 1414 l 984 1412 l 982 1414 l 982 1415 l 984 1417 l 985 1419 l 988 1420 l 993 1420 l 997 1419 l 998 1417 l 1000 1415 l 1000 1412 l 998 1410 l 995 1407 l 988 1405 l 986 1404 l 984 1401 l 982 1398 l 982 1394 l s gr gs 986 1422 1000 1422 1000 1403 986 1403 b c np 993 1420 m 996 1419 l 997 1417 l 998 1415 l 998 1412 l 997 1410 l 993 1407 l 988 1405 l s gr gs 980 1400 1002 1400 1002 1393 980 1393 b c np 982 1396 m 984 1398 l 986 1398 l 992 1395 l 996 1395 l 998 1396 l 1000 1398 l s gr gs 984 1402 1002 1402 1002 1392 984 1392 b c np 986 1398 m 992 1394 l 997 1394 l 998 1395 l 1000 1398 l 1000 1400 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 761 2112 777 2112 777 2073 761 2073 b c np 770 2110 m 765 2092 l 763 2085 l 763 2080 l 765 2077 l 766 2075 l 770 2075 l 773 2078 l 775 2082 l s gr gs 763 2112 773 2112 773 2075 763 2075 b c np 771 2110 m 766 2092 l 765 2085 l 765 2077 l s gr gs 763 2112 775 2112 775 2078 763 2078 b c np 770 2110 m 773 2110 l 766 2087 l 765 2080 l s gr gs 758 2100 778 2100 778 2096 758 2096 b c np 760 2098 m 776 2098 l s gr gs 788 2077 792 2077 792 2049 788 2049 b c np 790 2075 m 790 2051 l s gr gs 789 2077 793 2077 793 2050 789 2050 b c np 791 2075 m 791 2052 l s gr gs 790 2079 794 2079 794 2049 790 2049 b c np 792 2077 m 792 2051 l s gr gs 784 2079 794 2079 794 2070 784 2070 b c np 792 2077 m 789 2073 l 786 2072 l s gr gs 783 2053 799 2053 799 2049 783 2049 b c np 785 2051 m 797 2051 l s gr gs 785 2054 792 2054 792 2049 785 2049 b c np 790 2052 m 787 2051 l s gr gs 787 2056 792 2056 792 2049 787 2049 b c np 790 2054 m 789 2051 l s gr gs 790 2056 796 2056 796 2049 790 2049 b c np 792 2054 m 794 2051 l s gr gs 790 2054 797 2054 797 2049 790 2049 b c np 792 2052 m 795 2051 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 359 1715 373 1715 373 1677 359 1677 b c np 371 1713 m 361 1679 l s gr gs 360 1715 374 1715 374 1677 360 1677 b c np 372 1713 m 362 1679 l s gr gs 362 1715 376 1715 376 1677 362 1677 b c np 374 1713 m 364 1679 l s gr gs 365 1713 394 1713 394 1691 365 1691 b c np 392 1711 m 367 1693 l s gr gs 372 1700 383 1700 383 1677 372 1677 b c np 374 1698 m 381 1679 l s gr gs 374 1700 384 1700 384 1677 374 1677 b c np 376 1698 m 382 1679 l s gr gs 375 1702 386 1702 386 1678 375 1678 b c np 377 1700 m 384 1680 l s gr gs 364 1715 381 1715 381 1711 364 1711 b c np 366 1713 m 379 1713 l s gr gs 385 1715 399 1715 399 1711 385 1711 b c np 387 1713 m 397 1713 l s gr gs 354 1681 371 1681 371 1677 354 1677 b c np 356 1679 m 369 1679 l s gr gs 374 1681 389 1681 389 1677 374 1677 b c np 376 1679 m 387 1679 l s gr gs 365 1715 374 1715 374 1709 365 1709 b c np 367 1713 m 372 1711 l s gr gs 367 1715 373 1715 373 1708 367 1708 b c np 369 1713 m 371 1710 l s gr gs 370 1715 378 1715 378 1708 370 1708 b c np 376 1713 m 372 1710 l s gr gs 370 1715 379 1715 379 1709 370 1709 b c np 377 1713 m 372 1711 l s gr gs 387 1715 394 1715 394 1709 387 1709 b c np 389 1713 m 392 1711 l s gr gs 390 1715 397 1715 397 1709 390 1709 b c np 395 1713 m 392 1711 l s gr gs 356 1682 364 1682 364 1677 356 1677 b c np 362 1680 m 358 1679 l s gr gs 357 1684 364 1684 364 1677 357 1677 b c np 362 1682 m 359 1679 l s gr gs 362 1684 368 1684 368 1677 362 1677 b c np 364 1682 m 366 1679 l s gr gs 360 1682 369 1682 369 1677 360 1677 b c np 362 1680 m 367 1679 l s gr gs 375 1682 383 1682 383 1677 375 1677 b c np 381 1680 m 377 1679 l s gr gs 377 1684 383 1684 383 1677 377 1677 b c np 381 1682 m 379 1679 l s gr gs 380 1684 387 1684 387 1677 380 1677 b c np 382 1682 m 385 1679 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 738 1657 752 1657 752 1619 738 1619 b c np 750 1655 m 740 1621 l s gr gs 740 1657 753 1657 753 1619 740 1619 b c np 751 1655 m 742 1621 l s gr gs 741 1657 755 1657 755 1619 741 1619 b c np 753 1655 m 743 1621 l s gr gs 733 1657 770 1657 770 1619 733 1619 b c np 745 1655 m 760 1655 l 765 1653 l 766 1652 l 768 1647 l 768 1640 l 766 1634 l 763 1627 l 760 1624 l 756 1622 l 750 1621 l 735 1621 l s gr gs 756 1655 768 1655 768 1622 756 1622 b c np 763 1653 m 765 1652 l 766 1647 l 766 1640 l 765 1634 l 761 1627 l 758 1624 l s gr gs 748 1657 767 1657 767 1619 748 1619 b c np 760 1655 m 763 1652 l 765 1647 l 765 1640 l 763 1634 l 760 1627 l 755 1622 l 750 1621 l s gr gs 744 1657 753 1657 753 1651 744 1651 b c np 746 1655 m 751 1653 l s gr gs 746 1657 752 1657 752 1650 746 1650 b c np 748 1655 m 750 1652 l s gr gs 749 1657 757 1657 757 1650 749 1650 b c np 755 1655 m 751 1652 l s gr gs 749 1657 758 1657 758 1651 749 1651 b c np 756 1655 m 751 1653 l s gr gs 735 1624 744 1624 744 1619 735 1619 b c np 742 1622 m 737 1621 l s gr gs 736 1626 744 1626 744 1619 736 1619 b c np 742 1624 m 738 1621 l s gr gs 741 1626 747 1626 747 1619 741 1619 b c np 743 1624 m 745 1621 l s gr gs 740 1624 748 1624 748 1619 740 1619 b c np 742 1622 m 746 1621 l s gr gs 779 1624 789 1624 789 1595 779 1595 b c np 781 1617 m 784 1619 l 787 1622 l 787 1597 l s gr gs 784 1623 788 1623 788 1595 784 1595 b c np 786 1621 m 786 1597 l s gr gs 779 1599 794 1599 794 1595 779 1595 b c np 781 1597 m 792 1597 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 711 1522 725 1522 725 1484 711 1484 b c np 723 1520 m 713 1486 l s gr gs 712 1522 726 1522 726 1484 712 1484 b c np 724 1520 m 714 1486 l s gr gs 714 1522 728 1522 728 1484 714 1484 b c np 726 1520 m 716 1486 l s gr gs 706 1522 743 1522 743 1484 706 1484 b c np 718 1520 m 732 1520 l 737 1518 l 739 1517 l 741 1512 l 741 1505 l 739 1499 l 736 1492 l 732 1489 l 729 1487 l 723 1486 l 708 1486 l s gr gs 729 1520 741 1520 741 1487 729 1487 b c np 736 1518 m 737 1517 l 739 1512 l 739 1505 l 737 1499 l 734 1492 l 731 1489 l s gr gs 721 1522 739 1522 739 1484 721 1484 b c np 732 1520 m 736 1517 l 737 1512 l 737 1505 l 736 1499 l 732 1492 l 727 1487 l 723 1486 l s gr gs 717 1522 726 1522 726 1516 717 1516 b c np 719 1520 m 724 1518 l s gr gs 719 1522 725 1522 725 1515 719 1515 b c np 721 1520 m 723 1517 l s gr gs 722 1522 729 1522 729 1515 722 1515 b c np 727 1520 m 724 1517 l s gr gs 722 1522 731 1522 731 1516 722 1516 b c np 729 1520 m 724 1518 l s gr gs 707 1489 716 1489 716 1484 707 1484 b c np 714 1487 m 709 1486 l s gr gs 709 1491 716 1491 716 1484 709 1484 b c np 714 1489 m 711 1486 l s gr gs 714 1491 720 1491 720 1484 714 1484 b c np 716 1489 m 718 1486 l s gr gs 712 1489 721 1489 721 1484 712 1484 b c np 714 1487 m 719 1486 l s gr gs 748 1489 769 1489 769 1460 748 1460 b c np 751 1482 m 753 1481 l 751 1480 l 750 1481 l 750 1482 l 751 1485 l 753 1486 l 756 1487 l 761 1487 l 765 1486 l 766 1485 l 767 1482 l 767 1480 l 766 1478 l 762 1475 l 756 1473 l 754 1471 l 751 1469 l 750 1465 l 750 1462 l s gr gs 754 1489 768 1489 768 1471 754 1471 b c np 761 1487 m 764 1486 l 765 1485 l 766 1482 l 766 1480 l 765 1478 l 761 1475 l 756 1473 l s gr gs 748 1467 769 1467 769 1461 748 1461 b c np 750 1464 m 751 1465 l 754 1465 l 760 1463 l 764 1463 l 766 1464 l 767 1465 l s gr gs 752 1470 769 1470 769 1460 752 1460 b c np 754 1465 m 760 1462 l 765 1462 l 766 1463 l 767 1465 l 767 1468 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 600 1393 614 1393 614 1355 600 1355 b c np 612 1391 m 602 1357 l s gr gs 602 1393 616 1393 616 1355 602 1355 b c np 614 1391 m 604 1357 l s gr gs 603 1393 617 1393 617 1355 603 1355 b c np 615 1391 m 605 1357 l s gr gs 620 1393 634 1393 634 1355 620 1355 b c np 632 1391 m 622 1357 l s gr gs 621 1393 635 1393 635 1355 621 1355 b c np 633 1391 m 623 1357 l s gr gs 623 1393 637 1393 637 1355 623 1355 b c np 635 1391 m 625 1357 l s gr gs 605 1393 622 1393 622 1389 605 1389 b c np 607 1391 m 620 1391 l s gr gs 625 1393 642 1393 642 1389 625 1389 b c np 627 1391 m 640 1391 l s gr gs 607 1377 630 1377 630 1373 607 1373 b c np 609 1375 m 628 1375 l s gr gs 595 1359 612 1359 612 1355 595 1355 b c np 597 1357 m 610 1357 l s gr gs 615 1359 632 1359 632 1355 615 1355 b c np 617 1357 m 630 1357 l s gr gs 607 1393 616 1393 616 1388 607 1388 b c np 609 1391 m 614 1390 l s gr gs 608 1393 614 1393 614 1386 608 1386 b c np 610 1391 m 612 1388 l s gr gs 612 1393 619 1393 619 1386 612 1386 b c np 617 1391 m 614 1388 l s gr gs 612 1393 620 1393 620 1388 612 1388 b c np 618 1391 m 614 1390 l s gr gs 626 1393 635 1393 635 1388 626 1388 b c np 628 1391 m 633 1390 l s gr gs 628 1393 634 1393 634 1386 628 1386 b c np 630 1391 m 632 1388 l s gr gs 631 1393 638 1393 638 1386 631 1386 b c np 636 1391 m 633 1388 l s gr gs 631 1393 640 1393 640 1388 631 1388 b c np 638 1391 m 633 1390 l s gr gs 597 1360 606 1360 606 1355 597 1355 b c np 604 1358 m 599 1357 l s gr gs 598 1362 606 1362 606 1355 598 1355 b c np 604 1360 m 600 1357 l s gr gs 603 1362 609 1362 609 1355 603 1355 b c np 605 1360 m 607 1357 l s gr gs 602 1360 611 1360 611 1355 602 1355 b c np 604 1358 m 609 1357 l s gr gs 616 1360 625 1360 625 1355 616 1355 b c np 623 1358 m 618 1357 l s gr gs 618 1362 625 1362 625 1355 618 1355 b c np 623 1360 m 620 1357 l s gr gs 623 1362 629 1362 629 1355 623 1355 b c np 625 1360 m 627 1357 l s gr gs 621 1360 630 1360 630 1355 621 1355 b c np 623 1358 m 628 1357 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 689 1271 720 1271 720 1232 689 1232 b c np 715 1265 m 717 1265 l 718 1269 l 717 1259 l 717 1262 l 715 1265 l 714 1267 l 710 1269 l 705 1269 l 700 1267 l 697 1264 l 694 1259 l 692 1254 l 691 1247 l 691 1242 l 692 1237 l 694 1236 l 699 1234 l 704 1234 l 707 1236 l 710 1239 l 712 1242 l s gr gs 690 1267 702 1267 702 1235 690 1235 b c np 700 1265 m 697 1262 l 696 1259 l 694 1254 l 692 1247 l 692 1241 l 694 1237 l s gr gs 692 1271 707 1271 707 1232 692 1232 b c np 705 1269 m 702 1267 l 699 1262 l 697 1259 l 696 1254 l 694 1247 l 694 1239 l 696 1236 l 699 1234 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1501 2061 1515 2061 1515 2023 1501 2023 b c np 1513 2059 m 1503 2025 l s gr gs 1503 2061 1517 2061 1517 2023 1503 2023 b c np 1515 2059 m 1505 2025 l s gr gs 1505 2061 1518 2061 1518 2023 1505 2023 b c np 1516 2059 m 1507 2025 l s gr gs 1506 2061 1535 2061 1535 2041 1506 2041 b c np 1508 2059 m 1526 2059 l 1531 2058 l 1533 2054 l 1533 2051 l 1531 2046 l 1529 2044 l 1525 2043 l s gr gs 1526 2060 1533 2060 1533 2042 1526 2042 b c np 1529 2058 m 1531 2054 l 1531 2051 l 1529 2046 l 1528 2044 l s gr gs 1523 2061 1531 2061 1531 2041 1523 2041 b c np 1526 2059 m 1528 2058 l 1529 2054 l 1529 2051 l 1528 2046 l 1525 2043 l s gr gs 1496 2045 1531 2045 1531 2023 1496 2023 b c np 1511 2043 m 1525 2043 l 1528 2041 l 1529 2038 l 1529 2035 l 1528 2030 l 1525 2026 l 1518 2025 l 1498 2025 l s gr gs 1521 2043 1530 2043 1530 2024 1521 2024 b c np 1526 2041 m 1528 2038 l 1528 2035 l 1526 2030 l 1523 2026 l s gr gs 1516 2045 1528 2045 1528 2023 1516 2023 b c np 1525 2043 m 1526 2040 l 1526 2035 l 1525 2030 l 1521 2026 l 1518 2025 l s gr gs 1508 2061 1517 2061 1517 2056 1508 2056 b c np 1510 2059 m 1515 2058 l s gr gs 1509 2061 1515 2061 1515 2054 1509 2054 b c np 1511 2059 m 1513 2056 l s gr gs 1513 2061 1520 2061 1520 2054 1513 2054 b c np 1518 2059 m 1515 2056 l s gr gs 1513 2061 1522 2061 1522 2056 1513 2056 b c np 1520 2059 m 1515 2058 l s gr gs 1498 2028 1507 2028 1507 2023 1498 2023 b c np 1505 2026 m 1500 2025 l s gr gs 1500 2030 1507 2030 1507 2023 1500 2023 b c np 1505 2028 m 1502 2025 l s gr gs 1505 2030 1510 2030 1510 2023 1505 2023 b c np 1507 2028 m 1508 2025 l s gr gs 1503 2028 1512 2028 1512 2023 1503 2023 b c np 1505 2026 m 1510 2025 l s gr gs 1548 2061 1562 2061 1562 2023 1548 2023 b c np 1560 2059 m 1550 2025 l s gr gs 1550 2061 1564 2061 1564 2023 1550 2023 b c np 1562 2059 m 1552 2025 l s gr gs 1551 2061 1565 2061 1565 2023 1551 2023 b c np 1563 2059 m 1553 2025 l s gr gs 1543 2061 1551 2061 1551 2047 1543 2047 b c np 1549 2059 m 1545 2049 l s gr gs 1571 2061 1577 2061 1577 2047 1571 2047 b c np 1575 2059 m 1573 2049 l s gr gs 1547 2061 1577 2061 1577 2057 1547 2057 b c np 1549 2059 m 1575 2059 l s gr gs 1543 2027 1560 2027 1560 2023 1543 2023 b c np 1545 2025 m 1558 2025 l s gr gs 1543 2061 1552 2061 1552 2047 1543 2047 b c np 1550 2059 m 1545 2049 l s gr gs 1545 2061 1555 2061 1555 2052 1545 2052 b c np 1553 2059 m 1547 2054 l s gr gs 1547 2061 1559 2061 1559 2056 1547 2056 b c np 1557 2059 m 1549 2058 l s gr gs 1566 2061 1575 2061 1575 2056 1566 2056 b c np 1568 2059 m 1573 2058 l s gr gs 1568 2061 1575 2061 1575 2054 1568 2054 b c np 1570 2059 m 1573 2056 l s gr gs 1569 2061 1575 2061 1575 2052 1569 2052 b c np 1571 2059 m 1573 2054 l s gr gs 1571 2061 1575 2061 1575 2047 1571 2047 b c np 1573 2059 m 1573 2049 l s gr gs 1545 2028 1554 2028 1554 2023 1545 2023 b c np 1552 2026 m 1547 2025 l s gr gs 1547 2030 1554 2030 1554 2023 1547 2023 b c np 1552 2028 m 1549 2025 l s gr gs 1551 2030 1557 2030 1557 2023 1551 2023 b c np 1553 2028 m 1555 2025 l s gr gs 1550 2028 1559 2028 1559 2023 1550 2023 b c np 1552 2026 m 1557 2025 l s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1586 2021 1603 2021 1603 2006 1586 2006 b c np 1590 2010 m 1591 2010 l 1591 2011 l 1592 2011 l 1592 2012 l 1593 2012 l 1593 2013 l 1594 2013 l 1595 2014 l 1596 2014 l 1596 2015 l 1597 2015 l 1597 2016 l 1598 2016 l 1599 2017 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1595 2048 1638 2048 1638 2013 1595 2013 b c np 1599 2017 m 1600 2018 l 1601 2018 l 1601 2019 l 1602 2019 l 1602 2020 l 1603 2020 l 1604 2021 l 1605 2022 l 1606 2022 l 1606 2023 l 1607 2023 l 1607 2024 l 1608 2024 l 1609 2025 l 1610 2025 l 1610 2026 l 1611 2026 l 1611 2027 l 1612 2027 l 1613 2028 l 1614 2029 l 1615 2029 l 1615 2030 l 1616 2030 l 1616 2031 l 1617 2031 l 1618 2032 l 1619 2032 l 1619 2033 l 1620 2033 l 1620 2034 l 1621 2034 l 1622 2035 l 1623 2035 l 1623 2036 l 1624 2036 l 1624 2037 l 1625 2037 l 1625 2038 l 1626 2038 l 1627 2039 l 1628 2039 l 1628 2040 l 1629 2040 l 1629 2041 l 1630 2041 l 1630 2042 l 1631 2042 l 1632 2043 l 1633 2043 l 1633 2044 l 1634 2044 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1630 2076 1674 2076 1674 2040 1630 2040 b c np 1634 2044 m 1634 2045 l 1635 2045 l 1636 2045 l 1636 2046 l 1637 2046 l 1637 2047 l 1638 2047 l 1638 2048 l 1639 2048 l 1639 2049 l 1640 2049 l 1641 2049 l 1641 2050 l 1642 2050 l 1642 2051 l 1643 2051 l 1644 2052 l 1645 2053 l 1646 2054 l 1647 2054 l 1647 2055 l 1648 2055 l 1649 2056 l 1650 2057 l 1651 2058 l 1652 2058 l 1652 2059 l 1653 2059 l 1653 2060 l 1654 2060 l 1655 2060 l 1655 2061 l 1656 2061 l 1656 2062 l 1657 2062 l 1658 2063 l 1659 2064 l 1660 2064 l 1660 2065 l 1661 2065 l 1661 2066 l 1662 2066 l 1663 2067 l 1664 2068 l 1665 2068 l 1665 2069 l 1666 2069 l 1667 2070 l 1668 2071 l 1669 2071 l 1669 2072 l 1670 2072 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1666 2104 1709 2104 1709 2068 1666 2068 b c np 1670 2072 m 1670 2073 l 1671 2073 l 1672 2074 l 1673 2075 l 1674 2075 l 1674 2076 l 1675 2076 l 1675 2077 l 1676 2077 l 1677 2078 l 1678 2078 l 1678 2079 l 1679 2079 l 1679 2080 l 1680 2080 l 1680 2081 l 1681 2081 l 1682 2082 l 1683 2082 l 1683 2083 l 1684 2083 l 1684 2084 l 1685 2084 l 1686 2085 l 1687 2086 l 1688 2086 l 1688 2087 l 1689 2087 l 1689 2088 l 1690 2088 l 1691 2089 l 1692 2089 l 1692 2090 l 1693 2090 l 1693 2091 l 1694 2091 l 1695 2092 l 1696 2092 l 1696 2093 l 1697 2093 l 1697 2094 l 1698 2094 l 1699 2095 l 1700 2095 l 1700 2096 l 1701 2096 l 1701 2097 l 1702 2097 l 1702 2098 l 1703 2098 l 1704 2099 l 1705 2100 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1701 2132 1745 2132 1745 2096 1701 2096 b c np 1705 2100 m 1706 2100 l 1706 2101 l 1707 2101 l 1708 2102 l 1709 2102 l 1709 2103 l 1710 2103 l 1710 2104 l 1711 2104 l 1711 2105 l 1712 2105 l 1712 2106 l 1713 2106 l 1714 2106 l 1714 2107 l 1715 2107 l 1715 2108 l 1716 2108 l 1716 2109 l 1717 2109 l 1718 2109 l 1718 2110 l 1719 2110 l 1719 2111 l 1720 2111 l 1721 2112 l 1722 2113 l 1723 2114 l 1724 2114 l 1724 2115 l 1725 2115 l 1726 2116 l 1727 2117 l 1728 2117 l 1728 2118 l 1729 2118 l 1729 2119 l 1730 2119 l 1730 2120 l 1731 2120 l 1732 2120 l 1732 2121 l 1733 2121 l 1733 2122 l 1734 2122 l 1734 2123 l 1735 2123 l 1735 2124 l 1736 2124 l 1737 2124 l 1737 2125 l 1738 2125 l 1738 2126 l 1739 2126 l 1740 2127 l 1741 2127 l 1741 2128 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1737 2159 1780 2159 1780 2124 1737 2124 b c np 1741 2128 m 1742 2128 l 1742 2129 l 1743 2129 l 1744 2130 l 1745 2131 l 1746 2131 l 1746 2132 l 1747 2132 l 1747 2133 l 1748 2133 l 1749 2134 l 1750 2135 l 1751 2135 l 1751 2136 l 1752 2136 l 1752 2137 l 1753 2137 l 1754 2137 l 1754 2138 l 1755 2139 l 1756 2139 l 1756 2140 l 1757 2140 l 1757 2141 l 1758 2141 l 1759 2141 l 1759 2142 l 1760 2142 l 1760 2143 l 1761 2143 l 1761 2144 l 1762 2144 l 1763 2145 l 1764 2146 l 1765 2146 l 1765 2147 l 1766 2147 l 1767 2148 l 1768 2149 l 1769 2149 l 1769 2150 l 1770 2150 l 1770 2151 l 1771 2151 l 1772 2151 l 1772 2152 l 1773 2152 l 1773 2153 l 1774 2153 l 1775 2154 l 1776 2154 l 1776 2155 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1772 2187 1816 2187 1816 2151 1772 2151 b c np 1776 2155 m 1777 2155 l 1777 2156 l 1778 2156 l 1778 2157 l 1779 2157 l 1780 2158 l 1781 2159 l 1782 2159 l 1782 2160 l 1783 2160 l 1784 2161 l 1785 2162 l 1786 2162 l 1786 2163 l 1787 2163 l 1787 2164 l 1788 2164 l 1788 2165 l 1789 2165 l 1789 2166 l 1790 2166 l 1791 2166 l 1791 2167 l 1792 2167 l 1792 2168 l 1793 2168 l 1794 2169 l 1795 2169 l 1795 2170 l 1796 2170 l 1796 2171 l 1797 2171 l 1797 2172 l 1798 2172 l 1799 2173 l 1800 2173 l 1800 2174 l 1801 2174 l 1801 2175 l 1802 2175 l 1803 2176 l 1804 2177 l 1805 2177 l 1805 2178 l 1806 2178 l 1807 2179 l 1808 2179 l 1808 2180 l 1809 2180 l 1809 2181 l 1810 2181 l 1810 2182 l 1811 2182 l 1812 2183 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1808 2214 1852 2214 1852 2179 1808 2179 b c np 1812 2183 m 1813 2183 l 1813 2184 l 1814 2184 l 1814 2185 l 1815 2185 l 1815 2186 l 1816 2186 l 1817 2186 l 1817 2187 l 1818 2187 l 1818 2188 l 1819 2188 l 1819 2189 l 1820 2189 l 1820 2190 l 1821 2190 l 1822 2191 l 1823 2192 l 1824 2192 l 1825 2193 l 1826 2194 l 1827 2195 l 1828 2195 l 1828 2196 l 1829 2196 l 1829 2197 l 1830 2197 l 1831 2198 l 1832 2198 l 1832 2199 l 1833 2199 l 1833 2200 l 1834 2200 l 1835 2200 l 1835 2201 l 1836 2201 l 1836 2202 l 1837 2202 l 1838 2203 l 1839 2204 l 1840 2204 l 1840 2205 l 1841 2205 l 1841 2206 l 1842 2206 l 1843 2207 l 1844 2208 l 1845 2208 l 1845 2209 l 1846 2209 l 1846 2210 l 1847 2210 l 1848 2210 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1844 2242 1887 2242 1887 2206 1844 2206 b c np 1848 2210 m 1848 2211 l 1849 2211 l 1849 2212 l 1850 2212 l 1850 2213 l 1851 2213 l 1852 2214 l 1853 2214 l 1853 2215 l 1854 2215 l 1854 2216 l 1855 2216 l 1855 2217 l 1856 2217 l 1857 2218 l 1858 2218 l 1858 2219 l 1859 2219 l 1859 2220 l 1860 2220 l 1861 2221 l 1862 2221 l 1862 2222 l 1863 2223 l 1864 2223 l 1864 2224 l 1865 2224 l 1866 2225 l 1867 2225 l 1867 2226 l 1868 2226 l 1868 2227 l 1869 2227 l 1869 2228 l 1870 2228 l 1871 2228 l 1871 2229 l 1872 2229 l 1872 2230 l 1873 2230 l 1873 2231 l 1874 2231 l 1875 2232 l 1876 2232 l 1876 2233 l 1877 2233 l 1877 2234 l 1878 2234 l 1879 2235 l 1880 2236 l 1881 2236 l 1881 2237 l 1882 2237 l 1883 2238 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1879 2270 1923 2270 1923 2234 1879 2234 b c np 1883 2238 m 1884 2239 l 1885 2239 l 1885 2240 l 1886 2240 l 1886 2241 l 1887 2241 l 1888 2242 l 1889 2243 l 1890 2243 l 1890 2244 l 1891 2244 l 1892 2245 l 1893 2245 l 1893 2246 l 1894 2246 l 1894 2247 l 1895 2247 l 1895 2248 l 1896 2248 l 1896 2249 l 1897 2249 l 1897 2250 l 1898 2250 l 1899 2250 l 1899 2251 l 1900 2251 l 1900 2252 l 1901 2252 l 1902 2253 l 1903 2254 l 1904 2254 l 1904 2255 l 1905 2255 l 1905 2256 l 1906 2256 l 1907 2257 l 1908 2257 l 1908 2258 l 1909 2258 l 1909 2259 l 1910 2259 l 1911 2259 l 1911 2260 l 1912 2260 l 1912 2261 l 1913 2261 l 1914 2262 l 1915 2263 l 1916 2263 l 1916 2264 l 1917 2264 l 1917 2265 l 1918 2265 l 1919 2266 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1915 2298 1958 2298 1958 2262 1915 2262 b c np 1919 2266 m 1920 2267 l 1921 2267 l 1921 2268 l 1922 2268 l 1922 2269 l 1923 2269 l 1924 2270 l 1925 2270 l 1925 2271 l 1926 2271 l 1926 2272 l 1927 2272 l 1928 2273 l 1929 2274 l 1930 2274 l 1930 2275 l 1931 2275 l 1931 2276 l 1932 2276 l 1933 2276 l 1933 2277 l 1934 2277 l 1934 2278 l 1935 2278 l 1935 2279 l 1936 2279 l 1937 2280 l 1938 2281 l 1939 2281 l 1939 2282 l 1940 2282 l 1940 2283 l 1941 2283 l 1942 2284 l 1943 2285 l 1944 2285 l 1944 2286 l 1945 2286 l 1945 2287 l 1946 2287 l 1947 2287 l 1947 2288 l 1948 2288 l 1948 2289 l 1949 2289 l 1949 2290 l 1950 2290 l 1951 2291 l 1952 2291 l 1952 2292 l 1953 2292 l 1953 2293 l 1954 2293 l 1954 2294 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1950 2319 1987 2319 1987 2290 1950 2290 b c np 1954 2294 m 1955 2294 l 1956 2295 l 1957 2295 l 1957 2296 l 1958 2296 l 1959 2297 l 1959 2298 l 1960 2298 l 1961 2298 l 1961 2299 l 1962 2299 l 1962 2300 l 1963 2300 l 1963 2301 l 1964 2301 l 1965 2302 l 1966 2302 l 1966 2303 l 1967 2303 l 1967 2304 l 1968 2304 l 1969 2305 l 1970 2306 l 1971 2306 l 1971 2307 l 1972 2307 l 1973 2308 l 1974 2308 l 1974 2309 l 1975 2309 l 1975 2310 l 1976 2310 l 1977 2311 l 1978 2311 l 1978 2312 l 1979 2312 l 1979 2313 l 1980 2313 l 1981 2314 l 1982 2314 l 1982 2315 l 1983 2315 l 1982 2315 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1978 2319 1986 2319 1986 2310 1978 2310 b c np 1982 2315 m 1982 2314 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1584 2014 1594 2014 1594 2004 1584 2004 b c np 1590 2010 m 1589 2010 l 1589 2009 l 1588 2009 l 1588 2008 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1552 2012 1592 2012 1592 1979 1552 1979 b c np 1588 2008 m 1587 2008 l 1587 2007 l 1586 2007 l 1585 2007 l 1585 2006 l 1584 2006 l 1584 2005 l 1583 2005 l 1583 2004 l 1582 2004 l 1582 2003 l 1581 2003 l 1580 2003 l 1580 2002 l 1579 2002 l 1579 2001 l 1578 2001 l 1578 2000 l 1577 2000 l 1576 1999 l 1575 1999 l 1575 1998 l 1574 1998 l 1574 1997 l 1573 1997 l 1572 1996 l 1571 1996 l 1571 1995 l 1570 1995 l 1570 1994 l 1569 1994 l 1569 1993 l 1568 1993 l 1567 1992 l 1566 1992 l 1566 1991 l 1565 1991 l 1565 1990 l 1564 1990 l 1563 1989 l 1562 1989 l 1562 1988 l 1561 1988 l 1561 1987 l 1560 1987 l 1560 1986 l 1559 1986 l 1559 1985 l 1558 1985 l 1557 1985 l 1557 1984 l 1556 1984 l 1556 1983 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1516 1987 1560 1987 1560 1951 1516 1951 b c np 1556 1983 m 1555 1983 l 1554 1982 l 1553 1981 l 1552 1981 l 1552 1980 l 1551 1980 l 1551 1979 l 1550 1979 l 1550 1978 l 1549 1978 l 1548 1977 l 1547 1977 l 1547 1976 l 1546 1976 l 1546 1975 l 1545 1975 l 1544 1974 l 1543 1974 l 1543 1973 l 1542 1973 l 1542 1972 l 1541 1972 l 1540 1971 l 1540 1970 l 1539 1970 l 1538 1970 l 1538 1969 l 1537 1969 l 1537 1968 l 1536 1968 l 1535 1967 l 1534 1967 l 1534 1966 l 1533 1966 l 1533 1965 l 1532 1965 l 1532 1964 l 1531 1964 l 1530 1963 l 1529 1963 l 1529 1962 l 1528 1962 l 1528 1961 l 1527 1961 l 1527 1960 l 1526 1960 l 1525 1959 l 1524 1959 l 1524 1958 l 1523 1958 l 1523 1957 l 1522 1957 l 1522 1956 l 1521 1956 l 1520 1956 l 1520 1955 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1481 1959 1524 1959 1524 1924 1481 1924 b c np 1520 1955 m 1519 1955 l 1519 1954 l 1518 1954 l 1518 1953 l 1517 1953 l 1516 1952 l 1515 1951 l 1514 1951 l 1514 1950 l 1513 1950 l 1512 1949 l 1511 1949 l 1511 1948 l 1510 1948 l 1510 1947 l 1509 1947 l 1508 1946 l 1507 1945 l 1506 1945 l 1506 1944 l 1505 1944 l 1505 1943 l 1504 1943 l 1503 1942 l 1502 1941 l 1501 1941 l 1501 1940 l 1500 1940 l 1500 1939 l 1499 1939 l 1498 1938 l 1497 1938 l 1497 1937 l 1496 1937 l 1496 1936 l 1495 1936 l 1494 1935 l 1493 1934 l 1492 1934 l 1492 1933 l 1491 1933 l 1491 1932 l 1490 1932 l 1489 1931 l 1488 1931 l 1488 1930 l 1487 1930 l 1486 1929 l 1486 1928 l 1485 1928 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1445 1932 1489 1932 1489 1896 1445 1896 b c np 1485 1928 m 1484 1927 l 1483 1927 l 1483 1926 l 1482 1926 l 1482 1925 l 1481 1925 l 1480 1924 l 1479 1923 l 1478 1923 l 1478 1922 l 1477 1922 l 1477 1921 l 1476 1921 l 1475 1921 l 1475 1920 l 1474 1919 l 1473 1919 l 1473 1918 l 1472 1918 l 1472 1917 l 1471 1917 l 1470 1916 l 1469 1916 l 1469 1915 l 1468 1915 l 1468 1914 l 1467 1914 l 1466 1913 l 1465 1912 l 1464 1911 l 1463 1911 l 1462 1910 l 1461 1909 l 1460 1908 l 1459 1908 l 1459 1907 l 1458 1907 l 1458 1906 l 1457 1906 l 1456 1906 l 1456 1905 l 1455 1905 l 1455 1904 l 1454 1904 l 1454 1903 l 1453 1903 l 1453 1902 l 1452 1902 l 1451 1902 l 1451 1901 l 1450 1901 l 1450 1900 l 1449 1900 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1410 1904 1453 1904 1453 1869 1410 1869 b c np 1449 1900 m 1449 1899 l 1448 1899 l 1447 1898 l 1446 1898 l 1446 1897 l 1445 1897 l 1445 1896 l 1444 1896 l 1443 1895 l 1442 1894 l 1441 1894 l 1441 1893 l 1440 1893 l 1440 1892 l 1439 1892 l 1438 1892 l 1438 1891 l 1437 1891 l 1437 1890 l 1436 1890 l 1435 1889 l 1434 1888 l 1433 1888 l 1433 1887 l 1432 1887 l 1432 1886 l 1431 1886 l 1430 1885 l 1429 1885 l 1429 1884 l 1428 1884 l 1428 1883 l 1427 1883 l 1426 1882 l 1425 1881 l 1424 1881 l 1424 1880 l 1423 1880 l 1422 1879 l 1421 1878 l 1420 1877 l 1419 1877 l 1419 1876 l 1418 1876 l 1418 1875 l 1417 1875 l 1416 1874 l 1415 1874 l 1415 1873 l 1414 1873 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1375 1877 1418 1877 1418 1841 1375 1841 b c np 1414 1873 m 1414 1872 l 1413 1872 l 1412 1871 l 1411 1871 l 1411 1870 l 1410 1870 l 1410 1869 l 1409 1869 l 1409 1868 l 1408 1868 l 1407 1867 l 1406 1866 l 1405 1866 l 1405 1865 l 1404 1865 l 1403 1864 l 1402 1863 l 1401 1863 l 1401 1862 l 1400 1862 l 1400 1861 l 1399 1861 l 1399 1860 l 1398 1860 l 1397 1859 l 1396 1859 l 1396 1858 l 1395 1858 l 1395 1857 l 1394 1857 l 1393 1856 l 1392 1856 l 1392 1855 l 1391 1855 l 1391 1854 l 1390 1854 l 1389 1853 l 1389 1852 l 1388 1852 l 1387 1852 l 1387 1851 l 1386 1851 l 1386 1850 l 1385 1850 l 1384 1849 l 1383 1849 l 1383 1848 l 1382 1848 l 1382 1847 l 1381 1847 l 1380 1846 l 1379 1846 l 1379 1845 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1339 1849 1383 1849 1383 1813 1339 1813 b c np 1379 1845 m 1378 1845 l 1378 1844 l 1377 1844 l 1377 1843 l 1376 1843 l 1375 1842 l 1374 1841 l 1373 1841 l 1373 1840 l 1372 1840 l 1371 1839 l 1370 1838 l 1369 1838 l 1369 1837 l 1368 1837 l 1368 1836 l 1367 1836 l 1367 1835 l 1366 1835 l 1366 1834 l 1365 1834 l 1364 1834 l 1364 1833 l 1363 1833 l 1363 1832 l 1362 1832 l 1361 1831 l 1360 1830 l 1359 1830 l 1359 1829 l 1358 1829 l 1358 1828 l 1357 1828 l 1356 1827 l 1355 1826 l 1354 1826 l 1354 1825 l 1353 1825 l 1352 1824 l 1351 1823 l 1350 1823 l 1350 1822 l 1349 1822 l 1349 1821 l 1348 1821 l 1347 1821 l 1347 1820 l 1346 1819 l 1345 1819 l 1345 1818 l 1344 1818 l 1344 1817 l 1343 1817 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1305 1821 1347 1821 1347 1786 1305 1786 b c np 1343 1817 m 1342 1816 l 1341 1815 l 1340 1815 l 1340 1814 l 1339 1814 l 1338 1813 l 1337 1812 l 1336 1812 l 1336 1811 l 1335 1811 l 1335 1810 l 1334 1810 l 1334 1809 l 1333 1809 l 1332 1808 l 1331 1808 l 1331 1807 l 1330 1807 l 1330 1806 l 1329 1806 l 1328 1805 l 1327 1805 l 1327 1804 l 1326 1804 l 1326 1803 l 1325 1803 l 1325 1802 l 1324 1802 l 1324 1801 l 1323 1801 l 1322 1801 l 1322 1800 l 1321 1800 l 1321 1799 l 1320 1799 l 1320 1798 l 1319 1798 l 1318 1797 l 1317 1797 l 1317 1796 l 1316 1796 l 1316 1795 l 1315 1795 l 1315 1794 l 1314 1794 l 1313 1794 l 1313 1793 l 1312 1793 l 1312 1792 l 1311 1792 l 1310 1791 l 1309 1790 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1269 1794 1313 1794 1313 1758 1269 1758 b c np 1309 1790 m 1308 1790 l 1308 1789 l 1307 1789 l 1307 1788 l 1306 1788 l 1305 1788 l 1305 1787 l 1304 1787 l 1304 1786 l 1303 1786 l 1303 1785 l 1302 1785 l 1302 1784 l 1301 1784 l 1301 1783 l 1300 1783 l 1299 1782 l 1298 1782 l 1298 1781 l 1297 1781 l 1296 1780 l 1295 1779 l 1294 1779 l 1294 1778 l 1293 1778 l 1293 1777 l 1292 1777 l 1292 1776 l 1291 1776 l 1290 1775 l 1289 1775 l 1289 1774 l 1288 1774 l 1288 1773 l 1287 1773 l 1287 1772 l 1286 1772 l 1285 1772 l 1285 1771 l 1284 1771 l 1284 1770 l 1283 1770 l 1283 1769 l 1282 1769 l 1282 1768 l 1281 1768 l 1280 1768 l 1280 1767 l 1279 1767 l 1279 1766 l 1278 1766 l 1278 1765 l 1277 1765 l 1276 1764 l 1275 1763 l 1274 1763 l 1274 1762 l 1273 1762 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1234 1766 1277 1766 1277 1730 1234 1730 b c np 1273 1762 m 1273 1761 l 1272 1761 l 1271 1760 l 1270 1759 l 1269 1759 l 1269 1758 l 1268 1758 l 1268 1757 l 1267 1757 l 1266 1756 l 1265 1755 l 1264 1755 l 1263 1754 l 1262 1753 l 1261 1752 l 1260 1751 l 1259 1751 l 1259 1750 l 1258 1750 l 1258 1749 l 1257 1749 l 1256 1748 l 1255 1748 l 1255 1747 l 1254 1747 l 1254 1746 l 1253 1746 l 1252 1745 l 1251 1745 l 1251 1744 l 1250 1744 l 1250 1743 l 1249 1743 l 1249 1742 l 1248 1742 l 1247 1741 l 1246 1741 l 1246 1740 l 1245 1740 l 1245 1739 l 1244 1739 l 1243 1738 l 1242 1738 l 1242 1737 l 1241 1737 l 1241 1736 l 1240 1736 l 1240 1735 l 1239 1735 l 1238 1735 l 1238 1734 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1199 1738 1242 1738 1242 1702 1199 1702 b c np 1238 1734 m 1237 1734 l 1237 1733 l 1236 1733 l 1236 1732 l 1235 1732 l 1234 1731 l 1233 1730 l 1232 1730 l 1232 1729 l 1231 1729 l 1231 1728 l 1230 1728 l 1229 1727 l 1228 1726 l 1227 1726 l 1227 1725 l 1226 1725 l 1226 1724 l 1225 1724 l 1224 1723 l 1223 1722 l 1222 1722 l 1222 1721 l 1221 1721 l 1220 1720 l 1219 1719 l 1218 1718 l 1217 1718 l 1217 1717 l 1216 1717 l 1216 1716 l 1215 1716 l 1214 1715 l 1213 1715 l 1213 1714 l 1212 1714 l 1212 1713 l 1211 1713 l 1210 1712 l 1209 1712 l 1209 1711 l 1208 1711 l 1208 1710 l 1207 1710 l 1207 1709 l 1206 1709 l 1205 1708 l 1204 1708 l 1204 1707 l 1203 1707 l 1203 1706 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1164 1710 1207 1710 1207 1675 1164 1675 b c np 1203 1706 m 1202 1706 l 1202 1705 l 1201 1705 l 1200 1704 l 1199 1704 l 1199 1703 l 1198 1702 l 1197 1702 l 1196 1701 l 1195 1700 l 1194 1700 l 1194 1699 l 1193 1699 l 1193 1698 l 1192 1698 l 1192 1697 l 1191 1697 l 1190 1696 l 1189 1695 l 1188 1695 l 1188 1694 l 1187 1694 l 1187 1693 l 1186 1693 l 1185 1692 l 1184 1691 l 1183 1691 l 1183 1690 l 1182 1690 l 1182 1689 l 1181 1689 l 1180 1689 l 1180 1688 l 1179 1688 l 1179 1687 l 1178 1687 l 1177 1686 l 1176 1685 l 1175 1684 l 1174 1684 l 1174 1683 l 1173 1683 l 1173 1682 l 1172 1682 l 1171 1682 l 1171 1681 l 1170 1681 l 1170 1680 l 1169 1680 l 1169 1679 l 1168 1679 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1129 1683 1172 1683 1172 1647 1129 1647 b c np 1168 1679 m 1167 1678 l 1166 1677 l 1165 1677 l 1165 1676 l 1164 1676 l 1164 1675 l 1163 1675 l 1163 1674 l 1162 1674 l 1161 1673 l 1160 1673 l 1160 1672 l 1159 1672 l 1159 1671 l 1158 1671 l 1158 1670 l 1157 1670 l 1156 1669 l 1155 1669 l 1155 1668 l 1154 1668 l 1154 1667 l 1153 1667 l 1153 1666 l 1152 1666 l 1151 1665 l 1150 1664 l 1149 1664 l 1149 1663 l 1148 1663 l 1148 1662 l 1147 1662 l 1146 1662 l 1146 1661 l 1145 1660 l 1144 1660 l 1144 1659 l 1143 1659 l 1143 1658 l 1142 1658 l 1141 1657 l 1140 1657 l 1140 1656 l 1139 1656 l 1139 1655 l 1138 1655 l 1137 1654 l 1136 1653 l 1135 1653 l 1135 1652 l 1134 1652 l 1134 1651 l 1133 1651 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1095 1655 1137 1655 1137 1619 1095 1619 b c np 1133 1651 m 1133 1650 l 1132 1650 l 1131 1649 l 1130 1649 l 1130 1648 l 1129 1648 l 1129 1647 l 1128 1647 l 1127 1646 l 1126 1645 l 1125 1644 l 1124 1644 l 1124 1643 l 1123 1643 l 1123 1642 l 1122 1642 l 1121 1641 l 1120 1640 l 1119 1640 l 1119 1639 l 1118 1639 l 1118 1638 l 1117 1638 l 1116 1638 l 1116 1637 l 1115 1637 l 1115 1636 l 1114 1636 l 1114 1635 l 1113 1635 l 1113 1634 l 1112 1634 l 1111 1633 l 1110 1633 l 1110 1632 l 1109 1632 l 1109 1631 l 1108 1631 l 1108 1630 l 1107 1630 l 1106 1630 l 1106 1629 l 1105 1629 l 1105 1628 l 1104 1628 l 1103 1627 l 1102 1626 l 1101 1625 l 1100 1625 l 1100 1624 l 1099 1624 l 1099 1623 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1060 1627 1103 1627 1103 1592 1060 1592 b c np 1099 1623 m 1098 1623 l 1097 1622 l 1096 1622 l 1096 1621 l 1095 1621 l 1095 1620 l 1094 1620 l 1093 1619 l 1092 1618 l 1091 1618 l 1091 1617 l 1090 1617 l 1090 1616 l 1089 1616 l 1088 1615 l 1087 1614 l 1086 1613 l 1085 1613 l 1085 1612 l 1084 1612 l 1084 1611 l 1083 1611 l 1082 1610 l 1081 1609 l 1080 1609 l 1080 1608 l 1079 1608 l 1079 1607 l 1078 1607 l 1077 1607 l 1077 1606 l 1076 1606 l 1076 1605 l 1075 1605 l 1075 1604 l 1074 1604 l 1073 1603 l 1072 1602 l 1071 1602 l 1071 1601 l 1070 1601 l 1070 1600 l 1069 1600 l 1069 1599 l 1068 1599 l 1067 1598 l 1066 1598 l 1066 1597 l 1065 1597 l 1065 1596 l 1064 1596 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1025 1600 1068 1600 1068 1564 1025 1564 b c np 1064 1596 m 1063 1595 l 1062 1594 l 1061 1594 l 1061 1593 l 1060 1593 l 1060 1592 l 1059 1592 l 1059 1591 l 1058 1591 l 1058 1590 l 1057 1590 l 1056 1589 l 1055 1589 l 1055 1588 l 1054 1588 l 1054 1587 l 1053 1587 l 1052 1586 l 1051 1585 l 1050 1585 l 1050 1584 l 1049 1584 l 1049 1583 l 1048 1583 l 1048 1582 l 1047 1582 l 1046 1582 l 1046 1581 l 1045 1581 l 1045 1580 l 1044 1580 l 1043 1579 l 1042 1578 l 1041 1578 l 1041 1577 l 1040 1577 l 1040 1576 l 1039 1576 l 1038 1575 l 1037 1574 l 1036 1573 l 1035 1573 l 1035 1572 l 1034 1572 l 1034 1571 l 1033 1571 l 1032 1570 l 1031 1569 l 1030 1569 l 1030 1568 l 1029 1568 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 991 1572 1033 1572 1033 1536 991 1536 b c np 1029 1568 m 1029 1567 l 1028 1567 l 1027 1566 l 1026 1565 l 1025 1565 l 1025 1564 l 1024 1564 l 1024 1563 l 1023 1563 l 1022 1562 l 1021 1562 l 1021 1561 l 1020 1561 l 1020 1560 l 1019 1560 l 1019 1559 l 1018 1559 l 1018 1558 l 1017 1558 l 1016 1557 l 1015 1557 l 1015 1556 l 1014 1556 l 1014 1555 l 1013 1555 l 1012 1554 l 1011 1554 l 1011 1553 l 1010 1553 l 1010 1552 l 1009 1552 l 1009 1551 l 1008 1551 l 1008 1550 l 1007 1550 l 1006 1549 l 1005 1548 l 1004 1548 l 1004 1547 l 1003 1547 l 1003 1546 l 1002 1546 l 1001 1545 l 1000 1545 l 1000 1544 l 999 1543 l 998 1543 l 998 1542 l 997 1542 l 996 1541 l 995 1541 l 995 1540 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 957 1544 999 1544 999 1508 957 1508 b c np 995 1540 m 994 1540 l 994 1539 l 993 1539 l 993 1538 l 992 1538 l 991 1537 l 990 1536 l 989 1536 l 989 1535 l 988 1535 l 988 1534 l 987 1534 l 987 1533 l 986 1533 l 985 1532 l 984 1531 l 983 1531 l 983 1530 l 982 1530 l 982 1529 l 981 1529 l 980 1528 l 979 1528 l 979 1527 l 978 1527 l 978 1526 l 977 1526 l 977 1525 l 976 1525 l 975 1524 l 974 1523 l 973 1523 l 973 1522 l 972 1522 l 971 1521 l 970 1520 l 969 1520 l 969 1519 l 968 1519 l 968 1518 l 967 1518 l 967 1517 l 966 1517 l 966 1516 l 965 1516 l 964 1515 l 963 1515 l 963 1514 l 962 1514 l 962 1513 l 961 1513 l 961 1512 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 923 1516 965 1516 965 1481 923 1481 b c np 961 1512 m 960 1512 l 960 1511 l 959 1511 l 958 1511 l 958 1510 l 957 1510 l 957 1509 l 956 1509 l 956 1508 l 955 1508 l 955 1507 l 954 1507 l 953 1506 l 952 1506 l 952 1505 l 951 1505 l 951 1504 l 950 1504 l 950 1503 l 949 1503 l 948 1503 l 948 1502 l 947 1501 l 946 1501 l 946 1500 l 945 1500 l 945 1499 l 944 1499 l 943 1498 l 942 1497 l 941 1496 l 940 1496 l 940 1495 l 939 1495 l 939 1494 l 938 1494 l 937 1494 l 937 1493 l 936 1492 l 935 1492 l 935 1491 l 934 1491 l 934 1490 l 933 1490 l 932 1489 l 931 1488 l 930 1488 l 930 1487 l 929 1487 l 929 1486 l 928 1486 l 927 1485 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 889 1489 931 1489 931 1453 889 1453 b c np 927 1485 m 926 1484 l 925 1483 l 924 1483 l 924 1482 l 923 1482 l 923 1481 l 922 1481 l 921 1480 l 920 1479 l 919 1479 l 919 1478 l 918 1478 l 918 1477 l 917 1477 l 917 1476 l 916 1476 l 915 1475 l 914 1474 l 913 1474 l 913 1473 l 912 1473 l 912 1472 l 911 1472 l 910 1472 l 910 1471 l 909 1471 l 909 1470 l 908 1470 l 908 1469 l 907 1469 l 907 1468 l 906 1468 l 906 1467 l 905 1467 l 904 1467 l 904 1466 l 903 1466 l 903 1465 l 902 1465 l 901 1464 l 900 1463 l 899 1462 l 898 1462 l 898 1461 l 897 1461 l 897 1460 l 896 1460 l 896 1459 l 895 1459 l 895 1458 l 894 1458 l 893 1458 l 893 1457 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 855 1461 897 1461 897 1425 855 1425 b c np 893 1457 m 892 1457 l 892 1456 l 891 1456 l 891 1455 l 890 1455 l 890 1454 l 889 1454 l 888 1453 l 887 1453 l 887 1452 l 886 1452 l 886 1451 l 885 1451 l 885 1450 l 884 1450 l 884 1449 l 883 1449 l 882 1448 l 881 1447 l 880 1447 l 880 1446 l 879 1446 l 879 1445 l 878 1445 l 877 1445 l 877 1444 l 876 1444 l 876 1443 l 875 1443 l 875 1442 l 874 1442 l 874 1441 l 873 1441 l 873 1440 l 872 1440 l 871 1439 l 870 1438 l 869 1438 l 869 1437 l 868 1437 l 868 1436 l 867 1436 l 866 1435 l 866 1434 l 865 1434 l 864 1433 l 863 1433 l 863 1432 l 862 1432 l 862 1431 l 861 1431 l 861 1430 l 860 1430 l 859 1429 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 823 1433 863 1433 863 1398 823 1398 b c np 859 1429 m 858 1429 l 858 1428 l 857 1428 l 857 1427 l 856 1427 l 856 1426 l 855 1426 l 854 1425 l 853 1424 l 852 1424 l 852 1423 l 851 1423 l 851 1422 l 850 1422 l 850 1421 l 849 1421 l 849 1420 l 848 1420 l 847 1419 l 846 1419 l 846 1418 l 845 1418 l 845 1417 l 844 1417 l 844 1416 l 843 1416 l 842 1415 l 841 1414 l 840 1414 l 840 1413 l 839 1413 l 839 1412 l 838 1412 l 838 1411 l 837 1411 l 836 1410 l 835 1409 l 834 1408 l 833 1407 l 832 1407 l 832 1406 l 831 1406 l 831 1405 l 830 1405 l 829 1404 l 828 1403 l 827 1403 l 827 1402 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 790 1406 831 1406 831 1370 790 1370 b c np 827 1402 m 826 1402 l 826 1401 l 825 1401 l 825 1400 l 824 1400 l 824 1399 l 823 1399 l 822 1398 l 821 1398 l 821 1397 l 820 1397 l 820 1396 l 819 1396 l 819 1395 l 818 1395 l 818 1394 l 817 1394 l 816 1393 l 816 1392 l 815 1392 l 814 1391 l 813 1391 l 813 1390 l 812 1390 l 812 1389 l 811 1389 l 811 1388 l 810 1388 l 810 1387 l 809 1387 l 808 1387 l 808 1386 l 807 1386 l 807 1385 l 806 1385 l 806 1384 l 805 1384 l 805 1383 l 804 1383 l 804 1382 l 803 1382 l 803 1381 l 802 1381 l 801 1380 l 800 1379 l 799 1379 l 799 1378 l 798 1378 l 798 1377 l 797 1377 l 797 1376 l 796 1376 l 796 1375 l 795 1375 l 794 1374 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 758 1378 798 1378 798 1343 758 1343 b c np 794 1374 m 793 1373 l 792 1372 l 791 1372 l 791 1371 l 790 1371 l 790 1370 l 789 1370 l 788 1369 l 787 1368 l 786 1367 l 785 1367 l 785 1366 l 784 1366 l 784 1365 l 783 1365 l 783 1364 l 782 1364 l 782 1363 l 781 1363 l 780 1362 l 779 1362 l 779 1361 l 778 1361 l 778 1360 l 777 1360 l 777 1359 l 776 1359 l 776 1358 l 775 1358 l 775 1357 l 774 1357 l 774 1356 l 773 1356 l 772 1355 l 771 1355 l 771 1354 l 770 1354 l 770 1353 l 769 1353 l 769 1352 l 768 1352 l 768 1351 l 767 1351 l 767 1350 l 766 1350 l 766 1349 l 765 1349 l 765 1348 l 764 1348 l 763 1347 l 762 1347 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 728 1351 766 1351 766 1315 728 1315 b c np 762 1347 m 762 1346 l 761 1346 l 761 1345 l 760 1345 l 760 1344 l 759 1344 l 759 1343 l 758 1343 l 758 1342 l 757 1342 l 757 1341 l 756 1341 l 756 1340 l 755 1340 l 754 1339 l 753 1339 l 753 1338 l 752 1338 l 752 1337 l 751 1337 l 751 1336 l 750 1336 l 750 1335 l 749 1335 l 749 1334 l 748 1334 l 748 1333 l 747 1333 l 746 1332 l 745 1331 l 744 1330 l 743 1330 l 743 1329 l 742 1328 l 741 1328 l 741 1327 l 740 1327 l 740 1326 l 739 1326 l 739 1325 l 738 1325 l 738 1324 l 737 1324 l 737 1323 l 736 1323 l 736 1322 l 735 1322 l 734 1321 l 734 1320 l 733 1320 l 732 1319 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 708 1323 736 1323 736 1295 708 1295 b c np 732 1319 m 731 1318 l 730 1317 l 729 1317 l 729 1316 l 728 1316 l 728 1315 l 727 1315 l 727 1314 l 726 1314 l 726 1313 l 725 1313 l 725 1312 l 724 1312 l 724 1311 l 723 1311 l 723 1310 l 722 1310 l 722 1309 l 721 1309 l 721 1308 l 720 1308 l 720 1307 l 719 1307 l 719 1306 l 718 1306 l 718 1305 l 717 1305 l 717 1304 l 716 1304 l 716 1303 l 715 1303 l 715 1302 l 714 1302 l 714 1301 l 713 1301 l 713 1300 l 712 1300 l 712 1299 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 708 1305 718 1305 718 1295 708 1295 b c np 712 1299 m 712 1300 l 712 1299 l 712 1300 l 713 1300 l 713 1301 l 714 1301 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 710 1325 732 1325 732 1297 710 1297 b c np 714 1301 m 714 1302 l 715 1302 l 715 1303 l 715 1304 l 716 1304 l 716 1305 l 717 1305 l 717 1306 l 718 1306 l 718 1307 l 719 1307 l 719 1308 l 720 1309 l 720 1310 l 721 1310 l 721 1311 l 722 1312 l 722 1313 l 723 1313 l 723 1314 l 724 1314 l 724 1315 l 725 1316 l 725 1317 l 726 1317 l 726 1318 l 726 1319 l 727 1319 l 727 1320 l 728 1320 l 728 1321 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 724 1350 747 1350 747 1317 724 1317 b c np 728 1321 m 729 1322 l 729 1323 l 730 1323 l 730 1324 l 731 1325 l 731 1326 l 732 1326 l 732 1327 l 732 1328 l 733 1328 l 733 1329 l 734 1330 l 734 1331 l 735 1331 l 735 1332 l 735 1333 l 736 1333 l 736 1334 l 736 1335 l 737 1335 l 737 1336 l 737 1337 l 738 1337 l 738 1338 l 739 1338 l 739 1339 l 739 1340 l 740 1340 l 740 1341 l 741 1342 l 741 1343 l 741 1344 l 742 1344 l 742 1345 l 743 1346 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 739 1376 759 1376 759 1342 739 1342 b c np 743 1346 m 743 1347 l 743 1348 l 744 1348 l 744 1349 l 744 1350 l 745 1350 l 745 1351 l 745 1352 l 746 1352 l 746 1353 l 746 1354 l 747 1354 l 747 1355 l 748 1356 l 748 1357 l 749 1358 l 749 1359 l 750 1360 l 750 1361 l 750 1362 l 751 1362 l 751 1363 l 751 1364 l 752 1364 l 752 1365 l 752 1366 l 753 1367 l 753 1368 l 753 1369 l 754 1369 l 754 1370 l 754 1371 l 755 1371 l 755 1372 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 751 1403 770 1403 770 1368 751 1368 b c np 755 1372 m 755 1373 l 756 1373 l 756 1374 l 756 1375 l 757 1375 l 757 1376 l 757 1377 l 757 1378 l 758 1378 l 758 1379 l 758 1380 l 759 1380 l 759 1381 l 759 1382 l 759 1383 l 760 1383 l 760 1384 l 760 1385 l 761 1386 l 761 1387 l 761 1388 l 762 1388 l 762 1389 l 762 1390 l 762 1391 l 763 1391 l 763 1392 l 763 1393 l 764 1393 l 764 1394 l 764 1395 l 764 1396 l 765 1396 l 765 1397 l 765 1398 l 766 1398 l 766 1399 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 762 1430 778 1430 778 1395 762 1395 b c np 766 1399 m 766 1400 l 766 1401 l 767 1401 l 767 1402 l 767 1403 l 767 1404 l 768 1404 l 768 1405 l 768 1406 l 768 1407 l 769 1407 l 769 1408 l 769 1409 l 769 1410 l 770 1411 l 770 1412 l 770 1413 l 770 1414 l 771 1414 l 771 1415 l 771 1416 l 771 1417 l 772 1417 l 772 1418 l 772 1419 l 773 1419 l 773 1420 l 773 1421 l 773 1422 l 774 1423 l 774 1424 l 774 1425 l 774 1426 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 770 1457 786 1457 786 1422 770 1422 b c np 774 1426 m 775 1426 l 775 1427 l 775 1428 l 775 1429 l 776 1430 l 776 1431 l 776 1432 l 776 1433 l 777 1433 l 777 1434 l 777 1435 l 777 1436 l 778 1436 l 778 1437 l 778 1438 l 778 1439 l 778 1440 l 779 1440 l 779 1441 l 779 1442 l 779 1443 l 779 1444 l 780 1444 l 780 1445 l 780 1446 l 781 1447 l 781 1448 l 781 1449 l 781 1450 l 782 1450 l 782 1451 l 782 1452 l 782 1453 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 778 1484 793 1484 793 1449 778 1449 b c np 782 1453 m 782 1454 l 783 1454 l 783 1455 l 783 1456 l 783 1457 l 783 1458 l 784 1458 l 784 1459 l 784 1460 l 784 1461 l 784 1462 l 785 1462 l 785 1463 l 785 1464 l 785 1465 l 785 1466 l 786 1466 l 786 1467 l 786 1468 l 786 1469 l 786 1470 l 787 1471 l 787 1472 l 787 1473 l 787 1474 l 787 1475 l 788 1475 l 788 1476 l 788 1477 l 788 1478 l 788 1479 l 789 1480 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 785 1511 798 1511 798 1476 785 1476 b c np 789 1480 m 789 1481 l 789 1482 l 789 1483 l 790 1483 l 790 1484 l 790 1485 l 790 1486 l 790 1487 l 791 1487 l 791 1488 l 791 1489 l 791 1490 l 791 1491 l 791 1492 l 792 1492 l 792 1493 l 792 1494 l 792 1495 l 792 1496 l 792 1497 l 793 1497 l 793 1498 l 793 1499 l 793 1500 l 793 1501 l 793 1502 l 794 1502 l 794 1503 l 794 1504 l 794 1505 l 794 1506 l 794 1507 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 790 1538 803 1538 803 1503 790 1503 b c np 794 1507 m 795 1507 l 795 1508 l 795 1509 l 795 1510 l 795 1511 l 795 1512 l 796 1512 l 796 1513 l 796 1514 l 796 1515 l 796 1516 l 796 1517 l 797 1517 l 797 1518 l 797 1519 l 797 1520 l 797 1521 l 797 1522 l 798 1522 l 798 1523 l 798 1524 l 798 1525 l 798 1526 l 798 1527 l 798 1528 l 799 1528 l 799 1529 l 799 1530 l 799 1531 l 799 1532 l 799 1533 l 799 1534 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 795 1565 808 1565 808 1530 795 1530 b c np 799 1534 m 800 1534 l 800 1535 l 800 1536 l 800 1537 l 800 1538 l 800 1539 l 801 1539 l 801 1540 l 801 1541 l 801 1542 l 801 1543 l 801 1544 l 801 1545 l 802 1546 l 802 1547 l 802 1548 l 802 1549 l 802 1550 l 802 1551 l 802 1552 l 803 1552 l 803 1553 l 803 1554 l 803 1555 l 803 1556 l 803 1557 l 803 1558 l 804 1558 l 804 1559 l 804 1560 l 804 1561 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 800 1592 812 1592 812 1557 800 1557 b c np 804 1561 m 804 1562 l 804 1563 l 804 1564 l 805 1565 l 805 1566 l 805 1567 l 805 1568 l 805 1569 l 806 1570 l 806 1571 l 806 1572 l 806 1573 l 806 1574 l 806 1575 l 806 1576 l 806 1577 l 807 1577 l 807 1578 l 807 1579 l 807 1580 l 807 1581 l 807 1582 l 807 1583 l 808 1584 l 808 1585 l 808 1586 l 808 1587 l 808 1588 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 804 1619 816 1619 816 1584 804 1584 b c np 808 1588 m 808 1589 l 808 1590 l 809 1591 l 809 1592 l 809 1593 l 809 1594 l 809 1595 l 809 1596 l 809 1597 l 809 1598 l 810 1598 l 810 1599 l 810 1600 l 810 1601 l 810 1602 l 810 1603 l 810 1604 l 810 1605 l 810 1606 l 811 1606 l 811 1607 l 811 1608 l 811 1609 l 811 1610 l 811 1611 l 811 1612 l 811 1613 l 811 1614 l 812 1615 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 808 1646 819 1646 819 1611 808 1611 b c np 812 1615 m 812 1616 l 812 1617 l 812 1618 l 812 1619 l 812 1620 l 812 1621 l 812 1622 l 813 1623 l 813 1624 l 813 1625 l 813 1626 l 813 1627 l 813 1628 l 813 1629 l 813 1630 l 814 1630 l 814 1631 l 814 1632 l 814 1633 l 814 1634 l 814 1635 l 814 1636 l 814 1637 l 815 1638 l 815 1639 l 815 1640 l 815 1641 l 815 1642 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 811 1674 822 1674 822 1638 811 1638 b c np 815 1642 m 815 1643 l 815 1644 l 815 1645 l 815 1646 l 815 1647 l 816 1647 l 816 1648 l 816 1649 l 816 1650 l 816 1651 l 816 1652 l 816 1653 l 816 1654 l 816 1655 l 816 1656 l 817 1656 l 817 1657 l 817 1658 l 817 1659 l 817 1660 l 817 1661 l 817 1662 l 817 1663 l 817 1664 l 817 1665 l 817 1666 l 818 1666 l 818 1667 l 818 1668 l 818 1669 l 818 1670 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 814 1701 825 1701 825 1666 814 1666 b c np 818 1670 m 818 1671 l 818 1672 l 818 1673 l 818 1674 l 818 1675 l 819 1675 l 819 1676 l 819 1677 l 819 1678 l 819 1679 l 819 1680 l 819 1681 l 819 1682 l 819 1683 l 819 1684 l 820 1685 l 820 1686 l 820 1687 l 820 1688 l 820 1689 l 820 1690 l 820 1691 l 820 1692 l 820 1693 l 820 1694 l 820 1695 l 820 1696 l 821 1696 l 821 1697 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 817 1728 827 1728 827 1693 817 1693 b c np 821 1697 m 821 1698 l 821 1699 l 821 1700 l 821 1701 l 821 1702 l 821 1703 l 821 1704 l 821 1705 l 822 1706 l 822 1707 l 822 1708 l 822 1709 l 822 1710 l 822 1711 l 822 1712 l 822 1713 l 822 1714 l 822 1715 l 823 1715 l 823 1716 l 823 1717 l 823 1718 l 823 1719 l 823 1720 l 823 1721 l 823 1722 l 823 1723 l 823 1724 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 819 1755 830 1755 830 1720 819 1720 b c np 823 1724 m 823 1725 l 823 1726 l 823 1727 l 823 1728 l 824 1729 l 824 1730 l 824 1731 l 824 1732 l 824 1733 l 824 1734 l 824 1735 l 824 1736 l 824 1737 l 824 1738 l 825 1738 l 825 1739 l 825 1740 l 825 1741 l 825 1742 l 825 1743 l 825 1744 l 825 1745 l 825 1746 l 825 1747 l 825 1748 l 825 1749 l 825 1750 l 825 1751 l 826 1751 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 822 1782 831 1782 831 1747 822 1747 b c np 826 1751 m 826 1752 l 826 1753 l 826 1754 l 826 1755 l 826 1756 l 826 1757 l 826 1758 l 826 1759 l 826 1760 l 826 1761 l 826 1762 l 826 1763 l 827 1764 l 827 1765 l 827 1766 l 827 1767 l 827 1768 l 827 1769 l 827 1770 l 827 1771 l 827 1772 l 827 1773 l 827 1774 l 827 1775 l 827 1776 l 827 1777 l 827 1778 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 823 1810 833 1810 833 1774 823 1774 b c np 827 1778 m 827 1779 l 828 1779 l 828 1780 l 828 1781 l 828 1782 l 828 1783 l 828 1784 l 828 1785 l 828 1786 l 828 1787 l 828 1788 l 828 1789 l 828 1790 l 828 1791 l 829 1791 l 829 1792 l 829 1793 l 829 1794 l 829 1795 l 829 1796 l 829 1797 l 829 1798 l 829 1799 l 829 1800 l 829 1801 l 829 1802 l 829 1803 l 829 1804 l 829 1805 l 829 1806 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 825 1837 835 1837 835 1802 825 1802 b c np 829 1806 m 830 1806 l 830 1807 l 830 1808 l 830 1809 l 830 1810 l 830 1811 l 830 1812 l 830 1813 l 830 1814 l 830 1815 l 830 1816 l 830 1817 l 831 1818 l 831 1819 l 831 1820 l 831 1821 l 831 1822 l 831 1823 l 831 1824 l 831 1825 l 831 1826 l 831 1827 l 831 1828 l 831 1829 l 831 1830 l 831 1831 l 831 1832 l 831 1833 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 827 1864 837 1864 837 1829 827 1829 b c np 831 1833 m 831 1834 l 832 1835 l 832 1836 l 832 1837 l 832 1838 l 832 1839 l 832 1840 l 832 1841 l 832 1842 l 832 1843 l 832 1844 l 832 1845 l 832 1846 l 832 1847 l 832 1848 l 832 1849 l 832 1850 l 832 1851 l 832 1852 l 833 1852 l 833 1853 l 833 1854 l 833 1855 l 833 1856 l 833 1857 l 833 1858 l 833 1859 l 833 1860 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 829 1891 839 1891 839 1856 829 1856 b c np 833 1860 m 833 1861 l 833 1862 l 833 1863 l 833 1864 l 833 1865 l 833 1866 l 833 1867 l 834 1867 l 834 1868 l 834 1869 l 834 1870 l 834 1871 l 834 1872 l 834 1873 l 834 1874 l 834 1875 l 834 1876 l 834 1877 l 834 1878 l 834 1879 l 834 1880 l 834 1881 l 834 1882 l 834 1883 l 834 1884 l 834 1885 l 834 1886 l 835 1886 l 835 1887 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 831 1918 840 1918 840 1883 831 1883 b c np 835 1887 m 835 1888 l 835 1889 l 835 1890 l 835 1891 l 835 1892 l 835 1893 l 835 1894 l 835 1895 l 835 1896 l 835 1897 l 835 1898 l 835 1899 l 835 1900 l 835 1901 l 835 1902 l 835 1903 l 835 1904 l 835 1905 l 836 1905 l 836 1906 l 836 1907 l 836 1908 l 836 1909 l 836 1910 l 836 1911 l 836 1912 l 836 1913 l 836 1914 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 832 1945 841 1945 841 1910 832 1910 b c np 836 1914 m 836 1915 l 836 1916 l 836 1917 l 836 1918 l 836 1919 l 836 1920 l 836 1921 l 836 1922 l 836 1923 l 836 1924 l 837 1924 l 837 1925 l 837 1926 l 837 1927 l 837 1928 l 837 1929 l 837 1930 l 837 1931 l 837 1932 l 837 1933 l 837 1934 l 837 1935 l 837 1936 l 837 1937 l 837 1938 l 837 1939 l 837 1940 l 837 1941 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 833 1972 843 1972 843 1937 833 1937 b c np 837 1941 m 837 1942 l 837 1943 l 838 1943 l 838 1944 l 838 1945 l 838 1946 l 838 1947 l 838 1948 l 838 1949 l 838 1950 l 838 1951 l 838 1952 l 838 1953 l 838 1954 l 838 1955 l 838 1956 l 838 1957 l 838 1958 l 838 1959 l 838 1960 l 838 1961 l 838 1962 l 838 1963 l 838 1964 l 838 1965 l 838 1966 l 839 1966 l 839 1967 l 839 1968 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 835 2000 844 2000 844 1964 835 1964 b c np 839 1968 m 839 1969 l 839 1970 l 839 1971 l 839 1972 l 839 1973 l 839 1974 l 839 1975 l 839 1976 l 839 1977 l 839 1978 l 839 1979 l 839 1980 l 839 1981 l 839 1982 l 839 1983 l 839 1984 l 839 1985 l 840 1986 l 840 1987 l 840 1988 l 840 1989 l 840 1990 l 840 1991 l 840 1992 l 840 1993 l 840 1994 l 840 1995 l 840 1996 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 836 2027 845 2027 845 1992 836 1992 b c np 840 1996 m 840 1997 l 840 1998 l 840 1999 l 840 2000 l 840 2001 l 840 2002 l 840 2003 l 840 2004 l 840 2005 l 840 2006 l 840 2007 l 840 2008 l 841 2008 l 841 2009 l 841 2010 l 841 2011 l 841 2012 l 841 2013 l 841 2014 l 841 2015 l 841 2016 l 841 2017 l 841 2018 l 841 2019 l 841 2020 l 841 2021 l 841 2022 l 841 2023 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 837 2054 846 2054 846 2019 837 2019 b c np 841 2023 m 841 2024 l 841 2025 l 841 2026 l 841 2027 l 841 2028 l 841 2029 l 841 2030 l 841 2031 l 841 2032 l 841 2033 l 841 2034 l 842 2034 l 842 2035 l 842 2036 l 842 2037 l 842 2038 l 842 2039 l 842 2040 l 842 2041 l 842 2042 l 842 2043 l 842 2044 l 842 2045 l 842 2046 l 842 2047 l 842 2048 l 842 2049 l 842 2050 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 838 2081 847 2081 847 2046 838 2046 b c np 842 2050 m 842 2051 l 842 2052 l 842 2053 l 842 2054 l 842 2055 l 842 2056 l 842 2057 l 843 2057 l 843 2058 l 843 2059 l 843 2060 l 843 2061 l 843 2062 l 843 2063 l 843 2064 l 843 2065 l 843 2066 l 843 2067 l 843 2068 l 843 2069 l 843 2070 l 843 2071 l 843 2072 l 843 2073 l 843 2074 l 843 2075 l 843 2076 l 843 2077 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 839 2108 848 2108 848 2073 839 2073 b c np 843 2077 m 843 2078 l 843 2079 l 843 2080 l 843 2081 l 843 2082 l 843 2083 l 843 2084 l 843 2085 l 843 2086 l 843 2087 l 844 2088 l 844 2089 l 844 2090 l 844 2091 l 844 2092 l 844 2093 l 844 2094 l 844 2095 l 844 2096 l 844 2097 l 844 2098 l 844 2099 l 844 2100 l 844 2101 l 844 2102 l 844 2103 l 844 2104 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 840 2136 849 2136 849 2100 840 2100 b c np 844 2104 m 844 2105 l 844 2106 l 844 2107 l 844 2108 l 844 2109 l 844 2110 l 844 2111 l 844 2112 l 844 2113 l 844 2114 l 844 2115 l 844 2116 l 844 2117 l 844 2118 l 845 2118 l 845 2119 l 845 2120 l 845 2121 l 845 2122 l 845 2123 l 845 2124 l 845 2125 l 845 2126 l 845 2127 l 845 2128 l 845 2129 l 845 2130 l 845 2131 l 845 2132 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 841 2162 850 2162 850 2128 841 2128 b c np 845 2132 m 845 2133 l 845 2134 l 845 2135 l 845 2136 l 845 2137 l 845 2138 l 845 2139 l 845 2140 l 845 2141 l 845 2142 l 845 2143 l 845 2144 l 845 2145 l 845 2146 l 845 2147 l 845 2148 l 846 2149 l 846 2150 l 846 2151 l 846 2152 l 846 2153 l 846 2154 l 846 2155 l 846 2156 l 846 2157 l 846 2158 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 842 2190 851 2190 851 2154 842 2154 b c np 846 2158 m 846 2159 l 846 2160 l 846 2161 l 846 2162 l 846 2163 l 846 2164 l 846 2165 l 846 2166 l 846 2167 l 846 2168 l 846 2169 l 846 2170 l 846 2171 l 846 2172 l 846 2173 l 846 2174 l 846 2175 l 846 2176 l 846 2177 l 846 2178 l 846 2179 l 847 2179 l 847 2180 l 847 2181 l 847 2182 l 847 2183 l 847 2184 l 847 2185 l 847 2186 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 843 2217 852 2217 852 2182 843 2182 b c np 847 2186 m 847 2187 l 847 2188 l 847 2189 l 847 2190 l 847 2191 l 847 2192 l 847 2193 l 847 2194 l 847 2195 l 847 2196 l 847 2197 l 847 2198 l 847 2199 l 847 2200 l 847 2201 l 847 2202 l 847 2203 l 847 2204 l 847 2205 l 847 2206 l 847 2207 l 847 2208 l 847 2209 l 848 2209 l 848 2210 l 848 2211 l 848 2212 l 848 2213 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 844 2244 852 2244 852 2209 844 2209 b c np 848 2213 m 848 2214 l 848 2215 l 848 2216 l 848 2217 l 848 2218 l 848 2219 l 848 2220 l 848 2221 l 848 2222 l 848 2223 l 848 2224 l 848 2225 l 848 2226 l 848 2227 l 848 2228 l 848 2229 l 848 2230 l 848 2231 l 848 2232 l 848 2233 l 848 2234 l 848 2235 l 848 2236 l 848 2237 l 848 2238 l 848 2239 l 848 2240 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 844 2271 853 2271 853 2236 844 2236 b c np 848 2240 m 848 2241 l 848 2242 l 848 2243 l 848 2244 l 848 2245 l 848 2246 l 848 2247 l 849 2248 l 849 2249 l 849 2250 l 849 2251 l 849 2252 l 849 2253 l 849 2254 l 849 2255 l 849 2256 l 849 2257 l 849 2258 l 849 2259 l 849 2260 l 849 2261 l 849 2262 l 849 2263 l 849 2264 l 849 2265 l 849 2266 l 849 2267 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 845 2298 854 2298 854 2263 845 2263 b c np 849 2267 m 849 2268 l 849 2269 l 849 2270 l 849 2271 l 849 2272 l 849 2273 l 849 2274 l 849 2275 l 849 2276 l 849 2277 l 849 2278 l 849 2279 l 849 2280 l 849 2281 l 849 2282 l 849 2283 l 849 2284 l 849 2285 l 850 2286 l 850 2287 l 850 2288 l 850 2289 l 850 2290 l 850 2291 l 850 2292 l 850 2293 l 850 2294 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 846 2313 854 2313 854 2290 846 2290 b c np 850 2294 m 850 2295 l 850 2296 l 850 2297 l 850 2298 l 850 2299 l 850 2300 l 850 2301 l 850 2302 l 850 2303 l 850 2304 l 850 2305 l 850 2306 l 850 2307 l 850 2308 l 850 2309 l 850 2308 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1584 2014 1594 2014 1594 2004 1584 2004 b c np 1590 2010 m 1589 2010 l 1589 2009 l 1588 2009 l 1588 2008 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1552 2012 1592 2012 1592 1979 1552 1979 b c np 1588 2008 m 1587 2008 l 1587 2007 l 1586 2007 l 1585 2007 l 1585 2006 l 1584 2006 l 1584 2005 l 1583 2005 l 1583 2004 l 1582 2004 l 1582 2003 l 1581 2003 l 1580 2003 l 1580 2002 l 1579 2002 l 1579 2001 l 1578 2001 l 1578 2000 l 1577 2000 l 1576 1999 l 1575 1999 l 1575 1998 l 1574 1998 l 1574 1997 l 1573 1997 l 1572 1996 l 1571 1996 l 1571 1995 l 1570 1995 l 1570 1994 l 1569 1994 l 1569 1993 l 1568 1993 l 1567 1992 l 1566 1992 l 1566 1991 l 1565 1991 l 1565 1990 l 1564 1990 l 1563 1989 l 1562 1989 l 1562 1988 l 1561 1988 l 1561 1987 l 1560 1987 l 1560 1986 l 1559 1986 l 1559 1985 l 1558 1985 l 1557 1985 l 1557 1984 l 1556 1984 l 1556 1983 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1516 1987 1560 1987 1560 1951 1516 1951 b c np 1556 1983 m 1555 1983 l 1554 1982 l 1553 1981 l 1552 1981 l 1552 1980 l 1551 1980 l 1551 1979 l 1550 1979 l 1550 1978 l 1549 1978 l 1548 1977 l 1547 1977 l 1547 1976 l 1546 1976 l 1546 1975 l 1545 1975 l 1544 1974 l 1543 1974 l 1543 1973 l 1542 1973 l 1542 1972 l 1541 1972 l 1540 1971 l 1540 1970 l 1539 1970 l 1538 1970 l 1538 1969 l 1537 1969 l 1537 1968 l 1536 1968 l 1535 1967 l 1534 1967 l 1534 1966 l 1533 1966 l 1533 1965 l 1532 1965 l 1531 1964 l 1530 1964 l 1530 1963 l 1529 1963 l 1529 1962 l 1528 1962 l 1528 1961 l 1527 1961 l 1526 1960 l 1525 1959 l 1524 1959 l 1524 1958 l 1523 1958 l 1522 1957 l 1521 1956 l 1520 1956 l 1520 1955 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1481 1959 1524 1959 1524 1924 1481 1924 b c np 1520 1955 m 1519 1955 l 1519 1954 l 1518 1954 l 1518 1953 l 1517 1953 l 1516 1952 l 1515 1952 l 1515 1951 l 1514 1951 l 1513 1950 l 1512 1949 l 1511 1949 l 1511 1948 l 1510 1948 l 1510 1947 l 1509 1947 l 1508 1947 l 1508 1946 l 1507 1946 l 1507 1945 l 1506 1945 l 1506 1944 l 1505 1944 l 1504 1943 l 1503 1943 l 1503 1942 l 1502 1942 l 1502 1941 l 1501 1941 l 1500 1940 l 1499 1939 l 1498 1939 l 1498 1938 l 1497 1938 l 1496 1937 l 1495 1936 l 1494 1935 l 1493 1935 l 1493 1934 l 1492 1934 l 1492 1933 l 1491 1933 l 1490 1932 l 1489 1932 l 1489 1931 l 1488 1931 l 1488 1930 l 1487 1930 l 1486 1929 l 1485 1928 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1445 1932 1489 1932 1489 1896 1445 1896 b c np 1485 1928 m 1484 1928 l 1484 1927 l 1483 1927 l 1483 1926 l 1482 1926 l 1481 1925 l 1480 1925 l 1480 1924 l 1479 1924 l 1479 1923 l 1478 1923 l 1477 1922 l 1476 1921 l 1475 1921 l 1475 1920 l 1474 1920 l 1474 1919 l 1473 1919 l 1472 1918 l 1471 1918 l 1471 1917 l 1470 1917 l 1470 1916 l 1469 1916 l 1468 1915 l 1467 1914 l 1466 1914 l 1466 1913 l 1465 1913 l 1465 1912 l 1464 1912 l 1463 1911 l 1462 1911 l 1462 1910 l 1461 1910 l 1461 1909 l 1460 1909 l 1460 1908 l 1459 1908 l 1458 1908 l 1458 1907 l 1457 1907 l 1457 1906 l 1456 1906 l 1455 1905 l 1454 1904 l 1453 1904 l 1453 1903 l 1452 1903 l 1452 1902 l 1451 1902 l 1450 1901 l 1449 1900 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1409 1904 1453 1904 1453 1869 1409 1869 b c np 1449 1900 m 1448 1899 l 1447 1899 l 1447 1898 l 1446 1898 l 1445 1897 l 1444 1897 l 1444 1896 l 1443 1896 l 1443 1895 l 1442 1895 l 1442 1894 l 1441 1894 l 1440 1893 l 1439 1893 l 1439 1892 l 1438 1892 l 1437 1891 l 1436 1890 l 1435 1890 l 1435 1889 l 1434 1889 l 1434 1888 l 1433 1888 l 1432 1888 l 1432 1887 l 1431 1887 l 1431 1886 l 1430 1886 l 1430 1885 l 1429 1885 l 1428 1885 l 1428 1884 l 1427 1884 l 1427 1883 l 1426 1883 l 1425 1882 l 1424 1881 l 1423 1880 l 1422 1880 l 1421 1879 l 1420 1878 l 1419 1877 l 1418 1877 l 1418 1876 l 1417 1876 l 1417 1875 l 1416 1875 l 1415 1874 l 1414 1874 l 1414 1873 l 1413 1873 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1373 1877 1417 1877 1417 1841 1373 1841 b c np 1413 1873 m 1413 1872 l 1412 1872 l 1411 1872 l 1411 1871 l 1410 1871 l 1410 1870 l 1409 1870 l 1409 1869 l 1408 1869 l 1408 1868 l 1407 1868 l 1406 1867 l 1405 1867 l 1405 1866 l 1404 1866 l 1404 1865 l 1403 1865 l 1402 1864 l 1401 1864 l 1401 1863 l 1400 1863 l 1400 1862 l 1399 1862 l 1399 1861 l 1398 1861 l 1397 1861 l 1397 1860 l 1396 1860 l 1396 1859 l 1395 1859 l 1394 1858 l 1393 1857 l 1392 1856 l 1391 1856 l 1391 1855 l 1390 1855 l 1390 1854 l 1389 1854 l 1388 1854 l 1388 1853 l 1387 1853 l 1387 1852 l 1386 1852 l 1386 1851 l 1385 1851 l 1384 1851 l 1384 1850 l 1383 1850 l 1383 1849 l 1382 1849 l 1381 1848 l 1380 1848 l 1380 1847 l 1379 1847 l 1379 1846 l 1378 1846 l 1377 1845 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1337 1849 1381 1849 1381 1813 1337 1813 b c np 1377 1845 m 1376 1844 l 1375 1843 l 1374 1843 l 1374 1842 l 1373 1842 l 1372 1841 l 1371 1841 l 1371 1840 l 1370 1840 l 1370 1839 l 1369 1839 l 1369 1838 l 1368 1838 l 1367 1838 l 1367 1837 l 1366 1837 l 1366 1836 l 1365 1836 l 1365 1835 l 1364 1835 l 1364 1834 l 1363 1834 l 1362 1834 l 1362 1833 l 1361 1833 l 1361 1832 l 1360 1832 l 1359 1831 l 1358 1830 l 1357 1830 l 1357 1829 l 1356 1829 l 1355 1828 l 1354 1827 l 1353 1826 l 1352 1826 l 1352 1825 l 1351 1825 l 1351 1824 l 1350 1824 l 1349 1823 l 1348 1823 l 1348 1822 l 1347 1822 l 1347 1821 l 1346 1821 l 1345 1821 l 1345 1820 l 1344 1819 l 1343 1819 l 1343 1818 l 1342 1818 l 1342 1817 l 1341 1817 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1301 1821 1345 1821 1345 1786 1301 1786 b c np 1341 1817 m 1340 1817 l 1340 1816 l 1339 1816 l 1339 1815 l 1338 1815 l 1337 1814 l 1336 1814 l 1336 1813 l 1335 1813 l 1335 1812 l 1334 1812 l 1333 1811 l 1333 1810 l 1332 1810 l 1331 1810 l 1331 1809 l 1330 1809 l 1330 1808 l 1329 1808 l 1328 1807 l 1327 1807 l 1327 1806 l 1326 1806 l 1326 1805 l 1325 1805 l 1324 1804 l 1323 1803 l 1322 1803 l 1322 1802 l 1321 1802 l 1321 1801 l 1320 1801 l 1319 1800 l 1318 1799 l 1317 1799 l 1317 1798 l 1316 1798 l 1316 1797 l 1315 1797 l 1314 1797 l 1314 1796 l 1313 1796 l 1313 1795 l 1312 1795 l 1312 1794 l 1311 1794 l 1310 1794 l 1310 1793 l 1309 1793 l 1309 1792 l 1308 1792 l 1307 1791 l 1306 1790 l 1305 1790 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1265 1794 1309 1794 1309 1758 1265 1758 b c np 1305 1790 m 1305 1789 l 1304 1789 l 1303 1788 l 1302 1788 l 1302 1787 l 1301 1787 l 1301 1786 l 1300 1786 l 1300 1785 l 1299 1785 l 1298 1784 l 1297 1784 l 1297 1783 l 1296 1783 l 1296 1782 l 1295 1782 l 1294 1781 l 1293 1781 l 1293 1780 l 1292 1780 l 1292 1779 l 1291 1779 l 1290 1778 l 1290 1777 l 1289 1777 l 1288 1777 l 1288 1776 l 1287 1776 l 1287 1775 l 1286 1775 l 1285 1774 l 1284 1774 l 1284 1773 l 1283 1773 l 1283 1772 l 1282 1772 l 1281 1771 l 1280 1771 l 1280 1770 l 1279 1770 l 1279 1769 l 1278 1769 l 1278 1768 l 1277 1768 l 1276 1768 l 1276 1767 l 1275 1767 l 1275 1766 l 1274 1766 l 1273 1765 l 1272 1764 l 1271 1764 l 1271 1763 l 1270 1763 l 1269 1762 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1229 1766 1273 1766 1273 1730 1229 1730 b c np 1269 1762 m 1268 1761 l 1267 1760 l 1266 1760 l 1266 1759 l 1265 1759 l 1265 1758 l 1264 1758 l 1263 1757 l 1262 1757 l 1262 1756 l 1261 1756 l 1261 1755 l 1260 1755 l 1259 1755 l 1259 1754 l 1258 1754 l 1258 1753 l 1257 1753 l 1257 1752 l 1256 1752 l 1255 1751 l 1254 1751 l 1254 1750 l 1253 1750 l 1253 1749 l 1252 1749 l 1252 1748 l 1251 1748 l 1250 1748 l 1250 1747 l 1249 1747 l 1249 1746 l 1248 1746 l 1247 1745 l 1246 1745 l 1246 1744 l 1245 1744 l 1245 1743 l 1244 1743 l 1244 1742 l 1243 1742 l 1242 1741 l 1241 1741 l 1241 1740 l 1240 1740 l 1240 1739 l 1239 1739 l 1238 1738 l 1237 1738 l 1237 1737 l 1236 1737 l 1236 1736 l 1235 1736 l 1234 1735 l 1233 1735 l 1233 1734 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1192 1738 1237 1738 1237 1702 1192 1702 b c np 1233 1734 m 1232 1734 l 1232 1733 l 1231 1733 l 1230 1733 l 1230 1732 l 1229 1732 l 1229 1731 l 1228 1731 l 1228 1730 l 1227 1730 l 1226 1730 l 1226 1729 l 1225 1729 l 1225 1728 l 1224 1728 l 1224 1727 l 1223 1727 l 1223 1726 l 1222 1726 l 1221 1726 l 1221 1725 l 1220 1725 l 1220 1724 l 1219 1724 l 1218 1723 l 1217 1723 l 1217 1722 l 1216 1722 l 1216 1721 l 1215 1721 l 1214 1720 l 1213 1720 l 1213 1719 l 1212 1719 l 1212 1718 l 1211 1718 l 1211 1717 l 1210 1717 l 1209 1716 l 1208 1716 l 1208 1715 l 1207 1715 l 1207 1714 l 1206 1714 l 1205 1713 l 1204 1713 l 1204 1712 l 1203 1712 l 1203 1711 l 1202 1711 l 1201 1710 l 1200 1709 l 1199 1709 l 1199 1708 l 1198 1708 l 1198 1707 l 1197 1707 l 1196 1706 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1156 1710 1200 1710 1200 1675 1156 1675 b c np 1196 1706 m 1195 1706 l 1195 1705 l 1194 1705 l 1194 1704 l 1193 1704 l 1192 1704 l 1192 1703 l 1191 1702 l 1190 1702 l 1190 1701 l 1189 1701 l 1188 1700 l 1187 1700 l 1187 1699 l 1186 1699 l 1186 1698 l 1185 1698 l 1185 1697 l 1184 1697 l 1183 1697 l 1183 1696 l 1182 1696 l 1182 1695 l 1181 1695 l 1180 1695 l 1180 1694 l 1179 1693 l 1178 1693 l 1178 1692 l 1177 1692 l 1176 1691 l 1175 1691 l 1175 1690 l 1174 1690 l 1174 1689 l 1173 1689 l 1172 1688 l 1171 1688 l 1171 1687 l 1170 1687 l 1169 1686 l 1168 1686 l 1168 1685 l 1167 1685 l 1167 1684 l 1166 1684 l 1165 1683 l 1164 1682 l 1163 1682 l 1163 1681 l 1162 1681 l 1162 1680 l 1161 1680 l 1160 1679 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1119 1683 1164 1683 1164 1647 1119 1647 b c np 1160 1679 m 1159 1679 l 1159 1678 l 1158 1678 l 1158 1677 l 1157 1677 l 1157 1676 l 1156 1676 l 1155 1675 l 1154 1675 l 1154 1674 l 1153 1674 l 1153 1673 l 1152 1673 l 1151 1673 l 1151 1672 l 1150 1672 l 1150 1671 l 1149 1671 l 1149 1670 l 1148 1670 l 1147 1669 l 1146 1669 l 1146 1668 l 1145 1668 l 1145 1667 l 1144 1667 l 1144 1666 l 1143 1666 l 1142 1666 l 1142 1665 l 1141 1665 l 1141 1664 l 1140 1664 l 1139 1663 l 1138 1663 l 1138 1662 l 1137 1662 l 1136 1661 l 1135 1660 l 1134 1660 l 1134 1659 l 1133 1659 l 1133 1658 l 1132 1658 l 1131 1657 l 1130 1657 l 1130 1656 l 1129 1656 l 1129 1655 l 1128 1655 l 1127 1655 l 1127 1654 l 1126 1654 l 1126 1653 l 1125 1653 l 1124 1652 l 1123 1651 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1081 1655 1127 1655 1127 1619 1081 1619 b c np 1123 1651 m 1122 1651 l 1122 1650 l 1121 1650 l 1121 1649 l 1120 1649 l 1119 1649 l 1119 1648 l 1118 1648 l 1118 1647 l 1117 1647 l 1116 1646 l 1115 1645 l 1114 1645 l 1114 1644 l 1113 1644 l 1113 1643 l 1112 1643 l 1111 1642 l 1110 1642 l 1110 1641 l 1109 1641 l 1109 1640 l 1108 1640 l 1107 1639 l 1106 1639 l 1106 1638 l 1105 1638 l 1104 1637 l 1103 1637 l 1103 1636 l 1102 1636 l 1102 1635 l 1101 1635 l 1101 1634 l 1100 1634 l 1099 1633 l 1098 1633 l 1098 1632 l 1097 1632 l 1096 1631 l 1095 1631 l 1095 1630 l 1094 1630 l 1093 1629 l 1092 1628 l 1091 1628 l 1091 1627 l 1090 1627 l 1090 1626 l 1089 1626 l 1088 1625 l 1087 1625 l 1087 1624 l 1086 1624 l 1085 1623 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1044 1627 1089 1627 1089 1592 1044 1592 b c np 1085 1623 m 1084 1622 l 1083 1622 l 1083 1621 l 1082 1621 l 1081 1620 l 1080 1620 l 1080 1619 l 1079 1619 l 1079 1618 l 1078 1618 l 1077 1617 l 1076 1616 l 1075 1616 l 1075 1615 l 1074 1615 l 1073 1614 l 1072 1613 l 1071 1613 l 1071 1612 l 1070 1612 l 1069 1611 l 1068 1610 l 1067 1610 l 1067 1609 l 1066 1609 l 1065 1608 l 1064 1608 l 1064 1607 l 1063 1607 l 1062 1606 l 1061 1606 l 1061 1605 l 1060 1605 l 1060 1604 l 1059 1604 l 1058 1603 l 1057 1602 l 1056 1602 l 1056 1601 l 1055 1601 l 1054 1600 l 1053 1600 l 1053 1599 l 1052 1599 l 1052 1598 l 1051 1598 l 1050 1597 l 1049 1596 l 1048 1596 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1006 1600 1052 1600 1052 1564 1006 1564 b c np 1048 1596 m 1048 1595 l 1047 1595 l 1046 1594 l 1045 1594 l 1045 1593 l 1044 1593 l 1044 1592 l 1043 1592 l 1042 1591 l 1041 1591 l 1041 1590 l 1040 1590 l 1040 1589 l 1039 1589 l 1038 1589 l 1038 1588 l 1037 1588 l 1037 1587 l 1036 1587 l 1035 1587 l 1035 1586 l 1034 1586 l 1034 1585 l 1033 1585 l 1033 1584 l 1032 1584 l 1031 1584 l 1031 1583 l 1030 1583 l 1030 1582 l 1029 1582 l 1028 1582 l 1028 1581 l 1027 1581 l 1027 1580 l 1026 1580 l 1025 1579 l 1024 1578 l 1023 1578 l 1023 1577 l 1022 1577 l 1022 1576 l 1021 1576 l 1020 1576 l 1020 1575 l 1019 1575 l 1019 1574 l 1018 1574 l 1018 1573 l 1017 1573 l 1016 1573 l 1016 1572 l 1015 1572 l 1015 1571 l 1014 1571 l 1013 1571 l 1013 1570 l 1012 1570 l 1012 1569 l 1011 1569 l 1010 1568 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 967 1572 1014 1572 1014 1536 967 1536 b c np 1010 1568 m 1009 1567 l 1008 1567 l 1008 1566 l 1007 1566 l 1007 1565 l 1006 1565 l 1005 1565 l 1005 1564 l 1004 1564 l 1004 1563 l 1003 1563 l 1002 1562 l 1001 1562 l 1001 1561 l 1000 1561 l 1000 1560 l 999 1560 l 998 1559 l 997 1558 l 996 1558 l 995 1557 l 994 1557 l 994 1556 l 993 1556 l 992 1555 l 991 1554 l 990 1554 l 990 1553 l 989 1553 l 988 1552 l 987 1552 l 987 1551 l 986 1551 l 986 1550 l 985 1550 l 984 1550 l 984 1549 l 983 1549 l 983 1548 l 982 1548 l 982 1547 l 981 1547 l 980 1547 l 980 1546 l 979 1546 l 979 1545 l 978 1545 l 977 1545 l 977 1544 l 976 1543 l 975 1543 l 975 1542 l 974 1542 l 973 1541 l 972 1541 l 971 1540 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 928 1544 975 1544 975 1508 928 1508 b c np 971 1540 m 970 1539 l 969 1539 l 969 1538 l 968 1538 l 967 1537 l 966 1536 l 965 1536 l 965 1535 l 964 1535 l 964 1534 l 963 1534 l 962 1534 l 962 1533 l 961 1533 l 960 1532 l 959 1532 l 959 1531 l 958 1531 l 957 1530 l 956 1529 l 955 1529 l 954 1528 l 953 1527 l 952 1527 l 952 1526 l 951 1526 l 951 1525 l 950 1525 l 949 1525 l 949 1524 l 948 1524 l 948 1523 l 947 1523 l 946 1523 l 946 1522 l 945 1522 l 945 1521 l 944 1521 l 943 1520 l 942 1520 l 942 1519 l 941 1519 l 940 1518 l 939 1517 l 938 1517 l 938 1516 l 937 1516 l 936 1515 l 935 1515 l 935 1514 l 934 1514 l 933 1513 l 932 1512 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 888 1516 936 1516 936 1481 888 1481 b c np 932 1512 m 931 1512 l 931 1511 l 930 1511 l 929 1511 l 929 1510 l 928 1510 l 928 1509 l 927 1509 l 926 1508 l 925 1507 l 924 1507 l 924 1506 l 923 1506 l 922 1505 l 921 1505 l 920 1504 l 919 1503 l 918 1503 l 917 1502 l 917 1501 l 916 1501 l 915 1501 l 915 1500 l 914 1500 l 913 1499 l 912 1499 l 912 1498 l 911 1498 l 911 1497 l 910 1497 l 909 1496 l 908 1496 l 908 1495 l 907 1495 l 906 1494 l 905 1494 l 905 1493 l 904 1493 l 904 1492 l 903 1492 l 902 1492 l 902 1491 l 901 1491 l 901 1490 l 900 1490 l 899 1490 l 899 1489 l 898 1489 l 898 1488 l 897 1488 l 896 1488 l 896 1487 l 895 1487 l 895 1486 l 894 1486 l 893 1485 l 892 1485 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 847 1489 896 1489 896 1453 847 1453 b c np 892 1485 m 892 1484 l 891 1484 l 891 1483 l 890 1483 l 889 1483 l 889 1482 l 888 1482 l 888 1481 l 887 1481 l 886 1481 l 886 1480 l 885 1480 l 885 1479 l 884 1479 l 883 1479 l 883 1478 l 882 1478 l 882 1477 l 881 1477 l 880 1476 l 879 1476 l 878 1475 l 877 1474 l 876 1474 l 875 1473 l 874 1472 l 873 1472 l 872 1471 l 871 1471 l 871 1470 l 870 1470 l 869 1469 l 868 1469 l 868 1468 l 867 1468 l 867 1467 l 866 1467 l 865 1467 l 865 1466 l 864 1466 l 863 1465 l 862 1465 l 862 1464 l 861 1464 l 860 1463 l 859 1463 l 859 1462 l 858 1462 l 857 1461 l 856 1461 l 856 1460 l 855 1460 l 854 1459 l 853 1459 l 853 1458 l 852 1458 l 851 1457 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 805 1461 855 1461 855 1425 805 1425 b c np 851 1457 m 850 1457 l 850 1456 l 849 1456 l 848 1455 l 847 1455 l 847 1454 l 846 1454 l 845 1453 l 844 1453 l 844 1452 l 843 1452 l 842 1451 l 841 1451 l 841 1450 l 840 1450 l 840 1449 l 839 1449 l 838 1449 l 838 1448 l 837 1448 l 836 1447 l 835 1447 l 835 1446 l 834 1446 l 833 1445 l 832 1445 l 832 1444 l 831 1444 l 830 1443 l 829 1443 l 829 1442 l 828 1442 l 827 1441 l 826 1441 l 826 1440 l 825 1440 l 824 1439 l 823 1439 l 823 1438 l 822 1438 l 821 1438 l 821 1437 l 820 1437 l 820 1436 l 819 1436 l 818 1436 l 818 1435 l 817 1435 l 817 1434 l 816 1434 l 815 1434 l 815 1433 l 814 1433 l 813 1432 l 812 1432 l 812 1431 l 811 1431 l 810 1430 l 809 1430 l 809 1429 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 761 1433 813 1433 813 1398 761 1398 b c np 809 1429 m 808 1429 l 807 1428 l 806 1428 l 806 1427 l 805 1427 l 804 1427 l 804 1426 l 803 1426 l 802 1425 l 801 1425 l 801 1424 l 800 1424 l 799 1423 l 798 1423 l 798 1422 l 797 1422 l 796 1422 l 796 1421 l 795 1421 l 794 1420 l 793 1420 l 793 1419 l 792 1419 l 791 1418 l 790 1418 l 790 1417 l 789 1417 l 788 1416 l 787 1416 l 786 1415 l 785 1415 l 785 1414 l 784 1414 l 783 1413 l 782 1413 l 782 1412 l 781 1412 l 780 1411 l 779 1411 l 778 1410 l 777 1410 l 777 1409 l 776 1409 l 775 1408 l 774 1408 l 774 1407 l 773 1407 l 772 1406 l 771 1406 l 770 1405 l 769 1405 l 769 1404 l 768 1404 l 767 1403 l 766 1403 l 765 1402 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 714 1406 769 1406 769 1370 714 1370 b c np 765 1402 m 764 1402 l 764 1401 l 763 1401 l 762 1400 l 761 1400 l 761 1399 l 760 1399 l 759 1399 l 759 1398 l 758 1398 l 757 1397 l 756 1396 l 755 1396 l 754 1396 l 754 1395 l 753 1395 l 752 1394 l 751 1394 l 750 1393 l 749 1392 l 748 1392 l 748 1391 l 747 1391 l 746 1391 l 746 1390 l 745 1390 l 744 1390 l 744 1389 l 743 1389 l 742 1388 l 741 1388 l 741 1387 l 740 1387 l 739 1387 l 739 1386 l 738 1386 l 737 1385 l 736 1385 l 735 1384 l 734 1384 l 734 1383 l 733 1383 l 732 1382 l 731 1382 l 731 1381 l 730 1381 l 729 1381 l 729 1380 l 728 1380 l 727 1379 l 726 1379 l 725 1378 l 724 1378 l 724 1377 l 723 1377 l 722 1376 l 721 1376 l 720 1375 l 719 1375 l 718 1374 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 664 1378 722 1378 722 1343 664 1343 b c np 718 1374 m 717 1374 l 717 1373 l 716 1373 l 715 1372 l 714 1372 l 713 1371 l 712 1371 l 712 1370 l 711 1370 l 710 1370 l 709 1369 l 708 1369 l 708 1368 l 707 1368 l 706 1367 l 705 1367 l 704 1366 l 703 1366 l 703 1365 l 702 1365 l 701 1365 l 701 1364 l 700 1364 l 699 1364 l 699 1363 l 698 1363 l 697 1362 l 696 1362 l 695 1361 l 694 1361 l 693 1360 l 692 1360 l 692 1359 l 691 1359 l 690 1359 l 690 1358 l 689 1358 l 688 1357 l 687 1357 l 687 1356 l 686 1356 l 685 1356 l 684 1355 l 683 1355 l 683 1354 l 682 1354 l 681 1354 l 681 1353 l 680 1353 l 679 1353 l 679 1352 l 678 1352 l 677 1352 l 677 1351 l 676 1351 l 675 1350 l 674 1350 l 673 1349 l 672 1349 l 671 1348 l 670 1348 l 669 1347 l 668 1347 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 607 1351 672 1351 672 1315 607 1315 b c np 668 1347 m 667 1346 l 666 1346 l 666 1345 l 665 1345 l 664 1345 l 664 1344 l 663 1344 l 662 1344 l 662 1343 l 661 1343 l 660 1343 l 660 1342 l 659 1342 l 658 1341 l 657 1341 l 656 1340 l 655 1340 l 654 1339 l 653 1339 l 652 1339 l 652 1338 l 651 1338 l 650 1337 l 649 1337 l 648 1337 l 648 1336 l 647 1336 l 646 1336 l 646 1335 l 645 1335 l 644 1334 l 643 1334 l 642 1333 l 641 1333 l 640 1332 l 639 1332 l 638 1331 l 637 1331 l 636 1330 l 635 1330 l 634 1330 l 634 1329 l 633 1329 l 632 1329 l 632 1328 l 631 1328 l 630 1328 l 629 1327 l 628 1327 l 627 1326 l 626 1326 l 626 1325 l 625 1325 l 624 1325 l 624 1324 l 623 1324 l 622 1324 l 621 1323 l 620 1323 l 619 1322 l 618 1322 l 617 1322 l 617 1321 l 616 1321 l 615 1321 l 615 1320 l 614 1320 l 613 1320 l 612 1319 l 611 1319 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 547 1323 615 1323 615 1290 547 1290 b c np 611 1319 m 610 1318 l 609 1318 l 608 1317 l 607 1317 l 606 1317 l 606 1316 l 605 1316 l 604 1316 l 604 1315 l 603 1315 l 602 1315 l 601 1314 l 600 1314 l 599 1313 l 598 1313 l 597 1312 l 596 1312 l 595 1312 l 594 1311 l 593 1311 l 592 1310 l 591 1310 l 590 1310 l 590 1309 l 589 1309 l 588 1309 l 588 1308 l 587 1308 l 586 1308 l 586 1307 l 585 1307 l 584 1307 l 583 1306 l 582 1306 l 581 1305 l 580 1305 l 579 1305 l 578 1305 l 578 1304 l 577 1304 l 576 1304 l 575 1303 l 574 1303 l 573 1302 l 572 1302 l 571 1302 l 570 1301 l 569 1300 l 568 1300 l 567 1300 l 566 1299 l 565 1299 l 564 1299 l 564 1298 l 563 1298 l 562 1298 l 561 1297 l 560 1297 l 559 1297 l 558 1296 l 557 1296 l 556 1296 l 555 1295 l 554 1295 l 553 1294 l 552 1294 l 551 1294 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 547 1298 557 1298 557 1290 547 1290 b c np 551 1294 m 552 1294 l 553 1294 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 807 1971 860 1971 860 1605 807 1605 b c np 856 1967 m 855 1961 l 854 1953 l 853 1943 l 852 1933 l 850 1921 l 849 1909 l 847 1895 l 845 1880 l 843 1863 l 840 1844 l 838 1824 l 835 1802 l 832 1777 l 829 1750 l 825 1721 l 821 1688 l 817 1653 l 812 1614 l 811 1609 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 805 1615 817 1615 817 1603 805 1603 b c np 0 3599 5 5 811 1609 el f gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 787 1504 799 1504 799 1492 787 1492 b c np 0 3599 5 5 793 1498 el f gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 852 2001 864 2001 864 1963 852 1963 b c np 856 1967 m 856 1968 l 856 1969 l 856 1970 l 856 1971 l 856 1972 l 856 1973 l 857 1973 l 857 1974 l 857 1975 l 857 1976 l 857 1977 l 857 1978 l 857 1979 l 857 1980 l 858 1980 l 858 1981 l 858 1982 l 858 1983 l 858 1984 l 858 1985 l 858 1986 l 858 1987 l 858 1988 l 859 1988 l 859 1989 l 859 1990 l 859 1991 l 859 1992 l 859 1993 l 859 1994 l 859 1995 l 859 1996 l 859 1997 l 860 1997 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 856 2046 869 2046 869 1993 856 1993 b c np 860 1997 m 860 1998 l 860 1999 l 860 2000 l 860 2001 l 860 2002 l 860 2003 l 860 2004 l 860 2005 l 861 2005 l 861 2006 l 861 2007 l 861 2008 l 861 2009 l 861 2010 l 861 2011 l 861 2012 l 861 2013 l 862 2013 l 862 2014 l 862 2015 l 862 2016 l 862 2017 l 862 2018 l 862 2019 l 862 2020 l 862 2021 l 863 2022 l 863 2023 l 863 2024 l 863 2025 l 863 2026 l 863 2027 l 863 2028 l 863 2029 l 864 2030 l 864 2031 l 864 2032 l 864 2033 l 864 2034 l 864 2035 l 865 2035 l 865 2036 l 865 2037 l 865 2038 l 865 2039 l 865 2040 l 865 2041 l 865 2042 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 861 2109 878 2109 878 2038 861 2038 b c np 865 2042 m 865 2043 l 866 2043 l 866 2044 l 866 2045 l 866 2046 l 866 2047 l 866 2048 l 866 2049 l 866 2050 l 867 2051 l 867 2052 l 867 2053 l 867 2054 l 867 2055 l 867 2056 l 867 2057 l 867 2058 l 868 2059 l 868 2060 l 868 2061 l 868 2062 l 868 2063 l 868 2064 l 868 2065 l 868 2066 l 868 2067 l 869 2067 l 869 2068 l 869 2069 l 869 2070 l 869 2071 l 869 2072 l 869 2073 l 869 2074 l 869 2075 l 870 2075 l 870 2076 l 870 2077 l 870 2078 l 870 2079 l 870 2080 l 870 2081 l 870 2082 l 870 2083 l 871 2083 l 871 2084 l 871 2085 l 871 2086 l 871 2087 l 871 2088 l 871 2089 l 871 2090 l 872 2091 l 872 2092 l 872 2093 l 872 2094 l 872 2095 l 872 2096 l 872 2097 l 873 2098 l 873 2099 l 873 2100 l 873 2101 l 873 2102 l 873 2103 l 873 2104 l 873 2105 l 874 2105 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 870 2197 889 2197 889 2101 870 2101 b c np 874 2105 m 874 2106 l 874 2107 l 874 2108 l 874 2109 l 874 2110 l 874 2111 l 874 2112 l 875 2113 l 875 2114 l 875 2115 l 875 2116 l 875 2117 l 875 2118 l 875 2119 l 875 2120 l 876 2121 l 876 2122 l 876 2123 l 876 2124 l 876 2125 l 876 2126 l 876 2127 l 876 2128 l 877 2129 l 877 2130 l 877 2131 l 877 2132 l 877 2133 l 877 2134 l 877 2135 l 877 2136 l 878 2137 l 878 2138 l 878 2139 l 878 2140 l 878 2141 l 878 2142 l 878 2143 l 878 2144 l 879 2145 l 879 2146 l 879 2147 l 879 2148 l 879 2149 l 879 2150 l 879 2151 l 880 2152 l 880 2153 l 880 2154 l 880 2155 l 880 2156 l 880 2157 l 881 2158 l 881 2159 l 881 2160 l 881 2161 l 881 2162 l 881 2163 l 881 2164 l 881 2165 l 882 2166 l 882 2167 l 882 2169 l 882 2170 l 882 2171 l 882 2172 l 882 2173 l 882 2174 l 883 2175 l 883 2176 l 883 2177 l 883 2178 l 883 2179 l 883 2180 l 883 2181 l 883 2182 l 884 2183 l 884 2184 l 884 2185 l 884 2187 l 884 2188 l 884 2189 l 884 2190 l 885 2191 l 885 2192 l 885 2193 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 881 2323 905 2323 905 2189 881 2189 b c np 885 2193 m 885 2194 l 885 2196 l 885 2197 l 885 2198 l 886 2199 l 886 2200 l 886 2201 l 886 2203 l 886 2204 l 886 2205 l 886 2206 l 887 2207 l 887 2208 l 887 2210 l 887 2211 l 887 2212 l 887 2213 l 888 2214 l 888 2215 l 888 2217 l 888 2218 l 888 2219 l 888 2220 l 888 2221 l 889 2223 l 889 2224 l 889 2225 l 889 2227 l 889 2228 l 890 2229 l 890 2230 l 890 2232 l 890 2233 l 890 2234 l 890 2235 l 891 2237 l 891 2238 l 891 2239 l 891 2241 l 891 2242 l 891 2243 l 892 2244 l 892 2246 l 892 2247 l 892 2248 l 892 2250 l 892 2251 l 893 2252 l 893 2254 l 893 2255 l 893 2256 l 893 2258 l 893 2259 l 894 2260 l 894 2262 l 894 2263 l 894 2265 l 894 2266 l 895 2267 l 895 2269 l 895 2270 l 895 2272 l 895 2273 l 895 2275 l 896 2276 l 896 2277 l 896 2279 l 896 2280 l 896 2282 l 897 2283 l 897 2284 l 897 2286 l 897 2287 l 897 2289 l 898 2291 l 898 2292 l 898 2293 l 898 2295 l 898 2296 l 899 2298 l 899 2300 l 899 2301 l 899 2303 l 899 2304 l 900 2306 l 900 2307 l 900 2309 l 900 2310 l 900 2312 l 901 2313 l 901 2315 l 901 2316 l 901 2318 l 901 2319 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 897 2498 928 2498 928 2315 897 2315 b c np 901 2319 m 902 2321 l 902 2323 l 902 2324 l 902 2326 l 902 2327 l 903 2329 l 903 2331 l 903 2332 l 903 2334 l 903 2336 l 904 2337 l 904 2339 l 904 2341 l 904 2342 l 904 2344 l 905 2346 l 905 2348 l 905 2349 l 905 2351 l 906 2353 l 906 2354 l 906 2356 l 906 2358 l 907 2359 l 907 2361 l 907 2363 l 907 2365 l 907 2366 l 908 2368 l 908 2370 l 908 2372 l 908 2374 l 909 2375 l 909 2377 l 909 2379 l 909 2381 l 910 2383 l 910 2384 l 910 2386 l 910 2388 l 911 2390 l 911 2392 l 911 2394 l 911 2396 l 911 2398 l 912 2399 l 912 2401 l 912 2403 l 912 2405 l 913 2407 l 913 2409 l 913 2411 l 913 2413 l 914 2415 l 914 2416 l 914 2418 l 915 2420 l 915 2422 l 915 2424 l 915 2426 l 916 2428 l 916 2430 l 916 2432 l 916 2434 l 917 2436 l 917 2438 l 917 2441 l 917 2443 l 918 2445 l 918 2447 l 918 2449 l 918 2451 l 919 2453 l 919 2455 l 919 2457 l 920 2459 l 920 2461 l 920 2463 l 920 2465 l 921 2467 l 921 2469 l 921 2472 l 921 2474 l 922 2476 l 922 2478 l 923 2480 l 923 2483 l 923 2485 l 923 2487 l 924 2489 l 924 2492 l 924 2494 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 920 2745 961 2745 961 2490 920 2490 b c np 924 2494 m 925 2496 l 925 2498 l 925 2500 l 925 2503 l 926 2505 l 926 2507 l 926 2510 l 927 2512 l 927 2514 l 927 2516 l 927 2519 l 928 2521 l 928 2523 l 928 2526 l 929 2528 l 929 2530 l 929 2533 l 930 2535 l 930 2537 l 930 2540 l 931 2542 l 931 2545 l 931 2547 l 932 2550 l 932 2552 l 932 2555 l 933 2557 l 933 2560 l 933 2562 l 934 2564 l 934 2567 l 934 2569 l 935 2572 l 935 2575 l 935 2577 l 935 2579 l 936 2582 l 936 2585 l 936 2587 l 937 2590 l 937 2592 l 937 2595 l 938 2597 l 938 2600 l 938 2603 l 939 2605 l 939 2608 l 940 2611 l 940 2613 l 940 2616 l 941 2619 l 941 2622 l 941 2624 l 942 2627 l 942 2630 l 942 2633 l 943 2635 l 943 2638 l 943 2641 l 944 2644 l 944 2646 l 945 2649 l 945 2652 l 945 2655 l 946 2658 l 946 2660 l 946 2663 l 947 2666 l 947 2669 l 948 2672 l 948 2675 l 948 2678 l 949 2681 l 949 2684 l 949 2687 l 950 2689 l 950 2693 l 951 2695 l 951 2698 l 951 2701 l 952 2704 l 952 2707 l 953 2710 l 953 2713 l 953 2717 l 954 2720 l 954 2722 l 955 2726 l 955 2728 l 956 2731 l 956 2735 l 956 2738 l 957 2741 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 953 3094 1006 3094 1006 2737 953 2737 b c np 957 2741 m 957 2744 l 958 2747 l 958 2750 l 958 2754 l 959 2757 l 959 2760 l 960 2763 l 960 2767 l 960 2770 l 961 2773 l 961 2776 l 962 2780 l 962 2783 l 963 2786 l 963 2789 l 963 2793 l 964 2796 l 964 2800 l 965 2803 l 965 2806 l 966 2810 l 966 2813 l 967 2816 l 967 2820 l 967 2823 l 968 2826 l 968 2830 l 969 2834 l 969 2837 l 970 2840 l 970 2844 l 971 2848 l 971 2851 l 972 2855 l 972 2858 l 973 2862 l 973 2865 l 974 2869 l 974 2873 l 975 2876 l 975 2880 l 976 2884 l 976 2887 l 976 2891 l 977 2895 l 977 2898 l 978 2902 l 978 2906 l 979 2910 l 979 2913 l 980 2917 l 981 2921 l 981 2924 l 981 2928 l 982 2932 l 982 2936 l 983 2940 l 983 2944 l 984 2948 l 984 2952 l 985 2956 l 985 2960 l 986 2964 l 986 2968 l 987 2971 l 987 2976 l 988 2979 l 988 2984 l 989 2988 l 990 2992 l 990 2996 l 991 3000 l 991 3004 l 992 3008 l 992 3012 l 993 3016 l 993 3020 l 994 3024 l 994 3029 l 995 3033 l 996 3037 l 996 3042 l 997 3046 l 997 3050 l 998 3055 l 999 3059 l 999 3063 l 1000 3068 l 1000 3072 l 1001 3077 l 1001 3081 l 1002 3085 l 1002 3090 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 998 3503 1060 3503 1060 3086 998 3086 b c np 1002 3090 m 1003 3094 l 1004 3099 l 1004 3103 l 1005 3107 l 1005 3112 l 1006 3116 l 1007 3121 l 1007 3125 l 1008 3130 l 1008 3134 l 1009 3139 l 1009 3143 l 1010 3147 l 1011 3152 l 1011 3156 l 1012 3161 l 1012 3165 l 1013 3170 l 1013 3174 l 1014 3179 l 1015 3183 l 1015 3188 l 1016 3192 l 1017 3197 l 1017 3201 l 1018 3206 l 1018 3210 l 1019 3215 l 1019 3219 l 1020 3223 l 1020 3228 l 1021 3232 l 1022 3237 l 1022 3241 l 1023 3246 l 1024 3250 l 1024 3255 l 1025 3259 l 1025 3264 l 1026 3268 l 1026 3273 l 1027 3277 l 1028 3281 l 1028 3286 l 1029 3290 l 1029 3295 l 1030 3299 l 1031 3304 l 1031 3308 l 1032 3313 l 1032 3317 l 1033 3322 l 1033 3326 l 1034 3331 l 1035 3335 l 1035 3339 l 1036 3344 l 1036 3348 l 1037 3353 l 1037 3356 l 1038 3360 l 1039 3365 l 1039 3369 l 1040 3374 l 1040 3378 l 1041 3383 l 1042 3387 l 1042 3391 l 1043 3396 l 1043 3400 l 1044 3405 l 1044 3410 l 1045 3414 l 1046 3418 l 1046 3423 l 1047 3427 l 1047 3432 l 1048 3436 l 1049 3441 l 1049 3445 l 1050 3450 l 1050 3454 l 1051 3459 l 1051 3463 l 1052 3467 l 1053 3472 l 1053 3477 l 1054 3481 l 1054 3485 l 1054 3486 l 1055 3490 l 1055 3494 l 1056 3499 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1052 3923 1115 3923 1115 3495 1052 3495 b c np 1056 3499 m 1057 3503 l 1057 3508 l 1058 3512 l 1058 3517 l 1059 3521 l 1060 3526 l 1060 3530 l 1061 3535 l 1061 3539 l 1062 3544 l 1062 3548 l 1063 3553 l 1064 3557 l 1064 3562 l 1065 3566 l 1066 3570 l 1066 3575 l 1067 3579 l 1067 3584 l 1068 3588 l 1068 3593 l 1069 3597 l 1070 3601 l 1070 3602 l 1070 3606 l 1071 3611 l 1071 3615 l 1072 3620 l 1073 3624 l 1073 3628 l 1074 3633 l 1074 3637 l 1075 3642 l 1075 3646 l 1076 3651 l 1076 3655 l 1077 3660 l 1078 3664 l 1078 3669 l 1079 3673 l 1079 3678 l 1080 3682 l 1080 3687 l 1081 3691 l 1082 3695 l 1082 3700 l 1083 3704 l 1083 3709 l 1084 3713 l 1085 3718 l 1085 3722 l 1086 3727 l 1086 3731 l 1087 3736 l 1087 3740 l 1088 3745 l 1088 3749 l 1089 3754 l 1090 3758 l 1090 3763 l 1091 3767 l 1092 3772 l 1092 3776 l 1093 3780 l 1093 3785 l 1094 3789 l 1094 3794 l 1095 3798 l 1096 3803 l 1096 3807 l 1097 3812 l 1097 3816 l 1098 3821 l 1099 3825 l 1099 3830 l 1100 3834 l 1100 3839 l 1101 3843 l 1101 3848 l 1102 3852 l 1103 3857 l 1103 3861 l 1104 3865 l 1104 3870 l 1105 3874 l 1105 3879 l 1106 3883 l 1107 3888 l 1107 3892 l 1108 3897 l 1108 3901 l 1109 3906 l 1109 3910 l 1110 3915 l 1111 3919 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1107 4335 1167 4335 1167 3915 1107 3915 b c np 1111 3919 m 1111 3924 l 1112 3928 l 1112 3933 l 1113 3937 l 1113 3942 l 1114 3946 l 1115 3950 l 1115 3951 l 1115 3955 l 1116 3959 l 1116 3964 l 1117 3968 l 1118 3973 l 1118 3977 l 1119 3982 l 1119 3986 l 1120 3991 l 1120 3995 l 1121 4000 l 1121 4004 l 1122 4009 l 1123 4013 l 1123 4017 l 1124 4022 l 1124 4026 l 1125 4031 l 1126 4035 l 1126 4040 l 1127 4044 l 1127 4049 l 1128 4053 l 1128 4058 l 1129 4062 l 1130 4067 l 1130 4071 l 1131 4076 l 1131 4080 l 1132 4085 l 1133 4089 l 1133 4094 l 1134 4098 l 1134 4102 l 1135 4107 l 1135 4111 l 1136 4116 l 1136 4120 l 1137 4125 l 1138 4129 l 1138 4134 l 1139 4138 l 1139 4143 l 1140 4147 l 1141 4152 l 1141 4156 l 1142 4161 l 1142 4165 l 1143 4170 l 1143 4174 l 1144 4179 l 1145 4183 l 1145 4187 l 1146 4192 l 1146 4197 l 1147 4201 l 1147 4206 l 1148 4210 l 1149 4214 l 1149 4219 l 1150 4223 l 1150 4228 l 1151 4232 l 1151 4237 l 1152 4241 l 1152 4246 l 1153 4250 l 1154 4255 l 1154 4259 l 1155 4264 l 1155 4268 l 1156 4273 l 1157 4277 l 1157 4282 l 1158 4286 l 1158 4291 l 1159 4295 l 1159 4300 l 1160 4304 l 1160 4308 l 1161 4313 l 1162 4317 l 1162 4322 l 1163 4326 l 1163 4331 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1159 4756 1221 4756 1221 4327 1159 4327 b c np 1163 4331 m 1164 4335 l 1164 4340 l 1165 4344 l 1165 4349 l 1166 4353 l 1167 4358 l 1167 4362 l 1168 4367 l 1168 4371 l 1169 4376 l 1169 4380 l 1170 4385 l 1171 4389 l 1171 4394 l 1172 4398 l 1172 4403 l 1173 4407 l 1174 4411 l 1174 4416 l 1175 4420 l 1175 4425 l 1176 4429 l 1176 4434 l 1177 4438 l 1177 4443 l 1178 4447 l 1179 4452 l 1179 4456 l 1180 4461 l 1180 4465 l 1181 4470 l 1182 4474 l 1182 4478 l 1183 4483 l 1183 4487 l 1184 4492 l 1184 4496 l 1185 4501 l 1185 4505 l 1186 4510 l 1186 4514 l 1187 4519 l 1188 4523 l 1188 4528 l 1189 4532 l 1189 4537 l 1190 4541 l 1191 4546 l 1191 4550 l 1192 4555 l 1192 4559 l 1193 4564 l 1193 4568 l 1194 4572 l 1194 4577 l 1195 4582 l 1196 4586 l 1196 4591 l 1197 4595 l 1197 4600 l 1198 4604 l 1199 4608 l 1199 4613 l 1200 4617 l 1200 4622 l 1201 4626 l 1201 4631 l 1202 4635 l 1202 4640 l 1203 4644 l 1204 4649 l 1204 4653 l 1205 4658 l 1205 4662 l 1206 4667 l 1206 4671 l 1207 4676 l 1208 4680 l 1208 4685 l 1209 4689 l 1209 4694 l 1210 4698 l 1210 4703 l 1211 4707 l 1211 4712 l 1212 4716 l 1213 4721 l 1213 4725 l 1214 4730 l 1214 4734 l 1215 4738 l 1216 4743 l 1216 4747 l 1217 4752 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1213 5168 1273 5168 1273 4748 1213 4748 b c np 1217 4752 m 1217 4756 l 1218 4761 l 1218 4765 l 1219 4770 l 1219 4774 l 1220 4779 l 1221 4783 l 1221 4788 l 1222 4792 l 1222 4797 l 1223 4801 l 1223 4806 l 1224 4810 l 1225 4815 l 1225 4819 l 1226 4823 l 1226 4828 l 1227 4832 l 1227 4837 l 1228 4841 l 1228 4846 l 1229 4850 l 1230 4855 l 1230 4859 l 1231 4864 l 1231 4868 l 1232 4873 l 1233 4877 l 1233 4882 l 1234 4886 l 1234 4890 l 1235 4895 l 1235 4899 l 1236 4904 l 1236 4909 l 1237 4913 l 1238 4917 l 1238 4922 l 1239 4926 l 1239 4931 l 1240 4935 l 1241 4940 l 1241 4944 l 1242 4949 l 1242 4953 l 1243 4958 l 1243 4962 l 1244 4967 l 1244 4971 l 1245 4976 l 1245 4980 l 1246 4985 l 1247 4989 l 1247 4994 l 1248 4998 l 1248 5003 l 1249 5007 l 1250 5012 l 1250 5016 l 1251 5021 l 1251 5025 l 1252 5030 l 1252 5034 l 1253 5039 l 1253 5043 l 1254 5047 l 1254 5052 l 1255 5056 l 1256 5061 l 1256 5065 l 1257 5070 l 1257 5074 l 1258 5079 l 1258 5083 l 1259 5088 l 1260 5092 l 1260 5097 l 1261 5101 l 1261 5106 l 1262 5110 l 1262 5115 l 1263 5119 l 1263 5124 l 1264 5128 l 1265 5133 l 1265 5137 l 1266 5142 l 1266 5146 l 1267 5151 l 1267 5155 l 1268 5160 l 1269 5164 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1265 5585 1325 5585 1325 5160 1265 5160 b c np 1269 5164 m 1269 5169 l 1270 5173 l 1270 5178 l 1271 5182 l 1271 5187 l 1272 5191 l 1273 5195 l 1273 5200 l 1274 5204 l 1274 5209 l 1275 5213 l 1275 5218 l 1276 5222 l 1277 5227 l 1277 5231 l 1278 5236 l 1278 5240 l 1279 5245 l 1279 5249 l 1280 5254 l 1280 5258 l 1281 5263 l 1282 5267 l 1282 5272 l 1283 5276 l 1283 5281 l 1284 5285 l 1284 5290 l 1285 5294 l 1286 5298 l 1286 5303 l 1287 5307 l 1287 5312 l 1288 5316 l 1288 5321 l 1289 5325 l 1290 5330 l 1290 5334 l 1291 5339 l 1291 5344 l 1292 5348 l 1292 5352 l 1293 5357 l 1293 5361 l 1294 5366 l 1294 5370 l 1295 5375 l 1296 5379 l 1296 5384 l 1297 5388 l 1297 5393 l 1298 5397 l 1298 5402 l 1299 5406 l 1300 5411 l 1300 5415 l 1301 5420 l 1301 5424 l 1302 5429 l 1302 5433 l 1303 5438 l 1303 5442 l 1304 5447 l 1304 5451 l 1305 5456 l 1306 5460 l 1306 5465 l 1307 5469 l 1307 5473 l 1308 5478 l 1308 5482 l 1309 5487 l 1310 5491 l 1310 5496 l 1311 5500 l 1311 5505 l 1312 5509 l 1312 5514 l 1313 5518 l 1313 5523 l 1314 5527 l 1315 5532 l 1315 5536 l 1316 5541 l 1316 5545 l 1317 5550 l 1317 5554 l 1318 5559 l 1319 5563 l 1319 5568 l 1320 5572 l 1320 5577 l 1321 5581 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1317 6002 1376 6002 1376 5577 1317 5577 b c np 1321 5581 m 1321 5585 l 1322 5590 l 1322 5595 l 1323 5599 l 1324 5604 l 1324 5608 l 1325 5613 l 1325 5617 l 1326 5622 l 1326 5626 l 1327 5631 l 1327 5635 l 1328 5640 l 1329 5644 l 1329 5648 l 1330 5653 l 1330 5657 l 1331 5662 l 1331 5666 l 1332 5671 l 1333 5675 l 1333 5680 l 1334 5684 l 1334 5689 l 1335 5693 l 1335 5698 l 1336 5702 l 1336 5707 l 1337 5711 l 1337 5716 l 1338 5720 l 1339 5725 l 1339 5729 l 1340 5734 l 1340 5738 l 1341 5742 l 1341 5747 l 1342 5751 l 1342 5756 l 1343 5760 l 1344 5765 l 1344 5769 l 1345 5774 l 1345 5778 l 1346 5783 l 1346 5787 l 1347 5792 l 1347 5796 l 1348 5801 l 1349 5805 l 1349 5810 l 1350 5814 l 1350 5819 l 1351 5823 l 1351 5828 l 1352 5832 l 1352 5837 l 1353 5841 l 1354 5846 l 1354 5850 l 1355 5855 l 1355 5859 l 1356 5864 l 1356 5868 l 1357 5873 l 1358 5877 l 1358 5882 l 1359 5886 l 1359 5891 l 1360 5895 l 1360 5900 l 1361 5904 l 1361 5909 l 1362 5913 l 1362 5918 l 1363 5922 l 1364 5927 l 1364 5931 l 1365 5935 l 1365 5940 l 1366 5944 l 1366 5949 l 1367 5953 l 1368 5958 l 1368 5962 l 1369 5967 l 1369 5972 l 1370 5976 l 1370 5981 l 1371 5985 l 1371 5990 l 1372 5994 l 1372 5998 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1368 6415 1427 6415 1427 5994 1368 5994 b c np 1372 5998 m 1373 6003 l 1374 6007 l 1374 6012 l 1375 6016 l 1375 6021 l 1376 6025 l 1376 6030 l 1377 6034 l 1377 6039 l 1378 6043 l 1379 6048 l 1379 6052 l 1380 6057 l 1380 6061 l 1381 6066 l 1381 6070 l 1382 6075 l 1382 6079 l 1383 6084 l 1384 6088 l 1384 6092 l 1385 6097 l 1385 6101 l 1386 6106 l 1386 6110 l 1387 6115 l 1387 6119 l 1388 6124 l 1388 6128 l 1389 6133 l 1390 6137 l 1390 6142 l 1391 6146 l 1391 6151 l 1392 6155 l 1392 6160 l 1393 6164 l 1393 6169 l 1394 6173 l 1395 6178 l 1395 6182 l 1396 6187 l 1396 6191 l 1397 6196 l 1397 6200 l 1398 6205 l 1399 6209 l 1399 6214 l 1400 6218 l 1400 6223 l 1401 6227 l 1401 6232 l 1402 6236 l 1402 6241 l 1403 6245 l 1403 6250 l 1404 6254 l 1405 6259 l 1405 6263 l 1406 6268 l 1406 6272 l 1407 6277 l 1408 6281 l 1408 6285 l 1409 6290 l 1409 6294 l 1410 6299 l 1410 6303 l 1411 6308 l 1411 6312 l 1412 6317 l 1412 6321 l 1413 6326 l 1413 6330 l 1414 6335 l 1415 6340 l 1415 6344 l 1416 6348 l 1416 6353 l 1417 6357 l 1417 6362 l 1418 6366 l 1418 6371 l 1419 6375 l 1420 6380 l 1420 6384 l 1421 6389 l 1421 6393 l 1422 6398 l 1422 6402 l 1423 6407 l 1423 6411 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1419 6635 1454 6635 1454 6407 1419 6407 b c np 1423 6411 m 1424 6416 l 1425 6420 l 1425 6425 l 1426 6429 l 1426 6434 l 1427 6438 l 1427 6443 l 1428 6447 l 1428 6452 l 1429 6456 l 1429 6461 l 1430 6465 l 1430 6470 l 1431 6474 l 1432 6479 l 1432 6483 l 1433 6488 l 1433 6492 l 1434 6497 l 1434 6501 l 1435 6505 l 1435 6510 l 1436 6514 l 1436 6519 l 1437 6523 l 1438 6528 l 1438 6532 l 1439 6537 l 1439 6541 l 1440 6546 l 1440 6550 l 1441 6555 l 1441 6559 l 1442 6564 l 1443 6568 l 1443 6573 l 1444 6577 l 1444 6582 l 1445 6586 l 1445 6591 l 1446 6595 l 1446 6600 l 1447 6604 l 1447 6609 l 1448 6613 l 1449 6618 l 1449 6622 l 1450 6627 l 1450 6631 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 786 1502 810 1502 810 1461 786 1461 b c np 793 1498 m 792 1497 l 792 1496 l 792 1495 l 792 1494 l 792 1493 l 792 1492 l 791 1491 l 791 1490 l 791 1489 l 791 1488 l 791 1487 l 791 1486 l 790 1485 l 790 1484 l 790 1483 l 790 1482 l 790 1481 l 790 1480 l 790 1479 l 790 1478 l 790 1477 l 790 1476 l 790 1475 l 790 1474 l 790 1473 l 790 1472 l 791 1471 l 791 1470 l 791 1469 l 792 1468 l 792 1467 l 793 1467 l 793 1466 l 794 1466 l 795 1465 l 796 1465 l 797 1465 l 798 1465 l 799 1465 l 800 1465 l 801 1465 l 802 1465 l 803 1465 l 804 1465 l 805 1465 l 806 1465 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 802 1496 875 1496 875 1461 802 1461 b c np 806 1465 m 807 1465 l 808 1465 l 809 1466 l 810 1466 l 811 1466 l 812 1466 l 813 1466 l 814 1466 l 815 1466 l 815 1467 l 816 1467 l 817 1467 l 818 1467 l 818 1468 l 819 1468 l 820 1468 l 821 1468 l 821 1469 l 822 1469 l 823 1469 l 824 1470 l 825 1470 l 826 1470 l 827 1471 l 828 1471 l 829 1472 l 830 1472 l 831 1472 l 832 1473 l 833 1473 l 834 1474 l 835 1474 l 836 1475 l 837 1475 l 838 1476 l 839 1476 l 840 1476 l 841 1477 l 842 1478 l 843 1478 l 844 1478 l 844 1479 l 845 1479 l 846 1479 l 846 1480 l 847 1480 l 848 1480 l 848 1481 l 849 1481 l 850 1481 l 851 1482 l 852 1482 l 853 1483 l 854 1483 l 855 1484 l 856 1484 l 857 1485 l 858 1485 l 859 1486 l 860 1486 l 860 1487 l 861 1487 l 862 1487 l 862 1488 l 863 1488 l 864 1488 l 864 1489 l 865 1489 l 866 1489 l 866 1490 l 867 1490 l 868 1490 l 869 1491 l 870 1491 l 871 1492 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 867 1540 949 1540 949 1488 867 1488 b c np 871 1492 m 872 1493 l 873 1493 l 874 1494 l 875 1494 l 876 1495 l 877 1495 l 878 1496 l 879 1497 l 880 1497 l 881 1497 l 881 1498 l 882 1498 l 883 1499 l 884 1499 l 885 1500 l 886 1500 l 886 1501 l 887 1501 l 888 1502 l 889 1502 l 889 1503 l 890 1503 l 891 1503 l 892 1504 l 893 1505 l 894 1505 l 895 1506 l 896 1506 l 897 1507 l 898 1507 l 898 1508 l 899 1508 l 900 1509 l 901 1509 l 902 1510 l 903 1510 l 904 1511 l 905 1512 l 906 1512 l 907 1513 l 908 1513 l 908 1514 l 909 1514 l 910 1515 l 911 1515 l 912 1515 l 912 1516 l 913 1516 l 914 1517 l 915 1517 l 916 1518 l 917 1519 l 918 1520 l 919 1520 l 920 1521 l 921 1521 l 922 1522 l 923 1522 l 924 1523 l 925 1523 l 926 1524 l 927 1525 l 928 1525 l 929 1526 l 930 1527 l 931 1527 l 932 1528 l 933 1529 l 934 1529 l 935 1530 l 936 1530 l 937 1531 l 938 1532 l 939 1533 l 940 1533 l 941 1534 l 942 1534 l 943 1535 l 944 1536 l 945 1536 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 941 1603 1043 1603 1043 1532 941 1532 b c np 945 1536 m 945 1537 l 946 1537 l 947 1538 l 948 1538 l 949 1539 l 950 1540 l 951 1540 l 952 1541 l 953 1541 l 954 1542 l 955 1542 l 956 1543 l 957 1544 l 958 1545 l 959 1546 l 960 1546 l 961 1547 l 962 1547 l 963 1548 l 964 1548 l 965 1549 l 966 1550 l 967 1550 l 968 1551 l 969 1551 l 970 1552 l 971 1553 l 972 1553 l 973 1554 l 974 1555 l 975 1555 l 976 1556 l 977 1557 l 978 1557 l 979 1558 l 980 1558 l 981 1559 l 982 1560 l 983 1561 l 984 1561 l 985 1562 l 986 1563 l 987 1563 l 988 1564 l 989 1565 l 990 1565 l 991 1566 l 992 1566 l 993 1567 l 994 1568 l 995 1569 l 996 1569 l 997 1570 l 998 1571 l 999 1571 l 1000 1572 l 1001 1573 l 1002 1573 l 1003 1574 l 1004 1575 l 1006 1576 l 1007 1576 l 1008 1577 l 1009 1578 l 1010 1579 l 1011 1579 l 1012 1580 l 1013 1581 l 1014 1582 l 1015 1582 l 1016 1583 l 1018 1584 l 1019 1585 l 1020 1586 l 1021 1586 l 1022 1587 l 1023 1588 l 1024 1589 l 1025 1589 l 1026 1590 l 1028 1591 l 1029 1592 l 1030 1592 l 1031 1593 l 1032 1594 l 1033 1595 l 1035 1596 l 1036 1596 l 1037 1597 l 1038 1598 l 1039 1599 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1035 1694 1172 1694 1172 1595 1035 1595 b c np 1039 1599 m 1041 1600 l 1042 1600 l 1043 1601 l 1044 1602 l 1045 1603 l 1046 1604 l 1048 1605 l 1049 1605 l 1050 1606 l 1051 1607 l 1052 1608 l 1054 1609 l 1055 1610 l 1056 1610 l 1057 1611 l 1059 1612 l 1060 1613 l 1061 1614 l 1062 1615 l 1064 1616 l 1065 1616 l 1066 1617 l 1067 1618 l 1069 1619 l 1070 1620 l 1071 1621 l 1073 1622 l 1074 1623 l 1075 1624 l 1076 1625 l 1078 1625 l 1079 1626 l 1080 1627 l 1082 1628 l 1083 1629 l 1084 1630 l 1086 1631 l 1087 1632 l 1088 1633 l 1090 1634 l 1091 1635 l 1092 1636 l 1093 1637 l 1095 1638 l 1096 1638 l 1098 1639 l 1099 1640 l 1100 1641 l 1102 1642 l 1103 1643 l 1104 1644 l 1106 1645 l 1107 1646 l 1109 1647 l 1110 1648 l 1111 1649 l 1113 1650 l 1114 1651 l 1116 1652 l 1117 1653 l 1119 1654 l 1120 1655 l 1121 1656 l 1123 1657 l 1124 1658 l 1126 1659 l 1127 1660 l 1129 1662 l 1130 1663 l 1132 1664 l 1133 1665 l 1135 1666 l 1136 1667 l 1138 1668 l 1139 1669 l 1141 1670 l 1142 1671 l 1144 1672 l 1145 1673 l 1147 1675 l 1148 1676 l 1150 1677 l 1151 1678 l 1153 1679 l 1154 1680 l 1156 1681 l 1158 1682 l 1159 1683 l 1161 1685 l 1162 1686 l 1163 1687 l 1165 1688 l 1167 1689 l 1168 1690 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1164 1821 1343 1821 1343 1686 1164 1686 b c np 1168 1690 m 1170 1691 l 1171 1693 l 1173 1694 l 1175 1695 l 1176 1696 l 1178 1697 l 1179 1699 l 1181 1700 l 1183 1701 l 1184 1702 l 1186 1703 l 1188 1705 l 1189 1706 l 1191 1707 l 1193 1708 l 1194 1709 l 1196 1711 l 1198 1712 l 1199 1713 l 1201 1714 l 1203 1716 l 1204 1717 l 1206 1718 l 1208 1719 l 1210 1721 l 1211 1722 l 1213 1723 l 1215 1724 l 1217 1725 l 1218 1727 l 1220 1728 l 1222 1730 l 1224 1731 l 1225 1732 l 1227 1733 l 1229 1735 l 1231 1736 l 1233 1738 l 1234 1739 l 1236 1740 l 1238 1741 l 1240 1743 l 1242 1744 l 1244 1746 l 1245 1747 l 1247 1748 l 1249 1750 l 1251 1751 l 1253 1752 l 1255 1754 l 1257 1755 l 1258 1757 l 1260 1758 l 1262 1759 l 1264 1761 l 1266 1762 l 1268 1764 l 1270 1765 l 1272 1767 l 1274 1768 l 1276 1769 l 1278 1771 l 1279 1772 l 1282 1774 l 1283 1775 l 1285 1777 l 1287 1778 l 1289 1780 l 1291 1781 l 1293 1783 l 1295 1784 l 1297 1786 l 1299 1787 l 1301 1789 l 1303 1790 l 1305 1792 l 1307 1793 l 1309 1795 l 1311 1796 l 1313 1798 l 1316 1799 l 1318 1801 l 1320 1802 l 1322 1804 l 1324 1806 l 1326 1807 l 1328 1809 l 1330 1810 l 1332 1812 l 1334 1814 l 1337 1815 l 1339 1817 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1335 1970 1538 1970 1538 1813 1335 1813 b c np 1339 1817 m 1341 1818 l 1343 1820 l 1345 1822 l 1347 1823 l 1350 1825 l 1352 1827 l 1354 1828 l 1356 1830 l 1358 1832 l 1360 1833 l 1363 1835 l 1365 1837 l 1367 1838 l 1369 1840 l 1372 1842 l 1374 1843 l 1376 1845 l 1378 1847 l 1380 1848 l 1383 1850 l 1385 1852 l 1387 1854 l 1389 1855 l 1392 1857 l 1394 1859 l 1396 1860 l 1399 1862 l 1401 1864 l 1403 1866 l 1405 1867 l 1408 1869 l 1410 1871 l 1412 1873 l 1415 1875 l 1417 1877 l 1420 1879 l 1422 1881 l 1425 1882 l 1427 1884 l 1430 1886 l 1433 1888 l 1435 1890 l 1438 1892 l 1440 1894 l 1443 1896 l 1446 1898 l 1448 1900 l 1451 1902 l 1454 1904 l 1456 1906 l 1459 1908 l 1462 1910 l 1464 1913 l 1467 1915 l 1469 1917 l 1472 1919 l 1475 1921 l 1477 1923 l 1480 1924 l 1482 1926 l 1485 1928 l 1487 1930 l 1489 1932 l 1492 1934 l 1494 1935 l 1496 1937 l 1498 1939 l 1500 1940 l 1502 1942 l 1504 1943 l 1505 1944 l 1507 1946 l 1509 1947 l 1510 1948 l 1512 1949 l 1513 1951 l 1515 1952 l 1516 1953 l 1518 1954 l 1519 1955 l 1520 1956 l 1522 1957 l 1523 1958 l 1524 1959 l 1525 1960 l 1526 1961 l 1528 1961 l 1529 1962 l 1530 1963 l 1531 1964 l 1532 1965 l 1533 1966 l 1534 1966 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1530 1992 1565 1992 1565 1962 1530 1962 b c np 1534 1966 m 1535 1967 l 1536 1968 l 1537 1968 l 1537 1969 l 1538 1970 l 1539 1970 l 1540 1971 l 1541 1972 l 1542 1972 l 1543 1973 l 1543 1974 l 1544 1974 l 1545 1975 l 1546 1975 l 1546 1976 l 1547 1976 l 1548 1977 l 1549 1978 l 1550 1978 l 1550 1979 l 1551 1979 l 1551 1980 l 1552 1980 l 1552 1981 l 1553 1981 l 1554 1982 l 1555 1982 l 1555 1983 l 1556 1983 l 1556 1984 l 1557 1984 l 1558 1984 l 1558 1985 l 1559 1985 l 1559 1986 l 1560 1986 l 1560 1987 l 1561 1987 l 1561 1988 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1557 1996 1571 1996 1571 1984 1557 1984 b c np 1561 1988 m 1562 1988 l 1562 1989 l 1563 1989 l 1564 1989 l 1564 1990 l 1565 1990 l 1565 1991 l 1566 1991 l 1566 1992 l 1567 1992 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1563 2003 1580 2003 1580 1988 1563 1988 b c np 1567 1992 m 1568 1992 l 1568 1993 l 1569 1993 l 1569 1994 l 1570 1994 l 1570 1995 l 1571 1995 l 1572 1995 l 1572 1996 l 1573 1997 l 1574 1997 l 1574 1998 l 1575 1998 l 1575 1999 l 1576 1999 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1572 2012 1591 2012 1591 1995 1572 1995 b c np 1576 1999 m 1577 1999 l 1577 2000 l 1578 2000 l 1578 2001 l 1579 2001 l 1579 2002 l 1580 2002 l 1581 2003 l 1582 2003 l 1582 2004 l 1583 2004 l 1583 2005 l 1584 2005 l 1584 2006 l 1585 2006 l 1585 2007 l 1586 2007 l 1587 2007 l 1587 2008 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1584 2016 1596 2016 1596 2004 1584 2004 b c np 0 3599 5 5 1590 2010 el f gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1083 6141 1083 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1087 m 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1070 6141 1070 b c np 6145 1074 m 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1139 6149 1139 6149 1085 6141 1085 b c np 6145 1097 m 6145 1096 l 6145 1095 l 6145 1094 l 6145 1093 l 6145 1092 l 6145 1091 l 6145 1090 l 6145 1089 l 6145 1090 l 6145 1091 l 6145 1092 l 6145 1093 l 6145 1094 l 6145 1096 l 6145 1097 l 6145 1100 l 6145 1103 l 6145 1106 l 6145 1110 l 6145 1113 l 6145 1116 l 6145 1119 l 6145 1122 l 6145 1125 l 6145 1128 l 6145 1130 l 6145 1132 l 6145 1133 l 6145 1134 l 6145 1135 l 6145 1134 l 6145 1132 l 6145 1129 l 6145 1126 l 6145 1122 l 6145 1117 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1121 6149 1121 6149 783 6141 783 b c np 6145 1117 m 6145 1111 l 6145 1105 l 6145 1097 l 6145 1085 l 6145 1073 l 6145 1059 l 6145 1045 l 6145 1031 l 6145 1015 l 6145 1000 l 6145 984 l 6145 968 l 6145 952 l 6145 937 l 6145 921 l 6145 906 l 6145 891 l 6145 877 l 6145 863 l 6145 850 l 6145 838 l 6145 827 l 6145 817 l 6145 808 l 6145 801 l 6145 795 l 6145 791 l 6145 788 l 6145 787 l 6145 792 l 6145 800 l 6145 808 l 6145 818 l 6145 830 l 6145 842 l 6145 856 l 6145 870 l 6145 885 l 6145 901 l 6145 917 l 6145 933 l 6145 949 l 6145 965 l 6145 981 l 6145 997 l 6145 1012 l 6145 1026 l 6145 1040 l 6145 1052 l 6145 1063 l 6145 1073 l 6145 1082 l 6145 1088 l 6145 1094 l 6145 1097 l 6145 1094 l 6145 1088 l 6145 1082 l 6145 1073 l 6145 1063 l 6145 1052 l 6145 1040 l 6145 1026 l 6145 1012 l 6145 997 l 6145 981 l 6145 965 l 6145 949 l 6145 933 l 6145 917 l 6145 901 l 6145 885 l 6145 870 l 6145 856 l 6145 842 l 6145 830 l 6145 818 l 6145 808 l 6145 800 l 6145 792 l 6145 787 l 6145 788 l 6145 791 l 6145 795 l 6145 801 l 6145 808 l 6145 817 l 6145 827 l 6145 838 l 6145 850 l 6145 863 l 6145 877 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1139 6149 1139 6149 873 6141 873 b c np 6145 877 m 6145 891 l 6145 906 l 6145 921 l 6145 937 l 6145 952 l 6145 968 l 6145 984 l 6145 1000 l 6145 1015 l 6145 1031 l 6145 1045 l 6145 1059 l 6145 1073 l 6145 1085 l 6145 1097 l 6145 1105 l 6145 1111 l 6145 1117 l 6145 1122 l 6145 1126 l 6145 1129 l 6145 1132 l 6145 1134 l 6145 1135 l 6145 1134 l 6145 1133 l 6145 1132 l 6145 1130 l 6145 1128 l 6145 1125 l 6145 1122 l 6145 1119 l 6145 1116 l 6145 1113 l 6145 1110 l 6145 1106 l 6145 1103 l 6145 1100 l 6145 1097 l 6145 1096 l 6145 1094 l 6145 1093 l 6145 1092 l 6145 1091 l 6145 1090 l 6145 1089 l 6145 1090 l 6145 1091 l 6145 1092 l 6145 1093 l 6145 1094 l 6145 1095 l 6145 1096 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1314 6149 1314 6149 1055 6141 1055 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1310 m 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1365 6149 1365 6149 1055 6141 1055 b c np 6145 1361 m 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1093 6141 1093 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1104 m 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1055 6141 1055 b c np 6145 1097 m 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1083 6141 1083 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1412 6149 1412 6149 1055 6141 1055 b c np 6145 1087 m 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1107 l 6145 1118 l 6145 1130 l 6145 1143 l 6145 1156 l 6145 1170 l 6145 1185 l 6145 1199 l 6145 1214 l 6145 1229 l 6145 1244 l 6145 1259 l 6145 1274 l 6145 1289 l 6145 1303 l 6145 1316 l 6145 1330 l 6145 1342 l 6145 1354 l 6145 1365 l 6145 1375 l 6145 1384 l 6145 1392 l 6145 1398 l 6145 1404 l 6145 1407 l 6145 1408 l 6145 1407 l 6145 1405 l 6145 1402 l 6145 1397 l 6145 1391 l 6145 1383 l 6145 1375 l 6145 1365 l 6145 1355 l 6145 1343 l 6145 1331 l 6145 1318 l 6145 1304 l 6145 1289 l 6145 1273 l 6145 1258 l 6145 1241 l 6145 1224 l 6145 1207 l 6145 1189 l 6145 1171 l 6145 1153 l 6145 1134 l 6145 1115 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1083 6141 1083 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1087 m 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1070 6141 1070 b c np 6145 1074 m 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1055 6141 1055 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1077 m 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1093 6141 1093 b c np 6145 1104 m 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1314 6149 1314 6149 1055 6141 1055 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1310 m 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1365 6149 1365 6149 1055 6141 1055 b c np 6145 1361 m 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1093 6141 1093 b c np 6145 1097 m 6145 1098 l 6145 1099 l 6145 1100 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1411 6149 1411 6149 1055 6141 1055 b c np 6145 1104 m 6145 1103 l 6145 1102 l 6145 1101 l 6145 1099 l 6145 1098 l 6145 1097 l 6145 1094 l 6145 1091 l 6145 1087 l 6145 1084 l 6145 1081 l 6145 1078 l 6145 1074 l 6145 1071 l 6145 1069 l 6145 1066 l 6145 1064 l 6145 1062 l 6145 1061 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1062 l 6145 1065 l 6145 1068 l 6145 1072 l 6145 1077 l 6145 1082 l 6145 1089 l 6145 1097 l 6145 1108 l 6145 1120 l 6145 1132 l 6145 1146 l 6145 1160 l 6145 1174 l 6145 1189 l 6145 1205 l 6145 1220 l 6145 1235 l 6145 1251 l 6145 1266 l 6145 1281 l 6145 1296 l 6145 1310 l 6145 1324 l 6145 1337 l 6145 1349 l 6145 1361 l 6145 1371 l 6145 1381 l 6145 1389 l 6145 1396 l 6145 1401 l 6145 1405 l 6145 1407 l 6145 1405 l 6145 1401 l 6145 1396 l 6145 1389 l 6145 1381 l 6145 1371 l 6145 1361 l 6145 1349 l 6145 1337 l 6145 1324 l 6145 1310 l 6145 1296 l 6145 1281 l 6145 1266 l 6145 1251 l 6145 1235 l 6145 1220 l 6145 1205 l 6145 1189 l 6145 1174 l 6145 1160 l 6145 1146 l 6145 1132 l 6145 1120 l 6145 1108 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1108 6149 1108 6149 1055 6141 1055 b c np 6145 1097 m 6145 1089 l 6145 1082 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1065 l 6145 1062 l 6145 1060 l 6145 1059 l 6145 1060 l 6145 1061 l 6145 1062 l 6145 1064 l 6145 1066 l 6145 1069 l 6145 1071 l 6145 1074 l 6145 1078 l 6145 1081 l 6145 1084 l 6145 1087 l 6145 1091 l 6145 1094 l 6145 1097 l 6145 1098 l 6145 1099 l 6145 1101 l 6145 1102 l 6145 1103 l 6145 1104 l 6145 1103 l 6145 1102 l 6145 1101 l 6145 1100 l 6145 1099 l 6145 1098 l 6145 1097 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1118 6149 1118 6149 1081 6141 1081 b c np 6145 1097 m 6145 1099 l 6145 1100 l 6145 1102 l 6145 1103 l 6145 1105 l 6145 1106 l 6145 1108 l 6145 1109 l 6145 1110 l 6145 1111 l 6145 1112 l 6145 1113 l 6145 1114 l 6145 1113 l 6145 1112 l 6145 1111 l 6145 1109 l 6145 1107 l 6145 1105 l 6145 1103 l 6145 1100 l 6145 1097 l 6145 1093 l 6145 1089 l 6145 1085 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1799 6149 1799 6149 1041 6141 1041 b c np 6145 1085 m 6145 1081 l 6145 1077 l 6145 1072 l 6145 1068 l 6145 1064 l 6145 1060 l 6145 1056 l 6145 1053 l 6145 1050 l 6145 1048 l 6145 1046 l 6145 1045 l 6145 1046 l 6145 1049 l 6145 1052 l 6145 1056 l 6145 1062 l 6145 1068 l 6145 1076 l 6145 1086 l 6145 1097 l 6145 1111 l 6145 1127 l 6145 1144 l 6145 1162 l 6145 1182 l 6145 1203 l 6145 1226 l 6145 1249 l 6145 1273 l 6145 1299 l 6145 1325 l 6145 1352 l 6145 1381 l 6145 1409 l 6145 1439 l 6145 1469 l 6145 1500 l 6145 1531 l 6145 1563 l 6145 1596 l 6145 1628 l 6145 1661 l 6145 1694 l 6145 1728 l 6145 1761 l 6145 1795 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np -1 3357 2328 3357 2328 -1 -1 -1 b c np showpage %%Trailer r auto/07p/doc/include/menubar.png0000640000175000017500000001447213570013207014601 0ustar skskPNG  IHDRSZbKGD pHYs  ~tIMEIDATx[lWߺc1I-J0( NJW Iġ Pk)xQ0 PE# $$P@5J$nQ˱-&Ks5a?2Μ`ٳ3g29}4$](=z@ ]gr>4+=ozJHjp2nϝ;'"ϟpg@zˋ2; koo?{l>ijIe8#ĉ> ‚44]e~+W655{׿TBرepp0v}~ PB&H<}G|`ӽED9Ǐ>U}k>W4?sիWn?I/Y+_>1W\z'@tg~=eeϥ0o1믿^Ny%={/^fEa͚5#GFGGoWZ @q&n+_{{#mN*7o8huڵkzz:?C;vȑl6C曯ªU'N477?#/6Mŋϟhnn^vi[or+V۷o~~h70MT~?r$i;1+ʸpw)ƕ7mtmڴɽgzzzvv־i"SN{k/L&LӜ?ϵyIYz?nTоyq}===tlܸqcѝnllllhhЇ>$"ׯ_ﳰpeinn^XXP˗_:;;;;;gggԗ4M0ׯ_zGs$>'?J b<}wr8??QRi]oܸ177FfnGV~lllll_ѣGEShѢk׮?>77w֙YdiK._R( w(s<ϻwqÆ e)z_~0{ˑuvv.,,kii/}^{W^׿>??k]v3<`旾 .>}p•+Wv糟'bŊõizە=|Æ |_U;xW:u{WoΝG>ظk׮|;aJHJ Z;wn͚5|[Ri& /@AEkQK2h3?/Poj)1o PdO+fY6[r1x~o}[{{9v옮iSO](ޚ8k︲?c]{z߻汃%K;vhhh?,{d=9)EO\0:,dzS&_`)[7x;|&7M಴׆9oݤfg[dQ\FwqTູ;P7n<O<}oq $F!dGγ/˟'~?nxgJΕrys7+{)]2.0s]zuƍƏ~#[h,J-=ӿT&%-sEm}DWJPE_H7իWy맦c8({xNS6 FFF֬Ycn|||Æ *S~{G?U$xv?)"EU! &d~կ~t{g ݻ=^zAP/222[=T___Ue٤P.r)GkNįZҩxꐑd^z饤Ps7;}e[zg>-E۵;S]6>Q7D0"Y_к%>u&aхjx0ݪ%.0Jlhhg9տZ144T/ZF38CWK[nMᇍ?~L$EC"1ӺxꕓBx5JU08CĖ?F1w4F+D0MSDiy7x«QӍG+ϳXV ehl6\g7z5ujD0йM'<(r<Э]  «QMӭVGu! 1t#) nfkOm.0))#Rp5uwog{jK ϥ_GD3;戄A명ưBx5`E4Α--jD("MX1]%KhhH-r\xj Lu쾼__-LWZjBW9?#C ٶʪFFFb~^Ϋ^4E OrԔ*WԓQ酮uEou?=wa3QODkxǘH'졎4pѰD/a- " RJ^[i>3mMR.-ZѢ sgBRCQ} _SLEeEp>O<۝DO?at_fW+R H׿0QҚMӤiufu J[fM*M*̴˼zmwyfUDW}R(>':]ȷ:aGc_qݴU%D-mo^Kg95%E_~UvK 7k>>]xΑsJ^Q]ip)a9>;p%}diȞ={-^eo\GQ)Z,]FLHë1tVX٪$mzjj*wOLӤP iIW7.:Fx5"%׊۩Hґѻ&;Թ c Q'7MxoI `_R:rLMՄFVE3 {>QjZfqX["miuqLFĚ[h]","VXx$jr.((%U"J/[uuDFg`iV$~՛6!̯n!) o9v[UJnH)Ŗt8r^_ WhDaT=ŽR>3K :rDSUuuDF6k ^6p[J~jT"j&XHH^]hQ()VAywL&tM,6DFD1KR/cnnnpp?y51)glٲ@tjoodpJ>uǣ ]]]降T=HDD˘R+<3ՠ|H32?zAP/^|xE{x?2?$TdNo: ٸ7ZUK600SOFUy3ϫ.o"i"gw?ͣPoj```crR."k}Gu>;p@DaYTVқ{mll,mnKϣ?OuP^Xe}7)weH&| cxxxbb*C$ϽBȪ6m֗_'^|1p077788~vH0}~ [lfwX P)l?ڵrhfǎcFWWײej-^] 133#"~Vx=cOrAJ9f=p*'3Qmf1ߣ"Eo9 ]l?Qi_>ZSG:omq";EK U/m7pVb}~io ȃj722O=5>-*֭[8Ν;(?jݻϷiA?"$x2f Hr}a sssglٲ-קl6[vkٲe tj y3hDA}QF|@r|>_(D_ H:*훜4 cV Roo+U|޾c0&'']m699|۷o۶-LA6ki/_188X(vڵ|r+ Sx^ةACH HS}~֭S =T3K-;zaP } YH4r*[jUP=q=QP}~j`cŊ0x_oo>Z1DDuww~B0Bb %p2fݻ1?>ȫRN?}TZ;k.3pe OLLTz|d{ ճfz/-V7~XûVڧ&''U7;;>kK>-[m|C[CD7vX?̿0}~FWWײe6ٓ?Q+y!fff,Y}- ?O/Y@*OevvC0vja*E V>@[.-_\}i6֭ VHrZ5l- PWP k}|>}vkKO<Ν;(6X_&"۶m~ڷ~ır.ZG \W7 8ҝ|\"-MgB HC,eˆ#IxhnJ1DY+ɖvmbrXR"E#ANL9Bsg"k4̯<jie}fq8"ZBI/t#xg3G8)Wj$c:l jZ{(5[Ҁ&î'bYmG-`yk֍Rڞb '^ڣq[*O:bK9.#K?e? цՄ\R'e6]U,@BDMxb '^ÉV0qWހloGasi#l IMlpQ cp,GM|U8&xL 1H/`4♲l͚;GRfg#72+`,˓/1`oHFC!obʳXO rN'YK$ 1H?}v6}ᄊ]׌L=j#偢~(ྐ s@Z 5A6z0zI;K#c)!`ѲTNGx#:isK&V1ƛډ r9!`< |7ġ @aɍ,.t[}&:0T@OZ!G+#Nȃ7Ƭ;y rV)|3u Vs&C(WY N$V+4Y}:! rr1#nm`HTR?Zo"TuSYikqLГ2dq,:ٱ1#,UBL32\)pR ,Q h$/4k&M"@1у~?ZUXE}cy[&fe^60XCQ rCE/A<[wM8.9HG,Z#ᑍ#s|u!ÖJ?EH VXX,DhA܄ EuKӌ97<-`U\<Y-[YS^_o32jY=9VШOnT[R/mj:@ylTsX%7 rOz4ņ+3x\oV oT K޲|֛֗rS1C Dd,(}%"rpUe1 I1,u*C q6`Q䄘n$ȉ2}4{ ܗ739SsRW9d]Hq< ENVok,%˫VOPo*}8p@ Q&r*@䄘v$ȉ$yx,o.Slc \|̙|#J?V,}^Å!{,1ȣizDTJ U4" rBL?_!t$ZoY3斀]-V}ho oܐƈXb'KӿЙa5KuzvXO.\'L(~ B Y''.EC#*"hQfo<0[g w6ec*5"{?٪E#P3!pw΢?Zz5]{m`pyI alNNOJb/ӷFe0bSeViQ>o5]5Ux<R)\wrQUVT7Mwh0aso<85 rN.^BL' y5Y~1/Nj !^p$ȉ> Gy*g0ʹP9%Af&*6~G3BH`Q.)!0JWǎVH~c'*keP!ʢB`I/%P(kU3q*aKEϣ1w4/MiPdLFu\^25Kgʈ걧? 8q20cO&S)&K儘^$ȉ.}vqB+kzoweށy5N$ _E;ER OPu$qNp\&#,҉%QH:mj\~ rBL+AsvJ'=ez\qjB?٣gvPs9c J89-Ŵ?9>ThYj'/AᵗꖭΜ( 1HoBeGk͚CPz([\$? X1lYm+  G?{r8ӼRfLuXP{h7jH\WpV ~Ti A5'i8w^`meRPғb 'pl bS<2XsVykϥ=e.əwe8/)cK#x{ 'zDjd&z,k-GU%tSGk *wjJHlȡxk*9%ٕBLCD 8>[F&+DVҦTxՂ?s?dejm Wk1zZ']yb#i&[:DkqR=u[H /m@6JNXVwqjNE([ ! r~߬|jߟ1MevVMZ坾ԄkAᾂhܻ0ui3P&^WͱY8:1(V+836Y''t#ANT/7-)NѲ.`HoĮ|%r6nS~@WlgRDӯ\4Yor30PHN^]l3aCCJdbpNWǣI{(ퟭ@prM2bM|YKeoUh{MErhh6$ +NUˎ"dIr0 84MvRt9|&w)$5#b1_ ;CR }ҺͲכ76Lr9kRJ:* ץY@?Դ/ߊ?$8>j,eP ܉' ܅Gc[ۣG$ANC4!X`0{Ffu<6+F̹Ô".sSeÙ1U TzrLFYK` v>Zc'_B F38)bo S"R@S!(՞\Cu/|8<#*{)KUT+xI{QFw}w0])pֿD8.||a/!;- p"b{ l( g8T87z!WECmgmI1c&Sďp=`+ɏ״5^cW+'OPÙzw ! / NsGnҞx (8x`șfGF5ς[G-'ؗ÷4$؍ZFSLteXEc*.Z?\& KaJD`c7|!OAómbTMM܋ -GK&`lj?-7'7N5()&! )}a4*3~4`u"⺱Θ;o9V!=4NEۛt{Y?HLp\19S 7PǣU7*؋"~--wߗOؔϬJXhJK'k&4bZ kP0\so8珯BL(Pzb}bHKCz Ko?mcG0Vk$,d?mbd 9{3#RI*Fbbp3kLhZt9n.f]V;JI7^\r7L?2i'(wg`X<{b<Ėsr12FPĆJ^dekCspKb}<#1& g~5#3~V02:js:ɒ&#gEؽx˙ذА%b'v<MX}a8KlPUN\و ~, O15iCe#,!AEvh \1?k7 Z|J\TOOfOc^~Ibrn%KKM+q\݌j#q.7hreCOMD}G2mV&_*?n8$?SJsc?5v7 @ ۫VsOgSv7UiE܋pR[XP͝CfSdKxr7c.Kό s_ rsڙJLm3p[.F "[ }7cp_5(x!NtMXgz{2w3O`]mgM\lX6<ڥr2\)Ĵ#닅H L2ip)[>wY6 ):2qKr8 eݰI7X1VSI$X2{ט&QI%l&XY'C`AWCg({9YC\ 3v-K?)"wiϬ6X͇_]Yɩ Ỻ\Mb /:e}ApQ.:yliio'[&q9~ wB?A-`z̛Y&#148~NqOB֡QS>mݸ4|vcA.1>`ɾ\?@Dhq]tf@D;637z AH2ZݠR$7b *pe2iK(5HJh>{=MXo̾ [eCSpC[-89=k-1>ٹM&lK)Qwmկhn?Dk/DZ9ن, ﺰl~ܙ>C3!qc4)ͥpCvOX IDATƦoP. W@U}Q|4BL'1r `ESB_ҭvfff?v0Ru{SF Y{*9)je#[;YaBcC?;?>~G&؄J|;ѧCVag,G#!Lhyk\o]h̋1ǥۥe!.Ǹ68.Mz P2l![$oE`$ﶃ8˙է;.> h!߆]6q eڧ\Jԋ7?je=*Ifg!ěHN5vAa?7v" ANYb:6ǡta)s( d=8i>s]J\[dEenYޝ p=|8 Nv`j[Uՙ8L1q|3困'Ĺ\cC4HlY"/o G&؁Jze;_`R A7V83؊-5m'W] .ANCAKBb.֡l-oGY{̟Ğ C%PtL}0{FͫF9/䲐U]J[5$b^5m̟P"d|`gP3s}#S|Q}epĄ9'Մ}04Bye~OԇJ3j ʜ,N٧ijc 8ͶRbQG#t"Ip)KS8Va.ki1T)3?P GT(k>5orBK -dN3S˝qΑ/ Njo 'TfIJfk !ėQ)>5sMFC-÷`*E6@Zep6V"[U+ÕGzrBLBC`OMۈrh'-sbytL:l~7_ߜCXYRZOWq'D2O9r })_EԋM:=18#[ :f~]Hft/ [; 6xm@ fOЭ̼=])_nҨx 8n4 g JhF{=_$(EDnf>pxYBnhoo|i_yxC<Uv+֫& $82$Kk T~֔/%ZL%0&֚u 7 ߧ䰊LZAbKQYCWc,ZM $ubfNJh]z [m Q ePtR*Evbe17|)Tvy:eF2 It:ppLǰnۿʈeˇ2 A_LlO'P-A556{0P&߇\ڛ992"DǥBh߆-@aRx=@uROF$TQ-%nD =E!{\f7L]k cᔥOn;,q&⽍Cךgb$Nz2S^]㰚 ~/߀kBAt">aLھ]mj=|]`8I ArHVA%H^ʢﱞ PPb2+l(Y[:v<9SX8jbLDbhdfD\A{oI%9daݛi0GOפ#7=t߼Z@y 1W [z#i3;)3' $zT=p< ʢ$ m=9@[FQS2\)t#Cdш'e*p q͢؜\e *ʞ'srBL">k)^dANa2qKoǡdQ+v=o1#=ǎ95,9l<3>SEI.]w]g]^DKTsuFM6m*WV _¼~K^FЇ`4@Xԇ9xYDu<1] 'O^$D</K%<5@h|$ms(qqK \sʀU!OEl,}x tL=[ "Z߽ۍ|װa+D*5߳? 'P ˚f'*%XCx_!ŝ&`$ITWZ\$H,(Rsr)ɜӈ|!b8VሧJ[5oXdg~6`~3h~?d.2FW1'qʱ拣ãQs('4;x񸨓Q_iD7׍՟\q;9 ./Ll19bҳ]w~60|QQ>36 Zeلx; VrO:r+x'͖MDGcP|6ɹ/Ӈ| x~;j.,&Q/`g1YsZ4^%Lqb`1i薧uӏ5}b>>F<&\ӈ4]v7Yq=3!$v?!ΤӠhnvghIv]K4B|1 V{'E[{PI{"j+<^Y=xV'gQk !^H$$rqVf6 mY,bVViow&W$ϯο%;?bo> 9> ?hDBmSg6ER)s+ S[ vs64oJA~+=_ >plb *8c@qctt LXKY\?( ;6'Nr@J;/K 9L)<홻&5y|@cwYr7H(;Ù'e M,ƢꢺWM&sHt=Yo'#dXrȒ_3pf2}Xv71 VaDy3ǥ/$"3{>v~{p,XB2r8I9P(d*]O\B&A\3bGKN=b#w>Ѣ7"ɸ4i@&fXlil(}^zw/Da૦x Cɷs6F9@7|y؀ԛ[CIW嚋b4Byo$l )YA؏ɼ34藃1ܓZQ F~[Ib 7E(F8]vyp'V1MxH`@˂)+xg`x`mH'X[իg\_6lHiV jJ¦4C!w}ДVz~ɤؼ߀T[)xMy#ʥѐWVx-,.>ͣPߋQX'֯Vꘉo4K)lY>a8)f34֞V&TW;8~ףrP z>փ{(=d%'BL3LJ}U[}B}jxi'_d2h [ Dz3(fpqMN7Fpظ ]O^f&Y)/x|ﵦt3FذS /37$I5rKԤ \mrWc$S lBduxS27u25{! q=wӷDyEc+DIU)_)ANiBt}#O#6bieoij>ȟ*bEeޘ yNsmuzq]pZ(Rp4f{*F8r8O=uҙO='ϮP C0E!n3l _lO$B{VK&'<ɣ9Mz˖08 2ʡ |XW\|!aeALmKբ'6>ݙbSB>/ ]l-}~8 i$c`MJ}9w>W,AќߪWѿT,]@CkcTa/igZpJw_;%J48Xjc~ii'mU>o>>&ooJIң޷%X :DS3VJŖV`~P;e;^$ޅ͓]E˛&JB#=i!.2ټ>gl)bQB>s~bhEfxX8z{eO?*+?3ț7ǙX ab1=D-:tf }5k1t~ӛ?* XLx=+SI5C(Ʒ3g `_,} k5Ac7Y_ oMh`3Ďez='!"K3{Q13Wc b'QЯd/50t͓݁: P4A`y)+{x76{:3L9G3Ҩww;8+B Y` ewoveYJ J ! $q-ےmK3#hhLy^H#e<~.9Sl]{s~i&7 `SO/km . W{ȃاx&~=vzҡl*>N(hUՁ6F0[t Fb-U*' )89!*z%:d 7!㿼eyr1{qs9Fk\xyZ_J@c$n9S |M M%]%\>,.|o +`]wONE La 7O UWZɁB?=}(UPbL. I*N{.hs\pX~gT^]" #F -(]Qi. ~IEe^Ķ#P/?"=\r916yMI(M~|zSPS']__VKWdr Pc db# cB~$gqa*'sC$/).*:^1Rl\~$^]`JYV_FX慗Fi9PUn5rϓ==#ϗ8R8jrZڇ%#rxuBy)OHڏQﻫxX\ris5w"jzU(J_'r:ZIjbLO\"77YaD:_ 䡺Lkapeiÿ%:ʭ^p'5|f>FPanb۵v3K^ze:zɭPy=s8=rtQ8.H&ZϒVKVY@yWƱ1a9(TU93XQHMX,LNv<14``C~e ]YN@F`0MNG;)BeXwmXod*QYٖ(E?EU+X뒵{dsj78@HU{UC=fdݟQe 8B"Nф'S524eT>H otJa|Y0Y(K )^ Or" 303"7;W?ݏ.u|ʒӨ[dBK@0 [/HOw$O8vWݘYGv (jO pJT`\׌4cݟW I2HQ㾆O=Dg<"O}A,}B&OB*AEX˦ENTPѾJ\[InA#``C~vyYu4 -\^*#s}/?!)?V&χ0nFezrP ȵ>37k#аmۈŰژw(DSKe֑JaKeGH&9hsgO3jv^Wat3{)jw_ M522ql䢐JL>kt;SJrTqp#w\FȉsI;CmG nkd{_qA7XYd&bbS~0P_Q &1~37}xxCXxK7K9E*)ッFb| QnEBQR)R^}KᯭCk.Z/}>?=Jr"#"%sB m IDATNNcD>Ǚ)݇CǙ $<q}-?!ۋ:¢%dyN]iu1QSԏwc׵:kxM8C4WXM{\] &urp+WZVqqq ^~{BIJ&0M@N2vR{QHo5G{a,,;~)r\%p!=0 S~u?sJ5FOYlu@TIB P\WU`#InFGRPSIO@ẑ9ڵkg8n@'LN!YWlUF&nH39vfM*WwGFԇꁨz s8ԻꦄZT+jj`hA,ܭ!VLUo,#ˆ%^bl ]`ɍ~8.;`;z9چ|yq,Zt>xŃ[-?@#* dq,D<8݅4$6,Kp7AԳ\!&$+z:bӧOp9Lfr3[ -ygؘI>SS_V/a+]̴6ʺN(*0+˖%++6SI&;b^^짥n5Gڨ*e J=;.V4mi%2ilvm`u3MQ7ah&6AFBY,^ _Bd1A\jNl`xW^,xLa\#o|&;'lH/ +uJW/1"lv(>ɹ$iu_o"?gK+PQ&]m 5 &UW"hj3*~ެP$TxM!L.lR= ȊǤjo#:EP{mP)= ȷкSV|\=0'o|wCJJ~,&(qO^1LJ h:H'pA*I!աG0S,R~߹BɊB8O10#\#Wj8-h^ J;'/-%HhlICW9ư;m'ӇE+mE0Yb u][.%S8-zJo&ׅ%!t16jZ/Ft7%^Ek.VޔڃɌRMLWD'&>&SHr[O!ImXܐ-f܌P99!rs,+5n&y)TE"y#dt.O$N'w5=ݘTwYz#d#PC#41V)nw(*%׼jN&wSLἒ;$dHlY7z}g$|QG0)4;h?vc>)*BF~7>N>V 0f;TA k!rs,8mTzXP{Xrv %u:OEX~a1NhJ6O=A?+-8n0NtA;U-*v5z'Lr svɊt0TMKv}@7Oa ލh2oډ*c]Ŝ@gFw8u5 WH(#X96,G!OфZ̐C.:zM7d(->fj}s|vc["eN:Rzy6ϮfX;R=6ض86gƝRj>d,JM9 e#Lrx5S g&&Z#|~8C;(_3{5<~=/љeO3k5{: N̢!76`9p[`lKxQuc[Q)0Q{T#7%Og@$6SH3Ʒ@>Y70I֣u%P4D``|s%>O)\R"))n*}Pظ %(m)i_?+.P?$:qm%zO!:UPQslE %K#LT4yX\eqyAE"FK*VPILfPB.z.T0'g`0G0Dnn D̰G6}a'B|9CH]|r0,B2U&AȂ_|BAO?"M HW"'.j>Ђyغ~rUvTk':Ӳ>Og 2*k/j᤮Tt=,AV? Ί]'8jb 3Xj=(w#]$<>ŢG%VOr&#`Nac#of`rg{lUy^D s  *3Dp::8Z45d@YRWPCa?(c_22UJQ3|P᭲l*SI~2i>yO}WwVh?2'zGݏfz`XG&pҰ4 c3P}$s ,xX'^5nnZ`ݓwQ~Aze(i_RrVۧ"-rե'w\@CbX\~JN5zV ^ƯnDec+7˿CnSnLf joIO`wӴ|r,ARud"f_UD,$/]8QI\.];|G- cxj?An.rX,E וs C90 MW_?nY2y*Rڧ~08Ħ~4qN֔.G%fg-ap' G{?Tz6r93Sjn~\B1BiYMvIC P/yxy=dScoe`',Nl](NEL.tLk!Cf 30#"7G,`Ty.`gٖR_& C%Ps "U{J3MTV.Gda%%|{CXl\v]@iZv5z3z?/?I2]Ҽ{f4B|?=N!UD_"?aD΄E&e2O ? G9Lv4Rjtvfu wp@|X}$_&*؉6mm@J!&}pTJxTZ}bS݂%j[]:'>)(&SOY˿w:\Հ)o2}lct9OS|=ݻ] F{M[DX@ 7SjϨy$O2P=:mSx/Xl%3k300a@wU9Sw*^<.1uhO|/}%l-E6{gDGDEUHmgtuECxDnRw荍ʑ^awZZ9"^;fZ){@9jARp~ֺXzҋYew'GTbᚿWbdnrޟ ]'l¸+b26hIw?d7)o"Ǟ:bN` ÆkBFӸ,Y&N)E VWƆFxhakeYHs9BBΖ$6K>ĆvWX!tw`koK8_L&qw5xEq,}YVx\d[ \˸wPwL#W-';ar.{T;M*Dl?C {\9SHg _v:)\.!WgG6Jq}rGrv\;kt&=_2<¼2RUbC[L-w=T}xm-Ob4^roTj=d?7N%hx:v]cd3=KI$*r+D~ <ƶQ 2OFf9!rs˘(О"6%DNsL `ݪ;?*;e\xMvb^ zio#'Tc ť*|N7WI>,C[] uc̓7vuQ۞'>ӰLUbn&N>`"P!s:Np+^)&bTRGUsɋ(+FkU/K= V{!gz{ *A=ڏ1q ENYi`00Dn.`26 %7H[nLwL5rSrj|M"]ENnNPyZ4ZWej:7ޥVRTR5R%WJ3Oջbj䏐?A߄J"k3v |3Mk o;toySɦ2p^—e㷤:˂WmPC| (NSvP~@GeLdw4LD{QDߓ)QE\*J`ڣUݘ-DB8+V9n~99Bp#i?->a. 9׋\HYC_ ;XVOpyGF~!趣%lin/  b,u Mz=A|̗~HD_b9Lp=^]1}Z&hQQш%µc+U`^g س>؜B7߬MblcK~24FiQ5oBq_o?ID8jpϵaw#x- [?Bzܡ8XXQ^5B ]ՕHȤ>jGLHћ1TT;V^D4c7Ϭx}E(O6dD"NMn/U~g*DB!҈%ٛ**Kj#[N>iF4]?N|+~ُX@CuĶ#8p 6&sm"jۮ7D %lr Z_C6o;O|;Eɤlrlemklxczd >Ws$l~5JFR)v[ S(0% N`i|-F LfµO=S7",y]c;)b$FIτ13W"k^o89u}S N_ŏˊ΍J Sw8u p K[/M9XsTs_H' *D TwzQj`Na.vt HE~Z1[/E:A饢N4cĸnHj'f$wYEF}|یeqt1E""?f!Ԉ)ey@`V{IŸĦV-^NLC?N {5(#܊ɒ>U Ԭg䔕eXdx99!rs EGiTnu|"'<\wv @n _O$g$Xi+t6mD:CvQ%ptב]~Q_N^}S+\ˏ=՗bkϥā+paw7|riD{5{Ē[p7>K ⻚"b䄞ᵺ{v{*ӇEPف]auYї5Icg#{X16"g`00DnOGŪz\NNjCOZBه0@:%~s:WBQ*Cm͋qǯ̨ȣ{NfHl'v=C4_urh]+C%5ؤ^sdEFO 0!*dߩEE0f>ۨ"Kӕ$6W_}Y#h1z~rG+Dn҉`A8+2ʘNx`qKп99]9om K/e yKN֭aғnP*cHWM.]%3uKJOVO`ҺR,!C2 G_w ld'2pd:R/^v2 w|rƶ_tK_oL+YIn.ˍb' 92 ΀GHRw{ JT Lx"&3XySl̸c1y (1ޕsC wz ưZY:_vci ٱ;rwHd,$xZǶ qv._ 8F!xW`l[ꊣc)&p `а,j"W`7){(P$T'HJ /j\>3;[&GI p EeV7;Y I{* y8˟X%ɾsIO,"t`aŎ|W# QN&4|%-Ϟd0҅o=#ͯ21X!Y$ 9S^%1ŕoe*RT\"*YT_'֒Cz}h6&5Ҥ[f|LG4 ~ ua/ǵl+;X4_6ߵY#+gzvMW[un# C \rSE~f=ثXMbu>&{sɽ6'r/Wmt ό300(1.v8<e^q dn]IK~dR:???ԧ,J\^*D.gaAi\6w<*VH_0/tpԽ$d0kpxDYuͷ|7 GHb"ԀpP>}O+Uc:ߨk{LdCo&1J\4#79W ##VW0nO/ob|5d,Nr r1 .v TĤ>'TV^lux˰yIտttTSYKe('fq>\O P=OxmQ ~ڿ O`[q$Qᾲ7c)J^}hz#pxSٴyB`VnJB·yx}l]lzA{KpWyg|A/`vKɦjVo^rLm-^K߸dy|\z|Ͻ)0DbG\SCѸNeXބC_R:~IR_ OM AQhvXnpyUZvhzOdZQ(WKѭ3z;y"J:ZNE*> ΃Z̰JLb* FgҠ19Hbf^QܫW&ZOj[eav{bKkZᯥHM"wOhW%݌K&xf 6'\LbqKBуsLn;k}]ryK.k`]kjCgBZvj>>{߬ƉDhgcSQ|ZiC ,mFD*N飢AX̺ @tیNQOD3Nn+p@>t/;=hjo3jlيOw? oH58n5Ճr\eX?X7-bR(uNEXll!r9P|-P?>n $~!G΅]zq Pp:~L40ߏ!r;bUV i&b)*yĢ.3EF zrTft Q~=1;%xi>]a#RGypuE.Hn)ک^ӋL$t|/MRтKE>v>ݗ>K4_'L~Ȍ>K̻GrnŅ`|c)=5=yY j,vMhwt~^%x*1[+S}7bK={W᎐zP Eb#WY&ȧ[sCe5K.ӨK>mXN߸p>' ==,F{( G1̈~5ƺqDz qin&{QY//-Ӈޔ96,&(Ez U`dv{Du 02QբOOܥ)H?:} be5qDYw_WP$܈-*SDY Zl "8_?qZ~,y?xpՋ?ނ3ݣ;6M7lqQNbtSr}?Zi=hx;6tv03YmuO,ב#t?tunk(]α|uu77{L)k>"y,s C.vAKfw^4$ rGX",CuǏ0;~H#xbeblX̫~"H 3z%j-F~R O@5/tQoL{]Ptx*på{btѺWTѱtZT-]p[_zqΣnW̺mxh\C m; o BY'ZmDcNLUl]-¨XcVI^"'a.uyV;[Z*AafŬtQC =&VT CwF{=Ы1s"M8M}0tP@?*\!Qߨ1aԀ vR(q1p&\~Q^g;D"AYEu1i]iopu{!}N Ăq^ &3c,`m'i@T.SX>}\5e}jDEn!ZMcT }"NϘGm KqEDhGenQ=o(~c)87aP1_8r'=Evimi N>yr;}^OnU=<} V{]VS]-kjV!\B?ipivoFl$ugzF,;NTRWeI.K#MlyMd)쑬efw6l6w v$ؗᰇSrlK3s_.@g1t E ''?/~,gXw~b{!$lܦeOV\wJw'&WW͝+ÃS#R:u צx#l5F6*QI%#y'&AǗOLߖYE8[>UG6iӜBIW; ?nH6r[66tn!a#CrwL'?hy)4p~LG@v^ZCN+4I'IKW]RMNXG) p[ţkg ʘ$ufS^&ӉhZSQRhЉ{. >~yM}U%*Ou^X?c`aHt}̛*F*=)OwhagX}7{0F!f.v*XIYݽkG놫9._nqg\2lGx6~$&+pd I쀖Syp׍sRh$G~lreAVgȶbI5 :]G⧉R>7ޭ$M 3#;o_Sl.M@$A@T?s^vb@&)ă?K\3Q|rt|1';I[ǩA`&pZ0ehglkeiecqiciecq.BT#-ٸTua K6JK^tBUiۣ!&阡+$pR:t遀%BKq?RVLlWn(Fo^Ч_|q)HCmӷ9iluBtK>:wGnkrX{Q9􉤊,QY{%woJ8D3 !M?rN ^RoΈvt'f/ׂo^", W),vJ{kb$Z[޾X f ᷨe,%CD#tX=ewԯ=#sp2k`)@mM_$Q$I(u|\Indd$NF?lK=gKKc^F"C"%ݲ Kr_D'ib>оRhKaǥ1^׹;?.J(t֊;M.dVjs8e!n^6t6b1i8r(nI4j/V$K:13ry,w0@Xosa(NPX mi{3n^}g-t~t"6O捻fP|EЁ@e}DZ2kL=#w랫SJr˿ t:0aN,S ɭV^C*!me2guaA]t?|@! :'{gL}?XDi8v@Sy$H㤰 ]bZ:YөA=V@1?[nVdsL;V@M&fЩ>)ls.ݑL ~ ×x "F\{_L%wbؤb/s>#+M;H$N":m@,.ѻͷd3Py?e8ܜ3N|,M32}A++E/n闶/0|c(Vw t@FDm6ok)1p)} ;7|'uթs%9x<)}%ל"bz;t& ۦ(M#tSw%,.ilOS9'<,t4gLF,?+=QN LDQM:rddpX=}߻ I6mOn+km|l/":Cl7t IˠL; MD- Wu 8YB|q H0쩎'ۯp'ۂbz#8 !/531O?tJNgeHf#tƆ? Ё>l%HIaOX"RЙ3tmYH/D+/'eyTV_\ΟHÌT  IDATKsHJ'NKGe?in%(cej}K @tWZ_t5@ʁ0S\~'ۃxѻ7i{#o5-hg7%{dG+ UYJ!>N0I"9 b>IOvx:?~*$/~v x%umີ$j)[[}}+W/H6vi< aK 8I,RttQtn&0=y]D',ICju7ޗ!NF{t*c%݌LHˣzߓƓ)Am}i<͉. -R)}AZ`%K(uPx qHyQ,v  X>~Z ݬ,vRNI7S:8LF_I]b>~Io|F\7^/N\'/bX>75$f5Z ٿh)ē i2ⰳw.ܠ"&zO2*!&pXY6fw2{ߢ4,/1ӬaVD'GVN?{>\pC.!FLo~62"wH$C+}udjL4~!\>i~+8: #8BQzt^ : O`e؛RxTn%r'bw +;qJԤOi|?֟?&yg{)$GSπ>{Qiڤ֨F~dĸ^,4RhnaOg6r|@L)IAYyQ'1, M=z/6~+/Iz Ɗ?,":}+<76}ncƥxTatbDLG\1)-`IE]%xzwPH8YHDĐtK!s$f݄!):mɟ/^ E+ UDMNw4,7CWp <Q8dN`^$^A$Ouթ>h︤x'suΏ I|òi鐖٪ö _Ei9":9.#s8 |Fr-*L?F$NZZթyzDxÈt$G-ɶ1p湉+b%%שvA8vFo{$N;tif3e0畉$*:۫Ha::.ݔƧy ⱽw>Dȫ;BZnV(Je !B{TGLb.PJ2:, L9aw5RS4[K/H3R:%v sCuթN]rUtDƱ)dYWt!&g/D1-LǣK2;( z∁᧥Q z<'AvG6tCIqJ$٠ٟµ߀'(IY:dR[, {H n 2G̐fo3N$ )`g9G M33Sz b;D ";"{g1IʝuթSgpvrSi7G(OJxF~xHdn~]DL_׭M@o_;E/':.s2uL'v/'~б}~s:F #Uձt'ѩ+:`[o[Eiv#uq\L#˷kjU'+ y!ջ} f.CTny9,lɱ>E= $:9h3'9b.[X)1S/<#w[Pz ~ ]!ElWEZTf5ě89izLĹy8u}6 ec%錎GƇq%ȓyDb1pbr㗥2ĎciyBm: +wu=ɵdHTgt{Sޕ|68i 8Y֧HtE ?$*;JSM1 RH ɰЇS$hd}2G5bk`Zybzm  pst$mOIxiwשs>?-|]2) "NI&u|G>2>K2E %S. Zy%|rH?D0]t<.VIQft$-Q[3y3NSҭ:~Б$݊WLH˓2yVtuRR<#o„X.~3A~[ח$fo&K#: In #.vB\%mk:N_/bg0:N_La:T7)<8bz:}IJO`Gt5 mTWX9ac{;A y E41vֱ!`g׀ym3sD+mbVM6LӣTwJ8BNiyLNw).:<*7ozXM ]R(|d^?',;e宮=0?Lǯ ^p zR K}_囸vG%ۦyAv+xY8~QG(H 'ekN&u=yGK?2K7t_ Gs I:4>L˺<).2I4w$(61%<S1ЉP :W= _[0:V=Elbspߠb.s,{;XI*Sdq;UƆ 4ib٤2rG:'U8Qpprl=0rcMG.2`z令,+:|F |\u}Y'E8i줴=#{:?$^/'#NB\$w7/[j{t{OJpX-f $ףof3#iy +ёWrҳItd6 ̼W}^Z~%3W+.\5m o>D8,f]# jc]Jc%[e,3K8fq,Oda 3`^p1.xY"Ujew]䉅z^'{dTΫy.-CC29i#1LxRRY凍Tձ>R8G頄ѹt$p<.nReYb%1\M=-&f@dt#y^D-8"f8J N;-: t64=ɝ*/IN#!vB.oB<:c Un~$XY1yU)>Gi"f=՛HU*S#Q4;È]"sDeb8 V$nӿBpr}1318Y^1KD1O8BЀ᳻${`x9ʏ,;QsIzI51'Ni@'tCD.NZ:B}꼎|(AlNL`ȻzT'O7H]O軒?HcJ8v(HB$:dwtmi| +?R~;S˵"nI4Z@a$>["W%sKdž&do-8[+M̅*^#1^b3׋Œ4ɢ)Vt'Yfsyf/sfy +4np)0*:Tw G0]RMoVkrT8/>A{A>!'GaSw^6uT:6/A´4*VB.KENJ7ЛW,!6%U[W؟r0JbKS?ҩ^'QJbiٚ|(+c$[18ұt]{.b&qMU~]2 qIu$ A;@=:DmD]Iwok$-/`fO^a2K.@x'ao*#dELt'Te}@um$챵ZE+89&wp>SCdYpq^kD;Aa-4vhKBFa`Ol&j~v%tt<%'eyk߻zm.{I7UB!bG^'ϗ;uQOzsT&(b`X :OHAɖtb!ܺK$T+3t<...K01|ei:)3CF, //M ەt=I`0| %R{M&ϐ>J񸎾cJ0N++ÕesD'8N^trp;U5)®%-+4<'l\FYb-0k+_ABD#2;5]׾z=޾&7Ȕ"Q,?IcO|Q?)NIiyY[kO4u4wuWnbلC ݧ)^S:l!s24ś 3uK1ZY}I)vH8fX(tv0SR~BV#CMu?'Z%*l|t<.nt茰C$Xܜt Czܽ&fsqrryvT>=~KR T{*=E!Ut{Kj:tVn]'QK4mr<"27#뺰?O>k2x vkΣJ,k lG9%[eiM5,u KΏDtL 3!%fci쑶G-wu6KgtcZFL"ZW1i<.^2v^'>ۘ1q*# a|촴@تkG${; A F$Õw`s9TyoHV A㯐FʹߔL^ 2.A'@2+C^a$+i|3Cԩ|e#]/ɦt:FͿ=&wI+m_c{E2g~8iB.sJbIMIaM9"Qf9pq2%fB A+N;He7^%](nv+}h7I 7I'% ڲѫkoawM<ŁyL[f;U][ӅpAg?֑Qw%1H:3Tmܘ ꒫ٯCdaoah}\ZNJ[o:U'c P: ͏Km?+DyMR~GHe X(81+ͅO+cl~!4n;VFZ?QғYboH0N#@Q6p,uF"."qu;W?˒ofgBsRzduQ**uaI?.~1B6y{DB1xJ?('pTen:%W]]ԉ:T EV qxZZNI[onK:xUb17//Hr_؇51 A)GL]M2gkq9ǹp˵\MVV )r ,4潙>˛޻ٞXH1HQ~P QbBJJ$@-vwlLW.UYяޙٙٙ9̪Έ8wsJ7 #d/ԝL/Op~_:n{AT}Y[_#C6o၎,63Zl{QVc %;$bQ ň_׋N3sIdp]_)fK09G^v '/J oT~C-R)c~QvEԱK:pNRޤZ%`I8.![ncu}mLÖ|>!1aٵW WEJ^I>(T^lm6n9.%͚j<5xfte)o]KrFJn)oN0!;~B x|xw% @A8C0\By:&Ywn2'sJc0̿ی!_!``ֶdXiobene0)m`*__kǁH$n}ܭxx|C#ָŶz,66b3M6#`sNB,f_UNk"6q92{pҸʯpWĎ]L˓pmeUCk]UA9vtL^W`iZvɷ4풕E/(V ʡgd2 66ъ^KѫCs2zV&`DC8SIe&EMr5>9zoNgNX4ƣ!3]:sEa$wHqʛ7)<~$#-2oaRY1 {&gL` 3ya0\b;yFIcYc!V+2 Q<^bD w 0"*V#̽21\mqA? ,--.)ġ oBsN|~ؔ%bMx Kc5#&wd6AG.^y %FX8)6Wl>)(f:'n`~5M4Nl9I~F^Nz]EdK55UыKYx ~NIy:k}M.u4RR$)sDlG&>+өׯ؈ЧAءcn'4Ц^ӎQ휗E[«Vy sjd6rGj{A\NOJo7 Sx,^f> aDh"/=_Ì"6b`jqu@ #"(V`&x@! E$R@,|bf8 0s].(Kb4#nP.hY$8Me PX8Me-F/jE+]:[rB0bwW,ce/'/"MI6mvuoZa5 j燒 Vl>)C E$DfzsP[ψ"ge]cqk:qA[NH(Jol& a:yI b'Ei9*C\X6n]\uG|'N|VYjK zSgm<^ʊWc% U #PbD,ObĞ~AVy>M?Kd/`x<Nji Dy4/%Ԉ.ae0I1A|6 agr[;m;_x~UdvhG6+uk]4^ï^m9%MQiI#ip+Lȕ^5-5xHklpz+E0~Q'h^B1'eUF/hQvNt5*J,NwxwhI*e|~G޻\7uK.k]<88|DvΏv >,iT ]rM\[& uxCߚׁ%iv *T H|)''SAv?$WGoBv"M~|vee aPx1cT<'!;K$wa7r˓MQbYʲV`iE LErH ^afjj #FE(פ %\lNbCxX[ZݔCU-:L[|L(/>#NPo1 %IkvqDr$eN]XNQ(ޗH'F,Ka\R`Ol8Qv79ǺJQ?.^,oP\ׁQ*nv'ˡGTkX hGKCRyQ%-rU"!j;`uC/.[ ڳ$.ZRS䅔rvCDMr5>C;إsu!J<ƈDy#J "<cCrM9!t, .c"a&J Rg1D{{,k)hk$ބ+6`Cw% #H8%]HǒݍsݚiP + %5SBQ"tFt#=+3etK[8=vM# V1L^tAƻ9GCMR-!B8J:UΫZғ ^fqJ+X~dr>Z%4ySoi",kU9`e]y IcޛN gF.pJ4eqX'.ia ňuq™l>;3:ӣBf< :ԡ6 X81~Q+0;4]/K4ˍw=ti5Jx:`h@;Ox2< s+vH>nǫzeX;t4)lؙtiGn|SNV6mXlV(WTq4CaS\4u,S-Sܲ@jSe+$wx#b9Ztd).'J,GYFΥp\Dp#ihN֮ ZhJQV>x"kZW'O"~a*J/P-T,OxY]X!uHb䷨c0SܻJ ŭ !`O`De_P^Lso9^֥e7ט)OELkI"kZW^oMm<$N 1>q3}SGR8I93n\9$2r^ΪaSnY[! b] ij2ѹsqNaɼP Krydr=Pv^&1 "Q9xD]>00=;(uM=A\S.12,E4f)frd&iK^ԋsMLV1<}ɰxKj|IzD/ ^&X~]f%Ɵgo<b*vz܏c)=ƈl+_3u?KW?qvFEХۺPÐt;>e&%VarwTVD 9u IDAT Sun{NB1 dm;ь8ILOUn\&I` 92ۯ& ĎtWX@@,Pht]S`nXkUNCÐ^=fq#$l'=LQ% h:G>D0ӯ O#lӔJ@?)0oHKb+o4FxE ^ Mիs]L6+lVx1"'\yVEMr5~чzο!eeʺՖ)A8y:^y`I7X;GuR! sFz-hB{^K >2^M IN#;E˲,s&77ʔ=]79FLLK,$e[R}v.酇U 8\z\S5a@꭫l,Rk13Rbu;oaDaG1g(V#=B Ey :fP)#a^% euwn?<6d9c-rIlԉIytW8iBQtB$ӆq]DNd#})0?ᤄK9nOP%MаCe]FǍMѺW޵|jP.iNxg4d}^z64nI1g" 뿱z[ R*Qy^.2:lXKքD[8[w\MdeHU!G鯅 >$W ]⛲1Gy ԍJO7hILƲY_{8G%b'eK4G !04p 1}xK͠$걣4XZBZl} _\81;p&G>/L+BУ )0-ۤ:''Q_ޝr=#z_{'9GK8HC;)+=59\ӎivKZ*+^b9S|MkoI fJCǩ[y3MMr5~8;z.%+Cx<7xY,$N*X:1~530sxL|!=},Jwz|zgF?'" =OaaeaXkA\A/)IӦ[ ,jqqb[W3=rX$}*8D2eӽH,i Ʀ^7=![p&DF>槨jϊTËL髕tUjC?{ݲ6Tנkbİ$+S ?뿠o'b T+]w/ƪYjٱ'-NJ cfzh=&ʖ3z\LtL\U[D#>/$M{d%fcQDƈݚK$a >:>'kI\]ƈٶM7K8B2ރr} )/#S#94j iRiV QN-r5{ZZ2+H4I&*\llznN'D+T* !ry>#|W%CBZs=j#n> j$`Ꮸ #9O n 7IR!(&zz ' ')'{ՍӼ',SJ ^T^NT\ qbDj plbq˒ bjw JCjI*郲Y|66^1k\$"o֨lT(W{i |Z |i< ~<|!$)Ck Q\9xO Sa 62Tl 12Dz9'~_`3F 026V^coPeA[2-x;~\. f$H<~+aD2XazmMI4e։Jpƽ[K<]pc5(nH| ? j+&]G2#=ﺺHL|>abqv }X`5 ~. ;vH5drvIS$#: yh q}{H[sdIȠv_/3v[/%isTBO )2pjR ^]gj7u(j_įP^gⳐ$v\a7N;cďCsS8)Iz-mxs[yr Elôed[nvR8MvwN# :LV`~Xc)(Хp4$84F~:knT1- zzWԈ\Ԇ pÜ|AG&+$UTZU,h'$^LB =-1NBZ>^ ѦT*dn'qƦvKզT?m/$4ddsvCny.> ]5}6IƏ4x^ۄZqH3?*'*$YGIZYa!x{rw^cr\z3MI52+ŭw87 ,ƽItyup]e1<8L6'F8IK˩^4M`eiUo'B,M^F[ SJ"'M;b8.,zzdX_zyq  ?XkMʓq\vlS{%%iƤƘM0x^{X! kS|Yzo'$ZdzcDۏl{_:1KR7F~ϲ|G?E ː.Ӣ֜\BD℣ʑ~Du{@~PGe_b r渴6~:z_ i) Y26T7& iOP.cxٞtD&=WT="m!U|b~-+m3$`ɹZ1&5#|;mgkxìgoSYIe19YT÷u:NH?ͥ7PqIm6H~Gi>$l"--U7*vHB&8%U!Ly2lf$\?yjL.kcXnSg$INe !DGıeCre\F;mz0LemiSefHB=%s?9; ;ĎbGzjZ,`i? os6ō؎L+=ܥ:ql\'efTV{M۩&Awu k('Mg\Iq4 T0|m!>F`zqZ//J[rh\GfaRU/͍hY0 5 [ƍS-j "N 'L:**t4+L/|@Ge_&baT ɞ!MƄ*!baiKGg4 RI쳩-\2BL[>RU>Ҭ%*Tq}d}r䵏1P c?__zsj**^ O#e~ڑ'G-W$׊ӡ$S9AB<}Tm5yydq¤ ܜ姭p%_ڪzƵ)5"=$02+^/aˑ L^ˈ ;(XzeLq)Wz\>M\K>|}¼^-ۣT*}d-Wyfem\ł/d#'2xHT yx&Oj^9'8( 0rLW5K؇W*gzB6Q-QYZ#xd^3 xpwA[ Im/v=͓"*Fi#%]ηY5F]yxWܿ1=״IQ"Ϋ}:ONN/H" I&dCལ5*MYO!`w\^zqTR)#^uδkcNwPՎr~,~,+Ѡ={efL)^|[r{O0ZܧFMr5j|Z##IBm/1Lc孏Z\sږj pM Qx'\o,h{Tb@*r &o>vj֔ X9[^pϝ>=jQcpO(- oW1]|"/RU!uA|.F ?5{XM]h̟<u*kxc#__q ꮣNvsnVJk"mՉ%%wIe~F¬C]0/bԱU&>g+Z2^gKo1VxM$EY S_-:zR*e( !iyGU w3N/]%^6`Z %P $n6e-oS;K:`{-[.jVFyg~H26Ȱ8=sq{p[go\{wN I( PX1g**}ٹ 9qFIJ0G0NԾs@@ceY@a H## . ղQ|xFb k;8rh{ Ã7MSG?RPSbH ;Esbf~~ v,?|ǺnU\}җw܍Hw`44781BE8KV9wesOsf"f-}*q5# ~Çf[#4" B6k{jU/n*_NQz*C'!'*yu%U jIT0,\׬Vw0 hP ̍KMnBٖ,="! -ϱ῜2ddTf?w"k0|xFs[H3?TOu}&ǎn=o A":t'OJKA9nN9}j{NFHn([YH)޸},NWŏݦx$7#eٛRD|L,kV+qi*-Pd۶e I IDAT  '2YwAom>AӸ "sGIqT6 "SJ>Cb85.%o\ʂfUS'd0?*x)IMհ4feyٲfA tRؑ S2ːᝠڶo_ˉ, v݁׌}>tojQ|석{woEwc'-t7f)M!;+FI0ցKVk;J;N; D0r0p;_3޿sg($,Ba 9W!>&Oou*esՇ#-~1bk꽪$Gt\/3ʫ%-'ՊU/Z-Kv\J@UPMРdZP@]]2Eṫ jA&{H.CwJ;*i#3Hk Y(BĶۅf`-;oڱu lSmDthaa͐}{&lZʹ Wj9# PSw+6nf;,(F Y⿽g^5γgTBL(U@n.#>7!'Imݹ'SvrB /Ϫ7l!l2Yv g^^CbeB eۥ>خ,mD#lP"TZz*aO1 g3}1fZ Ay$//dq-FM ӷ*m5s2@\HWV7KUS#G(u36"+/:[;UKtp_g_|1C6zLS0"A l/AZ' l dW]'詘=D%_<5}%thto ш{$"lT=՟ȗsbr;)8*нa{c ϝ~֝Z_c,,Ds"YKXWlUXWLQ~:Ek,)ЂhAZ `ibnn!?o}Ԫ,D9D-ӬG E} _ӠfeKv s]J]813=/y VANʡ}?4C5 ^ŀ uFFL˽d$!;,˺Ug4<ܕ{OFr2sn ӿV UDo#Qg;}k<ؽtm{ Y8G:j; o;P8@φ؉iv~Diys߇YQfGI5B's5 Ccz^Xr>r*cѲ ~}p׊ mІ}X{?ת!t ><֪ S%$`}!]o8е-kdC6BÆz8G 8z%x3{H.CwGAy1*y~#^g}ZI^|y}av;:`LNEWX(/"j uSѝSX `YwA",>`/p !tGX e<^\ rkccU)]?}xPd݃s:p$l#4APwjV ȏ?-̼^W@_w{>Oú #- 'UKbcOrau 'LW/߱WӤo=T h<lY69k3 ] 1Az>kalŀ{[UAFg^E|5&@.ǹ׀3ܖ6hV8)bImIs?ze]Qئk2ːͲn`E 07Nໂ& 5=5͇ӳ#4zCmW'o1+4 b,q v33yu5XnǬp-GG`k؀FqRcvin;o[] q8 N6/w8WNAG1*,lX' {߁$!YFcU@E;;J! 1vh^?{@#akAo8a˚ ~^\ Y'Gh:~ *o9===MQI uOjy6||5Sxy;kY+Ns'Hw+Usc#΁Ȭ/P3Έ/=p Mpn-ԉG'/AHwQGOu0˺ʡ>e@Fr2+{r8ػK֞ t-# #@WI;WNEh "=;I=4T-N}38Yӻ;v֟_} A1QQԩ:6 ܼ3U8?iH'}֏Ϟ:w} ġ:5u/ԏ4G/:KylNt-EyUj0I]U$lГbY'??|9/h54z˛WcY3 5hFr'2+MӤ qc6ݢٍ*ڗ#xؗp#HQbqMߤQϋ3M0"Vյ ر]kvf9Q̪ mt͔VI`~UU! g^1rY[NU;! n4zs#zq}Rgu䆈Y*_1n>U#QIe ԫՈ 8vFȪ$W%QxXLWf+xL".+'hɶAZSb@<'"tp mt L-Y5'*,Q%u7 G0 # cNJIo] P[G9HE(v~1sZ B_cbfcpM=ݫ݂Ebc]')[W=;vX%Ųi.ձHқуz(ĵPUלnpGS ^.lV=سb@?ÉD/A#'ufw,Ζ#e TQTB.T UAq) AT!ܨ<لLɕO s:T%&D ru{AxpsHFHc&!`A[f6r"# NJI*ɎƌlQL Lo '8ae=( )mZy`Ȳ[74Ѓ> ݺe-yپSz{=:z3h^47z2Q7Jյ5*7*> C9CWm* 9zۡD󂅞6q}bnw<:PV96V ;\v6H{,S'EYѬ^SBщSlT.1m FZb㖺HTcy{,g:3Pyِ\ Zf@E7O#Bg M~Fw9uܣ Dÿ(ÈC?(̭MOIˆbDq_nS_qjvo|Z>4'FXmv+T竪iqh:`xitϨ'X ЅLhyP~8?#s8f3oVe$f\=i9t(Mj52KBN],\ihR>qDMJ\{dz*S#K'Kc%ot{,QI -ؖL w\ x\M,A]tt=MҝaFq=7CKnÝR0@H) w\ I0hiNbxnT#譡c {^G~ x$3;Nr, R*/KUAt?R&kEkQ=USu,bD֤4IRmE5GR+wI4 eۮQ3aGNްW*=rK%*ZmЎ݊ x !(*Y/?&R8pCeñc",~!(Z.uR;!%:d:WN s1q+wɺϋ<$r5Ұ^ YeFFr2[&N$A ~ x`"8JqAl+yl' ~s(G0lD1bfcJݱ11Q(1~fLU/q$'絍JlU] [| 2Ud֜P%+"d{dCuM]"Q,+BxОus"|Cb&aax%#ˌ2dxL+ܕ$q"A}ҹЇIFVw3(=00Fq8a%$!2DsDW=G=՛hn\dչ(< eSu߆I֗D KpkK_Y9DL;ۏ'lɲԮw/?+~!mn/x `$L/|Nc"Y(2[dQu'!MO bvt ,!Yt1-E&)ML 'P{X" XȤʐr-:\e~\\Bc;D-'!8caf" 47F~s Y_7wcG/:Unb*͡GqN_&y U}ӄWLt+Vk_R4ӇI틵|ﴏ̴fp| nFij3XXy;}j yl?ݰd)Pʉ[hż5/ Ag)Р $hY}mֹH.Cw'~Z$Y"u֟P$V4| EM٤ڈm==@WHs=2l9տ5<{8ǡ!:sto 1ذg_Yy9Z_jj~~^ZX~4`#U}{&#9yJ Š &jY}x*!k@uٶ@]sj /=9=P|9PLzrm X`S~-k,(?2#3\!ûCNe`B>Rlŷt<ς&%vSh4 ˤ|WcENA#4B+C z! 6`s`,Cp|Jِ=P٠i^VvϱX%C,pgcx˚3ÕH.CwKVĺ6TQͪZI KJ| H6H=]{ףx< :ût/y*Ή>lycFgW'8cdak$_|s^0P/2а!u3Sc Z8O,-ъы?0KC$>:y.Nfm3JFln[},ʁ\ȅ9Px[pٕwR uAcPf Yi}[Au3Ix<]fd$!|4zuv).I[iѯһkvf<ג?yo$1c)XoyO̵&e;xv>1`k]؇H&X?˝K hnuMÃ6[ƚRkFq>Ts!5L>2[@W=Ö́^4 n<q{ݐs4C+w[d4m|8z,z3eN"ç4O1jd= ?Fb ~x5DJ0݅a{3=k 13#WshQ1NO^} p2M YN ܔ䍋Uס\q:dSb?|NqdidT7,+v˚¸ӆ{ w{뼌'{ -m_wWaw}+O8-cH:{ đbqvր6̑O ǩz' ;.l =Lu.T I@B>*LYDYM\lzp L-1TN:s GFrAp{DXOP)poȵ Jic=|۞ahLvNŬ$ cwxNBB>zV"CJ#IQߌY!݁ڇ5l,Bc-5nZ,z=Ffzu *$`14=1r"h~r&8@r-oWR1{QuJC!/z!Ɯ5׊R.?:B)m1@^TjRO+K )p *Ƚ" EfT9路UYN: OIŖAVwKQ!-k.5jKru4*yϳD>^xg8`ժUgc wpd$xVLyl}q~ nH]q3 >FBs4 Dc4z>#JopMx1TݍYCӻ3d=FF4~Krl̢bݪEcԀ|Y6>7;k @1GgΖC5SKOFs$Oummmn*V3x-9$x4tTkE:0`Aܐf_=DY{l;密+GiAwqqvRm^\Ix-Et!y#o$3uq<i5$M6]@clʶF+ jR=kU]fA=ǂL]߅7Ds!V%{yHR%*DVʕ e˾ -T%+= 05Gac";8q#>_X:TK4: 4W#CilI,8Y@3HF1R-EH$1ø$%VmL(@yK6e,AGd[.8dqEہDa.9x~rZ]z8h𡕢BqNUoViQ7%>^S*'׎"}Q+oq{D>$r,"ԼmboK*rKI`nP#eqM_=& &R`һ4ZE z7F Uk*iE]a=t=yT#kYb4?nKcu?7?I6j'_uVZ+2c4`:@rC{/϶~.y* `GI&M#qr.P&Xrqig$jYc`_uaQ'uF@!.CTQ_9ή^-E &zx|̲FALkaCZY-9rٳ[sA2o)L=#8n/Hu&W<Ih-xmuwlˬ+⡛6~kIl@#?9Q[p͠ !tҭۑ*R q#F;Ls||wf{ﻔwcņDcz17FSnk41fLƮXAQ * Q=Bh3SM;o7wTb૒I t+ c`g 5K˰]d M cZR-;MZP*2WTgxC|.V:VJFg}gj9i,eH~%ay0p1y}% >-Y<{ zr[z|؁(tC'B . jxjEBEo:( Y-2zð?\Uyrǔ@0gmFEGCqc=E& 1}O]yv+V,w_9d's iWߎyЅ$0+Mm"JȾ'QpUvz_N'wPӰmӛ'<+xzϹ3G biny}n? dXR;8C2q]+tş0aUL<΃YAJ`UAIұK~d`v;;L(S7Níys}; eI37o<L_ %RmlzC;4B4ycS;\W)52a=OܱƟ;'-kk|aCNX;±v۪.iyb{ťJl[T7YqkTUK,i1+ #^Q?cBۋy$Wq&c0To]@'rA2AƁKz>1S K5O,o_ĺ;#cx՝NCk1k%Hm]]mm];wGmmͱXӿ{k1,]gt&\k_mUBCX@+ /[qiN;G!+L`+ FѵsZ U17٥w^HB/P,*M9ķ:DUeZ'=ДiI`;[R7[.tzX.q>ƥ!p%*D߫Ϭ+J;6٩heW7E{j(1Jۋ%20>CȀOJa(ޞܱ&#K!j[>ȅF8 dG[[ݭkK3F>:Ni@,q۱_9Y`0k*'{ ! @"Ut62|?W](ikğSo+\0Օ>- |,|%T]V*pΚ+!h `:Yg})ɐgUͭU`;=@H`鞻ΔfHQ~DdAhƼitE{:@1 D,ݬwMyD*%֑yeNb!L?D,,mVYE͐dc1'YK^Er!wH^ȿDҥr=_[[&ٲ2 >C׎-[6а>YqjXK~W"b:RC]]ـ) ވہ[!mgHXPBt)Fj7Tc:+$LqloŃv^Q+]!R V%frQU3ZU~&*_9Zg;MT8dY V0=*{"{H dB \)'rn}oQN ֶ㵬<^"#+\O91L󱳈7؆?BC\.."ވeTL%|sHhyO©)`]+u녝S%jiD$4 ;ߨwv=t?95Q \ԗ%0mώ(4B-fhHlrl;3;j%bI/P*/Py= -:븦U=ޙlսN"V#{oXvcpO _9(cgbvb%p* 霃Ʃ.@FTKL.v-~8:Ѵ? 싕g~:;ȳk `lq`b{ EJ;B )V&t=-r=R76 39GXޭ330HCz1I | D 0#rHDe}) J? i9' N*pi)'rt%kO -ɞA;axgI}%ФْUH`(N]-85`>$w IDATAeKp@ppprhSS~ۘso?D-SW%ob} ..D:˰ w ;n1dt b`h甿 \n5Oo@6V.`_) &:p+ ..ui0]b⛴_-잞,Y|M0k'5&*rps jME5O&yI3ݘ,? d$G E~(r"EFl[G:f_&mf}(M+EBVxS秫Rd݈\7{?]vgt-x d$|SHu׾"v)ѷIl p$ov:(`e@˚bE3cOiK'ơ :8I# CB$: =٠'Zڈ3yx|C4rvL*18ո3$\R=ߐm!_V]ӑAU8%z>'PױߚeN9vuEzcT/(~Vջ ^mN)v],ӽ0z s+%t8K5]^+U4݇u3P 1Ȃ_RZdQJtqY)~|#}lh3SKR2Y8}ni4A; HL(*C`/ip!|)N10B|H$j| # 3}O<<>Mb ^I-YO ?`:!0]eawp`eKhg ʞu ƞ8U7?; ð"qӵ0/v v3$0tk,1ͦ)8dCV6@ !e|Z59=78ł,ȁApPYIhpep|FΣ(f`DJ!\c7nc4f֤ `R:U +q{7X2'k=̇?kc&TD9OnWNıX)5_c`{E/uc.Δ@>O?;o&^Xع8X9e`Tc羱LS]&]˰˱r n%}YG`` ӹ0]-74IKo4cVUXH1Km2}"R G+[4o䈤C"ap30'VMr>l,?Z3NIE≣*KD/:z9"5=O[)2VO#h*FHSٿMw >_H U]K 9CB3$pJUi:3H4c]#/hŮ 1us}xrƌ޹eTbp]2‰=e&JG4ΫS=QàmTάKWu1(5u< /V$8"+v, >o4VkEΟn(*\ 7O=_˱zDMb] :2B20L?M7XP"+?t+Z2 B'*dB)ֹ"'gL-ފ*"/ژӘ4,0ɽB 9SFLY g36,W-f`P mӏ5fd@rgs NQ((,xxǧC A'@ HhH [aD=V_d$&Ґe.e T_Y|9XY/Vi+ޅ 뿋y #tr]7{]={Ǹ,N-FNU_a\2\.ت׵,ިۦЌIhR}YZ_ 8.RM<ȷ{`~sr>n=AUp ~{RӠlznqyx|ʴt+%`vs` ]k9t>aHBPkGbWbTʆ, Mg(v2tvt˦]k@VTHRKvsJ$O%wc6#B)+IY#3߶ɘy82Ȏ:`\'rx>"KkGsvA!) #2\+E >z wyr>A9>{Xu7$V O8=.Q7:L>B|V{! mǮ={Xy*Օ"2*' y70|F|W\]E7u$ *,V#8SvŴb8vRCy*Em]J x.A&!TjRtnT;]ztgnǙ;!-p*TBµ}&<9OSJ$`28[_]^ڋbkoa~O'`H`" TJh&Kc:g?gVݕW,zbk<1FoW/V]!+=+$1ӽFWaUAy"A}sMtO!cӦ͕uh15D$7U5"SD9\-fB(r~Uk<|sw+v<_=\`Kˠć.\Uq閇%t2vv[ۦ|~X=*h^P*ѓDF-*'>hzHFN}J 0q1,a&H]H.80.Q"%uA4so}l KM&wvZ! =C{ڬ ?l&`- NxØGØB4HJfp)1.(SL 'WdE²~nXwyng/\q&p\NL F .laRsk!5x b JT>@=@b9n{bn:wnZB ~7c;*w@aMRW:XNC뙺c dõJJ@r0Wk}",'b%7ZG$`C `RzZ_}IN`L:vZUP]S4'q83G6 ōc'"s%Z\ca9G@9L~t?+TLcH.v?c;DbXk0"XC kH.c$B9>5Bc9P#aLc>02Rq^cE!P_#bX< ,=⌷ƌϒZB׉@p C\å"+2M\ E.wD@dwpozp<8V, 2p,flD,R;a1GW#;s2 ἇ/խOԏ,e&:_W@9z͚: *0%??D~WKAUEK#"'B>n<~^W ͘%R Y.&.yyes1"| 'D6UʿPdqy˘";@v 2! ryPPŐ6X Wh yx+\#;\ْ M 1!FKywsg/X/2I'j΁"9Ƽdb j̖Q`> )X}EJYЄ |j̺5q>[C`y=}y4%;9c"=K*`xٕǐnI䗞mcnJ! .I ׂXJ,/mfR?o#4V(} C\t T\=pGHmu߇SC\%Z60nM[8"Z.X -'R><ܨk\=lMK!Nu*Bu}<8VO%+l39>@Cdж}XP7)Nbߛ%m^Lu*vRϷ`w (tY";pwfdoFC ~j~ W ZoB5JM=Hnz/@I-RZ7,ZB |n851dCґ({'md2(ךȤafy0D'7K[+U }lE6$`sX$2!e""lCRaӋ\ZOzڡZ)x"q̹K~'L1sj.j`p֛!R3ܯ:pnFڴyַF(k)/X?Lוz1<_Z Xԗ~UWi۴B)? ouQqsgIK*§B9;Y<>x"qY٦c.0:f$|0k~OӴ g,ܢlhz]iw Ep= >P\KA(?Cetʢ`9h q"pKXZOVA c] PDȃ&y O<c3xgKޚ$&@!LFiQ&!Rڨ:%bm %eM:,1 ^Ba 9{h^<&i.ߏ,Ks#99gj}؜ Zq-'|Tη:s`iJm !K9ބ0΃_ӔJJJ)]1 ]p@o''qR si8暇#Jqj+om nȟwpj3{5U宮_D'_x)'DL1k-,,":`x`re{ܴi0Nu,,3@fx~]ݥ,اo +t;G OJa(4H;΍8+",rPFq C!ýpev77~xrʬu=a-Wsk`t!p#s]R:^Grިp=U&ptC^_f^vm^J_iP 8~rEJ}!7jxN|I)6PV/ozOWJIw=಑i Tw[yk0گ&k[Yː*C3X|fWּ_9aP(V8o47j耯Ɯς%p<͢]M0)ݺ*Tk0|`_!X a; 0 FhX&~ WJ-1!p΃m5OA#pe^ io 5(ť|6b*\X)s"&AZ\ʄ0'ZXR 1hߦd})/1vD5Z4`4Ẻx=;?9*?) ßUO 9 䜟f8*+s^`N&h*42~hBrfMJa_ޗ ALt.k*8¡0{NCNڭ>%w+p@;X]^8R5#<$8l03F‚z;6!-_R 8MܔoB ܓ19;V,IiAJ@}r9M9_iwcIr]ܻ?]f'4d8b+#QX{.YozIn` \ sw19?]0.oBYs>0)pN/=VXi8x99e~stU "4-iS m9w:94bÒ7JlPlx&D,6hh<ϝ4EtBL_U7Ulc) #`* tFl?2;` Tx8,+eY)ϻ0@+CNpyepLF6 t C^ĭ5aso)#¾pg)aMqH*'vOG/:"47KY1:` L}/I{[NJYXʪQc0E̎#p>Hj)"ހE/+e6.l&FP)G҂zm|:&kRŖXSe t¬w=_( `vĎ=0kP37hhfhQ`+oM8} 9CgE)?{Q{C#\Veu}GK9(/N6F*UNOn-evx Kj=> < {pLƈ[01>/"Z9atFX ?Ks~đI}ܠYH0sbbhAJSa-|.`vO06]W4n8%xU%) `2@alV -|BM׬䤏KdZX:`=1F>p3l'VlthRy<1`WYJi* ՜"Ph1{h^1!`%'~:! 5ۮOi*dX +ivCJ`p kHT f6`I.I]7S8nXfKi. VTsLauVJ{kЄ$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I$I;C84IENDB`auto/07p/doc/include/fnc_attrrep1.eps0000640000175000017500000015440313570013207015542 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -29 -10 520 431 %%HiResBoundingBox: -29.342855 -10.605627 519.657145 430.394373 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmphu6qMp.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin /F15_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font UNOWZA+CMR12 %!FontType1-1.0: UNOWZA+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /UNOWZA+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 462 675] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA322FC8EF2C48B66146E16 4A2379E7FE6DE56B18F11C9E64E9D2E121136F34EE245F0ED85E61E13BAAE466 3254CED31E092FA0AF495CA711CB0C75DFE0B2A8DBD62213218F63CC30AAD46E 139CA5E72D08A852BE603175877F26BBCB4C03EBADC8A89273832FB97B84AA60 696B1F9D7938C70AE8EB9E0822BDE6CD2562383DDB88DB522E0E8EF7DD6C2D23 FED326125C5028389293EDDB63F96C4B66394C5917D05D1A404A3E970E7F4ABA A3C0BC461B6A6A53CDA87F531C4ABDF17055B558B766F74A72EA3D179D5E9503 D36C34289CA77554E2719348EE51AD6579E70DC7BF4F1E0AD03A2CE560450C6A D1CB00E784195A680B960F9383241D1FCDCC5C4ED3A14F61057E32BAD76AC33D 03587E2332089E2876DDCA449519922F6A58D45CDBA299D4A64AC256593C6DF4 3CD4DB8A2B20E9599D808CABD3652A0C807673BABCE4AA1FFBE2218AD91FA7BE 6619CD212975A356663BEEB89F92FC57CD26BC035CFD16EB2548CDA84D45D9FF 5605BF8FB808341D89C9FB63B3DB24BB81C4EF0565597863690F731DBD892AF9 707FE4081BA0A9AB382EAB8B360017F21CA94F876BCC04CD90B79629B49E908D F0AB023502F12E4DD655EB1C077C437D7B1C9272F6C68E72557212511B56910C DDA37F96623376972F79AA282D492BC45E725CC5BB7DA56E32073427A4730C7A 56BD2612532B8167327B328B7D1D1FB8E24DEE3D3A5961A44C54CB0C02B9ABB4 75138863B4E1327572FA91B773AFE1FB082AA4456B369F39682ABE7BAB2FA324 5715ABF6369A70D6CFEF8DE8ACF423FEEF049BE77CA575CB660B08065CD0BAF2 89336967888E0A9517CFF9DDE8D48AA225B8625206C3CF1F16F532D21F716BDC 4037AF898A36F356E7BF118F3FD58E46FA8290461560DFB589E94ADCF0AABA6E 4C3F6F748F35463A63FFE3CF7A9BA9A0B2999E6C0462E4E479027C91F97C2CCC CC32BD3DCBF5886B39E88F4DBC1828C5712A0C846DD95BBAFD8F957DB8830BB9 2BA620F4AA3F2D9ADE3B8D0CB0F971EA60CBB597519ED6A6363C517D937BADF4 3395F80789F0A5239F8A945D82A27A7B029B87631A22D10AB516DA5D4788A909 C8C24C725492478E32DE5FD5E33B245B04B51D882D84AF32C1E9F67FA7163197 558029A37BCF82B6A5D0BE76CB63AC081D51D482BAD6670D85F7214BF00D6E47 AA3FBCB900EC8EE68043935A6A0F258984B7B47861A3F04ED6A8BCD813D615DB 8DEDCC8E60615EF7A052E7A264381B53A65EC50A8B37C81DC0EF78274DAC6A18 ADCC63168DE54FF5B38A1252F4429872C3B7113DEBBB8A992AE1782447D8FCA3 4A7ED98301D300F2294CD670EE5507E69814679C96A8328C9AE3823BF48313FD 8A0FEA10834053BD1F5FB0647AB2C3F4FE8A6D465DB8FBEE0D147E790E03FE27 7BD70D81B685BDBB1B62FE6040B8780BE7F7ACA4D966568063E21E214353CBA0 4DD289A757ACCD554EA041CAE990EA3563F98E8E20CFF81A0570BE7A46AC0707 E8F7E1118D1B3A45FE7C400D5DF915A66BE666EB38A6F0C27B4C69BB37DFF44C DD5D3441BBB6150CA2BA3D83DF452AD05827EEABA4054FD3EE6ECB762BAE75BD 6387E72F39DEEABC2A67B75706C47BF0B94F49A4250F257F2BE48CC7B600AF2C B698B120B460D52C082A40B76DEA29AA00273906078F6B7C4A6CFEF523B2CF5B 7DD550C2DD7F01D1CF4939EECA6F064BE2EBFF5996696601061A702E15431921 0CA2AE5BC4C8F15575AC409EE9E65DCDBC557CD57DF6B3859CA50559E21EE9AC E2F087066593C19FC222C366BAFD7518BB5A3641B1BC8519F5278B84F281D47B 4B880C9FAFEFBAB51D6DEFF4668FA743A8AAC4FDB340179F302A234580D64BB2 6C22332C91D8763501FBD5C599CAC34BB0F9D670BB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /UNOWZA+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font CAGJNQ+CMMI12 %!FontType1-1.0: CAGJNQ+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /CAGJNQ+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 535 694] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 104 /h put dup 115 /s put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F41 668815CD36052368B6711E751ADE29795C5C4BA50A662637C1D402ADF9D03800 8F9BD6DD25E6FCD8794C2101898650CF9C5DC8B7552ED7725FD6645E9CD47B10 39791AE0B7A527994C1CE91D372D351B6A491F168C283971F80D8DC6B2CE6AB4 0F82CEF7FB5F6B11A8B9DFDF11CA7F9637D37D497250EB6E37527FAEB93310D9 D265E63060BDA430416545B7E537D4A6C08DC4EC4D8D5064E500029C13F8B031 DFF1A6CD40866563EF24E53A234F864F94F58B37BE1D447913180BFA796C88C3 0C04DD953EC5A10ADC975A734563EFBE235D7EA99C2590AE6087C86CE1F97FC9 B5C2882C22D0BEFA1CD560F23F35C9BE5E486FA14B14AA0147C6D2F7059C7872 37C32A866E8EEE2DEBB159F57D0429CC401AF3511B1BA0C86D9B655CD483F8A7 238A7887DBFBD423463BD78CCD24663A5C3AF7C19CF6BB07B3502F0CE979A427 EF2B59A96637671D7CD1F69B1F974E9E8A6BD2403245ED8E253D16D1A4CEC586 2BE2C2796C2F531DC0C8A8E08EC661F4501070B993197E61E256BBE829E2C9C2 8271DD71E1DBDCE111068E11354AC51E508F87B8C1A891CC2387771E03B6269C 95FF1A82EC1D751EFB7FE9C3C6E113DCFA8D9B6EE4DCF150131A04033C92CA7D 2C11BD010AC19904F256E6B31169A9E403B8D213E445FFCAA4480C5BA65D0910 6D3EB7A1E9BC8960989F16AB2D322D87DB5ABB558C9AF81E04C3EAE9AB19B0DD DE0ABFF08D55A96852B98130DDD064A549C1F948E2323701D8B95B9B9D1EA2C7 1E18D595EF86122FBFE44B4EA48915D96371686FD1A8CE7A2E76BED3A208C77F A149AC94E203D50AA2B7E89A619A28F5E82C9F6773C0472C6AE42F2016154B90 8AD814C3AE6FCFE2BCE54B3A832C0D4794A554302CAD0791CAB2EC0F6DECA8D5 8F974E49D5974B50B3796D2753AC04D712CBC4B65570EB6183A246AB1562C409 3B784490A54351CB25FE18A964DFBB8BFB5C5A51F4B013206BA0296AB5E299E5 F0212BFCEC079566002ACABF39F57555D1F0FA873ABE962C29CE917A2310206B BE5A2F42C175B285BBA272613239B778BFF52A12EEC6B88E687AB8D4E578D9A2 7F80404781E44585BD56B3D32C9C17B5BF66E58B194FC3051A8A644AF98B9D 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /CAGJNQ+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 549 441 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 0 0 5490 4410 re f /DeviceGray {} cs [0.9492] sc 3674.1 1688.57 m 4823.14 827.688 l 4898.06 3222.57 l 3703.25 3901.99 l f /DeviceGray {} CS [0.9492] SC 3674.1 1688.57 m 4823.14 827.688 l 4898.06 3222.57 l 3703.25 3901.99 l S 0 J /DeviceGray {} CS [0.9004] SC 4369.64 773.578 m 3253.77 1643.3 l 3268.66 3866.37 l S 3969.87 725.883 m 2883.57 1603.43 l 2885.78 3834.99 l S 3566.34 677.734 m 2510.17 1563.22 l 2499.49 3803.33 l S 3158.99 629.133 m 2133.55 1522.66 l 2109.74 3771.39 l S 2747.76 580.066 m 1753.65 1481.75 l 1716.48 3739.15 l S 2332.59 530.535 m 1370.44 1440.48 l 1319.67 3706.63 l S 2 J /DeviceGray {} CS [0] SC 4359.88 781.184 m 4389.19 758.34 l S 3960.37 733.555 m 3988.92 710.5 l S 3557.1 685.48 m 3584.86 662.207 l S 3150.01 636.953 m 3176.98 613.457 l S 2739.05 587.965 m 2765.2 564.242 l S 2324.16 538.504 m 2349.49 514.555 l S /DeviceGray {} cs [0.9004] sc 3674.1 1688.57 m 927.211 1392.74 l 860.566 3669 l 3703.25 3901.99 l f /DeviceGray {} CS [0.9004] SC 3674.1 1688.57 m 927.211 1392.74 l 860.566 3669 l 3703.25 3901.99 l S 0 J 3725.08 3889.58 m 3695.16 1672.79 l 944.109 1375.94 l S 3902.54 3788.66 m 3866.26 1544.6 l 1081.48 1239.34 l S 4085.15 3684.82 m 4042.17 1412.81 l 1222.84 1098.78 l S 4273.15 3577.92 m 4223.08 1277.26 l 1368.35 954.09 l S 4466.76 3467.82 m 4409.21 1137.81 l 1518.2 805.082 l S 4666.26 3354.38 m 4600.79 994.273 l 1672.6 651.559 l S 2 J /DeviceGray {} CS [0] SC 966.816 1378.39 m 898.66 1371.03 l S 1104.48 1241.86 m 1035.46 1234.29 l S 1246.13 1101.37 m 1176.22 1093.59 l S 1391.95 956.762 m 1321.12 948.742 l S 1542.11 807.832 m 1470.35 799.574 l S 1696.82 654.395 m 1624.11 645.883 l S /DeviceGray {} cs [0.9258] sc 3674.1 1688.57 m 927.211 1392.74 l 1851.98 473.191 l 4823.14 827.688 l f /DeviceGray {} CS [0.9258] SC 3674.1 1688.57 m 927.211 1392.74 l 1851.98 473.191 l 4823.14 827.688 l S 0 J /DeviceGray {} CS [0.9004] SC 912.066 1909.9 m 3680.73 2191.88 l 4840.13 1370.92 l S 898.012 2390.03 m 3686.88 2658.93 l 4855.92 1875.72 l S 883.746 2877.3 m 3693.12 3132.69 l 4871.96 2388.47 l S 869.266 3371.85 m 3699.45 3613.31 l 4888.26 2909.36 l S 2 J /DeviceGray {} CS [0] SC 934.926 1912.23 m 866.32 1905.24 l S 921.043 2392.26 m 851.918 2385.59 l S 906.949 2879.41 m 837.301 2873.07 l S 892.648 3373.84 m 822.465 3367.85 l S 20 w 0 2131.45 m 12.0547 2123.7 l 44.3398 2103.07 l 76.5547 2082.57 l 108.703 2062.22 l 140.777 2042.01 l 173.098 2021.75 l 205.34 2001.64 l 237.504 1981.68 l 269.59 1961.88 l 301.938 1942.02 l 334.203 1922.32 l 366.375 1902.79 l 398.461 1883.41 l 430.777 1864.01 l 463 1844.78 l 495.121 1825.72 l 527.145 1806.84 l 559.52 1787.86 l 591.789 1769.06 l 623.945 1750.45 l 655.988 1732.03 l 688.676 1713.36 l 721.242 1694.89 l 753.68 1676.62 l 785.992 1658.55 l 819.777 1639.79 l 853.414 1621.26 l 886.906 1602.96 l 920.246 1584.89 l 953.344 1567.09 l 986.285 1549.53 l 1019.07 1532.2 l 1051.69 1515.1 l 1082.48 1499.11 l 1113.12 1483.33 l 1143.6 1467.76 l 1173.94 1452.41 l 1203.25 1437.71 l 1232.42 1423.22 l 1261.43 1408.93 l 1290.3 1394.85 l 1318.36 1381.29 l 1346.28 1367.94 l 1374.04 1354.78 l 1401.66 1341.83 l 1428.59 1329.33 l 1455.37 1317.02 l 1482.01 1304.91 l 1508.5 1293 l 1534.38 1281.49 l 1560.11 1270.17 l 1585.69 1259.04 l 1611.13 1248.1 l 1636 1237.54 l 1660.72 1227.16 l 1685.29 1216.97 l 1709.72 1206.97 l 1733.61 1197.32 l 1757.36 1187.84 l 1780.96 1178.56 l 1804.41 1169.45 l 1827.36 1160.67 l 1850.17 1152.07 l 1872.83 1143.64 l 1895.33 1135.4 l 1917.34 1127.47 l 1939.2 1119.71 l 1960.91 1112.14 l 1982.48 1104.73 l 2003.57 1097.62 l 2024.51 1090.68 l 2045.31 1083.9 l 2065.96 1077.31 l 2086.16 1070.98 l 2106.22 1064.81 l 2126.14 1058.82 l 2145.91 1052.99 l 2165.23 1047.42 l 2184.4 1042.01 l 2203.44 1036.76 l 2222.33 1031.68 l 2240.8 1026.83 l 2259.13 1022.14 l 2277.32 1017.62 l 2295.37 1013.24 l 2313.01 1009.09 l 2330.52 1005.1 l 2347.88 1001.25 l 2365.11 997.562 l 2381.95 994.082 l 2398.64 990.746 l 2415.21 987.562 l 2431.64 984.523 l 2447.87 981.648 l 2463.96 978.918 l 2479.92 976.336 l 2495.74 973.902 l S /DeviceRGB {} CS [1 0 0] SC 0 2047.55 m 267.637 1883.09 l 511.41 1740.3 l 741.891 1612.06 l 958.844 1498.01 l 1163.99 1396.81 l 1356.4 1308.49 l 1537.19 1232.08 l 1705.52 1167.49 l 1862.44 1113.8 l 2007.27 1070.71 l 2141.16 1037.3 l 2263.58 1013.08 l 2375.79 997.145 l 2477.41 988.844 l 2569.74 987.332 l 2652.69 991.855 l 2727.53 1001.7 l 2804.75 1018.89 l 2872.45 1041.29 l 2939.34 1072.08 l 2996.4 1107.27 l 3044.8 1145.78 l 3085.78 1186.84 l 3120.23 1229.65 l 3155.81 1285.39 l 3155.81 1285.39 l S /DeviceRGB {} CS [0 0 1] SC 0 1964.22 m 253.926 1812.33 l 498.457 1673.6 l 729.883 1549.87 l 948.805 1440.39 l 1154.96 1344.9 l 1348.19 1263 l 1527.71 1194.47 l 1694.29 1138.43 l 1848.07 1094.2 l 1989.3 1061.04 l 2117.72 1038.21 l 2234.47 1024.69 l 2340.1 1019.56 l 2435.22 1021.94 l 2520.01 1030.85 l 2595.75 1045.42 l 2663.17 1064.87 l 2722.97 1088.44 l 2765.65 1109.73 l 2821.93 1144.95 l 2870.35 1183.59 l 2911.43 1224.46 l 2946.47 1267.3 l 2984.74 1326.06 l 3014.97 1385.89 l 3038.5 1445.97 l 3060.15 1520.39 l 3074.85 1593.45 l 3085.16 1678.64 l 3088.98 1765.32 l 3085.73 1854.57 l 3079.94 1898.56 l 3079.94 1898.56 l S /DeviceRGB {} CS [0 0.5019 0] SC 0 1882.27 m 211.523 1759.33 l 454.145 1625.87 l 684.078 1507.57 l 900.828 1404.28 l 1104.03 1315.67 l 1293.46 1241.28 l 1469.07 1180.52 l 1630.93 1132.64 l 1779.29 1096.8 l 1914.53 1072.07 l 2037.14 1057.45 l 2147.75 1051.92 l 2247.06 1054.42 l 2335.83 1063.95 l 2414.88 1079.52 l 2485.03 1100.24 l 2547.09 1125.25 l 2601.84 1153.83 l 2650.01 1185.31 l 2692.28 1219.11 l 2746.13 1273.22 l 2789.71 1329.69 l 2825.09 1388.01 l 2853.29 1446.7 l 2881.96 1524.99 l 2902.35 1602.26 l 2916.38 1679.53 l 2926.53 1778.41 l 2928.61 1873.65 l 2932.22 1850.42 l 2948.46 1746.34 l 2972.04 1639.52 l 2994.67 1563.55 l 3020.5 1498.65 l 3046.51 1451.27 l 3062.63 1429.36 l 3062.63 1429.36 l S /DeviceGray {} CS [0.5019] SC 0 1801.89 m 210.969 1684.19 l 404.812 1581.99 l 590.242 1490.07 l 766.965 1408.33 l 934.77 1336.62 l 1092.11 1275.23 l 1240.32 1223.23 l 1379.4 1180.25 l 1509.45 1145.87 l 1629.3 1119.87 l 1740.51 1101.36 l 1843.38 1089.81 l 1938.2 1084.65 l 2024.23 1085.3 l 2103.08 1091.12 l 2175.14 1101.56 l 2260.91 1121.67 l 2336.1 1147.77 l 2401.78 1178.74 l 2458.99 1213.63 l 2508.67 1251.58 l 2551.69 1291.86 l 2597.26 1344.49 l 2635.05 1398.85 l 2671.7 1465.05 l 2700.51 1531.38 l 2726.23 1608.22 l 2745.74 1686.34 l 2763.31 1786.71 l 2775.24 1859.4 l 2783.73 1848.02 l 2852.44 1606.59 l 2879.38 1545.58 l 2908.92 1496.78 l 2928.13 1473.69 l 2954.25 1451.87 l 2975.07 1441.61 l 2998.15 1437.07 l 3022.6 1439.73 l 3047.69 1450.4 l 3073.69 1470.34 l 3095.65 1495.02 l 3120.84 1534 l 3137.13 1566.81 l 3137.13 1566.81 l S /DeviceRGB {} CS [1 0.6465 0] SC 0 1724.04 m 176.23 1629.99 l 372.551 1531.47 l 559.293 1444.39 l 736.184 1368.55 l 903.039 1303.66 l 1058.19 1249.89 l 1203.23 1206.1 l 1338.29 1171.77 l 1463.56 1146.32 l 1577.84 1129.29 l 1683.06 1119.69 l 1779.62 1116.84 l 1867.96 1120.09 l 1947.46 1128.65 l 2019.87 1141.92 l 2085.67 1159.33 l 2163.5 1187.9 l 2231.34 1221.53 l 2290.33 1259.18 l 2341.53 1299.97 l 2385.89 1343.13 l 2433 1399.47 l 2472.32 1457.73 l 2505.11 1517.3 l 2538.41 1592.58 l 2567.74 1677.36 l 2597.91 1788.58 l 2612.81 1836.95 l 2623.22 1846.23 l 2632.77 1834.8 l 2653.04 1783.07 l 2699.59 1657.51 l 2730.51 1593.4 l 2753.07 1556.98 l 2785.82 1518.17 l 2808.67 1499.98 l 2833.51 1487.74 l 2861.47 1482.67 l 2890.39 1486.62 l 2917.91 1498.91 l 2944.1 1518.49 l 2969.46 1545.22 l 3004.09 1594.86 l 3060.2 1684.37 l 3071.27 1688.3 l 3081.5 1683.77 l 3081.5 1683.77 l S /DeviceGray {} CS [0] SC 2495.89 973.926 m 2606.47 960.652 l 2712.4 955.012 l 2797.22 956.527 l 2877.99 964.043 l 2955.64 978.129 l 3023.67 997.363 l 3083.27 1020.91 l 3132.05 1046.08 l 3182.76 1079.52 l 3215.47 1106.12 l 3254.79 1145 l 3289.56 1187.85 l 3325.21 1243.87 l 3354.65 1304.86 l 3376.6 1365.57 l 3393.53 1429.74 l 3408.74 1520.81 l 3415.51 1610.11 l 3415.64 1696.11 l 3407.81 1803.59 l 3392.74 1900.38 l 3378.41 1958.79 l 3361.64 2002.06 l 3352.16 2014.79 l 3341.27 2015.85 l 3333.09 2001.63 l 3325.29 1960 l 3321.73 1885.45 l 3324.27 1786.18 l 3335.57 1650.76 l 3350.58 1542.17 l 3368.27 1451.08 l 3388.75 1373.39 l 3410.82 1311.83 l 3433.28 1266.23 l 3452.61 1237.67 l 3462.4 1226.37 l 3493.63 1202.36 l 3514.71 1195.17 l 3537.77 1194.65 l 3559.78 1200.94 l 3580.11 1212.68 l 3608.65 1239.63 l 3634.64 1277.37 l 3658.68 1329.14 l 3678.57 1395.32 l 3691.84 1472.04 l 3697.66 1553.51 l 3696.95 1630.29 l 3688.41 1728.4 l 3672.09 1821.63 l 3652.33 1890.84 l 3638.03 1921.92 l 3628.93 1933.36 l 3617.51 1936.25 l 3608.08 1924.56 l 3598.72 1887.19 l 3593.5 1823.57 l 3593.56 1736.62 l 3601.61 1610.52 l 3614.04 1507.57 l 3632.37 1406.29 l 3655.84 1317.92 l 3675.69 1265.18 l 3698.11 1222.51 l 3715.33 1199.22 l 3733.86 1181.73 l 3753.43 1170.63 l 3785.63 1166.88 l 3807.04 1173.76 l 3826.05 1186.31 l 3852.39 1215.13 l 3875.81 1255.62 l 3896.51 1311.18 l 3907.54 1356.37 l 3918.6 1436.57 l 3921.61 1522.55 l 3917.74 1607.01 l 3904.78 1713.8 l 3885.47 1811.85 l 3860.98 1900.66 l 3840.1 1957.12 l 3818.66 1998.87 l 3811.29 2009.18 l 3796.67 2022.37 l 3784.73 2024.39 l 3771.1 2013.15 l 3763.77 1998.31 l 3751.79 1949.37 l 3745.14 1890.16 l 3741.6 1799.27 l 3743.33 1689.93 l 3751.59 1560.13 l 3764.4 1445.42 l 3779.94 1350.14 l 3803.4 1250.36 l 3823.3 1190.94 l 3846.71 1140.8 l 3865.45 1112.26 l 3885.31 1090.86 l 3906.01 1076.62 l 3927.51 1069.29 l 3949.46 1068.79 l 3970.37 1074.46 l 3980.37 1079.29 l 3999.43 1092.4 l 4027.76 1122.58 l 4045.5 1149.66 l 4069.33 1201.05 l 4083.94 1247.28 l 4094.98 1298.31 l 4103.45 1364.95 l 4106.82 1437.51 l 4104.29 1529.94 l 4094.85 1629.78 l 4077.62 1742.37 l 4053.04 1862.7 l 4012.83 2021.63 l 3954.15 2216.43 l 3894.76 2390.51 l 3820.39 2588.58 l 3748.28 2764.23 l 3677.1 2921.6 l 3621.49 3030.78 l 3568.09 3120.02 l 3529.09 3171.86 l 3503.19 3197.91 l 3490.34 3207.74 l 3490.34 3207.74 l S /DeviceRGB {} CS [1 0 0] SC 3155.82 1285.38 m 3182.45 1338.76 l 3204.47 1395.24 l 3222.25 1455.14 l 3240.42 1545.92 l 3249.72 1633.08 l 3252.27 1714.93 l 3249.36 1794.78 l 3239.29 1882.45 l 3229.91 1926.2 l 3223.81 1944.04 l 3215.73 1954.88 l 3207.7 1943.14 l 3203.41 1905.09 l 3203.67 1838.07 l 3212.2 1724.52 l 3226.4 1619.12 l 3245.59 1520.58 l 3264.8 1448.25 l 3287.07 1385.68 l 3309.81 1339.06 l 3333.74 1304.52 l 3351.18 1287.05 l 3369.83 1274.57 l 3399.99 1266.38 l 3410.18 1266.72 l 3442.34 1277.79 l 3462.97 1293.18 l 3489.68 1324.34 l 3513.33 1365.98 l 3533.48 1418.28 l 3549.3 1481.76 l 3559.49 1555.42 l 3562.88 1627.61 l 3559.14 1716.7 l 3549.29 1785.78 l 3538.08 1824.44 l 3526.5 1832.74 l 3521.58 1819.41 l 3517.91 1778.64 l 3519.28 1710.38 l 3529.31 1604.28 l 3543.53 1516.08 l 3563.25 1431.95 l 3581.65 1375.51 l 3602.01 1329.76 l 3615.86 1306.45 l 3630.74 1287.27 l 3646.48 1272.79 l 3663.37 1263.2 l 3681.11 1259.27 l 3712.02 1266.98 l 3722.49 1273.94 l 3748.79 1302.9 l 3770.06 1342.46 l 3787.03 1392.51 l 3799.59 1455.68 l 3805.74 1524.36 l 3805.87 1594.24 l 3798.34 1682.5 l 3784 1759.47 l 3771.25 1800.69 l 3763.58 1817 l 3752.71 1828.91 l 3741.22 1822.02 l 3733.03 1791.63 l 3728.76 1736.45 l 3729.69 1659.93 l 3738.68 1549.2 l 3751.81 1459.41 l 3770.42 1373.97 l 3793.84 1301.5 l 3813.51 1259.75 l 3827.45 1238.06 l 3842.74 1220.52 l 3859.19 1208.05 l 3877.33 1201.21 l 3896.71 1201.45 l 3915.5 1209.1 l 3933.29 1223.64 l 3956.73 1256.23 l 3976.13 1300.7 l 3991 1357.09 l 4001 1433.54 l 4003.01 1513.15 l 3998.57 1592.2 l 3985.41 1690.89 l 3966.02 1781.62 l 3941.72 1861.03 l 3921.95 1906.77 l 3902.87 1935.32 l 3891.27 1943.87 l 3881.04 1944.29 l 3868.36 1931.92 l 3855.46 1893.98 l 3848.42 1848.46 l 3843.22 1761.45 l 3844.23 1653.18 l 3851 1542.78 l 3863.76 1428.86 l 3883.87 1315.34 l 3903.18 1241.32 l 3922.46 1187.94 l 3945.44 1142.99 l 3971.7 1109.94 l 3990.95 1095.49 l 4021.76 1086.6 l 4042.19 1089.39 l 4061.67 1098.35 l 4079.85 1112.57 l 4105.61 1144.18 l 4128.79 1188.76 l 4148.2 1247.73 l 4162.15 1323.21 l 4167.63 1389.6 l 4168.27 1461.74 l 4162.88 1553.19 l 4150.94 1651.77 l 4130.84 1765.91 l 4103.37 1887.93 l 4060.97 2044.34 l 4000.13 2236.73 l 3923.31 2451.33 l 3849.35 2639.21 l 3776.49 2809.38 l 3705.14 2960.19 l 3650.04 3062.64 l 3610.48 3125.83 l 3571.67 3176.48 l 3545.92 3201.95 l 3533.15 3211.59 l 3533.15 3211.59 l S /DeviceRGB {} CS [0 0 1] SC 3078.43 1905.06 m 3071.22 1891.63 l 3074.21 1823.13 l 3087.41 1712.58 l 3106.21 1610.59 l 3129.41 1520.7 l 3157.09 1444.62 l 3180.88 1398.34 l 3206.86 1363.29 l 3224.16 1347.44 l 3241.13 1337.01 l 3259 1331.05 l 3277.51 1329.99 l 3307.59 1339.06 l 3317.62 1345.12 l 3347.62 1373.25 l 3374.07 1413.42 l 3395.4 1461.67 l 3412.6 1519.69 l 3424.61 1585.23 l 3430.69 1652.86 l 3430.53 1728.22 l 3426.45 1765.36 l 3422.22 1754.51 l 3426.23 1696.57 l 3440.81 1599 l 3458.2 1522.05 l 3480.5 1451.8 l 3501.18 1405.27 l 3527.55 1365.03 l 3542.54 1350.01 l 3557.57 1339.97 l 3574.2 1334.36 l 3590.34 1334.25 l 3609.76 1341.22 l 3627.65 1355.09 l 3652.27 1388.76 l 3671.97 1434.42 l 3686.32 1490.05 l 3694.76 1553.43 l 3696.8 1621.91 l 3691.08 1693.46 l 3684.91 1721.29 l 3674.5 1718.17 l 3673.52 1668.93 l 3680.94 1586.05 l 3693.6 1509.59 l 3710.92 1438.6 l 3734.08 1374.18 l 3753.87 1337.14 l 3781.57 1305.94 l 3795.53 1297.94 l 3811.94 1294.66 l 3827.67 1297.7 l 3844.88 1308.47 l 3868.15 1338.28 l 3881.72 1367.51 l 3896.9 1421.25 l 3905.57 1484.27 l 3907.52 1553.59 l 3903.36 1619.44 l 3894.52 1678.26 l 3879.37 1732.71 l 3871.68 1747.62 l 3859.26 1752.63 l 3852.42 1739.34 l 3846.51 1699.22 l 3845.92 1626.58 l 3852.05 1542.25 l 3864.34 1454.85 l 3882.69 1371.95 l 3902 1313.22 l 3923.72 1268.69 l 3944.15 1241.97 l 3960.21 1229.41 l 3976.06 1223.55 l 3994.45 1224.55 l 4011.67 1233.35 l 4035.93 1261.09 l 4049.6 1287.77 l 4065.7 1338.22 l 4076.37 1403.39 l 4079.96 1477.65 l 4076.63 1555.69 l 4067.66 1631.49 l 4049.52 1723.61 l 4031.27 1787.87 l 4011.52 1838.32 l 3997.98 1862.74 l 3986.14 1876.83 l 3974.52 1882.77 l 3960.85 1876.29 l 3953.1 1863.04 l 3941.26 1816.75 l 3935.5 1763.35 l 3933.02 1669.36 l 3937.1 1561.11 l 3947.21 1451.98 l 3963.44 1346.45 l 3985.77 1252.57 l 4005.09 1197.24 l 4027.19 1153.18 l 4042.88 1131.29 l 4061.34 1113.64 l 4090.62 1100.76 l 4111.8 1101.71 l 4121.96 1105.13 l 4141.42 1117.23 l 4167.83 1147.07 l 4183.39 1174.25 l 4197.47 1208.25 l 4214.36 1271.74 l 4222.67 1328.09 l 4226.73 1390.07 l 4226.03 1470.14 l 4219.36 1557.11 l 4204.68 1663.59 l 4182.52 1778.21 l 4154.19 1896.27 l 4104.12 2071.2 l 4037.9 2270.4 l 3956.64 2488.3 l 3877.06 2683.08 l 3799.53 2857.04 l 3725.52 3005.69 l 3668.54 3103.86 l 3627.62 3161.89 l 3600.39 3192.68 l 3573.37 3215.2 l 3573.37 3215.2 l S /DeviceRGB {} CS [0 0.5019 0] SC 3070.82 1420.26 m 3090.79 1402.79 l 3122.81 1388.09 l 3146.42 1386.87 l 3170.26 1393.59 l 3193.71 1408.2 l 3214.86 1428.86 l 3242.06 1468.19 l 3266.47 1520.82 l 3286.62 1586.27 l 3301.25 1663.07 l 3308.45 1721.61 l 3317.46 1708.56 l 3345.05 1592.1 l 3370.55 1516.03 l 3397.63 1459.53 l 3412.35 1437.17 l 3427.16 1419.81 l 3443.08 1406.4 l 3459.87 1397.8 l 3488.96 1395.77 l 3508.5 1403.78 l 3530.1 1422.49 l 3548.7 1449 l 3563.41 1479.58 l 3579.95 1531.72 l 3591.89 1600.03 l 3595.93 1664.59 l 3599.17 1651.02 l 3613.53 1571.74 l 3632.2 1501.53 l 3653.19 1445.88 l 3672.34 1410.05 l 3698.77 1378.96 l 3713.79 1369.53 l 3728.58 1365.75 l 3746.96 1368.76 l 3763.88 1379.8 l 3788.63 1414.68 l 3801.12 1445.87 l 3813.7 1499.39 l 3819.49 1557.08 l 3818.63 1617.74 l 3812.93 1654.84 l 3806.37 1642.86 l 3808.77 1591.37 l 3818.92 1518.74 l 3837.38 1440.06 l 3858.13 1383.05 l 3869.93 1360.01 l 3895.72 1327.41 l 3909.94 1318.47 l 3925.2 1315.52 l 3940.97 1319.94 l 3956.26 1332.41 l 3976.52 1366.06 l 3987.11 1397.13 l 3997.35 1451.8 l 4000.97 1511.25 l 3997.88 1580.14 l 3986.35 1650.69 l 3976.78 1680.96 l 3970.63 1692.46 l 3960.35 1696.68 l 3954.18 1685.23 l 3948.72 1646.53 l 3948.6 1585.97 l 3956.45 1495.08 l 3969.05 1419.12 l 3988.23 1345.32 l 4005.43 1301.04 l 4018.06 1277.5 l 4031.38 1259.29 l 4046.09 1246.04 l 4061.84 1239.08 l 4079.61 1239.96 l 4098.39 1251.6 l 4120.81 1284.24 l 4132.26 1313.65 l 4144.86 1370.24 l 4150.69 1438.6 l 4149.4 1512.25 l 4142.34 1583.59 l 4126.26 1672.44 l 4106.68 1743.54 l 4087.03 1793.19 l 4074.3 1815.44 l 4063.74 1827.59 l 4053.37 1832.96 l 4040.73 1827.96 l 4033.36 1816.6 l 4024.23 1787.75 l 4016.86 1737.13 l 4013.15 1650.23 l 4016.14 1547.99 l 4025.48 1442.3 l 4037.78 1358.07 l 4054.17 1280.96 l 4072.55 1220.24 l 4093.09 1172.93 l 4117.53 1136.53 l 4146.03 1114.62 l 4167.6 1110.26 l 4178.01 1111.66 l 4197.34 1120.37 l 4223.68 1146.6 l 4239.22 1172.16 l 4253.17 1204.86 l 4264.97 1244.9 l 4274.21 1293.78 l 4280.02 1352.17 l 4281.44 1422.23 l 4277.21 1505.09 l 4266.1 1601.19 l 4246.87 1711.64 l 4220.23 1829.95 l 4186.37 1955.86 l 4134.75 2122.08 l 4066.72 2315.8 l 3983.46 2530.18 l 3902.44 2721.8 l 3825.12 2889.59 l 3764.83 3007.72 l 3707.01 3106.38 l 3665.51 3164.76 l 3637.83 3195.82 l 3610.36 3218.52 l 3610.36 3218.52 l S /DeviceGray {} CS [0.5019] SC 3139.58 1571.48 m 3166.06 1642.78 l 3183.4 1693.06 l 3190.54 1703.46 l 3200.86 1697.77 l 3213.46 1670.49 l 3257 1561.85 l 3285.45 1509.61 l 3301.43 1487.49 l 3318.34 1469.36 l 3347.12 1450.22 l 3357.13 1446.88 l 3390.51 1447.93 l 3412.25 1459.15 l 3432.9 1478.53 l 3450.67 1503.46 l 3470.73 1543.7 l 3492.37 1606.17 l 3500.58 1629.74 l 3512.12 1632.34 l 3532.58 1579.57 l 3561.41 1508.09 l 3587.31 1462.83 l 3615.92 1432.15 l 3632.62 1422.89 l 3659 1421.04 l 3677.78 1429.95 l 3703.72 1459.82 l 3722.5 1501.13 l 3735.6 1551 l 3745.26 1607.72 l 3752.97 1580.12 l 3772.27 1506.05 l 3790.62 1456.26 l 3807.51 1423.36 l 3832.74 1392.6 l 3847.69 1383.57 l 3862.32 1381.17 l 3879.67 1387.14 l 3902.34 1413.15 l 3914.5 1440.65 l 3924.06 1477.04 l 3929.79 1519.9 l 3930.62 1573.1 l 3927.73 1600.54 l 3922.29 1584.78 l 3929.23 1519.79 l 3943.77 1450.67 l 3961.74 1396.26 l 3972.49 1373.12 l 3983.97 1354.31 l 3997.51 1338.88 l 4011.17 1330.07 l 4029.02 1328.56 l 4045.37 1338.1 l 4067.11 1373.97 l 4076.65 1406.39 l 4084.18 1460.46 l 4084.85 1521.19 l 4079.41 1577.62 l 4070.65 1620 l 4059.38 1648.35 l 4047.41 1651.69 l 4041.79 1636.39 l 4037.88 1593.32 l 4039.51 1533.96 l 4046.86 1464.28 l 4060.54 1390.91 l 4079.99 1325.84 l 4097.32 1288.45 l 4104.74 1276.74 l 4119.9 1259.55 l 4136.58 1250.05 l 4154.06 1250.25 l 4170.29 1260.49 l 4190.96 1292.4 l 4201.77 1323.72 l 4212.19 1381.98 l 4215.33 1450.24 l 4211.8 1519.24 l 4202.81 1588.16 l 4183.82 1674.94 l 4165.56 1730.91 l 4145.4 1772.36 l 4134.41 1786.17 l 4123.56 1792.69 l 4111.05 1788.73 l 4103.64 1778.06 l 4094.35 1749.59 l 4087.31 1702.47 l 4083.64 1619.59 l 4086.47 1523.83 l 4096.04 1419.64 l 4112.55 1318.25 l 4128.82 1252.46 l 4148.37 1197.48 l 4171.35 1154.97 l 4191.7 1131.98 l 4212 1120.14 l 4233.96 1118.46 l 4254.53 1127.19 l 4280.61 1154.7 l 4295.92 1182.52 l 4309.1 1217.94 l 4319.87 1262.29 l 4327.4 1316.11 l 4330.8 1381.39 l 4328.84 1459.16 l 4320.16 1550.87 l 4303.36 1657.76 l 4278.25 1775.89 l 4244.44 1905.55 l 4191.01 2079.63 l 4119.29 2283.74 l 4031.82 2507.52 l 3947.07 2706.49 l 3866.59 2880.19 l 3803.96 3002.59 l 3743.96 3104.98 l 3700.89 3165.67 l 3672.13 3197.99 l 3643.58 3221.51 l 3643.58 3221.51 l S /DeviceRGB {} CS [1 0.6465 0] SC 3088.99 1676.25 m 3107.6 1648.46 l 3159.4 1562.33 l 3192.46 1522.17 l 3216.05 1502.74 l 3239.88 1490.89 l 3266.36 1486.8 l 3291.44 1491.79 l 3313.5 1503.58 l 3341.32 1528.96 l 3368.01 1564.58 l 3394.87 1604.76 l 3406.84 1615.55 l 3418.41 1615.5 l 3437.6 1594.67 l 3494.59 1506.24 l 3523.59 1477.34 l 3541.54 1466.74 l 3559.32 1461.86 l 3578.37 1463.09 l 3596.1 1470.64 l 3612.12 1483.35 l 3636.87 1515.95 l 3666.94 1572.71 l 3679.23 1577.21 l 3695.98 1549.66 l 3731.27 1480.24 l 3755.5 1448.42 l 3768.41 1437.44 l 3783.6 1429.83 l 3798.45 1428.14 l 3814.82 1433.4 l 3829.46 1445.53 l 3841.72 1462.62 l 3858.38 1501.48 l 3872.44 1559.08 l 3881.29 1546.46 l 3905.96 1467.27 l 3925.16 1426.85 l 3947.7 1398.26 l 3961.81 1389.58 l 3975.56 1387.94 l 3992.73 1396.53 l 4013.15 1429.06 l 4022.27 1460.02 l 4028.79 1513.18 l 4027.78 1555.54 l 4025.67 1568.54 l 4022.03 1557.01 l 4027.53 1501.44 l 4040.9 1438.43 l 4057.97 1388.8 l 4073.67 1359.55 l 4086.34 1344.55 l 4099.16 1336.35 l 4114.59 1335.74 l 4128.62 1345.18 l 4147.33 1380.7 l 4155.25 1414.32 l 4159.97 1472.97 l 4156.95 1531.87 l 4147.02 1586.73 l 4136.36 1614.21 l 4124.44 1618.08 l 4118.66 1601.71 l 4115.28 1559.28 l 4117.51 1500.8 l 4125.92 1432.04 l 4140.85 1362.86 l 4155.79 1318.2 l 4174.11 1282.66 l 4188.63 1265.67 l 4205.05 1256.66 l 4222.49 1258.68 l 4238.12 1272.11 l 4251.27 1295.37 l 4261.85 1328.59 l 4269.05 1371.25 l 4272.09 1440.25 l 4267.8 1510.69 l 4258.03 1578.12 l 4240.04 1655.01 l 4220.95 1709.8 l 4208.35 1735.36 l 4197.78 1750.47 l 4187.23 1759.14 l 4174.32 1758.79 l 4163.08 1744.05 l 4152.93 1708.59 l 4147.24 1663.49 l 4144.65 1570.82 l 4149.49 1471.83 l 4161.64 1367.87 l 4175.84 1293.23 l 4193.84 1228.87 l 4214.6 1179.26 l 4231.87 1151.86 l 4240.67 1141.79 l 4259.51 1127.84 l 4279.12 1123.35 l 4298.47 1128.58 l 4325.36 1153.65 l 4341.03 1181.11 l 4353.91 1215.53 l 4364.8 1261.61 l 4371.67 1314.55 l 4374.43 1384.03 l 4371.44 1461.17 l 4360.68 1559.93 l 4342.13 1667.75 l 4314.3 1790.45 l 4278.09 1922.43 l 4223.74 2092.99 l 4148.73 2300.52 l 4057.1 2529.34 l 3970.93 2727.3 l 3887.46 2903.43 l 3823.08 3025.62 l 3776.59 3103.36 l 3732.02 3166.31 l 3702.25 3199.82 l 3672.68 3224.12 l 3672.68 3224.12 l S 5 w /DeviceGray {} CS [0] SC 3399.55 1432.59 m 3399.55 1054.59 l S 3469.3 1263.36 m 3617.23 1070.58 l S 3448.05 1642.42 m 3632.27 2072.64 l S 3587.44 1688.64 m 3413.5 2123.11 l S 3740.62 1524.47 m 3852.73 931.98 l S 3837.38 1416.24 m 4122.39 989.695 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 2997.48] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 376.195 31.9031] Tm 0 0 Td /F9_0 11.9552 Tf (s) 5.5113 Tj -0.5064 TJm 58.893 22.0109 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 64.7731 22.0109 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 68.0129 22.0109 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 18.832 17.1539 Td (0) 5.858 Tj -2.2627 TJm 24.7121 17.1539 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 27.9519 17.1539 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm -21.6071 12.2507 Td (0) 5.858 Tj -2.2627 TJm -15.727 12.2507 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -12.4871 12.2507 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm -62.4309 7.3019 Td (0) 5.858 Tj -2.2627 TJm -56.5509 7.3019 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -53.311 7.3019 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2627 TJm -103.6438 2.305 Td (0) 5.858 Tj -2.2627 TJm -97.7637 2.305 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -94.5239 2.305 Td /F11_0 11.9552 Tf (4) 5.858 Tj -2.2627 TJm -145.2532 -2.7403 Td (0) 5.858 Tj -2.2627 TJm -139.3731 -2.7403 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -136.1333 -2.7403 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm -263.4703 22.2359 Td /F9_0 11.9552 Tf (h) 6.7427 Tj 1.549 TJm -305.5094 85.9468 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -299.6293 85.9468 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -296.3895 85.9468 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm (5) 5.858 Tj -2.2632 TJm -291.9633 72.1159 Td (0) 5.858 Tj -2.2632 TJm -286.0832 72.1159 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -282.8434 72.1159 Td /F11_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -2.2627 TJm -278.0254 57.8847 Td (0) 5.858 Tj -2.2637 TJm -272.1453 57.8847 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -268.9055 57.8847 Td /F11_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -2.2627 TJm -263.6773 43.2347 Td (0) 5.858 Tj -2.2637 TJm -257.7973 43.2347 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -254.5574 43.2347 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -2.2627 TJm -248.9012 28.1488 Td (0) 5.858 Tj -2.2637 TJm -243.0211 28.1488 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -239.7813 28.1488 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -2.2627 TJm -233.6773 12.6051 Td (0) 5.858 Tj -2.2637 TJm -227.7973 12.6051 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm -224.5574 12.6051 Td /F11_0 11.9552 Tf (6) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -2.2627 TJm -329.0764 245.2241 Td /F9_0 11.9552 Tf (v) 5.6548 Tj 1.6087 TJm -314.8616 153.7823 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -305.6218 153.7823 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -299.7417 153.7823 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -296.5019 153.7823 Td /F11_0 11.9552 Tf (6) 5.858 Tj -2.2632 TJm -316.3937 201.6823 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -307.1538 201.6823 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -301.2737 201.6823 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -298.0339 201.6823 Td /F11_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm -317.9487 250.2921 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -308.7089 250.2921 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -302.8288 250.2921 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -299.5889 250.2921 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -314.8776 299.6644 Td (0) 5.858 Tj -2.2632 TJm -308.9976 299.6644 Td /F9_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -305.7577 299.6644 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -39.5637 63.6444 Td /F15_0 11.9552 Tf (7) 6.6471 Tj 3.9372 TJm -13.3778 65.2347 Td (8) 6.6471 Tj 3.9372 TJm -12.2599 177.2557 Td (9) 6.6471 Tj 3.9372 TJm -42.1619 182.3193 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 2.7639 51.0083 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 37.0432 57.0525 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font UNOWZA+CMR12 %%+ font CAGJNQ+CMMI12 %%EOF auto/07p/doc/include/san1.ps0000640000175000017500000004053713570013207013651 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors /lthick 5 def %% line thickness % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (u5) 3750 320 PR 300 2720 moveto (u6) 300 2720 PR 440 460 moveto (-) 550 460 PR (5) 605 460 PR (.) 660 460 PR (0) 715 460 PR 972 460 moveto (-) 1082 460 PR (2) 1137 460 PR (.) 1192 460 PR (5) 1247 460 PR 1132 540 moveto 1132 600 lineto stroke 1132 600 moveto 1504 460 moveto (0) 1669 460 PR (.) 1724 460 PR (0) 1779 460 PR 1664 540 moveto 1664 600 lineto stroke 1664 600 moveto 2036 460 moveto (2) 2201 460 PR (.) 2256 460 PR (5) 2311 460 PR 2196 540 moveto 2196 600 lineto stroke 2196 600 moveto 2572 460 moveto (5) 2737 460 PR (.) 2792 460 PR (0) 2847 460 PR 2732 540 moveto 2732 600 lineto stroke 2732 600 moveto 3104 460 moveto (7) 3269 460 PR (.) 3324 460 PR (5) 3379 460 PR 3264 540 moveto 3264 600 lineto stroke 3264 600 moveto 3636 460 moveto (1) 3746 460 PR (0) 3801 460 PR (.) 3856 460 PR (0) 3911 460 PR 3796 540 moveto 3796 2600 lineto stroke 3796 2600 moveto 4 600 moveto (-) 389 600 PR (6) 444 600 PR (.) 499 600 PR 4 884 moveto (-) 389 884 PR (5) 444 884 PR (.) 499 884 PR 540 884 moveto 600 884 lineto stroke 600 884 moveto 4 1168 moveto (-) 389 1168 PR (4) 444 1168 PR (.) 499 1168 PR 540 1168 moveto 600 1168 lineto stroke 600 1168 moveto 4 1456 moveto (-) 389 1456 PR (3) 444 1456 PR (.) 499 1456 PR 540 1456 moveto 600 1456 lineto stroke 600 1456 moveto 4 1740 moveto (-) 389 1740 PR (2) 444 1740 PR (.) 499 1740 PR 540 1740 moveto 600 1740 lineto stroke 600 1740 moveto 4 2028 moveto (-) 389 2028 PR (1) 444 2028 PR (.) 499 2028 PR 540 2028 moveto 600 2028 lineto stroke 600 2028 moveto 4 2312 moveto (0) 444 2312 PR (.) 499 2312 PR 540 2312 moveto 600 2312 lineto stroke 600 2312 moveto 4 2600 moveto (1) 444 2600 PR (.) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 1664 2312 moveto 1664 2312 lineto stroke 1664 2312 moveto 1664 2312 moveto 1656 2312 lineto stroke 1656 2312 moveto 1644 2312 lineto stroke 1644 2312 moveto 1636 2312 lineto stroke 1636 2312 moveto 1628 2308 lineto stroke 1628 2308 moveto 1612 2304 lineto stroke 1612 2304 moveto 1604 2304 lineto stroke 1604 2304 moveto 1596 2300 lineto stroke 1596 2300 moveto 1588 2296 lineto stroke 1588 2296 moveto 1576 2292 lineto stroke 1576 2292 moveto 1564 2284 lineto stroke 1564 2284 moveto 1552 2276 lineto stroke 1552 2276 moveto 1540 2268 lineto stroke 1540 2268 moveto 1528 2260 lineto stroke 1528 2260 moveto 1516 2252 lineto stroke 1516 2252 moveto 1500 2244 lineto stroke 1500 2244 moveto 1488 2232 lineto stroke 1488 2232 moveto 1472 2220 lineto stroke 1472 2220 moveto 1456 2208 lineto stroke 1456 2208 moveto 1440 2196 lineto stroke 1440 2196 moveto 1420 2180 lineto stroke 1420 2180 moveto 1404 2168 lineto stroke 1404 2168 moveto 1384 2156 lineto stroke 1384 2156 moveto 1368 2144 lineto stroke 1368 2144 moveto 1348 2128 lineto stroke 1348 2128 moveto 1324 2116 lineto stroke 1324 2116 moveto 1300 2100 lineto stroke 1300 2100 moveto 1276 2084 lineto stroke 1276 2084 moveto 1252 2072 lineto stroke 1252 2072 moveto 1228 2056 lineto stroke 1228 2056 moveto 1204 2044 lineto stroke 1204 2044 moveto 1180 2032 lineto stroke 1180 2032 moveto 1156 2020 lineto stroke 1156 2020 moveto 1136 2008 lineto stroke 1136 2008 moveto 1116 1992 lineto stroke 1116 1992 moveto 1096 1980 lineto stroke 1096 1980 moveto 1080 1964 lineto stroke 1080 1964 moveto 1064 1948 lineto stroke 1064 1948 moveto 1052 1928 lineto stroke 1052 1928 moveto 1040 1908 lineto stroke 1040 1908 moveto 1032 1888 lineto stroke 1032 1888 moveto 1028 1864 lineto stroke 1028 1864 moveto 1028 1840 lineto stroke 1028 1840 moveto 1032 1812 lineto stroke 1032 1812 moveto 1040 1784 lineto stroke 1040 1784 moveto 1052 1760 lineto stroke 1052 1760 moveto 1068 1732 lineto stroke 1068 1732 moveto 1088 1704 lineto stroke 1088 1704 moveto 1116 1676 lineto stroke 1116 1676 moveto 1144 1652 lineto stroke 1144 1652 moveto 1184 1628 lineto stroke 1184 1628 moveto 1224 1604 lineto stroke 1224 1604 moveto 1272 1584 lineto stroke 1272 1584 moveto 1332 1568 lineto stroke 1332 1568 moveto 1400 1552 lineto stroke 1400 1552 moveto 1472 1540 lineto stroke 1472 1540 moveto 1552 1528 lineto stroke 1552 1528 moveto 1632 1524 lineto stroke 1632 1524 moveto 1716 1520 lineto stroke 1716 1520 moveto 1808 1520 lineto stroke 1808 1520 moveto 1900 1524 lineto stroke 1900 1524 moveto 2004 1528 lineto stroke 2004 1528 moveto 2112 1532 lineto stroke 2112 1532 moveto 2220 1540 lineto stroke 2220 1540 moveto 2332 1544 lineto stroke 2332 1544 moveto 2444 1552 lineto stroke 2444 1552 moveto 2556 1560 lineto stroke 2556 1560 moveto 2668 1564 lineto stroke 2668 1564 moveto 2776 1568 lineto stroke 2776 1568 moveto 2892 1572 lineto stroke 2892 1572 moveto 3000 1572 lineto stroke 3000 1572 moveto 3104 1576 lineto stroke 3104 1576 moveto 3196 1576 lineto stroke 3196 1576 moveto 3284 1572 lineto stroke 3284 1572 moveto 3364 1572 lineto stroke 3364 1572 moveto 3436 1572 lineto stroke 3436 1572 moveto 3492 1576 lineto stroke 3492 1576 moveto 3540 1580 lineto stroke 3540 1580 moveto 3580 1584 lineto stroke 3580 1584 moveto 3604 1596 lineto stroke 3604 1596 moveto 3616 1608 lineto stroke 3616 1608 moveto 3616 1620 lineto stroke 3616 1620 moveto 3604 1640 lineto stroke 3604 1640 moveto 3588 1660 lineto stroke 3588 1660 moveto 3560 1684 lineto stroke 3560 1684 moveto 3524 1708 lineto stroke 3524 1708 moveto 3476 1740 lineto stroke 3476 1740 moveto 3424 1768 lineto stroke 3424 1768 moveto 3368 1800 lineto stroke 3368 1800 moveto 3284 1844 lineto stroke 3284 1844 moveto 3200 1888 lineto stroke 3200 1888 moveto 3108 1928 lineto stroke 3108 1928 moveto 3016 1968 lineto stroke 3016 1968 moveto 2920 2008 lineto stroke 2920 2008 moveto 2824 2044 lineto stroke 2824 2044 moveto 2732 2080 lineto stroke 2732 2080 moveto 2640 2112 lineto stroke 2640 2112 moveto 2556 2136 lineto stroke 2556 2136 moveto 2476 2164 lineto stroke 2476 2164 moveto 2400 2184 lineto stroke 2400 2184 moveto 2332 2204 lineto stroke 2332 2204 moveto 2256 2224 lineto stroke 2256 2224 moveto 2184 2240 lineto stroke 2184 2240 moveto 2120 2252 lineto stroke 2120 2252 moveto 2064 2264 lineto stroke 2064 2264 moveto 2004 2276 lineto stroke 2004 2276 moveto 1952 2284 lineto stroke 1952 2284 moveto 1904 2292 lineto stroke 1904 2292 moveto 1864 2296 lineto stroke 1864 2296 moveto 1824 2300 lineto stroke 1824 2300 moveto 1792 2304 lineto stroke 1792 2304 moveto 1764 2308 lineto stroke 1764 2308 moveto 1744 2308 lineto stroke 1744 2308 moveto 1724 2308 lineto stroke 1724 2308 moveto 1712 2312 lineto stroke 1712 2312 moveto 1700 2312 lineto stroke 1700 2312 moveto 1692 2312 lineto stroke 1692 2312 moveto 1680 2312 lineto stroke 1680 2312 moveto 1668 2312 lineto stroke 1668 2312 moveto 1664 2312 moveto 1664 2312 lineto stroke 1664 2312 moveto 1664 2312 moveto 1664 2304 lineto stroke 1664 2304 moveto 1664 2292 lineto stroke 1664 2292 moveto 1660 2284 lineto stroke 1660 2284 moveto 1656 2272 lineto stroke 1656 2272 moveto 1656 2264 lineto stroke 1656 2264 moveto 1652 2256 lineto stroke 1652 2256 moveto 1648 2248 lineto stroke 1648 2248 moveto 1644 2236 lineto stroke 1644 2236 moveto 1640 2224 lineto stroke 1640 2224 moveto 1632 2212 lineto stroke 1632 2212 moveto 1628 2200 lineto stroke 1628 2200 moveto 1620 2184 lineto stroke 1620 2184 moveto 1612 2168 lineto stroke 1612 2168 moveto 1604 2152 lineto stroke 1604 2152 moveto 1596 2132 lineto stroke 1596 2132 moveto 1584 2116 lineto stroke 1584 2116 moveto 1576 2092 lineto stroke 1576 2092 moveto 1568 2072 lineto stroke 1568 2072 moveto 1556 2048 lineto stroke 1556 2048 moveto 1544 2024 lineto stroke 1544 2024 moveto 1536 1996 lineto stroke 1536 1996 moveto 1524 1964 lineto stroke 1524 1964 moveto 1516 1932 lineto stroke 1516 1932 moveto 1504 1900 lineto stroke 1504 1900 moveto 1500 1860 lineto stroke 1500 1860 moveto 1492 1828 lineto stroke 1492 1828 moveto 1492 1792 lineto stroke 1492 1792 moveto 1492 1756 lineto stroke 1492 1756 moveto 1492 1724 lineto stroke 1492 1724 moveto 1500 1688 lineto stroke 1500 1688 moveto 1508 1652 lineto stroke 1508 1652 moveto 1520 1616 lineto stroke 1520 1616 moveto 1540 1584 lineto stroke 1540 1584 moveto 1564 1548 lineto stroke 1564 1548 moveto 1600 1512 lineto stroke 1600 1512 moveto 1640 1484 lineto stroke 1640 1484 moveto 1688 1456 lineto stroke 1688 1456 moveto 1736 1432 lineto stroke 1736 1432 moveto 1792 1412 lineto stroke 1792 1412 moveto 1848 1396 lineto stroke 1848 1396 moveto 1912 1380 lineto stroke 1912 1380 moveto 1988 1364 lineto stroke 1988 1364 moveto 2072 1348 lineto stroke 2072 1348 moveto 2156 1336 lineto stroke 2156 1336 moveto 2244 1320 lineto stroke 2244 1320 moveto 2344 1304 lineto stroke 2344 1304 moveto 2444 1288 lineto stroke 2444 1288 moveto 2548 1272 lineto stroke 2548 1272 moveto 2652 1256 lineto stroke 2652 1256 moveto 2752 1236 lineto stroke 2752 1236 moveto 2852 1216 lineto stroke 2852 1216 moveto 2952 1196 lineto stroke 2952 1196 moveto 3044 1176 lineto stroke 3044 1176 moveto 3144 1156 lineto stroke 3144 1156 moveto 3240 1136 lineto stroke 3240 1136 moveto 3328 1120 lineto stroke 3328 1120 moveto 3408 1104 lineto stroke 3408 1104 moveto 3496 1092 lineto stroke 3496 1092 moveto 3572 1084 lineto stroke 3572 1084 moveto 3636 1084 lineto stroke 3636 1084 moveto 3684 1096 lineto stroke 3684 1096 moveto 3712 1108 lineto stroke 3712 1108 moveto 3732 1132 lineto stroke 3732 1132 moveto 3736 1160 lineto stroke 3736 1160 moveto 3732 1192 lineto stroke 3732 1192 moveto 3720 1228 lineto stroke 3720 1228 moveto 3700 1268 lineto stroke 3700 1268 moveto 3668 1316 lineto stroke 3668 1316 moveto 3632 1360 lineto stroke 3632 1360 moveto 3580 1416 lineto stroke 3580 1416 moveto 3524 1472 lineto stroke 3524 1472 moveto 3464 1528 lineto stroke 3464 1528 moveto 3396 1584 lineto stroke 3396 1584 moveto 3312 1648 lineto stroke 3312 1648 moveto 3224 1712 lineto stroke 3224 1712 moveto 3132 1772 lineto stroke 3132 1772 moveto 3040 1832 lineto stroke 3040 1832 moveto 2944 1888 lineto stroke 2944 1888 moveto 2844 1940 lineto stroke 2844 1940 moveto 2752 1992 lineto stroke 2752 1992 moveto 2660 2032 lineto stroke 2660 2032 moveto 2576 2072 lineto stroke 2576 2072 moveto 2492 2108 lineto stroke 2492 2108 moveto 2416 2136 lineto stroke 2416 2136 moveto 2344 2164 lineto stroke 2344 2164 moveto 2264 2192 lineto stroke 2264 2192 moveto 2188 2216 lineto stroke 2188 2216 moveto 2124 2232 lineto stroke 2124 2232 moveto 2064 2248 lineto stroke 2064 2248 moveto 2004 2264 lineto stroke 2004 2264 moveto 1952 2276 lineto stroke 1952 2276 moveto 1908 2284 lineto stroke 1908 2284 moveto 1868 2292 lineto stroke 1868 2292 moveto 1824 2296 lineto stroke 1824 2296 moveto 1792 2304 lineto stroke 1792 2304 moveto 1764 2304 lineto stroke 1764 2304 moveto 1740 2308 lineto stroke 1740 2308 moveto 1724 2308 lineto stroke 1724 2308 moveto 1712 2312 lineto stroke 1712 2312 moveto 1700 2312 lineto stroke 1700 2312 moveto 1692 2312 lineto stroke 1692 2312 moveto 1680 2312 lineto stroke 1680 2312 moveto 1672 2312 lineto stroke 1672 2312 moveto 1664 2312 moveto 1664 2312 lineto stroke 1664 2312 moveto 1664 2312 moveto 1672 2320 lineto stroke 1672 2320 moveto 1676 2328 lineto stroke 1676 2328 moveto 1680 2336 lineto stroke 1680 2336 moveto 1684 2344 lineto stroke 1684 2344 moveto 1692 2352 lineto stroke 1692 2352 moveto 1700 2360 lineto stroke 1700 2360 moveto 1712 2364 lineto stroke 1712 2364 moveto 1724 2368 lineto stroke 1724 2368 moveto 1732 2368 lineto stroke 1732 2368 moveto 1740 2364 lineto stroke 1740 2364 moveto 1748 2356 lineto stroke 1748 2356 moveto 1752 2344 lineto stroke 1752 2344 moveto 1752 2328 lineto stroke 1752 2328 moveto 1748 2316 lineto stroke 1748 2316 moveto 1744 2304 lineto stroke 1744 2304 moveto 1740 2292 lineto stroke 1740 2292 moveto 1736 2276 lineto stroke 1736 2276 moveto 1728 2260 lineto stroke 1728 2260 moveto 1720 2236 lineto stroke 1720 2236 moveto 1712 2212 lineto stroke 1712 2212 moveto 1704 2184 lineto stroke 1704 2184 moveto 1696 2152 lineto stroke 1696 2152 moveto 1684 2120 lineto stroke 1684 2120 moveto 1676 2080 lineto stroke 1676 2080 moveto 1672 2044 lineto stroke 1672 2044 moveto 1668 2000 lineto stroke 1668 2000 moveto 1664 1956 lineto stroke 1664 1956 moveto 1668 1912 lineto stroke 1668 1912 moveto 1672 1868 lineto stroke 1672 1868 moveto 1684 1820 lineto stroke 1684 1820 moveto 1700 1772 lineto stroke 1700 1772 moveto 1720 1720 lineto stroke 1720 1720 moveto 1752 1672 lineto stroke 1752 1672 moveto 1788 1620 lineto stroke 1788 1620 moveto 1832 1568 lineto stroke 1832 1568 moveto 1884 1512 lineto stroke 1884 1512 moveto 1944 1460 lineto stroke 1944 1460 moveto 2012 1404 lineto stroke 2012 1404 moveto 2096 1336 lineto stroke 2096 1336 moveto 2184 1272 lineto stroke 2184 1272 moveto 2284 1204 lineto stroke 2284 1204 moveto 2388 1136 lineto stroke 2388 1136 moveto 2488 1076 lineto stroke 2488 1076 moveto 2588 1016 lineto stroke 2588 1016 moveto 2692 956 lineto stroke 2692 956 moveto 2796 896 lineto stroke 2796 896 moveto 2896 848 lineto stroke 2896 848 moveto 2992 800 lineto stroke 2992 800 moveto 3088 760 lineto stroke 3088 760 moveto 3180 720 lineto stroke 3180 720 moveto 3280 688 lineto stroke 3280 688 moveto 3372 664 lineto stroke 3372 664 moveto 3456 648 lineto stroke 3456 648 moveto 3532 644 lineto stroke 3532 644 moveto 3596 648 lineto stroke 3596 648 moveto 3652 664 lineto stroke 3652 664 moveto 3696 692 lineto stroke 3696 692 moveto 3724 732 lineto stroke 3724 732 moveto 3740 776 lineto stroke 3740 776 moveto 3744 824 lineto stroke 3744 824 moveto 3740 880 lineto stroke 3740 880 moveto 3724 944 lineto stroke 3724 944 moveto 3696 1012 lineto stroke 3696 1012 moveto 3656 1088 lineto stroke 3656 1088 moveto 3612 1164 lineto stroke 3612 1164 moveto 3556 1240 lineto stroke 3556 1240 moveto 3488 1328 lineto stroke 3488 1328 moveto 3412 1416 lineto stroke 3412 1416 moveto 3328 1496 lineto stroke 3328 1496 moveto 3244 1576 lineto stroke 3244 1576 moveto 3144 1664 lineto stroke 3144 1664 moveto 3040 1744 lineto stroke 3040 1744 moveto 2940 1816 lineto stroke 2940 1816 moveto 2840 1880 lineto stroke 2840 1880 moveto 2744 1940 lineto stroke 2744 1940 moveto 2652 1992 lineto stroke 2652 1992 moveto 2564 2040 lineto stroke 2564 2040 moveto 2480 2080 lineto stroke 2480 2080 moveto 2388 2124 lineto stroke 2388 2124 moveto 2300 2160 lineto stroke 2300 2160 moveto 2220 2188 lineto stroke 2220 2188 moveto 2152 2212 lineto stroke 2152 2212 moveto 2080 2236 lineto stroke 2080 2236 moveto 2016 2252 lineto stroke 2016 2252 moveto 1964 2268 lineto stroke 1964 2268 moveto 1920 2276 lineto stroke 1920 2276 moveto 1868 2288 lineto stroke 1868 2288 moveto 1824 2296 lineto stroke 1824 2296 moveto 1792 2300 lineto stroke 1792 2300 moveto 1764 2304 lineto stroke 1764 2304 moveto 1744 2308 lineto stroke 1744 2308 moveto 1724 2308 lineto stroke 1724 2308 moveto 1712 2308 lineto stroke 1712 2308 moveto 1700 2312 lineto stroke 1700 2312 moveto 1692 2312 lineto stroke 1692 2312 moveto 1680 2312 lineto stroke 1680 2312 moveto 1672 2312 lineto stroke 1672 2312 moveto 0 3068 moveto showpage auto/07p/doc/include/menubar.fig0000640000175000017500000000423413570013207014555 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 7 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 menubar.png 75 675 12840 675 12840 2895 75 2895 75 675 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 1350 1950 225 1950 225 1500 1350 1500 1350 1950 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 1050 1950 375 3600 1425 3600 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 2475 1950 1350 1950 1350 1500 2475 1500 2475 1950 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 3600 1950 2475 1950 2475 1500 3600 1500 3600 1950 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 2250 1950 1575 3600 2625 3600 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 3450 1950 2775 3600 3825 3600 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 6975 1950 5325 1950 5325 1500 6975 1500 6975 1950 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 8625 1950 6975 1950 6975 1500 8625 1500 8625 1950 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 10350 1950 8700 1950 8700 1500 10350 1500 10350 1950 2 4 0 2 4 7 50 0 -1 0.000 0 0 7 0 0 5 5250 1950 3600 1950 3600 1500 5250 1500 5250 1950 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 4650 1950 3975 3600 5025 3600 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 5925 1950 5250 3600 6300 3600 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 7800 1950 7125 3600 8175 3600 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 9450 1950 8775 3600 9825 3600 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 3 12000 1875 12750 4050 11325 4050 2 1 0 1 4 7 50 0 -1 0.000 0 0 -1 0 0 4 11400 1575 10275 3450 11325 3450 11850 3450 4 0 4 50 0 0 12 0.0000 4 135 555 600 3525 X-Axis\001 4 0 4 50 0 0 12 0.0000 4 135 555 1875 3525 Y-Axis\001 4 0 4 50 0 0 12 0.0000 4 135 540 3075 3525 Z-Axis\001 4 0 4 50 0 0 12 0.0000 4 135 1410 7050 3150 Number of Periods\001 4 0 4 50 0 0 12 0.0000 4 135 1275 7050 3375 To Be Animated \001 4 0 4 50 0 0 12 0.0000 4 180 1560 6900 3600 In Inertial Coord Sys\001 4 0 4 50 0 0 12 0.0000 4 135 750 9000 3300 Line/Tube\001 4 0 4 50 0 0 12 0.0000 4 135 780 9000 3525 Thickness\001 4 0 4 50 0 0 12 0.0000 4 180 1260 5325 3525 Coloring Method\001 4 0 4 50 0 0 12 0.0000 4 135 1560 3750 3300 Labels To Be Shown\001 4 0 4 50 0 0 12 0.0000 4 180 1725 10875 3900 Orbit Animation Speed\001 4 0 4 50 0 0 12 0.0000 4 180 1980 10425 3300 Sattelite Animation Speed\001 auto/07p/doc/include/kdv3hom.eps0000640000175000017500000032232113570013207014521 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .137487420.136936940 %%CreationDate: Sat Dec 15 06:01:59 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: kdv3hom.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 108.666467531 moveto 92.374864204 108.666118468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.374864204 108.666118468 moveto 104.749728408 108.66520901 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.749728408 108.66520901 moveto 117.124592612 108.662801567 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.124592612 108.662801567 moveto 129.499456816 108.656096993 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 129.499456816 108.656096993 moveto 136.288461796 108.648384733 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.288461796 108.648384733 moveto 143.077466776 108.635114438 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.077466776 108.635114438 moveto 149.866471756 108.612222105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.866471756 108.612222105 moveto 156.655476736 108.572612613 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 156.655476736 108.572612613 moveto 161.45546586 108.528312381 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.45546586 108.528312381 moveto 166.255454984 108.463308572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.255454984 108.463308572 moveto 171.055444108 108.367981373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.055444108 108.367981373 moveto 175.855433236 108.228469934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.855433236 108.228469934 moveto 178.634934412 108.120163851 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.634934412 108.120163851 moveto 181.414435588 107.985892173 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 181.414435588 107.985892173 moveto 184.193936764 107.820133867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 184.193936764 107.820133867 moveto 186.97343794 107.616986367 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.97343794 107.616986367 moveto 188.647716396 107.474173877 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 188.647716396 107.474173877 moveto 190.321994848 107.314815396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 190.321994848 107.314815396 moveto 191.996273304 107.138604528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.996273304 107.138604528 moveto 193.67055176 106.946345466 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.67055176 106.946345466 moveto 194.899897976 106.796364792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 194.899897976 106.796364792 moveto 196.129244196 106.641085806 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 196.129244196 106.641085806 moveto 197.358590416 106.483841481 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 197.358590416 106.483841481 moveto 198.587936636 106.329844448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.587936636 106.329844448 moveto 199.597089004 106.211227914 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.597089004 106.211227914 moveto 200.606241368 106.106116479 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.606241368 106.106116479 moveto 201.615393736 106.02294834 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 201.615393736 106.02294834 moveto 202.6245461 105.973203097 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.6245461 105.973203097 moveto 203.436324216 105.967727529 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 203.436324216 105.967727529 moveto 204.248102328 106.004178494 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.248102328 106.004178494 moveto 205.05988044 106.095804826 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.05988044 106.095804826 moveto 205.871658556 106.259349898 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.871658556 106.259349898 moveto 206.570676304 106.473729934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.570676304 106.473729934 moveto 207.269694052 106.773515882 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.269694052 106.773515882 moveto 207.968711796 107.178924076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.968711796 107.178924076 moveto 208.667729544 107.714509894 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 208.667729544 107.714509894 moveto 209.260006712 108.292061655 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.260006712 108.292061655 moveto 209.85228388 109.005764587 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.85228388 109.005764587 moveto 210.444561044 109.880856531 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.444561044 109.880856531 moveto 211.036838212 110.946864851 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.036838212 110.946864851 moveto 211.540734964 112.029689424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.540734964 112.029689424 moveto 212.044631712 113.299863725 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.044631712 113.299863725 moveto 212.54852846 114.785039942 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.54852846 114.785039942 moveto 213.052425212 116.516486394 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.052425212 116.516486394 moveto 213.476741768 118.191227534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.476741768 118.191227534 moveto 213.901058328 120.088854357 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 213.901058328 120.088854357 moveto 214.325374884 122.235034821 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.325374884 122.235034821 moveto 214.749691444 124.657828447 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.749691444 124.657828447 moveto 215.12658428 127.066392934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.12658428 127.066392934 moveto 215.503477112 129.740296591 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.503477112 129.740296591 moveto 215.880369948 132.704134676 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.880369948 132.704134676 moveto 216.257262784 135.983985827 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.257262784 135.983985827 moveto 216.597463708 139.238691941 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.597463708 139.238691941 moveto 216.937664632 142.79431066 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 216.937664632 142.79431066 moveto 217.277865556 146.672561307 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.277865556 146.672561307 moveto 217.61806648 150.895626 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.61806648 150.895626 moveto 217.91967374 154.94600781 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.91967374 154.94600781 moveto 218.221281 159.300602447 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.221281 159.300602447 moveto 218.52288826 163.974690717 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.52288826 163.974690717 moveto 218.824495516 168.983017917 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.824495516 168.983017917 moveto 219.098580912 173.835955393 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.098580912 173.835955393 moveto 219.372666304 178.986072677 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.372666304 178.986072677 moveto 219.6467517 184.441936257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.6467517 184.441936257 moveto 219.920837092 190.210787907 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 219.920837092 190.210787907 moveto 220.181110908 195.98382056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.181110908 195.98382056 moveto 220.44138472 202.047397173 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.44138472 202.047397173 moveto 220.701658536 208.402834467 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.701658536 208.402834467 moveto 220.961932348 215.049285907 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 220.961932348 215.049285907 moveto 221.231742948 222.242929277 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.231742948 222.242929277 moveto 221.501553544 229.738908677 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.501553544 229.738908677 moveto 221.771364144 237.52675269 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.771364144 237.52675269 moveto 222.04117474 245.592003063 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.04117474 245.592003063 moveto 222.273834128 252.75519213 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.273834128 252.75519213 moveto 222.506493512 260.095913643 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.506493512 260.095913643 moveto 222.7391529 267.596571753 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.7391529 267.596571753 moveto 222.971812288 275.236709893 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.971812288 275.236709893 moveto 223.18162908 282.226994127 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.18162908 282.226994127 moveto 223.391445876 289.29244414 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.391445876 289.29244414 moveto 223.601262672 296.41178382 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.601262672 296.41178382 moveto 223.811079468 303.56175167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.811079468 303.56175167 moveto 224.01059482 310.36610563 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.01059482 310.36610563 moveto 224.210110172 317.15212326 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.210110172 317.15212326 moveto 224.409625524 323.89511851 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.409625524 323.89511851 moveto 224.609140876 330.569075093 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.609140876 330.569075093 moveto 224.810950356 337.22173654 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.810950356 337.22173654 moveto 225.01275984 343.746660607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.01275984 343.746660607 moveto 225.214569324 350.113741207 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.214569324 350.113741207 moveto 225.416378808 356.292233587 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.416378808 356.292233587 moveto 225.61080828 362.03731513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.61080828 362.03731513 moveto 225.805237756 367.550491907 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.805237756 367.550491907 moveto 225.999667232 372.804001647 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.999667232 372.804001647 moveto 226.194096704 377.77051504 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.194096704 377.77051504 moveto 226.38671214 382.3815070967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.38671214 382.3815070967 moveto 226.579327576 386.6597361333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.579327576 386.6597361333 moveto 226.771943008 390.5814947867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.771943008 390.5814947867 moveto 226.964558444 394.12456157 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.964558444 394.12456157 moveto 227.162902004 397.3556258267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.162902004 397.3556258267 moveto 227.361245568 400.1432464267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.361245568 400.1432464267 moveto 227.559589128 402.4697659933 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.559589128 402.4697659933 moveto 227.757932692 404.3202521467 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.757932692 404.3202521467 moveto 227.945877992 405.62353999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 227.945877992 405.62353999 moveto 228.133823288 406.4809269667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.133823288 406.4809269667 moveto 228.321768588 406.8873493533 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.321768588 406.8873493533 moveto 228.509713888 406.8403921667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.509713888 406.8403921667 moveto 228.704882036 406.3120923233 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.704882036 406.3120923233 moveto 228.900050184 405.29856368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.900050184 405.29856368 moveto 229.095218332 403.8062322433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.095218332 403.8062322433 moveto 229.29038648 401.8445028367 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.29038648 401.8445028367 moveto 229.504382268 399.1686563333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.504382268 399.1686563333 moveto 229.71837806 395.96318904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.71837806 395.96318904 moveto 229.932373848 392.2515625533 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.932373848 392.2515625533 moveto 230.14636964 388.0604619767 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.14636964 388.0604619767 moveto 230.33881394 383.90630848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.33881394 383.90630848 moveto 230.53125824 379.411420873 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.53125824 379.411420873 moveto 230.723702536 374.600254493 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.723702536 374.600254493 moveto 230.916146836 369.49830826 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.916146836 369.49830826 moveto 231.113987652 363.97783875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.113987652 363.97783875 moveto 231.311828464 358.206972257 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.311828464 358.206972257 moveto 231.509669276 352.215092927 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.509669276 352.215092927 moveto 231.707510088 346.03158375 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.707510088 346.03158375 moveto 231.923079808 339.109946503 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 231.923079808 339.109946503 moveto 232.138649528 332.032364087 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.138649528 332.032364087 moveto 232.354219248 324.83474872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.354219248 324.83474872 moveto 232.569788968 317.55167152 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.569788968 317.55167152 moveto 232.824978572 308.864703407 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.824978572 308.864703407 moveto 233.080168176 300.155543727 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.080168176 300.155543727 moveto 233.335357776 291.471683947 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.335357776 291.471683947 moveto 233.59054738 282.856458303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.59054738 282.856458303 moveto 233.845950784 274.341816333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.845950784 274.341816333 moveto 234.101354184 265.969719153 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.101354184 265.969719153 moveto 234.356757588 257.770517383 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.356757588 257.770517383 moveto 234.612160988 249.770300537 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.612160988 249.770300537 moveto 234.875878124 241.741741403 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.875878124 241.741741403 moveto 235.139595256 233.968545867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.139595256 233.968545867 moveto 235.403312388 226.46640427 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.403312388 226.46640427 moveto 235.66702952 219.24717733 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.66702952 219.24717733 moveto 235.953190672 211.74322861 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.953190672 211.74322861 moveto 236.239351824 204.588635233 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.239351824 204.588635233 moveto 236.525512976 197.786051473 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.525512976 197.786051473 moveto 236.811674132 191.334777937 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 236.811674132 191.334777937 moveto 237.132124224 184.52292707 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.132124224 184.52292707 moveto 237.452574316 178.138421953 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.452574316 178.138421953 moveto 237.773024408 172.169626457 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.773024408 172.169626457 moveto 238.0934745 166.602487607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.0934745 166.602487607 moveto 238.463121636 160.65869683 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.463121636 160.65869683 moveto 238.832768776 155.20160995 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.832768776 155.20160995 moveto 239.202415912 150.203325623 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.202415912 150.203325623 moveto 239.572063052 145.635228027 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.572063052 145.635228027 moveto 239.987479904 140.979168276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.987479904 140.979168276 moveto 240.40289676 136.789908386 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.40289676 136.789908386 moveto 240.818313616 133.028500482 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 240.818313616 133.028500482 moveto 241.233730468 129.657660881 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.233730468 129.657660881 moveto 241.745866736 125.987377593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.745866736 125.987377593 moveto 242.258003 122.79564748 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.258003 122.79564748 moveto 242.770139268 120.026220799 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 242.770139268 120.026220799 moveto 243.282275536 117.628127798 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.282275536 117.628127798 moveto 243.923129272 115.080904369 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.923129272 115.080904369 moveto 244.563983012 112.964760141 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.563983012 112.964760141 moveto 245.204836752 111.211566755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.204836752 111.211566755 moveto 245.845690492 109.763043818 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.845690492 109.763043818 moveto 246.56742564 108.43504622 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.56742564 108.43504622 moveto 247.289160788 107.371745792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 247.289160788 107.371745792 moveto 248.010895936 106.524307475 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.010895936 106.524307475 moveto 248.732631084 105.852801167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.732631084 105.852801167 moveto 249.636769676 105.210962897 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.636769676 105.210962897 moveto 250.540908268 104.745070658 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.540908268 104.745070658 moveto 251.445046856 104.417778431 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.445046856 104.417778431 moveto 252.349185448 104.202263316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.349185448 104.202263316 moveto 253.288749048 104.077598534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.288749048 104.077598534 moveto 254.228312648 104.042922614 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.228312648 104.042922614 moveto 255.167876252 104.094969586 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 255.167876252 104.094969586 moveto 256.107439852 104.238498869 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.107439852 104.238498869 moveto 256.853517852 104.425960361 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.853517852 104.425960361 moveto 257.599595856 104.689671803 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.599595856 104.689671803 moveto 258.345673856 105.044295999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.345673856 105.044295999 moveto 259.09175186 105.509211618 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.09175186 105.509211618 moveto 259.74641754 106.027462517 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.74641754 106.027462517 moveto 260.401083224 106.670468726 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.401083224 106.670468726 moveto 261.055748908 107.463588901 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.055748908 107.463588901 moveto 261.710414592 108.437423335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.710414592 108.437423335 moveto 262.254388688 109.410142675 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.254388688 109.410142675 moveto 262.79836278 110.557477152 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.79836278 110.557477152 moveto 263.342336876 111.90794797 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.342336876 111.90794797 moveto 263.886310972 113.494351394 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.886310972 113.494351394 moveto 264.357753764 115.088938878 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.357753764 115.088938878 moveto 264.829196556 116.916447889 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.829196556 116.916447889 moveto 265.300639348 119.007717623 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.300639348 119.007717623 moveto 265.77208214 121.397020046 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 265.77208214 121.397020046 moveto 266.183481184 123.755074964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.183481184 123.755074964 moveto 266.594880224 126.396395616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.594880224 126.396395616 moveto 267.006279264 129.35072097 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.006279264 129.35072097 moveto 267.417678308 132.649979592 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.417678308 132.649979592 moveto 267.778715716 135.856394543 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.778715716 135.856394543 moveto 268.139753124 139.378915058 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.139753124 139.378915058 moveto 268.500790536 143.242800873 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.500790536 143.242800873 moveto 268.861827944 147.47411168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.861827944 147.47411168 moveto 269.182328316 151.559652207 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.182328316 151.559652207 moveto 269.502828688 155.974465327 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.502828688 155.974465327 moveto 269.823329056 160.73714295 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.823329056 160.73714295 moveto 270.143829428 165.865823017 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.143829428 165.865823017 moveto 270.436029964 170.875298113 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.436029964 170.875298113 moveto 270.728230496 176.215701237 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.728230496 176.215701237 moveto 271.020431032 181.898104147 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.020431032 181.898104147 moveto 271.312631564 187.932044127 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.312631564 187.932044127 moveto 271.578191464 193.7272465 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.578191464 193.7272465 moveto 271.84375136 199.82319636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.84375136 199.82319636 moveto 272.10931126 206.222008307 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.10931126 206.222008307 moveto 272.374871156 212.923561407 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.374871156 212.923561407 moveto 272.628039296 219.59187021 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.628039296 219.59187021 moveto 272.881207436 226.528150967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.881207436 226.528150967 moveto 273.134375576 233.72491991 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.134375576 233.72491991 moveto 273.387543716 241.171723247 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.387543716 241.171723247 moveto 273.63404372 248.649625513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.63404372 248.649625513 moveto 273.88054372 256.33579479 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.88054372 256.33579479 moveto 274.12704372 264.211044417 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.12704372 264.211044417 moveto 274.373543724 272.252657833 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.373543724 272.252657833 moveto 274.598492884 279.71411538 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.598492884 279.71411538 moveto 274.823442044 287.26939513 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.823442044 287.26939513 moveto 275.048391208 294.893056473 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.048391208 294.893056473 moveto 275.273340368 302.557030133 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.273340368 302.557030133 moveto 275.49908388 310.257739457 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.49908388 310.257739457 moveto 275.724827388 317.93467366 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.724827388 317.93467366 moveto 275.9505709 325.551983477 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.9505709 325.551983477 moveto 276.176314412 333.071671807 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.176314412 333.071671807 moveto 276.370418552 339.428995963 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.370418552 339.428995963 moveto 276.564522692 345.65835368 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.564522692 345.65835368 moveto 276.758626836 351.732765453 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.758626836 351.732765453 moveto 276.952730976 357.62477195 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 276.952730976 357.62477195 moveto 277.159872124 363.680041607 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.159872124 363.680041607 moveto 277.367013272 369.462252603 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.367013272 369.462252603 moveto 277.57415442 374.938012297 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.57415442 374.938012297 moveto 277.781295568 380.07461746 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.781295568 380.07461746 moveto 277.985183432 384.7685788567 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.985183432 384.7685788567 moveto 278.1890713 389.0744589433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.1890713 389.0744589433 moveto 278.392959164 392.9651880933 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.392959164 392.9651880933 moveto 278.596847032 396.41576364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.596847032 396.41576364 moveto 278.782214484 399.1518091867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.782214484 399.1518091867 moveto 278.967581936 401.4902296433 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.967581936 401.4902296433 moveto 279.152949388 403.41799075 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.152949388 403.41799075 moveto 279.33831684 404.9242299567 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.33831684 404.9242299567 moveto 279.534562716 406.05002856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.534562716 406.05002856 moveto 279.730808588 406.6865822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.730808588 406.6865822 moveto 279.927054464 406.8297951267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.927054464 406.8297951267 moveto 280.12330034 406.47874191 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.12330034 406.47874191 moveto 280.30753292 405.7013444867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.30753292 405.7013444867 moveto 280.4917655 404.4947196033 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.4917655 404.4947196033 moveto 280.675998084 402.86567249 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.675998084 402.86567249 moveto 280.860230664 400.82332409 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.860230664 400.82332409 moveto 281.060500128 398.14765215 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.060500128 398.14765215 moveto 281.260769592 395.01438297 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.260769592 395.01438297 moveto 281.46103906 391.4435159533 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.46103906 391.4435159533 moveto 281.661308524 387.4574491667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.661308524 387.4574491667 moveto 281.864980468 383.00312989 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.864980468 383.00312989 moveto 282.068652416 378.172474527 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.068652416 378.172474527 moveto 282.272324364 372.994750983 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.272324364 372.994750983 moveto 282.475996308 367.50045139 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.475996308 367.50045139 moveto 282.669647648 362.011500577 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.669647648 362.011500577 moveto 282.863298988 356.292150833 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.863298988 356.292150833 moveto 283.056950328 350.369971593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.056950328 350.369971593 moveto 283.250601672 344.272453507 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.250601672 344.272453507 moveto 283.461070916 337.478267477 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.461070916 337.478267477 moveto 283.67154016 330.543278167 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.67154016 330.543278167 moveto 283.882009404 323.500645677 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.882009404 323.500645677 moveto 284.092478648 316.382262777 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.092478648 316.382262777 moveto 284.317349248 308.727451533 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.317349248 308.727451533 moveto 284.542219852 301.0558623 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.542219852 301.0558623 moveto 284.767090452 293.4001131 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.767090452 293.4001131 moveto 284.991961052 285.790326867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.991961052 285.790326867 moveto 285.257969608 276.8853067 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.257969608 276.8853067 moveto 285.52397816 268.12382477 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.52397816 268.12382477 moveto 285.789986712 259.541541463 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.789986712 259.541541463 moveto 286.055995268 251.169070823 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.055995268 251.169070823 moveto 286.313228816 243.296564083 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.313228816 243.296564083 moveto 286.570462368 235.66345853 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.570462368 235.66345853 moveto 286.827695916 228.285094707 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.827695916 228.285094707 moveto 287.084929468 221.173283173 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.084929468 221.173283173 moveto 287.359294428 213.891183333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.359294428 213.891183333 moveto 287.633659384 206.92871151 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.633659384 206.92871151 moveto 287.908024344 200.289217887 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.908024344 200.289217887 moveto 288.182389304 193.973080913 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.182389304 193.973080913 moveto 288.487129548 187.333938753 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.487129548 187.333938753 moveto 288.791869796 181.08472771 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.791869796 181.08472771 moveto 289.09661004 175.216542703 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.09661004 175.216542703 moveto 289.401350288 169.718258327 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.401350288 169.718258327 moveto 289.747977952 163.897438023 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.747977952 163.897438023 moveto 290.09460562 158.517516373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.09460562 158.517516373 moveto 290.441233284 153.55610367 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.441233284 153.55610367 moveto 290.787860952 148.98992335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.787860952 148.98992335 moveto 291.186499876 144.196477323 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.186499876 144.196477323 moveto 291.5851388 139.858506658 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.5851388 139.858506658 moveto 291.983777728 135.940787108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.983777728 135.940787108 moveto 292.382416652 132.409229747 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.382416652 132.409229747 moveto 292.831650344 128.851564948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.831650344 128.851564948 moveto 293.280884032 125.69891743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.280884032 125.69891743 moveto 293.730117724 122.910304755 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.730117724 122.910304755 moveto 294.179351412 120.44786821 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.179351412 120.44786821 moveto 294.833338896 117.375368788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 294.833338896 117.375368788 moveto 295.48732638 114.825634867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.48732638 114.825634867 moveto 296.141313864 112.71592709 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.141313864 112.71592709 moveto 296.795301344 110.975243743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.795301344 110.975243743 moveto 297.488248464 109.466463225 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 297.488248464 109.466463225 moveto 298.181195584 108.243732875 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.181195584 108.243732875 moveto 298.874142704 107.256483874 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.874142704 107.256483874 moveto 299.567089824 106.462818123 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.567089824 106.462818123 moveto 300.401818404 105.715419636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.401818404 105.715419636 moveto 301.236546984 105.150970292 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.236546984 105.150970292 moveto 302.071275564 104.731871224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.071275564 104.731871224 moveto 302.906004144 104.429562176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.906004144 104.429562176 moveto 303.858777288 104.200727147 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.858777288 104.200727147 moveto 304.811550432 104.075874308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 304.811550432 104.075874308 moveto 305.764323576 104.043288917 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.764323576 104.043288917 moveto 306.717096716 104.099964291 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.717096716 104.099964291 moveto 307.50881972 104.218597454 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.50881972 104.218597454 moveto 308.300542724 104.410108284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.300542724 104.410108284 moveto 309.092265728 104.686747243 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.092265728 104.686747243 moveto 309.883988732 105.065932562 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.883988732 105.065932562 moveto 310.580928512 105.502953361 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.580928512 105.502953361 moveto 311.277868292 106.057760328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 311.277868292 106.057760328 moveto 311.974808072 106.755714753 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 311.974808072 106.755714753 moveto 312.671747852 107.628014809 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.671747852 107.628014809 moveto 313.243033764 108.499439682 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.243033764 108.499439682 moveto 313.814319676 109.538270904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 313.814319676 109.538270904 moveto 314.385605588 110.77358571 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.385605588 110.77358571 moveto 314.9568915 112.239169395 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.9568915 112.239169395 moveto 315.438524176 113.682230709 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.438524176 113.682230709 moveto 315.920156852 115.343260178 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.920156852 115.343260178 moveto 316.401789532 117.252203249 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.401789532 117.252203249 moveto 316.883422208 119.442543242 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.883422208 119.442543242 moveto 317.310473504 121.649918614 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.310473504 121.649918614 moveto 317.7375248 124.136347105 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.7375248 124.136347105 moveto 318.1645761 126.932969585 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.1645761 126.932969585 moveto 318.591627396 130.073494498 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.591627396 130.073494498 moveto 318.963061056 133.112778462 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.963061056 133.112778462 moveto 319.334494716 136.464962578 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.334494716 136.464962578 moveto 319.705928376 140.156664329 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.705928376 140.156664329 moveto 320.077362036 144.21559004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.077362036 144.21559004 moveto 320.408527044 148.167345393 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.408527044 148.167345393 moveto 320.739692056 152.45433835 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.739692056 152.45433835 moveto 321.070857064 157.097241503 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.070857064 157.097241503 moveto 321.402022072 162.116489797 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.402022072 162.116489797 moveto 321.700973384 166.987231007 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.700973384 166.987231007 moveto 321.999924696 172.194749823 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.999924696 172.194749823 moveto 322.298876012 177.751897477 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.298876012 177.751897477 moveto 322.597827324 183.670139073 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.597827324 183.670139073 moveto 322.871743584 189.418091363 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.871743584 189.418091363 moveto 323.145659848 195.4831822 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.145659848 195.4831822 moveto 323.419576112 201.86928886 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.419576112 201.86928886 moveto 323.693492372 208.578013583 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.693492372 208.578013583 moveto 323.950282616 215.159416653 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.950282616 215.159416653 moveto 324.207072856 222.02022175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.207072856 222.02022175 moveto 324.463863096 229.154488627 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.463863096 229.154488627 moveto 324.72065334 236.5533224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.72065334 236.5533224 moveto 324.967920968 243.916528067 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.967920968 243.916528067 moveto 325.215188592 251.499887373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.215188592 251.499887373 moveto 325.46245622 259.286183943 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.46245622 259.286183943 moveto 325.709723848 267.254734337 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.709723848 267.254734337 moveto 325.944860008 274.979252717 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.944860008 274.979252717 moveto 326.179996168 282.822552547 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.179996168 282.822552547 moveto 326.415132324 290.757417983 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.415132324 290.757417983 moveto 326.650268484 298.753480397 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.650268484 298.753480397 moveto 326.869521688 306.235109517 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 326.869521688 306.235109517 moveto 327.088774892 313.71131241 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.088774892 313.71131241 moveto 327.308028096 321.150376013 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.308028096 321.150376013 moveto 327.5272813 328.518564253 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.5272813 328.518564253 moveto 327.72774556 335.16309193 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.72774556 335.16309193 moveto 327.92820982 341.6902863 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.92820982 341.6902863 moveto 328.128674076 348.070887377 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.128674076 348.070887377 moveto 328.329138336 354.274940217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.329138336 354.274940217 moveto 328.530028708 360.284522583 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.530028708 360.284522583 moveto 328.73091908 366.055431643 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.73091908 366.055431643 moveto 328.931809452 371.556974403 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.931809452 371.556974403 moveto 329.13269982 376.758868807 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.13269982 376.758868807 moveto 329.346016416 381.92148279 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.346016416 381.92148279 moveto 329.559333012 386.6788095333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.559333012 386.6788095333 moveto 329.772649604 390.9985905767 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.772649604 390.9985905767 moveto 329.9859662 394.8508057333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.9859662 394.8508057333 moveto 330.171440628 397.7988528967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.171440628 397.7988528967 moveto 330.356915056 400.35654827 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.356915056 400.35654827 moveto 330.542389484 402.5097165867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.542389484 402.5097165867 moveto 330.727863916 404.2462817767 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.727863916 404.2462817767 moveto 330.91928928 405.5912851967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.91928928 405.5912851967 moveto 331.110714648 406.47387757 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.110714648 406.47387757 moveto 331.302140012 406.88867335 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.302140012 406.88867335 moveto 331.49356538 406.8331367233 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.49356538 406.8331367233 moveto 331.683037204 406.3153444767 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.683037204 406.3153444767 moveto 331.872509028 405.34023394 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.872509028 405.34023394 moveto 332.061980852 403.91365311 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.061980852 403.91365311 moveto 332.251452676 402.04409923 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.251452676 402.04409923 moveto 332.442381044 399.7232915267 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.442381044 399.7232915267 moveto 332.633309412 396.9776871867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.633309412 396.9776871867 moveto 332.824237776 393.82337248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.824237776 393.82337248 moveto 333.015166144 390.2785474633 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.015166144 390.2785474633 moveto 333.224265592 385.9721809333 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.224265592 385.9721809333 moveto 333.43336504 381.250295353 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.43336504 381.250295353 moveto 333.642464488 376.143566303 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.642464488 376.143566303 moveto 333.85156394 370.684270967 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.85156394 370.684270967 moveto 334.006805408 366.422867563 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.006805408 366.422867563 moveto 334.162046876 361.99958833 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.162046876 361.99958833 moveto 334.317288344 357.428587883 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.317288344 357.428587883 moveto 334.472529816 352.72408773 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.472529816 352.72408773 moveto 334.651021036 347.168465667 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.651021036 347.168465667 moveto 334.82951226 341.47658405 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.82951226 341.47658405 moveto 335.008003484 335.669560197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.008003484 335.669560197 moveto 335.186494708 329.768067853 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.186494708 329.768067853 moveto 335.407164252 322.371371427 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.407164252 322.371371427 moveto 335.6278338 314.897546197 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.6278338 314.897546197 moveto 335.848503348 307.381298253 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.848503348 307.381298253 moveto 336.069172896 299.855286013 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.069172896 299.855286013 moveto 336.3392827 290.6741581 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.3392827 290.6741581 moveto 336.6093925 281.574920217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.6093925 281.574920217 moveto 336.879502304 272.60317183 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.879502304 272.60317183 moveto 337.149612108 263.799028593 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.149612108 263.799028593 moveto 337.4119995 255.439995373 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.4119995 255.439995373 moveto 337.674386888 247.298838097 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.674386888 247.298838097 moveto 337.93677428 239.398045747 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.93677428 239.398045747 moveto 338.199161668 231.75585106 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.199161668 231.75585106 moveto 338.472857712 224.07519025 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.472857712 224.07519025 moveto 338.746553752 216.703288783 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.746553752 216.703288783 moveto 339.020249792 209.648184537 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.020249792 209.648184537 moveto 339.293945832 202.9144102 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.293945832 202.9144102 moveto 339.588932772 196.018169 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.588932772 196.018169 moveto 339.883919716 189.49506872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 339.883919716 189.49506872 moveto 340.178906656 183.34034131 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.178906656 183.34034131 moveto 340.4738936 177.546643087 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.4738936 177.546643087 moveto 340.796191608 171.618045023 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.796191608 171.618045023 moveto 341.118489616 166.094475503 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.118489616 166.094475503 moveto 341.440787628 160.95958123 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.440787628 160.95958123 moveto 341.763085636 156.19572902 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 341.763085636 156.19572902 moveto 342.150051076 150.940123463 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.150051076 150.940123463 moveto 342.537016516 146.15992003 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.537016516 146.15992003 moveto 342.92398196 141.822188356 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.92398196 141.822188356 moveto 343.3109474 137.894399305 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.3109474 137.894399305 moveto 343.764978728 133.765889279 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.764978728 133.765889279 moveto 344.219010056 130.109188826 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 344.219010056 130.109188826 moveto 344.673041388 126.878141825 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 344.673041388 126.878141825 moveto 345.127072716 124.029679337 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.127072716 124.029679337 moveto 345.655214816 121.144964244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.655214816 121.144964244 moveto 346.18335692 118.667084398 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.18335692 118.667084398 moveto 346.71149902 116.54477692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.71149902 116.54477692 moveto 347.239641124 114.732327665 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.239641124 114.732327665 moveto 347.86796138 112.92390971 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.86796138 112.92390971 moveto 348.49628164 111.437498356 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 348.49628164 111.437498356 moveto 349.1246019 110.222060791 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.1246019 110.222060791 moveto 349.75292216 109.234059972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.75292216 109.234059972 moveto 350.48826024 108.317362322 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 350.48826024 108.317362322 moveto 351.223598316 107.612291768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.223598316 107.612291768 moveto 351.958936396 107.078084445 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.958936396 107.078084445 moveto 352.694274476 106.681383281 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 352.694274476 106.681383281 moveto 353.605672972 106.340271598 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.605672972 106.340271598 moveto 354.517071472 106.127762401 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 354.517071472 106.127762401 moveto 355.428469968 106.011791374 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 355.428469968 106.011791374 moveto 356.339868468 105.967638059 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.339868468 105.967638059 moveto 357.47676176 105.984902922 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.47676176 105.984902922 moveto 358.613655056 106.05729669 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 358.613655056 106.05729669 moveto 359.750548348 106.16501841 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 359.750548348 106.16501841 moveto 360.88744164 106.294024989 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.88744164 106.294024989 moveto 362.419945816 106.484707783 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 362.419945816 106.484707783 moveto 363.952449988 106.680606974 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 363.952449988 106.680606974 moveto 365.48495416 106.872021868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 365.48495416 106.872021868 moveto 367.017458332 107.053478599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 367.017458332 107.053478599 moveto 369.657604496 107.335473392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.657604496 107.335473392 moveto 372.29775066 107.576014656 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 372.29775066 107.576014656 moveto 374.937896824 107.776951745 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 374.937896824 107.776951745 moveto 377.578042992 107.942858621 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 377.578042992 107.942858621 moveto 382.562982744 108.178688525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 382.562982744 108.178688525 moveto 387.547922496 108.338714753 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 387.547922496 108.338714753 moveto 392.532862248 108.446595035 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.532862248 108.446595035 moveto 397.517802 108.51918149 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 397.517802 108.51918149 moveto 404.530562516 108.582780486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 404.530562516 108.582780486 moveto 411.543323036 108.618901014 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 411.543323036 108.618901014 moveto 418.556083552 108.639476501 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.556083552 108.639476501 moveto 425.568844068 108.651229677 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.568844068 108.651229677 moveto 437.7754401 108.660941008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.7754401 108.660941008 moveto 449.982036136 108.664481244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 449.982036136 108.664481244 moveto 462.188632172 108.665834564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.188632172 108.665834564 moveto 474.395228208 108.666360215 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.395228208 108.666360215 moveto 475.796421156 108.666392912 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.796421156 108.666392912 moveto 477.197614104 108.666422122 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.197614104 108.666422122 moveto 478.598807052 108.666448217 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.598807052 108.666448217 moveto 480 108.66647153 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.851 0.851 0.851 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e+01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 375.333333333 moveto 64 375.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 375.333333333 [ (8.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 375.333333333 moveto 480 375.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 308.666666667 moveto 64 308.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 308.666666667 [ (6.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 308.666666667 moveto 480 308.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 242 moveto 64 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 242 [ (4.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 242 moveto 480 242 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 175.333333333 moveto 64 175.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 175.333333333 [ (2.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 175.333333333 moveto 480 175.333333333 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 108.666666667 moveto 64 108.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 108.666666667 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 108.666666667 moveto 480 108.666666667 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (-2.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 0) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 't') ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/cont_snh_all.eps0000640000175000017500000013736413570013207015624 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 25 -10 575 431 %%HiResBoundingBox: 25.021503 -10.697315 574.021503 430.302685 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.00 0 %%Copyright: Copyright 1996-2004 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font XSTBFC+CMR12 %!FontType1-1.0: XSTBFC+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /XSTBFC+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA3238AF3EFFD3873EDB9D6 67A8FAFE3D0CEE9145957731453B5E20FC4D3BA4DEB725B8264148A3DBFC6C3C 33E93BEC610344F1E09F358AF50B11AA4ED930C80F04DF65FC5F9B0DC5DC0C6A 2EBFF7C62741E5ADDCA1FD3D07EE33581F7D405F585FCFA45897FFCE0FAC952D A460C0797485752AD22470FBA67EAAF15B26AA9D9EF7DE47FC8A6B49DADD6FBF 04631FE8EA007E992FA54DF3FE04634C5D4D17CE3A644FC3C07D34AAAB5458A6 A792DAB260E6E7C6B11C08AD1A5E8A7E016DEDB92CA55909653E82227432511F 5D458C0FFB271046F6B103D700E8C4273C70814744710D02F552A53B92C747EB D7E3C938C10E59C9F00BE33B358625C718BED43363606C87ABBBE97FB4834DB6 ABD954F6055146F13420BF3686117C6DC285E3847DD9B2C086DFCE1A8B6C3A01 DD17EF3F5A753F32CF27EE5762AA83C5E32B33D860017D97E63DC2EBD8A6AA93 D4A81DD7B4940A6B90E333A52FD63A125AB83F4A79F58BDC5C2385A97B46C171 B43D98170BCEAC232DB3ECBB82D875AFA112BD23292150EC544CA88232735A9B 3A630E0091B3AAF90D23160D8C536FD37A2115092606A621340FAB78C7743318 B41AA850376F28E9B3468E9A974A0D0A36E033B607C5CFA39029438DECCF7BA9 2FB8A0B082542080D8BFD2478BF09995F445CFA8EA26D407B49F40235BFC23D0 CAD08ADB5C4464071D468D076C107DACEF6776C49ADA4F2E451197A17D8F1BB1 D103F73FB1152F55B88990061AACF0EF3A8D1E5013E99618F127673FD9239935 13C247E837E00C285724AE6D4E303C1A11BBEBBB2DA03BC0D2D8EDB8D5A3EBFE A93CAF31DAEDA8A329EC87868E82CA38AA59FE7372C6414492F2D2158DFC69A8 B2E2027A94C3C8899C834445EEE4779A0A9342DFCD33CA1BC1140E4801C90EA2 4B98A01BFBF8CCC33C2601844379B4C3156421A000D9EC70C69417F617543AC1 418AAF469FD11C6271F88D09794194CF2F3CA77707DEAAC8972CA777ABC15409 6431634333EFB90E18D216B0E480437580FCCA0D8806F749C97BBB2BE632EEF1 61D55C784AF67CDBC740443E12A30A03C1C0061DD4BF201942563D8E4EA9D133 53EB6ED11D82DC204D7EE8646A205B025AAB49E0373CFA192EF8F1CB44B55272 2950B801A9BB3EFE25E6EA02E28F75E6D842400E155744843E67197729020902 916E6BF98CB4479E1488941868E65ECF42A1CCC241CB8CF408E62E0DC68B0419 0B5BDA53C7BCEE69B83A7773F21B00478D61BB18F2279C48FF72724285525329 D31C90A9E4BCAFB77ADEFAFF4D554832C1E5085C337F6CF6824C031685D00BEE 67CF5E099EBDE582FEFCC6D9C8E68141A0A27E2659D322ECCD488297A0587018 775F0B8C53FC91AEA1038C1A35A4C68520236F171EAE6028438475FC40E95D66 7850639E397CE600C270EF757584367405E5A6D6ED76054C0E9592E9F9B394E2 E2F84904C6F6A4E3B8EB22E1A267CB110EF7E8CB52A96F678843475A871DD819 AE4B993AB30D7D733217AB41859DBF2DEEC6208947FD109E2BA39CB0C6A4DD2D 691BFFB49414372E7BC23825321B685AE00C9D3AB209BDB4C1A8B8F31F0011A1 DE2D1B5B3D77227E2883035EADE8F5F3A213346C797AAA6C837474E79CA08FC6 817FA1A9B8BF1846E5A551E802C88085707CF553D16584AE3E1B9A287C29071E 01B5519A09347D61BBB18EA97E2DD334CA20016DC2D07A389BA41E7EBE04C868 3A15FCC84BC26C9C0A52EE87D2A94E2ADCD7B77B8D225B26B8143C0033589C37 5788AEAC30293F3C7C700DCB16A22FA206A82AA2BC60D9F3A32E58C3E8512D50 E6E38C735AB87EA8B0D2F6B42D400D87F79D216BB80DC8BC9FFEBBB9F253DE07 B1DF736761522140DC24AAAA3F8DB50293A163F0FD3B8FF5F06457E36E4E345F 8BAE289A8E5EA1A0650F622063EB60FC786128695D8FBD23B95172B56F811125 D98644ADAED78008EA6411759D9E1039A416F210112428D4C5BDEBB979992CEE 6890B3CA2988037B0671E7660A6B3CBBEEEBD9086EAECFEE7EF2852F6082E4F9 159E418831E60D669181E0D28892A6E56C371CE256ED20 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F12_0 /XSTBFC+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F10_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F9_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 0 0 5490 4410 re f /DeviceGray {} cs [0.9492] sc 699.633 943.504 m 2307.07 1631.6 l 2292.13 3867.08 l 632.32 3355.87 l f /DeviceGray {} CS [0.9492] SC 699.633 943.504 m 2307.07 1631.6 l 2292.13 3867.08 l 632.32 3355.87 l S /DeviceGray {} CS [0] SC 1120.36 880.414 m 1078.94 862.176 l S 1480.69 819.23 m 1439.73 800.734 l S 1846.1 757.184 m 1805.63 738.43 l S 2216.7 694.258 m 2176.73 675.234 l S 2592.6 630.43 m 2553.16 611.133 l S 2973.92 565.684 m 2935.02 546.105 l S /DeviceGray {} cs [0.9004] sc 2307.07 1631.6 m 4865.44 1243.49 l 4928.11 3579.06 l 2292.13 3867.08 l f /DeviceGray {} CS [0.9004] SC 2307.07 1631.6 m 4865.44 1243.49 l 4928.11 3579.06 l 2292.13 3867.08 l S /DeviceGray {} CS [0] SC 3602.56 602.051 m 3670.38 590.719 l S 3787.14 697.906 m 3854.47 686.812 l S 3967.84 791.746 m 4034.68 780.883 l S 4144.77 883.629 m 4211.13 872.992 l S 4318.06 973.621 m 4383.94 963.203 l S 4487.81 1061.78 m 4553.22 1051.57 l S 4654.14 1148.15 m 4719.08 1138.15 l S /DeviceGray {} cs [0.9258] sc 699.633 943.504 m 3404.92 483.711 l 4865.44 1243.49 l 2307.07 1631.6 l f /DeviceGray {} CS [0.9258] SC 699.633 943.504 m 3404.92 483.711 l 4865.44 1243.49 l 2307.07 1631.6 l S /DeviceGray {} CS [0] SC 4852.44 1565.22 m 4917.13 1555.78 l S 4859.75 1840.33 m 4924.68 1831.18 l S 4867.1 2117.42 m 4932.28 2108.56 l S 4874.52 2396.51 m 4939.93 2387.95 l S 4881.98 2677.63 m 4947.64 2669.38 l S 4889.5 2960.8 m 4955.41 2952.86 l S 4897.07 3246.04 m 4963.23 3238.41 l S 20 w 2638.94 1382.73 m 2638.93 1383.54 l 2638.93 1384.54 l 2638.92 1385.79 l 2638.91 1387.35 l 2638.9 1388.83 l 2638.88 1390.58 l 2638.87 1392.68 l 2638.84 1395.17 l 2638.81 1397.5 l 2638.78 1400.19 l 2638.73 1403.3 l 2638.68 1406.89 l 2638.61 1410.22 l 2638.54 1413.98 l 2638.44 1418.24 l 2638.32 1423.05 l 2638.19 1427.52 l 2638.04 1432.5 l 2637.85 1438.04 l 2637.61 1444.2 l 2637.37 1450.01 l 2637.07 1456.4 l 2636.72 1463.42 l 2636.29 1471.17 l 2635.83 1478.68 l 2635.29 1486.88 l 2634.64 1495.85 l 2633.86 1505.68 l 2632.91 1516.63 l 2631.76 1528.66 l 2630.37 1541.91 l 2628.67 1556.5 l 2626.84 1570.83 l 2624.65 1586.48 l 2622.02 1603.57 l 2618.87 1622.25 l 2616.29 1636.37 l 2613.36 1651.39 l 2610.03 1667.35 l 2606.26 1684.3 l 2602.65 1699.53 l 2598.65 1715.53 l 2594.21 1732.32 l 2589.3 1749.92 l 2583.78 1768.66 l 2577.69 1788.25 l 2571.02 1808.68 l 2563.73 1829.92 l 2555.09 1853.86 l 2545.69 1878.67 l 2535.54 1904.27 l 2524.65 1930.58 l 2515.66 1951.54 l 2506.28 1972.8 l 2496.54 1994.31 l 2486.47 2015.99 l 2475.54 2039 l 2464.34 2062.05 l 2452.95 2085.04 l 2441.42 2107.91 l 2425.39 2139.09 l 2409.34 2169.68 l 2393.39 2199.54 l 2377.63 2228.52 l 2364.66 2252.06 l 2351.91 2274.86 l 2339.44 2296.92 l 2327.27 2318.19 l 2312.74 2343.28 l 2298.71 2367.19 l 2285.22 2389.97 l 2272.28 2411.63 l 2256.63 2437.68 l 2241.95 2462.12 l 2228.26 2485.07 l 2215.61 2506.64 l 2200.57 2533.19 l 2187.48 2557.78 l 2176.43 2580.61 l 2167.47 2601.88 l 2159.48 2625.95 l 2154.77 2648.18 l 2153.4 2668.78 l 2155.38 2687.91 l 2160.11 2704.18 l 2167.59 2719.42 l 2177.77 2733.68 l 2190.6 2747.02 l 2207.22 2760.36 l 2226.67 2772.72 l 2248.84 2784.14 l 2273.56 2794.63 l 2303.19 2805.04 l 2335.44 2814.4 l 2370.07 2822.73 l 2406.85 2830.05 l 2449.67 2836.98 l 2494.44 2842.71 l 2540.77 2847.26 l 2588.31 2850.65 l 2641.43 2853.06 l 2695.03 2854.14 l 2748.62 2853.93 l 2801.69 2852.46 l 2855.23 2849.7 l 2907.2 2845.73 l 2957.08 2840.61 l 3004.4 2834.43 l 3048.88 2827.23 l 3089.88 2819.11 l 3126.98 2810.18 l 3159.81 2800.54 l 3189.21 2789.8 l 3213.25 2778.51 l 3231.65 2766.81 l 3244.19 2754.82 l 3250.97 2741.69 l 3250.56 2728.55 l 3242.94 2715.58 l 3228.14 2702.94 l 3205.53 2690.43 l 3175.69 2678.62 l 3138.96 2667.68 l 3095.78 2657.76 l 3048.34 2649.26 l 2995.9 2641.96 l 2939.08 2635.96 l 2878.57 2631.35 l 2811.54 2628.04 l 2742.13 2626.39 l 2671.26 2626.43 l 2599.9 2628.16 l 2525.93 2631.74 l 2453.57 2637.09 l 2383.87 2644.13 l 2317.86 2652.74 l 2258.45 2662.45 l 2204.16 2673.38 l 2155.69 2685.38 l 2113.67 2698.28 l 2078.6 2711.92 l 2050.94 2726.1 l 2031.01 2740.64 l 2019.03 2755.35 l 2015.12 2770.82 l 2020.18 2786.04 l 2034.06 2800.79 l 2056.52 2814.87 l 2087.45 2828.16 l 2126.23 2840.39 l 2172.27 2851.39 l 2224.87 2861 l 2281.44 2868.87 l 2342.69 2875.21 l 2407.83 2879.96 l 2475.97 2883.04 l 2554.66 2884.48 l 2634.72 2883.76 l 2714.82 2880.92 l 2793.66 2875.97 l 2869.9 2869.02 l 2942.31 2860.17 l 3009.7 2849.54 l 3070.91 2837.32 l 3119.7 2825.16 l 3161.98 2812.03 l 3197.13 2798.1 l 3224.65 2783.57 l 3245.21 2767.49 l 3256.07 2751.19 l 3256.99 2734.92 l 3247.87 2718.96 l 3228.91 2703.61 l 3200.32 2689.08 l 3162.52 2675.6 l 3116.07 2663.41 l 3064.33 2653.15 l 3006.12 2644.41 l 2942.31 2637.33 l 2873.85 2632.03 l 2796.75 2628.41 l 2716.86 2626.97 l 2635.59 2627.75 l 2554.36 2630.73 l 2474.96 2635.81 l 2398.36 2642.92 l 2325.88 2651.94 l 2258.73 2662.69 l 2202.23 2674.04 l 2152.08 2686.55 l 2108.96 2700.03 l 2073.47 2714.29 l 2045.7 2729.33 l 2026.63 2744.72 l 2016.46 2760.24 l 2015.29 2775.67 l 2023.43 2791.2 l 2040.87 2806.17 l 2067.28 2820.34 l 2102.22 2833.51 l 2143.79 2845.17 l 2192.26 2855.54 l 2246.92 2864.5 l 2306.99 2871.91 l 2372.77 2877.78 l 2442.33 2881.87 l 2514.66 2884.14 l 2588.75 2884.55 l 2666.35 2883 l 2743.51 2879.47 l 2819.06 2874.01 l 2891.82 2866.69 l 2957.79 2858.05 l 3019.23 2847.93 l 3075.23 2836.46 l 3124.98 2823.8 l 3166.46 2810.58 l 3200.77 2796.59 l 3227.4 2782.01 l 3245.95 2767.04 l 3256.51 2750.75 l 3257.14 2734.49 l 3247.76 2718.55 l 3228.45 2703.17 l 3199.74 2688.73 l 3161.93 2675.34 l 3115.57 2663.23 l 3061.39 2652.59 l 3002.49 2643.9 l 2937.99 2636.89 l 2868.86 2631.68 l 2796.15 2628.35 l 2711.35 2626.92 l 2625.09 2627.98 l 2539.07 2631.5 l 2454.99 2637.41 l 2379.28 2645.02 l 2308 2654.5 l 2242.36 2665.67 l 2183.45 2678.34 l 2136.03 2691.12 l 2095.75 2704.79 l 2063.15 2719.15 l 2038.63 2733.99 l 2021.69 2750.18 l 2014.55 2766.41 l 2017.25 2782.44 l 2029.7 2798.02 l 2051.19 2812.67 l 2081.48 2826.42 l 2120.06 2839.1 l 2166.31 2850.5 l 2217.53 2860.14 l 2274.49 2868.32 l 2336.4 2874.94 l 2402.41 2879.9 l 2475.31 2883.28 l 2550.66 2884.71 l 2627.31 2884.17 l 2704.12 2881.66 l 2779.63 2877.26 l 2853.02 2871.01 l 2923.2 2863 l 2989.1 2853.34 l 3046.55 2842.82 l 3098.47 2831.09 l 3144.13 2818.3 l 3182.85 2804.62 l 3214.29 2790.12 l 3237.61 2775.1 l 3252.44 2759.78 l 3258.49 2744.36 l 3255.34 2728.49 l 3242.56 2713.02 l 3220.29 2698.17 l 3188.82 2684.2 l 3149.64 2671.62 l 3102.66 2660.28 l 3048.56 2650.37 l 2988.15 2642.05 l 2920.16 2635.26 l 2847.52 2630.42 l 2771.42 2627.6 l 2693.11 2626.87 l 2608.85 2628.38 l 2525.12 2632.23 l 2443.48 2638.34 l 2365.45 2646.59 l 2298.03 2655.93 l 2235.92 2666.8 l 2180.04 2679.03 l 2131.25 2692.4 l 2091.66 2706.15 l 2059.79 2720.57 l 2036.04 2735.46 l 2020.7 2750.6 l 2013.66 2767.74 l 2017.58 2784.63 l 2032.32 2800.98 l 2057.55 2816.51 l 2089.71 2829.89 l 2129.86 2842.15 l 2177.39 2853.13 l 2231.56 2862.67 l 2290.17 2870.49 l 2353.55 2876.7 l 2420.82 2881.22 l 2491.04 2884.01 l 2571.04 2885.02 l 2652.16 2883.84 l 2733.04 2880.49 l 2812.34 2875.01 l 2883.44 2868.09 l 2950.98 2859.52 l 3013.98 2849.4 l 3071.47 2837.87 l 3120.22 2825.77 l 3162.54 2812.7 l 3197.81 2798.83 l 3225.53 2784.35 l 3246.13 2768.6 l 3257.45 2752.62 l 3259.23 2736.66 l 3251.4 2720.95 l 3234.15 2705.85 l 3207.67 2691.49 l 3172.32 2678.09 l 3128.59 2665.87 l 3078.62 2655.31 l 3022.04 2646.22 l 2959.68 2638.73 l 2892.47 2632.98 l 2817.95 2628.92 l 2740.43 2626.92 l 2661.19 2627.02 l 2581.56 2629.23 l 2502.31 2633.54 l 2425.33 2639.87 l 2351.9 2648.1 l 2283.22 2658.1 l 2223.77 2668.99 l 2170.41 2681.13 l 2123.9 2694.33 l 2084.86 2708.4 l 2053.93 2723.07 l 2031.33 2738.18 l 2017.33 2753.51 l 2012.07 2768.84 l 2016.23 2785.17 l 2030.49 2800.99 l 2054.54 2816.04 l 2087.94 2830.1 l 2127.47 2842.25 l 2174.2 2853.14 l 2227.44 2862.65 l 2286.41 2870.63 l 2350.6 2877.01 l 2418.81 2881.66 l 2490.09 2884.52 l 2563.45 2885.56 l 2653.72 2884.34 l 2743.68 2880.44 l 2831.47 2873.93 l 2915.29 2864.93 l 2979.57 2855.87 l 3039.12 2845.38 l 3093.08 2833.61 l 3140.67 2820.72 l 3180.11 2807.29 l 3212.3 2793.14 l 3236.76 2778.46 l 3253.11 2763.44 l 3261.53 2746.05 l 3258.67 2728.79 l 3244.49 2711.99 l 3219.17 2695.95 l 3187.02 2682.36 l 3146.52 2669.85 l 3098.26 2658.63 l 3042.91 2648.86 l 2981.95 2640.77 l 2915.76 2634.4 l 2845.34 2629.85 l 2771.74 2627.17 l 2688.9 2626.46 l 2605.1 2628.07 l 2521.88 2631.98 l 2440.74 2638.1 l 2368.17 2645.71 l 2299.83 2655.04 l 2236.78 2665.91 l 2179.98 2678.17 l 2132.4 2690.96 l 2091.92 2704.64 l 2059.06 2719.01 l 2034.24 2733.87 l 2017.24 2749.64 l 2009.47 2765.47 l 2010.97 2781.14 l 2021.67 2796.41 l 2041.74 2811.3 l 2070.71 2825.33 l 2108.12 2838.3 l 2153.36 2850.03 l 2203.3 2859.93 l 2259.07 2868.42 l 2319.91 2875.38 l 2384.99 2880.73 l 2459.07 2884.61 l 2535.93 2886.48 l 2614.39 2886.3 l 2693.24 2884.08 l 2772.45 2879.76 l 2849.53 2873.44 l 2923.24 2865.19 l 2992.4 2855.16 l 3050.03 2844.67 l 3102.22 2832.98 l 3148.23 2820.23 l 3187.42 2806.59 l 3219.28 2792.19 l 3243.22 2777.27 l 3258.85 2762.03 l 3265.89 2746.67 l 3262.95 2728.67 l 3247.77 2711.17 l 3220.57 2694.5 l 3181.79 2679.01 l 3140.08 2666.98 l 3091.03 2656.21 l 3035.3 2646.88 l 2973.7 2639.12 l 2905.38 2632.93 l 2832.88 2628.64 l 2757.3 2626.29 l 2679.82 2625.95 l 2588.61 2628.07 l 2498.39 2632.88 l 2411.08 2640.27 l 2328.49 2650.06 l 2264.12 2659.99 l 2205.22 2671.31 l 2152.63 2683.85 l 2107.1 2697.44 l 2069.88 2711.57 l 2040.52 2726.31 l 2019.38 2741.45 l 2006.7 2756.77 l 2002.66 2773.21 l 2008.53 2789.37 l 2024.18 2805 l 2049.29 2819.85 l 2081.99 2833.21 l 2122.55 2845.47 l 2170.36 2856.46 l 2224.73 2866.03 l 2283.61 2873.91 l 2347.24 2880.21 l 2414.76 2884.84 l 2485.28 2887.75 l 2563.97 2888.92 l 2643.85 2888 l 2723.69 2885.01 l 2802.26 2879.99 l 2876.04 2873.26 l 2946.37 2864.78 l 3012.21 2854.67 l 3072.54 2843.07 l 3123.1 2831.04 l 3167.36 2818.01 l 3204.69 2804.14 l 3234.57 2789.61 l 3257.09 2774.13 l 3270.82 2758.35 l 3275.47 2742.52 l 3270.92 2726.86 l 3255.64 2710.38 l 3229.79 2694.65 l 3193.72 2679.95 l 3147.99 2666.53 l 3098.46 2655.63 l 3042.18 2646.16 l 2979.94 2638.28 l 2912.62 2632.11 l 2836.49 2627.53 l 2756.97 2625.08 l 2675.39 2624.79 l 2593.1 2626.7 l 2499.39 2631.53 l 2408.62 2639.1 l 2322.77 2649.23 l 2243.69 2661.69 l 2185.6 2673.34 l 2133.9 2686.18 l 2089.31 2700.02 l 2052.42 2714.65 l 2023.5 2730 l 2003.25 2745.73 l 1991.92 2761.62 l 1989.61 2777.44 l 1996.99 2793.91 l 2014.33 2809.8 l 2041.3 2824.88 l 2077.43 2838.92 l 2119.46 2851.04 l 2168.55 2861.88 l 2224.02 2871.32 l 2285.1 2879.21 l 2351.9 2885.55 l 2422.71 2890.12 l 2496.55 2892.86 l 2572.42 2893.73 l 2654.66 2892.59 l 2736.76 2889.31 l 2817.42 2883.95 l 2895.4 2876.57 l 2965.15 2867.89 l 3030.42 2857.64 l 3090.28 2845.95 l 3143.85 2832.98 l 3188.49 2819.52 l 3225.99 2805.22 l 3255.81 2790.26 l 3277.47 2774.83 l 3291.03 2758.43 l 3295.03 2741.98 l 3289.34 2725.72 l 3273.95 2709.89 l 3248.1 2694.29 l 3212.43 2679.67 l 3167.45 2666.26 l 3113.81 2654.3 l 3056.16 2644.55 l 2992.36 2636.42 l 2923.29 2630.02 l 2849.94 2625.46 l 2762.94 2622.62 l 2673.4 2622.3 l 2583 2624.51 l 2493.41 2629.22 l 2400.79 2636.89 l 2312.94 2647.13 l 2231.71 2659.73 l 2158.76 2674.42 l 2106.27 2687.78 l 2061.03 2702.14 l 2023.65 2717.31 l 1994.59 2733.07 l 1973.84 2749.61 l 1962.45 2766.31 l 1960.56 2782.94 l 1968.14 2799.27 l 1985.41 2815.34 l 2012.05 2830.64 l 2047.63 2844.95 l 2091.64 2858.09 l 2141.36 2869.46 l 2197.63 2879.43 l 2259.73 2887.87 l 2326.84 2894.68 l 2399.04 2899.82 l 2474.57 2903.14 l 2552.45 2904.59 l 2631.67 2904.15 l 2715.39 2901.63 l 2798.25 2897.05 l 2879.04 2890.46 l 2956.58 2881.94 l 3027.37 2871.98 l 3093.05 2860.45 l 3152.65 2847.5 l 3205.3 2833.29 l 3248.28 2818.75 l 3283.6 2803.42 l 3310.73 2787.49 l 3329.24 2771.15 l 3339.51 2751.8 l 3337.16 2732.53 l 3322.08 2713.71 l 3294.39 2695.68 l 3257.46 2679.87 l 3210.33 2665.32 l 3153.66 2652.29 l 3088.28 2641 l 3021.54 2632.36 l 2949.18 2625.49 l 2872.17 2620.5 l 2791.56 2617.48 l 2701.86 2616.49 l 2610.69 2617.88 l 2519.52 2621.65 l 2429.82 2627.73 l 2343.73 2635.97 l 2261.87 2646.29 l 2185.54 2658.52 l 2115.93 2672.47 l 2057.86 2686.9 l 2007.39 2702.46 l 1965.19 2718.94 l 1931.81 2736.13 l 1907.86 2753.62 l 1893.26 2771.35 l 1888.18 2789.11 l 1892.67 2806.66 l 1908.54 2825.47 l 1935.61 2843.49 l 1973.47 2860.46 l 2021.55 2876.14 l 2073.92 2889.17 l 2133.62 2900.76 l 2199.93 2910.78 l 2272.07 2919.1 l 2346.19 2925.41 l 2424.09 2929.99 l 2504.92 2932.77 l 2587.8 2933.72 l 2677.19 2932.69 l 2766.73 2929.58 l 2855.3 2924.4 l 2941.77 2917.19 l 3025.33 2908.01 l 3104.52 2896.96 l 3178.25 2884.18 l 3245.49 2869.82 l 3303.58 2854.53 l 3353.81 2838.08 l 3395.43 2820.67 l 3427.77 2802.5 l 3451.01 2782.99 l 3463.02 2763.18 l 3463.44 2743.33 l 3452.04 2723.75 l 3424 2701.77 l 3380.22 2680.98 l 3321.23 2661.83 l 3247.87 2644.75 l 3178.2 2632.62 l 3100.51 2622.32 l 3015.71 2614.02 l 2924.82 2607.88 l 2831.92 2604.09 l 2735.45 2602.52 l 2636.57 2603.24 l 2536.47 2606.26 l 2432.33 2611.84 l 2329.61 2619.89 l 2229.7 2630.33 l 2133.95 2643.06 l 2042 2658.25 l 1957.02 2675.5 l 1880.25 2694.61 l 1812.76 2715.35 l 1760.85 2735.18 l 1717.82 2755.94 l 1684.19 2777.43 l 1660.36 2799.46 l 1646.87 2821.21 l 1643.18 2843.07 l 1649.39 2864.84 l 1665.51 2886.34 l 1691.85 2907.62 l 1728.12 2928.23 l 1774.08 2948 l 1829.4 2966.74 l 1895.8 2984.81 l 1971.2 3001.46 l 2055.01 3016.51 l 2146.58 3029.83 l 2240.49 3040.8 l 2340.1 3049.97 l 2444.67 3057.26 l 2553.4 3062.58 l 2659.39 3065.75 l 2767.63 3067.07 l 2877.35 3066.51 l 2987.74 3064.04 l 3096.82 3059.72 l 3204.92 3053.55 l 3311.19 3045.55 l 3414.75 3035.75 l 3516.01 3024.04 l 3612.62 3010.61 l 3703.59 2995.55 l 3787.95 2978.98 l 3851.49 2964.34 l 3909.35 2948.85 l 3960.98 2932.6 l 4005.83 2915.7 l 4037 2901.51 l 4063.01 2887.04 l 4083.55 2872.36 l 4098.36 2857.56 l 4106.41 2844.52 l 4109.64 2831.51 l 4107.87 2818.61 l 4100.95 2805.9 l 4089.78 2794.32 l 4073.94 2783.04 l 4053.32 2772.12 l 4027.85 2761.64 l 3999.03 2752.13 l 3965.72 2743.16 l 3927.9 2734.81 l 3885.57 2727.13 l 3843.87 2720.9 l 3798.63 2715.35 l 3749.91 2710.52 l 3697.8 2706.47 l 3644.93 2703.39 l 3589.18 2701.13 l 3530.72 2699.74 l 3469.72 2699.26 l 3411.43 2699.66 l 3351.35 2700.92 l 3289.69 2703.04 l 3226.66 2706.06 l 3164.3 2709.88 l 3101.15 2714.58 l 3037.5 2720.16 l 2973.64 2726.62 l 2908.27 2734.16 l 2843.36 2742.61 l 2779.25 2751.93 l 2716.33 2762.1 l 2653.98 2773.25 l 2593.59 2785.17 l 2535.52 2797.79 l 2480.09 2811.05 l 2427.23 2824.96 l 2377.65 2839.35 l 2331.61 2854.1 l 2289.29 2869.14 l 2248.99 2885.12 l 2213.07 2901.19 l 2181.59 2917.23 l 2154.52 2933.14 l 2129.32 2950.72 l 2109.43 2967.88 l 2094.61 2984.52 l 2084.58 3000.54 l 2078.63 3017.48 l 2077.63 3033.5 l 2081.06 3048.53 l 2088.36 3062.55 l 2100.13 3076.67 l 2115.23 3089.58 l 2133.03 3101.3 l 2152.97 3111.88 l 2177.02 3122.37 l 2202.45 3131.59 l 2228.71 3139.64 l 2255.34 3146.61 l 2285.26 3153.27 l 2314.69 3158.82 l 2343.29 3163.37 l 2370.78 3167.05 l 2401.92 3170.46 l 2430.96 3172.94 l 2457.76 3174.65 l 2482.28 3175.74 l 2507.61 3176.35 l 2530.01 3176.43 l 2549.62 3176.11 l 2566.62 3175.51 l 2582.31 3174.62 l 2595.46 3173.59 l 2606.34 3172.47 l 2615.21 3171.33 l 2626.41 3169.46 l 2633.76 3167.74 l 2638.24 3166.27 l 2640.66 3165.04 l 2641.8 3163.68 l 2641.32 3162.76 l 2640.15 3162.19 l 2638.82 3161.86 l 2635.97 3161.6 l 2634.84 3161.69 l 2634.66 3161.76 l 2634.68 3161.78 l 2634.75 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l 2634.74 3161.78 l 2634.73 3161.78 l S 5 w 2662.2 1411 m 2755.73 1465 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 2877.48] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [0.9783 -0.207 0.207 0.9783 133.668 46.7434] Tm 0 0 Td /F9_0 11.9552 Tf (x) 5.9776 Tj -1.8754 TJm (g) 6.6471 Tj 3.9378 TJm (a) 6.6471 Tj 3.9367 TJm (m) 9.9587 Tj -0.1117 TJm (m) 9.9587 Tj -0.1127 TJm (a) 6.6471 Tj 3.9378 TJm [1 0 0 1 87.5578 64.7059] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -2.2627 TJm 36.0903 -6.2477 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 45.3301 -6.2477 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 51.2102 -6.2477 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 54.45 -6.2477 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -2.2627 TJm 77.3391 -12.5488 Td (0) 5.858 Tj -2.2637 TJm 83.2192 -12.5488 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 86.459 -12.5488 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -2.2627 TJm 114.4613 -18.977 Td (0) 5.858 Tj -2.2627 TJm 120.3414 -18.977 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 123.5813 -18.977 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm 152.1161 -25.4957 Td (0) 5.858 Tj -2.2627 TJm 157.9961 -25.4957 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 161.236 -25.4957 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2627 TJm 190.3153 -32.1098 Td (0) 5.858 Tj -2.2627 TJm 196.1954 -32.1098 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 199.4352 -32.1098 Td /F12_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm [0.8394 0.5436 -0.5436 0.8394 441.611 52.9711] Tm 0 0 Td /F9_0 11.9552 Tf (y) 5.9776 Tj -1.8738 TJm (g) 6.6471 Tj 3.9367 TJm (a) 6.6471 Tj 3.9402 TJm (m) 9.9587 Tj -0.1122 TJm (m) 9.9587 Tj -0.1122 TJm (a) 6.6471 Tj 3.9367 TJm [1 0 0 1 360.907 38.191] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm 18.3168 9.7512 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 27.5566 9.7512 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 33.4367 9.7512 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 36.6766 9.7512 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2627 TJm 36.2469 19.2961 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 45.4867 19.2961 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 51.3668 19.2961 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 54.6066 19.2961 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm 58.4531 28.6781 Td (0) 5.858 Tj -2.2627 TJm 64.3332 28.6781 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 67.573 28.6781 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2668 TJm 75.6469 37.832 Td (0) 5.858 Tj -2.2627 TJm 81.5269 37.832 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 84.7668 37.832 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm 92.4898 46.7981 Td (0) 5.858 Tj -2.2627 TJm 98.3699 46.7981 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 101.6097 46.7981 Td /F12_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -2.2668 TJm 108.9918 55.5832 Td (0) 5.858 Tj -2.2627 TJm 114.8719 55.5832 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 118.1117 55.5832 Td /F12_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2668 TJm [0.0215 0.9998 -0.9998 0.0215 533.432 189.906] Tm 0 0 Td /F9_0 11.9552 Tf (p) 6.6471 Tj 3.9382 TJm (h) 6.6471 Tj 3.9371 TJm (i) 2.6541 Tj 1.1745 TJm (g) 6.6471 Tj 3.9383 TJm (a) 6.6471 Tj 3.9382 TJm (m) 9.9587 Tj -0.1124 TJm (m) 9.9587 Tj -0.1103 TJm (a) 6.6471 Tj 3.9361 TJm [1 0 0 1 503.824 149.844] Tm 0 0 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 0.8063 27.4789 Td (2) 5.858 Tj -2.2627 TJm 1.6191 55.1559 Td (3) 5.858 Tj -2.2627 TJm 2.4371 83.0329 Td (4) 5.858 Tj -2.2627 TJm 3.2613 111.1118 Td (5) 5.858 Tj -2.2627 TJm 4.0922 139.3958 Td (6) 5.858 Tj -2.2627 TJm 4.9281 167.886 Td (7) 5.858 Tj -2.2627 TJm -226.6919 -2.204 Td /F9_0 11.9552 Tf (2) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font XSTBFC+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/include/fnc_canards5.eps0000640000175000017500000010210013570013207015463 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -11 -8 259 424 %%HiResBoundingBox: -11.475004 -8.937006 258.524996 423.062994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmpvX0bJy.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 270 432 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font MVVWGH+CMMI12 %!FontType1-1.0: MVVWGH+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /MVVWGH+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 457 441] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 115 /s put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F40 586391EA9A2414C5CD9EE00D483839FC635AD0D52D643D652F74F041D36A563E 1F56922A8B1764174106A1C5AE5CBF55A318CB60C637EC2D5C88BD00DB9BF961 B96F0B7012AD9169A96092698E8A3011CE963A65F4D362343F71084AFBE9A9E5 4C1B6B64FC7FABF7E631810B6F00DC39F68269DCCED25AA14ED8E38BB54AE733 B48E950EE2ADECB769B107473514572B5DFD404D8E6B2DB619A52904C916A848 F650570C4F5E16DC904727623D2C1A50FC51D3A31AE11A89708097DA2251683C A8040751E06BC2DDE7E42E90A38CFC8655746B7B34D6FDF85A4BAF98D83CD82F 0E64338282B717606331D487D502D3D3103B321D40F93CB247892D4022543348 F60D0CCAE7BD9A9E801AEBFD6FEC833DB7A27F9DD844A007C0E453A7F36484AC 79944C0365B4C67087AA35F1AA4D4F0A36536875A51A85205CA1082094D6C56C C4A845EF6F36B38CED8262286743DFE727047BF5009017C577C1A99BBD3C825D D2D139602AB0E05145F60988CE04712236246A3E70DD5A419B69B0E173167CF0 2560B7CCC0D95F710DC8AB5927A7C13FE0B510E3319605223A4880EA52269078 22782D7E6FF6F27839A79D7FFBA8C0BE9FF44644010057D6BBEBDD76DD6258E2 642EB8FEF97069A6555555A83F2A4FA937BE3C002AC7079FD51B7F40F9565D3A 2E445FD2FE169F475DA41032677B3D65CAC4A7BAB21B40482890AFAD16BED8C6 AAE6B208405298A95AA1DAC10E0AE693D78883DBDE580E22D2F42CEE328A95DE 78122BBA9D52897D652E03B74CD06FFC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /MVVWGH+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font ODEMPY+CMR12 %!FontType1-1.0: ODEMPY+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /ODEMPY+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 462 675] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32D9B31D10B260CD4CC1D 847FA11D4A6147194663D6D7E38C5CA39E6E046476ADA46B08E683CE7C25C698 15EFBCC5EAAE453F74AF2BCCFA79473CC353DD32A422478BE98D45F989B2FFAC 9DBCC02D82871D7C15CDEF1651F506F55F8C051F9A75CC5185172980E3C14A1A 039164C95A74C41450ED48A75D60A04941D2E0B329FE14FA3E6F21382E5BC1F0 BE50D8541D6B8EE98E10D38259B5191CBE4E97701889DCDD024877181D3AF5B4 3AC29B8815D07DFB91E742B77962C82702376D369F6FCE4DAC618C1C705EFE0B 64BA1CA2C2C4E35E89B86E11CFC54D8CAA8F3850C4D8861AE188C89072BCBF58 6C91103FCB9518599CA4AEFD99EEE8FD10CB9D3A5B3DEC236BFD0BF2CE9AD079 FCE9B4D302DD9EE968CCCF3DE67715CC88D2FF26654F599DDBB604AA82080749 57E8519F193A1FE7473B791E8EE7D7921AB36AB24C415509847B020BFFCABB36 6AADECBB040EEA48A455A2789E805BB21F7D5A2704F7CF9B4837CBD7ED9CC7FB 01CAC8B06A6AF3FA8A721425753C4C707E562A3FC46CE230852ECEA40722978D 0A333D713DC0672877029ECD86EE9C5D905106C1D11828094E70F2EF39CFBFE7 CC318E50177220752C76C692F29A6BCED06DCA4FC97EC6D5B2FC460A6FD1651F C4B67A832F3746BDDC7001C4003ED4F32CE1F4DD0613CC03A0FFF164F8474275 464B68D445803B867ECC4050B2BE34C207243CCF42C9A8C6D491D2B57B6AF23D C0E003EBBD7F899A16DBB92F60A46F862E37541C6606A43DBBF78DA613677FEB 90A28465BA47A6699E9BF81BE39FE6EA372B7FCF17424212EAD9202954BB97E8 B082B63EA1B59BA15342378A5D289A8803CF99D262A19A9AC687CB6CAB543FC6 6ECA494190F8A2F291BD7A0AFF338CC13053128E5305E594BA2D0DA0876FB05B 9859B066EECA5B46D5AB8F5B31C041E63B067A8F5B3C70123E22D92E8C18FD69 D66811559E762DA049382AFF408C4C02B6D2BFAF2108799E3D29FB887BFB62D5 824B3266E35F8A85B094C415FDC32B6D3498F01ED0A36B6B58C7C3439A5760EC 65C424B8FC7936822387F0646AE40C33768DB28245D352C86EDB3C0909C6041A 02E9E26EAAB228692394B6ABA4396D6894589961774AFB735F7E34A1C8409AC2 34E3B21AD6CD7E99351266F24E666D182C07252571CE94C199D1A226C3AD2330 86F628A655FE4E27FC8EE08BA3A19884B5CC49E233C38363012486BE9CE15B99 535E67DEBA780DBF916A1A99AC961B8A64E8EE9956A0F2B93C8F0DF55891F45A FB8D2E618FE8465EEC1FCF276859F15EB3FAF4078B348A78A2539378829C1D3E 656BAC23F5D42710443F2DE5BD21FDA280D6F6C26200951CFFFB470DA559028D FC6B1386BB61D927F4A25D75AA5E90817701308399CD740CF0ACA06A2F6EED17 5E476960408DCDEB67DECAA17964CB175EF3EFF7D5F771668630EF7A54B198EF 17441080CF7D9876833D4FA2A544EA49236B6DADE8D86FAB8AAF180F61C4606D 505B2331E24FE45439D4AC717680DE3AD456A80910F19C5719312C761922394B F7409A9038FEAA024D0B4DD33599C676EF2FE2C04971EE1555DF3528D5F4AA02 4236519492D9407F4F95A37C8326735FDCF6BD62C9A72E4ED620F0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /ODEMPY+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 270 432 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 270 432 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 270 432 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 2700 4320 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 2700 4320 re S 337.5 432 2092.5 3456 re f q 337.5 432 2092 3456 re W 20 w /DeviceGray {} CS [0] SC 2102.77 0 m 1749.73 750.863 l 1504.83 1286.4 l 1314.86 1717.02 l 1159.92 2084.46 l 1034.77 2398.01 l 933.445 2668.56 l 846.008 2920.11 l 807.719 3036.88 l 797.703 3042.67 l 787.609 3063.56 l 726.594 3267.95 l 669.395 3483.11 l 622.969 3684.26 l 586.785 3869.2 l 584.715 3880.92 l 584.715 3880.92 l S /DeviceRGB {} CS [1 0 0] SC 2106.34 0 m 1753.59 749.34 l 1506.75 1288.46 l 1317.34 1717.35 l 1163.23 2082.33 l 1038.56 2394.09 l 932.895 2676.01 l 845.832 2926.64 l 808.105 3040.93 l 798.098 3040.29 l 789.938 3050.44 l 738.484 3219.8 l 681.715 3427.01 l 633.344 3628.26 l 594.469 3817.43 l 582.773 3881.8 l 582.773 3881.8 l S /DeviceRGB {} CS [0 0 1] SC 2109.94 0 m 1756.98 748.875 l 1509.54 1288.66 l 1316.84 1724.64 l 1165.39 2083.05 l 1041.74 2391.84 l 938.168 2667.42 l 848.062 2926.02 l 810.473 3039.58 l 790.227 3044.09 l 753.777 3161.34 l 691 3384.17 l 641.418 3584.47 l 599.02 3784.1 l 580.254 3885.9 l 580.254 3885.9 l S /DeviceRGB {} CS [0 0.5019 0] SC 2113.59 0 m 1757.68 754.281 l 1508.17 1298.16 l 1316.04 1732.66 l 1164.3 2091.74 l 1037.73 2408.17 l 933.066 2687.56 l 845.812 2938.88 l 814.055 3034.86 l 803.992 3041.48 l 793.945 3040.55 l 785.98 3051 l 737.988 3208.24 l 679.578 3420.6 l 631.145 3621.5 l 591.973 3811.34 l 578.879 3883.36 l 578.879 3883.36 l S /DeviceGray {} CS [0.5019] SC 2117.29 0 m 1762.49 750.945 l 1513.46 1292.98 l 1320.22 1729.27 l 1169.15 2086.09 l 1043.59 2399.12 l 938.504 2678.64 l 848.352 2937.46 l 816.652 3032.97 l 806.641 3041.3 l 786.555 3043.85 l 751.609 3155.51 l 691.062 3369.42 l 638.988 3578.68 l 596.57 3777.68 l 576.793 3884.77 l 576.793 3884.77 l S /DeviceRGB {} CS [1 0.6465 0] SC 2121.03 0 m 1766.98 748.398 l 1518.25 1288.98 l 1328.47 1716.59 l 1174.08 2080.32 l 1049.73 2389.51 l 945.305 2666.11 l 854.324 2925.88 l 818.355 3033.72 l 808.34 3041.46 l 788.285 3041.1 l 778.746 3061.23 l 726.02 3235.97 l 669.25 3445.84 l 622.777 3642.15 l 583.59 3836.39 l 574.543 3887 l 574.543 3887 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 337.5 432 m 337.5 3888 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 337.5 432 m 337.5 472 l S 337.5 3888 m 337.5 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 628.125 432 m 628.125 3888 l S Q 628.125 432 m 628.125 472 l S 628.125 3888 m 628.125 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 918.75 432 m 918.75 3888 l S Q 918.75 432 m 918.75 472 l S 918.75 3888 m 918.75 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1209.38 432 m 1209.38 3888 l S Q 1209.38 432 m 1209.38 472 l S 1209.38 3888 m 1209.38 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1500 432 m 1500 3888 l S Q 1500 432 m 1500 472 l S 1500 3888 m 1500 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 1790.62 432 m 1790.62 3888 l S Q 1790.62 432 m 1790.62 472 l S 1790.62 3888 m 1790.62 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 2081.25 432 m 2081.25 3888 l S Q 2081.25 432 m 2081.25 472 l S 2081.25 3888 m 2081.25 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 2371.87 432 m 2371.87 3888 l S Q 2371.87 432 m 2371.87 472 l S 2371.87 3888 m 2371.87 3848 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 432 m 2430 432 l S Q 337.5 432 m 377.5 432 l S 2430 432 m 2390 432 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 1296 m 2430 1296 l S Q 337.5 1296 m 377.5 1296 l S 2430 1296 m 2390 1296 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 2160 m 2430 2160 l S Q 337.5 2160 m 377.5 2160 l S 2430 2160 m 2390 2160 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 3024 m 2430 3024 l S Q 337.5 3024 m 377.5 3024 l S 2430 3024 m 2390 3024 l S q 337.5 432 2092 3456 re W [10 30] 0 d 337.5 3888 m 2430 3888 l S Q 337.5 3888 m 377.5 3888 l S 2430 3888 m 2390 3888 l S 10 w 2 J 337.5 3888 m 2430 3888 l S 2430 432 m 2430 3888 l S 337.5 432 m 2430 432 l S 337.5 432 m 337.5 3888 l S q 720 3600 m 720 3600 l 720 3600 l 720 3600 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 1802.28] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 23.3449 31.4961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9718 TJm 9.1199 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2632 TJm 34.9422 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 38.1821 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm (5) 5.858 Tj -686.735 TJm (0) 5.858 Tj -2.2632 TJm 64.0051 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 67.2449 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2637 TJm 93.0672 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 96.307 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -686.734 TJm (0) 5.858 Tj -2.2637 TJm 122.13 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 125.3699 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -686.669 TJm (0) 5.858 Tj -2.2637 TJm 151.1922 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 154.432 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2637 TJm (5) 5.858 Tj -686.734 TJm (0) 5.858 Tj -2.2637 TJm 180.255 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 183.4949 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (0) 5.858 Tj -686.668 TJm (0) 5.858 Tj -2.2627 TJm 209.3172 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 212.557 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -2.2627 TJm 112.273 -10.148 Td /F11_0 11.9552 Tf (s) 5.5113 Tj -0.5054 TJm -17.851 8.3141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 8.3141 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -2.7311 8.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5088 8.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -17.851 94.7141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 94.7141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.7311 94.7141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5087 94.7141 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -17.8511 181.1141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6112 181.1141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.7312 181.1141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5087 181.1141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -17.8511 267.5137 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -8.6113 267.5137 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -2.7312 267.5137 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5086 267.5137 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5531 353.452 Td (0) 5.858 Tj -2.2632 TJm -2.673 353.452 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9719 TJm 0.5668 353.452 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 0.4941 213.17] Tm 0 0 Td /F11_0 11.9552 Tf (v) 5.6548 Tj 1.6092 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font MVVWGH+CMMI12 %%+ font ODEMPY+CMR12 %%EOF auto/07p/doc/include/kpr10.ps0000640000175000017500000002310313570013207013732 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale /lthick 5 def %% line thickness % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (eps_1) 3650 320 PR 300 2720 moveto ( k) 300 2720 PR 440 460 moveto (0) 605 460 PR (.) 660 460 PR 760 340 moveto (1) 925 340 PR (.) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (2) 1245 460 PR (.) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (3) 1565 340 PR (.) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (4) 1885 460 PR (.) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (5) 2205 340 PR (.) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (6) 2525 460 PR (.) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (7) 2845 340 PR (.) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (8) 3165 460 PR (.) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (9) 3485 340 PR (.) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3750 460 PR (0) 3805 460 PR (.) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 334 600 PR (3) 389 600 PR (.) 444 600 PR (0) 499 600 PR 4 932 moveto (-) 334 932 PR (2) 389 932 PR (.) 444 932 PR (5) 499 932 PR 540 932 moveto 600 932 lineto stroke 600 932 moveto 4 1264 moveto (-) 334 1264 PR (2) 389 1264 PR (.) 444 1264 PR (0) 499 1264 PR 540 1264 moveto 600 1264 lineto stroke 600 1264 moveto 4 1600 moveto (-) 334 1600 PR (1) 389 1600 PR (.) 444 1600 PR (5) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1932 moveto (-) 334 1932 PR (1) 389 1932 PR (.) 444 1932 PR (0) 499 1932 PR 540 1932 moveto 600 1932 lineto stroke 600 1932 moveto 4 2264 moveto (-) 334 2264 PR (0) 389 2264 PR (.) 444 2264 PR (5) 499 2264 PR 540 2264 moveto 600 2264 lineto stroke 600 2264 moveto 4 2600 moveto (0) 389 2600 PR (.) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3800 996 moveto 3800 996 lineto stroke 3800 996 moveto %% 2748 1088 moveto 2672 992 lineto stroke 2672 992 moveto 2760 1104 moveto (1) 2760 1104 PR 3000 1088 moveto 2928 992 lineto stroke 2928 992 moveto 3016 1104 moveto (2) 3016 1104 PR 2876 2308 moveto 2928 2416 lineto stroke 2928 2416 moveto 2860 2232 moveto (3) 2860 2232 PR 2660 2276 moveto 2676 2156 lineto stroke 2676 2156 moveto 2656 2296 moveto (4) 2656 2296 PR %%0 3068 moveto 3800 996 moveto lthick setlinewidth 3736 996 lineto stroke 3736 996 moveto 3640 996 lineto stroke 3640 996 moveto 3532 996 lineto stroke 3532 996 moveto 3416 992 lineto stroke 3416 992 moveto 3288 992 lineto stroke 3288 992 moveto 3148 992 lineto stroke 3148 992 moveto 2992 992 lineto stroke 2992 992 moveto 2832 992 lineto stroke 2832 992 moveto 2672 992 lineto stroke 2672 992 moveto 2512 992 lineto stroke 2512 992 moveto 2352 992 lineto stroke 2352 992 moveto 2192 988 lineto stroke 2192 988 moveto 2032 988 lineto stroke 2032 988 moveto 1872 988 lineto stroke 1872 988 moveto 1712 984 lineto stroke 1712 984 moveto 1552 984 lineto stroke 1552 984 moveto 1392 980 lineto stroke 1392 980 moveto 1232 976 lineto stroke 1232 976 moveto 1072 968 lineto stroke 1072 968 moveto 912 952 lineto stroke 912 952 moveto 752 904 lineto stroke 752 904 moveto 716 864 lineto stroke 716 864 moveto 680 784 lineto stroke 680 784 moveto 676 764 lineto stroke 676 764 moveto 672 740 lineto stroke 672 740 moveto 668 720 lineto stroke 668 720 moveto 664 696 lineto stroke 664 696 moveto 660 688 lineto stroke 660 688 moveto 660 676 lineto stroke 660 676 moveto 660 664 lineto stroke 660 664 moveto 656 652 lineto stroke 656 652 moveto 656 648 lineto stroke 656 648 moveto 656 640 lineto stroke 656 640 moveto 656 636 lineto stroke 656 636 moveto 656 628 lineto stroke 656 628 moveto 652 624 lineto stroke 652 624 moveto 652 620 lineto stroke 652 620 moveto 652 616 lineto stroke 652 616 moveto 652 612 lineto stroke 652 612 moveto 652 608 lineto stroke 652 608 moveto 3800 996 moveto 3800 996 lineto stroke 3800 996 moveto 3800 996 moveto 3736 996 lineto stroke 3736 996 moveto 3664 996 lineto stroke 3664 996 moveto 3588 996 lineto stroke 3588 996 moveto 3500 992 lineto stroke 3500 992 moveto 3408 992 lineto stroke 3408 992 moveto 3304 992 lineto stroke 3304 992 moveto 3192 992 lineto stroke 3192 992 moveto 3068 992 lineto stroke 3068 992 moveto 2928 992 lineto stroke 2928 992 moveto 2780 992 lineto stroke 2780 992 moveto 2620 992 lineto stroke 2620 992 moveto 2460 992 lineto stroke 2460 992 moveto 2300 992 lineto stroke 2300 992 moveto 2140 988 lineto stroke 2140 988 moveto 1980 988 lineto stroke 1980 988 moveto 1820 988 lineto stroke 1820 988 moveto 1660 984 lineto stroke 1660 984 moveto 1500 984 lineto stroke 1500 984 moveto 1340 980 lineto stroke 1340 980 moveto 1180 972 lineto stroke 1180 972 moveto 1020 964 lineto stroke 1020 964 moveto 940 956 lineto stroke 940 956 moveto 860 940 lineto stroke 860 940 moveto 780 916 lineto stroke 780 916 moveto 740 892 lineto stroke 740 892 moveto 720 876 lineto stroke 720 876 moveto 704 848 lineto stroke 704 848 moveto 688 816 lineto stroke 688 816 moveto 680 780 lineto stroke 680 780 moveto 676 760 lineto stroke 676 760 moveto 672 744 lineto stroke 672 744 moveto 668 728 lineto stroke 668 728 moveto 664 708 lineto stroke 664 708 moveto 664 692 lineto stroke 664 692 moveto 660 676 lineto stroke 660 676 moveto 656 660 lineto stroke 656 660 moveto 656 652 lineto stroke 656 652 moveto 656 644 lineto stroke 656 644 moveto 656 636 lineto stroke 656 636 moveto 656 632 lineto stroke 656 632 moveto 656 628 lineto stroke 656 628 moveto 656 624 lineto stroke 656 624 moveto 652 624 lineto stroke 652 624 moveto 652 620 lineto stroke 652 620 moveto 652 616 lineto stroke 652 616 moveto 3800 2464 moveto 3800 2464 lineto stroke 3800 2464 moveto 3800 2464 moveto 3736 2460 lineto stroke 3736 2460 moveto 3664 2460 lineto stroke 3664 2460 moveto 3588 2456 lineto stroke 3588 2456 moveto 3500 2452 lineto stroke 3500 2452 moveto 3408 2448 lineto stroke 3408 2448 moveto 3304 2440 lineto stroke 3304 2440 moveto 3192 2432 lineto stroke 3192 2432 moveto 3068 2424 lineto stroke 3068 2424 moveto 2928 2416 lineto stroke 2928 2416 moveto 2780 2404 lineto stroke 2780 2404 moveto 2620 2388 lineto stroke 2620 2388 moveto 2460 2372 lineto stroke 2460 2372 moveto 2300 2348 lineto stroke 2300 2348 moveto 2140 2324 lineto stroke 2140 2324 moveto 1980 2292 lineto stroke 1980 2292 moveto 1820 2256 lineto stroke 1820 2256 moveto 1660 2204 lineto stroke 1660 2204 moveto 1500 2140 lineto stroke 1500 2140 moveto 1340 2048 lineto stroke 1340 2048 moveto 1184 1912 lineto stroke 1184 1912 moveto 1036 1700 lineto stroke 1036 1700 moveto 908 1388 lineto stroke 908 1388 moveto 824 1080 lineto stroke 824 1080 moveto 800 976 lineto stroke 800 976 moveto 792 936 lineto stroke 792 936 moveto 788 932 lineto stroke 788 932 moveto 788 928 lineto stroke 788 928 moveto 784 924 lineto stroke 784 924 moveto 784 920 lineto stroke 784 920 moveto 780 920 lineto stroke 780 920 moveto 3800 2304 moveto 3800 2304 lineto stroke 3800 2304 moveto 3800 2304 moveto 3736 2300 lineto stroke 3736 2300 moveto 3640 2292 lineto stroke 3640 2292 moveto 3532 2280 lineto stroke 3532 2280 moveto 3416 2268 lineto stroke 3416 2268 moveto 3288 2252 lineto stroke 3288 2252 moveto 3148 2232 lineto stroke 3148 2232 moveto 2992 2212 lineto stroke 2992 2212 moveto 2832 2184 lineto stroke 2832 2184 moveto 2676 2156 lineto stroke 2676 2156 moveto 2516 2120 lineto stroke 2516 2120 moveto 2356 2080 lineto stroke 2356 2080 moveto 2196 2036 lineto stroke 2196 2036 moveto 2036 1976 lineto stroke 2036 1976 moveto 1880 1908 lineto stroke 1880 1908 moveto 1720 1824 lineto stroke 1720 1824 moveto 1564 1716 lineto stroke 1564 1716 moveto 1412 1584 lineto stroke 1412 1584 moveto 1272 1416 lineto stroke 1272 1416 moveto 1144 1224 lineto stroke 1144 1224 moveto 1048 1052 lineto stroke 1048 1052 moveto 976 960 lineto stroke 976 960 moveto 972 960 lineto stroke 972 960 moveto showpage grestore auto/07p/doc/include/emL1Sol.png0000640000175000017500000013565713570013207014435 0ustar skskPNG  IHDR$G& pHYs M MέNtEXtSoftwareGNU Ghostscript 7.05BC IDATx}p[},CA*e#e,5KWޔc9hf9UFu^Nrx;Zw-hh6K\N~ ڳ[`|z4CNU5mƌTz.3;=%gL;>qgRMk8}Z.: vGh˗MCG =\*ZƖ-bSXsJb3Iݡ|hҡCfBrEje{줮.SUO)$bicrNTc~2>.:;eQ6ͳYSeI0V"g2uy-Zp=i >1|bmYγjلÿdc[[x?6C4 ~͝;BvO{),~/Usj{HE,>Y>˷ݽᖮ.?\v?{SJx?1=-xQPX,/33wvv%/>:*UM;<3kDR-V^y W,M$xRIM!3!n@;:L_Z>Z82::]Ny׮CU-!qc޴I@|/Q~P5u%\xM=@G˸юB3;+x*^x]V,QX~\4TXd^u[R )r2r92=a߀-<+i'˼JV?kohP}TQʱdUZE.N~c"QlO<д&.05c`ZM8|LFFB5IB-eUo,\2TA;Kj<$K/峳!dWO{ܲh$%T'`DR)2{qF=hNBdqzvwByr@㠪 ,Te> k<0y+V21J$xe!vt|;8ÿr1ɿV 8J>[THZ -TwehrRSGN2Lzy79)ZT`߾2,τlt#랇aşaRwhPnz%wf æϫ@,Zj l2Bs,yRp^0c*lYQ-4bi{5mO7\,KvELmccy*x{d&N#4gGVjg-*:&WZjR9k׊^X>_۳~_|n|K-B} N$pzOjؘsJjle SZZ7")iշ~P/i-[D_W ]| )4"=V;\j|իwxxԆǬ!I;_ڿI!.9~Kt`f+/QۗJ@>KЗ+hZg)k^-z{K}!PtڋLD/F}` RS8SSj[Ҋnc[06u%=~\cԽ )Ϧ:{+i~O.߲E Qq&'u;4d 07/5$xιS?ccȽqgp17m*Bq/y ~+,.i>8BsJĄr\feux51|{K ^Z7HTՈXb _II,LvwQv,=+~KžѨڌUNDO:ji3 D<%9o$.@}a㽰eI R j[3OoUpxn8LΆ>[^,_{=R&~jpQo \4]Ažv^ 0,UL<m=:*#%pD Tj{T*`_p|J |6_rL6zu6=T򖩅!T7 NCs{{x_zu^6^Wol^ I&Cb8T׽$?7gRxdo{x.Y{S&5]%_3lr0yniqx{uh𜫯LC$޳\J6QJ$K_2%a)>v7-@Tw, )6l[" zaޝ5Ǣz?S͛l6$.(EUz<%2P!a͗B Zs~qV Ǟm:``[j;ve<0@>.Fž#">5e>jٶG衅L(xHYOijăd`ɶmJKՆ{ϖ -4sF^ ǎ 5UQ|vsEj^==Ohokc+YeQL5m}f(o<1 8Hzlj `uBZ8پNBTyɯ_/M1gٺSM%vCCt1 vR5!.!Uom`6%ظR+k> K*@mÏ t~b_/,rvCYՕJy~]XDگAϲJd##AaE&'ֻ{3{s;D{ӓl z!'d&?)z?6V{j[^uݗW/}[n."ߌxyϪڬ=*6y7r1 YPrC}][ ܇ W`Ez='q6H`jID6C;m;wj [?:?r2#_׮12't6HSCj).ݲˬaj&V]8Y1@dWnvxݞ{\@m˘xvsUV_ת} EOYŋPoz?lwPlVRT]u(i~:q䳶4%zͺ6vB %es69),{&KCH\LT(QC>,WŐhI!1'=\j^w>PZ^nAt~cb_K؀y6PVL\Gz)j`%WPH`ujeZ1`4jG=NXsI1w7S忬>m$v,r1ߏe &53򆇥ғvilߵۥkc4lxRᄀwQ0!`mDTq xyٺUXr9wJ[{P粏pO|mIDᐿv7-5RFiuDʻz{vj5V97eoQo\< iON ^X AߨՂՖjuuޣ:V>* *4#%nK_M>73(_ttH 5'uñzVv)_oS[\)xw` qL˼aRXv׮ևC;]u@} Pj3WnqxĎn6LJj` h5i`XU5Ojك_/؟٩%$oߵKam/4+r򣐩2'6{`wtȭ!RH&ihRwτ)/W i ̛v0uT6ՄիE?qf06o iSQ6K##%E7_MGv -բz>yQS8ϣ#=0IOI+րV+|by~_ЀI_ŽMu8|?Viܾ]@l#n*lmbmkYMּE1RtiKF*؁pVs5|mge_}}9?&ٍ吿b ^P1Ր9&;(^#ԐEo`/E )@\qx>@?sNf'u_upPJ [giQl,rJ׼CAǏ˦$x.8Iuܺh}.G>Jp1HC.3%j~oy-[Ğ=bn1. ޡV߸Q t/-[+ s9~yJLt IDAT#VѪUD$߾ 3;H,F7oҪUߏ>|nȿjdJ)xj[9z .|3f \I+WҪUџY?<]>yV|Meh˾{Q2X5&ӱ6Hxl,Zɜұ8MO崙+)K?3g詧)ƍ.Gn4-h6lwG/_{-a,.J&)5k`i}%G?OV͛Y~{钼X''Eo/Y#$uh}ָ~='MO_}5'{|6l~Շ [yNo_ggŋ7ވ ʕu{=soNUh#8᭫Me|}r4ٸFqG?8)g\NKn-/ɓׯUػ\JgR"A?~b'sذr9I9sFfr9VW^'Gk,F6W9z4rW#Y0Ξ%"Yk"Y֭[ߢ5k(M{IM+.B HtXӼ׮O|IYh"Ν˿~Sn>+W%{鮻"?SxQoޤhTJYrz'?brɛ}N^ׯ_{M>؏ŴW{~pb|,ݧ9;q~ޟ.rN"*=lz*@:ܫ(=76wᩧgxzFwͦ10I3r1={O͛A+WRG=ky֭_?]_]w)ES采{ߓyXs(~لs:yӌÈR/֭#"@n ߬ vTV*tuѝwskn'>Ͽr c!7YLRz_Z콢,ŧ̘JZ{\Ѱo c^8zT_9} s?T0Y/H &ĠLu*x^~*[G]]D/_tuI=N:y:;WOuu)ܶ~[rz, Ӊ޽g2Tpr)QX36Z?.\ȿN+lݺ * _ʊ ;=ѽ޽+"d Oy >\2͋{O#Jӗ咧*=l*cp=K$=4_s{}W>`ޒ3HPsx[?2-8 .!B=f7R[ac6% JѸn7nx#B$s!(%ylџW9.D\Μ1UtזKo߿2Kw~,zڷ z;[ox }?x/ #ahoޤo~3Ȱ7ߔ{ w8x#|^—/_=zubW#y >ӧ5X.Ӿ=  .TUs@&-^# F/!WeTz;"7oCwCB0f:{z~]ƛo|TJdx-بpSt;"kHt:n0u`k8~=5kCIbOTBrEF.rz+> +8*^JOfo O?MwurSoxح*ϑIH6=p>"7weU'qcӟ|ӑ}w;#wޙ|NNʵQ|NceJ`~s۫kkІ r A^B'H|5Tlȯz"L䮻"wޙx։^&)9<ט-ׯvlgW?xz[;?)bLo!_<{LstUv4hBP&ŋ;(㉍hj=d+gzE<.۱]w^wW, ģ*V$l1;>_S(5(ubj裄CP a> ֖MdK=2 >.E4^U:^#48H_iͣmzuk_|ˑ/|6lUۋ/2?w)ZEkD>g>g/7n/\W˾4쉨|u9/̌#{W|l̈́ E٢<.a2ߺDJ{B2G[V,6=Գҏ^"epzR p 3:PNf>|>@lYaN&@N/6&&>o _s|Lm94!">O}v쮰i3cCȑ^?0A*JZi`0nvUЦ1۲|P6']x wpAYY& !+=/EAdJCC)3 P}wŢ,ܧߞQŻ gz m,fg>A>f< ul&ϔMyb3ϤN8atw rdc LM*Ǐ`'Oh(iw F>iك Iuff!10@uwS,F8 v؛{˟]9N(}GWϝ @ݙq9tA_ ,`# f-_mkvtڪ}Uᷨ~6KTb˜kij:/;R k]fRI.M ~"W|3.p{o0=$1;;iƗ~ivE=ؑܑծ׭I:t(i.?@9@E:M=xbfYF_hoKPX{XY8ݒ oɊR ,* ~=uw'HDL i~ _:DO>Վ==rN0y=ؼY y8q?lĖ-ޱ(DA?EVe[0Ȉo\asM`>=-Pz9IbtZ03:*8~UJA,~mySzMz}isG?ZNbEQ5<\.իv|Q OڵȊfU;̿JZ孫['˻^OenMw6x1/D}ŋߏ[';9$p!bEѨuŋweNrfYgON]Pgqc (Sh*N$Yd*eVshbL&7eTBE#,{5Ŭt~nW|{M ^Y2vgPLL)(8p ٴ_U*:eDb`@< H WOO𵋁|"̘2=mּA.Ϳ~L 4Qd(1Jc &C,r9{֘ b }{TQVr11! -Q֭ɓ >S;E.'k'x2y8 j@F=^""Ro¹EcxXp*{1MLѨ'"7 !aEƊ \XEɢ> =S:|XtR7M804c㲂-/P!Qwiau&2-ka($Ą)@+L:nF{NDR P+L^ FR E*('Gƺ00erRV(r <{3>e)l6zhPv}O ,PD"!ȱ9zTmFF(>\NyNNJ_eӲیW2nr-^D"N6=N)Q\z+H12<=%߀WPԔLFĒIRw0FFbΝ+זNS:-e_^b6GES7<&O$E:D0ccWhH޻5m0hka$ r\8ssF2)]1d3=={o_\468 !8yRĜeqlLހb1&,/R=طU2p}O yyhZ" [ -U`a'2rEՙqe52"x.{nD]YFbH<Ϭ[ψ0ǝ;gažq"twiX',}Hܻ- D# 0VRUALMf#<Ԕ8te a7ȓ}qTJX\4P\ˁ咍ϑxTK)$ٲhD@srTkƽ3\q|IG৅׺1N! 6n&lb0$g'jeܳFpvQ{P] ʮEcb¨,Hhka 1azoWnGЮ~6Ѩ^њn|=N;utGY ~Eyjb{7AdQmZM@!B*W [؞L^n͡|cuVg.,m[֙jn| mqG?v*5,b]{jЩN4dLWm& P%Qĉ f%@''8?Es-3X;PYv''KWغՌqY ``嘚22I[pO^z g>_-[_GGHCC}|XwNdq۶2J(=)f}6v8D\O$抺{@|x5굔|g̩tzFH ?z|^)E? YO= Ghy1&؁4ffOeصct-{K9  :;˘3_‚17G]]+>~|\ )%o_EJcMaPÇe6!O#* Sd^{"+^093-YRbf=o{݀Gl>n՘| S!VxO]ǎb-m{#G!үi|&I!nv*m۷]䎁 F?}Z\.w [>ؽ[nOl' `Rp{ƅ5rU_X0R}/ٻ挱1i$7G]wqõRoGPYϱdm炜,'4ex}|w`<)6o6.J}E3io0eq!cbBpZݥBkK 0|i']e"`'17Pu"!7xHPh)Gi5IȲƱΑN|SFG7zD[%ytTRѰV. ~9p@VqBW҇s;22"30`܇C11!r93>%b˜Eo,VqstUNe;;dJ?1 {&8rh߮WE"tu0) p-2=dUI*%[Tr~ޘݔ8ϱucuw]r]j9[D`ϒ(aJ^ZY,B!P-=$-T;ftw^)}}֦C{SS45%l)2(*#G#Ghɇ& 1)Õ{ˬ‡GCttP,fu`BOrGʼ*DWg5$==*0 6< y<.< "s+*G/uw/ף=1!=~n~W초ثg%RѬG؆UG˄ܬ tGXLDr\NT2VsSƍV{7;04*8[LF?*4[,>n:ݖz)T]#B'd) :R).fǙu3Q*Gjs2}ӋYn.xrt)B / 1XVcv6tq]Lm= ]~(,zOՇaɇ|n\^T|"ڴItw [\wR܃XL 5^M'%Lx ޏ(|*nĄ+8=.c}2)W \̌L qbƷK$循q/UVm>?ΉF4*="X,z|v[dr9ig^cNZ3Ys'!#tR_^.T|:Ys9#33A6Dor-+n.s9zö,U%*s< Ul^e|\fQgO\r4c8x\ u|\|Ks1 b;^nS^'Sq~:^0gIHITacnS/-uc.T=rh [{EH@?0ɍabˆjxnx/a;&5g7s=bVx7Ĭ\anI1QZZ+qL?uua6*<=!2ή٥R,`o*?^3En#^eroh(k=~N+HοȨ| O&urK7=*xL\L;54며B⣘ɘy<G ԧA7{z9LR7骹ODbڢ{Dzսmk͒t¨xÄTfV?fqS9c%=.07W/%pݦ6R^7tzEk2>peW4h/kgyK]+ev'?~=$SQUT'eO  or9:q9T2)pUH(2mt=p86{Q}=ϳA?ض0QuxUFy] \ _xl^/To݋.b3<΃aEH`H`d$IqP'6 쬨Uڈ<25%{. p$2#Mm7[:.J.P ?~&' 'A}J[y3P){}/f{/]t叽w^NUF‡pZ¶ߺhn,/Px_Zѣ[OiM$ k^zz̀}skp1}}<;=~h7?.;丗'` :߱&Gؚd2HLE}}Un_^J>d[s9S3j ~Q۝‚wk:ӶJ8~t{jsM"<5 أK.t9b ʈ`Wm.q5''l5UF 3ia'_}=*\Pk~W_ n&ܚtZ}l>?jCh摜;a9Ğ{ݸz, znu@>|,f2Mnj9zʸsqц{W8ZCEU5nl\ܡ/>ܨ^e/ŶmB]a/OLPGJ.F=dC=4S=gOU}wU;Nfڛ͔<+xJmرf]SjWϿ"^^pnWvܡH jy}.d['ʢ>w~5XDw,ݺ}n/ p|ԃQR(<og缻WNσkg`5Q; nqDe-|aBt馲 %~Zq0ev *:s4;p/ jFJCAPREx[ssF:-s[QVS1ex:x`(?~ϧVp^ Q[@ $|ZkmPoV}nn >RX>|f GPBC;vwh4qFiv;/OESP*Lc%޻b57gpA F~F8'j˞}-rr.7w 5w[^<`ham.G٬hѣ"JX8A=,[Qqd޿&MJ-{%O9e]w*ojYMNnv\m[kl4p@WT'M/ϑ(aUJ8 nGZ7b Im5CD-gff={#Yo`e=M?.z{MOGԞQc(c@r@mc#bq ;(\,{":u*4FGEOTYJ&iΠϩ>ԼԞ ,l_]X0Mvw<Ϲ&hԬ '!٫quȰOJ;Z#GlV ЅΝMPf4v^8=:=P~xU=PS!>bԲWzw>Uj3xjU#94k1N0\:aQCM=*6}.G%T\j_+˞ C60\QTÝJ=-"{_`Gm ;ia' cpPΝf+CFq# D(XkUxt9e_Yd\?Q0aCS)nIDk恝/tvuwSO |&ivC,dZmx]i3Y;;!xpϣ8*{w78JԚZpw;}ƾ}e핵Xuǩ_ ."X_8 7;Z1]t[ }a7 *nχ 6@|JW)RbzcvdK_${R#K%S(ml_XjXzS5&‚ȡ8ѐe--kcTͰ;j j4`3%Ujg:@C5>,bGYU&Co\&ZpYWh4;h-L5+[0As9kdH@(qax/p7VWz=͕Uh4eQNԍHn C}UVt(K2)>h4#jy/\}܆!ZX {gCYl4&T]$գZ^^-bf~?rTjoKFhƍ-\^"^‚d(oFHů?@5Ɲnkv*Cb?:j1+knbh4v0 WO~hSCBb2kYk"a{-FϹf)Ucjtʊ7T[t׮PDrC!T_~}̭ T5' OFф-[wرze[ +{Mha)B؃Y6 vm(vvF؇߀v:[w<{ wLe1U^ulh4 6$%u| uƍKtԔ@-DJvR:~*pe2_FѨG'1tyCw(U!I X졂^XXwux BŨ6ވGh4гmBNpni\%xWK6Fqq{h4Mw7uuuXV[|iom% z0˾.{c=f4А)ړh4Dy`~&C,>x/zP}8=a3o1űeKFKO4(Sg|sh{C+ zϛO$(a{mk4 fQ&Cccu8,gb8!;bŞjVm\_o~65e6~lkYϭ{{գE8VjثrŻ&rkP;xh4yFj"_e?kRKP}2fޣxY5b";ܹgh4S ӈG1DtH:hjWo{p>>,325F4..ںU{gyFナݻ۸ MM݇zpmMRFRbH{G˞_+/[hRHP_EE==t򤿻OzhB~1[fݟ`[ Y?2RS,;ۢ%3IPa!ƅ(K 5H.jh4HoYqNScaI*c;x>x' wU&qg,{"tڌoڤ5ra6cijrZy}J}ڣAbSOOShjoo;%Sw9z jUDVfX"x']s}cj;:[7h4˂(79 "{*h/P/o>($StZ8e3SgtFSg}]zz[viL>Ztٓ 2=5*?̅pzuWU0{ni#3vmk4&g$n{PxjWzx _\M՛lab$m_םE-m3MJ,j~o8-|h V6\aQq[r653p7_ReeædâAI?%HQ$~ FC~{=|9<F(%KGz6-H[6φ6?T66yc::;v8z_"GWIzQ*R)zբ^;&;c"ҜouUʮ zj&EO^o֭b?Nzc|C~Fٛ7 t]V}unWr$P]T– j)JZh]/hJzzl"xQB)#)45 v 験_FGӌ}vY'6~âMtNNz៣GM55N*Eᰑ?yC(#B!0T D"UtM]Rꨮ.^O˃K}c#Ho0#X`P2kl~KPs -:^ʨ󆢖ݻ-~Dɐ&_8HÂ"1K<9-.{;bA8D( Q[\؛{`++` r27 ; 8ekՉdz_.97-lsjC#~2HP8 \UOD(5Ag/0@+fjLi#wJgH'2nbc [bŀ+1]k-+sQ!%S"A "AtEYzb1s45h3:f{e-ka"qdzƾ~ۀ>xDkt~r65sZ+>geڣQFu&jCKf/e<9T *JGB_ GOӗdQxB!c~r]?! 0'Gf 1P6G$d|>/}}Y}ȼn9,^{$bZҾ敷ޤ^MS`ۯVN?"_DtKj8s-Og LLR)߶eHB/yd_hmN4QZjdE&sPwƳiDyyդ74n)N`9:3ߟ U DkL6tKODO6Vy~f0>5V<=E{ZxC=JFyQ.~abslY(CvR& ?[p -b鉤DFLU' GSe}6j9L8^y<淩d,&L`ح[,W](&4k~ۃugDJQkPXJFpy zYe JXJQ4cY"Qg3'H)^Hb i9>VW'B!$'۷ZU{4༝x啤/^ʹdLڗa)`Z8LUR' BwR)6"u{"ν񩾹&pli|\(؃!t[ϯ}wn 4z?vwe{-}q3fj+[8y8L'NXh_b3 la)>hUk y<-9ce| Vɾ>4$zEN+VʬTG""^\|%z%-GU!^J_:Ç@Bep8%gBompP^]fѣɡ!qsT v=9,jQxE|~ˢGd%͘K]]2ͿڪR$3#z k}8 e# .OqQLhQ>ݟ=|1듡3Jh;:6ulF{a Z;Vfc1s=z4. !qTCq<;ӧY>,W:xz(, aYPQgPlԆxÙ+T4</&_x!;GU#iڟJeF-"s)95yd6;%F^6{SONbӫ?h^qlK_"" ߿l鮜HP[Pו'ͯl@BS=PtQZ}}2}*ͯՑS֛HPWЇ#btnY5blc1:ufnVZВ@BߍJWL3O=yH"5!'OұcT</8OD--U~>craR%Դf7$Xu;>|RBQݯr S b>];ܿΨ{%.5 .Cb W$_}u;dFZWotݟ~>#m8馝:]b16 ^wAEYٓ\nԉF2vtͩS%#cWrb' YP_gCr2#*W'|!u1fO_+Wgϒj飨`WJi~u{ϏJ4J8Yag8x0[klTjck/fD"TtH^7O'W{<"3 vsDùQԫȹ$>@D{,TCc҃oX~?56fzϔsɏOXg^qfjrcaz)7nܣu+QezH  DT[+Ǟ* r'$[ 2--Bq#(ԡvR|҂|73},F^/QSm7SO%dh=![Boz%:e7T44F0B9KJG& [8+Ho;o4GqLokrjɹԜP4<5666¹'^RU9iuvaN_-*WڔJp瓡~`=:$xN4W/T*cNS 4G":ڸDU'7yIYY~sx%>hpPkZϡP:3\%k66R*E r$ȁҺ_hji] +AtCDO>lm*/XB!jk׻,J Â:9ϛ>{W zpg!Z0φ_RqŝJl,$PX+ocuovgغm;F썶ѫ 1'>PC::M08kq (!z;̷y98JBp^BZW6j?x]uP{f}uh*Tڞj9R,`Vx5HPG#W_#azgrzQ*E^/>,oex;(=XAo6^aOڬ<\3.Z/DYcxڞ~:J*8Q*8׳zPƬ^#g_TZߟj>To)n}o)#m6A*e0'ْ\QmCV Tm_o^/|[e].D u7StGZ]+Htcѣ=oZs8;&s^/KNg`?~dx3x1kWM|s}WKw܎ы|jA=Q}7]6X?O'[[eNGZ[3< 8lex1y4>MW >rx땕{O ƞhy<}(US7 g>zI}ѷ \kkLgm]~%js*EѨW'0ïOx͍'LBuoɩ)٦㿃x$r#)68Ynrࠢ -r=5Tj IDAT|J7<&Qs>>| 7-ke'GSLP*Ep?AI-5؇BK'd6j(˘'ӓӕJQ*%0tvJĒ 5J)]/ӊ;& 5OHxRTu 򸪾࿱55eH߽XJOV0_RrzZ(> =-'S`͡[{媆sF0[nĨ)Y5XEsz}6_+Qɦ'SXrՋ7>wŧ0E0Q*ui2=+L-ۥтN Tp'5b];96)W_=黌$ЃzWW*խvXa:Q~[*eG]|x]$RS&UyV1426LEO=tD[[ֿ'(-ho[B o =]Ex"ZoZ,*SRS{PEғks|^dnCgB"!ο>x"R|v'_9c\ѣ|{_@xlN;rA6f&?ܺkuA*%w={+E| G\rp2H{44ÇLxϳuO 8|*U<:Ηys7=T^%8D;=`QMWn[9#t](D=z`;߽_6@ܩy}%;tH.b1 ^oo]-=s%7XGGi)mQ'rxV O?@@tu3;nY6,GwUcUPhxgIOG"O ,SvhD4Jr$u-hډZUO_*;UqGDx NݐpXثZ aُbu6 nQx<;:+ߡ!*.\ۇ_",B!QVSG"Vo[oDo0^W,FCC㱥'HB!s|r 6(oma),'"ݝCa:yҴT!}.aUQryNڬ,c*,2 G?@+Z?-D]~Q::d}:4۔w2L]m"UtӃbrRZbfFLL<!:$&'|MMyIf!FGŹs"^bxXtt;btTLOF͛@@ qq\,ΉQkE ,{LNkb|\d?qdG+&'̌NK;<{nHl)W2PN4YBa8.p=gvveu*+(;]Bb܉Gc{NJb$}1䭤AJkޱc̝CQ; (sy];fez>=kUnN&6܄og6Gf;\$-b ЖSٳI#}]Ƿ^#gjD5ʈ}>}B}LW=ߣx|SNjX˳%S'N/:wNpHN2͡Cem8_b^>c1͇i}}rnUU8KmIT"\wo 'o@wiiϓ١gH*~vT'fn@aQc<Mrh3q`6j #ts}r&p=ӏ\[*3ZwtdgqTjey䳣ީ>'s 6!+X<FF,q5HdS8IwZ3U`mr АL)|U:k {_%oʎqy.N˄@@.`Sj(PF7HB'lzl//7OcXV4>7)WFWOO$hddS}}C*EǎYh),giOy;:DOYG[ԂW=,*VvQ[R)cbO[ЭF=~y]iߔ)2Ռ[ [7¿W/eyz͸xX̊1|Wi1:yrSҧ Oɬ)tOZѨɗ)T=^(t6P޼随`PAYw 1Q6v~͍ӨRBuZn F%}R,>D@||O04|\&Ek9z +I6|R6}^IZjMݥ>2Q)LʛEWWV2NᰍkISV% 2 R[Qo7#&ei>cEcO!NIU]޾Q&&Zec@˃9*UsV2Q ,}x6-y2 *(Q6j❱xJ~rr}a*gY{+9xP~_ye+lgf[X*Uqe& Yc>YS:jJ5`ve7 Vp4dEp̏^u&PTPi:e')w#gVŰv/h@u /#ת+W}?+C}} (z%*/d.6;PS):yҊyƢ~xX|i0\cY-^9&Y-x*TTPm(Du!GbĐS(Y>P."RSˡĂK l_ICCc_5ÒSk<2*ڧrS8Et= 9dÛucD{dY>cQcOZ$l [Z\QxU`B/te5ir_~Euezk[y xN}~Y9R=|loh/<}/nNK1urv4̬D h_aBo~XPV!:eZjpP|r܆enqmweR)8z)J] mcVN(^zäBMVھwv5% ma1=k-w֎΢~5=-ֽؚbpP b`OqƠnc{"/;)72,v\Rϝ3Ƀ7h S h47`PIĄ1[ol3n̗ti~)_2YVdVU\$ ,:;_jP _Ho~3{[{Ot˩\./~y]"}2_Y]MTU%k<eeΩ{J/CFGc޽T]M@gc}.\؀[59޷Hc_^Nee7R% _Gt AO?)=_Sy9Q,FgwKiԐKŝ*Jwޡ~{/:}>Dazy<6(`fGҔF6欷/~>DFttXB$'&&E'&D_n\)aU%>i'& C''-. eBwN ^W AZv|\Ebx8WgaVȪ'xT ^@z8ۃ;l$hɡWB2lMs2 2 # ٗf10-1J׭AΞ''e].J$hrҰɥKFrrۜ@!׿.eDә3ѓO&#)_2聾p'{>ty\d7, ҅{<\\pf|+·"(@mR):slMLe /Vv::t^:X'}}?*0:jX-KSS?9Y;%(LԔ쀽z1<,$cĢ߃Ʒf HoJ,)}o+@7twKQssc(c8XF{"X5D|+rUYSd .) p}DߡƲ2S=/cEy>s_}VMF-]~MNasaJ, 穾(ޢ3gߦgI~x؟0(/T^.G[oܹYTe鲅+re*o*owE+W+\NY/y-FGB8n^g^zN_^nBo7E:?O=M>{l[eZ{"?r˗UGqg]Η_ƒ.H.Q,FN.9,Zhm{qDI7wL6GejՕˮe>d[k]W3 s/831/DE:m?G@nhЧ?,~CrSWGQ]Mދ9:/_`"  OZz / OE8ЉtbAxTb1 hh^};ϗcHP4J}:z)4:*|>DմY?eeU͙\wV|[{~L/\&boWTT^ĕ4ԢcKuuDDCgϚ;:D[% ї͡HFz?tHKn7bn[lKϞ8Jѷ:S?igM UUQUԐMssNC$15ߦo~ӄ=oyA^K_2b6έ]H~GA~*y ۶mK QN9^[X*/{ʄK|`߀]NzLHZzp0}Nnɣ{9}_bcAq:M$̙BYzZrkj֓}_u_vr$m~.]rhϧwr*ھp7:<oִ=;ٟ pTg2UDDw;Ry[eT^Ne۶g2mPQ98ONׂ~ev.C]H'N^[㡻2Ǿs޽27E WFSu,}Kx!^9`3n*v5DY;7p^ZEg]K.s.ka1ַ*q7m-q_ҷMOcm;DDUDBڵkW[w;vmcñm{|flGfB,82?ymmnX0\Tҿ{HiItzx8(%üt}N4N7կ: GZp~w HD[8@UU4?OѨzLȘ^y9Qdȑ9 ?Nϟ9C>#>QAFe2'?'"LE]6G_P[++^!gy5ODNg|ۢs[bwV.ڶpf>JY=sOD]w9ٙ%}ϜGtZzss-~n H菜P}=ۭ'[{"ΖQ2YloxyT]M\\D :?7=_YV*{e!3LN_Y̤T)KOٞJzM[Hxi~a>cY/bYכ#c{/dY]MH}0W*I_^.O?p65z;-,~xX󉤂|'#riXw}]Ph>;[[H'g@AY=U^NEt8[G5SWDŊIDATk>|Mwf?$Wɑq*~YHӅWZwTtpD|! Y/S>wusv~NX[v=-)朅$X WdPu6"_UDӒ~CW=ޢ'xͿw'ݷܝX{ֿܿs榹]sW|ٕ4׶UW/̇(e%{{ZB^HsvW!8￟겡'8YSse^8'1/.fSsG'Yw/ݻ_w|٠}pv2?_>'GtR޾>8_Љ(p{NCs;j cۜ*3?OU@]կ~ֹoM!_©DѨOh䇩޳N9-=-_#IH&Dn |ڶ;jvz;-/&N#SVpҕD<]gW兛⥋?7Y^{-N֋]_O{Xbչs:kj\[T-q?~5RFHP*E##v:y\#hZZ8:;Kٴ,CVA1{(5cODΉ1)`s 3li}֖Q0(<xYy"y|_'"r<MpTg27DbΏ*ƒoo=%~33Wwݖ?_Ź7xW9GʕeDI+޳ 18(eUH"!>MP5i+L4J(٦gFQwm`3X'RFU Y%h{{2ZCi_yŜ6>.x 'Z 6xz{E1lqnyPC0YFPb9D. O$ylϕ+y_[v|J}Y2,EL漉o@K{kmn&_yLj Q]stt-# 'L9Zk =-ٲЩSti7otTDhɶ ʓr&x\VFF̙&N&&k884:4Du޻zp83ٹ'{[K%3vSϣ?sǞ_]Sq1~9D3 f!ULGw*'l8m%zG.ccf-AHn֠d}gӊƬbıca"W~s,V$gm{'//򶰗Ꜯf?nZ*8D$*/~kDt9MےkGD4o.? ,=s<3O=e!ixaTAv,dz{+~|8l1mmęDNIJĄP YH'll?/iloTWB7uepP>%9vҹfk2]w;etB.rx||ܕ]J^uJ8zűcY>a-߿_ˌ2h+d׷8x|NJ:ϔ')QW'C[W4zz4nS_﹠(/ Wތu矩l<\^EVR)~㊲Ņ4]jlb2;H" ˺~Vw=mm22˜Q{Z [W?(TАU}}2Z|č=i{ϷaEpUazP~B ޛw,Ε/WHR[Ǜ_`P|V_+̪rW?оuv =׳rb?>z9w!Pƞ4{]_nZZD[۲02A ԋs~?}i !(NN}q=3fsl-~q9XL~lDPC/VKWt3>k"[ؓiG-n͂gBzWpEY,菍NŦ& u] s\8l"~[A=uwÇU[Qs"DJ.(RLn/~~45 ]߷j?'w-AKhm-h"}}bzZΊi1>.W6FK"330Ԕ EbzZ̈tZLMqs|aH0(ΝHc0'&'̌33btOin<Ʊ?th+mf_ b{{MUUrў=8mu08([S,FN-rzvLUSC\ISKfg8@:Nۜ{79I{AkַT^N:E? Գ q55}9_|C8tH|kNW6K$̙-4 U~.^0tx{2wqَ[h @-qDW28^jaـ] OL@qR@g˹?+ׇB|nc0( 2tv.sU@0!}Hr6^C?;+pAif $+s@cvSSY9Aiz.sPI:;=- ::9 w0e;.e*(Ȼ."aؕ (N$(h"zY~HFTS#?'W)W|Hn7%DD0E"t(\."X"zq|*E^>A UmzΊ ȢfuuTWGDJQ*yf?y$ęDb1F1z-)Z[㡚E ѓOb9N_={&Q^Bl K*o? ~19S@ZXFfg$Z<{#Y4Pdc1:y^z45A%]|@RP$BGle+zP`gtTL>J2~Y&K$(hf D{;x9lM^wza }<(c/?^C!~Qc4o){;@w\D9&?Bnͫ&Z2U[o^1J2:*ң̎6[riɛ=<xjRf^w[W_-7n"0`g먂Ihiq7_ M_zs|azYYRf_W'3fGa,3 E,[EDc`/f b1 3; Sl}ɳ~P+$h4;{ᾓblAAP{shj==v*odžzI'сPF^JKRL NKTYD? ?b^qAn;{𝲵:\HP"!>/6뱾euKvZ x\92bm[*x`TR_(=˓{ɱtLDT--z:O$t_44DcY`2MMr[}=OK~)d^Y?R^c20Vd~%u:n2_(r$Cl }lTu\ W5x+AEE #W~^ck{J_$T_vlGsJZEKAA";sgU¢oWtű06I蝧-B}&PBK7D߮Ctɓd =Sfğ !Jo`4>_+rsֵ~ yZz{؊֊ݻ7t^xۥū28̾@9qmWWYW02/(qd2<[x@c80@cEO8IENDB`auto/07p/doc/include/optionMenu.fig0000640000175000017500000000025213570013207015255 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 optionMenu.png 450 375 2625 375 2625 3330 450 3330 450 375 auto/07p/doc/include/cir2.ps0000640000175000017500000027100513570013207013642 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 600 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3800 600 lineto stroke 3800 600 moveto 3636 1356 moveto (x) 3636 1356 PR 2056 2460 moveto (z) 2056 2460 PR 824 644 moveto (y) 824 644 PR 2196 1500 moveto 3716 1500 lineto stroke 3716 1500 moveto 3636 1452 moveto 3716 1500 lineto stroke 3716 1500 moveto 3636 1544 lineto stroke 3636 1544 moveto 2196 1500 moveto 2196 2544 lineto stroke 2196 2544 moveto 2244 2460 moveto 2196 2544 lineto stroke 2196 2544 moveto 2148 2460 lineto stroke 2148 2460 moveto 2196 1500 moveto 676 648 lineto stroke 676 648 moveto 728 728 moveto 676 648 lineto stroke 676 648 moveto 772 648 lineto stroke 772 648 moveto 2520 1964 moveto 2520 1964 lineto stroke 2520 1964 moveto 2520 1964 moveto 2516 1964 lineto stroke 2516 1964 moveto 2512 1960 lineto stroke 2512 1960 moveto 2504 1956 lineto stroke 2504 1956 moveto 2500 1952 lineto stroke 2500 1952 moveto 2492 1948 lineto stroke 2492 1948 moveto 2480 1944 lineto stroke 2480 1944 moveto 2472 1940 lineto stroke 2472 1940 moveto 2464 1936 lineto stroke 2464 1936 moveto 2452 1928 lineto stroke 2452 1928 moveto 2436 1920 lineto stroke 2436 1920 moveto 2424 1916 lineto stroke 2424 1916 moveto 2408 1908 lineto stroke 2408 1908 moveto 2392 1900 lineto stroke 2392 1900 moveto 2376 1892 lineto stroke 2376 1892 moveto 2360 1884 lineto stroke 2360 1884 moveto 2344 1872 lineto stroke 2344 1872 moveto 2324 1864 lineto stroke 2324 1864 moveto 2308 1856 lineto stroke 2308 1856 moveto 2292 1848 lineto stroke 2292 1848 moveto 2276 1840 lineto stroke 2276 1840 moveto 2264 1832 lineto stroke 2264 1832 moveto 2252 1824 lineto stroke 2252 1824 moveto 2244 1816 lineto stroke 2244 1816 moveto 2244 1808 lineto stroke 2244 1808 moveto 2248 1800 lineto stroke 2248 1800 moveto 2256 1792 lineto stroke 2256 1792 moveto 2268 1784 lineto stroke 2268 1784 moveto 2284 1776 lineto stroke 2284 1776 moveto 2304 1764 lineto stroke 2304 1764 moveto 2324 1756 lineto stroke 2324 1756 moveto 2352 1744 lineto stroke 2352 1744 moveto 2376 1732 lineto stroke 2376 1732 moveto 2404 1720 lineto stroke 2404 1720 moveto 2432 1708 lineto stroke 2432 1708 moveto 2456 1696 lineto stroke 2456 1696 moveto 2484 1684 lineto stroke 2484 1684 moveto 2504 1676 lineto stroke 2504 1676 moveto 2520 1668 lineto stroke 2520 1668 moveto 2536 1664 lineto stroke 2536 1664 moveto 2544 1664 lineto stroke 2544 1664 moveto 2548 1664 lineto stroke 2548 1664 moveto 2552 1668 lineto stroke 2552 1668 moveto 2548 1672 lineto stroke 2548 1672 moveto 2544 1684 lineto stroke 2544 1684 moveto 2540 1696 lineto stroke 2540 1696 moveto 2532 1716 lineto stroke 2532 1716 moveto 2520 1732 lineto stroke 2520 1732 moveto 2512 1756 lineto stroke 2512 1756 moveto 2504 1780 lineto stroke 2504 1780 moveto 2496 1804 lineto stroke 2496 1804 moveto 2488 1832 lineto stroke 2488 1832 moveto 2484 1856 lineto stroke 2484 1856 moveto 2480 1884 lineto stroke 2480 1884 moveto 2480 1908 lineto stroke 2480 1908 moveto 2480 1936 lineto stroke 2480 1936 moveto 2480 1960 lineto stroke 2480 1960 moveto 2484 1980 lineto stroke 2484 1980 moveto 2488 2000 lineto stroke 2488 2000 moveto 2492 2012 lineto stroke 2492 2012 moveto 2496 2024 lineto stroke 2496 2024 moveto 2504 2032 lineto stroke 2504 2032 moveto 2508 2036 lineto stroke 2508 2036 moveto 2516 2036 lineto stroke 2516 2036 moveto 2524 2028 lineto stroke 2524 2028 moveto 2528 2020 lineto stroke 2528 2020 moveto 2532 2008 lineto stroke 2532 2008 moveto 2536 1996 lineto stroke 2536 1996 moveto 2536 1984 lineto stroke 2536 1984 moveto 2536 1972 lineto stroke 2536 1972 moveto 2536 1964 lineto stroke 2536 1964 moveto 2532 1956 lineto stroke 2532 1956 moveto 2532 1948 lineto stroke 2532 1948 moveto 2528 1944 lineto stroke 2528 1944 moveto 2524 1944 lineto stroke 2524 1944 moveto 2520 1944 lineto stroke 2520 1944 moveto 2520 1948 lineto stroke 2520 1948 moveto 2516 1952 lineto stroke 2516 1952 moveto 2516 1956 lineto stroke 2516 1956 moveto 2516 1964 lineto stroke 2516 1964 moveto 2520 1968 lineto stroke 2520 1968 moveto 2520 1972 lineto stroke 2520 1972 moveto 2524 1968 lineto stroke 2524 1968 moveto 2524 1964 lineto stroke 2524 1964 moveto 2984 2224 moveto 2984 2224 lineto stroke 2984 2224 moveto 2996 2232 moveto 2996 2232 lineto stroke 2996 2232 moveto 3012 2244 moveto 3012 2244 lineto stroke 3012 2244 moveto 3028 2256 moveto 3028 2256 lineto stroke 3028 2256 moveto 3044 2264 moveto 3044 2264 lineto stroke 3044 2264 moveto 3060 2276 moveto 3060 2276 lineto stroke 3060 2276 moveto 3076 2284 moveto 3076 2284 lineto stroke 3076 2284 moveto 3088 2296 moveto 3088 2296 lineto stroke 3088 2296 moveto 3108 2304 moveto 3108 2304 lineto stroke 3108 2304 moveto 3124 2312 moveto 3124 2312 lineto stroke 3124 2312 moveto 3140 2320 moveto 3140 2320 lineto stroke 3140 2320 moveto 3160 2328 moveto 3160 2328 lineto stroke 3160 2328 moveto 3176 2336 moveto 3176 2336 lineto stroke 3176 2336 moveto 3196 2340 moveto 3196 2340 lineto stroke 3196 2340 moveto 3216 2344 moveto 3216 2344 lineto stroke 3216 2344 moveto 3240 2344 moveto 3240 2344 lineto stroke 3240 2344 moveto 3260 2344 moveto 3260 2344 lineto stroke 3260 2344 moveto 3280 2344 moveto 3280 2344 lineto stroke 3280 2344 moveto 3300 2340 moveto 3300 2340 lineto stroke 3300 2340 moveto 3320 2332 moveto 3320 2332 lineto stroke 3320 2332 moveto 3336 2324 moveto 3336 2324 lineto stroke 3336 2324 moveto 3352 2316 moveto 3352 2316 lineto stroke 3352 2316 moveto 3364 2304 moveto 3364 2304 lineto stroke 3364 2304 moveto 3376 2292 moveto 3376 2292 lineto stroke 3376 2292 moveto 3384 2276 moveto 3384 2276 lineto stroke 3384 2276 moveto 3392 2264 moveto 3392 2264 lineto stroke 3392 2264 moveto 3396 2248 moveto 3396 2248 lineto stroke 3396 2248 moveto 3400 2236 moveto 3400 2236 lineto stroke 3400 2236 moveto 3400 2220 moveto 3400 2220 lineto stroke 3400 2220 moveto 3400 2208 moveto 3400 2208 lineto stroke 3400 2208 moveto 3396 2192 moveto 3396 2192 lineto stroke 3396 2192 moveto 3392 2176 moveto 3392 2176 lineto stroke 3392 2176 moveto 3384 2164 moveto 3384 2164 lineto stroke 3384 2164 moveto 3376 2152 moveto 3376 2152 lineto stroke 3376 2152 moveto 3364 2136 moveto 3364 2136 lineto stroke 3364 2136 moveto 3356 2124 moveto 3356 2124 lineto stroke 3356 2124 moveto 3344 2112 moveto 3344 2112 lineto stroke 3344 2112 moveto 3328 2104 moveto 3328 2104 lineto stroke 3328 2104 moveto 3312 2092 moveto 3312 2092 lineto stroke 3312 2092 moveto 3296 2084 moveto 3296 2084 lineto stroke 3296 2084 moveto 3280 2076 moveto 3280 2076 lineto stroke 3280 2076 moveto 3260 2068 moveto 3260 2068 lineto stroke 3260 2068 moveto 3244 2060 moveto 3244 2060 lineto stroke 3244 2060 moveto 3224 2056 moveto 3224 2056 lineto stroke 3224 2056 moveto 3204 2052 moveto 3204 2052 lineto stroke 3204 2052 moveto 3180 2048 moveto 3180 2048 lineto stroke 3180 2048 moveto 3160 2048 moveto 3160 2048 lineto stroke 3160 2048 moveto 3140 2048 moveto 3140 2048 lineto stroke 3140 2048 moveto 3120 2052 moveto 3120 2052 lineto stroke 3120 2052 moveto 3096 2052 moveto 3096 2052 lineto stroke 3096 2052 moveto 3076 2060 moveto 3076 2060 lineto stroke 3076 2060 moveto 3056 2064 moveto 3056 2064 lineto stroke 3056 2064 moveto 3040 2072 moveto 3040 2072 lineto stroke 3040 2072 moveto 3020 2080 moveto 3020 2080 lineto stroke 3020 2080 moveto 3004 2088 moveto 3004 2088 lineto stroke 3004 2088 moveto 2988 2096 moveto 2988 2096 lineto stroke 2988 2096 moveto 2976 2108 moveto 2976 2108 lineto stroke 2976 2108 moveto 2960 2120 moveto 2960 2120 lineto stroke 2960 2120 moveto 2948 2132 moveto 2948 2132 lineto stroke 2948 2132 moveto 2940 2144 moveto 2940 2144 lineto stroke 2940 2144 moveto 2928 2156 moveto 2928 2156 lineto stroke 2928 2156 moveto 2920 2168 moveto 2920 2168 lineto stroke 2920 2168 moveto 2916 2184 moveto 2916 2184 lineto stroke 2916 2184 moveto 2908 2196 moveto 2908 2196 lineto stroke 2908 2196 moveto 2908 2212 moveto 2908 2212 lineto stroke 2908 2212 moveto 2908 2228 moveto 2908 2228 lineto stroke 2908 2228 moveto 2908 2240 moveto 2908 2240 lineto stroke 2908 2240 moveto 2916 2256 moveto 2916 2256 lineto stroke 2916 2256 moveto 2924 2268 moveto 2924 2268 lineto stroke 2924 2268 moveto 2944 2276 moveto 2944 2276 lineto stroke 2944 2276 moveto 2964 2272 moveto 2964 2272 lineto stroke 2964 2272 moveto 2980 2264 moveto 2980 2264 lineto stroke 2980 2264 moveto 2996 2252 moveto 2996 2252 lineto stroke 2996 2252 moveto 3004 2240 moveto 3004 2240 lineto stroke 3004 2240 moveto 3008 2224 moveto 3008 2224 lineto stroke 3008 2224 moveto 3004 2212 moveto 3004 2212 lineto stroke 3004 2212 moveto 2988 2208 moveto 2988 2208 lineto stroke 2988 2208 moveto 2976 2220 moveto 2976 2220 lineto stroke 2976 2220 moveto 2984 2228 moveto 2984 2228 lineto stroke 2984 2228 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1712 1956 moveto 1712 1956 lineto stroke 1712 1956 moveto 1692 1948 moveto 1692 1948 lineto stroke 1692 1948 moveto 1672 1944 moveto 1672 1944 lineto stroke 1672 1944 moveto 1652 1936 moveto 1652 1936 lineto stroke 1652 1936 moveto 1632 1928 moveto 1632 1928 lineto stroke 1632 1928 moveto 1612 1920 moveto 1612 1920 lineto stroke 1612 1920 moveto 1592 1912 moveto 1592 1912 lineto stroke 1592 1912 moveto 1572 1904 moveto 1572 1904 lineto stroke 1572 1904 moveto 1552 1896 moveto 1552 1896 lineto stroke 1552 1896 moveto 1532 1892 moveto 1532 1892 lineto stroke 1532 1892 moveto 1512 1884 moveto 1512 1884 lineto stroke 1512 1884 moveto 1492 1876 moveto 1492 1876 lineto stroke 1492 1876 moveto 1472 1872 moveto 1472 1872 lineto stroke 1472 1872 moveto 1452 1864 moveto 1452 1864 lineto stroke 1452 1864 moveto 1432 1860 moveto 1432 1860 lineto stroke 1432 1860 moveto 1412 1852 moveto 1412 1852 lineto stroke 1412 1852 moveto 1392 1848 moveto 1392 1848 lineto stroke 1392 1848 moveto 1372 1840 moveto 1372 1840 lineto stroke 1372 1840 moveto 1352 1836 moveto 1352 1836 lineto stroke 1352 1836 moveto 1332 1832 moveto 1332 1832 lineto stroke 1332 1832 moveto 1316 1824 moveto 1316 1824 lineto stroke 1316 1824 moveto 1296 1820 moveto 1296 1820 lineto stroke 1296 1820 moveto 1276 1816 moveto 1276 1816 lineto stroke 1276 1816 moveto 1256 1808 moveto 1256 1808 lineto stroke 1256 1808 moveto 1236 1804 moveto 1236 1804 lineto stroke 1236 1804 moveto 1216 1796 moveto 1216 1796 lineto stroke 1216 1796 moveto 1196 1784 moveto 1196 1784 lineto stroke 1196 1784 moveto 1180 1768 moveto 1180 1768 lineto stroke 1180 1768 moveto 1180 1752 moveto 1180 1752 lineto stroke 1180 1752 moveto 1188 1744 moveto 1188 1744 lineto stroke 1188 1744 moveto 1196 1732 moveto 1196 1732 lineto stroke 1196 1732 moveto 1204 1724 moveto 1204 1724 lineto stroke 1204 1724 moveto 1216 1720 moveto 1216 1720 lineto stroke 1216 1720 moveto 1224 1712 moveto 1224 1712 lineto stroke 1224 1712 moveto 1236 1704 moveto 1236 1704 lineto stroke 1236 1704 moveto 1248 1700 moveto 1248 1700 lineto stroke 1248 1700 moveto 1260 1692 moveto 1260 1692 lineto stroke 1260 1692 moveto 1272 1688 moveto 1272 1688 lineto stroke 1272 1688 moveto 1284 1684 moveto 1284 1684 lineto stroke 1284 1684 moveto 1296 1680 moveto 1296 1680 lineto stroke 1296 1680 moveto 1312 1676 moveto 1312 1676 lineto stroke 1312 1676 moveto 1324 1672 moveto 1324 1672 lineto stroke 1324 1672 moveto 1340 1668 moveto 1340 1668 lineto stroke 1340 1668 moveto 1352 1668 moveto 1352 1668 lineto stroke 1352 1668 moveto 1368 1664 moveto 1368 1664 lineto stroke 1368 1664 moveto 1384 1664 moveto 1384 1664 lineto stroke 1384 1664 moveto 1400 1664 moveto 1400 1664 lineto stroke 1400 1664 moveto 1416 1664 moveto 1416 1664 lineto stroke 1416 1664 moveto 1432 1664 moveto 1432 1664 lineto stroke 1432 1664 moveto 1448 1664 moveto 1448 1664 lineto stroke 1448 1664 moveto 1468 1664 moveto 1468 1664 lineto stroke 1468 1664 moveto 1484 1668 moveto 1484 1668 lineto stroke 1484 1668 moveto 1504 1672 moveto 1504 1672 lineto stroke 1504 1672 moveto 1524 1680 moveto 1524 1680 lineto stroke 1524 1680 moveto 1544 1684 moveto 1544 1684 lineto stroke 1544 1684 moveto 1564 1696 moveto 1564 1696 lineto stroke 1564 1696 moveto 1584 1708 moveto 1584 1708 lineto stroke 1584 1708 moveto 1604 1720 moveto 1604 1720 lineto stroke 1604 1720 moveto 1624 1736 moveto 1624 1736 lineto stroke 1624 1736 moveto 1644 1752 moveto 1644 1752 lineto stroke 1644 1752 moveto 1660 1772 moveto 1660 1772 lineto stroke 1660 1772 moveto 1676 1788 moveto 1676 1788 lineto stroke 1676 1788 moveto 1692 1808 moveto 1692 1808 lineto stroke 1692 1808 moveto 1704 1828 moveto 1704 1828 lineto stroke 1704 1828 moveto 1716 1844 moveto 1716 1844 lineto stroke 1716 1844 moveto 1724 1864 moveto 1724 1864 lineto stroke 1724 1864 moveto 1736 1880 moveto 1736 1880 lineto stroke 1736 1880 moveto 1744 1900 moveto 1744 1900 lineto stroke 1744 1900 moveto 1752 1916 moveto 1752 1916 lineto stroke 1752 1916 moveto 1760 1936 moveto 1760 1936 lineto stroke 1760 1936 moveto 1764 1952 moveto 1764 1952 lineto stroke 1764 1952 moveto 1768 1968 moveto 1768 1968 lineto stroke 1768 1968 moveto 1772 1988 moveto 1772 1988 lineto stroke 1772 1988 moveto 1776 2004 moveto 1776 2004 lineto stroke 1776 2004 moveto 1776 2016 moveto 1776 2016 lineto stroke 1776 2016 moveto 1776 2032 moveto 1776 2032 lineto stroke 1776 2032 moveto 1760 2032 moveto 1760 2032 lineto stroke 1760 2032 moveto 1744 2012 moveto 1744 2012 lineto stroke 1744 2012 moveto 1736 1996 moveto 1736 1996 lineto stroke 1736 1996 moveto 1728 1976 moveto 1728 1976 lineto stroke 1728 1976 moveto 1720 1960 moveto 1720 1960 lineto stroke 1720 1960 moveto 1720 1944 moveto 1720 1944 lineto stroke 1720 1944 moveto 1732 1956 moveto 1732 1956 lineto stroke 1732 1956 moveto 1740 1972 moveto 1740 1972 lineto stroke 1740 1972 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2508 1228 moveto 2508 1228 lineto stroke 2508 1228 moveto 2492 1216 moveto 2492 1216 lineto stroke 2492 1216 moveto 2476 1204 moveto 2476 1204 lineto stroke 2476 1204 moveto 2464 1196 moveto 2464 1196 lineto stroke 2464 1196 moveto 2448 1184 moveto 2448 1184 lineto stroke 2448 1184 moveto 2432 1172 moveto 2432 1172 lineto stroke 2432 1172 moveto 2420 1160 moveto 2420 1160 lineto stroke 2420 1160 moveto 2404 1148 moveto 2404 1148 lineto stroke 2404 1148 moveto 2392 1136 moveto 2392 1136 lineto stroke 2392 1136 moveto 2376 1128 moveto 2376 1128 lineto stroke 2376 1128 moveto 2364 1116 moveto 2364 1116 lineto stroke 2364 1116 moveto 2352 1104 moveto 2352 1104 lineto stroke 2352 1104 moveto 2336 1092 moveto 2336 1092 lineto stroke 2336 1092 moveto 2324 1080 moveto 2324 1080 lineto stroke 2324 1080 moveto 2312 1072 moveto 2312 1072 lineto stroke 2312 1072 moveto 2304 1060 moveto 2304 1060 lineto stroke 2304 1060 moveto 2292 1048 moveto 2292 1048 lineto stroke 2292 1048 moveto 2284 1040 moveto 2284 1040 lineto stroke 2284 1040 moveto 2272 1028 moveto 2272 1028 lineto stroke 2272 1028 moveto 2264 1016 moveto 2264 1016 lineto stroke 2264 1016 moveto 2260 1008 moveto 2260 1008 lineto stroke 2260 1008 moveto 2252 996 moveto 2252 996 lineto stroke 2252 996 moveto 2248 988 moveto 2248 988 lineto stroke 2248 988 moveto 2244 980 moveto 2244 980 lineto stroke 2244 980 moveto 2244 972 moveto 2244 972 lineto stroke 2244 972 moveto 2244 964 moveto 2244 964 lineto stroke 2244 964 moveto 2248 956 moveto 2248 956 lineto stroke 2248 956 moveto 2252 948 moveto 2252 948 lineto stroke 2252 948 moveto 2260 940 moveto 2260 940 lineto stroke 2260 940 moveto 2268 936 moveto 2268 936 lineto stroke 2268 936 moveto 2280 932 moveto 2280 932 lineto stroke 2280 932 moveto 2296 928 moveto 2296 928 lineto stroke 2296 928 moveto 2320 928 moveto 2320 928 lineto stroke 2320 928 moveto 2344 932 moveto 2344 932 lineto stroke 2344 932 moveto 2372 936 moveto 2372 936 lineto stroke 2372 936 moveto 2400 944 moveto 2400 944 lineto stroke 2400 944 moveto 2428 956 moveto 2428 956 lineto stroke 2428 956 moveto 2452 968 moveto 2452 968 lineto stroke 2452 968 moveto 2472 980 moveto 2472 980 lineto stroke 2472 980 moveto 2488 992 moveto 2488 992 lineto stroke 2488 992 moveto 2504 1004 moveto 2504 1004 lineto stroke 2504 1004 moveto 2512 1012 moveto 2512 1012 lineto stroke 2512 1012 moveto 2524 1024 moveto 2524 1024 lineto stroke 2524 1024 moveto 2532 1032 moveto 2532 1032 lineto stroke 2532 1032 moveto 2536 1044 moveto 2536 1044 lineto stroke 2536 1044 moveto 2540 1052 moveto 2540 1052 lineto stroke 2540 1052 moveto 2544 1064 moveto 2544 1064 lineto stroke 2544 1064 moveto 2548 1072 moveto 2548 1072 lineto stroke 2548 1072 moveto 2548 1080 moveto 2548 1080 lineto stroke 2548 1080 moveto 2552 1088 moveto 2552 1088 lineto stroke 2552 1088 moveto 2552 1096 moveto 2552 1096 lineto stroke 2552 1096 moveto 2552 1104 moveto 2552 1104 lineto stroke 2552 1104 moveto 2548 1112 moveto 2548 1112 lineto stroke 2548 1112 moveto 2548 1120 moveto 2548 1120 lineto stroke 2548 1120 moveto 2544 1128 moveto 2544 1128 lineto stroke 2544 1128 moveto 2544 1136 moveto 2544 1136 lineto stroke 2544 1136 moveto 2540 1144 moveto 2540 1144 lineto stroke 2540 1144 moveto 2536 1152 moveto 2536 1152 lineto stroke 2536 1152 moveto 2532 1160 moveto 2532 1160 lineto stroke 2532 1160 moveto 2528 1168 moveto 2528 1168 lineto stroke 2528 1168 moveto 2524 1172 moveto 2524 1172 lineto stroke 2524 1172 moveto 2520 1180 moveto 2520 1180 lineto stroke 2520 1180 moveto 2516 1188 moveto 2516 1188 lineto stroke 2516 1188 moveto 2512 1196 moveto 2512 1196 lineto stroke 2512 1196 moveto 2504 1200 moveto 2504 1200 lineto stroke 2504 1200 moveto 2500 1208 moveto 2500 1208 lineto stroke 2500 1208 moveto 2496 1216 moveto 2496 1216 lineto stroke 2496 1216 moveto 2492 1220 moveto 2492 1220 lineto stroke 2492 1220 moveto 2488 1228 moveto 2488 1228 lineto stroke 2488 1228 moveto 2484 1236 moveto 2484 1236 lineto stroke 2484 1236 moveto 2480 1244 moveto 2480 1244 lineto stroke 2480 1244 moveto 2480 1252 moveto 2480 1252 lineto stroke 2480 1252 moveto 2484 1260 moveto 2484 1260 lineto stroke 2484 1260 moveto 2504 1264 moveto 2504 1264 lineto stroke 2504 1264 moveto 2516 1260 moveto 2516 1260 lineto stroke 2516 1260 moveto 2524 1252 moveto 2524 1252 lineto stroke 2524 1252 moveto 2532 1248 moveto 2532 1248 lineto stroke 2532 1248 moveto 2536 1240 moveto 2536 1240 lineto stroke 2536 1240 moveto 2528 1232 moveto 2528 1232 lineto stroke 2528 1232 moveto 2520 1236 moveto 2520 1236 lineto stroke 2520 1236 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2520 1964 moveto 2520 1964 lineto stroke 2520 1964 moveto 2520 1964 moveto 2516 1960 lineto stroke 2516 1960 moveto 2508 1956 lineto stroke 2508 1956 moveto 2496 1952 lineto stroke 2496 1952 moveto 2480 1944 lineto stroke 2480 1944 moveto 2456 1932 lineto stroke 2456 1932 moveto 2416 1908 lineto stroke 2416 1908 moveto 2372 1888 lineto stroke 2372 1888 moveto 2312 1856 lineto stroke 2312 1856 moveto 2232 1820 lineto stroke 2232 1820 moveto 2140 1780 lineto stroke 2140 1780 moveto 2036 1748 lineto stroke 2036 1748 moveto 1944 1728 lineto stroke 1944 1728 moveto 1876 1732 lineto stroke 1876 1732 moveto 1836 1744 lineto stroke 1836 1744 moveto 1832 1764 lineto stroke 1832 1764 moveto 1880 1772 lineto stroke 1880 1772 moveto 1964 1764 lineto stroke 1964 1764 moveto 2072 1740 lineto stroke 2072 1740 moveto 2244 1684 lineto stroke 2244 1684 moveto 2412 1616 lineto stroke 2412 1616 moveto 2552 1548 lineto stroke 2552 1548 moveto 2652 1488 lineto stroke 2652 1488 moveto 2704 1448 lineto stroke 2704 1448 moveto 2724 1424 lineto stroke 2724 1424 moveto 2708 1412 lineto stroke 2708 1412 moveto 2668 1424 lineto stroke 2668 1424 moveto 2612 1448 lineto stroke 2612 1448 moveto 2548 1488 lineto stroke 2548 1488 moveto 2476 1544 lineto stroke 2476 1544 moveto 2400 1620 lineto stroke 2400 1620 moveto 2340 1704 lineto stroke 2340 1704 moveto 2296 1800 lineto stroke 2296 1800 moveto 2276 1908 lineto stroke 2276 1908 moveto 2284 2016 lineto stroke 2284 2016 moveto 2316 2116 lineto stroke 2316 2116 moveto 2368 2192 lineto stroke 2368 2192 moveto 2428 2240 lineto stroke 2428 2240 moveto 2492 2256 lineto stroke 2492 2256 moveto 2568 2236 lineto stroke 2568 2236 moveto 2632 2184 lineto stroke 2632 2184 moveto 2680 2108 lineto stroke 2680 2108 moveto 2704 2016 lineto stroke 2704 2016 moveto 2696 1920 lineto stroke 2696 1920 moveto 2664 1836 lineto stroke 2664 1836 moveto 2612 1776 lineto stroke 2612 1776 moveto 2552 1748 lineto stroke 2552 1748 moveto 2488 1760 lineto stroke 2488 1760 moveto 2432 1800 lineto stroke 2432 1800 moveto 2396 1864 lineto stroke 2396 1864 moveto 2376 1940 lineto stroke 2376 1940 moveto 2388 2024 lineto stroke 2388 2024 moveto 2424 2092 lineto stroke 2424 2092 moveto 2476 2132 lineto stroke 2476 2132 moveto 2536 2132 lineto stroke 2536 2132 moveto 2592 2100 lineto stroke 2592 2100 moveto 2628 2036 lineto stroke 2628 2036 moveto 2636 1956 lineto stroke 2636 1956 moveto 2616 1884 lineto stroke 2616 1884 moveto 2572 1836 lineto stroke 2572 1836 moveto 2516 1828 lineto stroke 2516 1828 moveto 2464 1856 lineto stroke 2464 1856 moveto 2432 1908 lineto stroke 2432 1908 moveto 2428 1968 lineto stroke 2428 1968 moveto 2440 2024 lineto stroke 2440 2024 moveto 2472 2064 lineto stroke 2472 2064 moveto 2516 2080 lineto stroke 2516 2080 moveto 2560 2064 lineto stroke 2560 2064 moveto 2592 2020 lineto stroke 2592 2020 moveto 2600 1964 lineto stroke 2600 1964 moveto 2584 1912 lineto stroke 2584 1912 moveto 2552 1876 lineto stroke 2552 1876 moveto 2508 1872 lineto stroke 2508 1872 moveto 2476 1900 lineto stroke 2476 1900 moveto 2456 1944 lineto stroke 2456 1944 moveto 2460 1988 lineto stroke 2460 1988 moveto 2480 2024 lineto stroke 2480 2024 moveto 2508 2044 lineto stroke 2508 2044 moveto 2540 2040 lineto stroke 2540 2040 moveto 2568 2012 lineto stroke 2568 2012 moveto 2576 1972 lineto stroke 2576 1972 moveto 2568 1932 lineto stroke 2568 1932 moveto 2548 1908 lineto stroke 2548 1908 moveto 2516 1900 lineto stroke 2516 1900 moveto 2488 1916 lineto stroke 2488 1916 moveto 2476 1952 lineto stroke 2476 1952 moveto 2480 1988 lineto stroke 2480 1988 moveto 2500 2016 lineto stroke 2500 2016 moveto 2528 2020 lineto stroke 2528 2020 moveto 2552 2004 lineto stroke 2552 2004 moveto 2560 1972 lineto stroke 2560 1972 moveto 2552 1936 lineto stroke 2552 1936 moveto 2528 1920 lineto stroke 2528 1920 moveto 2504 1928 lineto stroke 2504 1928 moveto 2488 1952 lineto stroke 2488 1952 moveto 2500 1992 lineto stroke 2500 1992 moveto 2524 2004 lineto stroke 2524 2004 moveto 2548 1984 lineto stroke 2548 1984 moveto 2544 1948 lineto stroke 2544 1948 moveto 2516 1936 lineto stroke 2516 1936 moveto 2500 1960 lineto stroke 2500 1960 moveto 2512 1988 lineto stroke 2512 1988 moveto 2536 1984 lineto stroke 2536 1984 moveto 2532 1948 lineto stroke 2532 1948 moveto 2512 1948 lineto stroke 2512 1948 moveto 2508 1976 lineto stroke 2508 1976 moveto 2528 1984 lineto stroke 2528 1984 moveto 2532 1956 lineto stroke 2532 1956 moveto 2516 1952 lineto stroke 2516 1952 moveto 2512 1968 lineto stroke 2512 1968 moveto 2524 1980 lineto stroke 2524 1980 moveto 2532 1960 lineto stroke 2532 1960 moveto 2520 1956 lineto stroke 2520 1956 moveto 2512 1968 lineto stroke 2512 1968 moveto 2524 1976 lineto stroke 2524 1976 moveto 2528 1960 lineto stroke 2528 1960 moveto 2520 1956 lineto stroke 2520 1956 moveto 2516 1968 lineto stroke 2516 1968 moveto 2524 1972 lineto stroke 2524 1972 moveto 2524 1960 lineto stroke 2524 1960 moveto 2520 1960 lineto stroke 2520 1960 moveto 2520 1968 lineto stroke 2520 1968 moveto 2524 1968 lineto stroke 2524 1968 moveto 2524 1960 lineto stroke 2524 1960 moveto 2520 1964 lineto stroke 2520 1964 moveto 2520 1968 lineto stroke 2520 1968 moveto 2524 1968 lineto stroke 2524 1968 moveto 2984 2224 moveto 2984 2224 lineto stroke 2984 2224 moveto 2992 2236 moveto 2992 2236 lineto stroke 2992 2236 moveto 2996 2252 moveto 2996 2252 lineto stroke 2996 2252 moveto 3004 2264 moveto 3004 2264 lineto stroke 3004 2264 moveto 3008 2280 moveto 3008 2280 lineto stroke 3008 2280 moveto 3012 2292 moveto 3012 2292 lineto stroke 3012 2292 moveto 3020 2308 moveto 3020 2308 lineto stroke 3020 2308 moveto 3028 2320 moveto 3028 2320 lineto stroke 3028 2320 moveto 3032 2336 moveto 3032 2336 lineto stroke 3032 2336 moveto 3040 2348 moveto 3040 2348 lineto stroke 3040 2348 moveto 3048 2364 moveto 3048 2364 lineto stroke 3048 2364 moveto 3056 2376 moveto 3056 2376 lineto stroke 3056 2376 moveto 3064 2388 moveto 3064 2388 lineto stroke 3064 2388 moveto 3072 2404 moveto 3072 2404 lineto stroke 3072 2404 moveto 3084 2416 moveto 3084 2416 lineto stroke 3084 2416 moveto 3092 2428 moveto 3092 2428 lineto stroke 3092 2428 moveto 3104 2440 moveto 3104 2440 lineto stroke 3104 2440 moveto 3116 2452 moveto 3116 2452 lineto stroke 3116 2452 moveto 3124 2464 moveto 3124 2464 lineto stroke 3124 2464 moveto 3140 2476 moveto 3140 2476 lineto stroke 3140 2476 moveto 3152 2488 moveto 3152 2488 lineto stroke 3152 2488 moveto 3168 2500 moveto 3168 2500 lineto stroke 3168 2500 moveto 3180 2512 moveto 3180 2512 lineto stroke 3180 2512 moveto 3196 2520 moveto 3196 2520 lineto stroke 3196 2520 moveto 3208 2532 moveto 3208 2532 lineto stroke 3208 2532 moveto 3228 2540 moveto 3228 2540 lineto stroke 3228 2540 moveto 3244 2548 moveto 3244 2548 lineto stroke 3244 2548 moveto 3264 2556 moveto 3264 2556 lineto stroke 3264 2556 moveto 3280 2564 moveto 3280 2564 lineto stroke 3280 2564 moveto 3300 2568 moveto 3300 2568 lineto stroke 3300 2568 moveto 3316 2576 moveto 3316 2576 lineto stroke 3316 2576 moveto 3340 2576 moveto 3340 2576 lineto stroke 3340 2576 moveto 3360 2580 moveto 3360 2580 lineto stroke 3360 2580 moveto 3380 2580 moveto 3380 2580 lineto stroke 3380 2580 moveto 3400 2584 moveto 3400 2584 lineto stroke 3400 2584 moveto 3424 2584 moveto 3424 2584 lineto stroke 3424 2584 moveto 3444 2580 moveto 3444 2580 lineto stroke 3444 2580 moveto 3464 2576 moveto 3464 2576 lineto stroke 3464 2576 moveto 3484 2572 moveto 3484 2572 lineto stroke 3484 2572 moveto 3504 2568 moveto 3504 2568 lineto stroke 3504 2568 moveto 3524 2564 moveto 3524 2564 lineto stroke 3524 2564 moveto 3544 2560 moveto 3544 2560 lineto stroke 3544 2560 moveto 3560 2548 moveto 3560 2548 lineto stroke 3560 2548 moveto 3576 2540 moveto 3576 2540 lineto stroke 3576 2540 moveto 3592 2532 moveto 3592 2532 lineto stroke 3592 2532 moveto 3608 2520 moveto 3608 2520 lineto stroke 3608 2520 moveto 3624 2512 moveto 3624 2512 lineto stroke 3624 2512 moveto 3640 2504 moveto 3640 2504 lineto stroke 3640 2504 moveto 3656 2492 moveto 3656 2492 lineto stroke 3656 2492 moveto 3672 2484 moveto 3672 2484 lineto stroke 3672 2484 moveto 3680 2472 moveto 3680 2472 lineto stroke 3680 2472 moveto 3692 2456 moveto 3692 2456 lineto stroke 3692 2456 moveto 3704 2444 moveto 3704 2444 lineto stroke 3704 2444 moveto 3712 2432 moveto 3712 2432 lineto stroke 3712 2432 moveto 3724 2420 moveto 3724 2420 lineto stroke 3724 2420 moveto 3732 2408 moveto 3732 2408 lineto stroke 3732 2408 moveto 3744 2396 moveto 3744 2396 lineto stroke 3744 2396 moveto 3756 2380 moveto 3756 2380 lineto stroke 3756 2380 moveto 3764 2368 moveto 3764 2368 lineto stroke 3764 2368 moveto 3768 2356 moveto 3768 2356 lineto stroke 3768 2356 moveto 3772 2340 moveto 3772 2340 lineto stroke 3772 2340 moveto 3776 2324 moveto 3776 2324 lineto stroke 3776 2324 moveto 3780 2312 moveto 3780 2312 lineto stroke 3780 2312 moveto 3784 2296 moveto 3784 2296 lineto stroke 3784 2296 moveto 3788 2284 moveto 3788 2284 lineto stroke 3788 2284 moveto 3792 2268 moveto 3792 2268 lineto stroke 3792 2268 moveto 3796 2256 moveto 3796 2256 lineto stroke 3796 2256 moveto 3796 2224 moveto 3796 2224 lineto stroke 3796 2224 moveto 3796 2212 moveto 3796 2212 lineto stroke 3796 2212 moveto 3792 2196 moveto 3792 2196 lineto stroke 3792 2196 moveto 3792 2180 moveto 3792 2180 lineto stroke 3792 2180 moveto 3788 2168 moveto 3788 2168 lineto stroke 3788 2168 moveto 3784 2152 moveto 3784 2152 lineto stroke 3784 2152 moveto 3784 2140 moveto 3784 2140 lineto stroke 3784 2140 moveto 3780 2124 moveto 3780 2124 lineto stroke 3780 2124 moveto 3776 2108 moveto 3776 2108 lineto stroke 3776 2108 moveto 3768 2096 moveto 3768 2096 lineto stroke 3768 2096 moveto 3760 2084 moveto 3760 2084 lineto stroke 3760 2084 moveto 3752 2068 moveto 3752 2068 lineto stroke 3752 2068 moveto 3744 2056 moveto 3744 2056 lineto stroke 3744 2056 moveto 3736 2044 moveto 3736 2044 lineto stroke 3736 2044 moveto 3728 2028 moveto 3728 2028 lineto stroke 3728 2028 moveto 3720 2016 moveto 3720 2016 lineto stroke 3720 2016 moveto 3708 2004 moveto 3708 2004 lineto stroke 3708 2004 moveto 3696 1992 moveto 3696 1992 lineto stroke 3696 1992 moveto 3684 1980 moveto 3684 1980 lineto stroke 3684 1980 moveto 3672 1968 moveto 3672 1968 lineto stroke 3672 1968 moveto 3660 1956 moveto 3660 1956 lineto stroke 3660 1956 moveto 3644 1944 moveto 3644 1944 lineto stroke 3644 1944 moveto 3632 1932 moveto 3632 1932 lineto stroke 3632 1932 moveto 3616 1924 moveto 3616 1924 lineto stroke 3616 1924 moveto 3600 1912 moveto 3600 1912 lineto stroke 3600 1912 moveto 3584 1904 moveto 3584 1904 lineto stroke 3584 1904 moveto 3568 1896 moveto 3568 1896 lineto stroke 3568 1896 moveto 3552 1884 moveto 3552 1884 lineto stroke 3552 1884 moveto 3536 1876 moveto 3536 1876 lineto stroke 3536 1876 moveto 3520 1868 moveto 3520 1868 lineto stroke 3520 1868 moveto 3504 1860 moveto 3504 1860 lineto stroke 3504 1860 moveto 3484 1852 moveto 3484 1852 lineto stroke 3484 1852 moveto 3464 1848 moveto 3464 1848 lineto stroke 3464 1848 moveto 3444 1840 moveto 3444 1840 lineto stroke 3444 1840 moveto 3424 1836 moveto 3424 1836 lineto stroke 3424 1836 moveto 3408 1828 moveto 3408 1828 lineto stroke 3408 1828 moveto 3388 1824 moveto 3388 1824 lineto stroke 3388 1824 moveto 3368 1816 moveto 3368 1816 lineto stroke 3368 1816 moveto 3348 1816 moveto 3348 1816 lineto stroke 3348 1816 moveto 3324 1812 moveto 3324 1812 lineto stroke 3324 1812 moveto 3304 1808 moveto 3304 1808 lineto stroke 3304 1808 moveto 3284 1808 moveto 3284 1808 lineto stroke 3284 1808 moveto 3264 1804 moveto 3264 1804 lineto stroke 3264 1804 moveto 3244 1804 moveto 3244 1804 lineto stroke 3244 1804 moveto 3220 1804 moveto 3220 1804 lineto stroke 3220 1804 moveto 3200 1804 moveto 3200 1804 lineto stroke 3200 1804 moveto 3180 1804 moveto 3180 1804 lineto stroke 3180 1804 moveto 3160 1808 moveto 3160 1808 lineto stroke 3160 1808 moveto 3136 1808 moveto 3136 1808 lineto stroke 3136 1808 moveto 3116 1812 moveto 3116 1812 lineto stroke 3116 1812 moveto 3096 1816 moveto 3096 1816 lineto stroke 3096 1816 moveto 3076 1820 moveto 3076 1820 lineto stroke 3076 1820 moveto 3056 1824 moveto 3056 1824 lineto stroke 3056 1824 moveto 3036 1832 moveto 3036 1832 lineto stroke 3036 1832 moveto 3016 1836 moveto 3016 1836 lineto stroke 3016 1836 moveto 2996 1840 moveto 2996 1840 lineto stroke 2996 1840 moveto 2980 1848 moveto 2980 1848 lineto stroke 2980 1848 moveto 2964 1860 moveto 2964 1860 lineto stroke 2964 1860 moveto 2948 1868 moveto 2948 1868 lineto stroke 2948 1868 moveto 2932 1876 moveto 2932 1876 lineto stroke 2932 1876 moveto 2912 1884 moveto 2912 1884 lineto stroke 2912 1884 moveto 2896 1892 moveto 2896 1892 lineto stroke 2896 1892 moveto 2884 1904 moveto 2884 1904 lineto stroke 2884 1904 moveto 2868 1916 moveto 2868 1916 lineto stroke 2868 1916 moveto 2856 1928 moveto 2856 1928 lineto stroke 2856 1928 moveto 2844 1940 moveto 2844 1940 lineto stroke 2844 1940 moveto 2832 1952 moveto 2832 1952 lineto stroke 2832 1952 moveto 2816 1960 moveto 2816 1960 lineto stroke 2816 1960 moveto 2808 1976 moveto 2808 1976 lineto stroke 2808 1976 moveto 2796 1988 moveto 2796 1988 lineto stroke 2796 1988 moveto 2788 2000 moveto 2788 2000 lineto stroke 2788 2000 moveto 2780 2012 moveto 2780 2012 lineto stroke 2780 2012 moveto 2772 2028 moveto 2772 2028 lineto stroke 2772 2028 moveto 2760 2040 moveto 2760 2040 lineto stroke 2760 2040 moveto 2752 2052 moveto 2752 2052 lineto stroke 2752 2052 moveto 2748 2068 moveto 2748 2068 lineto stroke 2748 2068 moveto 2744 2080 moveto 2744 2080 lineto stroke 2744 2080 moveto 2740 2096 moveto 2740 2096 lineto stroke 2740 2096 moveto 2732 2112 moveto 2732 2112 lineto stroke 2732 2112 moveto 2728 2124 moveto 2728 2124 lineto stroke 2728 2124 moveto 2724 2140 moveto 2724 2140 lineto stroke 2724 2140 moveto 2720 2152 moveto 2720 2152 lineto stroke 2720 2152 moveto 2720 2168 moveto 2720 2168 lineto stroke 2720 2168 moveto 2716 2184 moveto 2716 2184 lineto stroke 2716 2184 moveto 2716 2196 moveto 2716 2196 lineto stroke 2716 2196 moveto 2716 2212 moveto 2716 2212 lineto stroke 2716 2212 moveto 2716 2224 moveto 2716 2224 lineto stroke 2716 2224 moveto 2716 2240 moveto 2716 2240 lineto stroke 2716 2240 moveto 2716 2256 moveto 2716 2256 lineto stroke 2716 2256 moveto 2716 2268 moveto 2716 2268 lineto stroke 2716 2268 moveto 2720 2284 moveto 2720 2284 lineto stroke 2720 2284 moveto 2724 2300 moveto 2724 2300 lineto stroke 2724 2300 moveto 2728 2312 moveto 2728 2312 lineto stroke 2728 2312 moveto 2732 2328 moveto 2732 2328 lineto stroke 2732 2328 moveto 2736 2340 moveto 2736 2340 lineto stroke 2736 2340 moveto 2740 2356 moveto 2740 2356 lineto stroke 2740 2356 moveto 2748 2368 moveto 2748 2368 lineto stroke 2748 2368 moveto 2756 2384 moveto 2756 2384 lineto stroke 2756 2384 moveto 2764 2396 moveto 2764 2396 lineto stroke 2764 2396 moveto 2772 2408 moveto 2772 2408 lineto stroke 2772 2408 moveto 2780 2424 moveto 2780 2424 lineto stroke 2780 2424 moveto 2792 2432 moveto 2792 2432 lineto stroke 2792 2432 moveto 2808 2444 moveto 2808 2444 lineto stroke 2808 2444 moveto 2820 2456 moveto 2820 2456 lineto stroke 2820 2456 moveto 2836 2468 moveto 2836 2468 lineto stroke 2836 2468 moveto 2852 2476 moveto 2852 2476 lineto stroke 2852 2476 moveto 2872 2480 moveto 2872 2480 lineto stroke 2872 2480 moveto 2892 2484 moveto 2892 2484 lineto stroke 2892 2484 moveto 2912 2492 moveto 2912 2492 lineto stroke 2912 2492 moveto 2932 2488 moveto 2932 2488 lineto stroke 2932 2488 moveto 2952 2488 moveto 2952 2488 lineto stroke 2952 2488 moveto 2972 2484 moveto 2972 2484 lineto stroke 2972 2484 moveto 2992 2480 moveto 2992 2480 lineto stroke 2992 2480 moveto 3012 2476 moveto 3012 2476 lineto stroke 3012 2476 moveto 3028 2464 moveto 3028 2464 lineto stroke 3028 2464 moveto 3044 2456 moveto 3044 2456 lineto stroke 3044 2456 moveto 3060 2448 moveto 3060 2448 lineto stroke 3060 2448 moveto 3076 2440 moveto 3076 2440 lineto stroke 3076 2440 moveto 3088 2428 moveto 3088 2428 lineto stroke 3088 2428 moveto 3100 2412 moveto 3100 2412 lineto stroke 3100 2412 moveto 3112 2400 moveto 3112 2400 lineto stroke 3112 2400 moveto 3120 2388 moveto 3120 2388 lineto stroke 3120 2388 moveto 3132 2376 moveto 3132 2376 lineto stroke 3132 2376 moveto 3144 2364 moveto 3144 2364 lineto stroke 3144 2364 moveto 3148 2348 moveto 3148 2348 lineto stroke 3148 2348 moveto 3152 2336 moveto 3152 2336 lineto stroke 3152 2336 moveto 3160 2320 moveto 3160 2320 lineto stroke 3160 2320 moveto 3164 2308 moveto 3164 2308 lineto stroke 3164 2308 moveto 3168 2292 moveto 3168 2292 lineto stroke 3168 2292 moveto 3176 2280 moveto 3176 2280 lineto stroke 3176 2280 moveto 3176 2264 moveto 3176 2264 lineto stroke 3176 2264 moveto 3176 2248 moveto 3176 2248 lineto stroke 3176 2248 moveto 3176 2236 moveto 3176 2236 lineto stroke 3176 2236 moveto 3176 2220 moveto 3176 2220 lineto stroke 3176 2220 moveto 3176 2208 moveto 3176 2208 lineto stroke 3176 2208 moveto 3180 2192 moveto 3180 2192 lineto stroke 3180 2192 moveto 3176 2176 moveto 3176 2176 lineto stroke 3176 2176 moveto 3168 2164 moveto 3168 2164 lineto stroke 3168 2164 moveto 3164 2148 moveto 3164 2148 lineto stroke 3164 2148 moveto 3160 2136 moveto 3160 2136 lineto stroke 3160 2136 moveto 3156 2120 moveto 3156 2120 lineto stroke 3156 2120 moveto 3152 2108 moveto 3152 2108 lineto stroke 3152 2108 moveto 3140 2092 moveto 3140 2092 lineto stroke 3140 2092 moveto 3128 2080 moveto 3128 2080 lineto stroke 3128 2080 moveto 3120 2068 moveto 3120 2068 lineto stroke 3120 2068 moveto 3108 2056 moveto 3108 2056 lineto stroke 3108 2056 moveto 3092 2044 moveto 3092 2044 lineto stroke 3092 2044 moveto 3076 2036 moveto 3076 2036 lineto stroke 3076 2036 moveto 3060 2028 moveto 3060 2028 lineto stroke 3060 2028 moveto 3040 2024 moveto 3040 2024 lineto stroke 3040 2024 moveto 3020 2024 moveto 3020 2024 lineto stroke 3020 2024 moveto 3000 2024 moveto 3000 2024 lineto stroke 3000 2024 moveto 2976 2024 moveto 2976 2024 lineto stroke 2976 2024 moveto 2960 2032 moveto 2960 2032 lineto stroke 2960 2032 moveto 2944 2040 moveto 2944 2040 lineto stroke 2944 2040 moveto 2924 2048 moveto 2924 2048 lineto stroke 2924 2048 moveto 2908 2056 moveto 2908 2056 lineto stroke 2908 2056 moveto 2896 2068 moveto 2896 2068 lineto stroke 2896 2068 moveto 2884 2080 moveto 2884 2080 lineto stroke 2884 2080 moveto 2876 2096 moveto 2876 2096 lineto stroke 2876 2096 moveto 2864 2108 moveto 2864 2108 lineto stroke 2864 2108 moveto 2856 2120 moveto 2856 2120 lineto stroke 2856 2120 moveto 2852 2136 moveto 2852 2136 lineto stroke 2852 2136 moveto 2844 2148 moveto 2844 2148 lineto stroke 2844 2148 moveto 2840 2164 moveto 2840 2164 lineto stroke 2840 2164 moveto 2836 2176 moveto 2836 2176 lineto stroke 2836 2176 moveto 2832 2192 moveto 2832 2192 lineto stroke 2832 2192 moveto 2832 2204 moveto 2832 2204 lineto stroke 2832 2204 moveto 2832 2220 moveto 2832 2220 lineto stroke 2832 2220 moveto 2832 2236 moveto 2832 2236 lineto stroke 2832 2236 moveto 2832 2248 moveto 2832 2248 lineto stroke 2832 2248 moveto 2836 2264 moveto 2836 2264 lineto stroke 2836 2264 moveto 2836 2280 moveto 2836 2280 lineto stroke 2836 2280 moveto 2844 2292 moveto 2844 2292 lineto stroke 2844 2292 moveto 2852 2304 moveto 2852 2304 lineto stroke 2852 2304 moveto 2856 2320 moveto 2856 2320 lineto stroke 2856 2320 moveto 2864 2332 moveto 2864 2332 lineto stroke 2864 2332 moveto 2876 2344 moveto 2876 2344 lineto stroke 2876 2344 moveto 2888 2356 moveto 2888 2356 lineto stroke 2888 2356 moveto 2904 2368 moveto 2904 2368 lineto stroke 2904 2368 moveto 2920 2376 moveto 2920 2376 lineto stroke 2920 2376 moveto 2940 2380 moveto 2940 2380 lineto stroke 2940 2380 moveto 2960 2384 moveto 2960 2384 lineto stroke 2960 2384 moveto 2980 2384 moveto 2980 2384 lineto stroke 2980 2384 moveto 3000 2376 moveto 3000 2376 lineto stroke 3000 2376 moveto 3016 2368 moveto 3016 2368 lineto stroke 3016 2368 moveto 3032 2360 moveto 3032 2360 lineto stroke 3032 2360 moveto 3048 2352 moveto 3048 2352 lineto stroke 3048 2352 moveto 3060 2340 moveto 3060 2340 lineto stroke 3060 2340 moveto 3068 2324 moveto 3068 2324 lineto stroke 3068 2324 moveto 3080 2312 moveto 3080 2312 lineto stroke 3080 2312 moveto 3088 2300 moveto 3088 2300 lineto stroke 3088 2300 moveto 3092 2284 moveto 3092 2284 lineto stroke 3092 2284 moveto 3096 2272 moveto 3096 2272 lineto stroke 3096 2272 moveto 3100 2256 moveto 3100 2256 lineto stroke 3100 2256 moveto 3104 2244 moveto 3104 2244 lineto stroke 3104 2244 moveto 3104 2228 moveto 3104 2228 lineto stroke 3104 2228 moveto 3104 2212 moveto 3104 2212 lineto stroke 3104 2212 moveto 3100 2200 moveto 3100 2200 lineto stroke 3100 2200 moveto 3100 2184 moveto 3100 2184 lineto stroke 3100 2184 moveto 3096 2172 moveto 3096 2172 lineto stroke 3096 2172 moveto 3092 2156 moveto 3092 2156 lineto stroke 3092 2156 moveto 3084 2144 moveto 3084 2144 lineto stroke 3084 2144 moveto 3072 2132 moveto 3072 2132 lineto stroke 3072 2132 moveto 3060 2120 moveto 3060 2120 lineto stroke 3060 2120 moveto 3048 2108 moveto 3048 2108 lineto stroke 3048 2108 moveto 3028 2100 moveto 3028 2100 lineto stroke 3028 2100 moveto 3008 2096 moveto 3008 2096 lineto stroke 3008 2096 moveto 2988 2092 moveto 2988 2092 lineto stroke 2988 2092 moveto 2972 2100 moveto 2972 2100 lineto stroke 2972 2100 moveto 2952 2108 moveto 2952 2108 lineto stroke 2952 2108 moveto 2936 2116 moveto 2936 2116 lineto stroke 2936 2116 moveto 2924 2128 moveto 2924 2128 lineto stroke 2924 2128 moveto 2912 2140 moveto 2912 2140 lineto stroke 2912 2140 moveto 2904 2152 moveto 2904 2152 lineto stroke 2904 2152 moveto 2892 2164 moveto 2892 2164 lineto stroke 2892 2164 moveto 2892 2180 moveto 2892 2180 lineto stroke 2892 2180 moveto 2888 2192 moveto 2888 2192 lineto stroke 2888 2192 moveto 2884 2208 moveto 2884 2208 lineto stroke 2884 2208 moveto 2880 2224 moveto 2880 2224 lineto stroke 2880 2224 moveto 2884 2236 moveto 2884 2236 lineto stroke 2884 2236 moveto 2888 2252 moveto 2888 2252 lineto stroke 2888 2252 moveto 2888 2268 moveto 2888 2268 lineto stroke 2888 2268 moveto 2896 2280 moveto 2896 2280 lineto stroke 2896 2280 moveto 2904 2292 moveto 2904 2292 lineto stroke 2904 2292 moveto 2916 2304 moveto 2916 2304 lineto stroke 2916 2304 moveto 2928 2316 moveto 2928 2316 lineto stroke 2928 2316 moveto 2944 2324 moveto 2944 2324 lineto stroke 2944 2324 moveto 2964 2332 moveto 2964 2332 lineto stroke 2964 2332 moveto 2984 2328 moveto 2984 2328 lineto stroke 2984 2328 moveto 3004 2324 moveto 3004 2324 lineto stroke 3004 2324 moveto 3020 2316 moveto 3020 2316 lineto stroke 3020 2316 moveto 3032 2304 moveto 3032 2304 lineto stroke 3032 2304 moveto 3044 2292 moveto 3044 2292 lineto stroke 3044 2292 moveto 3052 2280 moveto 3052 2280 lineto stroke 3052 2280 moveto 3056 2264 moveto 3056 2264 lineto stroke 3056 2264 moveto 3060 2248 moveto 3060 2248 lineto stroke 3060 2248 moveto 3064 2236 moveto 3064 2236 lineto stroke 3064 2236 moveto 3068 2220 moveto 3068 2220 lineto stroke 3068 2220 moveto 3064 2208 moveto 3064 2208 lineto stroke 3064 2208 moveto 3060 2192 moveto 3060 2192 lineto stroke 3060 2192 moveto 3056 2176 moveto 3056 2176 lineto stroke 3056 2176 moveto 3048 2164 moveto 3048 2164 lineto stroke 3048 2164 moveto 3032 2152 moveto 3032 2152 lineto stroke 3032 2152 moveto 3020 2140 moveto 3020 2140 lineto stroke 3020 2140 moveto 3000 2136 moveto 3000 2136 lineto stroke 3000 2136 moveto 2980 2136 moveto 2980 2136 lineto stroke 2980 2136 moveto 2964 2144 moveto 2964 2144 lineto stroke 2964 2144 moveto 2948 2152 moveto 2948 2152 lineto stroke 2948 2152 moveto 2936 2164 moveto 2936 2164 lineto stroke 2936 2164 moveto 2928 2176 moveto 2928 2176 lineto stroke 2928 2176 moveto 2920 2192 moveto 2920 2192 lineto stroke 2920 2192 moveto 2916 2204 moveto 2916 2204 lineto stroke 2916 2204 moveto 2916 2220 moveto 2916 2220 lineto stroke 2916 2220 moveto 2916 2232 moveto 2916 2232 lineto stroke 2916 2232 moveto 2916 2248 moveto 2916 2248 lineto stroke 2916 2248 moveto 2924 2264 moveto 2924 2264 lineto stroke 2924 2264 moveto 2932 2276 moveto 2932 2276 lineto stroke 2932 2276 moveto 2944 2288 moveto 2944 2288 lineto stroke 2944 2288 moveto 2960 2296 moveto 2960 2296 lineto stroke 2960 2296 moveto 2980 2296 moveto 2980 2296 lineto stroke 2980 2296 moveto 3000 2292 moveto 3000 2292 lineto stroke 3000 2292 moveto 3012 2280 moveto 3012 2280 lineto stroke 3012 2280 moveto 3028 2268 moveto 3028 2268 lineto stroke 3028 2268 moveto 3032 2256 moveto 3032 2256 lineto stroke 3032 2256 moveto 3036 2240 moveto 3036 2240 lineto stroke 3036 2240 moveto 3040 2228 moveto 3040 2228 lineto stroke 3040 2228 moveto 3040 2212 moveto 3040 2212 lineto stroke 3040 2212 moveto 3036 2200 moveto 3036 2200 lineto stroke 3036 2200 moveto 3028 2184 moveto 3028 2184 lineto stroke 3028 2184 moveto 3016 2172 moveto 3016 2172 lineto stroke 3016 2172 moveto 3000 2164 moveto 3000 2164 lineto stroke 3000 2164 moveto 2980 2160 moveto 2980 2160 lineto stroke 2980 2160 moveto 2964 2172 moveto 2964 2172 lineto stroke 2964 2172 moveto 2952 2180 moveto 2952 2180 lineto stroke 2952 2180 moveto 2944 2196 moveto 2944 2196 lineto stroke 2944 2196 moveto 2936 2208 moveto 2936 2208 lineto stroke 2936 2208 moveto 2936 2224 moveto 2936 2224 lineto stroke 2936 2224 moveto 2936 2236 moveto 2936 2236 lineto stroke 2936 2236 moveto 2944 2252 moveto 2944 2252 lineto stroke 2944 2252 moveto 2952 2264 moveto 2952 2264 lineto stroke 2952 2264 moveto 2968 2272 moveto 2968 2272 lineto stroke 2968 2272 moveto 2988 2276 moveto 2988 2276 lineto stroke 2988 2276 moveto 3004 2264 moveto 3004 2264 lineto stroke 3004 2264 moveto 3012 2252 moveto 3012 2252 lineto stroke 3012 2252 moveto 3020 2240 moveto 3020 2240 lineto stroke 3020 2240 moveto 3024 2224 moveto 3024 2224 lineto stroke 3024 2224 moveto 3020 2212 moveto 3020 2212 lineto stroke 3020 2212 moveto 3016 2196 moveto 3016 2196 lineto stroke 3016 2196 moveto 3000 2184 moveto 3000 2184 lineto stroke 3000 2184 moveto 2984 2180 moveto 2984 2180 lineto stroke 2984 2180 moveto 2964 2188 moveto 2964 2188 lineto stroke 2964 2188 moveto 2956 2200 moveto 2956 2200 lineto stroke 2956 2200 moveto 2952 2212 moveto 2952 2212 lineto stroke 2952 2212 moveto 2952 2228 moveto 2952 2228 lineto stroke 2952 2228 moveto 2956 2244 moveto 2956 2244 lineto stroke 2956 2244 moveto 2968 2252 moveto 2968 2252 lineto stroke 2968 2252 moveto 2984 2260 moveto 2984 2260 lineto stroke 2984 2260 moveto 3000 2248 moveto 3000 2248 lineto stroke 3000 2248 moveto 3008 2236 moveto 3008 2236 lineto stroke 3008 2236 moveto 3008 2220 moveto 3008 2220 lineto stroke 3008 2220 moveto 3008 2208 moveto 3008 2208 lineto stroke 3008 2208 moveto 2992 2200 moveto 2992 2200 lineto stroke 2992 2200 moveto 2976 2200 moveto 2976 2200 lineto stroke 2976 2200 moveto 2964 2212 moveto 2964 2212 lineto stroke 2964 2212 moveto 2960 2224 moveto 2960 2224 lineto stroke 2960 2224 moveto 2968 2240 moveto 2968 2240 lineto stroke 2968 2240 moveto 2980 2244 moveto 2980 2244 lineto stroke 2980 2244 moveto 3000 2240 moveto 3000 2240 lineto stroke 3000 2240 moveto 2996 2224 moveto 2996 2224 lineto stroke 2996 2224 moveto 2996 2212 moveto 2996 2212 lineto stroke 2996 2212 moveto 2980 2208 moveto 2980 2208 lineto stroke 2980 2208 moveto 2972 2220 moveto 2972 2220 lineto stroke 2972 2220 moveto 2968 2232 moveto 2968 2232 lineto stroke 2968 2232 moveto 2988 2240 moveto 2988 2240 lineto stroke 2988 2240 moveto 2992 2228 moveto 2992 2228 lineto stroke 2992 2228 moveto 2992 2216 moveto 2992 2216 lineto stroke 2992 2216 moveto 2976 2212 moveto 2976 2212 lineto stroke 2976 2212 moveto 2972 2228 moveto 2972 2228 lineto stroke 2972 2228 moveto 2988 2236 moveto 2988 2236 lineto stroke 2988 2236 moveto 2992 2224 moveto 2992 2224 lineto stroke 2992 2224 moveto 2980 2212 moveto 2980 2212 lineto stroke 2980 2212 moveto 2976 2228 moveto 2976 2228 lineto stroke 2976 2228 moveto 2988 2228 moveto 2988 2228 lineto stroke 2988 2228 moveto 2984 2216 moveto 2984 2216 lineto stroke 2984 2216 moveto 2980 2228 moveto 2980 2228 lineto stroke 2980 2228 moveto 2988 2224 moveto 2988 2224 lineto stroke 2988 2224 moveto 2980 2224 moveto 2980 2224 lineto stroke 2980 2224 moveto 2984 2220 moveto 2984 2220 lineto stroke 2984 2220 moveto 2988 2224 moveto 2988 2224 lineto stroke 2988 2224 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1712 1956 moveto 1712 1956 lineto stroke 1712 1956 moveto 1692 1944 moveto 1692 1944 lineto stroke 1692 1944 moveto 1672 1932 moveto 1672 1932 lineto stroke 1672 1932 moveto 1652 1924 moveto 1652 1924 lineto stroke 1652 1924 moveto 1628 1912 moveto 1628 1912 lineto stroke 1628 1912 moveto 1608 1900 moveto 1608 1900 lineto stroke 1608 1900 moveto 1588 1892 moveto 1588 1892 lineto stroke 1588 1892 moveto 1568 1880 moveto 1568 1880 lineto stroke 1568 1880 moveto 1544 1872 moveto 1544 1872 lineto stroke 1544 1872 moveto 1524 1860 moveto 1524 1860 lineto stroke 1524 1860 moveto 1504 1852 moveto 1504 1852 lineto stroke 1504 1852 moveto 1484 1844 moveto 1484 1844 lineto stroke 1484 1844 moveto 1460 1832 moveto 1460 1832 lineto stroke 1460 1832 moveto 1440 1824 moveto 1440 1824 lineto stroke 1440 1824 moveto 1420 1816 moveto 1420 1816 lineto stroke 1420 1816 moveto 1400 1808 moveto 1400 1808 lineto stroke 1400 1808 moveto 1380 1800 moveto 1380 1800 lineto stroke 1380 1800 moveto 1360 1792 moveto 1360 1792 lineto stroke 1360 1792 moveto 1340 1784 moveto 1340 1784 lineto stroke 1340 1784 moveto 1320 1776 moveto 1320 1776 lineto stroke 1320 1776 moveto 1300 1772 moveto 1300 1772 lineto stroke 1300 1772 moveto 1280 1764 moveto 1280 1764 lineto stroke 1280 1764 moveto 1260 1760 moveto 1260 1760 lineto stroke 1260 1760 moveto 1240 1752 moveto 1240 1752 lineto stroke 1240 1752 moveto 1220 1748 moveto 1220 1748 lineto stroke 1220 1748 moveto 1204 1744 moveto 1204 1744 lineto stroke 1204 1744 moveto 1184 1744 moveto 1184 1744 lineto stroke 1184 1744 moveto 1164 1740 moveto 1164 1740 lineto stroke 1164 1740 moveto 1148 1736 moveto 1148 1736 lineto stroke 1148 1736 moveto 1128 1732 moveto 1128 1732 lineto stroke 1128 1732 moveto 1112 1732 moveto 1112 1732 lineto stroke 1112 1732 moveto 1096 1728 moveto 1096 1728 lineto stroke 1096 1728 moveto 1076 1732 moveto 1076 1732 lineto stroke 1076 1732 moveto 1060 1732 moveto 1060 1732 lineto stroke 1060 1732 moveto 1044 1732 moveto 1044 1732 lineto stroke 1044 1732 moveto 1028 1732 moveto 1028 1732 lineto stroke 1028 1732 moveto 1012 1732 moveto 1012 1732 lineto stroke 1012 1732 moveto 996 1732 moveto 996 1732 lineto stroke 996 1732 moveto 984 1732 moveto 984 1732 lineto stroke 984 1732 moveto 968 1736 moveto 968 1736 lineto stroke 968 1736 moveto 952 1736 moveto 952 1736 lineto stroke 952 1736 moveto 936 1740 moveto 936 1740 lineto stroke 936 1740 moveto 924 1740 moveto 924 1740 lineto stroke 924 1740 moveto 908 1744 moveto 908 1744 lineto stroke 908 1744 moveto 896 1748 moveto 896 1748 lineto stroke 896 1748 moveto 880 1748 moveto 880 1748 lineto stroke 880 1748 moveto 868 1752 moveto 868 1752 lineto stroke 868 1752 moveto 852 1756 moveto 852 1756 lineto stroke 852 1756 moveto 836 1760 moveto 836 1760 lineto stroke 836 1760 moveto 824 1760 moveto 824 1760 lineto stroke 824 1760 moveto 808 1764 moveto 808 1764 lineto stroke 808 1764 moveto 796 1768 moveto 796 1768 lineto stroke 796 1768 moveto 780 1768 moveto 780 1768 lineto stroke 780 1768 moveto 764 1772 moveto 764 1772 lineto stroke 764 1772 moveto 748 1768 moveto 748 1768 lineto stroke 748 1768 moveto 732 1764 moveto 732 1764 lineto stroke 732 1764 moveto 732 1748 moveto 732 1748 lineto stroke 732 1748 moveto 736 1736 moveto 736 1736 lineto stroke 736 1736 moveto 740 1724 moveto 740 1724 lineto stroke 740 1724 moveto 748 1716 moveto 748 1716 lineto stroke 748 1716 moveto 756 1704 moveto 756 1704 lineto stroke 756 1704 moveto 760 1696 moveto 760 1696 lineto stroke 760 1696 moveto 768 1684 moveto 768 1684 lineto stroke 768 1684 moveto 776 1676 moveto 776 1676 lineto stroke 776 1676 moveto 788 1668 moveto 788 1668 lineto stroke 788 1668 moveto 796 1660 moveto 796 1660 lineto stroke 796 1660 moveto 804 1652 moveto 804 1652 lineto stroke 804 1652 moveto 812 1644 moveto 812 1644 lineto stroke 812 1644 moveto 824 1636 moveto 824 1636 lineto stroke 824 1636 moveto 832 1628 moveto 832 1628 lineto stroke 832 1628 moveto 840 1620 moveto 840 1620 lineto stroke 840 1620 moveto 848 1612 moveto 848 1612 lineto stroke 848 1612 moveto 860 1604 moveto 860 1604 lineto stroke 860 1604 moveto 872 1600 moveto 872 1600 lineto stroke 872 1600 moveto 880 1592 moveto 880 1592 lineto stroke 880 1592 moveto 892 1584 moveto 892 1584 lineto stroke 892 1584 moveto 900 1576 moveto 900 1576 lineto stroke 900 1576 moveto 912 1572 moveto 912 1572 lineto stroke 912 1572 moveto 924 1564 moveto 924 1564 lineto stroke 924 1564 moveto 932 1556 moveto 932 1556 lineto stroke 932 1556 moveto 944 1552 moveto 944 1552 lineto stroke 944 1552 moveto 952 1544 moveto 952 1544 lineto stroke 952 1544 moveto 964 1540 moveto 964 1540 lineto stroke 964 1540 moveto 976 1532 moveto 976 1532 lineto stroke 976 1532 moveto 988 1528 moveto 988 1528 lineto stroke 988 1528 moveto 1000 1520 moveto 1000 1520 lineto stroke 1000 1520 moveto 1012 1516 moveto 1012 1516 lineto stroke 1012 1516 moveto 1024 1508 moveto 1024 1508 lineto stroke 1024 1508 moveto 1036 1504 moveto 1036 1504 lineto stroke 1036 1504 moveto 1044 1496 moveto 1044 1496 lineto stroke 1044 1496 moveto 1056 1492 moveto 1056 1492 lineto stroke 1056 1492 moveto 1068 1488 moveto 1068 1488 lineto stroke 1068 1488 moveto 1080 1480 moveto 1080 1480 lineto stroke 1080 1480 moveto 1096 1476 moveto 1096 1476 lineto stroke 1096 1476 moveto 1108 1472 moveto 1108 1472 lineto stroke 1108 1472 moveto 1120 1468 moveto 1120 1468 lineto stroke 1120 1468 moveto 1132 1464 moveto 1132 1464 lineto stroke 1132 1464 moveto 1144 1460 moveto 1144 1460 lineto stroke 1144 1460 moveto 1156 1456 moveto 1156 1456 lineto stroke 1156 1456 moveto 1172 1448 moveto 1172 1448 lineto stroke 1172 1448 moveto 1184 1444 moveto 1184 1444 lineto stroke 1184 1444 moveto 1196 1444 moveto 1196 1444 lineto stroke 1196 1444 moveto 1212 1440 moveto 1212 1440 lineto stroke 1212 1440 moveto 1224 1436 moveto 1224 1436 lineto stroke 1224 1436 moveto 1240 1432 moveto 1240 1432 lineto stroke 1240 1432 moveto 1252 1428 moveto 1252 1428 lineto stroke 1252 1428 moveto 1268 1428 moveto 1268 1428 lineto stroke 1268 1428 moveto 1280 1424 moveto 1280 1424 lineto stroke 1280 1424 moveto 1296 1420 moveto 1296 1420 lineto stroke 1296 1420 moveto 1312 1420 moveto 1312 1420 lineto stroke 1312 1420 moveto 1328 1420 moveto 1328 1420 lineto stroke 1328 1420 moveto 1340 1416 moveto 1340 1416 lineto stroke 1340 1416 moveto 1356 1416 moveto 1356 1416 lineto stroke 1356 1416 moveto 1372 1416 moveto 1372 1416 lineto stroke 1372 1416 moveto 1388 1412 moveto 1388 1412 lineto stroke 1388 1412 moveto 1404 1416 moveto 1404 1416 lineto stroke 1404 1416 moveto 1424 1416 moveto 1424 1416 lineto stroke 1424 1416 moveto 1440 1416 moveto 1440 1416 lineto stroke 1440 1416 moveto 1456 1420 moveto 1456 1420 lineto stroke 1456 1420 moveto 1476 1420 moveto 1476 1420 lineto stroke 1476 1420 moveto 1492 1424 moveto 1492 1424 lineto stroke 1492 1424 moveto 1512 1432 moveto 1512 1432 lineto stroke 1512 1432 moveto 1532 1436 moveto 1532 1436 lineto stroke 1532 1436 moveto 1552 1444 moveto 1552 1444 lineto stroke 1552 1444 moveto 1572 1456 moveto 1572 1456 lineto stroke 1572 1456 moveto 1596 1468 moveto 1596 1468 lineto stroke 1596 1468 moveto 1616 1484 moveto 1616 1484 lineto stroke 1616 1484 moveto 1632 1500 moveto 1632 1500 lineto stroke 1632 1500 moveto 1648 1520 moveto 1648 1520 lineto stroke 1648 1520 moveto 1664 1536 moveto 1664 1536 lineto stroke 1664 1536 moveto 1672 1556 moveto 1672 1556 lineto stroke 1672 1556 moveto 1684 1572 moveto 1684 1572 lineto stroke 1684 1572 moveto 1692 1592 moveto 1692 1592 lineto stroke 1692 1592 moveto 1700 1608 moveto 1700 1608 lineto stroke 1700 1608 moveto 1704 1628 moveto 1704 1628 lineto stroke 1704 1628 moveto 1708 1644 moveto 1708 1644 lineto stroke 1708 1644 moveto 1716 1660 moveto 1716 1660 lineto stroke 1716 1660 moveto 1720 1676 moveto 1720 1676 lineto stroke 1720 1676 moveto 1724 1696 moveto 1724 1696 lineto stroke 1724 1696 moveto 1728 1712 moveto 1728 1712 lineto stroke 1728 1712 moveto 1728 1728 moveto 1728 1728 lineto stroke 1728 1728 moveto 1732 1744 moveto 1732 1744 lineto stroke 1732 1744 moveto 1736 1760 moveto 1736 1760 lineto stroke 1736 1760 moveto 1736 1776 moveto 1736 1776 lineto stroke 1736 1776 moveto 1740 1792 moveto 1740 1792 lineto stroke 1740 1792 moveto 1740 1804 moveto 1740 1804 lineto stroke 1740 1804 moveto 1744 1820 moveto 1744 1820 lineto stroke 1744 1820 moveto 1744 1836 moveto 1744 1836 lineto stroke 1744 1836 moveto 1748 1852 moveto 1748 1852 lineto stroke 1748 1852 moveto 1748 1868 moveto 1748 1868 lineto stroke 1748 1868 moveto 1752 1884 moveto 1752 1884 lineto stroke 1752 1884 moveto 1752 1900 moveto 1752 1900 lineto stroke 1752 1900 moveto 1756 1916 moveto 1756 1916 lineto stroke 1756 1916 moveto 1756 1932 moveto 1756 1932 lineto stroke 1756 1932 moveto 1756 1944 moveto 1756 1944 lineto stroke 1756 1944 moveto 1760 1960 moveto 1760 1960 lineto stroke 1760 1960 moveto 1760 1976 moveto 1760 1976 lineto stroke 1760 1976 moveto 1764 1992 moveto 1764 1992 lineto stroke 1764 1992 moveto 1764 2008 moveto 1764 2008 lineto stroke 1764 2008 moveto 1768 2024 moveto 1768 2024 lineto stroke 1768 2024 moveto 1768 2040 moveto 1768 2040 lineto stroke 1768 2040 moveto 1768 2052 moveto 1768 2052 lineto stroke 1768 2052 moveto 1772 2068 moveto 1772 2068 lineto stroke 1772 2068 moveto 1772 2084 moveto 1772 2084 lineto stroke 1772 2084 moveto 1776 2100 moveto 1776 2100 lineto stroke 1776 2100 moveto 1776 2116 moveto 1776 2116 lineto stroke 1776 2116 moveto 1776 2132 moveto 1776 2132 lineto stroke 1776 2132 moveto 1780 2148 moveto 1780 2148 lineto stroke 1780 2148 moveto 1780 2160 moveto 1780 2160 lineto stroke 1780 2160 moveto 1780 2176 moveto 1780 2176 lineto stroke 1780 2176 moveto 1784 2192 moveto 1784 2192 lineto stroke 1784 2192 moveto 1784 2208 moveto 1784 2208 lineto stroke 1784 2208 moveto 1784 2220 moveto 1784 2220 lineto stroke 1784 2220 moveto 1784 2236 moveto 1784 2236 lineto stroke 1784 2236 moveto 1780 2248 moveto 1780 2248 lineto stroke 1780 2248 moveto 1772 2252 moveto 1772 2252 lineto stroke 1772 2252 moveto 1760 2232 moveto 1760 2232 lineto stroke 1760 2232 moveto 1756 2216 moveto 1756 2216 lineto stroke 1756 2216 moveto 1752 2200 moveto 1752 2200 lineto stroke 1752 2200 moveto 1744 2184 moveto 1744 2184 lineto stroke 1744 2184 moveto 1744 2168 moveto 1744 2168 lineto stroke 1744 2168 moveto 1740 2152 moveto 1740 2152 lineto stroke 1740 2152 moveto 1740 2136 moveto 1740 2136 lineto stroke 1740 2136 moveto 1736 2120 moveto 1736 2120 lineto stroke 1736 2120 moveto 1732 2104 moveto 1732 2104 lineto stroke 1732 2104 moveto 1732 2088 moveto 1732 2088 lineto stroke 1732 2088 moveto 1728 2072 moveto 1728 2072 lineto stroke 1728 2072 moveto 1728 2056 moveto 1728 2056 lineto stroke 1728 2056 moveto 1728 2044 moveto 1728 2044 lineto stroke 1728 2044 moveto 1724 2028 moveto 1724 2028 lineto stroke 1724 2028 moveto 1724 2012 moveto 1724 2012 lineto stroke 1724 2012 moveto 1724 1996 moveto 1724 1996 lineto stroke 1724 1996 moveto 1720 1980 moveto 1720 1980 lineto stroke 1720 1980 moveto 1720 1964 moveto 1720 1964 lineto stroke 1720 1964 moveto 1720 1948 moveto 1720 1948 lineto stroke 1720 1948 moveto 1716 1936 moveto 1716 1936 lineto stroke 1716 1936 moveto 1716 1920 moveto 1716 1920 lineto stroke 1716 1920 moveto 1716 1904 moveto 1716 1904 lineto stroke 1716 1904 moveto 1712 1888 moveto 1712 1888 lineto stroke 1712 1888 moveto 1712 1872 moveto 1712 1872 lineto stroke 1712 1872 moveto 1712 1860 moveto 1712 1860 lineto stroke 1712 1860 moveto 1708 1844 moveto 1708 1844 lineto stroke 1708 1844 moveto 1708 1828 moveto 1708 1828 lineto stroke 1708 1828 moveto 1708 1812 moveto 1708 1812 lineto stroke 1708 1812 moveto 1708 1800 moveto 1708 1800 lineto stroke 1708 1800 moveto 1708 1784 moveto 1708 1784 lineto stroke 1708 1784 moveto 1708 1768 moveto 1708 1768 lineto stroke 1708 1768 moveto 1708 1756 moveto 1708 1756 lineto stroke 1708 1756 moveto 1716 1760 moveto 1716 1760 lineto stroke 1716 1760 moveto 1720 1776 moveto 1720 1776 lineto stroke 1720 1776 moveto 1724 1792 moveto 1724 1792 lineto stroke 1724 1792 moveto 1728 1808 moveto 1728 1808 lineto stroke 1728 1808 moveto 1732 1824 moveto 1732 1824 lineto stroke 1732 1824 moveto 1732 1840 moveto 1732 1840 lineto stroke 1732 1840 moveto 1736 1856 moveto 1736 1856 lineto stroke 1736 1856 moveto 1736 1872 moveto 1736 1872 lineto stroke 1736 1872 moveto 1736 1884 moveto 1736 1884 lineto stroke 1736 1884 moveto 1740 1900 moveto 1740 1900 lineto stroke 1740 1900 moveto 1740 1916 moveto 1740 1916 lineto stroke 1740 1916 moveto 1740 1932 moveto 1740 1932 lineto stroke 1740 1932 moveto 1744 1948 moveto 1744 1948 lineto stroke 1744 1948 moveto 1744 1964 moveto 1744 1964 lineto stroke 1744 1964 moveto 1744 1976 moveto 1744 1976 lineto stroke 1744 1976 moveto 1748 1992 moveto 1748 1992 lineto stroke 1748 1992 moveto 1748 2008 moveto 1748 2008 lineto stroke 1748 2008 moveto 1748 2024 moveto 1748 2024 lineto stroke 1748 2024 moveto 1752 2040 moveto 1752 2040 lineto stroke 1752 2040 moveto 1752 2052 moveto 1752 2052 lineto stroke 1752 2052 moveto 1752 2068 moveto 1752 2068 lineto stroke 1752 2068 moveto 1752 2084 moveto 1752 2084 lineto stroke 1752 2084 moveto 1752 2100 moveto 1752 2100 lineto stroke 1752 2100 moveto 1752 2112 moveto 1752 2112 lineto stroke 1752 2112 moveto 1752 2128 moveto 1752 2128 lineto stroke 1752 2128 moveto 1748 2128 moveto 1748 2128 lineto stroke 1748 2128 moveto 1744 2112 moveto 1744 2112 lineto stroke 1744 2112 moveto 1740 2096 moveto 1740 2096 lineto stroke 1740 2096 moveto 1736 2080 moveto 1736 2080 lineto stroke 1736 2080 moveto 1736 2064 moveto 1736 2064 lineto stroke 1736 2064 moveto 1736 2048 moveto 1736 2048 lineto stroke 1736 2048 moveto 1732 2036 moveto 1732 2036 lineto stroke 1732 2036 moveto 1732 2020 moveto 1732 2020 lineto stroke 1732 2020 moveto 1728 2004 moveto 1728 2004 lineto stroke 1728 2004 moveto 1728 1988 moveto 1728 1988 lineto stroke 1728 1988 moveto 1728 1972 moveto 1728 1972 lineto stroke 1728 1972 moveto 1724 1956 moveto 1724 1956 lineto stroke 1724 1956 moveto 1724 1944 moveto 1724 1944 lineto stroke 1724 1944 moveto 1724 1928 moveto 1724 1928 lineto stroke 1724 1928 moveto 1724 1912 moveto 1724 1912 lineto stroke 1724 1912 moveto 1720 1896 moveto 1720 1896 lineto stroke 1720 1896 moveto 1720 1884 moveto 1720 1884 lineto stroke 1720 1884 moveto 1720 1868 moveto 1720 1868 lineto stroke 1720 1868 moveto 1720 1852 moveto 1720 1852 lineto stroke 1720 1852 moveto 1720 1836 moveto 1720 1836 lineto stroke 1720 1836 moveto 1724 1832 moveto 1724 1832 lineto stroke 1724 1832 moveto 1728 1848 moveto 1728 1848 lineto stroke 1728 1848 moveto 1732 1864 moveto 1732 1864 lineto stroke 1732 1864 moveto 1732 1880 moveto 1732 1880 lineto stroke 1732 1880 moveto 1736 1892 moveto 1736 1892 lineto stroke 1736 1892 moveto 1736 1908 moveto 1736 1908 lineto stroke 1736 1908 moveto 1736 1924 moveto 1736 1924 lineto stroke 1736 1924 moveto 1740 1940 moveto 1740 1940 lineto stroke 1740 1940 moveto 1740 1956 moveto 1740 1956 lineto stroke 1740 1956 moveto 1740 1972 moveto 1740 1972 lineto stroke 1740 1972 moveto 1740 1984 moveto 1740 1984 lineto stroke 1740 1984 moveto 1744 2000 moveto 1744 2000 lineto stroke 1744 2000 moveto 1744 2016 moveto 1744 2016 lineto stroke 1744 2016 moveto 1744 2032 moveto 1744 2032 lineto stroke 1744 2032 moveto 1744 2044 moveto 1744 2044 lineto stroke 1744 2044 moveto 1744 2060 moveto 1744 2060 lineto stroke 1744 2060 moveto 1744 2072 moveto 1744 2072 lineto stroke 1744 2072 moveto 1740 2068 moveto 1740 2068 lineto stroke 1740 2068 moveto 1736 2052 moveto 1736 2052 lineto stroke 1736 2052 moveto 1736 2036 moveto 1736 2036 lineto stroke 1736 2036 moveto 1736 2020 moveto 1736 2020 lineto stroke 1736 2020 moveto 1732 2008 moveto 1732 2008 lineto stroke 1732 2008 moveto 1732 1992 moveto 1732 1992 lineto stroke 1732 1992 moveto 1732 1976 moveto 1732 1976 lineto stroke 1732 1976 moveto 1728 1960 moveto 1728 1960 lineto stroke 1728 1960 moveto 1728 1944 moveto 1728 1944 lineto stroke 1728 1944 moveto 1728 1932 moveto 1728 1932 lineto stroke 1728 1932 moveto 1728 1916 moveto 1728 1916 lineto stroke 1728 1916 moveto 1724 1900 moveto 1724 1900 lineto stroke 1724 1900 moveto 1724 1884 moveto 1724 1884 lineto stroke 1724 1884 moveto 1728 1872 moveto 1728 1872 lineto stroke 1728 1872 moveto 1732 1888 moveto 1732 1888 lineto stroke 1732 1888 moveto 1732 1904 moveto 1732 1904 lineto stroke 1732 1904 moveto 1736 1920 moveto 1736 1920 lineto stroke 1736 1920 moveto 1736 1936 moveto 1736 1936 lineto stroke 1736 1936 moveto 1736 1952 moveto 1736 1952 lineto stroke 1736 1952 moveto 1740 1968 moveto 1740 1968 lineto stroke 1740 1968 moveto 1740 1980 moveto 1740 1980 lineto stroke 1740 1980 moveto 1740 1996 moveto 1740 1996 lineto stroke 1740 1996 moveto 1740 2012 moveto 1740 2012 lineto stroke 1740 2012 moveto 1740 2028 moveto 1740 2028 lineto stroke 1740 2028 moveto 1740 2040 moveto 1740 2040 lineto stroke 1740 2040 moveto 1736 2028 moveto 1736 2028 lineto stroke 1736 2028 moveto 1736 2012 moveto 1736 2012 lineto stroke 1736 2012 moveto 1732 1996 moveto 1732 1996 lineto stroke 1732 1996 moveto 1732 1984 moveto 1732 1984 lineto stroke 1732 1984 moveto 1732 1968 moveto 1732 1968 lineto stroke 1732 1968 moveto 1732 1952 moveto 1732 1952 lineto stroke 1732 1952 moveto 1728 1936 moveto 1728 1936 lineto stroke 1728 1936 moveto 1728 1924 moveto 1728 1924 lineto stroke 1728 1924 moveto 1728 1908 moveto 1728 1908 lineto stroke 1728 1908 moveto 1732 1908 moveto 1732 1908 lineto stroke 1732 1908 moveto 1732 1924 moveto 1732 1924 lineto stroke 1732 1924 moveto 1736 1940 moveto 1736 1940 lineto stroke 1736 1940 moveto 1736 1952 moveto 1736 1952 lineto stroke 1736 1952 moveto 1736 1968 moveto 1736 1968 lineto stroke 1736 1968 moveto 1740 1984 moveto 1740 1984 lineto stroke 1740 1984 moveto 1740 2000 moveto 1740 2000 lineto stroke 1740 2000 moveto 1740 2012 moveto 1740 2012 lineto stroke 1740 2012 moveto 1736 2012 moveto 1736 2012 lineto stroke 1736 2012 moveto 1736 1996 moveto 1736 1996 lineto stroke 1736 1996 moveto 1732 1980 moveto 1732 1980 lineto stroke 1732 1980 moveto 1732 1964 moveto 1732 1964 lineto stroke 1732 1964 moveto 1732 1948 moveto 1732 1948 lineto stroke 1732 1948 moveto 1732 1936 moveto 1732 1936 lineto stroke 1732 1936 moveto 1732 1920 moveto 1732 1920 lineto stroke 1732 1920 moveto 1732 1936 moveto 1732 1936 lineto stroke 1732 1936 moveto 1736 1948 moveto 1736 1948 lineto stroke 1736 1948 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1736 1980 moveto 1736 1980 lineto stroke 1736 1980 moveto 1736 1996 moveto 1736 1996 lineto stroke 1736 1996 moveto 1736 1996 moveto 1736 1996 lineto stroke 1736 1996 moveto 1732 1980 moveto 1732 1980 lineto stroke 1732 1980 moveto 1732 1968 moveto 1732 1968 lineto stroke 1732 1968 moveto 1732 1952 moveto 1732 1952 lineto stroke 1732 1952 moveto 1732 1936 moveto 1732 1936 lineto stroke 1732 1936 moveto 1732 1948 moveto 1732 1948 lineto stroke 1732 1948 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1736 1980 moveto 1736 1980 lineto stroke 1736 1980 moveto 1736 1988 moveto 1736 1988 lineto stroke 1736 1988 moveto 1732 1972 moveto 1732 1972 lineto stroke 1732 1972 moveto 1732 1956 moveto 1732 1956 lineto stroke 1732 1956 moveto 1736 1956 moveto 1736 1956 lineto stroke 1736 1956 moveto 1736 1972 moveto 1736 1972 lineto stroke 1736 1972 moveto 1736 1980 moveto 1736 1980 lineto stroke 1736 1980 moveto 1732 1964 moveto 1732 1964 lineto stroke 1732 1964 moveto 1732 1952 moveto 1732 1952 lineto stroke 1732 1952 moveto 1736 1968 moveto 1736 1968 lineto stroke 1736 1968 moveto 1736 1976 moveto 1736 1976 lineto stroke 1736 1976 moveto 1732 1960 moveto 1732 1960 lineto stroke 1732 1960 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1736 1972 moveto 1736 1972 lineto stroke 1736 1972 moveto 1732 1960 moveto 1732 1960 lineto stroke 1732 1960 moveto 1736 1972 moveto 1736 1972 lineto stroke 1736 1972 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1732 1960 moveto 1732 1960 lineto stroke 1732 1960 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2500 1228 moveto 2500 1228 lineto stroke 2500 1228 moveto 2480 1216 moveto 2480 1216 lineto stroke 2480 1216 moveto 2460 1204 moveto 2460 1204 lineto stroke 2460 1204 moveto 2440 1192 moveto 2440 1192 lineto stroke 2440 1192 moveto 2420 1180 moveto 2420 1180 lineto stroke 2420 1180 moveto 2400 1168 moveto 2400 1168 lineto stroke 2400 1168 moveto 2380 1156 moveto 2380 1156 lineto stroke 2380 1156 moveto 2360 1144 moveto 2360 1144 lineto stroke 2360 1144 moveto 2340 1132 moveto 2340 1132 lineto stroke 2340 1132 moveto 2320 1120 moveto 2320 1120 lineto stroke 2320 1120 moveto 2300 1108 moveto 2300 1108 lineto stroke 2300 1108 moveto 2280 1100 moveto 2280 1100 lineto stroke 2280 1100 moveto 2260 1088 moveto 2260 1088 lineto stroke 2260 1088 moveto 2240 1076 moveto 2240 1076 lineto stroke 2240 1076 moveto 2220 1064 moveto 2220 1064 lineto stroke 2220 1064 moveto 2200 1052 moveto 2200 1052 lineto stroke 2200 1052 moveto 2180 1040 moveto 2180 1040 lineto stroke 2180 1040 moveto 2160 1028 moveto 2160 1028 lineto stroke 2160 1028 moveto 2140 1016 moveto 2140 1016 lineto stroke 2140 1016 moveto 2120 1004 moveto 2120 1004 lineto stroke 2120 1004 moveto 2104 992 moveto 2104 992 lineto stroke 2104 992 moveto 2084 980 moveto 2084 980 lineto stroke 2084 980 moveto 2064 968 moveto 2064 968 lineto stroke 2064 968 moveto 2048 956 moveto 2048 956 lineto stroke 2048 956 moveto 2028 944 moveto 2028 944 lineto stroke 2028 944 moveto 2012 932 moveto 2012 932 lineto stroke 2012 932 moveto 1996 920 moveto 1996 920 lineto stroke 1996 920 moveto 1980 912 moveto 1980 912 lineto stroke 1980 912 moveto 1964 900 moveto 1964 900 lineto stroke 1964 900 moveto 1948 888 moveto 1948 888 lineto stroke 1948 888 moveto 1932 876 moveto 1932 876 lineto stroke 1932 876 moveto 1920 864 moveto 1920 864 lineto stroke 1920 864 moveto 1904 852 moveto 1904 852 lineto stroke 1904 852 moveto 1892 844 moveto 1892 844 lineto stroke 1892 844 moveto 1880 832 moveto 1880 832 lineto stroke 1880 832 moveto 1868 820 moveto 1868 820 lineto stroke 1868 820 moveto 1864 812 moveto 1864 812 lineto stroke 1864 812 moveto 1856 800 moveto 1856 800 lineto stroke 1856 800 moveto 1848 788 moveto 1848 788 lineto stroke 1848 788 moveto 1840 780 moveto 1840 780 lineto stroke 1840 780 moveto 1836 772 moveto 1836 772 lineto stroke 1836 772 moveto 1836 764 moveto 1836 764 lineto stroke 1836 764 moveto 1836 752 moveto 1836 752 lineto stroke 1836 752 moveto 1836 744 moveto 1836 744 lineto stroke 1836 744 moveto 1836 736 moveto 1836 736 lineto stroke 1836 736 moveto 1832 728 moveto 1832 728 lineto stroke 1832 728 moveto 1840 724 moveto 1840 724 lineto stroke 1840 724 moveto 1848 716 moveto 1848 716 lineto stroke 1848 716 moveto 1856 712 moveto 1856 712 lineto stroke 1856 712 moveto 1864 704 moveto 1864 704 lineto stroke 1864 704 moveto 1872 700 moveto 1872 700 lineto stroke 1872 700 moveto 1884 692 moveto 1884 692 lineto stroke 1884 692 moveto 1900 692 moveto 1900 692 lineto stroke 1900 692 moveto 1912 688 moveto 1912 688 lineto stroke 1912 688 moveto 1928 684 moveto 1928 684 lineto stroke 1928 684 moveto 1944 680 moveto 1944 680 lineto stroke 1944 680 moveto 1960 680 moveto 1960 680 lineto stroke 1960 680 moveto 1980 676 moveto 1980 676 lineto stroke 1980 676 moveto 2000 676 moveto 2000 676 lineto stroke 2000 676 moveto 2020 676 moveto 2020 676 lineto stroke 2020 676 moveto 2040 676 moveto 2040 676 lineto stroke 2040 676 moveto 2060 676 moveto 2060 676 lineto stroke 2060 676 moveto 2084 680 moveto 2084 680 lineto stroke 2084 680 moveto 2112 684 moveto 2112 684 lineto stroke 2112 684 moveto 2136 684 moveto 2136 684 lineto stroke 2136 684 moveto 2164 688 moveto 2164 688 lineto stroke 2164 688 moveto 2188 692 moveto 2188 692 lineto stroke 2188 692 moveto 2216 696 moveto 2216 696 lineto stroke 2216 696 moveto 2244 700 moveto 2244 700 lineto stroke 2244 700 moveto 2272 704 moveto 2272 704 lineto stroke 2272 704 moveto 2300 712 moveto 2300 712 lineto stroke 2300 712 moveto 2332 720 moveto 2332 720 lineto stroke 2332 720 moveto 2360 728 moveto 2360 728 lineto stroke 2360 728 moveto 2392 736 moveto 2392 736 lineto stroke 2392 736 moveto 2420 744 moveto 2420 744 lineto stroke 2420 744 moveto 2448 756 moveto 2448 756 lineto stroke 2448 756 moveto 2472 768 moveto 2472 768 lineto stroke 2472 768 moveto 2500 780 moveto 2500 780 lineto stroke 2500 780 moveto 2528 788 moveto 2528 788 lineto stroke 2528 788 moveto 2552 800 moveto 2552 800 lineto stroke 2552 800 moveto 2572 812 moveto 2572 812 lineto stroke 2572 812 moveto 2588 824 moveto 2588 824 lineto stroke 2588 824 moveto 2608 836 moveto 2608 836 lineto stroke 2608 836 moveto 2624 848 moveto 2624 848 lineto stroke 2624 848 moveto 2644 860 moveto 2644 860 lineto stroke 2644 860 moveto 2656 872 moveto 2656 872 lineto stroke 2656 872 moveto 2664 880 moveto 2664 880 lineto stroke 2664 880 moveto 2676 892 moveto 2676 892 lineto stroke 2676 892 moveto 2684 900 moveto 2684 900 lineto stroke 2684 900 moveto 2692 912 moveto 2692 912 lineto stroke 2692 912 moveto 2700 924 moveto 2700 924 lineto stroke 2700 924 moveto 2704 932 moveto 2704 932 lineto stroke 2704 932 moveto 2708 940 moveto 2708 940 lineto stroke 2708 940 moveto 2712 952 moveto 2712 952 lineto stroke 2712 952 moveto 2716 960 moveto 2716 960 lineto stroke 2716 960 moveto 2716 968 moveto 2716 968 lineto stroke 2716 968 moveto 2720 976 moveto 2720 976 lineto stroke 2720 976 moveto 2724 988 moveto 2724 988 lineto stroke 2724 988 moveto 2720 996 moveto 2720 996 lineto stroke 2720 996 moveto 2720 1004 moveto 2720 1004 lineto stroke 2720 1004 moveto 2716 1012 moveto 2716 1012 lineto stroke 2716 1012 moveto 2716 1020 moveto 2716 1020 lineto stroke 2716 1020 moveto 2716 1028 moveto 2716 1028 lineto stroke 2716 1028 moveto 2712 1032 moveto 2712 1032 lineto stroke 2712 1032 moveto 2712 1040 moveto 2712 1040 lineto stroke 2712 1040 moveto 2708 1048 moveto 2708 1048 lineto stroke 2708 1048 moveto 2704 1056 moveto 2704 1056 lineto stroke 2704 1056 moveto 2696 1064 moveto 2696 1064 lineto stroke 2696 1064 moveto 2692 1068 moveto 2692 1068 lineto stroke 2692 1068 moveto 2688 1076 moveto 2688 1076 lineto stroke 2688 1076 moveto 2684 1084 moveto 2684 1084 lineto stroke 2684 1084 moveto 2676 1092 moveto 2676 1092 lineto stroke 2676 1092 moveto 2672 1096 moveto 2672 1096 lineto stroke 2672 1096 moveto 2668 1104 moveto 2668 1104 lineto stroke 2668 1104 moveto 2660 1108 moveto 2660 1108 lineto stroke 2660 1108 moveto 2652 1116 moveto 2652 1116 lineto stroke 2652 1116 moveto 2644 1120 moveto 2644 1120 lineto stroke 2644 1120 moveto 2636 1128 moveto 2636 1128 lineto stroke 2636 1128 moveto 2628 1132 moveto 2628 1132 lineto stroke 2628 1132 moveto 2620 1140 moveto 2620 1140 lineto stroke 2620 1140 moveto 2612 1144 moveto 2612 1144 lineto stroke 2612 1144 moveto 2600 1148 moveto 2600 1148 lineto stroke 2600 1148 moveto 2592 1156 moveto 2592 1156 lineto stroke 2592 1156 moveto 2580 1160 moveto 2580 1160 lineto stroke 2580 1160 moveto 2572 1164 moveto 2572 1164 lineto stroke 2572 1164 moveto 2560 1168 moveto 2560 1168 lineto stroke 2560 1168 moveto 2552 1176 moveto 2552 1176 lineto stroke 2552 1176 moveto 2540 1180 moveto 2540 1180 lineto stroke 2540 1180 moveto 2528 1184 moveto 2528 1184 lineto stroke 2528 1184 moveto 2516 1188 moveto 2516 1188 lineto stroke 2516 1188 moveto 2504 1192 moveto 2504 1192 lineto stroke 2504 1192 moveto 2492 1196 moveto 2492 1196 lineto stroke 2492 1196 moveto 2480 1200 moveto 2480 1200 lineto stroke 2480 1200 moveto 2468 1204 moveto 2468 1204 lineto stroke 2468 1204 moveto 2452 1208 moveto 2452 1208 lineto stroke 2452 1208 moveto 2440 1212 moveto 2440 1212 lineto stroke 2440 1212 moveto 2424 1216 moveto 2424 1216 lineto stroke 2424 1216 moveto 2412 1220 moveto 2412 1220 lineto stroke 2412 1220 moveto 2396 1224 moveto 2396 1224 lineto stroke 2396 1224 moveto 2384 1228 moveto 2384 1228 lineto stroke 2384 1228 moveto 2368 1228 moveto 2368 1228 lineto stroke 2368 1228 moveto 2352 1232 moveto 2352 1232 lineto stroke 2352 1232 moveto 2336 1236 moveto 2336 1236 lineto stroke 2336 1236 moveto 2324 1240 moveto 2324 1240 lineto stroke 2324 1240 moveto 2308 1240 moveto 2308 1240 lineto stroke 2308 1240 moveto 2292 1244 moveto 2292 1244 lineto stroke 2292 1244 moveto 2280 1248 moveto 2280 1248 lineto stroke 2280 1248 moveto 2284 1256 moveto 2284 1256 lineto stroke 2284 1256 moveto 2312 1264 moveto 2312 1264 lineto stroke 2312 1264 moveto 2336 1264 moveto 2336 1264 lineto stroke 2336 1264 moveto 2360 1268 moveto 2360 1268 lineto stroke 2360 1268 moveto 2384 1268 moveto 2384 1268 lineto stroke 2384 1268 moveto 2404 1268 moveto 2404 1268 lineto stroke 2404 1268 moveto 2424 1268 moveto 2424 1268 lineto stroke 2424 1268 moveto 2444 1264 moveto 2444 1264 lineto stroke 2444 1264 moveto 2464 1264 moveto 2464 1264 lineto stroke 2464 1264 moveto 2484 1264 moveto 2484 1264 lineto stroke 2484 1264 moveto 2500 1260 moveto 2500 1260 lineto stroke 2500 1260 moveto 2516 1260 moveto 2516 1260 lineto stroke 2516 1260 moveto 2536 1256 moveto 2536 1256 lineto stroke 2536 1256 moveto 2552 1256 moveto 2552 1256 lineto stroke 2552 1256 moveto 2568 1252 moveto 2568 1252 lineto stroke 2568 1252 moveto 2588 1252 moveto 2588 1252 lineto stroke 2588 1252 moveto 2604 1248 moveto 2604 1248 lineto stroke 2604 1248 moveto 2620 1248 moveto 2620 1248 lineto stroke 2620 1248 moveto 2636 1244 moveto 2636 1244 lineto stroke 2636 1244 moveto 2652 1244 moveto 2652 1244 lineto stroke 2652 1244 moveto 2672 1240 moveto 2672 1240 lineto stroke 2672 1240 moveto 2688 1236 moveto 2688 1236 lineto stroke 2688 1236 moveto 2700 1236 moveto 2700 1236 lineto stroke 2700 1236 moveto 2688 1228 moveto 2688 1228 lineto stroke 2688 1228 moveto 2664 1224 moveto 2664 1224 lineto stroke 2664 1224 moveto 2640 1224 moveto 2640 1224 lineto stroke 2640 1224 moveto 2616 1224 moveto 2616 1224 lineto stroke 2616 1224 moveto 2596 1224 moveto 2596 1224 lineto stroke 2596 1224 moveto 2576 1224 moveto 2576 1224 lineto stroke 2576 1224 moveto 2556 1224 moveto 2556 1224 lineto stroke 2556 1224 moveto 2540 1228 moveto 2540 1228 lineto stroke 2540 1228 moveto 2520 1228 moveto 2520 1228 lineto stroke 2520 1228 moveto 2500 1228 moveto 2500 1228 lineto stroke 2500 1228 moveto 2484 1232 moveto 2484 1232 lineto stroke 2484 1232 moveto 2464 1232 moveto 2464 1232 lineto stroke 2464 1232 moveto 2448 1236 moveto 2448 1236 lineto stroke 2448 1236 moveto 2428 1236 moveto 2428 1236 lineto stroke 2428 1236 moveto 2412 1240 moveto 2412 1240 lineto stroke 2412 1240 moveto 2396 1240 moveto 2396 1240 lineto stroke 2396 1240 moveto 2380 1244 moveto 2380 1244 lineto stroke 2380 1244 moveto 2396 1248 moveto 2396 1248 lineto stroke 2396 1248 moveto 2420 1252 moveto 2420 1252 lineto stroke 2420 1252 moveto 2444 1252 moveto 2444 1252 lineto stroke 2444 1252 moveto 2464 1252 moveto 2464 1252 lineto stroke 2464 1252 moveto 2484 1248 moveto 2484 1248 lineto stroke 2484 1248 moveto 2504 1248 moveto 2504 1248 lineto stroke 2504 1248 moveto 2524 1248 moveto 2524 1248 lineto stroke 2524 1248 moveto 2544 1248 moveto 2544 1248 lineto stroke 2544 1248 moveto 2560 1244 moveto 2560 1244 lineto stroke 2560 1244 moveto 2580 1244 moveto 2580 1244 lineto stroke 2580 1244 moveto 2596 1244 moveto 2596 1244 lineto stroke 2596 1244 moveto 2616 1240 moveto 2616 1240 lineto stroke 2616 1240 moveto 2632 1236 moveto 2632 1236 lineto stroke 2632 1236 moveto 2628 1232 moveto 2628 1232 lineto stroke 2628 1232 moveto 2604 1232 moveto 2604 1232 lineto stroke 2604 1232 moveto 2584 1232 moveto 2584 1232 lineto stroke 2584 1232 moveto 2560 1232 moveto 2560 1232 lineto stroke 2560 1232 moveto 2540 1232 moveto 2540 1232 lineto stroke 2540 1232 moveto 2520 1232 moveto 2520 1232 lineto stroke 2520 1232 moveto 2504 1236 moveto 2504 1236 lineto stroke 2504 1236 moveto 2484 1236 moveto 2484 1236 lineto stroke 2484 1236 moveto 2464 1236 moveto 2464 1236 lineto stroke 2464 1236 moveto 2448 1240 moveto 2448 1240 lineto stroke 2448 1240 moveto 2432 1240 moveto 2432 1240 lineto stroke 2432 1240 moveto 2440 1244 moveto 2440 1244 lineto stroke 2440 1244 moveto 2464 1244 moveto 2464 1244 lineto stroke 2464 1244 moveto 2484 1244 moveto 2484 1244 lineto stroke 2484 1244 moveto 2504 1244 moveto 2504 1244 lineto stroke 2504 1244 moveto 2524 1244 moveto 2524 1244 lineto stroke 2524 1244 moveto 2544 1244 moveto 2544 1244 lineto stroke 2544 1244 moveto 2564 1244 moveto 2564 1244 lineto stroke 2564 1244 moveto 2580 1240 moveto 2580 1240 lineto stroke 2580 1240 moveto 2596 1240 moveto 2596 1240 lineto stroke 2596 1240 moveto 2584 1236 moveto 2584 1236 lineto stroke 2584 1236 moveto 2564 1236 moveto 2564 1236 lineto stroke 2564 1236 moveto 2540 1236 moveto 2540 1236 lineto stroke 2540 1236 moveto 2524 1236 moveto 2524 1236 lineto stroke 2524 1236 moveto 2504 1236 moveto 2504 1236 lineto stroke 2504 1236 moveto 2484 1240 moveto 2484 1240 lineto stroke 2484 1240 moveto 2468 1240 moveto 2468 1240 lineto stroke 2468 1240 moveto 2464 1244 moveto 2464 1244 lineto stroke 2464 1244 moveto 2488 1244 moveto 2488 1244 lineto stroke 2488 1244 moveto 2508 1244 moveto 2508 1244 lineto stroke 2508 1244 moveto 2528 1244 moveto 2528 1244 lineto stroke 2528 1244 moveto 2548 1240 moveto 2548 1240 lineto stroke 2548 1240 moveto 2564 1240 moveto 2564 1240 lineto stroke 2564 1240 moveto 2568 1236 moveto 2568 1236 lineto stroke 2568 1236 moveto 2548 1236 moveto 2548 1236 lineto stroke 2548 1236 moveto 2528 1236 moveto 2528 1236 lineto stroke 2528 1236 moveto 2508 1236 moveto 2508 1236 lineto stroke 2508 1236 moveto 2488 1240 moveto 2488 1240 lineto stroke 2488 1240 moveto 2484 1244 moveto 2484 1244 lineto stroke 2484 1244 moveto 2504 1244 moveto 2504 1244 lineto stroke 2504 1244 moveto 2524 1240 moveto 2524 1240 lineto stroke 2524 1240 moveto 2544 1240 moveto 2544 1240 lineto stroke 2544 1240 moveto 2560 1240 moveto 2560 1240 lineto stroke 2560 1240 moveto 2540 1236 moveto 2540 1236 lineto stroke 2540 1236 moveto 2516 1240 moveto 2516 1240 lineto stroke 2516 1240 moveto 2500 1240 moveto 2500 1240 lineto stroke 2500 1240 moveto 2500 1240 moveto 2500 1240 lineto stroke 2500 1240 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2540 1240 moveto 2540 1240 lineto stroke 2540 1240 moveto 2532 1240 moveto 2532 1240 lineto stroke 2532 1240 moveto 2512 1240 moveto 2512 1240 lineto stroke 2512 1240 moveto 2504 1240 moveto 2504 1240 lineto stroke 2504 1240 moveto 2524 1240 moveto 2524 1240 lineto stroke 2524 1240 moveto 2528 1240 moveto 2528 1240 lineto stroke 2528 1240 moveto 2512 1240 moveto 2512 1240 lineto stroke 2512 1240 moveto 2528 1240 moveto 2528 1240 lineto stroke 2528 1240 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2524 1240 moveto 2524 1240 lineto stroke 2524 1240 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2524 1240 moveto 2524 1240 lineto stroke 2524 1240 moveto 2520 1964 moveto 2520 1964 lineto stroke 2520 1964 moveto 2520 1964 moveto 2520 1964 lineto stroke 2520 1964 moveto 2516 1960 lineto stroke 2516 1960 moveto 2512 1960 lineto stroke 2512 1960 moveto 2504 1956 lineto stroke 2504 1956 moveto 2500 1952 lineto stroke 2500 1952 moveto 2496 1948 lineto stroke 2496 1948 moveto 2492 1948 lineto stroke 2492 1948 moveto 2488 1944 lineto stroke 2488 1944 moveto 2480 1940 lineto stroke 2480 1940 moveto 2476 1936 lineto stroke 2476 1936 moveto 2468 1932 lineto stroke 2468 1932 moveto 2464 1928 lineto stroke 2464 1928 moveto 2456 1924 lineto stroke 2456 1924 moveto 2448 1916 lineto stroke 2448 1916 moveto 2440 1912 lineto stroke 2440 1912 moveto 2432 1908 lineto stroke 2432 1908 moveto 2424 1900 lineto stroke 2424 1900 moveto 2416 1896 lineto stroke 2416 1896 moveto 2408 1888 lineto stroke 2408 1888 moveto 2404 1884 lineto stroke 2404 1884 moveto 2396 1876 lineto stroke 2396 1876 moveto 2388 1872 lineto stroke 2388 1872 moveto 2380 1864 lineto stroke 2380 1864 moveto 2376 1860 lineto stroke 2376 1860 moveto 2372 1852 lineto stroke 2372 1852 moveto 2368 1848 lineto stroke 2368 1848 moveto 2368 1840 lineto stroke 2368 1840 moveto 2368 1836 lineto stroke 2368 1836 moveto 2368 1828 lineto stroke 2368 1828 moveto 2372 1824 lineto stroke 2372 1824 moveto 2376 1816 lineto stroke 2376 1816 moveto 2380 1812 lineto stroke 2380 1812 moveto 2388 1804 lineto stroke 2388 1804 moveto 2396 1800 lineto stroke 2396 1800 moveto 2408 1792 lineto stroke 2408 1792 moveto 2416 1788 lineto stroke 2416 1788 moveto 2428 1780 lineto stroke 2428 1780 moveto 2440 1776 lineto stroke 2440 1776 moveto 2448 1772 lineto stroke 2448 1772 moveto 2460 1768 lineto stroke 2460 1768 moveto 2472 1764 lineto stroke 2472 1764 moveto 2480 1760 lineto stroke 2480 1760 moveto 2492 1760 lineto stroke 2492 1760 moveto 2496 1760 lineto stroke 2496 1760 moveto 2504 1760 lineto stroke 2504 1760 moveto 2508 1760 lineto stroke 2508 1760 moveto 2512 1764 lineto stroke 2512 1764 moveto 2516 1772 lineto stroke 2516 1772 moveto 2520 1776 lineto stroke 2520 1776 moveto 2520 1784 lineto stroke 2520 1784 moveto 2520 1796 lineto stroke 2520 1796 moveto 2520 1808 lineto stroke 2520 1808 moveto 2516 1820 lineto stroke 2516 1820 moveto 2516 1832 lineto stroke 2516 1832 moveto 2516 1848 lineto stroke 2516 1848 moveto 2512 1864 lineto stroke 2512 1864 moveto 2512 1876 lineto stroke 2512 1876 moveto 2512 1892 lineto stroke 2512 1892 moveto 2512 1908 lineto stroke 2512 1908 moveto 2512 1920 lineto stroke 2512 1920 moveto 2512 1932 lineto stroke 2512 1932 moveto 2512 1944 lineto stroke 2512 1944 moveto 2512 1956 lineto stroke 2512 1956 moveto 2512 1964 lineto stroke 2512 1964 moveto 2516 1972 lineto stroke 2516 1972 moveto 2516 1976 lineto stroke 2516 1976 moveto 2516 1980 lineto stroke 2516 1980 moveto 2516 1984 lineto stroke 2516 1984 moveto 2520 1988 lineto stroke 2520 1988 moveto 2524 1980 lineto stroke 2524 1980 moveto 2524 1976 lineto stroke 2524 1976 moveto 2524 1972 lineto stroke 2524 1972 moveto 2524 1964 lineto stroke 2524 1964 moveto 2520 1960 lineto stroke 2520 1960 moveto 2520 1964 lineto stroke 2520 1964 moveto 2984 2224 moveto 2984 2224 lineto stroke 2984 2224 moveto 3000 2232 moveto 3000 2232 lineto stroke 3000 2232 moveto 3020 2240 moveto 3020 2240 lineto stroke 3020 2240 moveto 3036 2248 moveto 3036 2248 lineto stroke 3036 2248 moveto 3056 2256 moveto 3056 2256 lineto stroke 3056 2256 moveto 3072 2260 moveto 3072 2260 lineto stroke 3072 2260 moveto 3092 2268 moveto 3092 2268 lineto stroke 3092 2268 moveto 3112 2272 moveto 3112 2272 lineto stroke 3112 2272 moveto 3132 2276 moveto 3132 2276 lineto stroke 3132 2276 moveto 3152 2280 moveto 3152 2280 lineto stroke 3152 2280 moveto 3172 2284 moveto 3172 2284 lineto stroke 3172 2284 moveto 3196 2280 moveto 3196 2280 lineto stroke 3196 2280 moveto 3216 2276 moveto 3216 2276 lineto stroke 3216 2276 moveto 3232 2268 moveto 3232 2268 lineto stroke 3232 2268 moveto 3248 2260 moveto 3248 2260 lineto stroke 3248 2260 moveto 3256 2244 moveto 3256 2244 lineto stroke 3256 2244 moveto 3260 2232 moveto 3260 2232 lineto stroke 3260 2232 moveto 3260 2216 moveto 3260 2216 lineto stroke 3260 2216 moveto 3256 2204 moveto 3256 2204 lineto stroke 3256 2204 moveto 3252 2188 moveto 3252 2188 lineto stroke 3252 2188 moveto 3240 2176 moveto 3240 2176 lineto stroke 3240 2176 moveto 3228 2164 moveto 3228 2164 lineto stroke 3228 2164 moveto 3212 2156 moveto 3212 2156 lineto stroke 3212 2156 moveto 3192 2148 moveto 3192 2148 lineto stroke 3192 2148 moveto 3176 2140 moveto 3176 2140 lineto stroke 3176 2140 moveto 3156 2136 moveto 3156 2136 lineto stroke 3156 2136 moveto 3132 2132 moveto 3132 2132 lineto stroke 3132 2132 moveto 3112 2132 moveto 3112 2132 lineto stroke 3112 2132 moveto 3092 2136 moveto 3092 2136 lineto stroke 3092 2136 moveto 3072 2136 moveto 3072 2136 lineto stroke 3072 2136 moveto 3052 2144 moveto 3052 2144 lineto stroke 3052 2144 moveto 3032 2148 moveto 3032 2148 lineto stroke 3032 2148 moveto 3016 2156 moveto 3016 2156 lineto stroke 3016 2156 moveto 3000 2168 moveto 3000 2168 lineto stroke 3000 2168 moveto 2984 2176 moveto 2984 2176 lineto stroke 2984 2176 moveto 2972 2188 moveto 2972 2188 lineto stroke 2972 2188 moveto 2964 2204 moveto 2964 2204 lineto stroke 2964 2204 moveto 2956 2216 moveto 2956 2216 lineto stroke 2956 2216 moveto 2956 2232 moveto 2956 2232 lineto stroke 2956 2232 moveto 2976 2236 moveto 2976 2236 lineto stroke 2976 2236 moveto 2988 2224 moveto 2988 2224 lineto stroke 2988 2224 moveto 1736 1964 moveto 1736 1964 lineto stroke 1736 1964 moveto 1712 1956 moveto 1712 1956 lineto stroke 1712 1956 moveto 1692 1948 moveto 1692 1948 lineto stroke 1692 1948 moveto 1672 1944 moveto 1672 1944 lineto stroke 1672 1944 moveto 1652 1936 moveto 1652 1936 lineto stroke 1652 1936 moveto 1632 1928 moveto 1632 1928 lineto stroke 1632 1928 moveto 1612 1920 moveto 1612 1920 lineto stroke 1612 1920 moveto 1592 1912 moveto 1592 1912 lineto stroke 1592 1912 moveto 1572 1904 moveto 1572 1904 lineto stroke 1572 1904 moveto 1552 1896 moveto 1552 1896 lineto stroke 1552 1896 moveto 1532 1888 moveto 1532 1888 lineto stroke 1532 1888 moveto 1512 1880 moveto 1512 1880 lineto stroke 1512 1880 moveto 1488 1872 moveto 1488 1872 lineto stroke 1488 1872 moveto 1468 1864 moveto 1468 1864 lineto stroke 1468 1864 moveto 1448 1856 moveto 1448 1856 lineto stroke 1448 1856 moveto 1428 1848 moveto 1428 1848 lineto stroke 1428 1848 moveto 1408 1840 moveto 1408 1840 lineto stroke 1408 1840 moveto 1388 1828 moveto 1388 1828 lineto stroke 1388 1828 moveto 1368 1816 moveto 1368 1816 lineto stroke 1368 1816 moveto 1356 1796 moveto 1356 1796 lineto stroke 1356 1796 moveto 1360 1784 moveto 1360 1784 lineto stroke 1360 1784 moveto 1372 1776 moveto 1372 1776 lineto stroke 1372 1776 moveto 1384 1772 moveto 1384 1772 lineto stroke 1384 1772 moveto 1396 1768 moveto 1396 1768 lineto stroke 1396 1768 moveto 1408 1764 moveto 1408 1764 lineto stroke 1408 1764 moveto 1424 1760 moveto 1424 1760 lineto stroke 1424 1760 moveto 1440 1760 moveto 1440 1760 lineto stroke 1440 1760 moveto 1456 1760 moveto 1456 1760 lineto stroke 1456 1760 moveto 1472 1760 moveto 1472 1760 lineto stroke 1472 1760 moveto 1488 1760 moveto 1488 1760 lineto stroke 1488 1760 moveto 1508 1764 moveto 1508 1764 lineto stroke 1508 1764 moveto 1524 1768 moveto 1524 1768 lineto stroke 1524 1768 moveto 1544 1776 moveto 1544 1776 lineto stroke 1544 1776 moveto 1568 1784 moveto 1568 1784 lineto stroke 1568 1784 moveto 1588 1792 moveto 1588 1792 lineto stroke 1588 1792 moveto 1608 1804 moveto 1608 1804 lineto stroke 1608 1804 moveto 1628 1816 moveto 1628 1816 lineto stroke 1628 1816 moveto 1648 1832 moveto 1648 1832 lineto stroke 1648 1832 moveto 1668 1848 moveto 1668 1848 lineto stroke 1668 1848 moveto 1684 1868 moveto 1684 1868 lineto stroke 1684 1868 moveto 1700 1888 moveto 1700 1888 lineto stroke 1700 1888 moveto 1716 1904 moveto 1716 1904 lineto stroke 1716 1904 moveto 1728 1924 moveto 1728 1924 lineto stroke 1728 1924 moveto 1740 1944 moveto 1740 1944 lineto stroke 1740 1944 moveto 1748 1960 moveto 1748 1960 lineto stroke 1748 1960 moveto 1756 1976 moveto 1756 1976 lineto stroke 1756 1976 moveto 1748 1988 moveto 1748 1988 lineto stroke 1748 1988 moveto 1732 1968 moveto 1732 1968 lineto stroke 1732 1968 moveto 2520 1240 moveto 2520 1240 lineto stroke 2520 1240 moveto 2512 1228 moveto 2512 1228 lineto stroke 2512 1228 moveto 2500 1216 moveto 2500 1216 lineto stroke 2500 1216 moveto 2488 1208 moveto 2488 1208 lineto stroke 2488 1208 moveto 2476 1196 moveto 2476 1196 lineto stroke 2476 1196 moveto 2464 1184 moveto 2464 1184 lineto stroke 2464 1184 moveto 2452 1176 moveto 2452 1176 lineto stroke 2452 1176 moveto 2444 1164 moveto 2444 1164 lineto stroke 2444 1164 moveto 2432 1152 moveto 2432 1152 lineto stroke 2432 1152 moveto 2424 1144 moveto 2424 1144 lineto stroke 2424 1144 moveto 2412 1132 moveto 2412 1132 lineto stroke 2412 1132 moveto 2404 1120 moveto 2404 1120 lineto stroke 2404 1120 moveto 2396 1112 moveto 2396 1112 lineto stroke 2396 1112 moveto 2388 1100 moveto 2388 1100 lineto stroke 2388 1100 moveto 2384 1092 moveto 2384 1092 lineto stroke 2384 1092 moveto 2376 1080 moveto 2376 1080 lineto stroke 2376 1080 moveto 2372 1072 moveto 2372 1072 lineto stroke 2372 1072 moveto 2368 1064 moveto 2368 1064 lineto stroke 2368 1064 moveto 2368 1052 moveto 2368 1052 lineto stroke 2368 1052 moveto 2368 1044 moveto 2368 1044 lineto stroke 2368 1044 moveto 2372 1036 moveto 2372 1036 lineto stroke 2372 1036 moveto 2380 1032 moveto 2380 1032 lineto stroke 2380 1032 moveto 2396 1028 moveto 2396 1028 lineto stroke 2396 1028 moveto 2420 1032 moveto 2420 1032 lineto stroke 2420 1032 moveto 2444 1040 moveto 2444 1040 lineto stroke 2444 1040 moveto 2464 1052 moveto 2464 1052 lineto stroke 2464 1052 moveto 2480 1064 moveto 2480 1064 lineto stroke 2480 1064 moveto 2492 1076 moveto 2492 1076 lineto stroke 2492 1076 moveto 2500 1084 moveto 2500 1084 lineto stroke 2500 1084 moveto 2504 1096 moveto 2504 1096 lineto stroke 2504 1096 moveto 2508 1104 moveto 2508 1104 lineto stroke 2508 1104 moveto 2512 1116 moveto 2512 1116 lineto stroke 2512 1116 moveto 2516 1124 moveto 2516 1124 lineto stroke 2516 1124 moveto 2516 1132 moveto 2516 1132 lineto stroke 2516 1132 moveto 2520 1140 moveto 2520 1140 lineto stroke 2520 1140 moveto 2520 1148 moveto 2520 1148 lineto stroke 2520 1148 moveto 2520 1156 moveto 2520 1156 lineto stroke 2520 1156 moveto 2520 1164 moveto 2520 1164 lineto stroke 2520 1164 moveto 2520 1176 moveto 2520 1176 lineto stroke 2520 1176 moveto 2516 1184 moveto 2516 1184 lineto stroke 2516 1184 moveto 2516 1192 moveto 2516 1192 lineto stroke 2516 1192 moveto 2516 1200 moveto 2516 1200 lineto stroke 2516 1200 moveto 2512 1208 moveto 2512 1208 lineto stroke 2512 1208 moveto 2512 1216 moveto 2512 1216 lineto stroke 2512 1216 moveto 2512 1224 moveto 2512 1224 lineto stroke 2512 1224 moveto 2512 1232 moveto 2512 1232 lineto stroke 2512 1232 moveto 2512 1240 moveto 2512 1240 lineto stroke 2512 1240 moveto 2512 1248 moveto 2512 1248 lineto stroke 2512 1248 moveto 2520 1248 moveto 2520 1248 lineto stroke 2520 1248 moveto 2524 1240 moveto 2524 1240 lineto stroke 2524 1240 moveto showpage auto/07p/doc/include/cir1.ps0000640000175000017500000003676613570013207013656 0ustar sksk%!PS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (T) 3750 320 PR (i) 3805 320 PR (m) 3860 320 PR (e) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR 760 340 moveto (0) 815 340 PR (.) 870 340 PR (1) 925 340 PR (0) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (0) 1135 460 PR (.) 1190 460 PR (2) 1245 460 PR (0) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (0) 1455 340 PR (.) 1510 340 PR (3) 1565 340 PR (0) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (0) 1775 460 PR (.) 1830 460 PR (4) 1885 460 PR (0) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (0) 2095 340 PR (.) 2150 340 PR (5) 2205 340 PR (0) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (0) 2415 460 PR (.) 2470 460 PR (6) 2525 460 PR (0) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (0) 2735 340 PR (.) 2790 340 PR (7) 2845 340 PR (0) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (0) 3055 460 PR (.) 3110 460 PR (8) 3165 460 PR (0) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (0) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 279 600 PR (0) 334 600 PR (.) 389 600 PR (7) 444 600 PR (5) 499 600 PR 4 932 moveto (-) 279 932 PR (0) 334 932 PR (.) 389 932 PR (5) 444 932 PR (0) 499 932 PR 540 932 moveto 600 932 lineto stroke 600 932 moveto 4 1264 moveto (-) 279 1264 PR (0) 334 1264 PR (.) 389 1264 PR (2) 444 1264 PR (5) 499 1264 PR 540 1264 moveto 600 1264 lineto stroke 600 1264 moveto 4 1600 moveto (0) 334 1600 PR (.) 389 1600 PR (0) 444 1600 PR (0) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1932 moveto (0) 334 1932 PR (.) 389 1932 PR (2) 444 1932 PR (5) 499 1932 PR 540 1932 moveto 600 1932 lineto stroke 600 1932 moveto 4 2264 moveto (0) 334 2264 PR (.) 389 2264 PR (5) 444 2264 PR (0) 499 2264 PR 540 2264 moveto 600 2264 lineto stroke 600 2264 moveto 4 2600 moveto (0) 334 2600 PR (.) 389 2600 PR (7) 444 2600 PR (5) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 1600 moveto 600 1600 lineto stroke 600 1600 moveto 600 1600 moveto 956 1600 lineto stroke 956 1600 moveto 1316 1600 lineto stroke 1316 1600 moveto 1676 1600 lineto stroke 1676 1600 moveto 2032 1600 lineto stroke 2032 1600 moveto 2084 1600 lineto stroke 2084 1600 moveto 2132 1600 lineto stroke 2132 1600 moveto 2180 1600 lineto stroke 2180 1600 moveto 2232 1600 lineto stroke 2232 1600 moveto 2248 1600 lineto stroke 2248 1600 moveto 2264 1600 lineto stroke 2264 1600 moveto 2280 1600 lineto stroke 2280 1600 moveto 2300 1600 lineto stroke 2300 1600 moveto 2308 1600 lineto stroke 2308 1600 moveto 2316 1600 lineto stroke 2316 1600 moveto 2328 1600 lineto stroke 2328 1600 moveto 2336 1600 lineto stroke 2336 1600 moveto 2348 1600 lineto stroke 2348 1600 moveto 2360 1608 lineto stroke 2360 1608 moveto 2368 1616 lineto stroke 2368 1616 moveto 2372 1632 lineto stroke 2372 1632 moveto 2376 1656 lineto stroke 2376 1656 moveto 2380 1700 lineto stroke 2380 1700 moveto 2384 1764 lineto stroke 2384 1764 moveto 2388 1848 lineto stroke 2388 1848 moveto 2396 1932 lineto stroke 2396 1932 moveto 2400 2028 lineto stroke 2400 2028 moveto 2408 2088 lineto stroke 2408 2088 moveto 2412 2104 lineto stroke 2412 2104 moveto 2416 2072 lineto stroke 2416 2072 moveto 2428 1964 lineto stroke 2428 1964 moveto 2436 1808 lineto stroke 2436 1808 moveto 2444 1628 lineto stroke 2444 1628 moveto 2452 1452 lineto stroke 2452 1452 moveto 2456 1312 lineto stroke 2456 1312 moveto 2464 1192 lineto stroke 2464 1192 moveto 2472 1096 lineto stroke 2472 1096 moveto 2480 1032 lineto stroke 2480 1032 moveto 2484 1008 lineto stroke 2484 1008 moveto 2488 1020 lineto stroke 2488 1020 moveto 2496 1060 lineto stroke 2496 1060 moveto 2500 1140 lineto stroke 2500 1140 moveto 2508 1240 lineto stroke 2508 1240 moveto 2512 1364 lineto stroke 2512 1364 moveto 2516 1504 lineto stroke 2516 1504 moveto 2520 1648 lineto stroke 2520 1648 moveto 2528 1776 lineto stroke 2528 1776 moveto 2532 1880 lineto stroke 2532 1880 moveto 2536 1948 lineto stroke 2536 1948 moveto 2544 1972 lineto stroke 2544 1972 moveto 2548 1956 lineto stroke 2548 1956 moveto 2556 1896 lineto stroke 2556 1896 moveto 2560 1796 lineto stroke 2560 1796 moveto 2568 1676 lineto stroke 2568 1676 moveto 2572 1548 lineto stroke 2572 1548 moveto 2580 1436 lineto stroke 2580 1436 moveto 2588 1356 lineto stroke 2588 1356 moveto 2592 1316 lineto stroke 2592 1316 moveto 2600 1320 lineto stroke 2600 1320 moveto 2604 1372 lineto stroke 2604 1372 moveto 2612 1456 lineto stroke 2612 1456 moveto 2620 1556 lineto stroke 2620 1556 moveto 2628 1668 lineto stroke 2628 1668 moveto 2632 1760 lineto stroke 2632 1760 moveto 2640 1816 lineto stroke 2640 1816 moveto 2648 1824 lineto stroke 2648 1824 moveto 2656 1780 lineto stroke 2656 1780 moveto 2664 1696 lineto stroke 2664 1696 moveto 2672 1592 lineto stroke 2672 1592 moveto 2680 1496 lineto stroke 2680 1496 moveto 2688 1432 lineto stroke 2688 1432 moveto 2700 1416 lineto stroke 2700 1416 moveto 2708 1448 lineto stroke 2708 1448 moveto 2716 1516 lineto stroke 2716 1516 moveto 2724 1596 lineto stroke 2724 1596 moveto 2732 1672 lineto stroke 2732 1672 moveto 2740 1728 lineto stroke 2740 1728 moveto 2748 1748 lineto stroke 2748 1748 moveto 2756 1732 lineto stroke 2756 1732 moveto 2764 1676 lineto stroke 2764 1676 moveto 2772 1600 lineto stroke 2772 1600 moveto 2784 1528 lineto stroke 2784 1528 moveto 2792 1480 lineto stroke 2792 1480 moveto 2800 1476 lineto stroke 2800 1476 moveto 2812 1508 lineto stroke 2812 1508 moveto 2820 1564 lineto stroke 2820 1564 moveto 2828 1628 lineto stroke 2828 1628 moveto 2836 1676 lineto stroke 2836 1676 moveto 2844 1700 lineto stroke 2844 1700 moveto 2856 1696 lineto stroke 2856 1696 moveto 2864 1664 lineto stroke 2864 1664 moveto 2872 1612 lineto stroke 2872 1612 moveto 2880 1556 lineto stroke 2880 1556 moveto 2892 1520 lineto stroke 2892 1520 moveto 2900 1512 lineto stroke 2900 1512 moveto 2912 1532 lineto stroke 2912 1532 moveto 2920 1576 lineto stroke 2920 1576 moveto 2932 1624 lineto stroke 2932 1624 moveto 2940 1664 lineto stroke 2940 1664 moveto 2952 1672 lineto stroke 2952 1672 moveto 2964 1648 lineto stroke 2964 1648 moveto 2972 1608 lineto stroke 2972 1608 moveto 2984 1560 lineto stroke 2984 1560 moveto 2996 1536 lineto stroke 2996 1536 moveto 3008 1544 lineto stroke 3008 1544 moveto 3020 1580 lineto stroke 3020 1580 moveto 3036 1632 lineto stroke 3036 1632 moveto 3052 1648 lineto stroke 3052 1648 moveto 3068 1624 lineto stroke 3068 1624 moveto 3084 1576 lineto stroke 3084 1576 moveto 3104 1556 lineto stroke 3104 1556 moveto 3124 1592 lineto stroke 3124 1592 moveto 3144 1632 lineto stroke 3144 1632 moveto 3168 1624 lineto stroke 3168 1624 moveto 3192 1576 lineto stroke 3192 1576 moveto 3216 1576 lineto stroke 3216 1576 moveto 3240 1612 lineto stroke 3240 1612 moveto 3264 1620 lineto stroke 3264 1620 moveto 3288 1588 lineto stroke 3288 1588 moveto 3316 1580 lineto stroke 3316 1580 moveto 3340 1604 lineto stroke 3340 1604 moveto 3364 1616 lineto stroke 3364 1616 moveto 3392 1592 lineto stroke 3392 1592 moveto 3416 1584 lineto stroke 3416 1584 moveto 3444 1600 lineto stroke 3444 1600 moveto 3468 1612 lineto stroke 3468 1612 moveto 3496 1592 lineto stroke 3496 1592 moveto 3524 1588 lineto stroke 3524 1588 moveto 3552 1604 lineto stroke 3552 1604 moveto 3576 1608 lineto stroke 3576 1608 moveto 3604 1592 lineto stroke 3604 1592 moveto 3632 1592 lineto stroke 3632 1592 moveto 3660 1604 lineto stroke 3660 1604 moveto 3688 1604 lineto stroke 3688 1604 moveto 3716 1592 lineto stroke 3716 1592 moveto 3744 1596 lineto stroke 3744 1596 moveto 3772 1604 lineto stroke 3772 1604 moveto 3800 1600 lineto stroke 3800 1600 moveto 600 1596 moveto 600 1596 lineto stroke 600 1596 moveto 600 1596 moveto 964 1600 lineto stroke 964 1600 moveto 1332 1596 lineto stroke 1332 1596 moveto 1700 1600 lineto stroke 1700 1600 moveto 2068 1596 lineto stroke 2068 1596 moveto 2120 1600 lineto stroke 2120 1600 moveto 2172 1596 lineto stroke 2172 1596 moveto 2224 1600 lineto stroke 2224 1600 moveto 2276 1596 lineto stroke 2276 1596 moveto 2292 1596 lineto stroke 2292 1596 moveto 2308 1596 lineto stroke 2308 1596 moveto 2324 1596 lineto stroke 2324 1596 moveto 2340 1596 lineto stroke 2340 1596 moveto 2348 1596 lineto stroke 2348 1596 moveto 2356 1596 lineto stroke 2356 1596 moveto 2364 1592 lineto stroke 2364 1592 moveto 2372 1588 lineto stroke 2372 1588 moveto 2380 1688 lineto stroke 2380 1688 moveto 2388 1968 lineto stroke 2388 1968 moveto 2400 2244 lineto stroke 2400 2244 moveto 2408 2332 lineto stroke 2408 2332 moveto 2424 2164 lineto stroke 2424 2164 moveto 2436 1804 lineto stroke 2436 1804 moveto 2448 1424 lineto stroke 2448 1424 moveto 2464 1092 lineto stroke 2464 1092 moveto 2476 904 lineto stroke 2476 904 moveto 2484 808 lineto stroke 2484 808 moveto 2496 860 lineto stroke 2496 860 moveto 2508 1080 lineto stroke 2508 1080 moveto 2520 1516 lineto stroke 2520 1516 moveto 2532 1984 lineto stroke 2532 1984 moveto 2544 2216 lineto stroke 2544 2216 moveto 2556 2124 lineto stroke 2556 2124 moveto 2564 1832 lineto stroke 2564 1832 moveto 2576 1440 lineto stroke 2576 1440 moveto 2588 1112 lineto stroke 2588 1112 moveto 2600 1028 lineto stroke 2600 1028 moveto 2608 1180 lineto stroke 2608 1180 moveto 2620 1496 lineto stroke 2620 1496 moveto 2632 1868 lineto stroke 2632 1868 moveto 2640 2116 lineto stroke 2640 2116 moveto 2652 2120 lineto stroke 2652 2120 moveto 2664 1912 lineto stroke 2664 1912 moveto 2672 1576 lineto stroke 2672 1576 moveto 2684 1236 lineto stroke 2684 1236 moveto 2696 1072 lineto stroke 2696 1072 moveto 2708 1144 lineto stroke 2708 1144 moveto 2716 1396 lineto stroke 2716 1396 moveto 2728 1748 lineto stroke 2728 1748 moveto 2740 2036 lineto stroke 2740 2036 moveto 2752 2116 lineto stroke 2752 2116 moveto 2760 1968 lineto stroke 2760 1968 moveto 2772 1660 lineto stroke 2772 1660 moveto 2784 1300 lineto stroke 2784 1300 moveto 2796 1092 lineto stroke 2796 1092 moveto 2808 1140 lineto stroke 2808 1140 moveto 2816 1396 lineto stroke 2816 1396 moveto 2828 1756 lineto stroke 2828 1756 moveto 2840 2044 lineto stroke 2840 2044 moveto 2852 2100 lineto stroke 2852 2100 moveto 2864 1924 lineto stroke 2864 1924 moveto 2872 1624 lineto stroke 2872 1624 moveto 2884 1304 lineto stroke 2884 1304 moveto 2896 1112 lineto stroke 2896 1112 moveto 2904 1128 lineto stroke 2904 1128 moveto 2916 1348 lineto stroke 2916 1348 moveto 2928 1684 lineto stroke 2928 1684 moveto 2940 1992 lineto stroke 2940 1992 moveto 2952 2104 lineto stroke 2952 2104 moveto 2960 1972 lineto stroke 2960 1972 moveto 2972 1668 lineto stroke 2972 1668 moveto 2984 1316 lineto stroke 2984 1316 moveto 2996 1104 lineto stroke 2996 1104 moveto 3008 1140 lineto stroke 3008 1140 moveto 3016 1364 lineto stroke 3016 1364 moveto 3028 1696 lineto stroke 3028 1696 moveto 3040 1996 lineto stroke 3040 1996 moveto 3052 2100 lineto stroke 3052 2100 moveto 3064 1956 lineto stroke 3064 1956 moveto 3076 1644 lineto stroke 3076 1644 moveto 3088 1292 lineto stroke 3088 1292 moveto 3096 1104 lineto stroke 3096 1104 moveto 3108 1160 lineto stroke 3108 1160 moveto 3120 1412 lineto stroke 3120 1412 moveto 3132 1760 lineto stroke 3132 1760 moveto 3144 2040 lineto stroke 3144 2040 moveto 3156 2088 lineto stroke 3156 2088 moveto 3164 1908 lineto stroke 3164 1908 moveto 3176 1580 lineto stroke 3176 1580 moveto 3188 1244 lineto stroke 3188 1244 moveto 3200 1092 lineto stroke 3200 1092 moveto 3212 1196 lineto stroke 3212 1196 moveto 3224 1488 lineto stroke 3224 1488 moveto 3236 1848 lineto stroke 3236 1848 moveto 3248 2080 lineto stroke 3248 2080 moveto 3260 2064 lineto stroke 3260 2064 moveto 3268 1824 lineto stroke 3268 1824 moveto 3280 1468 lineto stroke 3280 1468 moveto 3292 1172 lineto stroke 3292 1172 moveto 3304 1100 lineto stroke 3304 1100 moveto 3316 1268 lineto stroke 3316 1268 moveto 3328 1608 lineto stroke 3328 1608 moveto 3340 1948 lineto stroke 3340 1948 moveto 3352 2096 lineto stroke 3352 2096 moveto 3364 1988 lineto stroke 3364 1988 moveto 3376 1656 lineto stroke 3376 1656 moveto 3388 1284 lineto stroke 3388 1284 moveto 3400 1104 lineto stroke 3400 1104 moveto 3412 1220 lineto stroke 3412 1220 moveto 3428 1560 lineto stroke 3428 1560 moveto 3440 1928 lineto stroke 3440 1928 moveto 3452 2092 lineto stroke 3452 2092 moveto 3464 1964 lineto stroke 3464 1964 moveto 3476 1636 lineto stroke 3476 1636 moveto 3488 1284 lineto stroke 3488 1284 moveto 3500 1104 lineto stroke 3500 1104 moveto 3512 1200 lineto stroke 3512 1200 moveto 3524 1492 lineto stroke 3524 1492 moveto 3536 1844 lineto stroke 3536 1844 moveto 3548 2072 lineto stroke 3548 2072 moveto 3560 2048 lineto stroke 3560 2048 moveto 3572 1808 lineto stroke 3572 1808 moveto 3584 1460 lineto stroke 3584 1460 moveto 3596 1172 lineto stroke 3596 1172 moveto 3608 1108 lineto stroke 3608 1108 moveto 3620 1288 lineto stroke 3620 1288 moveto 3632 1616 lineto stroke 3632 1616 moveto 3640 1952 lineto stroke 3640 1952 moveto 3652 2100 lineto stroke 3652 2100 moveto 3664 1988 lineto stroke 3664 1988 moveto 3676 1684 lineto stroke 3676 1684 moveto 3688 1320 lineto stroke 3688 1320 moveto 3700 1108 lineto stroke 3700 1108 moveto 3712 1164 lineto stroke 3712 1164 moveto 3724 1444 lineto stroke 3724 1444 moveto 3736 1820 lineto stroke 3736 1820 moveto 3748 2076 lineto stroke 3748 2076 moveto 3760 2056 lineto stroke 3760 2056 moveto 3772 1796 lineto stroke 3772 1796 moveto 3784 1424 lineto stroke 3784 1424 moveto 3800 1140 lineto stroke 3800 1140 moveto 2264 1756 moveto 2248 1600 lineto stroke 2248 1600 moveto 2268 1776 moveto (6) 2268 1776 PR 2304 2316 moveto 2400 2244 lineto stroke 2400 2244 moveto 2256 2352 moveto (8) 2256 2352 PR 0 3068 moveto showpage auto/07p/doc/include/ab2.ps0000640000175000017500000005727613570013207013463 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 440 460 moveto (0) 495 460 PR (.) 550 460 PR (2) 605 460 PR (0) 660 460 PR 840 460 moveto (0) 895 460 PR (.) 950 460 PR (3) 1005 460 PR (0) 1060 460 PR 1000 540 moveto 1000 600 lineto stroke 1000 600 moveto 1240 460 moveto (0) 1295 460 PR (.) 1350 460 PR (4) 1405 460 PR (0) 1460 460 PR 1400 540 moveto 1400 600 lineto stroke 1400 600 moveto 1640 460 moveto (0) 1695 460 PR (.) 1750 460 PR (5) 1805 460 PR (0) 1860 460 PR 1800 540 moveto 1800 600 lineto stroke 1800 600 moveto 2040 460 moveto (0) 2095 460 PR (.) 2150 460 PR (6) 2205 460 PR (0) 2260 460 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2440 460 moveto (0) 2495 460 PR (.) 2550 460 PR (7) 2605 460 PR (0) 2660 460 PR 2600 540 moveto 2600 600 lineto stroke 2600 600 moveto 2840 460 moveto (0) 2895 460 PR (.) 2950 460 PR (8) 3005 460 PR (0) 3060 460 PR 3000 540 moveto 3000 600 lineto stroke 3000 600 moveto 3240 460 moveto (0) 3295 460 PR (.) 3350 460 PR (9) 3405 460 PR (0) 3460 460 PR 3400 540 moveto 3400 600 lineto stroke 3400 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (0) 444 600 PR (.) 499 600 PR 4 800 moveto (1) 444 800 PR (.) 499 800 PR 540 800 moveto 600 800 lineto stroke 600 800 moveto 4 1000 moveto (2) 444 1000 PR (.) 499 1000 PR 540 1000 moveto 600 1000 lineto stroke 600 1000 moveto 4 1200 moveto (3) 444 1200 PR (.) 499 1200 PR 540 1200 moveto 600 1200 lineto stroke 600 1200 moveto 4 1400 moveto (4) 444 1400 PR (.) 499 1400 PR 540 1400 moveto 600 1400 lineto stroke 600 1400 moveto 4 1600 moveto (5) 444 1600 PR (.) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1800 moveto (6) 444 1800 PR (.) 499 1800 PR 540 1800 moveto 600 1800 lineto stroke 600 1800 moveto 4 2000 moveto (7) 444 2000 PR (.) 499 2000 PR 540 2000 moveto 600 2000 lineto stroke 600 2000 moveto 4 2200 moveto (8) 444 2200 PR (.) 499 2200 PR 540 2200 moveto 600 2200 lineto stroke 600 2200 moveto 4 2400 moveto (9) 444 2400 PR (.) 499 2400 PR 540 2400 moveto 600 2400 lineto stroke 600 2400 moveto 4 2600 moveto (1) 389 2600 PR (0) 444 2600 PR (.) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3164 1648 moveto 3164 1648 lineto stroke 3164 1648 moveto 3164 1648 moveto 3184 1664 lineto stroke 3184 1664 moveto 3204 1676 lineto stroke 3204 1676 moveto 3224 1688 lineto stroke 3224 1688 moveto 3248 1704 lineto stroke 3248 1704 moveto 3272 1720 lineto stroke 3272 1720 moveto 3296 1732 lineto stroke 3296 1732 moveto 3324 1752 lineto stroke 3324 1752 moveto 3348 1768 lineto stroke 3348 1768 moveto 3376 1784 lineto stroke 3376 1784 moveto 3408 1804 lineto stroke 3408 1804 moveto 3436 1820 lineto stroke 3436 1820 moveto 3468 1840 lineto stroke 3468 1840 moveto 3488 1856 lineto stroke 3488 1856 moveto 3508 1868 lineto stroke 3508 1868 moveto 3532 1880 lineto stroke 3532 1880 moveto 3552 1892 lineto stroke 3552 1892 moveto 3572 1908 lineto stroke 3572 1908 moveto 3592 1920 lineto stroke 3592 1920 moveto 3608 1928 lineto stroke 3608 1928 moveto 3628 1940 lineto stroke 3628 1940 moveto 3644 1952 lineto stroke 3644 1952 moveto 3660 1960 lineto stroke 3660 1960 moveto 3676 1968 lineto stroke 3676 1968 moveto 3688 1976 lineto stroke 3688 1976 moveto 3700 1984 lineto stroke 3700 1984 moveto 3712 1988 lineto stroke 3712 1988 moveto 3724 1992 lineto stroke 3724 1992 moveto 3732 1996 lineto stroke 3732 1996 moveto 3744 2000 lineto stroke 3744 2000 moveto 3752 2000 lineto stroke 3752 2000 moveto 3760 2000 lineto stroke 3760 2000 moveto 3764 1996 lineto stroke 3764 1996 moveto 3764 1988 lineto stroke 3764 1988 moveto 3764 1976 lineto stroke 3764 1976 moveto 3764 1968 lineto stroke 3764 1968 moveto 3764 1960 lineto stroke 3764 1960 moveto 3760 1948 lineto stroke 3760 1948 moveto 3760 1940 lineto stroke 3760 1940 moveto 3760 1932 lineto stroke 3760 1932 moveto 3756 1920 lineto stroke 3756 1920 moveto 3756 1908 lineto stroke 3756 1908 moveto 3752 1900 lineto stroke 3752 1900 moveto 3752 1892 lineto stroke 3752 1892 moveto 3748 1884 lineto stroke 3748 1884 moveto 3748 1876 lineto stroke 3748 1876 moveto 3744 1860 lineto stroke 3744 1860 moveto 3740 1848 lineto stroke 3740 1848 moveto 3736 1836 lineto stroke 3736 1836 moveto 3736 1828 lineto stroke 3736 1828 moveto 3728 1808 lineto stroke 3728 1808 moveto 3724 1792 lineto stroke 3724 1792 moveto 3716 1772 lineto stroke 3716 1772 moveto 3708 1756 lineto stroke 3708 1756 moveto 3696 1724 lineto stroke 3696 1724 moveto 3680 1696 lineto stroke 3680 1696 moveto 3668 1672 lineto stroke 3668 1672 moveto 3652 1644 lineto stroke 3652 1644 moveto 3632 1620 lineto stroke 3632 1620 moveto 3616 1596 lineto stroke 3616 1596 moveto 3596 1572 lineto stroke 3596 1572 moveto 3576 1552 lineto stroke 3576 1552 moveto 3552 1528 lineto stroke 3552 1528 moveto 3528 1504 lineto stroke 3528 1504 moveto 3500 1484 lineto stroke 3500 1484 moveto 3472 1464 lineto stroke 3472 1464 moveto 3444 1440 lineto stroke 3444 1440 moveto 3408 1420 lineto stroke 3408 1420 moveto 3376 1400 lineto stroke 3376 1400 moveto 3344 1380 lineto stroke 3344 1380 moveto 3308 1364 lineto stroke 3308 1364 moveto 3268 1344 lineto stroke 3268 1344 moveto 3232 1328 lineto stroke 3232 1328 moveto 3192 1312 lineto stroke 3192 1312 moveto 3152 1296 lineto stroke 3152 1296 moveto 3108 1280 lineto stroke 3108 1280 moveto 3068 1264 lineto stroke 3068 1264 moveto 3028 1248 lineto stroke 3028 1248 moveto 2984 1236 lineto stroke 2984 1236 moveto 2940 1224 lineto stroke 2940 1224 moveto 2896 1208 lineto stroke 2896 1208 moveto 2852 1200 lineto stroke 2852 1200 moveto 2816 1188 lineto stroke 2816 1188 moveto 2784 1180 lineto stroke 2784 1180 moveto 2748 1172 lineto stroke 2748 1172 moveto 2716 1164 lineto stroke 2716 1164 moveto 2692 1160 lineto stroke 2692 1160 moveto 2664 1156 lineto stroke 2664 1156 moveto 2640 1152 lineto stroke 2640 1152 moveto 2616 1144 lineto stroke 2616 1144 moveto 2596 1144 lineto stroke 2596 1144 moveto 2576 1140 lineto stroke 2576 1140 moveto 2560 1136 lineto stroke 2560 1136 moveto 2540 1136 lineto stroke 2540 1136 moveto 2528 1132 lineto stroke 2528 1132 moveto 2512 1132 lineto stroke 2512 1132 moveto 2500 1132 lineto stroke 2500 1132 moveto 2488 1128 lineto stroke 2488 1128 moveto 2476 1128 lineto stroke 2476 1128 moveto 2464 1128 lineto stroke 2464 1128 moveto 2456 1128 lineto stroke 2456 1128 moveto 2448 1128 lineto stroke 2448 1128 moveto 2432 1128 lineto stroke 2432 1128 moveto 2424 1132 lineto stroke 2424 1132 moveto 2416 1136 lineto stroke 2416 1136 moveto 2408 1140 lineto stroke 2408 1140 moveto 2404 1148 lineto stroke 2404 1148 moveto 2408 1156 lineto stroke 2408 1156 moveto 2412 1164 lineto stroke 2412 1164 moveto 2420 1172 lineto stroke 2420 1172 moveto 2424 1180 lineto stroke 2424 1180 moveto 2436 1188 lineto stroke 2436 1188 moveto 2444 1196 lineto stroke 2444 1196 moveto 2456 1204 lineto stroke 2456 1204 moveto 2464 1212 lineto stroke 2464 1212 moveto 2472 1216 lineto stroke 2472 1216 moveto 2476 1220 lineto stroke 2476 1220 moveto 2484 1224 lineto stroke 2484 1224 moveto 2492 1232 lineto stroke 2492 1232 moveto 2500 1236 lineto stroke 2500 1236 moveto 2508 1240 lineto stroke 2508 1240 moveto 2516 1248 lineto stroke 2516 1248 moveto 2528 1252 lineto stroke 2528 1252 moveto 2536 1260 lineto stroke 2536 1260 moveto 2544 1264 lineto stroke 2544 1264 moveto 2556 1272 lineto stroke 2556 1272 moveto 2564 1276 lineto stroke 2564 1276 moveto 2572 1284 lineto stroke 2572 1284 moveto 2584 1292 lineto stroke 2584 1292 moveto 2596 1296 lineto stroke 2596 1296 moveto 2604 1304 lineto stroke 2604 1304 moveto 2616 1312 lineto stroke 2616 1312 moveto 2628 1316 lineto stroke 2628 1316 moveto 2640 1324 lineto stroke 2640 1324 moveto 2652 1332 lineto stroke 2652 1332 moveto 2664 1340 lineto stroke 2664 1340 moveto 2676 1348 lineto stroke 2676 1348 moveto 2692 1356 lineto stroke 2692 1356 moveto 2708 1368 lineto stroke 2708 1368 moveto 2720 1376 lineto stroke 2720 1376 moveto 2736 1384 lineto stroke 2736 1384 moveto 2752 1396 lineto stroke 2752 1396 moveto 2772 1404 lineto stroke 2772 1404 moveto 2788 1416 lineto stroke 2788 1416 moveto 2812 1432 lineto stroke 2812 1432 moveto 2832 1444 lineto stroke 2832 1444 moveto 2856 1460 lineto stroke 2856 1460 moveto 2876 1468 lineto stroke 2876 1468 moveto 2892 1480 lineto stroke 2892 1480 moveto 2916 1496 lineto stroke 2916 1496 moveto 2936 1508 lineto stroke 2936 1508 moveto 2956 1520 lineto stroke 2956 1520 moveto 2972 1532 lineto stroke 2972 1532 moveto 2992 1544 lineto stroke 2992 1544 moveto 3012 1556 lineto stroke 3012 1556 moveto 3028 1564 lineto stroke 3028 1564 moveto 3048 1576 lineto stroke 3048 1576 moveto 3064 1588 lineto stroke 3064 1588 moveto 3084 1600 lineto stroke 3084 1600 moveto 3104 1612 lineto stroke 3104 1612 moveto 3124 1624 lineto stroke 3124 1624 moveto 3144 1636 lineto stroke 3144 1636 moveto 3164 1648 lineto stroke 3164 1648 moveto 1932 1352 moveto 1932 1352 lineto stroke 1932 1352 moveto 1932 1352 moveto 1948 1364 lineto stroke 1948 1364 moveto 1968 1376 lineto stroke 1968 1376 moveto 1992 1388 lineto stroke 1992 1388 moveto 2012 1400 lineto stroke 2012 1400 moveto 2032 1412 lineto stroke 2032 1412 moveto 2052 1424 lineto stroke 2052 1424 moveto 2072 1436 lineto stroke 2072 1436 moveto 2096 1452 lineto stroke 2096 1452 moveto 2112 1464 lineto stroke 2112 1464 moveto 2132 1476 lineto stroke 2132 1476 moveto 2156 1488 lineto stroke 2156 1488 moveto 2176 1504 lineto stroke 2176 1504 moveto 2196 1516 lineto stroke 2196 1516 moveto 2216 1528 lineto stroke 2216 1528 moveto 2240 1540 lineto stroke 2240 1540 moveto 2264 1556 lineto stroke 2264 1556 moveto 2284 1568 lineto stroke 2284 1568 moveto 2304 1584 lineto stroke 2304 1584 moveto 2324 1596 lineto stroke 2324 1596 moveto 2348 1612 lineto stroke 2348 1612 moveto 2368 1624 lineto stroke 2368 1624 moveto 2388 1640 lineto stroke 2388 1640 moveto 2412 1652 lineto stroke 2412 1652 moveto 2436 1668 lineto stroke 2436 1668 moveto 2456 1680 lineto stroke 2456 1680 moveto 2476 1696 lineto stroke 2476 1696 moveto 2500 1712 lineto stroke 2500 1712 moveto 2524 1728 lineto stroke 2524 1728 moveto 2548 1740 lineto stroke 2548 1740 moveto 2568 1756 lineto stroke 2568 1756 moveto 2592 1772 lineto stroke 2592 1772 moveto 2616 1788 lineto stroke 2616 1788 moveto 2640 1804 lineto stroke 2640 1804 moveto 2664 1820 lineto stroke 2664 1820 moveto 2688 1836 lineto stroke 2688 1836 moveto 2712 1852 lineto stroke 2712 1852 moveto 2736 1868 lineto stroke 2736 1868 moveto 2764 1888 lineto stroke 2764 1888 moveto 2792 1904 lineto stroke 2792 1904 moveto 2820 1924 lineto stroke 2820 1924 moveto 2856 1948 lineto stroke 2856 1948 moveto 2892 1976 lineto stroke 2892 1976 moveto 2932 2004 lineto stroke 2932 2004 moveto 2980 2032 lineto stroke 2980 2032 moveto 3004 2052 lineto stroke 3004 2052 moveto 3032 2072 lineto stroke 3032 2072 moveto 3064 2092 lineto stroke 3064 2092 moveto 3092 2112 lineto stroke 3092 2112 moveto 3120 2128 lineto stroke 3120 2128 moveto 3144 2148 lineto stroke 3144 2148 moveto 3172 2164 lineto stroke 3172 2164 moveto 3200 2184 lineto stroke 3200 2184 moveto 3228 2204 lineto stroke 3228 2204 moveto 3256 2224 lineto stroke 3256 2224 moveto 3284 2244 lineto stroke 3284 2244 moveto 3316 2264 lineto stroke 3316 2264 moveto 3344 2284 lineto stroke 3344 2284 moveto 3376 2308 lineto stroke 3376 2308 moveto 3408 2328 lineto stroke 3408 2328 moveto 3444 2352 lineto stroke 3444 2352 moveto 3472 2372 lineto stroke 3472 2372 moveto 3500 2392 lineto stroke 3500 2392 moveto 3528 2412 lineto stroke 3528 2412 moveto 3556 2428 lineto stroke 3556 2428 moveto 3584 2448 lineto stroke 3584 2448 moveto 3612 2468 lineto stroke 3612 2468 moveto 3636 2484 lineto stroke 3636 2484 moveto 3660 2500 lineto stroke 3660 2500 moveto 3684 2516 lineto stroke 3684 2516 moveto 3704 2532 lineto stroke 3704 2532 moveto 3724 2544 lineto stroke 3724 2544 moveto 3736 2556 lineto stroke 3736 2556 moveto 3752 2564 lineto stroke 3752 2564 moveto 3764 2572 lineto stroke 3764 2572 moveto 3772 2576 lineto stroke 3772 2576 moveto 3776 2580 lineto stroke 3776 2580 moveto 3788 2588 lineto stroke 3788 2588 moveto 3796 2588 lineto stroke 3796 2588 moveto 3796 2528 lineto stroke 3796 2528 moveto 3796 2472 lineto stroke 3796 2472 moveto 3796 2420 lineto stroke 3796 2420 moveto 3792 2368 lineto stroke 3792 2368 moveto 3792 2268 lineto stroke 3792 2268 moveto 3784 2176 lineto stroke 3784 2176 moveto 3780 2096 lineto stroke 3780 2096 moveto 3772 2024 lineto stroke 3772 2024 moveto 3764 1960 lineto stroke 3764 1960 moveto 3752 1900 lineto stroke 3752 1900 moveto 3736 1844 lineto stroke 3736 1844 moveto 3720 1796 lineto stroke 3720 1796 moveto 3700 1744 lineto stroke 3700 1744 moveto 3676 1696 lineto stroke 3676 1696 moveto 3652 1652 lineto stroke 3652 1652 moveto 3624 1612 lineto stroke 3624 1612 moveto 3584 1564 lineto stroke 3584 1564 moveto 3540 1524 lineto stroke 3540 1524 moveto 3496 1484 lineto stroke 3496 1484 moveto 3448 1448 lineto stroke 3448 1448 moveto 3384 1408 lineto stroke 3384 1408 moveto 3316 1368 lineto stroke 3316 1368 moveto 3248 1336 lineto stroke 3248 1336 moveto 3176 1300 lineto stroke 3176 1300 moveto 3088 1264 lineto stroke 3088 1264 moveto 3000 1232 lineto stroke 3000 1232 moveto 2908 1200 lineto stroke 2908 1200 moveto 2816 1168 lineto stroke 2816 1168 moveto 2712 1136 lineto stroke 2712 1136 moveto 2604 1104 lineto stroke 2604 1104 moveto 2500 1076 lineto stroke 2500 1076 moveto 2392 1048 lineto stroke 2392 1048 moveto 2268 1016 lineto stroke 2268 1016 moveto 2144 988 lineto stroke 2144 988 moveto 2024 960 lineto stroke 2024 960 moveto 1912 936 lineto stroke 1912 936 moveto 1800 916 lineto stroke 1800 916 moveto 1696 896 lineto stroke 1696 896 moveto 1596 880 lineto stroke 1596 880 moveto 1508 868 lineto stroke 1508 868 moveto 1424 856 lineto stroke 1424 856 moveto 1348 848 lineto stroke 1348 848 moveto 1280 840 lineto stroke 1280 840 moveto 1220 836 lineto stroke 1220 836 moveto 1164 832 lineto stroke 1164 832 moveto 1116 832 lineto stroke 1116 832 moveto 1076 832 lineto stroke 1076 832 moveto 1044 832 lineto stroke 1044 832 moveto 1020 836 lineto stroke 1020 836 moveto 1004 840 lineto stroke 1004 840 moveto 988 844 lineto stroke 988 844 moveto 980 848 lineto stroke 980 848 moveto 976 856 lineto stroke 976 856 moveto 984 868 lineto stroke 984 868 moveto 988 872 lineto stroke 988 872 moveto 996 880 lineto stroke 996 880 moveto 1004 884 lineto stroke 1004 884 moveto 1016 892 lineto stroke 1016 892 moveto 1028 896 lineto stroke 1028 896 moveto 1040 900 lineto stroke 1040 900 moveto 1052 908 lineto stroke 1052 908 moveto 1064 916 lineto stroke 1064 916 moveto 1076 920 lineto stroke 1076 920 moveto 1092 928 lineto stroke 1092 928 moveto 1108 932 lineto stroke 1108 932 moveto 1124 940 lineto stroke 1124 940 moveto 1136 948 lineto stroke 1136 948 moveto 1152 952 lineto stroke 1152 952 moveto 1168 960 lineto stroke 1168 960 moveto 1184 968 lineto stroke 1184 968 moveto 1200 976 lineto stroke 1200 976 moveto 1216 980 lineto stroke 1216 980 moveto 1232 988 lineto stroke 1232 988 moveto 1252 996 lineto stroke 1252 996 moveto 1268 1004 lineto stroke 1268 1004 moveto 1284 1012 lineto stroke 1284 1012 moveto 1300 1020 lineto stroke 1300 1020 moveto 1320 1028 lineto stroke 1320 1028 moveto 1336 1036 lineto stroke 1336 1036 moveto 1352 1044 lineto stroke 1352 1044 moveto 1372 1052 lineto stroke 1372 1052 moveto 1392 1060 lineto stroke 1392 1060 moveto 1408 1068 lineto stroke 1408 1068 moveto 1424 1076 lineto stroke 1424 1076 moveto 1444 1088 lineto stroke 1444 1088 moveto 1464 1096 lineto stroke 1464 1096 moveto 1480 1104 lineto stroke 1480 1104 moveto 1500 1112 lineto stroke 1500 1112 moveto 1516 1124 lineto stroke 1516 1124 moveto 1540 1132 lineto stroke 1540 1132 moveto 1556 1144 lineto stroke 1556 1144 moveto 1576 1152 lineto stroke 1576 1152 moveto 1592 1164 lineto stroke 1592 1164 moveto 1616 1172 lineto stroke 1616 1172 moveto 1632 1184 lineto stroke 1632 1184 moveto 1652 1192 lineto stroke 1652 1192 moveto 1672 1204 lineto stroke 1672 1204 moveto 1692 1216 lineto stroke 1692 1216 moveto 1708 1224 lineto stroke 1708 1224 moveto 1728 1236 lineto stroke 1728 1236 moveto 1748 1248 lineto stroke 1748 1248 moveto 1772 1260 lineto stroke 1772 1260 moveto 1788 1268 lineto stroke 1788 1268 moveto 1808 1280 lineto stroke 1808 1280 moveto 1828 1292 lineto stroke 1828 1292 moveto 1852 1304 lineto stroke 1852 1304 moveto 1868 1316 lineto stroke 1868 1316 moveto 1888 1328 lineto stroke 1888 1328 moveto 1908 1340 lineto stroke 1908 1340 moveto 1932 1352 lineto stroke 1932 1352 moveto 1136 912 moveto 1136 912 lineto stroke 1136 912 moveto 1136 912 moveto 1148 912 lineto stroke 1148 912 moveto 1156 916 lineto stroke 1156 916 moveto 1168 920 lineto stroke 1168 920 moveto 1180 924 lineto stroke 1180 924 moveto 1188 928 lineto stroke 1188 928 moveto 1200 932 lineto stroke 1200 932 moveto 1208 932 lineto stroke 1208 932 moveto 1216 936 lineto stroke 1216 936 moveto 1228 940 lineto stroke 1228 940 moveto 1244 944 lineto stroke 1244 944 moveto 1256 948 lineto stroke 1256 948 moveto 1268 952 lineto stroke 1268 952 moveto 1280 960 lineto stroke 1280 960 moveto 1300 964 lineto stroke 1300 964 moveto 1312 968 lineto stroke 1312 968 moveto 1328 976 lineto stroke 1328 976 moveto 1344 984 lineto stroke 1344 984 moveto 1368 992 lineto stroke 1368 992 moveto 1384 996 lineto stroke 1384 996 moveto 1400 1004 lineto stroke 1400 1004 moveto 1420 1012 lineto stroke 1420 1012 moveto 1444 1024 lineto stroke 1444 1024 moveto 1464 1028 lineto stroke 1464 1028 moveto 1484 1040 lineto stroke 1484 1040 moveto 1508 1048 lineto stroke 1508 1048 moveto 1532 1060 lineto stroke 1532 1060 moveto 1556 1068 lineto stroke 1556 1068 moveto 1576 1080 lineto stroke 1576 1080 moveto 1600 1092 lineto stroke 1600 1092 moveto 1632 1104 lineto stroke 1632 1104 moveto 1652 1116 lineto stroke 1652 1116 moveto 1676 1128 lineto stroke 1676 1128 moveto 1704 1140 lineto stroke 1704 1140 moveto 1736 1156 lineto stroke 1736 1156 moveto 1756 1168 lineto stroke 1756 1168 moveto 1784 1180 lineto stroke 1784 1180 moveto 1812 1196 lineto stroke 1812 1196 moveto 1844 1212 lineto stroke 1844 1212 moveto 1868 1224 lineto stroke 1868 1224 moveto 1896 1240 lineto stroke 1896 1240 moveto 1924 1256 lineto stroke 1924 1256 moveto 1956 1272 lineto stroke 1956 1272 moveto 1984 1288 lineto stroke 1984 1288 moveto 2012 1304 lineto stroke 2012 1304 moveto 2040 1320 lineto stroke 2040 1320 moveto 2076 1340 lineto stroke 2076 1340 moveto 2100 1356 lineto stroke 2100 1356 moveto 2132 1372 lineto stroke 2132 1372 moveto 2160 1392 lineto stroke 2160 1392 moveto 2196 1412 lineto stroke 2196 1412 moveto 2224 1428 lineto stroke 2224 1428 moveto 2252 1444 lineto stroke 2252 1444 moveto 2284 1464 lineto stroke 2284 1464 moveto 2320 1484 lineto stroke 2320 1484 moveto 2344 1504 lineto stroke 2344 1504 moveto 2376 1520 lineto stroke 2376 1520 moveto 2408 1540 lineto stroke 2408 1540 moveto 2444 1564 lineto stroke 2444 1564 moveto 2468 1580 lineto stroke 2468 1580 moveto 2500 1600 lineto stroke 2500 1600 moveto 2532 1620 lineto stroke 2532 1620 moveto 2568 1644 lineto stroke 2568 1644 moveto 2596 1660 lineto stroke 2596 1660 moveto 2628 1684 lineto stroke 2628 1684 moveto 2664 1708 lineto stroke 2664 1708 moveto 2704 1732 lineto stroke 2704 1732 moveto 2740 1756 lineto stroke 2740 1756 moveto 2776 1780 lineto stroke 2776 1780 moveto 2820 1808 lineto stroke 2820 1808 moveto 2868 1840 lineto stroke 2868 1840 moveto 2892 1856 lineto stroke 2892 1856 moveto 2924 1876 lineto stroke 2924 1876 moveto 2956 1896 lineto stroke 2956 1896 moveto 2988 1920 lineto stroke 2988 1920 moveto 3020 1940 lineto stroke 3020 1940 moveto 3056 1964 lineto stroke 3056 1964 moveto 3092 1988 lineto stroke 3092 1988 moveto 3132 2016 lineto stroke 3132 2016 moveto 3164 2040 lineto stroke 3164 2040 moveto 3200 2064 lineto stroke 3200 2064 moveto 3240 2088 lineto stroke 3240 2088 moveto 3280 2116 lineto stroke 3280 2116 moveto 3332 2152 lineto stroke 3332 2152 moveto 3388 2188 lineto stroke 3388 2188 moveto 3444 2228 lineto stroke 3444 2228 moveto 3504 2268 lineto stroke 3504 2268 moveto 3616 2348 lineto stroke 3616 2348 moveto 3708 2408 lineto stroke 3708 2408 moveto 3760 2440 lineto stroke 3760 2440 moveto 3780 2456 lineto stroke 3780 2456 moveto 3796 2408 lineto stroke 3796 2408 moveto 3788 2348 lineto stroke 3788 2348 moveto 3792 2300 lineto stroke 3792 2300 moveto 3784 2244 lineto stroke 3784 2244 moveto 3780 2116 lineto stroke 3780 2116 moveto 3764 2000 lineto stroke 3764 2000 moveto 3748 1904 lineto stroke 3748 1904 moveto 3724 1820 lineto stroke 3724 1820 moveto 3672 1704 lineto stroke 3672 1704 moveto 3604 1604 lineto stroke 3604 1604 moveto 3524 1520 lineto stroke 3524 1520 moveto 3428 1444 lineto stroke 3428 1444 moveto 3312 1372 lineto stroke 3312 1372 moveto 3184 1304 lineto stroke 3184 1304 moveto 3044 1240 lineto stroke 3044 1240 moveto 2892 1180 lineto stroke 2892 1180 moveto 2720 1116 lineto stroke 2720 1116 moveto 2540 1056 lineto stroke 2540 1056 moveto 2356 1000 lineto stroke 2356 1000 moveto 2180 952 lineto stroke 2180 952 moveto 1956 896 lineto stroke 1956 896 moveto 1748 852 lineto stroke 1748 852 moveto 1564 820 lineto stroke 1564 820 moveto 1400 796 lineto stroke 1400 796 moveto 1236 780 lineto stroke 1236 780 moveto 1104 768 lineto stroke 1104 768 moveto 992 760 lineto stroke 992 760 moveto 904 760 lineto stroke 904 760 moveto 804 760 lineto stroke 804 760 moveto 736 764 lineto stroke 736 764 moveto 692 772 lineto stroke 692 772 moveto 668 780 lineto stroke 668 780 moveto 660 788 lineto stroke 660 788 moveto 668 800 lineto stroke 668 800 moveto 688 812 lineto stroke 688 812 moveto 712 820 lineto stroke 712 820 moveto 756 832 lineto stroke 756 832 moveto 800 844 lineto stroke 800 844 moveto 844 856 lineto stroke 844 856 moveto 884 864 lineto stroke 884 864 moveto 952 876 lineto stroke 952 876 moveto 1004 888 lineto stroke 1004 888 moveto 1040 892 lineto stroke 1040 892 moveto 1068 900 lineto stroke 1068 900 moveto 1100 904 lineto stroke 1100 904 moveto 1116 908 lineto stroke 1116 908 moveto 1124 908 lineto stroke 1124 908 moveto 1140 912 lineto stroke 1140 912 moveto 3316 1888 moveto 3376 1784 lineto stroke 3376 1784 moveto 3308 1904 moveto (6) 3308 1904 PR 2268 1744 moveto 2324 1596 lineto stroke 2324 1596 moveto 2260 1764 moveto (7) 2260 1764 PR 1340 1168 moveto 1312 968 lineto stroke 1312 968 moveto 1300 1188 moveto (1) 1300 1188 PR (0) 1355 1188 PR 0 3068 moveto showpage auto/07p/doc/include/fnc_canards3.eps0000640000175000017500000012121013570013207015464 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -12 -8 528 424 %%HiResBoundingBox: -12.277977 -8.937006 527.722023 423.062994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmpL-l2rL.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 540 432 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font MVVWGH+CMMI12 %!FontType1-1.0: MVVWGH+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /MVVWGH+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -10 457 441] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put dup 115 /s put dup 118 /v put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F40 586391EA9A2414C5CD9EE00D483839FC635AD0D52D643D652F74F041D36A563E 1F56922A8B1764174106A1C5AE5CBF55A318CB60C637EC2D5C88BD00DB9BF961 B96F0B7012AD9169A96092698E8A3011CE963A65F4D362343F71084AFBE9A9E5 4C1B6B64FC7FABF7E631810B6F00DC39F68269DCCED25AA14ED8E38BB54AE733 B48E950EE2ADECB769B107473514572B5DFD404D8E6B2DB619A52904C916A848 F650570C4F5E16DC904727623D2C1A50FC51D3A31AE11A89708097DA2251683C A8040751E06BC2DDE7E42E90A38CFC8655746B7B34D6FDF85A4BAF98D83CD82F 0E64338282B717606331D487D502D3D3103B321D40F93CB247892D4022543348 F60D0CCAE7BD9A9E801AEBFD6FEC833DB7A27F9DD844A007C0E453A7F36484AC 79944C0365B4C67087AA35F1AA4D4F0A36536875A51A85205CA1082094D6C56C C4A845EF6F36B38CED8262286743DFE727047BF5009017C577C1A99BBD3C825D D2D139602AB0E05145F60988CE04712236246A3E70DD5A419B69B0E173167CF0 2560B7CCC0D95F710DC8AB5927A7C13FE0B510E3319605223A4880EA52269078 22782D7E6FF6F27839A79D7FFBA8C0BE9FF44644010057D6BBEBDD76DD6258E2 642EB8FEF97069A6555555A83F2A4FA937BE3C002AC7079FD51B7F40F9565D3A 2E445FD2FE169F475DA41032677B3D65CAC4A7BAB21B40482890AFAD16BED8C6 AAE6B208405298A95AA1DAC10E0AE693D78883DBDE580E22D2F42CEE328A95DE 78122BBA9D52897D652E03B74CD06FFC 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /MVVWGH+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font XSTBFC+CMR12 %!FontType1-1.0: XSTBFC+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /XSTBFC+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA3238AF3EFFD3873EDB9D6 67A8FAFE3D0CEE9145957731453B5E20FC4D3BA4DEB725B8264148A3DBFC6C3C 33E93BEC610344F1E09F358AF50B03111DFBD6F0D1A1FADC2A2BFF62B63CF397 27F04F52C38C4FF79DE1D06B91B5070DB95ADD2E49B5CA22CA82F41A57D25913 AA52DF5AB2ED54764EEB7C57E642EB4CDF404F4657364FCAF0829B5F8E08FC34 DED12416A7F8180C016AA84B917468BECD0A9BCC6A9907B125B4930BFEAA8716 3252ECFC5864EBA3614A720FF7B6E71BCA38DA1AA00D3B9483AFF5253B2230EF 98A726411B4C36745DC7A159323F52D7B27FA83A69C4A5A921557CC0EBF368AB 271B171E2599EEC2AB1299D97E99A9C5A65D661FB8A8F4CB1CCF51C615E45F38 72D83A97BE1482A1410CC2E751B6AFC4F07E6CEBAF583BA30753974A9A384884 E3BBE070072D342B2756B5FA5E08E65FBC756A7F96D5D3B45C2B91FF497038F8 50AA2B2DC0EF0C31CA55D5FD6B4461EA57F028E8A11C860F8A61A3F34115B76F 2DE0D3FE1235F7FA5541C66F504AFFD71CCBDF231CED7DB24926CF633EC5A00D 41242897AFE363F09E239477B0B020212F3D6766E9076CAC93662368B2B2D683 9E419C5F420DD494415C7160C1D205EBA13E0AD27192B2C7CFA7D7A6CD0ED03C F45D9A4FB2826A6AF3CDFEC910F4A2F8D97655EFDC06C46CF2C02F01F3B2DAF2 9DC8169843C8E2C3F3BB33C3BE9F8E20E4FEF65527EA44920BA2D20C0AEF74C5 18226EBA29A30B79BD030AA5E2EBCC66CC4A41E0528D809035CDE8A47BA5FA67 5106B2207FC6E3743DE46DEC654286FA6DE37A905BB837A80757B39338F3A4D6 A8068A57F7F396482ED4B022A8C8871CC0B71464C962B2B6E73CC37B1E5F49C2 937B51DFC1E9DF80C5B56A5152C78C6928C016BE770AA28154E89FCD056A8FA1 2BE337B1096EC4877ADBB848B349F3DD076AE5D6B93E0D5A44B2EBD285F27143 3FA4F5D9D9A9C01618B2D0A25C3A6553556824221E0439132F15862AAF9294E6 6C3A85C2F659B25B4EB1BEC1FF787F99C3BB2BE08FD449A7001A81A1BF591181 D697D8C348AB31676A4D25ED188DCEA687056B4524EA51FB538D23E8AC250FCF A989561C37DB735A27C375467D2CA492D054CA95F79AF1D7BBD2772831761279 D8D4BC927C291D359896D56E2A50570EF3C65079CC751D19E1A87AEF122998B7 1D5E00B3F2831B8F9633B22491D19E6737A38B703B224D238FAB717750189F3C BF429CF4F29697679F215B58162008E5E9106D34CD44EC358B26E65D331923AC DD64DF666BE713DF3B84C402CA061D32F5AA74D48DB34B0B53B68A7BC6BFED7B 1162714690F726294DF7EC23024E699C4929FB082385B38CE06E127F71AB14E5 353BE765DE906DEBBB04FCE95C5F04CF7C122938D935C742C7508C9F46C3DA0C 668AC64A455AE891BA9F3CC66E8383FC9E1FF31E2561E3E645C990E89889859D 19FAC5916FF89120289A015CDE7FB9D68748805360609555034C14415B17C4B1 518FBCD89EC0A75D1EC7E424AD25DA1B1672C2F67583F24568E83C08D168B925 EBE2EE5999362D9D9D2693667A41426E23964783EF87B6482C68E52705434537 85C33D3157A7F53555564EA407908C986B05EB58DADF2B359672149B17C79D94 CF78D54B32C144A65A97C1475F055317AD8ACFB96F695C3A6C4F18ADEFEB22A9 E4441C54269B02F28C3EB608B37493A6907DC8FD5BB39143AA0DAF9B4F4179DC B2ECB938EF1A0A0539473C5F9E3DCF332E02C78CD9B5914BB2236438215F516D AFA0856AFE7375F00B0754CC5E490505EE014050C382674DF9ED5E150BCB5D01 FCD56581A4B9D199DD81423F393317D170C1CF98EF40F4357890A9D55A09A936 CE8433F9BA828212CE4508A22ED38DC51A11D3F6256C6621030684B05C8E6A97 ACE3482DEDE3938B4A572064F96216579FE82A1943EE8D07069DBFB0FB8220BD F5730759B722712E8900A0CD7C8DDF08A66A0CABD6147CC1E00AC8048F85D0C3 563F9385D8E93C91DC7FC9631CE01DA924FF3D51539C2E089FEACE7DC5D416DA BCC9492F37075D6728E87D89AA976F9130D476652A09B1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /XSTBFC+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 540 432 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 540 432 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 540 432 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5400 4320 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5400 4320 re S 675 432 4185 3456 re f q 675 432 4185 3456 re W 20 w /DeviceGray {} CS [0] SC 3166.3 0 m 2838.65 814.41 l 2618.79 1377.47 l 2445.59 1838.85 l 2305.89 2229.9 l 2300.76 2244.7 l 2300.76 2244.7 l S /DeviceRGB {} CS [1 0 0] SC 3524.24 0 m 3163.4 785.73 l 2915.7 1340.43 l 2725.59 1781.7 l 2568.13 2163.7 l 2431.98 2511.69 l 2304.35 2855.67 l 2304.35 2855.67 l S /DeviceRGB {} CS [0 0 1] SC 3889.92 0 m 3502.04 749.945 l 3229.15 1291.31 l 3014.6 1731.33 l 2840.99 2101.93 l 2688.21 2443.51 l 2533.09 2807.39 l 2411.41 3089.28 l 2373.05 3165.07 l 2343.63 3210.96 l 2323.66 3232.42 l 2302.19 3243.1 l 2302.19 3243.1 l S /DeviceRGB {} CS [0 0.5019 0] SC 4262.63 0 m 3847.34 720.961 l 3552.22 1245.65 l 3319.83 1671.45 l 3126.4 2038.96 l 2954.22 2380.09 l 2776.5 2748.01 l 2633.91 3040.97 l 2586.09 3126.89 l 2554 3174.66 l 2533.09 3199.05 l 2510.43 3217.23 l 2487.6 3224.43 l 2477.38 3223.34 l 2465.66 3218.41 l 2445.06 3199.51 l 2423.42 3165.36 l 2395.96 3103.92 l 2335.8 2956.82 l 2313.8 2922.61 l 2302.38 2911.49 l 2302.38 2911.49 l S /DeviceGray {} CS [0.5019] SC 4644.23 0 m 4190.55 713.609 l 3868.98 1231.16 l 3610.41 1659.53 l 3392.95 2032.67 l 3205.38 2367.45 l 3000.04 2748.42 l 2862.62 3000.08 l 2798.22 3104.32 l 2759.6 3155.77 l 2723.37 3191.3 l 2701.98 3204.27 l 2677.63 3209.9 l 2655.83 3205.31 l 2635.35 3191.9 l 2614.99 3169.66 l 2590.73 3132.69 l 2548.01 3051.31 l 2515.23 2992.13 l 2490.98 2959.58 l 2468.53 2941.06 l 2445.9 2933.97 l 2422.49 2937.57 l 2399.2 2950.09 l 2365.45 2979.35 l 2304.02 3047.54 l 2304.02 3047.54 l S /DeviceRGB {} CS [1 0.6465 0] SC 5035.28 0 m 4548.16 699.121 l 4192.31 1221.27 l 3906.72 1652.32 l 3678.55 2008.23 l 3467.21 2350.07 l 3217.82 2767.86 l 3089.67 2977.68 l 3028.92 3067.47 l 2982.56 3126.38 l 2946.98 3162.57 l 2919.95 3182.87 l 2896.72 3194.09 l 2875.27 3198.49 l 2855.1 3196.78 l 2828.66 3185.34 l 2807.41 3168.54 l 2777.46 3134.56 l 2731.74 3068.57 l 2687.89 3008.48 l 2666.03 2986.08 l 2642.94 2970.05 l 2619.07 2962.1 l 2595.33 2962.32 l 2572.8 2968.94 l 2536.42 2989.59 l 2484.03 3031.38 l 2428.61 3076.2 l 2393.26 3097.51 l 2372.57 3105.24 l 2346.53 3108.54 l 2320.73 3103.78 l 2307.41 3098.09 l 2307.41 3098.09 l S /DeviceGray {} CS [0] SC 2300.76 2244.81 m 2184.91 2589.42 l 2066.55 2963.94 l 1989.98 3199.69 l 1964.15 3262.47 l 1944.08 3294.9 l 1933.71 3302.77 l 1921.5 3301.36 l 1911.46 3289.47 l 1899.6 3260.46 l 1884.94 3199.51 l 1864.96 3075.41 l 1830.24 2847.84 l 1819.66 2805.72 l 1808.34 2780.22 l 1795.34 2772.86 l 1784.82 2780.43 l 1769.91 2806.01 l 1747.39 2865.57 l 1711.66 2985.75 l 1646.75 3209.04 l 1627.93 3250.59 l 1615.36 3261.59 l 1604.55 3254.68 l 1592.88 3224.59 l 1579.72 3157.16 l 1563.13 3026.72 l 1537.87 2828.99 l 1528.18 2787.6 l 1523.65 2776.5 l 1511.53 2769.56 l 1503 2780.55 l 1491.42 2810.19 l 1470.62 2889.78 l 1435.27 3061.4 l 1395.15 3256.41 l 1380.14 3302.04 l 1368.03 3305.39 l 1359.95 3279.51 l 1350.02 3204.61 l 1337.95 3045.4 l 1315.96 2746.8 l 1307.42 2702.9 l 1297.16 2702.41 l 1287.89 2733.29 l 1271.83 2823.27 l 1245.1 3020.38 l 1211.46 3320.17 l 1178.52 3677.57 l 1159.47 3870.99 l 1157.43 3881.44 l 1157.43 3881.44 l S /DeviceRGB {} CS [1 0 0] SC 2300.76 2865.52 m 2202.36 3127.76 l 2168.94 3202.79 l 2143.51 3245.91 l 2121.43 3266.52 l 2111.25 3268.61 l 2098.18 3262.62 l 2086.16 3247.12 l 2071.33 3213.17 l 2056.31 3161.73 l 2031.38 3047.15 l 2000.5 2905.05 l 1986.53 2860.8 l 1973.28 2835.12 l 1962.91 2825.69 l 1951.64 2824.79 l 1938.81 2833.58 l 1919.88 2860.8 l 1891.57 2921.71 l 1843.35 3048.92 l 1799.65 3156.71 l 1784.64 3183.65 l 1775.52 3195.34 l 1763.4 3203.58 l 1752.59 3202.08 l 1739.84 3187.13 l 1724.34 3146.92 l 1708.63 3081.98 l 1664.16 2874.28 l 1653.41 2848.82 l 1642.16 2837.48 l 1629.47 2841.34 l 1617.51 2857.84 l 1597.54 2904.84 l 1569.62 2993.68 l 1517.8 3164.12 l 1503.7 3193.76 l 1491.69 3204.13 l 1481.64 3197.5 l 1470.6 3169.28 l 1457.83 3105.6 l 1436.32 2946.33 l 1419.23 2840.93 l 1411.57 2815.55 l 1403.3 2804.59 l 1390.84 2815.22 l 1379.82 2844.62 l 1360.23 2925.03 l 1323.62 3116.49 l 1299.06 3233.8 l 1290.13 3260.14 l 1278.53 3264.07 l 1270.91 3237.26 l 1261.59 3160.86 l 1248.84 2982.12 l 1232.79 2769.83 l 1225.28 2727.76 l 1214.39 2729.12 l 1204.16 2772.73 l 1189.2 2873.75 l 1164.01 3092.34 l 1134.04 3409.51 l 1092.61 3887.24 l 1092.61 3887.24 l S /DeviceRGB {} CS [0 0 1] SC 2300.76 3243.37 m 2288.83 3241.68 l 2277 3234.16 l 2266.45 3222.1 l 2246.21 3184.01 l 2226.7 3129.72 l 2150.81 2895.45 l 2142.15 2882.19 l 2128.99 2869.93 l 2116.39 2866.46 l 2102.81 2870.59 l 2076.57 2896.41 l 2046.09 2945.69 l 1988.26 3060.57 l 1951.78 3126.03 l 1930.88 3152.78 l 1918.94 3162.28 l 1907.93 3166.22 l 1897.83 3165.06 l 1884.1 3155.11 l 1867.3 3128.65 l 1844.74 3069.9 l 1795.73 2922.38 l 1777.95 2894.47 l 1767.08 2887.82 l 1755.46 2888.92 l 1742.47 2898.85 l 1722.34 2928.34 l 1691.09 2994.91 l 1639.52 3111.48 l 1617.91 3141.43 l 1605.77 3146.87 l 1595 3142.29 l 1578.93 3115.77 l 1563.48 3067.47 l 1515.28 2888.22 l 1507.01 2875.72 l 1496.06 2871.52 l 1483.09 2882.69 l 1468.13 2912.43 l 1447.79 2971.57 l 1393.03 3144.4 l 1386.36 3156.14 l 1374.78 3163.66 l 1365.1 3153.06 l 1356.49 3127.48 l 1343.12 3056.27 l 1308.85 2844.97 l 1303.25 2832.31 l 1292.79 2830.55 l 1279.92 2859.64 l 1263.88 2926.95 l 1233.62 3095 l 1210.22 3212.13 l 1206.05 3225.06 l 1198.34 3235.62 l 1191.87 3225.51 l 1183.82 3179.03 l 1173.88 3061.22 l 1150.29 2755.41 l 1146.7 2742.19 l 1136.23 2753.74 l 1124.64 2821.15 l 1107.38 2971.24 l 1081.86 3250.86 l 1053.93 3633.52 l 1035.19 3881.11 l 1035.19 3881.11 l S /DeviceRGB {} CS [0 0.5019 0] SC 2300.76 2910.36 m 2289 2904.29 l 2277.33 2902.68 l 2263.09 2906.04 l 2248.98 2914.32 l 2217.73 2945.85 l 2170.91 3012.22 l 2114.11 3094.61 l 2084.21 3126.07 l 2060.15 3139 l 2049.32 3140.01 l 2038.57 3137.59 l 2027.63 3131.36 l 2005.4 3106.65 l 1984.6 3070.47 l 1928.58 2958.47 l 1918.79 2945.1 l 1905.02 2932.21 l 1890.33 2926.45 l 1880.28 2927.09 l 1867.44 2932.82 l 1854.73 2943.18 l 1824.23 2981.93 l 1743.99 3098.96 l 1729.86 3108.52 l 1716.77 3110.76 l 1704.27 3105.79 l 1683.46 3080.52 l 1660.1 3030.01 l 1623.71 2944.98 l 1605.29 2921.97 l 1593.75 2918.01 l 1580.76 2922.9 l 1570.66 2932.7 l 1548.42 2968.27 l 1481.18 3099.32 l 1470.93 3107.45 l 1458.52 3106.84 l 1446.68 3093.23 l 1434.92 3066.12 l 1415.78 2999.36 l 1392.1 2918.28 l 1378.99 2895.62 l 1367.48 2893.39 l 1357.32 2904 l 1342.79 2935.32 l 1320.54 3005.82 l 1287.64 3111.48 l 1281.23 3124.49 l 1269.54 3133.63 l 1259.52 3120.52 l 1251.59 3093.1 l 1236.72 3003.74 l 1214.22 2865.54 l 1210.69 2854.69 l 1199.12 2846.52 l 1191.56 2861.03 l 1178.8 2910.88 l 1158.84 3025 l 1132.48 3179.22 l 1123.07 3207.93 l 1113.63 3196.64 l 1106.68 3147.95 l 1096.54 3007.35 l 1080.83 2782.34 l 1076.52 2758.31 l 1065.38 2772.71 l 1055.06 2846.37 l 1036.84 3039.31 l 1012.37 3371.82 l 979.301 3887.16 l 979.301 3887.16 l S /DeviceGray {} CS [0.5019] SC 2300.76 3050.6 m 2282.63 3070.14 l 2264.7 3087.64 l 2234.91 3110.23 l 2207.72 3120.65 l 2193.69 3121.16 l 2179.8 3117.99 l 2152.64 3100.76 l 2128.26 3073.99 l 2055.17 2977.96 l 2029.95 2960.71 l 2015.41 2957.22 l 2001.04 2958.32 l 1983.51 2965.2 l 1948.07 2993.25 l 1871.14 3071.42 l 1848.35 3084.58 l 1826.07 3086.89 l 1803.31 3075.99 l 1782 3053.64 l 1710.95 2959.51 l 1695.39 2952.4 l 1684.22 2952.26 l 1671.73 2956.77 l 1657.96 2966.78 l 1628.36 3000.92 l 1586.4 3055.66 l 1572.52 3068.41 l 1559.88 3074.96 l 1547.42 3075.27 l 1535.13 3068.56 l 1515.45 3042.89 l 1463.81 2945.78 l 1452.77 2936.64 l 1440.21 2935.5 l 1425.7 2945.87 l 1404.63 2978.22 l 1351.05 3075.97 l 1339.3 3081.79 l 1328.05 3075.43 l 1314.24 3049.23 l 1294.21 2982.99 l 1274.28 2921.82 l 1266.47 2909.51 l 1254.37 2907.57 l 1243.34 2922.68 l 1224.2 2976.31 l 1186.01 3100.56 l 1177.43 3110.6 l 1166.55 3099.43 l 1159.22 3072.94 l 1144.58 2979.38 l 1128.62 2878.93 l 1119.69 2857.4 l 1108.79 2870.84 l 1097.54 2919.06 l 1078.05 3045.17 l 1056.17 3176.85 l 1051.43 3188.21 l 1044.23 3177.46 l 1038.09 3130.47 l 1028.49 2981.79 l 1015.68 2787.58 l 1010.12 2763.32 l 1004.77 2773.7 l 996.719 2830.7 l 982.977 2988.85 l 961.23 3321.98 l 930.473 3887.11 l 930.473 3887.11 l S /DeviceRGB {} CS [1 0.6465 0] SC 2300.76 3094.42 m 2271.73 3073.13 l 2182.05 2994.53 l 2172.02 2989.32 l 2152.17 2982.92 l 2120.28 2983.7 l 2088.29 2996.3 l 2057.94 3015.52 l 1993.34 3059.34 l 1965.15 3070.47 l 1949.4 3072.52 l 1920.99 3067.02 l 1895.61 3052.02 l 1845.56 3006.76 l 1819.84 2987.05 l 1793.08 2977.06 l 1778.76 2977.07 l 1763.03 2981.26 l 1732.24 2999.59 l 1668.66 3048.38 l 1647.03 3055.84 l 1624.98 3052.9 l 1610.11 3044.12 l 1577.14 3009.33 l 1543.68 2973.36 l 1529.44 2965.35 l 1518.51 2963.53 l 1507.72 2965.57 l 1495.22 2972.34 l 1471.03 2995.73 l 1427.76 3043.86 l 1415.97 3050.81 l 1404.22 3052.21 l 1392.09 3046.66 l 1374.46 3025.51 l 1330.26 2951.33 l 1319.33 2944.56 l 1307.21 2946.75 l 1296.43 2956.8 l 1275.22 2992.71 l 1241.54 3054.39 l 1230.89 3061.93 l 1219.79 3057.17 l 1207.28 3033.6 l 1188.9 2972.86 l 1175.02 2930.62 l 1167.79 2918.28 l 1156.89 2916.44 l 1147.49 2930.49 l 1130.37 2983.05 l 1101.84 3082.55 l 1094.42 3092.77 l 1084.56 3082.18 l 1074.91 3038.17 l 1050.45 2876.53 l 1045.31 2866.1 l 1035.16 2882.04 l 1022.54 2951.24 l 989.828 3170.43 l 982.715 3159.94 l 976.723 3102.65 l 965.402 2889.06 l 956.84 2779.45 l 948.309 2790.28 l 938.645 2890.04 l 921.75 3159.86 l 900.715 3611.83 l 887.672 3887.06 l 887.672 3887.06 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 675 432 m 675 3888 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 675 432 m 675 472 l S 675 3888 m 675 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 1256.25 432 m 1256.25 3888 l S Q 1256.25 432 m 1256.25 472 l S 1256.25 3888 m 1256.25 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 1837.5 432 m 1837.5 3888 l S Q 1837.5 432 m 1837.5 472 l S 1837.5 3888 m 1837.5 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 2418.75 432 m 2418.75 3888 l S Q 2418.75 432 m 2418.75 472 l S 2418.75 3888 m 2418.75 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 3000 432 m 3000 3888 l S Q 3000 432 m 3000 472 l S 3000 3888 m 3000 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 3581.25 432 m 3581.25 3888 l S Q 3581.25 432 m 3581.25 472 l S 3581.25 3888 m 3581.25 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 4162.5 432 m 4162.5 3888 l S Q 4162.5 432 m 4162.5 472 l S 4162.5 3888 m 4162.5 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 4743.75 432 m 4743.75 3888 l S Q 4743.75 432 m 4743.75 472 l S 4743.75 3888 m 4743.75 3848 l S q 675 432 4185 3456 re W [10 30] 0 d 675 432 m 4860 432 l S Q 675 432 m 715 432 l S 4860 432 m 4820 432 l S q 675 432 4185 3456 re W [10 30] 0 d 675 1296 m 4860 1296 l S Q 675 1296 m 715 1296 l S 4860 1296 m 4820 1296 l S q 675 432 4185 3456 re W [10 30] 0 d 675 2160 m 4860 2160 l S Q 675 2160 m 715 2160 l S 4860 2160 m 4820 2160 l S q 675 432 4185 3456 re W [10 30] 0 d 675 3024 m 4860 3024 l S Q 675 3024 m 715 3024 l S 4860 3024 m 4820 3024 l S q 675 432 4185 3456 re W [10 30] 0 d 675 3888 m 4860 3888 l S Q 675 3888 m 715 3888 l S 4860 3888 m 4820 3888 l S 10 w 2 J 675 3888 m 4860 3888 l S 4860 432 m 4860 3888 l S 675 432 m 4860 432 l S 675 432 m 675 3888 l S q 720 3600 m 720 3600 l 720 3600 l 720 3600 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 1802.28] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 60.0211 31.4961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 9.1199 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2637 TJm 64.0051 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 67.245 0 Td /F9_0 11.9552 Tf (1) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2637 TJm 122.1302 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 125.37 0 Td /F9_0 11.9552 Tf (2) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2627 TJm 180.2552 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 183.495 0 Td /F9_0 11.9552 Tf (3) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2627 TJm 238.3802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 241.6201 0 Td /F9_0 11.9552 Tf (4) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2627 TJm 296.5053 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 299.7451 0 Td /F9_0 11.9552 Tf (5) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2627 TJm 354.6303 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 357.8702 0 Td /F9_0 11.9552 Tf (6) 5.858 Tj -3609.5 TJm (0) 5.858 Tj -2.2627 TJm 412.7554 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 415.9952 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm 213.9722 -10.148 Td /F11_0 11.9552 Tf (s) 5.5113 Tj -0.5064 TJm -20.7768 8.3141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.537 8.3141 Td /F9_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -5.6569 8.3141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.417 8.3141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -20.7768 94.7141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.537 94.7141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -5.6569 94.7141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.4171 94.7141 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -20.7769 181.1141 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.537 181.1141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -5.657 181.1141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.4171 181.1141 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -20.7769 267.5137 Td /F13_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -11.5371 267.5137 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -5.657 267.5137 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.4172 267.5137 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -11.4789 353.452 Td (0) 5.858 Tj -2.2632 TJm -5.5988 353.452 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -2.359 353.452 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 34.2441 213.17] Tm 0 0 Td /F11_0 11.9552 Tf (v) 5.6548 Tj 1.6092 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font MVVWGH+CMMI12 %%+ font XSTBFC+CMR12 %%EOF auto/07p/doc/include/mtn2.ps0000640000175000017500000112014113570013207013656 0ustar sksk%!PS-Adobe-2.0 EPSF-2.0 %%Creator: GSS*CGI PostScript Driver %%Title: C:\LOCBIF\LBLC\CLEARW\FG2000.EPS %%CreationDate: 20 April 1995 12:45 %%DocumentFonts: Courier %%BoundingBox: 111 247 449 565 %%EndComments /bd{bind def}bind def /cp{closepath}bd /f{eofill}bd /gr{grestore}bd /gs{gsave}bd /lp{setdash}bd /lw{setlinewidth}bd /np{newpath}bd /s{stroke}bd /sp{strokepath}bd /S{setdash stroke}bd /c{clip}bd /k{setrgbcolor}bd /sc{1000 div}bd /t{show np}bd /rt{10 div rotate}bd /l{p lineto}bd /m{p moveto}bd /p{transform .25 sub round .25 add exch .25 sub round .25 add exch itransform }bd /a{10 div exch 10 div exch arc }bd /an{10 div exch 10 div exch arcn }bd /b{m l l l cp}bd /el{ /savematrix matrix currentmatrix def translate scale 0 0 1 5 -2 roll a savematrix setmatrix }bd /eln{ /savematrix matrix currentmatrix def translate scale 0 0 1 5 -2 roll an savematrix setmatrix }bd /r{clear initstate restore /initstate save def }bd /F{findfont exch scalefont setfont}bd /R{ findfont begin currentdict dup length dict begin { 1 index/FID ne{def}{pop pop}ifelse }forall /FontName exch def dup length 0 ne{ /Encoding Encoding 256 array copy def 0 exch{ dup type/nametype eq{ Encoding 2 index 2 index put pop 1 add }{ exch pop }ifelse }forall }if pop currentdict dup end end /FontName get exch definefont pop }bd /V437[0/macron/acute/tilde/grave/circumflex/dotlessi/dieresis/cedilla 127/question/Ccedilla/udieresis/eacute/acircumflex /adieresis/agrave/aring/ccedilla/ecircumflex/edieresis/egrave /idieresis/icircumflex/igrave/Adieresis/Aring/Eacute/ae/AE /ocircumflex/odieresis/ograve/ucircumflex/ugrave/ydieresis/Odieresis /Udieresis/cent/sterling/yen/question/florin/aacute/iacute/oacute /uacute/ntilde/Ntilde/ordfeminine/ordmasculine/questiondown/question /question/question/question/exclamdown/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/question/question/question/question/question/question /question/ring/bullet/periodcentered/question/question/question /question/question ]def /V850[155/oslash 157/Oslash 175/question 181/Aacute/Acircumflex/Agrave 190/cent/yen 198/atilde/Atilde 207/currency 210/Ecircumflex /Edieresis/Egrave/dotlessi/Iacute/Icircumflex/Idieresis 221/bar /Igrave 224/Oacute 226/Ocircumflex/Ograve/otilde/Otilde 233/Uacute /Ucircumflex/Ugrave 238/macron/acute/tilde 244/paragraph/section 247/cedilla 249/dieresis ]def /V860[131/atilde 134/Aacute 137/Ecircumflex 139/Iacute/Oacute 142/Atilde/Acircumflex 145/Agrave/Egrave 148/otilde 150/Uacute 152/Igrave/Otilde 155/cent 157/Ugrave 159/Oacute 169/Ograve 175/question ]def /V863[132/Acircumflex 134/paragraph 141/question/Agrave/section 145/Egrave/Ecircumflex 148/Edieresis/Idieresis 152/currency /Ocircumflex 155/cent 157/Ugrave/Ucircumflex 160/bar/acute 164/dieresis/cedilla/question/macron/Icircumflex 173/question 175/question ]def /V865[155/oslash 157/Oslash 175/currency]def /init{ statusdict begin /waittimeout 0 def /jobtimeout 0 def end /y_border exch def /x_border exch def /NewMat matrix currentmatrix def NewMat 0 get 0 eq{ /x_scale NewMat 2 get def NewMat 2 x_scale 72 mul round 300 div put /y_scale NewMat 1 get def NewMat 1 y_scale 72 mul round 300 div put } { /x_scale NewMat 0 get def NewMat 0 x_scale 72 mul round 300 div put /y_scale NewMat 3 get def NewMat 3 y_scale 72 mul round 300 div put }ifelse /ty NewMat 5 get def NewMat 5 y_border y_scale mul ty add put /tx NewMat 4 get def NewMat 4 x_border x_scale mul tx add put NewMat setmatrix 1 eq{ 0 translate 90 rotate }{pop}ifelse []0 lp 1 lw 0 0 0 k 2 setlinejoin 0 setlinecap /initstate save def }bd /P{ /Y exch def /X exch def /Y2 exch def /X2 exch def /Y1 exch def /X1 exch def }bd /B{4 bt}bd /bt{X1 Y1 moveto X2 Y1 lineto /Y1 exch Y1 add def }bd /lr{X1 Y1 moveto X1 Y2 lineto /X1 exch X1 add def }bd /P1{ Y 2 mul{ B[8]0 S B[8]12 S B[8]8 S B[8]4 S }repeat }bd /P2{ Y 2 mul{ B[4 12]0 S B[4 12]12 S B[4 12]8 S B[4 12]4 S }repeat }bd /P3{ Y{ B[4 28]0 S B[4 28]28 S B[4 28]24 S B[4 28]20 S B[4 28]16 S B[4 28]12 S B[4 28]8 S B[4 28]4 S }repeat }bd /P4{ Y 4 mul{ B[4]0 S B[4]4 S }repeat }bd /P5{ Y 2 mul{ B[4 12]0 S B[4]4 S B[4 12]8 S B[4]4 S }repeat }bd /P6{ Y{ B[4 28]0 S B[4 4 4 20]4 S B[4 12]8 S B[4 20 4 4]12 S B[4 28]16 S B[4 20 4 4]12 S B[4 12]8 S B[4 4 4 20]4 S }repeat }bd /P7{ X 2 mul{ 4 lr[4]4 S 4 lr[]0 S 4 lr[4]0 S 4 lr[]0 S }repeat }bd /P8{ X 4 mul{ 8 lr }repeat []0 S }bd /P9{ Y 2 mul{ B[12 4]12 S B[12 4]8 S B[12 4]4 S B[12 4]0 S }repeat }bd /P10{ X 2 mul{ 16 lr }repeat []0 S }bd /P11{ Y{ B B B[4 28]16 S B[]0 S B B B[4 28]0 S B[]0 S }repeat }bd /P12{ Y{ 32 bt }repeat [4 28]0 S }bd /P13{ Y{ B B B[4 28]4 S B[4 20 4 4]0 S B[4 12]12 S B[12 8 4 8]24 S B[4 12]12 S B[4 20 4 4]0 S }repeat }bd /P14{ Y{ B[4 4 12 12]4 S B[4 12]8 S B[12 12 4 4]12 S B[20 12]16 S B[12 4 4 12]12 S B[4 12]8 S B[4 12 12 4]12 S B[20 12]0 S }repeat }bd /P15{ Y{ B B[4 28]12 S B[4 20 4 4]8 S B[4]4 S B B[4 28]28 S B[4 4 4 20]0 S B[4]4 S }repeat }bd /P16{ Y{ B[4 20 4 4]16 S B[4 12]12 S B[4 8 4 8 4 4]0 S B[4 8 4 4 4 8]4 S B[4 8 4 4 4 8]0 S B[4 4 4 8 4 8]4 S B[4 12]8 S B[4 20 4 4]12 S }repeat }bd /P17{ X{ 16 lr[4 12]4 S 16 lr[4 12]12 S }repeat }bd /P18{ /Y1 Y1 4 add def Y 2 mul{ 8 bt[4 12]8 S 8 bt[4 12]0 S }repeat }bd /P19{ X 2 mul{ 8 lr[4]4 S 8 lr[4]0 S }repeat }bd /P20{ /Y1 Y1 4 add def Y 4 mul{ 8 bt }repeat []0 S }bd /P21{ /Y1 Y1 12 add def Y 2 mul{ 16 bt }repeat []0 S }bd /P22{ Y{ B B B B B B B[4 28]0 S B[]0 S }repeat }bd /P23{ Y{ B[4 28]12 S B[4 28]8 S B[4 28]4 S B[4 28]0 S B[12 20]4 S B[4 12]8 S B[12 20]20 S B[4 28]16 S }repeat }bd /P24{ /Y1 Y1 8 add def Y{ B[4 20 4 4]8 S 12 bt[4 28]12 S B[4 4 4 20]0 S 12 bt[4 28]28 S }repeat }bd /P25{ Y{ B B[4 28]4 S B[4 28]8 S B[8 24]16 S B[8 24]24 S B[4 16 4 8]16 S B[4 16 4 8]0 S B[8 24]8 S }repeat }bd /P26{ Y{ B[20 12]8 S B[4 20 4 4]12 S B B[4 28]16 S B[20 12]24 S B[4 4 4 20]4 S B B[4 28]0 S }repeat }bd /P27{ Y{ B[4 28]16 S B[4 28]12 S B[4 28]8 S B[]0 S B[4]0 S B[4 12 4 4 4 4]12 S B[4 28]24 S B[4 28]20 S }repeat }bd /P28{ Y{ B B[20 12]0 S B[4 8 8 12]0 S B[12 4]12 S B B[20 12]16 S B[8 12 4 8]4 S B[12 4]12 S }repeat }bd /P29{ Y{ B[4 28]16 S B[4 20 4 4]12 S B[4 12 4 4 4 4]8 S B[4]4 S B[4 12 4 4 4 4]8 S B[4 20 4 4]12 S 8 bt[4 28]16 S }repeat }bd /P30{ Y{ 16 bt[4 28]0 S 16 bt[4 28]16 S }repeat }bd /P31{ Y{ B[12 20]4 S B[12 20]0 S B[12 20]28 S B[12 20]24 S B[12 20]20 S B[12 20]16 S B[12 20]12 S B[12 20]8 S }repeat }bd /P32{ X{ 16 lr[12 20]16 S 16 lr[12 20]0 S }repeat }bd /P33{ X{ 4 lr 4 lr 4 lr[4 28]16 S 4 lr[]0 S 4 lr 4 lr 4 lr[4 28]0 S 4 lr[]0 S }repeat }bd %%EndProlog %%BeginSetup 2327 0 18 18 init %%EndSetup -1 3357 2328 3357 2328 -1 -1 -1 b c np 2 lw []0 lp 0 sc 0 sc 0 sc k gs 578 2263 584 2263 584 1094 578 1094 b c np 581 1097 m 581 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1100 609 1100 609 1094 578 1094 b c np 581 1097 m 606 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1391 609 1391 609 1385 578 1385 b c np 581 1388 m 606 1388 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1681 609 1681 609 1675 578 1675 b c np 581 1678 m 606 1678 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1972 609 1972 609 1966 578 1966 b c np 581 1969 m 606 1969 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2263 609 2263 609 2257 578 2257 b c np 581 2260 m 606 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1119 545 1119 545 1079 516 1079 b c np 522 1116 m 540 1116 l 530 1103 l 535 1103 l 539 1102 l 540 1100 l 542 1095 l 542 1092 l 540 1087 l 537 1084 l 532 1082 l 527 1082 l 522 1084 l 520 1085 l 519 1089 l 0 setlinejoin 4 setmiterlimit s gr gs 517 1410 545 1410 545 1370 517 1370 b c np 540 1403 m 539 1406 l 534 1407 l 530 1407 l 525 1406 l 522 1401 l 520 1393 l 520 1385 l 522 1378 l 525 1375 l 530 1373 l 532 1373 l 537 1375 l 540 1378 l 542 1383 l 542 1385 l 540 1389 l 537 1393 l 532 1394 l 530 1394 l 525 1393 l 522 1389 l 520 1385 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1701 543 1701 543 1661 516 1661 b c np 540 1687 m 539 1682 l 535 1678 l 530 1677 l 529 1677 l 524 1678 l 520 1682 l 519 1687 l 519 1688 l 520 1693 l 524 1696 l 529 1698 l 530 1698 l 535 1696 l 539 1693 l 540 1687 l 540 1678 l 539 1670 l 535 1665 l 530 1664 l 527 1664 l 522 1665 l 520 1668 l 0 setlinejoin 4 setmiterlimit s gr gs 486 1992 500 1992 500 1951 486 1951 b c np 489 1982 m 492 1984 l 497 1989 l 497 1954 l 0 setlinejoin 4 setmiterlimit s gr gs 516 1992 545 1992 545 1951 516 1951 b c np 520 1981 m 520 1982 l 522 1985 l 524 1987 l 527 1989 l 534 1989 l 537 1987 l 539 1985 l 540 1982 l 540 1979 l 539 1976 l 535 1971 l 519 1954 l 542 1954 l 0 setlinejoin 4 setmiterlimit s gr gs 486 2282 500 2282 500 2242 486 2242 b c np 489 2273 m 492 2275 l 497 2279 l 497 2245 l 0 setlinejoin 4 setmiterlimit s gr gs 516 2282 545 2282 545 2242 516 2242 b c np 539 2279 m 522 2279 l 520 2265 l 522 2266 l 527 2268 l 532 2268 l 537 2266 l 540 2263 l 542 2258 l 542 2255 l 540 2250 l 537 2247 l 532 2245 l 527 2245 l 522 2247 l 520 2248 l 519 2252 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 2263 1747 2263 1747 1094 1741 1094 b c np 1744 1097 m 1744 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 1715 1100 1747 1100 1747 1094 1715 1094 b c np 1744 1097 m 1718 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 1715 1391 1747 1391 1747 1385 1715 1385 b c np 1744 1388 m 1718 1388 l 0 setlinejoin 4 setmiterlimit s gr gs 1715 1681 1747 1681 1747 1675 1715 1675 b c np 1744 1678 m 1718 1678 l 0 setlinejoin 4 setmiterlimit s gr gs 1715 1972 1747 1972 1747 1966 1715 1966 b c np 1744 1969 m 1718 1969 l 0 setlinejoin 4 setmiterlimit s gr gs 1715 2263 1747 2263 1747 2257 1715 2257 b c np 1744 2260 m 1718 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 578 1100 1747 1100 1747 1094 578 1094 b c np 581 1097 m 1744 1097 l 0 setlinejoin 4 setmiterlimit s gr gs 810 1125 816 1125 816 1094 810 1094 b c np 813 1097 m 813 1122 l 0 setlinejoin 4 setmiterlimit s gr gs 1275 1125 1281 1125 1281 1094 1275 1094 b c np 1278 1097 m 1278 1122 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 1125 1747 1125 1747 1094 1741 1094 b c np 1744 1097 m 1744 1122 l 0 setlinejoin 4 setmiterlimit s gr gs 752 1064 781 1064 781 1024 752 1024 b c np 765 1061 m 760 1060 l 756 1055 l 755 1047 l 755 1042 l 756 1034 l 760 1029 l 765 1027 l 768 1027 l 773 1029 l 776 1034 l 778 1042 l 778 1047 l 776 1055 l 773 1060 l 768 1061 l 765 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 788 1033 797 1033 797 1024 788 1024 b c np 793 1030 m 791 1029 l 793 1027 l 794 1029 l 793 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 805 1064 834 1064 834 1024 805 1024 b c np 818 1061 m 813 1060 l 810 1055 l 808 1047 l 808 1042 l 810 1034 l 813 1029 l 818 1027 l 821 1027 l 826 1029 l 829 1034 l 831 1042 l 831 1047 l 829 1055 l 826 1060 l 821 1061 l 818 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 841 1064 869 1064 869 1024 841 1024 b c np 864 1056 m 862 1060 l 858 1061 l 854 1061 l 849 1060 l 846 1055 l 844 1047 l 844 1038 l 846 1032 l 849 1029 l 854 1027 l 856 1027 l 861 1029 l 864 1032 l 866 1037 l 866 1038 l 864 1043 l 861 1047 l 856 1048 l 854 1048 l 849 1047 l 846 1043 l 844 1038 l 0 setlinejoin 4 setmiterlimit s gr gs 1217 1064 1246 1064 1246 1024 1217 1024 b c np 1230 1061 m 1225 1060 l 1221 1055 l 1220 1047 l 1220 1042 l 1221 1034 l 1225 1029 l 1230 1027 l 1233 1027 l 1238 1029 l 1241 1034 l 1243 1042 l 1243 1047 l 1241 1055 l 1238 1060 l 1233 1061 l 1230 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1253 1033 1263 1033 1263 1024 1253 1024 b c np 1258 1030 m 1256 1029 l 1258 1027 l 1260 1029 l 1258 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1270 1064 1299 1064 1299 1024 1270 1024 b c np 1283 1061 m 1278 1060 l 1275 1055 l 1273 1047 l 1273 1042 l 1275 1034 l 1278 1029 l 1283 1027 l 1286 1027 l 1291 1029 l 1294 1034 l 1296 1042 l 1296 1047 l 1294 1055 l 1291 1060 l 1286 1061 l 1283 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1305 1064 1334 1064 1334 1024 1305 1024 b c np 1316 1061 m 1311 1060 l 1310 1056 l 1310 1053 l 1311 1050 l 1315 1048 l 1321 1047 l 1326 1045 l 1329 1042 l 1331 1038 l 1331 1034 l 1329 1030 l 1328 1029 l 1323 1027 l 1316 1027 l 1311 1029 l 1310 1030 l 1308 1034 l 1308 1038 l 1310 1042 l 1313 1045 l 1318 1047 l 1324 1048 l 1328 1050 l 1329 1053 l 1329 1056 l 1328 1060 l 1323 1061 l 1316 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1682 1064 1711 1064 1711 1024 1682 1024 b c np 1695 1061 m 1690 1060 l 1687 1055 l 1685 1047 l 1685 1042 l 1687 1034 l 1690 1029 l 1695 1027 l 1698 1027 l 1703 1029 l 1707 1034 l 1708 1042 l 1708 1047 l 1707 1055 l 1703 1060 l 1698 1061 l 1695 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 1719 1033 1728 1033 1728 1024 1719 1024 b c np 1723 1030 m 1722 1029 l 1723 1027 l 1725 1029 l 1723 1030 l 0 setlinejoin 4 setmiterlimit s gr gs 1740 1064 1755 1064 1755 1024 1740 1024 b c np 1743 1055 m 1747 1056 l 1752 1061 l 1752 1027 l 0 setlinejoin 4 setmiterlimit s gr gs 1770 1064 1799 1064 1799 1024 1770 1024 b c np 1783 1061 m 1778 1060 l 1775 1055 l 1773 1047 l 1773 1042 l 1775 1034 l 1778 1029 l 1783 1027 l 1786 1027 l 1791 1029 l 1795 1034 l 1796 1042 l 1796 1047 l 1795 1055 l 1791 1060 l 1786 1061 l 1783 1061 l 0 setlinejoin 4 setmiterlimit s gr gs 578 2263 1747 2263 1747 2257 578 2257 b c np 581 2260 m 1744 2260 l 0 setlinejoin 4 setmiterlimit s gr gs 810 2263 816 2263 816 2231 810 2231 b c np 813 2260 m 813 2234 l 0 setlinejoin 4 setmiterlimit s gr gs 1275 2263 1281 2263 1281 2231 1275 2231 b c np 1278 2260 m 1278 2234 l 0 setlinejoin 4 setmiterlimit s gr gs 1741 2263 1747 2263 1747 2231 1741 2231 b c np 1744 2260 m 1744 2234 l 0 setlinejoin 4 setmiterlimit s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np 1 lw []0 lp gs 713 1497 727 1497 727 1459 713 1459 b c np 725 1495 m 715 1461 l s gr gs 715 1497 729 1497 729 1459 715 1459 b c np 727 1495 m 717 1461 l s gr gs 716 1497 730 1497 730 1459 716 1459 b c np 728 1495 m 718 1461 l s gr gs 708 1497 716 1497 716 1483 708 1483 b c np 714 1495 m 710 1485 l s gr gs 736 1497 742 1497 742 1483 736 1483 b c np 740 1495 m 738 1485 l s gr gs 712 1497 742 1497 742 1493 712 1493 b c np 714 1495 m 740 1495 l s gr gs 708 1463 725 1463 725 1459 708 1459 b c np 710 1461 m 723 1461 l s gr gs 708 1497 717 1497 717 1483 708 1483 b c np 715 1495 m 710 1485 l s gr gs 710 1497 720 1497 720 1488 710 1488 b c np 718 1495 m 712 1490 l s gr gs 712 1497 724 1497 724 1491 712 1491 b c np 722 1495 m 714 1493 l s gr gs 731 1497 740 1497 740 1491 731 1491 b c np 733 1495 m 738 1493 l s gr gs 733 1497 740 1497 740 1490 733 1490 b c np 735 1495 m 738 1492 l s gr gs 734 1497 740 1497 740 1488 734 1488 b c np 736 1495 m 738 1490 l s gr gs 736 1497 740 1497 740 1483 736 1483 b c np 738 1495 m 738 1485 l s gr gs 710 1464 719 1464 719 1459 710 1459 b c np 717 1462 m 712 1461 l s gr gs 712 1466 719 1466 719 1459 712 1459 b c np 717 1464 m 714 1461 l s gr gs 716 1466 722 1466 722 1459 716 1459 b c np 718 1464 m 720 1461 l s gr gs 715 1464 724 1464 724 1459 715 1459 b c np 717 1462 m 722 1461 l s gr gs 742 1465 764 1465 764 1435 742 1435 b c np 752 1463 m 748 1461 l 746 1458 l 744 1452 l 744 1448 l 746 1442 l 748 1438 l 752 1437 l 754 1437 l 758 1438 l 760 1442 l 762 1448 l 762 1452 l 760 1458 l 758 1461 l 754 1463 l 752 1463 l s gr gs 744 1465 754 1465 754 1435 744 1435 b c np 752 1463 m 749 1461 l 748 1460 l 747 1458 l 746 1452 l 746 1448 l 747 1442 l 748 1439 l 749 1438 l 752 1437 l s gr gs 752 1465 762 1465 762 1435 752 1435 b c np 754 1437 m 757 1438 l 758 1439 l 759 1442 l 760 1448 l 760 1452 l 759 1458 l 758 1460 l 757 1461 l 754 1463 l s gr gs 771 1482 804 1482 804 1478 771 1478 b c np 773 1480 m 802 1480 l s gr gs 771 1472 804 1472 804 1468 771 1468 b c np 773 1470 m 802 1470 l s gr gs 813 1485 838 1485 838 1459 813 1459 b c np 835 1477 m 835 1479 l 833 1479 l 833 1475 l 836 1475 l 836 1479 l 833 1482 l 830 1483 l 825 1483 l 820 1482 l 817 1479 l 815 1474 l 815 1470 l 817 1466 l 820 1462 l 825 1461 l 828 1461 l 833 1462 l 836 1466 l s gr gs 815 1481 820 1481 820 1464 815 1464 b c np 818 1479 m 817 1475 l 817 1469 l 818 1466 l s gr gs 816 1485 827 1485 827 1459 816 1459 b c np 825 1483 m 821 1482 l 820 1480 l 818 1475 l 818 1469 l 820 1464 l 821 1462 l 825 1461 l s gr gs 845 1485 872 1485 872 1459 845 1459 b c np 857 1483 m 852 1482 l 849 1479 l 847 1474 l 847 1470 l 849 1466 l 852 1462 l 857 1461 l 860 1461 l 865 1462 l 868 1466 l 870 1470 l 870 1474 l 868 1479 l 865 1482 l 860 1483 l 857 1483 l s gr gs 847 1481 852 1481 852 1464 847 1464 b c np 850 1479 m 849 1475 l 849 1469 l 850 1466 l s gr gs 865 1481 870 1481 870 1464 865 1464 b c np 867 1466 m 868 1469 l 868 1475 l 867 1479 l s gr gs 848 1485 859 1485 859 1459 848 1459 b c np 857 1483 m 854 1482 l 852 1480 l 850 1475 l 850 1469 l 852 1464 l 854 1462 l 857 1461 l s gr gs 858 1485 869 1485 869 1459 858 1459 b c np 860 1461 m 863 1462 l 865 1464 l 867 1469 l 867 1475 l 865 1480 l 863 1482 l 860 1483 l s gr gs 882 1485 886 1485 886 1459 882 1459 b c np 884 1483 m 884 1461 l s gr gs 884 1484 888 1484 888 1460 884 1460 b c np 886 1482 m 886 1462 l s gr gs 877 1485 889 1485 889 1459 877 1459 b c np 879 1483 m 887 1483 l 887 1461 l s gr gs 885 1485 908 1485 908 1459 885 1459 b c np 887 1477 m 889 1480 l 891 1482 l 894 1483 l 899 1483 l 902 1482 l 904 1480 l 906 1475 l 906 1461 l s gr gs 900 1482 906 1482 906 1460 900 1460 b c np 902 1480 m 904 1475 l 904 1462 l s gr gs 897 1485 904 1485 904 1459 897 1459 b c np 899 1483 m 901 1482 l 902 1477 l 902 1461 l s gr gs 877 1463 894 1463 894 1459 877 1459 b c np 879 1461 m 892 1461 l s gr gs 895 1463 912 1463 912 1459 895 1459 b c np 897 1461 m 910 1461 l s gr gs 879 1485 886 1485 886 1480 879 1480 b c np 881 1483 m 884 1482 l s gr gs 881 1485 886 1485 886 1478 881 1478 b c np 883 1483 m 884 1480 l s gr gs 879 1464 886 1464 886 1459 879 1459 b c np 884 1462 m 881 1461 l s gr gs 881 1466 886 1466 886 1459 881 1459 b c np 884 1464 m 883 1461 l s gr gs 885 1466 891 1466 891 1459 885 1459 b c np 887 1464 m 889 1461 l s gr gs 885 1464 893 1464 893 1459 885 1459 b c np 887 1462 m 891 1461 l s gr gs 897 1464 904 1464 904 1459 897 1459 b c np 902 1462 m 899 1461 l s gr gs 899 1466 904 1466 904 1459 899 1459 b c np 902 1464 m 901 1461 l s gr gs 904 1466 909 1466 909 1459 904 1459 b c np 906 1464 m 907 1461 l s gr gs 904 1464 911 1464 911 1459 904 1459 b c np 906 1462 m 909 1461 l s gr gs 918 1485 940 1485 940 1462 918 1462 b c np 936 1480 m 938 1483 l 938 1477 l 936 1480 l 934 1482 l 931 1483 l 925 1483 l 921 1482 l 920 1480 l 920 1477 l 921 1474 l 925 1472 l 933 1470 l 936 1469 l 938 1464 l s gr gs 918 1484 923 1484 923 1475 918 1475 b c np 921 1482 m 920 1477 l s gr gs 919 1477 938 1477 938 1468 919 1468 b c np 921 1475 m 925 1474 l 933 1472 l 936 1470 l s gr gs 934 1471 940 1471 940 1460 934 1460 b c np 938 1469 m 936 1462 l s gr gs 918 1482 940 1482 940 1459 918 1459 b c np 920 1480 m 921 1477 l 925 1475 l 933 1474 l 936 1472 l 938 1469 l 938 1464 l 936 1462 l 933 1461 l 926 1461 l 923 1462 l 921 1464 l 920 1467 l 920 1461 l 921 1464 l s gr gs 950 1494 969 1494 969 1459 950 1459 b c np 952 1492 m 952 1469 l 953 1464 l 955 1462 l 958 1461 l 962 1461 l 965 1462 l 967 1466 l s gr gs 951 1494 957 1494 957 1462 951 1462 b c np 953 1492 m 953 1467 l 955 1464 l s gr gs 950 1497 960 1497 960 1459 950 1459 b c np 952 1492 m 955 1495 l 955 1467 l 957 1462 l 958 1461 l s gr gs 945 1485 964 1485 964 1481 945 1481 b c np 947 1483 m 962 1483 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1200 1165 1215 1165 1215 1127 1200 1127 b c np 1208 1163 m 1203 1145 l 1202 1139 l 1202 1134 l 1203 1131 l 1205 1129 l 1208 1129 l 1212 1132 l 1213 1136 l s gr gs 1201 1165 1212 1165 1212 1129 1201 1129 b c np 1210 1163 m 1205 1145 l 1203 1139 l 1203 1131 l s gr gs 1201 1165 1214 1165 1214 1132 1201 1132 b c np 1208 1163 m 1212 1163 l 1205 1140 l 1203 1134 l s gr gs 1197 1154 1217 1154 1217 1150 1197 1150 b c np 1199 1152 m 1215 1152 l s gr gs 1219 1133 1240 1133 1240 1103 1219 1103 b c np 1223 1126 m 1224 1125 l 1223 1123 l 1221 1125 l 1221 1126 l 1223 1128 l 1224 1130 l 1227 1131 l 1232 1131 l 1236 1130 l 1237 1128 l 1238 1126 l 1238 1123 l 1237 1121 l 1234 1119 l 1227 1116 l 1225 1115 l 1223 1112 l 1221 1109 l 1221 1105 l s gr gs 1225 1133 1239 1133 1239 1114 1225 1114 b c np 1232 1131 m 1235 1130 l 1236 1128 l 1237 1126 l 1237 1123 l 1236 1121 l 1232 1119 l 1227 1116 l s gr gs 1219 1111 1240 1111 1240 1104 1219 1104 b c np 1221 1107 m 1223 1109 l 1225 1109 l 1231 1106 l 1235 1106 l 1237 1107 l 1238 1109 l s gr gs 1223 1113 1240 1113 1240 1103 1223 1103 b c np 1225 1109 m 1231 1105 l 1236 1105 l 1237 1106 l 1238 1109 l 1238 1111 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1142 995 1175 995 1175 957 1142 957 b c np 1173 993 m 1144 959 l s gr gs 1144 995 1177 995 1177 957 1144 957 b c np 1175 993 m 1146 959 l s gr gs 1145 995 1179 995 1179 957 1145 957 b c np 1177 993 m 1147 959 l s gr gs 1149 995 1179 995 1179 982 1149 982 b c np 1177 993 m 1154 993 l 1151 984 l s gr gs 1142 971 1172 971 1172 957 1142 957 b c np 1144 959 m 1167 959 l 1170 969 l s gr gs 1149 995 1157 995 1157 982 1149 982 b c np 1155 993 m 1151 984 l s gr gs 1150 995 1159 995 1159 986 1150 986 b c np 1157 993 m 1152 988 l s gr gs 1152 995 1162 995 1162 990 1152 990 b c np 1160 993 m 1154 992 l s gr gs 1158 963 1169 963 1169 957 1158 957 b c np 1160 959 m 1167 961 l s gr gs 1161 966 1170 966 1170 957 1161 957 b c np 1163 959 m 1168 964 l s gr gs 1163 971 1172 971 1172 957 1163 957 b c np 1165 959 m 1170 969 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 392 1697 406 1697 406 1658 392 1658 b c np 404 1695 m 394 1660 l s gr gs 394 1697 408 1697 408 1658 394 1658 b c np 406 1695 m 396 1660 l s gr gs 396 1697 409 1697 409 1658 396 1658 b c np 407 1695 m 398 1660 l s gr gs 399 1695 427 1695 427 1673 399 1673 b c np 425 1693 m 401 1675 l s gr gs 405 1682 416 1682 416 1658 405 1658 b c np 407 1680 m 414 1660 l s gr gs 407 1682 418 1682 418 1658 407 1658 b c np 409 1680 m 416 1660 l s gr gs 409 1684 419 1684 419 1660 409 1660 b c np 411 1682 m 417 1662 l s gr gs 397 1697 414 1697 414 1693 397 1693 b c np 399 1695 m 412 1695 l s gr gs 418 1697 432 1697 432 1693 418 1693 b c np 420 1695 m 430 1695 l s gr gs 387 1662 404 1662 404 1658 387 1658 b c np 389 1660 m 402 1660 l s gr gs 407 1662 422 1662 422 1658 407 1658 b c np 409 1660 m 420 1660 l s gr gs 399 1697 408 1697 408 1691 399 1691 b c np 401 1695 m 406 1693 l s gr gs 400 1697 406 1697 406 1690 400 1690 b c np 402 1695 m 404 1692 l s gr gs 404 1697 411 1697 411 1690 404 1690 b c np 409 1695 m 406 1692 l s gr gs 404 1697 413 1697 413 1691 404 1691 b c np 411 1695 m 406 1693 l s gr gs 420 1697 427 1697 427 1691 420 1691 b c np 422 1695 m 425 1693 l s gr gs 423 1697 431 1697 431 1691 423 1691 b c np 429 1695 m 425 1693 l s gr gs 389 1664 398 1664 398 1658 389 1658 b c np 396 1662 m 391 1660 l s gr gs 391 1666 398 1666 398 1658 391 1658 b c np 396 1664 m 393 1660 l s gr gs 396 1666 401 1666 401 1658 396 1658 b c np 398 1664 m 399 1660 l s gr gs 394 1664 403 1664 403 1658 394 1658 b c np 396 1662 m 401 1660 l s gr gs 409 1664 416 1664 416 1658 409 1658 b c np 414 1662 m 411 1660 l s gr gs 410 1666 416 1666 416 1658 410 1658 b c np 414 1664 m 412 1660 l s gr gs 414 1666 421 1666 421 1658 414 1658 b c np 416 1664 m 419 1660 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 612 1253 626 1253 626 1214 612 1214 b c np 624 1251 m 614 1216 l s gr gs 614 1253 627 1253 627 1214 614 1214 b c np 625 1251 m 616 1216 l s gr gs 615 1253 629 1253 629 1214 615 1214 b c np 627 1251 m 617 1216 l s gr gs 632 1253 645 1253 645 1214 632 1214 b c np 643 1251 m 634 1216 l s gr gs 633 1253 647 1253 647 1214 633 1214 b c np 645 1251 m 635 1216 l s gr gs 635 1253 649 1253 649 1214 635 1214 b c np 647 1251 m 637 1216 l s gr gs 617 1253 634 1253 634 1249 617 1249 b c np 619 1251 m 632 1251 l s gr gs 637 1253 654 1253 654 1249 637 1249 b c np 639 1251 m 652 1251 l s gr gs 618 1237 642 1237 642 1233 618 1233 b c np 620 1235 m 640 1235 l s gr gs 607 1218 624 1218 624 1214 607 1214 b c np 609 1216 m 622 1216 l s gr gs 627 1218 644 1218 644 1214 627 1214 b c np 629 1216 m 642 1216 l s gr gs 618 1253 627 1253 627 1247 618 1247 b c np 620 1251 m 625 1249 l s gr gs 620 1253 626 1253 626 1246 620 1246 b c np 622 1251 m 624 1248 l s gr gs 623 1253 631 1253 631 1246 623 1246 b c np 629 1251 m 625 1248 l s gr gs 623 1253 632 1253 632 1247 623 1247 b c np 630 1251 m 625 1249 l s gr gs 638 1253 647 1253 647 1247 638 1247 b c np 640 1251 m 645 1249 l s gr gs 640 1253 645 1253 645 1246 640 1246 b c np 642 1251 m 643 1248 l s gr gs 643 1253 650 1253 650 1246 643 1246 b c np 648 1251 m 645 1248 l s gr gs 643 1253 652 1253 652 1247 643 1247 b c np 650 1251 m 645 1249 l s gr gs 609 1220 618 1220 618 1214 609 1214 b c np 616 1218 m 611 1216 l s gr gs 610 1222 618 1222 618 1214 610 1214 b c np 616 1220 m 612 1216 l s gr gs 615 1222 621 1222 621 1214 615 1214 b c np 617 1220 m 619 1216 l s gr gs 614 1220 622 1220 622 1214 614 1214 b c np 616 1218 m 620 1216 l s gr gs 628 1220 637 1220 637 1214 628 1214 b c np 635 1218 m 630 1216 l s gr gs 630 1222 637 1222 637 1214 630 1214 b c np 635 1220 m 632 1216 l s gr gs 635 1222 641 1222 641 1214 635 1214 b c np 637 1220 m 639 1216 l s gr gs 633 1220 642 1220 642 1214 633 1214 b c np 635 1218 m 640 1216 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 942 1332 955 1332 955 1293 942 1293 b c np 953 1330 m 944 1295 l s gr gs 943 1332 957 1332 957 1293 943 1293 b c np 955 1330 m 945 1295 l s gr gs 945 1332 959 1332 959 1293 945 1293 b c np 957 1330 m 947 1295 l s gr gs 937 1332 973 1332 973 1293 937 1293 b c np 949 1330 m 963 1330 l 968 1328 l 970 1326 l 971 1321 l 971 1315 l 970 1308 l 967 1302 l 963 1298 l 960 1297 l 953 1295 l 939 1295 l s gr gs 960 1330 972 1330 972 1296 960 1296 b c np 967 1328 m 968 1326 l 970 1321 l 970 1315 l 968 1308 l 965 1302 l 962 1298 l s gr gs 951 1332 970 1332 970 1293 951 1293 b c np 963 1330 m 967 1326 l 968 1321 l 968 1315 l 967 1308 l 963 1302 l 958 1297 l 953 1295 l s gr gs 948 1332 957 1332 957 1326 948 1326 b c np 950 1330 m 955 1328 l s gr gs 950 1332 955 1332 955 1324 950 1324 b c np 952 1330 m 953 1326 l s gr gs 953 1332 960 1332 960 1324 953 1324 b c np 958 1330 m 955 1326 l s gr gs 953 1332 962 1332 962 1326 953 1326 b c np 960 1330 m 955 1328 l s gr gs 938 1299 947 1299 947 1293 938 1293 b c np 945 1297 m 940 1295 l s gr gs 940 1300 947 1300 947 1293 940 1293 b c np 945 1298 m 942 1295 l s gr gs 945 1300 951 1300 951 1293 945 1293 b c np 947 1298 m 949 1295 l s gr gs 943 1299 952 1299 952 1293 943 1293 b c np 945 1297 m 950 1295 l s gr gs 979 1299 1000 1299 1000 1269 979 1269 b c np 982 1292 m 984 1291 l 982 1290 l 981 1291 l 981 1292 l 982 1295 l 984 1296 l 987 1297 l 992 1297 l 996 1296 l 997 1295 l 998 1292 l 998 1290 l 997 1287 l 993 1285 l 987 1282 l 985 1281 l 982 1279 l 981 1275 l 981 1271 l s gr gs 985 1299 999 1299 999 1280 985 1280 b c np 992 1297 m 995 1296 l 996 1295 l 997 1292 l 997 1290 l 996 1287 l 992 1285 l 987 1282 l s gr gs 979 1277 1000 1277 1000 1270 979 1270 b c np 981 1274 m 982 1275 l 985 1275 l 991 1272 l 995 1272 l 997 1274 l 998 1275 l s gr gs 983 1279 1000 1279 1000 1269 983 1269 b c np 985 1275 m 991 1271 l 996 1271 l 997 1272 l 998 1275 l 998 1277 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1200 1679 1214 1679 1214 1641 1200 1641 b c np 1212 1677 m 1202 1643 l s gr gs 1202 1679 1216 1679 1216 1641 1202 1641 b c np 1214 1677 m 1204 1643 l s gr gs 1204 1679 1218 1679 1218 1641 1204 1641 b c np 1216 1677 m 1206 1643 l s gr gs 1205 1679 1236 1679 1236 1657 1205 1657 b c np 1207 1677 m 1227 1677 l 1232 1676 l 1234 1672 l 1234 1669 l 1232 1664 l 1229 1661 l 1222 1659 l 1209 1659 l s gr gs 1225 1678 1234 1678 1234 1659 1225 1659 b c np 1230 1676 m 1232 1672 l 1232 1669 l 1230 1664 l 1227 1661 l s gr gs 1220 1679 1232 1679 1232 1657 1220 1657 b c np 1227 1677 m 1229 1676 l 1230 1672 l 1230 1669 l 1229 1664 l 1225 1661 l 1222 1659 l s gr gs 1196 1645 1213 1645 1213 1641 1196 1641 b c np 1198 1643 m 1211 1643 l s gr gs 1207 1679 1216 1679 1216 1674 1207 1674 b c np 1209 1677 m 1214 1676 l s gr gs 1209 1679 1214 1679 1214 1672 1209 1672 b c np 1211 1677 m 1212 1674 l s gr gs 1212 1679 1219 1679 1219 1672 1212 1672 b c np 1217 1677 m 1214 1674 l s gr gs 1212 1679 1221 1679 1221 1674 1212 1674 b c np 1219 1677 m 1214 1676 l s gr gs 1197 1647 1206 1647 1206 1641 1197 1641 b c np 1204 1645 m 1199 1643 l s gr gs 1199 1648 1206 1648 1206 1641 1199 1641 b c np 1204 1646 m 1201 1643 l s gr gs 1204 1648 1209 1648 1209 1641 1204 1641 b c np 1206 1646 m 1207 1643 l s gr gs 1202 1647 1211 1647 1211 1641 1202 1641 b c np 1204 1645 m 1209 1643 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1052 1453 1066 1453 1066 1414 1052 1414 b c np 1064 1451 m 1054 1416 l s gr gs 1054 1453 1068 1453 1068 1414 1054 1414 b c np 1066 1451 m 1056 1416 l s gr gs 1056 1453 1069 1453 1069 1414 1056 1414 b c np 1067 1451 m 1058 1416 l s gr gs 1047 1453 1084 1453 1084 1414 1047 1414 b c np 1059 1451 m 1074 1451 l 1079 1449 l 1080 1448 l 1082 1443 l 1082 1436 l 1080 1430 l 1077 1423 l 1074 1420 l 1071 1418 l 1064 1416 l 1049 1416 l s gr gs 1070 1451 1082 1451 1082 1418 1070 1418 b c np 1077 1449 m 1079 1448 l 1080 1443 l 1080 1436 l 1079 1430 l 1076 1423 l 1072 1420 l s gr gs 1062 1453 1081 1453 1081 1414 1062 1414 b c np 1074 1451 m 1077 1448 l 1079 1443 l 1079 1436 l 1077 1430 l 1074 1423 l 1069 1418 l 1064 1416 l s gr gs 1059 1453 1068 1453 1068 1447 1059 1447 b c np 1061 1451 m 1066 1449 l s gr gs 1060 1453 1066 1453 1066 1446 1060 1446 b c np 1062 1451 m 1064 1448 l s gr gs 1064 1453 1071 1453 1071 1446 1064 1446 b c np 1069 1451 m 1066 1448 l s gr gs 1064 1453 1073 1453 1073 1447 1064 1447 b c np 1071 1451 m 1066 1449 l s gr gs 1049 1420 1058 1420 1058 1414 1049 1414 b c np 1056 1418 m 1051 1416 l s gr gs 1051 1422 1058 1422 1058 1414 1051 1414 b c np 1056 1420 m 1053 1416 l s gr gs 1056 1422 1061 1422 1061 1414 1056 1414 b c np 1058 1420 m 1059 1416 l s gr gs 1054 1420 1063 1420 1063 1414 1054 1414 b c np 1056 1418 m 1061 1416 l s gr gs 1093 1420 1104 1420 1104 1390 1093 1390 b c np 1095 1413 m 1098 1415 l 1102 1418 l 1102 1392 l s gr gs 1098 1419 1102 1419 1102 1390 1098 1390 b c np 1100 1417 m 1100 1392 l s gr gs 1093 1394 1109 1394 1109 1390 1093 1390 b c np 1095 1392 m 1107 1392 l s gr -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1174 2109 1189 2109 1189 2070 1174 2070 b c np 1183 2107 m 1178 2089 l 1176 2082 l 1176 2077 l 1178 2074 l 1179 2072 l 1183 2072 l 1186 2075 l 1187 2079 l s gr gs 1176 2109 1186 2109 1186 2072 1176 2072 b c np 1184 2107 m 1179 2089 l 1178 2082 l 1178 2074 l s gr gs 1176 2109 1188 2109 1188 2075 1176 2075 b c np 1183 2107 m 1186 2107 l 1179 2084 l 1178 2077 l s gr gs 1171 2097 1191 2097 1191 2093 1171 2093 b c np 1173 2095 m 1189 2095 l s gr gs 1197 2076 1207 2076 1207 2046 1197 2046 b c np 1199 2069 m 1202 2070 l 1205 2074 l 1205 2048 l s gr gs 1202 2075 1206 2075 1206 2046 1202 2046 b c np 1204 2073 m 1204 2048 l s gr gs 1197 2050 1212 2050 1212 2046 1197 2046 b c np 1199 2048 m 1210 2048 l s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 1025 1452 1035 1452 1035 1442 1025 1442 b c np 0 3599 4 4 1030 1447 el f gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np gs 898 1313 908 1313 908 1303 898 1303 b c np 0 3599 4 4 903 1308 el f gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1960 6149 1960 6149 1943 6141 1943 b c np 6145 1947 m 6145 1948 l 6145 1949 l 6145 1950 l 6145 1951 l 6145 1952 l 6145 1953 l 6145 1954 l 6145 1955 l 6145 1956 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1994 6149 1994 6149 1952 6141 1952 b c np 6145 1956 m 6145 1957 l 6145 1958 l 6145 1959 l 6145 1960 l 6145 1961 l 6145 1962 l 6145 1963 l 6145 1964 l 6145 1965 l 6145 1966 l 6145 1967 l 6145 1968 l 6145 1969 l 6145 1970 l 6145 1971 l 6145 1972 l 6145 1973 l 6145 1974 l 6145 1975 l 6145 1976 l 6145 1977 l 6145 1978 l 6145 1979 l 6145 1980 l 6145 1981 l 6145 1982 l 6145 1983 l 6145 1984 l 6145 1985 l 6145 1986 l 6145 1987 l 6145 1988 l 6145 1989 l 6145 1990 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2029 6149 2029 6149 1986 6141 1986 b c np 6145 1990 m 6145 1991 l 6145 1992 l 6145 1993 l 6145 1994 l 6145 1995 l 6145 1996 l 6145 1997 l 6145 1998 l 6145 1999 l 6145 2000 l 6145 2001 l 6145 2002 l 6145 2003 l 6145 2004 l 6145 2005 l 6145 2006 l 6145 2007 l 6145 2008 l 6145 2009 l 6145 2010 l 6145 2011 l 6145 2012 l 6145 2013 l 6145 2014 l 6145 2015 l 6145 2016 l 6145 2017 l 6145 2018 l 6145 2019 l 6145 2020 l 6145 2021 l 6145 2022 l 6145 2023 l 6145 2024 l 6145 2025 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2063 6149 2063 6149 2021 6141 2021 b c np 6145 2025 m 6145 2026 l 6145 2027 l 6145 2028 l 6145 2029 l 6145 2030 l 6145 2031 l 6145 2032 l 6145 2033 l 6145 2034 l 6145 2035 l 6145 2036 l 6145 2037 l 6145 2038 l 6145 2039 l 6145 2040 l 6145 2041 l 6145 2042 l 6145 2043 l 6145 2044 l 6145 2045 l 6145 2046 l 6145 2047 l 6145 2048 l 6145 2049 l 6145 2050 l 6145 2051 l 6145 2052 l 6145 2053 l 6145 2054 l 6145 2055 l 6145 2056 l 6145 2057 l 6145 2058 l 6145 2059 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2098 6149 2098 6149 2055 6141 2055 b c np 6145 2059 m 6145 2060 l 6145 2061 l 6145 2062 l 6145 2063 l 6145 2064 l 6145 2065 l 6145 2066 l 6145 2067 l 6145 2068 l 6145 2069 l 6145 2070 l 6145 2071 l 6145 2072 l 6145 2073 l 6145 2074 l 6145 2075 l 6145 2076 l 6145 2077 l 6145 2078 l 6145 2079 l 6145 2080 l 6145 2081 l 6145 2082 l 6145 2083 l 6145 2084 l 6145 2085 l 6145 2086 l 6145 2087 l 6145 2088 l 6145 2089 l 6145 2090 l 6145 2091 l 6145 2092 l 6145 2093 l 6145 2094 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2133 6149 2133 6149 2090 6141 2090 b c np 6145 2094 m 6145 2095 l 6145 2096 l 6145 2097 l 6145 2098 l 6145 2099 l 6145 2100 l 6145 2101 l 6145 2102 l 6145 2103 l 6145 2104 l 6145 2105 l 6145 2106 l 6145 2107 l 6145 2108 l 6145 2109 l 6145 2110 l 6145 2111 l 6145 2112 l 6145 2113 l 6145 2114 l 6145 2115 l 6145 2116 l 6145 2117 l 6145 2118 l 6145 2119 l 6145 2120 l 6145 2121 l 6145 2122 l 6145 2123 l 6145 2124 l 6145 2125 l 6145 2126 l 6145 2127 l 6145 2128 l 6145 2129 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2168 6149 2168 6149 2125 6141 2125 b c np 6145 2129 m 6145 2130 l 6145 2131 l 6145 2132 l 6145 2133 l 6145 2134 l 6145 2135 l 6145 2136 l 6145 2137 l 6145 2138 l 6145 2139 l 6145 2140 l 6145 2141 l 6145 2142 l 6145 2143 l 6145 2144 l 6145 2145 l 6145 2146 l 6145 2147 l 6145 2148 l 6145 2149 l 6145 2150 l 6145 2151 l 6145 2152 l 6145 2153 l 6145 2154 l 6145 2155 l 6145 2156 l 6145 2157 l 6145 2158 l 6145 2159 l 6145 2160 l 6145 2161 l 6145 2162 l 6145 2163 l 6145 2164 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2202 6149 2202 6149 2160 6141 2160 b c np 6145 2164 m 6145 2165 l 6145 2166 l 6145 2167 l 6145 2168 l 6145 2169 l 6145 2170 l 6145 2171 l 6145 2172 l 6145 2173 l 6145 2174 l 6145 2175 l 6145 2176 l 6145 2177 l 6145 2178 l 6145 2179 l 6145 2180 l 6145 2181 l 6145 2182 l 6145 2183 l 6145 2184 l 6145 2185 l 6145 2186 l 6145 2187 l 6145 2188 l 6145 2189 l 6145 2190 l 6145 2191 l 6145 2192 l 6145 2193 l 6145 2194 l 6145 2195 l 6145 2196 l 6145 2197 l 6145 2198 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2237 6149 2237 6149 2194 6141 2194 b c np 6145 2198 m 6145 2199 l 6145 2200 l 6145 2201 l 6145 2202 l 6145 2203 l 6145 2204 l 6145 2205 l 6145 2206 l 6145 2207 l 6145 2208 l 6145 2209 l 6145 2210 l 6145 2211 l 6145 2212 l 6145 2213 l 6145 2214 l 6145 2215 l 6145 2216 l 6145 2217 l 6145 2218 l 6145 2219 l 6145 2220 l 6145 2221 l 6145 2222 l 6145 2223 l 6145 2224 l 6145 2225 l 6145 2226 l 6145 2227 l 6145 2228 l 6145 2229 l 6145 2230 l 6145 2231 l 6145 2232 l 6145 2233 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2272 6149 2272 6149 2229 6141 2229 b c np 6145 2233 m 6145 2234 l 6145 2235 l 6145 2236 l 6145 2237 l 6145 2238 l 6145 2239 l 6145 2240 l 6145 2241 l 6145 2242 l 6145 2243 l 6145 2244 l 6145 2245 l 6145 2246 l 6145 2247 l 6145 2248 l 6145 2249 l 6145 2250 l 6145 2251 l 6145 2252 l 6145 2253 l 6145 2254 l 6145 2255 l 6145 2256 l 6145 2257 l 6145 2258 l 6145 2259 l 6145 2260 l 6145 2261 l 6145 2262 l 6145 2263 l 6145 2264 l 6145 2265 l 6145 2266 l 6145 2267 l 6145 2268 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2306 6149 2306 6149 2264 6141 2264 b c np 6145 2268 m 6145 2269 l 6145 2270 l 6145 2271 l 6145 2272 l 6145 2273 l 6145 2274 l 6145 2275 l 6145 2276 l 6145 2277 l 6145 2278 l 6145 2279 l 6145 2280 l 6145 2281 l 6145 2282 l 6145 2283 l 6145 2284 l 6145 2285 l 6145 2286 l 6145 2287 l 6145 2288 l 6145 2289 l 6145 2290 l 6145 2291 l 6145 2292 l 6145 2293 l 6145 2294 l 6145 2295 l 6145 2296 l 6145 2297 l 6145 2298 l 6145 2299 l 6145 2300 l 6145 2301 l 6145 2302 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2333 6149 2333 6149 2298 6141 2298 b c np 6145 2302 m 6145 2303 l 6145 2304 l 6145 2305 l 6145 2306 l 6145 2307 l 6145 2308 l 6145 2309 l 6145 2310 l 6145 2311 l 6145 2312 l 6145 2313 l 6145 2314 l 6145 2315 l 6145 2316 l 6145 2317 l 6145 2318 l 6145 2319 l 6145 2320 l 6145 2321 l 6145 2322 l 6145 2323 l 6145 2324 l 6145 2325 l 6145 2326 l 6145 2327 l 6145 2328 l 6145 2329 l 6145 2328 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1952 6149 1952 6149 1941 6141 1941 b c np 6145 1947 m 6145 1948 l 6145 1947 l 6145 1946 l 6145 1945 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6140 1949 6149 1949 6149 1910 6140 1910 b c np 6145 1945 m 6145 1944 l 6145 1943 l 6145 1942 l 6145 1941 l 6145 1940 l 6145 1939 l 6145 1938 l 6145 1937 l 6145 1936 l 6145 1935 l 6145 1934 l 6145 1933 l 6145 1932 l 6145 1931 l 6145 1930 l 6145 1929 l 6145 1928 l 6145 1927 l 6145 1926 l 6145 1925 l 6144 1925 l 6144 1924 l 6144 1923 l 6144 1922 l 6144 1921 l 6144 1920 l 6144 1919 l 6144 1918 l 6144 1917 l 6144 1916 l 6145 1915 l 6145 1914 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5988 1918 6150 1918 6150 1875 5988 1875 b c np 6145 1914 m 6145 1913 l 6145 1912 l 6146 1912 l 6146 1911 l 6146 1910 l 6146 1909 l 6146 1908 l 6146 1907 l 6145 1906 l 6144 1905 l 6143 1905 l 6142 1904 l 6141 1904 l 6141 1903 l 6140 1903 l 6139 1903 l 6138 1902 l 6137 1902 l 6136 1902 l 6135 1901 l 6134 1901 l 6133 1900 l 6131 1900 l 6130 1900 l 6128 1899 l 6127 1899 l 6126 1899 l 6124 1898 l 6122 1898 l 6121 1898 l 6119 1897 l 6117 1897 l 6115 1896 l 6113 1896 l 6111 1896 l 6109 1895 l 6106 1895 l 6104 1894 l 6102 1894 l 6099 1894 l 6097 1893 l 6094 1893 l 6091 1893 l 6089 1892 l 6086 1892 l 6083 1891 l 6081 1891 l 6078 1891 l 6075 1890 l 6072 1890 l 6069 1890 l 6066 1889 l 6064 1889 l 6061 1889 l 6058 1888 l 6055 1888 l 6052 1888 l 6049 1887 l 6047 1887 l 6044 1886 l 6041 1886 l 6038 1886 l 6035 1885 l 6033 1885 l 6030 1884 l 6027 1884 l 6024 1884 l 6022 1883 l 6019 1883 l 6016 1883 l 6013 1882 l 6011 1882 l 6008 1882 l 6006 1881 l 6003 1881 l 6000 1880 l 5998 1880 l 5995 1880 l 5992 1879 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5744 1883 5996 1883 5996 1841 5744 1841 b c np 5992 1879 m 5990 1879 l 5987 1879 l 5985 1878 l 5982 1878 l 5980 1877 l 5977 1877 l 5974 1877 l 5972 1876 l 5969 1876 l 5966 1876 l 5964 1875 l 5961 1875 l 5958 1875 l 5956 1874 l 5953 1874 l 5950 1873 l 5948 1873 l 5945 1873 l 5942 1872 l 5940 1872 l 5937 1872 l 5934 1871 l 5932 1871 l 5929 1871 l 5926 1870 l 5924 1870 l 5921 1869 l 5918 1869 l 5916 1869 l 5913 1868 l 5910 1868 l 5908 1867 l 5905 1867 l 5902 1867 l 5900 1866 l 5897 1866 l 5894 1866 l 5892 1865 l 5889 1865 l 5886 1865 l 5884 1864 l 5881 1864 l 5878 1863 l 5876 1863 l 5873 1863 l 5870 1862 l 5867 1862 l 5865 1861 l 5862 1861 l 5859 1861 l 5857 1860 l 5854 1860 l 5851 1860 l 5849 1859 l 5846 1859 l 5843 1858 l 5841 1858 l 5838 1858 l 5835 1857 l 5833 1857 l 5830 1857 l 5827 1856 l 5825 1856 l 5822 1855 l 5819 1855 l 5817 1855 l 5814 1854 l 5811 1854 l 5809 1854 l 5806 1853 l 5804 1853 l 5801 1852 l 5798 1852 l 5796 1852 l 5793 1851 l 5790 1851 l 5788 1851 l 5785 1850 l 5782 1850 l 5780 1849 l 5777 1849 l 5774 1849 l 5772 1848 l 5769 1848 l 5766 1848 l 5764 1847 l 5761 1847 l 5758 1847 l 5756 1846 l 5753 1846 l 5750 1846 l 5748 1845 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5493 1849 5752 1849 5752 1806 5493 1806 b c np 5748 1845 m 5745 1845 l 5742 1844 l 5740 1844 l 5737 1844 l 5734 1843 l 5732 1843 l 5729 1842 l 5726 1842 l 5724 1842 l 5721 1841 l 5718 1841 l 5716 1841 l 5713 1840 l 5710 1840 l 5708 1840 l 5705 1839 l 5702 1839 l 5700 1838 l 5697 1838 l 5694 1838 l 5691 1837 l 5689 1837 l 5686 1836 l 5683 1836 l 5681 1836 l 5678 1835 l 5675 1835 l 5673 1835 l 5670 1834 l 5667 1834 l 5665 1834 l 5662 1833 l 5659 1833 l 5657 1832 l 5654 1832 l 5651 1832 l 5649 1831 l 5646 1831 l 5643 1831 l 5641 1830 l 5638 1830 l 5635 1830 l 5633 1829 l 5630 1829 l 5627 1828 l 5625 1828 l 5622 1828 l 5619 1827 l 5617 1827 l 5614 1826 l 5611 1826 l 5609 1826 l 5606 1825 l 5603 1825 l 5601 1825 l 5598 1824 l 5595 1824 l 5593 1823 l 5590 1823 l 5587 1823 l 5585 1822 l 5582 1822 l 5579 1822 l 5577 1821 l 5574 1821 l 5571 1821 l 5569 1820 l 5566 1820 l 5563 1819 l 5561 1819 l 5558 1818 l 5555 1818 l 5552 1818 l 5550 1817 l 5547 1817 l 5544 1817 l 5542 1816 l 5539 1816 l 5537 1816 l 5534 1815 l 5531 1815 l 5529 1814 l 5526 1814 l 5523 1814 l 5521 1813 l 5518 1813 l 5515 1813 l 5513 1812 l 5510 1812 l 5507 1812 l 5505 1811 l 5502 1811 l 5499 1810 l 5497 1810 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5248 1814 5501 1814 5501 1772 5248 1772 b c np 5497 1810 m 5494 1810 l 5491 1809 l 5489 1809 l 5486 1809 l 5483 1808 l 5481 1808 l 5478 1807 l 5475 1807 l 5473 1807 l 5470 1806 l 5467 1806 l 5465 1806 l 5462 1805 l 5459 1805 l 5457 1805 l 5454 1804 l 5451 1804 l 5449 1804 l 5446 1803 l 5443 1803 l 5441 1802 l 5438 1802 l 5435 1801 l 5433 1801 l 5430 1801 l 5427 1800 l 5425 1800 l 5422 1800 l 5419 1799 l 5417 1799 l 5414 1799 l 5411 1798 l 5409 1798 l 5406 1797 l 5403 1797 l 5401 1797 l 5398 1796 l 5395 1796 l 5393 1796 l 5390 1795 l 5387 1795 l 5385 1794 l 5382 1794 l 5379 1794 l 5377 1793 l 5374 1793 l 5371 1792 l 5369 1792 l 5366 1792 l 5363 1791 l 5361 1791 l 5358 1791 l 5355 1790 l 5353 1790 l 5350 1789 l 5348 1789 l 5345 1789 l 5342 1788 l 5340 1788 l 5337 1788 l 5334 1787 l 5332 1787 l 5329 1787 l 5326 1786 l 5324 1786 l 5321 1785 l 5318 1785 l 5316 1785 l 5313 1784 l 5310 1784 l 5308 1783 l 5305 1783 l 5302 1783 l 5300 1782 l 5297 1782 l 5295 1782 l 5292 1781 l 5289 1781 l 5287 1781 l 5284 1780 l 5281 1780 l 5278 1780 l 5276 1779 l 5273 1779 l 5270 1778 l 5268 1778 l 5265 1778 l 5262 1777 l 5260 1777 l 5257 1776 l 5254 1776 l 5252 1776 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5000 1780 5256 1780 5256 1737 5000 1737 b c np 5252 1776 m 5249 1775 l 5246 1775 l 5244 1775 l 5241 1774 l 5238 1774 l 5236 1774 l 5233 1773 l 5230 1773 l 5228 1772 l 5225 1772 l 5222 1772 l 5220 1771 l 5217 1771 l 5214 1771 l 5212 1770 l 5209 1770 l 5206 1769 l 5204 1769 l 5201 1769 l 5198 1768 l 5196 1768 l 5193 1768 l 5190 1767 l 5188 1767 l 5185 1766 l 5182 1766 l 5180 1766 l 5177 1765 l 5174 1765 l 5172 1765 l 5169 1764 l 5166 1764 l 5164 1763 l 5161 1763 l 5158 1763 l 5156 1762 l 5153 1762 l 5150 1762 l 5148 1761 l 5145 1761 l 5143 1760 l 5140 1760 l 5137 1760 l 5135 1759 l 5132 1759 l 5129 1758 l 5127 1758 l 5124 1758 l 5121 1757 l 5119 1757 l 5116 1757 l 5113 1756 l 5111 1756 l 5108 1756 l 5105 1755 l 5103 1755 l 5100 1754 l 5097 1754 l 5095 1754 l 5092 1753 l 5089 1753 l 5087 1752 l 5084 1752 l 5081 1752 l 5079 1751 l 5076 1751 l 5073 1751 l 5071 1750 l 5068 1750 l 5065 1750 l 5063 1749 l 5060 1749 l 5057 1749 l 5055 1748 l 5052 1748 l 5049 1747 l 5047 1747 l 5044 1747 l 5041 1746 l 5039 1746 l 5036 1746 l 5033 1745 l 5031 1745 l 5028 1745 l 5025 1744 l 5023 1744 l 5020 1743 l 5017 1743 l 5015 1743 l 5012 1742 l 5009 1742 l 5007 1741 l 5004 1741 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4753 1745 5008 1745 5008 1702 4753 1702 b c np 5004 1741 m 5001 1741 l 4999 1740 l 4996 1740 l 4993 1740 l 4991 1739 l 4988 1739 l 4985 1739 l 4983 1738 l 4980 1738 l 4978 1737 l 4975 1737 l 4972 1737 l 4970 1736 l 4967 1736 l 4964 1735 l 4962 1735 l 4959 1735 l 4956 1734 l 4954 1734 l 4951 1734 l 4948 1733 l 4946 1733 l 4943 1732 l 4940 1732 l 4938 1732 l 4935 1731 l 4932 1731 l 4930 1731 l 4927 1730 l 4924 1730 l 4922 1729 l 4919 1729 l 4916 1729 l 4914 1728 l 4911 1728 l 4908 1727 l 4906 1727 l 4903 1727 l 4900 1726 l 4898 1726 l 4895 1726 l 4892 1725 l 4890 1725 l 4887 1725 l 4885 1724 l 4882 1724 l 4879 1723 l 4877 1723 l 4874 1723 l 4871 1722 l 4869 1722 l 4866 1722 l 4864 1721 l 4861 1721 l 4858 1721 l 4856 1720 l 4853 1720 l 4850 1720 l 4848 1719 l 4845 1719 l 4842 1718 l 4840 1718 l 4837 1718 l 4834 1717 l 4832 1717 l 4829 1716 l 4826 1716 l 4824 1716 l 4821 1715 l 4818 1715 l 4816 1715 l 4813 1714 l 4810 1714 l 4808 1714 l 4805 1713 l 4802 1713 l 4800 1712 l 4797 1712 l 4795 1712 l 4792 1711 l 4789 1711 l 4787 1710 l 4784 1710 l 4781 1710 l 4779 1709 l 4776 1709 l 4773 1709 l 4771 1708 l 4768 1708 l 4765 1708 l 4763 1707 l 4760 1707 l 4757 1706 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4509 1710 4761 1710 4761 1668 4509 1668 b c np 4757 1706 m 4754 1706 l 4752 1706 l 4749 1705 l 4746 1705 l 4744 1705 l 4741 1704 l 4738 1704 l 4736 1704 l 4733 1703 l 4730 1703 l 4728 1702 l 4725 1702 l 4723 1702 l 4720 1701 l 4717 1701 l 4715 1700 l 4712 1700 l 4709 1700 l 4707 1699 l 4704 1699 l 4701 1699 l 4699 1698 l 4696 1698 l 4693 1697 l 4691 1697 l 4688 1697 l 4685 1696 l 4683 1696 l 4680 1696 l 4677 1695 l 4675 1695 l 4672 1695 l 4669 1694 l 4667 1694 l 4664 1693 l 4661 1693 l 4659 1692 l 4656 1692 l 4654 1692 l 4651 1691 l 4648 1691 l 4646 1691 l 4643 1690 l 4640 1690 l 4638 1690 l 4635 1689 l 4632 1689 l 4630 1688 l 4627 1688 l 4624 1688 l 4622 1687 l 4619 1687 l 4616 1687 l 4614 1686 l 4611 1686 l 4608 1685 l 4606 1685 l 4603 1685 l 4600 1684 l 4598 1684 l 4595 1684 l 4592 1683 l 4590 1683 l 4587 1683 l 4584 1682 l 4582 1682 l 4579 1681 l 4576 1681 l 4574 1681 l 4571 1680 l 4569 1680 l 4566 1680 l 4563 1679 l 4561 1679 l 4558 1679 l 4555 1678 l 4553 1678 l 4550 1677 l 4547 1677 l 4545 1677 l 4542 1676 l 4539 1676 l 4537 1675 l 4534 1675 l 4531 1675 l 4529 1674 l 4526 1674 l 4523 1674 l 4521 1673 l 4518 1673 l 4516 1673 l 4513 1672 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4260 1676 4517 1676 4517 1633 4260 1633 b c np 4513 1672 m 4510 1672 l 4508 1671 l 4505 1671 l 4502 1671 l 4500 1670 l 4497 1670 l 4494 1670 l 4492 1669 l 4489 1669 l 4486 1668 l 4484 1668 l 4481 1668 l 4478 1667 l 4475 1667 l 4473 1666 l 4470 1666 l 4467 1666 l 4465 1665 l 4462 1665 l 4459 1665 l 4457 1664 l 4454 1664 l 4452 1663 l 4449 1663 l 4446 1663 l 4444 1662 l 4441 1662 l 4438 1662 l 4436 1661 l 4433 1661 l 4430 1660 l 4428 1660 l 4425 1660 l 4422 1659 l 4420 1659 l 4417 1659 l 4415 1658 l 4412 1658 l 4409 1657 l 4407 1657 l 4404 1657 l 4401 1656 l 4399 1656 l 4396 1656 l 4394 1655 l 4391 1655 l 4388 1655 l 4386 1654 l 4383 1654 l 4380 1654 l 4378 1653 l 4375 1653 l 4372 1652 l 4370 1652 l 4367 1652 l 4364 1651 l 4362 1651 l 4359 1650 l 4356 1650 l 4354 1650 l 4351 1649 l 4349 1649 l 4346 1649 l 4343 1648 l 4341 1648 l 4338 1648 l 4335 1647 l 4333 1647 l 4330 1646 l 4327 1646 l 4325 1646 l 4322 1645 l 4319 1645 l 4317 1645 l 4314 1644 l 4312 1644 l 4309 1643 l 4306 1643 l 4304 1643 l 4301 1642 l 4298 1642 l 4296 1642 l 4293 1641 l 4290 1641 l 4288 1640 l 4285 1640 l 4282 1640 l 4280 1639 l 4277 1639 l 4274 1639 l 4272 1638 l 4269 1638 l 4266 1637 l 4264 1637 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4016 1641 4268 1641 4268 1599 4016 1599 b c np 4264 1637 m 4261 1637 l 4258 1636 l 4256 1636 l 4253 1635 l 4250 1635 l 4248 1635 l 4245 1634 l 4243 1634 l 4240 1634 l 4237 1633 l 4235 1633 l 4232 1632 l 4229 1632 l 4227 1632 l 4224 1631 l 4221 1631 l 4219 1631 l 4216 1630 l 4213 1630 l 4211 1630 l 4208 1629 l 4206 1629 l 4203 1628 l 4200 1628 l 4198 1628 l 4195 1627 l 4192 1627 l 4190 1626 l 4187 1626 l 4184 1626 l 4182 1625 l 4179 1625 l 4177 1625 l 4174 1624 l 4171 1624 l 4169 1624 l 4166 1623 l 4163 1623 l 4161 1623 l 4158 1622 l 4155 1622 l 4153 1621 l 4150 1621 l 4147 1621 l 4145 1620 l 4142 1620 l 4139 1620 l 4137 1619 l 4134 1619 l 4132 1618 l 4129 1618 l 4126 1618 l 4124 1617 l 4121 1617 l 4118 1617 l 4116 1616 l 4113 1616 l 4110 1615 l 4108 1615 l 4105 1615 l 4103 1614 l 4100 1614 l 4097 1614 l 4095 1613 l 4092 1613 l 4089 1613 l 4087 1612 l 4084 1612 l 4081 1611 l 4079 1611 l 4076 1610 l 4073 1610 l 4071 1610 l 4068 1609 l 4065 1609 l 4063 1609 l 4060 1608 l 4057 1608 l 4055 1608 l 4052 1607 l 4049 1607 l 4047 1606 l 4044 1606 l 4041 1606 l 4039 1605 l 4036 1605 l 4034 1605 l 4031 1604 l 4028 1604 l 4026 1603 l 4023 1603 l 4020 1603 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3768 1607 4024 1607 4024 1564 3768 1564 b c np 4020 1603 m 4018 1602 l 4015 1602 l 4013 1601 l 4010 1601 l 4007 1601 l 4005 1600 l 4002 1600 l 3999 1600 l 3997 1599 l 3994 1599 l 3991 1599 l 3989 1598 l 3986 1598 l 3983 1597 l 3981 1597 l 3978 1597 l 3975 1596 l 3973 1596 l 3970 1596 l 3968 1595 l 3965 1595 l 3962 1595 l 3960 1594 l 3957 1594 l 3955 1593 l 3952 1593 l 3949 1593 l 3947 1592 l 3944 1592 l 3941 1592 l 3939 1591 l 3936 1591 l 3933 1590 l 3931 1590 l 3928 1590 l 3925 1589 l 3923 1589 l 3920 1589 l 3918 1588 l 3915 1588 l 3912 1588 l 3910 1587 l 3907 1587 l 3904 1586 l 3902 1586 l 3899 1586 l 3897 1585 l 3894 1585 l 3891 1584 l 3889 1584 l 3886 1584 l 3883 1583 l 3881 1583 l 3878 1583 l 3875 1582 l 3873 1582 l 3870 1581 l 3868 1581 l 3865 1581 l 3862 1580 l 3860 1580 l 3857 1580 l 3854 1579 l 3852 1579 l 3849 1579 l 3846 1578 l 3844 1578 l 3841 1577 l 3838 1577 l 3836 1576 l 3833 1576 l 3831 1576 l 3828 1575 l 3825 1575 l 3823 1575 l 3820 1574 l 3817 1574 l 3815 1574 l 3812 1573 l 3810 1573 l 3807 1572 l 3804 1572 l 3802 1572 l 3799 1571 l 3796 1571 l 3794 1571 l 3791 1570 l 3788 1570 l 3786 1570 l 3783 1569 l 3780 1569 l 3778 1568 l 3775 1568 l 3772 1568 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3526 1572 3776 1572 3776 1529 3526 1529 b c np 3772 1568 m 3770 1567 l 3767 1567 l 3765 1566 l 3762 1566 l 3759 1566 l 3757 1565 l 3754 1565 l 3751 1565 l 3749 1564 l 3746 1564 l 3743 1564 l 3741 1563 l 3738 1563 l 3736 1563 l 3733 1562 l 3730 1562 l 3728 1561 l 3725 1561 l 3722 1561 l 3720 1560 l 3717 1560 l 3714 1559 l 3712 1559 l 3709 1559 l 3706 1558 l 3704 1558 l 3701 1558 l 3698 1557 l 3696 1557 l 3693 1557 l 3691 1556 l 3688 1556 l 3685 1555 l 3683 1555 l 3680 1555 l 3677 1554 l 3675 1554 l 3672 1554 l 3670 1553 l 3667 1553 l 3664 1552 l 3662 1552 l 3659 1552 l 3656 1551 l 3654 1551 l 3651 1550 l 3648 1550 l 3646 1550 l 3643 1549 l 3641 1549 l 3638 1549 l 3635 1548 l 3633 1548 l 3630 1547 l 3628 1547 l 3625 1547 l 3622 1546 l 3620 1546 l 3617 1546 l 3614 1545 l 3612 1545 l 3609 1545 l 3606 1544 l 3604 1544 l 3601 1543 l 3598 1543 l 3596 1543 l 3593 1542 l 3591 1542 l 3588 1541 l 3585 1541 l 3583 1541 l 3580 1540 l 3578 1540 l 3575 1540 l 3572 1539 l 3570 1539 l 3567 1539 l 3564 1538 l 3562 1538 l 3559 1537 l 3556 1537 l 3554 1537 l 3551 1536 l 3548 1536 l 3546 1536 l 3543 1535 l 3540 1535 l 3538 1534 l 3535 1534 l 3533 1534 l 3530 1533 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3282 1537 3534 1537 3534 1495 3282 1495 b c np 3530 1533 m 3527 1533 l 3525 1533 l 3522 1532 l 3519 1532 l 3517 1532 l 3514 1531 l 3511 1531 l 3509 1530 l 3506 1530 l 3504 1530 l 3501 1529 l 3498 1529 l 3496 1529 l 3493 1528 l 3490 1528 l 3488 1528 l 3485 1527 l 3483 1527 l 3480 1526 l 3477 1526 l 3475 1526 l 3472 1525 l 3470 1525 l 3467 1524 l 3464 1524 l 3462 1524 l 3459 1523 l 3456 1523 l 3454 1523 l 3451 1522 l 3449 1522 l 3446 1522 l 3443 1521 l 3441 1521 l 3438 1520 l 3436 1520 l 3433 1520 l 3430 1519 l 3428 1519 l 3425 1519 l 3422 1518 l 3420 1518 l 3417 1517 l 3414 1517 l 3412 1517 l 3409 1516 l 3406 1516 l 3404 1516 l 3401 1515 l 3399 1515 l 3396 1514 l 3393 1514 l 3391 1514 l 3388 1513 l 3386 1513 l 3383 1513 l 3380 1512 l 3378 1512 l 3375 1511 l 3372 1511 l 3370 1511 l 3367 1510 l 3364 1510 l 3362 1509 l 3359 1509 l 3356 1509 l 3354 1508 l 3351 1508 l 3349 1508 l 3346 1507 l 3343 1507 l 3341 1506 l 3338 1506 l 3336 1506 l 3333 1505 l 3330 1505 l 3328 1505 l 3325 1504 l 3322 1504 l 3320 1504 l 3317 1503 l 3315 1503 l 3312 1502 l 3309 1502 l 3307 1502 l 3304 1501 l 3302 1501 l 3299 1500 l 3296 1500 l 3294 1500 l 3291 1499 l 3288 1499 l 3286 1499 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3038 1503 3290 1503 3290 1460 3038 1460 b c np 3286 1499 m 3283 1498 l 3281 1498 l 3278 1498 l 3275 1497 l 3273 1497 l 3270 1497 l 3268 1496 l 3265 1496 l 3262 1495 l 3260 1495 l 3257 1495 l 3254 1494 l 3252 1494 l 3249 1494 l 3246 1493 l 3244 1493 l 3241 1492 l 3238 1492 l 3236 1492 l 3233 1491 l 3231 1491 l 3228 1491 l 3225 1490 l 3223 1490 l 3220 1489 l 3218 1489 l 3215 1489 l 3212 1488 l 3210 1488 l 3207 1488 l 3204 1487 l 3202 1487 l 3199 1487 l 3196 1486 l 3194 1486 l 3191 1485 l 3188 1485 l 3186 1484 l 3183 1484 l 3181 1484 l 3178 1483 l 3175 1483 l 3173 1483 l 3170 1482 l 3168 1482 l 3165 1482 l 3162 1481 l 3160 1481 l 3157 1480 l 3154 1480 l 3152 1480 l 3149 1479 l 3147 1479 l 3144 1479 l 3141 1478 l 3139 1478 l 3136 1477 l 3134 1477 l 3131 1477 l 3128 1476 l 3126 1476 l 3123 1475 l 3120 1475 l 3118 1475 l 3115 1474 l 3113 1474 l 3110 1474 l 3107 1473 l 3105 1473 l 3102 1473 l 3099 1472 l 3097 1472 l 3094 1471 l 3092 1471 l 3089 1471 l 3086 1470 l 3084 1470 l 3081 1470 l 3079 1469 l 3076 1469 l 3073 1469 l 3071 1468 l 3068 1468 l 3065 1468 l 3063 1467 l 3060 1467 l 3058 1466 l 3055 1466 l 3052 1466 l 3050 1465 l 3047 1465 l 3045 1465 l 3042 1464 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2798 1468 3046 1468 3046 1426 2798 1426 b c np 3042 1464 m 3039 1464 l 3037 1464 l 3034 1463 l 3031 1463 l 3029 1462 l 3026 1462 l 3024 1462 l 3021 1461 l 3019 1461 l 3016 1461 l 3013 1460 l 3011 1460 l 3008 1459 l 3005 1459 l 3003 1459 l 3000 1458 l 2998 1458 l 2995 1458 l 2992 1457 l 2990 1457 l 2987 1456 l 2985 1456 l 2982 1456 l 2979 1455 l 2977 1455 l 2974 1455 l 2971 1454 l 2969 1454 l 2966 1453 l 2964 1453 l 2961 1453 l 2958 1452 l 2956 1452 l 2953 1452 l 2951 1451 l 2948 1451 l 2945 1450 l 2943 1450 l 2940 1450 l 2937 1449 l 2935 1449 l 2932 1448 l 2930 1448 l 2927 1448 l 2924 1447 l 2922 1447 l 2919 1447 l 2917 1446 l 2914 1446 l 2911 1446 l 2909 1445 l 2906 1445 l 2903 1444 l 2901 1444 l 2898 1444 l 2896 1443 l 2893 1443 l 2890 1442 l 2888 1442 l 2885 1442 l 2882 1441 l 2880 1441 l 2877 1441 l 2875 1440 l 2872 1440 l 2869 1440 l 2867 1439 l 2864 1439 l 2862 1439 l 2859 1438 l 2856 1438 l 2854 1437 l 2851 1437 l 2849 1437 l 2846 1436 l 2844 1436 l 2841 1436 l 2838 1435 l 2836 1435 l 2833 1434 l 2830 1434 l 2828 1434 l 2825 1433 l 2823 1433 l 2820 1433 l 2818 1432 l 2815 1432 l 2812 1431 l 2810 1431 l 2807 1431 l 2804 1430 l 2802 1430 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2553 1434 2806 1434 2806 1391 2553 1391 b c np 2802 1430 m 2799 1430 l 2797 1429 l 2794 1429 l 2791 1429 l 2789 1428 l 2786 1428 l 2784 1427 l 2781 1427 l 2778 1427 l 2776 1426 l 2773 1426 l 2770 1425 l 2768 1425 l 2765 1425 l 2763 1424 l 2760 1424 l 2757 1424 l 2755 1423 l 2752 1423 l 2750 1422 l 2747 1422 l 2744 1422 l 2742 1421 l 2739 1421 l 2736 1421 l 2734 1420 l 2731 1420 l 2729 1419 l 2726 1419 l 2723 1419 l 2721 1418 l 2718 1418 l 2715 1417 l 2713 1417 l 2710 1417 l 2708 1416 l 2705 1416 l 2703 1416 l 2700 1415 l 2697 1415 l 2695 1415 l 2692 1414 l 2689 1414 l 2687 1413 l 2684 1413 l 2682 1413 l 2679 1412 l 2677 1412 l 2674 1412 l 2671 1411 l 2669 1411 l 2666 1411 l 2664 1410 l 2661 1410 l 2659 1409 l 2656 1409 l 2653 1409 l 2651 1408 l 2648 1408 l 2645 1408 l 2643 1407 l 2640 1407 l 2638 1406 l 2635 1406 l 2632 1406 l 2630 1405 l 2627 1405 l 2625 1405 l 2622 1404 l 2620 1404 l 2617 1404 l 2614 1403 l 2612 1403 l 2609 1402 l 2607 1402 l 2604 1402 l 2601 1401 l 2599 1401 l 2596 1400 l 2594 1400 l 2591 1400 l 2588 1399 l 2586 1399 l 2583 1399 l 2580 1398 l 2578 1398 l 2575 1397 l 2573 1397 l 2570 1397 l 2568 1396 l 2565 1396 l 2562 1396 l 2560 1395 l 2557 1395 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2315 1399 2561 1399 2561 1357 2315 1357 b c np 2557 1395 m 2555 1395 l 2552 1394 l 2549 1394 l 2547 1393 l 2544 1393 l 2542 1392 l 2539 1392 l 2536 1392 l 2534 1391 l 2531 1391 l 2529 1391 l 2526 1390 l 2523 1390 l 2521 1390 l 2518 1389 l 2515 1389 l 2513 1388 l 2510 1388 l 2508 1388 l 2505 1387 l 2503 1387 l 2500 1387 l 2497 1386 l 2495 1386 l 2492 1386 l 2490 1385 l 2487 1385 l 2485 1384 l 2482 1384 l 2479 1384 l 2477 1383 l 2474 1383 l 2472 1382 l 2469 1382 l 2466 1382 l 2464 1381 l 2461 1381 l 2459 1381 l 2456 1380 l 2453 1380 l 2451 1380 l 2448 1379 l 2446 1379 l 2443 1379 l 2440 1378 l 2438 1378 l 2435 1377 l 2433 1377 l 2430 1377 l 2428 1376 l 2425 1376 l 2422 1375 l 2420 1375 l 2417 1375 l 2415 1374 l 2412 1374 l 2410 1374 l 2407 1373 l 2404 1373 l 2402 1373 l 2399 1372 l 2396 1372 l 2394 1371 l 2391 1371 l 2389 1371 l 2386 1370 l 2384 1370 l 2381 1370 l 2378 1369 l 2376 1369 l 2373 1368 l 2370 1368 l 2368 1368 l 2365 1367 l 2363 1367 l 2360 1366 l 2358 1366 l 2355 1366 l 2352 1365 l 2350 1365 l 2347 1365 l 2344 1364 l 2342 1364 l 2339 1363 l 2337 1363 l 2334 1363 l 2331 1362 l 2329 1362 l 2326 1362 l 2324 1361 l 2321 1361 l 2319 1361 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2073 1365 2323 1365 2323 1321 2073 1321 b c np 2319 1361 m 2316 1360 l 2313 1360 l 2311 1359 l 2308 1359 l 2306 1359 l 2303 1358 l 2301 1358 l 2298 1357 l 2295 1357 l 2293 1357 l 2290 1356 l 2288 1356 l 2285 1356 l 2283 1355 l 2280 1355 l 2277 1355 l 2275 1354 l 2272 1354 l 2270 1353 l 2267 1353 l 2264 1353 l 2262 1352 l 2259 1352 l 2257 1352 l 2254 1351 l 2252 1351 l 2249 1350 l 2246 1350 l 2244 1350 l 2241 1349 l 2239 1349 l 2236 1349 l 2234 1348 l 2231 1348 l 2228 1348 l 2226 1347 l 2223 1347 l 2221 1346 l 2218 1346 l 2216 1346 l 2213 1345 l 2210 1345 l 2208 1345 l 2205 1344 l 2203 1344 l 2200 1344 l 2197 1343 l 2195 1343 l 2192 1342 l 2190 1342 l 2187 1341 l 2184 1341 l 2182 1341 l 2179 1340 l 2177 1340 l 2174 1340 l 2171 1339 l 2169 1339 l 2166 1339 l 2164 1338 l 2161 1338 l 2159 1337 l 2156 1337 l 2153 1337 l 2151 1336 l 2148 1336 l 2146 1336 l 2143 1335 l 2141 1335 l 2138 1334 l 2136 1334 l 2133 1334 l 2130 1333 l 2128 1333 l 2125 1332 l 2123 1332 l 2120 1332 l 2118 1331 l 2115 1331 l 2112 1331 l 2110 1330 l 2107 1330 l 2105 1330 l 2102 1329 l 2100 1329 l 2097 1328 l 2094 1328 l 2092 1328 l 2089 1327 l 2087 1327 l 2084 1327 l 2082 1326 l 2079 1326 l 2077 1325 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1837 1329 2081 1329 2081 1287 1837 1287 b c np 2077 1325 m 2074 1325 l 2071 1325 l 2069 1324 l 2066 1324 l 2064 1324 l 2061 1323 l 2059 1323 l 2056 1322 l 2053 1322 l 2051 1322 l 2048 1321 l 2046 1321 l 2043 1321 l 2041 1320 l 2038 1320 l 2035 1320 l 2033 1319 l 2030 1319 l 2028 1319 l 2025 1318 l 2023 1318 l 2020 1317 l 2018 1317 l 2015 1317 l 2012 1316 l 2010 1316 l 2007 1315 l 2005 1315 l 2002 1315 l 2000 1314 l 1997 1314 l 1994 1314 l 1992 1313 l 1989 1313 l 1987 1313 l 1984 1312 l 1981 1312 l 1979 1311 l 1976 1311 l 1974 1311 l 1971 1310 l 1969 1310 l 1966 1310 l 1964 1309 l 1961 1309 l 1959 1308 l 1956 1308 l 1953 1308 l 1951 1307 l 1948 1307 l 1946 1307 l 1943 1306 l 1941 1306 l 1938 1305 l 1936 1305 l 1933 1305 l 1930 1304 l 1928 1304 l 1925 1304 l 1923 1303 l 1920 1303 l 1918 1303 l 1915 1302 l 1912 1302 l 1910 1301 l 1907 1301 l 1905 1300 l 1902 1300 l 1900 1300 l 1897 1299 l 1895 1299 l 1892 1299 l 1889 1298 l 1887 1298 l 1884 1298 l 1882 1297 l 1879 1297 l 1877 1296 l 1874 1296 l 1872 1296 l 1869 1295 l 1867 1295 l 1864 1295 l 1861 1294 l 1859 1294 l 1856 1293 l 1854 1293 l 1851 1293 l 1849 1292 l 1846 1292 l 1843 1291 l 1841 1291 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1601 1295 1845 1295 1845 1252 1601 1252 b c np 1841 1291 m 1838 1291 l 1836 1290 l 1833 1290 l 1831 1290 l 1828 1289 l 1826 1289 l 1823 1289 l 1820 1288 l 1818 1288 l 1815 1287 l 1813 1287 l 1810 1287 l 1808 1286 l 1805 1286 l 1803 1286 l 1800 1285 l 1797 1285 l 1795 1285 l 1792 1284 l 1790 1284 l 1787 1283 l 1785 1283 l 1782 1283 l 1780 1282 l 1777 1282 l 1775 1282 l 1772 1281 l 1769 1281 l 1767 1280 l 1764 1280 l 1762 1280 l 1759 1279 l 1757 1279 l 1754 1279 l 1752 1278 l 1749 1278 l 1746 1278 l 1744 1277 l 1741 1277 l 1739 1276 l 1736 1276 l 1734 1276 l 1731 1275 l 1729 1275 l 1726 1274 l 1724 1274 l 1721 1274 l 1718 1273 l 1716 1273 l 1713 1273 l 1711 1272 l 1708 1272 l 1706 1271 l 1703 1271 l 1701 1271 l 1698 1270 l 1696 1270 l 1693 1270 l 1691 1269 l 1688 1269 l 1685 1269 l 1683 1268 l 1680 1268 l 1678 1267 l 1675 1267 l 1673 1266 l 1670 1266 l 1668 1266 l 1665 1265 l 1662 1265 l 1660 1265 l 1658 1264 l 1655 1264 l 1652 1264 l 1650 1263 l 1647 1263 l 1645 1262 l 1642 1262 l 1640 1262 l 1637 1261 l 1635 1261 l 1632 1261 l 1630 1260 l 1627 1260 l 1625 1260 l 1622 1259 l 1620 1259 l 1617 1258 l 1615 1258 l 1612 1258 l 1610 1257 l 1607 1257 l 1605 1256 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1366 1260 1609 1260 1609 1218 1366 1218 b c np 1605 1256 m 1602 1256 l 1600 1256 l 1597 1255 l 1594 1255 l 1592 1255 l 1589 1254 l 1587 1254 l 1584 1254 l 1582 1253 l 1579 1253 l 1577 1253 l 1574 1252 l 1572 1252 l 1569 1251 l 1567 1251 l 1564 1251 l 1562 1250 l 1559 1250 l 1557 1249 l 1554 1249 l 1551 1249 l 1549 1248 l 1546 1248 l 1544 1248 l 1541 1247 l 1539 1247 l 1536 1247 l 1534 1246 l 1531 1246 l 1529 1245 l 1526 1245 l 1524 1245 l 1521 1244 l 1519 1244 l 1516 1244 l 1513 1243 l 1511 1243 l 1509 1242 l 1506 1242 l 1503 1242 l 1501 1241 l 1499 1241 l 1496 1240 l 1493 1240 l 1491 1240 l 1488 1239 l 1486 1239 l 1483 1239 l 1481 1238 l 1478 1238 l 1476 1237 l 1473 1237 l 1471 1237 l 1468 1236 l 1466 1236 l 1463 1236 l 1461 1235 l 1458 1235 l 1455 1235 l 1453 1234 l 1451 1234 l 1448 1233 l 1445 1233 l 1443 1233 l 1440 1232 l 1438 1232 l 1435 1231 l 1433 1231 l 1430 1231 l 1428 1230 l 1425 1230 l 1423 1230 l 1420 1229 l 1418 1229 l 1415 1229 l 1413 1228 l 1410 1228 l 1408 1227 l 1405 1227 l 1403 1227 l 1400 1226 l 1397 1226 l 1395 1226 l 1393 1225 l 1390 1225 l 1387 1224 l 1385 1224 l 1383 1224 l 1380 1223 l 1378 1223 l 1375 1223 l 1372 1222 l 1370 1222 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1137 1226 1374 1226 1374 1184 1137 1184 b c np 1370 1222 m 1368 1222 l 1365 1221 l 1362 1221 l 1360 1220 l 1358 1220 l 1355 1220 l 1352 1219 l 1350 1219 l 1347 1219 l 1345 1218 l 1343 1218 l 1340 1218 l 1337 1217 l 1335 1217 l 1333 1216 l 1330 1216 l 1327 1215 l 1325 1215 l 1322 1215 l 1320 1214 l 1317 1214 l 1315 1214 l 1312 1213 l 1310 1213 l 1308 1213 l 1305 1212 l 1302 1212 l 1300 1211 l 1297 1211 l 1295 1211 l 1293 1210 l 1290 1210 l 1287 1210 l 1285 1209 l 1283 1209 l 1280 1208 l 1278 1208 l 1275 1208 l 1273 1207 l 1270 1207 l 1268 1206 l 1265 1206 l 1263 1206 l 1260 1205 l 1258 1205 l 1255 1205 l 1253 1204 l 1250 1204 l 1248 1204 l 1245 1203 l 1243 1203 l 1240 1202 l 1238 1202 l 1235 1202 l 1233 1201 l 1230 1201 l 1228 1201 l 1225 1200 l 1223 1200 l 1220 1199 l 1218 1199 l 1216 1199 l 1213 1198 l 1210 1198 l 1208 1198 l 1205 1197 l 1203 1197 l 1201 1197 l 1198 1196 l 1196 1196 l 1193 1195 l 1191 1195 l 1188 1195 l 1186 1194 l 1183 1194 l 1181 1194 l 1178 1193 l 1176 1193 l 1173 1193 l 1171 1192 l 1168 1192 l 1166 1191 l 1163 1191 l 1161 1191 l 1159 1190 l 1156 1190 l 1154 1189 l 1151 1189 l 1149 1189 l 1146 1188 l 1144 1188 l 1141 1188 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 907 1192 1145 1192 1145 1148 907 1148 b c np 1141 1188 m 1139 1187 l 1136 1187 l 1134 1186 l 1131 1186 l 1129 1186 l 1126 1185 l 1124 1185 l 1121 1185 l 1119 1184 l 1117 1184 l 1114 1183 l 1112 1183 l 1109 1183 l 1107 1182 l 1104 1182 l 1102 1181 l 1099 1181 l 1097 1181 l 1094 1180 l 1092 1180 l 1090 1180 l 1087 1179 l 1085 1179 l 1082 1179 l 1079 1178 l 1077 1178 l 1075 1177 l 1072 1177 l 1070 1177 l 1067 1176 l 1065 1176 l 1062 1176 l 1060 1175 l 1057 1175 l 1055 1174 l 1052 1174 l 1050 1174 l 1048 1173 l 1045 1173 l 1043 1173 l 1040 1172 l 1038 1172 l 1035 1171 l 1033 1171 l 1030 1171 l 1028 1170 l 1025 1170 l 1023 1170 l 1021 1169 l 1018 1169 l 1016 1169 l 1013 1168 l 1011 1168 l 1008 1168 l 1006 1167 l 1003 1167 l 1001 1166 l 999 1166 l 996 1166 l 994 1165 l 991 1165 l 989 1164 l 986 1164 l 984 1164 l 982 1163 l 979 1163 l 977 1163 l 974 1162 l 972 1162 l 969 1162 l 967 1161 l 965 1161 l 962 1160 l 960 1160 l 957 1160 l 955 1159 l 952 1159 l 950 1159 l 948 1158 l 945 1158 l 943 1157 l 940 1157 l 938 1157 l 935 1156 l 933 1156 l 931 1155 l 928 1155 l 926 1155 l 923 1154 l 921 1154 l 918 1154 l 916 1153 l 913 1153 l 911 1152 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 687 1156 915 1156 915 1114 687 1114 b c np 911 1152 m 909 1152 l 906 1152 l 904 1151 l 901 1151 l 899 1151 l 896 1150 l 894 1150 l 892 1149 l 889 1149 l 887 1149 l 884 1148 l 882 1148 l 879 1148 l 877 1147 l 875 1147 l 872 1146 l 870 1146 l 867 1146 l 865 1145 l 863 1145 l 860 1145 l 858 1144 l 856 1144 l 853 1144 l 851 1143 l 848 1143 l 846 1142 l 843 1142 l 841 1142 l 839 1141 l 836 1141 l 834 1140 l 832 1140 l 829 1140 l 827 1139 l 824 1139 l 822 1139 l 819 1138 l 817 1138 l 815 1138 l 812 1137 l 810 1137 l 807 1136 l 805 1136 l 803 1136 l 800 1135 l 798 1135 l 795 1135 l 793 1134 l 791 1134 l 788 1134 l 786 1133 l 784 1133 l 781 1132 l 779 1132 l 776 1132 l 774 1131 l 771 1131 l 769 1130 l 767 1130 l 764 1130 l 762 1129 l 760 1129 l 757 1129 l 755 1128 l 752 1128 l 750 1128 l 748 1127 l 745 1127 l 743 1127 l 741 1126 l 738 1126 l 736 1125 l 734 1125 l 731 1125 l 729 1124 l 726 1124 l 724 1123 l 722 1123 l 719 1123 l 717 1122 l 715 1122 l 712 1122 l 710 1121 l 708 1121 l 705 1121 l 703 1120 l 700 1120 l 698 1119 l 696 1119 l 694 1119 l 691 1118 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 471 1122 695 1122 695 1079 471 1079 b c np 691 1118 m 689 1118 l 686 1118 l 684 1117 l 682 1117 l 679 1116 l 677 1116 l 675 1116 l 672 1115 l 670 1115 l 668 1114 l 665 1114 l 663 1114 l 661 1113 l 658 1113 l 656 1113 l 654 1112 l 651 1112 l 649 1111 l 647 1111 l 644 1111 l 642 1110 l 640 1110 l 637 1110 l 635 1109 l 633 1109 l 630 1109 l 628 1108 l 626 1108 l 623 1107 l 621 1107 l 619 1107 l 616 1106 l 614 1106 l 612 1105 l 609 1105 l 607 1105 l 605 1104 l 602 1104 l 600 1104 l 598 1103 l 595 1103 l 593 1103 l 591 1102 l 589 1102 l 586 1101 l 584 1101 l 582 1101 l 579 1100 l 577 1100 l 575 1100 l 572 1099 l 570 1099 l 568 1098 l 566 1098 l 563 1098 l 561 1097 l 559 1097 l 556 1097 l 554 1096 l 552 1096 l 550 1096 l 547 1095 l 545 1095 l 543 1094 l 540 1094 l 538 1094 l 536 1093 l 534 1093 l 531 1093 l 529 1092 l 527 1092 l 524 1092 l 522 1091 l 520 1091 l 518 1090 l 515 1090 l 513 1089 l 511 1089 l 509 1089 l 506 1088 l 504 1088 l 502 1088 l 500 1087 l 498 1087 l 495 1087 l 493 1086 l 491 1086 l 489 1085 l 486 1085 l 484 1085 l 482 1084 l 479 1084 l 477 1084 l 475 1083 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 334 1087 479 1087 479 1055 334 1055 b c np 475 1083 m 473 1083 l 470 1082 l 468 1082 l 466 1082 l 464 1081 l 462 1081 l 460 1080 l 458 1080 l 456 1080 l 453 1079 l 451 1079 l 449 1079 l 447 1078 l 445 1078 l 443 1078 l 441 1077 l 438 1077 l 436 1077 l 434 1076 l 432 1076 l 429 1076 l 427 1075 l 425 1075 l 423 1074 l 420 1074 l 418 1073 l 416 1073 l 414 1073 l 411 1072 l 409 1072 l 407 1072 l 404 1071 l 402 1071 l 400 1070 l 398 1070 l 395 1070 l 393 1069 l 391 1069 l 388 1068 l 386 1068 l 384 1068 l 382 1067 l 379 1067 l 377 1067 l 375 1066 l 373 1066 l 371 1065 l 369 1065 l 367 1065 l 365 1064 l 364 1064 l 362 1064 l 360 1063 l 358 1063 l 357 1063 l 355 1062 l 354 1062 l 353 1062 l 352 1062 l 351 1062 l 350 1061 l 349 1061 l 348 1061 l 347 1061 l 346 1061 l 345 1061 l 345 1060 l 344 1060 l 343 1060 l 342 1060 l 341 1060 l 340 1060 l 340 1059 l 339 1059 l 338 1059 l 339 1059 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 335 1065 352 1065 352 1055 335 1055 b c np 339 1059 m 340 1059 l 340 1060 l 341 1060 l 342 1060 l 343 1060 l 344 1060 l 345 1060 l 345 1061 l 346 1061 l 347 1061 l 348 1061 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 344 1090 453 1090 453 1057 344 1057 b c np 348 1061 m 349 1061 l 350 1061 l 350 1062 l 351 1062 l 352 1062 l 353 1062 l 354 1062 l 355 1063 l 356 1063 l 357 1063 l 358 1063 l 359 1063 l 359 1064 l 360 1064 l 361 1064 l 362 1064 l 363 1064 l 364 1064 l 365 1065 l 366 1065 l 367 1065 l 368 1065 l 369 1066 l 370 1066 l 371 1066 l 372 1066 l 373 1067 l 374 1067 l 375 1067 l 377 1068 l 378 1068 l 379 1068 l 380 1068 l 381 1069 l 383 1069 l 384 1069 l 385 1069 l 386 1070 l 387 1070 l 389 1070 l 390 1071 l 391 1071 l 392 1071 l 394 1072 l 395 1072 l 396 1072 l 397 1072 l 399 1073 l 400 1073 l 401 1073 l 402 1074 l 404 1074 l 405 1074 l 406 1074 l 407 1075 l 409 1075 l 410 1076 l 411 1076 l 412 1076 l 414 1076 l 415 1077 l 416 1077 l 417 1077 l 418 1078 l 420 1078 l 421 1078 l 422 1079 l 423 1079 l 425 1079 l 426 1079 l 427 1080 l 428 1080 l 429 1080 l 431 1081 l 432 1081 l 433 1081 l 434 1082 l 435 1082 l 437 1082 l 438 1083 l 439 1083 l 440 1083 l 442 1084 l 443 1084 l 444 1084 l 445 1085 l 446 1085 l 448 1085 l 449 1086 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 445 1121 555 1121 555 1082 445 1082 b c np 449 1086 m 450 1086 l 451 1086 l 452 1087 l 453 1087 l 455 1087 l 456 1088 l 457 1088 l 458 1088 l 459 1089 l 461 1089 l 462 1089 l 463 1090 l 464 1090 l 465 1090 l 466 1091 l 468 1091 l 469 1091 l 470 1092 l 471 1092 l 472 1092 l 474 1093 l 475 1093 l 476 1093 l 477 1094 l 478 1094 l 479 1094 l 481 1095 l 482 1095 l 483 1095 l 484 1096 l 485 1096 l 486 1096 l 487 1097 l 489 1097 l 490 1097 l 491 1098 l 492 1098 l 493 1098 l 494 1099 l 495 1099 l 496 1099 l 498 1100 l 499 1100 l 500 1100 l 501 1101 l 502 1101 l 503 1101 l 504 1102 l 505 1102 l 506 1102 l 507 1103 l 509 1103 l 510 1103 l 511 1104 l 512 1104 l 513 1105 l 514 1105 l 515 1105 l 516 1106 l 517 1106 l 518 1106 l 519 1107 l 521 1107 l 522 1107 l 523 1108 l 524 1108 l 525 1108 l 526 1109 l 527 1109 l 528 1109 l 529 1110 l 530 1110 l 531 1110 l 532 1111 l 533 1111 l 535 1112 l 536 1112 l 537 1112 l 538 1113 l 539 1113 l 540 1113 l 541 1114 l 542 1114 l 543 1114 l 544 1115 l 545 1115 l 546 1115 l 547 1116 l 548 1116 l 549 1116 l 550 1117 l 551 1117 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 547 1154 644 1154 644 1113 547 1113 b c np 551 1117 m 552 1117 l 553 1118 l 554 1118 l 555 1118 l 556 1119 l 557 1119 l 558 1119 l 559 1120 l 560 1120 l 561 1120 l 562 1121 l 563 1121 l 564 1122 l 565 1122 l 566 1122 l 567 1123 l 568 1123 l 569 1123 l 570 1124 l 571 1124 l 572 1124 l 573 1125 l 574 1125 l 575 1125 l 576 1126 l 577 1126 l 578 1126 l 579 1127 l 580 1127 l 581 1128 l 582 1128 l 583 1128 l 584 1129 l 585 1129 l 586 1129 l 587 1130 l 588 1130 l 589 1130 l 590 1131 l 591 1131 l 592 1131 l 593 1132 l 594 1132 l 595 1133 l 596 1133 l 597 1134 l 598 1134 l 599 1134 l 600 1135 l 601 1135 l 602 1135 l 603 1136 l 604 1136 l 605 1136 l 606 1137 l 607 1137 l 608 1137 l 608 1138 l 609 1138 l 610 1138 l 611 1139 l 612 1139 l 613 1139 l 614 1140 l 615 1140 l 616 1141 l 617 1141 l 618 1142 l 619 1142 l 620 1142 l 621 1143 l 622 1143 l 623 1143 l 624 1144 l 625 1144 l 625 1145 l 626 1145 l 627 1145 l 628 1146 l 629 1146 l 630 1146 l 631 1147 l 632 1147 l 633 1147 l 633 1148 l 634 1148 l 635 1148 l 636 1149 l 637 1149 l 638 1150 l 639 1150 l 640 1150 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 636 1187 716 1187 716 1146 636 1146 b c np 640 1150 m 640 1151 l 641 1151 l 642 1151 l 643 1152 l 644 1152 l 645 1153 l 646 1153 l 647 1154 l 648 1154 l 649 1154 l 650 1155 l 651 1155 l 652 1156 l 653 1156 l 654 1156 l 655 1157 l 656 1157 l 657 1158 l 658 1158 l 659 1159 l 660 1159 l 661 1160 l 662 1160 l 663 1160 l 664 1161 l 665 1161 l 666 1162 l 667 1162 l 668 1162 l 668 1163 l 669 1163 l 670 1164 l 671 1164 l 672 1164 l 673 1165 l 674 1165 l 675 1166 l 676 1166 l 677 1167 l 678 1167 l 679 1168 l 680 1168 l 681 1168 l 681 1169 l 682 1169 l 683 1169 l 684 1170 l 685 1170 l 686 1171 l 687 1171 l 688 1171 l 688 1172 l 689 1172 l 690 1173 l 691 1173 l 692 1174 l 693 1174 l 694 1174 l 694 1175 l 695 1175 l 696 1176 l 697 1176 l 698 1176 l 698 1177 l 699 1177 l 700 1178 l 701 1178 l 702 1178 l 702 1179 l 703 1179 l 704 1179 l 705 1180 l 706 1181 l 707 1181 l 708 1181 l 708 1182 l 709 1182 l 710 1182 l 710 1183 l 711 1183 l 712 1183 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 708 1221 779 1221 779 1179 708 1179 b c np 712 1183 m 713 1184 l 714 1185 l 715 1185 l 716 1185 l 716 1186 l 717 1186 l 718 1186 l 718 1187 l 719 1187 l 720 1187 l 720 1188 l 721 1188 l 722 1188 l 723 1189 l 724 1189 l 725 1190 l 726 1190 l 727 1191 l 728 1191 l 728 1192 l 729 1192 l 730 1192 l 730 1193 l 731 1193 l 732 1193 l 732 1194 l 733 1194 l 734 1195 l 735 1195 l 736 1196 l 737 1196 l 738 1197 l 739 1197 l 740 1198 l 741 1198 l 742 1199 l 743 1199 l 744 1200 l 745 1200 l 745 1201 l 746 1201 l 747 1201 l 747 1202 l 748 1202 l 749 1203 l 750 1203 l 751 1204 l 752 1204 l 753 1205 l 754 1205 l 755 1206 l 756 1206 l 757 1207 l 758 1207 l 759 1208 l 760 1209 l 761 1209 l 762 1210 l 763 1211 l 764 1211 l 765 1212 l 766 1212 l 767 1213 l 768 1213 l 769 1214 l 770 1214 l 770 1215 l 771 1215 l 772 1215 l 772 1216 l 773 1216 l 774 1217 l 775 1217 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 771 1255 832 1255 832 1213 771 1213 b c np 775 1217 m 775 1218 l 776 1218 l 777 1218 l 777 1219 l 778 1219 l 778 1220 l 779 1220 l 780 1220 l 780 1221 l 781 1221 l 782 1221 l 782 1222 l 783 1222 l 784 1223 l 785 1223 l 786 1224 l 787 1225 l 788 1225 l 789 1226 l 790 1226 l 791 1227 l 792 1228 l 793 1228 l 794 1229 l 795 1229 l 795 1230 l 796 1230 l 797 1231 l 798 1231 l 799 1232 l 800 1232 l 801 1233 l 802 1234 l 803 1234 l 803 1235 l 804 1235 l 805 1236 l 806 1236 l 806 1237 l 807 1237 l 808 1237 l 808 1238 l 809 1238 l 810 1239 l 811 1239 l 811 1240 l 812 1240 l 812 1241 l 813 1241 l 814 1242 l 815 1242 l 815 1243 l 816 1243 l 817 1244 l 818 1244 l 818 1245 l 819 1245 l 820 1245 l 820 1246 l 821 1246 l 821 1247 l 822 1247 l 823 1248 l 824 1248 l 825 1249 l 826 1249 l 826 1250 l 827 1250 l 828 1251 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 824 1289 878 1289 878 1247 824 1247 b c np 828 1251 m 829 1252 l 830 1252 l 831 1253 l 832 1253 l 832 1254 l 833 1254 l 833 1255 l 834 1255 l 835 1256 l 836 1256 l 836 1257 l 837 1257 l 838 1258 l 839 1258 l 839 1259 l 840 1259 l 840 1260 l 841 1260 l 842 1261 l 843 1261 l 843 1262 l 844 1262 l 844 1263 l 845 1263 l 846 1264 l 847 1264 l 848 1265 l 849 1265 l 849 1266 l 850 1266 l 851 1267 l 852 1268 l 853 1269 l 854 1269 l 854 1270 l 855 1270 l 856 1271 l 857 1272 l 858 1272 l 858 1273 l 859 1273 l 860 1274 l 861 1274 l 861 1275 l 862 1275 l 863 1276 l 864 1277 l 865 1277 l 865 1278 l 866 1278 l 867 1279 l 867 1280 l 868 1280 l 869 1281 l 870 1281 l 870 1282 l 871 1282 l 872 1283 l 873 1283 l 873 1284 l 874 1284 l 874 1285 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 870 1323 919 1323 919 1281 870 1281 b c np 874 1285 m 875 1285 l 875 1286 l 876 1286 l 876 1287 l 877 1287 l 878 1288 l 879 1288 l 879 1289 l 880 1289 l 881 1290 l 882 1291 l 883 1292 l 884 1292 l 884 1293 l 885 1293 l 885 1294 l 886 1294 l 886 1295 l 887 1295 l 888 1296 l 889 1296 l 889 1297 l 890 1297 l 890 1298 l 891 1298 l 891 1299 l 892 1299 l 893 1300 l 894 1301 l 895 1302 l 896 1302 l 896 1303 l 897 1303 l 898 1304 l 899 1305 l 900 1305 l 900 1306 l 901 1307 l 902 1307 l 902 1308 l 903 1308 l 903 1309 l 904 1309 l 904 1310 l 905 1310 l 905 1311 l 906 1311 l 907 1312 l 908 1313 l 909 1313 l 909 1314 l 910 1314 l 910 1315 l 911 1315 l 911 1316 l 912 1316 l 912 1317 l 913 1317 l 914 1318 l 915 1319 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 911 1356 954 1356 954 1315 911 1315 b c np 915 1319 m 916 1320 l 917 1321 l 918 1322 l 919 1322 l 919 1323 l 920 1323 l 920 1324 l 921 1324 l 921 1325 l 922 1325 l 922 1326 l 923 1326 l 923 1327 l 924 1327 l 924 1328 l 925 1328 l 925 1329 l 926 1329 l 926 1330 l 927 1330 l 928 1331 l 929 1332 l 930 1333 l 931 1334 l 932 1334 l 932 1335 l 933 1335 l 933 1336 l 934 1337 l 935 1337 l 935 1338 l 936 1338 l 936 1339 l 937 1339 l 937 1340 l 938 1340 l 938 1341 l 939 1341 l 940 1342 l 940 1343 l 941 1343 l 941 1344 l 942 1344 l 942 1345 l 943 1345 l 943 1346 l 944 1346 l 944 1347 l 945 1347 l 945 1348 l 946 1348 l 946 1349 l 947 1349 l 948 1350 l 948 1351 l 949 1351 l 949 1352 l 950 1352 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 946 1391 986 1391 986 1348 946 1348 b c np 950 1352 m 950 1353 l 951 1353 l 951 1354 l 952 1354 l 952 1355 l 953 1355 l 953 1356 l 954 1356 l 954 1357 l 955 1357 l 955 1358 l 956 1358 l 956 1359 l 957 1359 l 957 1360 l 958 1360 l 958 1361 l 959 1361 l 959 1362 l 960 1362 l 960 1363 l 961 1363 l 961 1364 l 962 1364 l 962 1365 l 963 1365 l 963 1366 l 964 1366 l 964 1367 l 965 1367 l 965 1368 l 966 1369 l 967 1370 l 968 1371 l 968 1372 l 969 1372 l 969 1373 l 970 1373 l 970 1374 l 971 1374 l 971 1375 l 972 1375 l 972 1376 l 973 1376 l 973 1377 l 974 1378 l 975 1379 l 976 1380 l 977 1381 l 978 1382 l 978 1383 l 979 1383 l 979 1384 l 980 1385 l 981 1385 l 981 1386 l 982 1386 l 982 1387 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 978 1424 1014 1424 1014 1383 978 1383 b c np 982 1387 m 983 1387 l 983 1388 l 984 1389 l 985 1390 l 985 1391 l 986 1391 l 986 1392 l 987 1392 l 987 1393 l 988 1393 l 988 1394 l 989 1395 l 990 1395 l 990 1396 l 991 1397 l 992 1398 l 993 1399 l 993 1400 l 994 1400 l 994 1401 l 995 1402 l 996 1403 l 996 1404 l 997 1404 l 997 1405 l 998 1405 l 998 1406 l 999 1406 l 999 1407 l 1000 1407 l 1000 1408 l 1001 1409 l 1001 1410 l 1002 1410 l 1002 1411 l 1003 1412 l 1004 1413 l 1005 1414 l 1006 1415 l 1006 1416 l 1007 1416 l 1007 1417 l 1008 1417 l 1008 1418 l 1009 1419 l 1010 1420 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1006 1459 1040 1459 1040 1416 1006 1416 b c np 1010 1420 m 1010 1421 l 1011 1421 l 1011 1422 l 1012 1422 l 1012 1423 l 1013 1424 l 1013 1425 l 1014 1425 l 1014 1426 l 1015 1426 l 1015 1427 l 1016 1427 l 1016 1428 l 1016 1429 l 1017 1429 l 1017 1430 l 1018 1430 l 1018 1431 l 1019 1431 l 1019 1432 l 1019 1433 l 1020 1433 l 1020 1434 l 1021 1434 l 1021 1435 l 1021 1436 l 1022 1436 l 1023 1437 l 1023 1438 l 1024 1438 l 1024 1439 l 1025 1440 l 1025 1441 l 1026 1441 l 1026 1442 l 1027 1442 l 1027 1443 l 1028 1444 l 1028 1445 l 1029 1445 l 1029 1446 l 1030 1446 l 1030 1447 l 1031 1448 l 1032 1449 l 1032 1450 l 1033 1450 l 1033 1451 l 1034 1452 l 1034 1453 l 1035 1453 l 1035 1454 l 1036 1455 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1032 1492 1062 1492 1062 1451 1032 1451 b c np 1036 1455 m 1036 1456 l 1037 1456 l 1037 1457 l 1038 1457 l 1038 1458 l 1038 1459 l 1039 1459 l 1039 1460 l 1040 1461 l 1040 1462 l 1041 1462 l 1041 1463 l 1042 1463 l 1042 1464 l 1043 1465 l 1043 1466 l 1044 1466 l 1044 1467 l 1045 1468 l 1045 1469 l 1046 1469 l 1046 1470 l 1047 1470 l 1047 1471 l 1048 1471 l 1048 1472 l 1048 1473 l 1049 1473 l 1049 1474 l 1050 1474 l 1050 1475 l 1050 1476 l 1051 1476 l 1051 1477 l 1052 1478 l 1052 1479 l 1053 1479 l 1053 1480 l 1053 1481 l 1054 1481 l 1054 1482 l 1055 1482 l 1055 1483 l 1055 1484 l 1056 1484 l 1056 1485 l 1057 1486 l 1057 1487 l 1058 1487 l 1058 1488 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1054 1526 1083 1526 1083 1484 1054 1484 b c np 1058 1488 m 1059 1489 l 1059 1490 l 1060 1490 l 1060 1491 l 1061 1492 l 1061 1493 l 1062 1493 l 1062 1494 l 1062 1495 l 1063 1495 l 1063 1496 l 1064 1496 l 1064 1497 l 1065 1498 l 1065 1499 l 1066 1500 l 1066 1501 l 1067 1501 l 1067 1502 l 1067 1503 l 1068 1503 l 1068 1504 l 1069 1505 l 1069 1506 l 1070 1506 l 1070 1507 l 1071 1508 l 1071 1509 l 1072 1509 l 1072 1510 l 1072 1511 l 1073 1511 l 1073 1512 l 1074 1512 l 1074 1513 l 1074 1514 l 1075 1514 l 1075 1515 l 1075 1516 l 1076 1516 l 1076 1517 l 1077 1517 l 1077 1518 l 1077 1519 l 1078 1519 l 1078 1520 l 1078 1521 l 1079 1521 l 1079 1522 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1075 1560 1102 1560 1102 1518 1075 1518 b c np 1079 1522 m 1080 1523 l 1080 1524 l 1081 1524 l 1081 1525 l 1081 1526 l 1082 1526 l 1082 1527 l 1082 1528 l 1083 1528 l 1083 1529 l 1084 1530 l 1084 1531 l 1085 1531 l 1085 1532 l 1085 1533 l 1086 1533 l 1086 1534 l 1087 1535 l 1087 1536 l 1088 1537 l 1088 1538 l 1089 1538 l 1089 1539 l 1090 1540 l 1090 1541 l 1090 1542 l 1091 1542 l 1091 1543 l 1092 1544 l 1092 1545 l 1093 1546 l 1093 1547 l 1094 1548 l 1094 1549 l 1095 1549 l 1095 1550 l 1095 1551 l 1096 1552 l 1096 1553 l 1097 1554 l 1097 1555 l 1098 1555 l 1098 1556 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1094 1594 1120 1594 1120 1552 1094 1552 b c np 1098 1556 m 1099 1557 l 1099 1558 l 1100 1558 l 1100 1559 l 1100 1560 l 1101 1561 l 1101 1562 l 1102 1563 l 1102 1564 l 1103 1564 l 1103 1565 l 1103 1566 l 1104 1566 l 1104 1567 l 1104 1568 l 1105 1568 l 1105 1569 l 1105 1570 l 1106 1570 l 1106 1571 l 1107 1572 l 1107 1573 l 1108 1574 l 1108 1575 l 1109 1576 l 1109 1577 l 1109 1578 l 1110 1578 l 1110 1579 l 1110 1580 l 1111 1580 l 1111 1581 l 1111 1582 l 1112 1582 l 1112 1583 l 1113 1584 l 1113 1585 l 1113 1586 l 1114 1586 l 1114 1587 l 1115 1587 l 1115 1588 l 1115 1589 l 1116 1590 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1112 1628 1136 1628 1136 1586 1112 1586 b c np 1116 1590 m 1116 1591 l 1117 1592 l 1117 1593 l 1118 1594 l 1118 1595 l 1118 1596 l 1119 1596 l 1119 1597 l 1119 1598 l 1120 1598 l 1120 1599 l 1120 1600 l 1121 1600 l 1121 1601 l 1121 1602 l 1122 1603 l 1122 1604 l 1123 1604 l 1123 1605 l 1123 1606 l 1124 1606 l 1124 1607 l 1124 1608 l 1125 1609 l 1125 1610 l 1126 1611 l 1126 1612 l 1126 1613 l 1127 1613 l 1127 1614 l 1127 1615 l 1128 1615 l 1128 1616 l 1128 1617 l 1129 1617 l 1129 1618 l 1129 1619 l 1130 1620 l 1130 1621 l 1131 1622 l 1131 1623 l 1132 1624 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1128 1662 1150 1662 1150 1620 1128 1620 b c np 1132 1624 m 1132 1625 l 1133 1626 l 1133 1627 l 1133 1628 l 1134 1628 l 1134 1629 l 1134 1630 l 1135 1631 l 1135 1632 l 1135 1633 l 1136 1633 l 1136 1634 l 1136 1635 l 1137 1635 l 1137 1636 l 1137 1637 l 1138 1638 l 1138 1639 l 1139 1640 l 1139 1641 l 1140 1642 l 1140 1643 l 1141 1644 l 1141 1645 l 1141 1646 l 1142 1646 l 1142 1647 l 1142 1648 l 1142 1649 l 1143 1649 l 1143 1650 l 1143 1651 l 1144 1651 l 1144 1652 l 1144 1653 l 1145 1654 l 1145 1655 l 1145 1656 l 1146 1656 l 1146 1657 l 1146 1658 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1142 1696 1164 1696 1164 1654 1142 1654 b c np 1146 1658 m 1147 1659 l 1147 1660 l 1148 1661 l 1148 1662 l 1148 1663 l 1149 1663 l 1149 1664 l 1149 1665 l 1150 1665 l 1150 1666 l 1150 1667 l 1150 1668 l 1151 1668 l 1151 1669 l 1151 1670 l 1152 1670 l 1152 1671 l 1152 1672 l 1153 1673 l 1153 1674 l 1153 1675 l 1154 1675 l 1154 1676 l 1154 1677 l 1154 1678 l 1155 1678 l 1155 1679 l 1155 1680 l 1156 1681 l 1156 1682 l 1157 1683 l 1157 1684 l 1157 1685 l 1158 1685 l 1158 1686 l 1158 1687 l 1158 1688 l 1159 1688 l 1159 1689 l 1159 1690 l 1160 1691 l 1160 1692 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1156 1730 1177 1730 1177 1688 1156 1688 b c np 1160 1692 m 1160 1693 l 1161 1693 l 1161 1694 l 1161 1695 l 1161 1696 l 1162 1696 l 1162 1697 l 1162 1698 l 1163 1699 l 1163 1700 l 1163 1701 l 1164 1702 l 1164 1703 l 1165 1704 l 1165 1705 l 1165 1706 l 1166 1707 l 1166 1708 l 1166 1709 l 1167 1710 l 1167 1711 l 1167 1712 l 1168 1712 l 1168 1713 l 1168 1714 l 1168 1715 l 1169 1715 l 1169 1716 l 1169 1717 l 1169 1718 l 1170 1718 l 1170 1719 l 1170 1720 l 1171 1721 l 1171 1722 l 1171 1723 l 1172 1723 l 1172 1724 l 1172 1725 l 1173 1726 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1169 1764 1188 1764 1188 1722 1169 1722 b c np 1173 1726 m 1173 1727 l 1173 1728 l 1174 1729 l 1174 1730 l 1174 1731 l 1175 1731 l 1175 1732 l 1175 1733 l 1175 1734 l 1176 1734 l 1176 1735 l 1176 1736 l 1176 1737 l 1177 1737 l 1177 1738 l 1177 1739 l 1177 1740 l 1178 1740 l 1178 1741 l 1178 1742 l 1178 1743 l 1179 1743 l 1179 1744 l 1179 1745 l 1179 1746 l 1180 1746 l 1180 1747 l 1180 1748 l 1180 1749 l 1181 1749 l 1181 1750 l 1181 1751 l 1182 1752 l 1182 1753 l 1182 1754 l 1183 1755 l 1183 1756 l 1183 1757 l 1184 1758 l 1184 1759 l 1184 1760 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1180 1798 1199 1798 1199 1756 1180 1756 b c np 1184 1760 m 1185 1760 l 1185 1761 l 1185 1762 l 1185 1763 l 1186 1764 l 1186 1765 l 1186 1766 l 1187 1767 l 1187 1768 l 1187 1769 l 1188 1770 l 1188 1771 l 1188 1772 l 1188 1773 l 1189 1773 l 1189 1774 l 1189 1775 l 1190 1776 l 1190 1777 l 1190 1778 l 1190 1779 l 1191 1779 l 1191 1780 l 1191 1781 l 1191 1782 l 1192 1782 l 1192 1783 l 1192 1784 l 1192 1785 l 1193 1785 l 1193 1786 l 1193 1787 l 1193 1788 l 1194 1788 l 1194 1789 l 1194 1790 l 1194 1791 l 1195 1791 l 1195 1792 l 1195 1793 l 1195 1794 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1191 1831 1209 1831 1209 1790 1191 1790 b c np 1195 1794 m 1196 1795 l 1196 1796 l 1196 1797 l 1197 1798 l 1197 1799 l 1197 1800 l 1198 1801 l 1198 1802 l 1198 1803 l 1198 1804 l 1199 1804 l 1199 1805 l 1199 1806 l 1199 1807 l 1200 1807 l 1200 1808 l 1200 1809 l 1200 1810 l 1201 1811 l 1201 1812 l 1201 1813 l 1201 1814 l 1202 1814 l 1202 1815 l 1202 1816 l 1202 1817 l 1203 1817 l 1203 1818 l 1203 1819 l 1203 1820 l 1203 1821 l 1204 1821 l 1204 1822 l 1204 1823 l 1204 1824 l 1205 1824 l 1205 1825 l 1205 1826 l 1205 1827 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1201 1866 1219 1866 1219 1823 1201 1823 b c np 1205 1827 m 1206 1828 l 1206 1829 l 1206 1830 l 1206 1831 l 1207 1831 l 1207 1832 l 1207 1833 l 1207 1834 l 1208 1835 l 1208 1836 l 1208 1837 l 1208 1838 l 1209 1838 l 1209 1839 l 1209 1840 l 1209 1841 l 1210 1841 l 1210 1842 l 1210 1843 l 1210 1844 l 1211 1845 l 1211 1846 l 1211 1847 l 1211 1848 l 1212 1848 l 1212 1849 l 1212 1850 l 1212 1851 l 1213 1852 l 1213 1853 l 1213 1854 l 1213 1855 l 1214 1856 l 1214 1857 l 1214 1858 l 1215 1859 l 1215 1860 l 1215 1861 l 1215 1862 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1211 1899 1228 1899 1228 1858 1211 1858 b c np 1215 1862 m 1216 1862 l 1216 1863 l 1216 1864 l 1216 1865 l 1216 1866 l 1217 1866 l 1217 1867 l 1217 1868 l 1217 1869 l 1218 1870 l 1218 1871 l 1218 1872 l 1218 1873 l 1218 1874 l 1219 1874 l 1219 1875 l 1219 1876 l 1219 1877 l 1219 1878 l 1220 1878 l 1220 1879 l 1220 1880 l 1220 1881 l 1220 1882 l 1221 1882 l 1221 1883 l 1221 1884 l 1221 1885 l 1222 1885 l 1222 1886 l 1222 1887 l 1222 1888 l 1223 1888 l 1223 1889 l 1223 1890 l 1223 1891 l 1223 1892 l 1224 1892 l 1224 1893 l 1224 1894 l 1224 1895 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1220 1934 1237 1934 1237 1891 1220 1891 b c np 1224 1895 m 1224 1896 l 1225 1896 l 1225 1897 l 1225 1898 l 1225 1899 l 1225 1900 l 1226 1901 l 1226 1902 l 1226 1903 l 1226 1904 l 1227 1905 l 1227 1906 l 1227 1907 l 1227 1908 l 1228 1909 l 1228 1910 l 1228 1911 l 1228 1912 l 1229 1913 l 1229 1914 l 1229 1915 l 1229 1916 l 1230 1916 l 1230 1917 l 1230 1918 l 1230 1919 l 1230 1920 l 1231 1921 l 1231 1922 l 1231 1923 l 1232 1924 l 1232 1925 l 1232 1926 l 1232 1927 l 1232 1928 l 1233 1928 l 1233 1929 l 1233 1930 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1229 1967 1245 1967 1245 1926 1229 1926 b c np 1233 1930 m 1233 1931 l 1233 1932 l 1234 1933 l 1234 1934 l 1234 1935 l 1234 1936 l 1235 1937 l 1235 1938 l 1235 1939 l 1235 1940 l 1235 1941 l 1236 1941 l 1236 1942 l 1236 1943 l 1236 1944 l 1236 1945 l 1237 1946 l 1237 1947 l 1237 1948 l 1237 1949 l 1238 1950 l 1238 1951 l 1238 1952 l 1238 1953 l 1238 1954 l 1239 1954 l 1239 1955 l 1239 1956 l 1239 1957 l 1240 1958 l 1240 1959 l 1240 1960 l 1240 1961 l 1241 1962 l 1241 1963 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1237 2001 1253 2001 1253 1959 1237 1959 b c np 1241 1963 m 1241 1964 l 1241 1965 l 1241 1966 l 1242 1966 l 1242 1967 l 1242 1968 l 1242 1969 l 1242 1970 l 1243 1971 l 1243 1972 l 1243 1973 l 1243 1974 l 1243 1975 l 1244 1976 l 1244 1977 l 1244 1978 l 1244 1979 l 1244 1980 l 1245 1980 l 1245 1981 l 1245 1982 l 1245 1983 l 1245 1984 l 1245 1985 l 1246 1985 l 1246 1986 l 1246 1987 l 1246 1988 l 1246 1989 l 1247 1990 l 1247 1991 l 1247 1992 l 1247 1993 l 1248 1993 l 1248 1994 l 1248 1995 l 1248 1996 l 1248 1997 l 1249 1997 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1245 2035 1259 2035 1259 1993 1245 1993 b c np 1249 1997 m 1249 1998 l 1249 1999 l 1249 2000 l 1249 2001 l 1249 2002 l 1250 2002 l 1250 2003 l 1250 2004 l 1250 2005 l 1250 2006 l 1250 2007 l 1251 2007 l 1251 2008 l 1251 2009 l 1251 2010 l 1251 2011 l 1251 2012 l 1252 2012 l 1252 2013 l 1252 2014 l 1252 2015 l 1252 2016 l 1252 2017 l 1253 2017 l 1253 2018 l 1253 2019 l 1253 2020 l 1253 2021 l 1253 2022 l 1254 2022 l 1254 2023 l 1254 2024 l 1254 2025 l 1254 2026 l 1255 2027 l 1255 2028 l 1255 2029 l 1255 2030 l 1255 2031 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1251 2069 1266 2069 1266 2027 1251 2027 b c np 1255 2031 m 1256 2032 l 1256 2033 l 1256 2034 l 1256 2035 l 1257 2035 l 1257 2036 l 1257 2037 l 1257 2038 l 1257 2039 l 1257 2040 l 1258 2041 l 1258 2042 l 1258 2043 l 1258 2044 l 1258 2045 l 1259 2046 l 1259 2047 l 1259 2048 l 1259 2049 l 1259 2050 l 1259 2051 l 1260 2051 l 1260 2052 l 1260 2053 l 1260 2054 l 1260 2055 l 1260 2056 l 1261 2057 l 1261 2058 l 1261 2059 l 1261 2060 l 1261 2061 l 1261 2062 l 1262 2062 l 1262 2063 l 1262 2064 l 1262 2065 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1258 2103 1273 2103 1273 2061 1258 2061 b c np 1262 2065 m 1262 2066 l 1262 2067 l 1263 2067 l 1263 2068 l 1263 2069 l 1263 2070 l 1263 2071 l 1263 2072 l 1264 2073 l 1264 2074 l 1264 2075 l 1264 2076 l 1265 2077 l 1265 2078 l 1265 2079 l 1265 2080 l 1265 2081 l 1265 2082 l 1266 2082 l 1266 2083 l 1266 2084 l 1266 2085 l 1266 2086 l 1266 2087 l 1267 2087 l 1267 2088 l 1267 2089 l 1267 2090 l 1267 2091 l 1267 2092 l 1268 2092 l 1268 2093 l 1268 2094 l 1268 2095 l 1268 2096 l 1268 2097 l 1268 2098 l 1269 2099 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1265 2137 1279 2137 1279 2095 1265 2095 b c np 1269 2099 m 1269 2100 l 1269 2101 l 1269 2102 l 1269 2103 l 1269 2104 l 1270 2104 l 1270 2105 l 1270 2106 l 1270 2107 l 1270 2108 l 1270 2109 l 1271 2110 l 1271 2111 l 1271 2112 l 1271 2113 l 1271 2114 l 1271 2115 l 1272 2115 l 1272 2116 l 1272 2117 l 1272 2118 l 1272 2119 l 1273 2120 l 1273 2121 l 1273 2122 l 1273 2123 l 1273 2124 l 1273 2125 l 1274 2126 l 1274 2127 l 1274 2128 l 1274 2129 l 1274 2130 l 1274 2131 l 1274 2132 l 1275 2132 l 1275 2133 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1271 2171 1285 2171 1285 2129 1271 2129 b c np 1275 2133 m 1275 2134 l 1275 2135 l 1275 2136 l 1275 2137 l 1276 2138 l 1276 2139 l 1276 2140 l 1276 2141 l 1276 2142 l 1276 2143 l 1277 2143 l 1277 2144 l 1277 2145 l 1277 2146 l 1277 2147 l 1277 2148 l 1278 2148 l 1278 2149 l 1278 2150 l 1278 2151 l 1278 2152 l 1278 2153 l 1278 2154 l 1279 2155 l 1279 2156 l 1279 2157 l 1279 2158 l 1279 2159 l 1279 2160 l 1279 2161 l 1280 2161 l 1280 2162 l 1280 2163 l 1280 2164 l 1280 2165 l 1280 2166 l 1280 2167 l 1281 2167 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1277 2205 1290 2205 1290 2163 1277 2163 b c np 1281 2167 m 1281 2168 l 1281 2169 l 1281 2170 l 1281 2171 l 1281 2172 l 1282 2172 l 1282 2173 l 1282 2174 l 1282 2175 l 1282 2176 l 1282 2177 l 1282 2178 l 1283 2178 l 1283 2179 l 1283 2180 l 1283 2181 l 1283 2182 l 1283 2183 l 1283 2184 l 1283 2185 l 1284 2185 l 1284 2186 l 1284 2187 l 1284 2188 l 1284 2189 l 1284 2190 l 1284 2191 l 1285 2191 l 1285 2192 l 1285 2193 l 1285 2194 l 1285 2195 l 1285 2196 l 1285 2197 l 1286 2197 l 1286 2198 l 1286 2199 l 1286 2200 l 1286 2201 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1282 2239 1296 2239 1296 2197 1282 2197 b c np 1286 2201 m 1286 2202 l 1286 2203 l 1287 2204 l 1287 2205 l 1287 2206 l 1287 2207 l 1287 2208 l 1287 2209 l 1287 2210 l 1288 2211 l 1288 2212 l 1288 2213 l 1288 2214 l 1288 2215 l 1288 2216 l 1288 2217 l 1289 2218 l 1289 2219 l 1289 2220 l 1289 2221 l 1289 2222 l 1290 2222 l 1290 2223 l 1290 2224 l 1290 2225 l 1290 2226 l 1290 2227 l 1290 2228 l 1291 2228 l 1291 2229 l 1291 2230 l 1291 2231 l 1291 2232 l 1291 2233 l 1291 2234 l 1291 2235 l 1292 2235 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1288 2273 1300 2273 1300 2231 1288 2231 b c np 1292 2235 m 1292 2236 l 1292 2237 l 1292 2238 l 1292 2239 l 1292 2240 l 1292 2241 l 1292 2242 l 1293 2242 l 1293 2243 l 1293 2244 l 1293 2245 l 1293 2246 l 1293 2247 l 1293 2248 l 1294 2249 l 1294 2250 l 1294 2251 l 1294 2252 l 1294 2253 l 1294 2254 l 1294 2255 l 1294 2256 l 1295 2256 l 1295 2257 l 1295 2258 l 1295 2259 l 1295 2260 l 1295 2261 l 1295 2262 l 1295 2263 l 1296 2263 l 1296 2264 l 1296 2265 l 1296 2266 l 1296 2267 l 1296 2268 l 1296 2269 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1292 2307 1305 2307 1305 2265 1292 2265 b c np 1296 2269 m 1296 2270 l 1297 2270 l 1297 2271 l 1297 2272 l 1297 2273 l 1297 2274 l 1297 2275 l 1297 2276 l 1297 2277 l 1298 2277 l 1298 2278 l 1298 2279 l 1298 2280 l 1298 2281 l 1298 2282 l 1299 2283 l 1299 2284 l 1299 2285 l 1299 2286 l 1299 2287 l 1299 2288 l 1299 2289 l 1299 2290 l 1300 2291 l 1300 2292 l 1300 2293 l 1300 2294 l 1300 2295 l 1300 2296 l 1300 2297 l 1301 2298 l 1301 2299 l 1301 2300 l 1301 2301 l 1301 2302 l 1301 2303 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1297 2325 1308 2325 1308 2299 1297 2299 b c np 1301 2303 m 1301 2304 l 1301 2305 l 1302 2305 l 1302 2306 l 1302 2307 l 1302 2308 l 1302 2309 l 1302 2310 l 1302 2311 l 1302 2312 l 1303 2313 l 1303 2314 l 1303 2315 l 1303 2316 l 1303 2317 l 1303 2318 l 1303 2319 l 1304 2319 l 1304 2320 l 1304 2321 l 1304 2320 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2459 1421 2496 1421 2496 1409 2459 1409 b c np 2492 1417 m 2491 1417 l 2490 1417 l 2489 1417 l 2489 1416 l 2488 1416 l 2487 1416 l 2486 1416 l 2485 1416 l 2484 1416 l 2483 1416 l 2482 1416 l 2481 1416 l 2480 1416 l 2480 1415 l 2479 1415 l 2478 1415 l 2477 1415 l 2476 1415 l 2475 1415 l 2474 1415 l 2473 1415 l 2472 1414 l 2471 1414 l 2470 1414 l 2469 1414 l 2468 1414 l 2467 1414 l 2466 1414 l 2465 1414 l 2464 1414 l 2463 1413 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2430 1417 2467 1417 2467 1406 2430 1406 b c np 2463 1413 m 2462 1413 l 2461 1413 l 2460 1413 l 2459 1413 l 2458 1413 l 2457 1413 l 2456 1413 l 2455 1413 l 2454 1413 l 2454 1412 l 2453 1412 l 2452 1412 l 2451 1412 l 2450 1412 l 2449 1412 l 2448 1412 l 2447 1412 l 2446 1411 l 2445 1411 l 2444 1411 l 2443 1411 l 2442 1411 l 2441 1411 l 2440 1411 l 2439 1411 l 2438 1410 l 2437 1410 l 2436 1410 l 2435 1410 l 2434 1410 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2401 1414 2438 1414 2438 1402 2401 1402 b c np 2434 1410 m 2433 1410 l 2432 1410 l 2431 1409 l 2430 1409 l 2429 1409 l 2428 1409 l 2427 1409 l 2426 1409 l 2425 1409 l 2424 1409 l 2423 1409 l 2422 1409 l 2422 1408 l 2421 1408 l 2420 1408 l 2419 1408 l 2418 1408 l 2417 1408 l 2416 1408 l 2415 1408 l 2414 1408 l 2414 1407 l 2413 1407 l 2412 1407 l 2411 1407 l 2410 1407 l 2409 1407 l 2408 1407 l 2407 1407 l 2406 1407 l 2406 1406 l 2405 1406 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2373 1410 2409 1410 2409 1399 2373 1399 b c np 2405 1406 m 2404 1406 l 2403 1406 l 2402 1406 l 2401 1406 l 2400 1406 l 2399 1406 l 2398 1406 l 2397 1406 l 2397 1405 l 2396 1405 l 2395 1405 l 2394 1405 l 2393 1405 l 2392 1405 l 2391 1405 l 2390 1405 l 2389 1405 l 2388 1405 l 2388 1404 l 2387 1404 l 2386 1404 l 2385 1404 l 2384 1404 l 2383 1404 l 2382 1404 l 2381 1404 l 2380 1403 l 2379 1403 l 2378 1403 l 2377 1403 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2343 1407 2381 1407 2381 1395 2343 1395 b c np 2377 1403 m 2376 1403 l 2375 1403 l 2374 1403 l 2373 1403 l 2372 1403 l 2371 1403 l 2371 1402 l 2370 1402 l 2369 1402 l 2368 1402 l 2367 1402 l 2366 1402 l 2365 1402 l 2364 1402 l 2363 1402 l 2363 1401 l 2362 1401 l 2361 1401 l 2360 1401 l 2359 1401 l 2358 1401 l 2357 1401 l 2356 1401 l 2356 1400 l 2355 1400 l 2354 1400 l 2353 1400 l 2352 1400 l 2351 1400 l 2350 1400 l 2349 1400 l 2348 1400 l 2348 1399 l 2347 1399 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2315 1403 2351 1403 2351 1392 2315 1392 b c np 2347 1399 m 2346 1399 l 2345 1399 l 2344 1399 l 2343 1399 l 2342 1399 l 2341 1399 l 2340 1399 l 2339 1399 l 2338 1399 l 2338 1398 l 2337 1398 l 2336 1398 l 2335 1398 l 2334 1398 l 2333 1398 l 2332 1398 l 2331 1398 l 2330 1398 l 2330 1397 l 2329 1397 l 2328 1397 l 2327 1397 l 2326 1397 l 2325 1397 l 2324 1397 l 2323 1397 l 2322 1397 l 2322 1396 l 2321 1396 l 2320 1396 l 2319 1396 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2285 1400 2323 1400 2323 1388 2285 1388 b c np 2319 1396 m 2318 1396 l 2317 1396 l 2316 1396 l 2315 1396 l 2314 1396 l 2314 1395 l 2313 1395 l 2312 1395 l 2311 1395 l 2310 1395 l 2309 1395 l 2308 1395 l 2307 1395 l 2306 1395 l 2305 1395 l 2304 1395 l 2304 1394 l 2303 1394 l 2302 1394 l 2301 1394 l 2300 1394 l 2299 1394 l 2298 1394 l 2297 1394 l 2296 1394 l 2296 1393 l 2295 1393 l 2294 1393 l 2293 1393 l 2292 1393 l 2291 1393 l 2290 1393 l 2289 1392 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2256 1396 2293 1396 2293 1385 2256 1385 b c np 2289 1392 m 2288 1392 l 2287 1392 l 2286 1392 l 2285 1392 l 2284 1392 l 2283 1392 l 2282 1392 l 2281 1392 l 2281 1391 l 2280 1391 l 2279 1391 l 2278 1391 l 2277 1391 l 2276 1391 l 2275 1391 l 2274 1391 l 2273 1391 l 2272 1391 l 2271 1391 l 2271 1390 l 2270 1390 l 2269 1390 l 2268 1390 l 2267 1390 l 2266 1390 l 2265 1390 l 2264 1390 l 2263 1390 l 2263 1389 l 2262 1389 l 2261 1389 l 2260 1389 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2227 1393 2264 1393 2264 1382 2227 1382 b c np 2260 1389 m 2259 1389 l 2258 1389 l 2257 1389 l 2256 1389 l 2255 1389 l 2254 1389 l 2254 1388 l 2253 1388 l 2252 1388 l 2251 1388 l 2250 1388 l 2249 1388 l 2248 1388 l 2247 1388 l 2246 1388 l 2245 1388 l 2245 1387 l 2244 1387 l 2243 1387 l 2242 1387 l 2241 1387 l 2240 1387 l 2239 1387 l 2238 1387 l 2237 1387 l 2237 1386 l 2236 1386 l 2235 1386 l 2234 1386 l 2233 1386 l 2232 1386 l 2231 1386 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2197 1390 2235 1390 2235 1378 2197 1378 b c np 2231 1386 m 2230 1386 l 2229 1386 l 2229 1385 l 2228 1385 l 2227 1385 l 2226 1385 l 2225 1385 l 2224 1385 l 2223 1385 l 2222 1385 l 2221 1385 l 2220 1385 l 2219 1384 l 2218 1384 l 2217 1384 l 2216 1384 l 2215 1384 l 2214 1384 l 2213 1384 l 2212 1384 l 2212 1383 l 2211 1383 l 2210 1383 l 2209 1383 l 2208 1383 l 2207 1383 l 2206 1383 l 2205 1383 l 2204 1383 l 2204 1382 l 2203 1382 l 2202 1382 l 2201 1382 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2167 1386 2205 1386 2205 1375 2167 1375 b c np 2201 1382 m 2200 1382 l 2199 1382 l 2198 1382 l 2197 1382 l 2196 1382 l 2196 1381 l 2195 1381 l 2194 1381 l 2193 1381 l 2192 1381 l 2191 1381 l 2190 1381 l 2189 1381 l 2188 1381 l 2187 1381 l 2186 1380 l 2185 1380 l 2184 1380 l 2183 1380 l 2182 1380 l 2181 1380 l 2180 1380 l 2179 1380 l 2178 1380 l 2177 1380 l 2177 1379 l 2176 1379 l 2175 1379 l 2174 1379 l 2173 1379 l 2172 1379 l 2171 1379 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2138 1383 2175 1383 2175 1371 2138 1371 b c np 2171 1379 m 2170 1379 l 2169 1379 l 2169 1378 l 2168 1378 l 2167 1378 l 2166 1378 l 2165 1378 l 2164 1378 l 2163 1378 l 2162 1378 l 2161 1378 l 2161 1377 l 2160 1377 l 2159 1377 l 2158 1377 l 2157 1377 l 2156 1377 l 2155 1377 l 2154 1377 l 2153 1377 l 2152 1377 l 2151 1377 l 2151 1376 l 2150 1376 l 2149 1376 l 2148 1376 l 2147 1376 l 2146 1376 l 2145 1376 l 2144 1376 l 2144 1375 l 2143 1375 l 2142 1375 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2108 1379 2146 1379 2146 1368 2108 1368 b c np 2142 1375 m 2141 1375 l 2140 1375 l 2139 1375 l 2138 1375 l 2137 1375 l 2136 1375 l 2136 1374 l 2135 1374 l 2134 1374 l 2133 1374 l 2132 1374 l 2131 1374 l 2130 1374 l 2129 1374 l 2128 1374 l 2127 1374 l 2126 1374 l 2126 1373 l 2125 1373 l 2124 1373 l 2123 1373 l 2122 1373 l 2121 1373 l 2120 1373 l 2119 1373 l 2118 1373 l 2117 1373 l 2117 1372 l 2116 1372 l 2115 1372 l 2114 1372 l 2113 1372 l 2112 1372 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2078 1376 2116 1376 2116 1364 2078 1364 b c np 2112 1372 m 2111 1372 l 2110 1372 l 2109 1372 l 2109 1371 l 2108 1371 l 2107 1371 l 2106 1371 l 2105 1371 l 2104 1371 l 2103 1371 l 2102 1371 l 2101 1371 l 2100 1370 l 2099 1370 l 2098 1370 l 2097 1370 l 2096 1370 l 2095 1370 l 2094 1370 l 2093 1370 l 2092 1370 l 2091 1370 l 2091 1369 l 2090 1369 l 2089 1369 l 2088 1369 l 2087 1369 l 2086 1369 l 2085 1369 l 2084 1369 l 2083 1369 l 2082 1368 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2048 1372 2086 1372 2086 1361 2048 1361 b c np 2082 1368 m 2081 1368 l 2080 1368 l 2079 1368 l 2078 1368 l 2077 1368 l 2076 1368 l 2075 1367 l 2074 1367 l 2073 1367 l 2072 1367 l 2071 1367 l 2070 1367 l 2069 1367 l 2068 1367 l 2067 1367 l 2067 1366 l 2066 1366 l 2065 1366 l 2064 1366 l 2063 1366 l 2062 1366 l 2061 1366 l 2060 1366 l 2059 1366 l 2058 1366 l 2057 1366 l 2057 1365 l 2056 1365 l 2055 1365 l 2054 1365 l 2053 1365 l 2052 1365 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2018 1369 2056 1369 2056 1358 2018 1358 b c np 2052 1365 m 2051 1365 l 2050 1365 l 2049 1365 l 2049 1364 l 2048 1364 l 2047 1364 l 2046 1364 l 2045 1364 l 2044 1364 l 2043 1364 l 2042 1364 l 2041 1364 l 2040 1364 l 2040 1363 l 2039 1363 l 2038 1363 l 2037 1363 l 2036 1363 l 2035 1363 l 2034 1363 l 2033 1363 l 2032 1363 l 2031 1363 l 2030 1363 l 2030 1362 l 2029 1362 l 2028 1362 l 2027 1362 l 2026 1362 l 2025 1362 l 2024 1362 l 2023 1362 l 2022 1362 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1988 1366 2026 1366 2026 1354 1988 1354 b c np 2022 1362 m 2021 1362 l 2021 1361 l 2020 1361 l 2019 1361 l 2018 1361 l 2017 1361 l 2016 1361 l 2015 1361 l 2014 1361 l 2013 1361 l 2013 1360 l 2012 1360 l 2011 1360 l 2010 1360 l 2009 1360 l 2008 1360 l 2007 1360 l 2006 1360 l 2005 1360 l 2004 1360 l 2004 1359 l 2003 1359 l 2002 1359 l 2001 1359 l 2000 1359 l 1999 1359 l 1998 1359 l 1997 1359 l 1996 1359 l 1996 1358 l 1995 1358 l 1994 1358 l 1993 1358 l 1992 1358 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1957 1362 1996 1362 1996 1351 1957 1351 b c np 1992 1358 m 1991 1358 l 1990 1358 l 1989 1358 l 1988 1358 l 1987 1358 l 1987 1357 l 1986 1357 l 1985 1357 l 1984 1357 l 1983 1357 l 1982 1357 l 1981 1357 l 1980 1357 l 1979 1357 l 1979 1356 l 1978 1356 l 1977 1356 l 1976 1356 l 1975 1356 l 1974 1356 l 1973 1356 l 1972 1356 l 1971 1356 l 1970 1356 l 1970 1355 l 1969 1355 l 1968 1355 l 1967 1355 l 1966 1355 l 1965 1355 l 1964 1355 l 1963 1355 l 1962 1355 l 1961 1355 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1926 1359 1965 1359 1965 1347 1926 1347 b c np 1961 1355 m 1960 1355 l 1960 1354 l 1959 1354 l 1958 1354 l 1957 1354 l 1956 1354 l 1955 1354 l 1954 1354 l 1953 1354 l 1952 1354 l 1951 1353 l 1950 1353 l 1949 1353 l 1948 1353 l 1947 1353 l 1946 1353 l 1945 1353 l 1944 1353 l 1943 1353 l 1943 1352 l 1942 1352 l 1941 1352 l 1940 1352 l 1939 1352 l 1938 1352 l 1937 1352 l 1936 1352 l 1935 1352 l 1934 1352 l 1934 1351 l 1933 1351 l 1932 1351 l 1931 1351 l 1930 1351 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1895 1355 1934 1355 1934 1344 1895 1344 b c np 1930 1351 m 1929 1351 l 1928 1351 l 1927 1351 l 1926 1351 l 1925 1350 l 1924 1350 l 1923 1350 l 1922 1350 l 1921 1350 l 1920 1350 l 1919 1350 l 1918 1350 l 1917 1349 l 1916 1349 l 1915 1349 l 1914 1349 l 1913 1349 l 1912 1349 l 1911 1349 l 1910 1349 l 1909 1349 l 1908 1349 l 1908 1348 l 1907 1348 l 1906 1348 l 1905 1348 l 1904 1348 l 1903 1348 l 1902 1348 l 1901 1348 l 1900 1348 l 1899 1348 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1864 1352 1903 1352 1903 1340 1864 1340 b c np 1899 1348 m 1898 1348 l 1897 1348 l 1897 1347 l 1896 1347 l 1895 1347 l 1894 1347 l 1893 1347 l 1892 1347 l 1891 1347 l 1890 1347 l 1889 1347 l 1889 1346 l 1888 1346 l 1887 1346 l 1886 1346 l 1885 1346 l 1884 1346 l 1883 1346 l 1882 1346 l 1881 1346 l 1880 1345 l 1879 1345 l 1878 1345 l 1877 1345 l 1876 1345 l 1875 1345 l 1874 1345 l 1873 1345 l 1872 1345 l 1871 1345 l 1870 1344 l 1869 1344 l 1868 1344 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1833 1348 1872 1348 1872 1337 1833 1337 b c np 1868 1344 m 1867 1344 l 1866 1344 l 1865 1344 l 1864 1344 l 1863 1344 l 1862 1344 l 1861 1344 l 1861 1343 l 1860 1343 l 1859 1343 l 1858 1343 l 1857 1343 l 1856 1343 l 1855 1343 l 1854 1343 l 1854 1342 l 1853 1342 l 1852 1342 l 1851 1342 l 1850 1342 l 1849 1342 l 1848 1342 l 1847 1342 l 1846 1342 l 1845 1341 l 1844 1341 l 1843 1341 l 1842 1341 l 1841 1341 l 1840 1341 l 1839 1341 l 1838 1341 l 1837 1341 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1802 1345 1841 1345 1841 1333 1802 1333 b c np 1837 1341 m 1836 1341 l 1835 1340 l 1834 1340 l 1833 1340 l 1832 1340 l 1831 1340 l 1830 1340 l 1829 1340 l 1828 1340 l 1827 1340 l 1826 1340 l 1826 1339 l 1825 1339 l 1824 1339 l 1823 1339 l 1822 1339 l 1821 1339 l 1820 1339 l 1819 1339 l 1818 1339 l 1818 1338 l 1817 1338 l 1816 1338 l 1815 1338 l 1814 1338 l 1813 1338 l 1812 1338 l 1811 1338 l 1810 1338 l 1809 1338 l 1809 1337 l 1808 1337 l 1807 1337 l 1806 1337 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1770 1341 1810 1341 1810 1330 1770 1330 b c np 1806 1337 m 1805 1337 l 1804 1337 l 1803 1337 l 1802 1337 l 1801 1337 l 1800 1337 l 1799 1337 l 1798 1337 l 1798 1336 l 1797 1336 l 1796 1336 l 1795 1336 l 1794 1336 l 1793 1336 l 1792 1336 l 1791 1336 l 1790 1336 l 1789 1336 l 1789 1335 l 1788 1335 l 1787 1335 l 1786 1335 l 1785 1335 l 1784 1335 l 1783 1335 l 1782 1335 l 1781 1335 l 1780 1334 l 1779 1334 l 1778 1334 l 1777 1334 l 1776 1334 l 1775 1334 l 1774 1334 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1738 1338 1778 1338 1778 1326 1738 1326 b c np 1774 1334 m 1773 1334 l 1772 1334 l 1772 1333 l 1771 1333 l 1770 1333 l 1769 1333 l 1768 1333 l 1767 1333 l 1766 1333 l 1765 1333 l 1764 1333 l 1763 1333 l 1762 1332 l 1761 1332 l 1760 1332 l 1759 1332 l 1758 1332 l 1757 1332 l 1756 1332 l 1755 1332 l 1754 1332 l 1754 1331 l 1753 1331 l 1752 1331 l 1751 1331 l 1750 1331 l 1749 1331 l 1748 1331 l 1747 1331 l 1746 1331 l 1745 1331 l 1745 1330 l 1744 1330 l 1743 1330 l 1742 1330 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1706 1334 1746 1334 1746 1323 1706 1323 b c np 1742 1330 m 1741 1330 l 1740 1330 l 1739 1330 l 1738 1330 l 1737 1330 l 1736 1330 l 1735 1330 l 1734 1330 l 1733 1329 l 1732 1329 l 1731 1329 l 1730 1329 l 1729 1329 l 1728 1329 l 1727 1329 l 1726 1329 l 1725 1329 l 1724 1328 l 1723 1328 l 1722 1328 l 1721 1328 l 1720 1328 l 1719 1328 l 1718 1328 l 1717 1328 l 1716 1328 l 1716 1327 l 1715 1327 l 1714 1327 l 1713 1327 l 1712 1327 l 1711 1327 l 1710 1327 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1673 1331 1714 1331 1714 1319 1673 1319 b c np 1710 1327 m 1709 1327 l 1708 1327 l 1707 1327 l 1706 1327 l 1706 1326 l 1705 1326 l 1704 1326 l 1703 1326 l 1702 1326 l 1701 1326 l 1700 1326 l 1699 1326 l 1698 1326 l 1697 1325 l 1696 1325 l 1695 1325 l 1694 1325 l 1693 1325 l 1692 1325 l 1691 1325 l 1690 1325 l 1689 1325 l 1689 1324 l 1688 1324 l 1687 1324 l 1686 1324 l 1685 1324 l 1684 1324 l 1683 1324 l 1682 1324 l 1681 1324 l 1680 1324 l 1679 1324 l 1679 1323 l 1678 1323 l 1677 1323 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1641 1327 1681 1327 1681 1316 1641 1316 b c np 1677 1323 m 1676 1323 l 1675 1323 l 1674 1323 l 1673 1323 l 1672 1323 l 1671 1323 l 1670 1323 l 1669 1323 l 1668 1322 l 1667 1322 l 1666 1322 l 1665 1322 l 1664 1322 l 1663 1322 l 1662 1322 l 1661 1322 l 1660 1322 l 1659 1322 l 1659 1321 l 1658 1321 l 1657 1321 l 1656 1321 l 1655 1321 l 1654 1321 l 1653 1321 l 1652 1321 l 1651 1321 l 1650 1320 l 1649 1320 l 1648 1320 l 1647 1320 l 1646 1320 l 1645 1320 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1608 1324 1649 1324 1649 1312 1608 1312 b c np 1645 1320 m 1644 1320 l 1643 1320 l 1642 1320 l 1641 1320 l 1640 1320 l 1640 1319 l 1639 1319 l 1638 1319 l 1637 1319 l 1636 1319 l 1635 1319 l 1634 1319 l 1633 1319 l 1632 1319 l 1631 1319 l 1630 1319 l 1629 1318 l 1628 1318 l 1627 1318 l 1626 1318 l 1625 1318 l 1624 1318 l 1623 1318 l 1622 1317 l 1621 1317 l 1620 1317 l 1619 1317 l 1618 1317 l 1617 1317 l 1616 1317 l 1615 1317 l 1614 1317 l 1613 1316 l 1612 1316 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1574 1320 1616 1320 1616 1309 1574 1309 b c np 1612 1316 m 1611 1316 l 1610 1316 l 1609 1316 l 1608 1316 l 1607 1316 l 1606 1316 l 1605 1316 l 1604 1316 l 1603 1316 l 1603 1315 l 1602 1315 l 1601 1315 l 1600 1315 l 1599 1315 l 1598 1315 l 1597 1315 l 1596 1315 l 1595 1315 l 1594 1315 l 1593 1315 l 1592 1314 l 1591 1314 l 1590 1314 l 1589 1314 l 1588 1314 l 1587 1314 l 1586 1314 l 1585 1314 l 1584 1314 l 1583 1313 l 1582 1313 l 1581 1313 l 1580 1313 l 1579 1313 l 1578 1313 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1540 1317 1582 1317 1582 1306 1540 1306 b c np 1578 1313 m 1577 1313 l 1576 1313 l 1575 1313 l 1574 1313 l 1574 1312 l 1573 1312 l 1572 1312 l 1571 1312 l 1570 1312 l 1569 1312 l 1568 1312 l 1567 1312 l 1566 1312 l 1565 1312 l 1564 1312 l 1563 1312 l 1563 1311 l 1562 1311 l 1561 1311 l 1560 1311 l 1559 1311 l 1558 1311 l 1557 1311 l 1556 1311 l 1555 1311 l 1554 1311 l 1553 1311 l 1553 1310 l 1552 1310 l 1551 1310 l 1550 1310 l 1549 1310 l 1548 1310 l 1547 1310 l 1546 1310 l 1545 1310 l 1544 1310 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1506 1314 1548 1314 1548 1302 1506 1302 b c np 1544 1310 m 1543 1309 l 1542 1309 l 1541 1309 l 1540 1309 l 1539 1309 l 1538 1309 l 1537 1309 l 1536 1309 l 1535 1309 l 1534 1308 l 1533 1308 l 1532 1308 l 1531 1308 l 1530 1308 l 1529 1308 l 1528 1308 l 1527 1308 l 1526 1308 l 1525 1308 l 1524 1308 l 1524 1307 l 1523 1307 l 1522 1307 l 1521 1307 l 1520 1307 l 1519 1307 l 1518 1307 l 1517 1307 l 1516 1307 l 1515 1307 l 1515 1306 l 1514 1306 l 1513 1306 l 1512 1306 l 1511 1306 l 1510 1306 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1471 1310 1514 1310 1514 1299 1471 1299 b c np 1510 1306 m 1509 1306 l 1508 1306 l 1507 1306 l 1506 1306 l 1505 1306 l 1505 1305 l 1504 1305 l 1503 1305 l 1502 1305 l 1501 1305 l 1500 1305 l 1499 1305 l 1498 1305 l 1497 1305 l 1496 1305 l 1495 1305 l 1494 1305 l 1494 1304 l 1493 1304 l 1492 1304 l 1491 1304 l 1490 1304 l 1489 1304 l 1488 1304 l 1487 1304 l 1486 1304 l 1485 1304 l 1484 1304 l 1484 1303 l 1483 1303 l 1482 1303 l 1481 1303 l 1480 1303 l 1479 1303 l 1478 1303 l 1477 1303 l 1476 1303 l 1475 1303 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1436 1307 1479 1307 1479 1295 1436 1295 b c np 1475 1303 m 1474 1303 l 1474 1302 l 1473 1302 l 1472 1302 l 1471 1302 l 1470 1302 l 1469 1302 l 1468 1302 l 1467 1302 l 1466 1302 l 1465 1302 l 1464 1302 l 1464 1301 l 1463 1301 l 1462 1301 l 1461 1301 l 1460 1301 l 1459 1301 l 1458 1301 l 1457 1301 l 1456 1301 l 1455 1301 l 1454 1301 l 1454 1300 l 1453 1300 l 1452 1300 l 1451 1300 l 1450 1300 l 1449 1300 l 1448 1300 l 1447 1300 l 1446 1300 l 1445 1300 l 1444 1300 l 1444 1299 l 1443 1299 l 1442 1299 l 1441 1299 l 1440 1299 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1400 1303 1444 1303 1444 1292 1400 1292 b c np 1440 1299 m 1439 1299 l 1438 1299 l 1437 1299 l 1436 1299 l 1435 1299 l 1434 1298 l 1433 1298 l 1432 1298 l 1431 1298 l 1430 1298 l 1429 1298 l 1428 1298 l 1427 1298 l 1426 1298 l 1425 1298 l 1424 1297 l 1423 1297 l 1422 1297 l 1421 1297 l 1420 1297 l 1419 1297 l 1418 1297 l 1417 1297 l 1416 1297 l 1415 1297 l 1414 1297 l 1413 1297 l 1412 1297 l 1412 1296 l 1411 1296 l 1410 1296 l 1409 1296 l 1408 1296 l 1407 1296 l 1406 1296 l 1405 1296 l 1404 1296 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1363 1300 1408 1300 1408 1288 1363 1288 b c np 1404 1296 m 1403 1296 l 1402 1296 l 1402 1295 l 1401 1295 l 1400 1295 l 1399 1295 l 1398 1295 l 1397 1295 l 1396 1295 l 1395 1295 l 1394 1295 l 1393 1295 l 1392 1295 l 1391 1295 l 1391 1294 l 1390 1294 l 1389 1294 l 1388 1294 l 1387 1294 l 1386 1294 l 1385 1294 l 1384 1294 l 1383 1294 l 1382 1294 l 1381 1294 l 1380 1294 l 1379 1294 l 1379 1293 l 1378 1293 l 1377 1293 l 1376 1293 l 1375 1293 l 1374 1293 l 1373 1293 l 1372 1293 l 1371 1293 l 1370 1293 l 1369 1293 l 1369 1292 l 1368 1292 l 1367 1292 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1326 1296 1371 1296 1371 1285 1326 1285 b c np 1367 1292 m 1366 1292 l 1365 1292 l 1364 1292 l 1363 1292 l 1362 1292 l 1361 1292 l 1361 1291 l 1360 1291 l 1359 1291 l 1358 1291 l 1357 1291 l 1356 1291 l 1355 1291 l 1354 1291 l 1353 1291 l 1352 1291 l 1351 1291 l 1350 1291 l 1350 1290 l 1349 1290 l 1348 1290 l 1347 1290 l 1346 1290 l 1345 1290 l 1344 1290 l 1343 1290 l 1342 1290 l 1341 1290 l 1340 1290 l 1339 1290 l 1338 1290 l 1337 1289 l 1336 1289 l 1335 1289 l 1334 1289 l 1333 1289 l 1332 1289 l 1331 1289 l 1330 1289 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1268 1293 1334 1293 1334 1280 1268 1280 b c np 1330 1289 m 1329 1289 l 1328 1289 l 1327 1289 l 1327 1288 l 1326 1288 l 1325 1288 l 1324 1288 l 1323 1288 l 1322 1288 l 1321 1288 l 1320 1288 l 1319 1288 l 1318 1288 l 1317 1288 l 1316 1287 l 1315 1287 l 1314 1287 l 1313 1287 l 1312 1287 l 1311 1287 l 1310 1287 l 1309 1287 l 1308 1287 l 1307 1287 l 1306 1287 l 1305 1287 l 1305 1286 l 1304 1286 l 1303 1286 l 1302 1286 l 1301 1286 l 1300 1286 l 1299 1286 l 1298 1286 l 1297 1286 l 1296 1286 l 1295 1286 l 1294 1286 l 1293 1286 l 1293 1285 l 1292 1285 l 1291 1285 l 1290 1285 l 1289 1285 l 1288 1285 l 1287 1285 l 1286 1285 l 1285 1285 l 1284 1285 l 1283 1285 l 1282 1285 l 1281 1285 l 1280 1284 l 1279 1284 l 1278 1284 l 1277 1284 l 1276 1284 l 1275 1284 l 1274 1284 l 1273 1284 l 1272 1284 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1197 1288 1276 1288 1276 1274 1197 1274 b c np 1272 1284 m 1271 1284 l 1270 1283 l 1269 1283 l 1268 1283 l 1267 1283 l 1266 1283 l 1265 1283 l 1264 1283 l 1263 1283 l 1262 1283 l 1261 1283 l 1260 1283 l 1259 1283 l 1258 1282 l 1257 1282 l 1256 1282 l 1255 1282 l 1254 1282 l 1253 1282 l 1252 1282 l 1251 1282 l 1250 1282 l 1249 1282 l 1248 1282 l 1247 1281 l 1246 1281 l 1245 1281 l 1244 1281 l 1243 1281 l 1242 1281 l 1241 1281 l 1240 1281 l 1239 1281 l 1238 1281 l 1237 1281 l 1236 1281 l 1236 1280 l 1235 1280 l 1234 1280 l 1233 1280 l 1232 1280 l 1231 1280 l 1230 1280 l 1229 1280 l 1228 1280 l 1227 1280 l 1226 1280 l 1225 1280 l 1224 1280 l 1223 1280 l 1223 1279 l 1222 1279 l 1221 1279 l 1220 1279 l 1219 1279 l 1218 1279 l 1217 1279 l 1216 1279 l 1215 1279 l 1214 1279 l 1213 1279 l 1212 1279 l 1211 1279 l 1210 1279 l 1210 1278 l 1209 1278 l 1208 1278 l 1207 1278 l 1206 1278 l 1205 1278 l 1204 1278 l 1203 1278 l 1202 1278 l 1201 1278 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1128 1282 1205 1282 1205 1268 1128 1268 b c np 1201 1278 m 1200 1278 l 1198 1278 l 1197 1277 l 1196 1277 l 1195 1277 l 1194 1277 l 1193 1277 l 1192 1277 l 1191 1277 l 1190 1277 l 1188 1277 l 1187 1277 l 1186 1277 l 1185 1276 l 1184 1276 l 1183 1276 l 1182 1276 l 1181 1276 l 1180 1276 l 1179 1276 l 1178 1276 l 1177 1276 l 1176 1276 l 1175 1276 l 1175 1275 l 1174 1275 l 1173 1275 l 1172 1275 l 1171 1275 l 1170 1275 l 1169 1275 l 1168 1275 l 1167 1275 l 1166 1275 l 1165 1275 l 1164 1275 l 1163 1275 l 1162 1275 l 1161 1275 l 1160 1274 l 1159 1274 l 1158 1274 l 1157 1274 l 1156 1274 l 1155 1274 l 1154 1274 l 1153 1274 l 1152 1274 l 1151 1274 l 1150 1274 l 1149 1274 l 1148 1274 l 1147 1274 l 1146 1273 l 1145 1273 l 1144 1273 l 1143 1273 l 1142 1273 l 1141 1273 l 1140 1273 l 1139 1273 l 1138 1273 l 1137 1273 l 1136 1273 l 1135 1273 l 1134 1273 l 1133 1273 l 1132 1272 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1089 1276 1136 1276 1136 1266 1089 1266 b c np 1132 1272 m 1131 1272 l 1130 1272 l 1129 1272 l 1128 1272 l 1127 1272 l 1126 1272 l 1125 1272 l 1124 1272 l 1123 1272 l 1122 1272 l 1121 1272 l 1120 1272 l 1119 1272 l 1118 1272 l 1118 1271 l 1117 1271 l 1116 1271 l 1115 1271 l 1114 1271 l 1113 1271 l 1112 1271 l 1111 1271 l 1110 1271 l 1109 1271 l 1108 1271 l 1107 1271 l 1106 1271 l 1105 1271 l 1104 1271 l 1103 1271 l 1103 1270 l 1102 1270 l 1101 1270 l 1100 1270 l 1099 1270 l 1098 1270 l 1097 1270 l 1096 1270 l 1095 1270 l 1094 1270 l 1093 1270 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1014 1274 1097 1274 1097 1261 1014 1261 b c np 1093 1270 m 1092 1270 l 1091 1270 l 1090 1270 l 1089 1270 l 1088 1270 l 1088 1269 l 1087 1269 l 1086 1269 l 1085 1269 l 1084 1269 l 1083 1269 l 1082 1269 l 1081 1269 l 1080 1269 l 1079 1269 l 1078 1269 l 1077 1269 l 1076 1269 l 1075 1269 l 1074 1269 l 1073 1268 l 1072 1268 l 1071 1268 l 1070 1268 l 1069 1268 l 1068 1268 l 1067 1268 l 1066 1268 l 1065 1268 l 1064 1268 l 1063 1268 l 1062 1268 l 1061 1268 l 1060 1268 l 1059 1268 l 1058 1268 l 1057 1268 l 1056 1267 l 1054 1267 l 1053 1267 l 1052 1267 l 1051 1267 l 1050 1267 l 1049 1267 l 1048 1267 l 1047 1267 l 1046 1267 l 1044 1267 l 1043 1267 l 1042 1267 l 1041 1266 l 1040 1266 l 1039 1266 l 1038 1266 l 1037 1266 l 1036 1266 l 1035 1266 l 1034 1266 l 1033 1266 l 1032 1266 l 1031 1266 l 1029 1266 l 1028 1266 l 1027 1266 l 1026 1266 l 1025 1266 l 1024 1266 l 1023 1266 l 1022 1266 l 1021 1266 l 1020 1266 l 1019 1266 l 1018 1265 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 925 1269 1022 1269 1022 1259 925 1259 b c np 1018 1265 m 1017 1265 l 1016 1265 l 1015 1265 l 1014 1265 l 1013 1265 l 1012 1265 l 1011 1265 l 1010 1265 l 1009 1265 l 1008 1265 l 1007 1265 l 1006 1265 l 1005 1265 l 1004 1265 l 1003 1265 l 1002 1265 l 1001 1265 l 1000 1265 l 999 1265 l 998 1265 l 997 1265 l 996 1264 l 995 1264 l 994 1264 l 993 1264 l 992 1264 l 991 1264 l 990 1264 l 989 1264 l 988 1264 l 987 1264 l 986 1264 l 985 1264 l 984 1264 l 983 1264 l 982 1264 l 981 1264 l 980 1264 l 979 1264 l 978 1264 l 977 1264 l 976 1264 l 975 1264 l 974 1264 l 973 1264 l 971 1264 l 970 1264 l 969 1264 l 968 1264 l 967 1264 l 966 1263 l 965 1263 l 963 1263 l 962 1263 l 961 1263 l 960 1263 l 959 1263 l 958 1263 l 957 1263 l 956 1263 l 954 1263 l 953 1263 l 952 1263 l 951 1263 l 950 1263 l 949 1263 l 948 1263 l 947 1263 l 946 1263 l 945 1263 l 944 1263 l 943 1263 l 942 1263 l 941 1263 l 940 1263 l 939 1263 l 938 1263 l 937 1263 l 936 1263 l 935 1263 l 934 1263 l 933 1263 l 932 1263 l 931 1263 l 930 1263 l 929 1263 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 865 1269 933 1269 933 1259 865 1259 b c np 929 1263 m 928 1263 l 927 1263 l 926 1263 l 925 1263 l 924 1263 l 923 1263 l 922 1263 l 921 1263 l 920 1263 l 919 1263 l 918 1263 l 917 1263 l 916 1263 l 915 1263 l 914 1263 l 913 1263 l 912 1263 l 911 1263 l 910 1263 l 909 1263 l 908 1263 l 907 1263 l 906 1263 l 905 1263 l 904 1263 l 903 1263 l 902 1263 l 901 1263 l 900 1263 l 899 1264 l 898 1264 l 897 1264 l 896 1264 l 895 1264 l 894 1264 l 893 1264 l 892 1264 l 891 1264 l 890 1264 l 889 1264 l 888 1264 l 887 1264 l 886 1264 l 885 1264 l 884 1264 l 883 1264 l 882 1264 l 881 1264 l 880 1264 l 879 1264 l 878 1264 l 877 1264 l 876 1265 l 875 1265 l 874 1265 l 873 1265 l 872 1265 l 871 1265 l 870 1265 l 869 1265 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 832 1275 873 1275 873 1261 832 1261 b c np 869 1265 m 868 1265 l 867 1265 l 866 1265 l 865 1265 l 865 1266 l 864 1266 l 863 1266 l 862 1266 l 861 1266 l 860 1266 l 859 1266 l 858 1266 l 857 1267 l 856 1267 l 855 1267 l 854 1267 l 853 1267 l 853 1268 l 852 1268 l 851 1268 l 850 1268 l 849 1268 l 848 1268 l 847 1269 l 846 1269 l 845 1269 l 844 1269 l 843 1269 l 843 1270 l 842 1270 l 841 1270 l 840 1270 l 839 1270 l 839 1271 l 838 1271 l 837 1271 l 836 1271 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 820 1282 840 1282 840 1267 820 1267 b c np 836 1271 m 835 1272 l 834 1272 l 833 1272 l 833 1273 l 832 1273 l 831 1273 l 831 1274 l 830 1274 l 829 1274 l 828 1275 l 827 1275 l 827 1276 l 826 1276 l 826 1277 l 825 1277 l 824 1277 l 824 1278 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 814 1293 828 1293 828 1274 814 1274 b c np 824 1278 m 823 1278 l 823 1279 l 822 1279 l 822 1280 l 821 1280 l 821 1281 l 820 1281 l 820 1282 l 820 1283 l 820 1284 l 819 1284 l 819 1285 l 819 1286 l 819 1287 l 819 1288 l 818 1289 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 814 1314 832 1314 832 1285 814 1285 b c np 818 1289 m 819 1289 l 819 1290 l 819 1291 l 819 1292 l 819 1293 l 819 1294 l 820 1295 l 820 1296 l 820 1297 l 820 1298 l 821 1298 l 821 1299 l 821 1300 l 822 1300 l 822 1301 l 823 1302 l 823 1303 l 824 1303 l 824 1304 l 824 1305 l 825 1305 l 825 1306 l 826 1306 l 826 1307 l 826 1308 l 827 1308 l 827 1309 l 828 1309 l 828 1310 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 824 1387 906 1387 906 1306 824 1306 b c np 828 1310 m 829 1311 l 829 1312 l 830 1312 l 830 1313 l 831 1313 l 831 1314 l 832 1314 l 832 1315 l 833 1315 l 833 1316 l 834 1317 l 835 1318 l 835 1319 l 836 1319 l 836 1320 l 837 1321 l 838 1322 l 839 1323 l 840 1324 l 841 1325 l 842 1326 l 843 1327 l 843 1328 l 844 1329 l 845 1329 l 846 1330 l 846 1331 l 847 1332 l 848 1332 l 849 1333 l 850 1334 l 851 1335 l 851 1336 l 852 1337 l 853 1338 l 854 1339 l 855 1340 l 856 1340 l 857 1341 l 858 1342 l 859 1343 l 860 1344 l 861 1345 l 862 1346 l 863 1347 l 864 1348 l 865 1349 l 866 1350 l 867 1351 l 868 1352 l 869 1353 l 870 1354 l 871 1355 l 872 1356 l 873 1357 l 874 1357 l 875 1358 l 876 1359 l 877 1360 l 878 1361 l 879 1362 l 880 1363 l 881 1364 l 882 1365 l 883 1366 l 884 1367 l 885 1368 l 886 1369 l 887 1370 l 888 1371 l 889 1372 l 890 1373 l 891 1373 l 892 1374 l 893 1375 l 894 1376 l 895 1377 l 896 1378 l 897 1379 l 898 1380 l 899 1381 l 900 1382 l 901 1383 l 902 1383 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 898 1474 994 1474 994 1379 898 1379 b c np 902 1383 m 902 1385 l 903 1386 l 904 1386 l 906 1387 l 907 1388 l 907 1389 l 908 1390 l 909 1391 l 910 1392 l 911 1393 l 912 1394 l 913 1395 l 914 1396 l 915 1397 l 916 1398 l 917 1398 l 918 1399 l 919 1400 l 920 1401 l 921 1402 l 922 1403 l 923 1404 l 924 1405 l 925 1406 l 926 1407 l 927 1408 l 928 1409 l 929 1410 l 930 1411 l 931 1412 l 932 1412 l 933 1413 l 934 1414 l 935 1415 l 936 1416 l 937 1417 l 938 1418 l 939 1419 l 940 1420 l 941 1421 l 942 1422 l 943 1423 l 944 1424 l 945 1424 l 946 1425 l 946 1426 l 948 1427 l 949 1428 l 949 1429 l 950 1430 l 951 1431 l 952 1432 l 953 1433 l 954 1434 l 955 1435 l 956 1436 l 957 1437 l 958 1438 l 959 1439 l 960 1439 l 961 1440 l 962 1441 l 963 1442 l 964 1443 l 965 1444 l 966 1445 l 967 1446 l 967 1447 l 968 1448 l 969 1449 l 970 1450 l 971 1451 l 972 1452 l 973 1453 l 974 1454 l 975 1454 l 976 1455 l 977 1456 l 978 1457 l 978 1458 l 979 1459 l 980 1460 l 981 1461 l 982 1462 l 983 1463 l 984 1464 l 985 1465 l 986 1466 l 987 1467 l 988 1467 l 988 1468 l 990 1469 l 990 1470 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 986 1560 1073 1560 1073 1466 986 1466 b c np 990 1470 m 991 1471 l 992 1472 l 993 1473 l 994 1474 l 995 1475 l 996 1476 l 997 1476 l 998 1478 l 999 1478 l 999 1479 l 1000 1480 l 1001 1481 l 1002 1482 l 1003 1483 l 1004 1484 l 1005 1485 l 1006 1486 l 1007 1487 l 1007 1488 l 1008 1489 l 1009 1490 l 1010 1490 l 1011 1491 l 1012 1492 l 1012 1493 l 1013 1494 l 1014 1495 l 1015 1496 l 1016 1497 l 1017 1498 l 1018 1499 l 1019 1500 l 1020 1501 l 1020 1502 l 1021 1503 l 1022 1504 l 1023 1504 l 1024 1505 l 1025 1506 l 1026 1507 l 1026 1508 l 1027 1509 l 1028 1510 l 1029 1511 l 1030 1512 l 1031 1513 l 1032 1514 l 1033 1515 l 1033 1516 l 1034 1517 l 1035 1518 l 1036 1519 l 1037 1520 l 1038 1520 l 1038 1521 l 1039 1522 l 1040 1523 l 1041 1524 l 1042 1525 l 1043 1526 l 1044 1527 l 1044 1528 l 1045 1529 l 1046 1530 l 1047 1531 l 1048 1532 l 1049 1533 l 1050 1533 l 1050 1534 l 1051 1535 l 1052 1536 l 1053 1537 l 1054 1538 l 1054 1539 l 1055 1540 l 1056 1541 l 1057 1542 l 1058 1543 l 1059 1544 l 1059 1545 l 1060 1546 l 1061 1547 l 1062 1547 l 1063 1548 l 1063 1549 l 1064 1550 l 1065 1551 l 1066 1552 l 1067 1553 l 1068 1554 l 1068 1555 l 1069 1556 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1065 1647 1147 1647 1147 1552 1065 1552 b c np 1069 1556 m 1070 1557 l 1071 1558 l 1072 1559 l 1073 1559 l 1073 1561 l 1074 1561 l 1075 1562 l 1076 1563 l 1077 1564 l 1077 1565 l 1078 1566 l 1079 1567 l 1080 1568 l 1081 1569 l 1082 1570 l 1082 1571 l 1083 1572 l 1084 1573 l 1085 1573 l 1086 1574 l 1086 1575 l 1087 1576 l 1088 1577 l 1089 1578 l 1090 1579 l 1090 1580 l 1091 1581 l 1092 1582 l 1093 1583 l 1094 1584 l 1094 1585 l 1095 1586 l 1096 1587 l 1097 1588 l 1098 1588 l 1098 1589 l 1099 1590 l 1100 1591 l 1101 1592 l 1101 1593 l 1102 1594 l 1103 1595 l 1104 1596 l 1104 1597 l 1105 1598 l 1106 1599 l 1107 1600 l 1108 1601 l 1109 1601 l 1109 1603 l 1110 1604 l 1111 1604 l 1112 1605 l 1112 1606 l 1113 1607 l 1114 1608 l 1115 1609 l 1116 1610 l 1116 1611 l 1117 1612 l 1118 1613 l 1119 1614 l 1119 1615 l 1120 1616 l 1121 1616 l 1122 1617 l 1122 1618 l 1123 1619 l 1124 1620 l 1125 1621 l 1125 1622 l 1126 1623 l 1127 1624 l 1128 1625 l 1129 1626 l 1129 1627 l 1130 1628 l 1131 1629 l 1132 1630 l 1133 1631 l 1134 1632 l 1135 1633 l 1135 1634 l 1136 1635 l 1137 1636 l 1138 1637 l 1138 1638 l 1139 1639 l 1140 1640 l 1141 1641 l 1142 1642 l 1143 1643 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1139 1733 1215 1733 1215 1639 1139 1639 b c np 1143 1643 m 1144 1644 l 1145 1645 l 1145 1646 l 1146 1647 l 1147 1648 l 1148 1649 l 1149 1650 l 1149 1651 l 1150 1652 l 1151 1653 l 1151 1654 l 1152 1655 l 1153 1656 l 1154 1656 l 1154 1657 l 1155 1658 l 1156 1659 l 1157 1660 l 1157 1661 l 1158 1662 l 1159 1663 l 1160 1664 l 1160 1665 l 1161 1666 l 1162 1667 l 1163 1668 l 1164 1670 l 1165 1670 l 1166 1671 l 1166 1672 l 1167 1673 l 1168 1674 l 1168 1675 l 1169 1676 l 1170 1677 l 1171 1678 l 1171 1679 l 1172 1680 l 1173 1681 l 1174 1682 l 1174 1683 l 1175 1683 l 1176 1684 l 1177 1685 l 1177 1686 l 1178 1687 l 1179 1688 l 1180 1689 l 1180 1690 l 1181 1691 l 1182 1692 l 1183 1693 l 1183 1694 l 1184 1695 l 1185 1696 l 1185 1697 l 1186 1698 l 1187 1698 l 1188 1699 l 1188 1700 l 1189 1701 l 1190 1702 l 1191 1703 l 1191 1704 l 1192 1705 l 1193 1706 l 1193 1707 l 1194 1708 l 1195 1709 l 1196 1710 l 1196 1711 l 1197 1712 l 1198 1713 l 1199 1713 l 1199 1714 l 1200 1715 l 1201 1716 l 1201 1717 l 1202 1718 l 1203 1719 l 1204 1720 l 1204 1721 l 1205 1722 l 1206 1723 l 1207 1724 l 1207 1725 l 1208 1725 l 1209 1726 l 1209 1727 l 1210 1728 l 1211 1729 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1207 1821 1282 1821 1282 1725 1207 1725 b c np 1211 1729 m 1212 1730 l 1212 1731 l 1213 1732 l 1214 1733 l 1215 1734 l 1215 1735 l 1216 1736 l 1217 1737 l 1217 1738 l 1218 1739 l 1219 1739 l 1220 1740 l 1220 1741 l 1221 1742 l 1222 1743 l 1223 1744 l 1223 1745 l 1224 1746 l 1225 1747 l 1225 1748 l 1226 1749 l 1227 1750 l 1228 1751 l 1229 1752 l 1230 1754 l 1231 1755 l 1232 1756 l 1233 1757 l 1233 1758 l 1234 1759 l 1235 1760 l 1235 1761 l 1236 1762 l 1237 1763 l 1238 1764 l 1238 1765 l 1239 1766 l 1240 1767 l 1241 1767 l 1241 1768 l 1242 1769 l 1243 1770 l 1243 1771 l 1244 1772 l 1245 1773 l 1245 1774 l 1246 1775 l 1247 1776 l 1248 1777 l 1248 1778 l 1249 1779 l 1250 1780 l 1250 1781 l 1251 1782 l 1252 1782 l 1253 1783 l 1253 1784 l 1254 1785 l 1255 1786 l 1255 1787 l 1256 1788 l 1257 1789 l 1258 1790 l 1258 1791 l 1259 1792 l 1260 1793 l 1261 1794 l 1262 1795 l 1262 1796 l 1263 1797 l 1264 1798 l 1265 1799 l 1265 1800 l 1266 1801 l 1267 1802 l 1267 1803 l 1268 1804 l 1269 1805 l 1270 1806 l 1271 1807 l 1271 1808 l 1272 1809 l 1273 1810 l 1274 1811 l 1274 1812 l 1275 1813 l 1276 1814 l 1276 1815 l 1277 1816 l 1278 1817 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1274 1875 1323 1875 1323 1813 1274 1813 b c np 1278 1817 m 1278 1818 l 1279 1819 l 1280 1819 l 1281 1821 l 1282 1822 l 1282 1823 l 1283 1824 l 1284 1825 l 1285 1826 l 1285 1827 l 1286 1828 l 1287 1829 l 1287 1830 l 1288 1831 l 1289 1832 l 1290 1833 l 1291 1833 l 1291 1834 l 1292 1835 l 1293 1836 l 1293 1837 l 1294 1838 l 1295 1839 l 1295 1840 l 1296 1841 l 1297 1842 l 1298 1843 l 1298 1844 l 1299 1844 l 1299 1845 l 1300 1846 l 1301 1847 l 1301 1848 l 1302 1848 l 1302 1849 l 1303 1850 l 1304 1851 l 1304 1852 l 1305 1852 l 1305 1853 l 1306 1854 l 1307 1855 l 1308 1856 l 1308 1857 l 1309 1858 l 1310 1859 l 1310 1860 l 1311 1860 l 1311 1861 l 1312 1862 l 1312 1863 l 1313 1863 l 1313 1864 l 1314 1865 l 1315 1866 l 1316 1867 l 1316 1868 l 1317 1868 l 1317 1869 l 1318 1870 l 1318 1871 l 1319 1871 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1315 1896 1339 1896 1339 1867 1315 1867 b c np 1319 1871 m 1319 1872 l 1320 1872 l 1320 1873 l 1320 1874 l 1321 1874 l 1321 1875 l 1322 1875 l 1322 1876 l 1323 1876 l 1323 1877 l 1324 1877 l 1324 1878 l 1324 1879 l 1325 1879 l 1325 1880 l 1326 1880 l 1326 1881 l 1326 1882 l 1327 1882 l 1327 1883 l 1328 1883 l 1328 1884 l 1329 1884 l 1329 1885 l 1330 1886 l 1330 1887 l 1331 1887 l 1331 1888 l 1332 1888 l 1332 1889 l 1333 1890 l 1333 1891 l 1334 1891 l 1334 1892 l 1335 1892 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1331 1907 1347 1907 1347 1888 1331 1888 b c np 1335 1892 m 1335 1893 l 1336 1893 l 1336 1894 l 1336 1895 l 1337 1895 l 1337 1896 l 1338 1897 l 1338 1898 l 1339 1898 l 1339 1899 l 1340 1899 l 1340 1900 l 1341 1900 l 1341 1901 l 1342 1901 l 1342 1902 l 1342 1903 l 1343 1903 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1339 1918 1355 1918 1355 1899 1339 1899 b c np 1343 1903 m 1343 1904 l 1344 1904 l 1344 1905 l 1344 1906 l 1345 1906 l 1345 1907 l 1346 1907 l 1346 1908 l 1347 1908 l 1347 1909 l 1347 1910 l 1348 1910 l 1348 1911 l 1349 1911 l 1349 1912 l 1350 1912 l 1350 1913 l 1350 1914 l 1351 1914 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1347 1926 1361 1926 1361 1910 1347 1910 b c np 1351 1914 m 1351 1915 l 1352 1915 l 1352 1916 l 1353 1916 l 1353 1917 l 1353 1918 l 1354 1918 l 1354 1919 l 1355 1919 l 1355 1920 l 1356 1920 l 1356 1921 l 1356 1922 l 1357 1922 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1353 1931 1365 1931 1365 1918 1353 1918 b c np 1357 1922 m 1357 1923 l 1358 1923 l 1358 1924 l 1359 1924 l 1359 1925 l 1359 1926 l 1360 1926 l 1360 1927 l 1361 1927 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1357 1937 1369 1937 1369 1923 1357 1923 b c np 1361 1927 m 1361 1928 l 1362 1928 l 1362 1929 l 1362 1930 l 1363 1930 l 1363 1931 l 1364 1931 l 1364 1932 l 1365 1932 l 1365 1933 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1361 1942 1373 1942 1373 1929 1361 1929 b c np 1365 1933 m 1365 1934 l 1366 1934 l 1366 1935 l 1367 1935 l 1367 1936 l 1368 1936 l 1368 1937 l 1368 1938 l 1369 1938 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1365 1948 1377 1948 1377 1934 1365 1934 b c np 1369 1938 m 1369 1939 l 1370 1939 l 1370 1940 l 1371 1940 l 1371 1941 l 1371 1942 l 1372 1942 l 1372 1943 l 1373 1944 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1369 1950 1379 1950 1379 1940 1369 1940 b c np 1373 1944 m 1374 1944 l 1374 1945 l 1374 1946 l 1375 1946 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1371 1953 1381 1953 1381 1942 1371 1942 b c np 1375 1946 m 1375 1947 l 1376 1947 l 1376 1948 l 1376 1949 l 1377 1949 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1373 1956 1383 1956 1383 1945 1373 1945 b c np 1377 1949 m 1377 1950 l 1378 1950 l 1378 1951 l 1379 1951 l 1379 1952 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1375 1959 1385 1959 1385 1948 1375 1948 b c np 1379 1952 m 1379 1953 l 1380 1953 l 1380 1954 l 1381 1954 l 1381 1955 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1377 1961 1387 1961 1387 1951 1377 1951 b c np 1381 1955 m 1382 1955 l 1382 1956 l 1383 1956 l 1383 1957 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1379 1964 1389 1964 1389 1953 1379 1953 b c np 1383 1957 m 1383 1958 l 1384 1958 l 1384 1959 l 1385 1959 l 1385 1960 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1952 6149 1952 6149 1941 6141 1941 b c np 6145 1947 m 6145 1948 l 6145 1947 l 6145 1946 l 6145 1945 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6140 1949 6149 1949 6149 1910 6140 1910 b c np 6145 1945 m 6145 1944 l 6145 1943 l 6145 1942 l 6145 1941 l 6145 1940 l 6145 1939 l 6145 1938 l 6145 1937 l 6145 1936 l 6145 1935 l 6145 1934 l 6145 1933 l 6145 1932 l 6145 1931 l 6145 1930 l 6145 1929 l 6145 1928 l 6145 1927 l 6145 1926 l 6145 1925 l 6144 1925 l 6144 1924 l 6144 1923 l 6144 1922 l 6144 1921 l 6144 1920 l 6144 1919 l 6144 1918 l 6144 1917 l 6144 1916 l 6145 1915 l 6145 1914 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5987 1918 6150 1918 6150 1875 5987 1875 b c np 6145 1914 m 6145 1913 l 6146 1912 l 6146 1911 l 6146 1910 l 6146 1909 l 6146 1908 l 6146 1907 l 6145 1906 l 6144 1905 l 6143 1905 l 6142 1904 l 6141 1904 l 6141 1903 l 6140 1903 l 6139 1903 l 6138 1902 l 6137 1902 l 6136 1902 l 6135 1901 l 6134 1901 l 6132 1900 l 6131 1900 l 6130 1900 l 6128 1899 l 6127 1899 l 6125 1899 l 6124 1898 l 6122 1898 l 6120 1898 l 6119 1897 l 6117 1897 l 6115 1896 l 6113 1896 l 6111 1896 l 6108 1895 l 6106 1895 l 6103 1894 l 6101 1894 l 6099 1894 l 6096 1893 l 6093 1893 l 6091 1893 l 6088 1892 l 6085 1892 l 6083 1891 l 6080 1891 l 6077 1891 l 6074 1890 l 6071 1890 l 6068 1890 l 6066 1889 l 6063 1889 l 6060 1889 l 6057 1888 l 6054 1888 l 6051 1888 l 6049 1887 l 6046 1887 l 6043 1886 l 6040 1886 l 6037 1886 l 6034 1885 l 6032 1885 l 6029 1884 l 6026 1884 l 6023 1884 l 6021 1883 l 6018 1883 l 6015 1883 l 6013 1882 l 6010 1882 l 6007 1882 l 6005 1881 l 6002 1881 l 5999 1880 l 5997 1880 l 5994 1880 l 5991 1879 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5741 1883 5995 1883 5995 1841 5741 1841 b c np 5991 1879 m 5989 1879 l 5986 1879 l 5983 1878 l 5981 1878 l 5978 1877 l 5976 1877 l 5973 1877 l 5970 1876 l 5968 1876 l 5965 1876 l 5962 1875 l 5960 1875 l 5957 1875 l 5954 1874 l 5952 1874 l 5949 1873 l 5946 1873 l 5944 1873 l 5941 1872 l 5938 1872 l 5935 1872 l 5933 1871 l 5930 1871 l 5927 1871 l 5925 1870 l 5922 1870 l 5919 1869 l 5917 1869 l 5914 1869 l 5911 1868 l 5909 1868 l 5906 1867 l 5904 1867 l 5901 1867 l 5898 1866 l 5895 1866 l 5893 1866 l 5890 1865 l 5887 1865 l 5885 1865 l 5882 1864 l 5879 1864 l 5876 1863 l 5874 1863 l 5871 1863 l 5868 1862 l 5866 1862 l 5863 1861 l 5860 1861 l 5858 1861 l 5855 1860 l 5852 1860 l 5850 1860 l 5847 1859 l 5844 1859 l 5842 1858 l 5839 1858 l 5836 1858 l 5834 1857 l 5831 1857 l 5828 1857 l 5825 1856 l 5823 1856 l 5820 1855 l 5817 1855 l 5815 1855 l 5812 1854 l 5810 1854 l 5807 1854 l 5804 1853 l 5801 1853 l 5799 1852 l 5796 1852 l 5793 1852 l 5791 1851 l 5788 1851 l 5785 1851 l 5783 1850 l 5780 1850 l 5777 1849 l 5775 1849 l 5772 1849 l 5769 1848 l 5767 1848 l 5764 1848 l 5761 1847 l 5758 1847 l 5756 1847 l 5753 1846 l 5750 1846 l 5748 1846 l 5745 1845 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5488 1849 5749 1849 5749 1806 5488 1806 b c np 5745 1845 m 5742 1845 l 5740 1844 l 5737 1844 l 5734 1844 l 5732 1843 l 5729 1843 l 5726 1842 l 5723 1842 l 5721 1842 l 5718 1841 l 5715 1841 l 5713 1841 l 5710 1840 l 5707 1840 l 5705 1840 l 5702 1839 l 5699 1839 l 5697 1838 l 5694 1838 l 5691 1838 l 5688 1837 l 5686 1837 l 5683 1836 l 5680 1836 l 5678 1836 l 5675 1835 l 5672 1835 l 5670 1835 l 5667 1834 l 5664 1834 l 5662 1834 l 5659 1833 l 5656 1833 l 5654 1832 l 5651 1832 l 5648 1832 l 5646 1831 l 5643 1831 l 5640 1831 l 5638 1830 l 5635 1830 l 5632 1830 l 5630 1829 l 5627 1829 l 5624 1828 l 5621 1828 l 5619 1828 l 5616 1827 l 5613 1827 l 5611 1826 l 5608 1826 l 5605 1826 l 5602 1825 l 5600 1825 l 5597 1825 l 5594 1824 l 5592 1824 l 5589 1823 l 5587 1823 l 5584 1823 l 5581 1822 l 5578 1822 l 5576 1822 l 5573 1821 l 5570 1821 l 5567 1821 l 5565 1820 l 5562 1820 l 5559 1819 l 5557 1819 l 5554 1818 l 5551 1818 l 5549 1818 l 5546 1817 l 5543 1817 l 5541 1817 l 5538 1816 l 5535 1816 l 5532 1816 l 5530 1815 l 5527 1815 l 5524 1814 l 5522 1814 l 5519 1814 l 5516 1813 l 5514 1813 l 5511 1813 l 5508 1812 l 5506 1812 l 5503 1812 l 5500 1811 l 5497 1811 l 5495 1810 l 5492 1810 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5240 1814 5496 1814 5496 1772 5240 1772 b c np 5492 1810 m 5489 1810 l 5487 1809 l 5484 1809 l 5481 1809 l 5479 1808 l 5476 1808 l 5473 1807 l 5471 1807 l 5468 1807 l 5465 1806 l 5462 1806 l 5460 1806 l 5457 1805 l 5454 1805 l 5452 1805 l 5449 1804 l 5446 1804 l 5443 1804 l 5441 1803 l 5438 1803 l 5435 1802 l 5433 1802 l 5430 1801 l 5427 1801 l 5425 1801 l 5422 1800 l 5419 1800 l 5417 1800 l 5414 1799 l 5411 1799 l 5408 1799 l 5406 1798 l 5403 1798 l 5400 1797 l 5398 1797 l 5395 1797 l 5392 1796 l 5390 1796 l 5387 1796 l 5384 1795 l 5382 1795 l 5379 1794 l 5376 1794 l 5373 1794 l 5371 1793 l 5368 1793 l 5365 1792 l 5363 1792 l 5360 1792 l 5357 1791 l 5355 1791 l 5352 1791 l 5349 1790 l 5347 1790 l 5344 1789 l 5341 1789 l 5339 1789 l 5336 1788 l 5333 1788 l 5331 1788 l 5328 1787 l 5325 1787 l 5322 1787 l 5320 1786 l 5317 1786 l 5314 1785 l 5312 1785 l 5309 1785 l 5306 1784 l 5304 1784 l 5301 1783 l 5298 1783 l 5296 1783 l 5293 1782 l 5290 1782 l 5287 1782 l 5285 1781 l 5282 1781 l 5279 1781 l 5277 1780 l 5274 1780 l 5271 1780 l 5268 1779 l 5266 1779 l 5263 1778 l 5260 1778 l 5258 1778 l 5255 1777 l 5252 1777 l 5250 1776 l 5247 1776 l 5244 1776 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4989 1780 5248 1780 5248 1737 4989 1737 b c np 5244 1776 m 5242 1775 l 5239 1775 l 5236 1775 l 5233 1774 l 5231 1774 l 5228 1774 l 5225 1773 l 5223 1773 l 5220 1772 l 5217 1772 l 5215 1772 l 5212 1771 l 5209 1771 l 5207 1771 l 5204 1770 l 5201 1770 l 5198 1769 l 5196 1769 l 5193 1769 l 5190 1768 l 5188 1768 l 5185 1768 l 5182 1767 l 5180 1767 l 5177 1766 l 5174 1766 l 5171 1766 l 5169 1765 l 5166 1765 l 5163 1765 l 5160 1764 l 5158 1764 l 5155 1763 l 5153 1763 l 5150 1763 l 5147 1762 l 5144 1762 l 5142 1762 l 5139 1761 l 5136 1761 l 5134 1760 l 5131 1760 l 5128 1760 l 5125 1759 l 5123 1759 l 5120 1758 l 5117 1758 l 5115 1758 l 5112 1757 l 5109 1757 l 5107 1757 l 5104 1756 l 5101 1756 l 5098 1756 l 5096 1755 l 5093 1755 l 5090 1754 l 5088 1754 l 5085 1754 l 5082 1753 l 5080 1753 l 5077 1752 l 5074 1752 l 5071 1752 l 5069 1751 l 5066 1751 l 5063 1751 l 5060 1750 l 5058 1750 l 5055 1750 l 5053 1749 l 5050 1749 l 5047 1749 l 5044 1748 l 5042 1748 l 5039 1747 l 5036 1747 l 5033 1747 l 5031 1746 l 5028 1746 l 5025 1746 l 5023 1745 l 5020 1745 l 5017 1745 l 5015 1744 l 5012 1744 l 5009 1743 l 5007 1743 l 5004 1743 l 5001 1742 l 4998 1742 l 4996 1741 l 4993 1741 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4737 1745 4997 1745 4997 1702 4737 1702 b c np 4993 1741 m 4990 1741 l 4988 1740 l 4985 1740 l 4982 1740 l 4979 1739 l 4977 1739 l 4974 1739 l 4971 1738 l 4968 1738 l 4966 1737 l 4963 1737 l 4960 1737 l 4958 1736 l 4955 1736 l 4952 1735 l 4950 1735 l 4947 1735 l 4944 1734 l 4941 1734 l 4939 1734 l 4936 1733 l 4933 1733 l 4931 1732 l 4928 1732 l 4925 1732 l 4923 1731 l 4920 1731 l 4917 1731 l 4914 1730 l 4912 1730 l 4909 1729 l 4906 1729 l 4904 1729 l 4901 1728 l 4898 1728 l 4895 1727 l 4893 1727 l 4890 1727 l 4887 1726 l 4885 1726 l 4882 1726 l 4879 1725 l 4877 1725 l 4874 1725 l 4871 1724 l 4868 1724 l 4866 1723 l 4863 1723 l 4860 1723 l 4858 1722 l 4855 1722 l 4852 1722 l 4849 1721 l 4847 1721 l 4844 1721 l 4841 1720 l 4839 1720 l 4836 1720 l 4833 1719 l 4831 1719 l 4828 1718 l 4825 1718 l 4822 1718 l 4820 1717 l 4817 1717 l 4814 1716 l 4812 1716 l 4809 1716 l 4806 1715 l 4803 1715 l 4801 1715 l 4798 1714 l 4795 1714 l 4792 1714 l 4790 1713 l 4787 1713 l 4784 1712 l 4782 1712 l 4779 1712 l 4776 1711 l 4774 1711 l 4771 1710 l 4768 1710 l 4765 1710 l 4763 1709 l 4760 1709 l 4757 1709 l 4755 1708 l 4752 1708 l 4749 1708 l 4746 1707 l 4744 1707 l 4741 1706 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4487 1710 4745 1710 4745 1668 4487 1668 b c np 4741 1706 m 4738 1706 l 4736 1706 l 4733 1705 l 4730 1705 l 4727 1705 l 4725 1704 l 4722 1704 l 4719 1704 l 4716 1703 l 4714 1703 l 4711 1702 l 4708 1702 l 4706 1702 l 4703 1701 l 4700 1701 l 4697 1700 l 4695 1700 l 4692 1700 l 4689 1699 l 4687 1699 l 4684 1699 l 4681 1698 l 4679 1698 l 4676 1697 l 4673 1697 l 4670 1697 l 4668 1696 l 4665 1696 l 4662 1696 l 4659 1695 l 4657 1695 l 4654 1695 l 4651 1694 l 4649 1694 l 4646 1693 l 4643 1693 l 4641 1692 l 4638 1692 l 4635 1692 l 4632 1691 l 4630 1691 l 4627 1691 l 4624 1690 l 4622 1690 l 4619 1690 l 4616 1689 l 4613 1689 l 4611 1688 l 4608 1688 l 4605 1688 l 4603 1687 l 4600 1687 l 4597 1687 l 4594 1686 l 4592 1686 l 4589 1685 l 4586 1685 l 4583 1685 l 4581 1684 l 4578 1684 l 4575 1684 l 4573 1683 l 4570 1683 l 4567 1683 l 4564 1682 l 4562 1682 l 4559 1681 l 4556 1681 l 4554 1681 l 4551 1680 l 4548 1680 l 4545 1680 l 4543 1679 l 4540 1679 l 4537 1679 l 4534 1678 l 4532 1678 l 4529 1677 l 4526 1677 l 4524 1677 l 4521 1676 l 4518 1676 l 4515 1675 l 4513 1675 l 4510 1675 l 4507 1674 l 4505 1674 l 4502 1674 l 4499 1673 l 4496 1673 l 4494 1673 l 4491 1672 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4231 1676 4495 1676 4495 1633 4231 1633 b c np 4491 1672 m 4488 1672 l 4486 1671 l 4483 1671 l 4480 1671 l 4477 1670 l 4475 1670 l 4472 1670 l 4469 1669 l 4466 1669 l 4464 1668 l 4461 1668 l 4458 1668 l 4456 1667 l 4453 1667 l 4450 1666 l 4448 1666 l 4445 1666 l 4442 1665 l 4439 1665 l 4437 1665 l 4434 1664 l 4431 1664 l 4429 1663 l 4426 1663 l 4423 1663 l 4421 1662 l 4418 1662 l 4415 1662 l 4412 1661 l 4409 1661 l 4407 1660 l 4404 1660 l 4401 1660 l 4399 1659 l 4396 1659 l 4393 1659 l 4390 1658 l 4388 1658 l 4385 1657 l 4382 1657 l 4379 1657 l 4377 1656 l 4374 1656 l 4371 1656 l 4369 1655 l 4366 1655 l 4363 1655 l 4360 1654 l 4358 1654 l 4355 1654 l 4352 1653 l 4349 1653 l 4347 1652 l 4344 1652 l 4341 1652 l 4338 1651 l 4336 1651 l 4333 1650 l 4330 1650 l 4328 1650 l 4325 1649 l 4322 1649 l 4319 1649 l 4317 1648 l 4314 1648 l 4311 1648 l 4308 1647 l 4306 1647 l 4303 1646 l 4300 1646 l 4298 1646 l 4295 1645 l 4292 1645 l 4289 1645 l 4287 1644 l 4284 1644 l 4281 1643 l 4279 1643 l 4276 1643 l 4273 1642 l 4270 1642 l 4267 1642 l 4265 1641 l 4262 1641 l 4259 1640 l 4257 1640 l 4254 1640 l 4251 1639 l 4248 1639 l 4246 1639 l 4243 1638 l 4240 1638 l 4238 1637 l 4235 1637 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3979 1641 4239 1641 4239 1599 3979 1599 b c np 4235 1637 m 4232 1637 l 4229 1636 l 4227 1636 l 4224 1635 l 4221 1635 l 4219 1635 l 4216 1634 l 4213 1634 l 4210 1634 l 4207 1633 l 4205 1633 l 4202 1632 l 4199 1632 l 4197 1632 l 4194 1631 l 4191 1631 l 4188 1631 l 4186 1630 l 4183 1630 l 4180 1630 l 4177 1629 l 4175 1629 l 4172 1628 l 4169 1628 l 4166 1628 l 4164 1627 l 4161 1627 l 4158 1626 l 4155 1626 l 4153 1626 l 4150 1625 l 4147 1625 l 4145 1625 l 4142 1624 l 4139 1624 l 4136 1624 l 4133 1623 l 4131 1623 l 4128 1623 l 4125 1622 l 4123 1622 l 4120 1621 l 4117 1621 l 4114 1621 l 4112 1620 l 4109 1620 l 4106 1620 l 4103 1619 l 4101 1619 l 4098 1618 l 4095 1618 l 4092 1618 l 4090 1617 l 4087 1617 l 4084 1617 l 4082 1616 l 4079 1616 l 4076 1615 l 4073 1615 l 4071 1615 l 4068 1614 l 4065 1614 l 4062 1614 l 4060 1613 l 4057 1613 l 4054 1613 l 4052 1612 l 4049 1612 l 4046 1611 l 4043 1611 l 4040 1610 l 4038 1610 l 4035 1610 l 4032 1609 l 4029 1609 l 4027 1609 l 4024 1608 l 4021 1608 l 4019 1608 l 4016 1607 l 4013 1607 l 4010 1606 l 4007 1606 l 4005 1606 l 4002 1605 l 3999 1605 l 3997 1605 l 3994 1604 l 3991 1604 l 3988 1603 l 3986 1603 l 3983 1603 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3721 1607 3987 1607 3987 1564 3721 1564 b c np 3983 1603 m 3980 1602 l 3977 1602 l 3975 1601 l 3972 1601 l 3969 1601 l 3966 1600 l 3964 1600 l 3961 1600 l 3958 1599 l 3956 1599 l 3953 1599 l 3950 1598 l 3947 1598 l 3945 1597 l 3942 1597 l 3939 1597 l 3936 1596 l 3934 1596 l 3931 1596 l 3928 1595 l 3925 1595 l 3923 1595 l 3920 1594 l 3917 1594 l 3914 1593 l 3912 1593 l 3909 1593 l 3906 1592 l 3903 1592 l 3901 1592 l 3898 1591 l 3895 1591 l 3892 1590 l 3890 1590 l 3887 1590 l 3884 1589 l 3881 1589 l 3879 1589 l 3876 1588 l 3873 1588 l 3870 1588 l 3868 1587 l 3865 1587 l 3862 1586 l 3860 1586 l 3857 1586 l 3854 1585 l 3851 1585 l 3848 1584 l 3846 1584 l 3843 1584 l 3840 1583 l 3837 1583 l 3835 1583 l 3832 1582 l 3829 1582 l 3826 1581 l 3824 1581 l 3821 1581 l 3818 1580 l 3815 1580 l 3813 1580 l 3810 1579 l 3807 1579 l 3804 1579 l 3802 1578 l 3799 1578 l 3796 1577 l 3793 1577 l 3791 1576 l 3788 1576 l 3785 1576 l 3782 1575 l 3780 1575 l 3777 1575 l 3774 1574 l 3771 1574 l 3769 1574 l 3766 1573 l 3763 1573 l 3760 1572 l 3758 1572 l 3755 1572 l 3752 1571 l 3749 1571 l 3747 1571 l 3744 1570 l 3741 1570 l 3738 1570 l 3736 1569 l 3733 1569 l 3730 1568 l 3727 1568 l 3725 1568 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3466 1572 3729 1572 3729 1529 3466 1529 b c np 3725 1568 m 3722 1567 l 3719 1567 l 3716 1566 l 3714 1566 l 3711 1566 l 3708 1565 l 3705 1565 l 3703 1565 l 3700 1564 l 3697 1564 l 3694 1564 l 3691 1563 l 3689 1563 l 3686 1563 l 3683 1562 l 3680 1562 l 3678 1561 l 3675 1561 l 3672 1561 l 3669 1560 l 3667 1560 l 3664 1559 l 3661 1559 l 3658 1559 l 3656 1558 l 3653 1558 l 3650 1558 l 3647 1557 l 3645 1557 l 3642 1557 l 3639 1556 l 3636 1556 l 3633 1555 l 3631 1555 l 3628 1555 l 3625 1554 l 3622 1554 l 3620 1554 l 3617 1553 l 3614 1553 l 3611 1552 l 3608 1552 l 3606 1552 l 3603 1551 l 3600 1551 l 3597 1550 l 3595 1550 l 3592 1550 l 3589 1549 l 3586 1549 l 3583 1549 l 3581 1548 l 3578 1548 l 3575 1547 l 3573 1547 l 3570 1547 l 3567 1546 l 3564 1546 l 3562 1546 l 3559 1545 l 3556 1545 l 3553 1545 l 3551 1544 l 3548 1544 l 3545 1543 l 3542 1543 l 3539 1543 l 3537 1542 l 3534 1542 l 3531 1541 l 3528 1541 l 3526 1541 l 3523 1540 l 3520 1540 l 3517 1540 l 3514 1539 l 3512 1539 l 3509 1539 l 3506 1538 l 3503 1538 l 3501 1537 l 3498 1537 l 3495 1537 l 3492 1536 l 3490 1536 l 3487 1536 l 3484 1535 l 3481 1535 l 3479 1534 l 3476 1534 l 3473 1534 l 3470 1533 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3207 1537 3474 1537 3474 1495 3207 1495 b c np 3470 1533 m 3468 1533 l 3465 1533 l 3462 1532 l 3459 1532 l 3456 1532 l 3454 1531 l 3451 1531 l 3448 1530 l 3445 1530 l 3443 1530 l 3440 1529 l 3437 1529 l 3434 1529 l 3431 1528 l 3429 1528 l 3426 1528 l 3423 1527 l 3420 1527 l 3418 1526 l 3415 1526 l 3412 1526 l 3409 1525 l 3406 1525 l 3404 1524 l 3401 1524 l 3398 1524 l 3395 1523 l 3393 1523 l 3390 1523 l 3387 1522 l 3384 1522 l 3381 1522 l 3379 1521 l 3376 1521 l 3373 1520 l 3370 1520 l 3368 1520 l 3365 1519 l 3362 1519 l 3359 1519 l 3356 1518 l 3354 1518 l 3351 1517 l 3348 1517 l 3345 1517 l 3342 1516 l 3340 1516 l 3337 1516 l 3334 1515 l 3331 1515 l 3328 1514 l 3326 1514 l 3323 1514 l 3320 1513 l 3317 1513 l 3314 1513 l 3312 1512 l 3309 1512 l 3306 1511 l 3303 1511 l 3301 1511 l 3298 1510 l 3295 1510 l 3292 1509 l 3289 1509 l 3287 1509 l 3284 1508 l 3281 1508 l 3278 1508 l 3276 1507 l 3273 1507 l 3270 1506 l 3267 1506 l 3264 1506 l 3262 1505 l 3259 1505 l 3256 1505 l 3253 1504 l 3250 1504 l 3248 1504 l 3245 1503 l 3242 1503 l 3239 1502 l 3236 1502 l 3234 1502 l 3231 1501 l 3228 1501 l 3225 1500 l 3222 1500 l 3220 1500 l 3217 1499 l 3214 1499 l 3211 1499 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2947 1503 3215 1503 3215 1460 2947 1460 b c np 3211 1499 m 3209 1498 l 3206 1498 l 3203 1498 l 3200 1497 l 3197 1497 l 3195 1497 l 3192 1496 l 3189 1496 l 3186 1495 l 3183 1495 l 3180 1495 l 3178 1494 l 3175 1494 l 3172 1494 l 3169 1493 l 3166 1493 l 3164 1492 l 3161 1492 l 3158 1492 l 3155 1491 l 3153 1491 l 3150 1491 l 3147 1490 l 3144 1490 l 3141 1489 l 3139 1489 l 3136 1489 l 3133 1488 l 3130 1488 l 3127 1488 l 3124 1487 l 3122 1487 l 3119 1487 l 3116 1486 l 3113 1486 l 3111 1485 l 3108 1485 l 3105 1484 l 3102 1484 l 3099 1484 l 3096 1483 l 3094 1483 l 3091 1483 l 3088 1482 l 3085 1482 l 3082 1482 l 3080 1481 l 3077 1481 l 3074 1480 l 3071 1480 l 3068 1480 l 3066 1479 l 3063 1479 l 3060 1479 l 3057 1478 l 3054 1478 l 3052 1477 l 3049 1477 l 3046 1477 l 3043 1476 l 3040 1476 l 3038 1475 l 3035 1475 l 3032 1475 l 3029 1474 l 3026 1474 l 3024 1474 l 3021 1473 l 3018 1473 l 3015 1473 l 3012 1472 l 3010 1472 l 3007 1471 l 3004 1471 l 3001 1471 l 2998 1470 l 2996 1470 l 2993 1470 l 2990 1469 l 2987 1469 l 2984 1469 l 2982 1468 l 2979 1468 l 2976 1468 l 2973 1467 l 2970 1467 l 2968 1466 l 2965 1466 l 2962 1466 l 2959 1465 l 2956 1465 l 2953 1465 l 2951 1464 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2686 1468 2955 1468 2955 1426 2686 1426 b c np 2951 1464 m 2948 1464 l 2945 1464 l 2942 1463 l 2939 1463 l 2936 1462 l 2934 1462 l 2931 1462 l 2928 1461 l 2925 1461 l 2922 1461 l 2920 1460 l 2917 1460 l 2914 1459 l 2911 1459 l 2908 1459 l 2905 1458 l 2903 1458 l 2900 1458 l 2897 1457 l 2894 1457 l 2891 1456 l 2888 1456 l 2886 1456 l 2883 1455 l 2880 1455 l 2877 1455 l 2874 1454 l 2872 1454 l 2869 1453 l 2866 1453 l 2863 1453 l 2860 1452 l 2857 1452 l 2855 1452 l 2852 1451 l 2849 1451 l 2846 1450 l 2843 1450 l 2840 1450 l 2838 1449 l 2835 1449 l 2832 1448 l 2829 1448 l 2826 1448 l 2823 1447 l 2821 1447 l 2818 1447 l 2815 1446 l 2812 1446 l 2809 1446 l 2806 1445 l 2804 1445 l 2801 1444 l 2798 1444 l 2795 1444 l 2792 1443 l 2789 1443 l 2787 1442 l 2784 1442 l 2781 1442 l 2778 1441 l 2775 1441 l 2772 1441 l 2770 1440 l 2767 1440 l 2764 1440 l 2761 1439 l 2758 1439 l 2755 1439 l 2753 1438 l 2750 1438 l 2747 1437 l 2744 1437 l 2741 1437 l 2738 1436 l 2736 1436 l 2733 1436 l 2730 1435 l 2727 1435 l 2724 1434 l 2721 1434 l 2719 1434 l 2716 1433 l 2713 1433 l 2710 1433 l 2707 1432 l 2704 1432 l 2701 1431 l 2699 1431 l 2696 1431 l 2693 1430 l 2690 1430 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2417 1434 2694 1434 2694 1391 2417 1391 b c np 2690 1430 m 2687 1430 l 2684 1429 l 2681 1429 l 2679 1429 l 2676 1428 l 2673 1428 l 2670 1427 l 2667 1427 l 2664 1427 l 2662 1426 l 2659 1426 l 2656 1425 l 2653 1425 l 2650 1425 l 2647 1424 l 2644 1424 l 2642 1424 l 2639 1423 l 2636 1423 l 2633 1422 l 2630 1422 l 2627 1422 l 2625 1421 l 2622 1421 l 2619 1421 l 2616 1420 l 2613 1420 l 2610 1419 l 2607 1419 l 2604 1419 l 2602 1418 l 2599 1418 l 2596 1417 l 2593 1417 l 2590 1417 l 2587 1416 l 2585 1416 l 2582 1416 l 2579 1415 l 2576 1415 l 2573 1415 l 2570 1414 l 2567 1414 l 2564 1413 l 2562 1413 l 2559 1413 l 2556 1412 l 2553 1412 l 2551 1412 l 2548 1411 l 2545 1411 l 2542 1411 l 2539 1410 l 2536 1410 l 2533 1409 l 2530 1409 l 2528 1409 l 2525 1408 l 2522 1408 l 2519 1408 l 2516 1407 l 2513 1407 l 2510 1406 l 2508 1406 l 2505 1406 l 2502 1405 l 2499 1405 l 2496 1405 l 2493 1404 l 2490 1404 l 2487 1404 l 2485 1403 l 2482 1403 l 2479 1402 l 2476 1402 l 2473 1402 l 2470 1401 l 2467 1401 l 2464 1400 l 2461 1400 l 2459 1400 l 2456 1399 l 2453 1399 l 2450 1399 l 2447 1398 l 2444 1398 l 2441 1397 l 2438 1397 l 2436 1397 l 2433 1396 l 2430 1396 l 2427 1396 l 2424 1395 l 2421 1395 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2150 1399 2425 1399 2425 1357 2150 1357 b c np 2421 1395 m 2418 1395 l 2415 1394 l 2413 1394 l 2410 1393 l 2407 1393 l 2404 1392 l 2401 1392 l 2398 1392 l 2395 1391 l 2392 1391 l 2389 1391 l 2387 1390 l 2384 1390 l 2381 1390 l 2378 1389 l 2375 1389 l 2372 1388 l 2369 1388 l 2366 1388 l 2363 1387 l 2361 1387 l 2358 1387 l 2355 1386 l 2352 1386 l 2349 1386 l 2346 1385 l 2343 1385 l 2340 1384 l 2337 1384 l 2335 1384 l 2332 1383 l 2329 1383 l 2326 1382 l 2323 1382 l 2320 1382 l 2317 1381 l 2314 1381 l 2311 1381 l 2309 1380 l 2306 1380 l 2303 1380 l 2300 1379 l 2297 1379 l 2294 1379 l 2291 1378 l 2288 1378 l 2285 1377 l 2282 1377 l 2279 1377 l 2277 1376 l 2274 1376 l 2271 1375 l 2268 1375 l 2265 1375 l 2262 1374 l 2259 1374 l 2256 1374 l 2253 1373 l 2251 1373 l 2247 1373 l 2245 1372 l 2242 1372 l 2239 1371 l 2236 1371 l 2233 1371 l 2230 1370 l 2227 1370 l 2224 1370 l 2221 1369 l 2218 1369 l 2216 1368 l 2213 1368 l 2210 1368 l 2207 1367 l 2204 1367 l 2201 1366 l 2198 1366 l 2195 1366 l 2192 1365 l 2189 1365 l 2186 1365 l 2183 1364 l 2180 1364 l 2178 1363 l 2175 1363 l 2172 1363 l 2169 1362 l 2166 1362 l 2163 1362 l 2160 1361 l 2157 1361 l 2154 1361 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1873 1365 2158 1365 2158 1321 1873 1321 b c np 2154 1361 m 2151 1360 l 2148 1360 l 2145 1359 l 2142 1359 l 2139 1359 l 2137 1358 l 2134 1358 l 2131 1357 l 2128 1357 l 2125 1357 l 2122 1356 l 2119 1356 l 2116 1356 l 2113 1355 l 2110 1355 l 2107 1355 l 2104 1354 l 2101 1354 l 2098 1353 l 2095 1353 l 2093 1353 l 2090 1352 l 2087 1352 l 2084 1352 l 2081 1351 l 2078 1351 l 2075 1350 l 2072 1350 l 2069 1350 l 2066 1349 l 2063 1349 l 2061 1349 l 2058 1348 l 2055 1348 l 2052 1348 l 2049 1347 l 2046 1347 l 2043 1346 l 2040 1346 l 2037 1346 l 2034 1345 l 2031 1345 l 2028 1345 l 2025 1344 l 2022 1344 l 2019 1344 l 2017 1343 l 2013 1343 l 2011 1342 l 2008 1342 l 2005 1341 l 2002 1341 l 1999 1341 l 1996 1340 l 1993 1340 l 1990 1340 l 1987 1339 l 1984 1339 l 1981 1339 l 1978 1338 l 1975 1338 l 1972 1337 l 1969 1337 l 1966 1337 l 1963 1336 l 1960 1336 l 1957 1336 l 1954 1335 l 1951 1335 l 1948 1334 l 1945 1334 l 1942 1334 l 1939 1333 l 1936 1333 l 1934 1332 l 1930 1332 l 1928 1332 l 1925 1331 l 1922 1331 l 1919 1331 l 1916 1330 l 1913 1330 l 1910 1330 l 1907 1329 l 1904 1329 l 1901 1328 l 1898 1328 l 1895 1328 l 1892 1327 l 1889 1327 l 1886 1327 l 1883 1326 l 1880 1326 l 1877 1325 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1596 1329 1881 1329 1881 1287 1596 1287 b c np 1877 1325 m 1874 1325 l 1871 1325 l 1868 1324 l 1865 1324 l 1862 1324 l 1859 1323 l 1856 1323 l 1853 1322 l 1850 1322 l 1847 1322 l 1844 1321 l 1841 1321 l 1838 1321 l 1835 1320 l 1832 1320 l 1829 1320 l 1826 1319 l 1823 1319 l 1820 1319 l 1817 1318 l 1814 1318 l 1811 1317 l 1808 1317 l 1805 1317 l 1802 1316 l 1799 1316 l 1796 1315 l 1793 1315 l 1791 1315 l 1787 1314 l 1784 1314 l 1782 1314 l 1778 1313 l 1775 1313 l 1772 1313 l 1769 1312 l 1766 1312 l 1763 1311 l 1760 1311 l 1758 1311 l 1754 1310 l 1751 1310 l 1749 1310 l 1745 1309 l 1742 1309 l 1739 1308 l 1736 1308 l 1733 1308 l 1730 1307 l 1727 1307 l 1724 1307 l 1721 1306 l 1718 1306 l 1715 1305 l 1712 1305 l 1709 1305 l 1706 1304 l 1703 1304 l 1700 1304 l 1697 1303 l 1694 1303 l 1691 1303 l 1688 1302 l 1685 1302 l 1682 1301 l 1679 1301 l 1676 1300 l 1673 1300 l 1670 1300 l 1667 1299 l 1664 1299 l 1661 1299 l 1658 1298 l 1655 1298 l 1652 1298 l 1649 1297 l 1646 1297 l 1643 1296 l 1640 1296 l 1637 1296 l 1634 1295 l 1631 1295 l 1628 1295 l 1625 1294 l 1622 1294 l 1619 1293 l 1616 1293 l 1613 1293 l 1610 1292 l 1607 1292 l 1603 1291 l 1600 1291 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1309 1295 1604 1295 1604 1252 1309 1252 b c np 1600 1291 m 1597 1291 l 1594 1290 l 1591 1290 l 1588 1290 l 1585 1289 l 1582 1289 l 1579 1289 l 1576 1288 l 1573 1288 l 1570 1287 l 1567 1287 l 1564 1287 l 1561 1286 l 1558 1286 l 1555 1286 l 1552 1285 l 1549 1285 l 1545 1285 l 1542 1284 l 1539 1284 l 1536 1283 l 1533 1283 l 1530 1283 l 1527 1282 l 1524 1282 l 1521 1282 l 1518 1281 l 1515 1281 l 1512 1280 l 1509 1280 l 1505 1280 l 1502 1279 l 1499 1279 l 1496 1279 l 1493 1278 l 1490 1278 l 1487 1278 l 1484 1277 l 1481 1277 l 1478 1276 l 1475 1276 l 1471 1276 l 1468 1275 l 1465 1275 l 1462 1274 l 1459 1274 l 1456 1274 l 1453 1273 l 1450 1273 l 1447 1273 l 1444 1272 l 1441 1272 l 1437 1271 l 1434 1271 l 1431 1271 l 1428 1270 l 1425 1270 l 1422 1270 l 1419 1269 l 1416 1269 l 1413 1269 l 1410 1268 l 1407 1268 l 1403 1267 l 1400 1267 l 1397 1266 l 1394 1266 l 1391 1266 l 1388 1265 l 1385 1265 l 1382 1265 l 1379 1264 l 1375 1264 l 1372 1264 l 1369 1263 l 1366 1263 l 1363 1262 l 1360 1262 l 1357 1262 l 1354 1261 l 1351 1261 l 1347 1261 l 1344 1260 l 1341 1260 l 1338 1260 l 1335 1259 l 1332 1259 l 1329 1258 l 1326 1258 l 1322 1258 l 1319 1257 l 1316 1257 l 1313 1256 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1012 1260 1317 1260 1317 1218 1012 1218 b c np 1313 1256 m 1310 1256 l 1307 1256 l 1303 1255 l 1300 1255 l 1297 1255 l 1294 1254 l 1291 1254 l 1288 1254 l 1285 1253 l 1282 1253 l 1278 1253 l 1275 1252 l 1272 1252 l 1269 1251 l 1266 1251 l 1263 1251 l 1259 1250 l 1256 1250 l 1253 1249 l 1250 1249 l 1247 1249 l 1244 1248 l 1241 1248 l 1237 1248 l 1234 1247 l 1231 1247 l 1228 1247 l 1225 1246 l 1221 1246 l 1218 1245 l 1215 1245 l 1212 1245 l 1209 1244 l 1206 1244 l 1202 1244 l 1199 1243 l 1196 1243 l 1193 1242 l 1190 1242 l 1187 1242 l 1183 1241 l 1180 1241 l 1177 1240 l 1174 1240 l 1171 1240 l 1168 1239 l 1164 1239 l 1161 1239 l 1158 1238 l 1155 1238 l 1152 1237 l 1149 1237 l 1145 1237 l 1142 1236 l 1139 1236 l 1136 1236 l 1133 1235 l 1129 1235 l 1126 1235 l 1123 1234 l 1120 1234 l 1117 1233 l 1113 1233 l 1110 1233 l 1107 1232 l 1104 1232 l 1100 1231 l 1097 1231 l 1094 1231 l 1091 1230 l 1087 1230 l 1084 1230 l 1081 1229 l 1078 1229 l 1075 1229 l 1071 1228 l 1068 1228 l 1065 1227 l 1062 1227 l 1058 1227 l 1055 1226 l 1052 1226 l 1049 1226 l 1045 1225 l 1042 1225 l 1039 1224 l 1036 1224 l 1032 1224 l 1029 1223 l 1026 1223 l 1023 1223 l 1019 1222 l 1016 1222 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 706 1226 1020 1226 1020 1184 706 1184 b c np 1016 1222 m 1013 1222 l 1010 1221 l 1007 1221 l 1003 1220 l 1000 1220 l 997 1220 l 993 1219 l 990 1219 l 987 1219 l 984 1218 l 981 1218 l 977 1218 l 974 1217 l 971 1217 l 967 1216 l 964 1216 l 961 1215 l 957 1215 l 954 1215 l 951 1214 l 948 1214 l 944 1214 l 941 1213 l 938 1213 l 934 1213 l 931 1212 l 928 1212 l 925 1211 l 921 1211 l 918 1211 l 915 1210 l 911 1210 l 908 1210 l 905 1209 l 901 1209 l 898 1208 l 895 1208 l 891 1208 l 888 1207 l 885 1207 l 882 1206 l 878 1206 l 875 1206 l 871 1205 l 868 1205 l 865 1205 l 861 1204 l 858 1204 l 855 1204 l 852 1203 l 848 1203 l 845 1202 l 842 1202 l 838 1202 l 835 1201 l 832 1201 l 828 1201 l 825 1200 l 821 1200 l 818 1199 l 815 1199 l 811 1199 l 808 1198 l 805 1198 l 801 1198 l 798 1197 l 795 1197 l 791 1197 l 788 1196 l 784 1196 l 781 1195 l 778 1195 l 774 1195 l 771 1194 l 768 1194 l 764 1194 l 761 1193 l 757 1193 l 754 1193 l 751 1192 l 747 1192 l 744 1191 l 740 1191 l 737 1191 l 734 1190 l 730 1190 l 727 1189 l 723 1189 l 720 1189 l 717 1188 l 713 1188 l 710 1188 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 374 1192 714 1192 714 1148 374 1148 b c np 710 1188 m 706 1187 l 703 1187 l 699 1186 l 696 1186 l 693 1186 l 689 1185 l 686 1185 l 683 1185 l 679 1184 l 676 1184 l 672 1183 l 669 1183 l 665 1183 l 662 1182 l 658 1182 l 655 1181 l 652 1181 l 648 1181 l 645 1180 l 641 1180 l 638 1180 l 634 1179 l 631 1179 l 627 1179 l 624 1178 l 620 1178 l 617 1177 l 614 1177 l 610 1177 l 607 1176 l 603 1176 l 600 1176 l 596 1175 l 593 1175 l 589 1174 l 586 1174 l 582 1174 l 579 1173 l 575 1173 l 572 1173 l 568 1172 l 565 1172 l 561 1171 l 558 1171 l 554 1171 l 551 1170 l 547 1170 l 544 1170 l 540 1169 l 536 1169 l 533 1169 l 529 1168 l 526 1168 l 522 1168 l 519 1167 l 515 1167 l 512 1166 l 508 1166 l 504 1166 l 501 1165 l 498 1165 l 494 1164 l 490 1164 l 487 1164 l 483 1163 l 480 1163 l 476 1163 l 473 1162 l 469 1162 l 465 1162 l 462 1161 l 458 1161 l 455 1160 l 451 1160 l 448 1160 l 444 1159 l 440 1159 l 437 1159 l 433 1158 l 429 1158 l 426 1157 l 422 1157 l 418 1157 l 415 1156 l 411 1156 l 408 1155 l 404 1155 l 400 1155 l 397 1154 l 393 1154 l 390 1154 l 386 1153 l 382 1153 l 378 1152 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 24 1156 382 1156 382 1114 24 1114 b c np 378 1152 m 375 1152 l 371 1152 l 368 1151 l 364 1151 l 360 1151 l 357 1150 l 353 1150 l 349 1149 l 346 1149 l 342 1149 l 338 1148 l 335 1148 l 331 1148 l 327 1147 l 323 1147 l 320 1146 l 316 1146 l 312 1146 l 309 1145 l 305 1145 l 301 1145 l 298 1144 l 294 1144 l 290 1144 l 286 1143 l 283 1143 l 279 1142 l 275 1142 l 272 1142 l 268 1141 l 264 1141 l 260 1140 l 257 1140 l 253 1140 l 249 1139 l 245 1139 l 241 1139 l 237 1138 l 234 1138 l 230 1138 l 226 1137 l 223 1137 l 219 1136 l 215 1136 l 211 1136 l 207 1135 l 204 1135 l 200 1135 l 196 1134 l 192 1134 l 188 1134 l 184 1133 l 181 1133 l 177 1132 l 173 1132 l 169 1132 l 165 1131 l 161 1131 l 158 1130 l 154 1130 l 150 1130 l 146 1129 l 142 1129 l 138 1129 l 134 1128 l 131 1128 l 127 1128 l 123 1127 l 119 1127 l 115 1127 l 111 1126 l 107 1126 l 103 1125 l 99 1125 l 95 1125 l 92 1124 l 88 1124 l 84 1123 l 80 1123 l 76 1123 l 72 1122 l 68 1122 l 64 1122 l 60 1121 l 56 1121 l 52 1121 l 48 1120 l 44 1120 l 40 1119 l 36 1119 l 32 1119 l 28 1118 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs -374 1122 32 1122 32 1079 -374 1079 b c np 28 1118 m 24 1118 l 20 1118 l 16 1117 l 12 1117 l 8 1116 l 4 1116 l 0 1116 l -2 1115 l -6 1115 l -10 1114 l -14 1114 l -18 1114 l -23 1113 l -26 1113 l -31 1113 l -35 1112 l -39 1112 l -43 1111 l -47 1111 l -51 1111 l -55 1110 l -59 1110 l -63 1110 l -67 1109 l -72 1109 l -76 1109 l -80 1108 l -84 1108 l -88 1107 l -92 1107 l -96 1107 l -100 1106 l -105 1106 l -109 1105 l -113 1105 l -117 1105 l -121 1104 l -125 1104 l -130 1104 l -134 1103 l -138 1103 l -142 1103 l -146 1102 l -151 1102 l -155 1101 l -159 1101 l -163 1101 l -168 1100 l -172 1100 l -176 1100 l -180 1099 l -185 1099 l -189 1098 l -193 1098 l -198 1098 l -202 1097 l -206 1097 l -210 1097 l -215 1096 l -219 1096 l -223 1096 l -228 1095 l -232 1095 l -236 1094 l -241 1094 l -245 1094 l -249 1093 l -254 1093 l -258 1093 l -262 1092 l -267 1092 l -271 1092 l -276 1091 l -280 1091 l -284 1090 l -289 1090 l -293 1089 l -298 1089 l -302 1089 l -307 1088 l -311 1088 l -316 1088 l -320 1087 l -325 1087 l -329 1087 l -334 1086 l -338 1086 l -343 1085 l -347 1085 l -352 1085 l -356 1084 l -361 1084 l -365 1084 l -370 1083 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs -790 1087 -366 1087 -366 1048 -790 1048 b c np -370 1083 m -374 1083 l -379 1082 l -383 1082 l -384 1082 l -388 1082 l -393 1081 l -397 1081 l -402 1080 l -407 1080 l -411 1080 l -416 1079 l -421 1079 l -425 1079 l -430 1078 l -435 1078 l -439 1078 l -444 1077 l -449 1077 l -453 1076 l -458 1076 l -463 1076 l -468 1075 l -473 1075 l -477 1074 l -482 1074 l -487 1074 l -491 1073 l -496 1073 l -501 1073 l -506 1072 l -510 1072 l -515 1072 l -519 1071 l -524 1071 l -528 1071 l -533 1070 l -538 1070 l -542 1070 l -547 1069 l -552 1069 l -557 1069 l -561 1068 l -566 1068 l -571 1067 l -576 1067 l -581 1067 l -586 1066 l -591 1066 l -597 1065 l -602 1065 l -607 1065 l -613 1064 l -618 1064 l -624 1064 l -629 1063 l -635 1063 l -641 1062 l -647 1062 l -653 1061 l -659 1061 l -665 1061 l -671 1060 l -677 1060 l -684 1059 l -690 1059 l -696 1058 l -701 1058 l -707 1057 l -713 1057 l -719 1057 l -724 1056 l -730 1056 l -735 1056 l -740 1055 l -745 1055 l -750 1054 l -754 1054 l -758 1054 l -763 1054 l -766 1053 l -770 1053 l -773 1053 l -775 1053 l -778 1053 l -780 1052 l -781 1052 l -783 1052 l -784 1052 l -785 1052 l -786 1052 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs -790 1057 -769 1057 -769 1048 -790 1048 b c np -786 1052 m -785 1052 l -784 1052 l -783 1052 l -782 1052 l -781 1052 l -779 1052 l -778 1053 l -777 1053 l -776 1053 l -774 1053 l -773 1053 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1340 1936 1374 1936 1374 1890 1340 1890 b c np 1344 1894 m 1344 1895 l 1345 1895 l 1345 1896 l 1345 1897 l 1346 1897 l 1346 1898 l 1347 1898 l 1347 1899 l 1348 1900 l 1348 1901 l 1349 1901 l 1349 1902 l 1350 1902 l 1350 1903 l 1351 1904 l 1351 1905 l 1352 1905 l 1352 1906 l 1352 1907 l 1353 1907 l 1353 1908 l 1354 1908 l 1354 1909 l 1355 1909 l 1355 1910 l 1356 1911 l 1356 1912 l 1357 1912 l 1357 1913 l 1358 1914 l 1358 1915 l 1359 1915 l 1359 1916 l 1360 1916 l 1360 1917 l 1360 1918 l 1361 1918 l 1361 1919 l 1362 1919 l 1362 1920 l 1363 1921 l 1363 1922 l 1364 1922 l 1364 1923 l 1365 1924 l 1365 1925 l 1366 1925 l 1366 1926 l 1367 1926 l 1367 1927 l 1368 1927 l 1368 1928 l 1369 1929 l 1369 1930 l 1370 1931 l 1370 1932 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1366 1991 1414 1991 1414 1928 1366 1928 b c np 1370 1932 m 1371 1932 l 1371 1933 l 1372 1934 l 1372 1935 l 1373 1935 l 1373 1936 l 1374 1936 l 1374 1937 l 1375 1937 l 1375 1938 l 1376 1939 l 1376 1940 l 1377 1940 l 1377 1941 l 1378 1942 l 1378 1943 l 1379 1943 l 1379 1944 l 1380 1945 l 1381 1946 l 1381 1947 l 1382 1947 l 1382 1948 l 1383 1949 l 1384 1950 l 1384 1951 l 1385 1951 l 1385 1952 l 1386 1953 l 1386 1954 l 1387 1955 l 1388 1956 l 1388 1957 l 1389 1957 l 1389 1958 l 1390 1959 l 1391 1960 l 1392 1961 l 1392 1962 l 1393 1963 l 1393 1964 l 1394 1964 l 1394 1965 l 1395 1965 l 1395 1966 l 1395 1967 l 1396 1967 l 1396 1968 l 1397 1969 l 1398 1970 l 1399 1971 l 1399 1972 l 1400 1973 l 1401 1974 l 1401 1975 l 1402 1975 l 1402 1976 l 1403 1976 l 1403 1977 l 1403 1978 l 1404 1978 l 1404 1979 l 1405 1980 l 1405 1981 l 1406 1981 l 1407 1982 l 1407 1983 l 1408 1983 l 1408 1984 l 1409 1985 l 1410 1986 l 1410 1987 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1406 2071 1472 2071 1472 1983 1406 1983 b c np 1410 1987 m 1411 1988 l 1412 1989 l 1412 1990 l 1413 1991 l 1414 1992 l 1414 1993 l 1415 1993 l 1415 1994 l 1416 1995 l 1416 1996 l 1417 1997 l 1418 1998 l 1419 1999 l 1420 2000 l 1420 2001 l 1421 2002 l 1422 2003 l 1422 2004 l 1423 2005 l 1424 2006 l 1425 2007 l 1425 2008 l 1426 2009 l 1426 2010 l 1427 2010 l 1428 2011 l 1428 2012 l 1429 2013 l 1429 2014 l 1430 2014 l 1430 2015 l 1431 2016 l 1432 2017 l 1432 2018 l 1433 2018 l 1433 2019 l 1434 2020 l 1435 2021 l 1435 2022 l 1436 2023 l 1437 2024 l 1438 2025 l 1438 2026 l 1439 2027 l 1440 2028 l 1441 2030 l 1442 2031 l 1443 2032 l 1443 2033 l 1444 2034 l 1444 2035 l 1445 2036 l 1446 2036 l 1446 2037 l 1447 2038 l 1448 2039 l 1448 2040 l 1449 2041 l 1450 2042 l 1450 2043 l 1451 2044 l 1452 2045 l 1453 2046 l 1453 2047 l 1454 2048 l 1455 2049 l 1455 2050 l 1456 2051 l 1457 2052 l 1458 2053 l 1458 2054 l 1459 2055 l 1460 2056 l 1460 2057 l 1461 2058 l 1462 2059 l 1462 2060 l 1463 2061 l 1464 2062 l 1465 2063 l 1465 2064 l 1466 2065 l 1467 2066 l 1468 2067 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1464 2181 1551 2181 1551 2063 1464 2063 b c np 1468 2067 m 1468 2068 l 1469 2069 l 1470 2070 l 1470 2071 l 1471 2072 l 1472 2073 l 1473 2074 l 1473 2075 l 1474 2076 l 1475 2077 l 1476 2078 l 1476 2079 l 1477 2080 l 1478 2081 l 1479 2082 l 1479 2083 l 1480 2084 l 1481 2085 l 1482 2087 l 1483 2088 l 1483 2089 l 1484 2090 l 1485 2091 l 1486 2092 l 1487 2093 l 1487 2094 l 1488 2095 l 1489 2096 l 1490 2098 l 1491 2099 l 1492 2100 l 1492 2101 l 1493 2102 l 1494 2103 l 1495 2104 l 1496 2105 l 1496 2107 l 1497 2108 l 1498 2109 l 1499 2110 l 1500 2111 l 1501 2112 l 1502 2114 l 1502 2115 l 1503 2116 l 1504 2117 l 1505 2118 l 1506 2119 l 1507 2121 l 1508 2122 l 1508 2123 l 1509 2124 l 1510 2126 l 1511 2127 l 1512 2128 l 1513 2129 l 1514 2130 l 1515 2132 l 1516 2133 l 1516 2134 l 1517 2135 l 1518 2137 l 1519 2138 l 1520 2139 l 1521 2141 l 1522 2142 l 1523 2143 l 1524 2144 l 1525 2146 l 1526 2147 l 1527 2148 l 1527 2150 l 1528 2151 l 1529 2152 l 1530 2153 l 1531 2155 l 1532 2156 l 1533 2158 l 1534 2159 l 1535 2160 l 1536 2161 l 1537 2163 l 1538 2164 l 1539 2166 l 1540 2167 l 1541 2168 l 1542 2170 l 1543 2171 l 1544 2173 l 1545 2174 l 1546 2175 l 1547 2177 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1543 2339 1666 2339 1666 2173 1543 2173 b c np 1547 2177 m 1548 2178 l 1549 2179 l 1550 2181 l 1551 2182 l 1552 2184 l 1553 2185 l 1554 2187 l 1555 2188 l 1557 2190 l 1558 2191 l 1559 2192 l 1560 2194 l 1561 2195 l 1562 2197 l 1563 2198 l 1564 2200 l 1565 2201 l 1566 2203 l 1567 2204 l 1568 2206 l 1569 2207 l 1571 2209 l 1572 2210 l 1573 2212 l 1574 2214 l 1575 2215 l 1576 2217 l 1577 2218 l 1579 2220 l 1580 2221 l 1581 2223 l 1582 2224 l 1583 2226 l 1584 2228 l 1586 2229 l 1587 2231 l 1588 2232 l 1589 2234 l 1590 2236 l 1591 2237 l 1593 2239 l 1594 2241 l 1595 2242 l 1596 2244 l 1597 2245 l 1599 2247 l 1600 2249 l 1601 2250 l 1602 2252 l 1604 2254 l 1605 2256 l 1606 2257 l 1607 2259 l 1609 2261 l 1610 2262 l 1611 2264 l 1612 2266 l 1614 2268 l 1615 2269 l 1616 2271 l 1617 2273 l 1619 2275 l 1620 2276 l 1621 2278 l 1622 2280 l 1624 2282 l 1625 2283 l 1626 2285 l 1628 2287 l 1629 2289 l 1630 2291 l 1632 2293 l 1633 2294 l 1634 2296 l 1636 2298 l 1637 2300 l 1638 2302 l 1640 2304 l 1641 2306 l 1643 2307 l 1644 2309 l 1645 2311 l 1647 2313 l 1648 2315 l 1650 2317 l 1651 2319 l 1652 2321 l 1654 2323 l 1655 2325 l 1657 2327 l 1658 2329 l 1659 2331 l 1661 2333 l 1662 2335 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1658 2556 1826 2556 1826 2331 1658 2331 b c np 1662 2335 m 1664 2336 l 1665 2338 l 1667 2340 l 1668 2342 l 1670 2344 l 1671 2346 l 1673 2349 l 1674 2351 l 1676 2353 l 1677 2355 l 1679 2357 l 1680 2359 l 1682 2361 l 1683 2363 l 1685 2365 l 1686 2367 l 1688 2369 l 1689 2371 l 1691 2374 l 1693 2376 l 1694 2378 l 1696 2380 l 1697 2382 l 1699 2384 l 1700 2386 l 1702 2389 l 1704 2391 l 1705 2393 l 1707 2395 l 1709 2397 l 1710 2400 l 1712 2402 l 1713 2404 l 1715 2407 l 1717 2409 l 1718 2411 l 1720 2413 l 1722 2416 l 1724 2418 l 1725 2420 l 1727 2422 l 1729 2425 l 1730 2427 l 1732 2429 l 1734 2432 l 1736 2434 l 1737 2436 l 1739 2439 l 1741 2441 l 1743 2444 l 1744 2446 l 1746 2448 l 1748 2451 l 1750 2453 l 1751 2455 l 1753 2458 l 1755 2461 l 1757 2463 l 1759 2466 l 1760 2468 l 1762 2470 l 1764 2473 l 1766 2476 l 1768 2478 l 1770 2480 l 1771 2483 l 1773 2486 l 1775 2488 l 1777 2491 l 1779 2493 l 1781 2496 l 1783 2499 l 1785 2501 l 1787 2504 l 1788 2506 l 1790 2509 l 1792 2511 l 1794 2514 l 1796 2517 l 1798 2519 l 1800 2522 l 1802 2525 l 1804 2527 l 1806 2530 l 1808 2533 l 1810 2536 l 1812 2538 l 1814 2541 l 1816 2544 l 1818 2547 l 1820 2550 l 1822 2552 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1818 2865 2054 2865 2054 2548 1818 2548 b c np 1822 2552 m 1824 2555 l 1826 2558 l 1828 2561 l 1830 2563 l 1833 2566 l 1835 2569 l 1837 2572 l 1839 2575 l 1841 2578 l 1843 2581 l 1845 2584 l 1847 2586 l 1850 2589 l 1852 2592 l 1854 2595 l 1856 2598 l 1858 2601 l 1860 2604 l 1863 2607 l 1865 2610 l 1867 2613 l 1869 2616 l 1871 2619 l 1874 2622 l 1876 2625 l 1878 2628 l 1880 2631 l 1883 2635 l 1885 2638 l 1887 2641 l 1890 2644 l 1892 2647 l 1894 2650 l 1897 2653 l 1899 2656 l 1901 2660 l 1904 2663 l 1906 2666 l 1908 2669 l 1911 2672 l 1913 2675 l 1915 2679 l 1918 2682 l 1920 2685 l 1923 2689 l 1925 2692 l 1928 2695 l 1930 2699 l 1933 2702 l 1935 2705 l 1937 2709 l 1940 2712 l 1942 2715 l 1945 2719 l 1947 2722 l 1950 2726 l 1952 2729 l 1955 2732 l 1958 2736 l 1960 2739 l 1963 2743 l 1965 2746 l 1968 2750 l 1970 2753 l 1973 2757 l 1976 2760 l 1978 2764 l 1981 2767 l 1984 2771 l 1986 2775 l 1989 2778 l 1992 2782 l 1994 2786 l 1997 2789 l 2000 2793 l 2002 2797 l 2005 2800 l 2008 2804 l 2011 2808 l 2013 2812 l 2016 2815 l 2019 2819 l 2022 2823 l 2024 2827 l 2027 2830 l 2030 2834 l 2033 2838 l 2036 2842 l 2038 2846 l 2041 2849 l 2044 2853 l 2047 2857 l 2050 2861 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2046 3301 2375 3301 2375 2857 2046 2857 b c np 2050 2861 m 2053 2865 l 2056 2869 l 2059 2873 l 2062 2877 l 2064 2881 l 2068 2885 l 2071 2889 l 2073 2893 l 2077 2897 l 2079 2901 l 2083 2905 l 2086 2910 l 2089 2914 l 2092 2918 l 2094 2922 l 2097 2926 l 2101 2930 l 2104 2935 l 2107 2939 l 2110 2943 l 2113 2947 l 2116 2951 l 2119 2955 l 2122 2960 l 2125 2964 l 2129 2968 l 2132 2973 l 2135 2977 l 2138 2981 l 2142 2986 l 2145 2990 l 2148 2995 l 2151 2999 l 2154 3004 l 2158 3008 l 2161 3013 l 2164 3017 l 2168 3022 l 2171 3026 l 2174 3031 l 2178 3035 l 2181 3040 l 2185 3044 l 2188 3049 l 2191 3054 l 2195 3058 l 2198 3063 l 2201 3067 l 2205 3072 l 2208 3077 l 2212 3081 l 2215 3086 l 2219 3091 l 2222 3096 l 2226 3100 l 2229 3105 l 2233 3110 l 2237 3115 l 2240 3120 l 2244 3125 l 2247 3130 l 2251 3135 l 2255 3140 l 2258 3145 l 2262 3149 l 2266 3154 l 2269 3159 l 2273 3164 l 2277 3169 l 2280 3174 l 2284 3179 l 2288 3185 l 2292 3190 l 2295 3195 l 2299 3200 l 2303 3205 l 2307 3210 l 2311 3215 l 2315 3221 l 2319 3226 l 2322 3232 l 2326 3237 l 2330 3242 l 2334 3248 l 2338 3253 l 2342 3259 l 2346 3264 l 2350 3270 l 2354 3275 l 2359 3281 l 2362 3286 l 2367 3292 l 2371 3297 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2367 3813 2750 3813 2750 3293 2367 3293 b c np 2371 3297 m 2375 3303 l 2379 3308 l 2383 3314 l 2387 3319 l 2391 3325 l 2395 3330 l 2399 3336 l 2403 3341 l 2407 3347 l 2411 3353 l 2415 3357 l 2420 3362 l 2424 3368 l 2428 3373 l 2432 3379 l 2436 3385 l 2440 3390 l 2444 3396 l 2448 3402 l 2452 3407 l 2456 3413 l 2461 3418 l 2465 3424 l 2469 3429 l 2473 3435 l 2477 3441 l 2481 3446 l 2485 3452 l 2489 3457 l 2493 3463 l 2497 3468 l 2501 3474 l 2505 3480 l 2510 3485 l 2514 3491 l 2518 3496 l 2522 3502 l 2526 3507 l 2530 3513 l 2534 3519 l 2538 3524 l 2542 3530 l 2546 3535 l 2550 3541 l 2554 3547 l 2559 3552 l 2562 3558 l 2567 3563 l 2571 3569 l 2575 3574 l 2579 3580 l 2583 3586 l 2587 3591 l 2591 3597 l 2595 3602 l 2599 3608 l 2603 3613 l 2607 3619 l 2611 3625 l 2615 3630 l 2620 3636 l 2624 3641 l 2628 3647 l 2632 3653 l 2636 3658 l 2640 3664 l 2644 3669 l 2648 3675 l 2652 3680 l 2656 3686 l 2660 3692 l 2664 3697 l 2669 3703 l 2672 3708 l 2677 3714 l 2681 3720 l 2685 3725 l 2689 3731 l 2693 3736 l 2697 3742 l 2701 3747 l 2705 3753 l 2709 3759 l 2713 3764 l 2717 3770 l 2721 3775 l 2726 3781 l 2730 3787 l 2734 3792 l 2738 3798 l 2742 3803 l 2746 3809 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2742 4338 3131 4338 3131 3805 2742 3805 b c np 2746 3809 m 2750 3815 l 2754 3820 l 2758 3826 l 2762 3831 l 2766 3837 l 2770 3842 l 2774 3848 l 2778 3854 l 2782 3859 l 2786 3865 l 2790 3871 l 2795 3876 l 2798 3882 l 2803 3887 l 2807 3893 l 2811 3898 l 2815 3904 l 2819 3910 l 2823 3915 l 2827 3921 l 2831 3926 l 2835 3932 l 2839 3938 l 2843 3943 l 2847 3949 l 2851 3954 l 2855 3960 l 2860 3966 l 2863 3971 l 2868 3977 l 2872 3982 l 2876 3988 l 2880 3993 l 2884 3999 l 2888 4005 l 2892 4010 l 2896 4016 l 2900 4021 l 2904 4027 l 2908 4032 l 2912 4038 l 2916 4044 l 2920 4049 l 2924 4055 l 2928 4060 l 2932 4066 l 2937 4072 l 2941 4077 l 2945 4083 l 2949 4088 l 2953 4094 l 2957 4099 l 2961 4105 l 2965 4111 l 2969 4116 l 2973 4122 l 2977 4127 l 2981 4133 l 2985 4139 l 2989 4144 l 2993 4150 l 2997 4155 l 3001 4161 l 3005 4167 l 3009 4172 l 3013 4178 l 3018 4183 l 3021 4189 l 3025 4195 l 3029 4200 l 3034 4206 l 3037 4211 l 3042 4217 l 3046 4223 l 3050 4228 l 3054 4234 l 3058 4239 l 3062 4245 l 3066 4251 l 3070 4256 l 3074 4262 l 3078 4267 l 3082 4273 l 3086 4278 l 3090 4284 l 3094 4290 l 3098 4295 l 3102 4301 l 3106 4307 l 3110 4312 l 3114 4318 l 3118 4323 l 3122 4329 l 3127 4334 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3123 4853 3500 4853 3500 4330 3123 4330 b c np 3127 4334 m 3130 4340 l 3135 4346 l 3139 4351 l 3143 4357 l 3147 4362 l 3151 4368 l 3155 4374 l 3159 4379 l 3163 4385 l 3167 4390 l 3171 4396 l 3175 4402 l 3179 4407 l 3183 4413 l 3187 4418 l 3191 4424 l 3195 4429 l 3199 4435 l 3203 4441 l 3207 4446 l 3211 4452 l 3215 4457 l 3219 4463 l 3223 4469 l 3227 4474 l 3231 4480 l 3235 4485 l 3239 4491 l 3243 4496 l 3247 4502 l 3251 4508 l 3255 4513 l 3259 4519 l 3263 4525 l 3267 4530 l 3271 4536 l 3275 4541 l 3279 4547 l 3283 4552 l 3287 4558 l 3291 4564 l 3295 4569 l 3299 4575 l 3303 4580 l 3307 4586 l 3311 4592 l 3315 4597 l 3320 4603 l 3323 4608 l 3328 4614 l 3332 4620 l 3336 4625 l 3340 4631 l 3344 4636 l 3348 4642 l 3352 4648 l 3356 4653 l 3360 4659 l 3364 4664 l 3368 4670 l 3372 4676 l 3376 4681 l 3380 4687 l 3384 4692 l 3388 4698 l 3392 4704 l 3396 4709 l 3400 4715 l 3404 4720 l 3408 4726 l 3412 4731 l 3416 4737 l 3420 4743 l 3424 4748 l 3428 4754 l 3432 4760 l 3436 4765 l 3440 4771 l 3444 4776 l 3448 4782 l 3452 4787 l 3456 4793 l 3460 4799 l 3464 4804 l 3468 4810 l 3472 4815 l 3476 4821 l 3480 4827 l 3484 4832 l 3488 4838 l 3492 4843 l 3496 4849 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3492 5379 3874 5379 3874 4845 3492 4845 b c np 3496 4849 m 3500 4854 l 3504 4860 l 3508 4866 l 3512 4871 l 3516 4877 l 3520 4882 l 3524 4888 l 3528 4894 l 3532 4899 l 3536 4905 l 3540 4911 l 3544 4916 l 3548 4922 l 3552 4927 l 3556 4933 l 3560 4938 l 3564 4944 l 3568 4950 l 3572 4955 l 3576 4961 l 3580 4966 l 3584 4972 l 3588 4978 l 3592 4983 l 3596 4989 l 3600 4995 l 3604 5000 l 3608 5006 l 3612 5011 l 3616 5017 l 3620 5022 l 3624 5028 l 3628 5034 l 3631 5039 l 3636 5045 l 3639 5051 l 3644 5056 l 3647 5062 l 3652 5067 l 3655 5073 l 3660 5078 l 3663 5084 l 3668 5090 l 3671 5095 l 3675 5101 l 3679 5106 l 3683 5112 l 3687 5118 l 3691 5123 l 3695 5129 l 3699 5134 l 3703 5140 l 3707 5146 l 3711 5151 l 3715 5157 l 3719 5162 l 3723 5168 l 3727 5174 l 3731 5179 l 3735 5185 l 3739 5190 l 3743 5196 l 3747 5202 l 3751 5207 l 3755 5213 l 3759 5219 l 3763 5224 l 3767 5230 l 3771 5235 l 3775 5241 l 3779 5246 l 3783 5252 l 3787 5257 l 3791 5263 l 3795 5269 l 3799 5274 l 3803 5280 l 3807 5286 l 3811 5291 l 3815 5297 l 3819 5302 l 3823 5308 l 3827 5314 l 3831 5319 l 3835 5325 l 3838 5330 l 3843 5336 l 3846 5341 l 3850 5347 l 3854 5353 l 3858 5358 l 3862 5364 l 3866 5370 l 3870 5375 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3866 5895 4238 5895 4238 5371 3866 5371 b c np 3870 5375 m 3874 5381 l 3878 5386 l 3882 5392 l 3886 5398 l 3890 5403 l 3894 5409 l 3898 5414 l 3902 5420 l 3906 5426 l 3910 5431 l 3914 5437 l 3918 5442 l 3922 5448 l 3926 5454 l 3930 5459 l 3934 5465 l 3938 5470 l 3942 5476 l 3946 5482 l 3950 5487 l 3954 5493 l 3957 5498 l 3961 5504 l 3965 5510 l 3969 5515 l 3973 5521 l 3977 5526 l 3981 5532 l 3985 5538 l 3989 5543 l 3993 5549 l 3997 5555 l 4001 5560 l 4005 5566 l 4009 5571 l 4013 5577 l 4017 5582 l 4021 5588 l 4024 5594 l 4029 5599 l 4032 5605 l 4036 5610 l 4040 5616 l 4044 5622 l 4048 5627 l 4052 5633 l 4056 5639 l 4060 5644 l 4064 5650 l 4068 5655 l 4072 5661 l 4076 5666 l 4080 5672 l 4084 5677 l 4088 5683 l 4092 5689 l 4096 5694 l 4099 5700 l 4104 5706 l 4107 5711 l 4111 5717 l 4115 5722 l 4119 5728 l 4123 5734 l 4127 5739 l 4131 5745 l 4135 5750 l 4139 5756 l 4143 5761 l 4147 5767 l 4151 5773 l 4155 5778 l 4159 5784 l 4163 5790 l 4167 5795 l 4171 5801 l 4175 5806 l 4179 5812 l 4182 5818 l 4186 5823 l 4190 5829 l 4194 5834 l 4198 5840 l 4202 5846 l 4206 5851 l 4210 5857 l 4214 5863 l 4218 5868 l 4222 5874 l 4226 5879 l 4230 5885 l 4234 5891 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4230 6416 4602 6416 4602 5887 4230 5887 b c np 4234 5891 m 4238 5896 l 4241 5902 l 4245 5907 l 4249 5913 l 4253 5919 l 4257 5924 l 4261 5930 l 4265 5935 l 4269 5941 l 4273 5947 l 4277 5952 l 4281 5958 l 4285 5964 l 4289 5969 l 4293 5975 l 4297 5980 l 4300 5986 l 4304 5992 l 4308 5997 l 4312 6003 l 4316 6008 l 4320 6014 l 4324 6019 l 4328 6025 l 4332 6031 l 4336 6036 l 4340 6042 l 4344 6048 l 4348 6053 l 4352 6059 l 4356 6064 l 4359 6070 l 4363 6076 l 4367 6081 l 4371 6086 l 4375 6092 l 4379 6098 l 4383 6103 l 4387 6109 l 4391 6115 l 4395 6120 l 4399 6126 l 4403 6131 l 4407 6137 l 4411 6143 l 4414 6148 l 4418 6154 l 4422 6159 l 4426 6165 l 4430 6171 l 4434 6176 l 4438 6182 l 4442 6187 l 4446 6193 l 4449 6199 l 4453 6204 l 4457 6210 l 4461 6216 l 4465 6221 l 4469 6227 l 4473 6232 l 4477 6238 l 4481 6244 l 4485 6249 l 4489 6255 l 4492 6260 l 4497 6266 l 4500 6272 l 4504 6277 l 4508 6283 l 4512 6288 l 4516 6294 l 4520 6300 l 4524 6305 l 4528 6311 l 4532 6317 l 4536 6322 l 4540 6328 l 4544 6333 l 4547 6339 l 4551 6345 l 4555 6350 l 4559 6356 l 4563 6361 l 4567 6367 l 4571 6373 l 4575 6378 l 4579 6384 l 4583 6389 l 4587 6395 l 4590 6401 l 4594 6406 l 4598 6412 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4594 6937 4964 6937 4964 6408 4594 6408 b c np 4598 6412 m 4602 6418 l 4606 6423 l 4610 6429 l 4614 6434 l 4618 6440 l 4622 6446 l 4626 6451 l 4630 6457 l 4633 6462 l 4637 6468 l 4641 6474 l 4645 6479 l 4649 6485 l 4653 6490 l 4657 6496 l 4661 6501 l 4665 6507 l 4668 6513 l 4672 6518 l 4676 6524 l 4680 6529 l 4684 6535 l 4688 6541 l 4692 6546 l 4696 6552 l 4700 6558 l 4704 6563 l 4708 6569 l 4712 6574 l 4715 6580 l 4719 6585 l 4723 6591 l 4727 6597 l 4731 6602 l 4735 6608 l 4739 6613 l 4743 6619 l 4747 6625 l 4750 6630 l 4754 6636 l 4758 6642 l 4762 6647 l 4766 6653 l 4770 6658 l 4774 6664 l 4778 6670 l 4782 6675 l 4786 6681 l 4789 6686 l 4793 6692 l 4797 6698 l 4801 6703 l 4805 6709 l 4809 6714 l 4813 6720 l 4817 6726 l 4821 6731 l 4824 6737 l 4828 6743 l 4832 6748 l 4836 6754 l 4840 6759 l 4844 6765 l 4848 6771 l 4852 6776 l 4856 6782 l 4859 6787 l 4863 6793 l 4867 6799 l 4871 6804 l 4875 6810 l 4879 6815 l 4883 6821 l 4887 6827 l 4890 6832 l 4894 6838 l 4898 6844 l 4902 6849 l 4906 6855 l 4910 6860 l 4914 6866 l 4917 6872 l 4921 6877 l 4925 6883 l 4929 6888 l 4933 6894 l 4937 6900 l 4941 6905 l 4945 6911 l 4949 6916 l 4953 6922 l 4956 6928 l 4960 6933 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4956 7453 5320 7453 5320 6929 4956 6929 b c np 4960 6933 m 4964 6939 l 4968 6944 l 4972 6950 l 4976 6956 l 4980 6961 l 4984 6967 l 4988 6972 l 4991 6978 l 4995 6984 l 4999 6989 l 5003 6995 l 5007 7000 l 5011 7006 l 5015 7012 l 5018 7017 l 5022 7023 l 5026 7029 l 5030 7034 l 5034 7040 l 5038 7045 l 5042 7051 l 5046 7057 l 5050 7062 l 5054 7068 l 5057 7073 l 5061 7079 l 5065 7085 l 5069 7090 l 5073 7096 l 5077 7102 l 5081 7107 l 5084 7113 l 5088 7119 l 5092 7124 l 5096 7130 l 5100 7135 l 5104 7141 l 5108 7147 l 5112 7152 l 5115 7158 l 5119 7163 l 5123 7169 l 5127 7175 l 5131 7180 l 5135 7186 l 5139 7191 l 5142 7197 l 5146 7203 l 5150 7208 l 5154 7214 l 5158 7220 l 5162 7225 l 5166 7231 l 5170 7236 l 5174 7242 l 5177 7248 l 5181 7253 l 5185 7259 l 5189 7264 l 5193 7270 l 5197 7276 l 5201 7281 l 5205 7287 l 5208 7292 l 5212 7298 l 5216 7304 l 5220 7309 l 5224 7315 l 5228 7321 l 5232 7326 l 5235 7332 l 5239 7337 l 5243 7343 l 5247 7348 l 5251 7354 l 5255 7359 l 5258 7365 l 5262 7371 l 5266 7376 l 5270 7382 l 5274 7388 l 5278 7393 l 5282 7399 l 5285 7404 l 5289 7410 l 5293 7416 l 5297 7421 l 5301 7427 l 5305 7433 l 5309 7438 l 5313 7444 l 5316 7449 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 5312 7729 5509 7729 5509 7445 5312 7445 b c np 5316 7449 m 5320 7455 l 5324 7461 l 5328 7466 l 5332 7472 l 5336 7477 l 5340 7483 l 5343 7489 l 5347 7494 l 5351 7500 l 5355 7506 l 5359 7511 l 5363 7517 l 5366 7522 l 5370 7528 l 5374 7534 l 5378 7539 l 5382 7545 l 5385 7550 l 5389 7556 l 5393 7562 l 5397 7567 l 5401 7573 l 5405 7579 l 5409 7584 l 5413 7590 l 5416 7596 l 5420 7601 l 5424 7607 l 5428 7612 l 5432 7618 l 5436 7624 l 5440 7629 l 5443 7635 l 5447 7640 l 5451 7646 l 5455 7652 l 5459 7657 l 5463 7663 l 5466 7668 l 5470 7674 l 5474 7680 l 5478 7685 l 5482 7691 l 5486 7697 l 5490 7702 l 5493 7708 l 5497 7713 l 5501 7719 l 5505 7725 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1313 1898 1348 1898 1348 1853 1313 1853 b c np 1344 1894 m 1343 1894 l 1343 1893 l 1342 1892 l 1342 1891 l 1341 1891 l 1341 1890 l 1340 1890 l 1340 1889 l 1340 1888 l 1339 1888 l 1339 1887 l 1338 1887 l 1338 1886 l 1337 1885 l 1336 1884 l 1336 1883 l 1335 1883 l 1335 1882 l 1334 1881 l 1334 1880 l 1333 1880 l 1333 1879 l 1332 1878 l 1332 1877 l 1331 1877 l 1331 1876 l 1330 1875 l 1329 1874 l 1329 1873 l 1328 1873 l 1328 1872 l 1327 1871 l 1326 1870 l 1326 1869 l 1325 1869 l 1325 1868 l 1324 1867 l 1324 1866 l 1323 1866 l 1323 1865 l 1322 1864 l 1321 1863 l 1321 1862 l 1320 1861 l 1320 1860 l 1319 1860 l 1319 1859 l 1318 1859 l 1318 1858 l 1317 1857 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1274 1861 1321 1861 1321 1798 1274 1798 b c np 1317 1857 m 1316 1856 l 1316 1855 l 1315 1855 l 1315 1854 l 1314 1853 l 1314 1852 l 1313 1852 l 1313 1851 l 1312 1850 l 1312 1849 l 1311 1849 l 1311 1848 l 1310 1847 l 1309 1846 l 1309 1845 l 1308 1844 l 1308 1843 l 1307 1843 l 1307 1842 l 1306 1842 l 1306 1841 l 1305 1840 l 1305 1839 l 1304 1839 l 1304 1838 l 1303 1838 l 1303 1837 l 1303 1836 l 1302 1836 l 1302 1835 l 1301 1835 l 1301 1834 l 1301 1833 l 1300 1833 l 1300 1832 l 1299 1832 l 1299 1831 l 1298 1830 l 1298 1829 l 1297 1829 l 1297 1828 l 1296 1827 l 1295 1826 l 1295 1825 l 1294 1824 l 1293 1823 l 1292 1822 l 1292 1821 l 1291 1821 l 1291 1820 l 1291 1819 l 1290 1819 l 1290 1818 l 1289 1817 l 1288 1816 l 1288 1815 l 1287 1815 l 1287 1814 l 1286 1813 l 1285 1812 l 1285 1811 l 1284 1811 l 1284 1810 l 1283 1809 l 1283 1808 l 1282 1807 l 1281 1806 l 1280 1805 l 1280 1804 l 1279 1803 l 1279 1802 l 1278 1802 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1218 1806 1282 1806 1282 1718 1218 1718 b c np 1278 1802 m 1278 1801 l 1277 1800 l 1276 1799 l 1276 1798 l 1275 1797 l 1274 1796 l 1274 1795 l 1273 1794 l 1272 1793 l 1271 1792 l 1271 1791 l 1270 1791 l 1270 1790 l 1269 1789 l 1268 1788 l 1268 1787 l 1267 1786 l 1267 1785 l 1266 1785 l 1266 1784 l 1265 1783 l 1264 1782 l 1263 1781 l 1263 1780 l 1262 1779 l 1261 1778 l 1260 1777 l 1260 1776 l 1259 1775 l 1259 1774 l 1258 1774 l 1258 1773 l 1257 1772 l 1257 1771 l 1256 1771 l 1255 1770 l 1255 1769 l 1254 1768 l 1254 1767 l 1253 1766 l 1252 1766 l 1252 1765 l 1251 1764 l 1251 1763 l 1250 1762 l 1250 1761 l 1249 1760 l 1248 1759 l 1247 1758 l 1246 1757 l 1246 1756 l 1245 1755 l 1245 1754 l 1244 1753 l 1243 1752 l 1242 1751 l 1242 1750 l 1241 1749 l 1240 1748 l 1240 1747 l 1239 1746 l 1238 1745 l 1238 1744 l 1237 1743 l 1236 1742 l 1235 1741 l 1234 1740 l 1234 1739 l 1233 1738 l 1233 1737 l 1232 1736 l 1231 1735 l 1230 1734 l 1230 1733 l 1229 1732 l 1228 1731 l 1228 1730 l 1227 1729 l 1226 1728 l 1226 1727 l 1225 1726 l 1224 1725 l 1224 1724 l 1223 1723 l 1222 1722 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1143 1726 1226 1726 1226 1609 1143 1609 b c np 1222 1722 m 1221 1721 l 1221 1720 l 1220 1719 l 1219 1718 l 1219 1717 l 1218 1716 l 1217 1715 l 1217 1714 l 1216 1713 l 1215 1712 l 1214 1711 l 1214 1710 l 1213 1709 l 1212 1708 l 1211 1707 l 1211 1706 l 1210 1705 l 1209 1704 l 1208 1703 l 1208 1702 l 1207 1701 l 1206 1699 l 1205 1698 l 1205 1697 l 1204 1696 l 1203 1695 l 1202 1694 l 1202 1693 l 1201 1692 l 1200 1691 l 1199 1690 l 1199 1689 l 1198 1687 l 1197 1686 l 1196 1685 l 1195 1684 l 1195 1683 l 1194 1682 l 1193 1681 l 1192 1679 l 1191 1678 l 1191 1677 l 1190 1676 l 1189 1675 l 1188 1674 l 1187 1672 l 1186 1671 l 1186 1670 l 1185 1669 l 1184 1668 l 1183 1666 l 1182 1665 l 1182 1664 l 1181 1663 l 1180 1662 l 1179 1660 l 1178 1659 l 1177 1658 l 1177 1657 l 1176 1655 l 1175 1654 l 1174 1653 l 1173 1652 l 1172 1650 l 1171 1649 l 1170 1648 l 1169 1647 l 1169 1645 l 1168 1644 l 1167 1643 l 1166 1641 l 1165 1640 l 1164 1639 l 1163 1638 l 1162 1636 l 1162 1635 l 1161 1634 l 1160 1632 l 1159 1631 l 1158 1630 l 1157 1629 l 1156 1627 l 1155 1626 l 1154 1624 l 1153 1623 l 1152 1622 l 1151 1620 l 1151 1619 l 1150 1618 l 1149 1616 l 1148 1615 l 1147 1613 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1033 1617 1151 1617 1151 1452 1033 1452 b c np 1147 1613 m 1146 1612 l 1145 1610 l 1144 1609 l 1143 1608 l 1142 1606 l 1141 1605 l 1140 1604 l 1139 1602 l 1138 1601 l 1137 1599 l 1136 1598 l 1135 1596 l 1134 1595 l 1133 1593 l 1132 1592 l 1131 1590 l 1130 1589 l 1129 1588 l 1128 1586 l 1127 1584 l 1126 1583 l 1125 1581 l 1124 1580 l 1123 1578 l 1121 1577 l 1120 1575 l 1119 1574 l 1118 1572 l 1117 1571 l 1116 1569 l 1115 1568 l 1114 1566 l 1113 1564 l 1112 1563 l 1111 1561 l 1109 1560 l 1108 1558 l 1107 1557 l 1106 1555 l 1105 1554 l 1104 1552 l 1103 1550 l 1102 1549 l 1101 1547 l 1100 1545 l 1098 1544 l 1097 1542 l 1096 1541 l 1095 1539 l 1094 1538 l 1093 1536 l 1092 1534 l 1091 1533 l 1090 1531 l 1088 1530 l 1087 1528 l 1086 1526 l 1085 1525 l 1084 1523 l 1083 1521 l 1082 1520 l 1080 1518 l 1079 1516 l 1078 1514 l 1077 1513 l 1075 1511 l 1074 1509 l 1073 1507 l 1071 1505 l 1070 1503 l 1069 1501 l 1067 1499 l 1066 1497 l 1064 1495 l 1063 1493 l 1061 1490 l 1060 1488 l 1058 1486 l 1057 1484 l 1055 1482 l 1054 1480 l 1052 1478 l 1051 1476 l 1049 1474 l 1048 1472 l 1046 1470 l 1045 1468 l 1044 1466 l 1042 1464 l 1041 1463 l 1040 1461 l 1039 1459 l 1038 1458 l 1037 1456 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1025 1460 1041 1460 1041 1441 1025 1441 b c np 1037 1456 m 1036 1455 l 1035 1453 l 1034 1452 l 1033 1451 l 1033 1450 l 1032 1449 l 1031 1449 l 1031 1448 l 1031 1447 l 1030 1447 l 1030 1446 l 1029 1446 l 1029 1445 l 1029 1446 l 1030 1446 l 1030 1447 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 877 1312 1000 1312 1000 1262 877 1262 b c np 903 1308 m 902 1307 l 901 1306 l 900 1305 l 899 1304 l 897 1303 l 896 1302 l 895 1301 l 894 1300 l 893 1299 l 892 1298 l 891 1297 l 890 1296 l 889 1295 l 888 1294 l 887 1293 l 887 1292 l 886 1291 l 885 1290 l 884 1289 l 884 1288 l 883 1287 l 883 1286 l 882 1286 l 882 1285 l 881 1284 l 881 1283 l 881 1282 l 881 1281 l 881 1280 l 882 1280 l 882 1279 l 883 1278 l 883 1277 l 884 1277 l 884 1276 l 885 1276 l 885 1275 l 886 1275 l 887 1274 l 888 1273 l 889 1273 l 890 1272 l 891 1272 l 892 1272 l 892 1271 l 893 1271 l 894 1271 l 894 1270 l 895 1270 l 896 1270 l 897 1270 l 898 1269 l 899 1269 l 900 1269 l 901 1269 l 902 1268 l 903 1268 l 905 1268 l 906 1268 l 907 1268 l 909 1267 l 910 1267 l 912 1267 l 913 1267 l 915 1267 l 917 1267 l 919 1266 l 921 1266 l 924 1266 l 926 1266 l 929 1266 l 932 1266 l 935 1266 l 938 1266 l 942 1266 l 946 1266 l 950 1266 l 954 1266 l 958 1266 l 963 1266 l 967 1266 l 972 1266 l 976 1266 l 981 1266 l 986 1266 l 991 1266 l 996 1266 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 992 1304 1451 1304 1451 1262 992 1262 b c np 996 1266 m 1001 1267 l 1006 1267 l 1012 1267 l 1017 1267 l 1022 1267 l 1027 1267 l 1033 1268 l 1038 1268 l 1044 1268 l 1049 1268 l 1054 1268 l 1060 1269 l 1065 1269 l 1071 1269 l 1076 1269 l 1082 1270 l 1087 1270 l 1093 1270 l 1098 1271 l 1104 1271 l 1109 1271 l 1115 1272 l 1120 1272 l 1125 1272 l 1130 1273 l 1136 1273 l 1141 1273 l 1146 1274 l 1151 1274 l 1157 1275 l 1162 1275 l 1166 1275 l 1171 1276 l 1176 1276 l 1181 1277 l 1186 1277 l 1191 1277 l 1196 1278 l 1201 1278 l 1206 1278 l 1210 1279 l 1215 1279 l 1220 1280 l 1225 1280 l 1229 1280 l 1234 1281 l 1238 1281 l 1243 1281 l 1248 1282 l 1252 1282 l 1257 1283 l 1261 1283 l 1265 1283 l 1270 1284 l 1274 1284 l 1279 1285 l 1283 1285 l 1288 1285 l 1292 1286 l 1296 1286 l 1301 1287 l 1305 1287 l 1310 1287 l 1315 1288 l 1319 1288 l 1324 1289 l 1328 1289 l 1333 1289 l 1337 1290 l 1342 1290 l 1347 1291 l 1352 1291 l 1356 1291 l 1361 1292 l 1366 1292 l 1370 1293 l 1375 1293 l 1380 1294 l 1385 1294 l 1390 1295 l 1394 1295 l 1399 1295 l 1404 1296 l 1409 1296 l 1413 1297 l 1418 1297 l 1423 1298 l 1428 1298 l 1433 1298 l 1438 1299 l 1443 1299 l 1447 1300 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1443 1359 1970 1359 1970 1296 1443 1296 b c np 1447 1300 m 1452 1300 l 1457 1301 l 1462 1302 l 1467 1302 l 1472 1303 l 1477 1303 l 1482 1303 l 1487 1304 l 1492 1304 l 1497 1305 l 1502 1305 l 1507 1306 l 1512 1306 l 1517 1307 l 1522 1307 l 1527 1308 l 1532 1308 l 1537 1309 l 1542 1310 l 1547 1310 l 1553 1311 l 1558 1311 l 1563 1312 l 1568 1312 l 1573 1313 l 1578 1313 l 1584 1314 l 1589 1314 l 1594 1315 l 1599 1315 l 1605 1316 l 1610 1316 l 1615 1317 l 1620 1318 l 1626 1318 l 1631 1319 l 1636 1319 l 1642 1320 l 1647 1320 l 1652 1321 l 1658 1321 l 1663 1322 l 1668 1323 l 1674 1323 l 1679 1324 l 1685 1324 l 1690 1325 l 1696 1325 l 1701 1326 l 1707 1327 l 1712 1327 l 1718 1328 l 1724 1328 l 1729 1329 l 1735 1330 l 1740 1330 l 1746 1331 l 1752 1331 l 1757 1332 l 1763 1333 l 1769 1333 l 1775 1334 l 1780 1335 l 1786 1335 l 1792 1336 l 1797 1336 l 1803 1337 l 1809 1338 l 1815 1338 l 1821 1339 l 1826 1340 l 1832 1340 l 1838 1341 l 1844 1341 l 1850 1342 l 1856 1343 l 1862 1344 l 1868 1344 l 1874 1345 l 1880 1346 l 1886 1346 l 1892 1347 l 1898 1348 l 1904 1348 l 1910 1349 l 1916 1350 l 1922 1350 l 1929 1351 l 1935 1352 l 1941 1352 l 1947 1353 l 1953 1354 l 1960 1355 l 1966 1355 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 1962 1438 2632 1438 2632 1351 1962 1351 b c np 1966 1355 m 1972 1356 l 1978 1357 l 1985 1357 l 1991 1358 l 1997 1359 l 2003 1360 l 2010 1360 l 2016 1361 l 2023 1362 l 2029 1362 l 2036 1363 l 2042 1364 l 2049 1365 l 2055 1365 l 2062 1366 l 2068 1367 l 2075 1368 l 2081 1369 l 2088 1369 l 2094 1370 l 2101 1371 l 2108 1372 l 2114 1372 l 2121 1373 l 2128 1374 l 2135 1375 l 2141 1375 l 2148 1376 l 2155 1377 l 2162 1378 l 2168 1379 l 2175 1379 l 2182 1380 l 2189 1381 l 2196 1382 l 2203 1383 l 2210 1383 l 2217 1384 l 2224 1385 l 2231 1386 l 2238 1387 l 2245 1388 l 2252 1388 l 2260 1389 l 2267 1390 l 2274 1391 l 2281 1392 l 2288 1393 l 2295 1394 l 2303 1394 l 2310 1395 l 2317 1396 l 2325 1397 l 2332 1398 l 2339 1399 l 2346 1400 l 2354 1400 l 2361 1401 l 2369 1402 l 2376 1403 l 2384 1404 l 2391 1405 l 2399 1406 l 2406 1407 l 2414 1408 l 2422 1409 l 2429 1409 l 2437 1411 l 2445 1411 l 2452 1412 l 2460 1413 l 2468 1414 l 2476 1415 l 2484 1416 l 2491 1417 l 2499 1418 l 2507 1419 l 2515 1420 l 2523 1421 l 2530 1422 l 2538 1423 l 2546 1424 l 2554 1425 l 2562 1426 l 2570 1427 l 2578 1428 l 2586 1429 l 2595 1430 l 2603 1431 l 2611 1432 l 2619 1433 l 2628 1434 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 2624 1552 3535 1552 3535 1430 2624 1430 b c np 2628 1434 m 2636 1435 l 2644 1436 l 2653 1437 l 2661 1438 l 2669 1439 l 2678 1440 l 2686 1441 l 2695 1442 l 2703 1443 l 2712 1444 l 2720 1445 l 2729 1446 l 2737 1447 l 2746 1448 l 2754 1449 l 2763 1450 l 2772 1451 l 2780 1452 l 2789 1453 l 2798 1455 l 2807 1456 l 2816 1457 l 2825 1458 l 2834 1459 l 2843 1460 l 2852 1461 l 2861 1462 l 2870 1464 l 2879 1465 l 2888 1466 l 2897 1467 l 2906 1468 l 2915 1469 l 2924 1470 l 2933 1471 l 2943 1473 l 2952 1474 l 2961 1475 l 2970 1476 l 2980 1477 l 2989 1478 l 2998 1480 l 3008 1481 l 3017 1482 l 3026 1483 l 3036 1484 l 3046 1486 l 3055 1487 l 3065 1488 l 3075 1489 l 3084 1491 l 3094 1492 l 3104 1493 l 3114 1494 l 3123 1496 l 3134 1497 l 3143 1498 l 3153 1499 l 3163 1500 l 3173 1502 l 3183 1503 l 3193 1504 l 3203 1506 l 3213 1507 l 3223 1508 l 3233 1509 l 3244 1511 l 3254 1512 l 3264 1513 l 3274 1515 l 3284 1516 l 3295 1517 l 3305 1519 l 3316 1520 l 3326 1521 l 3337 1523 l 3347 1524 l 3358 1525 l 3369 1527 l 3379 1528 l 3390 1530 l 3401 1531 l 3412 1532 l 3422 1534 l 3433 1535 l 3444 1536 l 3455 1538 l 3466 1539 l 3477 1541 l 3487 1542 l 3498 1543 l 3509 1545 l 3520 1546 l 3531 1548 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 3527 1710 4728 1710 4728 1544 3527 1544 b c np 3531 1548 m 3542 1549 l 3553 1550 l 3565 1552 l 3576 1554 l 3587 1555 l 3599 1556 l 3610 1558 l 3622 1559 l 3633 1561 l 3645 1563 l 3656 1564 l 3668 1565 l 3680 1567 l 3691 1568 l 3703 1570 l 3715 1572 l 3726 1573 l 3738 1575 l 3750 1576 l 3762 1578 l 3774 1579 l 3786 1581 l 3797 1582 l 3809 1584 l 3821 1586 l 3833 1587 l 3845 1589 l 3857 1590 l 3870 1592 l 3882 1593 l 3894 1595 l 3907 1597 l 3919 1598 l 3932 1600 l 3944 1602 l 3956 1604 l 3969 1605 l 3982 1607 l 3994 1608 l 4007 1610 l 4020 1612 l 4032 1614 l 4045 1615 l 4058 1617 l 4071 1618 l 4084 1620 l 4097 1622 l 4110 1624 l 4123 1625 l 4136 1627 l 4149 1629 l 4162 1631 l 4175 1632 l 4188 1634 l 4201 1636 l 4214 1638 l 4228 1639 l 4241 1641 l 4255 1643 l 4269 1645 l 4282 1647 l 4296 1648 l 4309 1650 l 4323 1652 l 4337 1654 l 4351 1656 l 4365 1658 l 4379 1659 l 4392 1661 l 4406 1663 l 4420 1665 l 4434 1667 l 4448 1669 l 4462 1671 l 4476 1673 l 4490 1675 l 4504 1676 l 4519 1678 l 4533 1680 l 4547 1682 l 4562 1684 l 4576 1686 l 4591 1688 l 4605 1690 l 4620 1692 l 4635 1694 l 4650 1696 l 4665 1698 l 4680 1700 l 4694 1702 l 4709 1704 l 4724 1706 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 4720 1897 6094 1897 6094 1702 4720 1702 b c np 4724 1706 m 4739 1708 l 4754 1710 l 4770 1712 l 4785 1714 l 4800 1716 l 4815 1718 l 4830 1721 l 4846 1723 l 4861 1725 l 4876 1727 l 4891 1729 l 4907 1731 l 4922 1733 l 4938 1735 l 4954 1737 l 4969 1739 l 4984 1741 l 4999 1743 l 5015 1746 l 5030 1748 l 5046 1750 l 5062 1752 l 5077 1754 l 5093 1756 l 5109 1758 l 5125 1760 l 5141 1763 l 5157 1765 l 5174 1767 l 5190 1769 l 5207 1772 l 5223 1774 l 5240 1776 l 5257 1779 l 5274 1781 l 5291 1783 l 5308 1785 l 5326 1788 l 5344 1790 l 5361 1793 l 5379 1795 l 5397 1798 l 5415 1800 l 5434 1803 l 5452 1805 l 5470 1808 l 5489 1810 l 5507 1813 l 5526 1816 l 5545 1818 l 5563 1821 l 5582 1823 l 5600 1826 l 5619 1828 l 5637 1831 l 5655 1833 l 5673 1836 l 5691 1838 l 5709 1841 l 5726 1843 l 5743 1846 l 5760 1848 l 5777 1850 l 5794 1852 l 5810 1855 l 5825 1857 l 5841 1859 l 5855 1861 l 5868 1862 l 5881 1864 l 5894 1866 l 5907 1867 l 5919 1869 l 5931 1871 l 5942 1872 l 5953 1874 l 5964 1875 l 5974 1876 l 5984 1878 l 5994 1879 l 6003 1880 l 6012 1881 l 6021 1883 l 6029 1884 l 6037 1885 l 6045 1886 l 6052 1887 l 6059 1888 l 6066 1889 l 6072 1890 l 6078 1891 l 6084 1892 l 6090 1893 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6086 1923 6149 1923 6149 1889 6086 1889 b c np 6090 1893 m 6094 1894 l 6099 1895 l 6103 1896 l 6106 1897 l 6110 1897 l 6113 1898 l 6116 1899 l 6119 1900 l 6121 1901 l 6124 1901 l 6126 1902 l 6128 1903 l 6130 1903 l 6132 1904 l 6133 1905 l 6135 1906 l 6136 1906 l 6137 1907 l 6138 1908 l 6139 1908 l 6140 1909 l 6141 1909 l 6142 1910 l 6143 1910 l 6144 1911 l 6145 1911 l 6144 1912 l 6144 1913 l 6144 1914 l 6144 1915 l 6144 1916 l 6145 1916 l 6144 1916 l 6143 1916 l 6143 1917 l 6144 1917 l 6144 1918 l 6145 1918 l 6145 1919 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1929 6149 1929 6149 1915 6141 1915 b c np 6145 1919 m 6145 1920 l 6145 1921 l 6145 1922 l 6145 1923 l 6145 1924 l 6145 1925 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1938 6149 1938 6149 1921 6141 1921 b c np 6145 1925 m 6145 1926 l 6145 1927 l 6145 1928 l 6145 1929 l 6145 1930 l 6145 1931 l 6145 1932 l 6145 1933 l 6145 1934 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1951 6149 1951 6149 1930 6141 1930 b c np 6145 1934 m 6145 1935 l 6145 1936 l 6145 1937 l 6145 1938 l 6145 1939 l 6145 1940 l 6145 1941 l 6145 1942 l 6145 1943 l 6145 1944 l 6145 1945 l 6145 1946 l 6145 1947 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1961 6149 1961 6149 1943 6141 1943 b c np 6145 1947 m 6145 1948 l 6145 1949 l 6145 1950 l 6145 1951 l 6145 1952 l 6145 1951 l 6145 1950 l 6145 1949 l 6145 1950 l 6145 1951 l 6145 1952 l 6145 1953 l 6145 1954 l 6145 1955 l 6145 1956 l 6145 1957 l 6145 1956 l 6145 1955 l 6145 1954 l 6145 1953 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1989 6149 1989 6149 1944 6141 1944 b c np 6145 1953 m 6145 1952 l 6145 1951 l 6145 1950 l 6145 1949 l 6145 1948 l 6145 1949 l 6145 1950 l 6145 1951 l 6145 1952 l 6145 1953 l 6145 1954 l 6145 1955 l 6145 1956 l 6145 1957 l 6145 1959 l 6145 1960 l 6145 1961 l 6145 1963 l 6145 1964 l 6145 1965 l 6145 1966 l 6145 1968 l 6145 1969 l 6145 1970 l 6145 1972 l 6145 1973 l 6145 1974 l 6145 1975 l 6145 1977 l 6145 1978 l 6145 1979 l 6145 1980 l 6145 1981 l 6145 1982 l 6145 1983 l 6145 1984 l 6145 1983 l 6145 1982 l 6145 1983 l 6145 1984 l 6145 1985 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1996 6149 1996 6149 1981 6141 1981 b c np 6145 1985 m 6145 1986 l 6145 1987 l 6145 1988 l 6145 1989 l 6145 1990 l 6145 1991 l 6145 1992 l 6145 1991 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1995 6149 1995 6149 1983 6141 1983 b c np 6145 1991 m 6145 1990 l 6145 1989 l 6145 1988 l 6145 1987 l 6145 1988 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 1994 6149 1994 6149 1984 6141 1984 b c np 6145 1988 m 6145 1989 l 6145 1990 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2017 6149 2017 6149 1984 6141 1984 b c np 6145 1990 m 6145 1989 l 6145 1988 l 6145 1989 l 6145 1990 l 6145 1991 l 6145 1992 l 6145 1993 l 6145 1994 l 6145 1995 l 6145 1996 l 6145 1997 l 6145 1998 l 6145 1999 l 6145 2000 l 6145 2001 l 6145 2002 l 6145 2003 l 6145 2004 l 6145 2005 l 6145 2006 l 6145 2007 l 6145 2008 l 6145 2009 l 6145 2010 l 6145 2011 l 6145 2013 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2025 6149 2025 6149 2009 6141 2009 b c np 6145 2013 m 6145 2014 l 6145 2015 l 6145 2016 l 6145 2017 l 6145 2018 l 6145 2019 l 6145 2018 l 6145 2019 l 6145 2020 l 6145 2021 l 6145 2020 l 0 setlinejoin 4 setmiterlimit s gr r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 3 lw []0 lp gs 6141 2047 6149 2047 6149 2015 6141 2015 b c np 6145 2020 m 6145 2019 l 6145 2020 l 6145 2021 l 6145 2022 l 6145 2023 l 6145 2024 l 6145 2025 l 6145 2026 l 6145 2027 l 6145 2028 l 6145 2029 l 6145 2030 l 6145 2031 l 6145 2032 l 6145 2033 l 6145 2034 l 6145 2035 l 6145 2036 l 6145 2037 l 6145 2038 l 6145 2039 l 6145 2040 l 6145 2041 l 6145 2042 l 6145 2043 l 6145 2042 l 6145 2041 l 6145 2040 l 6145 2041 l 0 setlinejoin 4 setmiterlimit s gr 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np 580 2261 1745 2261 1745 1096 580 1096 b c np r -1 3357 2328 3357 2328 -1 -1 -1 b c np -1 3357 2328 3357 2328 -1 -1 -1 b c np showpage %%Trailer r auto/07p/doc/include/hom2.eps0000640000175000017500000027255713570013207014032 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .141929556.141237548 %%CreationDate: Fri Nov 30 11:29:15 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: hom2.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 42.2255088829999 moveto 83.9379222529 42.351915446 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.9379222529 42.351915446 moveto 87.8758445056 42.5487087629999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.8758445056 42.5487087629999 moveto 91.8137667588 42.85537429 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.8137667588 42.85537429 moveto 95.7516890116 43.333736027 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 95.7516890116 43.333736027 moveto 98.9758487956 43.917991296 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.9758487956 43.917991296 moveto 102.20000858 44.756342173 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.20000858 44.756342173 moveto 105.424168364 45.9586414799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.424168364 45.9586414799999 moveto 108.648328148 47.681184605 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.648328148 47.681184605 moveto 111.619187978 49.915904496 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.619187978 49.915904496 moveto 114.590047807 53.0118454719999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 114.590047807 53.0118454719999 moveto 117.560907637 57.2863264709999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.560907637 57.2863264709999 moveto 120.531767468 63.159086312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.531767468 63.159086312 moveto 122.481227196 68.135165274 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.481227196 68.135165274 moveto 124.430686928 74.213320954 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.430686928 74.213320954 moveto 126.38014666 81.60236284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.38014666 81.60236284 moveto 128.329606388 90.532583392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.329606388 90.532583392 moveto 130.026702416 99.752645344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.026702416 99.752645344 moveto 131.72379844 110.491225492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.72379844 110.491225492 moveto 133.420894464 122.903837728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.420894464 122.903837728 moveto 135.117990492 137.12436188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.117990492 137.12436188 moveto 136.761399644 152.710104552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 136.761399644 152.710104552 moveto 138.404808796 170.119508256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.404808796 170.119508256 moveto 140.048217948 189.31896128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.048217948 189.31896128 moveto 141.6916271 210.187702196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.6916271 210.187702196 moveto 143.029415992 228.258635884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.029415992 228.258635884 moveto 144.367204884 247.117765488 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 144.367204884 247.117765488 moveto 145.704993776 266.543959616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 145.704993776 266.543959616 moveto 147.042782668 286.272293708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.042782668 286.272293708 moveto 148.530800864 308.202513132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.530800864 308.202513132 moveto 150.018819064 329.68128234 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 150.018819064 329.68128234 moveto 151.506837264 350.245855996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.506837264 350.245855996 moveto 152.99485546 369.447808344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.99485546 369.447808344 moveto 154.38058684 385.7438198 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 154.38058684 385.7438198 moveto 155.766318224 400.223641868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.766318224 400.223641868 moveto 157.152049604 412.670691724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.152049604 412.670691724 moveto 158.537780984 422.937433016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.537780984 422.937433016 moveto 159.871899752 430.689904188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 159.871899752 430.689904188 moveto 161.20601852 436.34294582 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 161.20601852 436.34294582 moveto 162.540137292 439.941545884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 162.540137292 439.941545884 moveto 163.87425606 441.575535288 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.87425606 441.575535288 moveto 165.38355414 441.215562688 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 165.38355414 441.215562688 moveto 166.892852224 438.725842236 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.892852224 438.725842236 moveto 168.402150308 434.353642664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.402150308 434.353642664 moveto 169.911448388 428.35780196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.911448388 428.35780196 moveto 171.546724824 420.329456508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.546724824 420.329456508 moveto 173.18200126 411.015143412 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 173.18200126 411.015143412 moveto 174.817277696 400.707645276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 174.817277696 400.707645276 moveto 176.452554132 389.671494056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 176.452554132 389.671494056 moveto 178.176643192 377.503551512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.176643192 377.503551512 moveto 179.900732256 365.018740704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 179.900732256 365.018740704 moveto 181.62482132 352.412776072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 181.62482132 352.412776072 moveto 183.348910384 339.845421572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.348910384 339.845421572 moveto 185.352989968 325.452182392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 185.352989968 325.452182392 moveto 187.357069552 311.432359296 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 187.357069552 311.432359296 moveto 189.36114914 297.894114096 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.36114914 297.894114096 moveto 191.365228724 284.910807652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.365228724 284.910807652 moveto 193.513696008 271.660172144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 193.513696008 271.660172144 moveto 195.662163288 259.131412884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.662163288 259.131412884 moveto 197.810630572 247.338693076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 197.810630572 247.338693076 moveto 199.959097852 236.284736256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 199.959097852 236.284736256 moveto 202.438063772 224.443062456 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.438063772 224.443062456 moveto 204.917029696 213.570121204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.917029696 213.570121204 moveto 207.395995616 203.657874436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 207.395995616 203.657874436 moveto 209.874961536 194.703393436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 209.874961536 194.703393436 moveto 212.841194552 185.255563712 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 212.841194552 185.255563712 moveto 215.807427568 177.217073336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.807427568 177.217073336 moveto 218.773660588 170.646982868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.773660588 170.646982868 moveto 221.739893604 165.638955936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.739893604 165.638955936 moveto 224.051120012 162.903788944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 224.051120012 162.903788944 moveto 226.36234642 161.279677732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.36234642 161.279677732 moveto 228.673572828 160.866618916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 228.673572828 160.866618916 moveto 230.98479924 161.781877396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.98479924 161.781877396 moveto 233.0583235 163.84232722 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.0583235 163.84232722 moveto 235.131847756 167.18291466 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.131847756 167.18291466 moveto 237.205372016 171.91041878 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 237.205372016 171.91041878 moveto 239.278896276 178.12787238 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.278896276 178.12787238 moveto 241.387859592 186.073707604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.387859592 186.073707604 moveto 243.496822908 195.725035276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.496822908 195.725035276 moveto 245.605786224 207.1086887 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 245.605786224 207.1086887 moveto 247.71474954 220.191704932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 247.71474954 220.191704932 moveto 249.414792196 231.904173388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 249.414792196 231.904173388 moveto 251.114834848 244.55151624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.114834848 244.55151624 moveto 252.814877504 257.990875972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.814877504 257.990875972 moveto 254.51492016 272.03654068 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.51492016 272.03654068 moveto 256.237717512 286.65674872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.237717512 286.65674872 moveto 257.960514864 301.394852228 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 257.960514864 301.394852228 moveto 259.683312216 315.953998708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.683312216 315.953998708 moveto 261.406109564 330.02579936 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.406109564 330.02579936 moveto 262.997945724 342.329728952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.997945724 342.329728952 moveto 264.589781884 353.731246328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.589781884 353.731246328 moveto 266.181618044 364.0311339 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.181618044 364.0311339 moveto 267.7734542 373.0641329 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 267.7734542 373.0641329 moveto 269.38295966 380.781144288 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.38295966 380.781144288 moveto 270.992465116 386.990115148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.992465116 386.990115148 moveto 272.601970576 391.651375352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.601970576 391.651375352 moveto 274.211476032 394.767176684 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.211476032 394.767176684 moveto 275.931744116 396.434058832 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.931744116 396.434058832 moveto 277.652012204 396.467262712 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.652012204 396.467262712 moveto 279.372280288 394.980948872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.372280288 394.980948872 moveto 281.092548372 392.107497824 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 281.092548372 392.107497824 moveto 282.802293348 388.017564792 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.802293348 388.017564792 moveto 284.512038324 382.837409948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.512038324 382.837409948 moveto 286.2217833 376.7017534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.2217833 376.7017534 moveto 287.931528276 369.736844488 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.931528276 369.736844488 moveto 290.446226696 358.227329904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.446226696 358.227329904 moveto 292.96092512 345.499438928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.96092512 345.499438928 moveto 295.47562354 331.839224468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.47562354 331.839224468 moveto 297.99032196 317.504716364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 297.99032196 317.504716364 moveto 299.96769696 305.916551308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.96769696 305.916551308 moveto 301.94507196 294.173761364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.94507196 294.173761364 moveto 303.92244696 282.386494 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.92244696 282.386494 moveto 305.89982196 270.660316208 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.89982196 270.660316208 moveto 308.2345522 257.027425064 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.2345522 257.027425064 moveto 310.569282444 243.759614288 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.569282444 243.759614288 moveto 312.904012688 230.973615724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.904012688 230.973615724 moveto 315.238742928 218.756786048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.238742928 218.756786048 moveto 317.497821752 207.532091484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.497821752 207.532091484 moveto 319.756900576 196.921838548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.756900576 196.921838548 moveto 322.0159794 186.933847116 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.0159794 186.933847116 moveto 324.275058224 177.560377428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 324.275058224 177.560377428 moveto 328.948131524 160.030947312 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.948131524 160.030947312 moveto 333.621204824 144.793878148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.621204824 144.793878148 moveto 338.294278124 131.570191364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.294278124 131.570191364 moveto 342.967351424 120.091254112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.967351424 120.091254112 moveto 347.423506884 110.551209476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.423506884 110.551209476 moveto 351.879662344 102.202774948 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.879662344 102.202774948 moveto 356.335817804 94.892051572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 356.335817804 94.892051572 moveto 360.791973264 88.485790716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 360.791973264 88.485790716 moveto 368.336550992 79.386048178 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 368.336550992 79.386048178 moveto 375.881128724 72.092545319 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.881128724 72.092545319 moveto 383.425706452 66.2390791619999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 383.425706452 66.2390791619999 moveto 390.970284184 61.5351067939999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 390.970284184 61.5351067939999 moveto 402.098264148 56.222622539 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 402.098264148 56.222622539 moveto 413.226244112 52.364150713 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 413.226244112 52.364150713 moveto 424.354224076 49.557235885 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.354224076 49.557235885 moveto 435.48220404 47.51212428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.48220404 47.51212428 moveto 446.611653032 46.021735856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.611653032 46.021735856 moveto 457.74110202 44.935249385 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.74110202 44.935249385 moveto 468.870551012 44.142424761 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 468.870551012 44.142424761 moveto 480 43.562766633 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 42.910943454 moveto 83.4797593511 43.3490858299999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.4797593511 43.3490858299999 moveto 86.9595187024 43.996375525 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.9595187024 43.996375525 moveto 90.4392780532 44.952511032 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.4392780532 44.952511032 moveto 93.9190374044 46.36412467 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.9190374044 46.36412467 moveto 97.258398616 48.342615134 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.258398616 48.342615134 moveto 100.597759828 51.201972772 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.597759828 51.201972772 moveto 103.93712104 55.320538192 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.93712104 55.320538192 moveto 107.276482251 61.222177878 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.276482251 61.222177878 moveto 109.397817647 66.2086534019999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 109.397817647 66.2086534019999 moveto 111.519153043 72.417842188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.519153043 72.417842188 moveto 113.640488439 80.108792063 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.640488439 80.108792063 moveto 115.761823835 89.572128944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.761823835 89.572128944 moveto 117.556698399 99.19565346 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.556698399 99.19565346 moveto 119.351572963 110.507500884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.351572963 110.507500884 moveto 121.146447528 123.691822576 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.146447528 123.691822576 moveto 122.941322092 138.905530424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.941322092 138.905530424 moveto 124.736939388 156.265904888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.736939388 156.265904888 moveto 126.532556684 175.801399836 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.532556684 175.801399836 moveto 128.328173976 197.440178092 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.328173976 197.440178092 moveto 130.123791272 220.97955386 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.123791272 220.97955386 moveto 131.568263776 241.06240586 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.568263776 241.06240586 moveto 133.01273628 261.893440716 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.01273628 261.893440716 moveto 134.457208784 283.153986324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 134.457208784 283.153986324 moveto 135.901681288 304.47370694 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.901681288 304.47370694 moveto 137.409181728 326.345351572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.409181728 326.345351572 moveto 138.916682168 347.354863916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 138.916682168 347.354863916 moveto 140.424182608 367.03259434 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.424182608 367.03259434 moveto 141.931683048 384.94870666 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.931683048 384.94870666 moveto 143.371610276 400.079032876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.371610276 400.079032876 moveto 144.811537504 413.022798708 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 144.811537504 413.022798708 moveto 146.251464732 423.615981124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.251464732 423.615981124 moveto 147.691391956 431.777175648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.691391956 431.777175648 moveto 149.586133856 438.816131464 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.586133856 438.816131464 moveto 151.480875756 441.82584182 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.480875756 441.82584182 moveto 153.375617656 441.140048344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.375617656 441.140048344 moveto 155.270359556 437.1973651 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.270359556 437.1973651 moveto 157.02233378 431.0843598 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.02233378 431.0843598 moveto 158.774308 423.010682184 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.774308 423.010682184 moveto 160.526282224 413.360974848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.526282224 413.360974848 moveto 162.278256448 402.491639436 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 162.278256448 402.491639436 moveto 164.20531938 389.507821376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 164.20531938 389.507821376 moveto 166.132382316 375.801301104 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 166.132382316 375.801301104 moveto 168.059445252 361.679018928 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.059445252 361.679018928 moveto 169.986508184 347.391535124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 169.986508184 347.391535124 moveto 172.726823676 327.171982344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 172.726823676 327.171982344 moveto 175.467139164 307.435509532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.467139164 307.435509532 moveto 178.207454656 288.464565548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.207454656 288.464565548 moveto 180.947770144 270.43433238 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 180.947770144 270.43433238 moveto 183.71854308 253.256099668 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 183.71854308 253.256099668 moveto 186.489316012 237.1769599 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.489316012 237.1769599 moveto 189.260088948 222.199116072 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 189.260088948 222.199116072 moveto 192.030861884 208.298310984 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 192.030861884 208.298310984 moveto 195.492280136 192.381999152 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.492280136 192.381999152 moveto 198.953698392 177.982124624 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 198.953698392 177.982124624 moveto 202.415116648 164.991296776 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 202.415116648 164.991296776 moveto 205.8765349 153.302087776 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 205.8765349 153.302087776 moveto 210.069406808 140.74210598 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.069406808 140.74210598 moveto 214.262278712 129.787336488 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 214.262278712 129.787336488 moveto 218.45515062 120.314642448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 218.45515062 120.314642448 moveto 222.648022524 112.243880508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 222.648022524 112.243880508 moveto 225.911384572 106.914033268 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 225.911384572 106.914033268 moveto 229.17474662 102.435090124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 229.17474662 102.435090124 moveto 232.438108668 98.860753008 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 232.438108668 98.860753008 moveto 235.70147072 96.2902081799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 235.70147072 96.2902081799999 moveto 238.453630924 95.01591644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.453630924 95.01591644 moveto 241.205791128 94.70068438 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.205791128 94.70068438 moveto 243.957951332 95.526762648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 243.957951332 95.526762648 moveto 246.710111536 97.7323299 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.710111536 97.7323299 moveto 248.702911188 100.358533452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.702911188 100.358533452 moveto 250.69571084 104.002067256 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 250.69571084 104.002067256 moveto 252.688510496 108.819250616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 252.688510496 108.819250616 moveto 254.681310148 114.9833867 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.681310148 114.9833867 moveto 256.45307144 121.745395852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.45307144 121.745395852 moveto 258.224832736 129.85412712 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 258.224832736 129.85412712 moveto 259.996594032 139.439908048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.996594032 139.439908048 moveto 261.768355328 150.619376216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 261.768355328 150.619376216 moveto 263.381221344 162.260108692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 263.381221344 162.260108692 moveto 264.99408736 175.338391856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.99408736 175.338391856 moveto 266.606953376 189.855153656 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.606953376 189.855153656 moveto 268.219819392 205.7616455 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.219819392 205.7616455 moveto 269.704068104 221.536347076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 269.704068104 221.536347076 moveto 271.188316816 238.26297538 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 271.188316816 238.26297538 moveto 272.672565528 255.756048112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.672565528 255.756048112 moveto 274.15681424 273.780297544 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 274.15681424 273.780297544 moveto 275.76355518 293.565073916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.76355518 293.565073916 moveto 277.37029612 313.23926552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.37029612 313.23926552 moveto 278.977037056 332.372110932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 278.977037056 332.372110932 moveto 280.583777996 350.528922924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.583777996 350.528922924 moveto 282.051886396 365.912913056 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.051886396 365.912913056 moveto 283.519994792 379.854402752 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.519994792 379.854402752 moveto 284.988103192 392.120233996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 284.988103192 392.120233996 moveto 286.456211588 402.534100036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.456211588 402.534100036 moveto 287.870401632 410.706831364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 287.870401632 410.706831364 moveto 289.284591672 417.00825042 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.284591672 417.00825042 moveto 290.698781716 421.44258566 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.698781716 421.44258566 moveto 292.112971756 424.059187028 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.112971756 424.059187028 moveto 293.709538152 424.939760852 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.709538152 424.939760852 moveto 295.306104548 423.786117348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.306104548 423.786117348 moveto 296.902670948 420.798678472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.902670948 420.798678472 moveto 298.499237344 416.194772016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.499237344 416.194772016 moveto 300.192317052 409.794745812 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.192317052 409.794745812 moveto 301.885396764 402.085352388 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.885396764 402.085352388 moveto 303.578476472 393.308227636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.578476472 393.308227636 moveto 305.27155618 383.6835454 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.27155618 383.6835454 moveto 307.094639428 372.596393428 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.094639428 372.596393428 moveto 308.91772268 360.965776932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.91772268 360.965776932 moveto 310.740805928 348.973119644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.740805928 348.973119644 moveto 312.56388918 336.77210788 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.56388918 336.77210788 moveto 314.746513576 322.070493964 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.746513576 322.070493964 moveto 316.929137972 307.438247828 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 316.929137972 307.438247828 moveto 319.111762372 293.025010016 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 319.111762372 293.025010016 moveto 321.294386768 278.951516272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 321.294386768 278.951516272 moveto 323.6106905 264.493600824 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.6106905 264.493600824 moveto 325.926994232 250.611841752 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.926994232 250.611841752 moveto 328.243297964 237.367227528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 328.243297964 237.367227528 moveto 330.559601696 224.797847652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 330.559601696 224.797847652 moveto 332.999838668 212.30592512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 332.999838668 212.30592512 moveto 335.44007564 200.584542004 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 335.44007564 200.584542004 moveto 337.880312608 189.61956282 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 337.880312608 189.61956282 moveto 340.32054958 179.385386564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.32054958 179.385386564 moveto 343.622963296 166.63882486 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.622963296 166.63882486 moveto 346.925377012 155.074599756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 346.925377012 155.074599756 moveto 350.227790728 144.594266492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 350.227790728 144.594266492 moveto 353.53020444 135.100813304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 353.53020444 135.100813304 moveto 357.732097076 124.304128048 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.732097076 124.304128048 moveto 361.933989708 114.78428248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.933989708 114.78428248 moveto 366.13588234 106.387755068 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 366.13588234 106.387755068 moveto 370.337774972 98.978820616 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 370.337774972 98.978820616 moveto 377.638433704 88.1100312919999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 377.638433704 88.1100312919999 moveto 384.939092432 79.347087536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.939092432 79.347087536 moveto 392.239751164 72.2729000799999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.239751164 72.2729000799999 moveto 399.540409892 66.554128795 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.540409892 66.554128795 moveto 409.597858656 60.417988467 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.597858656 60.417988467 moveto 419.65530742 55.827488983 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 419.65530742 55.827488983 moveto 429.712756184 52.3880411499999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 429.712756184 52.3880411499999 moveto 439.770204948 49.807185322 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 439.770204948 49.807185322 moveto 449.827653708 47.869792106 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 449.827653708 47.869792106 moveto 459.885102472 46.414470176 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 459.885102472 46.414470176 moveto 469.942551236 45.320024273 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.942551236 45.320024273 moveto 480 44.494848163 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 1.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 46.324927714 moveto 83.1714079156 48.1747000479999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.1714079156 48.1747000479999 moveto 86.3428158312 50.799224618 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.3428158312 50.799224618 moveto 89.5142237468 54.512323127 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.5142237468 54.512323127 moveto 92.6856316624 59.742555386 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.6856316624 59.742555386 moveto 94.824282958 64.4053742539999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.824282958 64.4053742539999 moveto 96.962934254 70.230702042 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.962934254 70.230702042 moveto 99.10158555 77.472222562 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.10158555 77.472222562 moveto 101.240236846 86.417921652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.240236846 86.417921652 moveto 103.023945389 95.409953416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.023945389 95.409953416 moveto 104.807653933 105.998155276 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 104.807653933 105.998155276 moveto 106.591362476 118.368570896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.591362476 118.368570896 moveto 108.37507102 132.687678472 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.37507102 132.687678472 moveto 110.098569258 148.496346688 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.098569258 148.496346688 moveto 111.822067495 166.306473548 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.822067495 166.306473548 moveto 113.545565732 186.099663172 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.545565732 186.099663172 moveto 115.269063969 207.75646198 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.269063969 207.75646198 moveto 116.751898085 227.702736348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.751898085 227.702736348 moveto 118.2347322 248.62377536 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 118.2347322 248.62377536 moveto 119.717566316 270.217271956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.717566316 270.217271956 moveto 121.200400432 292.115926856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 121.200400432 292.115926856 moveto 122.7147265 314.358035108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.7147265 314.358035108 moveto 124.229052568 335.99855298 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 124.229052568 335.99855298 moveto 125.743378636 356.551904272 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.743378636 356.551904272 moveto 127.257704708 375.556960052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 127.257704708 375.556960052 moveto 128.76534666 392.532898108 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.76534666 392.532898108 moveto 130.272988616 407.240419732 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.272988616 407.240419732 moveto 131.780630568 419.44504206 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.780630568 419.44504206 moveto 133.288272524 429.011074396 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.288272524 429.011074396 moveto 135.209032932 437.325597528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.209032932 437.325597528 moveto 137.129793344 441.432721232 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.129793344 441.432721232 moveto 139.050553752 441.641373896 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.050553752 441.641373896 moveto 140.971314164 438.38593148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 140.971314164 438.38593148 moveto 142.869731992 432.262062956 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 142.869731992 432.262062956 moveto 144.76814982 423.758920452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 144.76814982 423.758920452 moveto 146.666567644 413.368287252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 146.666567644 413.368287252 moveto 148.564985472 401.544612856 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 148.564985472 401.544612856 moveto 150.712109592 386.950925352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 150.712109592 386.950925352 moveto 152.859233716 371.534650512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 152.859233716 371.534650512 moveto 155.006357836 355.69974288 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.006357836 355.69974288 moveto 157.153481956 339.766071328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 157.153481956 339.766071328 moveto 159.956428588 319.214949844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 159.956428588 319.214949844 moveto 162.75937522 299.294817336 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 162.75937522 299.294817336 moveto 165.562321848 280.257308744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 165.562321848 280.257308744 moveto 168.36526848 262.250881196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.36526848 262.250881196 moveto 171.696490852 242.28772626 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.696490852 242.28772626 moveto 175.02771322 223.910798144 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.02771322 223.910798144 moveto 178.358935588 207.087678924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 178.358935588 207.087678924 moveto 181.69015796 191.746677424 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 181.69015796 191.746677424 moveto 186.495035152 172.038662612 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.495035152 172.038662612 moveto 191.299912344 154.910311992 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.299912344 154.910311992 moveto 196.104789536 140.056110932 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 196.104789536 140.056110932 moveto 200.909666728 127.188418884 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.909666728 127.188418884 moveto 206.44133136 114.499941596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 206.44133136 114.499941596 moveto 211.972995992 103.762052392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 211.972995992 103.762052392 moveto 217.50466062 94.6902415359999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 217.50466062 94.6902415359999 moveto 223.036325252 87.055116724 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 223.036325252 87.055116724 moveto 226.86630072 82.517996684 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.86630072 82.517996684 moveto 230.696276184 78.5472398499999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 230.696276184 78.5472398499999 moveto 234.526251652 75.1221959559999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 234.526251652 75.1221959559999 moveto 238.356227116 72.245416137 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 238.356227116 72.245416137 moveto 241.575832556 70.274053587 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 241.575832556 70.274053587 moveto 244.795437996 68.754195572 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 244.795437996 68.754195572 moveto 248.015043436 67.756486169 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 248.015043436 67.756486169 moveto 251.234648876 67.3903660139999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 251.234648876 67.3903660139999 moveto 254.112558968 67.727132413 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 254.112558968 67.727132413 moveto 256.990469064 68.856220422 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 256.990469064 68.856220422 moveto 259.86837916 70.995918894 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 259.86837916 70.995918894 moveto 262.746289252 74.436099091 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 262.746289252 74.436099091 moveto 264.70780294 77.713941634 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 264.70780294 77.713941634 moveto 266.669316628 81.91277613 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 266.669316628 81.91277613 moveto 268.630830316 87.199735644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.630830316 87.199735644 moveto 270.592344004 93.763573584 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 270.592344004 93.763573584 moveto 272.2958982 100.660980576 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 272.2958982 100.660980576 moveto 273.999452396 108.822381384 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 273.999452396 108.822381384 moveto 275.703006592 118.393394224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.703006592 118.393394224 moveto 277.406560784 129.513179528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 277.406560784 129.513179528 moveto 279.018342776 141.571241052 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 279.018342776 141.571241052 moveto 280.630124764 155.205103808 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 280.630124764 155.205103808 moveto 282.241906756 170.4555352 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 282.241906756 170.4555352 moveto 283.853688744 187.311820528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.853688744 187.311820528 moveto 285.23704206 203.005083104 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 285.23704206 203.005083104 moveto 286.620395372 219.734513468 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 286.620395372 219.734513468 moveto 288.003748688 237.360843124 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 288.003748688 237.360843124 moveto 289.387102004 255.697026652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 289.387102004 255.697026652 moveto 290.875977796 275.95673198 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 290.875977796 275.95673198 moveto 292.364853592 296.422452604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 292.364853592 296.422452604 moveto 293.853729384 316.708351888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 293.853729384 316.708351888 moveto 295.34260518 336.405427 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 295.34260518 336.405427 moveto 296.791842288 354.62011224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 296.791842288 354.62011224 moveto 298.241079392 371.526632512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 298.241079392 371.526632512 moveto 299.6903165 386.806109452 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 299.6903165 386.806109452 moveto 301.139553604 400.195510328 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 301.139553604 400.195510328 moveto 302.471237232 410.662674844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 302.471237232 410.662674844 moveto 303.80292086 419.270400664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 303.80292086 419.270400664 moveto 305.134604488 425.974059308 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 305.134604488 425.974059308 moveto 306.466288116 430.77842196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 306.466288116 430.77842196 moveto 307.976795708 433.992847364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 307.976795708 433.992847364 moveto 309.487303296 434.95734542 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 309.487303296 434.95734542 moveto 310.997810888 433.84594986 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 310.997810888 433.84594986 moveto 312.50831848 430.863546132 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 312.50831848 430.863546132 moveto 314.097893736 425.949560332 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 314.097893736 425.949560332 moveto 315.687468992 419.475228972 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 315.687468992 419.475228972 moveto 317.277044248 411.69868922 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.277044248 411.69868922 moveto 318.866619504 402.863527408 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 318.866619504 402.863527408 moveto 320.558634792 392.546394812 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 320.558634792 392.546394812 moveto 322.250650084 381.522855324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 322.250650084 381.522855324 moveto 323.942665372 370.001797984 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 323.942665372 370.001797984 moveto 325.634680664 358.161966512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.634680664 358.161966512 moveto 327.712459168 343.405921696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 327.712459168 343.405921696 moveto 329.790237672 328.621172196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 329.790237672 328.621172196 moveto 331.868016176 313.986286076 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 331.868016176 313.986286076 moveto 333.94579468 299.63932244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 333.94579468 299.63932244 moveto 336.100342772 285.177204168 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 336.100342772 285.177204168 moveto 338.254890864 271.221409848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 338.254890864 271.221409848 moveto 340.409438956 257.831441888 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 340.409438956 257.831441888 moveto 342.563987052 245.045612756 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 342.563987052 245.045612756 moveto 345.04117756 231.1180457 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 345.04117756 231.1180457 moveto 347.518368068 218.025530692 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 347.518368068 218.025530692 moveto 349.995558576 205.759428392 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 349.995558576 205.759428392 moveto 352.472749084 194.297542696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 352.472749084 194.297542696 moveto 355.566851316 181.061879904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 355.566851316 181.061879904 moveto 358.660953552 168.956807416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 358.660953552 168.956807416 moveto 361.755055788 157.901968316 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 361.755055788 157.901968316 moveto 364.84915802 147.815342204 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 364.84915802 147.815342204 moveto 369.066058192 135.483323224 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.066058192 135.483323224 moveto 373.28295836 124.611040508 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 373.28295836 124.611040508 moveto 377.499858528 115.026163372 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 377.499858528 115.026163372 moveto 381.716758696 106.574365968 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 381.716758696 106.574365968 moveto 387.89396808 95.9588437159999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 387.89396808 95.9588437159999 moveto 394.071177464 87.118442248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 394.071177464 87.118442248 moveto 400.248386848 79.74964989 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 400.248386848 79.74964989 moveto 406.425596232 73.6012652239999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.425596232 73.6012652239999 moveto 415.622396704 66.273438311 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.622396704 66.273438311 moveto 424.819197176 60.661723672 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 424.819197176 60.661723672 moveto 434.015997644 56.357691094 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 434.015997644 56.357691094 moveto 443.212798116 53.051630841 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 443.212798116 53.051630841 moveto 452.409598588 50.51043854 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.409598588 50.51043854 moveto 461.60639906 48.555421534 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 461.60639906 48.555421534 moveto 470.803199528 47.049155142 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.803199528 47.049155142 moveto 480 45.8845277379999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 1.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 64 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 362 [ (8.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 480 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 282 moveto 64 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 282 [ (6.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 282 moveto 480 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 202 moveto 64 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 202 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 202 moveto 480 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 122 moveto 64 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 122 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 122 moveto 480 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 0) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 't') ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/drawCoordMenu.fig0000640000175000017500000000025513570013207015674 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 0 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 drawCoordMenu.png 375 150 2010 150 2010 1815 375 1815 375 150 auto/07p/doc/include/kpr2.ps0000640000175000017500000002124213570013207013655 0ustar sksk%!EPS-Adobe-1.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors /lthick 5 def %% line thickness % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3915 320 PR 300 2720 moveto (y) 300 2720 PR 440 460 moveto (-) 440 460 PR (1) 495 460 PR (.) 550 460 PR (0) 605 460 PR (2) 660 460 PR (0) 715 460 PR 840 340 moveto (-) 840 340 PR (1) 895 340 PR (.) 950 340 PR (0) 1005 340 PR (1) 1060 340 PR (0) 1115 340 PR 1000 540 moveto 1000 600 lineto stroke 1000 600 moveto 1240 460 moveto (-) 1240 460 PR (1) 1295 460 PR (.) 1350 460 PR (0) 1405 460 PR (0) 1460 460 PR (0) 1515 460 PR 1400 540 moveto 1400 600 lineto stroke 1400 600 moveto 1640 340 moveto (-) 1640 340 PR (0) 1695 340 PR (.) 1750 340 PR (9) 1805 340 PR (9) 1860 340 PR (0) 1915 340 PR 1800 540 moveto 1800 600 lineto stroke 1800 600 moveto 2040 460 moveto (-) 2040 460 PR (0) 2095 460 PR (.) 2150 460 PR (9) 2205 460 PR (8) 2260 460 PR (0) 2315 460 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2440 340 moveto (-) 2440 340 PR (0) 2495 340 PR (.) 2550 340 PR (9) 2605 340 PR (7) 2660 340 PR (0) 2715 340 PR 2600 540 moveto 2600 600 lineto stroke 2600 600 moveto 2840 460 moveto (-) 2840 460 PR (0) 2895 460 PR (.) 2950 460 PR (9) 3005 460 PR (6) 3060 460 PR (0) 3115 460 PR 3000 540 moveto 3000 600 lineto stroke 3000 600 moveto 3240 340 moveto (-) 3240 340 PR (0) 3295 340 PR (.) 3350 340 PR (9) 3405 340 PR (5) 3460 340 PR (0) 3515 340 PR 3400 540 moveto 3400 600 lineto stroke 3400 600 moveto 3640 460 moveto (-) 3640 460 PR (0) 3695 460 PR (.) 3750 460 PR (9) 3805 460 PR (4) 3860 460 PR (0) 3915 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 224 600 PR (1) 279 600 PR (.) 334 600 PR (0) 389 600 PR (0) 444 600 PR (0) 499 600 PR 4 1000 moveto (-) 224 1000 PR (0) 279 1000 PR (.) 334 1000 PR (9) 389 1000 PR (9) 444 1000 PR (0) 499 1000 PR 540 1000 moveto 600 1000 lineto stroke 600 1000 moveto 4 1400 moveto (-) 224 1400 PR (0) 279 1400 PR (.) 334 1400 PR (9) 389 1400 PR (8) 444 1400 PR (0) 499 1400 PR 540 1400 moveto 600 1400 lineto stroke 600 1400 moveto 4 1800 moveto (-) 224 1800 PR (0) 279 1800 PR (.) 334 1800 PR (9) 389 1800 PR (7) 444 1800 PR (0) 499 1800 PR 540 1800 moveto 600 1800 lineto stroke 600 1800 moveto 4 2200 moveto (-) 224 2200 PR (0) 279 2200 PR (.) 334 2200 PR (9) 389 2200 PR (6) 444 2200 PR (0) 499 2200 PR 540 2200 moveto 600 2200 lineto stroke 600 2200 moveto 4 2600 moveto (-) 224 2600 PR (0) 279 2600 PR (.) 334 2600 PR (9) 389 2600 PR (5) 444 2600 PR (0) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 3032 2232 moveto 3032 2232 lineto stroke 3032 2232 moveto 3032 2232 moveto lthick setlinewidth 3024 2232 lineto stroke 3024 2232 moveto 3016 2228 lineto stroke 3016 2228 moveto 3004 2224 lineto stroke 3004 2224 moveto 2996 2224 lineto stroke 2996 2224 moveto 2988 2220 lineto stroke 2988 2220 moveto 2976 2216 lineto stroke 2976 2216 moveto 2960 2212 lineto stroke 2960 2212 moveto 2940 2208 lineto stroke 2940 2208 moveto 2924 2204 lineto stroke 2924 2204 moveto 2900 2196 lineto stroke 2900 2196 moveto 2876 2188 lineto stroke 2876 2188 moveto 2844 2180 lineto stroke 2844 2180 moveto 2812 2172 lineto stroke 2812 2172 moveto 2780 2160 lineto stroke 2780 2160 moveto 2744 2152 lineto stroke 2744 2152 moveto 2700 2136 lineto stroke 2700 2136 moveto 2656 2124 lineto stroke 2656 2124 moveto 2608 2108 lineto stroke 2608 2108 moveto 2556 2092 lineto stroke 2556 2092 moveto 2500 2076 lineto stroke 2500 2076 moveto 2440 2056 lineto stroke 2440 2056 moveto 2372 2032 lineto stroke 2372 2032 moveto 2304 2008 lineto stroke 2304 2008 moveto 2232 1984 lineto stroke 2232 1984 moveto 2160 1956 lineto stroke 2160 1956 moveto 2084 1928 lineto stroke 2084 1928 moveto 2004 1896 lineto stroke 2004 1896 moveto 1928 1864 lineto stroke 1928 1864 moveto 1848 1832 lineto stroke 1848 1832 moveto 1768 1796 lineto stroke 1768 1796 moveto 1688 1756 lineto stroke 1688 1756 moveto 1608 1716 lineto stroke 1608 1716 moveto 1532 1676 lineto stroke 1532 1676 moveto 1456 1632 lineto stroke 1456 1632 moveto 1384 1592 lineto stroke 1384 1592 moveto 1320 1548 lineto stroke 1320 1548 moveto 1256 1500 lineto stroke 1256 1500 moveto 1196 1456 lineto stroke 1196 1456 moveto 1144 1408 lineto stroke 1144 1408 moveto 1096 1364 lineto stroke 1096 1364 moveto 1052 1316 lineto stroke 1052 1316 moveto 1016 1272 lineto stroke 1016 1272 moveto 988 1228 lineto stroke 988 1228 moveto 964 1188 lineto stroke 964 1188 moveto 944 1140 lineto stroke 944 1140 moveto 932 1092 lineto stroke 932 1092 moveto 924 1052 lineto stroke 924 1052 moveto 924 1012 lineto stroke 924 1012 moveto 928 972 lineto stroke 928 972 moveto 940 936 lineto stroke 940 936 moveto 956 904 lineto stroke 956 904 moveto 976 872 lineto stroke 976 872 moveto 996 844 lineto stroke 996 844 moveto 1024 820 lineto stroke 1024 820 moveto 1052 800 lineto stroke 1052 800 moveto 1080 780 lineto stroke 1080 780 moveto 1116 764 lineto stroke 1116 764 moveto 1148 752 lineto stroke 1148 752 moveto 1184 740 lineto stroke 1184 740 moveto 1224 732 lineto stroke 1224 732 moveto 1264 724 lineto stroke 1264 724 moveto 1304 720 lineto stroke 1304 720 moveto 1348 720 lineto stroke 1348 720 moveto 1388 720 lineto stroke 1388 720 moveto 1440 724 lineto stroke 1440 724 moveto 1488 732 lineto stroke 1488 732 moveto 1536 744 lineto stroke 1536 744 moveto 1584 756 lineto stroke 1584 756 moveto 1644 776 lineto stroke 1644 776 moveto 1704 796 lineto stroke 1704 796 moveto 1760 824 lineto stroke 1760 824 moveto 1812 848 lineto stroke 1812 848 moveto 1872 884 lineto stroke 1872 884 moveto 1932 920 lineto stroke 1932 920 moveto 1988 956 lineto stroke 1988 956 moveto 2040 996 lineto stroke 2040 996 moveto 2100 1044 lineto stroke 2100 1044 moveto 2156 1092 lineto stroke 2156 1092 moveto 2212 1140 lineto stroke 2212 1140 moveto 2260 1188 lineto stroke 2260 1188 moveto 2316 1240 lineto stroke 2316 1240 moveto 2364 1292 lineto stroke 2364 1292 moveto 2408 1344 lineto stroke 2408 1344 moveto 2452 1392 lineto stroke 2452 1392 moveto 2496 1444 lineto stroke 2496 1444 moveto 2536 1492 lineto stroke 2536 1492 moveto 2576 1540 lineto stroke 2576 1540 moveto 2608 1588 lineto stroke 2608 1588 moveto 2644 1636 lineto stroke 2644 1636 moveto 2680 1680 lineto stroke 2680 1680 moveto 2708 1724 lineto stroke 2708 1724 moveto 2736 1764 lineto stroke 2736 1764 moveto 2768 1808 lineto stroke 2768 1808 moveto 2796 1852 lineto stroke 2796 1852 moveto 2820 1888 lineto stroke 2820 1888 moveto 2844 1924 lineto stroke 2844 1924 moveto 2872 1964 lineto stroke 2872 1964 moveto 2896 2004 lineto stroke 2896 2004 moveto 2916 2036 lineto stroke 2916 2036 moveto 2932 2064 lineto stroke 2932 2064 moveto 2948 2088 lineto stroke 2948 2088 moveto 2960 2112 lineto stroke 2960 2112 moveto 2972 2128 lineto stroke 2972 2128 moveto 2980 2144 lineto stroke 2980 2144 moveto 2988 2156 lineto stroke 2988 2156 moveto 2996 2168 lineto stroke 2996 2168 moveto 3000 2180 lineto stroke 3000 2180 moveto 3008 2188 lineto stroke 3008 2188 moveto 3012 2196 lineto stroke 3012 2196 moveto 3016 2204 lineto stroke 3016 2204 moveto 3020 2212 lineto stroke 3020 2212 moveto 3024 2220 lineto stroke 3024 2220 moveto 3032 2228 lineto stroke 3032 2228 moveto 0 3068 moveto grestore auto/07p/doc/include/2component.fig0000640000175000017500000000025113570013207015203 0ustar sksk#FIG 3.2 Landscape Center Inches Letter 100.00 Single -2 1200 2 2 5 0 1 4 -1 50 0 -1 0.000 0 0 -1 0 0 5 0 2component.png 675 75 11805 75 11805 8745 675 8745 675 75 auto/07p/doc/include/clrLBMu0.png0000640000175000017500000027170713570013207014536 0ustar skskPNG  IHDRLbKGD pHYs  ~tIME;  IDATxw|TU?׹wZf&=J7*^uuWݵgWׯEˊ";I@:3I&s=?fR&L|>~|?!w=38 B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!B!4*'ӔY;QfF5+F?!9nV}׵=2`6JA֚IeɏG#?\Y)4ߠ$,0 ްzCB(Hқr۞)G6hnϮV5ߊW%(lníC :mhB~(Hrgʤ{gi E4'tT^p!g^!m*`~!>r$ 7aU{Tř]s "jç1?@_WR+JFP(6 !_B=o |Wa dth &?\3T Cq!/+z{ a9wVsr+_{ m$LW2!cm9F^bk\1E{xH@HU6$3 9Ż$Ռ#'Pۀ@9x%eΨH?r!q|oa،%S ` Ac.,fd`p0{BH#?Dd 6p`On#(~~bYZkZ}q.$cp^E %4] $Qȑ<[Eq=0t`6Z[}o~-A 3PÂ9!yZ:7%[QȑKNw"f7W]p&/߇f7$ wހe]}&2rĮH@Dk1q9``C4 5`Eg?UVT4͵x7@F`n5ۭA3$@0Zڑbċ+[ />vbXd` Py$_с{BHҢ(J1\'m O;RRvJ'd{5P# "[&?L2:0觴659Ɛ>&3PEZr$1z|Љ @seض{סz?Z ph,f=⫼Qo7 & !uwG 3L 2 SIf]IDgJuG}tn\o1b0?چճ#PX =|>!0 hȡ{pGrmb 4m~!$iPKGemzt.ߺ9Yyz- L4Uïq[zt: §[FX} -#$IQȑeZvl& ǧU5XdG5܁H2Y 䘑# xڋ }˃D.Oc00">akkjݸ u7(/caFr5:Psl䞳rLޒs҃BHr{`w6j/0d EHͰDBRSd@ő]_='!CP$.^$e@ں Wo4!䇈B=Ua Z8wzN,FZ8w22Hs~HL| ?!  !ф1WOy @)rE ԢC` $' 9Պj'X&_!_n4{{Ɯ~qU@gK[ft CH?7+,"aS̮WBYVFq/W*x@K<3%ڰ33.KB_TSg a|<^hm;xh]WV.Z5f1ּ}9}m>@dq ZNۿe躐 hə%d -HjlIܫ`bȧMOIBrjҋe6wcsjs稛1 FAPS{ >ªj1u})?4 u`2!#=Af?԰g04]XG&#~PgFB0PhX.v>&=[Nr$! 9?6B xk}R IP=x_Yp="A!tmϫ $e>?5,B*4]H.?3fmdb};ocHHꂱ6&תǮP(Ȉm^f0Lb _uw}pސ?56ifplʃa(wK\r5>U%c{Q;bADa%~k%XOɟ }zŮ a̍=]Zr$# 9ݰ由 Џ Bo>4]xQ^@D,"YL^]]D6j*<;}ꊸ[!H1cl^)9얏T !Ռ~c'+``Hj$( fl|g, 9BV{Mo?fv^5W?JxfX DX6w);-M|^эkLVלXp޹ʷq!!Y\S|*CGЛpOLl@)%@%kw-J'$Qȑ8cfvPa,4XE cTt~&XNj9zKgh4g?-MO8הE kx0|pb8)i\,0P#"O{m>a6R|=H3eSWc~Kj|Zr$/ 9I>СCSK'ethls6*wM5q̤9GW[S^VvF~ܽ˯oeAi^QҾnۼ`LTU]:-[P5aÚmɉq+OvF洶FS/6W~VNvaۗ]2hrrf=GucTإӲ-UzjDD.!' a=6$*QFQN{EH2#1`ػ{3Nuɐ ii So=u o{+\{AblΫYYE jXz{(ϜWvea(:2~+c߉@0K~kh(##*2 m5}O,wvW8т`S+z\v\kV8YV+Ww֣&)v% 2,h<MEnk#A"0JO$?rh?mg8NHQSRǢQƟCx>Bx9B~hT\;emg+G(M*Y4N^?״&Ե4/r}?6S0$~% TVXk(#= w7BSYcs!=֒}ـ_IF~a9!Ab(Jr 18q!$Sl2ulь D >˿/UA03"+'eγڜ=F4:K s`‰Mc,Nii-}jf?ή;FX,-c A6M>!$PH)G:TJ*Hdd<'*ջDĆVa<2}c}쥧 9UxcKl- LGyt-~<'tUm " IΏk6 ]ikO0xX$75l4dC!c|<%u|OVČ{/+%bQX 9@[If]Pn()_[9-5$, 9+F__ܖU1&eb~DtalR<MCf?6uN*` F`c)ڛq vit !ɆBG"6ip]=T0%SA=x:Aݯ(o'qoQQ<"ߒob>?جX{աfv{uf~L=EP A/ҙ.SCU$v,l]B.ˤJB ܏r2$X(`8]v:T N0a}^` % ;~nª m]W Zϛ8݊]bƠ~heoV])I6ᮓ4UwB!Kl_ENYE\:=.$zj|9֌vo5{PvnI<,+_Th90 CI? ^ce绸lnkzG埾/_3񶆫n) TN4yq?&G4aYN'BSEZvܖC0]fiB0۵-9B.,ݛJݕ$ 24ݲ R!2e?jil*>]G[3P`_[H9vrǐŚ\A׫W*xYLᚮ~Z)1vV;XDtӓI|›jqrU1ػt9xbsON {w@bx}W@@ !ɆBGf "7{(/NRVLUVO/@Te4eʼnnl:T5 spޮ0C]h |C;tkmDmsCqAlK#'O/̹`F@nEk컛iȮo=z\ һl⪆|vi Mtݝkr(!/GEFDR}uB=?2%cretLKG2R$䳀BXpsR{r eeFt/3ڭd ]x9}Fgk#N:_vs,*m> ~~UkF/zsOlo\qcѵSuZ+>D4a;?fHe7g_*o! !3L Xdjl(~DWG:C@ZYš vƃ%-Zыr?`nj3u+mf7{TDzۃO)z}EixFg<7󮎖ܽӔtj+š&=o8 MЫBn ʅAahvWv]E@%l) 1@WUv$( u >{'u bc%h1sK21`B^}{?6=|r)h[sGԣoC|oV'FoQث՟\0o}#rlAԦռ&sѝ ̦ΰiEHQolbq-9-#$Pȝ#cKZc~qj" !w'ݥB6IXƾ:[חJy&AײW!9R+{>'[Qj(.ʽnvM۪jkP3'77lxS7Uakmv^t<6:O6z(Vl*]g=-SCN!ɆB aX? S>z+Xx%bu|"|Ė6yW)P[ҿ SjMcCIާd!N'|`aX,8 IDAT9+y@XFڐ9;I<hS 2(|hK.־}9z!@c{&S^ ִov,=qy z\*o[`OӗCxD}XyejއJ׶9㇌Qxn|nl"TOc~b.kNΩwm|,vc\StI>Z0nBHڷݕ.B@Pw%!IB0U3vE GwJѐ=Śҥğȯ[X0zdHsp9G5}VV`Jz he+*7Itѹ?h" dt~;*R3}SXK.w{, [RaѠ&dHHm(CKy1lm`ml  xY-^WЉT87w5j u{e>x(ozc|?=^HŽ >f7/p҄Qf6m3cmbTM9]a:DC(VH`s=8(\}Lj[:/o=or zu?x[cf%x_ _49E?ZˋVS_<ƖŃ+u+S3͊QcuaU|Jl,+f9s`l6~t# ־ \̓* rlL.IXr*IR؞|:.6BNVە/Pܩ̾Sv[7n`4t6m C.f}s%7pLgS3}pO߬zos +{5n {3?Z(c t9d`96Ob%?#za`ti 0u}m=ؾ!ǭ"#$Ic{fR;f ~ @y&;E¥! G r,ȱ ?vQu  KeѽʇZyBx6?ث}^0{yӛnKvFOd0hB_.x|w:K/Yh3wXΜ}хV\u5՝IUikeCyɾ0dh9؍7˰57= :yb9M Jkѱ !$ж^gL#dYƇj|hfA@6õF~ o9r0Yd[X9)I)xDMG:4;_5& ׾^s8'))e׊7 JxS~.e騦KËP#Gj!; v>Ol96}[yYk}~o %Ě3"-3->`+K\(EFBhvݕK@!GH ZCD`S=[YɿB`q~łbe541gP69ɴOk=+Wλ g$W`v8Vƞ*RVĎp@ٷol?1>eWdUa-KsU{9쏝{g_6!$Kcߢ^؍׿+R]W%nA (Fv- 9`4&GHLuBf`c9_=Dz_*.+/csmQ}w\{m4e?驪]Műuԅ^l DohWx5-T6 k) ~2]? aMda}̺7ﮑ bo?M-9ݘӞ-"0d-TUجY}TZq aDt0!IB rV*x h ßo0_4ם T;rٶP>\rXX) EJţ'u=1Ӆ>ћQW,.qL<>S c`m|WEqMrWBUNW}ӞTTуrM8Q@F#{{b+ePlg3@;([7Aq‹u jfJʓzP L2;k}8S3sS3'Ly'~mI1+RQ޸q;v5wvoWɋƳw{) o۴ -S-ߤ>g |l?ʵ.:,g`Q,o[ܱuw7 CbH3b V4h*:7=JB=g4mOE b'uПf`#8rݣY`ϵg!dnel؇ Wش_l9oٯ:8b^lT </R/Gft{ ~DW=Bsկ<ࢂwWi}:jzq'`w89qgPRbc?7n[>}=J ;?}b,mݐ= ;{$dF#!>lPt`VԔ7@^P#1,ẅ́R7 6 gu{QQQH;t&̿}L<Ԝ~'#k/UPXsNkO)/{۲*S?w ;8OY?+(llZ2b~㊎2n6)v1]dUXmXF&k~浿ի0LZٶr5u/R -9tDA=#0/a~š t &Wp˟Sta}4'Z)ʿG?|ǤM*|F]6X3Nȵ++WUnbSfQ`֫YXw$%Φe*_u;HKs#zQ٘[$`uȐi[#1{UpMrǪhw*p}ǓK*jtveGDbV\SB\S~y; 1l;9j߲M9=<L @-譐L2fW_{yYrמZtG=fs76.?R~踾u64[Y`GY:OY-^ e~,}6 QmcRuvzCÇCy0P9 sop\?}@c tOW, 9@.!2*$e $$P%7W$X ]_GG?Mx;_4ad? {j.C2LhOmO/{坺Jw;Z4>ʯNXϢ?-.0w k髫Qc7!z"A1V4srnM,KO|92ZU Ͽ$hK /g7_ke30b zV(IRrIm0IHO-y4%=XFPXR>S,/sYq 5'W7\X_9]nwINQcWS9r k5'扥'DU33pn]\}s{ w[RIKCT}#_aU"Ռo0aέ3֚nT#CZ#fPKhA!1d!ɆB.)?N5،(&( u70qssiv;G}Zhݷ+VW\0mPSҌ͑ةryZ9Y`F#M9ƺ+ !DmB & 9B \R{&lh @^m0d+2O}5fq*p>"xQۚ>}.nK:1|+E |o]1.R7fը ${͙zCK'":"3ߩ`V,CǶS ZOls.WZ _ޞwۅ)>ڈflĖ ^ rHlUF$AB\@(c j/R{x(7+ U㒒H&C>͹ꏗMBŝ5-ڼY63d)/? nv=__%'āwMmk*._BȧenP ,xі>0[Y< @|/{6gYC'аKƢ;{%=36,]-7o-2%;W)$! TꛊKSnP~YM1Aivs>aR3XhGQr~yfL1hbU㑳OHppA0ٝ3$`db+dBB-bDž /4>~וބ2JP}#t8(~/|>xۤF`($aķ'j^q+ƽ3Sy%徇7RD2(w}7ܸ,j~ 6,XtH\'/^}塸z^݂oZ6"łIifGhփ`D FpsgθM2x"j{KNEZ6=ChdP E4w*r$JOJG ձ+Eh1>xZBS#uȬG/xj!ʷ EskYG-CG0BExߥrBm!]9z-35;c9ݞj'[WƵjsZMȶ bu`N`-[OdĬ’P(X^q8GqkU8׆ )j kicD:Hed 쎽Zf:|.]廧/y9E ~`Ԕ";2ҥHDdAue8&d"\n6.'Q%e 06w9_?2d7 یPW÷\[7ov8d4ȟա|k6׎-m9oDCcE}}l*?07r)L"ONɚOkz+%#He[2ͳlGWʮe qYGsYP]KjX}qtcώs}=+sY/'eoa]ӚjݢČ G3ë@!,6&Ɉ4 7[ E(3#c WX! A 9B \q )?d:tn:X߾Sڿ]Z&rI8ctkV]ח\.k&5qٖ&oQ4S}#^vYԫM&ezۂ[z 9r້#!o.U֊C fa9Mv*hҍU;= Ϻqc|?׵ @Ds{Gq-}yFV%!sp vvi;m1 6`rN")(04&v 1v#jz&? áR1L8H-lG>qpҍ8H'a'r d~@,q7f %|~ʾJ(3qnٶ|󃳥5yLmGή)WIQi=Ӣ )f͌Nid hlhN]L貵8B@v6 IDATmCa2>ӌIc8j*9s6SѧܝQkqB56/|,pa@&%* `Ѡݓ` = g PfFzದ̧ ғ7Fυ_o,BϐCWMcXElO~1}<^wgM^ YCJMW)%=RrԌ2 eɦ5FLz:/ J F  5m) 0vvh~fҶ6>ra*y'R@ݣ$''!10y/ &Ei^| ^wB-Ìȫ Б? QXLgC]fwUw_G*-lJW޿HIњSfyO*f ^Czhc=:cu8eO@Jٰ*֑5(Ӑ˺G~GF:}lnm c׎NiZ}:# `Ѡh;?zM#ѿl[^X!mbX<"A3mBrr v_ACfN vx#yrn@3tte0ZwKyY( f)_C$9pvޛi~!A!6S\$v8dAVv<72pz)7}ػ_K]jRl#cͽOlF8}7#GA+`n3$kt5toDêjy0.X MϴQ:H%SP7ҭp 'ЧKAoپ^nBnܤ`2!HM$xn.u 7x40?0RƄ6\yKлtV/[fzt! _>8.Q cYS](foo=q1 ru".=c NeX)1X)Mr9!okjRmGD<թ|2+z@!10t( X/J%)8LDXQD5 "䙿Ɋ]qf0%#>D,:Na ]{ݜWoܰB9<,}~|J/p0g1ͫƤ~ }yH(N&8U9m3,[ImMmaQ Eͷ 7|4,>a#嫦[id.,HNjk{T,7@0{)ÅHN!Er i AE-[ߓ_YGn]@o@n7BS @L!'~BSC Z VV S\(-& +fp;/%f{?TUfk,>.sg٢w\ƋΕIfBW} <^=}&甿ۛ*hwqS6=K8+F5w;OI  ˔r6(M(]w^-닯+9zE[&ĸze `B-D?VgͺoG_ZiD #i5j2<s AjI9iq^EFިLHրa=gi"0<ɑշRՆBwČ}w ^g]Զ>J zh4]=]Hbɐː;avU;Rzt,_8EIJdHZTDx~ N۹zEgK F\;3iIGd#ݙʔVG.J#b-A")|\ `Y !_.@ANgu>PNc>[P+ls PTp{U: 7b=[@s!CKz`$$3;p(Ȳ}_Bk9G(OD%(0 |AK LEDEG˝9n[J7ZEZ7.經{旜Ƅ \P{O8ug3`kl 64}J;L~~@a4@.,&9&Rp#NtgXӷkIMrZ ^V!HX.g]Qpq8IH ($'7pddTp4.UgSRn  r:@,z2)-݉*o~:4(YmoF;&dWS*۷>2)b\H}YG+86t*54%ڷȯV`8 ,t |Pəp[?M'WEQ!]PY< =r^WJH 4$'7pP CkOѝ?Г ~?,䁛GC'4r,IIؤ{#2HGq:D~w?+/ *G#FɜeWn>23fg  &|M O+GC+Tl"̠AqX˓CmS&94$_ceh&"<"b Vrn )R ~ F)zle&Զ@bhU׏,!;WiyMXg%ߴK bх-߁g43~4yz ˷oy9:=jr {ze6wlMmѦAc.x-2KPmJf ըp@1j*93p3%ۛ(=C:mtwv6v|^*Tuych/wda2֛j֢ -RHșEXuz;ZJ%"4ڍ&_BJ%mK# =0+^r0Ç`rNJ.W$Ws?`,8~mV q%jL7"X!F21rD3ooД[0[B4)o,iGPh`/FOm*O0;vi={y8[d5 ,o?Α Cx> G&eJiYvyӷGBB?X]km6^\3K+xz>dmP8 cPĀAb:<|>H| };8UaV>j/(&)0^P!suujUHDKPR^XȊ]䱵aq}Si-6{Dy?%}vޣD#^]`p:^Q%D!C"TzW}3䬝G a2.u$$R$!>=G#OAB&1`H,z.}0L/#sF(#ZNåƆEl "j1^Jgbi(""(mzgА[cs\(508t:bCA =F/ Mxn-j38 ~/dJBA1:,%93t\pP%f-BCܞt0., Q{v~I~YnX"uc>JhgohXRֶФӟׇb;*@ o3r3aSIH Hc W-ȥ? +]8W 1Y2,Mn;J%#fhpym ;{5-暜̺\yn(Y, jnqu-WգYBBb!Ern" ?ҷ$Y&",,:P _<6ilہAg/<W|V"X.~Xǹ ].{SÆQ1&"бsť;/;(.HbMuO:>.s5*Yst-/.a-?8Q`m׷ɓ^sv^Xx;j;[!i5 N 9i6q]'mWM׫2%khDz `K龜\<3#\ ,qaU@逌AIH (H#Wz&o>sy2=xY4ş'#̌(M7K_w-h)쨂ˏhפg 9:<9 o3Itd&a:ʼKxvUC̈́-J^AǤ P_T J{wCUǧ>ABnBC)X }T +G>@p(ۋ0itH. }Q2vZ<=c`G =r2x=JH ,gÍ~ꞕA0A?73hc tUJGput+m˸#D˥F;V-GJ@ŗJm6~GC06L&&8 G6i79 #+'2*?knE$eu|rSRp\䧾QX1&j++"(}=Ÿ;e1qQC F+f.q X9 3LJ$A *+t6rۏ…LnJ`BR_uaF: 0&+(-(ނ^Q? CΠڇR$'!1p\M^NqdɌF%*YʯҽoVWE ;~Am'4rܜH$ 3pEt}#{-ȦgM:u MD*!eҙ4sqZ˅9umnAo5؊9< -#48JW^O[;@_U ;o+L #1GOdნE vTm~G>t׃zz42O$$=) U(MECd2$\u,tyb8z-KE/`B9L2O"<[(1`0SA PF,wQg <<:XғUJ*>9|}~8:-fB؞)GsDemJtٝuT6@a6k(s}ÒODOlp,WXM硭>P1 htLcFBb!=r5u(Aiz=;pag_ ąwD ,܍s]3g"':J?P0muS\Т-t҂CUˇ]0PTp]S8Ԝb `MMs̐त^(]9m9ՠ1,]6>@_ .1O@mkPfB!ɛP2S÷1dTfy.E>wȂ/lʈ4w]BŨ W@P1s5){YqB#D2@i',Ȫ| XܯR9w`PR:A8,  zW;5wDƚqN,yxVaxBd yck^6'qM]RPS}++ET@ MOI:RO$$uhL4uןpa@ͯ M#!w} Cj0*ezNʌy)sRgiɴ "ι g0DfpZ7.22r,@cK}ў4˙["a8\QhI1cb&]fGhac IDAT%4!q*y3 "`2%p #}Ah!RWMo7_9ًA^O FBb!kȢ`υ]4>oq7_[EF ̥3_i&$èᦎ\[B^b 0ꉌr0Z3 HL?! ,1FO0V`9F踪s\\\¿{QC(`PIfTid>~c-9;:0h+}fWS,s/yWSSbELSm =sy7ÓG[%|"z APMDod̬Wm+PyTkߗU;mCMd֚ӭFGnmdw?Ky{H!e2^_:͖V"8?~M_y5ǯ}Ur&ԁa:S6/~k?e cuLNz`$$3ۏQ0\?__P}ɨȔCY,H:{"ؖFzCoqHW\=ɖcBɊk(,܅NY5af(z0L %^V`a <6R!BΩZ \n4 ͒<ۦc'Ō8YN"k(ΰKsT&#ݟTtGrfgV\ X nt̽<^>w==@St&'!1P~ i6.ɂ]d X6C˜нOΥhQV_ƃ/v&;b1?(oxfXB:>S(1`P Rz @bx-k:;ٝdf-M&PƝ[C)s6 rꛜͣ~L7.20lC)mQ[Rq9DA& s"OmY祚v /MYZeI 8ف 7tZ:~]@ .!1\?a/.-+Vc9djX6x)0=:Z&"ϬDyDq(; &%JR6:3p%9J g] ůڞ-InQ9Y5  vnߔYRccFO^qE4u r2"$Z+_֗ˍ?)ק(Rb6ڍ}:{t?$$$%0 {wOY jxɣo'4-*¾ބ ɸm}*D`x)Yxo[ik|RF8-zzx⮅4p E" 8SRdZcVu=QItM !ӝ]9'XG#4"Ljh4lxՠ̎3924{.$JH ,g_%͇\`X4] .vs|a<.<\nթoa"Y,Wg[!7.:h76!]`R5؂8vlP^-BrLS&W HO1vu8<;'  o{.mO患`ҷр$|.z40`\ld Xه!c^Q5쬚tE5UR1ĀArr.,Dup Rx h"04Z+!\TOfq10[7 .t5}u*k8 a0iiF>\_򹩃EKTq F[k88L`o4ę}^렠MG>N}zxJ _qݶMơʘs-%k9oo?빸 8hqpUSW`1Yt!ut]tQ 39Az5nd2a |Gz$"i^<E]3aĢ`2.v{ 1r)ev|A1' IPNosz{rE#o9ʸ1U!\ɍ7]h.E(&8oZ?+ 8V&\xoü X >4NddD ҶgH{\x7~=f%^E<~B(#ֻ`σRe9۹i/3AAAa%0|AQ6B)(*^dґ#kt:LaMHH X$'׏5@15Bvn4 M4M7­lڄEw}&)|XC۟*lݏ#kUX-`^oNag;:Wb 2f~q=M\ۦj5#EC3PK韔S[PP҇^ 2ym;hKDa2֞rd?Χ曋,7Ƿah(< !X Z0'dydө^pu&$Y ( EPfē _ 3yV h˜Js88h0DpcN`0BoDl"ƗWs6`! ?K,l6CzSo1VkOC$ aM`!,djoVsA`|O\D( R0͜{(sTN'̓l#gٷF"BS@xSP:tކ =EU˵&֤VAZpz<'|nw+i.߾G )H㫁8BF @/#+Q P!&2o x7!CL\Xm'8Vt9<‰3X<`X#au%_a㣸lm3nS wWb%NvSn{or^'Ns^01t0+$G4d9όF;G=>{+'N ڇ*[M:MLnZM7ԂsQ6s7$р<ʛŧ^>P^9\Bn -Uެ1Qr-DxǖKmmj͚JKxK#Cz:Z8M7"bCü.վ-pKHX͐Zr`0,Ιտ؊$\'M]($b Wt?n5CEBMgpw\wٗ_>Mw,ig(k,?zS/w񉥔;`?l\8U8hZfM]-oYOB Фچ7kV㡺ThJu6PtSn7+6&'Hߵ [Ț,HնvQ&^`)Oj[yۼ_{=;+9e%ۺ K3󫯏v5Re*;< IUCwBb9Z^US1_@*vdeϛ'Akyޝ:w6RI$Uv\}jWuh} IDATĆ+̿L\2Դ~@ HKAo72}\E3[ѴwIPFq2U5灭 8 Aѓ {Lqhmu|8rX;ԩ≱&1db r"t8aza a+.Lm< K w>7v?N4&O ǀsNy+,AHr?srvB·95SNhKSv^=)r޹]4E &|b2Jv)$zx*~WѼldAVZO\_m 63 mnKm)=Lx<h5sy|{ԯSp~"X Y⛖YS'RQc|h+0u|xe#"6W?Bq; 䵢'M+2~\+#a @ "ņav@7Jj(hsn4i\ѕ+/v?+40߀d',A+?9طx8wA%oNN)*V~x ֢ͯ2?|p $w]nó9-=z˸u-*`[v4Ҙ/~r R:ѵgdʓVFZVmhe,x8ո!@eL!kF@u{Sc`P}ݺa0#r #3>l';dSvw N V 6;*B-AVH _Y&M6lذaÛ&iXam" K%s+?͈=3lͣW!GP }rhiD2<{q8 >}~EfMx]C2]׼}X;ZZ>n{F lRخݑ-2墺M~7%{Fwg_ g #-^1{`(O]UׅiKép]㻆R+#>' $Ծ%O0&UWIЧFI柃䪫KKKp8<;,%9aňA@Q񻷺XkJаýp*7 7ꪐL"ѿs/#8P!h^gdv: +9} N *Eȴ~At_wXOk Կtuɢ'SGƁc%g֠"7Z:9Fc * caLkHp ` عZn?$k3xh =j&Z0iHv[4i#L>O4MӴދ=cos}Qh|#7e=dʝ=f"L^d?>x4n 7r[%Q^<^=ΧbsQPT x 02]P:hЋ 4 㜴Mxek`IH YA~@>Vy Ihx=KpEѬf_ÑV1;Nnb7)230.7>S#@iB{l+V<߇2Lp plzTfc|ԥXqW%30!{hͼa_ӤI2ݏwjw [>g^GF?'_ee}Mc~,,|@oر ݝ;P^?`tAv`F+__8CЉml/^DWam7~z X6\gpc z|Qjxbqj鵫S-~_{t\fqT~7L3YZ}ԊeQ^'`tXSj,W0&L Nج0|c]eM{i]LV%M4.ܷ4`v?HtB~X[K%އ(~ƣř̓b V/DG$ o~|K/@6l;$ Ƹ?Z{(_Zv8vZ mWS>wfKlݱ)o~0|gén@@Mˌl;pTso@=D+|1>Z$Њ{JKo72T#D(o/[ ӿ7'޸ymP.}ḩqT~A)T-#1:]e3ejrC+i>21,kv 9ۊ|U-L+uTm9%u!$I@ &dAHǏ_O PN%M!p]("Lr#ш>ߘ4i.s[p… +؁?32v܁ H Fk?5݆H ‘܏7?>lF7C~Pq~OެQ A㪛O}ik6<*ae>=uՊ$|Ild}9?5lES+3Kv'5'nc97~d gzXn څT%3qѕN $V ! ic{"8G~oZ(acy&M\`eao`n7Niv;XJ}}WGo_뷯կzp 8QD\7\"oz`tYtC'@qyipnѩh5*ETԽ̹kmW&4r,e`>d=VJm#Rl{V\@0*S4TGj2wB@P*ޙxRl$bpa&Va 2 7fmcG3 ˪gR eů7nUIe]y1?޹c-@&PH$1uI nxBeac |yaU`U֩`!%*YËT4>@}rCYt[RNCBuӼ7DhJB.tm9?s`47rn> @kTyV#?l:nPj ˽g/־B?iIokfԐMP@vBvc/FN^GMZˋ2?!KC{/x}o7K?r|{_s'],@s;P݈ Z-1&M?.K ZDb0eMS)WPt70r0!XUR>eR (OVnM4p޲CQ*;]&!'©ͭc45v=k۴"LJmp[jRMAU GY{+zo@-YMJџ8n^=qn`y@vQԀr'N$; I;7NXc)'ՊVTY-a Q@u 2|Yh̬񞺡hu`mY74ab>@TF LB|n4i I;LjnB@ єjck9 f5P7oCR'_H>D' Tr 3哻\* gPQ%Z?*ر FFS]= OFE%$>Y _9JSu!`o2B s\^kK.BI!-Ʊ_e4iz&N + PDt=olQx<,>+)f :FLӔ]  *srzTVSVln8fиw`r @T1l7\=($Mew܆zmF0ru97ڝaP.˭mXí?K{Z9쮆m|j3ghbi8(GjX]䠷`Oz!BgG`y~>e:1lc85! !""i" au/97 ǟnqvTqwf61a&TL&HQm! _To,ɟ$*gvD4ib&y @ -䩆`12'5mGW$W?lXU̡|K4GP (**M&ԔctlO(3xR"=7ˏҔdR~^Z-r +OU*Кaⓒ9 @oSү6=Kƪ0`w< \\%۹OV$;jm#<>J|m&ׄU@]A}&ι`EdO 8QLWf@$u]o]?#{) =]C , {vSa;[*t~D&(yiҤ3I;D*4h13[^ /_聨¢2%ow57(ZgJPkF:"\pˤ ͼu# Kx8Y]i\o ip#+JCjmQmGJS3> VAwfGuTXnrE GaI Gj>sn.u:y| |#d?`+Ouqdه0ю&$q *siJ?w!qBUƚ6/hUG4=\-of'!Դ@ ]HD8e02,* `.>J,MA&Ϳ i{G¼D 1B'Λ hH@SQӏ,t"Rd@lvEphf@&!ݞ۷_gfɮKۀ t7,Vku4v͋`-D$[=@q]l$Is6w0/y oYHs*`ERU0;rJr`êBNWSiPWRN)l22| 6%3y:\SO=(@q|4c<~os,RȊL%ȿm f Z/>կ*}LP[s+ B2> nu\1~Fu8$W~-NyFW,#TLIhI4{|s&lZP4"'΄ ;!W lb@~%',.B+ߔfG6mrN~z8T>>n_D=mjM.Kͭ1s3 us|E(Mv>Ӧ*\II"(~Eosxm͞Ga [LmS}mLH[xLpz痒? .{0O$Še*ycAGN %-Ƃ(yD&hDf XrL ,N}ƍv*C'N/h<qr"akE 0$h@}ª8q&;]0f~P0N L:U\(A!.&ow_3QIgY\"%8s=xˠkf AHvkx.P>M/E8^z6iYA)hfWtG ; '?on̾w g J/;wLL2zZO?'7qM'**rPWRV ǣ\AB77lj[Gs$'T+Bɯ9AüV%;hQ6?~:9kURgYy#w2JǜqSga+LO8۵oOOlvԷK[%aEF|o9y%t ,)# 8:X,hGvEУ sZ׵5t^І]}%f?sI3XFhAeTW 4zkA!wev4 ŁatC@; }5 `H"`@>@ED c&eF.C D$$E$*k(c1:Z(h [|n" * RT>x&*F^%oO9P\FR F}4槫+;Vtmמ3 C6dnz 䛦߉X+R Y&VПN Okp&,V4w—+JL@N^dH髮HFP%_d%i$g DU`4.JAtĐJV BPpv cp_ ƁiDu I0晨iҼIe s D[n!0Wp(T IseF2nh-lկ*E}MLwfMn3vb=]>id2OZ;nϫ/ǍD6R {! x~'ϧCIB$\*It9sw 9* 1e^[|]w$b^"LMb|nRAP>\OEK$AxTd `Sꃰ}08 ?lWcom6! pd7Ey^&ߍ]03k<@ u&4ܴP> @T WP֝>$eNU3JPV%^)]0*>D'R4>*GGE0^\I瓩:r^[S\BІ<; \GREA~EQxÛZ|] +deV?͡Roua_1J0er{ jEB (=iB.=&> D >/L >&zL#h7r#1uak_phO.Ld*9 fCۄ>`Q2jꄘ[Pݠ8AQB^ ʰ%\0`BU g'j?[%AqXQ(>z7O0"[LykJoD"zQ1ԘMoIU`^(QndwA41.iZ`胨G樓kQYJ5Nz!)pR |B؜px SU䕍 ˍb*-7~Ϣ( ՍfW[+6~y N/!NC>C֐--htGFug qZnE׳F RǹdML@Exƭ+H Ǒ߂sIx 㳑4q D ,$ PwQ$B~_cx ^B22d]63='- p)p`ۿ[$`qAx1\_o>f?a>HYoQ]e;sыBדH=6?$Tx5ybdo; T2ʯFYpy h$x:EWN.W/񹯿YBSK(s6C{#՚,r3GK{dofϧps9Xy}.7`X[c4Lbf^<.XEG=5Ha>p'b, IMp!:3]ˇOʽȾ}tY  v1jGY4r z$1"l-S&*qV4-  q0-o废l0 R"(eKܸc>c3h~!e=Dy7Q?I6E_`~H (@&pѽD3?KZr6ʼ4HLeP`qªG`,$kqp'XM ݰ QuCPy4o9_^hE>UZvH(t@b}J ౘsDQU]YwfK\E#&۬q^y5A,m8Al#YD&|s 0h01]D 8$p ;00ad/-mP'Xf0UنHq5<;s KkY6KlwUJ\]ɢ C5=$J̀ o 4!`UG{x|\>v vXJ4GY?1V/*l齋 a,wٙǨw&?Kü1?|}DW2/Dv'1XTX| (k 'sJ\O=0L4Q)xʻ w;YzV!B.nE^Eh{ L.U5( .! 02N=pKh]ێsHxz4tvcƄ%#H":Bjbg[|0+C.g(]{Π׆dqa:Fm' AC8`B\n!@ _àfvL.NOrg 9$!̦wOq/Hۤ *XXs( -fq|?dJ` [z֋Xn ѿ][Mv?@"tSB,tufx` Zk! "툝2v>*p¦A8*c7B߉= "ѭDV}Ww@↨@ʡRurIZEӰ y~6^ y *RiZ1鳍_~(~\P4c.vCs;~xi|bd4иEmQv"ό,ʭ=a)`M@ [/28'E:f!jeugf@BǞEMۄ9^xmȺe{;N Nw3J^=^So}ˑA_kSoA2n>(G2AO;Hup>h?Gȹas$ 6>E9溺;oo=l0OOX&ҭR6DOtѝD'~:Ϳ8iK3#x D :n O:Q9 y+ˌSivqT\*S$u 7-'Kq-6?FySΠSNXW- N _ݚi+IWM! $Ƣy?D!6ݠ9hAՏr83XWx&gsX4smB؆|2<6!,#˅8B>TĺOvOծZV/Px$%EiSn"X|1ʛ08,NP&Sٝs:^g~u3S'H!_C9)X;Dہ5RpF6"G%B&_@Ҽ%˘OT؁ }D7Ռdq~nx!D^XM(c|%S5^ x1εƧtL7;^]B0Ͻ 7[i|nN~TT漥&b]#S~oMg4hXUpc]PÐ6K¯@W}7۴*OC,Ͼl6"|~rWaXp!+:+l4E2s8R—X{A T4Y(z^kB̷["v; adi*/= m"㇟=/R$$MA 0*/ɗ81~xʩ^*qG&6'uD0s(seAJ7HOHXL/ ݴ^X3@MgL+Iɥ?@`@:k}Tڮ+$@Djc:B"}h[k7?X?:Ou#f O(<*>[ڟ;v+ lٓ7m+&CO'[QXOotϬ_y,xGgkf,"^Z31s+]=Ǽg?2vA `h|t6|Ewe||'ffnnz-w=])TIƷEV.U>CJn1_,a|L$3O>+D`$b0"xdycx<5Ư?>vn~6 V7Dc~ ^Ծ`CrN$/{I@!ะg CKzf~Je340?+v9}DL\}a]=9ʺOR( 6?3a 3Z`s'Wm zΜCx5P1o ō5BSH l$%lAlWP_5(kg9HZ-?ڑHvnCW+&\y7EQ.I[VAaN ?W/ Fٱ.Nƞsp bASIZO 82qRٽs:{rI00D@PDUV]_ύدwM&H"!g03LC<1`zSzyj99a5M#H8e`1+BV/ٯRnT6*ȋ}? t WmPxz+7LsE#/4y&P02M~k bA@>/9qŲ~f9`e2٭Ot(يp%-Fp6E\?+<&{ b}Bq!vz|k0ӧb6TXآ_HAVU,VG&ѣi*a=\LB-th<ڸddRcsyߋlR)#|boᦗɲ ʨLQ !#/3*kuf^]53g -D #g%r 9>B0a~D pGXlߑu$31B}bddxAnfm..}f#°s`/RkF3BUFU_uF*E"&_Sj$zJZ)d ]Z9O'K}t3|M7CE"7_ AZǻy|=Wpx{xDZ5kP0X5.OEvƔ}M۝;홺s;%)"ˀ )W-acK%BІ&U-bnڄZ^~Vp Ӧe13XDfh*޻2WIG #q*csnz5b H@,*:E&o[WЧ|9-͆@2['L'DO!Jr\FNr|90a~Y"Ej&zcٲ)!Xf_Fw`C`1tq7h䩌벼u-A CA3B 1}@Rf1\7ݛH?SWT:wj[5yS8ѹ.uyz)fAB,J&gD6,aPG :>$tvAD-JFN]Pk_u,q[~$9k1 bkQob`3{xd5xl-y4e'S?=ڄ!&ľF|zmL  #IR5m]ZE%oZ̼}a&@KpkH˘kƱnAKU? 셍|nY68 zo&C\B t3)?AI~]ǘer` $4`@=JT# 'r9d1," O ! !i>>+:_(IuwT#L=0`oG4f+ȇ r9ә g FeĤt[a$v ptroaAUs` ^3{ՀQa8-zW(jw Nv2jttnGIHK>J֕(5I΁LxgҰ8^eTFZ{祂0$v͛;LV-ز#5*d;MpQ[aqz.>IOvޔx6-d3Vp^Ha6-(/ث*|h&ɛWGGEU 6s"<ǭec|z`04/46zt@yT2 $DIVE-Yî*igʫ~7'I5P@ ̗vC%Wg~hkP+z2_"7{ANr`ω:Խ@ 8L;#8|=CavN!h˃x̨Ak fM >A5”z:IIsncVM./D \s8QlE[UTvg RϘ~u=$;AVB6)(/ܧ,h&U˯mK65$i(ڝx*DODUҼZQ o8'y22JG#djcgG.sa7L G5U>N_\<3W?Mɼj8PEOC0C41[B[W|/%_F}b;"&#D#sYwD.o]o3LUZ!! :B 0`A)xmpע eъr; ^3v_PeT%UB C Emg'ՉX3HD2#F( ԋ~ QMWO܃14<.X* v+S^ (.l{Ws[^o@=g+4üjy~cqmJXREx~:"hfC#mxV0 lpkcxI_TVC Oi*2ϝw--$$Y@e#/_!. 쎝 <:U>Lҫv2^/psd H`z qW̧{ym@mV=E\? ~ڱ+FYzi֠>RN޹@Y_7ױ6Sd)5}(=ș$ZxYL+\&A5aF8[mP*D[6 ;jyT 9݂SA(G޵7GH' )LTeÆ]5;,T4Eb:3EU`}z Ɖ4"m[::iT=Nt7sޑ071c~h;ہn+-BΣQ$xV#zQ%AЯƙEf0HLbF8C7dE^>ZA Cؙ$Ә$\:w}(h(c?zw솢(581*ʇ#'e> 2zRD(I)Q#87?x#θ]ODz[7dA-+ AI^MDw G>.q4H`0O8 abn:5_0XMn;\"a[hpә)/"!] ЦlέvZRӒ.h^mL-5\2;ټVLCư k)U?E_!oȝ2Y@RC)E- }pD;( @DOf~ ENr>5$ $#`@)BHlGz$ds>>X&cUShH IA2t>s:tpjȗ66tdXA_"dӘCM|o=YúJ$З\ZCZ3r>r ^']xXѮd`t=бy~:WP*<5SWS" ^|QLht7/\QsN%ƛ3eC|jU  ͧ+/ߔsûZ$ؽV<.>ʋ롘FP8>/gn~^&l$ JU֍7a ߥy>N  'f1_=v49{ Z7F4_dh@ 5Uq"-ZĤ6D+6 M c#8S2;5jԦ[oG>^o**^ n̼:Ј%<19 s\_fSLk}!N,װ cLت w^zp&";j1TA^hӎvM4ȒlbƎQFF3ZyL9&!Q j 9T/d"rACS!n\yå^ÿd&캩뉳?_]incxIaY]ڤR!hBSݙZMunFW/S+uA.괙kX [Z 3W*Pd Y`5}~(t >I(4EB)t ^<'z99~ȉ\?wgZ  80p'bۻ(u"Zp\seW[?k8 [ON,>kyd0lß$݃P/%PNrQT@ Gy~H-gF(,v(zLnX{gL%viwndhG8Ub. v,aI!O.q'Mxq#WhVQW31o6X[5<7c*=yFG%U :{*q4nZ)AV nV7fc:j)f8huUV|lDlTL {6[$Ә5%BKb@Aʅ_^h0&! V Qx+(<d_"U~7ҾH39v}9e goh>2iD1:TPzxݭݜ('X(1B)s`qsK2GMAVeSn"i3 c J.}1N*ݩYƏٱ|ӒmLD~+a#/j^H!vG~#XWY EPM#uEpy$ S:^_;Sj VzI\\!yPKPi]%q>4FEd)h!q c67ȺJM0(4EGafV*I$*k"9[)xV f`Tx<Po{{]Lj-yЭ+*P%yiHN!4ʼns ,<nI4>*)@0X {t,,g(@"(Ό1ۜT|?nб=\rk@pc1ڜh/pX:;N!=Ha6=h?گUFI𘴧FSquY!99P8xC)TB0D͸K Wδ ?j14 ?{ {+LB!kpPc˯;a7Iړ0C ra5:2#: tNߺrɉ\? O-ѐD#p+   `@!0S 76J)ϟQoZ,Y_ajD^;j(A d.m\;ln6}bG:RdB.x@;l~RΧH}됨tNi?34.O+65-sKh!c}TOH0*CV[Ɵ\RL5Zy%v!mLyUpie G͡y8!}+@[E|*.+<^MгD J%"_ވW #*g^}DpQnN$ο4}p. t?sf-_>sR`JxPd,f p"~L$p2lV &a3(,#o>f34r[#WL'{F,2a =fLvO~ܩ!N*v9}G=?mʼ<=HmR^έ8T̈́bӲjV%uj|0>|N: =dYty+33Caql4%\5* z!a)G6>޵c,dH"$ ?D01( $ 0AZ/ZK:ǗKNrb?EyvaG >t5 ݀ݺ #=k>pϚwI.G A<=m#;֓YF^6Z`bՍ0 ՐmWRl)8qK4m sk\} o_t0l ~vsXRE7e=B>MȂsqwQaj]FBa%kWh%z:%Z,[wiťfRa%I0 ѸT\{>:INi,0ST1H ;]n.(Q}-nZ;8LI71eF f>/EBE6P5Qº#\1y0ez6_j.nns4fʁgo{n w\*oӦEtPjUm:F.YXRwܒ5Z$Iu!6r9[6ʥZe DQtͧM}+ $F;akG>\#dGUO@"yf@dH@R7T+_ |rp1nF#C|X}Ga/5V4&@ W{~R؎Zbq0v@[@0z3Y0*ؼX*l̩#!2w\yR-9l|i.8טӃM?x26U H||V흙n׽CU}m'ڸb!d ky$J^6},pWo\`4.v=^mRqmFLNi3<‘|ҷe#SLIɺJz iP~|h&oħ7ANr֐sh0A p<{-~ttEU"m](PBƑ(eJ4IdC6eONd Aq`4)i'Ye2=쉺jU}{ΜI?&aQmzK +G;u2Jjm=ڨBkhV vIH=o_^6KMOaxM%kk啺V<6. y%{VT2D,*<4>4>|Msa j)H ^ʩb6n;-m'hHyB7sŹن+7&K''r9r;x(CHC>[HB58惹?@Ov:&zGV(K=HIC 򄠘pZ] ytp9hNJq>[4z|.߾߲I2PTy"AE'PjQ  Y#ut$MɒH0ʒԃnmT]Zcf DMUtPI 2lO!˛߽|ҷ>L2/T -|ip- (0 $D BkIan$gcDvvɉ\vW ~"p|ppu@@@Ra S. $`̙fG>yfC IDATxd2"[ާhI脡p1'^ȉ\֍veи8x~&ڎ3^ BwBS # c-$0Ok٭^@Ygf冭O;4>..WI#{@>F |3#]qDvy`Glb oZ;fu6}JdyEGSdW,VZU4Z ,hfDl4|NmV EU'nm\ /ro\CEnmT=7^%w. CIu>Uk|w^ =SjG><ک%PfrI;@pMcz9\r"#6޴U}?Bl.DO@ˇӌBr`-uL \l}#nmaIi#Odthe6$ ;N~95h4}ĞqIl:,>R5' >Y on~ GI`+|yj^C:y+ )` M>!yUK Ek rw^=U&o[2Er%$3SUgCGNti棍vx!۱󍌞5}_+ ~i]uvsl#[s8ޱp?.B>MX:.mbkۢ<)7/ڠ(fmfJ兼3ڂ7F Px^s,i޷D#Ng/}7oԅG"t0b uW6+ BrG1|$~@59>>HӋavЁ#';lhdA~4(A$Vv95؞י=Mol+`|@)׉洮 oۮӡY O!* =cdzsR[ %:funC{{Fy>Zۏ/ځ[L^'jcm=ژLjdYE+ɇb KP뒙׭r0[ViL*(m W+y*t #{x׶nǖ)R=A솥uWR h! !9 q)@PoO/9rlj$VGmP!XR T/zq䗰? C L@@ a?{doksc ?`9h~e"-M?}lG'i;1{I~:0"$?7aG,4 RlͿ\ɢ}E]; uW?"TW|[[yo#4/<???a↤?x 3c 7[@tw`ȃhF+<3@5 b3oF9Dr\W<vl[Pž0(( ^v ; VHV0vퟐt@`\p!=g ;mk`}N}f @E]MEo=Ltϖ_1DwuB]kpE(Had_xm3Iʂ_8գF>|iܢZyPw<^å}E n>*yd߰KNhI3 |Zk)ue8B4>zg_a#r)0(:%| Ӷ|@0BR!nBsht:Ph@{oquI"p4ʃXK}Pl( {߆dddekL@ LAyws[1zN5Nw [uQ drZ)'M9';/yUvEȳ~KneǮ3%xӯ9Z**t(F؝4.*6n*aNbE^GC8>@z Ms(]GnIvH>2D3pEQ`2l@Mۓˑ:aCy@2`)0 =][᪇-x@tlX!C>v$q>vٿ >97*C)lv-pڥO@{`q{%0H_⁞B+6u Zm!6= hn1s|D.G#;RQWͽ+݉t"2gq(uA4BB؂%_RC lB)鑡Lj45 hπ/@KV x7{a>R)ѶGm2fyD+MG_\t8q!vϋ934ʂBA2| ُ٭xg@ ORI\훧(s$Ȍdd#I(H~?wЪ.EOOB]kދcGrb&[IлT_Bcn޳8opQ`۠`J{bBoUvo.;tM\ NZ[GAq4!j{Svęr4lѣ__0AXLѮM^KY# T?{DZ3+ggY_r'06 } , #%r)R|bj='dRΛTLp!N?Dw3 hwU9?gSu6:]{/rOqeoKն% ]>H\öa1Y<1eHϾFl£gm{8Y&)BK*o^\mm cŞJWW,>TA48& wXZ.]m83$G4Ʒ9|iZ:i.+i\#7j߿L);j Ĩlo݈S} Q ~kD6.jV|%qL&K/c2ԮŐ>m~'uOȥHqvl|VCƌk㎐裣^DZ)?GƙQ隣q: q`5ŧMJR8\R4ex| q_"{v/7Oޮ- DܣU$H[IoW耦]%wxSHԒ20H__ŝ=+8H&͞,%  W6exnþGa SBQ_~h8@ $ a,[KU>S`tE" jyQrg3p$QGŗ-+um9d;5AoG>3F\{^n}b]gdb i#QQ5a@}t :k{á=fm6Pmg2;|ꢂ;ѿ?Q:`QeB`9`B$P&I$a(C͆ݎe!( I2ed?>nX +uFwq!ߍ&߀sV}'XkH\M:p<``J5^t'S3|4(I:%%Ewl'QOVWBw~Х^Ȣ*޻mڋGۧqB%A& +S4Lȅ\ȁLH;@ld'eEdYV$IdYԭ66>d2fòDL$d__"Kbx"0x,-Uvb%rކcD.Ed<#JZep_-!_BHsc2QT42r $زN>ɟMŁ$J{-{ O\W{h w",9w{M|\wΘSPQұe M,0I֓'?>׿Li. k~y珉r3ЏQOhh6x?ukp󾍷@-)99DVc$ŧJ3xUB0L3٢tgYͦt$iUs!q\JX r/'i{Qd P8EBi\ lYbwwm~l IDATɢ7*d$#᤺g]3տ)EF^WoKG1 Br g EiWa6xJ11*p9NqFA뽻49ƳĴBDUqz̤zr1 J#Κ#vFKQL ?x[hexD()=&CQl8}xEhC_~,B'6(Fh.B=%GsFaBxR|&D.E-fT%!;L ؑNN1:I:sDU?_%Ou1!Zp8]"b\Oy;P8ܸ1!u 5'!y'l?(PP<(9R*PFԝ_uoaoy}ƨy@xw كC!=(؋]&.9独FPtm8l8=#[*+7>ϡ/])&r0w2&P2>?'pV⚆ h4^2j2"NcucYH坣L|]^$r"c9UzuŭbbaK|iOi'!;"JF n+ _@̙o>B0"o +;$ʍ-lUEdaa g7+#qnD.EбbXH ɍɢ:VLQߪ=9x`fxyGID'=IH'{EQ>v/i1xY[mZg?_,XdvGX)r$\A\1zcм"0{{hJR""q \$!8+G4٨N y rkbŕzKҗA']e=inBކ6>^<>6m˚^1]llv\nN|3m6?7tw0]/c"A(.l~\r1T 5k3Kic=uq/7+;7zaa `ub%HN$7J:QYțDB+;QR]rV-cCQ&XId(<}bD|~] |capj],QDz3+DڅsX )ieŤwBrl~Fd%Jb/~lij^WƒôMz2cV?DfnH62Wo] B3U~[_v!Vw"\9H2j%_kW?TGjh/Mv7o଍? u((JIL ,N$I+~v.7O>|A&wDAv}׎9oM(B,FϿ?Vӯ"RD 3I.ۏxƖNzT7SR""efoft2/"Rݥt/žҷ2)tZVp&Q8 :˯XCd@?:kk3"By# a&h`͓Ɣ=3qefc U V-̿k_֝xhЍO ̊zU/=6b\B#QH!<+FA|{Nj7e=F@an']y=Yytb1j+ձ.Hl,Ӈ*6v|$/$6_o_Lj2E|aLabZYt.D׼kyƨҵ+716HxTD@0QnH45NcNذTzQU*(9SEl7Z} _Qz\{]"Cdl>j&yZQ拄bls1֯y2>(d,?|%C wv>a3ؾ&^) % o9 ["QA{ExhmR|VVr)R?i>áPI'D47lGX΂={?L#aL^sS%iQ?j8}2Q,0:yk~+;G]~O?r@;r N+{o|ԩ۫+(JS&/" YCɁX+}4 ׏6gFvNiW2ڛ3É-s*+!r#V˴HbX&V/ɖV{8o,B> Vu|:E[HZ&/=Pӯ&Rڇ_7IJ#^Mb ڄDOMK_c~%\WK5ɳuC+ibS^ƩKcMiyr9iFrѼy+nH6rx?Fo!ūR!K?]m",p{Q]1Gc.`VV=o8P]2ĴsELcҐ%qLeϣ`46v H2H 6/6LsDɹbI5-Bi}`Z+:T{L J~[GF՟E نفَ%$YVdH\1uBtԭ"*w9Kd/B\|n2Bd1l(\<^1u)tڤE '98bG 9Al!1^D${I6vL 7zd>hbDU]J>hi_69p)]AحKUʣ8|B2,v6h~x*?72D@ltS :BC^9߱moXM_$ ,LPxVUhܝOAݎ cXRD,2%-CIWaװI[R\|!+*eZee` J....nn>7>u,[/~ie8㜌A# {H={I6h}]YH? OXKGk"%r)R?oe*T }rdv5L&;ӟI>Xnm>)$BحK&ؙ\DFˢG߹⦽xshke zlju_#=bO {.-=L0e{'fd|:ZӖLr%oצ&1._L.RJ2{ZyGa+6JE$Ym.Ŧ6UVTiw8%2-s0J&-3iILLXɤLLZXX1cЈ|!#ِl@R6YdEA1,S"Isf'f;rÇwj'݌_Q"%r)R?L~H2!ivsg 5ȪSa_rKcμgEݲtVj QBN&+xfPeݏ^{~{_k_IH&VhTiHqr)<|Cv5^uo,>L eB47_S#˨83pD_Gþpe>~AN#iR?~}EŪjV-[l (vt8aUMUv]u).ͩ*eY&5L&I4I$I$e bqLHIISǒ%V2{0zXCH/ş |0BHx 2)դD.EgN7AwGq.fgmqvT2ϖǼY',kùA69#If"iE1772*Bg;? +c/5 rҴha)ہ6z<F aZiտOpJEdamvl+6($K,YH$I}}f2axҲH&cCz $[ ŤwCd.1C_zG3!%r)R?1:6^<.OѦ;OM,"jvk;|'GWku:ǓO9~˫XM1ùd{Ilj/{XUaYf;J}5/FR+IEWH5!Q`eP9bjEFJ̸[MWg$sCfڷ.|ݒ3lS|at8iDBc|عxu1 IlbćQ_elX*6 O0OL8UL56hz]5;}ж7CF{' Y<(N܅!JgRKEI&NIأ_.2(sh>i.2b(?>oqHOǮ ieR0V-e=tj:BTviƽ6q>#7^zŋ?裟#G#%r:G{-rp:gZxq8`anVrxvƫMOι"Yo9ⱛ3X#Z%g:٘(&E<]Y1Y#R Dx}`|$&f |^cTPH]HL76U؊yn__Uuk7V"`sGpq(9_,6~(xJeRJi蹅=GlV*?LPɅƋ#ܦ:'SK'dDDzv>(.1٣ppxEaGm/Gqo7v-sK/ ^|EGKZߛnY.,3Ru܊7@+}n8>*wB>J},i$-{9v40aRoMfL-\Q!DmR!gR^Ctsl'GY1žq_JZ@̝,z&bޛ"/b1a!iaS_S{&^d/Nl1,1vaiˇF$6*WePJc׋OGvT;GWd1Kxȝ`Ti,(TLGtQq*w T<]MKLAL SkdӛTm׍֜x !㇝R'z3D˝ݤ:,ks7x  !fr(+lfPrT ĉ De7l0Bg sަ;V^bytΖ=(LˊN(oH4,?L/h-hݸ)$ًDV}YƉq_ccCZb8)x:R "*9Q7rݯ;EF:NMk9bm"7E0dlEv  MCk^GRCPU} ݗ.p  (ΞP2$ @j w{x\mB!C 'tdsV4Ͻ8kƓ3fӟeЅνQߖLVr9^ڃW%p0ʿ{]%V-ypdGĔ2cهxk_@u!ŔŒ5U@#|2xV޽AlB I8}]/?/];oR;B)z"wSv?}X1$673*{H?T. q'ƣ{2 !<g,I6i8b\?8cfQX3X EDҰi3jx/UU}9B IP;ȃ,$x2iBgvO8ōiqoEϴLQ`$.j`lOƋ3j,- ;d[SɦZ+N6fyBX ϻioZ)԰ƃG$'M]QU_.&)p};!vT7%Io@6&>:Z %Vqaݍ'N7AΔןiuΦ"|Ѿq_ hwO[A'Vd]65,;g4[N-6VW4AIP%+r2vS068=DbL>ڼA˃响G[_Y{+FiSLa GJ>CTpy/ @KdXJ&%S>J|ƾ8fQqIfb;Sg畱S`eۖXzg1Q5FzZz6&QLv[%9It'ݍAgcup,b~jٙQWX 97<ш7{m??>8ֻjhi26.3V=- J18\]#dN{T[_xY@wqW4val!rQݤDa|axE#h3.#8w +NC0/W z‘;etj}_N",`ϼNHH@ih5+.}AiHg2y6V]*`ɳĨL[uG̳3 Yv' &r:z.+&[NL#[l,LJĤ\x\dŴqΊݡM>!Hfu>WS7+oyz{k5cB$"R$&)YƆ,皢b㑠p5xл ;=ok|_ēLt&bVfSTWr#o?Z ]'~A>U RAD%,,Ǎz]gqu{cFU݈U1=4e Q̡@Jˤ_x%7tӑ}}}t}.DQF]4Tm6M`,A,U%k>JE|ᐨONÐ`y.,UUbX~&ENp vyE"Xdxyy({_-ide5vY:IsVE`,[) p9}Šsal\gL݁S21jbm$2e8WklCӿ p8Apcaf[>oo^ڵƮUWNzQo8͓'{ݱޞxOw;ӓN&Ht!ه99J`%0?zm$#ِ$ Ņ"@~XGxm 搈X6>sXj… ?uo}*8=9IU8bl=-3=^}x"ò$ \hijk[߱q E~Pܽ*f:.CaEqK$o@YےN{R%nOie7%w}r}\y^lq~0յh<"$-ֶ_Jծ:YcɎ`Ag/;oJz1XuP_GWz}_n_/$m,ta"OG{[{l|3Hxߖ֭GH?|8dwg>f_+W='qÞ@^jz]]ɮDoo2Kvw}iZk%M ˊŒ$iidY[-`&H%Mx;LxƜ?x́A׉\jS $LóWq,ggUa@"c0gdhXG}}e?A8V:b$w@l1NEJJTMţ+)טRV|aZDZ}=^2}yh'-gYB6kqynzɡ(nqXɍ~$+LIVH,7^YqƇ}؝CFIDop5Mu7j6]sp `S,.*0Qb9lc9v7<|OUydqqYƳ?vQmk7/Tnٲ}MY^aUέ խm;;06L&dBr:dYMS%21319`ƻwY 鯧w7{*c~Ǩ?/!\KH{}aJS0Ͱ7[rݱ)]I"΅d6jv'FkSMmڵ#lHR4,&%wtR/u ^wpZm1V(̣+.</ޕqi '+:{VӽVXsZw0HH18OャC\1InU_2gw. N?dlҳP]X4̺S/Dv";$fd.$:oj~ƹOg~dѠ?\r+e)pxF'=jgy-Hݦ<&+re |ZwOOWxWq\3}ي/ (MHjV,۱c[v(vO~7o8,ɒ.QT{'AQŶAP,H\*V=s~9}7GQ <_3sKˣOџϓx Kӟ(*x{UHgP3Rvl] yPE̛olokH*ݣI<ۖ-z׻^Bd)IvJjy10 uE_>xJ006v'?YUg<C[PV7n2Nc,ڨ[ A b9X ~tD _aMҿ+KDWJ,}WpH4pIkmm(=O,Iq6`<M oXE 0Όex|rd$1HL Rg&i*sla@Df|]t,G!<1î0ofbZljēFoSS(LL<'f_ݒy))nn}L%6h[8܄0,Jr_ѿ%j ``4_G\s <7fDϿ\߾V!Utb |yQ\{F|,zFnl@ 9bt+γ&g2)F݋hA:b_^&׿}EhFrH)gru(>1 NpCUCÉ቉cGOLH\-$c@ 8>Dc\Fx4$<67T7s.f|c|đt)xDȚ0nZH7 eIX7}oVd\2ckG;i2mu ?AsiEFCfw.먥B()F[L%kn`1){wl*y"ol|}k(GNl, Cq¢(ܻ%$Eft}@DO KrW IE .,-/!. v3\V2iLIIL& 31y00 t+dE">f91 g-+@顶޾.zz}x XX W R `Ԁn d<~Ky4لC|ærƸ-ɖxhO lxM^"{n=09F5)z]3;Q$Mde)i ץL1KG}O NV#Ea@:*7`_ٵ/! &3T/"ǾvԹL$sǗ]h=/:ёx|B-]^VޥV\G gjF׶E%RZ/?tIRE&Uy+Uih%D} $A".m8 \YX=$GWz˳|Ȋ܇aP @򬛗촛1`<^YLF̃_L-I8/H?n,6#P-0$\N0l*#hO)y`k;)f4L#{5j\wۜɁ\*+2h$2?>D7k vkS_2%83}|Ntod8pX`r9=S,T*ӇFƆ`X^#Ջz;׎o?̜y?7  Iy +uXMJpTgȍah'8~%ӋϘ|7.NO 8юE8D\FY>RdE!` Ɓ$0@МXK&+4{~??c Ц-#sH D?PTVR ,-/ sl0d~ttub [009?ͬ}Ɋq`@/`C@ :@vI/C +]7~ЙF?9AW$1xL2} ‰I#6"fΚH5_%q;|%TpSN@FzL%x}}frcf4H|ߘk_f.RZU ۍ Χih 4I&,ǘSgu#3̌r|i{^j|뉉 Ǥrr \(/84̻\WEh2= DfF[B|,DP hLR}?9aa1Ԯ?!+r 0$܃rBLX{^9$$P@<duA`_닪Ղ $0GJ,&ۏ$%gR b3'*5wP$r]LKN?9R4Vͤ@qa1Cn/t`Xa3,l?7zC㿼ز67,Ved,̪" q6ĥb?︸ϓ{6I iݳ'L o,S Ȃ3f$HVaRfWE&>6\Ń!fnZEA|̾ `Vq '/# %a¨Ǒ8}W7P &߿V[`-@|EQ;a;2q$/ƍ뙂@ǚ ]vC1ZFW_~>;R6y0WH)U`t5}O_4sW1Hk]:>j\QT7&F?ōd9O3^~&ߘP}Ao Ǖp.o?532??3>24A|1$ƑG:T&0ޏę V8qʐ!Z !0Y#b@X/m8ٕ\,WC .t1-c1Ƞx8BF3X$h(/It7f NF61Tly7͚K }ԭ-A3sꨋ\X&A_be(kG'hݼtm>:2n {/!7ǻ o C e" ,@p|P ȁ  a`r:-RtԣCVd:PތqM&$ d#b T;5640?L|]3SZn5T$&,Hss톕 '!ژ?-U 3A[u&HvZ{ozy荹+jNy'zȫ(+*+q{M'F؈FG,e%+mZ]Q,/'Z.  N+ 0Cb ć0H7nK/C&Wu2ٕ\,W_+ 2̣+BCI8.F6,%}LbB1o*l ku^v8W"5L+Ұ9-IюJ"yԒEU/.(He ~+/31Sb]6eӣm?ݸ_70fPj23J7]\+IEŎ>n^Ϗ7wPQ/.,|f"Q_oDXiB\."/ e}=Cj]1F7XT ].ZR3m?lcr-]=éMt7cʣoq3v3l&Ddt"Z3-7G~tCcJNLjlk *[W//sGM3Ha1=tl CoVD27";"GYY[DWބ`&+&'/EVdjqxؓER.by.!sp; IšmȰPۭ͌ذ{|uJsZF>Vmn31ڭQlk*%VrEbt_vDM\@6܂vk> ji37C@]puFh+ IDAT),/v$A *O1s twK_Πu%0lt (fG:z Y>dE.Ki;YehAV&'=zjE3Z5lP9(mLЬHJv?KS]UHeV䠓~ߠ^dF|/.: iT;1bVd"k1iL#a?Vߴ:x{o£MOSz9nd$?\ՂHB( _le$b q>hhS=y{G[߮oMRC-?P o2/&g"ZsPxD$ n%"P$xNH~OR̓!@G.ZY˒j1e.p'a-)ُ"+ bp@>s]MI_]cd Ys "fQӕ{8bsSIRuLou6 %1..%u.Z{Qȸ@jϗNHg) m\º- (vcySj!=N}ws#y9Wd̫DĞw>@z7yXƗZNj5- k ͳ5-'yeLssȂ }+ ^l 29X'x/dB:XK'Kd8,Y&3W \C<@„*FS0qP;u)@`v#MtFqXD́ń\؃`ϫ؇oeմQޢq ÔH,Z{'dDUb>! = ЬYi+J#zcQ+#Udl|&muТCjc69J_6`sW‘W{ 5Z Y/tc|ppO] ':{D+/*-/!H^`l^2}T.^GZ<8$%D#o?Ee`a0ǩ&{,Y˒j\bc1sX.Bb"Ա\"Vb&qpJ&RZy | ^[TG(i))T␜r4h5kt%s&LƟ'IgEkzзTƁy%7uZF]=62{y~P<о¸]5/nq2v7Ñcn<%5d h@[74uh>Yhԑ+x\N^J]t^D#sɌ٤|:) 3Cd,2{.YEk5KȲ(v'd v助f8,Y&'R&b$9pl&0 )$IK{is =حlFG;H|XLt]k0#۹c]r ム1ꑹD#g u9(:xc-3pƾδO/eIR{}ŻPxcxr.l={Xa"c7o_^y8.PCġ}gM^Nw6 Vd^<:4h2N+qKN't1NQ=OH! (*CQBy憢 AarCIl'er59i%Y3xK!KLH6edG?Sr[kUDRȁ!/,f2ٶC/*'vˆ2 Y^Hq 6/XTwi ^K[4vxf[7!Dɧ0ģѷ{Ж '3*oʤ2@_n9qc 4uJWCkRm/}Fwxqcx_l_dQD{:x=%j7fpXK'=yCw&V4N>:=Ji?5>jRF:ms8 ypwAdK#gi͔:tW?N\A?, ^;ӘX4,⡰3^+U2֝5AzhݿIŴ$#=MO-2#8ݞ=Ē,Y2g̽oDx. zYZQ3\3ϝv+IC CDpjˉ;i.ZJ ;_ ;h2%2r֐3րĆu:~#Ĕ ff2ܖzn@e-D5g!$-Q09A}Ax!Bїh#X KS!+| ')_W̪lDO󒣻)}[(LB3];qSYt2C8#-y1ǩS|ϒ%Epk2Dk*pL8ݽ_^9~Y~39¹sbQt DPa“ArHi. Pgmİ+j7ɄLm3t9/b.o/,Q9tC"-ZvBG^<ȧ6v8:q/(G}X/Y =p5dAO\͒Dȱ@䈪íg>qJs f7],w"%UlILB?&bSBПKXjXn=X%'(ND\XivZLx.{(iwPk{ƚ,CvIF4.ЦfG:D9/(aUhW&:VJS`| *U+p.@1_"y`ñ쑠#_KYp4]{zi\F̖ur<חMղ@a1WKx#HY!\؋<vhnkf>0D~PHӟX|Ɋ\,W/ gcO ͂G ) Bf ?9f4A~P:(Ռh1ٱĦdǶW)37ge=C4)%ΟHW-=F])+3R$H_^aT&hwz;Ct ̉7<{^]#wzJ쉩uX &ػ7w?<9^u[=<{ۃ$pge4ŋvvb#aHY))3A|f}\2ҽ7]ɍa({'<(t"`0AA d =/Y>dE.K!be9ߓSV;yxrV09g^ZF|iMtĴd;/قll\=6:I*Œt(TU1#g3@b_u"s&}ՌYŮo3 @1vV<0ř>N՚dhZ`{)^,^Tڞ{a}`L ׉&p[D穖S#CIUW_*BħvzmlRYFf|#.cI !0"F,;<5_y*Y˒sop*Sd9'vX.|XI2JBdK-]\N^?i%Z!QQb'dX$PK⥚ \vi/=z U9̊ .W@젊`yiuX7-W$ָo͆43me4a./p;Qr9'B@5ӗrNQQR=OkeES=HIϱ F&'0xYT¸` ϋ.\?,"gdQ%YVEKV',| T8ݧlO Y˒sB0LAO;p =-8`Ain(`V ZX])pO(Y846 \C@R_XN2|sm{SYEx,3?r]ջre\.OAkܜiJ UquS]tfdjxƘl4/'rCJ~W*I6Mɱxa D1IYU N l&D>~Kw^jOY˒0qv#g}OV<|H 2ec9BrXՕdQD `BUcOd+<^Rdu@4wb-9ioPO>9;ÇYdaһ8=֥ӌ0'u7uh# EA>#cވ2꿸 n8q35ICDEAUtJkZ/3up/ d3WK7v^ݦ048x&'O`"8FE 2?8urY>dE.K/3 j,btnذvPOM9>볮G};B,0sv0 a| ;?rmNdZA  !2N"dPA9a|?b8/ЬQl;/nk807\lRG9$)SqfBBELv[RN^⒭=~,T._$A 3G4LD߮(EU)!+rY|(tJ3 ౳'2OFgL WF_.m;NGۊZ*RfEK.d Q 5Hi׍0eaAVZ @W-U,Ur}z*UqKb]/Va9ҳ%۝^us>-^Mm۫Ȉ}ܬwOrWf;N.; o+gՂ180PURSKJ\G,N8xdq1)ca$Jru .W-rI't38/ê ;Fz6չ]Y1 *Aw_fUMp5n% ٨kEӭ]?˘}NKDc]k Iw3bo0%=>^y^`",*"%ˇCbN F7#@ݭRErH<1tN;̦(~H$3l 9 $ i=BC})\d&7!>X}tRASv9scX6sEaE77Jɘ؛49x+-(VC}=mKċ^;3.ڲb00X a(Ml-/%_BԨ_]OY˒\bcaϞ=oO<$Δ,V1āw#gnUmj??>,% l9$Gk :)e$`B,65[H+!2^?HWW&M Kش loueM7tIES-HC(&?/xp`de;] ŰL']QʹtZs9FVAo]{GIK*m2/wUz$)$t0&(^6x# IVQeh2BvD]Y䞙idU%ˣde`A r>3,C ͫN|Ȋ\,Ϝ&Fi8ޗ@M86 <;3ɼ\Hǩg}'f^L9VN8#Ln߁8m S|N3`2S{\/\RTf\R7jfcY|K_shI@1x2u R,]3?O[etfS/!ֿO.˧=,Y>pi3"''rI0 &20_ˢ_-p-IH<CEFε\N@P8wD*[s轿7&ZҒUe@ps0d fs?Eu}A42`=9;i>'YS껎mq[bfR7u <%&?O6 'OO1Y˒CdQ=epLEy"R`;Aˇ&a#=iǗ8';}B;tXn[=Ha}k:]cOgD7K>_ 6f詽` H [ΰ<~a`dPfHQ&g] x1@=n$ D;󷾸7Mߐĥ~s.*Px yN|Ɋ\,.L n@o C:MuX߷cy, qf1ۢ~L( tAڱ_;}@ۻสÎ{ڕv{VZIlIvX8 I qC -d 8iI $3If褥 ͣ& $'|,n.oJ55iq綎wc7ֻ82>Iθ ɶ4RR.|jpD%~[R;#Gݙq\+=PRWs/}?w]}$E:|oܷ9S?PIai_7Eܥ8)F0.Wk{L' Y 5wVcnnҍɌ.IꂸFo{/ooxVg.uzG.uWJ޶ЈJO X,4XTw^w8 [!7ܕM&a+la]QQ{rwCȖV!9SWЧp@ _*=ݼ]tN(Ӫ_N4.h7*T3{*Z62Ѭ5yYKjP} NS pxm5Fvն{tk'e,UYj5YsYI;'oRFb>}/^KhkLϏj밞9|^p~3y0] PS_fɖowm9W̫ ٝú-q󔶵ȯ v{-y18}zӈUxjt%fks^m!)e}2 xQM <1ڻw/SBmZV6cΉ.UJs^Y=s+[<ݤdi:_Qq$):C EOܶYtm@IKtY@ԧCFD7FtU@R<=]t>{I9M+VoQYĀjЫ\#4Z7긇-^T ӱc/)ղ{ d|a]_YixV?kmQ< z*I!).UHa$ ,|JsSrMM.XJJVY/=;'O&R$r^Y?&URM˺-utBIUԩk֗v}mXbIS͙`BcWV&MtYVJV|~Čtk\fƪCP0OEmE\ŽgVϋpQ43NNYM&W~$RQ㫴]~wu}v2wGo ˶QO1 jf'N7My=wEeRZ`-ywμŧ֛]wtՊjB\v\V#&X'5::.9eK;c%ded7_%^ij/7Lj,#Y*ֶ맘^_Vۚ5G 7w&S"`~s_T*X ޛ˪-:WX|aG5>‰9Ԝ95|\Uk5PB~}7 (^HIENDB`auto/07p/doc/include/rev4.ps0000640000175000017500000002315613570013207013665 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 0 3068 moveto %%89 DP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 2320 320 moveto (x) 3805 320 PR (/) 3860 320 PR (T) 3915 320 PR 300 2720 moveto (u) 300 2720 PR 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (0) 660 460 PR 760 340 moveto (0) 815 340 PR (.) 870 340 PR (1) 925 340 PR (0) 980 340 PR 920 540 moveto 920 600 lineto stroke 920 600 moveto 1080 460 moveto (0) 1135 460 PR (.) 1190 460 PR (2) 1245 460 PR (0) 1300 460 PR 1240 540 moveto 1240 600 lineto stroke 1240 600 moveto 1400 340 moveto (0) 1455 340 PR (.) 1510 340 PR (3) 1565 340 PR (0) 1620 340 PR 1560 540 moveto 1560 600 lineto stroke 1560 600 moveto 1720 460 moveto (0) 1775 460 PR (.) 1830 460 PR (4) 1885 460 PR (0) 1940 460 PR 1880 540 moveto 1880 600 lineto stroke 1880 600 moveto 2040 340 moveto (0) 2095 340 PR (.) 2150 340 PR (5) 2205 340 PR (0) 2260 340 PR 2200 540 moveto 2200 600 lineto stroke 2200 600 moveto 2360 460 moveto (0) 2415 460 PR (.) 2470 460 PR (6) 2525 460 PR (0) 2580 460 PR 2520 540 moveto 2520 600 lineto stroke 2520 600 moveto 2680 340 moveto (0) 2735 340 PR (.) 2790 340 PR (7) 2845 340 PR (0) 2900 340 PR 2840 540 moveto 2840 600 lineto stroke 2840 600 moveto 3000 460 moveto (0) 3055 460 PR (.) 3110 460 PR (8) 3165 460 PR (0) 3220 460 PR 3160 540 moveto 3160 600 lineto stroke 3160 600 moveto 3320 340 moveto (0) 3375 340 PR (.) 3430 340 PR (9) 3485 340 PR (0) 3540 340 PR 3480 540 moveto 3480 600 lineto stroke 3480 600 moveto 3640 460 moveto (1) 3695 460 PR (.) 3750 460 PR (0) 3805 460 PR (0) 3860 460 PR 3800 540 moveto 3800 2600 lineto stroke 3800 2600 moveto 4 600 moveto (-) 334 600 PR (1) 389 600 PR (.) 444 600 PR (5) 499 600 PR 4 932 moveto (-) 334 932 PR (1) 389 932 PR (.) 444 932 PR (0) 499 932 PR 540 932 moveto 600 932 lineto stroke 600 932 moveto 4 1264 moveto (-) 334 1264 PR (0) 389 1264 PR (.) 444 1264 PR (5) 499 1264 PR 540 1264 moveto 600 1264 lineto stroke 600 1264 moveto 4 1600 moveto (0) 389 1600 PR (.) 444 1600 PR (0) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1932 moveto (0) 389 1932 PR (.) 444 1932 PR (5) 499 1932 PR 540 1932 moveto 600 1932 lineto stroke 600 1932 moveto 4 2264 moveto (1) 389 2264 PR (.) 444 2264 PR (0) 499 2264 PR 540 2264 moveto 600 2264 lineto stroke 600 2264 moveto 4 2600 moveto (1) 389 2600 PR (.) 444 2600 PR (5) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 1600 moveto 600 1600 lineto stroke 600 1600 moveto 600 1600 moveto 792 1600 lineto stroke 792 1600 moveto 984 1600 lineto stroke 984 1600 moveto 1176 1600 lineto stroke 1176 1600 moveto 1368 1600 lineto stroke 1368 1600 moveto 1452 1596 lineto stroke 1452 1596 moveto 1536 1596 lineto stroke 1536 1596 moveto 1620 1596 lineto stroke 1620 1596 moveto 1704 1596 lineto stroke 1704 1596 moveto 1752 1596 lineto stroke 1752 1596 moveto 1800 1596 lineto stroke 1800 1596 moveto 1848 1600 lineto stroke 1848 1600 moveto 1896 1600 lineto stroke 1896 1600 moveto 1928 1600 lineto stroke 1928 1600 moveto 1964 1600 lineto stroke 1964 1600 moveto 1996 1600 lineto stroke 1996 1600 moveto 2032 1600 lineto stroke 2032 1600 moveto 2060 1600 lineto stroke 2060 1600 moveto 2088 1600 lineto stroke 2088 1600 moveto 2116 1600 lineto stroke 2116 1600 moveto 2144 1600 lineto stroke 2144 1600 moveto 2164 1600 lineto stroke 2164 1600 moveto 2188 1600 lineto stroke 2188 1600 moveto 2208 1600 lineto stroke 2208 1600 moveto 2232 1596 lineto stroke 2232 1596 moveto 2248 1592 lineto stroke 2248 1592 moveto 2264 1584 lineto stroke 2264 1584 moveto 2284 1576 lineto stroke 2284 1576 moveto 2300 1564 lineto stroke 2300 1564 moveto 2316 1552 lineto stroke 2316 1552 moveto 2332 1536 lineto stroke 2332 1536 moveto 2344 1516 lineto stroke 2344 1516 moveto 2360 1496 lineto stroke 2360 1496 moveto 2372 1472 lineto stroke 2372 1472 moveto 2384 1448 lineto stroke 2384 1448 moveto 2396 1416 lineto stroke 2396 1416 moveto 2408 1384 lineto stroke 2408 1384 moveto 2420 1348 lineto stroke 2420 1348 moveto 2432 1312 lineto stroke 2432 1312 moveto 2444 1272 lineto stroke 2444 1272 moveto 2456 1228 lineto stroke 2456 1228 moveto 2464 1188 lineto stroke 2464 1188 moveto 2476 1144 lineto stroke 2476 1144 moveto 2484 1100 lineto stroke 2484 1100 moveto 2496 1056 lineto stroke 2496 1056 moveto 2504 1012 lineto stroke 2504 1012 moveto 2516 972 lineto stroke 2516 972 moveto 2524 932 lineto stroke 2524 932 moveto 2532 892 lineto stroke 2532 892 moveto 2544 852 lineto stroke 2544 852 moveto 2552 816 lineto stroke 2552 816 moveto 2564 784 lineto stroke 2564 784 moveto 2576 760 lineto stroke 2576 760 moveto 2584 740 lineto stroke 2584 740 moveto 2592 724 lineto stroke 2592 724 moveto 2604 716 lineto stroke 2604 716 moveto 2612 716 lineto stroke 2612 716 moveto 2620 720 lineto stroke 2620 720 moveto 2628 728 lineto stroke 2628 728 moveto 2640 744 lineto stroke 2640 744 moveto 2648 760 lineto stroke 2648 760 moveto 2656 788 lineto stroke 2656 788 moveto 2668 816 lineto stroke 2668 816 moveto 2676 848 lineto stroke 2676 848 moveto 2684 884 lineto stroke 2684 884 moveto 2696 924 lineto stroke 2696 924 moveto 2704 968 lineto stroke 2704 968 moveto 2716 1016 lineto stroke 2716 1016 moveto 2724 1064 lineto stroke 2724 1064 moveto 2736 1116 lineto stroke 2736 1116 moveto 2748 1168 lineto stroke 2748 1168 moveto 2760 1220 lineto stroke 2760 1220 moveto 2772 1268 lineto stroke 2772 1268 moveto 2788 1324 lineto stroke 2788 1324 moveto 2800 1376 lineto stroke 2800 1376 moveto 2812 1424 lineto stroke 2812 1424 moveto 2828 1472 lineto stroke 2828 1472 moveto 2844 1520 lineto stroke 2844 1520 moveto 2856 1564 lineto stroke 2856 1564 moveto 2872 1608 lineto stroke 2872 1608 moveto 2888 1656 lineto stroke 2888 1656 moveto 2900 1692 lineto stroke 2900 1692 moveto 2912 1736 lineto stroke 2912 1736 moveto 2924 1776 lineto stroke 2924 1776 moveto 2940 1820 lineto stroke 2940 1820 moveto 2952 1868 lineto stroke 2952 1868 moveto 2964 1920 lineto stroke 2964 1920 moveto 2976 1972 lineto stroke 2976 1972 moveto 2988 2024 lineto stroke 2988 2024 moveto 3000 2072 lineto stroke 3000 2072 moveto 3008 2120 lineto stroke 3008 2120 moveto 3020 2168 lineto stroke 3020 2168 moveto 3032 2212 lineto stroke 3032 2212 moveto 3040 2256 lineto stroke 3040 2256 moveto 3048 2292 lineto stroke 3048 2292 moveto 3056 2332 lineto stroke 3056 2332 moveto 3068 2364 lineto stroke 3068 2364 moveto 3076 2392 lineto stroke 3076 2392 moveto 3084 2420 lineto stroke 3084 2420 moveto 3092 2440 lineto stroke 3092 2440 moveto 3104 2460 lineto stroke 3104 2460 moveto 3112 2472 lineto stroke 3112 2472 moveto 3120 2480 lineto stroke 3120 2480 moveto 3128 2480 lineto stroke 3128 2480 moveto 3140 2476 lineto stroke 3140 2476 moveto 3148 2464 lineto stroke 3148 2464 moveto 3160 2448 lineto stroke 3160 2448 moveto 3168 2424 lineto stroke 3168 2424 moveto 3180 2396 lineto stroke 3180 2396 moveto 3188 2364 lineto stroke 3188 2364 moveto 3196 2332 lineto stroke 3196 2332 moveto 3208 2292 lineto stroke 3208 2292 moveto 3216 2252 lineto stroke 3216 2252 moveto 3228 2200 lineto stroke 3228 2200 moveto 3240 2148 lineto stroke 3240 2148 moveto 3252 2096 lineto stroke 3252 2096 moveto 3264 2044 lineto stroke 3264 2044 moveto 3276 1992 lineto stroke 3276 1992 moveto 3288 1944 lineto stroke 3288 1944 moveto 3304 1896 lineto stroke 3304 1896 moveto 3316 1852 lineto stroke 3316 1852 moveto 3332 1808 lineto stroke 3332 1808 moveto 3344 1768 lineto stroke 3344 1768 moveto 3360 1736 lineto stroke 3360 1736 moveto 3376 1704 lineto stroke 3376 1704 moveto 3392 1676 lineto stroke 3392 1676 moveto 3412 1656 lineto stroke 3412 1656 moveto 3432 1636 lineto stroke 3432 1636 moveto 3448 1624 lineto stroke 3448 1624 moveto 3472 1612 lineto stroke 3472 1612 moveto 3500 1604 lineto stroke 3500 1604 moveto 3524 1596 lineto stroke 3524 1596 moveto 3548 1596 lineto stroke 3548 1596 moveto 3580 1596 lineto stroke 3580 1596 moveto 3612 1596 lineto stroke 3612 1596 moveto 3644 1596 lineto stroke 3644 1596 moveto 3672 1596 lineto stroke 3672 1596 moveto 3704 1596 lineto stroke 3704 1596 moveto 3736 1596 lineto stroke 3736 1596 moveto 3768 1596 lineto stroke 3768 1596 moveto 3800 1600 lineto stroke 3800 1600 moveto 0 3068 moveto showpage auto/07p/doc/include/notshifted.eps0000640000175000017500000012406513570013207015322 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%Creator: Tk Canvas Widget %%For: Bart Oldeman,1.47,9798, %%Title: Window .140128476.139955732 %%CreationDate: Fri Nov 30 10:30:09 2001 %%BoundingBox: 118 222 494 570 %%Pages: 1 %%DocumentData: Clean7Bit %%Orientation: Portrait %%DocumentNeededResources: font Helvetica %%EndComments %%BeginProlog 50 dict begin % This is a standard prolog for Postscript generated by Tk's canvas % widget. % RCS: @(#) $Id: notshifted.eps,v 1.1 2006-08-27 20:13:20 bartoldeman Exp $ % The definitions below just define all of the variables used in % any of the procedures here. This is needed for obscure reasons % explained on p. 716 of the Postscript manual (Section H.2.7, % "Initializing Variables," in the section on Encapsulated Postscript). /baseline 0 def /stipimage 0 def /height 0 def /justify 0 def /lineLength 0 def /spacing 0 def /stipple 0 def /strings 0 def /xoffset 0 def /yoffset 0 def /tmpstip null def % Define the array ISOLatin1Encoding (which specifies how characters are % encoded for ISO-8859-1 fonts), if it isn't already present (Postscript % level 2 is supposed to define it, but level 1 doesn't). systemdict /ISOLatin1Encoding known not { /ISOLatin1Encoding [ /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright /parenleft /parenright /asterisk /plus /comma /minus /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /A /B /C /D /E /F /G /H /I /J /K /L /M /N /O /P /Q /R /S /T /U /V /W /X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore /quoteleft /a /b /c /d /e /f /g /h /i /j /k /l /m /n /o /p /q /r /s /t /u /v /w /x /y /z /braceleft /bar /braceright /asciitilde /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /space /dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent /dieresis /space /ring /cedilla /space /hungarumlaut /ogonek /caron /space /exclamdown /cent /sterling /currency /yen /brokenbar /section /dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron /degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered /cedillar /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown /Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla /Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis /Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply /Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls /agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla /egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis /eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide /oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis ] def } if % font ISOEncode font % This procedure changes the encoding of a font from the default % Postscript encoding to ISOLatin1. It's typically invoked just % before invoking "setfont". The body of this procedure comes from % Section 5.6.1 of the Postscript book. /ISOEncode { dup length dict begin {1 index /FID ne {def} {pop pop} ifelse} forall /Encoding ISOLatin1Encoding def currentdict end % I'm not sure why it's necessary to use "definefont" on this new % font, but it seems to be important; just use the name "Temporary" % for the font. /Temporary exch definefont } bind def % StrokeClip % % This procedure converts the current path into a clip area under % the assumption of stroking. It's a bit tricky because some Postscript % interpreters get errors during strokepath for dashed lines. If % this happens then turn off dashes and try again. /StrokeClip { {strokepath} stopped { (This Postscript printer gets limitcheck overflows when) = (stippling dashed lines; lines will be printed solid instead.) = [] 0 setdash strokepath} if clip } bind def % desiredSize EvenPixels closestSize % % The procedure below is used for stippling. Given the optimal size % of a dot in a stipple pattern in the current user coordinate system, % compute the closest size that is an exact multiple of the device's % pixel size. This allows stipple patterns to be displayed without % aliasing effects. /EvenPixels { % Compute exact number of device pixels per stipple dot. dup 0 matrix currentmatrix dtransform dup mul exch dup mul add sqrt % Round to an integer, make sure the number is at least 1, and compute % user coord distance corresponding to this. dup round dup 1 lt {pop 1} if exch div mul } bind def % width height string StippleFill -- % % Given a path already set up and a clipping region generated from % it, this procedure will fill the clipping region with a stipple % pattern. "String" contains a proper image description of the % stipple pattern and "width" and "height" give its dimensions. Each % stipple dot is assumed to be about one unit across in the current % user coordinate system. This procedure trashes the graphics state. /StippleFill { % The following code is needed to work around a NeWSprint bug. /tmpstip 1 index def % Change the scaling so that one user unit in user coordinates % corresponds to the size of one stipple dot. 1 EvenPixels dup scale % Compute the bounding box occupied by the path (which is now % the clipping region), and round the lower coordinates down % to the nearest starting point for the stipple pattern. Be % careful about negative numbers, since the rounding works % differently on them. pathbbox 4 2 roll 5 index div dup 0 lt {1 sub} if cvi 5 index mul 4 1 roll 6 index div dup 0 lt {1 sub} if cvi 6 index mul 3 2 roll % Stack now: width height string y1 y2 x1 x2 % Below is a doubly-nested for loop to iterate across this area % in units of the stipple pattern size, going up columns then % across rows, blasting out a stipple-pattern-sized rectangle at % each position 6 index exch { 2 index 5 index 3 index { % Stack now: width height string y1 y2 x y gsave 1 index exch translate 5 index 5 index true matrix tmpstip imagemask grestore } for pop } for pop pop pop pop pop } bind def % -- AdjustColor -- % Given a color value already set for output by the caller, adjusts % that value to a grayscale or mono value if requested by the CL % variable. /AdjustColor { CL 2 lt { currentgray CL 0 eq { .5 lt {0} {1} ifelse } if setgray } if } bind def % x y strings spacing xoffset yoffset justify stipple DrawText -- % This procedure does all of the real work of drawing text. The % color and font must already have been set by the caller, and the % following arguments must be on the stack: % % x, y - Coordinates at which to draw text. % strings - An array of strings, one for each line of the text item, % in order from top to bottom. % spacing - Spacing between lines. % xoffset - Horizontal offset for text bbox relative to x and y: 0 for % nw/w/sw anchor, -0.5 for n/center/s, and -1.0 for ne/e/se. % yoffset - Vertical offset for text bbox relative to x and y: 0 for % nw/n/ne anchor, +0.5 for w/center/e, and +1.0 for sw/s/se. % justify - 0 for left justification, 0.5 for center, 1 for right justify. % stipple - Boolean value indicating whether or not text is to be % drawn in stippled fashion. If text is stippled, % procedure StippleText must have been defined to call % StippleFill in the right way. % % Also, when this procedure is invoked, the color and font must already % have been set for the text. /DrawText { /stipple exch def /justify exch def /yoffset exch def /xoffset exch def /spacing exch def /strings exch def % First scan through all of the text to find the widest line. /lineLength 0 def strings { stringwidth pop dup lineLength gt {/lineLength exch def} {pop} ifelse newpath } forall % Compute the baseline offset and the actual font height. 0 0 moveto (TXygqPZ) false charpath pathbbox dup /baseline exch def exch pop exch sub /height exch def pop newpath % Translate coordinates first so that the origin is at the upper-left % corner of the text's bounding box. Remember that x and y for % positioning are still on the stack. translate lineLength xoffset mul strings length 1 sub spacing mul height add yoffset mul translate % Now use the baseline and justification information to translate so % that the origin is at the baseline and positioning point for the % first line of text. justify lineLength mul baseline neg translate % Iterate over each of the lines to output it. For each line, % compute its width again so it can be properly justified, then % display it. strings { dup stringwidth pop justify neg mul 0 moveto stipple { % The text is stippled, so turn it into a path and print % by calling StippledText, which in turn calls StippleFill. % Unfortunately, many Postscript interpreters will get % overflow errors if we try to do the whole string at % once, so do it a character at a time. gsave /char (X) def { char 0 3 -1 roll put currentpoint gsave char true charpath clip StippleText grestore char stringwidth translate moveto } forall grestore } {show} ifelse 0 spacing neg translate } forall } bind def %%EndProlog %%BeginSetup /CL 2 def %%IncludeResource: font Helvetica %%EndSetup %%Page: 1 1 save 306.0 396.0 translate 0.7197 0.7197 scale -261 -241 translate 0 482 moveto 522 482 lineto 522 0 lineto 0 0 lineto closepath clip newpath gsave 80 442 moveto 480 442 lineto 480 42 lineto 80 42 lineto 80 442 lineto 1 setlinejoin 1 setlinecap 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 80 229.835903996 moveto 81.0226043928 240.941308728 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 81.0226043928 240.941308728 moveto 82.0452087856 252.273356476 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 82.0452087856 252.273356476 moveto 83.0678131784 263.781738696 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 83.0678131784 263.781738696 moveto 84.0904175712 275.41091652 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 84.0904175712 275.41091652 moveto 85.1054221472 287.01370862 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 85.1054221472 287.01370862 moveto 86.1204267232 298.613411128 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 86.1204267232 298.613411128 moveto 87.1354312992 310.144400148 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 87.1354312992 310.144400148 moveto 88.1504358752 321.539103036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 88.1504358752 321.539103036 moveto 89.2189306824 333.31171364 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 89.2189306824 333.31171364 moveto 90.2874254892 344.777748816 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 90.2874254892 344.777748816 moveto 91.355920296 355.859543164 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 91.355920296 355.859543164 moveto 92.4244151032 366.482750872 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 92.4244151032 366.482750872 moveto 93.6463421392 377.980039448 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 93.6463421392 377.980039448 moveto 94.8682691752 388.692087512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 94.8682691752 388.692087512 moveto 96.0901962112 398.536856012 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 96.0901962112 398.536856012 moveto 97.3121232472 407.44624274 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 97.3121232472 407.44624274 moveto 98.3839075876 414.448509324 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 98.3839075876 414.448509324 moveto 99.455691928 420.66406704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 99.455691928 420.66406704 moveto 100.527476268 426.076154568 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 100.527476268 426.076154568 moveto 101.599260609 430.676978512 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 101.599260609 430.676978512 moveto 102.784711208 434.822048404 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 102.784711208 434.822048404 moveto 103.970161806 437.988170084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 103.970161806 437.988170084 moveto 105.155612404 440.198267416 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 105.155612404 440.198267416 moveto 106.341063003 441.484512064 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 106.341063003 441.484512064 moveto 107.564762247 441.885741532 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 107.564762247 441.885741532 moveto 108.788461491 441.39631648 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 108.788461491 441.39631648 moveto 110.012160735 440.072569516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 110.012160735 440.072569516 moveto 111.23585998 437.974611248 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 111.23585998 437.974611248 moveto 112.493061584 435.07862626 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 112.493061584 435.07862626 moveto 113.750263188 431.500239848 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 113.750263188 431.500239848 moveto 115.007464792 427.307954112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 115.007464792 427.307954112 moveto 116.264666396 422.568983304 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 116.264666396 422.568983304 moveto 117.804315985 416.11571938 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 117.804315985 416.11571938 moveto 119.343965574 409.053590636 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 119.343965574 409.053590636 moveto 120.883615164 401.488429864 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 120.883615164 401.488429864 moveto 122.423264752 393.517612944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 122.423264752 393.517612944 moveto 123.927022512 385.425857688 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 123.927022512 385.425857688 moveto 125.430780272 377.1057916 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 125.430780272 377.1057916 moveto 126.934538028 368.623663952 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 126.934538028 368.623663952 moveto 128.438295788 360.038111252 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 128.438295788 360.038111252 moveto 130.117791976 350.38983484 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 130.117791976 350.38983484 moveto 131.79728816 340.738292612 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 131.79728816 340.738292612 moveto 133.476784348 331.135888844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 133.476784348 331.135888844 moveto 135.156280532 321.626547356 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 135.156280532 321.626547356 moveto 137.172477332 310.384400744 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 137.172477332 310.384400744 moveto 139.188674132 299.37862934 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 139.188674132 299.37862934 moveto 141.204870932 288.647905644 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 141.204870932 288.647905644 moveto 143.221067728 278.221007768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 143.221067728 278.221007768 moveto 145.25810232 268.01566402 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 145.25810232 268.01566402 moveto 147.295136912 258.155293212 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 147.295136912 258.155293212 moveto 149.332171504 248.6481876 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 149.332171504 248.6481876 moveto 151.369206092 239.497930604 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 151.369206092 239.497930604 moveto 153.634265864 229.74199038 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 153.634265864 229.74199038 moveto 155.899325636 220.422285924 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 155.899325636 220.422285924 moveto 158.164385404 211.530818188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 158.164385404 211.530818188 moveto 160.429445176 203.056990244 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 160.429445176 203.056990244 moveto 163.182062476 193.30317012 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 163.182062476 193.30317012 moveto 165.934679772 184.122676284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 165.934679772 184.122676284 moveto 168.687297072 175.489005944 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 168.687297072 175.489005944 moveto 171.439914368 167.37483196 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 171.439914368 167.37483196 moveto 175.228185132 157.006645036 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 175.228185132 157.006645036 moveto 179.016455896 147.499867844 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 179.016455896 147.499867844 moveto 182.804726656 138.786772768 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 182.804726656 138.786772768 moveto 186.59299742 130.803089664 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 186.59299742 130.803089664 moveto 191.126621564 122.12332216 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 191.126621564 122.12332216 moveto 195.660245708 114.306943344 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 195.660245708 114.306943344 moveto 200.193869856 107.267346904 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 200.193869856 107.267346904 moveto 204.727494 100.926082188 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 204.727494 100.926082188 moveto 210.153316352 94.1564284 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 210.153316352 94.1564284 moveto 215.579138704 88.178403552 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 215.579138704 88.178403552 moveto 221.00496106 82.89722722 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 221.00496106 82.89722722 moveto 226.430783412 78.229612175 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 226.430783412 78.229612175 moveto 233.157288576 73.186328084 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 233.157288576 73.186328084 moveto 239.88379374 68.854291699 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 239.88379374 68.854291699 moveto 246.610298904 65.1310659609999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 246.610298904 65.1310659609999 moveto 253.336804072 61.9293377079999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 253.336804072 61.9293377079999 moveto 260.7796646 58.905158 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 260.7796646 58.905158 moveto 268.222525132 56.343560641 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 268.222525132 56.343560641 moveto 275.66538566 54.172781743 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 275.66538566 54.172781743 moveto 283.108246192 52.3324142189999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 283.108246192 52.3324142189999 moveto 291.62221756 50.5675065569999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 291.62221756 50.5675065569999 moveto 300.136188928 49.105395947 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 300.136188928 49.105395947 moveto 308.6501603 47.893717905 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 308.6501603 47.893717905 moveto 317.164131668 46.8892936349999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 317.164131668 46.8892936349999 moveto 325.80297414 46.0455325959999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 325.80297414 46.0455325959999 moveto 334.441816616 45.3480245069999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 334.441816616 45.3480245069999 moveto 343.080659088 44.771655559 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 343.080659088 44.771655559 moveto 351.719501564 44.2960758529999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 351.719501564 44.2960758529999 moveto 357.658539168 44.019092422 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 357.658539168 44.019092422 moveto 363.597576776 43.778020704 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 363.597576776 43.778020704 moveto 369.536614384 43.569884057 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 369.536614384 43.569884057 moveto 375.475651988 43.393062166 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 375.475651988 43.393062166 moveto 379.852515616 43.2827955399999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 379.852515616 43.2827955399999 moveto 384.22937924 43.1905032559999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 384.22937924 43.1905032559999 moveto 388.606242864 43.118221354 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 388.606242864 43.118221354 moveto 392.983106492 43.0695350409999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 392.983106492 43.0695350409999 moveto 396.450846124 43.0513911579999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 396.450846124 43.0513911579999 moveto 399.91858576 43.055757883 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 399.91858576 43.055757883 moveto 403.386325396 43.088486539 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 403.386325396 43.088486539 moveto 406.854065032 43.157665061 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 406.854065032 43.157665061 moveto 409.7428564 43.250946343 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 409.7428564 43.250946343 moveto 412.631647768 43.3855089979999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 412.631647768 43.3855089979999 moveto 415.52043914 43.57227268 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 415.52043914 43.57227268 moveto 418.409230508 43.825327435 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 418.409230508 43.825327435 moveto 420.921441912 44.113195182 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 420.921441912 44.113195182 moveto 423.433653316 44.479725769 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 423.433653316 44.479725769 moveto 425.945864716 44.943544629 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 425.945864716 44.943544629 moveto 428.45807612 45.527749596 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 428.45807612 45.527749596 moveto 430.792360612 46.203305784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 430.792360612 46.203305784 moveto 433.1266451 47.03529431 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 433.1266451 47.03529431 moveto 435.460929592 48.0577376479999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 435.460929592 48.0577376479999 moveto 437.795214084 49.3118323919999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 437.795214084 49.3118323919999 moveto 440.084637672 50.81465608 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 440.084637672 50.81465608 moveto 442.374061264 52.644088214 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 442.374061264 52.644088214 moveto 444.663484852 54.867121348 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 444.663484852 54.867121348 moveto 446.95290844 57.563162183 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 446.95290844 57.563162183 moveto 448.787833536 60.127825053 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 448.787833536 60.127825053 moveto 450.622758632 63.1111713559999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 450.622758632 63.1111713559999 moveto 452.457683728 66.575255868 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 452.457683728 66.575255868 moveto 454.292608828 70.589219514 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 454.292608828 70.589219514 moveto 455.738658868 74.1896218549999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 455.738658868 74.1896218549999 moveto 457.184708908 78.2191295449999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 457.184708908 78.2191295449999 moveto 458.630758952 82.720522376 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 458.630758952 82.720522376 moveto 460.076808992 87.7386499319999 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 460.076808992 87.7386499319999 moveto 461.394586624 92.800884984 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 461.394586624 92.800884984 moveto 462.712364256 98.366604632 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 462.712364256 98.366604632 moveto 464.030141888 104.471528748 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 464.030141888 104.471528748 moveto 465.34791952 111.150580112 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 465.34791952 111.150580112 moveto 466.604057464 118.082217564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 466.604057464 118.082217564 moveto 467.860195408 125.592293156 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 467.860195408 125.592293156 moveto 469.116333348 133.703918032 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 469.116333348 133.703918032 moveto 470.372471292 142.435750976 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 470.372471292 142.435750976 moveto 471.615872832 151.702709764 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 471.615872832 151.702709764 moveto 472.859274368 161.596136784 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 472.859274368 161.596136784 moveto 474.102675908 172.113886492 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 474.102675908 172.113886492 moveto 475.346077448 183.2445219 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 475.346077448 183.2445219 moveto 476.509558088 194.195603564 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 476.509558088 194.195603564 moveto 477.673038724 205.63722528 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 477.673038724 205.63722528 moveto 478.836519364 217.532808516 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 478.836519364 217.532808516 moveto 480 229.835903996 lineto 0 setlinecap 1 setlinejoin 2 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave 0 482 moveto 520 482 lineto 520 443 lineto 0 443 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 0 482 moveto 0 2 lineto 79 2 lineto 79 482 lineto 0 482 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 520 482 lineto 481 482 lineto 481 2 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 520 2 moveto 0 2 lineto 0 41 lineto 520 41 lineto 520 2 lineto 0.863 0.863 0.863 setrgbcolor AdjustColor eofill grestore gsave 80 42 moveto 80 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 80 34 [ (0.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 160 26 [ (2.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 160 42 moveto 160 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 240 42 moveto 240 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 240 34 [ (4.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 240 42 moveto 240 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 320 42 moveto 320 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 320 26 [ (6.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 320 42 moveto 320 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 400 42 moveto 400 34 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 400 34 [ (8.00e-01) ] 14 -0.5 0 0 false DrawText grestore gsave 400 42 moveto 400 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 480 42 moveto 480 26 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 480 26 [ (1.00e+00) ] 14 -0.5 0 0 false DrawText grestore gsave 80 442 moveto 64 442 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 442 [ (1.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 64 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 362 [ (8.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 362 moveto 480 362 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 282 moveto 64 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 282 [ (6.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 282 moveto 480 282 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 202 moveto 64 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 202 [ (4.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 202 moveto 480 202 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 122 moveto 64 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 122 [ (2.00e-01) ] 14 -1 0.5 0 false DrawText grestore gsave 80 122 moveto 480 122 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor StrokeClip 16 16 <5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555aaaa5555 aaaa> StippleFill grestore gsave 80 42 moveto 64 42 lineto 0 setlinecap 1 setlinejoin 1 setlinewidth [] 0 setdash 0.000 0.000 0.000 setrgbcolor AdjustColor stroke grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 64 42 [ (0.00e+00) ] 14 -1 0.5 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 24 470 [ (Columns 0) ] 14 -0 0 0 false DrawText grestore gsave /Helvetica findfont 9 scalefont ISOEncode setfont 0.000 0.000 0.000 setrgbcolor AdjustColor 496 6 [ (Columns 't') ] 14 -1 1 0 false DrawText grestore restore showpage %%Trailer end %%EOF auto/07p/doc/include/ab1.ps0000640000175000017500000004242313570013207013446 0ustar sksk%!PS-Adobe-1.0 EPSF-2.0 %%DocumentFonts: Courier %%Title: pstek prolog file, version 1.0 @(#)pstek.pro 1.10 %%Creator: Michael Fischbein %% Copyright 1987 Michael Fischbein. Commercial reproduction prohibited; %% non-profit reproduction and distribution encouraged. %%CreationDate: %?% 5 June 1987 %%For: tektronics-to-PS converter %%BoundingBox: 0 395 560 740 %%EndComments gsave -30 800 translate -90 rotate 0.75 0.75 scale % Font definitions (make 3/4 functions to avoid scaling if not needed) /FntH /Courier findfont 80 scalefont def /DFntL { /FntL /Courier findfont 73.4 scalefont def } def /DFntM { /FntM /Courier findfont 50.2 scalefont def } def /DFntS { /FntS /Courier findfont 44 scalefont def } def % tektronix line styles /NV { [] 0 setdash } def % normal vectors /DV { [8] 0 setdash } def % dotted vectors /DDV { [8 8 32 8] 0 setdash } def % dot-dash vectors /SDV { [32 8] 0 setdash } def % short-dash vectors /LDV { [64 8] 0 setdash } def % long-dash vectors % Defocussed Z axis and Focussed Z axis /DZ { .5 setgray } def /FZ { 0 setgray } def /PR % char x y -> - prints character { moveto show } def /NP % - -> - new page % change default scale and orentation to match tek's { 572 40 translate % leave a border 90 rotate % .71707 .692308 scale % 0-1023X, 0-780Y .1730769 .17626953 scale %0-4096X, 0-3120Y } def /DP % tsizey -> - erase and home { clippath 1 setgray fill 0 setgray 0 exch moveto } def FntH setfont NP 592 540 moveto 592 2600 lineto stroke 592 2600 moveto 600 2600 lineto stroke 600 2600 moveto 600 600 lineto stroke 600 600 moveto 540 600 moveto 3800 600 lineto stroke 3800 600 moveto 3800 592 lineto stroke 3800 592 moveto 540 592 lineto stroke 540 592 moveto 440 460 moveto (0) 495 460 PR (.) 550 460 PR (0) 605 460 PR (8) 660 460 PR (0) 715 460 PR 972 460 moveto (0) 1027 460 PR (.) 1082 460 PR (0) 1137 460 PR (9) 1192 460 PR (0) 1247 460 PR 1132 540 moveto 1132 600 lineto stroke 1132 600 moveto 1504 460 moveto (0) 1559 460 PR (.) 1614 460 PR (1) 1669 460 PR (0) 1724 460 PR (0) 1779 460 PR 1664 540 moveto 1664 600 lineto stroke 1664 600 moveto 2036 460 moveto (0) 2091 460 PR (.) 2146 460 PR (1) 2201 460 PR (1) 2256 460 PR (0) 2311 460 PR 2196 540 moveto 2196 600 lineto stroke 2196 600 moveto 2572 460 moveto (0) 2627 460 PR (.) 2682 460 PR (1) 2737 460 PR (2) 2792 460 PR (0) 2847 460 PR 2732 540 moveto 2732 600 lineto stroke 2732 600 moveto 3104 460 moveto (0) 3159 460 PR (.) 3214 460 PR (1) 3269 460 PR (3) 3324 460 PR (0) 3379 460 PR 3264 540 moveto 3264 600 lineto stroke 3264 600 moveto 3636 460 moveto (0) 3691 460 PR (.) 3746 460 PR (1) 3801 460 PR (4) 3856 460 PR (0) 3911 460 PR 3796 540 moveto 3796 2600 lineto stroke 3796 2600 moveto 4 600 moveto (0) 389 600 PR (.) 444 600 PR (5) 499 600 PR 4 848 moveto (1) 389 848 PR (.) 444 848 PR (0) 499 848 PR 540 848 moveto 600 848 lineto stroke 600 848 moveto 4 1100 moveto (1) 389 1100 PR (.) 444 1100 PR (5) 499 1100 PR 540 1100 moveto 600 1100 lineto stroke 600 1100 moveto 4 1348 moveto (2) 389 1348 PR (.) 444 1348 PR (0) 499 1348 PR 540 1348 moveto 600 1348 lineto stroke 600 1348 moveto 4 1600 moveto (2) 389 1600 PR (.) 444 1600 PR (5) 499 1600 PR 540 1600 moveto 600 1600 lineto stroke 600 1600 moveto 4 1848 moveto (3) 389 1848 PR (.) 444 1848 PR (0) 499 1848 PR 540 1848 moveto 600 1848 lineto stroke 600 1848 moveto 4 2100 moveto (3) 389 2100 PR (.) 444 2100 PR (5) 499 2100 PR 540 2100 moveto 600 2100 lineto stroke 600 2100 moveto 4 2348 moveto (4) 389 2348 PR (.) 444 2348 PR (0) 499 2348 PR 540 2348 moveto 600 2348 lineto stroke 600 2348 moveto 4 2600 moveto (4) 389 2600 PR (.) 444 2600 PR (5) 499 2600 PR 540 2600 moveto 3800 2600 lineto stroke 3800 2600 moveto 600 648 moveto 732 664 lineto stroke 732 664 moveto 908 692 lineto stroke 908 692 moveto 1064 716 lineto stroke 1064 716 moveto 1204 740 lineto stroke 1204 740 moveto 1332 764 lineto stroke 1332 764 moveto 1440 792 lineto stroke 1440 792 moveto 1540 816 lineto stroke 1540 816 moveto 1624 840 lineto stroke 1624 840 moveto 1700 864 lineto stroke 1700 864 moveto 1764 892 lineto stroke 1764 892 moveto 1816 916 lineto stroke 1816 916 moveto 1860 940 lineto stroke 1860 940 moveto 1896 964 lineto stroke 1896 964 moveto 1924 992 lineto stroke 1924 992 moveto 1944 1016 lineto stroke 1944 1016 moveto 1960 1040 lineto stroke 1960 1040 moveto 1968 1064 lineto stroke 1968 1064 moveto 1968 1064 moveto 1972 1088 lineto stroke 1972 1088 moveto 1968 1112 moveto 1968 1116 lineto stroke 1968 1116 moveto 1968 1116 moveto 1964 1136 lineto stroke 1964 1136 moveto 1952 1156 moveto 1948 1164 lineto stroke 1948 1164 moveto 1948 1164 moveto 1944 1176 lineto stroke 1944 1176 moveto 1928 1196 moveto 1916 1216 lineto stroke 1916 1216 moveto 1916 1216 moveto 1916 1216 lineto stroke 1916 1216 moveto 1900 1236 moveto 1896 1240 lineto stroke 1896 1240 moveto 1896 1240 moveto 1884 1252 lineto stroke 1884 1252 moveto 1868 1268 moveto 1848 1284 lineto stroke 1848 1284 moveto 1832 1300 moveto 1816 1316 lineto stroke 1816 1316 moveto 1816 1316 moveto 1816 1316 lineto stroke 1816 1316 moveto 1796 1332 moveto 1784 1340 lineto stroke 1784 1340 moveto 1784 1340 moveto 1776 1344 lineto stroke 1776 1344 moveto 1760 1360 moveto 1752 1364 lineto stroke 1752 1364 moveto 1752 1364 moveto 1740 1372 lineto stroke 1740 1372 moveto 1720 1388 moveto 1720 1392 lineto stroke 1720 1392 moveto 1720 1392 moveto 1704 1400 lineto stroke 1704 1400 moveto 1684 1416 moveto 1664 1428 lineto stroke 1664 1428 moveto 1644 1444 moveto 1624 1456 lineto stroke 1624 1456 moveto 1608 1468 moveto 1588 1484 lineto stroke 1588 1484 moveto 1568 1496 moveto 1548 1512 lineto stroke 1548 1512 moveto 1528 1524 moveto 1508 1536 lineto stroke 1508 1536 moveto 1488 1552 moveto 1472 1564 lineto stroke 1472 1564 moveto 1452 1576 moveto 1432 1592 lineto stroke 1432 1592 moveto 1432 1592 moveto 1432 1592 lineto stroke 1432 1592 moveto 1412 1604 moveto 1400 1616 lineto stroke 1400 1616 moveto 1400 1616 moveto 1392 1620 lineto stroke 1392 1620 moveto 1376 1632 moveto 1364 1640 lineto stroke 1364 1640 moveto 1364 1640 moveto 1356 1648 lineto stroke 1356 1648 moveto 1336 1660 moveto 1332 1664 lineto stroke 1332 1664 moveto 1332 1664 moveto 1320 1676 lineto stroke 1320 1676 moveto 1300 1688 moveto 1300 1692 lineto stroke 1300 1692 moveto 1300 1692 moveto 1280 1704 lineto stroke 1280 1704 moveto 1264 1720 moveto 1244 1736 lineto stroke 1244 1736 moveto 1228 1752 moveto 1212 1764 lineto stroke 1212 1764 moveto 1212 1764 moveto 1212 1768 lineto stroke 1212 1768 moveto 1192 1784 moveto 1184 1792 lineto stroke 1184 1792 moveto 1184 1792 moveto 1176 1800 lineto stroke 1176 1800 moveto 1160 1816 moveto 1144 1836 lineto stroke 1144 1836 moveto 1132 1852 moveto 1124 1864 lineto stroke 1124 1864 moveto 1124 1864 moveto 1116 1872 lineto stroke 1116 1872 moveto 1104 1892 moveto 1092 1912 lineto stroke 1092 1912 moveto 1084 1936 moveto 1084 1940 lineto stroke 1084 1940 moveto 1084 1940 moveto 1080 1960 lineto stroke 1080 1960 moveto 1076 1980 moveto 1076 1992 lineto stroke 1076 1992 moveto 1076 1992 moveto 1076 2004 lineto stroke 1076 2004 moveto 1080 2028 moveto 1084 2044 lineto stroke 1084 2044 moveto 1084 2044 moveto 1088 2052 lineto stroke 1088 2052 moveto 1100 2072 moveto 1112 2092 lineto stroke 1112 2092 moveto 1128 2108 moveto 1136 2116 lineto stroke 1136 2116 moveto 1136 2116 moveto 1144 2124 lineto stroke 1144 2124 moveto 1164 2140 moveto 1168 2144 lineto stroke 1168 2144 moveto 1168 2144 moveto 1184 2152 lineto stroke 1184 2152 moveto 1204 2164 moveto 1208 2168 lineto stroke 1208 2168 moveto 1208 2168 moveto 1224 2176 lineto stroke 1224 2176 moveto 1244 2188 moveto 1256 2192 lineto stroke 1256 2192 moveto 1256 2192 moveto 1268 2196 lineto stroke 1268 2196 moveto 1288 2204 moveto 1308 2216 lineto stroke 1308 2216 moveto 1332 2224 moveto 1352 2232 lineto stroke 1352 2232 moveto 1376 2240 moveto 1384 2244 lineto stroke 1384 2244 moveto 1384 2244 moveto 1400 2248 lineto stroke 1400 2248 moveto 1420 2252 moveto 1444 2260 lineto stroke 1444 2260 moveto 1468 2268 moveto 1468 2268 lineto stroke 1468 2268 moveto 1468 2268 moveto 1488 2272 lineto stroke 1488 2272 moveto 1512 2280 moveto 1536 2284 lineto stroke 1536 2284 moveto 1556 2288 moveto 1568 2292 lineto stroke 1568 2292 moveto 1568 2292 moveto 1580 2296 lineto stroke 1580 2296 moveto 1604 2300 moveto 1628 2304 lineto stroke 1628 2304 moveto 1648 2308 moveto 1672 2316 lineto stroke 1672 2316 moveto 1696 2320 moveto 1720 2324 lineto stroke 1720 2324 moveto 1744 2328 moveto 1764 2332 lineto stroke 1764 2332 moveto 1788 2336 moveto 1812 2340 lineto stroke 1812 2340 moveto 1836 2344 moveto 1860 2348 lineto stroke 1860 2348 moveto 1880 2352 moveto 1904 2356 lineto stroke 1904 2356 moveto 1928 2360 moveto 1952 2360 lineto stroke 1952 2360 moveto 1976 2364 moveto 1984 2368 lineto stroke 1984 2368 moveto 1984 2368 moveto 2000 2368 lineto stroke 2000 2368 moveto 2020 2372 moveto 2044 2376 lineto stroke 2044 2376 moveto 2068 2376 moveto 2092 2380 lineto stroke 2092 2380 moveto 2116 2384 moveto 2140 2388 lineto stroke 2140 2388 moveto 2164 2388 moveto 2180 2392 lineto stroke 2180 2392 moveto 2180 2392 moveto 2184 2392 lineto stroke 2184 2392 moveto 2208 2396 moveto 2232 2396 lineto stroke 2232 2396 moveto 2256 2400 moveto 2280 2404 lineto stroke 2280 2404 moveto 2304 2404 moveto 2328 2408 lineto stroke 2328 2408 moveto 2348 2412 moveto 2372 2412 lineto stroke 2372 2412 moveto 2396 2416 moveto 2412 2416 lineto stroke 2412 2416 moveto 2412 2416 moveto 2420 2416 lineto stroke 2420 2416 moveto 2444 2420 moveto 2468 2420 lineto stroke 2468 2420 moveto 2492 2424 moveto 2516 2424 lineto stroke 2516 2424 moveto 2536 2428 moveto 2560 2432 lineto stroke 2560 2432 moveto 2584 2432 moveto 2608 2436 lineto stroke 2608 2436 moveto 2632 2436 moveto 2656 2440 lineto stroke 2656 2440 moveto 2680 2440 moveto 2692 2440 lineto stroke 2692 2440 moveto 2692 2440 moveto 2704 2444 lineto stroke 2704 2444 moveto 2724 2444 moveto 2748 2444 lineto stroke 2748 2444 moveto 2772 2448 moveto 2796 2448 lineto stroke 2796 2448 moveto 2820 2452 moveto 2844 2452 lineto stroke 2844 2452 moveto 2868 2456 moveto 2892 2456 lineto stroke 2892 2456 moveto 2912 2460 moveto 2936 2460 lineto stroke 2936 2460 moveto 2960 2460 moveto 2984 2464 lineto stroke 2984 2464 moveto 3008 2464 moveto 3028 2468 lineto stroke 3028 2468 moveto 3028 2468 moveto 3032 2468 lineto stroke 3032 2468 moveto 3056 2468 moveto 3080 2468 lineto stroke 3080 2468 moveto 3104 2472 moveto 3124 2472 lineto stroke 3124 2472 moveto 3148 2472 moveto 3172 2476 lineto stroke 3172 2476 moveto 3196 2476 moveto 3220 2480 lineto stroke 3220 2480 moveto 3244 2480 moveto 3268 2480 lineto stroke 3268 2480 moveto 3292 2484 moveto 3312 2484 lineto stroke 3312 2484 moveto 3332 2504 moveto 3292 2504 lineto stroke 3292 2504 moveto 3292 2464 lineto stroke 3292 2464 moveto 3332 2464 lineto stroke 3332 2464 moveto 3332 2504 lineto stroke 3332 2504 moveto 3328 2500 moveto 3296 2500 lineto stroke 3296 2500 moveto 3296 2468 lineto stroke 3296 2468 moveto 3328 2468 lineto stroke 3328 2468 moveto 3328 2500 lineto stroke 3328 2500 moveto 3328 2500 moveto 3300 2500 lineto stroke 3300 2500 moveto 3300 2468 lineto stroke 3300 2468 moveto 3328 2468 lineto stroke 3328 2468 moveto 3328 2500 lineto stroke 3328 2500 moveto 3324 2496 moveto 3300 2496 lineto stroke 3300 2496 moveto 3300 2472 lineto stroke 3300 2472 moveto 3324 2472 lineto stroke 3324 2472 moveto 3324 2496 lineto stroke 3324 2496 moveto 3320 2492 moveto 3304 2492 lineto stroke 3304 2492 moveto 3304 2476 lineto stroke 3304 2476 moveto 3320 2476 lineto stroke 3320 2476 moveto 3320 2492 lineto stroke 3320 2492 moveto 3320 2488 moveto 3308 2488 lineto stroke 3308 2488 moveto 3308 2480 lineto stroke 3308 2480 moveto 3320 2480 lineto stroke 3320 2480 moveto 3320 2488 lineto stroke 3320 2488 moveto 3316 2488 moveto 3308 2488 lineto stroke 3308 2488 moveto 3308 2480 lineto stroke 3308 2480 moveto 3316 2480 lineto stroke 3316 2480 moveto 3316 2488 lineto stroke 3316 2488 moveto 3312 2484 moveto 3312 2484 moveto 3796 2508 lineto stroke 3796 2508 moveto 3800 2508 lineto stroke 3800 2508 moveto 3312 2484 moveto 3312 2484 lineto stroke 3312 2484 moveto 3312 2484 moveto 3300 2484 lineto stroke 3300 2484 moveto 3284 2480 lineto stroke 3284 2480 moveto 3268 2480 lineto stroke 3268 2480 moveto 3248 2476 lineto stroke 3248 2476 moveto 3224 2472 lineto stroke 3224 2472 moveto 3196 2472 lineto stroke 3196 2472 moveto 3164 2468 lineto stroke 3164 2468 moveto 3136 2464 lineto stroke 3136 2464 moveto 3100 2456 lineto stroke 3100 2456 moveto 3068 2452 lineto stroke 3068 2452 moveto 3032 2448 lineto stroke 3032 2448 moveto 3000 2440 lineto stroke 3000 2440 moveto 2968 2436 lineto stroke 2968 2436 moveto 2936 2428 lineto stroke 2936 2428 moveto 2908 2424 lineto stroke 2908 2424 moveto 2880 2416 lineto stroke 2880 2416 moveto 2856 2408 lineto stroke 2856 2408 moveto 2832 2400 lineto stroke 2832 2400 moveto 2812 2392 lineto stroke 2812 2392 moveto 2796 2384 lineto stroke 2796 2384 moveto 2776 2376 lineto stroke 2776 2376 moveto 2764 2368 lineto stroke 2764 2368 moveto 2748 2360 lineto stroke 2748 2360 moveto 2736 2352 lineto stroke 2736 2352 moveto 2724 2340 lineto stroke 2724 2340 moveto 2716 2332 lineto stroke 2716 2332 moveto 2704 2320 lineto stroke 2704 2320 moveto 2696 2312 lineto stroke 2696 2312 moveto 2688 2300 lineto stroke 2688 2300 moveto 2684 2288 lineto stroke 2684 2288 moveto 2676 2276 lineto stroke 2676 2276 moveto 2668 2264 lineto stroke 2668 2264 moveto 2664 2252 lineto stroke 2664 2252 moveto 2660 2240 lineto stroke 2660 2240 moveto 2652 2224 lineto stroke 2652 2224 moveto 2648 2212 lineto stroke 2648 2212 moveto 2644 2196 lineto stroke 2644 2196 moveto 2640 2184 lineto stroke 2640 2184 moveto 2636 2168 lineto stroke 2636 2168 moveto 2632 2152 lineto stroke 2632 2152 moveto 2628 2136 lineto stroke 2628 2136 moveto 2624 2124 lineto stroke 2624 2124 moveto 2620 2108 lineto stroke 2620 2108 moveto 2612 2092 lineto stroke 2612 2092 moveto 2608 2076 lineto stroke 2608 2076 moveto 2604 2060 lineto stroke 2604 2060 moveto 2596 2044 lineto stroke 2596 2044 moveto 2588 2028 lineto stroke 2588 2028 moveto 2580 2012 lineto stroke 2580 2012 moveto 2568 1996 lineto stroke 2568 1996 moveto 2556 1980 lineto stroke 2556 1980 moveto 2540 1968 lineto stroke 2540 1968 moveto 2524 1952 lineto stroke 2524 1952 moveto 2504 1936 lineto stroke 2504 1936 moveto 2480 1920 lineto stroke 2480 1920 moveto 2456 1904 lineto stroke 2456 1904 moveto 2428 1892 lineto stroke 2428 1892 moveto 2400 1876 lineto stroke 2400 1876 moveto 2372 1860 lineto stroke 2372 1860 moveto 2344 1840 lineto stroke 2344 1840 moveto 2312 1824 lineto stroke 2312 1824 moveto 2284 1808 lineto stroke 2284 1808 moveto 2256 1792 lineto stroke 2256 1792 moveto 2232 1776 lineto stroke 2232 1776 moveto 2204 1760 lineto stroke 2204 1760 moveto 2180 1740 lineto stroke 2180 1740 moveto 2156 1724 lineto stroke 2156 1724 moveto 2136 1708 lineto stroke 2136 1708 moveto 2116 1692 lineto stroke 2116 1692 moveto 2096 1676 lineto stroke 2096 1676 moveto 2080 1660 lineto stroke 2080 1660 moveto 2064 1644 lineto stroke 2064 1644 moveto 2052 1628 lineto stroke 2052 1628 moveto 2036 1612 lineto stroke 2036 1612 moveto 2024 1596 lineto stroke 2024 1596 moveto 2016 1580 lineto stroke 2016 1580 moveto 2008 1564 lineto stroke 2008 1564 moveto 1996 1552 lineto stroke 1996 1552 moveto 1992 1536 lineto stroke 1992 1536 moveto 1984 1524 lineto stroke 1984 1524 moveto 1980 1508 lineto stroke 1980 1508 moveto 1976 1496 lineto stroke 1976 1496 moveto 1972 1484 lineto stroke 1972 1484 moveto 1968 1468 lineto stroke 1968 1468 moveto 1968 1456 lineto stroke 1968 1456 moveto 1964 1444 lineto stroke 1964 1444 moveto 1964 1432 lineto stroke 1964 1432 moveto 1960 1424 lineto stroke 1960 1424 moveto 1960 1412 lineto stroke 1960 1412 moveto 1960 1400 lineto stroke 1960 1400 moveto 1960 1388 lineto stroke 1960 1388 moveto 1960 1380 lineto stroke 1960 1380 moveto 1960 1368 lineto stroke 1960 1368 moveto 1960 1360 lineto stroke 1960 1360 moveto 1960 1348 lineto stroke 1960 1348 moveto 1960 1340 lineto stroke 1960 1340 moveto 1960 1332 lineto stroke 1960 1332 moveto 1960 1320 lineto stroke 1960 1320 moveto 1960 1312 lineto stroke 1960 1312 moveto 1960 1304 lineto stroke 1960 1304 moveto 1960 1296 lineto stroke 1960 1296 moveto 1960 1288 lineto stroke 1960 1288 moveto 1960 1276 lineto stroke 1960 1276 moveto 1960 1268 lineto stroke 1960 1268 moveto 1960 1264 lineto stroke 1960 1264 moveto 1960 1256 lineto stroke 1960 1256 moveto 1960 1256 moveto 1960 1240 lineto stroke 1960 1240 moveto 1960 1240 moveto 1960 1232 lineto stroke 1960 1232 moveto 1960 1208 moveto 1960 1200 lineto stroke 1960 1200 moveto 1960 1200 moveto 1960 1192 lineto stroke 1960 1192 moveto 1960 1192 moveto 1960 1184 lineto stroke 1960 1184 moveto 1960 1160 moveto 1960 1156 lineto stroke 1960 1156 moveto 2080 1036 moveto 1972 1092 lineto stroke 1972 1092 moveto 2096 1028 moveto (2) 2096 1028 PR 956 2000 moveto 1076 1992 lineto stroke 1076 1992 moveto 896 2004 moveto (3) 896 2004 PR 3372 2380 moveto 3312 2484 lineto stroke 3312 2484 moveto 3392 2304 moveto (4) 3392 2304 PR 2760 2184 moveto 2724 2340 lineto stroke 2724 2340 moveto 2768 2104 moveto (6) 2768 2104 PR 2560 1832 moveto 2480 1920 lineto stroke 2480 1920 moveto 2588 1760 moveto (7) 2588 1760 PR 1872 1532 moveto 1968 1456 lineto stroke 1968 1456 moveto 1824 1568 moveto (8) 1824 1568 PR 2080 1188 moveto 1960 1196 lineto stroke 1960 1196 moveto 2100 1188 moveto (9) 2100 1188 PR 1800 1116 moveto 1960 1148 lineto stroke 1960 1148 moveto 1704 1096 moveto (1) 1704 1096 PR (0) 1759 1096 PR 0 3068 moveto showpage auto/07p/doc/include/fnc_canards1.eps0000640000175000017500000014436713570013207015504 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 0 -9 550 432 %%HiResBoundingBox: 0.331023 -9.000006 549.331023 431.999994 % Produced by xpdf/pdftops 3.02 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%Title: tmpGlb2J_.dvi %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin /F17_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font UWESZD+CMR8 %!FontType1-1.0: UWESZD+CMR8 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR8) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /UWESZD+CMR8 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 477 665] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 50 /two put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F20C362947 BCA023FF79563D5325DFAFEF0F992DC47680D77DD3F1F2689C3B4142DD49B16B 29ED841CB1A2AE57A601A16A789E5A588C3B39D4AEBB4A6C8C02FDC786D04964 98FED799859BFD2303E52B11D72A192579EC0F752E33F0C7C68C12DD8D08C83C 6385F54F863241F396C7647F241C578B8DE08FE7F6648CE30EFCC9295CE29D09 5A9A2A89C0204518E2D3A38CF6200A1B92B47A70857B7220B03827FFA76ACC2F F1E43D60E32A984C33B89AA6907A11E9CD44F5C1663806C27637FBFD28D76E0C E008C64A3B01734DC36CD9C4B95B978345514014B3EC2E3B5EAF3864D2D6991E EAC6FE1A623BA3CEF85260C56E66F713B69C24BB4D6C968D18AAAB9D7E876C48 379D8D2180AED74A78B1C7F71728A9E33B33971C24DE45F71BF57763F8971583 CFAF19161514C69CB09845F13F278C03FE39CE88FA05CD48C587F130E02692F4 9BCAC9D4AF220DBAD87F3D2DD1AD8C52BA94D84D9C6F61922D60A656AB1F7F0F CB93ABF09468CD067975FF227A921170CD713C678DD29C18BAADB883365AD2B8 FDEC31B7020AB2C1D135E44F88E776D1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F15_0 /UWESZD+CMR8 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font AQECGJ+CMSY10 %!FontType1-1.0: AQECGJ+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /AQECGJ+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -250 192 750] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 1 /periodcentered put dup 106 /bar put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C0953FB8DA783B633F1A79AC9E93828816CE2 40F948A43DE34DC0DD46538EEFBA2EE75084CEF80247DDA44BDB99BECFA74328 B09DF55C7E59C70D955CDEA7E227219DA8344D5FFA570C83CF9931F2FC40EB5B 56A741FF3AE400E83A503185824DE1DBA03460BB047300D38D4CA4D3C67C5C37 679C2EE5B42620F21CB8549695656C1166D59FD09E320C33B8EDC1FB28A0F589 969FBFE31C881851D6806F2DA370662887464A95A58EAD0D08AA65CD5B5467F8 62AE4C778CA9D27A8E4D6D0D8F577001B82DCF92F1DC55C906FB4C7BB9E9AF26 950F510CEB1890975FBDE605B3FBBA383BE3E99B7042F6E114CD6182527E782B 72D9BC3128EB852DD892A7080E461C109B4AD9B00C1CB109C976C8918E1C5A4B 2D8A76EEA7FEC3EBBB7CFD23F328644A02FAF9250A65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F13_0 /AQECGJ+CMSY10 1 1 [ /.notdef/periodcentered/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/bar/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font AMOCOE+CMMI12 %!FontType1-1.0: AMOCOE+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /AMOCOE+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 422 452] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 34 /epsilon put dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F47 3D1FEB4923F44A1BA0D911E5D9CF2BC499FF9558CF2CB9909F6DF7FE042B957F D604C6BB28954E103AFC822729197E23C84C539547BF1948BAEF1E373DE6400E D2C42A989E82CF42B6DE92DBC8D83C0AB87716E8D726EE9FB2DCDE87631CCCDC 8F31FFBDF2FF764F76E1DBA9993EBA22715FD4D8468957C393E15B79FFDF5F91 D7A720339ED58D8E2D9EE400DEECD91414A5248C529AB171C39ABD24F5D20CFF 05854557FD130153EEB2D6B4F1EBB611324149F80393E6F7BF80E97882C73F88 7192EF7A2DCD8E7996095DF63BBAEF524761B8B9D781F468175E7D5B67D0D32C 72CE71F43D013A9A5C945BCC75A89B060C45C77B711CC490B4D1999B4611B783 9C8AAC18E4F5525066080A1FA9EA1ECBD86215391D4C568063592BC16254AFF4 5DC47AB8BC8AB75CE3853FA1F39A5EFAEA974D368198A0150006A440719C6C1B A7780818468B08DB66FF1397CC5D53B06A1E59C7BB8DCF7F2B2EEDAB071489B4 E362675BF11FDAF7E87D86878262A07F4CA5FF764D010EE7F2F69E73F80BF5E0 B3A0B4FB9AD559B8086F1688163FCA6D69ECF38087311B9FF90C5390A512ED49 3BC66FFF513460CAC08DD0F4E31A1D538323D862500D69011C4F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /AMOCOE+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/epsilon/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font XSTBFC+CMR12 %!FontType1-1.0: XSTBFC+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /XSTBFC+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA3238AF3EFFD3873EDB9D6 67A8FAFE3D0CEE9145957731453B5E20FC4D3BA4DEB725B8264148A3DBFC6C3C 33E93BEC610344F1E09F358AF50B03111DFBD6F0D1A1FADC2A2BFF62B63CF397 27F04F52C38C4FF79DE1D06B91B5070DB95ADD2E49B5CA22CA82F41A57D25913 AA52DF5AB2ED54764EEB7C57E642EB4CDF404F4657364FCAF0829B5F8E08FC34 DED12416A7F8180C016AA84B917468BECD0A9BCC6A9907B125B4930BFEAA8716 3252ECFC5864EBA3614A720FF7B6E71BCA38DA1AA00D3B9483AFF5253B2230EF 98A726411B4C36745DC7A159323F52D7B27FA83A69C4A5A921557CC0EBF368AB 271B171E2599EEC2AB1299D97E99A9C5A65D661FB8A8F4CB1CCF51C615E45F38 72D83A97BE1482A1410CC2E751B6AFC4F07E6CEBAF583BA30753974A9A384884 E3BBE070072D342B2756B5FA5E08E65FBC756A7F96D5D3B45C2B91FF497038F8 50AA2B2DC0EF0C31CA55D5FD6B4461EA57F028E8A11C860F8A61A3F34115B76F 2DE0D3FE1235F7FA5541C66F504AFFD71CCBDF231CED7DB24926CF633EC5A00D 41242897AFE363F09E239477B0B020212F3D6766E9076CAC93662368B2B2D683 9E419C5F420DD494415C7160C1D205EBA13E0AD27192B2C7CFA7D7A6CD0ED03C F45D9A4FB2826A6AF3CDFEC910F4A2F8D97655EFDC06C46CF2C02F01F3B2DAF2 9DC8169843C8E2C3F3BB33C3BE9F8E20E4FEF65527EA44920BA2D20C0AEF74C5 18226EBA29A30B79BD030AA5E2EBCC66CC4A41E0528D809035CDE8A47BA5FA67 5106B2207FC6E3743DE46DEC654286FA6DE37A905BB837A80757B39338F3A4D6 A8068A57F7F396482ED4B022A8C8871CC0B71464C962B2B6E73CC37B1E5F49C2 937B51DFC1E9DF80C5B56A5152C78C6928C016BE770AA28154E89FCD056A8FA1 2BE337B1096EC4877ADBB848B349F3DD076AE5D6B93E0D5A44B2EBD285F27143 3FA4F5D9D9A9C01618B2D0A25C3A6553556824221E0439132F15862AAF9294E6 6C3A85C2F659B25B4EB1BEC1FF787F99C3BB2BE08FD449A7001A81A1BF591181 D697D8C348AB31676A4D25ED188DCEA687056B4524EA51FB538D23E8AC250FCF A989561C37DB735A27C375467D2CA492D054CA95F79AF1D7BBD2772831761279 D8D4BC927C291D359896D56E2A50570EF3C65079CC751D19E1A87AEF122998B7 1D5E00B3F2831B8F9633B22491D19E6737A38B703B224D238FAB717750189F3C BF429CF4F29697679F215B58162008E5E9106D34CD44EC358B26E65D331923AC DD64DF666BE713DF3B84C402CA061D32F5AA74D48DB34B0B53B68A7BC6BFED7B 1162714690F726294DF7EC23024E699C4929FB082385B38CE06E127F71AB14E5 353BE765DE906DEBBB04FCE95C5F04CF7C122938D935C742C7508C9F46C3DA0C 668AC64A455AE891BA9F3CC66E8383FC9E1FF31E2561E3E645C990E89889859D 19FAC5916FF89120289A015CDE7FB9D68748805360609555034C14415B17C4B1 518FBCD89EC0A75D1EC7E424AD25DA1B1672C2F67583F24568E83C08D168B925 EBE2EE5999362D9D9D2693667A41426E23964783EF87B6482C68E52705434537 85C33D3157A7F53555564EA407908C986B05EB58DADF2B359672149B17C79D94 CF78D54B32C144A65A97C1475F055317AD8ACFB96F695C3A6C4F18ADEFEB22A9 E4441C54269B02F28C3EB608B37493A6907DC8FD5BB39143AA0DAF9B4F4179DC B2ECB938EF1A0A0539473C5F9E3DCF332E02C78CD9B5914BB2236438215F516D AFA0856AFE7375F00B0754CC5E490505EE014050C382674DF9ED5E150BCB5D01 FCD56581A4B9D199DD81423F393317D170C1CF98EF40F4357890A9D55A09A936 CE8433F9BA828212CE4508A22ED38DC51A11D3F6256C6621030684B05C8E6A97 ACE3482DEDE3938B4A572064F96216579FE82A1943EE8D07069DBFB0FB8220BD F5730759B722712E8900A0CD7C8DDF08A66A0CABD6147CC1E00AC8048F85D0C3 563F9385D8E93C91DC7FC9631CE01DA924FF3D51539C2E089FEACE7DC5D416DA BCC9492F37075D6728E87D89AA976F9130D476652A09B1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /XSTBFC+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 549 441 re W q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 720 360 4410 3690 re f q 720 360 4410 3690 re W 20 w /DeviceGray {} CS [0] SC 4187.43 4089.57 m 4213.93 3933.22 l 4248 3777.08 l 4290.11 3625.07 l 4337.13 3487.05 l 4393.23 3348.36 l 4462.96 3197.94 l 4549.47 3015.38 l 4563.73 2972.39 l 4566.21 2953.45 l 4561.09 2936.16 l 4543.83 2929.88 l 4521.06 2933.55 l 4497.35 2940.46 l 4473.96 2941.44 l 4469.17 2926.53 l 4476.8 2805.2 l 4473.66 2786.89 l 4465.88 2764.93 l 4425.8 2730.88 l 4359.47 2727.77 l 4281.22 2741.55 l 4155.27 2773.07 l 4017.12 2813.95 l 3977.9 2827.52 l 3992.46 2825.53 l 4031.69 2811.85 l 4070.28 2791.8 l 4103.47 2762.86 l 4130.44 2724.73 l 4151.78 2679.32 l 4168.33 2628.56 l 4180.59 2573.61 l 4188.58 2514.87 l 4191.48 2440.01 l 4187.81 2387.83 l 4180.65 2348.81 l 4173.71 2325.99 l 4161.59 2300 l 4147.47 2281.02 l 4122.78 2262 l 4090.87 2249.49 l 4041.9 2239.61 l 3506.42 2159.58 l 3516.51 2165.39 l 3602.26 2187.66 l 3701.37 2207.4 l 3729.27 2208.72 l 3754.07 2202.61 l 3774.37 2185.1 l 3787.35 2160.91 l 3798.25 2121.46 l 3804.37 2072.53 l 3805.15 1987.75 l 3799.1 1913.21 l 3786.74 1831.49 l 3767.18 1742.98 l 3739.02 1647.93 l 3709.02 1567.37 l 3670.94 1483.06 l 3627.94 1403.67 l 3580.12 1329.13 l 3522.78 1253.66 l 3469.01 1193.4 l 3407.35 1134.11 l 3337.11 1076.85 l 3257.93 1022.86 l 3170.16 973.598 l 3075.69 930.703 l 2979.56 895.965 l 2890.46 870.797 l 2796.5 851.262 l 2700.32 838.062 l 2634.05 833.715 l 2590.96 836.426 l 2558.48 845.742 l 2485.08 877.887 l 2429.79 893.926 l 2314.44 918.852 l 2001.13 974.051 l 1712.77 1027.95 l 1496.39 1075.92 l 1304.68 1127.81 l 1182.33 1168.34 l 1078.23 1210.06 l 991.602 1252.7 l 921.176 1295.9 l 873.285 1332.33 l 827.102 1376.49 l 791.492 1421.07 l 762.965 1469.72 l 744.309 1514.93 l 729.379 1571.85 l 722.145 1625.68 l 720.141 1665.97 l 720.141 1665.97 l S /DeviceRGB {} CS [1 0 0] SC 3716.42 4077.94 m 3729.36 3556.9 l 3737.53 3197.48 l 3734.48 3099.71 l 3726.61 3037.48 l 3720.3 3014.26 l 3709.85 2993.15 l 3698.61 2981.97 l 3688.14 2977.2 l 3655.82 2978.48 l 3621.85 2990.88 l 3567.94 3018.88 l 3505.99 3058.05 l 3451.94 3098.53 l 3396.5 3148.36 l 3349.3 3200.43 l 3361.43 3189.72 l 3361.43 3189.72 l 3434.69 3107.42 l 3454.34 3070.33 l 3474.19 3012 l 3491.6 2937.2 l 3510.11 2828.37 l 3527.61 2685.49 l 3538.86 2536.62 l 3541.46 2420 l 3537.06 2324.87 l 3528.07 2265.19 l 3517.21 2231 l 3504.07 2209.46 l 3481.42 2191.99 l 3448.61 2180.29 l 3205.71 2112.44 l 3086.77 2074.61 l 3120.96 2093.04 l 3198.64 2125.89 l 3233.24 2136.41 l 3243.85 2136.96 l 3255.45 2132.91 l 3265.36 2121.65 l 3274.49 2098.42 l 3283.19 2048.74 l 3287.37 1984.23 l 3286.54 1882.52 l 3279.25 1776.05 l 3264.58 1657.54 l 3242.87 1538.47 l 3217.34 1433.58 l 3186.87 1334.8 l 3152.34 1244.39 l 3115.16 1164.4 l 3077.36 1096.53 l 3031.83 1028.31 l 2988.65 974.359 l 2938.7 922.293 l 2882.57 874.617 l 2823.96 834.969 l 2767.4 804.957 l 2702.6 778.527 l 2639.97 759.598 l 2582.03 749.855 l 2557.76 750.895 l 2534.85 761.176 l 2504.98 781.48 l 2473.98 795.637 l 2426.25 810.75 l 2319.7 834.258 l 2066.16 877.934 l 1832.32 918.684 l 1602 964.855 l 1395.3 1015.36 l 1262.46 1055.16 l 1149.35 1096.18 l 1054.92 1138.16 l 977.363 1180.88 l 914.656 1224.09 l 864.5 1267.7 l 824.797 1311.74 l 793.789 1356.14 l 765.004 1412.1 l 745.07 1468.45 l 732.012 1525.22 l 723.574 1590.14 l 720.148 1660.57 l 720.148 1660.57 l S /DeviceRGB {} CS [0 0 1] SC 3075.61 4056.89 m 3103.14 3330.56 l 3142.77 2365.88 l 3139.27 2237.98 l 3132.44 2173.57 l 3123.67 2139.21 l 3111.33 2118.8 l 3090.31 2104.51 l 2945.67 2035.72 l 2863.02 1988.12 l 2870.06 1998.9 l 2921.76 2036.82 l 2953.12 2053.26 l 2963.67 2049.09 l 2972.63 2025.08 l 2979 1973.11 l 2982.3 1873.03 l 2979.27 1733.36 l 2968.84 1579.56 l 2951.16 1425.9 l 2930.31 1299.73 l 2905.61 1187.1 l 2878.86 1092 l 2847.97 1005.3 l 2813.46 929.09 l 2776.92 865.898 l 2741.83 817.98 l 2712.73 785.602 l 2673.6 750.223 l 2625.62 717.023 l 2576.96 693.68 l 2553.39 687.441 l 2542.63 687.109 l 2532.24 690.629 l 2508.05 713.723 l 2475.95 732.367 l 2435.42 746.457 l 2375.04 760.961 l 2246.36 784.211 l 1718.46 873.09 l 1492.51 921.562 l 1299.31 974.047 l 1180.6 1014.72 l 1082.23 1056.33 l 1001.9 1098.64 l 936.961 1141.51 l 885.004 1184.77 l 843.691 1228.37 l 811.055 1272.36 l 785.508 1316.69 l 760.258 1376.29 l 741.996 1440.13 l 729.84 1508.22 l 722.078 1594.18 l 720.059 1664.68 l 720.059 1664.68 l S /DeviceRGB {} CS [0 0.5019 0] SC 2877.57 4053.82 m 2884.28 3234.03 l 2896.8 2585.21 l 2900.45 2247.64 l 2896.18 2107.49 l 2890.1 2057.43 l 2882.95 2035.89 l 2864.82 2017.13 l 2803.07 1971.85 l 2741.91 1917.8 l 2721.52 1899.47 l 2735.64 1920.52 l 2773.38 1961.29 l 2783.71 1968.11 l 2791.84 1957.69 l 2797.37 1914.47 l 2800.61 1817.17 l 2798.72 1644.99 l 2789.64 1454.56 l 2775.95 1292.96 l 2757.25 1145.43 l 2734.43 1018.73 l 2709.7 918.609 l 2682.99 837.797 l 2657.76 779.266 l 2633.82 735.457 l 2599.94 688.594 l 2567.54 656.785 l 2545.58 642.16 l 2534.39 638.367 l 2523.1 643 l 2506.12 665.289 l 2481.71 682.191 l 2447.79 695.281 l 2393.26 708.77 l 2268.17 730.68 l 1723.22 817.754 l 1488.9 866.375 l 1292.23 918.957 l 1173.62 959.551 l 1076.7 1000.95 l 998.402 1042.97 l 935.652 1085.47 l 885.668 1128.32 l 845.926 1171.59 l 814.477 1215.25 l 789.727 1259.27 l 764.977 1318.47 l 745.746 1385.69 l 733.246 1453.44 l 723.949 1544.51 l 720.098 1656.52 l 720.098 1656.52 l S /DeviceGray {} CS [0.5019] SC 2740.4 4054.94 m 2745.65 2901.03 l 2750.64 2049.59 l 2745.72 1971.09 l 2741.12 1950.48 l 2727.05 1930.21 l 2683.12 1879.63 l 2639.68 1818.53 l 2642.93 1829.1 l 2672.96 1880.05 l 2683.08 1872.11 l 2686.77 1816.3 l 2688.19 1663.17 l 2683.45 1438.23 l 2672.35 1221.56 l 2657.12 1046.11 l 2638.23 903.598 l 2617.54 797.027 l 2595.72 718.938 l 2571.86 659.812 l 2551.7 624.961 l 2534.15 604.238 l 2523.61 599.293 l 2499.73 632.957 l 2476.52 647.312 l 2439.33 659.59 l 2378.26 672.453 l 2239.29 694.094 l 1794.17 760.523 l 1602 795.652 l 1379.5 846.395 l 1243.38 886.133 l 1132.41 926.75 l 1043.22 967.996 l 972.027 1009.77 l 915.422 1052.01 l 870.574 1094.64 l 835.086 1137.65 l 807.043 1181.07 l 778.715 1239.54 l 758.324 1298.62 l 742.422 1365.67 l 730.637 1444.65 l 722.828 1545.62 l 720.074 1656.22 l 720.074 1656.22 l S /DeviceRGB {} CS [1 0.6465 0] SC 2652.22 4051.49 m 2656.7 2539.72 l 2657.57 1950.2 l 2653.76 1877.5 l 2648.37 1857.23 l 2604.97 1776.18 l 2591.53 1745.88 l 2593.11 1756.27 l 2608.48 1797.1 l 2616.86 1786.13 l 2619.26 1684.2 l 2617.67 1427.98 l 2609.88 1162.62 l 2597.19 946.07 l 2581.99 794.438 l 2565.06 689.152 l 2550.33 629.406 l 2532.73 583.176 l 2526.71 572.727 l 2516.64 573.121 l 2507.02 594.293 l 2497.31 604.973 l 2471.33 618.812 l 2428.52 630.352 l 2312.18 649.691 l 1732.8 733.492 l 1481.41 782.141 l 1324.1 820.957 l 1195.75 860.738 l 1093 901.152 l 1011.5 942.078 l 947.066 983.484 l 896.238 1025.31 l 856.113 1067.56 l 824.418 1110.28 l 799.406 1153.43 l 774.145 1211.6 l 753.113 1281.51 l 737.934 1359.64 l 727.633 1449.94 l 721.363 1570.3 l 720.082 1650.8 l 720.082 1650.8 l S 5 w /DeviceGray {} CS [0] SC 4224.62 3763.58 m 4131.09 3709.58 l S 4280.72 3566.08 m 4176.4 3538.13 l S 4447.78 3292.52 m 4580.28 3369.02 l S 4589.6 2966.95 m 4683.13 3020.95 l S 4445.79 2940.03 m 4352.26 2994.03 l S 4501.47 2816.31 m 4595 2762.31 l S 4313.79 2710.1 m 4341.74 2605.78 l S 4234.5 2772.59 m 4135.5 2944.06 l S 3956.29 2854.59 m 3902.29 2948.12 l S 4217.68 2445.08 m 4322 2417.13 l S 3653.01 2157.86 m 3625.06 2053.54 l S 3489.94 2183.5 m 3390.94 2354.98 l S 3676.44 2221.74 m 3769.58 2343.12 l S 3829.36 2038.43 m 3922.9 2092.43 l S 3642.2 1481.81 m 3541.32 1596.84 l S 752.879 1592.7 m 860.879 1592.7 l S 743.441 1684.53 m 875.941 1761.03 l S 3714.18 3223.5 m 3620.64 3277.5 l S 3660 2950.5 m 3660 2842.5 l S 3564.9 2447.64 m 3697.41 2524.14 l S 3093.76 2048.53 m 3121.71 1944.21 l S 3309.32 1930.54 m 3430.7 1837.4 l S 750.098 1555.29 m 1048.75 1408.01 l S 732.676 1691.82 m 867.246 1946.44 l S 3160.84 2393.25 m 3293.33 2540.39 l S 2830.28 1995.17 m 2562.19 2100.39 l S 3003.74 1846.5 m 3125.12 1753.36 l S 752.648 1546.17 m 1082.8 1589.64 l S 746.141 1671.84 m 1111.26 1769.67 l S 2875.34 2302.18 m 2563.69 2419.48 l S 2692.74 1902.26 m 2451.82 1933.98 l S 2774.03 1776.69 m 2443.88 1733.22 l S 744.188 1538.65 m 1122.55 1948.78 l S 730.688 1686.56 m 914.914 2116.77 l S 2740.71 2230.57 m 2558.61 2612.37 l S 2621.9 1793.81 m 2459.66 1555.85 l S 2674.04 1677.75 m 2498.2 1394.97 l S 752.648 1492.14 m 1261.26 1425.18 l S 737.672 1679.07 m 1131 2136.12 l S 2634.67 2130.52 m 2336.01 2277.8 l S 2562.16 1746.92 m 2240.51 1833.11 l S 2592.57 1628.25 m 2216.01 1661.19 l S 752.41 1478.23 m 1344.9 1590.34 l S 746.59 1660.46 m 1339.08 1772.57 l S [10 30] 0 d 0 J 720 360 m 720 4050 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 720 360 m 720 400 l S 720 4050 m 720 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 1308 360 m 1308 4050 l S Q 1308 360 m 1308 400 l S 1308 4050 m 1308 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 1896 360 m 1896 4050 l S Q 1896 360 m 1896 400 l S 1896 4050 m 1896 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 2484 360 m 2484 4050 l S Q 2484 360 m 2484 400 l S 2484 4050 m 2484 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 3072 360 m 3072 4050 l S Q 3072 360 m 3072 400 l S 3072 4050 m 3072 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 3660 360 m 3660 4050 l S Q 3660 360 m 3660 400 l S 3660 4050 m 3660 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 4248 360 m 4248 4050 l S Q 4248 360 m 4248 400 l S 4248 4050 m 4248 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 4836 360 m 4836 4050 l S Q 4836 360 m 4836 400 l S 4836 4050 m 4836 4010 l S q 720 360 4410 3690 re W [10 30] 0 d 720 360 m 5130 360 l S Q 720 360 m 760 360 l S 5130 360 m 5090 360 l S q 720 360 4410 3690 re W [10 30] 0 d 720 821.25 m 5130 821.25 l S Q 720 821.25 m 760 821.25 l S 5130 821.25 m 5090 821.25 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1282.5 m 5130 1282.5 l S Q 720 1282.5 m 760 1282.5 l S 5130 1282.5 m 5090 1282.5 l S q 720 360 4410 3690 re W [10 30] 0 d 720 1743.75 m 5130 1743.75 l S Q 720 1743.75 m 760 1743.75 l S 5130 1743.75 m 5090 1743.75 l S q 720 360 4410 3690 re W [10 30] 0 d 720 2205 m 5130 2205 l S Q 720 2205 m 760 2205 l S 5130 2205 m 5090 2205 l S q 720 360 4410 3690 re W [10 30] 0 d 720 2666.25 m 5130 2666.25 l S Q 720 2666.25 m 760 2666.25 l S 5130 2666.25 m 5090 2666.25 l S q 720 360 4410 3690 re W [10 30] 0 d 720 3127.5 m 5130 3127.5 l S Q 720 3127.5 m 760 3127.5 l S 5130 3127.5 m 5090 3127.5 l S q 720 360 4410 3690 re W [10 30] 0 d 720 3588.75 m 5130 3588.75 l S Q 720 3588.75 m 760 3588.75 l S 5130 3588.75 m 5090 3588.75 l S q 720 360 4410 3690 re W [10 30] 0 d 720 4050 m 5130 4050 l S Q 720 4050 m 760 4050 l S 5130 4050 m 5090 4050 l S 10 w 2 J 720 4050 m 5130 4050 l S 5130 360 m 5130 4050 l S 720 360 m 5130 360 l S 720 360 m 720 4050 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 7540.68] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 61.5949 24.2961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 9.1199 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2637 TJm 64.6801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 67.92 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm (1) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2637 TJm 123.4802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 126.72 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm (2) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2627 TJm 182.2802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 185.52 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (3) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2627 TJm 241.0802 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 244.3201 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (4) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2627 TJm 299.8803 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 303.1201 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (5) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2627 TJm 358.6803 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 361.9202 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (6) 5.858 Tj -3174.12 TJm (0) 5.858 Tj -2.2627 TJm 417.4804 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 420.7202 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm (7) 5.858 Tj -2.2668 TJm 228.1662 -10.148 Td /F11_0 11.9552 Tf (") 5.4755 Tj -3.5145 TJm -8.5528 7.852 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -2.6727 7.852 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 7.852 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -8.5528 53.977 Td (1) 5.858 Tj -2.2632 TJm -2.6727 53.977 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 53.977 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5528 100.102 Td (2) 5.858 Tj -2.2632 TJm -2.6727 100.102 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 100.102 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -8.5528 146.227 Td (2) 5.858 Tj -2.2632 TJm -2.6727 146.227 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 146.227 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5528 192.352 Td (3) 5.858 Tj -2.2632 TJm -2.6727 192.352 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 192.352 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -8.5528 238.477 Td (3) 5.858 Tj -2.2632 TJm -2.6727 238.477 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 238.477 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5528 284.602 Td (4) 5.858 Tj -2.2632 TJm -2.6727 284.602 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 284.602 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -8.5528 330.727 Td (4) 5.858 Tj -2.2632 TJm -2.6727 330.727 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 330.727 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -8.5528 376.852 Td (5) 5.858 Tj -2.2632 TJm -2.6727 376.852 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm 0.5671 376.852 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 45.1621 207.424] Tm 0 0 Td /F13_0 11.9552 Tf (j) 3.3235 Tj -3.2735 TJm (j) 3.3235 Tj -214.046 TJm (\001) 3.3235 Tj -224.098 TJm (j) 3.3235 Tj -3.2735 TJm (j) 3.3235 Tj -3.2715 TJm 21.9602 -1.8 Td /F15_0 7.9701 Tf (2) 4.2321 Tj 4.2824 TJm [1 0 0 1 404.903 361.54] Tm 0 0 Td /F17_0 11.9552 Tf (2) 6.6471 Tj 3.9372 TJm 4.3508 -12.3187 Td (3) 6.6471 Tj 3.9372 TJm 54.684 -23.7378 Td (4) 6.6471 Tj 3.9372 TJm 64.968 -58.3046 Td (5) 6.6471 Tj 3.9372 TJm 22.1168 -60.9968 Td (6) 6.6471 Tj 3.9372 TJm 56.1559 -94.3206 Td (7) 6.6471 Tj 3.9372 TJm 26.4129 -111.1929 Td (8) 6.6471 Tj 3.9372 TJm 1.1 -65.3347 Td (9) 6.6471 Tj 3.9372 TJm -28.8684 -64.9288 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 29.0359 -124.5518 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -49.5102 -166.4428 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -80.0032 -124.2428 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -26.8501 -125.7999 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -11.0552 -151.1565 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -65.2521 -200.2628 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -317.0151 -206.5288 Td (1) 6.6471 Tj 3.9372 TJm (7) 6.6471 Tj 3.9372 TJm -315.7499 -184.2968 Td (1) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm -57.6909 -32.6498 Td (2) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -45.5499 -87.6076 Td (2) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -33.6042 -108.2256 Td (2) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -98.9132 -177.3506 Td (2) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -60.405 -187.4135 Td (2) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -298.413 -230.0276 Td (2) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -317.3368 -165.0635 Td (2) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -74.3658 -105.9225 Td (2) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm -163.6529 -154.9698 Td (2) 6.6471 Tj 3.9372 TJm (9) 6.6471 Tj 3.9372 TJm -90.9631 -195.7928 Td (3) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -294.8381 -206.4678 Td (3) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -292.0381 -188.2326 Td (3) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -163.5131 -123.0846 Td (3) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -174.799 -172.0338 Td (3) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm -175.5939 -192.5787 Td (3) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -291.4279 -165.0986 Td (3) 6.6471 Tj 3.9372 TJm (7) 6.6471 Tj 3.9372 TJm -312.7029 -147.9677 Td (3) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm -163.1109 -98.4384 Td (4) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -173.2453 -215.9594 Td (4) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -169.3281 -232.0895 Td (4) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -276.9921 -223.3825 Td (4) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm -290.6292 -146.5626 Td (4) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm -186.2102 -132.7224 Td (4) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm -195.8852 -182.0216 Td (4) 6.6471 Tj 3.9372 TJm (7) 6.6471 Tj 3.9372 TJm -198.3891 -199.3903 Td (4) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm -268.6453 -206.2977 Td (4) 6.6471 Tj 3.9372 TJm (9) 6.6471 Tj 3.9372 TJm -269.227 -188.0747 Td (5) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font UWESZD+CMR8 %%+ font AQECGJ+CMSY10 %%+ font AMOCOE+CMMI12 %%+ font XSTBFC+CMR12 %%EOF auto/07p/doc/include/2component.png0000640000175000017500000007647013570013207015242 0ustar skskPNG  IHDRBvbKGD pHYs  ~tIMEjމ IDATx鲫ͭ~W8 Ț,թd d9.[}^ς)Hn~ ?d{(P/= ݠ61soM?Ά /*e6" 3x ʷ6~OiVٚG)##7&/yzPx%PM !3?. /(\yjR|`}igvz6jEQ1WRFן%SQ϶_Z%/dE`PA&GQ\ $Tr`N YX w1MЋZDb*m;O{=NO'^ a|/ERoޗi8{2.(/f ~V*{g%z `| TŹsוgUe , `|ŭyѲIdF0pnC]Fqk,bR5y3/(=w =7J4ϯn =[Fa`HgiS*S}Q _tQ>z)$ [*9u5&{szV"ٍQEFq. \`KKZSyvKD!msޒ~,JX`|k!!Sd< G{ #>c9>cX200jj[E]*.3A `XiS*RVT?C 3~!%A2\X?bKsJp OS_xypKJg9z/.F- Q$ԲyH}GZ} )Rc#QS^${r!aѡb/ex.}Ϋd.#0JʏX S~byFዒ{~gWm:˳c->bv0|'z%m+c_r7Tx0IΑAx/zq^W.*!beLyˋ'DL%_reYU`0ju\.V&1XPI}g9ki$gq'8ƫv"a5ߞ_}CAX;>-#JfQ%H:f.j\f2cO̤"ggKLY7AF(;m;Qoˈﮭ}mnmmMag/Q3^& Uz%Y%iKL7'R+SގbT " DD?T `O0.GSXI7K̗2U[a U AJ0IPgOqת0 kņ ɃNR Tm8 -DBACtd]\YZx\b0g^qYG&Lw(deH ꪄoYt.8nhm:O yJ5pުFK_cUTy-gOiSxgQ\#m#+͋GgiHېooŝRI%fX `0qL.%{;WX1"D648vG .U5/)̢9K >N(%WGZҰ7Zb ?3\o4*Ə%Dl xu_nFgS8}ͩ[S /v{\WmS]i釢lm-+c߇`^͙ΠGJ5#¥!+SUr`捻G i.[D &)_pp/c^ )HRjpiAN6MSuu"Z3$^Y}! [WsR5$l:---573xoDԶj(cd^qny8l(CD\LC&^\,iZbq:0BLW:1K2Y_j?=EpQR pTVQKb`X.P-Qb O镸t_D$SUmAT#"NqQ9x T DOߤ7~CAdkBt #ʱWNW֐Q U^lji- Ȝ$vs_ZUϪb֑S|vyd^ Ѽnܩ]ۖ*2&n)^r0„KzJ9TcjiTor±lV?85T-~ n/+JtΔ=1u'^+NjfP *WT _ۿAg{2ڟ=4ggѐ9J<$hyڲXE 61^ ̈4^Ya G eşXP{ʲNZ+MY~I4O~C~_#P )|IIO ic}=MZL+sՃ΀^,o,Ƽ /M>oKJ2rp~p}lx^~(uڪkHDgFvUiQ$ͪ OaE^W֋9{v6wؖpFx.Iד|x{+IJ^ ])V\MbviK5IN.ŃjpEV,GJM̪}٢j˱6(~c(©M}3YʄpRj4X?S'I]WNoqdjХVгj.Vh,mZIƽոTqqg}*~TSԆUmi-[Lۜ9j#keħxJB 8,K*:B&M;\ɺl\4mzvrG7*-~2VkVE~t8]|ᢞUW1/ :>^|bzeXΝkk{dpzDE3'Ss%і-GSV#iȩhGIJ-IDcUh5b iTTzߏDUAGCE];W-;OUi UCIڥh_72yd.QӟWXJŊ9ѿ2PD%w-]ɼ[tX+U1|]0!x2j坒GSZ4S+KbeRoSL5C8.-#Aɲ`=(>w5SV&_eUio֤o]a\%eC;ȝb^-i[󎮰8ҩW+/q YG"SkyzPodvk͏wt,gY6ԯꮔNN;XP>H[}xGbi+=,YT {K5Xejg7)E㈙Sx5$'^r~*P7\ eLŒy9BW}++97MC}:Aec`> F.|c'b-4hZbjpE>=W`?vo%^)[%\W~0,'_4Dra4i#|Q'W(.ܩh ΒrHj4*r O-Q'2pIh[Nz betY,}6kHER/\lw@4U6YA.$ų؆Ϥ oufZٺ;z%XYĊ%q̗/=#y C)R}Y S0YJ˪ޛ.X^ʦIZnKq.J~JbP^-r^ fx6y; N~J^9GJ9-,gu_wA]Ԋ'K82m=!ez2XW_!rNmߪi9\۴R骋_dW$ReSϩ]6Whe!Uif}`=]>KB{\63e#mn,[gasJQ'_/dRJ'ߎqTUW kSz wŋ;Z\豮0n!)WZfyZ<0M!^i`J$4ce=Zp,)iWryP#:!|E\l qj2.x{5WXS kmZ'm͕(^[iv>/ܯVxzH-?Am7O^!gؑAZb&cW"Er`)*mO1blZ9@S _=Yy~?\W9M-+G4f G o'aZuALճ+!©69 3w 7l,70;en݆I, ztBRn @]8!T#|2AiCyOZ P[vjVD}еl:ԆOT{%PK=΄E!ք+4..\,KD[u\KT$N]- .۽ U~I>chψ3r e6/qmUʕo"If.dJz;ZP-`w, UKQ{n(V$`)6ٵ!Ά[932HGo(뙉z+q%1m[S28,~sˠ @WPb 7GzF}ƽGJbMCN%bL0']6c\|K(=.EuUC(Y%mU yG^B&wNK+9vU6; zxMpLZѠ!LYmX/蚪tuS#'4V,\swv幝]6vQyYaGFccZ d*f/3P-`o^e_K]/_RX=(*sgmMl,[9H 0X:TnD`(;NT]҂ ,[BjʼnT6iѳɡUc4Kl_;]ux%RVIc)>ne03 լ# 1Ts KdE$<ٷ9 遥3S*VMU^R.r zCTK<)Yh`?%G~v~TT=%ΦJ/&/e p#bJRJ lmNn|G~^Gs#)o3UqI5,7Pt#R+3˞R:R{ iNNfgMID"‰IbaDʄX0/2V8;lˊQj)^ FwFI}UeTx#1<ND%}y"w_ D¹^mmOwZ8=--B9A h8)/)ư%E9 IDATas\} wWZ]פńBoDM=OV#ٸd]h<)YO!I+;EPIFbzi5-8E~G~]'iSM\lNU. %xd+ƨC֌.蕶[`Pi:ȕ n/*+;p)s?辀hb5*W5f*G[>Z:ȧSRK>V*Җa1"{Gt dQ@Xf6RݼzxD=iZ8D(:R+,qR?N}U)V..+Vd?. jqqH+ZbEk?Zdj}uZ%#H xZ8?ѝYC3W]kl?IbVE w Xcc0JԲuٴ;9Ƒ!jjS28EU'HRkavV58mG8qaL; ?O"d=Ee@+OfЋ'eFKҕ5w<GYn9eW!"Q׺XK߼/39YlA#;$/5ó0LyПKRJ^T]ujc>{9),yqg;M<*;EsK$mImdHp%u;g9/nBZȦ{˙R":#9/2=WpT^"]ž~0j-y$D*; ie$n4FqbA,_/g5ASWֈ5 +hYO)[LwAREHYCFbwxq+E46U}RmN oRܤAGOeFZv|yYo,G^5lnVlƹ H|QRȃ{# sʼI7+zSd)C, m1/TJOڐ!]8d^qGX_IMfTaR1u6L`EJ9^5y'hpdD*V~f/a(ixj _5Yph5(C4)<5L&Ԡg!(2阭KGHd/hqҶU`ZK2x/-$ /$ &GA&gZ{bŢ6efa= ǧS&9/1&3ENSu9gnϏKo4ޑ+7,`9HvƐN[bI>#qI+G;'[VFFVա?YZC?Ĺq712 b*rgLąv dzx +\h!c/t&X:re]_CSIEݑcp)IO-NqxtHIq5&2.ZG,#;y< Zi"WMAs-J` NH !y3K ʚ4HlbGZ,VK*Q?dK0M= X9*+Z=“>2SVH#ޭkrW|dBR~H+E̯#EA*q".U<e,2$"H`i+W,9$qĚe'5gE%&} /i{ePe sg1KݵTW䅜7&\&-G̡T[LcdQ|FeHG~\Qg晖JF ә'4#Om]qqB[(ŻbKr,{DoV<_#P"G]慗ږ?C$t$df$Qesڥr~Z_wef-神r)z@Z_` X*Yx0]5 M BZK![r%wJt撱.bws+",-GRI*ΝI/XDT p Ʋr"j3 U|eNg"AQM(6""th:.'8!Ȉ+89.LdJ17rwd 5;oU e,Ҟ12B*jzus+&f TE?Si/U} *%'a3w=<A4"v0 =.ǘ*I,--`>$Kp0Bu80!*C`~(fsPҴџwcdedB=XЏu"EDm7HzPSD\wIXZm@/G$UlwK*Z"fd%>CV;}cl# W>kd:ч{iv_dIbE2dSkE:> ٓ cdj W$U+NR3Oiw*e0-+LQEƣRXZxT1Tor{ms^Շl/E>VB٨ekS=sYud32/r4Ӱw /c˨(_6͆+bx_ѣxF-+[{quO8♔\&ǽ 9q)>H"J)pȒ&%2>O NHb^,;WXE ZzLƍ`L,Ib|iyYg3FWA̒H?{ G<}~\RYKbS{U`Ɗ`I,g'Eu-gZ񙲌hɯbk d4B瑟x,@`ǿ t* ܝTKEOQ2?Z⯥9='Ja<$"Ws#_Sk ÈŤ%?p2OĻWtH+oH"Ď|֪H:w-c9WX- nW~B)J.$A񪨪4[\U!]5'ci~G7s/ĆMzyV.ш4 %C=[|.󠼠>H'[\;b_hy)Cl'Y,h7ڢADztźeMm=8}ӯ){d?S:"a!,AV;3MelV=ᗠq(z顯 YHƀ;5ّD-bf'[ď5p(Cq*M⟪J(3ȼn`X7)nxc~r[\*?`W*_gT_j|~[˂+=s҆?7^}`DY^ݒAOXRU|,A4<,Iw N҉SiC{x kݕ^i[oAZ du0]]Eы).BGU&o\9^<[Qo95Me!r?j1ަQ5HCMz8?(h]UjvB l:VbTg θU:?^j)69xi6J^|g2WHjOf_tͬ24agk664ők?A)p5 *:N )dX&nՁk~.`wɢ~_O8L+%ˤ,,MZ=/F۶kR$R̩P/vB3U,AHBdTuYܳz` ? |SgjwY,y~՘,?U?/+գT ;'/#cP-2pV+~3&S#1GPX^!{Y쓌|_2g}]z쥰򨓃t _XygX-Y m|cB%d- Z c}vzwKmL%--Icf]gZ_|rWyM=QJ_ZzQ6 oJgUAҞ9CJML`"B@"V2I"rd_ٜ˕*kT.ŊTiBa>]5vLb3 WL*a#vHT& _q<"eM1 ]A+Ac2z.i>U̥֪֭ZNo @C\)Nd'T {~ng}>ged9Plߵd_ &~RV g։BUQS;Q7} vU½Kw[N"n;3~&usE׭g(oytenڑn_ [14i-_U,)fqSȧCpIn&S߾ᦡ>Cb}DΏKs$WHDE]HQ]̓JzE0Պ]Od8J?}JfE:u~W;"5&39-l)*xRE>;d 9DY菚Xc8 ~do,uΔuT +[T-Ns"s mܮ;n:_` @ ?S7*AT)JQ8AL3CIslX)SJ6U| ɝR݄oP=t9_2"c*=lȵP*RH!&Nz>ޯ -8rr$-#Anqv*ƾ.㈁:ܩ e7tȈa/x̒:iW?όټIPUDJ~M2ױ,(Vn*gb $} Ozd6]amw֧=2?0hD"D8obSK+i S2 VG,^dy37o,?DE{.A k ך1AR{LbE0W$5ҞQ3VUfImu~:U@&al,)e^]ΠX,|`:W䃴)Adwڮ?/1k%řrAsKs@:+ 1ާDo`%EbDIGtk>]EZY(jVUfbdXSeEf~`/ YvGB 򦺒'AKDˉMוչ%iKBIMXtxfo-e{Y RxYI`;Y0CχssdfV-wNt"}E ײRRZs\ UgX%i ٵ׮l$^i" 6ΏT.r<[ZVGi?SE߬% glN&mST$:r\Y#@{w$Ζ[RR=Q~,BYKQC,;B7 >l {ܚ4ip}s+y|Z#DyAČ'|Y?}>S'}rj &e.lJ@&GPJGu_-!jMe^"i5Mr*ꁎc5`kƙ؉K=~ +rMY05UMA9s'uSn]1D\2&BIAQAmAOvȃRʼ|-X $ PX8z0#΃*?l=WR?vN/*#.N1 huHnaIyf/E"3|2"2v7Yl҅S،UB\°T< $ ,: O$ޙ &ٯ0㾴VYWqՖ2]]KK!\#&v-WI%:p:%u xOBTIRV4a2JɂY} IDAT&Șa@k`l`D3KH,ka,n5JD"\jI<͈;uB{g]3|{eHB*Mk OUEU-$.T$X<  ~Lk> ɞUI"Wq ѧ`R 5NUY,=Td\4)&]"H^9:VZvXICz#NKLjý { j_ äB*$A5ˀdy1T U2TDDZI^-bB򭬗j }r1gSكJd ww}uCn:}Bu||T WnIY[!2+L2^"`#39K㸞78ÚMfYf1+RĜ,A-K%ˠ?m]jvsMQHI(1d+DO,$M);tU%eR?es~^%~ IUc߯KCwC*0R0O@X+YbliBiIg5x-Lv\ٜd=<俪HF4ߠ7ί.:N/ vh _Dn9܈$|%_C׳z2WZ>V6מZr^-߼ =A8',#\,% :URFZA5^Q}Oeb|sN8ϯ厢ZuJ[|WҜ+-}Fddtc{ΐqyc,I|hK JiiWd-??.Y&Q;?X`gg:.Pޠ0!f>2qQkEZʑ+/ @UJXiCRzG=e%9lr![5╒ejyOyr Y{vxv!r/cunv\LؒjJ!@'maGWddߑI=R;D%sI"u7vJJ"m?H8y̕,!ǧ+Z樄1ͳo9 E%dKn7V3),8T)|(aO,ɻp I;<础 8#9PQ%U`s@&JAyoHƩ]|ܲ}DO

    @ u"El{7H:,6ĭZ)(_ѥۛv3W^VkI?k2H-pb$KWEI3}#.pRq6r~ '|0aP]fB^'Lq]l@{iX#@F,p]]}K%.7p:dp/A%?fDHֻ!{rA j]%XX)ic%M,dIgt'[ sBҺf]uAv/u('?[R6"a\ZT%L<-| _<;dL0v<5̺:Ң *KEZD_Ϟ\"A9aq8K"g]|7w8D%T}4v:# |5򘈘:ֶށ*|ԇ_(<ї&{,&[}yܡ!x.cY2,XyrjjJ+ZG jMMJJ~SsF-<*B쵓o=G̺Q$F6$$`lu)\8.!u~f)QRX2ɀTL=7:#cs3|-fYu҃E9ٚ; X*<:AlCا wv 9dD}CtWॻj/Wqzp qj0bT5wkYI%WܢHV'c z[F[@GKYf7Ku>KI iJ>Yv$K=bύ[Hg&M&;GT1.`PL>4CM\9y$"·-Ywj5!MwL+D\ s5W Fϙ-o:Y.pR)I/?} ^k1+b]~.gG )5jm| >ϏwM U=ٷ͚=3A9PZ)7iyąF+fGy'JX&w7?>5P|]Tz[Oj=I3XN=b.F's+Fv]VGGlFO~w5˼9^<( s<ܢ  X 8}s%;yQRkgc;in>v7+Fq; z!s@W}v_}qMp҄蟜 4̦򆉦97^8ȘȚJ#SZ{BE 'R*~$:G~ӀS>b< O$dY$q7wV|Ĥj7=,T潈\s68"znXAkA斩;[͋2L}tBwO6RklcNZGag+ eй85əs*3)͚YM"LZە!ZYK1,p62'JcZ~/nfV MG^734+N u޺͟77ۡ.c@:J{–~!)92궛7Un'3_/# Y= >yxX)6<\  P܎ svz.)'J`j`i!y}u!Y\I% Tf: endstream endobj 145 0 obj << /Length1 2434 /Length2 17471 /Length3 0 /Length 18887 /Filter /FlateDecode >> stream xڌP c;up`5ݝ`; oιszն{w]P*19%]Xyb ,ff6FffVD u+[@=?,@@cLl`uX8yYx<1tčݬ Y{3"'jS ; `b 3L.őݝΙd!HCpr 7௒vƈHPrBV@{gdJ@ˀXY`ne (I3x24uv[ N )0WMAV.ΌVWp%.Έ'nõwp273 3WG& {+'Wm"?2 t=L-"PtdK `.ke!z;. W?YXfV.=`1_| +3xX}Kb&-1 E M_`pp|7տ_ɂ=^Rt-@g?1s0]_Q_f$jk_?zc;+[[ MZ-je\ boaFZ9KZy͔\L-53[+{_7 ej=# ޝe7u0kX98 '"3xX98,m4z=&F{ \/בrrD qD . `xLE\&?$ 6| O)q 0fPLZ?̧ 0OA`??\ ~Q]+JW&2/3uO$I5&Lf`J/+x;f?bvplbNOZz:ZaYw\?eL"s]_KoY&?9c:Ë\5ϡ[G.|w996pC\\f&(,GY:)/tG8[-drqN]n? n`{dp$/ _Ts rN?@qy/غ.FaoJ`bO+{LSIC[ۑ^!y>im kKTiy6WkG134]x"R?H@Ƞ.h -Kʍ}@ʣ~lu"tqOeSswhO& xd. D7so$tl߼u7Yc+Y{uo0&f)ESdqK6ri!6&I|ƻIxe0pmA֙ӧsjC\Q Q0 3(Foj1?!T@ |_Xete?˟M{rw'lM.0h&6?ŮBIO-\-(,jV%<.y 9vpkXdтDP$f^7;ؿ9U0B+BCie_n0?l0@be^>Å[]T! tz/qjsA-=onʶ&k>M Ԣ׋;Ȥhk[#!lQ}5Yf4|[&i\ߏ68rShkYשJŚ<]CfaV9{3p e3UwYL0˲5XZ \&nzb'9a(!`e!}-NRO'0:Ț“2J#_z\Uvmo]}־Ēk9IGpjLGV~4Q3R:}~U]?%#g/CeXJATCuzDI+2y7rrRH@4RRғ(s\؇rLB{yԾ<,tMz)NRq1Gi!gՙ f?hHŵ$HL}o^*<5N@U(!;9 ' ) '(/[|S ת, ͗f߁A:Tm#ewᒦ]۝ Xq,Hl&2aY-u1kǑ{ǗEO%ݎOV$JTޥ u(jjL*nYz驞}_;х3LϽtraߟ,Q%U@*yJ}7 |X*T\Z+H4! 3b3PGAUvCPS{\Y&M Ơа 0ͱpBo1>=tīT>(aB=?4yG*5X&\,}Yg\}:r .2`.zĦ"=¡w*0M!hIF'˴ww:WOAe%ˊUF EXs=h; uuyvQ! hތ ̏v3c ux?ވ5@:[Ì)q* J1 K[8RMߟm8(3uOeUG*v$ajFI~ޖS")/`.r1Kr8^>NDeO_iL[5iv>E)~5:W@[m@A" H&@KOwЏקpZiN1kgFuX#fI>KRo^LYT]_!(LrGnM@smxW;DӤ:[c|P,f.جnjH.KUmƳn9;uM2nxlĪd,Uh_2zKH<3k=; ~k1x=) 0bL[0O~Z)Ʃd\9U3V}"LKTAϡW754EWX:Tv.HO)Tپ׍ @侞Jm>$ SWB/ͺ"$]@=A)dȷQ8_Y_ԋ,Dla0y4^$e0ޯsћ7ՓPr0K>T>*X.1_bB;)G/(NY*5$:;iVB 5J1reCdQd0BWbծ%ǡ0HB4ܔLhoSIqۘ/\К#!:Y69ɱ}7X8^Ȼk5 R=z|uWCV+K_FIf4͞p"?=&;9xي |&MD6"xc";=5*5s_4)kF,V &zkGM!ٻdnWF.p"0aI(~m-BeI_#_$+m*׿RNPO0\ISvwLRGr<ᴇ죬< BÈ&`IJ/ yWi\.=_yj%F<cW[(Sqc>UV~#z afS6Ur=ON!S!HrwN\f磺)y`P?M}C}00x=!Y*m:7gHSik(QBOPl;OS/;rYb% 6>{InjP#K*9{â*6FWUuh(" [ E,Pٗ5 [E f k*zGcSoH`noJOLhTPF$P %mؗQ27Ro FREYcB4 k~Nxڒ{O-:c 9ʸpC<Ӹ(&4ɬ_Fq` x̯nf C6lC E䷓ju`,n #f9*:T iBRsFQoZwX6 ۸ْTZݝ2;9^t"x@̂vUݼ.2?_×/cJ'&wimBTH}[8~ {bb_T%0'e8gNUC }Czқ7'e(b!O. $ %c,/tX萏A&SvQtHJ5I-{PiUteJS!C ]u]’Bp7Τ4LUX،CIpc6 A02Wd2r-F=>be.ytGf+ڀ7q,h kCuEF@@(~Q9cTr`$k(ZIlY}?iEY"3 5}˄'?Uw+" sŕcWDCOZ8bP bxjq`PX0ʱIÂ0V a~h{ЭonϝH4\{h-` B;PLq*E K%#6*}%XÙ~n)H4 +w1<)gh-exY;A2#VB+cQСj{v:mץ96:NcO:{X:0~Kی@FGbHa,lHhDS& 3:Y&xU LzsZ4M3<_]̗ÀDuI6>*1w,i75 C̦Yݡh;˚khNXENu"< oQb:TȨ"bBL)XKqa;,54qt^9^1ދIk.%9\-(9:5ZV?9rÖ":uu#%}1\7cr8^NMp'<|'a0> T4W1yF ˺Yt$.]} zŘNLE|wt*_f76ZQ{VJ Y C讌b(9󕗹)PzUWy*'4yGu JbK2~ =/)&/:}>~0YC!ڔVi;~n:Z#A!W?W _h dh)|^fkv/%=$q".LorJ&T9 XD;mmV`qaZ} \. 3H{3"\[v?RB%Z_] E$g(^!Mta#wlCҘ.՞x@cAɁq|ӜǪLmY K0Z*#S<jo2E=S_%XM\N3!燁wBYW~ Zig4!%⋹&t_|>,.} ȔJmk) EwVaIt4/+Lu,7ي rU2>Y,KCI>PYvcğzZLILq3]UUG¿q9f|DW;5/Lq6CPޤt tMo }vfIU4AeCk*"ڴ{F݋+9 JGFfp\鋊]=~QM4 ªB8{{6g@-Q] :83hlXQ`OJinn/mR).G!Iiܷac.)~)zE agRKd {O2*lIj9V< 䌫q譢I~<=} B7*-'M$k2V4J(J(Jo{,n{H;!pXGThŇUhl,4d2oYUQm'Aw/fq<ߤ%Q! :wltq׮|l7|}A+g fSgU]s|s2)(НiYB?` fA3)o XRLxϒ]8 kq`pF19oٗnʌ'Uqg x:kІKvc̗xVMtjq;$[B[Ɩ<{d:E_frc&U` h8?N^bKIVpm铻T.k/hź0"Mi[t˛ joL=WIzO?I j{rI;3MϺ&QxĊmr # :d9?' _حiDBk*@ܭ@n7.O.&O=tJBrsp+H Vdw$n!gQJȕm.)P ~'ckp;2~&bZO4)OR&MAݰoːas<}s]3lG3:h/ ΅O<*ރJt@/-ۦHv;Ze Y1ˍF|n;HJtџ9.m圛IO.Sf_)ӝS*G۱sJ93>*1YR&-G^%18W]kT&K)O<ؕa"YLP 1x:lQwh7F)X/:ae>?i}Л?q~u@nm/3 {kD.]Bw;[pN 81-=>JCdpU\A+mT ځXn(YKb60J[9+ orTϰ\TD풋kر3h uUV zۋX?/k0U5{?g?}  @ ZI7ڪSWGAk-.N7rSdu[5rIh[i LSXX 7BMX\ry3"w)c|_oEfR+p"0PC!>ؾtT U+xh;5i#( aOnn -@qEjv%rk_` I6h4Gؗ`@xrt 9E./V_;M"k_Oϧ4[C/ߙk˷ߕ_BΛ?NᶰYI"ҪܬryvtSt)q(P03.Ӯߛ]; Qɕp^&^@62fH3مv"WƧz>5z [&6vkrK vR{%{:PFo' Jޢi4@U/ee""~ '޳COtzCB?JEµC%b3?n-Y"I9m*ԺZ/ c"z¾d]tDDfdmb,ɱNj+a/dTc@>klB; : ǁڒ9ʻڔj32 e #A*{jSג3ʵ$qu#tYbn\J#vg jMYCKY֑1PZ/s`_̏`MHa)38S8IDEAo*? n;ZMyfljL7v>5CpA߰ؓ`k] xk? K+VS0n$(1ngC'Z|\_8FԿD9B"ml˝zGu nh3R 2Bk ^C<ڄ,ძFUZE8(ZCqzշ=yǙnYA#NҮqnֿ2LTGLgJM󎊢||<2J?I :fOl{2Q֬8sc!ؒ͐=21>ݵ ZP\cr3;ܛ78'fXl$qƊ])#RߧB D+MC@}rE-U].P+hag:,`Hʩvx'J2Jֻ `͙wi~ֱRp"*}a(qETsک5P٭?vKPԵ"7a\QS+ދ[aRZ~(H;=Pb yMe.5m::q1ٵ>ZNBlX[ ~˜>ܫF)7' %Sˏ=nq_Y JzMƒL\i Z0 | Ԥ,:W^0e56\s[6dJ`P ?͌ %e<1ϊpg/tV$ՖYO=xDg,)PyI~y{nLkއULsxܙEX\h* ^)"^m|#y6=y2ǘ]B4=9)o+l͢0N+jS^8 BVJj(Ȩpg|>WI(1xB˛'|~v/F8]GP4a]X{ObpGE$C|+$סKTٔZV9 yHBm ս R۴<~(8&< }aJLrQ6MKJYk%M%+ fOt-fA@cVbH#rvMX6gFU`X$&izsY0W9J VmhwφK's r&P !J&+܊5>)G)^~r""F 1WbƁ)OH6zՏZŕ^^?Kȋ {C+}&y\hΈ[ASW֬BZdzu)#s )ߨlZrKGva} `_P(VQi ֤yE$@TC sx\ WS5׃R >8LY s%Lh_Y'IowS?lz%&K޸RϜzN ]R$f!Bp _|Z 'y}*ɜdHGX؅ݭ$*/P5[kb:Irx Ϊ >m<G4&2u* OÉ$頧hZr}+^4C;!AP 1xW A6õ`^rRt#+U˨c)@7P+/]u=n '|R79Sݽfh5C喍K *~ B&2y\*7: MA"zryL쒓O.M?z;uL<$]VۜVCמM)\F;kkfդm#pbkJRۻJ2mbbdi%OGKTԓ1 a[i@&t}2Yê!23KUqk};yog&bMr~=n;W4>I\(K9 C=`W aBۤ}tM)sAjS-Tm[mv eΊt[5v)ލZ  ҹ U?ig^jdC'!'xTkR_ aX682>!ࣅu. Y!Fr 5K}GF?+/Ջ Rۀ'ݥޢ`j94}p+XꬋE~ ka*I]V#qeR=TMRf BĺxI\Χ5dXhNkE3~ xlc,ep*&ozSS뉦ݷ/ZI]wHhڰWh}vPF~>> *Qа8v<_ImyH v-d [u{wFemjp,o`Ad$ַr-d.񪭩q/MmFBܼ ._l7H5EoۧS+:%-So;VSZ3> U'y[ACP“wŷl#l@>#-OD_5FweSw NF -4RNfgB5wهơjrN8wҡFmDVUJ /* Y1 Va>*Դ^98,@?^^} HT㍬iErnyYz3\48 :X{ѹHHoMB@UvvX96IDyd{C Cwxr+B6  ~8,x8bK9qзu72ZC-AD%ĞAhWY!wAѝ9AE_;IJ6,TeGaU{n9s mMĔ| 4{8$QHQ{–륭~=>|"}ҔbsCAeu{cpGgbymhF֭2S- ru*Ni33^I&6];P3^5[jL@1t]V<̌~aw#JyJK'[U |y憟S,ik>I.$F}<"8ys-Vr|U5/MXV8C\] wr'ؓ^ =$۟QaH"fvZMpʄd=? d,ٳª#ΪL1k }Eqwmu ^'†ou+}q: @A !փD4| .srW VG*4܁yOjoqC`aS xX򱴰<\D;?'M-獑ܓIX&te+P:(BM*r\&/vǗ]ú0@yIFu+DG#i'2o#)~1}C;SEqWJ&$iT#|8x0cz:J"u38tU:`~/܈nu4k~{"·{GإM]w~iK}lBlDg C ;b@ T8Ϣ'$-OC5P >l$8sUeɭrO5|}Ԫ16.&տQ=+bƒ&1' a5a2LJ[#Ku3r3k?tBrٶHl3|(1%!&; Ԧr¿ e$ˋE"m?`G p]D4$mD[n8&3Ys1];J)6|cNxڣe8/hUX$!' Mgw-=3/aj,w no ]4Gmx;lR!1 &kaxI4T/Fd7ŎO'5;@w)ɎW26 |o.0.n(,JAw~˸J(&読nda%s|{kaa^O䕽 3̞ޑHx˓*lnE=e,` v<ƴۋ)~eMٹ.f:YL8+/=_N; endstream endobj 149 0 obj << /Producer (pdfTeX-1.40.17) /Creator (TeX) /CreationDate (D:20191128185937Z) /ModDate (D:20191128185937Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/NixOS.org) kpathsea version 6.2.2) >> endobj 6 0 obj << /Type /ObjStm /N 95 /First 797 /Length 3415 /Filter /FlateDecode >> stream x[Ys7~ڵ%ap[ZKG9__Cp(R%b0@r$Y&bIpL`ZdLJfÂLX(0%e L\tW+f҃/Wɤ0?BGl`PIڠ1L:LqB6 P*1u zp*0 4s*Ȓj'$P@Jv^W =3"XT  BXqлLu ʸ2,BdX L'E(*&Ś|dt;@J`Nt G1asސ: >># AaYh,(8D@HAAJKIipYc:Lz8ԅC3FZXB)X 0RF{Kp KщBcІtbnQh)Az3~=;|2]_b6Sl8pݝ a OH߃+4Pq ⇓w?cMd/TLdmFYR2FFZՄOؽ'Y1-da[f!owA1~-svѿd&bd?ɛA9`9/aA>m N ([?wd LmKv-{gS>dg~>}< [㢟o{quٯvJ޿/哣w&s50f-00"2}SwKN-k?:-%FFSٳ2do(2|㽡>ݢ S߿(4] MMQOQ|xsa]it5uR5O(̼OoT)UMkiqKUk4r ne>)'_'Y^~AӝzO^X=_D~4;.- ^1Pv@Hlvz0׫Z_ڠ!w'ڠx<r_% NNrx\iGlNʃ&AV*A>?SRc@9WB a`W 5PgkD=J)1juJyA+]hasp|7p:@i1 yAa)A'oJ=B׎B!YSZE? dwzԑ$mq eqSm'-2ǕJ%O~3{8jf@q+{w4gm8j֍tو>'Sm8obKKmhIZT:u&}}dYӢnue` Gaʘ/۞ VSKuה2֎ǕE&<]x9A$&ԯt Er VE m}aXvG1e% }#ЃJ̢@$ZWeu Cz,vSk}+Di1eS :l%J:i$y%[ЦymHcs ԏ-G4%I?1/Mֵ2 x3xЅ D^MLC%IJws͵iaܜ4BVڠt^dU (M<ЩX!Rs~ie[R DWw21/ܫMrGkFk=AW, vqZsIOmG'tNWe>U_qV+&m3IJ5RU;;? att؉[F-I yGe>zG๶Z<κzw.̟??]~{hO ?SOل3>!19/xÅ2ID^>S>>vg$y3_Iq?79zl=ywvEv!(\t|-vhUAJ4A~hT48t\JwMy-0LRfݽb4lѭtoC5ܾ,lb«6n/J=1CAۀ{͗n˸raeu)Hwz?9)Ɵ*ä?/[I{^Fd~ *_ "1̺CJO 53$VFN[k.s\ktv~>ɧӕ 9m ?zvV\$Sp-N& 5eo_Q4ѯ nl'ąЮ|2Ke7보WT&MVk ʱ?R/[u~Ѫ7ks3Rh*؆MB,D 7̫)t쳒vJEm|S%VBvkΎ/%?H &ӒpfD]܀A <18E635B7CF286EF6B1DF4158823AFF29>] /Length 439 /Filter /FlateDecode >> stream x%;OTQP p`EaKCBC(%A bc# @( &p֚Z{skfb4AM~W#0 k6+'Z !,Y!Ƀ<" lꗧuUC "ZH`[ŤURX:2%2 <׶S$ӤTkqTzUHiz1RGq`x!6y>=ENTo$iv4k&)N4OpCVrYup񟚝#prfI\MB2WapuN7WH\rP5CzUK5r:1{Miaa0–J#~ +n"Qp(Jc$KM|5D^>2C] endstream endobj startxref 352655 %%EOF auto/07p/plaut04/r3bplaut04.rc0000750000175000017500000001150513570013207013765 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP ALG = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Draw Reference Plane = No Draw Reference Sphere = No Orbit Animation = No Satellite Animation = No Draw Primaries = No Draw Libration Points = No Normalize Data = No Draw Labels = No Show Label Numbers = No Draw Background = No Draw Legend = No # Initialize the default coordinate axes: # 0 --- None, # 1 --- at origin # 2 --- at left and behind # 3 --- at left and ahead # 4 --- always at origin Coordinate Type = 3 # Draw Scale on the Aexs Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style: # 0 --- LINES, # 1 --- TUBES, # 2 --- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 4 Y Axis Bifurcation = 5 Z Axis Bifurcation = 6 #Labeled solutions: Labels = 0 #Set coloring method: # -7 --- BRANCH # -6 --- STABILITY # -5 --- POINT # -4 --- CURVE # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. #Coloring Method = -3 # For the solution diagram: Coloring Method Solution = -3 # For the bifurcation diagram: Coloring Method Bifurcation = -3 Number of Period Animated = 1 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.0, 0.0, 0.0 # Background transparency: Background Transparency = 0.0 # Set the radius of the spheres used for labels: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Label Sphere Radius = 1.0 # Disk Rotation Disk Rotation = 1.0, 0.0, 0.0, 1.570796 # Disk Position Disk Position = 0.0, 0.0, 0.0 # Disk Radius Disk Radius = 1.0 # Disk Height Disk Height = 0.001 # Disk Transparency [0, 1] Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Sphere Position Sphere Position = 0.0, 0.0, 0.0 # Sphere Radius Sphere Radius = 1.0 # Sphere Transparency [0, 1] Sphere Transparency = 0.7 # Read Sphere From File Sphere From File = No # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 large primary Color = 0.0, 1.0, 0.0 large primary tail Color = 0.0, 1.0, 1.0 small primary Color = 0.0, 0.0, 1.0 small primary tail Color = 0.5, 0.5, 0.0 # Surface color: Surface Color = 0.0, 1.0, 0.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 Large Primary Radius = 1.0 Small Primary Radius = 1.0 Libration Point Size = 1.0 # Set the initial, maximum and minimum satellite animation speed: Sat Animation Speed = 100 Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 # Set the initial, maximum and minimum orbit-change animation speed: Orbit Animation Speed = 50 Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: #3D = Yes # Choose 3D or 2D graph for the bifurcation diagram: 3DBif = Yes # Choose 3D or 2D graph for the solution diagram: 3DSol = Yes auto/07p/plaut04/Makefile.in0000750000175000017500000000016513570013207013604 0ustar sksk@SET_MAKE@ all: cd src && $(MAKE) clean: cd src && $(MAKE) clean superclean: clean rm -f Makefile src/Makefile auto/07p/plaut04/src/0000750000175000017500000000000013570013207012321 5ustar skskauto/07p/plaut04/src/drawCoords.c++0000640000175000017500000001066713570013207014735 0ustar sksk// This file is unused!!! #include "drawCoords.h" #include #include #include #include #include #include #include #include #include "gplaut04.h" #define FONT_SIZE 24 ////////////////////////////////////////////////////////////////////// // SoSeparator * drawCoords(int where, float pos[], SbVec3f axisColors[], float height) // ////////////////////////////////////////////////////////////////////// { float xGo=0, yGo=0, zGo = 0; SoSeparator *myAxis= new SoSeparator; SoSeparator *xGrp = new SoSeparator; SoSeparator *yGrp = new SoSeparator; SoSeparator *zGrp = new SoSeparator; SoSeparator *redAxis = createAxis(axisColors[0][0], axisColors[0][1], axisColors[0][2], height, "X"); SoSeparator *blueAxis = createAxis(axisColors[1][0], axisColors[1][1],axisColors[1][2], height, "Y"); SoSeparator *greenAxis = createAxis(axisColors[2][0], axisColors[2][1],axisColors[2][2], height, "Z"); SoTransform *xXform = new SoTransform; xXform->scaleFactor.setValue(1, 1, 1); xXform->rotation.setValue(SbVec3f(0.0, 0.0, 1.0),-M_PI_2); if(where == 2) xXform->translation.setValue(1, 0, 0); else xXform->translation.setValue(xGo, 0, 0); SoTransform *zXform = new SoTransform; zXform->scaleFactor.setValue(1.0, 1.0, 1.0); if(where == 2) zXform->translation.setValue(0, 0, 1); else zXform->translation.setValue(0, 0, zGo); zXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0),M_PI_2); SoTransform *yXform = new SoTransform; yXform->scaleFactor.setValue(1.0, 1.0, 1.0); if(where == 2) yXform->translation.setValue(0, 1, 0); else yXform->translation.setValue(0, yGo, 0); // to draw the ticker of the X upward, we still need to // rotate X for 180 degree. SoRotationXYZ *rotX = new SoRotationXYZ; rotX->axis = SoRotationXYZ::X; rotX->angle = M_PI; xGrp->addChild(rotX); xGrp->addChild(xXform); xGrp->addChild(redAxis); yGrp->addChild(yXform); yGrp->addChild(blueAxis); zGrp->addChild(zXform); zGrp->addChild(greenAxis); SoSeparator *axs = new SoSeparator; axs->addChild(xGrp); axs->addChild(yGrp); axs->addChild(zGrp); SoTransform *axsXform = new SoTransform; axsXform->translation.setValue(pos); myAxis->addChild(axsXform); myAxis->addChild(axs); return myAxis; } SoSeparator * createAxis(float red, float green, float blue, float height, const char * label) { SoSeparator *axisSep = new SoSeparator; SoMaterial *axisMtl = new SoMaterial; //define materil axisMtl->ambientColor.setValue(1.0,1.0,1.0); axisMtl->diffuseColor.setValue(red, green, blue); axisMtl->specularColor.setValue(1.0,1.0,1.0); axisMtl->shininess = 0.9; axisMtl->transparency = 0.0; //define a cylindar for the axis SoCylinder *cyl = new SoCylinder; cyl->radius = height/350.0; cyl->height = 1.1 * height; //define arrow SoSeparator *arrSep = new SoSeparator; SoCone *arrow = new SoCone; arrow->bottomRadius = height/150.0; arrow->height = 5.0*height/100.0; SoTransform *arrXform = new SoTransform; float pst = (cyl->height.getValue())/2.0; arrXform->translation.setValue(0.0, pst, 0.0); arrSep->addChild(arrXform); arrSep->addChild(arrow); // define font for the axis SoFont *axFont = new SoFont; axFont->name.setValue("Helvetica"); axFont->size.setValue(FONT_SIZE); SoText2 *axName = new SoText2; axName->string.setValue(label); arrSep->addChild(axFont); arrSep->addChild(axName); //add child to axisSep axisSep->addChild(axisMtl); axisSep->addChild(cyl); axisSep->addChild(arrSep); for(int i=0; i<=10; i++) axisSep->addChild(drawTicker((float)(i/10.0-0.5)*height, height/100.0)); return axisSep; } SoSeparator * drawTicker(float pos, float height) { // define ticker SoSeparator *tkSep = new SoSeparator; SoCylinder *ticker = new SoCylinder; ticker->radius = height/10.0; ticker->height = height; //define transform for the ticker SoTransform *tkXform = new SoTransform; tkXform->translation.setValue(0.00, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0),M_PI_2); tkSep->addChild(tkXform); tkSep->addChild(ticker); return tkSep; } auto/07p/plaut04/src/gmain.c++0000640000175000017500000025112513570013207013715 0ustar sksk#define XtNumber(arr) ((sizeof(arr) / sizeof(arr[0]))) #include #include #include #include "gplaut04.h" #include "gVarNames.h" #include "createDisk.h" #include "createSphere.h" #include "createLegend.h" #include "readFM.h" #include "stringtrim.h" #include "solution.h" #include "bifurcation.h" int specialColorItems = CL_SP_ITEMS; float fmData[12]; const char *autoDir; SbColor lineColor[NUM_SP_POINTS]; SbColor lineColorTemp[NUM_SP_POINTS]; SbColor lineColorOld[NUM_SP_POINTS]; SbColor envColors[12]; struct DefaultAxisItems dai; unsigned long linePattern[NUM_SP_POINTS]; unsigned long linePatternTemp[NUM_SP_POINTS]; unsigned long linePatternOld[NUM_SP_POINTS]; unsigned long stabilityLinePattern[2]; unsigned long stabilityLinePatternTemp[2]; bool blDrawTicker = false; bool useR3B = false; float diskTransparency = 0.7; bool diskFromFile = false; float diskRotation[4] = {1,0,0,M_PI_2}; float diskPosition[3]; float diskRadius = 1.0; float diskHeight = 0.001; float sphereTransparency = 0.7; bool sphereFromFile = false; float spherePosition[3]; float sphereRadius = 1.0; int whichType= 0 ; int whichTypeTemp= 0 ; int whichTypeOld = 0 ; int whichStyle= 0 ; int whichStyleTemp= 0 ; int whichStyleOld = 0 ; int whichCoord = 0 ; int whichCoordTemp = 0 ; int whichCoordOld = 0 ; int whichCoordSystem = 0 ; int whichCoordSystemTemp = 0 ; int whichCoordSystemOld = 0 ; unsigned long graphWidgetToggleSet = (unsigned long) 0 ; unsigned long graphWidgetToggleSetTemp = (unsigned long) 0 ; unsigned long graphWidgetToggleSetOld = (unsigned long) 0 ; UserData clientData; bool options[]= { TRUE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE }; bool optionsTemp[11]; bool optionsOld[11]; bool optBif[11], optSol[11]; bool setShow3D, setShow3DSol, setShow3DBif; long int animationLabel = MY_ALL; int winWidth, winHeight; std::vector xCoordIndices, yCoordIndices, zCoordIndices; std::vector lblIndices, lblChoice; int MAX_SAT_SPEED = 100; int MIN_SAT_SPEED = 0; int MAX_ORBIT_SPEED = 100; int MIN_ORBIT_SPEED = 0; float orbitSpeed = 1.0; float satSpeed = 0.5; float satRadius = 1.0; float lineWidthScaler = 1.0; float aniLineScaler = 2.0; float labelRadius = 1.0; int coloringMethod = -1; int coloringMethodType[2] = {-1, -1}; float bgTransparency = 0; float numPeriodAnimated = 1.0; long int numLabels; double legendScaleValues[2]; SoSeparator *userScene; SoSeparator *root; SoSeparator *starryBackground; std::vector xAxis, yAxis, zAxis, labels, coloringMethodList; int *myLabels; /////////////////////////////////////////////////////////////// // // Function prototypes // #if 0 static SoSeparator * drawATube(TubeNode cnode); static SoSeparator * MyFileRead(const char *filename, SbString &errorMessage); #endif static void setLegendValues(double* values); static void lookForThePoint(float position[],long int &bIdx, long int &sIdx); #if 0 static SoSeparator * createStarryBackground(int total,float diameter); #endif static SoSeparator * addLegend(); static SoSeparator * drawStarryBackground(char * bgFileName); static int readResourceParameters(const char *dir); #if 0 static void processPrinting(char* filename ); #endif // //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // // functions // //////////////////////////////////////////////////////////////////////// #if 0 //////////////////////////////////////////////////////////////////////// // void cropScene(const char* filename) // //////////////////////////////////////////////////////////////////////// { system("import my_temp.gif"); system("convert -crop 1024x768 my_temp.gif my_temp_cropped.gif"); system("convert my_temp_cropped.gif my_temp.eps"); system("rm my_temp.gif my_temp_cropped.gif"); } #endif //////////////////////////////////////////////////////////////////////// // // Write the graph to iv file. // void writeToFile(const char * fileName) // //////////////////////////////////////////////////////////////////////// { SoWriteAction myWrite; myWrite.getOutput()->openFile(fileName); myWrite.getOutput()->setBinary(FALSE); myWrite.apply(root); myWrite.getOutput()->closeFile(); } #if 0 //////////////////////////////////////////////////////////////////////// // static void processPrinting(char* filename ) // //////////////////////////////////////////////////////////////////////// { FILE *myFile = fopen(filename, "w"); if (myFile == NULL) { fprintf(stderr, "Cannot open output file\n"); exit(1); } printf("Printing scene... "); fflush(stdout); fclose(myFile); printf(" ...done printing.\n"); fflush(stdout); } #endif //////////////////////////////////////////////////////////////////////// // // Description: // Brings up the "HELP INFORMATIO" // // void showHelpDialog() // //////////////////////////////////////////////////////////////////////// { char *command = new char [strlen(autoDir) + 50]; sprintf(command, "%s%s", autoDir, "/plaut04/doc/userguide.pdf"); if (access(command, R_OK) != 0) { system("xmessage 'Sorry, could not find " "userguide.pdf' > /dev/null"); return; } int err = system("which xpdf> /dev/null"); if (err) { system("xmessage 'You must install xpdf" " for this function to work' > /dev/null"); return; } sprintf(command, "%s%s%s", "xpdf ",autoDir,"/plaut04/doc/userguide.pdf &"); system(command); delete [] command; } //////////////////////////////////////////////////////////////////////// // void updateScene() // //////////////////////////////////////////////////////////////////////// { int varIndices[3]; SoSeparator * newScene = new SoSeparator; std::vector::size_type mx = std::max(std::max(xCoordIndices.size(), yCoordIndices.size()), std::max(yCoordIndices.size(), zCoordIndices.size())); // look for the maximum/minum value in the x-axis, y-axis, z-axis if(whichType != BIFURCATION) { for(std::vector::size_type i=0; i::size_type component = i+1; varIndices[0]=xCoordIndices[ (i>=xCoordIndices.size())?(i%xCoordIndices.size()):(i)]; varIndices[1]=yCoordIndices[ (i>=yCoordIndices.size())?(i%yCoordIndices.size()):(i)]; varIndices[2]=zCoordIndices[ (i>=zCoordIndices.size())?(i%zCoordIndices.size()):(i)]; mySolNode->searchForMaxMin(component, varIndices); } } int time_on = TIME_IS_OFF; for(std::vector::size_type i=0; i=xCoordIndices.size())?(i%xCoordIndices.size()):(i)]; varIndices[1]=yCoordIndices[ (i>=yCoordIndices.size())?(i%yCoordIndices.size()):(i)]; varIndices[2]=zCoordIndices[ (i>=zCoordIndices.size())?(i%zCoordIndices.size()):(i)]; if (varIndices[0] == 0) time_on = TIME_ON_X; if (varIndices[1] == 0) time_on = TIME_ON_Y; if (varIndices[2] == 0) time_on = TIME_ON_Z; SoSeparator *result; if(whichType != BIFURCATION) { animationLabel = myLabels[lblIndices[0]]; mySolNode->copyDataToWorkArray(varIndices, i+1, mx, time_on); result = mySolNode->createSceneWithWidgets(); } else { myBifNode->copyDataToWorkArray(varIndices); result = myBifNode->createScene(); } newScene->addChild( result ); } // create starry background if(options[OPT_BACKGROUND]) { char *bgFileName = new char [strlen(autoDir) + 34]; sprintf(bgFileName, "%s%s",autoDir, "/plaut04/widgets/background.jpg"); newScene->addChild(drawStarryBackground(bgFileName)); delete [] bgFileName; } // add legend if(options[OPT_LEGEND]) { newScene->addChild(addLegend()); } if (!useR3B && options[OPT_REF_PLAN]) newScene->addChild(createDisk(diskPosition,diskRadius)); if (options[OPT_REF_SPHERE]) newScene->addChild(createSphere(spherePosition,sphereRadius)); if(userScene == NULL) { userScene = newScene; root->addChild(userScene); } else { root->removeAllChildren(); root->addChild(newScene); userScene = newScene; } } //////////////////////////////////////////////////////////////////////// // SoSeparator * drawStarryBackground(char * bgFileName) // //////////////////////////////////////////////////////////////////////// { SoSeparator *starryBg = new SoSeparator; SoTexture2 * bgTxture = new SoTexture2; bgTxture->filename.setValue(bgFileName); SoMaterial *bgMaterial = new SoMaterial; bgMaterial->transparency = bgTransparency; starryBg->addChild(bgMaterial); starryBg->addChild(bgTxture); SoTransform *bgXform = new SoTransform; bgXform->translation.setValue(0,0,-9); SoOrthographicCamera * bgCamera = new SoOrthographicCamera; SoCube * bgPlane = new SoCube(); bgPlane->width = 3.0; bgPlane->height = 3.0; bgPlane->depth = 0.01; SoDirectionalLight * bgLight = new SoDirectionalLight; bgLight->intensity = 0.05; bgLight->direction.setValue(0,0, -10); starryBg->addChild(bgLight); starryBg->addChild(bgCamera); starryBg->addChild(bgXform); starryBg->addChild(bgPlane); return starryBg; } //////////////////////////////////////////////////////////////////////// // SoSeparator * addLegend() // //////////////////////////////////////////////////////////////////////// { SoSeparator * result = new SoSeparator; SoOrthographicCamera *legendCamera = new SoOrthographicCamera; result->addChild(legendCamera); SbVec3f lgPos; lgPos.setValue(0.85, 0.65, -5.9); if(coloringMethod == CL_CURVE_NUMBER || coloringMethod == CL_BRANCH_NUMBER) { result->addChild(createBranchLegend(lgPos, lineColor)); } else if(coloringMethod == CL_STABILITY) { SbColor color[2]; color[0].setValue(1,0,0); color[1].setValue(0,0,1); result->addChild(createStabilityLegend(lgPos, color)); } else if( coloringMethod == CL_ORBIT_TYPE) { result->addChild(createDiscreteLegend(lgPos, lineColor)); } else { double values[5]; setLegendValues(values); result->addChild(createLegend(lgPos, values)); } result->addChild(new SoDirectionalLight); return result; } //////////////////////////////////////////////////////////////////////// // void setLegendValues(double* values) // //////////////////////////////////////////////////////////////////////// { for(int i=0; i<5; ++i) values[i] = legendScaleValues[0] + i*(legendScaleValues[1]-legendScaleValues[0])/4.0; } ////////////////////////////////////////////////////////////////////////// // // set parMax Color == RED // parMid Color == GREEN // parMin Color == BLUE // SoGroup * setLineAttributesByParameterValue(double parValue, double parMax, double parMid, double parMin, int stability, float scaler) // ////////////////////////////////////////////////////////////////////////// { legendScaleValues[0] = parMin; legendScaleValues[1] = parMax; SoDrawStyle * lineStyle = new SoDrawStyle; lineStyle->style = SoDrawStyle::FILLED; if(stability == 1 || stability == 3) lineStyle->linePattern = stabilityLinePattern[0]; else lineStyle->linePattern = stabilityLinePattern[1]; SoMaterial * lineMtl = new SoMaterial; lineMtl->diffuseColor.setValue(1.0, 1.0, 1.0); lineMtl->transparency = 0.0; // calculating the color. double colFactor; if(parMax != parMin) { if(parValue > parMid) { colFactor = (parValue-parMid)/(parMax-parMid); lineMtl->diffuseColor.setValue(1.0*colFactor, 1.0*(1-colFactor), 0.0); } else { colFactor = (parValue-parMin)/(parMid-parMin); lineMtl->diffuseColor.setValue(0.0*colFactor, 1.0*colFactor, 1.0*(1-colFactor)); } } lineStyle->lineWidth = 1.5*scaler; lineStyle->lineWidth = scaler; SoGroup * lineAttributes = new SoGroup; lineAttributes->addChild(lineStyle); lineAttributes->addChild(lineMtl); return lineAttributes; } ////////////////////////////////////////////////////////////////////////// // // Set the line pattern and color for the orbit according to // its stablity and type. // SoGroup * setLineAttributesByBranch(int branchID, int stability, float scaler) // ////////////////////////////////////////////////////////////////////////// { SoDrawStyle * lineStyle = new SoDrawStyle; lineStyle->style = SoDrawStyle::FILLED; if(stability == 1 || stability == 3) lineStyle->linePattern = stabilityLinePattern[0]; else lineStyle->linePattern = stabilityLinePattern[1]; SoMaterial * lineMtl = new SoMaterial; lineMtl->diffuseColor.setValue(1.0, 1.0, 1.0); lineMtl->transparency = 0.0; if(coloringMethod == CL_BRANCH_NUMBER) { if(whichType == SOLUTION) branchID = mySolNode->branchID(branchID); else branchID = myBifNode->branchID(branchID); branchID--; } lineStyle->lineWidth = 1.5*scaler; switch(abs(branchID)%13) { case 0: lineMtl->diffuseColor.setValue(lineColor[0]); lineStyle->lineWidth = scaler; break; case 1: lineMtl->diffuseColor.setValue(lineColor[1]); break; case 2: lineMtl->diffuseColor.setValue(lineColor[2]); break; case 3: lineMtl->diffuseColor.setValue(lineColor[3]); break; case 4: lineMtl->diffuseColor.setValue(lineColor[4]); break; case 5: lineMtl->diffuseColor.setValue(lineColor[5]); break; case 6: lineMtl->diffuseColor.setValue(lineColor[6]); break; case 7: lineMtl->diffuseColor.setValue(lineColor[7]); break; case 8: lineMtl->diffuseColor.setValue(lineColor[8]); break; case 9: lineMtl->diffuseColor.setValue(lineColor[9]); break; case 10: lineMtl->diffuseColor.setValue(lineColor[10]); lineStyle->lineWidth = scaler; break; case 11: lineMtl->diffuseColor.setValue(lineColor[11]); lineStyle->lineWidth = scaler; break; case 12: default: lineMtl->diffuseColor.setValue(lineColor[12]); lineStyle->lineWidth = scaler; break; } SoGroup * lineAttributes = new SoGroup; lineAttributes->addChild(lineStyle); lineAttributes->addChild(lineMtl); return lineAttributes; } ////////////////////////////////////////////////////////////////////////// // SoGroup * setLineColorBlendingByStability(float * vertices, long int size, int stability, float scaler) // ////////////////////////////////////////////////////////////////////////// { float (*colors)[3] = new float[size][3]; static float maxColor[3]; static float minColor[3]; for(int i=0; i<3; ++i) { maxColor[i] = envColors[5][i]; minColor[i] = envColors[6][i]; } for(int i=0; istyle = SoDrawStyle::FILLED; lineStyle->linePattern = stabilityLinePattern[0]; } else { lineStyle->style = SoDrawStyle::FILLED; lineStyle->linePattern = stabilityLinePattern[1]; } lineStyle->lineWidth = scaler; result->addChild(lineStyle); SoMaterial *myMaterials = new SoMaterial; myMaterials->diffuseColor.setValues(0, size, colors); result->addChild(myMaterials); SoMaterialBinding *myMaterialBinding = new SoMaterialBinding; myMaterialBinding->value = SoMaterialBinding::PER_VERTEX; result->addChild(myMaterialBinding); delete [] colors; return result; } ////////////////////////////////////////////////////////////////////////// // SoGroup * setLineAttributesByStability(int stability, float scaler) // ////////////////////////////////////////////////////////////////////////// { SoDrawStyle * lineStyle = new SoDrawStyle; lineStyle->style = SoDrawStyle::FILLED; SoMaterial * lineMtl = new SoMaterial; lineMtl->shininess = 0.9; if(stability == 1 || stability == 3) { lineStyle->linePattern = stabilityLinePattern[0]; lineMtl->diffuseColor.setValue(envColors[5]); } else { lineStyle->linePattern = stabilityLinePattern[1]; lineMtl->diffuseColor.setValue(envColors[6]); } lineStyle->lineWidth = scaler; SoGroup * lineAttributes = new SoGroup; lineAttributes->addChild(lineStyle); lineAttributes->addChild(lineMtl); return lineAttributes; } ////////////////////////////////////////////////////////////////////////// // // Set the line pattern and color for the orbit according to // its stablity and type. // SoGroup * setLineAttributesByType(int stability, int type, float scaler) // ////////////////////////////////////////////////////////////////////////// { SoDrawStyle * lineStyle = new SoDrawStyle; lineStyle->style = SoDrawStyle::FILLED; if(stability == 1 || stability == 3) lineStyle->linePattern = stabilityLinePattern[0]; else lineStyle->linePattern = stabilityLinePattern[1]; SoMaterial * lineMtl = new SoMaterial; lineMtl->shininess = 0.9; lineStyle->lineWidth = 1.5*scaler; switch(type) { case 0: lineMtl->diffuseColor.setValue(lineColor[0]); lineStyle->lineWidth = scaler; break; case 1: lineMtl->diffuseColor.setValue(lineColor[1]); break; case 2: lineMtl->diffuseColor.setValue(lineColor[2]); break; case 3: lineMtl->diffuseColor.setValue(lineColor[3]); break; case 4: lineMtl->diffuseColor.setValue(lineColor[4]); break; case -4: lineMtl->diffuseColor.setValue(lineColor[5]); break; case 5: lineMtl->diffuseColor.setValue(lineColor[6]); break; case 6: lineMtl->diffuseColor.setValue(lineColor[7]); break; case 7: lineMtl->diffuseColor.setValue(lineColor[8]); break; case 8: lineMtl->diffuseColor.setValue(lineColor[9]); break; case 9: lineMtl->diffuseColor.setValue(lineColor[10]); lineStyle->lineWidth = scaler; break; case -9: lineMtl->diffuseColor.setValue(lineColor[11]); lineStyle->lineWidth = scaler; break; default: lineMtl->diffuseColor.setValue(lineColor[12]); lineStyle->lineWidth = scaler; break; } SoGroup * lineAttributes = new SoGroup; lineAttributes->addChild(lineStyle); lineAttributes->addChild(lineMtl); return lineAttributes; } ////////////////////////////////////////////////////////////////////////// // SoGroup * setLineColorBlending(float * vertices, long int size, int stability, float scaler) // ////////////////////////////////////////////////////////////////////////// { float (*colors)[3] = new float[size][3]; static float maxColor[3] = //red { 1.0, 0.0, 0.0 }; static float midColor[3] = //green { 0.0, 1.0, 0.0 }; static float minColor[3] = //blue { 0.0, 0.0, 1.0 }; float maxValue = vertices[0]; float minValue = vertices[0]; float midValue = vertices[0]; for(int i=0; ivertices[i])minValue=vertices[i]; } if( whichType == SOLUTION && (coloringMethod != CL_POINT_NUMBER && (animationLabel == MY_ALL || options[OPT_PERIOD_ANI]) )) { legendScaleValues[0]= minValue = clientData.solMin[coloringMethod]; legendScaleValues[1]= maxValue = clientData.solMax[coloringMethod]; } else { legendScaleValues[0]= minValue; legendScaleValues[1]= maxValue; } midValue = (maxValue + minValue)/2.0; // interpolate the colors for each vertices. float dt = maxValue - minValue; float dtColor; for(int i=0; imidValue) { dt = maxValue - midValue; dtColor = maxColor[j]-midColor[j]; colors[i][j] = (dt<1.0e-9) ? ((midColor[j]+maxColor[j])/2.0) : (midColor[j] + dtColor * (vertices[i]-midValue)/dt); } else { dt = midValue - minValue; dtColor = midColor[j]-minColor[j]; colors[i][j] = (dt<1.0e-9) ? ((minColor[j]+midColor[j])/2.0) : (minColor[j] + dtColor * (vertices[i]-minValue)/dt); } } } SoGroup * result = new SoGroup ; // set line style and pattern SoDrawStyle * lineStyle = new SoDrawStyle; if(stability == 1 || stability == 3) { lineStyle->style = SoDrawStyle::FILLED; lineStyle->linePattern = stabilityLinePattern[0]; } else { lineStyle->style = SoDrawStyle::FILLED; lineStyle->linePattern = stabilityLinePattern[1]; } lineStyle->lineWidth = scaler; result->addChild(lineStyle); SoMaterial *myMaterials = new SoMaterial; myMaterials->diffuseColor.setValues(0, size, colors); result->addChild(myMaterials); SoMaterialBinding *myMaterialBinding = new SoMaterialBinding; myMaterialBinding->value = SoMaterialBinding::PER_VERTEX; result->addChild(myMaterialBinding); delete [] colors; return result; } #if 0 /////////////////////////////////////////////////////////////////////////// // SoSeparator * drawATube(TubeNode cnode) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *tSep = new SoSeparator; SoTransform *tXform = new SoTransform; tXform->translation.setValue(cnode.translation.x, cnode.translation.y, cnode.translation.z); tXform->rotation.setValue(SbVec3f(cnode.axis.x, cnode.axis.y, cnode.axis.z), cnode.angle); SoCylinder *tCyl = new SoCylinder; tCyl->radius = 0.005; tCyl->height = cnode.height; tCyl->parts = SoCylinder::SIDES; tSep->addChild(tXform); tSep->addChild(tCyl); return tSep; } #endif /////////////////////////////////////////////////////////////////////////// // SoSeparator * drawASphere(float position[], float size) // /////////////////////////////////////////////////////////////////////////// { float scaler = 1.0e-4; SoSeparator *satSep = new SoSeparator; SoTransform *satXform = new SoTransform; satXform->translation.setValue(position[0],position[1],position[2]); satSep->addChild(satXform); SoSeparator *satSph; bool obj = FALSE; SoInput mySceneInput; if (obj && mySceneInput.openFile("widgets/sattelite.iv")) { satSph = SoDB::readAll(&mySceneInput); if (satSph == NULL) { obj=FALSE; } else { mySceneInput.closeFile(); SoTransform *satTrans = new SoTransform; satTrans->scaleFactor.setValue(scaler,scaler,scaler); satSep->addChild(satTrans); satSep->addChild(satSph); satSep->addChild(satSph); obj = TRUE; } } else { obj = FALSE; } if(!obj) { SoSphere *satSph = new SoSphere; satSph->radius = size; satSep->addChild(satSph); } return satSep; } //////////////////////////////////////////////////////////////////////// // // initialize win basic things // static bool readSolutionAndBifurcationData(bool blFirstRead, const std::string& sFileName, const std::string& bFileName, const std::string& dFileName) // /////////////////////////////////////////////////////////////////////// { bool blOpenSolFile, blOpenBifFile; blOpenSolFile = mySolNode->parse(sFileName.c_str()); if(!blOpenSolFile) printf(" Solution file does not exist.\n"); mySolNode->alloc(); clientData.solMax = new float [mySolNode->nar()+1]; clientData.solMin = new float [mySolNode->nar()+1]; blOpenBifFile = myBifNode->parse(bFileName.c_str()); if(!blOpenBifFile) printf(" Bifurcation file does not exist!\n"); if((!blOpenBifFile) && (!blOpenSolFile) && (!blFirstRead)) return false; else if((!blOpenBifFile) && (!blOpenSolFile)) { // printf(" Target files do not exist!\n"); exit(1); } myBifNode->alloc(); myLabels = new int[std::max(myBifNode->totalLabels(), mySolNode->totalLabels())+SP_LBL_ITEMS]; clientData.labelIndex = new long int[std::max(myBifNode->totalLabels(), mySolNode->totalLabels())][4]; int varIndices[3]; if( blOpenBifFile) { if (!myBifNode->read(bFileName.c_str(), varIndices)) printf(" Failed to read the bifurcation file!\n"); } else { whichType = SOLUTION; } if( mySolNode->numOrbits() > 0 ) { blOpenSolFile = mySolNode->read(sFileName.c_str(), varIndices); if(!blOpenSolFile) printf(" Failed to read the solution file!\n"); else if(myBifNode->totalLabels() != 0 && mySolNode->totalLabels() != myBifNode->totalLabels()) { printf(" total labels in b-file is: %i, in s-file is: %i\n", myBifNode->totalLabels(), mySolNode->totalLabels()); printf(" The total number of labels in the bifurcation file is different from\n"); printf(" the total number of labels in the solution file! CHECK IT.\n"); exit(1); } if(mySolNode->nar() <= 3) { setShow3DSol = false; if(whichType != BIFURCATION) setShow3D = false; } } else { whichType = BIFURCATION; } if((!blOpenBifFile) && (!blOpenSolFile)) { exit(1); } clientData.maxndim = std::max(myBifNode->maxndim(),mySolNode->nar()-1); int st = readFM(dFileName.c_str(), myBifNode->totalNumPoints()); if(st!=0) printf(" Failed to read the diagnostic file.\n"); return TRUE; } //////////////////////////////////////////////////////////////////////// // void lookForThePoint(float position[],long int &bIdx, long int &sIdx) // //////////////////////////////////////////////////////////////////////// { int varIndices[3]; std::vector::size_type mx = std::max(std::max(xCoordIndices.size(), yCoordIndices.size()), std::max(yCoordIndices.size(), zCoordIndices.size())); float minDis = FLT_MAX; long int index = 0; long int ib = 0; float distance; float *data; sIdx = bIdx = 0; for(std::vector::size_type i=0; i=xCoordIndices.size())?(i%xCoordIndices.size()):(i)]; varIndices[1]=yCoordIndices[ (i>=yCoordIndices.size())?(i%yCoordIndices.size()):(i)]; varIndices[2]=zCoordIndices[ (i>=zCoordIndices.size())?(i%zCoordIndices.size()):(i)]; long int lblidx = lblIndices[0]; long int maxp, sumup = 0; if(whichType == BIFURCATION) { maxp = myBifNode->totalNumPoints(); } else { animationLabel = myLabels[lblIndices[0]]; if(animationLabel == MY_ALL || lblIndices.size() >1) maxp = mySolNode->totalNumPoints(); else { for(int j=0; jnumVerticesEachPeriod(j); maxp = mySolNode->numVerticesEachPeriod(lblidx); } } for(long int j=0; jdata()[j*myBifNode->nar()]; else data = mySolNode->data()[sumup+j]; distance = 0; for(int k=0; k<3; ++k) if(varIndices[k] != -1) { float diff = position[k]-data[varIndices[k]]; distance += diff * diff; } if(minDis > distance) { minDis = distance; index = j+sumup; } } if(whichType != BIFURCATION) { if(animationLabel == MY_ALL || lblIndices.size() >1) { for (ib = 0; ib < mySolNode->totalLabels(); ib++) { sumup += mySolNode->numVerticesEachPeriod(ib); if (sumup > index) break; } } else { ib = lblidx; } sIdx = index; bIdx = clientData.labelIndex[ib][1]; } else { bIdx = index; } } } #if 0 /////////////////////////////////////////////////////////////////////////// // void pointsToAxisAngle(float * a, float * b, TubeNode &value) // /////////////////////////////////////////////////////////////////////////// { float c[3]={0.,0.,0.}; float normc[3]; int i=0; value.translation.x=value.translation.y=value.translation.z=0.0; value.axis.x=value.axis.y=value.axis.z=0.0; value.angle=0.0; value.height=0.0; float scaler = 2.0; for(i=0; i<3; i++) c[i]=b[i]-a[i]; if(c[1]<0) { value.translation.x=b[0]; value.translation.y=b[1]; value.translation.z=b[2]; scaler = 2.0; for(i=0; i<3; i++) c[i]=-c[i]; } else { value.translation.x=a[0]; value.translation.y=a[1]; value.translation.z=a[2]; } float c_norm, axis_norm; c_norm=sqrt(c[0]*c[0]+c[1]*c[1]+c[2]*c[2]); value.height=c_norm*scaler; if(c_norm>0.0000001) { for(i=0; i<3; i++) normc[i]=0.0; for(i=0; i<3; i++) normc[i]=c[i]/c_norm; value.axis.x=normc[2]; value.axis.y=0.0; value.axis.z=-normc[0]; axis_norm=sqrt(value.axis.x*value.axis.x +\ value.axis.y*value.axis.y +\ value.axis.z*value.axis.z); if(axis_norm < 0.00000001) { value.angle=0.0; } else { value.angle=asin(axis_norm); } } } #endif //////////////////////////////////////////////////////////////////// // static SbBool writePickedPath (SoNode *result, const SbViewportRegion &viewport, const SbVec2s &cursorPosition) // //////////////////////////////////////////////////////////////////// { SoRayPickAction myPickAction(viewport); // Set an 4-pixel wide region around the pixel myPickAction.setPoint(cursorPosition); myPickAction.setRadius(4.0); // Start a pick traversal myPickAction.apply(result); const SoPickedPoint *myPickedPoint = myPickAction.getPickedPoint(); if (myPickedPoint == NULL) { return FALSE; } SbVec3f myPosition; myPosition = myPickedPoint->getPoint(); float position[3], x, y, z; long int sIdx, bIdx; int size; myPosition.getValue(x, y, z); position[0]=x; position[1]=y; position[2]=z; if (options[OPT_NORMALIZE_DATA]) { if(whichType != BIFURCATION) { mySolNode->denormalizePosition(position); } else { myBifNode->denormalizePosition(position); } } lookForThePoint(position, bIdx, sIdx); float *data; if(whichType != BIFURCATION) { if(sIdx > mySolNode->totalNumPoints() || sIdx < 0) return false; size = mySolNode->nar(); data = mySolNode->data()[sIdx]; } else { if (bIdx > myBifNode->totalNumPoints() || bIdx < 0) return false; size = myBifNode->nar(); data = &myBifNode->data()[bIdx * size]; } for(int ms=0; msgetEvent(); if (SO_MOUSE_PRESS_EVENT(event, ANY)) { const SbViewportRegion &myRegion = eventCB->getAction()->getViewportRegion(); writePickedPath(result, myRegion, event->getPosition(myRegion)); eventCB->setHandled(); } } /////////////////////////////////////////////////////////////////// // // Initialize the coordinate selection drop down list items // and the drop down label list items. // static void initCoordAndLableListItems() // /////////////////////////////////////////////////////////////////// { int i = 0; int nar = whichType == SOLUTION ? mySolNode->nar() : myBifNode->nar(); xAxis.clear(); yAxis.clear(); zAxis.clear(); for(i=0; inpar(); ++i) { std::stringstream s; s << "PAR(" << mySolNode->parID(i)+1 << ")"; coloringMethodList.push_back(s.str()); } } if(mySolNode->numOrbits() > 0) { // the solution file does exist. numLabels = mySolNode->numOrbits(); for(int j=0; jlabels(j); if(useR3B) { // initial mass dependent options. float lastMass = mySolNode->masses(1); blMassDependantOption = true; for(i=1; inumOrbits(); i++) { if(fabs(mySolNode->masses(i)-lastMass)/lastMass > 1.0e-3) { blMassDependantOption = false; break; } } if(blMassDependantOption) mass = lastMass; } } else { numLabels = myBifNode->totalLabels(); for(int j=0; jlabels(j); if(useR3B) blMassDependantOption = false; } if(useR3B && !blMassDependantOption) { options[OPT_PRIMARY ]= false; options[OPT_LIB_POINTS]= false; } options[OPT_LEGEND] = false; options[OPT_BACKGROUND] = false; numLabels += SP_LBL_ITEMS; myLabels[numLabels + MY_NONE] = MY_NONE; // -1 myLabels[numLabels + MY_SPEC] = MY_SPEC; // -2 myLabels[numLabels + MY_HALF] = MY_HALF; // -3 myLabels[numLabels + MY_ALL] = MY_ALL; // -4 labels.clear(); labels.push_back("ALL"); labels.push_back("HALF"); labels.push_back("SPEC"); labels.push_back("NONE"); int nty; const char *tylabels[] = { "MX","R4","R3","R2","R1","UZ","ZH","CP","BT"," ", "BP","LP","HB"," ","LP","BP","PD","TR","EP", "GH","LPD","LTR","PTR","TTR"}; for( i=0; i= 0) nty = clientData.labelIndex[i][2] % 10; else nty = -(-clientData.labelIndex[i][2] % 10); break; } if (nty != 0 && tylabels[nty+9][0] != ' ') { s << " " << tylabels[nty+9]; } labels.push_back(s.str()); } if(whichType == SOLUTION) { xCoordIndices = dai.solX; yCoordIndices = dai.solY; zCoordIndices = dai.solZ; } else { xCoordIndices = dai.bifX; yCoordIndices = dai.bifY; zCoordIndices = dai.bifZ; } //---------------------- Begin ---------------------------OCT 7, 04 int half = 2; lblIndices.clear(); //tmp = strtok(manyChoice, ","); if( lblChoice[0] == MY_ALL) // -4 { lblIndices.push_back(numLabels + MY_ALL); half = 2; } else if(lblChoice[0] == MY_HALF) // -3 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) { if(abs(clientData.labelIndex[j][2])!= 4 || (j+1)%half == 0) lblIndices.push_back(j); } half *= 2; } else if(lblChoice[0] == MY_SPEC) // -2 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) { if(clientData.labelIndex[j][2] != TYPE_UZ && clientData.labelIndex[j][2] != TYPE_RG && clientData.labelIndex[j][2] != TYPE_EP_ODE && clientData.labelIndex[j][2] != TYPE_MX) lblIndices.push_back(j); } half = 2; } else if(lblChoice[0] == MY_NONE) // -1 { lblIndices.push_back(numLabels + MY_NONE); half = 2; } else // Specified labels { for(std::vector::size_type idx = 0; idx < lblIndices.size(); idx++) lblIndices.push_back(lblChoice[idx]); half = 2; } for(int i=0; i<11; ++i) { optSol[i] = options[i]; optBif[i] = options[i]; } //----------------------- End ---------------------------- if(!setShow3D) { for(std::vector::size_type i=0; i> lineColor[k]; } readAString(buffer, word); std::stringstream(word) >> std::hex >> linePattern; } /////////////////////////////////////////////////////////////////// // // Read flex number of numbers. // each call of this function, read one line // template static void readNData(std::stringstream& buffer, T *data, int size ) // /////////////////////////////////////////////////////////////////// { std::string word; for(int k=0; k> data[k]; } } template static void readNData(std::stringstream& buffer, std::queue &data) // /////////////////////////////////////////////////////////////////// { std::string word; T item; while ( readAString(buffer, word) ) { std::stringstream(word) >> item; data.push(item); } } /////////////////////////////////////////////////////////////////// // // Read a string from the buffer. Used to parse those boolean // variables or sigle value in a line of the resource file. // static std::stringstream& readAString(std::stringstream& buffer, std::string& aString) // /////////////////////////////////////////////////////////////////// { std::getline(buffer, aString, ','); return buffer; } /////////////////////////////////////////////////////////////////// // static void readAHexdecimal(std::stringstream& buffer, unsigned long & aHexdecimal ) // /////////////////////////////////////////////////////////////////// { std::string aString; readAString(buffer, aString); std::stringstream(aString) >> std::hex >> aHexdecimal; } /////////////////////////////////////////////////////////////////// // double fortranatof(char* word) // /////////////////////////////////////////////////////////////////// { // check for numbers such as 2.8430486351-315 char *p; size_t len = strlen(word); double d = strtod(word, &p); if (len >= 6 && p == word+len-4 && (*p == '-' || *p == '+' || *p++ == 'D')) { p[-2] = '1'; p[-1] = 'E'; d*=atof(p-2); } return d; } /////////////////////////////////////////////////////////////////// // // INITIALIZE all the variables // If the resource file exists, read it and update the default values. // If it does not exist, just return and use default values. // int readResourceParameters(const char *dir) // /////////////////////////////////////////////////////////////////// { int state = 0; float aVector[3]; unsigned long aHex; std::string aString; const char *file; if(!useR3B) file = "plaut04.rc"; else file = "r3bplaut04.rc"; std::ifstream inFile(file); if (!inFile && dir) { std::string resource = dir; resource += "/"; resource += file; inFile.open(resource.c_str()); } if (!inFile) { std::string resource = autoDir; resource += "/plaut04/"; resource += file; inFile.open(resource.c_str()); if(!inFile) { printf("Unable to open the resource file. I will use the default values.\n"); state = 1; return state; } } std::string line; while ( std::getline(inFile, line) ) { if(line[0] != '#') // else it is a comment line, discard it. Nothing need to do here. { std::stringstream buffer(line); std::string str; std::getline(buffer, str, '='); strrighttrim(str); strlefttrim(str); const char *strTemp = str.c_str(); bool blDealt = false; if( !blDealt ) { for(int i = 0; i> whichType; break; case 1: buffer >> whichStyle; break; case 2: buffer >> winWidth; break; case 3: buffer >> winHeight; break; case 4: buffer >> coloringMethodType[BIFURCATION]; coloringMethodType[SOLUTION] = coloringMethodType[BIFURCATION]; break; case 5: buffer >> coloringMethodType[SOLUTION]; break; case 6: buffer >> coloringMethodType[BIFURCATION]; break; case 7: buffer >> lineWidthScaler; break; case 8: buffer >> aniLineScaler; break; case 9: buffer >> satSpeed; satSpeed /= 100.0; break; case 10: buffer >> MAX_SAT_SPEED; break; case 11: buffer >> MIN_SAT_SPEED; break; case 12: buffer >> orbitSpeed; orbitSpeed /= 50.0; break; case 13: buffer >> MAX_ORBIT_SPEED; break; case 14: buffer >> MIN_ORBIT_SPEED; break; case 15: buffer >> whichCoord; break; case 16: buffer >> bgTransparency; break; case 17: buffer >> numPeriodAnimated; break; case 18: buffer >> labelRadius; break; case 19: { readNData(buffer, diskRotation, 4); break; } case 20: { readNData(buffer, diskPosition, 3); break; } case 21: buffer >> diskRadius; break; case 22: buffer >> diskHeight; break; case 23: buffer >> diskTransparency; break; case 24: readAString(buffer, aString); strrighttrim(aString); strlefttrim(aString); diskFromFile = (strcasecmp(aString.c_str(),"Yes")==0) ? true : false; break; case 25: { readNData(buffer, spherePosition, 3); break; } case 26: buffer >> sphereRadius; break; case 27: buffer >> sphereTransparency; break; case 28: readAString(buffer, aString); strrighttrim(aString); strlefttrim(aString); sphereFromFile = (strcasecmp(aString.c_str(),"Yes")==0) ? true : false; break; case 29: buffer >> satRadius; break; case 30: buffer >> largePrimRadius; break; case 31: buffer >> smallPrimRadius; break; case 32: buffer >> libPtScaler; break; case 33: buffer >> whichCoordSystem; break; case 34: buffer >> numOfStars; break; } blDealt = true; break; } } } if( !blDealt ) { for(int i = 0; i<2; ++i) { if(strcasecmp(strTemp, hexdecimalVarNames[i])==0) { readAHexdecimal(buffer, aHex); stabilityLinePattern[i] = aHex; blDealt = true; break; } } } if( !blDealt) { float colors[3]; for(unsigned i = 0; i parIDs; readNData(buffer, parIDs); mySolNode->set_parID(parIDs); blDealt = true; } //---------------------- Begin ---------------------------OCT 7, 04 if(!blDealt && strcasecmp(strTemp, "Labels")==0) { std::queue lblIdx; readNData(buffer, lblIdx); blDealt = true; lblChoice.clear(); while(!lblIdx.empty()) { lblChoice.push_back(lblIdx.front() - 1); lblIdx.pop(); } } //----------------------- End ---------------------------OCT 7, 04 if(!blDealt) { for(unsigned i = 0; i < XtNumber(axesNames) && (!blDealt); ++i) { if(strcasecmp(strTemp, axesNames[i]) == 0) { std::queue pars; readNData(buffer, pars); int size = pars.size(); blDealt = true; std::vector *xyz = 0; switch ( i ) { case 0: xyz = &dai.solX; break; case 1: xyz = &dai.solY; break; case 2: xyz = &dai.solZ; break; case 3: xyz = &dai.bifX; break; case 4: xyz = &dai.bifY; break; case 5: xyz = &dai.bifZ; break; } xyz->clear(); for(int is=0; ispush_back(pars.front()); pars.pop(); } } } } } } if( whichType != BIFURCATION ) { setShow3D = setShow3DSol; } else { setShow3D = setShow3DBif; } coloringMethod = coloringMethodType[whichType]; return state; } ///////////////////////////////////////////////////////////////////// // // Set initial values for those temp variables according to // their correspondent variables. // static void initTempVariables() // ///////////////////////////////////////////////////////////////////// { graphWidgetToggleSet = 0; for(unsigned i = 0; i parIDs; parIDs.push(10); mySolNode->set_parID(parIDs); setShow3DSol = setShow3D; setShow3DBif = setShow3D; coloringMethodType[SOLUTION] = coloringMethodType[BIFURCATION] = coloringMethod; if((autoDir=getenv("AUTO_DIR")) == NULL) autoDir=(char *)"."; } //////////////////////////////////////////////////////////////////////// // // main - init Inventor and Xt, set up a scene graph and the main window, // display this window, and loop forever... // int main(int argc, char *argv[]) // //////////////////////////////////////////////////////////////////////// { // usage: // drawme --- using the default file with name "s.text" as input file. // drawme mu fileName --- using 'fileName' as input, file1 must be a AUTO s file. // NOTE // if the s.xxx file does exist, the mass read from it will be used to substitue // that from the command line // even there are different. Because sometime the command line input mu may be // not as accurate as the one read from the s.xxx file // so the mu read from command line is not important in general. It can be used // only if the s.xxx file does not exist or the system fails to read it. char **pargv = argv; char *dir = 0; int argcleft = argc - 1; std::string sFileName, bFileName, dFileName; if( argcleft > 0 ) { pargv = &argv[1]; if( strcmp(*pargv, "-r3b")==0 ) { useR3B = true; pargv++; argcleft--; } } if( argcleft > 0 ) { bool is97 = false; if( argcleft > 1 && strcmp(*pargv, "97")==0 ) { is97 = true; pargv++; argcleft--; } if( argcleft > 1) { sFileName = *pargv; bFileName = *pargv; dFileName = *pargv; dir = *pargv; pargv++; argcleft--; sFileName += "/"; bFileName += "/"; dFileName += "/"; } if ( is97 ) { sFileName += "q."; bFileName += "p."; dFileName += "d."; } else { sFileName += "s."; bFileName += "b."; dFileName += "d."; } sFileName += *pargv; bFileName += *pargv; dFileName += *pargv; argcleft--; } else { sFileName = "fort.8"; bFileName = "fort.7"; dFileName = "fort.9"; } if( argcleft > 0) { if(!useR3B) printf(" usage: plaut04 [version] [path] [name]\n"); else printf(" usage: r3bplaut04 [path] [name]\n"); printf(" For example:\n"); if(!useR3B) { printf(" plaut04 --- view the fort.7, fort.8 in the current directory \n"); printf(" plaut04 H1 --- view s.H1, b.H1 in the current directory \n"); printf(" plaut04 /home/he/myR3B/me H1 --- view s.H1, b.H1 in the /home/he/myR3B/me directory \n"); printf(" plaut04 97 H1 --- view AUTO 97 files: q.H1, p.H1 in the current directory \n"); printf(" plaut04 97 /home/he/myR3B/me H1 --- view AUTO 97 files: q.H1, p.H1 in the /home/he/myR3B/me directory \n"); } else { printf(" r3bplaut04 --- view the fort.7, fort.8 in the current directory \n"); printf(" r3bplaut04 H1 --- view s.H1, b.H1 in the current directory \n"); printf(" r3bplaut04 /home/he/myR3B/me H1 --- view s.H1, b.H1 in the /home/he/myR3B/me directory \n"); printf(" r3bplaut04 97 H1 --- view AUTO 97 files: q.H1, p.H1 in the current directory \n"); printf(" r3bplaut04 97 /home/he/myR3B/me H1 --- view AUTO 97 files: q.H1, p.H1 in the /home/he/myR3B/me directory \n"); } exit(1) ; } mySolNode = new Solution; myBifNode = new Bifurcation; setVariableDefaultValues(); readResourceParameters(dir); readSolutionAndBifurcationData(true, sFileName, bFileName, dFileName); initCoordAndLableListItems(); initTempVariables(); soxtmain(argc,argv); return 0; } ////////////////////////////////////////////////////////////////////////// // void postDeals() // ////////////////////////////////////////////////////////////////////////// { mySolNode->dealloc(); myBifNode->dealloc(); delete [] clientData.multipliers; delete [] clientData.numFM; delete [] clientData.solMax; delete [] clientData.solMin; delete [] myLabels; delete [] clientData.labelIndex; } ////////////////////////////////////////////////////////////////////////// // int writePreferValuesToFile() // ////////////////////////////////////////////////////////////////////////// { int state = 0; FILE * outFile; if(!useR3B) outFile = fopen("plaut04.rc.out", "w"); else outFile = fopen("r3bplaut04.rc.out", "w"); if (!outFile) { if(!useR3B) printf("Unable to open the resource file. I will use the default values.\n"); else printf("Unable to open the resource file.\n"); state = 1; return state; } // write header fprintf(outFile,"#version 0.0\n\n"); fprintf(outFile,"# Line colors are represented by RGB values from 0 to 1.0.\n"); fprintf(outFile,"# DEFAULT color is also used when animationLabel == MY_ALL, i.e.,\n"); fprintf(outFile,"# when showing all solutions and highlighting the solutions changes.\n"); fprintf(outFile,"# Point Type RED GREEN BLUE\n"); // write line color and pattern for(int i = 0; i::size_type is=0; is < (lblChoice[is] < 0 ? 1 : lblIndices.size()); ++is) { fprintf(outFile, "Labels = %i", lblChoice[is]+1); } fprintf(outFile, "\n"); fprintf(outFile,"\n# Draw Scale:\n"); fprintf(outFile, "Draw Scale = "); (blDrawTicker) ? fprintf(outFile, " YES \n") : fprintf(outFile, " NO \n"); // deal with parameter IDs fprintf(outFile,"\n# Set the active AUTO parameter indices:\n"); fprintf(outFile, "parameter ID = "); for(int is=0; isnpar(); ++is) { fprintf(outFile, " %i, ", mySolNode->parID(is)); } fprintf(outFile, " \n"); // turn 3D/2D fprintf(outFile,"\n# Choose 3D or 2D graph for the bifurcation diagram:\n"); fprintf(outFile, "3DBif = %s\n", setShow3DBif ? "YES" : "No"); fprintf(outFile,"\n# Choose 3D or 2D graph for the solution diagram:\n"); fprintf(outFile, "3DSol = %s\n", setShow3DSol ? "YES" : "No"); fprintf(outFile,"\n# Set X, Y, Z axes for the solution diagram:\n"); fprintf(outFile,"# 0 is Time for X,Y,Z.\n"); fprintf(outFile,"%-25.25s = ", axesNames[0]); for(std::vector::size_type is=0; isgetNumChildren(); i>0; i--) root->removeChild(i-1); } //////////////////////////////////////////////////////////////////////// // static bool parseFileName(const char *fname, std::string& sFileName, std::string& bFileName, std::string& dFileName) // //////////////////////////////////////////////////////////////////////// { std::stringstream filename(fname); std::string myPath, myName, path; while(getline(filename, path, '/')) { myPath += "/"; myPath += path; myName = path; } sFileName = myPath; bFileName = myPath; dFileName = myPath; int j = myPath.length(); int i = myName.length(); sFileName[j-i]='s'; sFileName[j-i+1]='.'; bFileName[j-i]='b'; bFileName[j-i+1]='.'; dFileName[j-i]='d'; dFileName[j-i+1]='.'; return true; } //////////////////////////////////////////////////////////////////////// // // Reads the given file and insert the geometry under the selection // node. If the node didn't have any children, the viewAll() method is // automatically called. // SbBool readFile(const char *filename) // //////////////////////////////////////////////////////////////////////// { SbString errorMessage; std::string sFileName, bFileName, dFileName; postDeals(); parseFileName(filename, sFileName, bFileName, dFileName); bool rs = readSolutionAndBifurcationData(false, sFileName, bFileName, dFileName); if(!rs) { SoText2 * errMsg = new SoText2; errMsg->string.setValue(" Open File Error! Maybe it is not a correct AUTO data file. "); root->addChild(errMsg); return false; } initCoordAndLableListItems(); setListValue(); initTempVariables(); updateScene(); return TRUE; } #if 0 ///////////////////////////////////////////////////////////////////////////////// // static FILE * convertToInventor(const char *filename) // //////////////////////////////////////////////////////////////////////// { #define BUFSIZE 512 #define destinationFileType "Inventor2.1File" char routeprintCmd[BUFSIZE]; char conversionCmd[BUFSIZE]; FILE *pipeFile; FILE *ivDataPipe = NULL; sprintf(routeprintCmd, "/usr/sbin/routeprint -d %s %s 2> /dev/null", destinationFileType, filename); if (NULL != (pipeFile = popen(routeprintCmd, "r"))) { (void) fgets(conversionCmd, BUFSIZE, pipeFile); if (0 != pclose(pipeFile)) { return ivDataPipe; } ivDataPipe = popen(conversionCmd, "r"); } return ivDataPipe; } ///////////////////////////////////////////////////////////////////////////// // // Read all objects from the given file and return under one separator. // SoSeparator * MyFileRead(const char *filename, SbString &errorMessage) // ///////////////////////////////////////////////////////////////////////////// { SoInput in; FILE *ivDataPipe = NULL; if (0 != access(filename, R_OK)) { errorMessage = "Error opening the file\n\""; errorMessage += filename; errorMessage += "\"."; errorMessage += "\n\nThe file is unreadable or does not exist."; errorMessage += "\nYou may not have read permission on this file."; return NULL; } if (! in.openFile(filename, TRUE)) { errorMessage = "Error opening the file\n\""; errorMessage += filename; errorMessage += "\"."; errorMessage += "\n\nInventor was unable to read that file."; errorMessage += "\nYou may not have permission to read this file."; return NULL; } if (! in.isValidFile() ) { if ((ivDataPipe = convertToInventor(filename)) != NULL) { in.setFilePointer(ivDataPipe); } else { errorMessage = "Unable to read the file\n\""; errorMessage += filename; errorMessage += "\"."; errorMessage += "\n\nInventor was unable to read that file, and"; errorMessage += "\nthat file could not be translated to Inventor format.\n\n"; errorMessage += "Are you sure that this is a supported filetype?"; errorMessage += "\nYou may not have the proper translators installed,"; errorMessage += "\nor the desktop filetype database may not be built."; return NULL; } } SoSeparator *sep = SoDB::readAll(&in); if (sep == NULL) { errorMessage = "Inventor encountered an error while reading\n\""; errorMessage += filename; errorMessage += "\"."; errorMessage += "\n\nThis may not be a valid Inventor file."; return NULL; } in.closeFile(); if (ivDataPipe != NULL) { fclose(ivDataPipe); } return sep; } #endif auto/07p/plaut04/src/Makefile.in0000750000175000017500000000305513570013207014374 0ustar sksk.SUFFIXES: .SUFFIXES: .c++ .o OBJS = bifurcation.o solution.o stringtrim.o \ tube.o polygon3d.o readFM.o createBoundingBox.o\ createCoords.o axis.o createLegend.o gmain.o @SOXT_OBJS@ \ rounding.o printToPS.o createSphere.o createDisk.o \ r3b/createLibPoint.o r3b/createPrimary.o r3b/gmainr3b.o \ r3b/toInertialFrame.o CXX=@CXX@ INC=@top_srcdir@/plaut04/includes INCLUDES=-I$(INC) @DEPS_INCLUDES@ CFLAGS=@CFLAGS@ @X_CFLAGS@ DEPS_LIBS=@DEPS_LIBS@ MOC=@MOC@ LIBS=$(DEPS_LIBS) .c++.o: $(CXX) $(INCLUDES) $(CFLAGS) -c $< -o $@ @top_srcdir@/bin/plaut04: $(OBJS) $(CXX) $(CFLAGS) -o $@ $(OBJS) $(LIBS) gmainqt.moc.c++: gmainqt.h $(MOC) $< -o $@ clean: rm -f *.o gmainqt.moc.c++ axis.o: $(INC)/gplaut04.h axis.h bifurcation.o: bifurcation.h createCoords.h rounding.h tube.h $(INC)/gplaut04.h createBoundingBox.o: createBoundingBox.h createCoords.o: createCoords.h $(INC)/gplaut04.h axis.h createDisk.o: createDisk.h createLegend.o: createLegend.h createSphere.o: createSphere.h gmain.o: $(INC)/gplaut04.h $(INC)/gVarNames.h bifurcation.h solution.h \ createDisk.h createSphere.h createLegend.h readFM.h stringtrim.h r3b/gmainr3b.o: $(INC)/gplaut04.h gmainxt.o: solution.h bifurcation.h $(INC)/gplaut04.h gmainqt.o: solution.h bifurcation.h $(INC)/gplaut04.h printToPS.o: printToPS.h polygon3d.o: polygon3d.h readFM.o: readFM.h $(INC)/gplaut04.h rounding.o: rounding.h solution.o: solution.h createCoords.h rounding.h tube.h $(INC)/gplaut04.h stringtrim.o: stringtrim.h r3b/toInertialFrame.o: $(INC)/gplaut04.h tube.o: tube.h polygon3d.h auto/07p/plaut04/src/drawCoords.h0000640000175000017500000000057013570013207014604 0ustar sksk#ifndef DRAWCOORDS_H #define DRAWCOORDS_H #include #if 0 SoSeparator *drawCoords(int where, float pos[], SbVec3f axisColors[], float height); #endif SoSeparator *drawTicker(float pos,float height); SoSeparator *createAxis(float red, float green, float blue, float height, const char *); #endif auto/07p/plaut04/src/gmainqt.c++0000640000175000017500000023301213570013207014255 0ustar sksk#define LENGTH(arr) ((sizeof(arr) / sizeof(arr[0]))) #include #if defined(__APPLE__) && defined(__MACH__) #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if QT_VERSION < 0x40000 #define toLocal8Bit local8Bit #define addButton insert #define addItem insertItem #define setObjectName setName #define setMinimum setMinValue #define setMaximum setMaxValue #define setSingleStep setLineStep #define KEYSEQUENCE_OPEN Qt::CTRL+Qt::Key_O #define KEYSEQUENCE_SAVE Qt::CTRL+Qt::Key_S #define KEYSEQUENCE_PRINT Qt::CTRL+Qt::Key_P #define KEYSEQUENCE_QUIT Qt::CTRL+Qt::Key_Q #else #define setCaption setWindowTitle #define insertItem(a,b,c,d,e) addAction(a,b,c,d) #define insertSeparator addSeparator #define setCurrentItem setCurrentIndex #define currentItem currentIndex #define QPopupMenu QMenu #define setItemChecked(i,x) actions()[i]->setChecked(x) #define setItemEnabled(i,x) actions()[i]->setEnabled(x) #define setItemVisible(i,x) actions()[i]->setVisible(x) #define getSaveFileName(dir,filter,parent,name,caption) getSaveFileName(parent,caption,dir,filter) #define getOpenFileName(dir,filter,parent) getOpenFileName(parent,QString::null,dir,filter) #define KEYSEQUENCE_OPEN QKeySequence::Open #define KEYSEQUENCE_SAVE QKeySequence::Save #define KEYSEQUENCE_PRINT QKeySequence::Print #define KEYSEQUENCE_QUIT QKeySequence::Quit #endif #include "gplaut04.h" #include "solution.h" #include "bifurcation.h" #include "gmainqt.h" #define LBL_OFFSET 4 static QSlider *satAniSpeedSlider, *orbitAniSpeedSlider; static EditMenuItems *typeMenuItems, *styleMenuItems, *coordMenuItems; static EditMenuItems *coordSystemMenuItems; extern SbBool printToPostScript (SoNode *root, const char *filename, SoQtExaminerViewer *viewer, int printerDPI); extern SoSeparator * createBoundingBox(); static MainWindow *mainWindow; //////////////////////////////////////////////////////////////////////// // // functions // //////////////////////////////////////////////////////////////////////// DecSpinBox::DecSpinBox(int minValue, int maxValue, int step, QWidget * parent, const char *name) : QSpinBox(parent) { setMinimum(minValue); setMaximum(maxValue); setSingleStep(step); setObjectName(name); } #if QT_VERSION >= 0x40000 QString DecSpinBox::textFromValue( int value ) const { return QString("%1.%2").arg(value/10).arg(abs(value%10)); } int DecSpinBox::valueFromText( QString text ) const { return int(text.toFloat()*10); } #else QString DecSpinBox::mapValueToText( int value ) { return QString("%1.%2").arg(value/10).arg(abs(value%10)); } int DecSpinBox::mapTextToValue( bool* ok ) { return int(text().toFloat()*10); } #endif //////////////////////////////////////////////////////////////////////// // void MainWindow::orbitSpeedCB(int value) // //////////////////////////////////////////////////////////////////////// { orbitSpeed = value/50.0; ///50.0; ///75.0; if(orbitSpeed == 0.0) orbitSpeed = 0.0001; updateScene(); } //////////////////////////////////////////////////////////////////////// // void MainWindow::satSpeedCB(int value) // //////////////////////////////////////////////////////////////////////// { satSpeed = value/100.0; updateScene(); } //////////////////////////////////////////////////////////////////////// // void MainWindow::numPeriodAnimatedCB(const QString &myChoice) // //////////////////////////////////////////////////////////////////////// { if ( myChoice == "inf" ) { numPeriodAnimated = -1; } else { numPeriodAnimated = myChoice.toFloat(); } //cout <<" Num Period Animated "<currentItem(); const char *myChoice = myChoic.toLocal8Bit(); coloringMethod = (strcasecmp(myChoice,"COMP")==0) ? CL_COMPONENT: ((strcasecmp(myChoice,"TYPE")==0) ? CL_ORBIT_TYPE : ((strcasecmp(myChoice,"CURV")==0) ? CL_CURVE_NUMBER: ((strcasecmp(myChoice,"BRAN")==0) ? CL_BRANCH_NUMBER: ((strcasecmp(myChoice,"PONT")==0) ? CL_POINT_NUMBER : ((strcasecmp(myChoice,"LABL")==0) ? CL_LABELS: ((strcasecmp(myChoice,"STAB")==0) ? CL_STABILITY : choice - specialColorItems)))))); coloringMethodType[whichType] = coloringMethod; updateScene(); } //////////////////////////////////////////////////////////////////////// // void MainWindow::lineWidthCB(int position) // //////////////////////////////////////////////////////////////////////// { lineWidthScaler = position/10.0; updateScene(); } //////////////////////////////////////////////////////////////////////// // // These are called by Qt when a menu item is picked from the File menu. // // Common quit function void MainWindow::quit() { postDeals(); delete renderArea; qApp->exit(0); } void MainWindow::open() // //////////////////////////////////////////////////////////////////////// { getFileName(OPEN_ITEM); } void MainWindow::save() // //////////////////////////////////////////////////////////////////////// { getFileName(SAVE_ITEM); } void MainWindow::print() // //////////////////////////////////////////////////////////////////////// { getFileName(PRINT_ITEM); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt when a menu item is picked from the Edit menu. // void MainWindow::editMenuPick(int which) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems; menuItems = coordSystemMenuItems; menuItems->which = which; whichCoordSystem = which; whichCoordSystemOld = whichCoordSystem; updateScene(); } void MainWindow::editMenuRotating() // //////////////////////////////////////////////////////////////////////// { editMenuPick(ROTATING_F); } void MainWindow::editMenuBary() // //////////////////////////////////////////////////////////////////////// { editMenuPick(INERTIAL_B); } void MainWindow::editMenuBig() // //////////////////////////////////////////////////////////////////////// { editMenuPick(INERTIAL_S); } void MainWindow::editMenuSmall() // //////////////////////////////////////////////////////////////////////// { editMenuPick(INERTIAL_E); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt when a menu item is picked from the TYPE menu. // void MainWindow::typeMenuPick(int which) // //////////////////////////////////////////////////////////////////////// { // get the user data for this menu item. EditMenuItems *menuItems; menuItems = typeMenuItems; menuItems->which = which; whichType = which; if ( whichType != whichTypeOld ) { graphWidgetToggleSet = 0; if( whichType != BIFURCATION ) { setShow3D = setShow3DSol; for(int i=0; i<11; ++i) { optBif[i] = options[i]; options[i] = optSol[i]; graphWidgetToggleSet |= options[i] << i; } } else { setShow3D = setShow3DBif; for(int i=0; i<11; ++i) { optSol[i] = options[i]; options[i] = optBif[i]; graphWidgetToggleSet |= options[i] << i; } } coloringMethod = coloringMethodType[whichType]; } whichTypeOld = whichType; setListValue(); updateScene(); } void MainWindow::typeMenuSolution() // //////////////////////////////////////////////////////////////////////// { typeMenuPick(SOLUTION); } void MainWindow::typeMenuBifurcation() // //////////////////////////////////////////////////////////////////////// { typeMenuPick(BIFURCATION); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt when a menu item is picked from the Option menu. // void MainWindow::optMenuPick(int which) // //////////////////////////////////////////////////////////////////////// { options[which] = !options[which]; if (options[which]) graphWidgetToggleSet |= (1 << which); else graphWidgetToggleSet &= ~(1 << which); satAniSpeedSlider->setEnabled(options[OPT_SAT_ANI]); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); if(useR3B && graphWidgetToggleSet & (1<setListValue(); } /////////////////////////////////////////////////////////////////////////// // void MainWindow::setListValue() // /////////////////////////////////////////////////////////////////////////// { int nar; if(whichType != BIFURCATION) { xCoordIndices = dai.solX; yCoordIndices = dai.solY; zCoordIndices = dai.solZ; nar = mySolNode->nar(); } else { xCoordIndices = dai.bifX; yCoordIndices = dai.bifY; zCoordIndices = dai.bifZ; nar = myBifNode->nar(); } xAxisList->clear(); yAxisList->clear(); zAxisList->clear(); for (std::vector::size_type i = 0; i < xAxis.size(); i++) { xAxisList->addItem(xAxis[i].c_str()); yAxisList->addItem(yAxis[i].c_str()); zAxisList->addItem(zAxis[i].c_str()); } coloringMethodList.clear(); coloringMethodList.push_back("BRAN"); coloringMethodList.push_back("STAB"); coloringMethodList.push_back("PONT"); coloringMethodList.push_back("CURV"); specialColorItems = 4; if(whichType != BIFURCATION) { coloringMethodList.push_back("TYPE"); coloringMethodList.push_back("LABL"); coloringMethodList.push_back("COMP"); specialColorItems = 7; } for(int i=0; inpar(); ++i) { std::stringstream s; s << "PAR(" << mySolNode->parID(i)+1 << ")"; coloringMethodList.push_back(s.str()); } } colorMethodSeletionList->clear(); for (std::vector::size_type i = 0; i < coloringMethodList.size(); i++) colorMethodSeletionList->addItem(coloringMethodList[i].c_str()); labelsList->clear(); for (std::vector::size_type i = 0; i < labels.size(); i++) labelsList->addItem(labels[i].c_str()); xAxisList->setCurrentItem(xCoordIndices[0]); yAxisList->setCurrentItem(yCoordIndices[0]); zAxisList->setCurrentItem(zCoordIndices[0]); labelsList->setCurrentItem(lblChoice[0]+LBL_OFFSET); //lblIndices[0] colorMethodSeletionList->setCurrentItem(coloringMethod < 0 ? coloringMethod+CL_SP_ITEMS : coloringMethod+specialColorItems); dimButton->setText(setShow3D ? "3D" : "2D"); if(setShow3D) zAxisList->setEnabled(true); else { zCoordIndices.clear(); zCoordIndices.push_back(-1); zAxisList->setEnabled(false); } } //////////////////////////////////////////////////////////////////////// // // This is called by Qt when a menu item is picked from the STYLE menu. // void MainWindow::styleMenuPick(int which) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems; menuItems = styleMenuItems; menuItems->which = which; whichStyle = which; whichStyleOld = whichStyle; updateScene(); } void MainWindow::styleMenuLine() { styleMenuPick(LINE); } void MainWindow::styleMenuTube() { styleMenuPick(TUBE); } void MainWindow::styleMenuSurface() { styleMenuPick(SURFACE); } void MainWindow::styleMenuMesh() { styleMenuPick(MESH_POINTS); } void MainWindow::styleMenuAll() { styleMenuPick(ALL_POINTS); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt when a menu item is picked from the STYLE menu. // void MainWindow::coordMenuPick(int which) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems; menuItems = coordMenuItems; menuItems->which = which; if(which == DRAW_TICKER) blDrawTicker = !blDrawTicker ; else { whichCoord = which; whichCoordOld = whichCoord; } updateScene(); } void MainWindow::coordMenuNone() { coordMenuPick(NO_COORD); } void MainWindow::coordMenuCenter() { coordMenuPick(COORDORIGIN); } void MainWindow::coordMenuLB() { coordMenuPick(LEFTBACK); } void MainWindow::coordMenuLA() { coordMenuPick(LEFTAHEAD); } void MainWindow::coordMenuOrigin() { coordMenuPick(COORD_AT_ORIGIN); } void MainWindow::coordMenuScale() { coordMenuPick(DRAW_TICKER); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt just before the TYPE menu is displayed. // void MainWindow::typeMenuDisplay() // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = typeMenuItems; menuItems->items->setItemChecked(BIFURCATION, false); menuItems->items->setItemChecked(SOLUTION, false); menuItems->items->setItemChecked(whichType, true); menuItems->items->setItemEnabled(BIFURCATION, true); menuItems->items->setItemEnabled(SOLUTION, true); if(mySolNode->numOrbits() == 0) menuItems->items->setItemEnabled(SOLUTION, false); if(myBifNode->totalNumPoints() == 0) menuItems->items->setItemEnabled(BIFURCATION, false); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt just before the STYLE menu is displayed. // void MainWindow::styleMenuDisplay() // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = styleMenuItems; menuItems->items->setItemChecked(LINE, false); menuItems->items->setItemChecked(TUBE, false); menuItems->items->setItemChecked(SURFACE, false); menuItems->items->setItemChecked(MESH_POINTS, false); menuItems->items->setItemChecked(ALL_POINTS, false); if((useR3B && whichCoordSystem != ROTATING_F) || whichType == BIFURCATION) { menuItems->items->setItemEnabled(SURFACE, false); menuItems->items->setItemEnabled(MESH_POINTS, false); menuItems->items->setItemEnabled(ALL_POINTS, false); if(useR3B && (menuItems->which == SURFACE || menuItems->which == MESH_POINTS || menuItems->which == ALL_POINTS)) menuItems->which = LINE; } else { menuItems->items->setItemEnabled(SURFACE, true); menuItems->items->setItemEnabled(MESH_POINTS, true); menuItems->items->setItemEnabled(ALL_POINTS, true); } menuItems->items->setItemChecked(menuItems->which, true); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt just before the STYLE menu is displayed. // void MainWindow::coordMenuDisplay() // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = coordMenuItems; if(menuItems->which == DRAW_TICKER) { #if QT_VERSION < 0x40000 menuItems->items->setItemChecked(DRAW_TICKER, blDrawTicker); #else menuItems->items->setItemChecked(DRAW_TICKER+1, blDrawTicker); #endif } else { menuItems->items->setItemChecked(NO_COORD, false); menuItems->items->setItemChecked(COORDORIGIN, false); menuItems->items->setItemChecked(LEFTBACK, false); menuItems->items->setItemChecked(LEFTAHEAD, false); menuItems->items->setItemChecked(COORD_AT_ORIGIN, false); #if QT_VERSION < 0x40000 menuItems->items->setItemChecked(DRAW_TICKER, blDrawTicker); #else menuItems->items->setItemChecked(DRAW_TICKER+1, blDrawTicker); #endif menuItems->items->setItemChecked(menuItems->which, true); } } //////////////////////////////////////////////////////////////////////// // // This is called by Qt just before the Edit menu is displayed. // void MainWindow::centerMenuDisplay() // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = coordSystemMenuItems; menuItems->items->setItemChecked(ROTATING_F, false); menuItems->items->setItemChecked(INERTIAL_B, false); menuItems->items->setItemChecked(INERTIAL_S, false); menuItems->items->setItemChecked(INERTIAL_E, false); menuItems->items->setItemChecked(menuItems->which, true); bool enable = whichType == SOLUTION; menuItems->items->setItemEnabled(ROTATING_F, enable); menuItems->items->setItemEnabled(INERTIAL_B, enable); menuItems->items->setItemEnabled(INERTIAL_E, enable); menuItems->items->setItemEnabled(INERTIAL_S, enable); } //////////////////////////////////////////////////////////////////////// // // This is called by Qt just before the TYPE menu is displayed. // #if QT_VERSION >= 0x40000 #undef setItemChecked #undef setItemEnabled #undef setItemVisible #define setItemChecked(i,x) actions()[optItem(i)]->setChecked(x) #define setItemEnabled(i,x) actions()[optItem(i)]->setEnabled(x) #define setItemVisible(i,x) actions()[optItem(i)]->setVisible(x) #endif unsigned MainWindow::optItem(unsigned i) { unsigned j = i; if (useR3B) { if (i > OPT_LIB_POINTS) j = i+1; } else { if (i <= OPT_REF_SPHERE) j += 2; // 0,1=>2,3 else if (i <= OPT_SAT_ANI) j -= 4; // 4,5=>0,1 else j -= 2; // 6..=>4.. } return j; } void MainWindow::optMenuDisplay() // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = optMenuItems; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { if (!useR3B && (i == OPT_PRIMARY || i == OPT_LIB_POINTS)) continue; menuItems->items->setItemChecked(i, (graphWidgetToggleSet & (1<items->setItemEnabled(OPT_PRIMARY, blMassDependantOption); menuItems->items->setItemEnabled(OPT_LIB_POINTS, blMassDependantOption); if(graphWidgetToggleSet & (1<items->setItemEnabled(OPT_PRIMARY, false); menuItems->items->setItemEnabled(OPT_LIB_POINTS, false); menuItems->items->setItemEnabled(OPT_REF_PLAN, false); menuItems->items->setItemChecked(OPT_PRIMARY, false); menuItems->items->setItemChecked(OPT_LIB_POINTS, false); menuItems->items->setItemChecked(OPT_REF_PLAN, false); } else { menuItems->items->setItemEnabled(OPT_PRIMARY, true); menuItems->items->setItemEnabled(OPT_LIB_POINTS, true); menuItems->items->setItemEnabled(OPT_REF_PLAN, true); } } menuItems->items->setItemVisible(OPT_PERIOD_ANI, whichType == SOLUTION); menuItems->items->setItemVisible(OPT_SAT_ANI, whichType == SOLUTION); menuItems->items->setItemVisible(OPT_DRAW_LABELS, whichType != SOLUTION); menuItems->items->setItemVisible(OPT_LABEL_NUMBERS, whichType != SOLUTION); if(whichType == BIFURCATION) { menuItems->items->setItemEnabled(OPT_LABEL_NUMBERS, (graphWidgetToggleSet & (1<addMenu(tr("&File")); #endif pulldown->insertItem("&Open...", this, SLOT(open()), KEYSEQUENCE_OPEN, -1); pulldown->insertItem("&Export...", this, SLOT(save()), KEYSEQUENCE_SAVE, -1); pulldown->insertItem("&Print...", this, SLOT(print()), KEYSEQUENCE_PRINT, -1); pulldown->insertSeparator(); pulldown->insertItem("&Quit", this, SLOT(quit()), KEYSEQUENCE_QUIT, -1); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Help menu and all its items. // QPopupMenu * MainWindow::buildHelpMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); #else pulldown = menuBar()->addMenu(tr("&Help")); #endif pulldown->insertItem("&About", this, SLOT(showAboutDialog()), 0, -1); pulldown->insertSeparator(); pulldown->insertItem("&HELP", this, SLOT(showHelp()), 0, -1); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Option menu and all its items. // QPopupMenu * MainWindow::buildOptionMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); pulldown->setCheckable(true); #else pulldown = menuBar()->addMenu(tr("&Options")); #endif connect(pulldown, SIGNAL(aboutToShow()), this, SLOT(optMenuDisplay())); EditMenuItems *menuItems = new EditMenuItems; menuItems->items = pulldown; optMenuItems = menuItems; if (!useR3B) { pulldown->insertItem("&Highlight Orbit", this, SLOT(optMenuPeriod()), 0, OPT_PERIOD_ANI); pulldown->insertItem("&Orbit Animation", this, SLOT(optMenuSat()), 0, OPT_SAT_ANI); } pulldown->insertItem("Draw &Reference Plane", this, SLOT(optMenuPlane()), 0, OPT_REF_PLAN); pulldown->insertItem("Draw R&eference Sphere", this, SLOT(optMenuSphere()), 0, OPT_REF_SPHERE); if (useR3B) { pulldown->insertItem("Draw &Primaries", this, SLOT(optMenuPrimaries()), 0, OPT_PRIMARY); pulldown->insertItem("Draw &Libration Pts", this, SLOT(optMenuLibration()), 0, OPT_LIB_POINTS); pulldown->insertSeparator(); pulldown->insertItem("&Orbit Animation", this, SLOT(optMenuPeriod()), 0, OPT_PERIOD_ANI); pulldown->insertItem("&Satellite Animation", this, SLOT(optMenuSat()), 0, OPT_SAT_ANI); } pulldown->insertItem("&Draw Labels", this, SLOT(optMenuLabels()), 0, OPT_DRAW_LABELS); pulldown->insertItem("Sho&w Label Numbers", this, SLOT(optMenuNumbers()), 0, OPT_LABEL_NUMBERS); pulldown->insertItem("Draw &Background", this, SLOT(optMenuBackground()), 0, OPT_BACKGROUND); pulldown->insertItem("&Add Legend", this, SLOT(optMenuLegend()), 0, OPT_LEGEND); pulldown->insertItem("&Normalize Data", this, SLOT(optMenuNormalize()), 0, OPT_NORMALIZE_DATA); pulldown->insertSeparator(); preferDialog = NULL; pulldown->insertItem("&PREFERENCES", this, SLOT(createPreferDialog()), 0, -1); #if QT_VERSION >= 0x40000 for (int j = 0; j < pulldown->actions().size() - 2; ++j) pulldown->actions()[j]->setCheckable(true); #endif return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Edit menu and all its items. // QPopupMenu * MainWindow::buildCenterMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); pulldown->setCheckable(true); #else pulldown = menuBar()->addMenu(tr("&Center")); #endif connect(pulldown, SIGNAL(aboutToShow()), this, SLOT(centerMenuDisplay())); coordSystemMenuItems = new EditMenuItems; coordSystemMenuItems->items = pulldown; coordSystemMenuItems->which = whichCoordSystem; pulldown->insertItem("&Rotating Frame", this, SLOT(editMenuRotating()), 0, ROTATING_F); pulldown->insertSeparator(); pulldown->insertItem("Bary &Centered", this, SLOT(editMenuCentered()), 0, INERTIAL_B); pulldown->insertItem("&Big Primary Centered", this, SLOT(editMenuBig()), 0, INERTIAL_S); pulldown->insertItem("&Small Primary Centered", this, SLOT(editMenuSmall()), 0, INERTIAL_E); #if QT_VERSION >= 0x40000 for (int i = ROTATING_F; i <= INERTIAL_E; i++) pulldown->actions()[i]->setCheckable(true); #endif return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the STYLE menu and all its items. // QPopupMenu * MainWindow::buildStyleMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); #else pulldown = menuBar()->addMenu(tr("&Style")); #endif styleMenuItems = new EditMenuItems; styleMenuItems->items = pulldown; styleMenuItems->which = whichStyle; connect(pulldown, SIGNAL(aboutToShow()), this, SLOT(styleMenuDisplay())); #if QT_VERSION < 0x40000 pulldown->setCheckable(true); #endif pulldown->insertItem("&Line", this, SLOT(styleMenuLine()), 0, LINE); pulldown->insertItem("&Tube", this, SLOT(styleMenuTube()), 0, TUBE); pulldown->insertItem("&Surface", this, SLOT(styleMenuSurface()), 0, SURFACE); pulldown->insertItem("&Mesh Points", this, SLOT(styleMenuMesh()), 0, MESH_POINTS); pulldown->insertItem("&All Points", this, SLOT(styleMenuAll()), 0, ALL_POINTS); #if QT_VERSION >= 0x40000 for (int i = LINE; i <= ALL_POINTS; i++) pulldown->actions()[i]->setCheckable(true); #endif return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Coordinates menu and all its items. // QPopupMenu * MainWindow::buildCoordMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); #else pulldown = menuBar()->addMenu(tr("&Draw Coord")); #endif coordMenuItems = new EditMenuItems; coordMenuItems->items = pulldown; coordMenuItems->which = whichCoord; connect(pulldown, SIGNAL(aboutToShow()), this, SLOT(coordMenuDisplay())); #if QT_VERSION < 0x40000 pulldown->setCheckable(true); #endif pulldown->insertItem("&NONE", this, SLOT(coordMenuNone()), 0, NO_COORD); pulldown->insertItem("&Coord Center", this, SLOT(coordMenuCenter()), 0, COORDORIGIN); pulldown->insertItem("Left and &Back", this, SLOT(coordMenuLB()), 0, LEFTBACK); pulldown->insertItem("Left and &Ahead", this, SLOT(coordMenuLA()), 0, LEFTAHEAD); pulldown->insertItem("At &Origin", this, SLOT(coordMenuOrigin()), 0, COORD_AT_ORIGIN); pulldown->insertSeparator(); pulldown->insertItem("&Draw Scale", this, SLOT(coordMenuScale()), 0, DRAW_TICKER); #if QT_VERSION >= 0x40000 for (int i = COORDORIGIN; i <= COORD_AT_ORIGIN; i++) pulldown->actions()[i]->setCheckable(true); pulldown->actions()[DRAW_TICKER+1]->setCheckable(true); #endif return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the TYPE menu and all its items. // QPopupMenu * MainWindow::buildTypeMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown; #if QT_VERSION < 0x40000 pulldown = new QPopupMenu(this); #else pulldown = menuBar()->addMenu(tr("&Type")); #endif typeMenuItems = new EditMenuItems; typeMenuItems->items = pulldown; typeMenuItems->which = whichType; #if QT_VERSION < 0x40000 pulldown->setCheckable(true); #endif connect(pulldown, SIGNAL(aboutToShow()), this, SLOT(typeMenuDisplay())); pulldown->insertItem("&Solution", this, SLOT(typeMenuSolution()), 0, SOLUTION); pulldown->insertItem("&Bifurcation", this, SLOT(typeMenuBifurcation()), 0, BIFURCATION); #if QT_VERSION >= 0x40000 pulldown->actions()[SOLUTION]->setCheckable(true); pulldown->actions()[BIFURCATION]->setCheckable(true); #endif return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the pulldown menu bar and its menus. // void MainWindow::buildMenu() // //////////////////////////////////////////////////////////////////////// { QPopupMenu *pulldown2 = NULL; QPopupMenu *pulldown1, *pulldown3, *pulldown4, *pulldown5, *pulldown6, *pulldown7; // menu bar pulldown1 = buildFileMenu(); if(useR3B) pulldown2 = buildCenterMenu(); pulldown3 = buildStyleMenu(); pulldown4 = buildTypeMenu(); pulldown7 = buildCoordMenu(); pulldown5 = buildOptionMenu(); pulldown6 = buildHelpMenu(); #ifdef USE_BK_COLOR // set the background color for the pull down menus. pulldown1->setPaletteBackgroundColor("white"); if (useR3B) pulldown2->setPaletteBackgroundColor("white"); pulldown3->setPaletteBackgroundColor("white"); pulldown4->setPaletteBackgroundColor("white"); pulldown5->setPaletteBackgroundColor("white"); pulldown6->setPaletteBackgroundColor("white"); #endif // the text in the menubar for these menus QMenuBar *menubar = menuBar(); #if QT_VERSION < 0x40000 menubar->insertItem("&File", pulldown1); menubar->insertItem("&Type", pulldown4); menubar->insertItem("&Style", pulldown3); menubar->insertItem("&Draw Coord", pulldown7); if (useR3B) menubar->insertItem("&Center", pulldown2); menubar->insertItem("&Options", pulldown5); menubar->insertItem("&Help", pulldown6); #endif #if defined(__APPLE__) && defined(__MACH__) // Workaround: do not use native menu bar of Mac OS X Mavericks and later struct utsname info; if (uname(&info) >= 0) { char * dot_position = strchr(info.release, '.'); if (dot_position) { *dot_position = 0; if (atoi(info.release) >= 13) menubar->setNativeMenuBar(false); } } #endif } //////////////////////////////////////////////////////////////////////// // void MainWindow::dimensionToggledCB() // //////////////////////////////////////////////////////////////////////// { static bool buttonState = setShow3D; buttonState = !buttonState; if(buttonState) { setShow3D = true; zAxisList->setEnabled(true); setListValue(); } else { setShow3D = false; zCoordIndices.clear(); zCoordIndices.push_back(-1); zAxisList->setEnabled(false); dimButton->setText("2D"); } if(whichType != BIFURCATION) setShow3DSol = setShow3D; else setShow3DBif = setShow3D; updateScene(); } //////////////////////////////////////////////////////////////////////// // void MainWindow::createBdBoxCB() // //////////////////////////////////////////////////////////////////////// { static bool btnState = false; SoSeparator * scene = sceneGraph; btnState = !btnState; if(btnState) scene->addChild(createBoundingBox()); else { SoSeparator * bdBox = (SoSeparator *)SoNode::getByName("bdBox"); scene->removeChild(bdBox); } } //////////////////////////////////////////////////////////////////////// // // This creates the main window contents. In this case, we have a // menubar at the top of the window, and a render area filling out // the remainder. These widgets are layed out with a QMainWindow widget. // MainWindow::MainWindow() : QMainWindow() // //////////////////////////////////////////////////////////////////////// { struct ViewerAndScene { SoQtExaminerViewer *viewer; char *filename; SoNode *scene; } ; sceneGraph = new SoSeparator; sceneGraph->ref(); SoEventCallback *mouseEventCB = new SoEventCallback; sceneGraph->addChild(mouseEventCB); sceneGraph->addChild(root); // build menubar buildMenu(); // build carrier for the x, y, z, and label lists. #if QT_VERSION >= 0x40000 QToolBar *listCarrier = addToolBar("ToolBar"); #define ADD_LISTCARRIER_WIDGET(x) listCarrier->addWidget(x) #else QToolBar *listCarrier = new QToolBar( this ); #define ADD_LISTCARRIER_WIDGET(x) (void)x #endif #ifdef USE_BK_COLOR setPaletteBackgroundColor("white"); menuBar()->setPaletteBackgroundColor("white"); listCarrier->setPaletteBackgroundColor("white"); #endif // build the xAxis drop down list QLabel *xLbl = new QLabel( " X", listCarrier ); ADD_LISTCARRIER_WIDGET(xLbl); // Create an editable Combobox xAxisList = new QComboBox(listCarrier); xAxisList->setObjectName("xAxis"); xAxisList->setEditable(true); ADD_LISTCARRIER_WIDGET(xAxisList); for ( std::vector::size_type i = 0; i < xAxis.size(); i++ ) xAxisList->addItem( xAxis[i].c_str() ); xAxisList->setCurrentItem(xCoordIndices[0]); // Connect the activated SIGNALs of the Comboboxes with SLOTs connect(xAxisList, SIGNAL(activated(const QString &)), this, SLOT(xListCallBack(const QString &))); #ifdef USE_BK_COLOR xAxisList->setPaletteBackgroundColor("white"); #endif // build the yAxis drop down list // Create a editable Combobox QLabel *yLbl = new QLabel(" Y", listCarrier); ADD_LISTCARRIER_WIDGET(yLbl); yAxisList = new QComboBox(listCarrier); yAxisList->setObjectName("yAxis"); yAxisList->setEditable(true); ADD_LISTCARRIER_WIDGET(yAxisList); for ( std::vector::size_type i = 0; i < yAxis.size(); i++ ) yAxisList->addItem( yAxis[i].c_str() ); yAxisList->setCurrentItem(yCoordIndices[0]); // Connect the activated SIGNALs of the Comboboxes with SLOTs connect(yAxisList, SIGNAL(activated(const QString &)), this, SLOT(yListCallBack(const QString & ))); #ifdef USE_BK_COLOR yAxisList->setPaletteBackgroundColor("white"); #endif //build the zAxis drop down list // Create a editable Combobox QLabel *zLbl = new QLabel(" Z", listCarrier); ADD_LISTCARRIER_WIDGET(zLbl); zAxisList = new QComboBox(listCarrier); zAxisList->setObjectName("zAxis"); zAxisList->setEditable(true); ADD_LISTCARRIER_WIDGET(zAxisList); for ( std::vector::size_type i = 0; i < zAxis.size(); i++ ) zAxisList->addItem( zAxis[i].c_str() ); zAxisList->setCurrentItem(zCoordIndices[0]); // Connect the activated SIGNALs of the Comboboxes with SLOTs connect(zAxisList, SIGNAL(activated(const QString &)), this, SLOT(zListCallBack(const QString &))); #ifdef USE_BK_COLOR zAxisList->setPaletteBackgroundColor("white"); #endif // build the LABELs drop down list QLabel *lLbl = new QLabel(" Label", listCarrier); ADD_LISTCARRIER_WIDGET(lLbl); labelsList = new QComboBox(listCarrier); labelsList->setObjectName("Labels"); labelsList->setEditable(true); ADD_LISTCARRIER_WIDGET(labelsList); for ( std::vector::size_type i = 0; i < labels.size(); i++ ) labelsList->addItem( labels[i].c_str() ); labelsList->setCurrentItem(lblChoice[0]+LBL_OFFSET); //lblIndices[0] // Add Callback function for the LABELs drop down list connect(labelsList, SIGNAL(activated(const QString &)), this, SLOT(lblListCallBack(const QString &))); #ifdef USE_BK_COLOR labelsList->setPaletteBackgroundColor("white"); labelsList->setPaletteForegroundColor("red"); #endif // build the COLORING Method drop down list QLabel *colorLbl = new QLabel(" Color", listCarrier); ADD_LISTCARRIER_WIDGET(colorLbl); colorMethodSeletionList = new QComboBox(listCarrier); colorMethodSeletionList->setObjectName("ColorMethodlist"); colorMethodSeletionList->setEditable(true); ADD_LISTCARRIER_WIDGET(colorMethodSeletionList); for ( std::vector::size_type i = 0; i < coloringMethodList.size(); i++ ) colorMethodSeletionList->addItem(coloringMethodList[i].c_str()); colorMethodSeletionList->setCurrentItem(coloringMethod < 0 ? coloringMethod+CL_SP_ITEMS : coloringMethod+specialColorItems); // Add Callback function for the coloring method seletion drop down list connect(colorMethodSeletionList, SIGNAL(activated(const QString &)), this, SLOT(colorMethodSelectionCB(const QString &))); //-----------------------------------------------------Nov 06 // build the numPeriodAnimated drop down list QLabel *numPeriodLbl = new QLabel(" Period", listCarrier); ADD_LISTCARRIER_WIDGET(numPeriodLbl); int nItems = 7; int iam = 1; QComboBox *numPeriodAnimatedList = new QComboBox(listCarrier); numPeriodAnimatedList->setObjectName("list"); numPeriodAnimatedList->setEditable(true); ADD_LISTCARRIER_WIDGET(numPeriodAnimatedList); for ( int j = 0; j < nItems; j++ ) { QString numberP; if (j == 0) { numberP = "0"; } else if (j < nItems - 1) { numberP.sprintf("%i", iam); iam *= 2; } else numberP = "inf"; numPeriodAnimatedList->addItem(numberP); } int i; if (numPeriodAnimated > 0) i = ((int)(log(numPeriodAnimated)/log(2.0))) + 1; else if (numPeriodAnimated == 0) i = 0; else i = nItems - 1; numPeriodAnimatedList->setCurrentItem(i); // Add Callback function for the numberPeriodAnimated drop down list connect(numPeriodAnimatedList, SIGNAL(activated(const QString &)), this, SLOT(numPeriodAnimatedCB(const QString &))); //----------------------------------------------------------------> Nov 06 End #ifdef USE_BK_COLOR //set the background color for the labels xLbl->setPaletteBackgroundColor("white"); yLbl->setPaletteBackgroundColor("white"); zLbl->setPaletteBackgroundColor("white"); lLbl->setPaletteBackgroundColor("white"); #endif // create spinbox for the line width control. QLabel *spLbl = new QLabel(" Line Thickness", listCarrier); ADD_LISTCARRIER_WIDGET(spLbl); DecSpinBox *spinBox = new DecSpinBox(10, 100, 1, listCarrier, "spinBox"); ADD_LISTCARRIER_WIDGET(spinBox); spinBox->setValue(10); // Callbacks for the spinebox connect(spinBox, SIGNAL(valueChanged(int)), this, SLOT(lineWidthCB(int))); // Create slider to control speed QLabel *satSldLbl = new QLabel(useR3B ? " Sat " : " Anim", listCarrier); ADD_LISTCARRIER_WIDGET(satSldLbl); satAniSpeedSlider = new QSlider(Qt::Horizontal, listCarrier); satAniSpeedSlider->setObjectName("Speed"); satAniSpeedSlider->setMinimum(MIN_SAT_SPEED); satAniSpeedSlider->setMaximum(MAX_SAT_SPEED); satAniSpeedSlider->setPageStep(1); satAniSpeedSlider->setValue((int)(satSpeed*100)); ADD_LISTCARRIER_WIDGET(satAniSpeedSlider); satAniSpeedSlider->setEnabled(options[OPT_SAT_ANI]); #ifdef USE_BK_COLOR satAniSpeedSlider->setPaletteBackgroundColor("white"); #endif // Callbacks for the slider connect(satAniSpeedSlider, SIGNAL(valueChanged(int)), this, SLOT(satSpeedCB(int))); QLabel *orbitSldLbl = new QLabel(" Orbit", listCarrier); ADD_LISTCARRIER_WIDGET(orbitSldLbl); orbitAniSpeedSlider = new QSlider(Qt::Horizontal, listCarrier); orbitAniSpeedSlider->setObjectName("Speed2"); orbitAniSpeedSlider->setMinimum(MIN_ORBIT_SPEED); orbitAniSpeedSlider->setMaximum(MAX_ORBIT_SPEED); orbitAniSpeedSlider->setPageStep(1); orbitAniSpeedSlider->setValue((int)(orbitSpeed*50)); ADD_LISTCARRIER_WIDGET(orbitAniSpeedSlider); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); #ifdef USE_BK_COLOR orbitAniSpeedSlider->setPaletteBackgroundColor("white"); #endif // Callbacks for the slider2 connect(orbitAniSpeedSlider, SIGNAL(valueChanged(int)), this, SLOT(orbitSpeedCB(int))); QWidget *widget = new QWidget(this); // create RENDER AREA FOR THE graphics. renderArea = new SoQtExaminerViewer(widget); renderArea->setSize(SbVec2s(winWidth, winHeight)); renderArea->setBackgroundColor(envColors[0]); if(useR3B) renderArea->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); #ifdef USE_EXAM_VIEWER QFont f("Helvetica", 8); QPushButton *newButton = new QPushButton("BOX", renderArea->getAppPushButtonParent()); newButton->setFont(f); newButton->setFixedSize(27,27); connect(newButton, SIGNAL(clicked()), this, SLOT(createBdBoxCB())); renderArea->addAppPushButton(newButton); #endif QString xString; zAxisList->setEnabled(setShow3D); xString = setShow3D ? "3D" : "2D"; dimButton = new QPushButton(xString, renderArea->getAppPushButtonParent()); dimButton->setFont(f); dimButton->setFixedSize(27,27); connect(dimButton, SIGNAL(clicked()), this, SLOT(dimensionToggledCB())); renderArea->addAppPushButton(dimButton); setCentralWidget(widget); // used for printing scene to ps files #if 0 ViewerAndScene *vwrAndScene = new ViewerAndScene; vwrAndScene->scene = renderArea->getSceneGraph(); vwrAndScene->viewer = renderArea; #endif updateScene(); renderArea->setSceneGraph(sceneGraph); resize(winWidth,winHeight); mouseEventCB->addEventCallback( SoMouseButtonEvent::getClassTypeId(), myMousePressCB, renderArea->getSceneManager()->getSceneGraph()); // Set termination condition. connect(qApp, SIGNAL(lastWindowClosed()), this, SLOT(quit())); } //////////////////////////////////////////////////////////////////////// // LineColorSpinBox::LineColorSpinBox(int minValue, int maxValue, int step, QWidget * parent, const char *name, int id) : DecSpinBox(minValue, maxValue, step, parent, name) // //////////////////////////////////////////////////////////////////////// { setWrapping(true); which = id; setValue((int)(lineColor[id/3][id%3]*10)); connect(this, SIGNAL(valueChanged(int)), this, SLOT(valueChangedCB(int))); } //////////////////////////////////////////////////////////////////////// // // When the line color changed, this function will be raised. // void LineColorSpinBox::valueChangedCB(int value) // //////////////////////////////////////////////////////////////////////// { int lineNumber = which / 3; int columnNumber = which % 3; lineColorTemp[lineNumber][columnNumber] = value/10.0; } //////////////////////////////////////////////////////////////////////// // LinePatternComboBox::LinePatternComboBox(bool rw, QWidget * parent, const char *name, int id) : QComboBox(parent) // //////////////////////////////////////////////////////////////////////// { static const char *systemLinePatternLookAndFeel[] = { "SOLID LINE", "--------", ". . . . . ", "_ . _ . _ .", "_ . . _ . .", "_ . . . _", "___ _ ___ _", "____ __ ____", "NULL " }; setEditable(rw); setObjectName(name); which = id; int lengthOfSysPatternArray = LENGTH( systemLinePatternLookAndFeel ); for (int i = 0; i < lengthOfSysPatternArray; i++) addItem(systemLinePatternLookAndFeel[i]); connect(this, SIGNAL(activated(int)), this, SLOT(valueChangedCB(int))); } //////////////////////////////////////////////////////////////////////// // // When the line pattern selection changed, this function will be raised. // void LinePatternComboBox::valueChangedCB(int position) // //////////////////////////////////////////////////////////////////////// { static const unsigned long systemLinePatternValue[] = { 0xffff, 0x7777, 0x3333, 0xfafa, 0xeaea, 0xffcc, 0xffdc,0xff9c,0 }; linePatternTemp[which] = systemLinePatternValue[position]; } //////////////////////////////////////////////////////////////////////// // // This creates the COLOR and LINE preference sheet stuff. // void PreferDialog::createLineColorAndPatternPrefSheetGuts(QWidget *form, QGridLayout *layout, const char *name, int id) // //////////////////////////////////////////////////////////////////////// { QLabel *label = new QLabel(name, form); int column = (id%2) * 9; int row = 1 + id/2; layout->addWidget(label, row, column+1); // Create the red field LineColorSpinBox *spinred = new LineColorSpinBox(0, 10, 1, form, "redText", id*3); layout->addWidget(spinred, row, column+3); // Create the green field LineColorSpinBox *spingreen = new LineColorSpinBox(0, 10, 1, form, "greenText", id*3+1); layout->addWidget(spingreen, row, column+4); // Create the blue field LineColorSpinBox *spinblue = new LineColorSpinBox(0, 10, 1, form, "blueText", id*3+2); layout->addWidget(spinblue, row, column+5); // create the line pattern LinePatternComboBox *lpComboBox = new LinePatternComboBox(false, form, "lpSimple", id); layout->addWidget(lpComboBox, row, column+7); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createColorAndLinePrefSheetHeader(QWidget *parent, QGridLayout *layout, int column) // //////////////////////////////////////////////////////////////////////// { // create the first line //"| PT TYPE | RED GREEN BLUE | LINE PATTERN |" const char *names[] = { "|", "PT TYPE", "|", "RED", "GREEN", "BLUE", "|", "LINE PATTERN", "|" }; for (int i = 0; i < 9; i++) { QLabel *label = new QLabel(names[i], parent); label->setAlignment(Qt::AlignHCenter); layout->addWidget(label, 0, column + i); } } /////////////////////////////////////////////////////////////////////// // // This simply creates the default parts of the pref dialog. // void PreferDialog::createLineAttrPrefSheetParts(QWidget *parent, QGridLayout *form, const char** name) //////////////////////////////////////////////////////////////////////// { for(int i=0; isetRowStretch(i, 1); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createPreferActionFormControls(QWidget *parent) // //////////////////////////////////////////////////////////////////////// { QPushButton *saveBtn, *closeBtn, *applyBtn, *cancelBtn; #if QT_VERSION < 0x40000 QHBoxLayout *form = new QHBoxLayout(parent, 5, -1); #else QHBoxLayout *form = new QHBoxLayout(parent); #endif form->setObjectName("control form"); saveBtn = new QPushButton(" &Save ", parent); connect(saveBtn, SIGNAL(clicked()), this, SLOT(savePreferAndUpdateScene())); form->addWidget(saveBtn); closeBtn = new QPushButton(" &Update ", parent); form->addWidget(closeBtn); connect(closeBtn, SIGNAL(clicked()), this, SLOT(closePreferDialogAndUpdateScene())); applyBtn = new QPushButton(" &Apply ", parent); form->addWidget(applyBtn); connect(applyBtn, SIGNAL(clicked()), this, SLOT(applyPreferDialogChangeAndUpdateScene())); cancelBtn = new QPushButton(" &Cancel ", parent); form->addWidget(cancelBtn); connect(cancelBtn, SIGNAL(clicked()), this, SLOT(closePreferDialogAndGiveUpChange())); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::graphCoordinateSystemToggledCB(int which) // //////////////////////////////////////////////////////////////////////// { if(useR3B) whichCoordSystemTemp = which; } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createGraphCoordinateSystemFrameGuts(QGroupBox *frame) // //////////////////////////////////////////////////////////////////////// { const char *coordSysItems[]= { "Rotating Frame", "Barycenter " , "Large Primary Center", "Small Primary Center" }; // create default selections #if QT_VERSION >= 0x40000 QHBoxLayout *layout = new QHBoxLayout(frame); #endif QButtonGroup *group = new QButtonGroup; connect(group, #if QT_VERSION >= 0x40000 SIGNAL(buttonClicked(int)), #else SIGNAL(clicked(int)), #endif this, SLOT(graphCoordinateSystemToggledCB(int))); coordSysButton = new QRadioButton*[LENGTH (coordSysItems)]; for (unsigned int i = 0; i < LENGTH (coordSysItems); i++) { QRadioButton *w = new QRadioButton(coordSysItems[i], frame); group->addButton(w, i); #if QT_VERSION >= 0x40000 layout->addWidget(w); #endif coordSysButton[i] = w; } } //////////////////////////////////////////////////////////////////////// // void PreferDialog::graphStyleWidgetToggledCB(int which) // //////////////////////////////////////////////////////////////////////// { whichStyleTemp = which; } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createGraphStyleFrameGuts(QGroupBox *frame) // //////////////////////////////////////////////////////////////////////// { const char * graphStyleItems[]= { "Line Style", "Tube Style" , "Surface Style" }; // create default selections #if QT_VERSION >= 0x40000 QHBoxLayout *layout = new QHBoxLayout(frame); #endif QButtonGroup *group = new QButtonGroup; connect(group, #if QT_VERSION >= 0x40000 SIGNAL(buttonClicked(int)), #else SIGNAL(clicked(int)), #endif this, SLOT(graphStyleWidgetToggledCB(int))); styleButton = new QRadioButton*[LENGTH (graphStyleItems)]; for (unsigned i = 0; i < LENGTH (graphStyleItems); i++) { QRadioButton *w = new QRadioButton(graphStyleItems[i], frame); group->addButton(w, i); #if QT_VERSION >= 0x40000 layout->addWidget(w); #endif styleButton[i] = w; } } //////////////////////////////////////////////////////////////////////// // void PreferDialog::graphTypeWidgetToggledCB(int which) // //////////////////////////////////////////////////////////////////////// { whichTypeTemp = which; } //////////////////////////////////////////////////////////////////////// // void PreferDialog::graphCoordWidgetToggledCB(int which) // //////////////////////////////////////////////////////////////////////// { whichCoordTemp = which; } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createGraphTypeFrameGuts(QGroupBox *frame) // //////////////////////////////////////////////////////////////////////// { const char *graphTypeItems[]={ "Solution Diagram" , "Bifurcation Diagram" }; #if QT_VERSION >= 0x40000 QHBoxLayout *layout = new QHBoxLayout(frame); #endif QButtonGroup *group = new QButtonGroup; connect(group, #if QT_VERSION >= 0x40000 SIGNAL(buttonClicked(int)), #else SIGNAL(clicked(int)), #endif this, SLOT(graphTypeWidgetToggledCB(int))); typeButton = new QRadioButton*[LENGTH (graphTypeItems)]; for (unsigned i = 0; i < LENGTH (graphTypeItems); i++) { QRadioButton *w = new QRadioButton(graphTypeItems[i], frame); group->addButton(w, i); #if QT_VERSION >= 0x40000 layout->addWidget(w); #endif typeButton[i] = w; } } //////////////////////////////////////////////////////////////////////// // // callback for all ToggleButtons. // void PreferDialog::defaultGraphWidgetToggledCB(int bit) // //////////////////////////////////////////////////////////////////////// { graphWidgetToggleSetTemp ^= (1 << bit); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createOptionFrameGuts(QGroupBox *frame) // //////////////////////////////////////////////////////////////////////// { // create default selections #if QT_VERSION >= 0x40000 QGridLayout *layout = new QGridLayout(frame); #endif QButtonGroup *group = new QButtonGroup; group->setExclusive(false); connect(group, #if QT_VERSION >= 0x40000 SIGNAL(buttonClicked(int)), #else SIGNAL(clicked(int)), #endif this, SLOT(defaultGraphWidgetToggledCB(int))); widgetButton = new QCheckBox*[LENGTH (graphWidgetItems)]; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { if (!useR3B && (i == OPT_PRIMARY || i == OPT_LIB_POINTS)) continue; QCheckBox *w = new QCheckBox(graphWidgetItems[i], frame); group->addButton(w, i); #if QT_VERSION >= 0x40000 layout->addWidget(w, i%2, i/2); #endif widgetButton[i] = w; } } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createGraphCoordPartsFrameGuts(QGroupBox *frame) // //////////////////////////////////////////////////////////////////////// { const char *coordItems[]= { "No Coordinate", "At Origin" , "At Left && Behind", "At Left && Ahead" }; // create default selections #if QT_VERSION >= 0x40000 QHBoxLayout *layout = new QHBoxLayout(frame); #endif QButtonGroup *group = new QButtonGroup; connect(group, #if QT_VERSION >= 0x40000 SIGNAL(buttonClicked(int)), #else SIGNAL(clicked(int)), #endif this, SLOT(graphCoordWidgetToggledCB(int))); coordButton = new QRadioButton*[LENGTH (coordItems)]; for (unsigned i = 0; i < LENGTH (coordItems); i++) { QRadioButton *w = new QRadioButton(coordItems[i], frame); group->addButton(w, i); #if QT_VERSION >= 0x40000 layout->addWidget(w); #endif coordButton[i] = w; } } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createPreferDefaultPages(QWidget *parent) // //////////////////////////////////////////////////////////////////////// { QGroupBox *frameList[5]; int num; const char * frmNames[]= { "Optional Widgets", "Graph Type", "Graph Style", "Coordinate System", "Coordinate Parts" }; QVBoxLayout *layout = new QVBoxLayout(parent); unsigned j=0; for(unsigned i=0; i= 0x40000 frameList[j] = new QGroupBox(frmNames[i], parent); #else int rows[] = {2, 1, 1, 1, 1}; frameList[j] = new QGroupBox(rows[i], Qt::Vertical, frmNames[i], parent); #endif layout->addWidget(frameList[j]); j++; } num = 0; createOptionFrameGuts(frameList[num++]); createGraphTypeFrameGuts(frameList[num++]); createGraphStyleFrameGuts(frameList[num++]); if(useR3B) createGraphCoordinateSystemFrameGuts(frameList[num++]); createGraphCoordPartsFrameGuts(frameList[num++]); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::createLineAttPages(QWidget *parent) // //////////////////////////////////////////////////////////////////////// { //const char *tabName[] = { "Line Attributes", "Other Preferences" }; const char *names[] = { "DEFAULTS", "BP (ALG)", "LP (ALG)", "HB ", "UZ 4", "UZ -4", "LP (DIF)", "BP (DIF)", "PD ", "TR TORUS", "EP (NOR)", "MX (ABN)", "OTHERS " }; const char *names2[] = { "Color 1", "Color 2", "Color 3", "Color 4", "Color 5", "Color 6", "Color 7", "Color 8", "Color 9", "Color 10", "Color 11", "Color 12", "Color 13" }; #if QT_VERSION < 0x40000 QGridLayout *layout = new QGridLayout(parent, 8, 18); #else QGridLayout *layout = new QGridLayout(parent); #endif createColorAndLinePrefSheetHeader(parent, layout, 0); createColorAndLinePrefSheetHeader(parent, layout, 9); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) createLineAttrPrefSheetParts(parent, layout, names2); else createLineAttrPrefSheetParts(parent, layout, names); } /////////////////////////////////////////////////////////////////////// // void PreferDialog::createPreferNotebookPages(QTabWidget *notebook) // //////////////////////////////////////////////////////////////////////// { // create the preference sheet shell and form widget const char *tabName[] = { "Menu Item Preferences", "Line Attributes" }; // create the first page. QWidget *pageForm0 = new QWidget(notebook); pageForm0->setObjectName("pageForm0"); createPreferDefaultPages(pageForm0); notebook->addTab(pageForm0, tabName[0]); // create the second page. QWidget *pageForm1 = new QWidget(notebook); pageForm1->setObjectName("pageForm1"); createLineAttPages(pageForm1); notebook->addTab(pageForm1, tabName[1]); } //////////////////////////////////////////////////////////////////////// // // This creates the preference sheet in a separate window. It // calls other routines to create the actual content of the sheet. // void MainWindow::createPreferDialog() // //////////////////////////////////////////////////////////////////////// { if(!preferDialog) { preferDialog = new PreferDialog(this, "Preference Dialog"); } preferDialog->update(); preferDialog->show(); } //////////////////////////////////////////////////////////////////////// // PreferDialog::PreferDialog(QWidget * parent, const char *name) : QDialog(parent) // //////////////////////////////////////////////////////////////////////// { setObjectName(name); setCaption("Preference Dialog"); #if QT_VERSION < 0x40000 QVBoxLayout *panedWin = new QVBoxLayout(this, 5, -1); #else QVBoxLayout *panedWin = new QVBoxLayout(this); #endif panedWin->setObjectName("pane"); // create notebook to hold all the pages QTabWidget *notebook = new QTabWidget(this); notebook->setObjectName("Options"); createPreferNotebookPages(notebook); panedWin->addWidget(notebook); QWidget *actionForm = new QWidget(this); actionForm->setObjectName("action form"); createPreferActionFormControls(actionForm); panedWin->addWidget(actionForm); setModal(false); } //////////////////////////////////////////////////////////////////////// // void PreferDialog::update() // //////////////////////////////////////////////////////////////////////// { for(int i=0; isetChecked(true); whichTypeOld = whichType; whichTypeTemp = whichType; typeButton[whichType]->setChecked(true); graphWidgetToggleSetOld = graphWidgetToggleSet; graphWidgetToggleSetTemp= graphWidgetToggleSet; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { if (!useR3B && (i == OPT_PRIMARY || i == OPT_LIB_POINTS)) continue; widgetButton[i]->setChecked((graphWidgetToggleSet & (1<setChecked(true); if (useR3B) { whichCoordSystemOld = whichCoordSystem; whichCoordSystemTemp = whichCoordSystem; coordSysButton[whichCoordSystem]->setChecked(true); } } /////////////////////////////////////////////////////////////////// // CANCEL CALL BACK // void PreferDialog::closePreferDialogAndGiveUpChange() // //////////////////////////////////////////////////////////////////////// { for(int i=0; iwhich = whichTypeOld; whichStyle = whichStyleOld; whichStyleTemp = whichStyleOld; styleMenuItems->which = whichStyleOld; if (useR3B) { whichCoordSystem = whichCoordSystemOld; whichCoordSystemTemp = whichCoordSystemOld; coordSystemMenuItems->which = whichCoordSystemOld; } whichCoord = whichCoordOld; whichCoordTemp = whichCoordOld; coordMenuItems->which = whichCoordOld; // cancel the selections and recover the original values. graphWidgetToggleSetTemp = graphWidgetToggleSetOld; graphWidgetToggleSet = graphWidgetToggleSetOld; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetOld & (1<setEnabled(options[OPT_SAT_ANI]); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); updateScene(); QDialog::reject(); } /////////////////////////////////////////////////////////////////// // OK & CLOSE CALL BACK // void PreferDialog::closePreferDialogAndUpdateScene() // //////////////////////////////////////////////////////////////////////// { for(int i=0; iwhich = whichTypeTemp; whichStyle = whichStyleTemp; whichStyleOld = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; whichCoordSystemOld = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; whichCoordOld = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; graphWidgetToggleSetOld = graphWidgetToggleSetTemp; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<setEnabled(options[OPT_SAT_ANI]); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); updateScene(); QDialog::reject(); } /////////////////////////////////////////////////////////////////// // OK & SAVE CALL BACK // void PreferDialog::savePreferAndUpdateScene() // //////////////////////////////////////////////////////////////////////// { for(int i=0; iwhich = whichTypeTemp; whichStyle = whichStyleTemp; whichStyleOld = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; whichCoordSystemOld = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; whichCoordOld = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; graphWidgetToggleSetOld = graphWidgetToggleSetTemp; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<setEnabled(options[OPT_SAT_ANI]); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); updateScene(); writePreferValuesToFile(); QDialog::accept(); } /////////////////////////////////////////////////////////////////// // APPLY CALL BACK // void PreferDialog::applyPreferDialogChangeAndUpdateScene() // //////////////////////////////////////////////////////////////////////// { for(int i=0; iwhich = whichTypeTemp; whichStyle = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; for (unsigned i = 0; i < LENGTH (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<setEnabled(options[OPT_SAT_ANI]); orbitAniSpeedSlider->setEnabled(options[OPT_PERIOD_ANI]); updateScene(); } //////////////////////////////////////////////////////////////////////// // // This routine is called to get a file name using the // standard file dialog. // void MainWindow::getFileName(int fileMode) // //////////////////////////////////////////////////////////////////////// { QString filename; if(fileMode == SAVE_ITEM) filename = QFileDialog::getSaveFileName(QString::null, "Inventor files (*.iv);;Any files (*)", this, 0, QString::null); else if(fileMode == PRINT_ITEM) filename = QFileDialog::getSaveFileName(QString::null, "PostScript files (*.ps *.eps);;Any files (*)", this, "print file dialog", "Choose a file to print to" ); else filename = QFileDialog::getOpenFileName(QString::null, "AUTO files (b.* s.* d.*);;Any files (*)", this); if(filename == QString::null) return; if(fileMode == SAVE_ITEM) writeToFile(filename.toLocal8Bit()); else if(fileMode == PRINT_ITEM) { printToPostScript(root,filename.toLocal8Bit(),renderArea,100); } else if(fileMode == OPEN_ITEM) { deleteScene(); readFile(filename.toLocal8Bit()); } } //////////////////////////////////////////////////////////////////////// // // Brings up the "ABOUT" dialog // void MainWindow::showAboutDialog() // //////////////////////////////////////////////////////////////////////// { QString str; if (useR3B) str = " AUTO r3bplaut04\n\n" " Zhang, Chenghai, Dr. Eusebius J. Doedel\n\n " " Computer Science Department\n" " Concordia University\n\n" " Montreal, Quebec\n" " CANADA\n\n" " June, 2004 \n"; else str = " AUTO plaut04\n\n" " Zhang, Chenghai, Dr. Eusebius J. Doedel\n\n " " Computer Science Department\n" " Concordia University\n\n" " Montreal, Quebec\n" " CANADA\n\n" " August, 2004 \n"; QMessageBox::about(this, "About_popup", str); } void MainWindow::showHelp() { showHelpDialog(); } //////////////////////////////////////////////////////////////////////// // void MainWindow::xListCallBack(const QString &str) // //////////////////////////////////////////////////////////////////////// { char *manyChoice = strdup(str.toLocal8Bit()); char * tmp; tmp = strtok(manyChoice, ","); xCoordIndices.clear(); do { xCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solX = xCoordIndices; } else { dai.bifX = xCoordIndices; } updateScene(); free(manyChoice); } //////////////////////////////////////////////////////////////////////// // void MainWindow::yListCallBack(const QString &str) // //////////////////////////////////////////////////////////////////////// { char *manyChoice = strdup(str.toLocal8Bit()); char * tmp; tmp = strtok(manyChoice, ","); yCoordIndices.clear(); do { yCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solY = yCoordIndices; } else { dai.bifY = yCoordIndices; } updateScene(); free(manyChoice); } //////////////////////////////////////////////////////////////////////// // void MainWindow::zListCallBack(const QString &str) // //////////////////////////////////////////////////////////////////////// { char *manyChoice = strdup(str.toLocal8Bit()); char * tmp; tmp = strtok(manyChoice, ","); zCoordIndices.clear(); do { zCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solZ = zCoordIndices; } else { dai.bifZ = zCoordIndices; } updateScene(); free(manyChoice); } //////////////////////////////////////////////////////////////////////// // void MainWindow::lblListCallBack(const QString &str) // //////////////////////////////////////////////////////////////////////// { char *manyChoice = strdup(str.toLocal8Bit()); int choice = labelsList->currentItem(); int nItems = (whichType != BIFURCATION) ? mySolNode->totalLabels() : myBifNode->totalLabels(); char * tmp; static int half = 2; tmp = strtok(manyChoice, ","); choice -= SP_LBL_ITEMS; lblIndices.clear(); if(choice <= MY_ALL || choice >= nItems) { do { lblIndices.push_back((strcasecmp(tmp,"all")==0) ? numLabels + MY_ALL : atoi(tmp)-myLabels[0]); tmp = strtok(NULL,","); }while(tmp != NULL); half = 2; } else if(choice == MY_HALF) // -3 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) if(abs(clientData.labelIndex[j][2])!= 4 || (j+1)%half == 0) lblIndices.push_back(j); half *= 2; } else if(choice == MY_SPEC) // -2 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) if(clientData.labelIndex[j][2] != TYPE_UZ && clientData.labelIndex[j][2] != TYPE_RG && clientData.labelIndex[j][2] != TYPE_EP_ODE && clientData.labelIndex[j][2] != TYPE_MX) lblIndices.push_back(j); half = 2; } else if(choice == MY_NONE) // -1 { lblIndices.push_back(numLabels + MY_NONE); half = 2; } else { lblIndices.push_back(choice); half = 2; } lblChoice.clear(); if(choice < 0) lblChoice.push_back(choice); else for (std::vector::size_type i = 0; i < lblIndices.size(); i++) lblChoice.push_back(lblIndices[i]); updateScene(); free(manyChoice); } class FmDrawingArea : public QWidget { public: FmDrawingArea( QWidget *parent, const char *name, int nFM ) : QWidget( parent ) { setObjectName(name); numFM = nFM; } protected: void paintEvent( QPaintEvent * ); private: int numFM; }; //////////////////////////////////////////////////////////////////////// // void FmDrawingArea::paintEvent( QPaintEvent * ) // //////////////////////////////////////////////////////////////////////// { QPainter p( this ); static const char *myText[9] = { "-inf", "-100", "-10", "-1", "0", "1", "10", "100", "+inf" }; // draw Y p.setPen(QPen(Qt::blue, 2, Qt::SolidLine)); p.drawLine(200, 0, 200, 400); // draw X p.setPen(QPen(Qt::red, 2, Qt::SolidLine)); p.drawLine(0, 200, 400, 200); // draw grid p.setPen(QPen(Qt::gray, 1, Qt::DotLine)); for(int i=0; i<9; ++i) p.drawLine(0, 50*i, 400, 50*i); for(int i=0; i<9; ++i) p.drawLine(i*50, 0, i*50, 400); // draw text p.setPen(Qt::black); for(int i = 0; i < 9; ++i) p.drawText(i*50+1 , 215, myText[i]); for(int i = 0; i < 9; ++i) p.drawText(210 , 413-i*50, myText[i]); // draw a unit circle. if (numFM > 0) { p.setPen(QPen(Qt::green, 1, Qt::SolidLine)); p.drawArc(150, 150, 100, 100, 0, 360*16); } p.setPen(QPen(Qt::black, 2, Qt::SolidLine)); int x, y; for(int j = 0; j < abs(numFM); ++j) { float tmp = fmData[2*j]; if(fabs(tmp) <= 1.1) x = (tmp>0.0) ? (int)(200+tmp*50) : (int)(200-fabs(tmp)*50); else x =(tmp>0.0) ? (int)(250+log10(tmp)*50) : (int)(150-log10(fabs(tmp))*50); tmp = fmData[2*j+1]; if(fabs(tmp) <= 1.1) y = (tmp>0.0) ? (int)(200+tmp*50) : (int)(200-fabs(tmp)*50); else y =(tmp>0.0) ? (int)(150-log10(tmp)*50): (int)(log10(fabs(tmp))*50+250); if(x>390) x = 390; if(x<10) y = 10; if(y>390) y = 390; if(y<10) y = 10; p.drawLine(x-3, y-3, x+3, y+3); p.drawLine(x-3, y+3, x+3, y-3); } } //////////////////////////////////////////////////////////////////////// // void popupFloquetMultiplierDialog(float data[], int size, int numFM) // //////////////////////////////////////////////////////////////////////// { static QDialog *dialog_shell = (QDialog *) 0; QVBoxLayout *pane = (QVBoxLayout *) 0; QString str = ""; for(int i=0; i=20 && (i+1)%2==0)) str += "\n"; else str += " | "; } QString tmpstr = numFM < 0 ? "Eigenvalues:\n" : "Floquet multipliers:\n"; for(int j=0; j 0) temp.sprintf(" [%2d] : %E + %Ei\n", j, fmData[j*2], fmData[j*2+1]); else temp.sprintf(" [%2d] : %E\n", j, fmData[j*2]); tmpstr += temp; } if (!pane) { FmDrawingArea *fmDrawingArea; dialog_shell = new QDialog(mainWindow); dialog_shell->setModal(false); dialog_shell->setObjectName("Dialog"); dialog_shell->setCaption("Dialog"); #if QT_VERSION < 0x40000 pane = new QVBoxLayout(dialog_shell, 5, -1); #else pane = new QVBoxLayout(dialog_shell); #endif pane->setObjectName("pane"); fmDrawingArea = new FmDrawingArea(dialog_shell, "fmDrawingArea", numFM); fmDrawingArea->setMinimumSize(450,450); pane->addWidget(fmDrawingArea); QWidget *form = new QWidget(dialog_shell); form->setObjectName("form"); QHBoxLayout *layout = new QHBoxLayout(form); layout->setSpacing(5); QLabel *label3 = new QLabel(str, form); label3->setObjectName("label"); QLabel *label2 = new QLabel(tmpstr, form); label2->setObjectName("label"); label2->setAlignment(Qt::AlignLeft); layout->addWidget(label3); layout->addWidget(label2); pane->addWidget(form); QPushButton *pushButton= new QPushButton("OK", dialog_shell); pushButton->connect(pushButton, SIGNAL(clicked()), dialog_shell, SLOT(accept())); pane->addWidget(pushButton); dialog_shell->show(); } } void soxtmain(int argc, char *argv[]) { // Initialize Inventor and Qt. SoQt::init(argc, argv, argv[0]); root = new SoSeparator; root->ref(); mainWindow = new MainWindow; SoQt::show(mainWindow); SoQt::mainLoop(); root->unref(); } auto/07p/plaut04/src/createSphere.c++0000640000175000017500000000421313570013207015226 0ustar sksk#include "createSphere.h" #include #include #include "gplaut04.h" extern const char *autoDir; extern float sphereTransparency; extern bool sphereFromFile; SoSeparator * createSphere(float where[], float scaler) { // create SPHERE SoSeparator *sphereSep = new SoSeparator; static bool obj = sphereFromFile; SoInput mySceneInput; char *diskFileName = new char[strlen(autoDir) + 32]; strcpy(diskFileName, autoDir); strcat(diskFileName, "/plaut04/widgets/sphere.iv"); if (obj && mySceneInput.openFile(diskFileName)) { SoSeparator *sphere = SoDB::readAll(&mySceneInput); if (sphere == NULL) { obj=FALSE; } else { mySceneInput.closeFile(); SoTransform *sphereXform = new SoTransform; sphereXform->translation.setValue(where[0],where[1],where[2]); sphereXform->scaleFactor.setValue(scaler, scaler, scaler); sphereSep->addChild(sphereXform); sphereSep->addChild(sphere); obj = TRUE; } } else { obj = FALSE; } delete [] diskFileName; if(!obj) { SoMaterial *sphereMtl = new SoMaterial; sphereMtl->diffuseColor.setValue(1.0,1.0,1.0); sphereMtl->transparency = sphereTransparency; SoComplexity *sphereComplx = new SoComplexity; sphereComplx->type = SoComplexity::OBJECT_SPACE; sphereComplx->value = 1.0; sphereComplx->textureQuality = 0.5; SoTransform *sphereXform = new SoTransform; sphereXform->translation.setValue(where[0],where[1],where[2]); SoSphere *sphere = new SoSphere; sphere->radius = 1.0 * scaler; sphereSep->addChild(sphereXform); sphereSep->addChild(sphereComplx); sphereSep->addChild(sphereMtl); sphereSep->addChild(sphere); } #ifdef ENABLE_MTL_EDITOR #ifdef USE_SOQT SoQtMaterialEditor *mtlEditor = new SoQtMaterialEditor; #else SoXtMaterialEditor *mtlEditor = new SoXtMaterialEditor; #endif mtlEditor->attach(sphereMtl); mtlEditor->show(); #endif return sphereSep; } auto/07p/plaut04/src/bifurcation.c++0000640000175000017500000006302113570013207015123 0ustar sksk/* Allows reading in very large files */ #ifndef _LARGEFILE_SOURCE #define _LARGEFILE_SOURCE #endif #ifndef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #endif #include "bifurcation.h" #include #include #ifdef DEBUG using namespace std; #include #endif #include "gplaut04.h" #include "createCoords.h" #include "rounding.h" #include "tube.h" extern UserData clientData; Bifurcation *myBifNode; ////////////////////////////////////////////////////////////////////////// // // Routine to create a scene graph representing an auto bifurcation // SoSeparator * Bifurcation::createScene() // ////////////////////////////////////////////////////////////////////////// { SoSeparator *result = new SoSeparator; result->ref(); if(whichCoord != NO_COORD) { SoSeparator * coordSep = new SoSeparator; SoTransform * coordXform = new SoTransform; coordXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0),M_PI_2); coordSep->addChild(coordXform); static int tickers[3]; if(blDrawTicker) { tickers[0]=tickers[1]=tickers[2]=5; } else { tickers[0]=tickers[1]=tickers[2]=-1; } float asMax[3], asMin[3]; if(options[OPT_NORMALIZE_DATA]) { asMax[0]=max_[0]; asMax[1]=max_[1];asMax[2]=max_[2]; asMin[0]=min_[0]; asMin[1]=min_[1];asMin[2]=min_[2]; } else { asMax[0] = asMax[1] = asMax[2] = 1; asMin[0] = asMin[1] = asMin[2] = -1; } coordSep->addChild(createCoordinates(setShow3D, whichCoord, asMax, asMin, tickers, &envColors[1])); result->addChild(coordSep); } if(useR3B) result->addChild(createR3BPoints(min_, max_)); // create bifurcation graph SoSeparator * bifBranchSep = render(); result->addChild(bifBranchSep); return result; } /////////////////////////////////////////////////////////////////////////// // SoSeparator * Bifurcation::drawALabel(int row, float xoffset, long int label) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *result = new SoSeparator; SoTranslation *labelTranslate = new SoTranslation; SoText2 *labelMsg = new SoText2; SoFont *labelFont = new SoFont; labelFont->name.setValue("Helvetica"); labelFont->size.setValue(12); float xyz[3], firstxyz[3], secondxyz[3]; normalizeData(row, xyz); //pick a good direction for the label int first = row; int second = row + 1; if (second >= totalNumPoints_) { first--; second--; } if (first < 0) first = 0; float yoffset = xoffset; normalizeData(first, firstxyz); normalizeData(second, secondxyz); if ((secondxyz[1] - firstxyz[1]) * (secondxyz[0] - firstxyz[0]) >= 0) { xoffset = -xoffset; labelMsg->justification = SoText2::RIGHT; } labelTranslate->translation.setValue(xyz[0] + xoffset, xyz[1] + yoffset, xyz[2]); char a[30]; sprintf(a, "%ld", label); labelMsg->string.setValue(a); result->addChild(labelTranslate); result->addChild(labelFont); result->addChild(labelMsg); return result; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Bifurcation::drawLabelPtsInScene() // ////////////////////////////////////////////////////////////////////////// { float dis = !options[OPT_NORMALIZE_DATA] ? fabs(std::max(std::max( (max_[0]-min_[0]), (max_[1]-min_[1])), (max_[2]-min_[2]))) : 2.0; SoSeparator * result = new SoSeparator; int lbl = myLabels[lblIndices[0]], row = 0; float position[3]; int lbType; if(lbl == MY_ALL) { for(int k = 0; k < totalLabels_; k++) { SoMaterial *lblMtl; row = clientData.labelIndex[k][1]; lbType = clientData.labelIndex[k][2]; lblMtl = setLabelMaterial(lbType); result->addChild(lblMtl); normalizeData(row, position); float size = dis*0.005*labelRadius; size *= lineWidthScaler; result->addChild( drawASphere(position, size)); if(options[OPT_LABEL_NUMBERS]) result->addChild( drawALabel(row, size, orbits_[k].label)); } } else if(lbl != MY_NONE) { for(std::vector::size_type i=0; iaddChild(lblMtl); normalizeData(row, position); float size = dis*0.005*labelRadius; size *= lineWidthScaler; result->addChild( drawASphere(position, size)); if(options[OPT_LABEL_NUMBERS]) result->addChild( drawALabel(row, size, orbits_[k].label)); } } return result; } ///////////////////////////////////////////////////////////////// // // Set Material for Labels // This function sets the material(color) for each different // type of labels. // SoMaterial * Bifurcation::setLabelMaterial(int lblType) // ///////////////////////////////////////////////////////////////// { SoMaterial *lblMtl = new SoMaterial; lblMtl->transparency = 0.0; switch(lblType) { case 0 : lblMtl->diffuseColor.setValue(lineColor[0]); break; case 1 : lblMtl->diffuseColor.setValue(lineColor[1]); break; case 2 : lblMtl->diffuseColor.setValue(lineColor[2]); break; case 3 : lblMtl->diffuseColor.setValue(lineColor[3]); break; case 4 : lblMtl->diffuseColor.setValue(lineColor[4]); break; case -4 : lblMtl->diffuseColor.setValue(lineColor[5]); break; case 5 : lblMtl->diffuseColor.setValue(lineColor[6]); break; case 6 : lblMtl->diffuseColor.setValue(lineColor[7]); break; case 7 : lblMtl->diffuseColor.setValue(lineColor[8]); break; case 8 : lblMtl->diffuseColor.setValue(lineColor[9]); break; case 9 : lblMtl->diffuseColor.setValue(lineColor[10]); break; case -9 : lblMtl->diffuseColor.setValue(lineColor[11]); break; default : lblMtl->diffuseColor.setValue(lineColor[12]); } return lblMtl; } ///////////////////////////////////////////////////////////////// // SoSeparator * Bifurcation::drawABranchUsingTubes(int iBranch, long int l, long int sumX, float scaler) // // ///////////////////////////////////////////////////////////////// { SoSeparator * tSep = new SoSeparator; long int upperlimit = numVerticesEachBranch_[l]; if(upperlimit <= 1) { return tSep; } float (*path)[3] = new float[upperlimit][3]; float *colorBase = new float[upperlimit*11]; Tube tube; for(long int i=0; i=0) for(int k=0; k<11; ++k) colorBase[i*11+k] = data_[idx*nar_ + coloringMethod]; else if(coloringMethod==CL_POINT_NUMBER) for(int k=0; k<11; ++k) colorBase[i*11+k] = i; else if(coloringMethod == CL_STABILITY) for(int k=0; k<11; ++k) colorBase[i*11+k] = ptStability_[idx]; } if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) tSep->addChild(setLineAttributesByBranch(iBranch, 0, scaler)); else if(coloringMethod == CL_STABILITY) tSep->addChild(setLineColorBlendingByStability(colorBase, upperlimit*11, 0, scaler)); else /* CL_POINT_NUMBER or >= 0 */ tSep->addChild(setLineColorBlending(colorBase, upperlimit*11, 0, scaler)); tube = Tube(upperlimit, path, lineWidthScaler*0.005, 10); tSep->addChild(tube.createTube()); delete [] path; delete [] colorBase; return tSep; } /////////////////////////////////////////////////////////////////////////// // // animate the solution by using lines. This version use less memory // and much faster. ////////////////////////////////////////////////////////////////////////// // SoSeparator * Bifurcation::drawABranchUsingLines(int iBranch, long int l, long int si, float scaler) // ////////////////////////////////////////////////////////////////////////// { int32_t myint[10]; SoSeparator * aBranch = new SoSeparator; long int size = numVerticesEachBranch_[l]; float *colorBase = new float[size]; float (*vertices)[3] = new float[size][3]; long int curSize = 0; int lastStab = ptStability_[si]; int curStab = lastStab; long int m = 0; long int idx = si+m; do { lastStab = curStab; normalizeData(idx, vertices[curSize]); if(coloringMethod >= 0) colorBase[curSize] = data_[idx * nar_ + coloringMethod]; else if(coloringMethod == CL_POINT_NUMBER) colorBase[curSize] = m; else if(coloringMethod == CL_STABILITY) colorBase[curSize] = ptStability_[idx]; m++; idx = si+m; if(m < size) curStab = ptStability_[idx]; curSize++; if( (lastStab == curStab || curSize <= 1) && m != size) continue; SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, curSize, vertices); myint[0]= curSize; // define the solution line set SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0, 1, myint); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) aBranch->addChild(setLineAttributesByBranch(iBranch, lastStab, scaler)); else if(coloringMethod == CL_STABILITY) aBranch->addChild(setLineColorBlendingByStability(colorBase, curSize, lastStab, scaler)); else /* CL_POINT_NUMBER or >= 0 */ aBranch->addChild(setLineColorBlending(colorBase, curSize, lastStab, scaler)); aBranch->addChild(myCoords); aBranch->addChild(myLine); curSize = 0; normalizeData(idx-1, vertices[curSize]); if(coloringMethod >= 0) colorBase[curSize] = data_[(idx-1) * nar_ + coloringMethod]; else if(coloringMethod == CL_POINT_NUMBER) colorBase[curSize] = m-1; else if(coloringMethod == CL_STABILITY) colorBase[curSize] = ptStability_[idx-1]; curSize++; }while( m < size); delete [] vertices; delete [] colorBase; return aBranch; } ////////////////////////////////////////////////////////////////////////// // Draw a bif branch using NURBS curve // SoSeparator * Bifurcation::drawABranchUsingNurbsCurve(int iBranch, long int l, long int si, float scaler) // ////////////////////////////////////////////////////////////////////////// { int32_t myint[10]; SoSeparator * aBranch = new SoSeparator; long int size = numVerticesEachBranch_[l]; float (*vertices)[3] = new float[size][3]; float *colorBase = new float[size]; for(long int m=0; m=0) colorBase[m] =data_[idx * nar_ + coloringMethod]; if(coloringMethod==CL_POINT_NUMBER) colorBase[m] = m; } SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, size, vertices); myint[0]= size; SoGroup *cvGrp = new SoGroup; float * knots = new float[size+4]; if(size> 4) { for (int i=0; i<4; ++i) knots[i]=0, knots[i+size]=size-3; for(int i=4; inumControlPoints = size; myCurve->knotVector.setValues(0, size+4, knots); cvGrp->addChild(myCurve); } else { SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); cvGrp->addChild(myLine); } if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) aBranch->addChild(setLineAttributesByBranch(iBranch, 0, scaler)); else if(coloringMethod == CL_STABILITY) aBranch->addChild(setLineAttributesByStability(0, scaler)); else /* CL_POINT_NUMBER or >= 0 */ aBranch->addChild(setLineColorBlending(colorBase, size, 0, scaler)); aBranch->addChild(myCoords); aBranch->addChild(cvGrp); delete [] vertices; delete [] colorBase; delete [] knots; return aBranch; } #if 0 ////////////////////////////////////////////////////////////////////////// // // Draw a label interval // SoSeparator * drawABifLabelInterval(long int l, long int si, float scaler, int stability, int type) // ////////////////////////////////////////////////////////////////////////// { int32_t myint[10]; SoSeparator * anInterval = new SoSeparator; long int size = orbits_[l].numVerticesEachLabelInterval; float *colorBase = new float[size]; float (*vertices)[3] = new float[size][3]; for(int m=0; m=0) colorBase[m] =data_[idx * nar_ + coloringMethod]; if(coloringMethod==CL_POINT_NUMBER) colorBase[m] = m; } SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, size, vertices); myint[0]=size; SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); if(coloringMethod == CL_STABILITY) anInterval->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anInterval->addChild(setLineAttributesByType(stability, type, scaler)); else anInterval->addChild(setLineColorBlending(colorBase, size, stability, scaler)); anInterval->addChild(myCoords); anInterval->addChild(myLine); delete [] vertices; return anInterval; } ////////////////////////////////////////////////////////////////////////// // // Draw a label interval using NURBS curve // SoSeparator * drawABifLabelIntervalUsingNurbsCurve(long int l, long int si, float scaler, int stability, int type) // ////////////////////////////////////////////////////////////////////////// { int32_t myint[10]; SoSeparator * anInterval = new SoSeparator; float (*vertices)[3]; vertices = new float[orbits_[l].numVerticesEachLabelInterval][3]; for(int m=0; mpoint.setValues(0, orbits_[l].numVerticesEachLabelInterval, vertices); myint[0]=orbits_[l].numVerticesEachLabelInterval; SoGroup *cvGrp = new SoGroup; int number = orbits_[l].numVerticesEachLabelInterval; float * knots = new float[number+4]; if(number > 4) { for (int i=0; i<4; ++i) knots[i]=0, knots[i+number]=number-3; for(int i=4; inumControlPoints = number; myCurve->knotVector.setValues(0, number+4, knots); cvGrp->addChild(myCurve); } else { SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); cvGrp->addChild(myLine); } anInterval->addChild(setLineAttributesByType(stability, type, scaler)); anInterval->addChild(myCoords); anInterval->addChild(cvGrp); delete [] vertices; delete [] knots; return anInterval; } #endif ///////////////////////////////////////////////////////////////// // // create bifurcation scene // SoSeparator * Bifurcation::render() // ////////////////////////////////////////////////////////////////////////// { SoSeparator *bifSep = new SoSeparator; SoMaterial *bifMtl= new SoMaterial; bifMtl->ambientColor.setValue(0.5,0.5,0.5); bifMtl->diffuseColor.setValue(0.9,1.0,0.9); bifMtl->specularColor.setValue(0.0,0.5,0.5); bifMtl->shininess = 0.5; bifMtl->transparency = 0.0; SoGroup *bifGroup = new SoGroup; if(whichStyle == TUBE ) { long int si = 0, k = 0; for(int ka=0; kaaddChild(drawABranchUsingTubes(ka, k, si, 1*lineWidthScaler)); k = k+1; si += numVerticesEachBranch_[ka]; } } else if (whichStyle == NURBS) { long int si = 0, k = 0; for(int ka=0; kaaddChild(drawABranchUsingNurbsCurve(ka, k, si, 1*lineWidthScaler)); k = k+1; si += numVerticesEachBranch_[ka]; } } else { long int si = 0, k = 0; for(int ka=0; kaaddChild(drawABranchUsingLines(ka, k, si, 1*lineWidthScaler)); k = k+1; si += numVerticesEachBranch_[ka]; } } if(options[OPT_DRAW_LABELS]) bifSep->addChild(drawLabelPtsInScene()); bifSep->addChild(bifMtl); bifSep->addChild(bifGroup); return bifSep; } //////////////////////////////////////////////////////////////////////// // // // void Bifurcation::copyDataToWorkArray(int varIndices[]) // //////////////////////////////////////////////////////////////////////// { double mx, mi; for(int k=0; k<3; k++) { varIndices_[k] = varIndices[k]; for(long int row=0; row=0) { float dummy = data_[row*nar_ + varIndices[k]]; if(row==0 || dummy>max_[k]) max_[k] = dummy; if(row==0 || dummy0.5 && min_[k]>=-1.0 && min_[k]<-0.5 )|| (div<0.00000001))) { float avg = (max_[k]+min_[k])/2.0; position[k] = position[k]*div+avg; } } } /*go to the end of the line*/ static void go_to_eol(FILE *f) { int i; do { i = fgetc(f); } while (i != '\n' && i != EOF ); } //////////////////////////////////////////////////////////////////////////////// // bool Bifurcation::read(const char *bFileName, int varIndices[]) // //////////////////////////////////////////////////////////////////////////////// { int branch; FILE * inFile; inFile = fopen(bFileName, "rt"); maxndim_ = 0; if(!inFile) { printf(" Cannot open input file: %s\n", bFileName); return false; } long int numBranches = 0; long int totalPoints = 0; long int numPtsInThisBranch = 0; int maxColSize = 0; int lb, lbType, lbStability; int totalLabels = 0; int numPtInCurrentInterval = 0; int ndim; long int pt = 1; while(fscanf(inFile, "%d", &branch) == 1) { int ic = 0; if(branch == 0) { pt = 1; if(fscanf(inFile, " NDIM=%d", &ndim) == 1 && ndim > maxndim_) maxndim_ = ndim; go_to_eol(inFile); } else { long int prevpt = pt; fscanf(inFile, "%ld %d %d", &pt, &lbType, &lb); int i = 0; char dummystr[25], c; while (fscanf(inFile,"%24s%c", dummystr, &c) == 2) { data_[totalPoints*nar_+(i++)] = fortranatof(dummystr); if(c=='\n')break; } if(abs(pt) == 1 && // Sometimes the point numbers rotate, like // 9996, 9997, 9998, 9999, 1, 2, ... // -9996, -9997, 1, 0, -1, -2, ... (an AUTO bug) // do not define a new branch if that happens (abs(prevpt) != 9999 && abs(prevpt) != 9997 && abs(prevpt) != 0)) { branchID_[numBranches] = branch; if(numBranches>0) { numVerticesEachBranch_[numBranches-1] = numPtsInThisBranch; } ++numBranches; numPtsInThisBranch = 0; } ++numPtsInThisBranch; // set the stability of the point if(branch > 0) { lbStability = (pt>0 ? 1 : 2); } else { lbStability = (pt>0 ? 3 : 4); } ++numPtInCurrentInterval; if(lb != 0) { orbits_[totalLabels].numVerticesEachLabelInterval = numPtInCurrentInterval; numPtInCurrentInterval = 0; orbits_[totalLabels].label = lb; clientData.labelIndex[totalLabels][1] = totalPoints; clientData.labelIndex[totalLabels][2] = lbType; clientData.labelIndex[totalLabels][3] = lbStability; totalLabels++; } maxColSize=(maxColSize>ic) ? maxColSize : ic; ptStability_[totalPoints] = lbStability; ++totalPoints; } } if(numBranches>0) numVerticesEachBranch_[numBranches-1] = numPtsInThisBranch; #ifdef DEBUG cout <<"======================================"< maxColSize) maxColSize = ic; ++totalPoints; } else { pt = 1; go_to_eol(inFile); } } nar_ = maxColSize; totalNumPoints_ = totalPoints; numBranches_ = numBranches; fclose(inFile); return true; } ///////////////////////////////////////////////////////////////////////////////// // void Bifurcation::normalizeData(long int idx, float xyzCoords[3]) // ///////////////////////////////////////////////////////////////////////////////// { for(int k=0; k<3; k++) { if (varIndices_[k] == -1) xyzCoords[k] = 0.0; else xyzCoords[k] = data_[idx*nar_ + varIndices_[k]]; } if(!options[OPT_NORMALIZE_DATA]) return; for(int k=0; k<3; k++) { float avg = (max_[k]+min_[k])/2.0; float div = (max_[k]-min_[k])/2.0; if( !((max_[k]<=1.0 && max_[k]>0.5 && min_[k]>=-1.0 && min_[k]<-0.5 )|| (div<0.00000001))) { xyzCoords[k]=(xyzCoords[k]-avg)/div; } } } void Bifurcation::dealloc() { delete [] ptStability_; delete [] numVerticesEachBranch_; delete [] branchID_; delete [] data_; delete [] orbits_; } auto/07p/plaut04/src/polygon3d.h0000640000175000017500000000470613570013207014420 0ustar sksk#ifndef _POLYGON_3D_ #define _POLYGON_3D_ #include #include // this switches on normalization of normal vectors; does it help anything? // #define _normalize_normals_ ////////////////////////////////////////////////////////////////////////////// // // Class: Polygon3D // // This class describes regular plane polygons placed in 3D space, // intended to be used to approximate circles // // To do: define Polygon3D and then RegularPolygon3D? Then, a projection is a // polygon, etc. // ////////////////////////////////////////////////////////////////////////////// class Polygon3D { public: // Constructs a regular polygon given radius and number of vertices // The normal is in the z-direction, the center is the origin Polygon3D(float r=1.0, int nv=16); // Constructs a regular polygon given center, normal, radius and number of vertices Polygon3D(const SbVec3f &c, const SbVec3f &n, float r, int nv); // Destructor: frees memory used to store vertices ~Polygon3D(); // Rotates the polygon wrt its center (normal becomes new_normal) void rotate(const SbVec3f &new_normal); // Parallel translates the polygon by vector t (center becomes center+t) void translate(const SbVec3f &t); // Parallel translates the polygon to a new center c void moveTo(const SbVec3f &c); // Scales the polygon by s (radius becomes radius*s) void scale(float s); // Projects vertices onto a plane along the normal of the polygon void project(const SbPlane &p, float pj[][3]); // Projects vertices onto a plane along the normal of the plane void project1(const SbPlane &p, float pj[][3]); // Rotates the vertices n steps (counterclockwise if n>0) void rotate(const int n); // Accessors const float & getRadius() const { return radius; } const SbVec3f & getNormal() const { return normal; } const SbVec3f & getCenter() const { return center; } // Accesses indexed vertices SbVec3f & operator [](int i) { return (points[i]); } const SbVec3f & operator [](int i) const { return (points[i]); } // Prints coordinates of the verteces for testing purposes void print(); protected: int n_points; float radius; SbVec3f normal, center; SbVec3f *points; private: // Common code for constructors void init(float r, int nv); }; #endif /* _POLYGON_3D_ */ auto/07p/plaut04/src/createDisk.h0000640000175000017500000000022113570013207014544 0ustar sksk#ifndef CREATEDISK_H #define CREATEDISK_H #include SoSeparator *createDisk(float where[], float scaler); #endif auto/07p/plaut04/src/stringtrim.h0000640000175000017500000000021713570013207014675 0ustar sksk#ifndef STRINGTRIM_H #define STRINGTRIM_H #include void strlefttrim(std::string &str); void strrighttrim(std::string &str); #endif auto/07p/plaut04/src/createLegend.c++0000640000175000017500000002667413570013207015215 0ustar sksk#include "createLegend.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #define FONT_SIZE 12 /////////////////////////////////////////////////////////////////////////////// // SoSeparator * printScaleAt(SbVec3f position, double size, double value) // //////////////////////////////////////////////////////////////////////////////// { SoSeparator * textSep = new SoSeparator; SoMaterial * txtMtl = new SoMaterial; txtMtl->diffuseColor.setValue(1, 1, 1); textSep->addChild(txtMtl); SoFont * txtFont = new SoFont; txtFont->size = size; textSep->addChild(txtFont); SoTransform * txtXform = new SoTransform; txtXform->translation.setValue(position); textSep->addChild(txtXform); char strScale[10]; sprintf(strScale, "%8.3e", value); SoText2 * txt = new SoText2; txt->string.setValue(strScale); textSep->addChild(txt); return textSep; } //////////////////////////////////////////////////////////////////////////////// // SoSeparator * printScaleAt(SbVec3f position, double size, const char* strScale) // //////////////////////////////////////////////////////////////////////////////// { SoSeparator * textSep = new SoSeparator; SoMaterial * txtMtl = new SoMaterial; txtMtl->diffuseColor.setValue(1, 1, 1); textSep->addChild(txtMtl); SoFont * txtFont = new SoFont; txtFont->size = size; textSep->addChild(txtFont); SoTransform * txtXform = new SoTransform; txtXform->translation.setValue(position); textSep->addChild(txtXform); //SoText3 * txt = new SoText3; SoText2 * txt = new SoText2; txt->string.setValue(strScale); textSep->addChild(txt); return textSep; } //////////////////////////////////////////////////////////////////////////////// // SoSeparator * createLegend(SbVec3f pos, double values[5]) // //////////////////////////////////////////////////////////////////////////////// { SoSeparator *legend= new SoSeparator; SoMaterial *legendMaterial = new SoMaterial; SoTransform *legendXform = new SoTransform; // SoOrthographicCamera *legendCamera = new SoOrthographicCamera; // legend->addChild(legendCamera); legendXform->translation.setValue(pos); legendXform->scaleFactor.setValue(0.2,0.5,1); // legendXform->rotation.setValue(-1,0,0,M_PI_2); legend->addChild(legendXform); static float vertexPositions[6][3]= { { 0.25, -0.5, 0 } , { -0.25, -0.5, 0 } , { 0.25, 0.0, 0 }, {-0.25, 0.0,0}, { 0.25,0.5,0 } , { -0.25, 0.5,0 } }; static float colors[6][3] = { { 0,0,1 } , { 0,0,1 } , { 0,1,0 } , { 0,1,0 } , { 1,0,0 } , { 1,0,0 } }; static int32_t numVertices[1]={6}; SoShapeHints * legendHints = new SoShapeHints; legendHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; legend->addChild(legendHints); legendMaterial->diffuseColor.setValues(0, 6, colors); //legendMaterial->transparency = 0.8; legend->addChild(legendMaterial); SoMaterialBinding *legendMtlBinding = new SoMaterialBinding; legendMtlBinding->value = SoMaterialBinding::PER_VERTEX; legend->addChild(legendMtlBinding); SoCoordinate3 *legendCoords = new SoCoordinate3; legendCoords->point.setValues(0,6,vertexPositions); legend->addChild(legendCoords); SoTriangleStripSet * legendStripSet = new SoTriangleStripSet; legendStripSet->numVertices.setValues(0, 1, numVertices); legend->addChild(legendStripSet); SbVec3f vec; for(int i=0; i<5; ++i) { vec.setValue(0.30, i*0.25-0.55, 0); legend->addChild(printScaleAt(vec, FONT_SIZE, values[i])); } return legend; } /////////////////////////////////////////////////////////////////////////////// // SoSeparator * createDiscreteLegend(SbVec3f pos, SbColor lineColors[13]) /////////////////////////////////////////////////////////////////////////////// { const char *tyNames[13]= { "None","BP Alg", "Fold Alg", "Hopf Bif", "Reg UZ","UZ Par","Fold Dif", "BP Dif", "Pd DBL","Torus","End Pt","No Conv","OTHERS" }; SoSeparator *legend= new SoSeparator; SoMaterial *legendMaterial = new SoMaterial; SoTransform *legendXform = new SoTransform; legendXform->translation.setValue(pos); legendXform->scaleFactor.setValue(0.2,0.5,1); legend->addChild(legendXform); static float vertexPositions[13*4][3]; static SbColor colors[13]; static int32_t numVertices[13]={4,4,4,4,4,4,4,4,4,4,4,4,4}; float tcolor[3]; int j; for(int i = 0; i < 13; ++i) { j = i*4; vertexPositions[j][0]= 0.25; vertexPositions[j][1]= -0.5 + i/13.0; vertexPositions[j][2]= 0; vertexPositions[j+1][0]= -0.25; vertexPositions[j+1][1]= vertexPositions[j][1]; vertexPositions[j+1][2]= 0; vertexPositions[j+2][0]= 0.25; vertexPositions[j+2][1]= -0.5 + (i+1)/13.0; vertexPositions[j+2][2]= 0; vertexPositions[j+3][0]= -0.25; vertexPositions[j+3][1]= vertexPositions[j+2][1]; vertexPositions[j+3][2]= 0; lineColors[i].getValue(tcolor[0],tcolor[1], tcolor[2]); colors[i].setValue(tcolor); } SoShapeHints * legendHints = new SoShapeHints; legendHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; legend->addChild(legendHints); legendMaterial->diffuseColor.setValues(0, 13, colors); legend->addChild(legendMaterial); SoMaterialBinding *legendMtlBinding = new SoMaterialBinding; legendMtlBinding->value = SoMaterialBinding::PER_PART; legend->addChild(legendMtlBinding); SoCoordinate3 *legendCoords = new SoCoordinate3; legendCoords->point.setValues(0,52,vertexPositions); legend->addChild(legendCoords); SoTriangleStripSet * legendStripSet = new SoTriangleStripSet; legendStripSet->numVertices.setValues(0, 13, numVertices); legend->addChild(legendStripSet); SbVec3f vec; for(int i=0; i<13; ++i) { vec.setValue(0.28, -0.5+i/13.0, 0); legend->addChild(printScaleAt(vec, FONT_SIZE, tyNames[i])); } return legend; } /////////////////////////////////////////////////////////////////////////////// // SoSeparator * createBranchLegend(SbVec3f pos, SbColor lineColors[13]) // /////////////////////////////////////////////////////////////////////////////// { char tyNames[13][10]= { "BR 1","BR 2", "BR 3", "BR 4", "BR 5","BR 6","BR 7", "BR 8", "BR 9","BR 10","BR 11","BR 12","BR 13" }; SoSeparator *legend= new SoSeparator; SoMaterial *legendMaterial = new SoMaterial; SoTransform *legendXform = new SoTransform; legendXform->translation.setValue(pos); legendXform->scaleFactor.setValue(0.2,0.5,1); legend->addChild(legendXform); static float vertexPositions[13*4][3]; static SbColor colors[13]; static int32_t numVertices[13]={4,4,4,4,4,4,4,4,4,4,4,4,4}; float tcolor[3]; int j; for(int i = 0; i < 13; ++i) { j = i*4; vertexPositions[j][0]= 0.25; vertexPositions[j][1]= -0.5 + i/13.0; vertexPositions[j][2]= 0; vertexPositions[j+1][0]= -0.25; vertexPositions[j+1][1]= vertexPositions[j][1]; vertexPositions[j+1][2]= 0; vertexPositions[j+2][0]= 0.25; vertexPositions[j+2][1]= -0.5 + (i+1)/13.0; vertexPositions[j+2][2]= 0; vertexPositions[j+3][0]= -0.25; vertexPositions[j+3][1]= vertexPositions[j+2][1]; vertexPositions[j+3][2]= 0; lineColors[i].getValue(tcolor[0],tcolor[1], tcolor[2]); colors[i].setValue(tcolor); } SoShapeHints * legendHints = new SoShapeHints; legendHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; legend->addChild(legendHints); legendMaterial->diffuseColor.setValues(0, 13, colors); legend->addChild(legendMaterial); SoMaterialBinding *legendMtlBinding = new SoMaterialBinding; legendMtlBinding->value = SoMaterialBinding::PER_PART; legend->addChild(legendMtlBinding); SoCoordinate3 *legendCoords = new SoCoordinate3; legendCoords->point.setValues(0,52,vertexPositions); legend->addChild(legendCoords); SoTriangleStripSet * legendStripSet = new SoTriangleStripSet; legendStripSet->numVertices.setValues(0, 13, numVertices); legend->addChild(legendStripSet); SbVec3f vec; for(int i=0; i<13; ++i) { vec.setValue(0.28, -0.5+i/13.0, 0); legend->addChild(printScaleAt(vec, FONT_SIZE, tyNames[i])); } return legend; } /////////////////////////////////////////////////////////////////////////////// // SoSeparator * createStabilityLegend(SbVec3f pos, SbColor lineColors[2]) // /////////////////////////////////////////////////////////////////////////////// { char tyNames[][10]={"UNSTB","STB"}; SoSeparator *legend= new SoSeparator; SoMaterial *legendMaterial = new SoMaterial; SoTransform *legendXform = new SoTransform; legendXform->translation.setValue(pos); legendXform->scaleFactor.setValue(0.2,0.5,1); legend->addChild(legendXform); static float vertexPositions[2*4][3]; static SbColor colors[2]; static int32_t numVertices[2]={4,4}; float tcolor[3]; int j; for(int i = 0; i < 2; ++i) { j = i*4; vertexPositions[j][0]= 0.26; vertexPositions[j][1]= -0.5 + i/2.0; vertexPositions[j][2]= 0; vertexPositions[j+1][0]= -0.24; vertexPositions[j+1][1]= vertexPositions[j][1]; vertexPositions[j+1][2]= 0; vertexPositions[j+2][0]= 0.26; vertexPositions[j+2][1]= -0.5 + (i+1)/2.0; vertexPositions[j+2][2]= 0; vertexPositions[j+3][0]= -0.24; vertexPositions[j+3][1]= vertexPositions[j+2][1]; vertexPositions[j+3][2]= 0; lineColors[i].getValue(tcolor[0],tcolor[1], tcolor[2]); colors[i].setValue(tcolor); } SoShapeHints * legendHints = new SoShapeHints; legendHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; legend->addChild(legendHints); legendMaterial->diffuseColor.setValues(0, 2, colors); legend->addChild(legendMaterial); SoMaterialBinding *legendMtlBinding = new SoMaterialBinding; legendMtlBinding->value = SoMaterialBinding::PER_PART; legend->addChild(legendMtlBinding); SoCoordinate3 *legendCoords = new SoCoordinate3; legendCoords->point.setValues(0,52,vertexPositions); legend->addChild(legendCoords); SoTriangleStripSet * legendStripSet = new SoTriangleStripSet; legendStripSet->numVertices.setValues(0, 2, numVertices); legend->addChild(legendStripSet); SbVec3f vec; for(int i=0; i<2; ++i) { vec.setValue(0.28, -0.5+i/2.0, 0); legend->addChild(printScaleAt(vec, FONT_SIZE, tyNames[i])); } return legend; } auto/07p/plaut04/src/rounding.h0000640000175000017500000000021513570013207014316 0ustar sksk#ifndef ROUNDING_H #define ROUNDING_H double round(bool key, double value, int digits); void rounding(double& amax, double& amin); #endif auto/07p/plaut04/src/printToPS.c++0000640000175000017500000000600113570013207014513 0ustar sksk#include "printToPS.h" #include #include #if defined(__COIN__) && COIN_MAJOR_VERSION >= 2 && COIN_MINOR_VERSION >= 1 #include #endif SbBool printToPostScript (SoNode *root, const char *filename, #ifdef USE_SOQT SoQtExaminerViewer *viewer, int printerDPI) #else SoXtExaminerViewer *viewer, int printerDPI) #endif { #if defined(__COIN__) && COIN_MAJOR_VERSION >= 2 && COIN_MINOR_VERSION >= 1 SoVectorizePSAction * ps = new SoVectorizePSAction; SoVectorOutput * out = ps->getOutput(); if (!out->openFile(filename)) { return FALSE; // unable to open output file } // to enable gouraud shading. 0.1 is a nice epsilon value //ps->setGouraudThreshold(0.1f); // clear to white background. Not really necessary if you // want a white background ps->setBackgroundColor(TRUE, SbColor(1.0f, 1.0f, 1.0f)); // select LANDSCAPE or PORTRAIT orientation //ps->setOrientation(SoVectorizeAction::LANDSCAPE); ps->setOrientation(SoVectorizeAction::PORTRAIT); // start creating a new page (A4 page, with 10mm border). //ps->beginPage(SbVec2f(10.0f, 10.0f), SbVec2f(190.0f, 277.0f)); // start creating a new page (15x15 cm, no border). ps->beginPage(SbVec2f(0.0f, 0.0f), SbVec2f(150.0f, 150.0f)); // There are also enums for A0-A10. Example: // ps->beginStandardPage(SoVectorizeAction::A4, 10.0f); // calibrate so that text, lines, points and images will have the // same size in the postscript file as on the monitor. ps->calibrate(viewer->getViewportRegion()); // apply action on the viewer scenegraph. Remember to use // SoSceneManager's scene graph so that the camera is included. ps->apply(viewer->getSceneManager()->getSceneGraph()); // this will create the postscript file ps->endPage(); // close file out->closeFile(); delete ps; #else FILE *file = fopen(filename,"w"); if (file == NULL) return FALSE; const SbViewportRegion &vp = viewer->getViewportRegion(); const SbVec2s &imagePixSize = vp.getViewportSizePixels(); SbVec2f imageInches; float pixPerInch; pixPerInch = SoOffscreenRenderer::getScreenPixelsPerInch(); imageInches.setValue((float)imagePixSize[0] / pixPerInch, (float)imagePixSize[1] / pixPerInch); SbVec2s postScriptRes; postScriptRes.setValue((short)(imageInches[0]*printerDPI), (short)(imageInches[1]*printerDPI)); // Create a viewport to render the scene into. SbViewportRegion myViewport; myViewport.setWindowSize(postScriptRes); myViewport.setPixelsPerInch((float)printerDPI); // Render the scene SoOffscreenRenderer *myRenderer = new SoOffscreenRenderer(myViewport); if (!myRenderer->render(root)) { delete myRenderer; return FALSE; } // Generate PostScript and write it to the given file myRenderer->writeToPostScript(file); fclose(file); delete myRenderer; #endif return TRUE; } auto/07p/plaut04/src/tube.c++0000640000175000017500000002064613570013207013563 0ustar sksk#include "tube.h" #include "polygon3d.h" #define COPY3(to,from) \ to[0] = from[0]; to[1] = from[1]; to[2] = from[2]; Tube::Tube(const int num_pts, float xyz_path[][3], const float r, const int num_edges) { path = xyz_path; // This is for checking the data validity. // if distance betwee two points are too colse, the next // point will be skipped. // Added by ZCH. Mar 30, 2004 float distance = 0; float pt[3]; pt[0]=path[0][0]; pt[1]=path[0][1]; pt[2]=path[0][2]; // for(int i =1; i <5; i++) int i = 1; int j = i; int skip = 0; do { distance = sqrt((path[i][0]-pt[0])*(path[i][0]-pt[0]) + (path[i][1]-pt[1])*(path[i][1]-pt[1]) + (path[i][2]-pt[2])*(path[i][2]-pt[2])); if(distance < 1.e-7) { // printf("Skip i=%i\n", i); skip++; } else { path[j][0]=path[i][0]; path[j][1]=path[i][1]; path[j][2]=path[i][2]; pt[0]=path[i][0]; pt[1]=path[i][1]; pt[2]=path[i][2]; j++; } i++; } while(i < num_pts ); path_pts = i-skip;//num_pts; // path_pts = num_pts; // ZCH's modification end here. radius = r; n_edges = num_edges; n_segments = path_pts - 1; mesh_pts = (n_edges + 1) * path_pts; open_path = (SbVec3f(path[0]) == SbVec3f(path[n_segments])) == 0; // printf("Estimated number of mesh points: %d\n", mesh_pts); } SoSeparator* Tube::createTube() { SoSeparator *result = new SoSeparator; result->ref(); // this line is added to deal with one or zero point cases. // added by ZCH. Mar 30, 2004 if(path_pts <=1) return result; // allocate memory for the array that stores vertices of the tube mesh = new float[mesh_pts][3]; // compute the coordinates of the vertices createMesh(); SoShapeHints *shapehints = new SoShapeHints; shapehints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; shapehints->shapeType = SoShapeHints::SOLID; shapehints->faceType = SoShapeHints::CONVEX; shapehints->creaseAngle = 1.0; result->addChild(shapehints); // define coordinates for vertices SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, mesh_pts, mesh); result->addChild(myCoords); // define the QuadMesh SoQuadMesh *myQuadMesh = new SoQuadMesh; myQuadMesh->verticesPerRow = n_edges + 1; // # of points around the tube myQuadMesh->verticesPerColumn = path_pts; // # of points along the tube result->addChild(myQuadMesh); // if path is not closed, plug a solid polygon at each end of the tube if ( open_path ) { // for the start of the path, use the first n_edges points of mesh[] // to define a polygon // for the end of the path, use the last n_edges points from mesh[] // with order reversed to get the correct orientation of the polygon for (int i=0; ipoint.setValues(0, n_edges*2, mesh); result->addChild(myCoords1); // define the two polygons SoFaceSet *myFaceSet = new SoFaceSet; myFaceSet->startIndex.setValue(0); myFaceSet->numVertices.set1Value(0, n_edges); myFaceSet->numVertices.set1Value(1, n_edges); result->addChild(myFaceSet); } // dealocate memory: don't need the array with vertices any more delete[] mesh; result->unrefNoDelete(); return result; } void Tube::createMesh() { int i, j; int mp = 0; // counter for created mesh points SbPlane plane; float (*pj)[3] = new float[n_edges][3]; SbVec3f v1, v2; // compute points of the first cross-section: // place the polygon at the first point of the path // and orient it perpendicular to the first segment Polygon3D poly = Polygon3D(SbVec3f(path[0]), SbVec3f(path[0]) - SbVec3f(path[1]), radius, n_edges); if ( open_path ) { // if the path is open, simply store the polygon vertices as mesh points for (i=0; i #include "gplaut04.h" void strrighttrim(std::string& str) { std::string::iterator it; for (it=str.end()-1; it > str.begin() && std::isspace(*it); it--); /* it now points to the right-most non-space character */ str.erase(it+1, str.end()); } void strlefttrim(std::string& str) { std::string::iterator it; for (it=str.begin(); it < str.end() && std::isspace(*it); it++); // it now points to the first non-space character, str.erase(str.begin(), it); } auto/07p/plaut04/src/createCoords.c++0000640000175000017500000000626713570013207015244 0ustar sksk#include "createCoords.h" #include "gplaut04.h" #include "axis.h" static struct coordScaleParameters { double csclMax; double csclMin; int csclNumTicker; } cspX, cspY, cspZ; SoSeparator * createCoordinates(float sclMax[3], float sclMin[3], SbColor color[3]) { SoSeparator * aSep = new SoSeparator; return aSep; } SoSeparator * createCoordinates(bool show3D, int where, float sclMax[3], float sclMin[3], int tickers[3], SbColor color[3]) { SoSeparator *axisSep = new SoSeparator; float transDis = -1.1; //create Z-axis if(show3D) { SoSeparator *zSep = new SoSeparator(); SoTransform *zXform = new SoTransform; if(where == COORD_AT_ORIGIN) { float x, y; x = -1 -sclMin[0] / (sclMax[0] - sclMin[0]) * 2; y = -1 -sclMin[1] / (sclMax[1] - sclMin[1]) * 2; zXform->translation.setValue(x, 0, -y); } else if(where == LEFTBACK || where == LEFTAHEAD) { zXform->translation.setValue(-1.1, 0.0, -1.1); } cspZ.csclMax = sclMax[2]; cspZ.csclMin = sclMin[2]; cspZ.csclNumTicker= tickers[2]; Axis axisZ = Axis(show3D, where, cspZ.csclMax,cspZ.csclMin,cspZ.csclNumTicker,"Z-Axis/(Z)", 0, color[2]); zSep->addChild(zXform); zSep->addChild(axisZ.createAxis()); axisSep->addChild(zSep); transDis = -1.1; } else { transDis = 0; } //create X-axis SoSeparator *xSep = new SoSeparator(); SoTransform *xXform = new SoTransform; if(where == COORD_AT_ORIGIN) { float y, z; y = -1 -sclMin[1] / (sclMax[1] - sclMin[1]) * 2; z = -1 -sclMin[2] / (sclMax[2] - sclMin[2]) * 2; xXform->translation.setValue(0.0, z, -y); } else if(where == LEFTBACK || where == LEFTAHEAD) { if(where==LEFTBACK) xXform->translation.setValue(0.0, transDis, -1.1); else xXform->translation.setValue(-0.0, transDis, 1.1); } xXform->rotation.setValue(SbVec3f(0.0, 0.0, 1.0), -M_PI_2); cspX.csclMax = sclMax[0]; cspX.csclMin = sclMin[0]; cspX.csclNumTicker= tickers[0]; Axis axisX = Axis(show3D, where, cspX.csclMax,cspX.csclMin,cspX.csclNumTicker,"X-Axis/(X)", 1, color[0]); xSep->addChild(xXform); xSep->addChild(axisX.createAxis()); //create Y-axis SoSeparator *ySep = new SoSeparator(); SoTransform *yXform = new SoTransform; if(where == COORD_AT_ORIGIN) { float x, z; x = -1 -sclMin[0] / (sclMax[0] - sclMin[0]) * 2; z = -1 -sclMin[2] / (sclMax[2] - sclMin[2]) * 2; yXform->translation.setValue(x, z, 0.0); } else if(where == LEFTBACK || where == LEFTAHEAD) { yXform->translation.setValue(-1.1, transDis, 0.00); } yXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0),M_PI_2); cspY.csclMax = sclMax[1]; cspY.csclMin = sclMin[1]; cspY.csclNumTicker= tickers[1]; Axis axisY = Axis(show3D, where, cspY.csclMax,cspY.csclMin,cspY.csclNumTicker,"Y-Axis/(Y)", -1, color[1]); ySep->addChild(yXform); ySep->addChild(axisY.createAxis()); axisSep->addChild(xSep); axisSep->addChild(ySep); return axisSep; } auto/07p/plaut04/src/createBoundingBox.h0000640000175000017500000000044413570013207016077 0ustar sksk#ifndef CREATEBOUNDINGBOX_H #define CREATEBOUNDINGBOX_H #include #include SoSeparator * drawLine(SbVec3f pointS, SbVec3f pointE, SbVec3f color, float thickness, bool ticker, bool text, int dir); SoSeparator * createBoundingBox(); #endif auto/07p/plaut04/src/solution.h0000640000175000017500000001312113570013207014345 0ustar sksk#ifndef SOLUTION_H #define SOLUTION_H #include #include class Solution { public: Solution() {npar_ = 0;} ~Solution() {} void copyDataToWorkArray(int varIndices[], int cur, int mx, int to); SoSeparator *createSceneWithWidgets(); SoSeparator *createInertialFrameScene(float dis); bool parse(const char* sFileName); bool read(const char* sFileName, int varIndices[]); void normalizeData(); void alloc(); void dealloc(); void searchForMaxMin(int component, int varIndices[]); void denormalizePosition(float position[]); void set_parID(std::queue &parIDs); int nar() const {return nar_;} int npar() const {return npar_;} int parID(int i) const {return parID_[i];} long int branchID(int i) const {return branchID_[i];} long int numOrbits() const {return numOrbits_;} long int labels(int i) const {return orbits_[i].label;} int totalLabels() const {return totalLabels_;} long totalNumPoints() const {return totalNumPoints_;} int32_t numVerticesEachPeriod(int i) const {return orbits_[i].numVerticesEachPeriod;} float **data() const {return data_;} float masses(int i) const {return orbits_[i].mass;} private: SoSeparator *render(); SoGroup *renderPoints(int style); SoGroup *renderLines(); SoGroup *renderNurbsCurve(); SoGroup *renderTubes(); SoGroup *renderSurface(); SoSeparator *drawUsingTubes(); SoSeparator *drawABranchUsingSurface(long obStart, long obEnd, long numVert); SoSeparator *animateUsingPoints(int style, bool aniColoring); SoSeparator *animateUsingLines(bool aniColoring); SoSeparator *animateUsingTubes(bool aniColoring); SoSeparator *drawAnOrbitUsingPoints(int style, int iBranch, long int l, long int si, float scaler, int stability, int type, bool aniColoring); SoSeparator *drawAnOrbitUsingLines(int iBranch, long int l, long int si, float scaler, int stability, int type, bool aniColoring); SoSeparator *drawAnOrbitUsingTubes(int iBranch, long int l, long int si, float scaler, int stability, int type); SoSeparator *drawAnOrbitUsingNurbsCurve(int iBranch, long int l, long int si, float scaler, int stability, int type); SoSeparator *animateOrbitWithTail(int iBranch, long int j, long int si); SoSeparator *drawAPoint(float x, float y, float z, float size, float scale); SoSeparator *drawAStrip(float stripSet[][3], int size); SoSeparator *animateOrbitInertialSysUsingLine(int iBranch, int iOrbit, float (*vertices)[3], float (*largePrimPos)[3], float (*smallPrimPos)[3], float * myColorBase, float period, int size, float scaler, int stability, int type); SoSeparator *drawAnOrbitInertialSysUsingLines(int iBranch, int iOrbit, float (*myVertices)[3], float *myColorBase, long int arrSize, float scaler, int stability, int type); void convertDataToInertialSystem(float (*myVertices)[3], float *timeEqualDiv, float *myColorBase, long int arrSize, long int orbitSize, long int kth, long int sumX); SoSeparator *drawAnOrbitInertialSysUsingTubes(int iBranch, int iOrbit, float (*myVertices)[3], float *myColorBase, const long int arrSize, const float tubeRadiusScaler, const int stability, const int type); SoSeparator *drawAnOrbitInertialSysUsingNurbsCurve(int iBranch, int iOrbit, float (*myVertices)[3], const long int arrSize, const float scaler, const int stability, const int type); #if 0 // unused R3B related functions SoSeparator * animateIner2(long int j, long int si); SoSeparator * animateOrbitMovement(long int n, long int si); SoSeparator * animateOrbitCalSteps(long int n,long int si); SoSeparator * animateOrbitWithNurbsCurveTail(long int j,long int si); SoSeparator *drawEarthMovement(int k); void calPrimPos(float t, float pos[]); void calSatPos(int center, float mu, float t, float primPos[], float satPos[]); SoSeparator *drawASphereWithColor(float color[], float position[], float size); #endif std::queue positions_; double *time_; // this time is useless? float (*xyzCoords_)[3]; int32_t *numVerticesEachBranch_; // index start from 0 int32_t *numOrbitsInEachBranch_; // index start from 0 int nar_; int npar_; long int totalNumPoints_; // like 10012. long int numBranches_; // like 4. long int *branchID_; // for each label/solution long int numOrbits_; // like 43 == UserData.totalLabels == BifNode.totalLabels == totalLabels. struct orbit { long int label; long int ntst; long int ncol; double *par; // keep the parameter values for each orbit. float mass; float period; // from the solution file par[10]; int32_t numVerticesEachPeriod; // index start from 0 } *orbits_; // we have an array of numOrbits of these int numAxis_; // number of groups of axis. 3 is a group. int totalLabels_; double (**parMax_); // keep the max parameter values in each branch. double (**parMin_); // keep the min parameter values. double (**parMid_); // keep the mid parameter values. int *parID_; // keep the id for the par, namely the x for par(x) // max saves the maximum value of the coordinate. // min saves the minimum value of the coordinate. float max_[3], min_[3]; float **data_; }; extern Solution *mySolNode; #endif auto/07p/plaut04/src/polygon3d.c++0000640000175000017500000000413413570013207014534 0ustar sksk#include #include "polygon3d.h" void Polygon3D::init(float r, int nv) { n_points = nv; radius = r; normal.setValue(0.0, 0.0, 1.0); center.setValue(0.0, 0.0, 0.0); points = new SbVec3f[n_points]; float dfi = (M_PI * 2) / n_points; for (int i=0; i double round(bool key, double value, int digits) { double tmp; tmp = pow(10.0, digits); if(key) return floor(value/tmp)*tmp; return ceil(value/tmp)*tmp; } void rounding(double& amax, double& amin) { double edif, tmp; int adif; int isswap = 0; int token = 1; if(amin ==0 && amax == 0) return; if(amin < 0 ) { if(amax < 0) { tmp = -amax; amax = -amin; amin = tmp; isswap = 1; } else { amin = -amin; isswap = 2; if(amax < amin) { tmp = amax; amax = amin; amin = tmp; isswap = 3; token = -1; } } } // cout <<" x1 = "< #include #include #include "gplaut04.h" #include "bifurcation.h" extern UserData clientData; ////////////////////////////////////////////////////////////////////////////////// // int readFM(const char* dFileName, const int size) // ////////////////////////////////////////////////////////////////////////////////// { int state = 0; char buffer[256]; int branch, point, prevpoint, myid; int maxndim = clientData.maxndim; bool eigenvalues; float fl1, fl2; FILE * inFile; inFile = fopen(dFileName, "r"); if (!inFile) { printf("Cannot open the diagnostic file. \n"); state = 1; return state; } char * next; long icounter = 1, branchcounter = 0; int rowi = 0; prevpoint = -1; int branchi = 0; while ( (next = fgets(buffer, sizeof(buffer), inFile)) != NULL && icounter < size) { if (strstr(buffer, "Total Time") != NULL) { /* New branch */ branchcounter += myBifNode->numVerticesEachBranch(branchi++); icounter = branchcounter + 1; } eigenvalues = strstr(buffer, "Eigenvalue") != NULL; if(eigenvalues || strstr(buffer, "Multiplier") != NULL) { if(clientData.multipliers == NULL) { clientData.multipliers = new float[size*maxndim][2]; clientData.numFM = new int[size]; } clientData.numFM[icounter] = 0; rowi = 0; do { int ret; if(eigenvalues) ret = sscanf(buffer, "%d%d Eigenvalue %d: %e%e", &branch, &point, &myid, &fl1, &fl2); else ret = sscanf(buffer, "%d%d Multiplier %d%e%e", &branch, &point, &myid, &fl1, &fl2); if(ret != 5) { if (rowi == 0) --icounter; break; } if (point == prevpoint && rowi == 0) --icounter; prevpoint = point; clientData.multipliers[icounter*maxndim+rowi][0] = fl1; clientData.multipliers[icounter*maxndim+rowi][1] = fl2; rowi++; } //end inner while while( fgets(buffer, sizeof(buffer), inFile) && (strstr(buffer, "Multiplier") != NULL || strstr(buffer, "Eigenvalue") != NULL) ); if(rowi !=0) clientData.numFM[icounter] = eigenvalues ? -rowi : rowi; ++icounter; } } // end outter while fclose(inFile); return state; } auto/07p/plaut04/src/axis.c++0000640000175000017500000002126113570013207013562 0ustar sksk#include "gplaut04.h" #include "axis.h" #define FONT_SIZE 12 ////////////////////////////////////////////////////////////// // Axis::Axis() // ////////////////////////////////////////////////////////////// { maxValue = 1; minValue = -1; numOfTickers = 10; color.setValue(1,0,0); name = "Y"; double delta = (maxValue-minValue)/numOfTickers; for(int i = 0; i <= numOfTickers; ++i) { tickers[i] = minValue + i * delta; } adjust = 0; } ////////////////////////////////////////////////////////////// // Axis::~Axis() // ////////////////////////////////////////////////////////////// { } ////////////////////////////////////////////////////////////// // Axis::Axis(bool s3D, int ty, double mxValue, double miValue, int numTickers, const char* aName, int wh, SbColor clr) // ////////////////////////////////////////////////////////////// { show3D = s3D; set(ty, mxValue, miValue, numTickers, aName, wh, clr); } ////////////////////////////////////////////////////////////// // Axis::Axis(int ty, double mxValue, double miValue, int numTickers, const char* aName, int wh, SbColor clr) // ////////////////////////////////////////////////////////////// { show3D = false; set(ty, mxValue, miValue, numTickers, aName, wh, clr); } ////////////////////////////////////////////////////////////// // void Axis::set(int ty, double mxValue, double mnValue, int numTickers, const char* aName, int wh, SbColor clr) // ////////////////////////////////////////////////////////////// { type = ty; maxValue = mxValue; minValue = mnValue; numOfTickers = (numTickers<11) ? numTickers : 10; which = wh; color = clr; name = aName; double delta = (maxValue-minValue)/numOfTickers; for(int i = 0; i <= numOfTickers; ++i) { tickers[i] = minValue + i * delta; } adjust = 0; if(type == COORD_AT_ORIGIN && (maxValue < 0 || minValue > 0)) { if(minValue > 0) adjust = minValue; else if(maxValue < 0) adjust = maxValue; adjust *= 1.1 / (maxValue - minValue); } } ////////////////////////////////////////////////////////////// // SoSeparator * Axis::createAxis() // ////////////////////////////////////////////////////////////// { SoSeparator * axis = new SoSeparator; axis->ref(); SoMaterial *mtl = new SoMaterial; mtl->diffuseColor.setValue(color); axis->addChild(mtl); SoCylinder *cyl = new SoCylinder; cyl->radius = 2.0/500.0; cyl->height = 2.2; if(type == COORD_AT_ORIGIN && (maxValue < 0 || minValue > 0)) { SoTransform *xform = new SoTransform; float d = 0; cyl->height = 2 * (1.1 + adjust); if(minValue > 0) d = -adjust; else if(maxValue < 0) d = adjust; if (which == -1) //y xform->translation.setValue(0, -d, 0); else // x or z xform->translation.setValue(0, d, 0); axis->addChild(xform); } axis->addChild(cyl); float position; if(type == COORDORIGIN || type == COORD_AT_ORIGIN) { axis->addChild(drawArrow()); position = 1.2 + adjust; } else { #ifdef TD_FONT position = 0; #else position = 1.1; #endif } axis->addChild(drawAxisName(position)); // draw tickers if(numOfTickers>0) for(int i = 0; i <= numOfTickers; ++i) axis->addChild(drawTicker(-1.0+i*2.0/numOfTickers, 0.04)); // draw scales if(numOfTickers>0) for(int i = 0; i <= numOfTickers; ++i) axis->addChild(drawScale(-1.0+i*2.0/numOfTickers, tickers[i])); axis->unrefNoDelete(); return axis; } ////////////////////////////////////////////////////////////// // SoSeparator * Axis::drawAxisName(float pos) // ////////////////////////////////////////////////////////////// { SoSeparator *nameSep = new SoSeparator; SoFont *axFont = new SoFont; axFont->name.setValue("Helvetica"); axFont->size.setValue(FONT_SIZE); #ifdef TD_FONT SoText3 *axName = new SoText3; #else SoText2 *axName = new SoText2; #endif axName->string.setValue(name); SoTransform *tkXform = new SoTransform; if(type == LEFTBACK || type == LEFTAHEAD) { if(which == -1) { tkXform->translation.setValue(-0.4, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0), M_PI_2); nameSep->addChild(tkXform); SoTransform *tkXform2 = new SoTransform; tkXform2->rotation.setValue(SbVec3f(1.0,0.0,0.0), M_PI); nameSep->addChild(tkXform2); } else if( which == 1) { tkXform->translation.setValue(0.2, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0),M_PI_2); nameSep->addChild(tkXform); } else { tkXform->translation.setValue(-0.4, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0),M_PI_2); nameSep->addChild(tkXform); } } else { if(which == -1) { SoTransform *tkXform2 = new SoTransform; tkXform2->rotation.setValue(SbVec3f(0.0,0.0,1.0), M_PI); tkXform->translation.setValue(-0.2, -pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,1.0,0.0), M_PI); nameSep->addChild(tkXform); nameSep->addChild(tkXform2); } else if( which == 1) { tkXform->translation.setValue(0.0, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0),M_PI_2); nameSep->addChild(tkXform); } else { tkXform->translation.setValue(0.0, pos, 0.0); nameSep->addChild(tkXform); } } nameSep->addChild(axFont); nameSep->addChild(axName); return nameSep; } ////////////////////////////////////////////////////////////// // SoSeparator * Axis::drawTicker(float pos, float height) // ////////////////////////////////////////////////////////////// { SoSeparator *tkSep = new SoSeparator; SoCylinder *ticker = new SoCylinder; ticker->radius = height/10.0; ticker->height = height; SoTransform *tkXform = new SoTransform; if(which == -1) { pos -= adjust; tkXform->translation.setValue(0.02, pos, 0.00); tkXform->rotation.setValue(SbVec3f(0.0,0.0,1.0),M_PI_2); } else if(which == 1) { pos += adjust; if(type == LEFTBACK) tkXform->translation.setValue(0.00, pos, 0.02); else tkXform->translation.setValue(0.00, pos, -0.02); tkXform->rotation.setValue(SbVec3f(1.0,0.0,0.0),M_PI_2); } else { pos += adjust; tkXform->translation.setValue(0.00, pos, -0.02); tkXform->rotation.setValue(SbVec3f(1.0,0.0,0.0),M_PI_2); } tkSep->addChild(tkXform); tkSep->addChild(ticker); return tkSep; } ////////////////////////////////////////////////////////////// // SoSeparator * Axis::drawScale(float pos, float scale) // ////////////////////////////////////////////////////////////// { SoSeparator * scaleSep = new SoSeparator; SoFont *sclFont = new SoFont; sclFont->name.setValue("Helvetica"); sclFont->size.setValue(FONT_SIZE); SoTransform *tkXform = new SoTransform; pos += adjust; if(which == -1) { tkXform->translation.setValue(-0.35, -pos, 0.00); tkXform->rotation.setValue(SbVec3f(1.0,0.0,0.0),M_PI); } else if(which == 1) { if(type == LEFTBACK) tkXform->translation.setValue(0.00, pos-0.05, -0.16); else tkXform->translation.setValue(0.00, pos-0.05, 0.08); } else { tkXform->translation.setValue(0, pos, 0.05); } char strScale[10]; sprintf(strScale, "%8.2e", scale); #ifdef TD_FONT SoText3 *axScale = new SoText3; #else SoText2 *axScale = new SoText2; #endif axScale->string.setValue(strScale); scaleSep->addChild(tkXform); scaleSep->addChild(sclFont); scaleSep->addChild(axScale); return scaleSep; } ////////////////////////////////////////////////////////////// // SoSeparator * Axis::drawArrow() // ////////////////////////////////////////////////////////////// { SoSeparator * arrSep = new SoSeparator; SoTransform * arrXform = new SoTransform; if( which == -1 ) { arrXform->translation.setValue(0.0, -1.1-adjust, 0.0); arrXform->rotation.setValue(SbVec3f(1, 0, 0), M_PI); } else arrXform->translation.setValue(0.0, 1.1+adjust, 0.0); arrSep->addChild(arrXform); SoCone * arr = new SoCone; arr->bottomRadius = 0.01; arr->height =0.1; arrSep->addChild(arr); return arrSep; } auto/07p/plaut04/src/readFM.h0000640000175000017500000000013713570013207013632 0ustar sksk#ifndef READFM_H #define READFM_H int readFM(const char* dFileName, const int size); #endif auto/07p/plaut04/src/printToPS.h0000640000175000017500000000066313570013207014402 0ustar sksk#ifndef PRINTTOPS_H #define PRINTTOPS_H #ifdef USE_SOQT #include #else #include #endif #include #include SbBool printToPostScript (SoNode *root, const char *filename, #ifdef USE_SOQT SoQtExaminerViewer *viewer, int printerDPI); #else SoXtExaminerViewer *viewer, int printerDPI); #endif #endif auto/07p/plaut04/src/tube.h0000640000175000017500000000312513570013207013433 0ustar sksk#ifndef _TUBE_ #define _TUBE_ #include #include #include #include #include // A class that is a placeholder of the routines for creating a tube. // The proper way would be to define a subclass of SoShape? class Tube { public: Tube() {} // constructor: sets up variables, doesn't create anything yet Tube(const int num_pts, float xyz_path[][3], const float radius=1.0, const int num_edges=20); // creates a sceen subtree desribing a tube, with some material SoSeparator *createTube(); private: // computes the points of the tube, stores them into mesh[][3] void createMesh(); float (*path)[3]; // pointer to the array supplied by the user float (*mesh)[3]; // this one is allocated/deallocated internally float radius; int n_edges; // # of edges of the tube (vertices of its cross-section) int path_pts; // # of points of the path int n_segments; // number of segments the path consists of int mesh_pts; // number of points in quad mesh bool open_path; // true if the given path is not closed (the path is // considered closed if the first and the last points // in the supplied array are exactly the same) }; #endif //_TUBE_ // To do: // - add an array for scaling / coloring? // - define bounding box, compute defualt tube radius as a fraction of // the boundin box size auto/07p/plaut04/src/solution.c++0000640000175000017500000033500713570013207014500 0ustar sksk#include "solution.h" #include #include #include #include #include #include "gplaut04.h" #include "createCoords.h" #include "tube.h" #include "rounding.h" #define MAX_LINE_LENGTH 256 extern float *tv; extern int whichCoordSystem; extern UserData clientData; Solution *mySolNode; const float STATIONARY_POINT_RADIUS = 0.01; static int maxComponent = 1; static int curComponent = 1; static int time_on = 0; const float distance = 1; const float sPrimPeriod = 31558118.4; const float gravity = 9.18; //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // // Routine to create a scene graph representing an auto solution // SoSeparator * Solution::createSceneWithWidgets() // //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// { SoSeparator *result = new SoSeparator; if(options[OPT_NORMALIZE_DATA]) { normalizeData(); } if(useR3B) result->addChild(createR3BPoints(min_, max_)); if(!useR3B || whichCoordSystem == ROTATING_F) { if(whichCoord != NO_COORD) { SoSeparator * coordSep = new SoSeparator; SoTransform * coordXform = new SoTransform; coordXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0), M_PI_2); coordSep->addChild(coordXform); static int tickers[3]; if(blDrawTicker) { tickers[0]=tickers[1]=tickers[2]=5; } else { tickers[0]=tickers[1]=tickers[2]=-1; } float asMax[3], asMin[3]; if(options[OPT_NORMALIZE_DATA]) { asMin[0]=min_[0]; asMin[1]=min_[1]; asMin[2]=min_[2]; asMax[0]=max_[0]; asMax[1]=max_[1]; asMax[2]=max_[2]; if (time_on == TIME_ON_X) asMax[0] = 1; else if (time_on == TIME_ON_Y) asMax[1] = 1; else if (time_on == TIME_ON_Z) asMax[2] = 1; } else { asMax[0] = asMax[1] = asMax[2] = 1; asMin[0] = asMin[1] = asMin[2] = -1; } coordSep->addChild(createCoordinates(setShow3D, whichCoord, asMax, asMin, tickers, &envColors[1])); result->addChild(coordSep); } // create solution scene result->addChild(render()); } return result; } ////////////////////////////////////////////////////////////////////////// // // Description: Draw the whole solution family using TUBES. // Draw the whole solution family using TUBES. // SoSeparator * Solution::drawUsingTubes() // ////////////////////////////////////////////////////////////////////////// { SoSeparator * tubeSep = new SoSeparator; float dis = (!options[OPT_NORMALIZE_DATA]) ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2; long int sumX = 0; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(long int j=0; j= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } long int upperlimit = orbits_[j].numVerticesEachPeriod; if(upperlimit >0 ) { if(upperlimit == 1) { int idx = sumX; SoSeparator * ptSep = new SoSeparator; int stability=clientData.labelIndex[j][3]; int type =clientData.labelIndex[j][2]; float scaler = lineWidthScaler; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) ptSep->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) ptSep->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) ptSep->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { ptSep->addChild(setLineAttributesByParameterValue( j, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) { ptSep->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); } else { SoMaterial * ptMtl = new SoMaterial; ptMtl->diffuseColor.setValue(1,0,0); ptSep->addChild(ptMtl); } float ver[2][3]; if(time_on != TIME_IS_OFF) { int32_t myint[10]; if(time_on == TIME_ON_X) { ver[0][0] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[0]-min_[0]) : 0; ver[0][1] = xyzCoords_[idx][1]; ver[0][2] = 0; ver[1][0] = (max_[0] <= 1.0) ? 1.0 : max_[0]; ver[1][1] = xyzCoords_[idx][1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Y) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[1]-min_[1]) : 0; ver[0][2] = 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = ( max_[1] <= 1.0 ) ? 1.0 : max_[1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Z) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = 0; ver[0][2] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[2]-min_[2]) : 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = 0; ver[1][2] = ( max_[2] <= 1.0 ) ? 1.0 : max_[2]; } SoCoordinate3 *myC = new SoCoordinate3; myC->point.setValues(0, 2, ver); myint[0]=2; SoLineSet *myL = new SoLineSet; myL->numVertices.setValues(0, 1, myint); ptSep->addChild(myC); ptSep->addChild(myL); } else { SoTransform * aTrans = new SoTransform; aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); } tubeSep->addChild(ptSep); } else { float (*path)[3] = new float[upperlimit][3]; float *colorBase = new float[upperlimit*11]; Tube tube; for(int i=0; i=0) for(int k=0; k<11; ++k) colorBase[i*11+k] = data_[idx][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER) for(int k=0; k<11; ++k) colorBase[i*11+k] = i; } int stability=clientData.labelIndex[j][3]; int type =clientData.labelIndex[j][2]; float scaler = lineWidthScaler; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) tubeSep->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) tubeSep->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) tubeSep->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) tubeSep->addChild(setLineAttributesByParameterValue( j, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); else if(coloringMethod == CL_COMPONENT) tubeSep->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); else if(coloringMethod >= nar_) tubeSep->addChild(setLineAttributesByParameterValue( orbits_[j].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else tubeSep->addChild(setLineColorBlending(colorBase, upperlimit*11,stability, scaler)); tube = Tube(upperlimit, path, lineWidthScaler*0.005, 10); tubeSep->addChild(tube.createTube()); delete [] path; delete [] colorBase; } } sumX += upperlimit; } return tubeSep; } ////////////////////////////////////////////////////////////////////////// // // draw the diagram with surface // SoSeparator * Solution::drawABranchUsingSurface(long obStart, long obEnd, long numVert) // ////////////////////////////////////////////////////////////////////////// { float dis = (!options[OPT_NORMALIZE_DATA]) ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0; SoSeparator *solSurface = new SoSeparator; float (*strip)[3]; long int npt = numVert; long int sum = 0; strip = new float[2*npt][3]; //write the strip set if((obEnd-obStart)>1) { if(npt>1) { for(int i=0; itranslation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); solSurface->addChild(ptSep); return solSurface; } sum += npt; for(int j=obStart; j1) { for(int i=0; iaddChild(drawAStrip(strip,npt*2)); for(int i=0; itranslation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); solSurface->addChild(ptSep); return solSurface; } } } else { printf(" Only one solution! No surface is able to be drawn!\n"); printf(" Choose LINE/TUBE to view it.\n"); return NULL; } delete [] strip; return solSurface; } /////////////////////////////////////////////////////////////////// // SoGroup * Solution::renderTubes() // ////////////////////////////////////////////////////////////////////////// { SoGroup * solGroup = new SoGroup; // draw every orbit by using giving tube thickness and color. if(animationLabel == MY_ALL) solGroup->addChild(drawUsingTubes()); else if(animationLabel != MY_NONE) { for(std::vector::size_type n=0; n= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } if(myLabels[ka]>=animationLabel) break; k = k+1; si += orbits_[ka].numVerticesEachPeriod; } if(options[OPT_SAT_ANI]) { solGroup->addChild(animateOrbitWithTail(iBranch, k, si)); } else { solGroup->addChild(drawAnOrbitUsingTubes(iBranch, k, si, 1*lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2])); } } } if(options[OPT_PERIOD_ANI]) { bool aniColoring; aniColoring = (animationLabel == MY_ALL) ? false : true; solGroup->addChild(animateUsingTubes(aniColoring)); } return solGroup; } ////////////////////////////////////////////////////////////////////////// // SoGroup * Solution::renderSurface() // ////////////////////////////////////////////////////////////////////////// { SoGroup *solGroup = new SoGroup; SoMaterial *solMtl = new SoMaterial; solMtl->diffuseColor.setValue(envColors[4]); solGroup->addChild(solMtl); SoMaterialBinding *myMtlBinding = new SoMaterialBinding; myMtlBinding->value= SoMaterialBinding::PER_PART; solGroup->addChild(myMtlBinding); long start = 0; long end = 0; int sumOrbit = 0; long numVert = 0; for(int iBranch = 0; iBranch < numBranches_; ++iBranch) { end += numOrbitsInEachBranch_[iBranch]; numVert = orbits_[sumOrbit].numVerticesEachPeriod; SoSeparator * as = drawABranchUsingSurface(start+1, end, numVert); if(as !=NULL) solGroup->addChild(as); start += numOrbitsInEachBranch_[iBranch]; sumOrbit += numOrbitsInEachBranch_[iBranch]; } if(options[OPT_PERIOD_ANI]) solGroup->addChild(animateUsingTubes(true)); int si = 0, k = 0; int iBranch = 0; sumOrbit = numOrbitsInEachBranch_[iBranch]; for(int ka=0; ka= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } if(myLabels[ka]>=animationLabel) break; k = k+1; si += orbits_[ka].numVerticesEachPeriod; } if(options[OPT_SAT_ANI]) solGroup->addChild(animateOrbitWithTail(iBranch, k, si)); else solGroup->addChild(drawAnOrbitUsingTubes(iBranch, k, si, 1*lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2])); return solGroup; } /////////////////////////////////////////////////////////////////////// // // draw the solutions by Mesh points // // draw the solutions by Points SoGroup * Solution::renderPoints(int style) // ////////////////////////////////////////////////////////////////////////// { SoGroup *solGroup = new SoGroup; if(animationLabel == MY_ALL) { long int si = 0, k = 0; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(long int ka=0; ka= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } solGroup->addChild(drawAnOrbitUsingPoints(style, iBranch, /*curBranchID,*/ k, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2], true)); k = k+1; si += orbits_[ka].numVerticesEachPeriod; } } else if(animationLabel != MY_NONE) { for(std::vector::size_type n=0; n= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } if(myLabels[ka]>=animationLabel) break; k = k+1; si += orbits_[ka].numVerticesEachPeriod; } if(options[OPT_SAT_ANI]) { solGroup->addChild(animateOrbitWithTail(iBranch, k, si)); } else { solGroup->addChild(drawAnOrbitUsingPoints(style, iBranch, k, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2], true)); } } } if(options[OPT_PERIOD_ANI]) { bool coloring; coloring = (animationLabel == MY_ALL) ? false : true; solGroup->addChild(animateUsingPoints(style, coloring)); } return solGroup; } /////////////////////////////////////////////////////////////////////// // // draw the solutions by lines // SoGroup * Solution::renderLines() // ////////////////////////////////////////////////////////////////////////// { SoGroup *solGroup = new SoGroup; if(animationLabel == MY_ALL) { long int si = 0, k = 0; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(long int ka=0; ka= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } solGroup->addChild(drawAnOrbitUsingLines(iBranch, k, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2], true)); k = k+1; si += orbits_[ka].numVerticesEachPeriod; } } else if(animationLabel != MY_NONE) { for(std::vector::size_type n=0; n= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } if(myLabels[ka]>=animationLabel) break; k = k+1; si += orbits_[ka].numVerticesEachPeriod; } if(options[OPT_SAT_ANI]) { solGroup->addChild(animateOrbitWithTail(iBranch, k, si)); } else { solGroup->addChild(drawAnOrbitUsingLines(iBranch, k, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2], true)); } } } if(options[OPT_PERIOD_ANI]) { bool coloring; coloring = (animationLabel == MY_ALL) ? false : true; solGroup->addChild(animateUsingLines(coloring)); } return solGroup; } /////////////////////////////////////////////////////////////////////// // // draw the solutions using NURBS CURVE lines // SoGroup * Solution::renderNurbsCurve() // ////////////////////////////////////////////////////////////////////////// { SoGroup * solGroup = new SoGroup; if(animationLabel == MY_ALL) { long int si = 0, k = 0; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(long int ka=0; ka= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } solGroup->addChild(drawAnOrbitUsingNurbsCurve(iBranch, k+1, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2])); k = k+1; si += orbits_[ka].numVerticesEachPeriod; } } else if(animationLabel != MY_NONE) { for(std::vector::size_type n=0; n= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } if(myLabels[ka]>=animationLabel) break; k = k+1; si += orbits_[ka].numVerticesEachPeriod; } if(options[OPT_SAT_ANI]) { solGroup->addChild(animateOrbitWithTail(iBranch, k, si)); } else { solGroup->addChild(drawAnOrbitUsingNurbsCurve(iBranch, k, si, lineWidthScaler, clientData.labelIndex[k][3], clientData.labelIndex[k][2])); } } } if(options[OPT_PERIOD_ANI]) { bool coloring = (animationLabel == MY_ALL) ? true : false; solGroup->addChild(animateUsingLines(coloring)); } return solGroup; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::animateUsingPoints(int style, bool aniColoring) // ////////////////////////////////////////////////////////////////////////// { SoSeparator *solGroup = new SoSeparator; SoSeparator *solStand = new SoSeparator; int si = 0; SoBlinker * solBlinker = new SoBlinker; solBlinker->speed = orbitSpeed; solBlinker->on = TRUE; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(int l=0; l= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } if(numVertices == 1) solStand->addChild(drawAnOrbitUsingPoints(style, iBranch,/* curBranchID,*/ l, si, aniLineScaler*lineWidthScaler, clientData.labelIndex[l][3], clientData.labelIndex[l][2], aniColoring)); else solBlinker->addChild(drawAnOrbitUsingPoints(style, iBranch,/* curBranchID,*/ l, si, aniLineScaler*lineWidthScaler, clientData.labelIndex[l][3], clientData.labelIndex[l][2], aniColoring)); si+=orbits_[l].numVerticesEachPeriod; } solGroup->addChild(solStand); solGroup->addChild(solBlinker); return solGroup; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::animateUsingLines(bool aniColoring) // ////////////////////////////////////////////////////////////////////////// { // the following is the line version SoSeparator *solGroup = new SoSeparator; SoSeparator *solStand = new SoSeparator; int si = 0; SoBlinker * solBlinker = new SoBlinker; solBlinker->speed = orbitSpeed; solBlinker->on = TRUE; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(int l=0; l= sumOrbit) { sumOrbit+= numOrbitsInEachBranch_[++iBranch]; } if(numVertices == 1) solStand->addChild(drawAnOrbitUsingLines(iBranch, l, si, aniLineScaler*lineWidthScaler, clientData.labelIndex[l][3], clientData.labelIndex[l][2], aniColoring)); else solBlinker->addChild(drawAnOrbitUsingLines(iBranch, l, si, aniLineScaler*lineWidthScaler, clientData.labelIndex[l][3], clientData.labelIndex[l][2], aniColoring)); si+=orbits_[l].numVerticesEachPeriod; } solGroup->addChild(solStand); solGroup->addChild(solBlinker); return solGroup; } #if 0 ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::animateUsingNurbsCurve() // ///////////////////////////////////////////////////////////////// { SoSeparator *solGroup = new SoSeparator; long int si = 0; SoBlinker * solBlinker = new SoBlinker; solBlinker->speed = orbitSpeed; solBlinker->on = TRUE; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(long int l=0; l= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } solBlinker->addChild(drawAnOrbitUsingNurbsCurve(iBranch, l, si, lineWidthScaler, clientData.labelIndex[l][3], clientData.labelIndex[l][2])); si+=orbits_[l].numVerticesEachPeriod; } solGroup->addChild(solBlinker); return solGroup; } #endif ///////////////////////////////////////////////////////////////// // create solution orbits scene SoSeparator * Solution::render() // ///////////////////////////////////////////////////////////////// { SoSeparator *solSep = new SoSeparator; SoGroup *solGroup = new SoGroup; if(whichStyle==TUBE) { solGroup->addChild(renderTubes()); } else if(whichStyle==SURFACE) { solGroup->addChild(renderSurface()); } else if(whichStyle==NURBS) { solGroup->addChild(renderNurbsCurve()); } else if(whichStyle==MESH_POINTS || whichStyle== ALL_POINTS) { solGroup->addChild(renderPoints(whichStyle)); } else { solGroup->addChild(renderLines()); } solSep->addChild(solGroup); return solSep; } /////////////////////////////////////////////////////////////////////////// // // animate the solution by using lines. This version use less memory // and much faster. // =============================================================== // + + UNSTABLE STEADY STATE 1 // + - STABLE STEADY STATE 2 // - + UNSTABLE PERIODIC 3 // - - STABLE PERIODIC 4 // =============================================================== // // SoSeparator * Solution::drawAnOrbitUsingLines(int iBranch, long int l, long int si, float scaler, int stability, int type, bool aniColoring) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * anOrbit = new SoSeparator; float dis = !options[OPT_NORMALIZE_DATA] ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0; long numVertices = orbits_[l].numVerticesEachPeriod; if(numVertices == 1 ) { long int idx = si; SoSeparator * ptSep = new SoSeparator; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) ptSep->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) ptSep->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) ptSep->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { ptSep->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) { ptSep->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); } else { SoMaterial * ptMtl = new SoMaterial; ptMtl->diffuseColor.setValue(1,0,0); ptSep->addChild(ptMtl); } float ver[2][3]; if(time_on != TIME_IS_OFF) { int32_t myint[10]; if(time_on == TIME_ON_X) { ver[0][0] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[0]-min_[0]) : 0; ver[0][1] = xyzCoords_[idx][1]; ver[0][2] = 0; ver[1][0] = (max_[0] <= 1.0) ? 1.0 : max_[0]; ver[1][1] = xyzCoords_[idx][1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Y) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[1]-min_[1]) : 0; ver[0][2] = 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = ( max_[1] <= 1.0 ) ? 1.0 : max_[1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Z) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = 0; ver[0][2] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[2]-min_[2]) : 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = 0; ver[1][2] = ( max_[2] <= 1.0 ) ? 1.0 : max_[2]; } SoCoordinate3 *myC = new SoCoordinate3; myC->point.setValues(0, 2, ver); myint[0]=2; SoLineSet *myL = new SoLineSet; myL->numVertices.setValues(0, 1, myint); ptSep->addChild(myC); ptSep->addChild(myL); anOrbit->addChild(ptSep); } else { SoTransform * aTrans = new SoTransform; aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); anOrbit->addChild(ptSep); } return anOrbit; } float (*vertices)[3] = new float[numVertices][3]; float *colorBase = new float[numVertices]; for(int m=0; m=0)colorBase[m] = data_[idx][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER)colorBase[m] = m; } SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, orbits_[l].numVerticesEachPeriod, vertices); int32_t myint[10]; myint[0]=orbits_[l].numVerticesEachPeriod; // define the solution line set SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); if(!aniColoring) { anOrbit->addChild(setLineAttributesByType(stability, 0, scaler)); } else if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { anOrbit->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) anOrbit->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[l].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else anOrbit->addChild(setLineColorBlending(colorBase, orbits_[l].numVerticesEachPeriod,stability, scaler)); anOrbit->addChild(myCoords); anOrbit->addChild(myLine); delete [] vertices; delete [] colorBase; return anOrbit; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAnOrbitUsingPoints(int style, int iBranch, long int l, long int si, float scaler, int stability, int type, bool aniColoring) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * anOrbit = new SoSeparator; float dis = !options[OPT_NORMALIZE_DATA] ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0; long numVertices = orbits_[l].numVerticesEachPeriod; if(numVertices == 1) { long int idx = si; SoSeparator * ptSep = new SoSeparator; SoTransform * aTrans = new SoTransform; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) ptSep->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) ptSep->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) ptSep->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { ptSep->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) { ptSep->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); } else { SoMaterial * ptMtl = new SoMaterial; ptMtl->diffuseColor.setValue(1,0,0); ptSep->addChild(ptMtl); } aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); anOrbit->addChild(ptSep); return anOrbit; } float (*vertices)[3] = new float[numVertices][3]; float *colorBase = new float[numVertices]; for(int m=0; m=0)colorBase[m] = data_[idx][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER)colorBase[m] = m; if(!aniColoring) { anOrbit->addChild(setLineAttributesByType(stability, 0, scaler)); } else if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { anOrbit->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) anOrbit->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); else if(coloringMethod >= nar_) { anOrbit->addChild(setLineAttributesByParameterValue( orbits_[l].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); } else anOrbit->addChild(setLineColorBlending(colorBase, orbits_[l].numVerticesEachPeriod,stability, scaler)); if(style == MESH_POINTS) { if(m%orbits_[l].ncol == 0) anOrbit->addChild(drawAPoint(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2], dis, STATIONARY_POINT_RADIUS*0.5)); }else anOrbit->addChild(drawAPoint(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2], dis, STATIONARY_POINT_RADIUS*0.5)); } delete [] vertices; delete [] colorBase; return anOrbit; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAnOrbitUsingNurbsCurve(int iBranch, long int l, long int si, float scaler, int stability, int type) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * anOrbit = new SoSeparator; float (*vertices)[3]; vertices = new float[orbits_[l].numVerticesEachPeriod][3]; for(int m=0; mpoint.setValues(0, orbits_[l].numVerticesEachPeriod, vertices); int number = orbits_[l].numVerticesEachPeriod; float * knots = new float[number+4]; for (int i=0; i<4; ++i) knots[i]=0, knots[i+number]=number-3; for(int i=4; inumControlPoints = orbits_[l].numVerticesEachPeriod; myCurve->knotVector.setValues(0, number+4, knots); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch,stability,scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_LABELS) { anOrbit->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); anOrbit->addChild(myCoords); anOrbit->addChild(myCurve); delete [] vertices; delete [] knots; return anOrbit; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAnOrbitUsingTubes(int iBranch, long int l, long int si, float scaler, int stability, int type) // ////////////////////////////////////////////////////////////////////////// { float dis = !options[OPT_NORMALIZE_DATA] ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0 ; SoSeparator * anOrbit = new SoSeparator; long int numVertices = orbits_[l].numVerticesEachPeriod; if(numVertices == 1) { int idx = si; SoSeparator * ptSep = new SoSeparator; SoSphere * aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) ptSep->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) ptSep->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) ptSep->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { anOrbit->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); } else if(coloringMethod == CL_COMPONENT) { anOrbit->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); } else { SoMaterial * ptMtl = new SoMaterial; ptMtl->diffuseColor.setValue(1,0,0); ptSep->addChild(ptMtl); } float ver[2][3]; if(time_on != TIME_IS_OFF) { if(time_on == TIME_ON_X) { ver[0][0] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0 ; //-(max_[0]-min_[0]) : 0; ver[0][1] = xyzCoords_[idx][1]; ver[0][2] = 0; ver[1][0] = (max_[0] <= 1.0) ? 1.0 : max_[0]; ver[1][1] = xyzCoords_[idx][1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Y) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[1]-min_[1]) : 0; ver[0][2] = 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = ( max_[1] <= 1.0 ) ? 1.0 : max_[1]; ver[1][2] = 0; } else if(time_on == TIME_ON_Z) { ver[0][0] = xyzCoords_[idx][0]; ver[0][1] = 0; ver[0][2] = (options[OPT_NORMALIZE_DATA]) ? -1 : 0; //-(max_[2]-min_[2]) : 0; ver[1][0] = xyzCoords_[idx][0]; ver[1][1] = 0; ver[1][2] = ( max_[2] <= 1.0 ) ? 1.0 : max_[2]; } SoCoordinate3 *myC = new SoCoordinate3; myC->point.setValues(0, 2, ver); int32_t myint[10]; myint[0]=2; SoLineSet *myL = new SoLineSet; myL->numVertices.setValues(0, 1, myint); ptSep->addChild(myC); ptSep->addChild(myL); anOrbit->addChild(ptSep); } else { SoTransform * aTrans = new SoTransform; aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere *aPoint = new SoSphere; aPoint->radius = dis * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); anOrbit->addChild(ptSep); } return anOrbit; } else if( numVertices < 1 ) { return anOrbit; } float (*vertices)[3] = new float[orbits_[l].numVerticesEachPeriod][3]; float *colorBase = new float[orbits_[l].numVerticesEachPeriod*11]; Tube tube; for(int m=0; m=0) for(int j=0; j<11; ++j) colorBase[m*11+j] = data_[si+m][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER) for(int j=0; j<11; ++j) colorBase[m*11+j] = m; } tube = Tube(orbits_[l].numVerticesEachPeriod, vertices, lineWidthScaler*0.005, 10); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) // always set the first label blue, the last red, namely look all // branches as one. anOrbit->addChild(setLineAttributesByParameterValue( l, totalLabels_, totalLabels_/2.0, 0, stability, scaler)); else if(coloringMethod == CL_COMPONENT) anOrbit->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[l].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else anOrbit->addChild(setLineColorBlending(colorBase, orbits_[l].numVerticesEachPeriod*11,stability, scaler)); anOrbit->addChild(tube.createTube()); delete [] vertices; return anOrbit; } /////////////////////////////////////////////////////////////////////////// // // animate solution by using tubes. // animate solution by using tubes. This version use much memory and // much slower. // SoSeparator * Solution::animateUsingTubes(bool aniColoring) // /////////////////////////////////////////////////////////////////////////// { long int sumX = 0; SoSeparator *solGroup = new SoSeparator; float dis = !options[OPT_NORMALIZE_DATA] ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0; SoBlinker *tubeBlker = new SoBlinker; tubeBlker->speed = orbitSpeed; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(int j=0; jradius = dis * STATIONARY_POINT_RADIUS; SoTransform * aTrans = new SoTransform; aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); ptSep->addChild(aPoint); solGroup->addChild(ptSep); } else { float (*path)[3] = new float[upperlimit][3]; float *colorBase = new float[upperlimit*11]; int stability=clientData.labelIndex[j][3]; int type =clientData.labelIndex[j][2]; SoSeparator *anOrbit = new SoSeparator; Tube tube; if(j >= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } for(int i=0; i=0) for(int j=0; j<11; ++j) colorBase[i*11+j] = data_[idx][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER) for(int j=0; j<11; ++j) colorBase[i*11+j] = i; } if(!aniColoring) anOrbit->addChild(setLineAttributesByType(stability, 0, lineWidthScaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, lineWidthScaler)); else if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, lineWidthScaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, lineWidthScaler)); else if(coloringMethod == CL_LABELS) anOrbit->addChild(setLineAttributesByParameterValue( j, totalLabels_, totalLabels_/2.0, 0, stability, lineWidthScaler)); else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[j].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, lineWidthScaler)); else if(coloringMethod == CL_COMPONENT) anOrbit->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, lineWidthScaler)); else anOrbit->addChild(setLineColorBlending(colorBase, upperlimit*11,stability, lineWidthScaler)); tube = Tube(upperlimit, path, lineWidthScaler*0.0075, 10); anOrbit->addChild(tube.createTube()); tubeBlker->addChild(anOrbit); delete [] path; delete [] colorBase; } sumX += upperlimit; } solGroup->addChild(tubeBlker); return solGroup; } /////////////////////////////////////////////////////////////////////////// // Using a red ball to simulate the movement of a sattelite and using // white lines to simulate the trace of the sattelite. // SoSeparator * Solution::animateOrbitWithTail(int iBranch, long int j, long int si) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *satGroup = new SoSeparator; float distance = !options[OPT_NORMALIZE_DATA] ? (std::max(std::max( fabs(max_[0]-min_[0]), fabs(max_[1]-min_[1])), fabs(max_[2]-min_[2]))) : 2.0; int stability = clientData.labelIndex[j][3]; int type = clientData.labelIndex[j][2]; long int upperlimit = orbits_[j].numVerticesEachPeriod; long int idx = si; if(upperlimit == 1) { SoSeparator * ptSep = new SoSeparator; SoTransform * aTrans = new SoTransform; aTrans->translation.setValue(xyzCoords_[idx][0], xyzCoords_[idx][1], xyzCoords_[idx][2]); ptSep->addChild(aTrans); SoSphere * aPoint = new SoSphere; aPoint->radius = distance * STATIONARY_POINT_RADIUS; ptSep->addChild(aPoint); satGroup->addChild(ptSep); return satGroup; } float maxV[3], minV[3]; long int orbitSize = upperlimit; long int arrSize = orbitSize; double *time = new double[upperlimit+1]; double dt = 1.0/upperlimit; maxV[0]=minV[0]=xyzCoords_[idx+0][0]; maxV[1]=minV[1]=xyzCoords_[idx+0][0]; maxV[2]=minV[2]=xyzCoords_[idx+0][0]; time[0] = 0.0; for(long int i=1; ixyzCoords_[idx+i][0]) minV[0]=xyzCoords_[idx+i][0] ; if(maxV[1]xyzCoords_[idx+i][1]) minV[1]=xyzCoords_[idx+i][1] ; if(maxV[2]xyzCoords_[idx+i][2]) minV[2]=xyzCoords_[idx+i][2] ; time[i] = i*dt; } float dis = distance;// fabs(std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2]))); float (*myVertices)[3]= new float[arrSize+1][3]; float *myColorBase = new float [arrSize+1]; myVertices[0][0] = myVertices[arrSize][0] = xyzCoords_[idx][0]; myVertices[0][1] = myVertices[arrSize][1] = xyzCoords_[idx][1]; myVertices[0][2] = myVertices[arrSize][2] = xyzCoords_[idx][2]; if(coloringMethod>=0)myColorBase[0] = data_[idx][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER)myColorBase[0] = 0; for(long int i=1; i time_[idx+m] && m < upperlimit) ++m; if( fabs(tTemp-time_[idx+m]) <= 1.0e-9 || fabs(time_[idx+m]-time_[idx+m-1])<=1.0e-8) { myVertices[i][0] = xyzCoords_[idx+m][0]; myVertices[i][1] = xyzCoords_[idx+m][1]; myVertices[i][2] = xyzCoords_[idx+m][2]; } else { myVertices[i][0] = (xyzCoords_[idx+m][0] + xyzCoords_[idx+m-1][0])*0.5; myVertices[i][1] = (xyzCoords_[idx+m][1] + xyzCoords_[idx+m-1][1])*0.5; myVertices[i][2] = (xyzCoords_[idx+m][2] + xyzCoords_[idx+m-1][2])*0.5; } if(coloringMethod>=0)myColorBase[i] = data_[idx+m][coloringMethod]; if(coloringMethod==CL_POINT_NUMBER)myColorBase[i] = i; } SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, arrSize+1, myVertices); satGroup->addChild(myCoords); SoTimeCounter *myCounter = new SoTimeCounter; myCounter->max = arrSize+1; myCounter->min = 0; float freq, fduty; if ( numPeriodAnimated == -1 ) { freq = 0.1*satSpeed/128; fduty = 127*arrSize; } else if( numPeriodAnimated == 0 ) { freq = 0; fduty = 0; } else if ( numPeriodAnimated == 1 ){ freq = 0.1*satSpeed; fduty = 1; } else { freq = 0.1*satSpeed/numPeriodAnimated; fduty = (numPeriodAnimated-1)*arrSize; } myCounter->frequency = freq ; int iduty = 0; for(iduty = 0; iduty <= arrSize+1; ++iduty) if(iduty == arrSize+1) myCounter->duty.set1Value(iduty, fduty) ; else myCounter->duty.set1Value(iduty, 1) ; //------------------------------------------Begin----------------------------------------- float scaler = lineWidthScaler; //------------------------------------------End----------------------------------------- if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) satGroup->addChild(setLineAttributesByBranch(iBranch, stability, lineWidthScaler)); else if(coloringMethod == CL_STABILITY) satGroup->addChild(setLineAttributesByStability(stability, lineWidthScaler)); else if(coloringMethod == CL_ORBIT_TYPE) satGroup->addChild(setLineAttributesByType(stability, type, lineWidthScaler)); else if(coloringMethod == CL_LABELS) satGroup->addChild(setLineAttributesByParameterValue( j-1, totalLabels_, totalLabels_/2.0, 0, stability, lineWidthScaler)); else if(coloringMethod == CL_COMPONENT) satGroup->addChild(setLineAttributesByParameterValue( curComponent, maxComponent, maxComponent/2.0, 0, stability, scaler)); else if(coloringMethod >= nar_) satGroup->addChild(setLineAttributesByParameterValue( orbits_[j].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, lineWidthScaler)); else satGroup->addChild(setLineColorBlending(myColorBase, arrSize, stability, lineWidthScaler)); // define the solution line set SoLineSet *myLine= new SoLineSet; myLine->numVertices.connectFrom(&myCounter->output); satGroup->addChild(myLine); SoSphere * mySat = new SoSphere; mySat->radius = satRadius*dis*0.005; SoTranslation * satTrans = new SoTranslation; SoMaterial * satMtl = new SoMaterial; satMtl->diffuseColor.setValue(envColors[7]); satGroup->addChild(satMtl); satGroup->addChild(satTrans); satGroup->addChild(mySat); SoTimeCounter *myCounter2 = new SoTimeCounter; myCounter2->max = arrSize; myCounter2->min = 0; if (numPeriodAnimated != 0) myCounter2->frequency = 0.1*satSpeed;//*numPeriodAnimated; else myCounter2->frequency = 0.1*satSpeed; for(iduty = 0; iduty < arrSize; ++iduty) myCounter2->duty.set1Value(iduty, 1) ; SoSelectOne *mysel = new SoSelectOne(SoMFVec3f::getClassTypeId()); mysel->index.connectFrom(&myCounter2->output); mysel->input->enableConnection(TRUE); mysel->input->connectFrom(&myCoords->point); satTrans->translation.connectFrom(mysel->output); delete [] myVertices; delete [] myColorBase; delete [] time; return satGroup; } //////////////////////////////////////////////////////////////////////// // // // void Solution::copyDataToWorkArray(int varIndices[], int cur, int mx, int to) // //////////////////////////////////////////////////////////////////////// { curComponent = cur; maxComponent = mx; time_on = to; for(int k=0; k<3; k++) { for(long int row=0; row=0) { float dummy = data_[row][varIndices[k]]; xyzCoords_[row][k] = dummy; } else if(varIndices[k]<0) { xyzCoords_[row][k]=0.0; } } } } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAPoint(float x, float y, float z, float size, float scale) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * ptSep = new SoSeparator; SoTransform * ptTrans = new SoTransform; ptTrans->translation.setValue(x, y, z); ptSep->addChild(ptTrans); SoCube *aPoint = new SoCube; aPoint->width = size*scale; aPoint->height= size*scale; aPoint->depth = size*scale; ptSep->addChild(aPoint); return ptSep; } //////////////////////////////// START /////////////////////////////// // // draw a strip by giving the stripset SoSeparator * Solution::drawAStrip(float stripSet[][3], int size) // ////////////////////////////////////////////////////////////////////// { SoSeparator * myStrip = new SoSeparator; SoShapeHints * solHints = new SoShapeHints; solHints->vertexOrdering = SoShapeHints::COUNTERCLOCKWISE; myStrip->addChild(solHints); SoCoordinate3 *solCoords = new SoCoordinate3; solCoords->point.setValues(0, size, stripSet); int32_t mySize[1]; mySize[0] = size; SoTriangleStripSet *solStrips = new SoTriangleStripSet; solStrips->numVertices.setValues(0, 1, mySize); myStrip->addChild(solCoords); myStrip->addChild(solStrips); return myStrip; } //////////////////////////////////////////////////////////////////////// // // // void Solution::searchForMaxMin(int component, int varIndices[]) // //////////////////////////////////////////////////////////////////////// { double mx, mi; for(int k=0; k<3; k++) { for(long int row=0; row=0) { float dummy = data_[row][varIndices[k]]; if(dummy>max_[k] || (row==0 && component==1)) max_[k] = dummy; if(dummy 0) { lbStability = ((ntot>0) ? 1 : 2); } else { lbStability = ((ntot>0) ? 3 : 4); } clientData.labelIndex[counter][3] = lbStability; if( ntpl != 0) { orbits_[counter].numVerticesEachPeriod=ntpl; orbits_[counter].label = lab; orbits_[counter].ntst = ntst; orbits_[counter].ncol = ncol; orbitCounter++; } while(fgetc(inFile)!='\n'); { { for(i=0; i dummy) clientData.solMin[j] = dummy; } ++row; } int nLines = (npar1+6)/7; int nrowprsmall = ((nar-1)/7+1)*ntpl + nLines; if(ntst != 0 && nrowpr > nrowprsmall) { int ndim=nar-1; int nrd=(ndim+6)/7; int nLines = nrd*ntpl + (nfpr+6)/7 + (nfpr+19)/20; for(i=0; i 7 ? 7 : npar1 - nzoo*7; for(i=0; i par) parMin = par; } parMax_[iBranch][jv]=parMax; parMin_[iBranch][jv]=parMin; parMid_[iBranch][jv]=(parMin+parMax)/2.0; startBranch = endBranch; } } if(whichCoordSystem != ROTATING_F) { float r[3] = {0.0,0.0,0.0}; for(int i=0; i1.0e-10) { div[k] = 1.0/div[k]; con[k] = div[k]*min_[k]; } } long int sump = 0; for(int i=0; i1.0e-10) xyzCoords_[sump+j][k]= xyzCoords_[sump+j][k]*div[k]-con[k]-1.0; } /** if( !((max_[k]<=1.0 && max_[k]>0.5 && min_[k]>=-1.0 && min_[k]<-0.5 )|| (div[k]<0.00000001))) { xyzCoords_[sump+j][k]= (xyzCoords_[sump+j][k]-avg[k])/div[k]; } **/ } sump += nt; } } void Solution::alloc() { time_ = new double[totalNumPoints_]; xyzCoords_ = new float[totalNumPoints_][3]; numVerticesEachBranch_ = new int32_t[numBranches_]; numOrbitsInEachBranch_ = new int32_t[numBranches_]; branchID_ = new long[numBranches_]; parMax_ = new double*[numBranches_]; parMin_ = new double*[numBranches_]; parMid_ = new double*[numBranches_]; if (numBranches_ > 0) { parMax_[0] = new double[numBranches_*npar_]; parMin_[0] = new double[numBranches_*npar_]; parMid_[0] = new double[numBranches_*npar_]; for(int i=1; i 0) { data_[0] = new float[totalNumPoints_*nar_]; for(int ml=1; ml1.0e-10) { div = 1.0/div; con = div*min_[k]; } if(div/max_[k]>1.0e-10) position[k] = (position[k]+con+1.0)/div; } } void Solution::set_parID(std::queue& parIDs) { if (npar_ != 0) delete [] parID_; npar_ = parIDs.size(); parID_ = new int[npar_]; for(int is=0; is < npar_; ++is) { parID_[is] = parIDs.front(); parIDs.pop(); } } void Solution::dealloc() { delete [] time_; delete [] xyzCoords_; delete [] numVerticesEachBranch_; delete [] numOrbitsInEachBranch_; delete [] branchID_; if (numBranches_ > 0) { delete [] parMax_[0]; delete [] parMin_[0]; delete [] parMid_[0]; } delete [] parMax_; delete [] parMin_; delete [] parMid_; if (totalNumPoints_ > 0) delete [] data_[0]; delete [] data_; totalNumPoints_ = 0; for (int i = 0; i < numOrbits_; i++) delete [] orbits_[i].par; delete [] orbits_; } /////////////////////////////////////////////////////////////////////////// // // Using a red ball to simulate the movement of a sattelite and using // white lines to simulate the trace of the sattelite. // SoSeparator * Solution::animateOrbitInertialSysUsingLine(int iBranch, int iOrbit, float (*vertices)[3], float (*largePrimPos)[3], float (*smallPrimPos)[3], float * myColorBase, float period, int size, float scaler, int stability, int type) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *result = new SoSeparator; SoSeparator *satGroup = new SoSeparator; SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); float maxV[3], minV[3]; maxV[0]=minV[0]=vertices[0][0]; maxV[1]=minV[1]=vertices[0][1]; maxV[2]=minV[2]=vertices[0][2]; float (*vertices1)[3] = new float[size][3]; for(int j=0; j<3; ++j) { for(int i=1; i vertices[i][j]) minV[j] = vertices[i][j] ; if(minV[j] > largePrimPos[i][j]) minV[j] = largePrimPos[i][j] ; if(minV[j] > smallPrimPos[i][j]) minV[j] = smallPrimPos[i][j] ; vertices1[i-1][j]= vertices[i][j]; } } float dis = fabs(std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2]))); // animate the orbit SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, size, vertices); satGroup->addChild(myCoords); SoTimeCounter *myCounter = new SoTimeCounter; myCounter->max = size-1; myCounter->min = 0; myCounter->frequency = (numPeriodAnimated !=0) ? 0.1*satSpeed/numPeriodAnimated : 0.1*satSpeed; // define the solution line set if(numPeriodAnimated!=0) { SoLineSet *myLine= new SoLineSet; myLine->numVertices.connectFrom(&myCounter->output); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) satGroup->addChild(setLineAttributesByBranch(iBranch,stability,scaler)); else if(coloringMethod == CL_STABILITY) satGroup->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) satGroup->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { double bMin = 0; for(int ib = 0; ib< iBranch; ++ib) bMin += numOrbitsInEachBranch_[ib]; double bMax = bMin+numOrbitsInEachBranch_[iBranch]-1; satGroup->addChild(setLineAttributesByParameterValue( iOrbit, bMax, (bMax+bMin)/2.0, bMin, stability, scaler)); } else if(coloringMethod >= nar_) satGroup->addChild(setLineAttributesByParameterValue( orbits_[iOrbit].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else satGroup->addChild(setLineColorBlending(myColorBase, size, stability, scaler)); satGroup->addChild(myLine); } SoMaterial * satMtl = new SoMaterial; SoSphere * mySat = new SoSphere; mySat->radius = dis*0.005*satRadius; SoTranslation * satTrans = new SoTranslation; satMtl->diffuseColor.setValue(envColors[7]); satGroup->addChild(satMtl); satGroup->addChild(satTrans); satGroup->addChild(mySat); SoSelectOne *mysel = new SoSelectOne(SoMFVec3f::getClassTypeId()); mysel->index.connectFrom(&myCounter->output); mysel->input->enableConnection(TRUE); mysel->input->connectFrom(&myCoords->point); satTrans->translation.connectFrom(mysel->output); result->addChild(satGroup); // animate the primary movement. SoSeparator * smallPrimLineSep = new SoSeparator; SoCoordinate3 *smallPrimCoords = new SoCoordinate3; smallPrimCoords->point.setValues(0, size, smallPrimPos); smallPrimLineSep->addChild(smallPrimCoords); SoLineSet *smallPrimLine= new SoLineSet; smallPrimLine->numVertices.connectFrom(&myCounter->output); SoMaterial * smallPrimLineMtl = new SoMaterial; smallPrimLineMtl->diffuseColor.setValue(envColors[11]); smallPrimLineSep->addChild(smallPrimLineMtl); smallPrimLineSep->addChild(smallPrimLine); SoTranslation * smallPrimTrans = new SoTranslation; SoSelectOne *smallPrimSel = new SoSelectOne(SoMFVec3f::getClassTypeId()); smallPrimSel->index.connectFrom(&myCounter->output); smallPrimSel->input->enableConnection(TRUE); smallPrimSel->input->connectFrom(&smallPrimCoords->point); smallPrimTrans->translation.connectFrom(smallPrimSel->output); result->addChild(smallPrimLineSep); SoSeparator * largePrimLineSep = new SoSeparator; SoCoordinate3 *largePrimCoords = new SoCoordinate3; largePrimCoords->point.setValues(0, size, largePrimPos); largePrimLineSep->addChild(largePrimCoords); SoLineSet *largePrimLine= new SoLineSet; largePrimLine->numVertices.connectFrom(&myCounter->output); SoMaterial * largePrimLineMtl = new SoMaterial; largePrimLineMtl->diffuseColor.setValue(envColors[9]); largePrimLineSep->addChild(largePrimLineMtl); largePrimLineSep->addChild(largePrimLine); SoTranslation * largePrimTrans = new SoTranslation; SoSelectOne *largePrimSel = new SoSelectOne(SoMFVec3f::getClassTypeId()); largePrimSel->index.connectFrom(&myCounter->output); largePrimSel->input->enableConnection(TRUE); largePrimSel->input->connectFrom(&largePrimCoords->point); largePrimTrans->translation.connectFrom(largePrimSel->output); result->addChild(largePrimLineSep); delete []vertices1; return result; } SoSeparator * Solution::drawAnOrbitInertialSysUsingLines(int iBranch, int iOrbit, float (*myVertices)[3], float *myColorBase, long int arrSize, float scaler, int stability, int type) { int32_t myint[10]; SoSeparator * anOrbit = new SoSeparator; SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, arrSize, myVertices); myint[0]=-1; // define the solution line set SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { double bMin = 0; for(int ib = 0; ib< iBranch; ++ib) bMin += numOrbitsInEachBranch_[ib]; double bMax = bMin+numOrbitsInEachBranch_[iBranch]-1; anOrbit->addChild(setLineAttributesByParameterValue( iOrbit, bMax, (bMax+bMin)/2.0, bMin, stability, scaler)); } else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[iOrbit].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else anOrbit->addChild(setLineColorBlending(myColorBase, arrSize, stability, scaler)); anOrbit->addChild(myCoords); anOrbit->addChild(myLine); return anOrbit; } //////////////////////////////////////////////////////////////////////// // void Solution::convertDataToInertialSystem(float (*myVertices)[3], float *timeEqualDiv, float *myColorBase, long int arrSize, long int orbitSize, long int kth, long int sumX) // //////////////////////////////////////////////////////////////////////// { float (*workArray)[3] = new float [arrSize][3]; float *time = new float [arrSize]; float satPeriod = orbits_[kth].period; float rpp[3], vpp[3]; float massCurLabeledOrbit = orbits_[kth].mass; for(int i=0; i=0 && coloringMethod < nar_) for(int k=0; k<11; ++k) myColorBase[i*11+k] = data_[sumX+i%orbitSize][coloringMethod]; else if(coloringMethod==CL_POINT_NUMBER ) for(int k=0; k<11; ++k) myColorBase[i*11+k] = i; } else { if(coloringMethod>=0 && coloringMethod < nar_) myColorBase[i]=data_[sumX+i%orbitSize][coloringMethod]; else if(coloringMethod==CL_POINT_NUMBER ) myColorBase[i]=i; } time[i] = time_[sumX+i%orbitSize]+i/orbitSize; satelliteMovingOrbit(whichCoordSystem, workArray[i], time[i], massCurLabeledOrbit, distance, satPeriod, sPrimPeriod, gravity, rpp, vpp ); for(int jk=0; jk<3; ++jk) workArray[i][jk]=rpp[jk]; } float Tr3b = 1; Tr3b = (numPeriodAnimated==0) ? Tr3b/arrSize : numPeriodAnimated * Tr3b/arrSize; for(int i=0; i time[m] && m < arrSize) ++m; if( fabs(tTemp-time[m]) <= 1.0e-9 || fabs(time[m]-time[m-1])<=1.0e-8) { myVertices[i][0]=workArray[m][0]; myVertices[i][1]=workArray[m][1]; myVertices[i][2]=workArray[m][2]; } else { float dt = (tTemp-time[m-1])/(time[m]-time[m-1]); myVertices[i][0]= workArray[m-1][0]+(workArray[m][0]-workArray[m-1][0])*dt; myVertices[i][1]= workArray[m-1][1]+(workArray[m][1]-workArray[m-1][1])*dt; myVertices[i][2]= workArray[m-1][2]+(workArray[m][2]-workArray[m-1][2])*dt; } } delete [] time; delete [] workArray; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAnOrbitInertialSysUsingTubes(int iBranch, int iOrbit, float (*myVertices)[3], float *myColorBase, const long int arrSize, const float tubeRadiusScaler, const int stability, const int type) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * anOrbit = new SoSeparator; Tube tube; if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, tubeRadiusScaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, tubeRadiusScaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, tubeRadiusScaler)); else if(coloringMethod == CL_LABELS) { double bMin = 0; for(int ib = 0; ib< iBranch; ++ib) bMin += numOrbitsInEachBranch_[ib]; double bMax = bMin+numOrbitsInEachBranch_[iBranch]-1; anOrbit->addChild(setLineAttributesByParameterValue( iOrbit, bMax, (bMax+bMin)/2.0, bMin, stability, tubeRadiusScaler)); } else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[iOrbit].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, tubeRadiusScaler)); else anOrbit->addChild(setLineColorBlending(myColorBase, arrSize*11, stability, tubeRadiusScaler)); tube = Tube(arrSize, myVertices, tubeRadiusScaler*0.005, 10); anOrbit->addChild(tube.createTube()); return anOrbit; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawAnOrbitInertialSysUsingNurbsCurve(int iBranch, int iOrbit, float (*myVertices)[3], const long int arrSize, const float scaler, const int stability, const int type) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * anOrbit = new SoSeparator; SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, arrSize, myVertices); // define a nurbs curve int number = arrSize; float * knots = new float[number+4]; for (int i=0; i<4; ++i) knots[i]=0, knots[i+number]=number-3; for(int i=4; inumControlPoints = arrSize; myCurve->knotVector.setValues(0, number+4, knots); if(coloringMethod == CL_BRANCH_NUMBER || coloringMethod == CL_CURVE_NUMBER) anOrbit->addChild(setLineAttributesByBranch(iBranch, stability, scaler)); else if(coloringMethod == CL_STABILITY) anOrbit->addChild(setLineAttributesByStability(stability, scaler)); else if(coloringMethod == CL_ORBIT_TYPE) anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); else if(coloringMethod == CL_LABELS) { double bMin = 0; for(int ib = 0; ib< iBranch; ++ib) bMin += numOrbitsInEachBranch_[ib]; double bMax = bMin+numOrbitsInEachBranch_[iBranch]-1; anOrbit->addChild(setLineAttributesByParameterValue( iOrbit, bMax, (bMax+bMin)/2.0, bMin, stability, scaler)); } else if(coloringMethod >= nar_) anOrbit->addChild(setLineAttributesByParameterValue( orbits_[iOrbit].par[parID_[coloringMethod-nar_]], parMax_[iBranch][coloringMethod-nar_], parMid_[iBranch][coloringMethod-nar_], parMin_[iBranch][coloringMethod-nar_], stability, scaler)); else anOrbit->addChild(setLineAttributesByType(stability, type, scaler)); anOrbit->addChild(myCoords); anOrbit->addChild(myCurve); delete [] knots; return anOrbit; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::createInertialFrameScene(float dis) // ////////////////////////////////////////////////////////////////////////// { SoSeparator * solGroup = new SoSeparator; int stability, type; float satPeriod = 1; long int arrSize = 0; if(animationLabel == MY_ALL) { long int si = 0; long int orbitSize; float (*myVertices)[3]; float *myColorBase; float *time; int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; for(int k=0; k= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } orbitSize = orbits_[k].numVerticesEachPeriod; arrSize = (numPeriodAnimated==0) ? orbitSize : (int)(numPeriodAnimated * orbitSize); myVertices = new float [arrSize][3]; myColorBase= new float [arrSize*11]; time = new float [arrSize]; convertDataToInertialSystem(myVertices, time, myColorBase, arrSize, orbitSize, k, si); stability = clientData.labelIndex[k][3]; type = clientData.labelIndex[k][2]; if(whichStyle==TUBE) { solGroup->addChild(drawAnOrbitInertialSysUsingTubes( iBranch, k, myVertices,myColorBase, arrSize, lineWidthScaler, stability, type)); } else if(whichStyle==SURFACE) { solGroup->addChild(drawAnOrbitInertialSysUsingLines( iBranch, k, myVertices, myColorBase, arrSize, lineWidthScaler, stability, type)); } else if(whichStyle==NURBS) { solGroup->addChild(drawAnOrbitInertialSysUsingNurbsCurve( iBranch, k, myVertices, arrSize, lineWidthScaler, stability, type)); } else { solGroup->addChild(drawAnOrbitInertialSysUsingLines( iBranch, k, myVertices, myColorBase, arrSize, lineWidthScaler, stability, type)); } si += orbits_[k].numVerticesEachPeriod; delete [] myVertices; delete [] time; } } else if(animationLabel != MY_NONE) { float vpp[3]; for(std::vector::size_type n=0; n= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } } satPeriod = orbits_[kno].period; long int orbitSize = orbits_[kno].numVerticesEachPeriod; arrSize = (numPeriodAnimated==0) ? orbitSize : (int)(numPeriodAnimated * orbitSize); float (*myVertices)[3] = new float [arrSize][3]; float *myColorBase = new float [arrSize*11]; float *time = new float [arrSize]; convertDataToInertialSystem(myVertices, time, myColorBase, arrSize, orbitSize, kno, si); float (*largePrimPos)[3] = new float [arrSize][3]; float (*smallPrimPos)[3] = new float [arrSize][3]; for(int i=0; iaddChild(animateOrbitInertialSysUsingLine( iBranch, kno, myVertices, largePrimPos, smallPrimPos, myColorBase, satPeriod, arrSize, lineWidthScaler, stability, type)); } else { if(whichStyle==TUBE) { solGroup->addChild(drawAnOrbitInertialSysUsingTubes( iBranch, kno, myVertices, myColorBase, arrSize, lineWidthScaler, stability, type)); } else if(whichStyle==SURFACE) { solGroup->addChild(drawAnOrbitInertialSysUsingLines( iBranch, kno, myVertices,myColorBase, arrSize, lineWidthScaler, stability, type)); } else if(whichStyle==NURBS) { solGroup->addChild(drawAnOrbitInertialSysUsingNurbsCurve( iBranch, kno, myVertices, arrSize, lineWidthScaler, stability, type)); } else { solGroup->addChild(drawAnOrbitInertialSysUsingLines( iBranch, kno, myVertices, myColorBase, arrSize, lineWidthScaler, stability, type)); } } delete [] myVertices; delete [] myColorBase; delete [] smallPrimPos; delete [] largePrimPos; delete [] time; } } SoSeparator *aSep = new SoSeparator; SoTimeCounter *myCounter = new SoTimeCounter; myCounter->ref(); myCounter->max = 10*(arrSize - 1); myCounter->min = 0; myCounter->frequency = (numPeriodAnimated !=0) ? 0.1*satSpeed/numPeriodAnimated : 0.1*satSpeed; float pseudoPeriod = 0.1*satPeriod*numPeriodAnimated/(arrSize-1); SoCalculator *aCalc = new SoCalculator; aCalc->a.connectFrom(&myCounter->output); aCalc->b.setValue(pseudoPeriod); aCalc->expression.setValue("oa = fmod(2.0*M_PI*a*b, 2*M_PI)"); SoRotationXYZ *aRotation = new SoRotationXYZ; aRotation->axis = SoRotationXYZ::Z; aRotation->angle.connectFrom(&aCalc->oa); aSep->addChild(aRotation); // create the primaries if(options[OPT_PRIMARY]) { double pos1 = -mass; double pos2 = 1-mass; if(whichCoordSystem == INERTIAL_B ) pos1 = -mass , pos2=1-mass; else if(whichCoordSystem == INERTIAL_S ) pos1 = 0, pos2= 1; else if(whichCoordSystem == INERTIAL_E ) pos1 = -1, pos2= 0; char *txtureFileName = new char [strlen(autoDir) + 30]; sprintf(txtureFileName, "%s%s", autoDir, "/plaut04/widgets/large.rgb"); aSep->addChild(createPrimary(1-mass, pos1, 0.25*largePrimRadius, txtureFileName)); sprintf(txtureFileName, "%s%s", autoDir, "/plaut04/widgets/small.rgb"); aSep->addChild(createPrimary(mass, pos2, 0.25*smallPrimRadius, txtureFileName)); delete [] txtureFileName; } // create the libration points SoSeparator * libPtsSep = createLibrationPoint(mass, dis, libPtScaler, whichCoordSystem); if(options[OPT_LIB_POINTS]) { aSep->addChild(libPtsSep); } // create solution coordinate axis if(whichCoord != NO_COORD) { SoSeparator * coordSep = new SoSeparator; SoTransform * coordXform = new SoTransform; coordXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0),M_PI_2); coordSep->addChild(coordXform); static int tickers[3]; if(blDrawTicker) { tickers[0]=tickers[1]=tickers[2]=5; } else { tickers[0]=tickers[1]=tickers[2]=-1; } float asMax[3], asMin[3]; if(options[OPT_NORMALIZE_DATA]) { asMax[0]=max_[0]; asMax[1]=max_[1];asMax[2]=max_[2]; asMin[0]=min_[0]; asMin[1]=min_[1];asMin[2]=min_[2]; } else { asMax[0] = asMax[1] = asMax[2] = 1; asMin[0] = asMin[1] = asMin[2] = -1; } coordSep->addChild(createCoordinates(setShow3D, whichCoord, asMax, asMin, tickers, &envColors[1])); aSep->addChild(coordSep); } solGroup->addChild(aSep); if(options[OPT_PERIOD_ANI]) { int iBranch = 0; int sumOrbit = numOrbitsInEachBranch_[iBranch]; long int si = 0; SoBlinker * solBlinker = new SoBlinker; solBlinker->speed = orbitSpeed; solBlinker->on = TRUE; for(int k=0; k= sumOrbit) { sumOrbit += numOrbitsInEachBranch_[++iBranch]; } long int orbitSize = orbits_[k].numVerticesEachPeriod; long int arrSize = (numPeriodAnimated==0) ? orbitSize : (int)(numPeriodAnimated * orbitSize); float (*myVertices)[3] = new float [arrSize][3]; float *myColorBase = new float [arrSize*11]; float *time = new float [arrSize]; convertDataToInertialSystem(myVertices, time, myColorBase, arrSize, orbitSize, k, si); solBlinker->addChild(drawAnOrbitInertialSysUsingLines( iBranch, k, myVertices, myColorBase, arrSize, aniLineScaler*lineWidthScaler, clientData.labelIndex[k][3],clientData.labelIndex[k][2])); si += orbits_[k].numVerticesEachPeriod; delete [] myVertices; delete [] myColorBase; delete [] time; } solGroup->addChild(solBlinker); } return solGroup; } #if 0 // unused R3B related functions /////////////////////////////////////////////////////////////////////////// // // SoSeparator * Solution::animateIner2(long int lblJ,long int si) // /////////////////////////////////////////////////////////////////////////// { float ptb[3]; int center = 0; float mu = 0.01215; SoSeparator *satGroup = new SoSeparator; SoMaterial *satMtl = new SoMaterial; satMtl->diffuseColor.setValue(envColors[7]); satMtl->transparency = 0.0; SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); SoBlinker *satBlker = new SoBlinker; int upperlimit = orbits_[lblJ].numVerticesEachPeriod; int idx = si; satBlker->speed = 0.5; // go thr the whole dataset to find the max and min in this set // so that we can decide the size of the ball. float maxV[3], minV[3]; maxV[0]=minV[0]=xyzCoords_[idx+0][0]; maxV[1]=minV[1]=xyzCoords_[idx+0][0]; maxV[2]=minV[2]=xyzCoords_[idx+0][0]; for(int i=1; ixyzCoords_[idx+i][0]) minV[0]=xyzCoords_[idx+i][0] ; if(maxV[1]xyzCoords_[idx+i][1]) minV[1]=xyzCoords_[idx+i][1] ; if(maxV[2]xyzCoords_[idx+i][2]) minV[2]=xyzCoords_[idx+i][2] ; } float dis = fabs(std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2]))); float pta[3], vertices[2][3]; float rgb1[3], rgb2[3]; rgb1[0]=0; rgb1[2]=0; rgb1[1]=1; rgb2[0]=1; rgb2[1]=0; rgb2[2]=0; // animate the orbit ptb[0]=xyzCoords_[idx+0][0]; ptb[1]=xyzCoords_[idx+0][1]; ptb[2]=xyzCoords_[idx+0][2]; float primPos[3]; float satPeriod ; satPeriod = period_[lblJ]; float wholePeriod = satPeriod*2.0*M_PI; float aniTime = 0.0, dt = 0.0, incTime = 0.0; dt = 1.0/200.0; do { pta[0]=ptb[0]; pta[1]=ptb[1]; pta[2]=ptb[2]; //find the point with the time: aniTime; int i; for(i=0; i=aniTime/2.0/M_PI) break; } // calculate the position of this record. if(i==upperlimit) { ptb[0]=xyzCoords_[idx+i-1][0]; ptb[1]=xyzCoords_[idx+i-1][1]; ptb[2]=xyzCoords_[idx+i-1][2]; } else if(i==0) { ptb[0]=xyzCoords_[idx][0]; ptb[1]=xyzCoords_[idx][1]; ptb[2]=xyzCoords_[idx][2]; } else { ptb[0]=(xyzCoords_[idx+i-1][0]+xyzCoords_[idx+i][0])/2.0; ptb[1]=(xyzCoords_[idx+i-1][1]+xyzCoords_[idx+i][1])/2.0; ptb[2]=(xyzCoords_[idx+i-1][2]+xyzCoords_[idx+i][2])/2.0; } // calculate the position of the primary at aniTime. calPrimPos(aniTime, primPos); satBlker->addChild(drawASphereWithColor(rgb1, primPos, 1.*dis/100.0)); // calculate the position of the satallite at aniTime. calSatPos(center, mu, aniTime, primPos, ptb); satBlker->addChild(drawASphereWithColor(rgb2, ptb, 1.*dis/100.0)); vertices[0][0]=pta[0]; vertices[0][1]=pta[1]; vertices[0][2]=pta[2]; vertices[1][0]=ptb[0]; vertices[1][1]=ptb[1]; vertices[1][2]=ptb[2]; SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, 2, vertices); int32_t myint[1]; myint[0]=-1; // define the orbit line set SoLineSet *myLine= new SoLineSet; myLine->numVertices.setValues(0,1,myint); satGroup->addChild(satMtl); satGroup->addChild(myCoords); satGroup->addChild(myLine); // increase the time. incTime += dt; aniTime += dt; }while(incTime <= wholePeriod); satGroup->addChild(satMtl); satGroup->addChild(satBlker); return satGroup; } /////////////////////////////////////////////////////////////////////////// // // Using a red sphere to simulate the movement of a sattelite. // SoSeparator * Solution::animateOrbitMovement(long int j, long int si) // /////////////////////////////////////////////////////////////////////////// { float ptb[3]; SoSeparator *satGroup = new SoSeparator; SoMaterial *satMtl = new SoMaterial; satMtl->diffuseColor.setValue(1.0,0.0,0.0); satMtl->transparency = 0.0; SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); SoBlinker *satBlker = new SoBlinker; int upperlimit = orbits_[j].numVerticesEachPeriod; int idx = si; satBlker->speed = satSpeed; float maxV[3], minV[3]; maxV[0]=minV[0]=xyzCoords_[idx+0][0]; maxV[1]=minV[1]=xyzCoords_[idx+0][0]; maxV[2]=minV[2]=xyzCoords_[idx+0][0]; double *time = new double[upperlimit]; float dt = 1.0/upperlimit; time[0] = 0.0; for(int i=1; ixyzCoords_[idx+i][0]) minV[0]=xyzCoords_[idx+i][0] ; if(maxV[1]xyzCoords_[idx+i][1]) minV[1]=xyzCoords_[idx+i][1] ; if(maxV[2]xyzCoords_[idx+i][2]) minV[2]=xyzCoords_[idx+i][2] ; time[i] = i*dt; } float dis = std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2])); // animate the orbit ptb[0]=xyzCoords_[idx][0]; ptb[1]=xyzCoords_[idx][1]; ptb[2]=xyzCoords_[idx][2]; satBlker->addChild(drawASphere(ptb,1.*dis/100.0)); for(int i=1; i time_[idx+m] && m < upperlimit) ++m; if( fabs(time[i]-time_[m]) <= 1.0e-9 ) { ptb[0]=xyzCoords_[idx+m][0]; ptb[1]=xyzCoords_[idx+m][1]; ptb[2]=xyzCoords_[idx+m][2]; satBlker->addChild(drawASphere(ptb,1.*dis/100.0)); } else { ptb[0]= (xyzCoords_[idx+m][0]+xyzCoords_[idx+m-1][0])/2.0; ptb[1]= (xyzCoords_[idx+m][1]+xyzCoords_[idx+m-1][1])/2.0; ptb[2]= (xyzCoords_[idx+m][2]+xyzCoords_[idx+m-1][2])/2.0; satBlker->addChild(drawASphere(ptb,1.*dis/100.0)); } } delete [] time; satGroup->addChild(satMtl); satGroup->addChild(satBlker); return satGroup; } /////////////////////////////////////////////////////////////////////////// // // This routine animate the calculation steps, namely the density of the // collocation points. // SoSeparator * Solution::animateOrbitCalSteps(long int snOrbit, long int si) // /////////////////////////////////////////////////////////////////////////// { float ptb[3]; SoSeparator *satGroup = new SoSeparator; SoMaterial *satMtl = new SoMaterial; satMtl->diffuseColor.setValue(envColors[7]); satMtl->transparency = 0.0; SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); SoBlinker *satBlker = new SoBlinker; int upperlimit = numVerticesEachPeriod_[snOrbit-1]; int idx = si; satBlker->speed = satSpeed; float maxV[3], minV[3]; maxV[0]=minV[0]=xyzCoords_[idx+0][0]; maxV[1]=minV[1]=xyzCoords_[idx+0][0]; maxV[2]=minV[2]=xyzCoords_[idx+0][0]; for(int i=1; ixyzCoords_[idx+i][0]) minV[0]=xyzCoords_[idx+i][0] ; if(maxV[1]xyzCoords_[idx+i][1]) minV[1]=xyzCoords_[idx+i][1] ; if(maxV[2]xyzCoords_[idx+i][2]) minV[2]=xyzCoords_[idx+i][2] ; } float dis = fabs(std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2]))); for(int i=0; iaddChild(drawASphere(ptb,1.*dis/100.0)); } satGroup->addChild(satMtl); satGroup->addChild(satBlker); return satGroup; } /////////////////////////////////////////////////////////////////////////// // Using a red ball to simulate the movement of a sattelite and using // white lines to simulate the trace of the sattelite. // // !!!!!!!!!!!!!!!!!!!THIS VERSION DOES NOT WORK YET!!!!!!!!!!!!! // // SoSeparator * Solution::animateOrbitWithNurbsCurveTail(long int j, long int si) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *satGroup = new SoSeparator; SoMaterial *tailMtl = new SoMaterial; tailMtl->diffuseColor.setValue(1.0,1.0,1.0); tailMtl->transparency = 0.0; SoDrawStyle *satStyle = new SoDrawStyle; satStyle->style = SoDrawStyle::FILLED; satGroup->addChild(satStyle); int upperlimit = orbits_[j].numVerticesEachPeriod; int idx = si; float maxV[3], minV[3]; double *time = new double[upperlimit]; double dt = 1.0/upperlimit; maxV[0]=minV[0]=xyzCoords_[idx+0][0]; maxV[1]=minV[1]=xyzCoords_[idx+0][0]; maxV[2]=minV[2]=xyzCoords_[idx+0][0]; time[0] = 0.0; for(int i=1; ixyzCoords_[idx+i][0]) minV[0]=xyzCoords_[idx+i][0] ; if(maxV[1]xyzCoords_[idx+i][1]) minV[1]=xyzCoords_[idx+i][1] ; if(maxV[2]xyzCoords_[idx+i][2]) minV[2]=xyzCoords_[idx+i][2] ; time[i] = i*dt; } float dis = fabs(std::max(std::max((maxV[0]-minV[0]), (maxV[1]-minV[1])), (maxV[2]-minV[2]))); float (*myVertices)[3]= new float[upperlimit][3]; myVertices[0][0]=xyzCoords_[idx][0]; myVertices[0][1]=xyzCoords_[idx][1]; myVertices[0][2]=xyzCoords_[idx][2]; for(int i=1; i time_[idx+m] && m < upperlimit) ++m; if( fabs(time[i]-time_[m]) <= 1.0e-9 ) { myVertices[i][0]=xyzCoords_[idx+m][0]; myVertices[i][1]=xyzCoords_[idx+m][1]; myVertices[i][2]=xyzCoords_[idx+m][2]; } else { myVertices[i][0]= (xyzCoords_[idx+m][0]+xyzCoords_[idx+m-1][0])/2.0; myVertices[i][1]= (xyzCoords_[idx+m][1]+xyzCoords_[idx+m-1][1])/2.0; myVertices[i][2]= (xyzCoords_[idx+m][2]+xyzCoords_[idx+m-1][2])/2.0; } } SoCoordinate3 *myCoords = new SoCoordinate3; myCoords->point.setValues(0, upperlimit, myVertices); satGroup->addChild(myCoords); SoTimeCounter *myCounter = new SoTimeCounter; myCounter->max = upperlimit-1; myCounter->min = 4; myCounter->frequency = 0.1*satSpeed; SoLineSet *myLine= new SoLineSet; myLine->numVertices.connectFrom(&myCounter->output); satGroup->addChild(tailMtl); satGroup->addChild(myLine); SoMaterial * satMtl = new SoMaterial; SoSphere * mySat = new SoSphere; mySat->radius = dis*0.005*satRadius; SoTranslation * satTrans = new SoTranslation; satMtl->diffuseColor.setValue(envColors[7]); satGroup->addChild(satMtl); satGroup->addChild(satTrans); satGroup->addChild(mySat); SoSelectOne *mysel = new SoSelectOne(SoMFVec3f::getClassTypeId()); mysel->index.connectFrom(&myCounter->output); mysel->input->enableConnection(TRUE); mysel->input->connectFrom(&myCoords->point); satTrans->translation.connectFrom(mysel->output); delete [] myVertices; delete [] time; return satGroup; } /////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawEarthMovement(int k) // /////////////////////////////////////////////////////////////////////////// { SoSeparator * eSep = new SoSeparator; int32_t myint[10]; SoDrawStyle *drawStyle = new SoDrawStyle; drawStyle->style = SoDrawStyle::FILLED; drawStyle->lineWidth = 3.0; eSep->addChild(drawStyle); SoMaterial *eMtl= new SoMaterial; eMtl->diffuseColor.setValue(0.0,0.5,0.5); eMtl->transparency = 0.0; eSep->addChild(eMtl); float vertices[30000][3]; for(int i=0; ipoint.setValues(0, orbits_[k].numVerticesEachPeriod, vertices); SoLineSet *eLine= new SoLineSet; eLine->numVertices.setValues(0, 1, myint); eSep->addChild(eCoords); eSep->addChild(eLine); return eSep; } /////////////////////////////////////////////////////////////////////////// // // calculate the current position of the primary at time t in the inertial frame // void Solution::calPrimPos(float t, float pos[]) // /////////////////////////////////////////////////////////////////////////// { pos[0] = cos(t); pos[1] = sin(t); pos[2] = 0; } /////////////////////////////////////////////////////////////////////////// // // Given time t and the position of the moving primary in the inertial frame // to calculate the current position of the satllite position in the intertial frame. // void Solution::calSatPos(int center, float mu, float t, float primPos[], float satPos[]) // /////////////////////////////////////////////////////////////////////////// { float a1, a0, b1, b0; float c = 0; // c = 1-mu if the center of the inertial system is // the Earth(smaller primary). // c = -mu if the center is the Sun (bigger primary). // c = 0 if the center is the barycenter. if(center == 0) c = 0; else if(center == 1) c = -mu; else c = 1-mu; // calculate the current position of the satllite a1 = primPos[1]; a0 = primPos[0]; b1 = satPos[1]; b0 = satPos[0]; satPos[0] = b0*a0-b1*a1; satPos[1] = b1*a0+b0*a1; } /////////////////////////////////////////////////////////////////////////// // SoSeparator * Solution::drawASphereWithColor(float color[], float position[], float size) // /////////////////////////////////////////////////////////////////////////// { SoSeparator *satSep = new SoSeparator; SoTransform *satXform = new SoTransform; satXform->translation.setValue(position[0],position[1],position[2]); SoMaterial *satMtl = new SoMaterial; satMtl->diffuseColor.setValue(color); satMtl->transparency = 0.0; satSep->addChild(satMtl); SoSphere *satSph = new SoSphere; satSph->radius = size; satSep->addChild(satXform); satSep->addChild(satSph); return satSep; } #endif auto/07p/plaut04/src/bifurcation.h0000640000175000017500000000453613570013207015010 0ustar sksk#ifndef BIFURCATION_H #define BIFURCATION_H #include #include #include class Bifurcation { public: Bifurcation() {} ~Bifurcation() {} void copyDataToWorkArray(int varIndices[]); SoSeparator *createScene(); void alloc(); void dealloc(); void denormalizePosition(float position[]); bool read(const char *bFileName, int varIndices[]); bool parse(const char *bFileName); void normalizeData(long int idx, float xyzCoords[3]); int nar() const {return nar_;} int maxndim() const {return maxndim_;} long int branchID(int i) const {return branchID_[i];} long int labels(int i) const {return orbits_[i].label;} int totalLabels() const {return totalLabels_;} long totalNumPoints() const {return totalNumPoints_;} int32_t numVerticesEachBranch(int i) const {return numVerticesEachBranch_[i];} float *data() const {return data_;} private: SoSeparator *render(); SoSeparator *drawALabel(int row, float xoffset, long int label); SoSeparator *drawLabelPtsInScene(); SoMaterial *setLabelMaterial(int lblType); SoSeparator *drawABranchUsingTubes(int iBranch, long int l, long int sumX, float scaler); SoSeparator *drawABranchUsingLines(int iBranch, long int l, long int si, float scaler); SoSeparator *drawABranchUsingNurbsCurve(int iBranch, long int l, long int si, float scaler); int varIndices_[3]; int32_t *numVerticesEachBranch_; int *xAxisItems_; int *yAxisItems_; int *zAxisItems_; int maxndim_; int nar_; unsigned char *ptStability_; // start from 0...totalLines-1 long int totalNumPoints_; // like 10012. long int numBranches_; // like 4. long int *branchID_; // branch ID of each branch. struct orbit { int32_t numVerticesEachLabelInterval; long int label; // this real lenght should equal to totalLabels; } *orbits_; int numAxis_; // number of groups of axis. 3 is a group. int totalLabels_; // max saves the maximum value of the coordinate. // min saves the minimum value of the coordinate. float max_[3], min_[3]; float *data_; }; extern Bifurcation *myBifNode; #endif auto/07p/plaut04/src/gmainxt.c++0000640000175000017500000035224713570013207014300 0ustar sksk#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "gplaut04.h" #include "solution.h" #include "bifurcation.h" #define LBL_OFFSET 4 #ifdef LESSTIF_VERSION #include #ifndef XmNwrap #define XmNwrap ((char *)&_XmStrings[19401]) #endif #undef XmFONTLIST_DEFAULT_TAG #define XmFONTLIST_DEFAULT_TAG NULL #endif #ifdef USE_EXAM_VIEWER static SoXtExaminerViewer *renderArea; #else static SoXtRenderArea *renderArea; #endif SbBool printToPostScript (SoNode *root, const char *filename, SoXtExaminerViewer *viewer, int printerDPI); struct ViewerAndScene { SoXtExaminerViewer *viewer; char *filename; SoNode *scene; } ; ViewerAndScene *vwrAndScene; static const unsigned long systemLinePatternValue[] = { 0xfffff, 0x7777, 0x3333, 0xfafa, 0xeaea, 0xffcc, 0xffdc,0xff9c,0 }; static const char *systemLinePatternLookAndFeel[] = { "SOLID LINE", "--------", ". . . . . ", "_ . _ . _ .", "_ . . _ . .", "_ . . . _", "___ _ ___ _", "____ __ ____", "NULL " }; GC gc; Colormap colormap; XColor black, grey, red, white, green, blue, exact; Widget topform; Widget xAxisList, yAxisList, zAxisList, labelsList, colorMethodSeletionList; Widget satAniSpeedSlider, orbitAniSpeedSlider, dimButton; typedef struct EditMenuItems { Widget *items; int which; } EditMenuItems; EditMenuItems *typeMenuItems, *styleMenuItems, *coordMenuItems; EditMenuItems *coordSystemMenuItems; Widget fileDialog = NULL; XmStringTable xList = (XmStringTable) 0 ; XmStringTable yList = (XmStringTable) 0 ; XmStringTable zList = (XmStringTable) 0 ; XmStringTable lblList = (XmStringTable) 0 ; XmStringTable clrMethodList= (XmStringTable) 0 ; static void xListCallBack(Widget combo, XtPointer client_data, XtPointer call_data); static void yListCallBack(Widget combo, XtPointer client_data, XtPointer call_data); static void zListCallBack(Widget combo, XtPointer client_data, XtPointer call_data); static void lblListCallBack(Widget combo, XtPointer client_data, XtPointer call_data); static void fileDialogCB(Widget, XtPointer client_data, XtPointer data); static void hidenDialogShell (Widget widget, XtPointer client_data, XtPointer call_data); static void applyPreferDialogChangeAndUpdateScene(Widget widget, XtPointer client_data, XtPointer call_data); static void closePreferDialogAndUpdateScene(Widget widget, XtPointer client_data, XtPointer call_data); static void closePreferDialogAndGiveUpChange(Widget widget, XtPointer client_data, XtPointer call_data); static void savePreferAndUpdateScene(Widget widget, XtPointer client_data, XtPointer call_data); static void getFileName(int fileMode); static void showAboutDialog(); static void createPreferDialog(); extern SoSeparator * createBoundingBox(); static void showAboutCB(Widget, XtPointer, XtPointer); //////////////////////////////////////////////////////////////////////// // // functions // //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// // static void orbitSpeedCB(Widget, XtPointer userData, XtPointer callData) // //////////////////////////////////////////////////////////////////////// { XmScaleCallbackStruct *data = (XmScaleCallbackStruct *) callData; orbitSpeed = data->value/50.0; ///50.0; ///75.0; if(orbitSpeed == 0.0) orbitSpeed = 0.0001; updateScene(); } //////////////////////////////////////////////////////////////////////// // static void satSpeedCB(Widget, XtPointer userData, XtPointer callData) // //////////////////////////////////////////////////////////////////////// { XmScaleCallbackStruct *data = (XmScaleCallbackStruct *) callData; satSpeed = data->value/100.0; updateScene(); } //////////////////////////////////////////////////////////////////////// // static void numPeriodAnimatedCB(Widget, XtPointer userData, XtPointer callData) // //////////////////////////////////////////////////////////////////////// { XmComboBoxCallbackStruct *cbs = (XmComboBoxCallbackStruct *)callData; char *myChoice = (char *) XmStringUnparse (cbs->item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); if ( strcmp(myChoice, "inf") == 0 ) { numPeriodAnimated = -1; } else { numPeriodAnimated = atof(myChoice); } //cout <<" Num Period Animated "<item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); int choice = (int) cbs->item_position; coloringMethod = (strcasecmp(myChoice,"COMP")==0) ? CL_COMPONENT: ((strcasecmp(myChoice,"TYPE")==0) ? CL_ORBIT_TYPE : ((strcasecmp(myChoice,"CURV")==0) ? CL_CURVE_NUMBER: ((strcasecmp(myChoice,"BRAN")==0) ? CL_BRANCH_NUMBER: ((strcasecmp(myChoice,"PONT")==0) ? CL_POINT_NUMBER : ((strcasecmp(myChoice,"LABL")==0) ? CL_LABELS: ((strcasecmp(myChoice,"STAB")==0) ? CL_STABILITY : choice - specialColorItems)))))); coloringMethodType[whichType] = coloringMethod; updateScene(); } //////////////////////////////////////////////////////////////////////// // static void lineWidthCB(Widget, XtPointer userData, XtPointer callData) // //////////////////////////////////////////////////////////////////////// { Widget spin = (Widget) userData; unsigned char type; int position; XtVaGetValues (spin, XmNspinBoxChildType, &type, XmNposition, &position, NULL); #ifdef LESSTIF_VERSION if (position < 10) { position = 10; XtVaSetValues (spin, XmNposition, position, NULL); } #endif lineWidthScaler = position/10.0; updateScene(); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the File menu. // static void fileMenuPick(Widget, void *userData, XtPointer *) // //////////////////////////////////////////////////////////////////////// { int which = (long) userData; switch (which) { case SAVE_ITEM: getFileName(SAVE_ITEM); break; case QUIT_ITEM: postDeals(); exit(0); break; case PRINT_ITEM: getFileName(PRINT_ITEM); break; case OPEN_ITEM: getFileName(OPEN_ITEM); break; default: printf("UNKNOWN file menu item!!!\n"); break; } } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the Edit menu. // static void editMenuPick( Widget w, void *userData, XmAnyCallbackStruct *cb) // //////////////////////////////////////////////////////////////////////// { int which = (long) userData; Arg args[1]; EditMenuItems *menuItems; XtSetArg(args[0], XmNuserData, &menuItems); XtGetValues(w, args, 1); menuItems->which = which; whichCoordSystem = which; whichCoordSystemOld = whichCoordSystem; updateScene(); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the TYPE menu. // static void typeMenuPick(Widget w, void *userData, XmAnyCallbackStruct *cb) // //////////////////////////////////////////////////////////////////////// { int which = (long) userData; // get the user data for this menu item. Arg args[1]; EditMenuItems *menuItems; XtSetArg(args[0], XmNuserData, &menuItems); XtGetValues(w, args, 1); menuItems->which = which; whichType = which; if ( whichType != whichTypeOld ) { graphWidgetToggleSet = 0; if( whichType != BIFURCATION ) { setShow3D = setShow3DSol; for(int i=0; i<11; ++i) { optBif[i] = options[i]; options[i] = optSol[i]; graphWidgetToggleSet |= options[i] << i; } } else { setShow3D = setShow3DBif; for(int i=0; i<11; ++i) { optSol[i] = options[i]; options[i] = optBif[i]; graphWidgetToggleSet |= options[i] << i; } } coloringMethodType[whichType] = coloringMethod; } whichTypeOld = whichType; setListValue(); XmString xString; if (setShow3D) xString = XmStringCreateLocalized((char *)"3D"); else xString = XmStringCreateLocalized((char *)"2D"); XtVaSetValues (dimButton, XmNlabelString, xString, NULL); XmStringFree(xString); XtVaSetValues(xAxisList, XmNselectedPosition, xCoordIndices[0], NULL); XtVaSetValues(yAxisList, XmNselectedPosition, yCoordIndices[0], NULL); XtVaSetValues(zAxisList, XmNselectedPosition, zCoordIndices[0], NULL); updateScene(); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the Option menu. // static void optMenuPick(Widget widget, void *userData, XmAnyCallbackStruct *cb) // //////////////////////////////////////////////////////////////////////// { XmToggleButtonCallbackStruct *toggle = (XmToggleButtonCallbackStruct *)cb; int which = (long) userData; if (toggle->set == XmSET) { graphWidgetToggleSet |= (1 << which); options[which] = true; } else { options[which] = false; graphWidgetToggleSet &= ~(1 << which); } if(options[OPT_SAT_ANI]) XtVaSetValues (satAniSpeedSlider, XmNeditable, TRUE, NULL); else XtVaSetValues (satAniSpeedSlider, XmNeditable, FALSE, NULL); if(options[OPT_PERIOD_ANI]) XtVaSetValues (orbitAniSpeedSlider, XmNeditable, TRUE, NULL); else XtVaSetValues (orbitAniSpeedSlider, XmNeditable, FALSE, NULL); if(useR3B && (graphWidgetToggleSet & (1<(labels[i].c_str())); if(whichType != BIFURCATION) { xCoordIndices = dai.solX; yCoordIndices = dai.solY; zCoordIndices = dai.solZ; nar = mySolNode->nar(); } else { xCoordIndices = dai.bifX; yCoordIndices = dai.bifY; zCoordIndices = dai.bifZ; nar = myBifNode->nar(); } XtVaSetValues(xAxisList, XmNitems, xList, XmNitemCount, nar, NULL); XtVaSetValues(yAxisList, XmNitems, yList, XmNitemCount, nar, NULL); XtVaSetValues(zAxisList, XmNitems, zList, XmNitemCount, nar, NULL); lessTifFixupComboBox(xAxisList, xList, nar, 10, 60, 2); lessTifFixupComboBox(yAxisList, yList, nar, 10, 60, 2); lessTifFixupComboBox(zAxisList, zList, nar, 10, 60, 2); coloringMethodList.clear(); coloringMethodList.push_back("BRAN"); coloringMethodList.push_back("STAB"); coloringMethodList.push_back("PONT"); coloringMethodList.push_back("CURV"); specialColorItems = 4; if(whichType != BIFURCATION) { coloringMethodList.push_back("TYPE"); coloringMethodList.push_back("LABL"); coloringMethodList.push_back("COMP"); specialColorItems = 7; } for(int i=0; inpar(); ++i) { std::stringstream s; s << "PAR(" << mySolNode->parID(i)+1 << ")"; coloringMethodList.push_back(s.str()); } } count = coloringMethodList.size(); for (int i = 0; i < count; ++i) clrMethodList[i] = XmStringCreateLocalized (const_cast(coloringMethodList[i].c_str())); XtVaSetValues(colorMethodSeletionList, XmNitems, clrMethodList, XmNitemCount, count, NULL); long nItems = labels.size(); XtVaSetValues(labelsList, XmNitems, lblList, XmNitemCount, nItems, NULL); lessTifFixupComboBox(colorMethodSeletionList, clrMethodList, count, 10, 80, 5); lessTifFixupComboBox(labelsList, lblList, nItems, 10, 86, 6); if(setShow3D) XtSetSensitive (zAxisList, true); else { zCoordIndices.clear(); zCoordIndices.push_back(-1); XtSetSensitive (zAxisList, false); } } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the STYLE menu. // static void styleMenuPick(Widget w, void *userData, XmAnyCallbackStruct *cb) // //////////////////////////////////////////////////////////////////////// { int which = (long) userData; // get the user data for this menu item. Arg args[1]; EditMenuItems *menuItems; XtSetArg(args[0], XmNuserData, &menuItems); XtGetValues(w, args, 1); menuItems->which = which; whichStyle = which; whichStyleOld = whichStyle; updateScene(); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt when a menu item is picked from the STYLE menu. // static void coordMenuPick(Widget w, void *userData, XmAnyCallbackStruct *cb) // //////////////////////////////////////////////////////////////////////// { int which = (long) userData; // get the user data for this menu item. Arg args[1]; EditMenuItems *menuItems; XtSetArg(args[0], XmNuserData, &menuItems); XtGetValues(w, args, 1); menuItems->which = which; if(which == DRAW_TICKER) blDrawTicker = !blDrawTicker ; else { whichCoord = which; whichCoordOld = whichCoord; } updateScene(); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt just before the TYPE menu is displayed. // static void typeMenuDisplay(Widget, void *userData, XtPointer) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = (EditMenuItems *) userData; TOGGLE_OFF(menuItems->items[SOLUTION]); TOGGLE_OFF(menuItems->items[BIFURCATION]); TOGGLE_ON(menuItems->items[menuItems->which]); XtSetSensitive (menuItems->items[SOLUTION], TRUE); XtSetSensitive (menuItems->items[BIFURCATION], TRUE); if(mySolNode->numOrbits() == 0) XtSetSensitive (menuItems->items[SOLUTION], FALSE); if(myBifNode->totalNumPoints() == 0) XtSetSensitive (menuItems->items[BIFURCATION], FALSE); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt just before the STYLE menu is displayed. // static void styleMenuDisplay(Widget, void *userData, XtPointer) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = (EditMenuItems *) userData; TOGGLE_OFF(menuItems->items[LINE]); TOGGLE_OFF(menuItems->items[TUBE]); TOGGLE_OFF(menuItems->items[SURFACE]); TOGGLE_OFF(menuItems->items[MESH_POINTS]); TOGGLE_OFF(menuItems->items[ALL_POINTS]); if((useR3B && whichCoordSystem != ROTATING_F) || whichType == BIFURCATION) { XtSetSensitive (menuItems->items[SURFACE], false); XtSetSensitive (menuItems->items[MESH_POINTS], false); XtSetSensitive (menuItems->items[ALL_POINTS], false); if(useR3B && (menuItems->which == SURFACE || menuItems->which == MESH_POINTS || menuItems->which == ALL_POINTS)) menuItems->which = LINE; } else { XtSetSensitive (menuItems->items[SURFACE], true); XtSetSensitive (menuItems->items[MESH_POINTS], true); XtSetSensitive (menuItems->items[ALL_POINTS], true); } TOGGLE_ON(menuItems->items[menuItems->which]); } //////////////////////////////////////////////////////////////////////// // // This is called by Xt just before the STYLE menu is displayed. // static void coordMenuDisplay(Widget, void *userData, XtPointer) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = (EditMenuItems *) userData; if(menuItems->which == DRAW_TICKER) { if(blDrawTicker) XmToggleButtonSetState(menuItems->items[menuItems->which], TRUE, FALSE); else XmToggleButtonSetState(menuItems->items[menuItems->which], FALSE, FALSE); } else { TOGGLE_OFF(menuItems->items[NO_COORD]); TOGGLE_OFF(menuItems->items[COORDORIGIN]); TOGGLE_OFF(menuItems->items[LEFTBACK]); TOGGLE_OFF(menuItems->items[LEFTAHEAD]); TOGGLE_OFF(menuItems->items[COORD_AT_ORIGIN]); TOGGLE_OFF(menuItems->items[DRAW_TICKER]); TOGGLE_ON(menuItems->items[menuItems->which]); if(blDrawTicker) XmToggleButtonSetState(menuItems->items[DRAW_TICKER], TRUE, FALSE); } } //////////////////////////////////////////////////////////////////////// // // This is called by Xt just before the Edit menu is displayed. // static void centerMenuDisplay(Widget, void *userData, XtPointer) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = (EditMenuItems *) userData; TOGGLE_OFF(menuItems->items[ROTATING_F]); TOGGLE_OFF(menuItems->items[INERTIAL_B]); TOGGLE_OFF(menuItems->items[INERTIAL_S]); TOGGLE_OFF(menuItems->items[INERTIAL_E]); TOGGLE_ON(menuItems->items[menuItems->which]); if(whichType == SOLUTION) { XtSetSensitive (menuItems->items[ROTATING_F], true); XtSetSensitive (menuItems->items[INERTIAL_B], true); XtSetSensitive (menuItems->items[INERTIAL_E], true); XtSetSensitive (menuItems->items[INERTIAL_S], true); } else { XtSetSensitive (menuItems->items[ROTATING_F], false); XtSetSensitive (menuItems->items[INERTIAL_B], false); XtSetSensitive (menuItems->items[INERTIAL_S], false); XtSetSensitive (menuItems->items[INERTIAL_E], false); } } //////////////////////////////////////////////////////////////////////// // // This is called by Xt just before the TYPE menu is displayed. // static void optMenuDisplay(Widget, void *userData, XtPointer) // //////////////////////////////////////////////////////////////////////// { EditMenuItems *menuItems = (EditMenuItems *) userData; for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { if (!useR3B && (i == OPT_PRIMARY || i == OPT_LIB_POINTS)) continue; if (graphWidgetToggleSet & (1<items[i], TRUE, FALSE); } else { XmToggleButtonSetState(menuItems->items[i], FALSE, FALSE); } } if(useR3B) { if(!blMassDependantOption) { XtSetSensitive (menuItems->items[OPT_PRIMARY], false); XtSetSensitive (menuItems->items[OPT_LIB_POINTS], false); } else { XtSetSensitive (menuItems->items[OPT_PRIMARY], true); XtSetSensitive (menuItems->items[OPT_LIB_POINTS], true); } if(graphWidgetToggleSet & (1<items[OPT_PRIMARY], false); XtSetSensitive (menuItems->items[OPT_LIB_POINTS], false); XtSetSensitive (menuItems->items[OPT_REF_PLAN], false); XmToggleButtonSetState(menuItems->items[OPT_PRIMARY], FALSE, FALSE); XmToggleButtonSetState(menuItems->items[OPT_LIB_POINTS], FALSE, FALSE); XmToggleButtonSetState(menuItems->items[OPT_REF_PLAN], FALSE, FALSE); } else { XtSetSensitive (menuItems->items[OPT_PRIMARY], true); XtSetSensitive (menuItems->items[OPT_PRIMARY], true); XtSetSensitive (menuItems->items[OPT_REF_PLAN], true); } } if(whichType == BIFURCATION) { XtUnmanageChild(menuItems->items[OPT_PERIOD_ANI]); XtUnmanageChild(menuItems->items[OPT_SAT_ANI]); XtManageChild(menuItems->items[OPT_DRAW_LABELS]); XtManageChild(menuItems->items[OPT_LABEL_NUMBERS]); XtSetSensitive (menuItems->items[OPT_LABEL_NUMBERS], (graphWidgetToggleSet & (1<items[OPT_DRAW_LABELS]); XtUnmanageChild(menuItems->items[OPT_LABEL_NUMBERS]); XtManageChild(menuItems->items[OPT_PERIOD_ANI]); XtManageChild(menuItems->items[OPT_SAT_ANI]); } } // A push item has no on/off state - it merely gets selected #define PUSH_ITEM(ITEM,NAME,KONST,FUNC) \ ITEM = XtCreateManagedWidget(NAME, \ xmPushButtonGadgetClass, pulldown, args, n); \ XtAddCallback(ITEM, XmNactivateCallback,\ (XtCallbackProc) FUNC, \ (XtPointer) KONST) // A toggle item has on/off state #define TOGGLE_ITEM(ITEM,NAME,KONST,FUNC) \ ITEM = XtCreateManagedWidget(NAME, \ xmToggleButtonGadgetClass, pulldown, args, n); \ XtAddCallback(ITEM, XmNvalueChangedCallback,\ (XtCallbackProc) FUNC, \ (XtPointer) KONST) // A separator draws a line between menu items #define SEP_ITEM(NAME) \ (void) XtCreateManagedWidget("separator", \ xmSeparatorGadgetClass, pulldown, NULL, 0) //////////////////////////////////////////////////////////////////////// // // This creates the File menu and all its items. // static Widget buildFileMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget items[4]; Widget pulldown; Arg args[8]; int n; Arg popupargs[2]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"fileMenu", popupargs, popupn); // Accelerators are keyboard shortcuts for the menu items const char *openAccel = "Ctrlo"; const char *saveAccel = "Ctrls"; const char *quitAccel = "Ctrlq"; XmString openAccelText = XmStringCreate((char *)"Ctrl+o", (char *)XmSTRING_DEFAULT_CHARSET); XmString saveAccelText = XmStringCreate((char *)"Ctrl+s", (char *)XmSTRING_DEFAULT_CHARSET); XmString printAccelText = XmStringCreate((char *)"Ctrl+p", (char *)XmSTRING_DEFAULT_CHARSET); XmString quitAccelText = XmStringCreate((char *)"Ctrl+q", (char *)XmSTRING_DEFAULT_CHARSET); n = 0; XtSetArg(args[n], XmNaccelerator, openAccel); n++; XtSetArg(args[n], XmNacceleratorText, openAccelText); n++; PUSH_ITEM(items[0], "Open...", OPEN_ITEM, fileMenuPick); n = 0; XtSetArg(args[n], XmNaccelerator, saveAccel); n++; XtSetArg(args[n], XmNacceleratorText, saveAccelText); n++; PUSH_ITEM(items[1], "Export...", SAVE_ITEM, fileMenuPick); n = 0; const char *printAccel = "Ctrlp"; XtSetArg(args[n], XmNaccelerator, printAccel); n++; XtSetArg(args[n], XmNacceleratorText, printAccelText); n++; PUSH_ITEM(items[2], "Print...", PRINT_ITEM, fileMenuPick); SEP_ITEM("separator"); n = 0; XtSetArg(args[n], XmNaccelerator, quitAccel); n++; XtSetArg(args[n], XmNacceleratorText, quitAccelText); n++; PUSH_ITEM(items[3], "Quit", QUIT_ITEM, fileMenuPick); XtManageChildren(items, 4); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Help menu and all its items. // static Widget buildHelpMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget items[2]; Widget pulldown; Arg args[8]; int n; // Tell motif to create the menu in the popup plane Arg popupargs[2]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"helpMenu", popupargs, popupn); n = 0; PUSH_ITEM(items[0], "About", ITEM_ONE, showAboutDialog); SEP_ITEM("separator"); n = 0; PUSH_ITEM(items[1], "HELP", ITEM_TWO, showHelpDialog); XtManageChildren(items, 2); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the TYPE menu and all its items. // static Widget buildOptionMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget pulldown; Arg args[13]; int n; EditMenuItems *menuItems = new EditMenuItems; menuItems->items = new Widget[XtNumber (graphWidgetItems)]; // Tell motif to create the menu in the popup plane Arg popupargs[XtNumber (graphWidgetItems)]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"optionMenu", popupargs, popupn); XtAddCallback(pulldown, XmNmapCallback, (XtCallbackProc) optMenuDisplay, (XtPointer) menuItems); n = 0; int mq = 0; XtSetArg(args[n], XmNuserData, menuItems); n++; if(!useR3B) { TOGGLE_ITEM(menuItems->items[OPT_PERIOD_ANI], "Hightlight Orbit", OPT_PERIOD_ANI, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_SAT_ANI], "Orbit Animation", OPT_SAT_ANI, optMenuPick); ++mq; } TOGGLE_ITEM(menuItems->items[OPT_REF_PLAN], "Draw Reference Plane", OPT_REF_PLAN, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_REF_SPHERE], "Draw Reference Sphere", OPT_REF_SPHERE,optMenuPick); ++mq; if(useR3B) { TOGGLE_ITEM(menuItems->items[OPT_PRIMARY], "Draw Primaries", OPT_PRIMARY, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_LIB_POINTS], "Draw Libration Pts", OPT_LIB_POINTS, optMenuPick); ++mq; SEP_ITEM("separator"); TOGGLE_ITEM(menuItems->items[OPT_PERIOD_ANI], "Orbit Animation", OPT_PERIOD_ANI, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_SAT_ANI], "Satellite Animation", OPT_SAT_ANI, optMenuPick); ++mq; } TOGGLE_ITEM(menuItems->items[OPT_DRAW_LABELS], "Draw Labels", OPT_DRAW_LABELS, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_LABEL_NUMBERS], "Show Label Numbers", OPT_LABEL_NUMBERS, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_BACKGROUND], "Draw Background", OPT_BACKGROUND, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_LEGEND], "Add Legend", OPT_LEGEND, optMenuPick); ++mq; TOGGLE_ITEM(menuItems->items[OPT_NORMALIZE_DATA], "Normalize Data", OPT_NORMALIZE_DATA, optMenuPick); ++mq; if (useR3B) { XtManageChildren(menuItems->items, mq); } else { XtManageChildren(menuItems->items, OPT_REF_SPHERE+1); XtManageChildren(&menuItems->items[OPT_PERIOD_ANI], mq-OPT_REF_SPHERE-1); } Widget pushitem; SEP_ITEM("separator"); PUSH_ITEM(pushitem, "PREFERENCES", ITEM_ONE, createPreferDialog); XtManageChild(pushitem); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Edit menu and all its items. // static Widget buildCenterMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget pulldown; Arg args[4]; int n; coordSystemMenuItems = new EditMenuItems; coordSystemMenuItems->items = new Widget[4]; coordSystemMenuItems->which = whichCoordSystem; // Tell motif to create the menu in the popup plane Arg popupargs[4]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"editMenu", popupargs, popupn); XtAddCallback(pulldown, XmNmapCallback, (XtCallbackProc)centerMenuDisplay, (XtPointer) coordSystemMenuItems); n = 0; XtSetArg(args[n], XmNuserData, coordSystemMenuItems); n++; XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++; TOGGLE_ITEM(coordSystemMenuItems->items[0], "Rotating Frame", ROTATING_F, editMenuPick); SEP_ITEM("separator"); TOGGLE_ITEM(coordSystemMenuItems->items[1], "Bary Centered", INERTIAL_B, editMenuPick); TOGGLE_ITEM(coordSystemMenuItems->items[2], "Big Primary Centered", INERTIAL_S, editMenuPick); TOGGLE_ITEM(coordSystemMenuItems->items[3], "Small Primary Centered", INERTIAL_E, editMenuPick); XtManageChildren(coordSystemMenuItems->items, 4); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the STYLE menu and all its items. // static Widget buildStyleMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget pulldown; Arg args[5]; int n; styleMenuItems = new EditMenuItems; styleMenuItems->items = new Widget[5]; styleMenuItems->which = whichStyle; // Tell motif to create the menu in the popup plane Arg popupargs[5]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"styleMenu", popupargs, popupn); XtAddCallback(pulldown, XmNmapCallback, (XtCallbackProc) styleMenuDisplay, (XtPointer) styleMenuItems); n = 0; XtSetArg(args[n], XmNuserData, styleMenuItems); n++; XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++; TOGGLE_ITEM(styleMenuItems->items[0], "Line", LINE, styleMenuPick); TOGGLE_ITEM(styleMenuItems->items[1], "Tube", TUBE, styleMenuPick); TOGGLE_ITEM(styleMenuItems->items[2], "Surface", SURFACE, styleMenuPick); TOGGLE_ITEM(styleMenuItems->items[3], "Mesh Points", MESH_POINTS, styleMenuPick); TOGGLE_ITEM(styleMenuItems->items[4], "All Points", ALL_POINTS, styleMenuPick); XtManageChildren(styleMenuItems->items, 5); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the Coordinates menu and all its items. // static Widget buildCoordMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget pulldown; Arg args[3]; int n; coordMenuItems = new EditMenuItems; coordMenuItems->items = new Widget[6]; coordMenuItems->which = whichCoord; Arg popupargs[3]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"coordMenu", popupargs, popupn); XtAddCallback(pulldown, XmNmapCallback, (XtCallbackProc) coordMenuDisplay, (XtPointer) coordMenuItems); n = 0; XtSetArg(args[n], XmNuserData, coordMenuItems); n++; XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++; TOGGLE_ITEM(coordMenuItems->items[0], "NONE", NO_COORD, coordMenuPick); TOGGLE_ITEM(coordMenuItems->items[1], "Coord Center", COORDORIGIN, coordMenuPick); TOGGLE_ITEM(coordMenuItems->items[2], "Left and Back ", LEFTBACK, coordMenuPick); TOGGLE_ITEM(coordMenuItems->items[3], "Left and Ahead", LEFTAHEAD, coordMenuPick); TOGGLE_ITEM(coordMenuItems->items[4], "At Origin", COORD_AT_ORIGIN, coordMenuPick); SEP_ITEM("separator"); TOGGLE_ITEM(coordMenuItems->items[5], "Draw Scale", DRAW_TICKER, coordMenuPick); XtManageChildren(coordMenuItems->items, 6); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the TYPE menu and all its items. // static Widget buildTypeMenu(Widget menubar) // //////////////////////////////////////////////////////////////////////// { Widget pulldown; Arg args[2]; int n; typeMenuItems = new EditMenuItems; typeMenuItems->items = new Widget[2]; typeMenuItems->which = whichType; // Tell motif to create the menu in the popup plane Arg popupargs[2]; int popupn = 0; pulldown = XmCreatePulldownMenu(menubar, (char *)"typeMenu", popupargs, popupn); XtAddCallback(pulldown, XmNmapCallback, (XtCallbackProc) typeMenuDisplay, (XtPointer) typeMenuItems); n = 0; XtSetArg(args[n], XmNuserData, typeMenuItems); n++; XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++; TOGGLE_ITEM(typeMenuItems->items[0], "Solution", SOLUTION, typeMenuPick); TOGGLE_ITEM(typeMenuItems->items[1], "Bifurcation", BIFURCATION, typeMenuPick); XtManageChildren(typeMenuItems->items, 2); return pulldown; } //////////////////////////////////////////////////////////////////////// // // This creates the pulldown menu bar and its menus. // static Widget buildMenu(Widget parent) // //////////////////////////////////////////////////////////////////////// { Widget menuButtons[7]; Widget pulldown2; Widget pulldown1, pulldown3, pulldown4, pulldown5, pulldown6, pulldown7; Arg args[8]; int n, m; // menu bar Widget menubar = XmCreateMenuBar(parent, (char *)"menuBar", NULL, 0); #ifndef LESSTIF_VERSION XtVaSetValues (menubar, XmNshadowThickness, 1, NULL); #endif pulldown1 = buildFileMenu(menubar); if(useR3B) pulldown2 = buildCenterMenu(menubar); pulldown3 = buildStyleMenu(menubar); pulldown4 = buildTypeMenu(menubar); pulldown7 = buildCoordMenu(menubar); pulldown5 = buildOptionMenu(menubar); pulldown6 = buildHelpMenu(menubar); #ifdef USE_BK_COLOR // set the background color for the pull down menus. XtVaSetValues (pulldown1, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (pulldown2, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (pulldown3, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (pulldown4, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (pulldown5, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (pulldown6, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // the text in the menubar for these menus n = 0; m=0; XtSetArg(args[n], XmNsubMenuId, pulldown1); n++; menuButtons[m] = XtCreateManagedWidget("File", xmCascadeButtonGadgetClass, menubar, args, n); ++m; n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown4); n++; menuButtons[m] = XtCreateManagedWidget("Type", xmCascadeButtonGadgetClass, menubar, args, n); ++m; n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown3); n++; menuButtons[m] = XtCreateManagedWidget("Style", xmCascadeButtonGadgetClass, menubar, args, n); ++m; n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown7); n++; menuButtons[m] = XtCreateManagedWidget("Draw Coord", xmCascadeButtonGadgetClass, menubar, args, n); ++m; if(useR3B) { n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown2); n++; menuButtons[m] = XtCreateManagedWidget("Center", xmCascadeButtonGadgetClass, menubar, args, n); ++m; } n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown5); n++; menuButtons[m] = XtCreateManagedWidget("Options", xmCascadeButtonGadgetClass, menubar, args, n); ++m; n = 0; XtSetArg(args[n], XmNsubMenuId, pulldown6); n++; XtSetArg(args[n], XmNmenuHelpWidget, pulldown6); n++; menuButtons[m] = XtCreateManagedWidget("Help", xmCascadeButtonGadgetClass, menubar, args, n); ++m; // manage the menu buttons XtManageChildren(menuButtons, m); return menubar; } //////////////////////////////////////////////////////////////////////// // static void dimensionToggledCB(Widget w, XtPointer client_data, XtPointer cbs) // //////////////////////////////////////////////////////////////////////// { static bool buttonState = setShow3D; buttonState = !buttonState; if(buttonState) { setShow3D = true; XtSetSensitive (zAxisList, true); setListValue(); XmString xString = XmStringCreateLocalized((char *)"3D"); XtVaSetValues (w, XmNlabelString, xString, NULL); XmStringFree(xString); } else { setShow3D = false; zCoordIndices.clear(); zCoordIndices.push_back(-1); XtSetSensitive (zAxisList, false); XmString xString = XmStringCreateLocalized((char *)"2D"); XtVaSetValues (w, XmNlabelString, xString, NULL); XmStringFree(xString); } if(whichType != BIFURCATION) setShow3DSol = setShow3D; else setShow3DBif = setShow3D; updateScene(); } //////////////////////////////////////////////////////////////////////// // static void createBdBoxCB(Widget w, XtPointer client_data, XtPointer cbs) // //////////////////////////////////////////////////////////////////////// { static bool btnState = false; SoSeparator * scene = (SoSeparator *) client_data; btnState = !btnState; if(btnState) scene->addChild(createBoundingBox()); else { SoSeparator * bdBox = (SoSeparator *)SoNode::getByName("bdBox"); scene->removeChild(bdBox); } } //////////////////////////////////////////////////////////////////////// // // This creates the main window contents. In this case, we have a // menubar at the top of the window, and a render area filling out // the remainder. These widgets are layed out with a Motif form widget. // static void buildMainWindow(Widget parent, SoSeparator *root) // //////////////////////////////////////////////////////////////////////// { Arg args[15]; int n,i; SoSeparator *sceneGraph = new SoSeparator; sceneGraph->ref(); SoEventCallback *mouseEventCB = new SoEventCallback; sceneGraph->addChild(mouseEventCB); sceneGraph->addChild(root); // build the toplevel widget topform = XtCreateWidget("topform", xmFormWidgetClass, parent,NULL, 0); // build menubar Widget menubar = buildMenu(topform); #ifdef USE_BK_COLOR XtVaSetValues (topform, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (menubar, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // build carrier for the x, y, z, and label lists. Widget listCarrier= XtCreateWidget("ListCarrier", xmFormWidgetClass, topform, NULL, 0); #ifdef USE_BK_COLOR XtVaSetValues (listCarrier, XtVaTypedArg, XmNbackground, XmRString, "white", 4, NULL); #endif //build the xAxis drop down list int nItems = xAxis.size(); xList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); for (i = 0; i < nItems; i++) xList[i] = XmStringCreateLocalized (const_cast(xAxis[i].c_str())); xAxisList=XtVaCreateManagedWidget ("xAxis", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, xList, XmNselectedPosition, xCoordIndices[0], XmNcolumns, 2, XmNmarginHeight, 1, XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(xAxisList, xList, nItems, 10, 60, 2); // Add Callback function for the x-axis drop down list XtAddCallback (xAxisList, XmNselectionCallback, xListCallBack, NULL); #ifdef USE_BK_COLOR XtVaSetValues (xAxisList, XtVaTypedArg, XmNbackground, XmRString, "white", 4, NULL); #endif // build the yAxis drop down list nItems = yAxis.size(); yList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); for (i = 0; i < nItems; i++) yList[i] = XmStringCreateLocalized(const_cast(yAxis[i].c_str())); yAxisList=XtVaCreateManagedWidget ("yAxis", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, yList, XmNselectedPosition, yCoordIndices[0], XmNcolumns, 2, XmNmarginHeight, 1, XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(yAxisList, yList, nItems, 10, 60, 2); XtAddCallback (yAxisList, XmNselectionCallback, yListCallBack, NULL); #ifdef USE_BK_COLOR XtVaSetValues (yAxisList, XtVaTypedArg, XmNbackground, XmRString, "white", 4, NULL); #endif // build the zAxis drop down list nItems = zAxis.size(); zList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); for (i = 0; i < nItems; i++) zList[i] = XmStringCreateLocalized(const_cast(zAxis[i].c_str())); zAxisList=XtVaCreateManagedWidget ("zAxis", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, zList, XmNselectedPosition, zCoordIndices[0], XmNcolumns, 2, XmNmarginHeight, 1, XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(zAxisList, zList, nItems, 10, 60, 2); // Add Callback function for the z-axis drop down list XtAddCallback (zAxisList, XmNselectionCallback, zListCallBack, NULL); #ifdef USE_BK_COLOR XtVaSetValues (zAxisList, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // build the LABELs drop down list nItems = labels.size(); lblList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); for (i = 0; i < nItems; i++) lblList[i] = XmStringCreateLocalized (const_cast(labels[i].c_str())); labelsList=XtVaCreateManagedWidget ("Labels", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, lblList, XmNcolumns, 6, XmNmarginHeight, 1, XmNselectedPosition, lblChoice[0]+LBL_OFFSET, //lblIndices[0], XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(labelsList, lblList, nItems, 10, 86, 6); for (i = 0; i < nItems; i++) XmStringFree(lblList[i]); // Add Callback function for the LABELs drop down list XtAddCallback (labelsList, XmNselectionCallback, lblListCallBack, NULL); #ifdef USE_BK_COLOR XtVaSetValues (labelsList, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (labelsList, XtVaTypedArg, XmNforeground, XmRString, "red", 4, NULL); #endif // build the COLORING Method drop down list nItems = coloringMethodList.size(); clrMethodList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); for (i = 0; i < nItems; ++i) clrMethodList[i] = XmStringCreateLocalized(const_cast(coloringMethodList[i].c_str())); colorMethodSeletionList=XtVaCreateManagedWidget ("coloringMethodlist", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, clrMethodList, XmNcolumns, 5, XmNmarginHeight, 1, XmNselectedPosition, (coloringMethod < 0 ? coloringMethod+CL_SP_ITEMS : coloringMethod+specialColorItems), XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(colorMethodSeletionList, clrMethodList, nItems, 10, 80, 5); XtAddCallback (colorMethodSeletionList, XmNselectionCallback, colorMethodSelectionCB, NULL); // build the numPeriodAnimated drop down list nItems = 7; char (*numberPList)[5] = new char [nItems][5]; XmStringTable numPList = (XmStringTable) XtMalloc(nItems * sizeof (XmString *)); int iam = 1; sprintf(numberPList[0], "%i", 0); for (i = 0; i < nItems-2; ++i) { sprintf(numberPList[i+1], "%i", iam); iam *= 2; } sprintf(numberPList[nItems-1], "%s", "inf"); for (i = 0; i < nItems; ++i) numPList[i] = XmStringCreateLocalized (numberPList[i]); if (numPeriodAnimated > 0) i = ((int)(log(numPeriodAnimated)/log(2.0))) + 1; else if (numPeriodAnimated == 0) i = 0; else i = nItems - 1; Widget numPeriodAnimatedList=XtVaCreateManagedWidget ("list", xmComboBoxWidgetClass, listCarrier, XmNcomboBoxType, XmDROP_DOWN_COMBO_BOX, XmNitemCount, nItems, XmNitems, numPList, XmNcolumns, 3, XmNmarginHeight, 1, XmNselectedPosition, i, XmNpositionMode, XmZERO_BASED, NULL); lessTifFixupComboBox(numPeriodAnimatedList, numPList, nItems, 10, 70, 3); // Add Callback function for the numberPeriodAnimated drop down list XtAddCallback (numPeriodAnimatedList, XmNselectionCallback, numPeriodAnimatedCB, NULL); for (i = 0; i < nItems; i++) XmStringFree(numPList[i]); XtFree((char *)numPList); // delete []numberPList; //----------------------------------------------------------------> Nov 06 End // create labels for the x, y, z, and labels drop down lists Widget xLbl = XtVaCreateManagedWidget("X",xmLabelWidgetClass, listCarrier, NULL); Widget yLbl = XtVaCreateManagedWidget("Y",xmLabelWidgetClass, listCarrier, NULL); Widget zLbl = XtVaCreateManagedWidget("Z",xmLabelWidgetClass, listCarrier, NULL); Widget lLbl = XtVaCreateManagedWidget("Label",xmLabelWidgetClass, listCarrier, NULL); Widget colorLbl = XtVaCreateManagedWidget("Color",xmLabelWidgetClass, listCarrier, NULL); Widget numPeriodLbl = XtVaCreateManagedWidget("Period",xmLabelWidgetClass, listCarrier, NULL); Widget orbitSldLbl = XtVaCreateManagedWidget("Orbit",xmLabelWidgetClass, listCarrier, NULL); Widget satSldLbl = XtVaCreateManagedWidget(useR3B ? "Sat " : "Anim",xmLabelWidgetClass, listCarrier, NULL); Widget spLbl = XtVaCreateManagedWidget(" Line ",xmLabelWidgetClass, listCarrier, NULL); Widget spLbl2 = XtVaCreateManagedWidget("Thickness",xmLabelWidgetClass, listCarrier, NULL); #ifdef USE_BK_COLOR //set the background color for the labels XtVaSetValues (xLbl, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (yLbl, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (zLbl, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); XtVaSetValues (lLbl, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // Create slider to control speed n = 0; XtSetArg(args[n], XmNminimum, MIN_SAT_SPEED); n++; XtSetArg(args[n], XmNmaximum, MAX_SAT_SPEED); n++; XtSetArg(args[n], XmNvalue, satSpeed*100);n++;//(MAX_SPEED-MIN_SPEED)/2.0); n++; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++; if(options[OPT_SAT_ANI]) { XtSetArg(args[n], XmNeditable, TRUE); n++; } else { XtSetArg(args[n], XmNeditable, FALSE); n++; } satAniSpeedSlider = XtCreateWidget("Speed", xmScaleWidgetClass, listCarrier, args, n); #ifdef USE_BK_COLOR XtVaSetValues (satAniSpeedSlider, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // Callbacks for the slider XtAddCallback(satAniSpeedSlider, XmNvalueChangedCallback, satSpeedCB, NULL); n = 0; XtSetArg(args[n], XmNminimum, MIN_ORBIT_SPEED); n++; XtSetArg(args[n], XmNmaximum, MAX_ORBIT_SPEED); n++; XtSetArg(args[n], XmNvalue, orbitSpeed*50);n++; XtSetArg(args[n], XmNorientation, XmHORIZONTAL); n++; if(options[OPT_PERIOD_ANI]) { XtSetArg(args[n], XmNeditable, TRUE); n++; } else { XtSetArg(args[n], XmNeditable, FALSE); n++; } orbitAniSpeedSlider = XtCreateWidget("Speed2", xmScaleWidgetClass, listCarrier, args, n); #ifdef USE_BK_COLOR XtVaSetValues (orbitAniSpeedSlider, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif // Callbacks for the slider2 XtAddCallback(orbitAniSpeedSlider, XmNvalueChangedCallback, orbitSpeedCB, NULL); // create spinbox for the line width control. n = 0; XtSetArg (args[n], XmNarrowSize, 12); n++; XtSetArg (args[n], XmNspinBoxChildType, XmNUMERIC); n++; XtSetArg (args[n], XmNminimumValue, 10); n++; XtSetArg (args[n], XmNdecimalPoints, 1); n++; XtSetArg (args[n], XmNincrementValue, 1); n++; XtSetArg (args[n], XmNeditable, TRUE); n++; XtSetArg (args[n], XmNpositionType, XmPOSITION_VALUE); n++; XtSetArg (args[n], XmNposition, lineWidthScaler+10); n++; XtSetArg (args[n], XmNcolumns, 3); n++; XtSetArg (args[n], XmNwrap, FALSE); n++; #ifdef LESSTIF_VERSION XtSetArg (args[n], XmNmaximumValue, 110); n++; Widget spinBox = XmCreateSpinBox (listCarrier, (char *)"spinBox", args, 1); Widget tf = XmCreateTextField(spinBox, (char *)"tf", args+1, n-1); XtManageChild(tf); XtManageChild(spinBox); XtAddCallback(tf, XmNvalueChangedCallback, lineWidthCB, (XtPointer)tf); #else XtSetArg (args[n], XmNmaximumValue, 100); n++; Widget spinBox = XmCreateSimpleSpinBox (listCarrier, (char *)"spinBox", args, n); // Callbacks for the spinebox XtAddCallback(spinBox, XmNvalueChangedCallback, lineWidthCB, (XtPointer)spinBox); #endif // create RENDER AREA FOR THE graphics. #ifdef USE_EXAM_VIEWER renderArea = new SoXtExaminerViewer(topform); #else renderArea = new SoXtRenderArea(topform); #endif renderArea->setSize(SbVec2s(winWidth, winHeight)); renderArea->setBackgroundColor(envColors[0]); if(useR3B) renderArea->setTransparencyType(SoGLRenderAction::SORTED_OBJECT_BLEND); #ifdef USE_EXAM_VIEWER n = 0; Widget newButton = XmCreatePushButton(renderArea->getAppPushButtonParent(), (char *)"BOX", NULL, 0); XtAddCallback(newButton, XmNactivateCallback, createBdBoxCB, sceneGraph); renderArea->addAppPushButton(newButton); char xString[5]; if(setShow3D) { XtSetSensitive (zAxisList, true); strcpy(xString,"3D"); } else { strcpy(xString,"2D"); XtSetSensitive (zAxisList, false); } dimButton = XmCreatePushButton(renderArea->getAppPushButtonParent(), xString, NULL, 0); XtAddCallback(dimButton, XmNactivateCallback, dimensionToggledCB, sceneGraph); renderArea->addAppPushButton(dimButton); // used for printing scene to ps files vwrAndScene = new ViewerAndScene; vwrAndScene->scene = renderArea->getSceneGraph(); vwrAndScene->viewer = renderArea; #endif // layout //Positioning the x-label for the x-axis drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNtopOffset, 3 ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomOffset, 3 ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE); n++; XtSetValues(xLbl, args, n); //Positioning the x-axis' drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNtopOffset, 3 ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNbottomOffset, 3 ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNleftWidget, xLbl ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(xAxisList, args, n); //Positioning the y-label for the y-axis drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xLbl ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(yLbl, args, n); //Positioning the y-axis' drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, yLbl ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(yAxisList, args, n); //Positioning the z-label for the z-axis drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xLbl ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, yAxisList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(zLbl, args, n); //Positioning the z-axis' drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, zLbl ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(zAxisList, args, n); //Positioning the LABELs' drop down list label n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xLbl ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, zAxisList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(lLbl, args, n); //Positioning the LABELs' drop down list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, lLbl ); n++; XtSetArg(args[n], XmNleftOffset, 0 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(labelsList, args, n); //Positioning the label for the Coloring method list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xLbl ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, labelsList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(colorLbl, args, n); // layout the coloring method selection on the listCarrier. n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, colorLbl ); n++; XtSetArg(args[n], XmNleftOffset, 0 ); n++; XtSetValues(colorMethodSeletionList,args,n); XtManageChild(colorMethodSeletionList); //Positioning the label for the number of period seleciton list n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xLbl ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, colorMethodSeletionList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(numPeriodLbl, args, n); // layout the numPeriodAnimatedList on the listCarrier. n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; //labelsList ); n++; XtSetArg(args[n], XmNleftWidget, numPeriodLbl ); n++; XtSetArg(args[n], XmNleftOffset, 0 ); n++; XtSetValues(numPeriodAnimatedList,args,n); XtManageChild(numPeriodAnimatedList); // spinbox labels and spinboxes // layout the spinBox label on the listCarrier. n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; // XtSetArg(args[n], XmNleftWidget, colorMethodSeletionList ); n++; XtSetArg(args[n], XmNleftWidget, numPeriodAnimatedList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetValues(spLbl, args, n); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNtopWidget, spLbl ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; // XtSetArg(args[n], XmNleftWidget, colorMethodSeletionList ); n++; // XtSetArg(args[n], XmNleftWidget, labelsList); n++; XtSetArg(args[n], XmNleftWidget, numPeriodAnimatedList ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetValues(spLbl2, args, n); // layout the spinBox on the listCarrier. n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, spLbl ); n++; XtSetValues(spinBox, args, n); XtManageChild(spinBox); //Positioning the label for the slider bars n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_OPPOSITE_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, spinBox ); n++; XtSetArg(args[n], XmNleftOffset, 20 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(satSldLbl, args, n); //Positioning the label for the slider bars n = 0; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_OPPOSITE_WIDGET ); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, spinBox ); n++; XtSetArg(args[n], XmNleftOffset, 20 ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_NONE ); n++; XtSetValues(orbitSldLbl, args, n); // Layout the slider bar on the listCarrier n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, satSldLbl ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetValues(satAniSpeedSlider, args, n); XtManageChild(satAniSpeedSlider); n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNtopWidget, satAniSpeedSlider ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET ); n++; XtSetArg(args[n], XmNleftWidget, satSldLbl ); n++; XtSetArg(args[n], XmNleftOffset, 5 ); n++; XtSetValues(orbitAniSpeedSlider, args, n); XtManageChild(orbitAniSpeedSlider); // Positioning the menu bar. n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++; XtSetValues(menubar, args, n); // Positioning the listCarrier. n = 0; #ifdef LIST_UNDER_MENUBAR XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, menubar ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_NONE); n++; #else XtSetArg(args[n], XmNtopAttachment, XmATTACH_NONE); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++; #endif XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetValues(listCarrier, args, n); // Positioning the Render Area n = 0; #ifdef LIST_UNDER_MENUBAR XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, xAxisList ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM ); n++; #else XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNtopWidget, menubar ); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNbottomWidget, xAxisList ); n++; #endif XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM ); n++; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM ); n++; XtSetValues(renderArea->getWidget(), args, n); // manage the children XtManageChild(menubar); XtManageChild(listCarrier); updateScene(); // these two lines are the third method for showing in 2D/3D renderArea->setSceneGraph(sceneGraph); renderArea->show(); XtManageChild(topform); #ifdef USE_BK_COLOR XtVaSetValues (mainWindow, XtVaTypedArg, XmNbackground, XmRString, "white", 6, NULL); #endif mouseEventCB->addEventCallback( SoMouseButtonEvent::getClassTypeId(), myMousePressCB, renderArea->getSceneManager()->getSceneGraph()); } //////////////////////////////////////////////////////////////////////// // // When the line color changed, this function will be raised. // static void lineColorValueChangedCB(Widget w, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmSpinBoxCallbackStruct *sb = (XmSpinBoxCallbackStruct *) call_data; int value; int which; int lineNumber=0, columnNumber =0; if (sb->reason == XmCR_OK) { XtVaGetValues (sb->widget, XmNuserData, &which, NULL); XtVaGetValues (sb->widget, XmNposition, &value, NULL); lineNumber = which / 3; columnNumber = which % 3; lineColorTemp[lineNumber][columnNumber] = value/10.0; } } //////////////////////////////////////////////////////////////////////// // // When the line pattern selection changed, this function will be raised. // static void linePatternValueChangedCB(Widget w, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmSpinBoxCallbackStruct *sb = (XmSpinBoxCallbackStruct *) call_data; int position, which; if (sb->reason == XmCR_OK) { XtVaGetValues (w, XmNposition, &position, NULL); XtVaGetValues (w, XmNuserData, &which, NULL); linePatternTemp[which] = systemLinePatternValue[position]; } } //////////////////////////////////////////////////////////////////////// // // This creates the COLOR and LINE preference sheet stuff. // static Widget createLineColorAndPatternPrefSheetGuts(Widget parent, char *name, int id) // //////////////////////////////////////////////////////////////////////// { Widget widgetList[7]; Arg args[15]; int n; Widget form = XtCreateWidget("", xmFormWidgetClass, parent, NULL, 0); n=0; XtSetArg(args[n], XmNcolumns, 12); n++; widgetList[0] = XtCreateWidget(name, xmLabelGadgetClass, form, args, n); XtManageChild (widgetList[0]); Widget spin = XmCreateSpinBox (form, (char *)"spin", NULL, 0); XtAddCallback (spin, XmNvalueChangedCallback, lineColorValueChangedCB, NULL); // Create the red field n = 0; XtSetArg (args[n], XmNspinBoxChildType, XmNUMERIC) ; n++; XtSetArg (args[n], XmNcolumns, 3 ) ; n++; XtSetArg (args[n], XmNeditable, FALSE ) ; n++; XtSetArg (args[n], XmNminimumValue, 0 ) ; n++; XtSetArg (args[n], XmNmaximumValue, 10 ) ; n++; XtSetArg (args[n], XmNdecimalPoints, 1 ) ; n++; XtSetArg (args[n], XmNposition, lineColor[id][0]*10) ; n++; XtSetArg (args[n], XmNwrap, TRUE ) ; n++; XtSetArg (args[n], XmNuserData, id*3 ) ; n++; widgetList[1]= XmCreateTextField (spin, (char *)"redText", args, n); XtManageChild (widgetList[1]); // Create the green field n = 0; XtSetArg (args[n], XmNspinBoxChildType,XmNUMERIC); n++; XtSetArg (args[n], XmNcolumns, 3 ); n++; XtSetArg (args[n], XmNeditable, FALSE ); n++; XtSetArg (args[n], XmNminimumValue, 0 ); n++; XtSetArg (args[n], XmNmaximumValue, 10 ); n++; XtSetArg (args[n], XmNdecimalPoints, 1 ); n++; XtSetArg (args[n], XmNwrap, TRUE ); n++; XtSetArg (args[n], XmNposition, lineColor[id][1]*10); n++; XtSetArg (args[n], XmNuserData, id*3+1 ); n++; widgetList[2]= XmCreateTextField (spin, (char *)"greenText", args, n); XtManageChild (widgetList[2]); // Create the blue field n = 0; XtSetArg (args[n], XmNspinBoxChildType,XmNUMERIC); n++; XtSetArg (args[n], XmNcolumns, 3 ); n++; XtSetArg (args[n], XmNeditable, FALSE ); n++; XtSetArg (args[n], XmNminimumValue, 0 ); n++; XtSetArg (args[n], XmNmaximumValue, 10 ); n++; XtSetArg (args[n], XmNdecimalPoints, 1 ); n++; XtSetArg (args[n], XmNwrap, TRUE ); n++; XtSetArg (args[n], XmNposition, lineColor[id][2]*10); n++; XtSetArg (args[n], XmNuserData, id*3+2 ); n++; widgetList[3]= XmCreateTextField (spin, (char *)"blueText", args, n); XtManageChild (widgetList[3]); // create the line pattern int lengthOfSysPatternArray = XtNumber( systemLinePatternLookAndFeel ); XmStringTable strList = (XmStringTable) XtMalloc ( (unsigned) lengthOfSysPatternArray * sizeof (XmString *)); for (int i = 0; i < lengthOfSysPatternArray; i++) strList[i] = XmStringCreateLocalized ((char *)systemLinePatternLookAndFeel[i]); n = 0; XtSetArg (args[n], XmNspinBoxChildType, XmSTRING); n++; XtSetArg (args[n], XmNcolumns, 12 ) ; n++; XtSetArg (args[n], XmNeditable, FALSE); n++; XtSetArg (args[n], XmNnumValues, lengthOfSysPatternArray); n++; XtSetArg (args[n], XmNvalues, strList); n++; XtSetArg (args[n], XmNwrap, TRUE); n++; XtSetArg (args[n], XmNshadowThickness, 0); n++; XtSetArg (args[n], XmNuserData, id ); n++; #ifdef LESSTIF_VERSION Widget lpSpinBox = XmCreateSpinBox (form, (char *)"lpSimple", args, 0); Widget tf = XmCreateTextField(lpSpinBox, (char *)"tf", args, n); XtManageChild(tf); XtAddCallback(tf, XmNvalueChangedCallback, linePatternValueChangedCB, (XtPointer)tf); #else Widget lpSpinBox = XmCreateSimpleSpinBox (form, (char *)"lpsimple", args, n); XtAddCallback (lpSpinBox, XmNvalueChangedCallback, linePatternValueChangedCB, NULL); #endif for (int i = 0; i < lengthOfSysPatternArray; i++) XmStringFree (strList[i]); delete strList; // layout n = 0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNtopOffset, 8 ); n++; XtSetValues(widgetList[0], args, n); n = 0; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNleftWidget, widgetList[0] ); n++; XtSetArg(args[n], XmNleftOffset, 10 ); n++; XtSetValues(spin, args, n); n = 0; XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNrightOffset, 10 ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++; XtSetArg(args[n], XmNleftWidget, spin ); n++; XtSetArg(args[n], XmNleftOffset, 30 ); n++; XtSetValues(lpSpinBox, args, n); XtManageChild (spin); XtManageChild (lpSpinBox); XtManageChild (form); return form; } //////////////////////////////////////////////////////////////////////// // static Widget createColorAndLinePrefSheetHeader(Widget parent) // //////////////////////////////////////////////////////////////////////// { Widget widget; Arg args[6]; int n; // create a form to hold verything together Widget form = XtCreateWidget("", xmFormWidgetClass, parent, NULL, 0); // create the first line n=0; XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNtopOffset, 20 ); n++; XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++; XtSetArg(args[n], XmNbottomOffset, 10 ); n++; widget = XtCreateWidget("|PT TYPE| RED GREEN BLUE | LINE PATTERN |", xmLabelGadgetClass, form, args, n); XtManageChild(widget); return form; } /////////////////////////////////////////////////////////////////////// // // This simply creates the default parts of the pref dialog. // static void createLineAttrPrefSheetParts(Widget widgetList[], int &num, Widget form, const char** name) // //////////////////////////////////////////////////////////////////////// { for(int i=0; iset == XmSET) whichCoordSystemTemp = which; else whichCoordSystemTemp = 0; } //////////////////////////////////////////////////////////////////////// // static void createGraphCoordinateSystemFrameGuts(Widget frame) // //////////////////////////////////////////////////////////////////////// { int n; Arg args[12]; const char *coordSysItems[]= { "Rotating Frame", "Barycenter " , "Large Primary Center", "Small Primary Center" }; // create default selections n = 0; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); ++n; XtSetArg (args[n], XmNnumColumns, 4); ++n; Widget toggleBox = XmCreateRadioBox(frame, (char *)"radio", args, n); whichCoordSystemOld = whichCoordSystem; whichCoordSystemTemp = whichCoordSystem; for (unsigned int i = 0; i < XtNumber (coordSysItems); i++) { n = 0; if ((unsigned long)whichCoordSystem == (unsigned long)i) XtSetArg(args[n++], XmNset, XmSET); Widget w = XmCreateToggleButtonGadget (toggleBox, (char *)coordSysItems[i], args, n); XtAddCallback (w, XmNvalueChangedCallback, graphCoordinateSystemToggledCB, (XtPointer) i); XtManageChild (w); } XtManageChild (toggleBox); XtManageChild (frame); } //////////////////////////////////////////////////////////////////////// // static void graphStyleWidgetToggledCB(Widget widget, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { int which = (long) client_data; XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *) call_data; if (state->set == XmSET) whichStyleTemp = which; else whichStyleTemp = 0; } //////////////////////////////////////////////////////////////////////// // static void createGraphStyleFrameGuts(Widget frame) // //////////////////////////////////////////////////////////////////////// { int n; Arg args[12]; const char * graphStyleItems[]= { "Line Style", "Tube Style" , "Surface Style" }; // create default selections n = 0; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); ++n; XtSetArg (args[n], XmNnumColumns, 4); ++n; Widget toggleBox = XmCreateRadioBox(frame, (char *)"togglebox", args, n); whichStyleOld = whichStyle; whichStyleTemp = whichStyle; for (unsigned int i = 0; i < XtNumber (graphStyleItems); i++) { n = 0; if ((unsigned int)whichStyle == i) XtSetArg(args[n++], XmNset, XmSET); Widget w = XmCreateToggleButtonGadget (toggleBox, (char *)graphStyleItems[i], args, n); XtAddCallback (w, XmNvalueChangedCallback, graphStyleWidgetToggledCB, (XtPointer) i); XtManageChild (w); } XtManageChild (toggleBox); XtManageChild (frame); } //////////////////////////////////////////////////////////////////////// // static void graphTypeWidgetToggledCB(Widget widget, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { int which = (long) client_data; XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *) call_data; if (state->set == XmSET) whichTypeTemp = which; else whichTypeTemp = 0; } //////////////////////////////////////////////////////////////////////// // static void graphCoordWidgetToggledCB(Widget widget, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { int which = (long) client_data; XmToggleButtonCallbackStruct *state = (XmToggleButtonCallbackStruct *) call_data; if (state->set == XmSET) whichCoordTemp = which; else whichCoordTemp = 0; } //////////////////////////////////////////////////////////////////////// // static void createGraphTypeFrameGuts(Widget frame) // //////////////////////////////////////////////////////////////////////// { int n; Arg args[12]; const char * graphTypeItems[]={"Solution Diagram", "Bifurcation Diagram" }; // create default selections n = 0; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); ++n; XtSetArg (args[n], XmNnumColumns, 3); ++n; XtSetArg (args[n], XmNindicatorType, XmONE_OF_MANY_ROUND); ++n; XtSetArg (args[n], XmNindicatorOn, XmINDICATOR_CHECK); ++n; Widget toggleBox = XmCreateRadioBox(frame, (char *)"radiobox", args, n); whichTypeOld = whichType; whichTypeTemp = whichType; for (unsigned int i = 0; i < XtNumber (graphTypeItems); i++) { n = 0; if ((unsigned int)whichType == i) XtSetArg(args[n++], XmNset, XmSET); Widget w = XmCreateToggleButtonGadget (toggleBox, (char *)graphTypeItems[i], args, n); XtAddCallback (w, XmNvalueChangedCallback, graphTypeWidgetToggledCB, (XtPointer) i); XtManageChild (w); } XtManageChild (toggleBox); XtManageChild (frame); } //////////////////////////////////////////////////////////////////////// // // callback for all ToggleButtons. // static void defaultGraphWidgetToggledCB( Widget widget, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { int bit = (long) client_data; XmToggleButtonCallbackStruct *toggle_data = (XmToggleButtonCallbackStruct *) call_data; if (toggle_data->set == XmSET) graphWidgetToggleSetTemp |= (1 << bit); else graphWidgetToggleSetTemp &= ~(1 << bit); } //////////////////////////////////////////////////////////////////////// // static void createOptionFrameGuts(Widget frame) // //////////////////////////////////////////////////////////////////////// { int n; Arg args[12]; // create default selections n = 0; XtSetArg (args[n], XmNpacking, XmPACK_COLUMN); ++n; XtSetArg (args[n], XmNnumColumns, 4); ++n; Widget toggleBox = XmCreateRowColumn (frame, (char *)"togglebox", args, n); for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { if (!useR3B && (i == OPT_PRIMARY || i == OPT_LIB_POINTS)) continue; graphWidgetToggleSetOld = graphWidgetToggleSet; graphWidgetToggleSetTemp= graphWidgetToggleSet; n = 0; if (graphWidgetToggleSet & (1<which = whichTypeOld; whichStyle = whichStyleOld; whichStyleTemp = whichStyleOld; styleMenuItems->which = whichStyleOld; if (useR3B) { whichCoordSystem = whichCoordSystemOld; whichCoordSystemTemp = whichCoordSystemOld; coordSystemMenuItems->which = whichCoordSystemOld; } whichCoord = whichCoordOld; whichCoordTemp = whichCoordOld; coordMenuItems->which = whichCoordOld; // cancel the selections and recover the original values. graphWidgetToggleSetTemp = graphWidgetToggleSetOld; graphWidgetToggleSet = graphWidgetToggleSetOld; for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetOld & (1<which = whichTypeTemp; whichStyle = whichStyleTemp; whichStyleOld = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; whichCoordSystemOld = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; whichCoordOld = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; graphWidgetToggleSetOld = graphWidgetToggleSetTemp; for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<which = whichTypeTemp; whichStyle = whichStyleTemp; whichStyleOld = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; whichCoordSystemOld = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; whichCoordOld = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; graphWidgetToggleSetOld = graphWidgetToggleSetTemp; for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<which = whichTypeTemp; whichStyle = whichStyleTemp; styleMenuItems->which = whichStyleTemp; if (useR3B) { whichCoordSystem = whichCoordSystemTemp; coordSystemMenuItems->which = whichCoordSystemTemp; } whichCoord = whichCoordTemp; coordMenuItems->which = whichCoordTemp; graphWidgetToggleSet = graphWidgetToggleSetTemp; for (unsigned int i = 0; i < XtNumber (graphWidgetItems); i++) { options[i] = (graphWidgetToggleSetTemp & (1<value, (XmStringCharSet) XmSTRING_DEFAULT_CHARSET, &filename); if(fileMode == SAVE_ITEM) writeToFile(filename); else if(fileMode == PRINT_ITEM) { printToPostScript(root,filename,renderArea,100); } else if(fileMode == OPEN_ITEM) { deleteScene(); readFile(filename); } XtFree(filename); } //////////////////////////////////////////////////////////////////////// // // Brings up the "ABOUT" dialog // static void showAboutDialog() // //////////////////////////////////////////////////////////////////////// { static Widget dialog = (Widget) 0 ; XmString t; unsigned char modality = (unsigned char)XmDIALOG_FULL_APPLICATION_MODAL; const char *str; if (useR3B) str = " AUTO r3bplaut04\n\n" " Zhang, Chenghai, Dr. Eusebius J. Doedel\n\n " " Computer Science Department\n" " Concordia University\n\n" " Montreal, Quebec\n" " CANADA\n\n" " June, 2004 \n"; else str = " AUTO plaut04\n\n" " Zhang, Chenghai, Dr. Eusebius J. Doedel\n\n " " Computer Science Department\n" " Concordia University\n\n" " Montreal, Quebec\n" " CANADA\n\n" " August, 2004 \n"; if (!dialog) { Arg args[5]; int n = 0; XmString ok = XmStringCreateLocalized ((char *)"OK"); XtSetArg(args[n], XmNautoUnmanage, False); n++; XtSetArg(args[n], XmNcancelLabelString, ok); n++; dialog = XmCreateInformationDialog (topform, (char *)"About", args, n); Widget remove; remove = XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON); XtUnmanageChild(remove); XtAddCallback (dialog, XmNcancelCallback, showAboutCB, NULL); XtUnmanageChild (XtNameToWidget (dialog, "OK")); } t = XmStringCreateLocalized ((char *)str); XtVaSetValues (dialog, XmNmessageString, t, XmNdialogStyle, modality, NULL); XmStringFree (t); XtManageChild (dialog); } //////////////////////////////////////////////////////////////////////// // static void xListCallBack(Widget combo, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmComboBoxCallbackStruct *cbs = (XmComboBoxCallbackStruct *)call_data; char *manyChoice = (char *) XmStringUnparse (cbs->item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); if (cbs->reason == XmCR_SELECT && cbs->event != NULL) { char * tmp; tmp = strtok(manyChoice, ","); xCoordIndices.clear(); do { xCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solX = xCoordIndices; } else { dai.bifX = xCoordIndices; } updateScene(); } } //////////////////////////////////////////////////////////////////////// // static void yListCallBack(Widget combo, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmComboBoxCallbackStruct *cbs = (XmComboBoxCallbackStruct *)call_data; char *manyChoice = (char *) XmStringUnparse (cbs->item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); if (cbs->reason == XmCR_SELECT && cbs->event != NULL) { char * tmp; tmp = strtok(manyChoice, ","); yCoordIndices.clear(); do { yCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solY = yCoordIndices; } else { dai.bifY = yCoordIndices; } updateScene(); } } //////////////////////////////////////////////////////////////////////// // static void zListCallBack(Widget combo, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmComboBoxCallbackStruct *cbs = (XmComboBoxCallbackStruct *)call_data; char *manyChoice = (char *) XmStringUnparse (cbs->item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); if (cbs->reason == XmCR_SELECT && cbs->event != NULL) { char * tmp; tmp = strtok(manyChoice, ","); zCoordIndices.clear(); do { zCoordIndices.push_back((strcasecmp(tmp,"t")==0) ? 0 : atoi(tmp)); tmp = strtok(NULL,","); }while(tmp != NULL); if(whichType != BIFURCATION) { dai.solZ = zCoordIndices; } else { dai.bifZ = zCoordIndices; } updateScene(); } } //////////////////////////////////////////////////////////////////////// // static void lblListCallBack(Widget combo, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmComboBoxCallbackStruct *cbs = (XmComboBoxCallbackStruct *)call_data; int choice = (int) cbs->item_position - 1; int nItems = (whichType != BIFURCATION) ? mySolNode->totalLabels() : myBifNode->totalLabels(); char *manyChoice = (char *) XmStringUnparse (cbs->item_or_text, XmFONTLIST_DEFAULT_TAG, XmCHARSET_TEXT, XmCHARSET_TEXT, NULL, 0, XmOUTPUT_ALL); char * tmp; static int half = 2; tmp = strtok(manyChoice, ","); choice -= SP_LBL_ITEMS; lblIndices.clear(); if(choice <= MY_ALL || choice >= nItems) { do { lblIndices.push_back((strcasecmp(tmp,"all")==0) ? numLabels + MY_ALL : atoi(tmp)-myLabels[0]); tmp = strtok(NULL,","); }while(tmp != NULL); half = 2; } else if(choice == MY_HALF) // -3 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) if(abs(clientData.labelIndex[j][2])!= 4 || (j+1)%half == 0) lblIndices.push_back(j); half *= 2; } else if(choice == MY_SPEC) // -2 { for(int j = 0; j < numLabels - SP_LBL_ITEMS; j++) if(clientData.labelIndex[j][2] != TYPE_UZ && clientData.labelIndex[j][2] != TYPE_RG && clientData.labelIndex[j][2] != TYPE_EP_ODE && clientData.labelIndex[j][2] != TYPE_MX) lblIndices.push_back(j); half = 2; } else if(choice == MY_NONE) // -1 { lblIndices.push_back(numLabels + MY_NONE); half = 2; } else { lblIndices.push_back(choice); half = 2; } lblChoice.clear(); if(choice < 0) lblChoice.push_back(choice); else for (std::vector::size_type i = 0; i < lblIndices.size(); i++) lblChoice.push_back(lblIndices[i]); updateScene(); } //////////////////////////////////////////////////////////////////////// // static void showAboutCB(Widget dialog, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XtUnmanageChild (dialog); } //////////////////////////////////////////////////////////////////////// // static void hidenDialogShell (Widget widget, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XtUnmanageChild (XtParent(widget)); } //////////////////////////////////////////////////////////////////////// // static void redrawFloqueMultipliers (Widget fmDrawingArea, XtPointer client_data, XtPointer call_data) // //////////////////////////////////////////////////////////////////////// { XmDrawingAreaCallbackStruct *cbs = (XmDrawingAreaCallbackStruct *) call_data; int numFM = (int)(long)client_data; XAllocNamedColor(cbs->event->xexpose.display, colormap, "blue", &blue, &exact); XAllocNamedColor(cbs->event->xexpose.display, colormap, "green", &green, &exact); XAllocNamedColor(cbs->event->xexpose.display, colormap, "white", &white, &exact); XAllocNamedColor(cbs->event->xexpose.display, colormap, "red", &red, &exact); XAllocNamedColor(cbs->event->xexpose.display, colormap, "black", &black, &exact); XAllocNamedColor(cbs->event->xexpose.display, colormap, "grey", &grey, &exact); static XTextItem myText[9] = { { (char *)"-inf", 4, 0, None } , { (char *)"-100", 4, 0, None } , { (char *)"-10", 3, 0, None }, { (char *)"-1", 2, 0, None}, { (char *)"0", 1, 0, None } , { (char *)"1", 1, 0, None }, { (char *)"10", 2, 0, None}, { (char *)"100", 3, 0, None } , { (char *)"+inf", 4, 0, None } }; XSetForeground(cbs->event->xexpose.display, gc, blue.pixel); // draw Y XSetLineAttributes(cbs->event->xexpose.display, gc, 2, LineSolid, CapRound, JoinRound); XDrawLine(cbs->event->xexpose.display, cbs->window, gc, 200, 0, 200, 400); // draw X XSetForeground(cbs->event->xexpose.display, gc, red.pixel); XSetLineAttributes(cbs->event->xexpose.display, gc, 2, LineSolid, CapRound, JoinRound); XDrawLine(cbs->event->xexpose.display, cbs->window, gc, 0, 200, 400, 200); // draw grid XSetForeground(cbs->event->xexpose.display, gc, grey.pixel); XSetLineAttributes(cbs->event->xexpose.display, gc, 1, LineOnOffDash, CapButt, JoinRound); for(int i=0; i<9; ++i) XDrawLine(cbs->event->xexpose.display, cbs->window, gc, 0, 50*i, 400, 50*i); XSetLineAttributes(cbs->event->xexpose.display, gc, 1, LineOnOffDash, CapButt, JoinRound); for(int i=0; i<9; ++i) XDrawLine(cbs->event->xexpose.display, cbs->window, gc, i*50, 0, i*50, 400); // draw text XSetForeground(cbs->event->xexpose.display, gc, black.pixel); for(int i = 0; i < 9; ++i) XDrawText(cbs->event->xexpose.display,cbs-> window, gc, i*50-3 , 215, &myText[i], 1); for(int i = 0; i < 9; ++i) XDrawText(cbs->event->xexpose.display,cbs-> window, gc, 210 , 410-i*50, &myText[i], 1); XSetForeground(cbs->event->xexpose.display, gc, green.pixel); // draw a unit circle. if (numFM > 0) { XSetLineAttributes(cbs->event->xexpose.display, gc, 1, LineSolid, CapRound, JoinRound); XDrawArc(cbs->event->xexpose.display, cbs->window, gc, 150, 150, 100, 100, 360*64, 360*64); } XSetForeground(cbs->event->xexpose.display, gc, black.pixel); int x, y; XSetLineAttributes(cbs->event->xexpose.display, gc, 2, LineSolid, CapRound, JoinRound); for(int j = 0; j0.0) ? (int)(200+tmp*50) : (int)(200-fabs(tmp)*50); else x =(tmp>0.0) ? (int)(250+log10(tmp)*50) : (int)(150-log10(fabs(tmp))*50); tmp = fmData[2*j+1]; if(fabs(tmp) <= 1.1) y = (tmp>0.0) ? (int)(200+tmp*50) : (int)(200-fabs(tmp)*50); else y =(tmp>0.0) ? (int)(150-log10(tmp)*50): (int)(log10(fabs(tmp))*50+250); if(x>390) x = 390; if(x<10) y = 10; if(y>390) y = 390; if(y<10) y = 10; XDrawLine(cbs->event->xexpose.display, cbs->window, gc, x-3, y-3, x+3, y+3); XDrawLine(cbs->event->xexpose.display, cbs->window, gc, x-3, y+3, x+3, y-3); } } //////////////////////////////////////////////////////////////////////// // void popupFloquetMultiplierDialog(float data[], int size, int numFM) // //////////////////////////////////////////////////////////////////////// { static Widget dialog_shell = (Widget) 0 ; Widget pane = (Widget) 0 ; XmString str1; char *str, temp[200]; str = new char[size*50]; str[0]='\0'; for(int i=0; i=20 && (i+1)%2==0)) strcat(str,"\n"); else strcat(str," | "); } char *tmpstr; tmpstr = new char[500]; tmpstr[0]='\0'; if (numFM <= 0) strcat(tmpstr,"Eigenvalues:\n" ); else strcat(tmpstr,"Floquet multipliers:\n" ); for(int j=0; jref(); buildMainWindow(mainWindow, root); SoXt::show(mainWindow); SoXt::mainLoop(); root->unref(); } auto/07p/plaut04/src/createBoundingBox.c++0000640000175000017500000000712513570013207016223 0ustar sksk#include "createBoundingBox.h" #include /////////////////////////////////////////////////////////////////////////////// // SoSeparator * drawLine(SbVec3f pointS, SbVec3f pointE, SbVec3f color, float thickness, bool ticker, bool text, int dir) // /////////////////////////////////////////////////////////////////////////////// { SoSeparator * aSep = new SoSeparator; SoCylinder * aCylinder = new SoCylinder; aCylinder->radius = thickness; aCylinder->height = (pointS-pointE).length(); SoMaterial *aMtl = new SoMaterial; aMtl->ambientColor.setValue(0.8,0.8,0.8); aMtl->diffuseColor.setValue(0.8,0.8,0.8); aMtl->specularColor.setValue(0.5,0.5,0.5); aMtl->shininess = 0.9; aMtl->transparency = 0.0; SoTransform * xTrans = new SoTransform; if(dir==1) xTrans->rotation.setValue(SbVec3f(0, 0, 1), M_PI_2); else if(dir == 2) xTrans->rotation.setValue(SbVec3f(0, 1, 0), M_PI_2); else if(dir == 3) xTrans->rotation.setValue(SbVec3f(1, 0, 0), M_PI_2); xTrans->translation.setValue((pointE+pointS)/2); aSep->addChild(xTrans); aSep->addChild(aMtl); aSep->addChild(aCylinder); return aSep; } /////////////////////////////////////////////////////////////////////////////// // SoSeparator * createBoundingBox() // /////////////////////////////////////////////////////////////////////////////// { SbVec3f pointS, pointE, color; float thickness = 0.003; float xMin, yMin, zMin, xMax, yMax, zMax; xMin = yMin = zMin = -1; xMax = yMax = zMax = 1; SoSeparator *bdBoxSep = new SoSeparator; bdBoxSep->setName("bdBox"); color.setValue(1,1,1); pointS.setValue(xMin,yMin,zMin); pointE.setValue(xMax, yMin, zMin); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 1)); pointS.setValue(xMin, yMax, zMin); pointE.setValue(xMax, yMax, zMin); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 1)); pointS.setValue(xMin, yMax, zMax); pointE.setValue(xMax, yMax, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 1)); pointS.setValue(xMin, yMin, zMax); pointE.setValue(xMax, yMin, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 1)); pointS.setValue(xMin, yMin, zMin); pointE.setValue(xMin, yMin, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 3)); pointS.setValue(xMax, yMin, zMin); pointE.setValue(xMax, yMin, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 3)); pointS.setValue(xMax, yMax, zMin); pointE.setValue(xMax, yMax, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 3)); pointS.setValue(xMin, yMax, zMin); pointE.setValue(xMin, yMax, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 3)); pointS.setValue(xMin, yMin, zMin); pointE.setValue(xMin, yMax, zMin); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 2)); pointS.setValue(xMax, yMin, zMin); pointE.setValue(xMax, yMax, zMin); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 2)); pointS.setValue(xMax, yMin, zMax); pointE.setValue(xMax, yMax, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 2)); pointS.setValue(xMin, yMin, zMax); pointE.setValue(xMin, yMax, zMax); bdBoxSep->addChild(drawLine(pointS, pointE, color, thickness, false, false, 2)); return bdBoxSep; } auto/07p/plaut04/src/createSphere.h0000640000175000017500000000022713570013207015106 0ustar sksk#ifndef CREATESPHERE_H #define CREATESPHERE_H #include SoSeparator *createSphere(float where[], float scaler); #endif auto/07p/plaut04/src/createLegend.h0000640000175000017500000000110413570013207015051 0ustar sksk#ifndef CREATELEGEND_H #define CREATELEGEND_H #include #include #include SoSeparator *printScaleAt(SbVec3f position, double size, double value); SoSeparator *printScaleAt(SbVec3f position, double size, const char* strScale); SoSeparator *createLegend(SbVec3f pos, double values[5]); SoSeparator *createDiscreteLegend(SbVec3f pos, SbColor lineColors[13]); SoSeparator *createBranchLegend(SbVec3f pos, SbColor lineColors[13]); SoSeparator *createStabilityLegend(SbVec3f pos, SbColor lineColors[2]); #endif auto/07p/plaut04/src/r3b/0000750000175000017500000000000013570013207013007 5ustar skskauto/07p/plaut04/src/r3b/createPrimary.c++0000640000175000017500000000213113570013207016106 0ustar sksk#include #include #include //////////////////////////////////////////////////////////////////////// // // the mass here for the smaller primary must less than or equal to 0.0; // SoSeparator * createPrimary(double mass, double pos, float scale, char *txtureFileName) // //////////////////////////////////////////////////////////////////////// { float radius = pow(fabs(mass)/((4.0/3.0)*M_PI),1.0/3.0); radius = radius*scale/5.0; radius = (radius < 0.01) ? 0.01 : radius; // create a root SoSeparator *primSep = new SoSeparator; // mapping a texture SoTexture2 *primTxture = new SoTexture2; primTxture->filename.setValue(txtureFileName); primSep->addChild(primTxture); // define the prim transform SoTransform *primXform = new SoTransform; primXform->translation.setValue(pos, 0.0, 0.0); primXform->rotation.setValue(SbVec3f(1, 0.0, 0.0),M_PI_2); primSep->addChild(primXform); //define the prim SoSphere *prim = new SoSphere; prim->radius = radius; primSep->addChild(prim); return primSep; } auto/07p/plaut04/src/r3b/toInertialFrame.c++0000640000175000017500000000504613570013207016374 0ustar sksk#include #include #include "gplaut04.h" extern UserData clientData; //////////////////////////////////////////////////////////////////////////////////// // void computePrimaryPositionInInertialSystem(int whichCenter, float mass, float R, float T, float t, float bigPosition[], float smallPosition[], float velocity[]) // //////////////////////////////////////////////////////////////////////////////////// { float OMEGA = 2.0*M_PI; float ot = OMEGA*t; float alpha; if( whichCenter == INERTIAL_B) { alpha = mass; } else if(whichCenter == INERTIAL_S ) { alpha = 0; } else { alpha = 1; } bigPosition[0] = -alpha*R*cos(ot); bigPosition[1] = -alpha*R*sin(ot); bigPosition[2] = 0; smallPosition[0] = (1-alpha)*R*cos(ot); smallPosition[1] = (1-alpha)*R*sin(ot); smallPosition[2] = 0; float otr = OMEGA*R; velocity[0] = otr*sin(ot); velocity[1] = otr*cos(ot); velocity[2]=0; } //////////////////////////////////////////////////////////////////////////////////// // void smallPrimaryMovingOrbit(float R, float T, float t, float position[], float velocity[]) // //////////////////////////////////////////////////////////////////////////////////// { float OMEGA = 2.0*M_PI; float ot = OMEGA*t; position[0] = R*cos(ot); position[1] = R*sin(ot); position[2] = 0; float otr = OMEGA*R; velocity[0] = otr*sin(ot); velocity[1] = otr*cos(ot); velocity[2]=0; } /////////////////////////////////////////////////////////////////////////////// // // given the center, xyzCoords, velocity, time, mass ratio and T, R,g // calculate the inertial frame position. // /////////////////////////////////////////////////////////////////////////////// void satelliteMovingOrbit(int center, float xyzCoords[], float time, float mu, float R, float TS, float T, float g, float *rpf, float *vpf ) { float OMEGA = 2.0*M_PI; time = time*TS; float ot = time*OMEGA; float havv[3]; float HavOmr = OMEGA*R*R; havv[0] = 0; havv[1] = 0; havv[2] = HavOmr; float ex[3], ey[3], ez[3]; ex[0] = cos(ot); ex[1]=sin(ot); ex[2]= 0; ey[0] =-sin(ot); ey[1]=cos(ot); ey[2]= 0; ez[0] = 0 ; ez[1]=0; ez[2]= 1; float ptmp[3]; float c = -mu; if(center == 1) c = 0; else if(center == 2) c = -mu; else c = 1-mu; for(int i=0; i<3; i++) { ptmp[i] = (xyzCoords[0]-c)*ex[i] + xyzCoords[1]*ey[i]+ xyzCoords[2]*ez[i]; rpf[i]= R*ptmp[i]; } } auto/07p/plaut04/src/r3b/gmainr3b.c++0000640000175000017500000000735213570013207015013 0ustar sksk#include "gplaut04.h" #include "../createDisk.h" #include "../solution.h" float libPtScaler = 1.0; float smallPrimRadius=1.0; float largePrimRadius=1.0; int numOfStars = 100; double mass = 0.0; bool blMassDependantOption = false; SoSeparator *createR3BPoints(float nodemin[], float nodemax[]) { SoSeparator *result = new SoSeparator; float dis = std::max(std::max((nodemax[0]-nodemin[0]), (nodemax[1]-nodemin[1])), (nodemax[2]-nodemin[2])); if(whichType == SOLUTION && whichCoordSystem != ROTATING_F) { if(options[OPT_REF_PLAN]) { float radius =diskRadius; if(whichCoordSystem == INERTIAL_B ) radius = 1-mass; SoSeparator *diskSep = createDisk(diskPosition,radius); result->addChild(diskSep); } result->addChild(mySolNode->createInertialFrameScene(dis)); return result; } if(whichType == BIFURCATION) dis = 1.0; if(options[OPT_LIB_POINTS]) { SoSeparator * libPtsSep = createLibrationPoint(mass, dis, libPtScaler, whichCoordSystem); result->addChild(libPtsSep); } // create reference DISK if(options[OPT_REF_PLAN]) { float position[3]; SoSeparator *diskSep; if(whichType == BIFURCATION) { diskSep = createDisk(diskPosition,diskRadius); } else { position[0]=-mass; position[1]=position[2]=0; diskSep = createDisk(position,1.0); } result->addChild(diskSep); } // create the primaries if(options[OPT_PRIMARY]) { double pos1 = 1-mass; double pos2 = -mass; char *txtureFileName = new char [strlen(autoDir) + 30]; sprintf(txtureFileName, "%s%s", autoDir, "/plaut04/widgets/large.jpg"); result->addChild(createPrimary(1-mass, pos2, 0.25*largePrimRadius, txtureFileName)); sprintf(txtureFileName, "%s%s", autoDir, "/plaut04/widgets/small.jpg"); result->addChild(createPrimary(mass, pos1, 0.25*smallPrimRadius, txtureFileName)); delete [] txtureFileName; } return result; } #if 0 //////////////////////////////////////////////////////////////////////// // // Set the initial values for the variables: animationLabel, orbitSpeed // satSpeed. // void initPara() // //////////////////////////////////////////////////////////////////////// { if(solHead != NULL) { solutionp cur = solHead; while(cur) { cur=cur->next; delete solHead; solHead = cur; } } solHead = NULL; animationLabel = MY_ALL; orbitSpeed = 1.0; satSpeed = 0.5; } ////////////////////////////////////////////////////////////////////////// // SoSeparator * createStarryBackground(int total, float diameter) // ////////////////////////////////////////////////////////////////////////// { static bool starsCreated = false; static SoSeparator * myBg = new SoSeparator; if(!starsCreated) { starsCreated = true; srand(time(NULL)); SoSphere * star = new SoSphere; star->radius = 0.002*(rand()%5+1); float x, y, z; for(int i=0; itranslation.setValue(x, y, z); aStar->addChild(starTrans); aStar->addChild(star); myBg->addChild(aStar); } } myBg->unrefNoDelete(); return myBg; } #endif auto/07p/plaut04/src/r3b/createLibPoint.c++0000640000175000017500000002100513570013207016204 0ustar sksk#include #include #include #include #include "r3bplaut04.h" #define CR3BP 0 #define INERTIAL_B 1 #define INERTIAL_S 2 #define INERTIAL_E 3 static void lagpoint (double mu, double LP [7][2], double eps) { /************************************************************************************** * Eusebius Doedel & Volodymyr Romanov July 3, 2003 * *************************************************************************************** * Calculation of Lagrange points L1, L2, L3, L4, L5 for two-body system with the * * mass ratio mu=m2/(m1+m2). * * * * Input parameters: * * mu - mass ratio; * * eps - precision. * * * * Output parameters: * * LP [5],[2] - array, containing coordinates of * * Lagrange points as: * * LP[0][0] - x coordinate of the bigger planet (-mu) * * LP[0][1] - y coordinate of the bigger planet (0) * * LP[1][0] - x coordinate of the smaller planet (1-mu) * * LP[1][1] - y coordinate of the smaller planet (0) * * LP[2][0] - x coordinate of L1 * * LP[2][1] - y coordinate of L1 (0) * * LP[3][0] - x coordinate of L2 * * LP[3][1] - y coordinate of L3 (0) * * .......... * * LP[6][0] - x coordinate of L5 * * LP[6][1] - y coordinate of L5 (!=0) * *************************************************************************************** */ double x0, x1, y0; double r1, r2; double f, d; double eps1; if (mu < 0) { printf ("Function lagpoint error: Your mass ratio mu could not be negative\n"); return; } if (mu > 0.5) { printf ("Function lagpoint error: Your mass ratio mu must be less or equal than 0.5\n"); return; } eps1 = mu; if ((eps > eps1) && (mu > 0)) { printf ("Function lagpoint message: Your accuracy is insufficient\n"); printf ("Automatic correction of the accuracy was made: eps =%E\n", eps1); eps = eps1; } /*Calculation of coordinates of the planet --------------------------------*/ x0 = -mu; y0 = 0; LP[0][0] = x0; LP[0][1] = y0; x0 = 1 - mu; y0 = 0; LP[1][0] = x0; LP[1][1] = y0; /*L4 and L5 calculation ---------------------------------------------------*/ x0 = 0.5 - mu; y0 = sqrt(3.0)/2.0; LP[5][0] = x0; LP[5][1] = y0; LP[6][0] = x0; LP[6][1] = - y0; /*L3 calculation ----------------------------------------------------------*/ x0 = - 1-mu; y0 = 0; do { x1 = x0; r1 = (x0 + mu); r2 = (x0 - 1 + mu); f = (x0*r1*r1 + (1 - mu))*r2*r2 + mu*r1*r1; d = (r1 + 2*x0)*r1*r2*r2 + 2*x0*r1*r1*r2 + 2*(1 - mu)*r2 + 2*mu*r1; x0 = x0 - f/d; } while (fabs(x0-x1) > eps); LP[4][0] = x0; LP[4][1] = y0; /*L2 calculation ----------------------------------------------------------*/ if (mu >= eps) { x0 = 1 + mu; y0 = 0; do { x1 = x0; r1 = (x0 + mu); r2 = (x0 - 1 + mu); f = (x0*r1*r1 - (1 - mu))*r2*r2 - mu*r1*r1; d = (r1 + 2*x0)*r1*r2*r2 + 2*x0*r1*r1*r2 - 2*(1 - mu)*r2 - 2*mu*r1; x0 = x0 - f/d; } while (fabs(x0-x1) > eps); } else { x0 = 1; y0 = 0; } LP[3][0] = x0; LP[3][1] = y0; /*L1 calculation -----------------------------------------------------------*/ if (mu >= eps) { x0 = 1 - mu; y0 = 0; do { x1 = x0; r1 = (x0 + mu); r2 = (x0 - 1 + mu); f = (x0*r1*r1 - (1 - mu))*r2*r2 + mu*r1*r1; d = (r1 + 2*x0)*r1*r2*r2 + 2*x0*r1*r1*r2 - 2*(1 - mu)*r2 + 2*mu*r1; x0 = x0 - f/d; } while (fabs(x0-x1) > eps); } else { x0 = 1; y0 = 0; } LP[2][0] = x0; LP[2][1] = y0; return; } /////////////////////////////////////////////////////////////////////////// // // By Chenghai Zhang // SoSeparator * createLibrationPoint(float mu, float dis, float scale, int whichCoordSystem) // /////////////////////////////////////////////////////////////////////////// { // create a root SoSeparator *libSep = new SoSeparator; // create the lib object SoGroup * libGrp = new SoGroup; static bool blOpenStar = FALSE; static bool blUseStar = FALSE; static bool blLibBlink = FALSE; // Read object data from a file if(blUseStar) { SoInput mySceneInput; if (mySceneInput.openFile("widgets/star.iv")) { SoSeparator *starObject = SoDB::readAll(&mySceneInput); if (starObject == NULL) { blOpenStar=FALSE; } else { mySceneInput.closeFile(); libGrp->addChild(starObject); } } else { blOpenStar = FALSE; } } if(!blUseStar || !blOpenStar ) { SoCube *lib = new SoCube; lib->height= 1.0; lib->width = 1.0; lib->depth = 1.0; libGrp->addChild(lib); } //define silver materil for the lib SoMaterial *libMtl = new SoMaterial; libMtl->ambientColor.setValue(1.0,1.0,1.0); libMtl->diffuseColor.setValue(1.0,1.0,1.0); libMtl->specularColor.setValue(0.5,0.5,0.5); libMtl->shininess = 0.9; libMtl->transparency = 0.0; libSep->addChild(libMtl); double lp[7][2] = {}, eps; eps = 1.e-5; lagpoint (mu, lp, eps); float libPtMax[3], libPtMin[3]; libPtMax[0]=libPtMax[1]=libPtMax[2]=libPtMin[0]=libPtMin[1]=libPtMin[2]=0; // decide the size of the libpoints float x[5],y[5],z[5]; for(int libPtId=1; libPtId<6; libPtId++) { x[libPtId-1] = lp[libPtId+1][0]; y[libPtId-1] = lp[libPtId+1][1]; z[libPtId-1] = 0; // define the lib transform float xOffset = 0; if(whichCoordSystem == INERTIAL_B) xOffset = 0; else if(whichCoordSystem == INERTIAL_S) xOffset = mu; else if(whichCoordSystem == INERTIAL_E) xOffset = mu-1; x[libPtId-1] += xOffset; libPtMax[0] = (libPtMax[0]>x[libPtId-1]) ? libPtMax[0] : x[libPtId-1]; libPtMax[1] = (libPtMax[1]>y[libPtId-1]) ? libPtMax[1] : y[libPtId-1]; libPtMax[2] = (libPtMax[2]>z[libPtId-1]) ? libPtMax[2] : z[libPtId-1]; libPtMin[0] = (libPtMin[0]translation.setValue(x[libPtId-1], y[libPtId-1], z[libPtId-1]); libXform->scaleFactor.setValue(sf, sf, sf); libXform->rotation.setValue(SbVec3f(1.0, 0.0, 0.0), M_PI_2); aLibPt->addChild(libXform); if(blLibBlink) { SoBlinker *libBlk = new SoBlinker; libBlk->addChild(libGrp); libBlk->speed = 0.10; aLibPt->addChild(libBlk); } else { aLibPt->addChild(libGrp); } libSep->addChild(aLibPt); } return libSep; } auto/07p/plaut04/src/createDisk.c++0000640000175000017500000000462713570013207014703 0ustar sksk#include "createDisk.h" #include #include #ifdef USE_SOQT #include #else #include #endif #include "gplaut04.h" extern const char *autoDir; extern float diskTransparency; extern float diskRotation[4]; extern float diskHeight; extern bool diskFromFile; SoSeparator * createDisk(float where[], float scaler) { // create DISK SoSeparator *diskSep = new SoSeparator; static bool obj = diskFromFile; SoInput mySceneInput; char *diskFileName = new char[strlen(autoDir) + 30]; strcpy(diskFileName, autoDir); strcat(diskFileName, "/plaut04/widgets/disk.iv"); if (obj && mySceneInput.openFile(diskFileName)) { SoSeparator *disk = SoDB::readAll(&mySceneInput); if (disk == NULL) { obj=FALSE; } else { mySceneInput.closeFile(); SoTransform *diskXform = new SoTransform; diskXform->translation.setValue(where[0],where[1],where[2]); diskXform->scaleFactor.setValue(scaler, scaler, scaler); diskSep->addChild(diskXform); diskSep->addChild(disk); obj = TRUE; } } else { obj = FALSE; } delete [] diskFileName; if(!obj) { SoMaterial *diskMtl = new SoMaterial; diskMtl->diffuseColor.setValue(1.0,1.0,1.0); diskMtl->transparency = diskTransparency; SoComplexity *diskComplx = new SoComplexity; diskComplx->type = SoComplexity::OBJECT_SPACE; diskComplx->value = 1.0; diskComplx->textureQuality = 0.5; SoTransform *diskXform = new SoTransform; diskXform->rotation.setValue(SbVec3f(diskRotation[0], diskRotation[1], diskRotation[2]), diskRotation[3]); diskXform->translation.setValue(where[0],where[1],where[2]); SoCylinder *disk = new SoCylinder; disk->radius = 1.0 * scaler; disk->height = diskHeight; diskSep->addChild(diskXform); diskSep->addChild(diskComplx); diskSep->addChild(diskMtl); diskSep->addChild(disk); } #ifdef ENABLE_MTL_EDITOR #ifdef USE_SOQT SoQtMaterialEditor *mtlEditor = new SoQtMaterialEditor; #else SoXtMaterialEditor *mtlEditor = new SoXtMaterialEditor; #endif mtlEditor->attach(diskMtl); mtlEditor->show(); #endif return diskSep; } auto/07p/plaut04/widgets/0000750000175000017500000000000013570013207013200 5ustar skskauto/07p/plaut04/widgets/disk.iv0000750000175000017500000000106013570013207014472 0ustar sksk#Inventor V2.1 ascii Separator { Complexity { type OBJECT_SPACE value 0.8 textureQuality 1.0 } Material { ambientColor [0 0 0] diffuseColor [0.9 0.9 .9] #0.9 0.9 0.8 specularColor [0 0 0] #0 0 0 emissiveColor [0 0 0] #0 0 0 shininess 0.0 transparency 0.3 } Transform { translation 0.0 0.0 0.0 scaleFactor 1.0 1.0 1.0 rotation 1 0 0 1.5707963 } Cylinder { parts ALL height 0.001 radius 1.0 } } auto/07p/plaut04/widgets/background.jpg0000750000175000017500000052746113570013207016043 0ustar skskJFIFHH4Photoshop 3.08BIMHH8BIM8BIM' 8BIMH/fflff/ff2Z5-8BIMp8BIMAdobed           s!1AQa"q2B#R3b$r%C4Scs5D'6Tdt& EFVU(eufv7GWgw8HXhx)9IYiy*:JZjzm!1AQa"q2#BRbr3$4CS%cs5DT &6E'dtU7()󄔤euFVfvGWgw8HXhx9IYiy*:JZjzP ?Ljjv%2ǭk[WujmbC)Cv트\׈=*MZk_Zb {`W h{5v*׬֘PX5և\.~*U툨;w(XTFՒ!=uVS۳Nkbc %B+R|}fڍ=>{F)_ Hݸ!KPև7 A ZիboAJYUQfʣ"F$h_ nh£lCXfc('m@JKh v.i)8b7ݩ&A7@zI-8T~P͉lZv!צ*1PoS5Um8URFGE!bԥzSjb2lUFRZ P g8dUM늷]$W} b&>x²8gTUj:m; XoSM\[5y;Ucz: KXJ$U-aډmjǭ'&bbkZl Lj'V:~&, $ v̼߰#̸'<Է>YL#%=}a"$dww93 G&&=An6x\Gm1t+?F_x(Orf/=ڔ6q⤞+1 &ȟ5 md 9$%K}RIFZ 7UFҿN*V ~i BIU=z`[_̏*bvZDk:-rלD(GWdu0#VNBze*=NTٽRc%Uxbj۶\!ҘU]p!+QU^UqOFqTA|Exִ0Ri +rz(R;ҸibMq=T _u< 4&8+Kc[Pcqra6d[- nK'e4=(|;7q<2 Jy* j0)hc]V)_i[/Pw3Āv'|i]~rƋװ X9޽F+]^5P|6)Z#R7EGl6jpZIڝU n:aB^”E @ I2duA 0K? &6B 5:hmї"R*k h.}eir+Aq5H7nLHcuyC1x'l 䦐Esu*[ ]Zzk]rTہ}`]҄hw YAEke#r#1){I]ִL mK䡅Qpu$4Jt+Khc`IS(!zwS]*-/ՂRn]xȌ_lA͌rAv sӤȤƅQ+ձLB@ 7qUsȿ+E=YlJnc=^A`MiSmvff7$VRRO*TV65׈ZqZԊo_lQhI2ـ ]fF] ^+k%WZ=#ɏ!{ibMހr'~_,ݩRJG *}#[[H.Vu S@oQfTѯ.VQ$K衔p[aHL8('h$Û )S-!HiZLKڵԏU>킒ηy-췖,ho (iF&VP#,iX#5, 톙#΃2E,O mI2EάexeI_жv77RRvqi2 ǓkVHJT4X6!0YcqVC׮*8٫aLM&ZTY٪[C FiU@*?[ѿF /=hRnVT/pT5TWi&s P^*1 g ARב?MڼA4|+* jwwM[^qU̔4;b+z*W_ МU]c:¤\d S8V#cHh!$1,rvS(֩IؚIFJ df`JրvV-]x][ ?ܱN4-@ )S*X0$AXv&7Ȳ^ST~ѧAmT^#sۦB+ջ$>8@\0ƀ<=IY&*.b&.=g@M%-Cy<6mojf,hLKvS-SI:2}c#ͻsq$V?Q쨭h)R[Nd^.$p z]P{~ ;qKQ3p*TluV]xAn2?2;tȤ/R=: n70ڢۣ;;)j0*ް Ӊ=1;!rv$PW YI3bh#iE+rۛvS]CUK# E 8@|9&b%U ʵc|Rsy&O:GFUybwY_ 9UUG2sM֕"!j ~";h !)z`; $pKo+|GNRz15}M !?~u@W#D^&tss ~ o_.?.u (Bx|%ͫ&9 ;yJԵեsG(~@. =$W`iڕz~_Kh iC APmCjƣm1XMr#eWo,H֔mOJEPTȡߦ4U*n JAj~RܕCʣ`FP.Y\l*aWI?'-/#] [4|^IqJe`ۗA)JYـ(jZlѼ1K @~`b}Wbwn;}8i_z74E㪒;TDY$xTUQ|4q^ZIiy-YbQ)#m~ R-;1B.m3pPyauc+i'R!^(z}a>,zȖCd|8+Ol1]K@5#VؽfdNm<+Gh~czbk+q늳M[}cVNμRB}2h'nizrce-tNK[)>}_sȞiR*?pŚF.xmku1mA⪟V\7+P|PnfDʿ.Hu'u4aԩ=~+|9cxT8JI皵0^`2z [cTÙӤ}U(īҠR#]ͻ+Fk)@Uw='ZD $URsڟl}lցkr9ާ H?$Zi*B/@۹qIXK|6!w٥H93},"(h75\l8Ë%f6mGRXj:P',!|KJWTp:*^!>:U=9XbiP}(?P+T-)ȡUPw>Qi9nX|t*!4aV4_O.#jZf Sʕ xuhi途]w,iSqM-q3a*Sr=0#!k0jMScOoݝ(.. r Q~*N>XkA0ZZ:$pSYton-A7TFf05яI-O锷ҕ*\Ep+jM;xHU@zR*JW:7ނ|m5\ Gw_9dx1t9NJz NݱC#u; @ܐ8> lilD|j^r515"=#] .Bk@h[璶5jn־|}`&&H ;:-ALAPԞݥo?dPTF=xҞVC JϰaTh=h$UjaSV- IJ{ICŸ b6S dK * ۰6kuYnS)nQAz=g B5\? Ju4\Hbp Z `GVF|@桁#p76 +h] ʴY+*F5͈IQ L̔QnL<(5 i^L'I^UmQ-unx#Nd'*/ ri+HӋ[U풏 $|*_sMJoV]۠a]Q^CBrGmbI!jB \^*iivuQ^, BS ͉E : :};~ĭVDŽQO %W"bq$h+hTW}DNK-ZAg!/)'ӯc 'ɉŤI;Sb<'sP)#,%%i- B1[]nk=pm+[5'[A #bڃ,)VRKi&8*GZaB$Mb"ZE47AwVjz17[fߚZtnghjNJ] 'cGԵs]\\F쒜h8Z~(%I3ʌH;M=W@h^"4rP7+XJvJ6hv9UI";4`́*@?k['$Qj ՚Ncd+@+ZmLw#O;PVkȶ}U'7vc[,3,^Uv@0;i =Q|գ;zmf%` ^Gw=ǽگ5+GQ_Ka#?9iQcLc +&G*[bqNM \ 9PÂLzRP~*w9Kz% J( ѺR/ Sms̅@܀V(Q^FlUm>xSLU5ӡ]Hڛ2""jzRXӿlT{|P)%hI1TFgB7[ )y";lEբ&YY|79Lboa)\!uytźa, ʡ\7 "2rh=Q,Su .D1Y)דdG  M7R[l٩eUO]"7g\@v߿E+ӥf_n{aVi&#" 9O[R턋UK6kvngPiQ8LHՈW6N@L}Mt.&^Hޠ5(=oQv@\VHecI߅vRkEI@Cb}8 ofȊ:MiSCw##\]Z ]qq> ^Kr9JLDmb ;fF7! bْNE 'pmlA/|d y\+_E 2m<<00+WaJb$~\(ޕ; ۃ )wOp4S)w] X)߽R)vV|USC^,~[li,y[DXYgIR.@'Ɲ?KUg %p=Gʕ:R똺r8G>)F4MZ~&y,ToU3J1y":7W-gb#TrT`>"q</u;>OM0Gx6~R"h8D…f%* & \ Ie)lPg!NEU~xdkvW:Y̒$m&Mnj) h@{$R*VSCz M_ %QTu~iPH5=+4+_)jv$1a,QmSc~k @_+[s Ÿc[|CY;b WƖ v;†u”.ltc|W*^8ko?涒lw X'#Ğ'zm'"#'*I>*4躸ZJHEiӵ|r0 z>Y"a\^?T5J)@]E(1nj@P e3dZ9IV_Zy'WQJmR}8xSP;`]IJAX|*l[]-E"Srz`0SXm+x>K.ȫg9rWv>8BU4hsV_~ڹQ'?3M0LpIƠ,sOՙ7qGs}J T@Am Y8m"++k$_Hl` ABTGPnj $eRCT؟a0U yj5m`$sI?sNvZW7P^~l$'hj{?I! Es5kⵡ!rARJT`N#gJmf I PN*hV^rHEHED1s DFlIS\MW8*yɲUy XrU Zw#TQBKQB; Vmex,WKp$FPՓr< :1c/S!&2j!-BJ}CNY2uyů8?OLKJV+Ǵ,qI#kӮ{Y=X#"N`HW83OZRl T6)d3SP7q%y"oMCq%k QIX4h./s3 1ZHi@gIiV@EHX}=ڶ ]Z4 Sõ1R.T唙^Q" 4uxeq)X?[b+-֎X7-Wÿ6^Nō1&oQڬחW* 5 Rtߊ  '劕hf1}UOkM|B-%ShqVPs*ɍ+m>^թԢ "ў"͛yqoTw zw8W-aC/#w// ѐ]܈L|qy2OeKh8z;SW,V 躎|vD^ ^+um&Jk;Z);qXKpi!^H;xDHXzg:}fW-,6l.^3?H!}z.$5ŝE14D|lא8tRn'Q,3m-s톙)rj4a`YUdXnEp"; ;%36oKp[N,@(.j T8)TGkǵ|im,[njy|62 ? ĩ.½,6 퀪(p 튴N:Uą@j {w>խ46(\[R'sztIT Hڞ؆%6R32Gm!PhH]I`rXxeQյ'Xd0 v+LMo.[ΟtmqR%ǯa=(7b7zՊ!) շDy18\ާ*nߐdr2MzVEZϤ^Ewa'WNT p/xQX;<~8sJԁ&"5d4؞ԮwJVfWqo:Dy(l@)J=mkMŏnJ,S'"=fKuPE@qU IzUX^V2|q*ѰZHg X5zw_T NtvTEH˝iE$a'OTF܁; R!jE<8җpRmB"~줃ⴊhe課HnEzȯZPɀ^%Bahshځ$O(`q_1<$M"D[ѨXݣ`=)|@. )"r)[>o|!+U.'aW]SZ =P-nşl $hr+ϠCd*;,69meABj2! ߒ6ڝ;U >Iǀ_T]]}X[pާOǧ*d(["4nU+ e癭M$aK+ءھ, Hu5«D$W}Ht%.MXiC*W 9wPzi tz↊d|= N)M8r<. t?Fcj~GmTEԟbYk&Ė䦇a_2PZZ3ZqyYnF~L`diIccH& \`ƍlEiWC@ݨcc&foСaNr) M^q(Xzu.`FK9EQU$Tl)Vq74 SpsMZJ*R)L u6 [!ƝOJo]N"ۑB)JT)Iws}= 4G=qK@SLȩ%׾(R>8R 7Z'|UX*"iMUMx1U?F㒒h+L ;D>$E ()R:Z8׹=;ҽc5R:%Q/lJIl k/W6fl0,r̮jF-4=̺E}W?XjO"q#S J1?#?!xd҅qח&jw4 7z 1@w*v5jQZlvv8LnʆiSc1 ks[[^Ez/ 'ӒߓF➫OϝoGH`U(8e|Ɵ91mƍ[uPV;!`ζ6debr6:6a21Ս6rNAq=*Z@F=;K b-@bA-¸ ^W4 $ؤ7<2LHdRU(ԅ [8T6!eM(w)p%GN[c劄Lzڽ>zp)225k ]ȈmMZS^ح6ی /U(+`ͺBM6\z)q$rj>~ЛTueBxRؽݭͳw4.u*A<$( +~PV!se#4n)v:1!<` d^EZŤ ܸvH[Knh ci ۉ1`ݻ[(g܁Z7Č 1(GR1T኷ڼzWYJCi~.xbA<7^t$H)y[vzOҕ=2(iN)Sepb۷+NR-!x,n`1MyoUB M%WHCFEӨŨLmӈq%lp+N븦IZe4;56,\I{ ڶ\LM65c,f]HN#oNТooKAixR`riFܩoJH׭>2L(euK-bH]hi5aԃ\Mq sl=" Ko)wރ JW`V4l1A <0j 8rkFi $T3;ㄞO@A_i](dC|j+-&D20tYJ$]DZ&)PyT ı֬rXѡS@NIlGZֿLUM늕" W)ڣo x t`%S Yh5N> T/\ SΫqjSnO+7P@酛t j\Rܮʼn*M7(qcb_w.zbr,@7NƀV0W᷆pA֍ZW1Kce CJbo.,U h=F͸t?7DzcTdc?r\ί$і)ot>={dDn1t㺙䘵#m@ (ڞNGM$?•3ğ1 _m_eQU/8+(Oe6:<`Ւ+iRi̬8i6l;4^F7tS;BGU2PT LzqR+&T+k j*(+nتৈ: Uosoa]҇ WO:4,tbuvjaCڀ$=ݫM |U6=­u|:X@6QSJ>46Gj c[Fה[х 4P;fL>N4ɗ&Z_<,e@HS9p8(9W?.ްQpID`Ԩnk<ɠ[ͭnP@È 5:| H7VF|_#JdbCՁ? 'ۡw9Z6^Byc۶[#l6sk˿L ä 3/+n|I@?l8<7J7z]7AKO8G0T~1HLrA†xx=A.R 4'XM)]*MqU5AaVa -v…#J>R༚+M늮 ⭔Xă޸ֈv*-~mĄ;J`cUc~<0hw89%FvB68բ҆2Bǩ$u~d'C'DbF)|4Ou3o'#^l֭Z N֧(0 by0VM.h1EĞcj䌢aUsXe,Zem iy/ p׽kJF;lC2 oo `W+JVL4 ҕ8KQ~~t•?!q_lXRZr8\6=;WoӰ8Bd[94VRɶtQ:3!(jY|xluk+[6)ͻR1#d'[yz?8yRVg``ÂaψlhZumu B6EbE7 i*7S{$Ba(A MUj {ָid*E0!w((eI0V;WE8 «ژVN~)q>9 MOA]-ƞ:Pw÷ߍ%j|i q*BMI=NmQhS(+@k|x@Wcu#*o҈rx*iySO[녷g1#NOVi,=E5_ڇoe`>$rmOigIS$5KN&BɭIݸơ@6Al"I'Mx7T{Vm7Hlj@+θ`fޏ>%ċoovn ܬu82  z츲t2Ȅة;6¥k]ܥqJ\մӘ'CXo"VyWZ_ѓpYEAd`ӛr ({+Bkth]ױ\m9t`k-"=FI95x{Ȗ( 41#nV ic-wj:K*{Bmx(P}2=XH((OxU|WWթMNmV䱨;l~CFQRګB`O=%R{x."N.T$XX0"-6MԱʐKTjƈDk:jw7y;VY( tQA@ޤœ!t>N-(yvy3.niWa$S"G{]Mk۹"NOD 1?#,e{W)}F ASaWv*IPJ҇\XGn@Qڭɷiۣ'tW!r)\P-IhVR]|Bԑq[jv*ǽ<)U.ĮKװL K<~ۑTS,Hޢ>ETfC9dw[NybZw̘8]v1'ZF FE*%Q\lB;)rQzdUa_i. +…qNcHXy4{[ x>Fs_ZdxokdC5+Y9t14 )'F*i\w4ڳj_|UOkM!eW׏ga;tP -iT<0X,RAd@DbT;ŝe[X'sBE;S'j1v.`hX&ۊ(*EhBevSj\cիJ$2(@+ҧ HTl˳~_!wV2ZFZ$O@Ca(GN3& (fT/T%"+"H3PFra…}2;{%9eIJ}ޜ'h:_rf7B&fWD Wư !GMk0! s)y,d&ᐦjچj,2\Ȉ"F( MEiz=^K[`ZH!N@JHjОYM;b46bl}U % oR;S/6(5Ve '=M.nx4*[.L5D6W6"H}'Y(a-E|qQ+xQDn|h\'PH~IK.`?0MuA44:h$#]Z= W L*\.&4I*<) -z$>'Mi+կH=/2FMpu<jukR >lsdo_)HeDD+뀌  59bu؂ ~XhUvۦwCSVZ!¤h:b,"% Wk,jp58!l<0~⫊m hV/u֓)2E[:ryjq,ƿ<-[˧2\L,s c5K-QNAx ݴqH H< Y&y$~]TrL,d& p>Ӏo)[Vu) YLXtnU,1TW/)fm4?>ɹZ|$lMF6|{rn2ݹ CԵ_ }Eb+Jd)Kd I|C crqOU KjglSxPREIj:i*Rj(}!;Լ]ug$V¶8 u.M$tT3y5v+WlΔYنHI *z^(כ, @wb1-V8EKbVIRYݚG)州<$wl4a]UZ4v[=^ ҀrLJ1ҟc^/N&zH9)P8+aZBTxR#ʠ L|eYPH$ S1kq[Q u4HDiBHR5 <1dy,>fkMB;H C@j<~lu4B :W&RIHn[q\ +M3hZF4nI6Yι ZεG.l#Itn-fW*pJ@X0Hf4ִy"34e/O[c:K;m;2GkDhj-gH䊒Z{hʤSWHȦZ*J(%FA$b |XT+&D6eJwldeOJa2\}ZeךCAI#v< rH1gy$?&>9l5O:hBԚ6o 8dX a {xd8H|gfA$/{)7"oݫ(>ƵōkV\pmp7SCJX-Hم1 EG¡=Զֶ6a"~&:X97JikM䄐ca=Sb7E!PHJ% rƬH%M 1(Ў:U; 7 U'W*>j|); ׮ln#+ޞ8?rƜw I Zs*h CR ƍʦ]K^6tܸȑi'`i Qo++߯Qh2Iij^Fx:Hn8<7VBDP+PtZMJV1q 9@I(+&G< zUnaĎ}w4miS}chvj5Yjw+._|q$L~͹sPjd ]F"6jCB:TCoȗzUBIzXSwN')m؈f]:f$,*Y$V#¹lFJ e YלOsQ!)X&k=#QkxPm &4zt0Jv24q*7H~TuHU^Dмrl¢o|5 HCivf}6j<^m!Ea-JNƛp#u4S֛mG݁WVN&f "֢Mqڸ-K|O|$ƝpEȚ/Ah@>UIª.A\ +@w +`W ԶZa.w.B}VD>M֮Hq iy-({ĥ BbMU0Ziks(qƥ>O2bi')ITjKoh5q)\g}܀H!Y J7wz썺*c U܌LUfC7^Tӿ.t~V}JTe5i";A(q/2R+(w h*m䎲Ʈ,躛̰*BFI dc@sXuZ^_[#̺w/ȣĚG_eTO-Nhm&8/.ŕW)` }1)ShHI8EWT9n8R`<=JgɢNMPym惸'y{˲yVmU5EK1H|^-=%C# @cF#bF\T~E%kd\8* (I ^qߦ̫bHR/.m5ԯbXMUǐaDdѤPdyOuĖHه2~&GLIq$Z34cm ҁ[h8/oV87K.tRᶻ U 3]BԚkISKJRjMzPL)l֤Pm,TY"eHphAU[B_Rg@ OPQ\ާ-R=;MA%ԠBiH&=*,wXnA+Zn:őb*AN=6;Œfa%4azOb "w@3 ݻVcㄥ5.dXŝ%ct5Ydv21xݷoJP/]GJz~aA-YD]ܫV8{ՈLznz=̀,Rhdf-I$Ta&勫yӮf2A V(崴EX"mPFL[O{qmrܑMH=jS1܂ho+OM4ncPiD7Ny*/MB!G ^ڠժ>},4bwQ6j)d֠SNQ h~/ئRPI:ڥ)T*#r$W ;EѿFdg]6c#w&wzv&yOq_oJ|=9sb>j"c"$WKuJ I؁l+Oo/nԎ١G (_#c)m}Y5"ڠQ=xd{k[Ӯi簀XX)x PW4㉈TY24<ZY XPS&LܻTYR?jAR**{TtAIs⨙.`X"OIh=Aבl݋1b7j@WE+B+pz_()^@OlZ+W*ߕhzSs PG0uRhM+^.I x M 4`q6B]@/WjŢ[[rO"Ny;w-JDxx(xM1Hz Yа#&C"9li$¬U#K 5H>q= zj7Ž0k) zp;a~?y6W̠ )50RK;[oأnB2\ zڞ5@J#<}4&ϛzMg$.BH cruj2I<\v :LQKDRWujjmSb1݀ƝkL hHDm9Q,XJT-EHzC2/ja[s! #;'zm^+w0p'L  B?*G@f\!_m^SǶb9n1U} RU⤐MΛb>~M*`ZdT 8y^j;_RFN{Lˑ~m.{Sy&&(p.hQ> 3[:z_GȽ^t*4_Q{j5ʸY4E7hP5Rq頭i>Fۖ LDxf{W/WTW΋YhxޱV*q1ȼ ; p]:`J##HO,7gM`$񗢂7 } "Q '4l14VWYn(1`ڋ$Q[+#+KŸNd\}ZY!BѱV*%v)XR[aMpҝKh&w!xD݈SXD_q%; & ӂ w6Fhz=ǧY=1#*/ YZcܲU`dU"aZrlԀll9)# C5m2V7Z-Zj{1H Y{]Bo3]C_ՃOҜr ȑɣM#DU0ɺLhUGHQFqĄoirUF$U*TrZNQ@;ώ(Q ևƘ:ڽiЋY%>֙b.r<~mKvG6#΋LKjz4/oNkZѵ-5Z H‡D&%CYs]#&fcb7UrPR>D xDzYڛǢ \Vmʇe ޤ|8G%&)$42^NCG#-Vfq#amkv7 N1Ygx ~KO_ȝn`±H87S伓z}naXp&M)uvHr A՟$&$(*rm~Vm: >8o Y9ITJ-@\㐙$_Oz)9c(J7$YnOKւNL7 fO2h:|֞I*HbsO,L߳^X\#R-,E*PxfUK*mNm(Y՘>N~X7֑)PPM-tnzx!Rj>/lO"%EH&+VH" Mɐ*g,8p%"FDC]E?Yƽxhf;K4,;Ԓwd3GR9\@mqEzUKIo F+9)҉qr[kpmmX,#fl(M<5ij E۽0II]e :+^-]#jv#e֛{m=mKr;17]X/l^,Ě~xݞpy4 \=e*=jW&U˲\ 8R7ܷhU]5geF4Dz|ﺞoCKj )^,HZ֝!*/5OVi lT1)m2?Kh)N>T[n$|("[:]m]&}:'`e{KP@ :vw"Z;ujD S^Lomg%o`53$$7mgeHZ2Y#XT_TʶRLTзsߧN$V5).O~ت~ |7v"cTx $ۋ$D J6rN\S ʿ;l6$Yrv`mS5 l5wRĵ1c ZCBw4?EpANF8֢4QIV:RhBu_OXk$o);)p~DHd- tb0Y#+ru,F+AȞt€( }]0@%E:wW6oU⪊ۈ;S݁ Ddx{b2#$;`@ X!rSr8|-nh3 FOSֳ1$_>@)=`C'וլ.oHpb`;Se`ӉR&ͨ0Ĉw4;:EuYTב F 0`dLİ1$ֿ~ >kv!-E +KY!@TQ_߾UWv,-_ƾݳ'K$q[f6<)rW\ĜBJ'bDcBk#,rIhVy- 3ט-]5{,6f!yfbһ3u$Ѕ'h)Ec" UM%}*8fOU P{Odhsi5ӳ9-$Mjh? 'ܞ]pBg[i]̐NbTE@$5@Umê\OEn*y@m=84=Sܫr[5z$1 re]\ZIivGMk#Wja%-&"6ʊ*I2$7f EOHUP;nOL$iӏ2ySRn kki#Jc+Ǔ"U\KLPJ{ Yv(>@/e9='FqdvS$,!$T€J׎D]w?gnpSsi %mMRK9шreO A>0&DD^/)sUqUJ(`l8:h<چflErDP&1~jWK"7G{IbN\jGg;̧* }#PW7ܴM;Ip$=%Lei!9km@Њv,ȿd~Ϭc6ݜ?ʻ}mDӨZHފ+\RIJB*ﲁ ?2AjVMΟopeͽAu-GłyWqJd2n46Ya1jJB70U#b̺Gdѭ}v$tg~ÑQĞؖ2"G({+!!gI A48Dl'Cjp}RL!gh8>ay"6}]fwa)m! WnD@FÐRj X-Pq+rA!9ف7R:DPq BD7q *\AZ18vB h(>?@(&(dLq BȬǐ'r:WN8b]jLX*qEڽ3e< F¾X1>#ַwZgʅz-~.2*.f1߬~_`n.etJ/7~;W_ r"75ǥfJq4;*1;&G!uw+`0z;9/ Dhs^XWkSɜ\QSYReߗ+fӬá NL"NiyV?v=| I .)دcr- W$SֲDҁiCZ xKDMo*IT\ֆE|6¡tƀ"i^,LU6JVMm\U~ߏ\Pt vnFDF?8 ٫ RK#;1v}ُrw8kv0ZVq$ \ZlwۈG1VW*Eu4HcFqZXk^]vO~'O6P<0y(h|)W]Z\̿i$X}Dd%:=7qd0h]@_u@E5$ֵ޽? RH|M֠6Sw#[QC5ej&kW픥1 ]VYD7栭AMПarң񣊎?1d鴉#Cj&.=f6)F&D>SA2Ok<kbVeq%KtvmFXG"}@jwch2GyOݔ&N^PqS_Z0RͿ|4BYD@~ŰHwm.P=0%Z@Ěk&$72L$t)h&$>Ƞ^@nPwO(, Ҷg2I%Xy5ܓ9eS _˨*bh(k۞wr ZRNbB9( ZֵcRktZTK5+VՀhPfL cBO\hx>#+ HEI ).,VUcK9ۜ@A2 RomwjIr"|2 D SJACN?|E *RAh[p)ifc; tbm WQ!E+ZTѽRGzpRk_ت1 @JYVUy}_VՒ_CbIa4cG(2#ҖVwlO*Sn K^Qi(IKR=0[k2Jzޓ[tX,z2q|h~?aס,S-^itzu!W'fELXԬLb@Xԅ , ҡk]ɠVfcI+PA۷C4= Uጉ( Q٫BŹ=ft=إZ-ǩom4b4J"b(䅱V6r1qbaF+ZEDp'QhZ :tّ-^hFd{keviA6zz-\ &hC{M!Mju2C]IJ2X׋%vfW6Nnĵ-˪iF*Uv뿶:}!:@|i*fYHt#lh%j3IǑ'9 8٪:W1 \R7a^rk؈trR-/[lRѷ>bS~ M_&Ͻ]ˡ$i٨)Ni צ [h*K5*CmU[nA,XGEjE{bi'@׸Co;<JQX q k0<؈ҜH-0z,*\}bzr)T;PR !˖㺽`KnRW^8K6H$5 ⧨)I Sbh6a wsZǮBa)Gq VYٷ=zUV%=0N"{h< WшQLLc(IZh)$1b؏ +V+;Bٙm젞"p1jEe{%>ۙ]S2j'nb*Jis#XDBou8Ȓ<<`Q#!t,% 7A9k U ^X㕖5rcI  .fn)Fхߓ:6Zhn o2*zrR͒7q YN}FI%hn+ˑ(⣯.HDAo\ht8i Wi=YWJkyxd@eR=ժ^["X-=z?_u?`i3adai*ܺE'b+|ؤ]}^1 Ey =a) xf~?P}N&˧'ɉ]"$},˔On8`8݂ mu{`k@`rZe1{Q!Go]I:y65#}#W8zQwvկ ĿT(x5s>Lcwꆇ„I)jЖ _%zlkW; ޲^'GYbkCB{/hT֍MȀ:?l2GrH 1ZlӍE 0RC\j 6Ja;`p(>8JJ⮡oNV괮S O:jMg vX!iA^5t؉ })'QW:aKw nnni94c [S=7PҭFOʨW`clGM1m5ʼk+9rG7I\~\ՃDZZE[~?[ke5ZvDBcQiaߩNm=JVahe;cR*6#tFdyO4E Njp,6*2Fwҿhϕ+.j6bx_CBM=Og.&dAھ=OIO d*-.%N]ٍ2GdDA>Ӥ`dIJ)c#k]"xVRC+[̑XAu<۶k}uDuDyI6J#fjWrEhYLqn 6%٥UtìL/cI ;7`> <"-Fҩ^l锉YBO5\me6|U3>zaG3- 15ڞ8b@6y1#nOa5سO (f1Ÿh7!"ǩ& xUa p[d2iE',aWG(bdeSڻz}a?~}u$-ڨ#NS^On]:OgKWOT x\V"u1("]Aqq 6| x(YגkJFTcp VpcN-fZ1a,*~L†5%Fަhk)ܩ;( O"O[E.`_RO3ROs:F\:4rZ@bK6`J6U@rD7_).1BKji8DJL=z_sD9+ʎ';zߕ`k1i:qZ+S [0P͇.I. zvږ%Λ-ay@~-e#s0wQXt^]ƨfW [X3T$z`gnfJGZH<+lS q])%2ET7#P߮`H%ncjr  ]&vz#%^NQCW][4ww{A )7d޵x:m96@yiڀ[[5UʍՉzXuck^,#Ka4ߵ "Hʤ%GP;eq NL|-geim{qt$M uF'`|q*B _&MZHXmH$lJKRX B"Fm$0Y ˞ A*XczPez? oť;mAo|mn'V["iH:cS >Džɐ o?8eƗIo,  879*<(YHdAphwS6vBcCZoO^(fVѴG.fΥ}FTQ1`..p>k%j׶DEA"bb OQoW*Rz+KƋb@PJ pf>ȔeÉh|B-j`%IsąVW#u,LeafUE WcvmBN QiZr#ܓ_$~!́yo8 eHKgv1Jmr` B+M*G*w Fw8Plƕ;fj[k7M`k9ޛ ljA#dZ.m7HV)@%,(8 rEfʼ]CSZQ%7); zh3RIdSm+HB]H~-5OQ#| k__Kf/=j> ktrbQ]?+uo! P2bĹܮ(84*-veZ` ~=5M2~?zh]3``Zm.( 6 $eC{Ld-yOVux"H'{deD&Cl}}ⴱW^j c2)uSKSzu5\[+%"SZ|mj*;qt88Ԑ^/B1%8((*ڞ;`Ł5VƲ)`n2yW?Z@ ! +A0I}8,hkZjyPu(Gs ygGUV?LI%-+TB[*LXգT.>ٓY8c1KHH/\̒svZl! pe h*mZA'ZHO \4L.<Өȴ#iM-nJEE8IHG?a.^|_b^z].Hd>]v|>Ʉ#4`8 %Bp<;|Ti5Ьn0ȏ$Jxma]nkUMr  |V<.8xT! wZa#{­AVvV^+[Y"-ѩ Rxm*7Y@0Pά3_IE,\k\Pk4T)./~XP8oR~GS~}l4+!Xh9Tmwvpp?yHꀫu?>8$K8Sڳ+y4ʲNPEUp;?xxmiTD#`CEk^oFmۛǼt-"42n=&_j)(0Џ}zk؂ qm]ZE&tvjLѽƙ~^:|q#[gS\Հ//e146$O+SvsZ٪R-ɔA8ó_W22|qȄP29nV^Hm `ATǾ% {A]@NĒԁֻdA? 1t%ȫ!A-3-?Z;K6)k*lWՑ$X؇i(|Ulowa=r4+9۩Vj>\k’BTJ*ˏ(0(BIP\ǽ=HЕLa} \[,G*[*"3!g2ܵ#&X!m̡MzB;\ÖD% q ^mirʼnW)mR;zt +jEmk_Ijm=YLaU{0AN=;WH^)Ehz]hVn3I)q(,#$;<ƈ{Y*z75> (.u˙ìt$9LoHHv|FH g5 $}]z󾞭5ԡSUz~mic/ /5MX0sZLK!* ye V9 f h\l4J20qomVq0;)R7k¹cՐyijjV[?уFZ_b,&pUۉ9QD()r@jQ WڵM)H*Bo.#8y !|Y2^ʑrkw’B6 W388,rr~,Ǎv6~n` 4]ORe s0Ű^梿vD/U%B"5{S_j#y1x>޸8BS[SnF!DTq *O]('PJ}^9%H3HUjPOW'b2:1J*!j@hze@2Fsgm}m=ͼwI9ypmCnqQ{';hmD[KXÜI%=|@D+=Iೕ,M +kNL;/ےbIjNX5),-[,2ՑPEN7XGr7G&H4iX"(N1i<[!b #䦠Ќ 2E$rJP(dOG$q;0+OiDgӵ#\[KXï4,A\e2*oRc*&W0U#_gpBIsp.QY&c%ErjH rtVʖũ,'!,=BEq?ji#ƴ&$ oL*2x`*lRHjj [8ן൹:zPC/&IR3QߎdGJĶ8OJ|A4Z5H'AfO1萏$fÐm+|6*mfvW#NNXˉ zvKKQ˿? C=:Te,r`k y~+uH(|}uǐx\r6~7Oq(X|,Z+KWj|{']UGra8͟\?Q}+c")>s<hv?UVUʤmz" 8O1R RN;V SRT o|Ln%@Q_\ )2 O$+h *).oD㍊H}ޣssgQ:[8zȧ&ܷ."@ B6-RNmnRzο )M%3r˒6,ZA?r14/b:5JeHPyIR_ 1#hRTYa@;Y-)!ذM`=fKR'ieɬ2ZI%mj)+Z /zeU\ l6EJLsqaooOb&AWH4ht{soZOYpۊ?ePNClB#P6i&{ȱĜr<<|rgȑ\Z"`1)QUzTW,ɏA5 ڄЖTVɵQ>PSl<* "M*[K-.r6c7*~OQ"شQ}RԌh[ Iܭ$v _M@AH}N%Gq1fqPCPi],I*M<M7ƖcUkwQ|UHU*hRNdu[ SyIJb@T[.JBZN-Jt[ElYayn`YiG꼰RwU$2r @_qS%Q >XSM"}>㊥Wõh9TdOz۪;\ҴV[]:KV'ǘPn590$n7Z 30(EI4޻n7qa6 X* c)g{O&]&+ C2 O'}O -F,A4{S5w6dI,x)^H ϐ\5fc^6j5ǧ"yW>2':dsFh:j7?Ry2Q~̭&{Ө+[. k5=(Cl*($S2 FďH-'as$ֲEIVHcWܰLM-x2lHbwfdR|#{`,m2EU52P+]߲k{>Ux-.l}6@4z֣$zc3=2yH⋃w_Akz=ȂfG COqQ>qlXK{gΨ:WŰd@;($ww=k"gqdS C!&5-Ye SbdhuI<"$?0:өT7^l4x4 ,ZF5b|rr g ”J%T`èaUc3K/T4c @Pez [2|*(( OzwQ:eRѪojdv8~ݔjn7RD$ITvF_=VIlzLbm02lPd &ᆹ/̨H7kj"UPErB{`t懓bt/`9(OV#іЯh:Yl8X5Iy![xGom7/!=Jjj"W9퉚Hu9[ ፇy:uc=CXH5($j̭v1:M3_"%}+s8dK's>9:2 " ^꾫He? u&1;{yl &@^)8sh} ܅Լwi=V>XTsđG(;4wr>+d%Wpc{L{з I-dvXTHhTl=ܐ.`E:)3DSvGe8 $' Zakolb *e_+8A$ٹv[wz..XܹUU'% | G!dMH Ew9yV/7,WLv!p54u˸tb`W[jz ޟiڌDHBUu'$TGw$00MlNh;?{4h@` sE@u>/oSY- S֛xJq? Q($w(aӯ纳ޡ\:$Sǰ+cqjSE}ZƇǓa\~]yQykvN?įcA֘ep3-q$,"+ٸRJajaouAv.1+KH J7|r3TѨEv{dFfKu!lG-ۦA44^JV@E&F8PjjS|Pp P$YM0OM5;}KEmGZt\ۂ)ˀoS(Ɍsqpܥ؅*F)EhTxchQՔ PV=^8fXPGӎƶL&ur9K(G:)Zֽ+;4849%b"AZ)N NeDݎO{ʹuT7qLc#t +e3V{c..9@a r$3Fc{/p&bXZ{`z/ªvjř'?#tuTjuظr`2HMKO;"Ī ZoANFk ͔c!RGjtK+ NkV("*؂s'.刿-6&&חn-喳I+/ TT6وM~?rLln-FFJTDrdq j2䌑0'8Ԯ&;س&5a1Ѣ-u}V_o7ˏ.]&R5|5# 8+xKTP12s[5 >8KEEGua VcS{&1/0KߑS e!Ú \Ȭ(N7mmdx8PR0Z8F*ѵcb$nإ]S]Ե;qy1E[~<3nFx@ dbˑ,O#|`ZaW?N]քPut(H[ƦTOlH'BJEkۦ "q+JVB'NXxz\&c+ \j7r]\02j $̬ "(!dYҿnE=Zʆ\X /P@4|Sb&~1M׌  $å+"kmPO7e*Gd Z;OkFkːʔQe$̲tbtdp'ps޽> '/α7X]c 9#=AbF_ZMk=X'fωٸf.Bho蹚<#,J<>Bod6egepC@zË^ƪ4m2哶7cytȭo kx lKO\n2Lj HQG@YZEvbWS)<`6eY,dr^KpU 3+H*cwu.tō&RxH |i̖B<. {zٵQ ko `{ @ ya8#)Aiwm>vl,!vg& Д?q9_7~&ъ^}<_i.%rn&+PԪҽiaHI#S^@l>SŻ-U!MhxdkrT'b45kGTTi6kJ岷yIT7L%!Ҭ $uXu/USE4Wv0>'=[.& C3{Iggm# :@)EBW <ہ4ѽSg$,-?[W Vz}.油cUqJ@DHsWYqZi|]@jJ2~J`] 'S. ~2yjrlYEZ lj6}l-XvTڦڽBVߗM~) y2/X7iAtoY֗;׎Y#thJl9*̸$l&()8[ U^Br<~?e$VyբiЀI#q47.)ٸu2ǽFߗPRiWlIOfDHrpDp*y˚M흀?C)`u%@YFR߽~|L՗cփ|وa=4IvHlu!{foQ uԁ^.T[oD1Yaoq<(+!"\LM [y'5[ZUE5a^+Uʲv+? Hߚg=hF#jZeOM9FHqJ<*TS{k"zhi|S :ݵՊi%5UE}GPB}MyfUq3C_"+orYdju nceCQaL|pjÀē󩥸Y$fyH |cY DVF !4%iw i5)[TB 5:\#% T* .q\A\K / v_j Lj׾9BԖ4 W|BpV$t'8mPH4<1MV?נZ~5vU* A0A6\WqZ|lU{) ?w@>$H]mq [־a׮1IN GC fm#L(7a"2doFCG7+HיO{)huiucv-yLT]; qd##9nPtQ2HvRRU@}JE$Xj>TXX\I+J¶ #|O!c8m[.-%a\%2񈝙Y_= L$@V"ʼn]@s"q- TڬyEW8YrMI_IZ"%J mʜ:0uE%} 59C}g$_?0v@W+l|~iio4"(5e OM[Y&]i d\Z+'BjOF\FV7;+?9V(]U$v5)nNa1ZiiXmu (# ^,}q 97Q51)5Z 6+7zS>$n<]XosveC]؏l{s"yST姤yFթCM9@zM"IU>7Bxz@pq^TJ ĥ9N6}T.偡=\(((hp"/L<ȈE,P|ur\$kج6tRE!Ik_{;FOV{(!t̫q9@[}_B)F#l$2RJaGӮE;kHLܝ/SUl5{b6.$XJUX*c_r_쐶7S+! IjZhӤ֠#ZN k'(rpϖ2?X\H]BHdihA&_OٯL#[@azor! ^T;J%M539n&Iڜd~,αZ槉;WȂTf{UK)cEm^FmgJzθb~/|qc}6<˶ݳQۂݧݣf#ce1*~c% 7j8M7\onc"ҊZ2ҔO!x?续jTWmp:mJ4I% __[vJ䳕ڤ68TU-Ӿ2*Òoȶ=s'>(_55ܔi 72ܚ;tA7*d.|:PG,>Y/MMQdHHzM<%Zw S,rءdckO ;aJTXJQڧAy+N2+n?F%̦j}MV>pnq,- y?k~wQiMuݒu5-iGOS 's*=Rϧ%[۹b!Ph'D1[NӠ.Z1T%\7`c.nQnlyzuq;*\у=樟0iW[KJE8;LH^y& "okKmh~6$O1e.[((OB7 Zkv +LBr_}8U>~  E u5ltekKqM7#a/=oQdŏ2Md}y bd(рQÿA-L'pW=iDieXP vP]pMP[fvbaEOH|5Y1KM.#*ԯus죆bM6ʥ9Lb.H$yzЎvmph5fU(?ĥSRҦPdd@)G<2 '?7yLiZ<_11uC%\w1D%{ķN3a3HbSքxdu6y 0s #EٿF""$^/ǡ$-pn*T4\Gcr8Z[Ӽxd؊2UȁSSu ?GzS7]GqE .m+iHm25a Es;կ#Ԯn;(v-$$`ZM2=QKfrY}6),D9xt.Qji1Lyc߈xqL۽$7Z}O F7EF$X!9$:2RjӰзr%TCqvpaሉᏛ JY맂R\5Roo9g-tI'2 ATJXR:' zu J-n/!nnn5k4kaUOY߹Od-/]|ortfb%R S(>yCږ-_v>r3,8=//*yVn-gTJ P^' ٫#(z1}SNVOFw" & $DyZyJ9T(zƎZ<\ۼ #LZu~f$(;6z(ǫ ;+x@a(4.X^vrlN7 Y^"%-q/i,0eLd(8H]3KQpAʟ q |LQr(i.li->hxnҥ(OO^!j'NG `Gg. _7WqGP u>9<ZUt,>;r{rt6=7*yhM:CI,մѷvK43Rs Еld++HQ,)E)GJeBĀN]\$ DŗnmޣTB|TڸSל[~gχnDRB}mcZ^^ZYHYQMJ7>PXU+=GYM:yYೌ5 mXFB]Z^d~+H+V.a[ I;24$ɸ+L}DIn;bT9v @Fٲ:0 چ߯+x4),i@!P;eK(UQj/ubDʖrZZsnI Gԡa*1%"N,n5멞94]:hFo?*nxKL "pXfѤ$R }rcd8s?M KذBTj]uJЅ@ip}>6m階v~ \I֮EIߦHB鷺5)⦔4MSGpZs Fؠ% ""Hfށo%RfA?Fǔ`K%Ogv$ѝ'fJ0C&6> Ym./[,CxQY7 >˵^$2j!Z(Ҁb5v/lX{w$SN63ḳ-o.[ƪDxއm0Kz`$y ՏgN$1\W>XL2sa{{[  ->s2Sקl# oaG<"x—Y^[ݼqq"Y^"3XHm n3<.`yG)pE=έ(&8|;^{/de Cw1I QАAR)$m4s۹h4nC rn8R1]#KV3}>N,>&gːĹnٖ($epr#_#2}B7LuL>%[zȎua h5s(  q覽0|lz#% @N^,d 7F%d.?FS[@ܵfmՙTz9Z1N +qDǮ)&ZAZIu")vHbEXx cܙDYET-֦lmF҈°b*HI݉8IeO4Oyv{ wfbbT^ Tb1JC`яsqmL|j׺pdjPqޫ]N$bK/4ҦVèb@ڰLPcֵumЅ;pK"'"Z)5gk`؟6YqO}/RqW0S3qׄq*ү7]k/*Z1r-֛oE 8Euc\rM)Ҕ=:c9vN]U$bR'*&) _̷͍7W[f n7Nѐ@.D1#n5-Ak4$H^//qlYJcpѴBփae509*R?B,Kkc-hĚS_9cSˈ,ҤOpQM\"aّ7>qCIP.L6Dɪ-Xu9nې& d($BN iX_]cVሻUbz'#ItmSG6~B H sB\vY 8EhAޞְ4FiSWڠEYN4p!Gzu/-KPh ^E(3}8vmyj15Iѹ zH*<]mk6].K-Ds @&x!)RI;s!+fsEZUeTITt-vU?}bҠWH$9kŭZ Q' '7?RBwvbs,Dx;].ssXY$ZxG4QUF[82GDֶ$73@0i;[.(t~Oƍ\7v`GU)s(ա' NQT+Kk!XwTU@6^/nL M#HD8.j@# DDWs=EW#|Vbv޿}Yjf>iۤW2@K7 $@ Ty!n#qjk@zDp -8FYHAb-Fk~(;p۔)XHO.C?q.LOZҞ=~X:YڬjI"/h2kq$1! C6Jn=#E+$D%~ asj"|EEGŇ'' 6sFH~[aͿ\Հ@Lt:Y٪\\'j=3>Ms"?M\k{B)V5ș(G9_Z?G-w>Z2C~鿶4u7R[Rc(Ѫr9x3aH D,\󮛩(kei%Y}vɱ #̹Cr vb7z6`[c.iA~ro7ovui,p]IcS:$f?Sa+vDn x$f]i$Sy MA kq xǜ&)P? Z0Tv9l`"(rk$?F 0jLZy\8r ,9WHԖkyi,W Bg6Pi2. w-MU[2#I$"D`oɚ.^$w|&-Ke2Ux94 ܲDD $C"f8U52Ⱥ`3sp,䰇QOP֙V9C$Izįݵ4=X*P.42% )b8&6e p.&y0QprE_yżo.3d=$'ou\$ئ& ˈw%nlZ6I3 Xob H CN[X̣;#mk=kW[d@nӒBhzBDrc(آh:寛-t4z:PHLqscw[]QcM'BTR' @*jd\-Kɩ7fX'~> dh1F: k9UdrB@ԹEyCO`=Uy WAQ1!XMMf)pm_P7?N3chb5ՏyΚ_5]:m<./F 7A.c#Zv B .A#(ŎC!7yK$CӾa?ɬ[ind*IuS2'8Сɤ@*O$Kcpdylhs# Ֆ04Ga5rm| އ18I O#рIRU/''Gj:,IKb8$ۦ*swq{r..QE 6)c :% 8'f+Vq=%R 4ՖU#5 pKP~ Ht_OwPUÍXЇO_[9[{c3#" ۽\BWz}j62_=)%eO{cV_ щVJ*F߅r%/7>.g(դ:r9%q#2$ƻ.?$%Uc_ԪhV vMU>p`ğֻۄ?ZIJ_.j>X):V!)U^IoFjNDAelG%*,"-q9"u  "*7BژS*o F)MbS-|-i3Uw܁FE$Ue=Ll=LQ4{L̥Tʴ*S˖`Jd Gusk.[c4!gڤ*j<0n׫'3dyچc?K"~!ϥwU0GFydA0erR5jv)OQ/+aX 3>>R{{Cxỳ,w2` 'کINIze]R;1 w*O~#DfD{>%u,fa@@ _ThI*9@i]"? 9.|iX]2:jQzf i^8gzgRs[J6?dv\Vњ{ڭ"[&uF2~ ە_׮.-AfȡIrpa2exD$>mn-BE * AjxPQk%F$qc,ʩC<)r2[<8jS}\m}AA;JyaNkWuIn`W||Ȕ6"H)-L[YR P- cÆ< lc4Đvmc,m~"H$,޵'GÈ! _D=7H.oaqLCSjoqty|1fXadm ҙ"1,\_ܵp5 {F->8P1_@GD R]e}umky xI*;û2,n'U#bajww۴dC Ǣ p* 1.h\ kC_,#+m ,bG@r_xx\Rc=!5 ul,Z (}]r$ Q0e(Ԑ <]hN򎥧\_]6o$Vv7 jE1O_Z;*? u+B[2q(H՜~C(տi& вseA!$Ml8&UUR\TKgX mC1HP(`:eM;5fQ7*@%D}Gϖdd3%UrK|)3tFo=Q.Lъ끲s/OgjYM}U2pYڿ/liȫ&"%QVmg<@Ȓ v6D #V.DV\Fdj5ܞl;1yiy$D FQNFb~?޵e* c'5GH˥d֨d$$S[@_de%EkfRym&JX]\8Rĩ*Toj,{'|X*ʲDq 2HyQ+2#}!)V~bTocU@H"No]?2&~/$s"-(ƢjoxI/]ߏO3 .nnL}yi@!>zr n:!/.ooRC$0yY,6 'DzHѦF}a%B"X'&(CZ|^?tȁkwq&& -tmv)KjBխq5hlH[9[8~(.1XQku_YU-`V[Pr#rn=jSMv|j^ZSiG(P=xO<Y&_QdY\RuS\eKm>‚6qi-&yG +6ڠX`xn `hig7f"2x-~R7"NϾZjjۃJ L&_[4=BPW\$Qe$PY_U{auR@R8(JmU$\'rʍ|_b kD;,Ip1]0vwZ>NĜRTBՓauGD+/RunH (AF޻PJ;WptARTt0-/+[x̳8QRƀLW~ַj^~HY+ǔȝ(1^ǦI*5̪ȥTGr:mi<Lyԭ4R<@hNOn 3N3GɡMմ5=)ğǥ3vN<$:zɈdB-+3K$2q@ <&$;-znM",4N6p<HjG<L gyr^3"١QNV'%sLDƭO4!Շ1@.U z9zXXhub]C-*GbJ\6B 5tn#QXllޤI͌l8z)GTNcgWHīF@2N Ä[3-T"Lg>/OjfԠIΑ1$rx![ VR-"]>P7Ӏ@7gSD&nG(%v-'phOvYUvV4d(R{C:_[v" y9~\-@ KrR_41քYuNڠn峌%ݯGVg.K{C/9|,pqqo47($P\f($c ma$Pz &e)Lek[%@'>^`T=E(MPL${ǚ@O A1e4W@+Hջ׾BM7V40*fZXwݰ@.y1D!{.b q Wa'mH#TeU ,J+nh`;'nߘ6'>jT>3޺ ](ս5b6P(?';ָNEmkOs;(y S_dky+yiwP$I¤5!C8h218M`ҭzIGq 4=d'Ȉ]y[~g /T,E wGrd=,_'R[jRBS4b!#o6而xmS 7LC`O?f"{?5A@"ĊzFGnf9Vg syN(eP92lB+70*ty>(U 1kjr|/KK/7art%Va!jGiXd/G12 eÿ[M%rSnT:.b}\BL=QwZEPiK%O gjP$p[]JS%~>ˍ!r^c TMp2\Ǒ-rP V=p!44{JqE#%4yauIo{* Wl$rNu'AYX`Rܕ@M2i8W6<$ܽ,>Hep/MDž:s#D(*`hSĚjzMVc'dOH)c1 w%[A"fBOb7:튕Vc3u?p-"9p PeIA)$t>*O&:mXMB0ڝIܝBDRaDEOF%ƓaZAo D5̩YbPjޙ_O&@j*[4THlZaET񪎩1NfO mB {4+ӄ~,U~a'0Yy%2%\dp]4 c6YC,I+k+r(AgQ gc1<Н2xKUepdOžY)"_-C~UDk2ƁZ$Q$}rcx6rU?AȘqlJz8"Af \F$m !z4;mekU3lg#q\r2?Kf-j-^F8#w24|@SF\PҍQNBgW_Vo8dO )#_\ZYwj,HPt)Yߛ!CU5e"ei.l`$mԨ۾?-i:ӰE;6bQgUN_P"J2F=0UAOlzq2)Ť1e !jqF\+8 oHկ,M[Nӧ D#"A`)H GoC%TaRHM9QO{qf5[~o}kKr!HN䝫j`!M0(j ƽ]NLjkImjtHT'<څxPB(jEkӮnt"$uBR##uXKh8ƑSxC%;Fpn#b@$ZNI$(MkL5makxUKJEC|FgBqVV(Z@o*:Pv'a~=ftC|.`'= qmzeI7!caF"Tn}H.eZ_NXt ED|nDyRZ"ksZ y{ @Z.&1قL|+2]PJ=Jk$]eM)8A2 X8@~=DҼcf3R $RAmQ@<_Q܈J M(h] ^3(~϶I1%ORwW2ژfM1PK, ?5_k`PpUQJNRVsHZS]xw*8'aң(N~m5;kmm]ꟲߎ2O1W7xd+ij 1DP~f"">/*vt4^NE=RKY%F4FP5 @׻krI@{Ӧ*ѹ$}FR;VV ;*݀L<#tћ@['o0jwVH];S*f8{#ju)\p%^NSUX\+*15S8cy Ѡ}9oguuC<qwV2/'z(nf4fZr\kQʾNIi$TFtKyfbRq 8 KI.Ɂd_FO(]Bɒk&uXo ]xk`Eg+!vQZr&jlQI}kQrqqouw_/XNmnS޾ˆ3E}( k_+h&c2 H%%7d@X=KNKsXhb[MjF̈́mrt P1%-_X z)}Xːpzbۥ1}Ew kŜ:uXXETc66e ?׎BiÆb3C#(&$C闚܃oa xh RԨ뿎]/@ja لhбs' _d8n8/ԥ%fj?zb~?aVD RT}կa?ǥW±E>j icfhzunCɔ'璔$q 0&J5t%I4'H:$A?g;+ղՓn/@38e~O ~dk[e%3>g j䋉/,ԟN3DyHΟk!0=U\GOHCi\@>D˄ZV5Y)<#EȲd:Nm2MҾ+4:vQ5j};rjɏphKO[.Mcs,F?m bUdNkB`{hQ%c]^fGI@IeDk}\ Qh B9GnH)y \.XrV$YF6[wjR (RZl(č'gq-P=2p6E(KkZŵߠDcGm͆@gBη!$ 2@cus Իwƍ5BR0z܍Z3$pOMkeH Vo,Z[VS7E(P 69.:#rjlmrBToᤩPTJ"gb#rCBEZ{P%P̻L CmbኪeLU[ht\pnEI= 1HZҧcQb61r[J'*2*oÈq҄ҥbԵY-M`w Ͼ60KюPnlc*zl@bıdfAO*(܁;o7,9@ dslrIUW3s+zdRz)~;-V)5XdURɡć u<$JK'fKr,?z]7224YBrf,H<4ib,OF"OryBAI$F#勆2]8坭ʠ${Iw3[,"m,}$-}HpN&¸IJ ( v 1ӭ 7E.YqYآ!a@䍨kFrmΏc-6juxf$je5> ocȄixu<+$T4$S 6" /%&T-6~Y.6*sڕ$BQ\$3AC)ڝF"mΥgǧCe'TuOxdWDP)=2e&cSRw޻J\C;,pvޕ#,$ #D1*@ iT'v`Vs'&V)xPJ\ jPD]`G+) 6R)NCVCZ1hw̬ qRku-aq M>kBq 1(0*֞^IyrV{,KJc`ɮjeY֪Xl(EryIaeZZ,5kzfnsdE@uR yݯRIkRBH#LcQ?wRL?X{A$`,nc1 U$%mD֛[VN[ʱ>)d>cu H=#J^&D ߧIџj4a) o$ fӦ BO^ l%ӗO\MɎLVv޻ڹ])$~Hߍm YV7FӋ+_ª6 9.t4RH ۰pch))ʝAqR)bВ&i\J-bSP49%j@?kHBHĚ=J ,Xiɬ Y RgXLvJW:d z2æ,VK0* =D$t}J]^$o@Al G$ J^8ʣ1!yV]~XǕNf!{I[ʕv:*\յ/V+ L .܈ص;a9p!Ƭb:ƨnZDH@Ĩ<;_#{Ѵiee'F3e)'MTTcޢx` $w m:`67mh"HX߈2[A1+KLH*5#'W#L 1Hu %Q+6zVVqG+axK "sG!I)k,V[J7U5݁`^}PnmdPM#O8Jݤ*֩PJ%Pf?[-ckkNJ Su]k+*eGZSZ v| tM;aJ]4U"LRl4NgK+iVvr=iO~Ȓ`尔e) tX٘x$-\|f+v1@hxt&_AMр@(p [׈pA<|qVF|bD]ޖ ٍ2H`Aw3I/w 1k֚D r*TVТyP[5΅i:0-M G^/ce)iwPͨ L<(fġTmb#%u +IᰊWt۫qrw鴴y`7?awҴʼn5=dEߵ\RJ$YOQ(pZ#s<)vZ m}X)d,#^jcNKi`̊ q?Q+1$s?-yT\jqy\ij[j򟁌g!"<50"6y r97ACH6z;XMH@*pRF:Ɖg}mDE$" JILذXBU$V{Y˒Ͼ@tiƥE$<~zmh~?%t w!@SoJeeKC?a[|121ml"$|@uLdԷ"o<3jF= C0291$=(OqK_#Cm/ef~,yLPߢq Gՙyˆ?&NhbD Q67XYۻI.µPN<& V٬v+80v$IAui5KDIb*6U]Y1ʘDIӾ-zJ^X,zƝ^Z0e^M7  { Dw+D@(I'5>i^cR$b+9./.)"yS6c{"0G=XnۄU 1D><:#YZp`$PrR,zyDWl-]c*.$љEfQj:Wm"2{RԴ1_@mG-KTQϾdu Kqp*5kr,:6[3:9=Ajh,kohrxM,Y7#iբ;Y_֣cdGc)^?,0jq$wYJu4)r߼P~,q0 u7g9,CiWWr/4`."L=4kSVY_NrAEz*=:.y塂1vW{2js~7X`V OEf>'IJsӛFT%oM?Y']qaYjH_5 rHK 0U$H7gd{d% wS#nO Y(nhdRX;4wYB&r[&X~&/5=4xIJo"&#ea5{efEi׶\4v;,@(z4-J{BtW't#T :vǢ?ai3Eңn4XAp쟶ƘDj%s# ~'Kh6J˗!M)NXRdiڝƖ#w4h㩡 72,}:}bK6teB C ol`P2D f¹pq9lXt!eJ-@T=s_n974[u%-eVI s3 ((B$SZg` 1QЩ`)NTHŽ_}q V9?ÿZAMXC K(UP7ZeKXXUܰQA_eMpjT¡ii|1V@nS~ U(<d;oԓ yLgB9`IİFqS'#.,6A$t] lPVEC%AZhiNԎد$Up[cQ" e/M:P\%^0Us:XcOS1<-*+4ڬ1@,#/ej }yhS.TbP/1ܹbGxK#YfĴCқ`HٙWV&{ mUPD,@ϗm#1WT,+bd8y4hrQätV۔*6ִ1<͹n,K>4; `Mw-q# W#ҽM.ӵ f0[2[ʬD`Tel>jfvk 7?Ŕ õ6#lTN//"iDڼjen%G^cFk KnQKJQq}52HV2>#x) cJobzS–IkpkF\qH'А|8ozYn ϫ.<'e jT>e2 "-]YHAx31J(ɗ\ \G 1?OҘ@G@쩦ԧ~ُg#ޝiK,8QDX$ZҹHY8+@Y\4 bX|E90Gԯo f&qUs{>!bKP̐OАƀ 2҆)e/I۩>-ǐ'l1|:S *  һWd8]Eţ$uәXYֻgN_rFx\kq|+ZV)Ƈn9c& kk{kUg #}*X8xI'gQ{%R f^Z?L!qg'bQn,8ڄ?d^nte(mh#۝ѐerTmjprĭ ,Y:)AcYW] ]I*NUL;CqڽSjh~V{b|PS,NFhFH 3/$l9|إ2[`M0arzяa\)]Fi$R \ j4/ZNRCkQRSQ3sYTjvFX!鈴V,Vv%H:Tٌ^#%P@ =~XyH*iҼvޛb҄5$]sR׵k٣Fc#WeN ΀IzޅcZ}[YeYl>*V9}E`T8yR3XzРԢ\`8IayCp6/_y+:.S]m'!@3:!x[bxKK{Ձ5q 0SsNcsHG"ͨ^khMd_ \Gw#bpƣL~jUh^©4%|]9T}O͘ 3^7#=%3dB@>-A'5d+̃TTj lsKƽ gIx6xFE$pN-֪V?r II $|O rv<[Tsq*6Z">ɦdt܂C5x`l8sz$84GNxoRG4f"M|22۟w,kxǤVTi mI9L dN@<{?9dMz_ ,YiN,hֹ sEFӴtҐdڠ&ěr5,AӾkre( ezv%ڛvnl=(xY`JiGcljd<*QN|sэQj;gc&Y+e+ 7:}IX]AeZz0 9Ǜ;s,jE3/OTk0Y#/o샛7|;ԺYRG$֙ [v[{XJ)ظfved"6B3Z6R/JeZ[ CN OQo&=:/aIܹRj"Z"%nZ`e}ɦv LT5!RXqRva@?pAFˮuo䔤֧~;Zbu^_PG㝬F()4h^|P>>'\f[m@|?x׮P,BGj88l~n5\rn*v^?/˞9}NfE3><>k,"Ujt<ΜH;*A-ntljZ o]VC'S͐JŦҸ e zvQ0*#<3D9~=LE4X]H^͊ZҊ<3K_}rPbgC/LjG2V\CNE0c˩uT4 T cG']R_24yQp/Ux3Cr{04CH8׼dg:4Z|2FS"W0lۛ JuMfR. HH:pPIT *#6`_[eu{ZA(+~.G`,Qꪐ+2D(yqS7Fiu $E'n\z)#%0.495[]:岙#R^*X{إW:Tmsb8~XID_V4-{h.ӧoͩKiV"dZ|A»!|꺅}Di*}"tjj'u @%wDe5R>*ӐlRNCR[M6H/@_l<d.&SlňV_Mʗ$~EL)N`r\Qj[e5b7oO  jM-txlQcvNq xhEjzffcnБ?סXeRd)L }bHݨ>1D-J\\i5bZP,P5>s7* fNj2=7ruf>_#iĊR|9|G\!iZ|/""^/=YugP3AVXFS$OLh(6!VMo hÏ뉍}A wXV g#u9Ql2kVFWy$%YR|I9r>qu>(ct[Ռ 7?j(pr/U$n`g`*湱ӓM96AE墘隒qZO4pRO8[N oo ͞HF$!N< a&s IQ5gg/VH`/7W:H9o[>)5MAp}0Bv bXMM; hCGsSŃ0% ] 7PS\zVܸ57ܒM9V?=]'8[/ Kky!H`Vג ixlo;/&y ywIbShB6Q˻[{m*4c"ɵ)AOp~_-V"F+;9sy"4*9x¼?ĝhZbM֯Q1@с'6esEώSgV~aK8Zh6CP7p2`'iіba]`oޫe6<{oS%v,U"B蠒eV*#JTVsSvEy*l; OzAU%ݜR%\PBʣa@w끌TtGcx&U<ʐ-'x0z:8)j '0 $Tv"W+AR;rZB}\%o&!UGAbLI*a$"x#FjOzw{6Bj_Uad l=+"Јg/\ŨdÇA$Dc~#s*{g?^Y=G$/Y QB~%^ v߭r,$D%AC_|z;2_MoIмijlos=JS¹FL2ܡYQ(juLKa4XyU oÓQ8I!Q(F\#8vUÍ&WT `8&c)޶AL6ePrPAlHѩb R?ʯO=$ QJ3v>iclz%֯XZZe),<9z,8qH9:M|Ra֠-Y[2&j!SU6v$syҿgswu'(h:36p2I0S|9,GF7k2$ xٍrbyBQ|#][#;4KlZt2-u(CtJ$jUPcT t˻[CJ $x̝&,r:y?d?ve58't9{7&12NQ ") p6djz:3‘vRǾt-@̤F@k([D>T 6ǯf6 d?.TXMN:XZ5dq2WUm\:\N\s FT!JQ }ʷnV(n^?MڣЍj[-9qc-icFBoZYi_.×@!DK|ۯEiZI Q͖8^Nx%/1T;+x΄7A;j P eWx2E?ڰ!*(U/,-Xae4^nf~)8!gp7]ri\n+} W^tXDKίYc=˚EIz&S"qL^>)Ig^aQ>v'Q^g<ژBe<0nO C򽧩NUmՇ` k3_lGz?]cG~I|M6P4>Ji׬_TlwW2$ZAqDP-CE6YG$J:=2yr8V,zP~`Gۙ1JWHzv[ Queo(Z >uXhj#Pٲ;i{i̚:VA n BU :,E$Po`4y,\U’DqK͹qGj:,c_ԎİC_6eb GD?_'mEݓzPjbӹ:pRo ZlOсWF-8J=qU%|1Ur:қƘtDc@_Ts[8 Yj熒}Tг PdP@ ;bRʗ  "m%(-,N ?l, &LH7+ZͪB' *{j<_5~m὚;BZ$q3'@H`(b-ASWaH]?,&d)cIA=E7b. uHNh ;~C6E/+(,i+7 Zeua7ڬ"Eh4D$&ipYLeR>i~Mj^K/@iUda08NkH`W+kMOS"H-! "X̕(,MEHޤj*(ҹ&@SQ$Ҩ(ر:n5 gGq90.ۿCQQҕrS3IjS}cSXYT*ڪ#;Lk\Ji1fZ\T2P4< c3 95v}Egb}F# ޣ)j5OY\Roy2KI$UpfO#vꮌ&Y_6v d4#=l )AfOجWrzz_,>$)On{ 1;SM@.g.e1&` [ڹo=1"&Lm(-:Oo ċhWrwaS:/dxgA蔿4yG_V-YS*|6οx_K?3ͤ&KByi۹wI9TvImӢՐ[hKJ)ȎΗGޟ=eúkn?֕4kH#f+NN"$8m?o|?FChhxm/;EH$knL&R-"V9ٛsWVZ(e+ aa_5Vwe<#s(O%4vߘS-RT4Z bBP]l71.Ay?L!i`3=y)S3t3gWQLWyetDH :t;iAi3J2,ɷ3R; ҺPmۗ\;v1!i?bKWi]EN#e+,NJZͼ\–ֻd:Ro'W<X6,KsYQVQBA8wFmNltc$ȱcTgYvW>K0u:BCrbuzOy JfP^_^Y_.ym|y܉{<" c*,@rcdXK,=7q0e*PhԢˈHC,|@ܞ[S+㓎v'/WR5րRCxPN!ȿ3,95%u; #E;u4㝞\3'yIF:asĤ,lx8- )0+\ `>2Mjk׵0h~4vz8Y.cz>-Ӌ9[xH u8=$`}(c?ͼcKaqnC4kBO˾t5#So/`>c{k5B֛֔׶\X,^^)_B)˞ˎ_SQ?OS1e{gVO^;so܀`* B7>+f$Q#c$dwWuha3kwbo˚!_q G?'yc\;8`x(X Frr̡ezG,?\y+cIX6ZP4pd&˛n(XIB(w屧tHj%(pckDRT&) 0 pQԀ{|nɔ ?pyO-Ӄ5Pk;+ _K['B 䌈تJQ_rd /s;*#}y2 H_Vd*`w:gM ?/?15 !oJx62#.$H18ǽy7xqVCĐ~^6:W憁;z֩sW?kb%#WY G7yt3:IFcU&Utt*@.+K֭ovm3/(N"(_V`Luf4T3UMa2i`zz6j3Y<)ģSJ鰍}LA @ƈ8U^k2#E;\k.gB $ƄқLB0|dυ԰!$f$,`査W1mˈqP{?חJOyT )FJQ?ʅWf_ f]oϠ\Μ̈́yܨ~uuP-4)(_4GEF*;A2(Ⱥ`ĚRu:q[dqe.%Z)&vd`%#.`nW]hszvOCв̑?ơ|y!MXٸ6 Xs7A8?qzc8l$d>z=s-, !-wR1 P>'o9fЀyg˾E_jzE/O12/vU{?ffWZ~SZy1]]_DݦI"WIF[p k_aڠAZy٪MvR4^ 1K{Uĩޔ>ء?Rִ"CUV1,I>Ɲ6­i .$j,*=RʿJEG/i 6[.I};-w; -VCѪTМV+(OsuƖų/ o<ƒMD@AQb1&a )$n5˩tYkQZ]H1GInѩCu7~[j~Z-KF$M''n?ù#I:@DLjIm)<65Ey aq9i2Ÿ )9*aD=,rgr~.홝NVyE_f}V+Z3sa;ul2/ƏN74TTqZ@ƙ5?]@@ǽ!70wJ#6bxZ9ˊFGY5M/V7PCO1W7$5]v*1TM4iC0;/n_;g}=ڔ{gwLk[,~Uum׮lإ(Lo.5o0XGiu=IfcOۦĊS;exI)/x#DA3|WlUKKaiֿk#z~?x;z^sma&e ͈1-u7'PUj7̭>@1ZkYJɑGB7TE<fKT!O}8;yp^lPgXNU-(+Gxyc}.K.8}m(KOsbF'㌽zD~ĆQV]tU1,_[oX%Tn6Hux%Q8BC;-,zp`Faҙvǜ[5įdro2m!%WnoqwJmU>p\ i7vk2A]4a@F_lj0eKƞe{kITC 5<+Ďv t4ZKW V۳S91goq5 JfU2z0#w?4DƓXYEy/p$ZJ`9|%S]5{^[b9̤w]9%x-%II2*/J~loO!ʏ/s<M#SǎR\삨wD3{ M>ך.#??I0:j[[oJ<1VZ;B?>'3wm6iSMN[㾞ق0!.bprjԌW!S)|Tf5G^[8)Zd%$J_%v #?O$_&D=C&5R Vy˚/byTۚQJFЈOׇݥXʾx>Nԯ!w\ QXAyO٧ę8ߏ{c&i@[?xfzuXǥT?1"ou_=AU,֯'+e1JMt~u{KkY"a3$i03+1oio.j{Mn1 1NF[*~YOȵ+慑X[4n=0Pl(z~+&4~-`'ST1nYmⷉc&xC##e'5[GUJ3;zc`{B-ٔJ.XPX}J'VK P;̝&QV\}N1OF]G˺ז27@Qտk\NxŐpSlmTAN1PUAWQZ9D]fJC ONM#DqȊzn% eDu=ImӡzMޛi,Zswu#rR49V\bq;_5h[DcޓE$Q!uU֧cq`J̮c q ^ I2 ]L-Fʱ*Ofp/u^$ǢT4V%- xCׯFf.2}'p߇$ߓӿ,-t9e1VH8+U̝<'zC>31]xc?-VDZ:=(ޗJ#SF?!{L\KȵS|Ey^^K+b2as&8>ANXǙL"5>AVh~% m$O+Ga\Ko/jNpj tӅZc:/$^SIGBt3!ٻn\iv`/DrQɎO.dzzk::!DNOmߕcQ"Cg^c.Miܢ2UGjOl{/@.W&k:\_BJIըH Bjws`v4\XHkzd=ΛfHb*Vв-ۙ7@<祭ɎE(|Lzl~mA{?3Mo녖ɪLkR[U ے0@Qc6C:H1(4Q0[OlZ;9h?foL&ƾnDniQ'ӑl+K@~VVOLP!4WILU{FF}0ӪEwkX-Ey'PӤ[HmX|r); ~~XWv:-tP%PW1C쎸ԭi^W f#H@䂽,-b=dž1D!(c U" F9 Xčg15~4nU(Z}qCSelOh5u)GLͷ|,F}V)!w0qoIKwg-"zp:\C:RG9:%C=qۋƾ0J7"0>ĜG8bwzb}?ܦf+XBcPT >?]l4^tЬF?" /H~Mbfm ( u#?x&fo6yJDeeiAij_HlAI\HhOsf};p1նp*@4$Wq\MBs8XOwXPգ#}lrv^ĸ #Z7ЙhKG7&~crDD%ϫC/ bM@L!(qnfsUaݓ7 KͺuVbd/݋0a3W^ '4HKq=Рȼ9>K,8#;]/#mQf^Rѥ$v'rTcO8ӭXjGm" Ĺ~l FrcYه,TxnHILx͓[%˵ !e~AGKsvcQ2P:لc31kDp_blG ÿ`6wu1œƜx~\̲]qt?u2#{%;J'bhz} ,M>Kγ&+Wh-;IG7"GTr$$Ibu,NfCM䄪ٔ^B.mRfGLABaVXh 'V?y}89$*G"*]\B=[ nؐ-,-8U#I8B_68dߗP:`*Ov. l{bPCWxDO@v늢ZdH O2@?UZHItI} @D^ zM(لа!I,jX}8b K"ȠCw#q9w_;^iӟ؎9eCa᱗:[ ֿ?5Yty.ѭ^9b],_ZO,jҖi #UFq@^Yo&Zy>-fٛUoN̨G'/nKˋk{9_aoqjzo 9kN;ҘKYeoVw>D(:\ W6 6`i'̎1ewU.י(iaJ4Oq.0 *b6HXXT^" ֝8afQ[jjm ^8_av%7UTOSGDs\_xc@;}$ kCsN/= #:9#ђ֔Ǫ`N&)lpmMBI]!6$^8i)FMqMax>Ş0Kc5,1̃ɅW+?I~Mk^N.+NxeGF>ryJ :ff$b}\}DILZ[L~xTߊju O6lLO qT3)Ugu=FoV~?@>˼ dEO綾fbX `9 uٻ|Yf9{6KY Đ5h[x嘰UG#ӽ: M)҂1!kߦYK8Ā?{Tc,/DɣjE|9 P~&s_0_I7a k+U'GNG'c|AP+ز=?Kn%G x=tqLPA4nɑA{}s?7b9٥ "g`D E@̀1;mhl6|4-Ek'q?ޢk;;,[eqQBfG%ڏ;^RHl&I~6j^zXJFQ44HdD7%[Jhpf`'vykS.;hTr$o4; qaD[fl/ʼnң+a-q]Lj̺pq~cdZ)dvN C+ 3=L.;ME::ĊwZDkaJh_<$=?j@)oG2##2}C.8\LLf|58pE#IVI (9$K.?; K]5-(dhYK鋃T.zlY,(0m-:o'I EiZvwkM$w*A zUp#6Mz6yib9(‹ &N5(V~~[ef֋|vfZJW1|/ M~f_Vbv@*tAr6pDNDVr2*Uُ=1(%y9F@f&^_-hR+} ldET c*_*s*9Gk] WhCk}a܇CVJԃOJFZe%C2uy m5R1X*2ቅ5c8hbcPZSZt4si[= ! rzNoKL t 巖Q>7vd4r?k>Q E#GR5j#(Q-GJ*ƅP>aHw)Qqg$bm>@"?\&oҊnAmzgPV6*QV?˒~"6drϯ%ɨu >_ˎjf!Ynf%ܡzr OU-a[.!RkU5,w5 9o>Z7OfL04kCvffqFDF 54c깑dB(4viYsԶrF*SSAk5ƒ:#LG@eSӵ3hW'~r@Ǻ'kDxD;->NOzP [YKyhc3rgA`x]dyZfhjsF Z0d6s^DIC\R8Y 2mM[]~XkM"ܲ[!y(IYɛ/L v#5o2ڦl|wBI!ZtηO@צ/;;)[  =em+v '}8k}w KQȠՌ )pjD9@OZ?b|CחEk~x?gƼͤ~Yk,~p=ԛ>qZnhlqv Yiʿ<m?*Em{ mԄ}FOZ:?yPXhɥ q;/ϗg_*\4Zqi!1J TI,]Kh4G ҤFٜ ؿ*wQkRjm;Pz^5yup뤽-*hD:oyMd% q`;yd Ulы ,R7xYqBƠ=AQ)ViZXbe`ڒUGSa{DkKc}Ů`eqYywwK4+ ՘@|y6;{[k%Z@H^#oYTlN{ dH?@LDMԋwl?c/TXj^L?&2è V-BFmݻdN,2$?/UnQ*@ol@%8ո(Y kḼ>|GSؤ?ՓW<xO˿˽~ePZkCɕF=O.X.br5 ;!^-3XYuʐbcqJ- *]X MrYFG<ҒK|LvQӯ9 ~$ƠPrZqz ݕVM#Is(x1 n[3$Qnr R2BDYX բвsgraِDƲ^fNDJ-j@l‘$!$Bf'7WЛԖxa3*G0|5%zYlk'mb,FA <ȁ121OV#wKt -CCP5%YcNF(c*nQpʌ ]k‡6hxOJ|iFkk!)s-J]~"w~lR..F4HJVEK, –H 1ߋ?_g%DOL {eW⎧SeS[1ItV7)f؅k,Uj:szO_Hf (?6#5#_LȞP]Vޞ|D*ALādۙd8H=ZV4[K{S.DŽt|_/yxeXf`E\^Y ]!Җim*N] Dj1$I%+ЙDHhw;rd26[ f[Z4H !;|#~cBH,FyX'hێUtSC{~?һ\8~Qy{R`U x]—.gc&]QA xt{/*܊-s#c>eM4RЃC =D;/)Uq[!r1< 5sa+"5'Gˑ\⸹+ȋsʱd8c"6Xp ZQE{.0*QRF8+BwMIjS4abKW c殇0RLKEd7vpBUVmi`6sCj\H͹56?"TmfK—]ՠ{{/vA[t  gA;Mɠ>gm!mqjpHTJ잫FӐ%GKi8~N@$#}^ 2Qv%fԉGp䱸3Jc:OAS\z7q*k9'7 Vd`V֟k5܂+\) Jx,zv\'uiSo2E߭O\V4iz`d8vN "KVTh1;rMLB=({ %Kz RQ@r%vQȝ^E%Q$`;*ȩ Yf_ZϫO= g5!oߏrCT'LS?ʭ|=ǒ5g4D߮ A4_f.rǿJog[~ҩpWLC)Oe BǨE<{d?^ug?k7VYhf&ʢ F{hcRӵO!i).٫*)x,;S.zyxM${n-퉂#L#Rxjiۊ;Eޥ1A'EVMD1R"K?in ȼjTOѾi|>Im5sՒy hӷ9A{*r'LBaJ|2!wJ̈d`BӉ2E!%Vk&2*WyC-jPC CZdYlfj)z}Np(r1}WGQ_њ}|D: +hkF?u/c->,&|Mg˷n{ep㼄E4~$lhB(b% ppR^.. N!l ose1iS=dX׹Hd`iȒrRqj;]yo%6זݣG~?er^E.K;畖I )rj|g!}L [g>;ȎHxtcPv ڽs0E<~[ ޭJ=m(i&Ƭ^ Oba@}aT-33pjSS"vǕ4mYYm6We4pJ҆Ñ"%7|$.^4\ +M͸Vp qI39&m&˓pCM` ?\`\|fdլy$jjFN/q`vhU Ԏ+ZoBy$qF2n*JߚΫiiD"Z9,'TM}@>Anqy/VXԊLa t-g+GW -'V-Ee'Idr<&3# [w^=NU(:7KM{ݭH#uuk$ č ?W f<5̠m%tM)bϊ'"d~WT{˲d.V462Hc;+7Ğ#yGw3 HTCJMQ feH/1M" C;.+57ḡv "hΓ$@-RjWv@̗L]\΋ 3":Rw㜆z<^_:47}XXeqaޙp\r73<;VIۂ؃+@+vvbA֘+:_FFhE)턫4a <+&D54SȪiZ}^Q*08_W7я"GRd4lDяM7)M]dDFxn"$;С(èF$yX62VeJSW>&G\Hf $QqA k1-o(7jRcEApgp{m"#*ҏX蟌LJi[S6b",czE 4r 87/?DjvOގFT/f6Ld!s|&$8%d} V[Ȳ2T5VV0ClăG? *nuQ<5-C\z_Igȴ$_ɘ2 }2q&e'&aQ9^!5[`!ԭ lC% ?D~C',W1`5&%p9|%H)E޸#$SNMi3A>" H]vaH9;{?~MG4TZIL\?ҴGQKi(c.( ؃9|_|iV ݭ&3rIk~^&ݫπF+6سR WW{,,< }3xMF~`$fQ@/N&~Q~idX쵍[G?MA$!*.Us<@T͖=F9AM$d#(<>Vԝd8'E>%_L"v\;AE 8qw>8/];A0ۚĊml3-6u4ö_ Ćw/V479t2"R ɉBb HuM&SQA2q!K&B/kX=|KhFCcelN_c>l$?hDvsJ7,g5!($% pq/+bK-jSZB/6UYAuZ|QN>YZM:\*/,:JLYCSOO*ֶ6sT5#,w{Jr<546*=ޔ1b/bD42:giO'i>Dssiq,m4Q8FMLVw#ׁV6`TЗۧuibGm eyupܤABF ݎ\ l˴@pwJw.x fl!yN]J\)u0q"l@~ޕ;Y)#l8#YA5$VJ98~",! @kevJo_^s[ dHQ2TPڕ7\ ϗvFX#᳇)HΊIO8HJڧZ.-ÇsWHԵ]"|!]~Ȍ@TO\y׭\ũH;h$"fl36יu#T|9#/E%I 6h]R[LⶼZh9c TݬŸ^SSAjv*+FoD*Ġ& J?JTw0XTA&k 'X-7][yRHG4 VqZxLh vcEmizl72/OS>\R./$K9w3HGHhGҦU||0F*>WnO^`Gv]8鎟6H))֐5@O%$HW_)?D~?9ؖH<5&T0;UZ#'~?2$(ۼ[󖻮E m\Ao겆va>P0 V7*z ,P!?C* i֝D(,1Mɧn& Ε"-Ufm^QЍ''Ċ#{k:4H#V *ٮy'?W]  zr,miG\Ɍ΋ c\e53^[Gsk"m2T! g$, E&o2TM%IttJ61Hxy9tՂN_O-WHK%OJqنsڌR>ӳ(7'&fD@! kPx.SbjӜ9Lvf%#m Xr^N֐)fU'.yd!9}1Ey~[9MeY-HI8&|3x=ׂ=ҋW)ދmAyOXFVV{+t2 "L3$R mQ;{63Ö<qi6|imLXi[en9/ځ|R#-'] ^0[)s۰[(i3E& j({U?PRхLImBt-#ojИ -H̼yPRmSĥW67-&#^2q!iIixZn[b@1$Bo)kzuݘ/ά`V,Urj$[ Ϳe ?$ ; /^f#pf0Qo͖4sHbӜP2~?޶ZW$,]ՍŸFj|*0M3@O8Xd.J9u֘rܢ^o Hb+6 ǫ14g6Z;uh&!5ĆM6ykYj$ (`٨37N0d}fⶐI,/ }efV`\y/9m~HMB ;Y>/) j~#H8#zeJnE]ζ,nRMHUqҿ,nufZ2\ȑV~qk,ٌ%-\3| m!PSW-Y k1.lAB-HYTB< ^ٕS*^ LݕPfic==@'e9QquwG 杁-Q,b9bG䊖}1$T9;,&Ruin,V壊8RMk׻e8(x uZ^EqE0+4hy=>/Ó6H([C$$bO@Nv,;UOr (QzMiƭ]xw"@WkLv(-Ct_`~,pe2&[~j/4c\2-HQHYRͰtq tM|E-a6kᑐMirk#ejnH -o#^sܩ>.HQ.tWѸKba-˗'C~uĖ&LݛWHc88AD%C!dѭixx׌za(f4 u(;)B(~r/2MSM(sTK{{T;7md|ic4|'h̃1Jf\1fRJ :wdYGzGJZs_R2jO#׮XI,1UDRE8e Z2% [b;[H`ffRUS!jX r:/,m읶ַBSq)"s!uM֩k>/MŽdnm%E7zj|#e>> ~T!`eٶnfU$W'E!Ri!4mŘC֧ux*cMU-ҭS*`$1Iqۍ?@ALTԭ@4MF^i9+yzk#IE*_nÊŻZNJ[c&ֵJf0NkZ'Ⱥ7KJK_JdDsEfHG,x'&t^ O&yBvLij b~"EO G`A⌾~??%0P[iEnэN?l×19[e; v#g~~i}plZDx[J :,=Cq09vO$>SIZS? 44nŽR$ ٺҠ+kY8aVYx:VcE0MUe?g&EC<VQJ۽3I~2̊ >@`3ϐ|vNoL4$iEG`dTvXLP7ƚʸqs"2c©lv;evDžo䄭+ۿ| 3n7Zu -(G}oBHˡ2f;̈dZABz9bZkLˎKcI31dF[X淗ZswFo\ɐ2GW\cܿi3i02H$kHyz9hd,"Fֹ,qEi!>O)A5Ob7_T7vB{"xbTesZpumK8*|U] ŵpNpi]}XF0v핐mԉ Ѡܬn_]?³2xK%GoH^>?frmN&!ږ[ZKiܩ3$j Ҏ Qs1 rFȏͽrUR :iTj rOD>u^OxӒNe9uvNA]JPz\CPܺdqS#9Rx+KkAi~%RBNQ >wQ-ml0dEO?9)!4;[wMgcLh葕 #=sc76iu-[KKX!#IB xP(:t.R$@Ci(ucJǝv,X4` 7T&jTѮDZB61dxXK(*,kd*v٩MDenc͕͊ĶPhw\]\F=8RN4Pw-~c۔YN? uۉ3~ (٤m%DY#CWܚ6̞"`eiك REi^zf .Pv{anFEܒ7Z|=zn=[r/6hf56#R7 }EyF=,̃m2Efe5޻o'"1[dD*U/RAȻyr#͍qg WjD+r`^ߎHVĩ |n%/j<_YUѺG"\FhZRC"5 B\$0lWBnl cŜ%Ȯ3".4R 纷Ki# LɞS\`63@!u'Ԑjb226P+JS9f-Rh\XK]ZAӶ*km[PyZxaTsI$BUU U@ ܏j$ҾI hWWb(fᙨ?tɉ}-RQ۵PݚŜH;>*{ IRIdS? &惭wRVa'*Nu0sSΏ1~^-iRݐI ?Წxme4o5ij:cUq"¼dN?߳F 2k) xm_D֛?m.^GՂY;ZN_/⋏,zKG k|d и45mFx3sc8@8dA .]Qs_ڽ5;e݃1I VD~Hh:3p;%w.z/t15D\$/mۻ ]ɥ4N9Orig@F?LaɨZ޳9mS!\e͵V0͎G'[qל Z/EU#t:iֵ<dVl1Zm~䌖T+BMbv2̚gp jZ|ѮʆqpX^&x_ Vlfyp@t1i^בUmyBy|uj| iAfR.\#ϛ?-,48{Siˈa:Gh?(hԮ@qIÓYNF\=#܊U@ x\|[Yz?(屒{EcZX<=DQ-ɮSl>mYSe2(zMn8$V4d'/jGq%0A9ͲUȒk^֔n@4|"J Vw(f v\Cl7bm4=a!g^tg\ؐ)$eV$U>jVp ZM7 \Bʣadi(CB)ʒB~`mQbpL^<+-+E%x\G%H}P5Gkǘ|>X"wmR/āļ@͈яtJ#Ky] ոx$F<'~_J.-'LKR~ZNL,z `#nc..b[~?䷻PKe25 Q8UYZfQb9lect/5ySH}V]$Ȳac^2?9lҟKz'ĐM jr#.T >"(6Po&I;̑ C9pM(B}f<3#M )_.˱qJS,X#K 譨iWY-㪵J/ M~ F9wc ^xht(<ç'Ȳ;SQI$SmU,Wrc:e^I^%Ku"yYI5l6X坝ƪz*(!A9rzIgsQvMZ̙jaRtW1J.8ڍEW$_;8Csme'~hf]8JI䟚Z֟OsjE'aLoN>(0[+ 0 [7bu$%ZBZ^7yE*v+Yh !=;EhWwkkts2۪f*>^s_[e4] Ig}K&Vz]wtd~_SY8B& J.IVE҄/rNKND1 dazƸu GN/4]hQL$g{^%4r@'cԭ1!iD۹+p}1(ut2dLu21șYZo+AQo}fS-bMI(Nb~?`cPEՔ !5$Jn5zq(WbhSH: HwfB|)R'b9H7?C"R*7Z6=: T91CKSnXV `b)oX)3K"7#a"h%GfkAҀeةrQx -p=L'ȳXҝd K$R,1IGSBFA_ʿ++H.ډh#Is#׏ĂA1_vPT0#>R8mz"=E;vPAj?^@-{AET)߶cKT{Z9D(I;eCbHGNA4ՉTFV<*>7LdE)LS)Po탉PW04Y$p"lgJ^(v̼y( _?rdQGOHQ:MN&A+δZYں3#g$|Co6 VyP]q^[m*x?@ɻejDJ(ip̫CJOTfc"F##REbW_#,%ys?,ciEG`а⮬#|B(QYqsA_ۢ}M!Q,rNgDi˺}󗹸,¤V6Xw$NI A!Qփ/ɩ88NZix1LBA=x[4 91t>j/M"P7ܞL-~wtbq^B~22P7qgf ;4O*೷&`t#@Z'eJBO\dxWN_Ȕ3J}{i]٘"`Ɍ c=eP[[nisi$:n1\@n(JZ&|"iW ~htz6 4Y1V)4W kGmJTBQԾ=BVHF;@.1\Ogҳs4t5}q jztxcpƟ:ԫ4~3l?-\ ޥ# H)~?\QOJvl+m\z,M!x>(%6u&Iq!#Dۑڵ:$JY\ ȦWdzPXu=O߈ -2NO\JqOJXcyPkIaX1A(X=\ eyhjl=|5p7'A)ERtTBFca|̿k܀KyiS<ZG3V2cV߳M)n4=JMY&XRQa 1`r˄m|Lgv׵P7RʫnMdVy}?Gq{G\#LI~~.'[#5<Ɠu5ǛIoleDk n+#|goZOZNư4NE@}ɧhr']gS5;F北4zv5rp8"Ify9!w maΩO v*AWW~yZxhPլ!f#Lǜ7<âOPnAʇp|uV$7ˆB(z&e;Sl<@XTteBډ)1[CM߾Qy2 %X*0ejX'REly%?0N!$t'ˉyT(1Zo Mk倅2+,&-]:A=L** U#VfB+Lw*~4XmӞY}P~O/%V PeȦZݭj:+C<q/~GWn5Q;*S{q> Čx9~/M,o45[+Si ŵQ׈[ƃVH8!CR9+RC/~0U=\?k'Bg+'1jxETG]RT4ހ_xFj bg+wk~^9ހ1Jf=N~#˒ O # ;Y+U)QB>[%>dfKh@k-D@kTP`[/C~ӿiV#| a;dǒQOPk:=Eg`k!id0 r4Eu_Zj^2IfIrpJȰ.>!Cd^RبaF; 29 J0 Q"g=ȜO)RX%v픎mH/MqFLj$uŖF0ai׺vo ڊsq k; HItYfikZ,yWBȪÄjCh-H.e L."F^HLe c|]kO P9j*> Wma$WAQr XЪGLȳL$u8|KбNM~c (>SeB aAR(7))#<'v:/bQY>d'fv}!~IY]yOSsn5Is\!;iz܂`WocvZ\PcAǜ9ȟjZ~9;HWH07 }JJ:de@N}GER#)l~|UD[j*),A%,E'z}"65,L   Sq>=z0!<[+N'2\{!(oVH77qĪIT 7;ՍwXT-_Wu, (V@* AwWŭ2cbqy䪍`VMEc15X"EZӋp^ԈhC=X>8,jC׉8$j4{EbTFbJr$nh0PRze( xEw«&dSDRkw&C. TP*iq].)ݰiUaCCمjVhDxO1Xd~FRVPAV5O_5\K̲a1CűVRUv چk&̾PEta-O^Gt9N}6<-S5o緖<VW.4xV$?KCg3옍T?D _`i"$Zve(Y6K hg4( !$,Ң,<4rw9YiBNBvJ2(!FZBe"|).ҠJ呐H s= cY,fE=2t&:oRdSId -/+F(/oץ, %ngz0+H{Fw |kw6Isn#: i~Ya%>$jng|NAcpA:Ɩ 3Epo v\93V02u -'md%z62t'?.Ј\ރ zWQJeSfQr~?g&1b^iэ8ToM܀5&|\!>!} lpOn[$t.'3kB]wdyDXAns{2匢bAn$HP0sn^>eznӎDё1+PGOgry?KMepPⰊ|TwYX6CPI^ۧnb}=ӄM' ۑ##paMk%3HQԵjj ;%TՏӈ nNc(+n$$p,? 7%U`WOl7c`C R\ʯ8D5A 2#\qniRxMt B&7c22t*kDYWdY&w.j̜~xʰ*(^d-U@ mdS=0EHONݤFn|1_`]aYj7+Iot*@GiÍ8"rX!TvfX~5=G?eIrzCq)+jz3j@$CJ(<ś6CnG-6S#=ŬFN ;U6 6l֛fO?V5W‡Sݱ'hq2eUZl[kUhGGyu?kZi29c +2n7V;ygʳkײYyEfK r¾ىՌ>mSZyɺ>3.uc˃WHK,/[=iGD)ipN٭QyT޷pC'_,O͞HV-Nߌ2oow l]S/q\22H39+7UXGBj c9)mz(t7zuv+.#;?L\u[O7S-yeSP/cmC#+ˊxLpW:H$)n%XJoJ-ҕ9 mAKvQ,,ICHe$*m8Pܞn/ւ8bB23XڛfIͣ yEŞ4?V `;}6CX4-Ϩ%r(?2}':I0o<򼌄Ą` >W!6`P6,/) r!CfqLIp yTkgv@$(O/j0$s<zW5π0߽O&ky@|Ue$P;eP.7G[d)&;?Mbb)H$˴-mF;ۨٴ iJˎ1V~3!7UI;H%lUy*:<;zw$Ğ|mʑJ[K; 'fWKko=c-E(6岞%쌆+TRe5i*I_.N wsEs]J8`kB23THXqs'~H6 PȆכNAz={?bw~$$գдoa1d_ܶ5_,Uv?j̛-rmN?E [*k p8 [W?,Y5WRH8ǣojr|\"[uNxб<׿/_I.X0AR(EujR kbx;PY GPFajɲ;#6dHNH>,ň9X3g@ʔ:_4mp5kmt!fPLa+AZ[ZȞlت?E[7Yb`/ ,Oo|-[;In XdG3*G윐k/>ǓCɖO=VBfh{uH/tI%'e*;,+Z.N3ya1űDR]2_g{h%Z>-FNiʌ~>{E)XaiUٟKu瑉m>{-ZkGdcșiBƗ]Bb\6&•Xœccuu q@:#F;|L[,g ̍ ВWhJ^ >l@Gt|?o9L]xƤB9v%>[N‹g?7RMHү*YOEo9__u˺F-R.mn,jra 1<k%j6 V6F>Cutn+.0[ȻI194LJT6_d,(hK{ "J؃n1!q6I)|,jI藲Yܭ9p?u? )ϧXlǖPSrsEս+5Waz#sv4r=`^Wm[i_Wv*3wCmRHto`B> >.jGFR=U`mmr*DvbUr߮_ L'"E+ZsyvO $\10 & 2i#D F;S-bcFM<[VྲྀjG#z`O Q|-nDS_fAiS4O(HJ#@ 0Y\Jdmymh/Q U4傅(D6j\6sfNrJ&FB"Hܽ*.ZRKjvS6-<ׅzn-o,ʹ`M>a2wzYZEcdRf{Ӻd9%Vi-҅``z4gԃ]ۉXQv$X^;Hb`ee*/cO'dfwS~aZq?9aQ 1Z5tu+;2Uyh Ve٪Q H3G&㒓5+6/t/F)+GA>ەQc\RHXB5#)5 խK9Qdיơok# f69H9 VKO!(c Ev  Va9i .-6iTAvL.q ?1o[>DL JRl ,h]"Jq"PVNl>DCJ 7qMD r!]OCR;tȓ[ o :Y*Wrh#lGD1ӡt KdN?p95$e0e}F`" P" `birʔ J+MI ThTVmJbw-P{qhнQdH(J 1=PK/~2ŀTOj#~ a^AOZأM#9hx~W/Dby7Tw4ٻa 牦xHRQbV,iQva!BKn9BB   cO*Ck,5Ģ1Xې]$Yy16wMw隀ՑͮX4Py e*DMNҦ7rRzB$kr BA'-`Pz &M. Chܱ!eHGa\y-j H- iZrQ˶hy;yOi-TD0{KCyX>Х5Vrw0Ojb{)_7E%¢[TQZYϦ }x/&M(;//ML}Zߴx,2//zrP{ q#~>O9!l;s/;5f46ag8HnV<SQI I=TQf(r{0Z)8qG#c‚4r2o-e-!) n8VR *%1bdN~?H)YReLx"_d/gNqXDS}Ò7 l\9Wɚ|6F:@>#CJ{9EzAA!g Z .d Iǔy[:KHl貞~m]]4\Oi/1[к Ź_Ԫӏ9N\22p c{-뷦ӜHo6t2C,t*Ǔ~"K}9<<""\\zc6O Pp%h/qZ׶dJ#dy_5XexKvwk$SIjSbf"b(ӅDWéGitPM 1,$ktf?[v Aݶھ o6Q,fxd)Y--އa+ rd37#r*-UXW ]#VvBjU.{ \GBJ#nB12r~JkwĔSֵ ;G󑕑Br Sjeґk^h(ݩT)D۱4lQ*J0^P|T#$Kei=gIPK"@H GқUBUaĎ[PA$v8*NA=@'1J„;7b0M:W~!H.yF 2;# ؇BAǦ؅Eۥehy' XG LwcVn-&yEJ4a N5ID *?x{ٗWqd?c"vS38Ă86M9+jr]F]HEŊ3D܌J7F?ƽ"G~=_4&WB+"Kv ޚjס"  T@,AnjEW$$#pLJІ5(}wu5 cSIJEjޣ.5G%\I O,,ZFXDdF^\"wҿ,4ϫްK#VO\F Q7\Jcx`RJn`SF@E O%q_iQ$0yv v3gv,<ב-.{kRh$@u#Ōly9WolZ;?L V +ӿ/ lu~nn ✯flSjY J5*326$`lAd'-@;leʐ۫!e77q94i]n{Gv?N!&B.nFVYHob+H"ȕJ=>19 StXƛ(rP]cY۪Ou+,Pۚޛg-s{$\(#WR  eRDvd2Z4ٷn*+2%"VN,dNԒkz=')sF+@[SŜ8I#% nx%9QG*k(pYdO,IRipFY@:MUuD'[jlGNBg;.c-Չ6nZ77B9Ea3!UTI5lb#ONw~`)Щp[Y k6oZ^yꇭs?IDpjH:liwb^\ejRA ,2Hrl0PiV_Z}ZFTX#ܫȃ#o&qۚ+>WԵI#K#!bIb{m,?) Y=żWUzw,[_>jeҢ\4@nքmLef QAh6BJ1H2w 3Fc/sF ҹ`b|pBz@{$fuQ=gqFDkAGed1 /S%CpNGJ 8&F!TF .O_jg ?:"Ei65Ā0 [^UqNbK!aGcTG,bߗ *Olo;01GI^COdN[[t"8+Hߴѻl#rG u IY.$U+*}`NpuC$r G7_'4JFM2o`P  v /+?z5.OG y[_{+ޛMs5칰8V0Y$r`d9y**1O2F:jf3HoD0hx$a*ߪ<ܴqL:Nexvo#BK[F/xoQzԉO0PFQ2r5}Q.dMr -IL~?Ct1JWiP9ɘ4 k4F;xCN"$~N֬,g7ڜ%Ō2sOƍ{I/ͪitŝgI ×Ĝ%~.~dy1KDԔ` N_'_{;O͏6P$*^?6>M?WJ\ro-.f-JcNMaVO1x?ǘkZR]XR*z0\`c(8-8tbhA#G'yrΞ]j2~փҸ?E5œq[㨿wy?^hUwꑽz[?٠n\[ #Z`sB{Ɛ7 PITvK^,KԦZOAey?|m ]GWVB*Uef[) 6Ù$\OO7^"q-b*>8eΗ2&AjΥ^ucԑZX9)OGN0$e_.m]_ަ'A,oN"aW=ڴbBJ)"PݝPG_i#/8w0LjE354=Eb'<@~{fV}@dE%_Hʷ,7`f.plH5=ZM uhH~AǻV7¬@0ޛpU{.{=!*ޟqrw`'&7==,L‰ǔAP>`$gRcC޽2Il6Uu0٦]M,w ֡H49Tf ?,)mA$K:@7TUOf&L$A HtȠ280Q}Dy2Dd+ YSHPadkrq{lkm"'m&"s"^-!}K"`"v_s×;H.:FtQ ul$10dfjuL  "+s 2I䡅wٚuc恦_mx< XL6?]|*6?Ř2✉>"0_-5Y U q)JJv" vDE{nʳRTǍrH>M-[GR'kb4 +Vlrsm5M ڛSr-m7YA 2>Tn:2&-P^S"(f "Rw*kR"(!(H%Y(KUZU9bd+ O!!utFKa7 N LE\.$+FI4qI=GF[rG*aJrĆ$lIJ<X/<Ԟ <+J]No=Sh'HxH-Ct|0&Fi͕A!\=&xut)7NԼdS.n-֑!uzPF|Aw-!'N_jF1{'f!@ @ I'g U_0w,q[FVZ> GRI\VV:WvnY,25[7}:R}d& zD ^7E葼 4#rVU#!ѝ쌱,) 8,v E!J8:[Gm&o.;ژQ`V';/EP=n`yoΏ= Q{x[2Wjpna MOlÔ6E9_DF A=zU"cِa~z`sYu4Pxr#if~sϤ/zxq/< ?(ڞ䷖@7SC۸se6N4wMRZꋣy|ˢ.ɥ;R}Ox'>^ (/_ƋC,_^kv_GMBh/CG&N4?K/=4:/䵺J8ǒ3QwWx+Qٸrǯ\Q_H#s!>h="S[8G31Sg&VH2zn3Vq,ij7JA`rגے5 +?,~FiPy]gp]5'zgM7qI? 3/!]j1H p٧Ǯcy?/9 Y}q>5(bI(¿H9d(wYqXȡݕ]H5_t}385f[I.m%huO.::=aoc)s}֛4$._o9_y5;+yv̭6YƇcS'j,RE"aՅjWVvdVeGfdZT@d ?!@>Znr* ogm5dV&^UӶG9}^i3{FԧI(X:v XWOI`i#%j!5Lݾ< "iJమݖGՔ]2<Υ AvؼLORNZj6 ĖdQFfq7"6܎:91N,A/.t}F9ם#z y o+Ǖ!_1 ?|xO"thS?,|fylU~8FX_RFsݭY;OiYH?r4͜hd$nvلpi)2XJ;ཀྵmtsn6e,J4zPTfU#SVEncȟ'yIqCJ[( ,|'afCy\?'za>󧜿)|䫯4O-GZ"N| Hu8,5SM3Ϻjk*8|)],[+~23w]a> MurJWt4Y?Ӟ#éVxH>G%]]\/oqJpso$f8xH6KTnTm:[WeɎ2!l29WiE~Ө>|𙮟ea<-?xcao}fq(#cZAF]Pm Q*)wkO60Dx%j"iv!凕˰5:yr ?KmfZe+Q$b2ħ!o.,?xqYͽ԰$W#MD1!E[\% *_gqn-ES0"2x9\ӯ;\ |O?\y*˖NxU^2ܾ+^K^V/1'/6ri6xGr!KPo{=_k>Eo ޗ,Ï<Tv̠q0 O/5_2TO-IX&3dY,`[F%P(zq*l.P1F^K $&};5VcjA;2-f4ZB-xڡHx&N7^[h' f"h)2$/tȖYk-F_8$ٙww1MNJ9t2٤ O+1e _ЎClt5'AN =oT<V@JFH\_jMQ܎CE"$-tg0i8ՄȱP M'(†VZX7Q!6S.{;v )Е;" ,mYcnp"3ы"i-QyOZ#Rb +^-i8*ƁLUxB= V0-BeeXf3 @ C /t2ĕ%śt]G&PoM!Lp!OIݘII~B|]=$(! 즼9S4ĖSX]@H;bM#\UR}2jA j*:yy-;uX³*]iWĩ;/so3jQ)T))F,1]E~kHhIF2,ipeÁǓ]_;un$XګvAߎ N܀w*i\-NnxgDwkqo=^KyFY#GQp^숩Ў$H׵z|$8N/E )OL"?fw%gSՈ2]wOzo#K%*. |\Ucě')JOViA>+;8ul~9IgwhV?J-t[)R-3xꟆ~6<@U3ILAq$jI; Lb i*̭p⫞*X{5wq4Q7iSf]WU_H8k^g͌XV|<\qS&櫜F1sg`=Bޯewiab`ӭ zĐWWT#EU 4~¶[i(&;#JdDhFّ ؃ 蝈z%i+q {6#S?GZa;<>vU๖)#3X5+Vbvt?g_L@5 IFn^x֠j7iU>?GG]s@<ߤ $H3jd?/q3_4~YjpX$ma%1M_9='HGM/Pl ?ІFct(7§fPПKD9WV{f$G9R@]Lr [Cmu!xL2< ^xl0d1t[=I;{Z3́ʠIOEC[ZpQ[OUoC!I!E嘰f EFֱѐ*@ݯa\ä4obԀ1-?TpKڻrJ<*($Ok2Kh ᑺrS{I.J!)YBj SПljk$!藖XoqH 2V?A1= #JΪM ,V4m$ܳ +"_iIVIrέ&.xJ6Qm@Oq{f/`ڔ졌OC~u*h$,~\~,y*yFu)70ݏMMnHX6Uǭ]_$ <9 (` { =?|<[%o K("u\EZg蕱K_1~.j[#"\NbuIi6а!CȥG9T |GV59)GGcߥ,iF4J<24&Q_};Nk]!Ec)o\;bP7JfF,;j3O2\wi!}6k@o\d聂 T4gbLb ~#b6 Z>U+Vۖ*RjZy^G$Pkc#ժ")HC!2(nq`RN[pwRh:ed'vw3y;ScMh#*CqMUa65QNNK?5Z|5_g%џDNo=© ڛdG`9.-iAN,2Dg6BH#C05d s$ZF5,N6jļ 26U+TN8XPIoǠ%W+ g!ӡ[ǖ c{ҾAcopuhjyYF~.O7cِ,tuMZbU:jaڋ9Q&һ,z&$e)1Kaq$63+pfos!O- F~h@7e@ڏuGvg*5 +F4eyh(RqHi`)\$3,U;C'R$B>!Gbj#og]"Sm0Dj>2&1MaPJUVB  켿d4ȣ4Pԯ=;EI =Bv^yaLu,'*-pBY#Tzܺ]Gį2 7ZhZ[dI#Po$:x)_Nc>(~?ޥ~aiby`imd*H'+bGkK;4~Ŵ3\Z=Z<^*UVE U2oų[{C"|s`a]migpΏ;(w>;wPPE Ř%#.CcnR+0 u Z75 Nm%>CXK6ӭa$Û#G-J_!,p }Jrӿ#Ǵ~]~mgYIEzJҨM<>s(ˌ17k0Nlטh)_ĞWڙ 0Fa$35}<ؚS|H$ҋ8pjhHQрe#-ho%䟕F{3^5HX`fOcoŴy}e#%y^Ѹ b$/ğ쳯vH}N9ҹ|}wl-5xuatʣߒ:ŏRt>ӛ'Lq%̈́8y+Rh@ l㝐H)]HJi}a[4/s:A4Q$"dyQ4; 'BM-RgI9fflmJ3I9ؘ%VvK!ҋӌtϺQRd;OtBXN}Tn7YJo?(Ab&-+rF+kO&@ddqYx[09`VkR0m> 'l֍wD;=(ⳝ_QsY9lkJ25LzS帿:t%܊Z_e v~IHc0.^yRk)?PSQٯ˨?깘cܛxxKP#.tYC#C#B5e@(d <5& qe DOZta$oImش1JyNi4G?me֗;_ݡSv|?k Q0zG"R"$ѱސ%ޤqfz5b\OF"&$_X`mEe5f[j^y#(ʃ4mZ Ha%Nor"9q8ɰ m+CntoS8+˘T.FA(F#FGh|-1;[+cM17LwQiIgwo.M,lQh&+h#=ON!pfBKe' Jh>p+ J^u, (J!L4q#'S%ڝ(FZs7i w]UM@ ֝rVA=TdS{Q*XnsgGpmͽI XnE)_6-pFB QTwuʒfAT(jQm^@|'7UquwhmU0xӝ~~Bre NB1S^Eu$RP>܍c0&2!,fhb6;|Tǒcq@pϙ5^ HMheߘ 52; ;qnI7gP…O>d@'l+v}di.@7? md|N3б~8c(#1G\sQHnj Hqbi>2Z\}Qu r(h|_UfBm k3J{)E-.v*"M䊴2W&7zuomqF`e"6YM Q؀^?yLԓF8Ƭ@#R_F];#11AC_̽W}RdqOG\_P-uyFC1c&&4d}L -}m+P~Y-! /B- bdFɴ;НPd.#lۭi@5jSl|;C_A%Nf`K!-&T7`~bޗ[䷦]Fh4PvΗGؕ禫zGwj蚋pӼYpZE_T!)zmH,$,Q3#,^cdqNhD[c{,.P"ʒ-2p}-Aa)=[]/eXI7 z~4aƲ/o懵3G-ekf~W:.qpOQN҆?0t2ED=K B=>O\oE9;>9]CMKVh$F!xvRøqqZ:ޖ]xR#$j:W.d8,DgD1J2(K dr:B|+ovo\@,+AC𖧍8  _$U=2*h |[6I?G dm1aeAyWoHHx+}W(sK~ /xTux#g|Rt]&dn?d ^7xF;o^Ie"f"7u!rZr04˦klr4.cԁNj~POO5>;>VQZ8`۾]( Dt[=Ei%q1b(My +JcV4K] jR>R-=g?ze_WSAm3udhvs,'/'qתfy?$OK$OEVoAy죊\oI,t{Jx^4ԋhy)_I B>Y~*zZ?E[ͫy.T~3!1Cmj]OtR2QPnsv[@ Oմ|p}rڦ\!~ro' שebyPѧy4ϫhɰSN|N6TjEߚf,)R(Xj|BF|I,E4"+_'#^B}@ *yvfi! f=D"iO^P$%jāҝ؄M<98ȩ"ӭR;Yi 7R%I&8_dg1ѷ@Ȟ/OS=A]'tNOkE)Je1FbYLYr" oV$ukjNGt؈F7/W_8W6Y)p63en.HB"P*e'_9˗<[aiH#7ٗhh^U4o]3+s'޳Mm#u/R+-KZJ Cc`nOk˫^_<W`XJ}p*\u mPۼrq8Q͙|ߛln&̏pY*&jb8&>,٢>C> NEdvFUI] 㓏'rd3N?:∞2_-aUmQfi.q#S?k5n>%5 |PE!ByDO,?jϣ._Σ_FE7{bق1N;H1y4n km6[-Td8s?dk% mo=isKE7MCOn@4!ab9//es=GDNt8 vSM|?-ۇPE!`A=k cln%k%mn ]"^5}?6=G8yiHŽ#ḳH @b.BʚX}vpƩt9K7.IpE:* f'0h&XiWw%YO$ۡUޘ3+3yQ.`KvoM䝑I)Dr0e~@0kpyIG6o֟\I%""NE'a^o+LƞTN)lJ1f5ڕ:PX=17b&hX !$ޕ CؔuZ)Qȁ]S˂K ;nwLU P֔=+n&2TPHMʎ>LsDח ;>i ZPƄNx2'uY^0?ZTAڟk @nkPÓgUli!B\+HN Zn跲w1oƗii]X;gbH m.;d7=oRI*H l}Snem'%ⓥԲWouxS yDr9KH:yX^ 76 TT($vԣW??n]P7laKg4)^ K#m)<|e&` {ǒ2aԉ)R*9rZw̡gz"+g\DYhQZ2Rw{QCzNEG,@FF,>}%4:6 ՘sݵ]0+zz'zʟFcN-Hk0Ư+$D/tci9wQZwdqPˎ?b}2 5>#"¿p'a\~ctx ]6Ѣ|\~ȅEC92@pDkQ*=GT iCLGb9Ԛ(>?`'YO!}(C@ 6V̄zLu:C%I4yōʒA(cYEPPDAbujz5^ +T"Ҁa69rHJ>9G<|@bs%d}=FHjWxA#s†J^X{Mz$fKy&Guܠq7dj"ĬgӶ*:-g]:mď5̡Gr]c_yEa/ K[HmL{SO"J|?+5;)3\A^z![$?4N=|9)_dw,iF9wԵZll)h\4a L:Ђ{`b\XӸ=jqU3* )Jo_L*6})ZT"Tm֧[ pڛa(~T}^g+l?X#M81Y*ޣ0o; =Y`(¦-B܋!;ңJ=Dx4⾢2#]c<2<8VYav؃֜À$+!{yUe&P HEy7ŅJkVd"Ĵ NCָ$藼,![|#p#!Ur.V44;ICQͤ.|ӇUS򽮝iGFan#Bw~Yx9~?92h"5bf,+P8,nM[UL"oJ'.Yj`;O m4*T>>(3JR((j)[1 ѭInx@ "unDv :6Wz<$G>W~L a'9.NߏICYӮUP`$(Ԃsmu(/I5B y&oȩuLc!20C#/9VǢJ7Z _6&ݼJ+iBP$k9 }>[tEW:6ߛ1 P#u $_Jd}kTC0(ʬ6fڙrb 2;!uˍM:b0K C"ëcccŐ\V"xerPGOlf9}%h!*c,,`P&P[wyFKyVOo7GþO .4b&k 7of.<">,mI>+/v@ S(;u*ώ"C/c'K"=8N1:I9<s+d^\@Ojl d/LњQ 2gHn-e+"^5u ]ƚpSMGe.G2/@îb$MY':!v:֭ju9eӎka{«h}(H% CˮDJ{o?2e> z7Qz8fqb0OeA6 ew( IlB']Ht}3K$+-ۇ*UWMpf!@$Dj:%BhI<@T<VGsDP/Eݾ RtE]m8}uNQ\ydZBMQ{/-.~-J 5'x%HJBp5>+l?y웶Zij#239;/^"}zpߏQ..j2z?+ K ~6Utϴ+52dآM;hh:zee 79N]S<Vp]8J[ՔyӇS-:hLqD汖yTF;[CCI?>\C !)TQk^^Axm74NJ~b(P#$vP:}յȴRm TY 6]P)JƢ>T|O5f#fתv-?L~4R|8P;WLv"i~&R(Ɯ9qrܻ )?KL Bj ^UMPgzS <=eeP1 bVL~$6,Q qz\sb/TE`CqĦ%+ȅ(OOm7ik{{%hl%$U+FxE鼿/qJEzU 'zU pU і0\HMV"NQs2G~IsGVCBM!x"NF 튅U(tX9Sy+#xAUr ï w?Pgt8Mu"P?ߵ0"nІJރ 2?. Ib ;SnHy(B?dzHs݉[zbURF/\ޑuVz QTRhiŕG'9t⟺R9R]4 CMXֻxb^y bE4~6XϠ_l#q4_UBn(Y W ؞5B`!**P:EI JC0.2@{nVD#LgI=+sD"K1eiǨam%J-! NP 9!*x3s};򖚈RW1_\Fqxw1|䣎DTE_GyVt6K{VI.C#q4فڟvluIw.L7[5MR;x;;&ri2ͳ=z[w9JtI`nm/nNS̍W /ّC& p8ځG[iKq1m 3BЂ)_ ~?޴1JԶOi ) ʲh&U5;NB+q5=2I[dG2D?{.h'I;S\uqX轅'i!PCf ɵ|/Osr∀@lUm Prdf[YꚔUG`~U̾'.XF`υ,O1\\Y7 y5x7_c$?n=4 ۛ~iPes]Cg3 U^8rSX-jDƀGo;,p`"W%w?+uԵU0m;ۇ9K4]zgRyHmBѡ*$ B:2~N]JHG~}ZH}[iUSe#xabQuE ^␢'`glyKhk/"ĻHeP.fc~qFn?txHۀn$Ps&`:^oÓH 2\,rג\1fUicw+zJ),()ڙNR$f,25KXiɶc_leiY/xຏO$hTVDrmI_X$b74 zqW֒>F<~k`Ґ94C`T2r#AoCmoU!1 LBlH^ Sosc9[8~#8' 8y @Srjxl:۽h~nBAK#GU/za%[ٔiHܝ]T?M","(. HeW{ky$?/Vk@ʸ L;]ڝĻHl+_|c)b"U=Lg &6WRZG]xf6<~?r(봶#)4eWE}?g#p?v$p,O,Bc+_0| 4G>Q(DmEk@E=W~See4^MQqs$IAt="]~"u#j+o#jIeqs5 4aPƀmŁ6nNL:.FN)VY5ZW%fQF>> w5ҋFhQ;^P (qթ}SNؑinkk%D$e-U"ybXI hz=qܵ@S7WDv*TOs[1N#@Ks*H]WU_U7*DkMSLz̾1{n AJe;x|A4(SҚS:1J[yiG!ROٮU H}u !d_݂e#KId:f-h3H^7/ǬfW_ǥ˧YF߶c]9 Z]OfSR 7ݷ8,ѤʍM$2f(C*HlӘhWBlz~Jc":tTbJ Dv}U7G$ŀ~z@RӬbյH#IV"7_ r5lU<ëX]\H'ArF, |:%2ިR1͚DU<{:V6RQ?Xr;e LB1ú}]XYrC̎!z_fs+O@q@nˮڎ9Cyuf\?NvŞKΗpI+_ :u,ŗj6;a^v>*HZZز>Kn i_˺Ϙm"FAvyB^[~;d;y)馱j>`\ȱ/ T<~5:a'5qE[KmCM NO:) QYL ?5%@~?ejԆyg Do_uWPZuppb+3^U{Q8IT~*lzS52&_c\%x#VuQ7op2;2; 2]NOTFRw$F'ǎJ8a"kȳO/qN"(6;I$4̽6!ɟ;/,@Co3 HULɆhUdtyG4o^ e# <+Wt\.n#O92 .s Mj%{4 =UVE]r1&֩ڧrqO .Kj{*0P]uyq%\_U"9^ m[!;(ŭc")?v@͹߳}XIfvou+ıժz~lٓcG4YcdG491kv+)M'D[&_\~ӹ>@Bg א+_٭W7z iy uKXsT^*gj~ildD'/ːPIjzЭ"+ ngi pn4 1AZyLvZ`Jd?W+jnrB6T$CxܔFŸO Xέ9Z-ڧ#dNov ~׽(G)Ȅ( Y!ERǨKlJpmR8WEExb٬.n"-rhJ`,I;7u,3ElB3=yH7OT,ŀO|P( %K)TՏmCqRTD= qRBD[PHlbPΊ:k<۹ɑWuKl}ߣ [Y9X ˹PǯaeI(GoZ1kV`@Ƽ9po֪TmevaT[ߒY}OR.sOTgsx8qE RZ>"c#N"F<+.i<qCor*V%׉#cX.feQjuKG2n>" 'm?/Lw JG&S^.?Ңtl\;aRs$ex?S"O)^חW7~IxN+ y7"D~?=*eu(jE8֭"@p(GRu 4$ i9 JSr7)\p/׵H}^]:"O%G7{!$w8[miK@#OT\WowHw&>\ ^%Da3n 7|kG"Hj>Gx ;MGu  ܰdDʃOs bxobXB]YGqas=4>7x\ R7Y%y7=O~maU{ťE0SP<*T}۔&4Ui)4>C BDLWq;,^Np *3VERAæ] e6m|g,qlHwa9?.+' =9̶Bf$|\zr4&fNq^F붚tqMmtxW )~p=%xh->uK z]Y #'90ώDG,0^Qzcs\NHګ"P+uQוv\,W?ȕTOcKHJT}=e9;tgIX}=8<7;n(xH$FJ@rDn}1DR*H'|$J(RPH6y $'li-SȖyb"i$n$? WXwTи4| lGJ# 5$Sj'+mⱲlӯLSh{FZZH}Z4 좡AlR *\(S@ljnv,\Fsd km,u8@޼53#"AI Vn&Nf!c E@ Z,T O_sE4DnlBQHKtѥ4|u)dH֩ySPFh ڙ^G1^iŏDѧdב`VWM2Z$lv4 CYqsyKf(e1#dLcGmk*UY i"xו20?H#G]=Fui6ZYu1^TxBo|4D14b7IQ}Z=U$Pweml!G}(n / :nO}rjտm~oJ}Eo9i.)_m4@''`[ۘ[F~AOY(j93xDC)0 rYGz3 cBT ,3VF*3mDJtbjGǐ#fUU3t{&"Htڃz~2g%FE@PB"1F&ECc["O {vMu(r UEs?H(uJۘC\fq.nv JWz bmd[ȡȊ%ʶE2z deX;s'M_-YrQA/ZFodu5]yTaQ߈fv\q!Ìǥhz02bj7->8-y;9-Е ITW2?ya7z%R\OsG䠶merf4c'3u`$o2%ְi}?L2M8 vl:̑N8?G͞k]8] WJ t ~YDSlqt[gHtK i ˄m\͛B͂ivSV7Ʊf`X+Vn?͖FQ});Mֶ V?TjO<9T-O0m FRGJRln2&]巰FDLAS泄L|.o 0M~=nՅ̖p2[fySf nVCcuHEIhKem סEtg#\2+3(`EW|"]q']+}2M&ǵDeFbzIB֞-`xOO.; jh-tFeޱ0Xr;ӮMR5P*fi%P58Wז2 b(怖֊imYǦVT#j|K RCsuz*#%cPӾHUm6ChJihџNտxA(RpFr{/c R[PRHˇfh 8Tk";B^L=ZvV{E<@7!a3 Kagb=-rkRQƒy67O%{ _B$䰧qjWl(mFHn51$'mUɜye}")| q(!^ZFzmaiF:$qo tQ'Nbrb8rJ\,'t%\5(]O_QXs: l'tkDH<lʔ6fb6{Sk;iU7;Qz?JCƦr3@P_m$nIEtm~}%#Rez~xq.j">(U2HÚFVNIA:!#(ͥ%}w'$nRԵ[^^]rj8) O{A!~1@+O%zOq l(3SFr8A拲I{NjH[وmbl`c`0u^]G02WbO:Em*9LjXЊʨ( ^6nHufBð؃2E1}^EB!\BHп43 YⱵiR`6$veۍ#̼zfY+IJU5ؒltr9♦-Q1Ҥb:tƑ " s?(4]ۖ5oܔH߸pfU&),P*:Jq4#W",5 EUEA'3wrCZ"L9Isw=o'1s/M9; &W+J+R+;L!ſ$m0YF IEgaWAE J"MүY5+k$~AUer~4)j薐X\@KJvE+ otXhRsy)j]F4i27bHddՓ1Aϣ5$~MX]\WOlB d$=X,拙KBalHe-cU%"5j?viڦI2l./lB̬* ka"H@w( c^=桚)am>RwE~1Lce73z-hc_l!020 Zrx J{%2cwF7aȌKWK_ !oF],2<#OP5obg8\]$(ԁALcGi}N|HRW:BֺmFO;t\Ye)/L-'q2YZ5EiGClytxC{jZvvY?NR *i#˻'k/4s2o@XR/NU$L}?[ 7RKHQWn'~kMMcsr54vef:[3rh6qJ;ԛ;=jH_EHn#.doo|k&Is5/ZTCoF 9 ARv=8Ȓmؾ4-E,Ado`֩~F8 k˘ nnx,}K$BP&,Zry*BĴDﵮ~i M3c s5Ո8kNj%y.V6GL{rd7Lu6ץ%J1^_g!cGǪ6FHh I9`UW`5͑=gW%;e?d@[r~xM2 D(YPW$-MNfdk pFT=-+bj.$V>e  Ib)--֥!I ԣ-/gl]D8z5~XqF]'PլƶXW5Q% DdB7)q7}DhҞ5ףוŽөo".ڿ?1tOA#o.ZW>QGnĿxb6HWFOY*FPWwo~iq\N(@:4PkО6LE?I\5~-Mf|?7"<@v(RhR)4z\?" lI,+z*W4!Gx9}?Hc{6V'he0j,$dUz1W=} 01O9sHeU(?em bI+Xw+zbO:/(YO4@7IQ p<ۗO-`'`xr)RaB1Ik+;ɣVgi$n)a,T%4 #0E2l(Hp{PaHDqUPwjcJvY̊⣰)W`5/}5Vm!FN@qqW.Dδ%P;/dmX@rhO HYy~&?#I._ԃ*Sz*PM q+ʬ"H<@CPFOnKC HaNFX &n~ 6T}8 9-bK]b55`jp#i#^OHy!5:a\5~Y\j11O!$8s`NJ[nK Cy~YenI:1˼>fA;MX%W`=hGVL*k&@C>I_ KُyT-j90<at@nI#El4PSy^Kx-ZP\DWNz0_oKdw 43GT4HE1*Sq+Gz5!{\,װĖQU#`@ $;".sw"bejD7EI_:ޑުht䑮EAҕ@y)}b"(Ubq^_,dDa, /SڭNuk*#`l`dN죉}}Cl䌒%֮KӍ0OnAxv1ċbFarrPՐ&!*jVtm.u ռf;tõj<,#%HjB:׭lT+Y]km2?‹^ S,!) OBwFRV%& [tqGf 4U0vޣAɵF@*G|T_L7IJNb{aI#`؁sZ$AU 4OQ*ZK(z6WA",jcM#-zFGeb=KG+]3# e5ɣ6QqHmݼ[ hPқsv,R3Bmؠ`JHmZ7Y.|J_QjiQı^T8Aȼ^iY)JDMg7#>vEoy 5Z 4fN^Ԯ͕JEN7UagxC:I ьL-ncQ% {"dDH9=#uޢ:1;!g.ʚunޗFg.8Ƥjn/&OzYmH 6!GFSbQD#KT9hl12u*앩4M{fIxk!H4.w!d-QvV"f.9Crgd#M}otIYNOSc$$xyXѵ{ GOxh;OZoU08GLe&I> RY^?)BWd*sG%q(9 v?=Kz&iʬs* O .1ag7Uc@ aQ%|;%l,^;O- Xi}aYGS~yI&1ߘլWrhw ؕ9fIqR#Q=?.+i] w'zrrWm5!k:~شd%IB~zlsp2#*]:a4:7!(yT-ka=$Ym {u}2ޔsP4tak|Ɯ@-pZ\ $#҉M Gݫ Aw 9WA-Ѥ2U9=9c'H*e1eV.It}t>r܈ AhDH$?=Y&ƴ֧53hiPu;+㚙9bmDX?Tq; 34=UrLOT#(}[Vf A;}bD_5eFK{& m^KsBw~?9&i:tb&UP4Z9'h?1- o1퇢V&#^`? ;RO"MAn9"Hğ1Ey'Ð8`~/}_oɓm>#Z_K$"r+oOɲv~9sWHRO[K?͗ou䶇OZ+xh +ꀵd)2o㑢eO'|Ѯy4ojdȮUހ6GelLIWK!:\ _j吙~?޴^̢Uդa߈ukZn% O9wf%)%o (04(WfVz|4眱/LxW: ͖͟F-@?J8f˄;\9$G!mc %`JXWv^R`ǨG2eÐsauu!E!C#ÉW&=M2KQӵ>xjy%BbY#U%U zTK,rHUǐvsMuƒpRZQ*|D?g";~ed,EicABZ~?de7Y7&ڈYo׈Y D7`VXT` iԒqt[Z!YWYŕ!bq?mH=\T8?uE09S5"PyN@tk_ׁ4Z<(#YZw$;tƷkF |yuj0 &%.#"~GZ7T2YFdY(T%OҌDܹ?VoQBqZ,jCZ8(H'pµ@١nGx9w nTIX9LhcB%ĐSqBr)<'HlyR>DB6w~a-Sr [yJRlvk;X([B[`vo~,Bdk! %JD x/^0jdS)֓˫ZT8ud/o c1>/qEXS~LEM>֛;$A#0"JPb0l܈7"5i`4jؒX{{UQXW`q+\)жhō]v>Yk%K(K ܱٕP~?qOM{+굟ά `#A}-dVNuf\L#1'&D`ת qg-j2G GϧuƄeRM_-[hRr7(\/_qs6MKgSwy٭9VUQ$kTpflF9(]f_ w~$A~n[גO"6qWyS11ϫ~ YRbJr_A'p F' >q jB[h/F7RԘ5$`w~<9~(~Gs\ V6.n 5,UwYe2"̌%CF'Őfg..^*{?TIIHxֹLL~ 6{18sۢmyԍ¯@QW^uI(T2Yyn S&$7E-?˖ePx+x_|+Pv3qc$3S^1K6B@eԮϊdFLl}-y H<jY27Au~DGkiu/8\IAwqVh toUԤYd#к@I n}s\'MK*1g' -2U1d)@eڏczDme`[Ï9|9GqK|w ֵWefF-5Ϳ2Eb9ˋȏuӭ[M4{eZ)' 5@ Q/CIZr%*`' ~#ȯ;ǥ̳:mknJJH?JNܞŒgJk1]R󽅵i+ypTRe lxyH$wm<awkepaO5R!Yɮ[FC 5 W{b4?֜]`dḱ Ŷc6-<ƺ )E;z_)Uz 5cuwy.р.@T(m V~$0av~_-\!Ό&;L%.Mzd@e ťÚI dp3ol2ɬi-p=(MVZ[wMa-v#DeBiRkހGauto/07p/plaut04/widgets/small.jpg0000640000175000017500000007654613570013207015035 0ustar skskJFIF``Software: Microsoft OfficeC    #%$""!&+7/&)4)!"0A149;>>>%.DIC; \A!1A"Qa2q#B3Rbr$4C%Ss5t(?D$9"0e, rĝ%wu`,c~$2A5=OrG$sq]`K<,^%Zpf_sVv'$Y^$^ w=!-x`1`7 G(woqy? .AN'fڹmB).@ks㡖$"Pzr2 PdN2v=GYO c5y͚]SW1h5Q'Ze/ y qOadd| s%ij$\+J=!:7Ty -m{Fqvr=V"K yh@ oQ  [aЎԮ}]ky t/dЈ8Hw;MmquY 1}5 {i~+V[I6@ ݨkj-Rg+f1OX GI \bT Dh,x2?eM &R~!f|1 KNpaYfxN8 ~dGhO,JgyC K= JaKmCe!;s22L'0@?Om>ݾaL}i2@$1B`~%a $qN`3Ǽ5^I96n|ήD.` auJŕ=[s+Pןq [6; K-WV9YMR~c\+8)ȚWFQ^]y_=B@@3>L g).uA"!R=1q'0d=e Zfp!)Nbϼahe K+K-,1İxcN2e(! 3M@&0%s%J\= k\{QbYCFզxX'b#h.CeHbf 5֛Wigз\x!p: q"Gf܌7q֧eۆ[S_kuTjR3mjtL3jC_m(tԖ'!8j .%>mM;߉~p?oy]JŁSqrHtj\"Q![t?BlЩM :tkOyj|ǯ f!g2)!pL01`…織%Yds/X1rKkfQJ5X`f1X8iyq/8_S8"s̊AvbɌu#DB1u1+hqlbxNLzՁsA#(w2a% ]i±\*Ĝv$IT=h7:Qrܪqg+In>EVGFת1OU#0-v18A?M ][-eC8|&a":PfsÜ7WyC˰tX8 9-!O^yRvy&Ffl$9P0 xĮyr Y`cѲ!|3X<ĹB Cb1N3G2̧\,3"\r*HHcFH0!q G<1x;pfdduh6SkoN#,q FL,bQHn";l݄Ҫs͇ o75~]H:v;zj :{CrZZ6h[ !zɻhO9w`VEL.U!1&=O"|2dO3b="}Gda0ѣ11)Id^̐ps [M_Mۿ>-S՞ҭ]2%ggRLh,N0 \@L:eNy6O{jا922_DA9 Q,Fd"(Xlϧ9_@  8ip0!PK&Т{K8VJ㠌^%BWy:*c,.GaZ<2c|>sUo4ӳQ9^$F'^f>KDq`%2^$^s s4 @F?̢A#d0S9'NXǍީA9a$f:acOx&F*yyz[,0xS5+;u-5tkP^tzfъ(TfWzy'1|5~!Mĩ_y~WiVVA8̗!t둘YTB( K'"X2bV}I?!LS56l*O䃉0;q0&}mmvSS7kO1T]c/ϼ SVrI,eẋQ,Kr ^9"x|uϿHrvC?Φ4O`VSѰO#?Á"L2I&VI#Hʠ٫@ڞU:(p r{H^n}3ei=vȜo6Se,s^۬ ONu^3g9UQ#v8bM /#um֋.\03O-CcͨA 6Xhv3wjTSQjlDҙeS K>%g {A#G1B%v?i6+a+02acA# cr86GX2knk"M qפ-il^#A/1ÁuCsA#+~e';{%V#lvBc}6n#FLbxE`p>e OA .".`@ {)% \e/jrW]k.˻h#Rmdi˖'RL΀0qH#ft+"孁?<}C +iǬH{FZE+zݠt#̶2)'RkoOH?a y2q;A[<)HvSk 7ݦ qqԦ] O|?F_iOG˶,EC'3x*WZ_v&w5Y!lӝydR3(@pǦ>5^!-WBaہ0\,pbҙN=㱞%c^$'is% SeK!Ah9 3Ħ:c>Bۙ{a($TVnV;y#1FNe̝!0 1!-FJIt Բd5Q`Eع]C%dd`j؏ v&8*T {s{ >3NFzbQ̀`:q"mYG \vzf]nx0(4ƽKd'j{`B8=L(PgE{%O&#ÕuW{vKzjtZt `'G]g>"J{9^pBڝ5x>ԝը?uWǁ3Uq<]5X_T2ՖsOW]',!E&kz@ %ilf@ln1܉`z!)NH isufv0YCKґ^,'UqH<-u:{+&܏a!&?QzvG#~nXmBڳѺfNmCiF)L\$W%/@ɚ'CvS5nOJ.ZF Qudo=M>%VpF>O2;D]@D^2y)xnJg#QU59p%V4ֈcN'Vcg0jF:`% Ϳ9İ8&ҥ~ =e66TI=$׵GLOF'$0 ow'wZ̦mq2kUٸ u4Fx&>2+%91)f>ķɤ V=DAQ}Vsbde(~3.hM?Wݟ{r/#wCI$ĵ@n ]x&&kk.GĶ'!{&Ȝ?X`D:QTX>J!`; (uk^`=ĭR4w`L^ZI$ [R>x1zz1`l>UÐ8a᭩Tzl%IY|ӷ<h7 + "s1ٞ&#P81Gx tUbI0Z,T*.F'\؋KmUa5~;>G k+ƾ5moxfpֿn_?~ Gm)Oef U1>Bǩ *0:V۔]ǿ_Rv*8#m}ww9Wo'Q1ZF#=jU_-}DJ>؆;CXa{ L=I0YX++ǔ,81ڛc\UٓP}@@Ue@8z BPw=vU,} Ȗ0b{0{_`@6xmsuChEZ9?y,8%L`|ɿ˵]zt1ku)Gi1l `JPZL@ba(y d!lJsJrgy6A&W3䯨w1{_µ(7V=<קjޖpǀԗޡ5>/يӠ;Kk» ;9'6|zOO&AR˓3il%GL-ffN 4]Ҭet:rQJU#q6JتNrfo.O=;tܘ (kK}Bz55]3pX}멿ż"($ %`5Sb<ݾVW\/;@M;󫡾T*:Jyy1%^q⾿ɉPSŅ3XMff-^8 k,+)z{?n}#/$*q*X: a9T[a6E{Bp,[3Z!Ru{|Ei3Wk`%iI~q*qPf J6quUd %@;(1ce჈S}1M&ϨXLv#W0\KEX' / v169kޜvPG`1np9=`mu#%0Ӑbϱ}hd'3Ɵ-x]\٦&bBzHʑ:@'}m-!'GWhoLyx}ntۏv?xVOg>| k3i0SQ,a輁PM)u' ]@-*l{NS1(H9*z J# Av9 L.> (ON1 $baȐ%{ 3~=*gs9#zBxvh 8 zc:G~ k;.瘋C4},@AֱF&@ z6v>jj 5T_еomdbpֳma-LFYN>?ܑ[Jbw` 4_B .SVv4 ߈Jaǀq+Df%mz;-:].1U67j6h' ,=d&v?Y]82<MiM\&,iϥg6)]jȝWZ3(:z|<N[R1 6*S2E2ِ8V lŗ=sfAzCЗ̰3(Ja+3r*WZU۬ẁ ,9 2>:7^uwdy5? [hn>㢚^ $iv9ފ{V>3=Kc\( ,{3>R(E=I&Nѧ^49L78!܏iz+V!.08aVKj,ǔC,c K% p%rx:Jj $"*yNIRߩ |̵->h W\s 0>fc+\Jl/,$ '(4!^y_!]=ǯ+1~+Ay=dn3ɿ G1{['uiMsbGWYbɻp;Z/OCӜX=GniTj {Yei)!IMu0fmJ-策OJ bq5Yzs;O(jKvP]q}] uUWu(qgC&E(GٺQU_P߹F"]iWODڏʋ2jV@oYKC?i{Vǒsj(%.rG ۟=fT ӌ?̠y@G={[okO+(6=+c"inoUƲtjAbuE^cpP ӞaVTnljhZ0'9&U^9c!1jZ :+(67`giLݠnuekb0ߤ =qk->60c-zFC7.|Ò@sLU?R1M(VC/#;*͖bkEb"=eL 5`h[`y~Bm鱁_$8$,Tn.i,5v`{s:XGZIԆR0f:{"?:^6i nyRy**0U ݡ)*OqdzxL_I\l9R( x,Rew6dIbg;\GUHzkmvt Эy|J vUZ]Bc?Jx7 [#n~%l?i`_eׯeUy&yt43*冪3cls(}.d(a={Ų@Ҽߟ-øv^\'h]9&l~#,"ʫ+9 LcGH*kK|jg,dTk.9xsxYPpd^&}m Oɂ1g=%8A3@R%C /%yx:v. mM5݄_ =;0vo?!i kץ[sf3Kj7*SRWˏN/<16T鯀'?}]0a|i6UÀ<YVA"ZVϴy8^¦[4:B}:qWێq;dՏc>?眉W_M[>I%(HE5E,B6XH[#5X6AefpA=me@FLxkg&.aUGǩssO]+a xa;" cKg|ճ'` :T6h"G#3O^ 3mzu<L$p-/AcehӻOE3#0ir1oJ93$ HNp:ԉQK-iu=0P)" °'9S& //*%{B~а3 daX$@*`me=[ ĜLPkjnᦊfu3vǤ }^Aꂐ{UBC0]~{Fm-.zb5ףi >-[2@D@9Ruy]dj3u~j2)='CuMK[nFq};WwP=Rţ'!s/qW [-`wLĶ} fgQnIcR8jl1GOj[}#-L.XhPp |TUVʴk ߃ʜFV`,O~>OWOv8 M<7vcjKtFT@-?ɨrk8KWm/TV?2618=V6sOyvEI`<16.DI$#} ߻H4th]s1 Jmma_ Ae!CgK3&F8:ɂxggKTdq̮2A2?g*ı9cMONZ!  d*G:$m&(:{w8c.Pϼt[(GA0[jm0J 6YT{`f^;T 2}=>ʓ! Fm0?7fNytHrOfϓKbl`9,Gm@sS3$d`rsY͵=KH֧aXR#ؖ,l0>xّ[˭?1:Ƌjq3J T۾kx'Ɔ\ǁX`p3 O$%ʏ?C Ċۈ9OЈ'Ԡ !kz=$1[<XP[gZ$ ' -zӒLxBĐ=NkCmq& ծNZ6ڣ}(W~e/1i"B8@ܪ=zI&BcHɓ dOXR|39^Y`2Oc63?@~LKAczR2@ȕqZ˩8؀=}ͮR JtZZRðP8r5 F*ᏹ sۧkIPWh?v9Z>І,H0U 5=7m6NGi섳lBO5ef'Gli^wfib @ԶOhnȌ 2_u*zgsGVI pY 㜨'q hٵ$j+Ӄ0;f^ɀbu,ᮨx[5=@eXA$(#:uIBfYSwFԾv¶N~4[ťpB,xrGCY\ʋj7v8Z4ںa /Ky(bA8ϰ8~%8]h~#ɐprd|fP;#n qWQ_#NX~L ,;dk=`qc+̝Fd J5XIJs3)aR#>l6(o8Ov FCTz[ N|?=WZ^ H?3`O۳cU9"$y嘜il>Kԡ!׶ (ucf_sC H9Ss hV]3C4z$wcIQ{33~ 5js.J)Z;i;X^0i:fV~2ԥF %i>P)ۤg̬B6$lXJ7+sÐ󹋯\?qxh(?2ci<00=^HS~dӠ:c=8fyȗfTզ<2+z]97`Uav Ĥ1KDd׈B!-Ú<}am@y$Yy +o8Ľ@3,dR@X1#2%O-;TReKiym`,O=6Fh4qV0#E WmA3c2ؤ`PK.Kk"Ap[wJ.YR:afЌI͠12WxN.8'v668iШvB,?V[W_)0=^qKGNۼ}?ظ9'dѨ\zq [AV߬J\, *9[w/>b4VWO`m rΡGB` enPP=D`T쫀~3#.s6"F #څv[W[p2F:;'=J8=v0hB)ܹc !f_@`0˒N8bes' cUG?c,ȤW`zěa1zB`뷦$&ddBSL0 g=bNs$5 ZU`*1 2j8?0q8Ħ@q&XzAnS#P7Cgw L]P>x*fңīgV ?vL09 KゲJ1\]Ի)->!=Tցꄪ<ø:ְmPpf{uvhZgm1^+k5 *,'KF|`mgCPRr’77IŚ}6l꧴ԥr6'8cM>R-k:2JJeRAF4sD,~kn *i+LJVlKJIǤ' LFXy$q2TwhX1!O-krw3n@' + ?R?'&V:nnEx}ze O9K#A#6Xc@63cr3ܘX=7'ӏpg JY[]=Ci""(!  #2 ~"` HhgXu2q,](=LOws$gR[M06=@hmZs7ծǬmǸf,EG 1F W %׬sp#M7ֈrGQԀpX|B6Y__W7yR 4r6Xv1ӬbZo&-]GNߘ3$h<9)m>-t鑹?_K`f(T bh5lZ m[{ќ(0a5J}UEfft4HTY{xC9AoA21'KN0e|N^ȶr iRP &a,]:O.GkkoALTgZgmA_&7pޅq8߈e$fM>9sJ..ibK_ҧ8##Am6٢rv0u1h1;Q\BelS n1lI#Jk?//=3nѱ2rf&1?`aM6\yێ">c){A9*2`s ǒ;R>HhtXQ=Hł3:O0d,L0CM yxY0NOƞ^Q`=Djݰ6_wRۻXGU>:OT`2CN0c X >$Okw5XϥH^Aܐ!b=`Z)Dbn8ye`8bSy4F299#_ɝ Ύ5Z.ߓ=*-='Vcm_x#Zo-_]4Wf8VJ'?YB(\!K-**TXs3. *rQGl/?/JunpC?oxuh|~UT6^Br~5kS+x`xOw&B/_:C[K?yK-Z ~Q8oP-jp(8i\M6fw u=n -[+sjڭuNkz/-K+C*?F}0z ms$ӻէ!༏yQ*\/0GHU=e[_0b[qwf7hyhjȇ fpK D<-&{jam'e-PH'b&U5(ghME^ ]srb'Gjj48<~GP`r7Pi4VSI$Xʪ3b[֠ |E=Y'$@rrq Ct)~K%@+HmV%j:8BxV}O@ͫD'!oz8T }: .4t)jkoJx"^A2SA+T4unr:0x5שVN~?i|:YB-eb[Wc¿ըkQZzIӨժlWm80?# O |1ߤ8?\:K1L]WBGXX@~x 5(\ܬv1z CBo1 xWV Z%IaJg^ʨW*X?KdnCVһnd)BnAvGX#$q % y>7lNNd9y2q+_`fetncӂ'P N1m3H!z˺XYRF+BQ1y1>c3O\ڝkd L\W1s0o!r$Oo3V*73PesZ_QXleLWe @ORq7~Un5]Ն =H>5^ܝ7m3҂jDڽ?[]㺭RMz5z)KH+p<kӫQӰؖ)$Q ]:(FjaDbSq']KkOG9xkS} qtg9>V0 ZG3hugļus~x)@ 7tVϼMJ.Nv19PLqb"hqi3K1BO"o"-a x֝ `=ʭo(7 ,Wjk]mz|׾H?5Z5 AӅ/*9 ?&sCy֭GynKÐ_@wR2#]F2ߴNWbkhQ/Vhl.bu3#^:tlj+/8>ӿn޾fn>FüA,B}eDjՠjc:`ɦ([&BMSEY8Eqs?ˍXvY,{ۃʖ8_/?1j,8m-ۛ'Q$"yൄ1 W)%=>6zN! 0~ z,%O̵l8tdys(!90Xıs/8Jc,&]%af '3݅ fyQYʞjk]yLN:cxE5mNY}v#kHa׻28Al)=lYO \s` Lpm*@?7IJlC|@a[>t^}(G:"cM>)F=/x2j f ۼT+if3u;tgФ< ~;«lq=ca끘7?J팎|IVQ_: 6]W;yE"||ج2ᛪԖNv>G"O$NWu)< T6_i## Y#; Ќ*Oʭ Ddaa.8 O'JdxpzTxhu+Q%{?"Hc ɷ= <N$ 6Ibc, _ٌQ892l̾1$'ίPn$*ER݆f{_ x4<5u^yJ`v<ϱqzFYV u71xx<͠wbՕոc^ɚe>݆Ȏ]]_1aP]^==dۃ ¶ۡIۚ=t;X7ud2-z篼m&;VlSe8+9p~!ϼN ;`rԅO `q`uO0+5^UGqf&/Zg = W~{22Ӆ^ J|)ρ;~*Z{m¿V}H_j4i\{SX`kVcArY(A$߀~ A@$|X:` [;G&4Yя|n"Xlc=K'3qc-[:Eq0EsH̲zIMck9cXH 8$e{Wns3  CQV b<^aa[y5,ڹ.1, N'^}MW]uڷSpiM6 GbOiK[Rl9P 6ma8c:iϖ-g9\SHSUp4!jm;%ft]:AMV:TkGu]Ӄcy-QG>"+/ӀbxUS׏Ь3ڽJ`3?XWA{0'u=ג81tTlq=׀+W׳>;~WT;;zո׉jt"0S*뎑iiJrf5[`#x8 H砇E=)`V_#f@poIMgffMKXa>f3}iG@@7n#pNZ:~b}I=ey- e[-Gq̛<ֳDFO I|FPco`ENyYk(7zo7 o-nr?5I䓑:NnHWMBS^Q;ձBl Din7mrpsf𚆯Vm?գߜYOy`V b IL߈4XJ)#x5N[+ۑфTZ-J.b Iõ%6ۼ׎j8GW>^m6z4o#t2đ9^'R-ᅪ?F~PcV#\@e8!A?,>^ˈeWkl6~Ie;$/&Jke[)o'c:%i];OmӇQMX KAx=5$wqϰJ.;c~҃|cq+~p1Ĉu.X}#hr'b70H`ٴ+ n s$KT;zM[JHnyE9f|3B<2<bc20)M3NF q<굚= !_i'ߴ9-[6T߈alr;m]\goC።]RZ0l.{`3 Cs}{[sQ}9 Vm?Ĵa0h7rzX,X Y,jo կ.Rsf{A>cyp0hoK MHl[U~0 yKAKjl Ϥ}mW>_q1.Wneu>H;1lPE~#y>jp5~X2wnw6.77T}iQ9if*48e@hk]%~WMO?;"dnb{ t .QgKںc O:%e/a*k[{fR9L-sTq߬(20&sH2Xgk !e0;t ,P_Nrw9sȕ?~ۙD."A-X^2%yd*J@CdTwXADbB4xOPt:SJJI0s?Q3ڀ1}9y0)s7;GYg:]?jq>mRnW~G4~ S=:t$i\'uOURW;yIV}/cj^Fdȋ g1ZciQ<< x'Y䟘\m8>`O#>jMK.IJ"#8;Uꏈ'!k/DOjρ4!8t,?=޷Q:hV*i^%ի|w1^ΣRrc9Եa. \7Ɍ{\iT08{*i*I6Uj8R@fo {v h557P 3gc:unKe.#>G;NDF5"+R^%ĪJ @N6$ CǤm`nPXtAF_}J#N}PkolŒ| O>|^$re,I$vs(em,1˯#{@A|ȋymY 䘳O2%2= w >%{903YVߧBdEAՏ$a1;ҨSjy.{{<Lj=wbuXmnU`1Y\¶_Z`In=ijȁv.px٨`M{K+]>X0mU$n|ʵ:emMzj 't5Ѽ>f]^95sfs+yy=e 3gѷ=W\Nݭf7_cT/Ej E;zԯ+S nq @;?yKQJަϼ~m^T}-] ҳX8vpuLS_׭Vk/׈^>o)'u_coEݐOc,R9JGWWG^f$J,~tڤUNe Û37i(5;L~\o-A x]gyl̾b>'tm ~Qnz_xG 1V0%ש+ֲ ;~ɲx8MvY5BǴ[X"B1Z+W푁,XbN la@K)XZ\ `q?C)̻v}m̧a?Yr?;Y-lr)NqcĞ};B0Ls-_ӈC$Hk&*I )acz+ĮahnM^s LrDqdXI1Wz`,17?Qq1hk?[aTt&e N{ lvNUWa[e:-뙫'vf}iln+YjE6 m$'q7jm5gN1zPb8'zty ]D[#k(R yx'ؙBNX;MQJta̯֞ur}#`R02'KLi٬'d렱~9ǰj.ޭ4_>]dI+Nt }p@lKJm7+fjgU3LMSëj Lu7@Md/AKT$s3mcXLCq9MbxȯN+NrŽ: ;öXa{Qz|z>4,ӖaHEGr f|ߎ#H13oc4d0aW`bUa_:V !_8v7Nk_ڐޫ8P=S=iZ  ԁsO򎭧mQH/&-xWv6z ^Gju[VT@7RXEUҧ-3NYWo~IגWoROxsZպE8o*y~C/6ݠBGVjc)l)r0QxHx9Ә"]zcc=$dWDxR1%YHCZfp288ґ[zd#Q7#g>ҰA#3pHe=a  -d_#eğK,, %>eٜns` ټ0]CYbjA{6%$Q[X)T&V?1XV,ڟsU`7H<8 dv} w10v`z^bV9o!1;I8.VNO,Ӄd:[bzD ,v;ơXu\zkREb>9Y O~YΣ$JL0bs|.YHÁVk5 鱬{ o݅n,Q9$1+pX {V7l nf=[X 9@ݧQ *hRQ h_^ۏLOicf`{F`w s&D$$18VW,[ E,`nWEE`̗9O]"/;&Dcrj@$`]81zՇND2 tpﴆc~8'IY[ٗ&F=#Ut89RgsŬzT&<5,1XwXb Дe=v*F>ht'$HknpE[ T5t.B1=̬$U>+8>N05xJ0 bp -'V9QXuf%ByC/BئrU0:E?N#@L"`}ڛ)kg1G\qOc~"e>QA-u5a"rAЁ6RQ**ÀA'< "UԽ{d~pc%FFOdQAAac)Bg(*fǟhlRzMM!We;&.˕?3>6:{CYu#87q*y6NLh1-A=EDYh@^  } x|R3-Vp&}X<2xAǶe#&yVeoK81j峑Jr1cTwĜzA LB IbLd Ko8CS 3+HPc>a_܎CMum9l"`oa^sǼ$bO\`E;b'a"ŸI,9̕6bza$m+{J?qPlAӐdpOo;d=vc~>؅ݧU[iԸ Xӯ[%*U8Y ;Byjx08g*%G=9q P~CT6ݨ¶ӏWIݨj=>#a 2- bƢXpk5z(;,fke(GcaVw& a1 'N}H -u92HLq@fӘ['3>T Fd#,%Db'_  r؍#zZ|g %8 FS0zH(`c,zK7N1(n,q"_҉-Q8=i? [ZpHe+w >؋vRN 풧,F~qO H%XGnD'b c}ib ѠKdU<)?Na;<e7J} Mqq``A q#4t??u shˆ>ަI@V쾣%F3#1ݷBCfhz~!:3,`GX;e&!*41xQt"9CA(%QP8[a+a4Ygo; ~+p}g񃬸K vPԤe]aUjo[Gz}Xog/ymի}oYy}+f$Jk@oVF?+OWqSo{ u_OD*Q3`/)0Q#!I aAu:o}AwA 대sauto/07p/plaut04/widgets/large.jpg0000640000175000017500000016250213570013207015003 0ustar skskJFIFHHCC  D!"1A Q2aq #B$3R%br F !1"A#Q2a q$3BR&45Dbrt ?^K#2\\EuI in] OiHܣ`yTIQl|59kTx OG+zYW%s!bڤFv6{ ݣwh$ ̒؂kd7G˻q"Y$#aH:, ic5Y1U$&hm{Uxq(1!~@?`NϏg%Y ><5 ACL+;VR>[m}JA(S R$>N;k~٘"_ZQK6H:F4]eȰޭf ҧ݃[, ,㕵D?#n {_:M  'ʕֆ ~giMIgVY24Zuރ:NN%u'k,r+_౟?O!I4Ȥ(h6}F1ƴ8,=.x*1J{̣’pRyUr`,e1A9GCq#ξ4[eGL^(>Ȳ$@G򶵭5HnYnp*^XQg38Zˤ-h̹f@R GpݺGz(%ҹ|FBUW$qL2,o#xړʰ379emhES؅LS9fuӃP_xͧckWN>H{>]h:>g)ӘhQiPhM35ZTv⑑՝ߣ| .u5^`bĨ8,HaFN.^iovafbs4f+]Y9?Hx=&b{] 'O@>]ZY#fs ֕PZx?VDTVp;]%U"3φi3ˑPD͗`._'V4^xH׹*\s-EY8Ot+Y}Rqow$e3d1 oBCI_XZqUT/<\L ,ŪĐH(_`ls8>St3S>6/ԬL $[Pu*D>{ g =KѦKxzǦ@۲iZHvHU[cA2crmAʏň(ŭ>ĕ: Zg\o?ngS8 sDqK׭eW}.XfCG(-tN:d:ߥh)ߟ%4l9H[ S&DHf9ig_rl=I$ >HbXb:!_cβ e3͝\=5rB.ϥ_Ew;CލFٗOGCEt4{'O?xQ n$c(Xƒ&e^# `|WH`*?/{+LԖoST.U#[vSz&!H,;FB$] ҇xI]@FF`Am[4|AsúMxFEdQ4^!wD$1P^-tQ6rx:)lݣrHr#׃:#3TFO#͎\xV%rr~*7l81]Ga}§i[ci,Az" 8 *Пȶ,\odk1oҘȺ ,L|I0F:Ce D}oS2F㌬˭1'@.iUqhW$1!$ yݺ^0Vh=觙oa>HyE2NǐiC;xđv|2XH#%~k/W,vv4HA׍Z>'R+,wI#eREL6<x?Ycn]K πvGc98U #w XI{d l@#ѕ#- O%h7|ogJa4r#x:#z:}-][#u 4|h֟LA墮@$hOukZ?skӔ8vD0Wn i;'hhsG{ oJWl;9ֻ@N߃o֦l6IJ(GTU |y#F(6{c,fh$C͝~z~~ۙW-N^ {ÈI'#.q9%T;ÚE 7ս&jӽ 0br*a ŕxۘE1g % җq#+UJmI_7ۚ<$k_|ϵ\F09-UGXUԞMrz;+=]-׆>ѧIU:9fĪIR_HHSb{6`$fgp.1 oY^Ȧ7t ) r;)1C՞sw+z?W*TekZʁ-S+h+$Mm' >SJ:¢I&~a=тBw"z{N;M~ ~{XtqeRx>Fq1xĵf DfmbNy$ ą|I`Zyy./ t%"eQ/-r<^ D21vdc'f^Gk~l :ON(9̠G̪$,QxA* VSß IiSgӖM֞d'}obxo3#!e,FI-0WX׫_߈/I{kgz oRWleQL-We.XۖS MU<,iTO- _<,ȯ7D)'YdfGMU: rN>i͘u9X1M,[CMQd(ocؙutq;\bF/֙5ΟZ3RwŤQ ˩"o5,=$iA=\A,eupZJzFC$9PL3F7`[b_#9rv3rF G3؎+3q=г!W#&K-kH)NF:)%{jc1"Xdi%z(QleeDS%,5dH1͈ +U#k2\6x-\* \ZvܷrХ#,`ɋWc,Ér^X*uɔTodPMjJ\XjgRQXŎ>?!r: Y^!>fIQ 4DrIv%hIt3g[\O XpIpv 33 ^#_g sCOO̮["׸CҦxIJ ,+=8ʓ\f) 0Ʃ k:os6U*&X9ovo(, =y8mȽJ!|9.\ʩc幛[E"l٭Ʋ\g29-?;?o2ت.-Ztb <, K٬Lw ^Ŝds:H^D4rWsܚXr^:HY(mg+vRfJ@5Qh]]xx0|ۧ8kxۺ%N X,[jX4*S 0.=9hNG 7[&I:2W&lYIOK Gi/=3+)~ UV9Y#)BtbvH}b\{1yz91sl ~bC,Թh$Yv ^G󘛶&vU^U $39bqGRoϩp)"E1mX+vq3*#X?gbh}6 ?MY'aT hkG>G  ɕCGq*d3sZ`$dzH#ݞ*ti+XJϻ؟n3]yոorձ=jR y;')dAZI2f$:v,Ty#@"̈J9@сřP~u<˘f$r^A29[ږc!c#u$ ,Xvv!u@vhz# ֥Q+"E/ƤFUTU^DT;'^>] (UUUWPWJ.;Do7m@"قi V+MJIb`ݮ܎WVRA&hm5k x],XRIR@d*˽Gh]]N)A 1Y(hXVI[ "]]Q$49N~:.1]8$S^ %Kݑ4xuq,E+Ԗhx#}OzYjcxQBӴ1F$RO}%f@~I sR7#,ۼsXXd܎֨^),ّ_<ܘ*+ϕs%Es8o٬AqX " jl ikbr–)t͙qѵHeWY$: Nd9]4rv"qkWǺR &#;< "y'y:ι\{Vc.{֪ 6mCZܦ)DjUU6gHSt(uQ7LQrU4ii<#-:47K:+D;GcMIbkM4m^)v"iH$-<#wۈ)8(bnIyc^8HK-C!M G3Fg! C?x/B亂Hkm&k'S s;Xa[׹Cl~.~O$!Y(ȶc +T5O۞6Kɐ4EI)Y$ ;^M]Ed1XmYYk0 q 34ckTk"!٫2;Ydb{OֽOk%)^Yԉj%ugRb-Y5[mW3Oj;xfўM!ڐ2ƊQ}?8S|%|RғٹM`X*GȚ[W1%Ao`^cn7O{Eo-0GFf1fCV&*-L-@ĬΥIn7L0YW hoK=KnڗS.4]/j7lد`< g+WբĮ(]X\5,{<Vuʫ{O%zI4R$Fm*b>-,mF`F8Uyby]¢hjZj?uUw2|/#o Oa0ޖ}Wٮ$k dSЙAhojK>BQZy$ ~F˒reVa ,y'ğ-Xɩs|䤅*Rx6"*,Wm7m$ pwF{Y+^{љeܯIc$(CԠ VpߪWK+1 l!24DV:DHPI/W< YJؚjPҖXVv,t6NI e2;$qſ*]wIo5MJ*9IOaf>8r FQw)#LΐD%MYZհ•C3$e][bR'ұCŀ`\OG cuG/>g"TMV)b ]5X%~ƫkKkWʜW>ހe6xNqpnDvVJe]A 4VTʰeXR{G32F8萻?a i$+@\[E$Ĭ(#"F;](V~ cW~BZuKy>s+iђ+,Ibʵ=#t7Au(5ݭ6?;b0h&Y8{q%[,'4%w$ Gu f T15KSډY@V9c1&=GRPK̗WEktm?1r(+>B*PI!BGc4oPGHo~n[3DjӯYsz{npbsN8⮕*uk%ԵK KbV8O#H39,̽I%Oe8 +k#ŕB.n,:[͌[R5KRc/v:M$QڒgH%WG$9_Z]XET?y^ hŜr*q9-G$I敔Dah@iN9;8Pc/j2mپɀY5*Jd"{Xe)0=;J(2 f7qbK=7} Yy&Ui`:Adwy q8ܜRlgR\^lHY牠8%acۮguuQ/P#/[x`ǘxDYVt9JV 0v*jլZԱn^;r{"18q鈤D~s(r$>Yv V;<㲒r,: yU+ B(-JR0]yϮc_\]3Ж,er3Zg#YdO%`VA&qa:552[J8Tu%,q5 xO$Pq!ٻrEC?PX+`݉ljEkT=|7Yi)Yԑj&ŗZt=ҶW2U&˥ҤO~+썉0fxŲ(M+%<0_tHi@h+)^DM_^K2 ~r'eL2\]ՠ%)VPA A^ 2ۍM=Q7C uhQ)VE`\HJGEg-rQ@Sai F0'h˰Hz+Yd |Sila!YB[:2PϚȖ#٣NN\J*>-y)!b,;W?Z2}_ĴDCS5eahfHN,vb'_ Ԏgs\DRnDUyY!7h dfY^Cl}Je" קj̫֌=q8n1H]mf< LOpG$nG_V܆ZTMAtƚK=yTLk!ekVjՌf8hd^y(HB3V]kVFgW+"R4v wE RSz>~jկwz(hmWC1Gy}d;qE+#Q/Nߣ5zRm)fInڂ8ĔFr.3ʶiد:yIpX'V9Uo?bJ1YnG],ރ9_NQZC3N'-ڋUÌ&۷ <4ej "1$$ 6!4'U!AWdnq 8iIuUh#h|{nO31WNfftV$YcD qƈQ.z_\Kbs-sWFzvhXY$3f,@+m$ٱ4ܜH čFHlCD} F>o1,yH2|T,8ק$rzkU{'iekTxCI"]C5{G3#Cc1ZbyjI% v.iLҞ/LѤB1G"7nچ 8'?9<ɳ._[qmMԆK1$HJ:E,"I$3DuC9&·LhwjHMg~^G,c:ȗ KQ*<,W݊k$.u]tu XDE{g)J>RKUO OTV"*@4$G2c% rElmلԚ;ʈbIR&IX(!•hf PH,K 4;Dʭ(f%o1W?X|Êq+ZS.k-i@( Y<=p.Q/a-Xcd͉D`D;k"Fs Yo9[/ Mge֨4q RF&I[awMIڻ-A,}gzg_b\5CHMY庛rcSZֲy|&\$\)j׬>}U\1J: zRYkEGb$0YBxg"䙼J| -k6F!dtE yDbހN> qWR:A8RVFdW+K!.:2eJjdy UڻvH*O0oH1GXs?xz*O{;Ε0;]ROE6+/Yq&"ĵȼ_זLj1x LL21 4x'XOrh2B< ?*%( JbpP`ֽzn dhJdžRTxƵYYY=w͐ư/ R=>hkϣ-GlQSQ1L91Z_~uI&ͮL(D5f w?.rH~9q޷zߩsޢ|N1-H?^_+KҧYe-"k=*W/OCޛo}+{[Su綹?pr2d79T鮔.8oGazQ*Vݷ%6u?;5Th`+(bsU⒭qR9 HՐinImtYry)ս>3m] e‘fQEjFXd%$_=۱{]鎛~bGk3DI:RIeSZM*Ռ\y+#.(C^gPa2Ia@YHLjpL?r\.>hqPd\4P:VHS23<_)~*nnz ѝӽs[_[9A%k6lgn<وMNik[ւ`Kovff).^xckرXk>S $ߨ"I,InŚGW(ztTC 3ЭİW@N*6FfKS ܑX\0EW3^fy1GIc--`ݭH!#L9)ijDh53(m >L&TU܄ؒ(4~8#A^10yK2sg#w>%avRōN=tKK&݅'Vd%^$Eo9K @#\YP%P=b㏲Bt.N01ԉy3Fn_$h;ǩ'dރq#%I2:+VH#Pfd(f$vSyjV |lksirywg[/UR8}wgI]zҵb"#MYe_Fh7UtG85/VYlT:d#Ůa8 %^cF*:ϖ$lخ/e-x(JE|KbG[ RAWw5$27pr+b[2TʽnfOeQ30RTB5.@vO6|fъd;@K45I2ʳD~bWI{$fA/gzz/? 1G7Lӱ[1h,{YDc<6[% ku^婺*Y:sI^; őZ^ 4|b~$/φ|7RrWBnrn; ù RW|VD+s yx[W״vg-GŞnV᳑i"XB,r6lKcah2=ԑ`*Sb͓ gE+wU#>a(|JIBqIgng9g)˴rKo.HY͛R%vc!g,Fg3K$Kzߴy^Ct:Q,k0W,S2W0qIb@%XKHvX@Q@P 8 3;m(l,·pFcd|x7l]HA ~m]8o[GI9\6eS6wo[@K"mȩ+gkv m!G$Qs=ś2T<`?*K'ePmFP<ҲZ8ٸ+HWB7+ o!^un\ 3;?J(?o_zfG3雑|[y' ?&ilX@,XN~ԯ:'[֎7IEGsP Ȑ'C;u2T9ȥ xGGJr}' R X&T4q7Um}liH8Եsbp"K'M$W2(9rG B$ pZr8:xe{|V9!^xN>ۻjK%X)췹^hch8TFdvfy\~HP~Ak೯R?Vv W=DXXO}vms XPY[!_^kPecmlk?Su7s㜯8|Tnڙ9,܇}Hk޼zV ^?b)mמ H c)`uדy"A^_HЏ?YWM RbI637lI@iAu ty`?CNqe#l55fyRmV{yj5qa:cwz=j.sxtPu1mr*AѬ4ə#Z2dMҼp@4'L "Gvq;ZiA?,5[䧧sK40h9V9qY 5)rB|StWgr9nMY_$1`F21JC#UGӢ(u%qɛΛa-Ȗgĉvjp̭?n+USس꾟ɥyrJjN#QeA/N !2f1|~j%XC+㬡b{LK,q]"-ÇիŹ/IuF.NJv''b5-ň>5dE2sܒtjCi#,IyX0d,o!vq֯,Vi!E^0HƱ$X޽))K$a‘E9i %geD#IeP&f0a3iU6жܗDIc{ |_ܦOZ% (2J\l0eIiAZ]eJrtX0%x Aϣ?.nfjG7ߞ1ʅ$CīyKAw`ʌKK%(,|ɦ'),&g{ lec#^<Amk{(DǢF_ w>~oA㸱{xIj+m2DVPT!@K; @UkߣC*5]x)#~~u(2Ԭ>:2޴a% P$',ޟV  ؞hBƲ`Q#4RY}jR^>pj9\[yx#P%JF<._%c%cٱӈi"FbuC֝-[6+a=_"0ؼA#+^8H+4GfĽv0y#̼֧@dH9ы)J̠*˪)n5>%:Ԕ00[9TSd28~&Z; G1Fm'sn=v,g}Sm}[UqptL\J[Vra,ǙMǎf@HH`3Wu# ZB 건R>j3(>2cdPg.7Ba,߷*Ԍv(f~ԬqD64q"8>%Tn>lܛq-c1}5'Mnigt2͋ٸ205{Udm*\,Gd1Қ{.`$c1*Xl!]׀'CG_[|_z8PX6NAVD{2$R}!!ݿP uM$gQ'8bUKiRw4 ?ƠHbTr?}[\<t?C|=L|l;??zIlCFHv 5Gw> ?קwc;RH$uߠ?e{ ؏GGtR_&ʫ),N92tE$`AGMxȿ`0?>q(6āԍHC{su=tAUkky*׿RD %P%Xge`$[Uv^%X|?~s\w/y6rbU06(ެRXZXa-i֌V~=T}_VbҿUY(:KfybV6]XJ$q-a-<_53BmӐbvV0LP2LDJu >(2*Ԭ5VZ^F)?K5. UaX>2͙@IٵuS{~s-[XܨC#*HuDx0_xXe/)d bFR4.ݰ6ϱȒ=_ٿV:+21u2L/˪j PevJ֛M3Ɍ O#G$Vk`eXW`+z }mĐ؅dj'oo[ܑF}BY+&=|-uWK;Cػ\0 (qlVB?WIW3ڎ}VNeqxd+mMcZpbiH3;ӥifІȜu,Dvm}Ctqrg2玽L$WhQΒ4A+}/2`َTaQrvK yrx gQ<.ȑyI-Huf`y#k=֗rom`,PZN+ptA*f(Ei\4>51EQqbvHZIt?> _O^gݎ,qkԞHKҕ~TҵTYE"CY)`o]qp ɻ#NĶ![doY:or'fff/ yTsov/P{At'R8vkjT4B{J ܤI;Y,]g ijojv޺_v]"$Pt 3#' L|htlx飌﵏ՠNy; >m~deDD`rh샾$CǢf=M@}; y>>@kϤ"'ȉ'|U`{Soj5_wyYUV B0RJ''y6/pnG<*1''-+MȞ$*@㢣:c=RvvIޫ,6ъ.dc!%;lP?o YC|SB pZ;`?X/(9c*^ ~k#zed]}|HaakDk<3 @sdX"  G|]mvZ1ϕ&! !f~ڼ#אx儻GQā0o :Έ tJCH><4u]ނNWU ~T$0O4iTIURэ-$Ƽ M F'O*Oz{N6~X*l$afa"KqM@ U9Kr#+3&И 4T4D>A޶|l^$UA |666},4urf=+5dfhrGԺ⎡mD@\ȿFǏvG· /<9=6VOY&PsZYRp)qė*LZІ5@ M_=PEӇjNWXz #&)HC4 }ȣ[0Cf"Fic.oF(!`PiR ʦpd}_ :GQHxЉԮdSա<%oV"%x٤'O)$x=y*AYn|/)ntC-,woPka4ABUKn Ւ)'%^(G$MmTWB"#r9&BŨVL|fwU{0&w+_}/gJoT.*eaj:ԻU9\ 7vtXk0ɍQعP%B#trUgf'=X{C+аr=7ڭ=(QLi(sQ,c TF#2H쁀hʒ(v+$ l|DCf=٣`̥U-%S'[6sn애l. aY뉜4iVf `ډ`YJVb5wNMICk E- oϐv?' ,D`\]AI > cE)#(~vտ|}>?>>|cCN3) ^MbJT2S*8$fCOƼkcǏ$x|;чTia14fP2H(,47?m#ַǬbOla /س=6>bkjr!`ί,l; $W_C+:15y?W;.S;fE9'*?9~9.q][H̆r]}շlA5zMYYS0eQ)Ic@ˎ $2㉂G4+}NPA_Sc64e_f%0^'DE}p M *;n(JJ5! fidTGTJ%FIW`FLo{iyid>i#pKAC^굙PBXTR҅*_)"` G ԰a6),.E42f*IxA6VEqiS\&Xw&Nqc(63DP܁'CƟM cofc#mf0ۖ pϳu[#3ԗ{`5{2I#bGUXgd+fG%C+  DLC{#ƄG=ED!%=ާWBn[ׯ++4$LQ~}#-b7~[[ߟ￿ǝϏȌޓj '#D.:?Q! l~>|ke*nbBi} <Sxz-%;6(1!#H@YF̄/2^mfs^ ʡy:!qZFPGߟ묩ROV(Ia噁~w$?:kξ; \WP;'zO:ӯ= 0 cr饙dT:1.UuNly?aAƆϣ܍$6DZ޶tOioѧ|HlVK&6s!)%y7m3~x; !#^7p< ]=8z/wt>#z?mk`  ߝzbb\+etIQF{$B]y0ȊǕ0L'MuQG-I&RLcGUʯ)iXg]_#4'sմYBL+h N˘3Wb\$66i{1UFQxޭ3َ7U]M}3wYQx בtU M 7V 2&ʅ qBxQH_ўO&4hbCnbCNIl,lѐ_wEuLWzK?NLf^U܏eԦ# #Gy:?)=hnbK%vY1pqeG^dE7%2idvȌTtT)J }z]I^ٮ9+L[QON'oǺTwhtυ#[ 4~>w#z;OTs.~F(n ѫbĿߊ}|?οemw*PsV;DCX@UD̄v SoDFGo;>5:x>,|Oғ!nT2Y on5lʍ mJӂb`fI~ !+=A:zIyqTj񪴳Bg4$nU Huq)RD3f˙ 2HIBMyUdy*CpHlq&8e:ַZם%YT,%XWwgL?Q<+ HLeECW^>#d1udW~`fiڊT=X9 -<oV."=\U)Ӗ8W$s<4m(OY~ǡRSt+YarFpfjG*qm#@M;6H /"WSf C3^[ю,p3Szq:Ywuî\g=//S`x%^U¸&y͌v.g=G~Өm=۾(zs e!<%'7^)WXaed$lzHbyl(}zἫ+9{UlѰѴI6k^tV?:{+$Y)6GkKʃnT? TSV̵eI<^'YT@ myjy*X}K߈EƦ\u*؅.Jǖj jR(Lf(Uey[&{جQy,dw®pzGUYKV*9l ^yc\P䈌Ӻ1&qTʥVG 1)% ޙ*D\i]*g8a $*dTya*(r4b;2F%Êq,y Wԭ0 >xrޚgu<' H+U ur\%a뭩Rb)KhEzpHd11׸~oq֬56fD%jCf(^>*RΚ0 a+$vIO41He9*wzfN{)KvZFڲUV+1Hķn=wy<)O^zn姊ji+RY%2x/g "[7j2J#XIf]QKDJ ukfRJo[hJ$J]xO"Xn@LC{%=}U)Tgԋ=)@!lKjL?Wcf*91"qA#l@E’Uo`<46 ?o;4wDn3re1,BEfp"P:`z-Ű kןօӻ]}?%1 P<Ѝv)%m 1 ?_\g_~~?;[?ȧQ o[djS[Ahdp@'z@'_`H X8YCH9()b]xU'SkE'܀t>3aݡ_:8qOfdĜB{+]PvF;ߏI~`_rkѠ6|Hck`Ϗx7ցbN%!v9>=l]菁|:ֿo[=Иw b;w޾O$h[#rݜD4ȥCd̿v<ʤ񑀅يGB#npA'2޷?ϏROLrfRAI;dllk^wq1^j@[ fFܩh˲Q |t`Y%wo_}}ߟFJ#*'Z;>|jtOŽfS^:2d^AgpsqvՔ*7M' y$;? k5I}"!$ :PHN~G>t6~u*}s`f4n#::7ʹ__s(^QGgh%{Jfc_#%S3*D2Ml-3Hf d (y4 |TzR|o%>Ovp2~?T/"\#6,+ tM9d-{{~6A$tU\o1U#]r.1+YhDI܄DYԺ+OxffvǵZĕPEWL˜3+|jɷG$mTOlmV;>z%e }#JlaOˤ|ErBsGvXyѵ OŪeRyU$V&E$4=&ZJT'߉fw$;VF۳BF"6^ e<4y`ybIlr33YSRk ÕCj a'o$^R41)oebwLE51GR oxY#nhj8XZW.T z% ibJڑI%pN8%ʱWVgPt5~ ׳2ԕobnGj?r[!0*tUJh?یVk܊ 2Ȧ\uFOvU#HYسvw};o3$sC4,%*?G2iN0nI-:-ݿ x[4>阋+C%̳DFXxb UAI JQewl6ao̪L?cm՚Uoq"8Us'nU^+̇j_y,O0/x]}7 % Gb,^!VX HijJJbYqݙ1'm$Igv'lN>=:c1Jsrɤva9lA ;!!A~?^dz؎x1٪\A,sYH!"!Ĭq*G ȷ !9V~M,2G9̌ܰT 7,k.>2j5nTƒXF>8Jfyi Qcyuv`'sViC4 ̨n:Aa[c2Cf/J$1dN˫8)=[7):=V3RI3@Io}(M'.żlC %?!Yjֆy,j[o[S;GT59Y`D^D2C%_:RP%IOjү5II;MH*Uq{+)Gvۿmz+ڮSFH@l\ʨ/#rӢ"437UP%%ˮ+E( hgEݷ$3;7H=j~A H##-WdٻjBHQ zA>G$z=Mw#Gv[G>=gt/\ܫYS%vh'HBّVD6psx{ᚕA4Fj񲲲1TRA } Ԑv$pGG؏ ^AĺX'ܕ9g2ܓRWXpuk7Alr"/،?RZO]!xW鮘0՚KY{&X`le7>*{ȣh#dEw?YWmFݴEm b Sy3Fn-7}eP[.PO?~_=Du;?$kN\XrY0S5efU@bG2K1̚hޅܥV:}+4 o2XmrqXi㠷#V2,#UgcxO3$oƼY$!RP!#FƀC EiiI $MHHt9;FDi2T@>U’l@޿x`x uMfaCycMoS($aX\!a#x>N~ēupJbHgDl~G{RdJ]$ 4Xa2‚%pŽ2ȁ#[_ҧqߏ1??Wce<~;O@Zxܞ)U]I$5 F6z)ܾ||Gkd|ԄN|B |Y$իI3kMy3 xH\ ,ϟ)=5k WjfRN\-rw Jladba)Hp@_0tKȼag+Z@DAOacTLҎ3_e1XZTzs\ELG2J n>bl1GtZI`r.ġPee 4}[ztfݪy7bр#  !aerٮrN-*nKKr+WC:"=fW(v…Rku ;Y3DZ+ǒP@?d7%$Rdѵu#vP~Ѽ|C#/nvx9rmmW3)0oM#C:[*m$qcˉD 7诓t3dbbEs(hj*׉;#I%}D/fv鱞3^̾MikV`E45҅i $?}~;_Ķ_Ȥ0E9fZ{P78ݱ+zh=cYQv{ffi,pXb$v<~nmPԑE`VC]@3+y$WW />A`v(.;@xG H=`??}zʈvCtJdD%[++3*^$>mJשQ$\VQ+dbpH|wcփ}0uSP\g&/tq'ɯ̛ dHE#JK%6y%# dw ż*"v$SI:CxOwi\sayL#hVfYY&ۊHTVѨF@^=H<1GK2ސ0BFZF1|F17)dK 8},+ʍpt)`P$o"$3%L#ԻOOZb YeaxvaK~RBdhBIJv Lq%grw*Xyvd.7 `ygq+nsԹQm/}jZ%Gf8>U;+WFkr+xqbFIIۇ,!}Idbh;)&W&7Y\ 8 GgǹFj[ Yv v$pfJdIQ=Rvz[z3岸<]|I|2f2 lfN*ާ+CbaE ui`EB/7i;SֹI%Im2*tY|#ВG22Ll_$~YnrnAh9bkUx俆|ô|t=UNt2PDeQ+58l~zӣH;=wԽ e[u YWv1=foMߖn%!^bILTUk$Up@xjY bvTč& =J NEopx8+eTԚgH%L(ژ^>{ە>jalŘI'8Ԃg%v't˽{Ky.Ծu^[F|[S5uZ;f hneDQ]xI^'[YUUVebx9'-,q2Hh̴XEy l[ W_mOk5ٽ1jw'J- եZ}, 5*,{M$a{D[} Gl[ROe#+TH#?1]wPhz"(Xr'cVe%TX5!n]Kp4‘ukZ;$\1XRIaFv`U6t Xlz6G ,j@{r(#4|iι?Oӱ_)^~:-z;jPK#wH$(Pl>Yψ9b)e b\=)!J@IJrAȡsC2&UPx$D1$l r+rDw#Z<JYmn:UDRIT3) .Lv9l|qPN-ƴA띃5ͅ/$+!@X{j@R>> >|DyN6t 1=ELaSDA*cskXQމ#D7F.qhrv6I~!UzHTve0i I&(V2ƍ$%@UvΉG~ 9hCy5蒲($RAS?:fQV KRqʆBOV@y #q;OVTA#>GSn2}GEtVXcIY %{pDṅ.=wu0ѱ`-A^>44}$ǿnFMXaO'lj LF6|^ѣ+k`Z}||ؒYvONI$ϓ_Vq^Q!@Cz#[kYy'LQȱ+6*DȌÇ"O8A.c"tdܬ*TT Ǔj$lj!m;rvk AxƇF(05T?O[#ZG5伣?ag2<ٗX"12&Ju!24uh;&b$CU霱-ݎcrVk7͋%b8=q w&d4uupp)E xq$s|K3=< OC5p+z#%JF.\|uĆi4_#4QWn@Fܝeed`H3E:ȖDSFck }Z8?q\+ơIj|Jb2&b:q.*;V=\XD}d>ag7KZi?Z$DK;/3 ZVC0ou+!=7$-:Ȗ,k@!Vŋ0*At+NO?b6?,i,gH"6䎡#`$tzϡB)donbMK%W#Y'vV/9c` YNGY\N\v .A$J|-$|I"%We )G@ȌQѕѼ4T6'Ɔj <_~:iEb9n {Fs\C @hc'|Gy)e4p+=짿y-g8lFZ9Z2a5+uO,N+'ed3M1E>LyYlBI]{BQ̎Z9!gFdict`I<|ʴ΋'mI/׮9PXRNRcj:[6fpٕhALU@u}4ۢlk njHvc#Oˁl?OQ.uW!en`qNdJl)Bxd&Iy'id4e3= ]?=їn( 垠Zvdf@TXY꨽b#Ka)xA(/̘$\8.P*ƇZT/׈y&!/eUT/e!KMI[ïԾqGK7OW\uc2[$o$B˱6JŹ7*l#2dU_X塷j8JF5^ /r-D$VӆUwEd @Eb^;~Ս*ޝC 7v9rr-H)D4$C 4ɢ։$~ֶ@G !"C_ת)bgxmԝ8?:3hՁӑv };4r g뗦oF y~ϯ 8ӯ||`߀~|Qkk±xypx\l0YYo -Z!yk1Y$# 5-K_W{Gewⵕɴ[ʼpE^InzF囄i^@"YҸs,~aj~]+̭;H&*xn'¶==X~89:9+۰ XYwiC Z#BI֏^uS{67kYV^1R կHQG'iKfK~yA阒1u"E"19beI3H92Ʃ qrNxSjˍ)d,]."wg +GWU1;)ڙ U'RN HAVeyBVhpװ̃~B]b}@#.%'rxac=BO0z}V81;ᓡ}۪=ꊲ ̼/VP#| +I#$-Y!N͓)\EF4{?އ3bvI)ksz=|,pIG#b @'- )7 g*!C,O5G`$|z!OIQWH5,I#DEPK; $tIc5gy""B@P $j쨠3UIf:ܒዀ "6 W"^xf7!/vTX*rwĖF@ZD>ߙćXÚܾX3b]'!=X%n, >*gh1CSAV))>0G"B[!q×#/8ly̆v^͌ԎʢYfN*8fy,ŅY;Y=3NJ6r7EJe"'umL%>sI w#E7wYw[D#XI8bdZy%<i#ui;z#%&K¾c?϶bI;'/.{13楍Q.FY2D6찍vihR1ninNS?'>Fr hK6Y#+^G-먺_ɉ=` ")iA*J Zs7eR+Ø3|rTuy>Ǡ`޶Əܟ?aPM df #hu<0cËDqIΈ@;>~d:CCGp0 #ADN h #TEnJדO-}gѾּ;-(;lK2\]r1&Umd g{ߑoSB8_gO3NqJ849JW։fj81׊Qeo0+8TP^A{'َ1M%w`Z5KΖl 萪Zu+?XbxyUDfYWQ, 7,uoK\'ӯ1xHj_ާd[]*7*%%{aZې;POnu'չ\5t-tvH/e2i$%z2³,$ux#~Agɢc>:8ge"B),i(V2!e_}h*:~k{_M DR4\WR:qJwvPqyx*: i[XAx a>6~IwN$쎝ùO?qJlҷMk$ ]EeVRGmI C+oD'GɕXi#OM*V;0E:uԈT81ԅ[`Ae;RGoq>ʂw}NPxi*, `We~2]Y.ʺ yk~>zPYTlR8R,7v arx8,ٷe$ю5j:]HfAI)ŗ܏uFLU^$W5,zIŘF+'YoćzYj:%i Iic$S"XE7m#ܧ!1\9uy-duѫ6!(W1WYnn&OJԗWY:.NVq\f*@*$, /:{TmHmAZ&$ŸQE=dm[j>N~01i!VZB"`BL(fdyrf#yȎ,[$.NŸdH־}#z|>VKpט+=Ow]AI ŏd^WCayσ*vYH,'D75}:StkVYZybmw)XY8r3".fVgRN}pj%aU$s}M|}LqtGKWi+@lhDdY[rI@T1o*O0Pd'@` Gf09,$ F<y ʐJKF$jA?~FǠ"u6FR/Vi5I!`F8aY~mo_q: |אEi{հ5obtmE[)31WJ9~kNyW] >4|;#ߍgM8ku`(U[ #֧EX]x*)p6d i= (w}i\GY^M_^;6GnFI`fUE]+:ndxՑYO" $,4rI  7gķ4De`#朢ʕ/TMx,,G)*ۃ'uz1V]JҬb ~y ߅?CF=*ؒe ]ʶôs"FGźEf_V#B5ɬ$p̒L5CcG2GBrwy̮nݛ,;2Y*[3J!Nd h7:=x.AZV")A͑VdmؒI^Gi\guSf3/!n{"lŻUWuN# Q چ5؊a¶ao]#8PM*Omvmf ͘IRޟ̆c% 6*rG l~?{)?YPvA`X)/%7k7Ǣ, 9p?a΋%9L{g#+[t1U_1,WD60`z^$V)O_hyG8T$v0꿡LFVLR2K#SC2o \b9B9aTRcH;]Cl^x ,Asmu;s=Fwdj*h2:Q9Â`ʠk:(-;OE&V#9#UI6dU$ڰv}YBV _~}9XvDzLk+V'Z ^)0,Ж cg/h kt t:fNZɧW 2][fqRq \i[eV(7 ELf~ddCYc,̢&~٘E_lh~]+;*EI,QI2H2g$36ثI͋"2eglC ok7vCcՍdla_tcȰ`!XpAg9xiG=ϨͬHM45c0zd&@{  퍃͌ DYD(qƬBaeTÔW1Le1fMap83|ԫXIDv,*XKi(gh@'߅>jg4I]l{6d+ST6TXMXiU/ɵjSݑ 6Lh`I_,YrOGI'<<0EfM Lc~l)橽Kh!rqr5w*ꎦG#DIh*vU@>u\Z)wyb=ȤyxYE6( zn邊]K~U,mXq?{νtA޵?8˸4ßo1rsٻZ;4XmIt}7k2gi=׼~u}uiӖpY%Q[PG36lZwc%dˌZVmL]=LsVQ3F/(Y9r:d,7+r43f7'Y~;$i >I2Pu/#p:cһ늩j\iU5_ 5S oXݑY#+ ^ eO=x|'2Xϊg)q)H!vz:d,g1[ Fu.tD-9ydGB}WO3o9-V]ENL*#E,>ʴJ!P&,dm NAm[Q?c sEQ2mww*{$df(!JCKY*X)wF 7҇FޖO\^%:#1&,QNwwp#`?'DoǨOlDdLZ?$xBJb8HOF*:bAy0 ֈ:y?x{D;;6?{4V&p*9a"j/l,1п>||MHe0 (޷cCρNރ =/Lcdr؍NHfY,;h H:~=T]I~im`м*H +BFBGUSbe;~IߟEp;7B$zfYt%NYIVe#:#k[p[ca79 $t9C/ڻm`kxe2ՋFݗ,Z,Xe%XՑLaDg!H(4H8R $lO*xU$rV]yh}>qtJ_ݚHz4mQt908,h+1n .Gm>K$hs%{LI!ogݓɍbY4(rG'sov=LK$/pJJoM#cG 4Tx<?'YC{KsSw?}7]fUVHxs^rXTMsFBcgǟH~ Myะ_O]lF~HoL[T IlU$-0$8SÓ(d- ad~Z:R BR?8ƿd:;;v?G;&:udKz'<>ގR*bEˋ:Qc R"h7/fi7ϟxǏ]'f@<Q_d?a~k_3UjO R>NQℲ#4(*w1 H|k`x<]VQEO,ږv@! TV m3_ a.@JI=/L4t@m^@*vmաnke%{t6O؂K G; vP=HGc<"j"Hf޴HtOcz>Ȩh l 7tOԆ.HTōciVy Fn8 f'LOD^O|>}d#*~cAp>QEƩI^i<Ǔ#k&^K"ba_:A @/Ke1V*nZiJCBSf:R>u/<NU/.M[_˜'6m*k-vwژ}jM])Q_ǾRZ߽"F TW,Feb&09nF/7 7_UrI\C'a=>~ے'<\/i0KѫẌzt*3=,fGYO^ۑ԰^ǒiPsPC/GfꪾޙeV_`:[E_ t}|}ܧ|o>f)crH(+xE9twq(+/sy`'_1-F[YektgA ʥ'!BHYISWO@p%n,v0~x*9|c/E/]VSo7!l3.GEcVIZ(:eKv1:!RVWq3 *s2%4VTY(ߴ 싓3/}c葇{de+ j RNWrUS'=2G4*&I >KD|2S78bA# `P@n :*Gy8DOb$~[m򌩨?I:V$kӫW"?ek M~630bӕ [vIјgUL.ypaiqd;/b;j.ҳvv?Gq~46ߑ{{J¸a;o`>/w`뛨tS!/zo~=>91::rg{Ԯ|@TnLTVUdzZْc 2שb]X^)s%%`ҙ,x YZ2}ˁYa*Ltg x5u%%W5?RK@ p=nc)e\CR= ğ[= b+ζ럚HT0<7Iy0rD$wJ5z5j'Rg/L?B!Iɥ9Ȕ+Q8=!x;N~fRz%'ad`iWlT)|PW늖JYk-0,.ouecq+e , ,$ C;A)DWt>bs{|RٮCsIg[Bf?%[%mHgH#=ּ^{lL_XUu**7AjU "2lW t2I*YB,\CH!uY#rVRmH!jU"yb8_Fn )aqF*;`cUNLn=kVV+JL)4hݲQ3g2+4nG;Yz@cIieiRy;yIUT㲽ЌHUwngXyFؙtey%nuυ>5ycï[L^>4^rad'r4 -!ץ^~6/>ޅ2XW\~v톒ĶJWSH40BN+=B2-zWD*ޮ1T/*8zlˌ[o=S?Eݪ0#}n6Saʙ(]*WxbyAxݕAkPB>rJ:oxr?zZp~)LJ7 ]AȺF ʲ^tk**5Gr _Dk*uq/r -h?6>zqVZGsȎl8ؤl (Xy4ҵN g5@^;Ҽ%[r%vNيhU7;u"(@n6 ȭ>㊤Fn p`A]_N9YZ?ҭ`}"^`e*s1pcz0UN_8YOGr`YyL1VpX']IłئK5^0=: C)h篃:3v+aʮL#Acx)ceHn({ҸӒ*F1}f6S/H33i[5)R bkX(bY{R FYHL䚈{ve=jZ3Qi{Ѭ7 `r(vfNa@\$]B sK3ߗx_B)T4Uh %:։m1Qn)QFHCfɳW!$+.N;mL[d8c8e5aDPP}0CIqҬRO+3|t)D!,J7؋K')2Voͺ uK.O?#K4w]b3a˿NK*xڤdFu)pOHX $1MYiam7]{b~#r՛]F&XJ#h7Tb@ykFNBX ~62&Ib& dddQ$UC"E&.Y,Q,4B`!:h,G#p\y:S|0PM6Fywg-܊X,+J8$k.X^2D q*6\B č(rIBUv;QX|j,֩| s5,l񘣊ՙ {}F菘dp:U8JVY#PJ ; `SpUߍC&(^7=u ,]qkyܥ2 bxRIc}d5$+,!)ve$ w:&wD*N;F<ȬZ8 Ư$|rY) ʁΒ~G{!eaA#I{ P,phsFo!cdεro{=D~;]>z4w_I:ƿy?nGkǍ{;zegy';RQBk_VӴ? xЂU6yo}OAfE mu;|k￷g/ 2\zyE7,-wM$I^\0u]Op^edl/pxI T$|:.[Y%KNhz0xD'IeY{2NHWXiǒ_supL]?"e9rٻ8خ5¯XVCj2zDCgX^μtu}K2XBj}1N8C#$iMo){{ƥYkL3ՊTGiaHDabU9VGIi/Sy= U{P?|XGri%-䝲;m~; 4ѫqFX:?۶+JNPuɤw%;%<ñ7i؃~TRd!Zėٌk'cglMdzy Y;O lVb\bB썀O?}?AASˬqwo*64l mVF=FnM<Bgw`[D_⥁/*\eX&ƖiZ)VTdnX5oQS)C A8ȮRGr` #f,ңM#"ҬRg{)4K _h")_zI:ik 5NI Ih#η)W͐‡e[C$:@HjL4sIX &(;cVٗcUJ;V%;q̨TO6~F:OHl0<%yI??LR+KKyq XLYcebRdl ⱓ"d  ho[$ӵ@$~GD"Ed#H lLt9.+f<] lr%\NðM,FRݬ)M,`&E#erl Gu!K2#eȻJT*W}͎2iTJ;N,lGB{O!F~AfJBL0X1`eS+M!C1&ܓ͹2ҝ>G !*bx Z`O&,v y0bʼnlHe.г13#}+,ܚ/F "qJ1:E$d'VC Q􄔘J LK1tg^+2ƗUU>ee![1'GZ.F!OgT'Ku%USm!:d[Fb) P$o ǀ@?'gG~#G>p? %rEŚ4*p6#`w,X]瞭s^Ud/ $%m#/̎ŕOvq:R޴YFDFQ+5_YbcŔ 8 Y9m#?̬"XAU HVv2A83/4!DݙXfWnڨ"X8#qx֏k8%}o勜z\H$ r6 \:L ^I]6jȶL,<-"#E1rUgFP–R[ L2+VU화Xљ>; e撹du!ZIџ1@FC0^#yA|X>݃`FJl{Qh'QN;QGH  Jfx 9wβub1UB\UфPв4(& B61X%HQU!&Dv;X4RIbrOLe QBYtA^J6˰jG=ڒHd j9 G!XowגG@Lq%3r]扻D/J`?m7&~.9<wA]yRFa?prܜĒXhR8dJOhU4I$_d@}ı$bOkYfbe$k$T\,nc%2dA.]VI 4,c'=-A-hYcv(46WAY7G5u9U>xA xژ/ wajmp'NcB?P9_A݈F||I?/)+_ Ȗ :o-$ /!k nCg3-q|^%.CٍH1Α4>meb@/%f#j]ȍlT30Һ_Cʪv@4y\튃ӟ74X~IxrJ0 Bm+K"UBSvS H $N:bvX~"ن (N[`; n!-rC֞|jƾI݀6*y?~RB er @bu:*4Is'iӐ 7*< –=-I3#d /Ac/i Łq Tb*cYTnM^=hP #include #include #include #include #include #include #include #include #include #include // for access() #include #include #include #include #include #include #include #include #include #include #include //#include //#include //#include #include #include #include //#include #include #include #include #include #define SCREEN(w) XScreenNumberOfScreen(XtScreen(w)) #define NDEBUG // ENABLE SOME SPECIAL FUNCTION FOR THE GRAPH. #define LIST_UNDER_MENUBAR #define USE_EXAM_VIEWER // // Macros to set Motif toggle buttons on or off // #define TOGGLE_ON(BUTTON) \ XmToggleButtonSetState((Widget) BUTTON, TRUE, FALSE) #define TOGGLE_OFF(BUTTON) \ XmToggleButtonSetState((Widget) BUTTON, FALSE, FALSE) // // Menu item constants - each item in a menu gets a unique id // #define OPEN_ITEM 0 #define SAVE_ITEM 1 #define PRINT_ITEM 2 #define QUIT_ITEM 3 #define ITEM_ONE 0 #define ITEM_TWO 1 #define ITEM_THREE 2 #define ITEM_FOUR 3 #define WIN_WIDTH 1000 #define WIN_HEIGHT 1000 #ifndef M_PI #define M_PI 3.1415926 #endif #ifndef M_PI_2 #define M_PI_2 1.5707963 #endif #define MY_NONE -1 #define MY_SPEC -2 #define MY_HALF -3 #define MY_ALL -4 #define SOLUTION 0 #define BIFURCATION 1 // define constant for the coloringMethod #define CL_BRANCH_NUMBER -7 #define CL_STABILITY -6 #define CL_POINT_NUMBER -5 #define CL_CURVE_NUMBER -4 #define CL_ORBIT_TYPE -3 #define CL_LABELS -2 #define CL_COMPONENT -1 #define LINE 0 #define TUBE 1 #define SURFACE 2 #define MESH_POINTS 3 #define ALL_POINTS 4 #define NURBS 5 #define ROTATING_F 0 //CR3BP 0 #define INERTIAL_B 1 #define INERTIAL_S 2 // big primary centered, sun #define INERTIAL_E 3 // small primary centered, earth. #include "r3bplaut04.h" #define NO_COORD 0 #define COORDORIGIN 1 #define LEFTBACK 2 #define LEFTAHEAD 3 #define COORD_AT_ORIGIN 4 #define DRAW_TICKER 5 #define GEOCENTER 6 #define TYPE_BP_ALG 1 #define TYPE_LP_ALG 2 #define TYPE_HB_ALG 3 #define TYPE_RG 4 #define TYPE_UZ -4 #define TYPE_LP_ODE 5 #define TYPE_BP_ODE 6 #define TYPE_PD_ODE 7 #define TYPE_TR_ODE 8 #define TYPE_EP_ODE 9 #define TYPE_MX -9 #define TIME_IS_OFF 0 #define TIME_ON_X 1 #define TIME_ON_Y 2 #define TIME_ON_Z 3 //////////////////////////////////////////////////////////////////////// // struct UserData{ float (*multipliers)[2]; // from the diagnostic file. int maxndim; int *numFM; // #multipliers (+) or #eigenvalues (-)? long int (*labelIndex)[4]; // [0] --- saves the start row number in the solData, // [1] --- saves the row number in the bifData. // [2] --- saves the type of the label. // [3] --- saves the stability of the solution. float *solMax, *solMin; }; // //////////////////////////////////////////////////////////////////////// struct coord3{ float x ; float y ; float z ; }; struct TubeNode{ coord3 translation; coord3 axis; float angle; float height; float radius; }; // gmain.c++ SoGroup * setLineAttributesByStability(int stability, float scaler); SoGroup * setLineAttributesByParameterValue(double parValue, double parMax, double parMid, double parMin, int stability, float scaler); SoGroup * setLineAttributesByBranch(int iBranch, int stability, float scaler); SoGroup * setLineAttributesByType(int stability, int type, float scaler); SoGroup * setLineColorBlending(float * vertices, long int size, int stability, float scaler); SoGroup * setLineColorBlendingByStability(float * vertices, long int size, int stab, float scaler); SoSeparator * drawASphere(float ptb[], float size); void updateScene(); void postDeals(); void showHelpDialog(); int writePreferValuesToFile(); void writeToFile(const char * fileName); void deleteScene(); SbBool readFile(const char *filename); void myMousePressCB(void *userData, SoEventCallback *eventCB); double fortranatof(char* word); // gmainqt.c++ & gmainxt.c++ void popupFloquetMultiplierDialog(float data[], int size, int numFM); void soxtmain(int argc, char *argv[]); void setListValue(); struct DefaultAxisItems { std::vector bifX, bifY, bifZ, solX, solY, solZ; }; #define CL_SP_ITEMS 7 #define LBL_OFFSET 4 #define SP_LBL_ITEMS 4 #define NUM_SP_POINTS 13 extern float orbitSpeed, satSpeed, numPeriodAnimated, lineWidthScaler; extern float fmData[12]; extern std::vector xCoordIndices, yCoordIndices, zCoordIndices; extern int coloringMethod, specialColorItems, coloringMethodType[2]; extern std::vector lblIndices, lblChoice; extern bool options[]; extern long int numLabels; extern bool setShow3D, setShow3DSol, setShow3DBif; extern int whichType, whichTypeOld, whichTypeTemp; extern int whichStyle, whichStyleOld, whichStyleTemp; extern int whichCoord, whichCoordOld, whichCoordTemp; extern int winWidth, winHeight; extern unsigned long linePattern[], linePatternTemp[], linePatternOld[]; extern SbColor lineColor[], lineColorTemp[], lineColorOld[]; extern SbColor envColors[]; extern unsigned long graphWidgetToggleSet, graphWidgetToggleSetTemp, graphWidgetToggleSetOld; extern UserData clientData; extern int MIN_ORBIT_SPEED, MAX_ORBIT_SPEED; extern int MIN_SAT_SPEED, MAX_SAT_SPEED; extern bool blDrawTicker; extern struct DefaultAxisItems dai; extern std::vector coloringMethodList; extern int *myLabels; extern std::vector xAxis, yAxis, zAxis; extern bool optBif[11], optSol[11]; extern float satRadius, aniLineScaler; extern std::vector labels; extern long int animationLabel; extern const char *autoDir; extern int whichCoordSystem, whichCoordSystemOld, whichCoordSystemTemp; extern SoSeparator *root; extern const char * graphWidgetItems[GRAPH_WIDGET_ITEMS]; extern float diskPosition[3]; extern float diskRadius; extern float labelRadius; extern bool useR3B; #endif auto/07p/plaut04/includes/gVarNames.h0000640000175000017500000000524113570013207015377 0ustar sksk const char *typeTokenNames[] = { "DEFAULT","BP ALG", "LP ALG", "HB", "UZ4", "UZ-4", "LP DIF", "BP DIF", "PD", "TR", "EP", "MX", "OTHERS" }; const char *intVariableNames[] = { "Graph Type", "Graph Style", "Window Width", "Window Height", // "Labels", "Coloring Method", "Coloring Method Solution", "Coloring Method Bifurcation", "Line Width Scaler", "AniLine Thickness Scaler", "Object Animation Speed", // R3B: "Sat Animation Speed" "Object Max Animation Speed",// R3B: "Sat Max Animation Speed" "Object Min Animation Speed",// R3B: "Sat Min Animation Speed" "Orbit Animation Speed", "Orbit Max Animation Speed", "Orbit Min Animation Speed", "Coordinate Type", "Background Transparency", "Number of Period Animated", "Label Sphere Radius", "Disk Rotation", "Disk Position", "Disk Radius", "Disk Height", "Disk Transparency", "Disk From File", "Sphere Position", "Sphere Radius", "Sphere Transparency", "Sphere From File", "Object Radius", // R3B: "Satellite Radius" "Large Primary Radius", "Small Primary Radius", "Libration Point Size", "Coordinate system", "Number of Stars", }; const char * hexdecimalVarNames[] = { "UNSTABLE LINE PATTERN", "STABLE LINE PATTERN" }; const char * nDataVarNames[] = { "Background Color", "X Axis Color", "Y Axis Color", "Z Axis Color", "Surface Color", "Unstable Solution Color", "Stable Solution Color", "Object Color", // "satellite Color" for R3B "large primary Color", "large primary tail Color", "small primary Color", "small primary tail Color", }; const char * blWidgetName[] = { "3D", "3DBif", "3DSol", "Draw Scale", "R3B", }; const char * graphWidgetItems[]= { "Draw Reference Plane", "Draw Reference Sphere", "Draw Primaries", // R3B only "Draw Libration Points", // R3B only "Highlight Orbit", // "Orbit Animation" for R3B "Orbit Animation", // "Satellite Animation" for R3B "Draw Labels", "Show Label Numbers", "Draw Background", "Draw Legend", "Normalize Data", }; const char * axesNames[] = { "X Axis Solution", "Y Axis Solution", "Z Axis Solution", "X Axis Bifurcation", "Y Axis Bifurcation", "Z Axis Bifurcation", }; auto/07p/plaut04/plaut04.rc0000640000175000017500000001175113570013207013357 0ustar sksk#version 0.0 ############################### # Primary settings ############################### # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Choose 3D or 2D graph for the solution diagram: 3DSol = No # Choose 3D or 2D graph for the bifurcation diagram: 3DBif = No # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Set coloring method: # -7 --- BRANCH # -6 --- STABILITY # -5 --- POINT # -4 --- CURVE # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. #Coloring Method = -6 # For the solution diagram: Coloring Method Solution = -6 # For the bifurcation diagram: Coloring Method Bifurcation = -6 # Initialize the default graph style: # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Initialize the default options: Draw Reference Plane = No Draw Reference Sphere = No Highlight Orbit = No Orbit Animation = No Normalize Data = No Draw Background = No Draw Labels = Yes Show Label Numbers = No Draw Legend = No # Labeled solutions: # -3 = Show all labeled solutions # -2 = Show HALF labeled solutions # -1 = Show SPEC labeled solutions # 0 = Show NONE of the solutions # Otherwise, show the specified solution(s) Labels = -3 # Colors are represented by RGB values from 0 to 1.0. # Background color: Background Color = 0.0, 0.0, 0.0 # Background transparency ([0.0, 1.0]): Background Transparency = 0.9 # Color of the animation object: Object Color = 1.0, 0.0, 0.0 ############################### # Secondary settings ############################### # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Unstable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Surface color: Surface Color = 0.0, 1.0, 0.0 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP ALG = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Draw Scale: Draw Scale = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead # 4 --- always at origin Coordinate Type = 3 # Set the radius of the spheres used for labels: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Label Sphere Radius = 1.0 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Set the maximum and minimum animation speed: Object Animation Speed = 50 Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Animation Speed = 50 Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Disk Rotation Disk Rotation = 1.000000, 0.000000, 0.000000, 1.570796 # Disk Position Disk Position = 0.000000, 0.000000, 0.000000 # Disk Radius Disk Radius = 1.000000 # Disk Height Disk Height = 0.001000 # Disk Transparency [0, 1] Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Sphere Position Sphere Position = 0.000000, 0.000000, 0.000000 # Sphere Radius Sphere Radius = 1.000000 # Sphere Transparency [0, 1] Sphere Transparency = 0.7 # Read Sphere From File Sphere From File = No # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: #3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/test/0000750000175000017500000000000013570013207011220 5ustar skskauto/07p/test/python.auto0000750000175000017500000000014013570013207013431 0ustar sksk#!/usr/bin/env auto import os os.chdir(os.path.join("..","python")) execfile("test.py") quit() auto/07p/test/verification/0000750000175000017500000000000013570013207013702 5ustar skskauto/07p/test/verification/red_swatch.png0000640000175000017500000000325013570013207016534 0ustar skskPNG  IHDR<GF}PLTE++qqWW44a##s>iiNNG{FFP-j$ X``zz==5fj pHYsHHFk> vpAg<+EIDAT80De ."88wyC ܮ.tôlv= 9qM88rZ|"h2YM^r{&sd1X&k9\Qz j:ju5d;a` ŵcO^P2Y4XӺ$56ͨҠhuqtycs~bfhjse g|JqoeԊr}mv#*> s؂ڭ?]$1tY!Z4MR3wGAnrҐS,u 8TEuXW_&K>n? Ţ"}06w'g<_mZꦨ**AI0Kа e?şWOP*l?DRG%+G:2jGUj1+ܖ”ߛc@tEXtcommentMade with GIMPV%tEXtdate:create2009-12-16T13:27:11-05:00_%tEXtdate:modify1999-08-17T19:37:34-04:00IENDB`auto/07p/test/verification/yellow_swatch.png0000640000175000017500000000411713570013207017300 0ustar skskPNG  IHDR<GF}PLTE  " &   3$!,*2'(.)%-0#8/+p pHYsHHFk> vpAg<+EIDAT8 ҋzaF@Ad#0#.5VTHꚤv϶ݦ=W H%jzB$zqIj.iMd\[VYjm:~hwE =iANAIns-ㄶ2ߋ(JF(Hky}T}jUS:кuZ5w<,;^B\Z<ٌJG5Ўb=4>+-ƥfGVbuq֕P)r>@Ϟ{E씖d }"aEIG989rb.AO,9xyrbn(—*fa{5GLM_ʍ[ƉFE]~GER|K[8Ήe8;>/BR4b@7-adEG;ԙϿZ|MlF*QI/7IZuRl$PPoQ۫+K ٌ_A9]hk.긖Mivc XfL/OUtmřoߒdKX[a3ʁh={~VۯMZcT5, ~CRk|4howù}f鳶0LuY$۵1x#N[q{Q)hmRe8}e>NMEeXd # wt{TfB1gM{P<vxi vVڕphи{}0XaN:K $d/ [ ibU\f`Τ ;)RoV9^RjB@mKyewC:hUxkCY ,!tGz cM㑔@5SCYjFlWپcaZ?,g 6PV,A< PqE8b\VpkyYCS+MM}tN(ek!ƿ7q6le ݅_߉a'Љ4{.t jz,B6胪ʟtZX"#c6 b+iGo4TO9=\{<=RT]3#>l9^^V1y۴KA4qY:-l,GL1 +rp=%#89ո l,G!m:"XMm<tK5- ,4~iK@DX͗yo=JdfMoX;[o'M.B ۨh~qHQ =d0 {O3`7-DƓX R0A'תu pQ ~y߃CX*':K [D'%ZU9n .~<̐?8<<ÿgtEXtcommentMade with GIMPV%tEXtdate:create2009-12-16T13:27:11-05:00_%tEXtdate:modify1999-08-17T19:37:34-04:00IENDB`auto/07p/test/verification/green_swatch.png0000640000175000017500000000040613570013207017062 0ustar skskPNG  IHDR<JV PLTEoXQ pHYsHHFk> vpAg<+E IDATc`62tEXtcommentMade with GIMPV%tEXtdate:create2009-12-16T13:27:11-05:00_%tEXtdate:modify1999-08-17T19:37:33-04:0075>IENDB`auto/07p/test/verification/orange_swatch.png0000640000175000017500000000507113570013207017240 0ustar skskPNG  IHDR<GF}PLTE 2K߅_*m-Di+~PR!ڀYT/p܂K{`Gy1Qnt?OJ݃HYMu$[]CrF:IwB8bV=14wU@ k&N|g(9#gbu;6FTX\^dA*f5l`M[8WjqR?c3=/nDxep&h: pHYsHHFk> vpAg<+EFIDAT8 Cx?OC,D3S*9d`&*#3QilSn}G )c[l 6N 1n7$Y$ Rq Ő 2yP[1t9$HŃ^=4pƦGA=7H6Q<*VQ[vވ T"u\e)}ڧ R}S7N}uh6ָQlrwEilrw<3'VMϜpAԅ;tKM$MK~zѿ%= l)Pܚct!%^#n٫gӤ]Jw{sUQ{%v\̗K?3R|d):)OܛmkGibs=Ά{g?r=ڙ=UN$`Ad*EPdQj쩃8M e1n7~q&3U>n$!L 2L* w7zED\}vihsPnsj_5ƜP&u[Vψ({ v[%Yq R:Jl{5=[y{"StOJ j1-lEC_'Z/dO`+`PW3v$K|*;¶;}ޣw ˀtfi6ns8{xw0BeuQ C%)RhP X"*=|*2f97ji^HY\2E`= Vq MNrnbvRQwzҗnюߓ~wa2[oxW +@:(9|0D_ު[6o1Wj][ zk߫Q|r\ sE{53Yi7C˱L`IYJ+%Q]x:sU*+ }OE|U 6O,Wju8½2!9^,KIAs+K Z4f8{TK¬ 0Gi~XSzQN3,iH{SA\J~ eD kҝSI ٮ"%#a6Obrnv;g#68`>{M'jE F=M%pr7^qw\e;$Цd򅠽;ҵ !+-:a"ĂUpA,DIViVr{,aw=&gQ]JG`O4MX[ylKÃ<=7sz!J w]r tEXtcommentMade with GIMPV%tEXtdate:create2009-12-16T13:27:11-05:00_%tEXtdate:modify1999-08-17T19:37:34-04:00IENDB`auto/07p/test/parse_test.py0000750000175000017500000003070013570013207013746 0ustar sksk#!/usr/bin/env python #global imports for the whole file import re,sys,getopt,os try: import cStringIO except ImportError: # Python 3 import io as cStringIO try: from urllib import pathname2url except ImportError: # Python 3 from urllib.request import pathname2url from auto import parseB #A few template strings which will be used later for reports, etc. no_demo_string=""" Trial file does not have appropriate demo Errors (if any) reported during compilation: %s """ different_floats=""" ====================== trial string: ====================== %s ====================== correct string: ====================== %s """ no_matching_float=""" Trial string has a non float where the correct string has a float: demo: %s correct_value: %s trial value: %s """+different_floats #All the demos in the AUTO distribution all_demos=["pp2","exp","int","dd2","opt","lin","bvp","pp3","wav","plp", "ab","abc","brc","brf","bru","chu","cir","enz", "ext","ezp","frc","fsh","ivp","kar","kpr","lor","lrz", "mtn","nag","non","obv","ops","pd1","pd2","pen","phs", "ppp","pvl","rev","san","she","spb","stw","tim","tor"] DEMO_OK=0 DEMO_MINOR_DATA_ERROR=1 DEMO_MAJOR_DATA_ERROR=2 DEMO_FAILED=4 def check_demo(demo,correct_filename,trial_filename,epsilon,abseps): # A regular expression for finding floating point numbers float_regex=re.compile('[ -][0-9]\.[0-9]+[-+eE][-+0-9][0-9]+',re.S) # A regular expression for finding each demo block demo_regex=re.compile("Demo %s is started.*Demo %s is done"%(demo,demo),re.S,) # A regular expression for finding a header header_regex=re.compile('BR',re.S) # A regular expression for finding each error block error_regex=re.compile("===%s start===.*===%s end==="%(demo,demo),re.S) # This is where the report get stored until it gets returned report = cStringIO.StringIO() # Search for all possible demos in each file correct_file=open(correct_filename,"r") correct_file=correct_file.read() trial_file=open(trial_filename,"r") trial_file=trial_file.read() # Use the regular expressions to find the appropriate blocks (if any) correct_result=demo_regex.search(correct_file) if correct_result is None: return (DEMO_FAILED,"Correct file does not have appropriate demo") else: correct_string=correct_result.group() trial_result=demo_regex.search(trial_file) if trial_result is None: error_file = open("%serrors"%trial_filename,"r") error_file = error_file.read() error_result=error_regex.search(error_file) if error_result is None: return (DEMO_FAILED,"Demo could not be found in trial file") else: return (DEMO_FAILED,no_demo_string%error_result.group()) else: trial_string=trial_result.group() # Now that we have the corresponding blocks from each file we look at each # Floating point number is each and see if they are within epsilon # percentage of each other. end=0 offset=1 correct_item=header_regex.search(correct_string,0) trial_item=header_regex.search(trial_string,0) maxdiff = 0 maxratio = 0 if correct_item is not None and trial_item is not None: end=correct_item.end() offset=trial_item.end()-end while True: start=end correct_item=float_regex.search(correct_string,start) if correct_item is None: break start=correct_item.start() end=correct_item.end() trial_item=float_regex.search(trial_string[start+offset-1:end+offset+1]) correct_data=parseB.AUTOatof(correct_item.group()) try: trial_data=parseB.AUTOatof(trial_item.group()) if trial_item.start() > 0: offset=trial_item.start()+offset-1 except (ValueError, AttributeError): correct_string="%s%s%s"%( correct_string[:start],correct_string[start:end], correct_string[end:]) trial_string="%s%s%s"%( trial_string[:start+offset],trial_string[start+offset:end+offset], trial_string[end+offset:]) return (DEMO_MAJOR_DATA_ERROR, no_matching_float%(demo,correct_item.group(),trial_item, trial_string,correct_string)) if correct_string[start-7:start-3] == "Time": start=end correct_item=header_regex.search(correct_string,start) trial_item=header_regex.search(trial_string,start+offset) if correct_item is not None and trial_item is not None: start=correct_item.start() end=correct_item.end() offset=trial_item.end()-end else: diff = abs(trial_data-correct_data) if trial_data == 0.0: ratio1 = abs(correct_data)+epsilon else: ratio1 = abs(diff/trial_data) if correct_data == 0.0: ratio2 = abs(trial_data)+epsilon else: ratio2 = abs(diff/correct_data) ratio = max(ratio1, ratio2) if diff > abseps and ratio > epsilon: maxdiff = max(diff, maxdiff) maxratio = max(ratio, maxratio) report.write("Files do not match at the %dth character for demo %s\n"%(start,demo)) report.write("Value of trial is %e\n"%trial_data) report.write("Value of correct file is %e\n\n"%correct_data) correct_string="%s%s%s"%( correct_string[:start],correct_string[start:end], correct_string[end:]) trial_string="%s%s%s"%( trial_string[:start+offset],trial_string[start+offset:end+offset], trial_string[end+offset:]) start += 31 end += 31 report_string = report.getvalue() if len(report_string)==0: return (DEMO_OK,"") else: return (DEMO_MINOR_DATA_ERROR,report_string+ different_floats%(trial_string,correct_string), maxratio,maxdiff) #====================== HTMLGen style class and functions ======== class BasicDocument(object): def __init__(self): self.header = [""" """] self.footer = ["\n \n"] self.lst = [] def append(self, s): self.lst.append(str(s)) def write(self, s): f = open(s,"w") f.write("\n".join(self.header+self.lst+self.footer)) f.close() class Table(object): def __init__(self, name, width="", cell_padding=""): header = ['\n'%name, '

    \n'% (cell_padding, width), '\n'%name] self.header = header self.heading = [] self.body = [] self.footer = ['
    %s

    \n'] def __str__(self): lst = self.header + [' '] for s in self.heading: lst.append('%s'%s) lst.append('\n') for line in self.body: lst.append('') for cell in line: lst.append('%s\n'%cell) lst.append('\n') lst.extend(self.footer) return "".join(lst) def H(sz, s): return "%s\n"%(sz,s,sz) def Image(s, border=0): return '%s'%(s,s,border) def Pre(s): return '

    %s
    \n'%(s) def Href(text="", url=""): return '%s'%(url,text) #====================== main program ============================= def parse(trial_file,epsilon=None, abseps=None, demo=None, html_dir=None, correct_file=None, demos=None): if isinstance(trial_file, str): trial_file = trial_file, if epsilon is None: epsilon = 0.01 if abseps is None: abseps = 1e-7 if demo is None: demo="" if demos is None: demos=all_demos if html_dir is None: html_dir="verification" if correct_file is None: correct_file = "hyper.all" report_list = { DEMO_OK: [], DEMO_MINOR_DATA_ERROR: [], DEMO_MAJOR_DATA_ERROR: [], DEMO_FAILED: [] } print ("Comparing against file: %s"%correct_file) print ("Putting results in directory: %s"%html_dir) table = [] retcode = 0 if len(demo) == 0: top = BasicDocument() top.append(H(1,"Correct file %s"%correct_file)) ok = Image("green_swatch.png",border=0) data_minor_error = Image("yellow_swatch.png",border=0) data_major_error = Image("orange_swatch.png",border=0) did_not_work = Image("red_swatch.png",border=0) dct = { DEMO_MINOR_DATA_ERROR: data_minor_error, DEMO_MAJOR_DATA_ERROR: data_major_error, DEMO_FAILED: did_not_work } for demo in demos: table_line = [] i=0 for fil in trial_file: if i%5 == 0: table_line.append(demo) i = i + 1 demofile = "%s_%s%d.html"%(os.path.basename(fil), demo.replace(os.sep,"_"),i) report = check_demo(demo,correct_file,fil,epsilon,abseps) if report[0]==DEMO_MINOR_DATA_ERROR: report_list[report[0]].append((demo,)+report[2:]) else: report_list[report[0]].append(demo) if report[0]==DEMO_OK: table_line.append(ok) else: sub_page = BasicDocument() sub_page.append(Pre(report[1])) sub_page.write(os.path.join(html_dir,demofile)) table_line.append(Href(text=dct[report[0]],url=demofile)) table.append(table_line) if len(html_dir) != 0: html_table =Table("Results of tests",width="30%",cell_padding="0") html_table.body = table i=0 headings=[] for fil in trial_file: if i%5 == 0: headings.append("Demo") i = i + 1 headings.append(os.path.basename(os.path.dirname(fil))+"\n" +os.path.basename(fil)) html_table.heading = headings top.append(html_table) top.write("%s/index.html"%html_dir) dct = { DEMO_OK: "No errors found in:", DEMO_MINOR_DATA_ERROR: "Minor errors found in:", DEMO_MAJOR_DATA_ERROR: "Major errors found in:", DEMO_FAILED: "The following demos failed:" } for i in [DEMO_OK, DEMO_MINOR_DATA_ERROR, DEMO_MAJOR_DATA_ERROR, DEMO_FAILED]: if len(report_list[i]) > 0: if i==DEMO_MINOR_DATA_ERROR: print(dct[i]) print(" Relative Error Absolute Error") for lst in report_list[i]: print("%-6s: %15.7e%15.7e"%(lst[0],lst[1],lst[2])) elif len(report_list[i]) > 0: if i != DEMO_OK: retcode = 1 print(" ".join([dct[i]]+report_list[i])) print("Please point your web browser to the following URL " "for detailed results:\nfile:%s"% pathname2url(os.path.abspath("verification/index.html"))) else: check_demo(demo,correct_file,trial_file,epsilon,abseps) return retcode if __name__ == "__main__": opts_list,args = getopt.getopt(sys.argv[1:],"c:t:d:e:h:") epsilon = None demo = None html_dir = None correct_file = None trial_file = args for x in opts_list: if x[0]=="-a": abseps=float(x[1]) if x[0]=="-c": correct_file=x[1] if x[0]=="-d": demo=x[1] if x[0]=="-e": epsilon=float(x[1]) if x[0]=="-h": html_dir=x[1] sys.exit(parse(trial_file, correct_file, demo, epsilon, html_dir)) auto/07p/test/all97.auto0000750000175000017500000000010213570013207013036 0ustar sksk#!/usr/bin/env auto import sys, test sys.exit(test.test('all97')) auto/07p/test/demo.auto0000750000175000017500000000011013570013207013031 0ustar sksk#!/usr/bin/env auto import sys, test sys.exit(test.test(sys.argv[2:])) auto/07p/test/test.py0000750000175000017500000001042613570013207012557 0ustar sksk#!/usr/bin/env python #This is Randy Paffenroths attempt to make a better regression #tester for AUTO. import getopt import os import sys, shutil import time import platform from auto.interactiveBindings import AUTOInteractiveConsole from auto import AUTOclui import parse_test from auto import runDemo # selection DIR1=["pp2","exp","int","dd2","opt","lin","bvp","pp3","wav","plp"] # HomCont selection DIR2=["san","mtn","kpr","cir","she","rev"] # All AUTO97 demos DIR3=DIR1+DIR2+["ab","abc","brc","brf","bru","chu","enz","ext","ezp","frc", "fsh","ivp","kar","lor","lrz","nag","non","obv","ops","pd1", "pd2","pen","phs","ppp","pvl","spb","stw","tim","tor"] DIR3.sort() # Plus new demos DIR4=DIR3+["abcb","apbp","c2c","cusp","ffn","fhh","fhn","fnb","fnc","hen", "kdv","lcbp","log","man","nep","p2c","pcl","ph1","pla","python", "python/n-body","r3b","sib", "snh","sspg","tfc","um2","um3","vhb"] DIR4.sort() # dummy stdin to redirect wait()s class nostdin(object): def read(self): return "\n" def readline(self): return "\n" def test(demos, versions=None, log_file=None, parse=True): sys.stdin = nostdin() if demos == "selec": demos = DIR1 if demos == "hom": demos = DIR2 if demos == "all97": demos = DIR3 if demos == "all": demos = DIR4 if log_file is None: hostname = platform.node() if '.' in hostname: hostname = hostname.split('.')[0] log_file = hostname+'_log' if versions is None: versions = ['07p'] log_files = [] log = {} err = {} runner = {} for version in versions: if len(log_file)!=0: log_files.append(log_file+version) log[version] = open(log_file+version,"w") err[version] = open(log_file+version+"errors","w") else: log[version] = None err[version] = None runner[version] = AUTOInteractiveConsole(AUTOclui.exportFunctions( log[version],err[version])) autofiles = [] for d in demos: print("Doing "+d) for version in versions: print("Version "+version) auto_dir=os.environ["AUTO_DIR"] demo_dir=os.path.join(auto_dir,"demos",d) autofiles = [] if os.path.exists(os.path.join(demo_dir,"%s.auto"%d)): autofiles = ["%s.auto"%d] else: autofiles = [dirname for dirname in os.listdir(demo_dir) if dirname[-5:]=='.auto'] autofiles.sort() if len(autofiles) > 0: oldcwd = os.getcwd() tmpdir = os.path.join(oldcwd,'tmp') try: shutil.rmtree(tmpdir) except OSError: pass try: os.mkdir(tmpdir) except OSError: pass os.chdir(tmpdir) AUTOclui.copydemo(d) log[version].write("Demo %s is started\n"%d) for autofile in autofiles: os.chdir(tmpdir) runner[version].auto(autofile) os.chdir(oldcwd) log[version].write("Demo %s is done\n"%d) else: runDemo.runDemo(d, verbose="yes", log=log[version], err=err[version], auto_dir=auto_dir) if len(autofiles) > 0: try: shutil.rmtree(tmpdir) except OSError: pass if len(log_file)!=0: for version in versions: runner[version].close() err[version].close() log[version].close() retcode = 0 if parse: retcode = parse_test.parse(log_files, demos=demos) return retcode if __name__ == '__main__': opts_list,args=getopt.getopt(sys.argv[1:],"cfpl:i:") #defaults versions = [] log_file = "" opts={} for x in opts_list: opts[x[0]]=x[1] if "-c" in opts: versions.append("2000") if "-f" in opts: versions.append("97") if "-p" in opts: versions.append("07p") if "-l" in opts: log_file=opts["-l"] demos = args[0] sys.exit(test(args[0], versions, log_file, parse=False)) auto/07p/test/hyper.all0000640000175000017500000147511113570013207013054 0ustar skskDoing ab Version 07p Copying demo ab ... done Demo ab is started ***Generate starting data*** gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.155E-01 ab ... done ***Compute stationary solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 14 UZ 7 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.136E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.207E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.46882E-01 1.44760E+00 3.72992E-01 1.39872E+00 1 67 UZ 8 2.50000E-01 3.35710E+00 8.65000E-01 3.24375E+00 Total Time 0.255E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.32538E-01 1.42450E+00 3.45491E-01 1.38197E+00 1 74 UZ 8 2.50000E-01 3.72020E+00 9.02281E-01 3.60912E+00 Total Time 0.238E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.20866E-01 1.40614E+00 3.22062E-01 1.36877E+00 1 32 LP 8 1.21901E-01 1.65357E+00 3.78732E-01 1.60961E+00 1 54 LP 9 1.17015E-01 2.71249E+00 6.21268E-01 2.64039E+00 1 80 HB 10 2.17079E-01 3.98722E+00 9.13231E-01 3.88123E+00 1 82 UZ 11 2.49999E-01 4.05225E+00 9.28125E-01 3.94453E+00 Total Time 0.242E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 26 HB 7 1.11153E-01 1.39119E+00 3.01792E-01 1.35806E+00 1 29 LP 8 1.11565E-01 1.53659E+00 3.33333E-01 1.50000E+00 1 60 LP 9 9.95741E-02 3.07318E+00 6.66667E-01 3.00000E+00 1 84 HB 10 1.83833E-01 4.24297E+00 9.20430E-01 4.14194E+00 1 87 UZ 11 2.50000E-01 4.36311E+00 9.46491E-01 4.25921E+00 Total Time 0.252E-01 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Compute periodic solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 161 UZ 18 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.186E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 222 UZ 18 2.50000E-01 3.37532E+00 9.87351E-01 5.87481E+00 1.72637E+00 Total Time 0.251E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 6 309 UZ 18 2.50000E-01 3.72137E+00 9.36686E-01 4.12902E+00 1.23162E+00 Total Time 0.324E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 8 116 UZ 18 1.20102E-01 2.07774E+00 4.77420E-01 2.02903E+00 9.99882E+02 Total Time 0.115E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 11 348 UZ 18 1.19455E-01 2.17761E+00 9.99196E-01 9.34169E+00 9.99991E+02 Total Time 0.368E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 13 67 UZ 18 1.10829E-01 1.75170E+00 3.80862E-01 1.71388E+00 9.99998E+02 Total Time 0.890E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 16 372 UZ 18 1.10114E-01 1.85878E+00 1.00071E+00 1.12332E+01 9.99991E+02 Total Time 0.442E+00 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ab is done Doing abc Version 07p Copying demo abc ... done Demo abc is started ***Compute a stationary solution family*** gfortran -fopenmp -O -c abc.f90 -o abc.o gfortran -fopenmp -O abc.o -o abc.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting abc ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 63 HB 2 2.04185E-01 2.10511E+00 5.87753E-01 5.56043E-01 1.94342E+00 1 77 HB 3 2.29836E-01 3.04038E+00 7.99139E-01 6.89422E-01 2.85131E+00 1 93 HB 4 2.59957E-01 4.03230E+00 9.26115E-01 6.16841E-01 3.87573E+00 1 110 HB 5 3.46208E-01 5.57947E+00 9.88177E-01 2.27518E-01 5.48654E+00 1 112 UZ 6 4.00000E-01 5.75762E+00 9.91445E-01 1.75932E-01 5.66888E+00 Total Time 0.387E-01 abc ... done ***Compute periodic solution families*** Starting abc ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 2 53 LP 7 2.13697E-01 3.15112E+00 9.55181E-01 7.82545E-01 4.60386E+00 7.61104E+00 2 72 LP 8 2.11903E-01 3.71726E+00 9.94574E-01 7.87019E-01 6.76231E+00 8.28914E+00 2 116 UZ 9 2.50003E-01 4.38078E+00 9.97613E-01 7.31620E-01 7.42179E+00 6.53496E+00 Total Time 0.151E+00 abc ... done Starting abc ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 3 29 LP 7 2.24962E-01 3.20785E+00 9.32614E-01 7.65288E-01 4.12206E+00 6.52551E+00 3 60 UZ 8 2.50001E-01 4.30860E+00 9.88920E-01 7.25072E-01 5.87858E+00 7.92732E+00 Total Time 0.842E-01 abc ... done Starting abc ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 4 38 UZ 7 2.50000E-01 4.30859E+00 9.88928E-01 7.25076E-01 5.87844E+00 7.92716E+00 Total Time 0.573E-01 abc ... done Starting abc ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 5 81 UZ 7 2.49999E-01 4.38073E+00 9.97613E-01 7.31616E-01 7.42128E+00 6.53497E+00 Total Time 0.977E-01 abc ... done ***Relabel the output*** Relabeling done Saving to b.abc, s.abc, and d.abc ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo abc is done Doing abcb Version 07p Copying demo abcb ... done Demo abcb is started Runner configured ***abcb: run 1: equilibrium continuation*** gfortran -fopenmp -O -c abcb.f90 -o abcb.o gfortran -fopenmp -O abcb.o -o abcb.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting abcb ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 20 2 1.08516E-01 5.09772E-01 1.47378E-01 1.46366E-01 4.65537E-01 1 38 HB 3 2.04185E-01 2.10511E+00 5.87753E-01 5.56042E-01 1.94342E+00 1 40 4 2.08722E-01 2.30455E+00 6.37860E-01 5.95877E-01 2.13284E+00 1 48 HB 5 2.29839E-01 3.04047E+00 7.99156E-01 6.89427E-01 2.85140E+00 1 59 HB 6 2.59958E-01 4.03235E+00 9.26119E-01 6.16833E-01 3.87578E+00 1 60 7 2.61714E-01 4.12577E+00 9.32984E-01 5.99267E-01 3.97397E+00 1 76 HB 8 3.46208E-01 5.57947E+00 9.88177E-01 2.27518E-01 5.48655E+00 1 80 9 4.96823E-01 5.92497E+00 9.94177E-01 1.26985E-01 5.83959E+00 1 86 UZ 10 1.00000E+00 6.17446E+00 9.97747E-01 5.33230E-02 6.09308E+00 Total Time 0.248E-01 abcb ... done Saving to b.abcb.1, s.abcb.1, and d.abcb.1 ... done ***abcb: run 2: cycle continuation*** Starting abcb ... BR PT TY LAB PAR(1) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD 3 20 11 2.06231E-01 8.44579E-01 8.44579E-01 7.42126E-01 3.29659E+00 7.38569E+00 3 32 LP 12 2.13697E-01 9.55183E-01 9.55183E-01 7.82697E-01 4.60383E+00 7.61104E+00 3 40 13 2.11905E-01 9.94160E-01 9.94160E-01 7.87011E-01 6.68977E+00 8.31329E+00 3 41 LP 14 2.11903E-01 9.94572E-01 9.94572E-01 7.87100E-01 6.76287E+00 8.28920E+00 3 60 15 2.51729E-01 9.97657E-01 9.97657E-01 7.27479E-01 7.43394E+00 6.51780E+00 3 80 16 3.43275E-01 9.92031E-01 9.92031E-01 2.90290E-01 5.89356E+00 2.96758E+00 3 83 LP 17 3.46208E-01 9.88178E-01 9.88178E-01 2.27524E-01 5.48658E+00 2.90970E+00 3 85 BP 18 3.45808E-01 9.89735E-01 9.89735E-01 2.49769E-01 5.63059E+00 2.91740E+00 3 100 EP 19 2.87816E-01 9.98733E-01 9.98733E-01 6.24402E-01 7.91573E+00 4.91248E+00 Total Time 0.215E+00 abcb ... done Saving to b.abcb.2, s.abcb.2, and d.abcb.2 ... done ***abcb: run 3: switch to LP continuation*** Starting abcb ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PERIOD 4 5 EP 20 2.13697E-01 3.15112E+00 9.55189E-01 7.82684E-01 4.60404E+00 1.00000E+00 7.61104E+00 Total Time 0.371E-01 abcb ... done Saving to b.abcb.3.sw, s.abcb.3.sw, and d.abcb.3.sw ... done ***abcb: run 3: LP continuation (fw)*** Runner configured Starting abcb ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PERIOD 4 10 21 1.04813E+00 3.04935E+00 9.49551E-01 7.78265E-01 4.50758E+00 2.07835E-01 8.42754E+00 4 20 22 1.18159E+00 2.76716E+00 9.14156E-01 7.56548E-01 3.97671E+00 2.00099E-01 1.00702E+01 4 30 LP 23 1.26866E+00 2.45101E+00 8.44686E-01 7.29219E-01 3.32555E+00 1.97225E-01 1.04769E+01 4 40 24 1.03035E+00 2.10214E+00 6.05928E-01 5.71777E-01 2.02690E+00 2.03379E-01 8.05076E+00 4 50 EP 25 1.02671E+00 2.09982E+00 5.86285E-01 5.54857E-01 1.94095E+00 2.03475E-01 8.03205E+00 Total Time 0.353E+00 abcb ... done Saving to b.abcb.3.fw, s.abcb.3.fw, and d.abcb.3.fw ... done ***abcb: run 3: LP continuation (bw)*** Starting abcb ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PERIOD 4 10 21 9.82558E-01 3.19526E+00 9.51590E-01 7.80242E-01 4.49808E+00 2.19117E-01 7.03626E+00 4 12 LP 22 9.82183E-01 3.19889E+00 9.50140E-01 7.79135E-01 4.46332E+00 2.19983E-01 6.95491E+00 4 20 23 1.02043E+00 3.20988E+00 9.18557E-01 7.54045E-01 3.91142E+00 2.26394E-01 6.41773E+00 4 30 24 1.09303E+00 3.23290E+00 8.30129E-01 6.96079E-01 3.07234E+00 2.26395E-01 6.58451E+00 4 40 25 1.09312E+00 3.23294E+00 8.27105E-01 6.94478E-01 3.05078E+00 2.26392E-01 6.58514E+00 4 49 MX 26 1.09312E+00 3.23294E+00 8.27104E-01 6.94478E-01 3.05077E+00 2.26392E-01 6.58514E+00 Total Time 0.343E+00 abcb ... done Saving to b.abcb.3.bw, s.abcb.3.bw, and d.abcb.3.bw ... done ***abcb: run 4: cycle continuation (bw)*** Starting abcb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 4 2 27 2.20102E-01 3.19261E+00 9.49286E-01 7.78852E-01 4.44511E+00 6.92942E+00 4 4 28 2.20220E-01 3.18654E+00 9.48454E-01 7.78518E-01 4.42719E+00 6.90439E+00 4 6 29 2.20365E-01 3.17931E+00 9.47423E-01 7.78141E-01 4.40563E+00 6.87402E+00 4 8 30 2.20543E-01 3.17073E+00 9.46145E-01 7.77641E-01 4.37987E+00 6.83716E+00 4 10 EP 31 2.20761E-01 3.16061E+00 9.44584E-01 7.77009E-01 4.34867E+00 6.79243E+00 Total Time 0.665E-01 abcb ... done Saving to b.abcb.4.bw, s.abcb.4.bw, and d.abcb.4.bw ... done ***abcb: run 4: cycle continuation (fw)*** Starting abcb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 4 2 32 2.20643E-01 3.16601E+00 9.45429E-01 7.77372E-01 4.36543E+00 6.81649E+00 4 4 33 2.20375E-01 3.17882E+00 9.47350E-01 7.78114E-01 4.40423E+00 6.87193E+00 4 6 34 2.20059E-01 3.19487E+00 9.49601E-01 7.78907E-01 4.45169E+00 6.93864E+00 4 7 BP 35 2.19983E-01 3.19890E+00 9.50135E-01 7.79152E-01 4.46338E+00 6.95491E+00 4 8 36 2.19782E-01 3.20985E+00 9.51573E-01 7.79646E-01 4.49464E+00 6.99837E+00 4 10 EP 37 2.19389E-01 3.23275E+00 9.54375E-01 7.80590E-01 4.55899E+00 7.08547E+00 Total Time 0.509E-01 abcb ... done Saving to b.abcb.4.fw, s.abcb.4.fw, and d.abcb.4.fw ... done ***abcb: run 5: switch to BP continuation*** Starting abcb ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) PERIOD 5 5 EP 38 2.19983E-01 3.19889E+00 9.50143E-01 7.79161E-01 4.46335E+00 9.82183E-01 1.55000E+00 6.95491E+00 Total Time 0.144E+00 abcb ... done Saving to b.abcb.5.sw, s.abcb.5.sw, and d.abcb.5.sw ... done ***abcb: run 5: BP continuation (fw)*** Starting abcb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) PERIOD 5 10 39 2.24026E-01 3.16947E+00 9.47029E-01 7.77368E-01 4.38160E+00 1.00184E+00 1.57276E+00 6.83574E+00 5 20 40 2.32261E-01 3.11327E+00 9.40743E-01 7.73788E-01 4.22691E+00 1.04237E+00 1.61861E+00 6.61250E+00 5 30 41 2.40829E-01 3.05947E+00 9.34209E-01 7.70006E-01 4.07948E+00 1.08510E+00 1.66565E+00 6.40453E+00 5 40 42 2.49707E-01 3.00821E+00 9.27376E-01 7.66010E-01 3.93769E+00 1.12976E+00 1.71368E+00 6.21147E+00 5 50 EP 43 2.58876E-01 2.95962E+00 9.20202E-01 7.61859E-01 3.80041E+00 1.17608E+00 1.76257E+00 6.03276E+00 Total Time 0.392E+00 abcb ... done Saving to b.abcb.5.fw, s.abcb.5.fw, and d.abcb.5.fw ... done ***abcb: run 5: BP continuation (bw)*** Starting abcb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) PERIOD 5 10 39 2.16042E-01 3.22889E+00 9.53189E-01 7.80839E-01 4.54746E+00 9.63220E-01 1.52767E+00 7.07782E+00 5 20 40 2.08627E-01 3.28964E+00 9.59052E-01 7.84048E-01 4.72218E+00 9.28126E-01 1.48519E+00 7.32946E+00 5 30 41 2.01786E-01 3.35269E+00 9.64721E-01 7.86965E-01 4.91038E+00 8.96563E-01 1.44543E+00 7.58877E+00 5 40 42 1.95769E-01 3.41846E+00 9.70240E-01 7.89569E-01 5.11629E+00 8.69577E-01 1.40992E+00 7.84179E+00 5 50 EP 43 1.91085E-01 3.48792E+00 9.75602E-01 7.91747E-01 5.34420E+00 8.49077E-01 1.38168E+00 8.05582E+00 Total Time 0.381E+00 abcb ... done Saving to b.abcb.5.bw, s.abcb.5.bw, and d.abcb.5.bw ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo abcb is done Doing apbp Version 07p Copying demo apbp ... done Demo apbp is started ***apbp: run 1: solution continuation*** gfortran -fopenmp -O -c apbp.f90 -o apbp.o gfortran -fopenmp -O apbp.o -o apbp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting apbp ... BR PT TY LAB PAR(1) L2-NORM U(1) 1 1 EP 1 1.00000E+00 1.00000E+00 1.00000E+00 1 10 2 1.46669E+00 1.46669E+00 1.46669E+00 1 18 BP 3 2.00000E+00 2.00000E+00 2.00000E+00 1 20 4 2.14142E+00 2.14142E+00 2.14142E+00 1 30 5 2.84853E+00 2.84853E+00 2.84853E+00 1 40 6 3.55564E+00 3.55564E+00 3.55564E+00 1 50 EP 7 4.26274E+00 4.26274E+00 4.26274E+00 BR PT TY LAB PAR(1) L2-NORM U(1) 2 10 8 2.47414E+00 2.00000E+00 2.00000E+00 2 20 9 3.47414E+00 2.00000E+00 2.00000E+00 2 30 10 4.47414E+00 2.00000E+00 2.00000E+00 2 40 11 5.47414E+00 2.00000E+00 2.00000E+00 2 50 EP 12 6.47414E+00 2.00000E+00 2.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) 2 10 13 1.52586E+00 2.00000E+00 2.00000E+00 2 20 14 5.25858E-01 2.00000E+00 2.00000E+00 2 30 15 -4.74142E-01 2.00000E+00 2.00000E+00 2 40 16 -1.47414E+00 2.00000E+00 2.00000E+00 2 50 EP 17 -2.47414E+00 2.00000E+00 2.00000E+00 Total Time 0.209E-01 apbp ... done Saving to b.apbp.1, s.apbp.1, and d.apbp.1 ... done ***apbp: run 2: BP cont non-generic (fw)*** Starting apbp ... BR PT TY LAB PAR(1) L2-NORM U(1) PAR(2) 3 10 18 2.38105E+00 2.38105E+00 2.38105E+00 2.38105E+00 3 20 19 2.95840E+00 2.95840E+00 2.95840E+00 2.95840E+00 3 30 20 3.53575E+00 3.53575E+00 3.53575E+00 3.53575E+00 3 40 21 4.11310E+00 4.11310E+00 4.11310E+00 4.11310E+00 3 50 EP 22 4.69045E+00 4.69045E+00 4.69045E+00 4.69045E+00 Total Time 0.153E-01 apbp ... done Saving to b.apbp.2.fw, s.apbp.2.fw, and d.apbp.2.fw ... done ***apbp: run 2: BP cont non-generic (bw)*** Starting apbp ... BR PT TY LAB PAR(1) L2-NORM U(1) PAR(2) 3 10 18 1.61895E+00 1.61895E+00 1.61895E+00 1.61895E+00 3 20 19 1.04160E+00 1.04160E+00 1.04160E+00 1.04160E+00 3 30 20 4.64248E-01 4.64248E-01 4.64248E-01 4.64248E-01 3 40 21 -1.13102E-01 1.13102E-01 -1.13102E-01 -1.13102E-01 3 50 EP 22 -6.90453E-01 6.90453E-01 -6.90453E-01 -6.90453E-01 Total Time 0.153E-01 apbp ... done Saving to b.apbp.2.bw, s.apbp.2.bw, and d.apbp.2.bw ... done ***apbp: run 3: BP cont generic (fw)*** Starting apbp ... BR PT TY LAB PAR(1) L2-NORM U(1) PAR(2) PAR(3) 1 10 18 2.38105E+00 2.38105E+00 2.38105E+00 2.38105E+00 0.00000E+00 1 20 19 2.95840E+00 2.95840E+00 2.95840E+00 2.95840E+00 0.00000E+00 1 30 20 3.53575E+00 3.53575E+00 3.53575E+00 3.53575E+00 0.00000E+00 1 40 21 4.11310E+00 4.11310E+00 4.11310E+00 4.11310E+00 0.00000E+00 1 50 EP 22 4.69045E+00 4.69045E+00 4.69045E+00 4.69045E+00 0.00000E+00 Total Time 0.157E-01 apbp ... done Saving to b.apbp.3.fw, s.apbp.3.fw, and d.apbp.3.fw ... done ***apbp: run 3: BP cont generic (bw)*** Starting apbp ... BR PT TY LAB PAR(1) L2-NORM U(1) PAR(2) PAR(3) 1 10 18 1.61895E+00 1.61895E+00 1.61895E+00 1.61895E+00 0.00000E+00 1 20 19 1.04160E+00 1.04160E+00 1.04160E+00 1.04160E+00 0.00000E+00 1 30 20 4.64248E-01 4.64248E-01 4.64248E-01 4.64248E-01 0.00000E+00 1 40 21 -1.13102E-01 1.13102E-01 -1.13102E-01 -1.13102E-01 0.00000E+00 1 50 EP 22 -6.90453E-01 6.90453E-01 -6.90453E-01 -6.90453E-01 0.00000E+00 Total Time 0.159E-01 apbp ... done Saving to b.apbp.3.bw, s.apbp.3.bw, and d.apbp.3.bw ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo apbp is done Doing brc Version 07p Copying demo brc ... done Demo brc is started Demo brc is started brc : first run : stationary solutions gfortran -fopenmp -O -c brc.f90 -o brc.o gfortran -fopenmp -O brc.o -o brc.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting brc ... BR PT TY LAB PAR(5) L2-NORM U(1) U(2) U(3) U(4) U(5) U(6) 1 1 EP 1 4.00000E-01 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1 5 HB 2 5.13070E-01 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1 11 HB 3 1.02515E+00 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1 17 HB 4 1.59033E+00 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1 21 HB 5 1.97999E+00 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1 22 UZ 6 2.00000E+00 8.27972E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 Total Time 0.180E-01 brc ... done brc : second run : periodic solutions Starting brc ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 2 38 BP 7 1.27121E+00 8.68310E+00 2.07249E+00 2.46703E+00 3.69249E+00 3.69249E+00 2.46703E+00 3.53049E+00 2 44 TR 8 1.70606E+00 8.67143E+00 2.05681E+00 2.31190E+00 3.74041E+00 3.74041E+00 2.31190E+00 3.59620E+00 2 46 TR 9 1.87693E+00 8.67156E+00 2.04848E+00 2.25870E+00 3.77266E+00 3.77266E+00 2.25870E+00 3.62132E+00 2 48 UZ 10 1.99992E+00 8.67374E+00 2.04322E+00 2.22662E+00 3.79158E+00 3.79158E+00 2.22662E+00 3.63876E+00 Total Time 0.288E+00 brc ... done brc : third run : secondary periodic solutions Starting brc ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 3 35 TR 11 1.30281E+00 8.56659E+00 2.05095E+00 2.32843E+00 2.68512E+00 3.63904E+00 2.82494E+00 3.37528E+00 3 49 TR 12 1.92790E+00 8.48086E+00 2.02316E+00 2.13743E+00 2.26960E+00 3.58863E+00 2.51772E+00 3.43483E+00 3 50 UZ 13 1.99994E+00 8.47309E+00 2.02051E+00 2.12651E+00 2.25180E+00 3.57867E+00 2.46043E+00 3.44192E+00 Total Time 0.469E+00 brc ... done Saving to b.brc, s.brc, and d.brc ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo brc is done Doing brf Version 07p Copying demo brf ... done Demo brf is started Demo brf is started brf : first run : stationary solutions gfortran -fopenmp -O -c brf.f90 -o brf.o gfortran -fopenmp -O brf.o -o brf.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting brf ... BR PT TY LAB PAR(5) L2-NORM U(1) U(2) U(3) U(4) U(5) U(6) 1 1 EP 1 4.00000E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 1 5 HB 2 5.12990E-01 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 1 11 HB 3 1.02338E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 1 16 HB 4 1.51789E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 1 21 HB 5 1.95959E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 1 22 UZ 6 2.05000E+00 7.55831E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 2.72500E+00 Total Time 0.178E-01 brf ... done brf : second run : periodic solutions Starting brf ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 2 88 BP 7 1.23526E+00 8.15112E+00 2.58250E+00 3.37018E+00 3.94858E+00 3.37018E+00 2.58250E+00 3.48116E+00 2 114 TR 8 1.89686E+00 7.96767E+00 2.35131E+00 2.99477E+00 3.78575E+00 2.99477E+00 2.35131E+00 3.40535E+00 2 116 TR 9 1.94124E+00 7.95113E+00 2.33646E+00 2.96170E+00 3.76739E+00 2.96170E+00 2.33646E+00 3.39550E+00 2 119 UZ 10 2.05000E+00 7.90627E+00 2.29972E+00 2.86009E+00 3.68860E+00 2.86009E+00 2.29972E+00 3.36716E+00 Total Time 0.442E+00 brf ... done brf : third run : secondary periodic solutions Starting brf ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 3 56 TR 11 1.40184E+00 8.01933E+00 2.24903E+00 2.53578E+00 3.23921E+00 3.80293E+00 2.99481E+00 3.41871E+00 3 80 TR 12 1.80834E+00 7.91323E+00 2.05039E+00 2.13873E+00 2.48085E+00 3.59564E+00 3.42628E+00 3.44551E+00 3 85 UZ 13 2.05000E+00 7.91873E+00 2.02190E+00 2.07815E+00 2.33600E+00 3.59456E+00 3.55841E+00 3.49875E+00 Total Time 0.340E+00 brf ... done Saving to b.brf, s.brf, and d.brf ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo brf is done Doing bru Version 07p Copying demo bru ... done Demo bru is started Demo bru is started bru : first run : time integration towards stationary state gfortran -fopenmp -O -c bru.f90 -o bru.o gfortran -fopenmp -O bru.o -o bru.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting bru ... BR PT TY LAB TIME INTEGRAL U(1) MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 1.68169E+00 2.00000E+00 3.42500E+00 1 1777 UZ 2 2.10000E+01 2.14192E+00 2.22002E+00 2.72500E+00 1 1820 UZ 3 2.15000E+01 1.76925E+00 2.00000E+00 2.82414E+00 1 1854 UZ 4 2.20001E+01 1.57790E+00 2.00000E+00 3.39984E+00 1 1880 UZ 5 2.24999E+01 1.59807E+00 2.00000E+00 3.81930E+00 1 1924 UZ 6 2.30000E+01 1.98996E+00 2.07328E+00 3.56188E+00 1 2021 UZ 7 2.35002E+01 2.69331E+00 3.16502E+00 2.72500E+00 1 2058 UZ 8 2.40000E+01 2.35495E+00 2.53734E+00 2.72500E+00 1 2140 UZ 9 2.50000E+01 1.63877E+00 2.00000E+00 3.15065E+00 Total Time 0.921E+00 bru ... done Saving to b.bru, s.bru, and d.bru ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo bru is done Doing bvp Version 07p Copying demo bvp ... done Demo bvp is started ***Compute the zero solution branch*** gfortran -fopenmp -O -c bvp.f90 -o bvp.o gfortran -fopenmp -O bvp.o -o bvp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 6 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 11 BP 3 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 16 BP 4 3.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 21 BP 5 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 26 BP 6 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 UZ 7 5.50000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.239E-01 bvp ... done Saving to b.bvp, s.bvp, and d.bvp ... done ***Compute bifurcating branches*** Runner configured ***Branch 2 *** Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 13 UZ 8 1.18420E+00 1.09529E+01 4.65181E+00 1.52462E+01 3.00000E+00 2 17 UZ 9 1.34135E+00 2.18597E+01 9.19287E+00 3.13506E+01 6.00000E+00 2 20 UZ 10 1.48028E+00 3.27452E+01 1.36335E+01 4.82771E+01 9.00000E+00 Total Time 0.267E-01 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 14 UZ 8 7.69103E-01 1.10302E+01 0.00000E+00 1.43493E+01 -3.00000E+00 2 18 UZ 9 4.19634E-01 2.21764E+01 0.00000E+00 2.77601E+01 -6.00000E+00 2 25 UZ 10 -2.81413E-05 2.68854E+01 1.74090E-23 3.30822E+01 -7.25520E+00 Total Time 0.376E-01 bvp ... done Runner configured ***Branch 3 *** Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 43 UZ 8 2.12178E+00 7.14503E+01 1.77317E+01 1.01295E+02 3.00000E+00 2 51 UZ 9 2.23497E+00 1.04083E+02 2.66634E+01 1.49745E+02 6.00000E+00 2 56 UZ 10 2.34100E+00 1.31101E+02 3.42095E+01 1.91340E+02 9.00000E+00 Total Time 0.436E-01 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 43 UZ 8 2.12178E+00 7.14503E+01 1.77280E+01 1.01283E+02 3.00000E+00 2 51 UZ 9 2.23497E+00 1.04083E+02 2.66663E+01 1.49745E+02 6.00000E+00 2 56 UZ 10 2.34100E+00 1.31101E+02 3.42086E+01 1.91335E+02 9.00000E+00 Total Time 0.632E-01 bvp ... done Runner configured ***Branch 4 *** Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 18 UZ 8 3.06992E+00 7.59395E+01 1.16135E+01 1.07259E+02 3.00000E+00 2 24 UZ 9 3.14086E+00 1.34187E+02 2.08414E+01 1.90444E+02 6.00000E+00 2 30 UZ 10 3.21105E+00 1.84706E+02 2.90141E+01 2.63452E+02 9.00000E+00 Total Time 0.123E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 21 LP 8 2.96314E+00 9.84941E+01 1.58176E+01 1.38359E+02 -1.93212E+00 2 43 UZ 9 3.13843E+00 3.03289E+02 5.62213E+01 4.34738E+02 3.00000E+00 2 49 UZ 10 3.22635E+00 3.53266E+02 6.71175E+01 5.11262E+02 6.00000E+00 2 54 UZ 11 3.30987E+00 3.95950E+02 7.65345E+01 5.78365E+02 9.00000E+00 Total Time 0.614E-01 bvp ... done Runner configured ***Branch 5 *** Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 37 UZ 8 4.06269E+00 2.76556E+02 3.29666E+01 3.91401E+02 3.00000E+00 2 49 UZ 9 4.12413E+00 3.94164E+02 4.80508E+01 5.60020E+02 6.00000E+00 2 59 UZ 10 4.18440E+00 4.86464E+02 6.01859E+01 6.93837E+02 9.00000E+00 Total Time 0.484E-01 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 37 UZ 8 4.06269E+00 2.76556E+02 3.29669E+01 3.91368E+02 3.00000E+00 2 49 UZ 9 4.12413E+00 3.94164E+02 4.80389E+01 5.59954E+02 6.00000E+00 2 59 UZ 10 4.18440E+00 4.86464E+02 6.01789E+01 6.93590E+02 9.00000E+00 Total Time 0.470E-01 bvp ... done Runner configured ***Branch 6 *** Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 30 UZ 8 5.04249E+00 2.05732E+02 1.87749E+01 2.90824E+02 3.00000E+00 2 46 UZ 9 5.08657E+00 3.57597E+02 3.31585E+01 5.06420E+02 6.00000E+00 2 59 UZ 10 5.13105E+00 4.85374E+02 4.54202E+01 6.88692E+02 9.00000E+00 Total Time 0.761E-01 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 37 LP 8 4.97821E+00 2.77188E+02 2.59343E+01 3.91064E+02 -1.92422E+00 2 98 UZ 9 5.08463E+00 8.79129E+02 8.92274E+01 1.24911E+03 3.00000E+00 2 113 UZ 10 5.13961E+00 1.02188E+03 1.05583E+02 1.45673E+03 6.00000E+00 2 126 UZ 11 5.19294E+00 1.14071E+03 1.19257E+02 1.63133E+03 9.00000E+00 Total Time 0.463E-01 bvp ... done ***Relabel and save the output*** Relabeling done Saving to b.bvp, s.bvp, and d.bvp ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo bvp is done Doing c2c Version 07p Copying demo c2c ... done Demo c2c is started c2c : first run : find the Hopf bifurcation gfortran -fopenmp -O -c c2c.f90 -o c2c.o gfortran -fopenmp -O c2c.o -o c2c.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting c2c ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 5.00000E-01 8.69767E+00 7.41582E-01 1.66667E-01 8.66440E+00 1 6 HB 2 5.12270E-01 8.53471E+00 7.41582E-01 1.66667E-01 8.50080E+00 Total Time 0.806E-02 c2c ... done c2c : second run : periodic solutions Starting c2c ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 2 27 PD 3 4.28911E-01 9.56863E+00 8.06024E-01 2.22750E-01 9.74420E+00 6.58869E+01 2 50 UZ 4 2.50000E-01 1.17778E+01 8.17805E-01 2.79474E-01 1.20521E+01 4.89548E+01 2 54 PD 5 2.16681E-01 1.20869E+01 8.26745E-01 3.01437E-01 1.23896E+01 4.04772E+01 2 72 LP 6 2.08045E-01 1.20324E+01 8.39384E-01 3.22301E-01 1.23454E+01 3.43745E+01 2 97 UZ 7 2.50000E-01 1.07916E+01 8.70809E-01 3.81131E-01 1.10793E+01 2.42822E+01 Total Time 0.137E+00 c2c ... done c2c : third run : continue zero eigenfunction until eigenvalue Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(12) PAR(10) 2 40 BP 8 2.42822E+01 1.07916E+01 8.70782E-01 3.81096E-01 1.10793E+01 0.00000E+00 -6.41468E+00 0.00000E+00 2 105 BP 9 2.42822E+01 1.07916E+01 8.70772E-01 3.81117E-01 1.10793E+01 0.00000E+00 1.46630E-08 0.00000E+00 2 110 BP 10 2.42822E+01 1.07916E+01 8.70772E-01 3.81117E-01 1.10793E+01 0.00000E+00 4.39961E-01 0.00000E+00 Total Time 0.148E+00 c2c ... done c2c : fourth run : switch to continuation of nontrivial eigenfunction Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(12) PAR(10) 3 18 UZ 11 2.42822E+01 1.08583E+01 8.70835E-01 3.81084E-01 1.10793E+01 7.13703E-01 4.39961E-01 1.00000E+00 Total Time 0.742E-01 c2c ... done c2c : fifth run : continue zero eigenfunction until eigenvalue Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) PAR(4) PAR(25) PAR(6) PAR(26) 3 53 BP 12 2.42822E+01 1.52616E+01 8.70776E-01 3.81116E-01 -4.39961E-01 0.00000E+00 2.42822E+01 0.00000E+00 Total Time 0.256E+00 c2c ... done c2c : sixth run : switch to continuation of nontrivial eigenfunction Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) PAR(4) PAR(25) PAR(6) PAR(26) 4 18 UZ 13 2.42822E+01 1.53086E+01 8.70840E-01 3.81136E-01 -4.39961E-01 1.00000E+00 2.42822E+01 0.00000E+00 Total Time 0.225E+00 c2c ... done c2c : seventh run : switch to second zero eigenfunction until eigenvalue Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) PAR(4) PAR(5) PAR(6) PAR(26) 4 53 BP 14 2.42822E+01 1.53086E+01 8.70839E-01 3.81130E-01 -4.39961E-01 -4.39961E-01 2.42822E+01 0.00000E+00 4 56 BP 15 2.42822E+01 1.53086E+01 8.70839E-01 3.81130E-01 -4.39961E-01 6.32195E-06 2.42822E+01 0.00000E+00 4 89 BP 16 2.42822E+01 1.53086E+01 8.70839E-01 3.81130E-01 -4.39961E-01 6.41468E+00 2.42822E+01 0.00000E+00 Total Time 0.382E+00 c2c ... done c2c : eighth run : switch to continuation of second nontrivial eigenfunction Starting c2c ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) PAR(4) PAR(5) PAR(6) PAR(26) 5 26 UZ 17 2.42822E+01 1.57385E+01 8.70774E-01 3.81141E-01 -4.39961E-01 6.41468E+00 2.42822E+01 1.00000E+00 Total Time 0.214E+00 c2c ... done c2c : ninth run : homotopy in T,h11,h21 Starting c2c ... BR PT TY LAB PAR(7) L2-NORM PAR(11) PAR(4) PAR(5) PAR(6) PAR(21) PAR(23) 5 4 UZ 18 3.51372E-02 1.92537E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -6.55952E-08 1.51636E-03 5 35 UZ 19 1.94979E+01 1.90701E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -4.15760E-09 3.02933E-01 5 37 UZ 20 2.43472E+01 1.90902E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -1.63491E-08 2.36786E-03 5 47 UZ 21 4.38458E+01 1.90828E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -1.41539E-08 3.01784E-01 5 50 UZ 22 4.86576E+01 1.90919E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -1.77376E-09 3.71689E-03 5 63 UZ 23 6.82313E+01 1.90884E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -2.51121E-10 2.99964E-01 5 67 UZ 24 7.29836E+01 1.90945E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -6.61758E-11 5.87006E-03 5 91 UZ 25 9.26772E+01 1.90933E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 7.69760E-13 2.97048E-01 5 95 UZ 26 9.73341E+01 1.90981E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 4.48493E-11 9.35898E-03 5 113 UZ 27 1.17222E+02 1.90991E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -2.47377E-09 2.92280E-01 5 117 UZ 28 1.21723E+02 1.91032E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -4.91327E-12 1.51465E-02 5 135 UZ 29 1.41935E+02 1.91067E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -6.09319E-10 2.84216E-01 5 139 UZ 30 1.46170E+02 1.91105E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -5.91558E-10 2.51120E-02 5 162 UZ 31 1.66954E+02 1.91173E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -2.97746E-10 2.69630E-01 5 166 UZ 32 1.70702E+02 1.91209E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -9.74255E-11 4.34020E-02 5 191 UZ 33 1.92633E+02 1.91329E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -2.40760E-08 2.38307E-01 5 194 UZ 34 1.95298E+02 1.91359E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 3.24553E-11 8.22379E-02 5 360 UZ 35 3.41689E+02 1.92914E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 -9.54044E-08 3.63307E-01 5 370 UZ 36 3.48650E+02 1.92828E+01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 4.84080E-08 -3.81071E-02 Total Time 0.196E+02 c2c ... done c2c : tenth run : homotopy in T and h21 Starting c2c ... BR PT TY LAB PAR(7) L2-NORM PAR(23) PAR(11) PAR(4) PAR(5) PAR(6) PAR(8) 5 48 UZ 37 3.53829E+02 1.93162E+01 5.37108E-10 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 1.19527E-04 Total Time 0.340E+01 c2c ... done c2c : eleventh run : homotopy in T and h12 Starting c2c ... BR PT TY LAB PAR(7) L2-NORM PAR(22) PAR(11) PAR(4) PAR(5) PAR(6) PAR(8) 5 47 UZ 38 3.63544E+02 1.93213E+01 1.71822E-11 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 2.23045E-01 Total Time 0.309E+01 c2c ... done c2c : twelfth run : homotopy in T and h22 Starting c2c ... BR PT TY LAB PAR(7) L2-NORM PAR(24) PAR(11) PAR(4) PAR(5) PAR(6) PAR(8) 5 211 UZ 39 3.78077E+02 1.93016E+01 -7.46786E-09 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 4.11109E-05 5 231 UZ 40 3.87931E+02 1.93068E+01 -9.67680E-08 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 2.24909E-01 Total Time 0.166E+02 c2c ... done c2c : thirteenth run : increase period (par 7) Starting c2c ... BR PT TY LAB PAR(7) L2-NORM MAX U(1) MAX U(2) PAR(11) PAR(4) PAR(5) PAR(6) 5 258 UZ 41 4.50000E+02 2.05758E+01 8.70837E-01 3.81145E-01 2.42822E+01 -4.39961E-01 6.41468E+00 2.42822E+01 Total Time 0.223E+02 c2c ... done c2c : fourteenth run : fw continuation in d2 (par2) until LP: primary homoclinic Starting c2c ... BR PT TY LAB PAR(1) L2-NORM PAR(11) PAR(4) PAR(5) PAR(6) PAR(35) PAR(36) 5 139 UZ 42 2.78500E-01 1.80478E+01 2.20782E+01 -3.52583E-01 5.54262E+00 2.20782E+01 0.00000E+00 0.00000E+00 5 151 LP 43 2.80913E-01 1.78461E+01 2.19265E+01 -3.45579E-01 5.48136E+00 2.19265E+01 0.00000E+00 0.00000E+00 5 163 UZ 44 2.78500E-01 1.79585E+01 2.20782E+01 -3.52583E-01 5.54261E+00 2.20782E+01 0.00000E+00 0.00000E+00 5 177 LP 45 2.77691E-01 1.79806E+01 2.21300E+01 -3.54949E-01 5.56349E+00 2.21300E+01 0.00000E+00 0.00000E+00 5 192 UZ 46 2.78500E-01 1.79237E+01 2.20782E+01 -3.52583E-01 5.54261E+00 2.20782E+01 0.00000E+00 0.00000E+00 5 253 LP 47 2.80908E-01 1.79409E+01 2.19268E+01 -3.45593E-01 5.48148E+00 2.19268E+01 0.00000E+00 0.00000E+00 5 287 UZ 48 2.78500E-01 1.80229E+01 2.20782E+01 -3.52583E-01 5.54261E+00 2.20782E+01 0.00000E+00 0.00000E+00 5 603 LP 49 2.30599E-01 2.01707E+01 2.65515E+01 -4.91849E-01 7.27444E+00 2.65515E+01 0.00000E+00 0.00000E+00 Total Time 0.541E+02 c2c ... done Saving to b.d2, s.d2, and d.d2 ... done Demo c2c is done Doing chu Version 07p Copying demo chu ... done Demo chu is started Demo chu is started chu : first run : stationary solutions gfortran -fopenmp -O -c chu.f90 -o chu.o gfortran -fopenmp -O chu.o -o chu.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting chu ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 BP 2 -6.00001E-09 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 100 EP 3 8.60000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 26 BP 4 0.00000E+00 2.12046E+00 1.49939E+00 0.00000E+00 -1.49939E+00 2 55 EP 5 0.00000E+00 5.02046E+00 3.55000E+00 0.00000E+00 -3.55000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 3 73 HB 6 6.80443E+00 2.12047E+00 1.49940E+00 0.00000E+00 -1.49940E+00 3 100 EP 7 9.50443E+00 2.12047E+00 1.49940E+00 0.00000E+00 -1.49940E+00 Total Time 0.508E-01 chu ... done chu : second run : periodic solutions Starting chu ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 6 30 PD 8 8.19600E+00 2.24085E+00 2.12609E+00 3.29107E-01 4.50375E-01 2.28355E+00 6 100 EP 9 1.10844E+01 7.41247E-01 2.03074E+00 2.17938E-01 6.26521E-01 1.93420E+01 Total Time 0.119E+00 chu ... done Saving to b.chu, s.chu, and d.chu ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo chu is done Doing cir Version 07p Copying demo cir ... done Demo cir is started cir : first run : increase the truncation interval gfortran -fopenmp -O -c cir.f90 -o cir.o gfortran -fopenmp -O cir.o -o cir.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting cir ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 1 EP 1 3.61300E+01 2.14038E-01 4.23177E-01 5.80472E-02 3.32867E-01 -7.21309E-01 1 21 UZ 2 1.00000E+02 1.28664E-01 4.22987E-01 5.80615E-02 3.32856E-01 -7.21309E-01 1 42 UZ 3 2.00000E+02 9.09790E-02 4.23224E-01 5.79878E-02 3.32854E-01 -7.21309E-01 1 50 EP 4 2.40000E+02 8.30521E-02 4.23072E-01 5.80102E-02 3.32844E-01 -7.21309E-01 Total Time 0.145E+00 cir ... done Saving to b.1, s.1, and d.1 ... done cir : second run : continue saddle-focus homoclinic orbit Starting cir ... BR PT TY LAB PAR(1) L2-NORM PAR(2) PAR(22) PAR(24) PAR(25) PAR(29) PAR(30) 1 17 UZ 5 -7.25693E-01 1.24649E-01 4.53564E-01 -2.80680E+00 2.88826E-01 -1.76281E-05 -2.88844E-01 5.77670E-01 1 75 UZ 6 -1.01484E+00 2.67843E-01 9.95025E-03 -3.99973E+00 1.66987E+00 1.66486E+00 -5.01128E-03 1.67488E+00 1 77 UZ 7 -1.02648E+00 2.75402E-01 -4.02797E-07 -4.00000E+00 1.71080E+00 1.71081E+00 2.01398E-07 1.71080E+00 1 80 UZ 8 -1.03810E+00 2.84014E-01 -1.00042E-02 -3.99974E+00 1.75189E+00 1.75685E+00 4.96599E-03 1.74692E+00 1 100 EP 9 -1.17062E+00 3.84097E-01 -1.12314E-01 -3.97353E+00 2.19859E+00 2.25055E+00 5.19525E-02 2.14664E+00 Total Time 0.247E+00 cir ... done Saving to b.2, s.2, and d.2 ... done cir third run : continue in reverse direction Starting cir ... BR PT TY LAB PAR(1) L2-NORM PAR(2) PAR(22) PAR(24) PAR(25) PAR(29) PAR(30) 1 9 UZ 10 -7.20400E-01 9.30494E-02 5.91232E-01 -1.72567E+00 -3.29582E-05 -3.75951E-01 -3.75918E-01 3.75885E-01 1 18 UZ 11 -7.59058E-01 4.86962E-02 7.42873E-01 3.43215E-05 -2.82299E-01 -7.15898E-01 -4.27741E-01 1.45442E-01 1 25 UZ 12 -7.74674E-01 1.04045E-02 7.74617E-01 5.82895E-01 4.10728E-06 -7.74522E-01 -1.10509E-02 1.10550E-02 1 27 EP 13 -7.71103E-01 9.12330E-03 7.71069E-01 5.51288E-01 -1.20136E-02 -7.71013E-01 -1.65114E-02 4.49783E-03 Total Time 0.115E+00 cir ... done Appending fort.7 to b.2 ... done Appending fort.8 to s.2 ... done Appending fort.9 to d.2 ... done Demo cir is done Doing cusp Version 07p Copying demo cusp ... done Demo cusp is started Runner configured gfortran -fopenmp -O -c cusp.f90 -o cusp.o gfortran -fopenmp -O cusp.o -o cusp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting cusp ... BR PT TY LAB mu L2-NORM x lambda 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1 14 LP 2 3.84900E-01 5.77360E-01 -5.77360E-01 1.00000E+00 1 20 3 1.26582E-01 9.29410E-01 -9.29410E-01 1.00000E+00 1 40 4 -1.38347E+00 1.40803E+00 -1.40803E+00 1.00000E+00 1 47 UZ 5 -1.99999E+00 1.52138E+00 -1.52138E+00 1.00000E+00 Total Time 0.819E-01 cusp ... done Starting cusp ... BR PT TY LAB mu L2-NORM x lambda 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1 14 LP 2 -3.84900E-01 5.77360E-01 5.77360E-01 1.00000E+00 1 20 3 -1.26582E-01 9.29410E-01 9.29410E-01 1.00000E+00 1 40 4 1.38347E+00 1.40803E+00 1.40803E+00 1.00000E+00 1 47 UZ 5 1.99999E+00 1.52138E+00 1.52138E+00 1.00000E+00 Total Time 0.167E-01 cusp ... done Relabeling done Saving to b.mu, s.mu, and d.mu ... done Created plot Runner configured Starting cusp ... BR PT TY LAB mu L2-NORM x lambda 2 20 11 1.09209E+00 8.17354E-01 -8.17354E-01 2.00420E+00 2 34 UZ 12 1.99995E+00 9.99991E-01 -9.99991E-01 2.99995E+00 Total Time 0.240E-01 cusp ... done Starting cusp ... BR PT TY LAB mu L2-NORM x lambda 2 20 11 5.42543E-02 3.00470E-01 -3.00470E-01 2.70847E-01 2 29 CP 12 -2.02770E-12 1.00472E-04 1.00472E-04 3.02839E-08 2 40 13 -9.09414E-02 3.56925E-01 3.56925E-01 3.82187E-01 2 60 14 -5.73716E-01 6.59512E-01 6.59512E-01 1.30487E+00 2 80 15 -1.68023E+00 9.43582E-01 9.43582E-01 2.67104E+00 2 85 UZ 16 -1.99995E+00 9.99992E-01 9.99992E-01 2.99995E+00 Total Time 0.271E-01 cusp ... done Saving to b.cusp, s.cusp, and d.cusp ... done Created plot Deleting fort.* *.o *.exe *.*~ ... done Hit to continue Demo cusp is done Doing dd2 Version 07p Copying demo dd2 ... done Demo dd2 is started Demo dd2 is started dd2 : first run : fixed point solution branches gfortran -fopenmp -O -c dd2.f90 -o dd2.o gfortran -fopenmp -O dd2.o -o dd2.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting dd2 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 13 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 53 UZ 3 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 2 38 BP 4 2.00000E+00 5.00000E-01 5.00000E-01 0.00000E+00 2 49 PD 5 3.00000E+00 6.66667E-01 6.66667E-01 0.00000E+00 2 70 UZ 6 5.00000E+00 8.00000E-01 8.00000E-01 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 2 85 EP 7 1.65467E-01 5.04349E+00 -5.04349E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 3 58 EP 8 3.99862E+00 5.02150E+00 5.00000E-01 4.99654E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 3 58 EP 9 1.38315E-03 5.02150E+00 5.00000E-01 -4.99654E+00 Total Time 0.510E-01 dd2 ... done Saving to b.dd2, s.dd2, and d.dd2 ... done dd2 : second run : a 2-parameter curve of period-doubling bifurcations Starting dd2 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(2) 5 100 EP 10 3.00000E+00 6.66667E-01 6.66667E-01 2.26804E-33 9.96000E+00 Total Time 0.319E-01 dd2 ... done Saving to b.pd, s.pd, and d.pd ... done dd2 : third run : perform a period-doubling Starting dd2 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 4 23 PD 10 3.44949E+00 4.39959E-01 4.39959E-01 0.00000E+00 4 42 UZ 11 5.00000E+00 2.53590E-01 2.53590E-01 0.00000E+00 Total Time 0.160E-01 dd2 ... done Appending to b.dd2, s.dd2 and d.dd2 ... done dd2 : fourth run : perform another period-doubling (period-4) Starting dd2 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 5 8 PD 12 3.54410E+00 5.23599E-01 5.23599E-01 0.00000E+00 5 35 UZ 13 5.00000E+00 7.42124E-01 7.42124E-01 0.00000E+00 Total Time 0.212E-01 dd2 ... done Appending to b.dd2, s.dd2 and d.dd2 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo dd2 is done Doing enz Version 07p Copying demo enz ... done Demo enz is started Demo enz is started enz : stationary solution branches gfortran -fopenmp -O -c enz.f90 -o enz.o gfortran -fopenmp -O enz.o -o enz.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting enz ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 141 LP 2 3.43569E+01 1.48261E+00 1.04836E+00 1.04836E+00 1 145 BP 3 3.42229E+01 1.66053E+00 1.17417E+00 1.17417E+00 1 214 BP 4 2.21816E+01 6.21472E+00 4.39447E+00 4.39447E+00 1 244 LP 5 1.88871E+01 1.24765E+01 8.82220E+00 8.82220E+00 1 250 EP 6 1.89864E+01 1.39722E+01 9.87985E+00 9.87985E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 2 84 LP 7 2.53727E+01 5.91179E+00 5.88408E+00 5.71738E-01 2 104 LP 8 2.66221E+01 8.84510E+00 8.78280E+00 1.04795E+00 2 172 LP 9 2.21816E+01 6.21472E+00 4.39458E+00 4.39436E+00 Total Time 0.900E-01 enz ... done Saving to b.enz, s.enz, and d.enz ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo enz is done Doing exp Version 07p Copying demo exp ... done Demo exp is started ***Compute a solution family*** gfortran -fopenmp -O -c exp.f90 -o exp.o gfortran -fopenmp -O exp.o -o exp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting exp ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 10 UZ 2 5.00071E-01 4.39344E-02 6.60050E-02 2.61316E-01 1 13 UZ 3 1.00000E+00 9.32569E-02 1.40484E-01 5.49353E-01 1 16 UZ 4 1.50000E+00 1.49861E-01 2.26457E-01 8.73235E-01 1 19 UZ 5 2.00000E+00 2.16936E-01 3.28922E-01 1.24822E+00 1 22 UZ 6 2.50000E+00 3.00803E-01 4.57926E-01 1.70436E+00 1 26 UZ 7 3.00001E+00 4.17958E-01 6.39959E-01 2.31962E+00 1 33 LP 8 3.51383E+00 7.61901E-01 1.18679E+00 4.00000E+00 1 43 UZ 9 3.00000E+00 1.23967E+00 1.97495E+00 6.10338E+00 1 49 UZ 10 2.49999E+00 1.50867E+00 2.43170E+00 7.20931E+00 1 55 UZ 11 2.00000E+00 1.77497E+00 2.89390E+00 8.26876E+00 1 62 UZ 12 1.50000E+00 2.07208E+00 3.41999E+00 9.42385E+00 1 70 UZ 13 1.00000E+00 2.44387E+00 4.09144E+00 1.08469E+01 1 82 UZ 14 5.00000E-01 3.01064E+00 5.13556E+00 1.29998E+01 1 100 EP 15 1.48905E-01 3.89420E+00 6.80010E+00 1.63687E+01 Total Time 0.560E-01 exp ... done ***Restart the solution family*** Starting exp ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) 1 100 EP 16 9.52916E-05 8.40578E+00 1.56186E+01 3.40101E+01 Total Time 0.625E-01 exp ... done Saving to b.exp, s.exp, and d.exp ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo exp is done Doing ext Version 07p Copying demo ext ... done Demo ext is started Demo ext is started ext : first run : detect bifurcations from the trivial solution gfortran -fopenmp -O -c ext.f90 -o ext.o gfortran -fopenmp -O ext.o -o ext.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ext ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 7 BP 2 9.99969E-01 0.00000E+00 0.00000E+00 0.00000E+00 1 13 BP 3 2.00102E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 19 BP 4 3.00746E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 25 BP 5 4.02998E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 BP 6 5.08716E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 7 6.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.156E-01 ext ... done ext : second run : compute a bifurcating branch Starting ext ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 2 123 UZ 8 6.00000E+00 9.72195E+00 1.02507E+00 1.87822E+01 Total Time 0.357E-01 ext ... done Saving to b.ext, s.ext, and d.ext ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ext is done Doing ezp Version 07p Copying demo ezp ... done Demo ezp is started ***Compute a solution family*** gfortran -fopenmp -O -c ezp.f90 -o ezp.o gfortran -fopenmp -O ezp.o -o ezp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ezp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 12 UZ 2 2.00000E+00 7.88670E-01 3.28950E-01 0.00000E+00 1.24822E+00 0.00000E+00 1 20 BP 3 3.51383E+00 2.78191E+00 1.18642E+00 0.00000E+00 3.99996E+00 0.00000E+00 1 29 UZ 4 2.00000E+00 6.57685E+00 2.89402E+00 0.00000E+00 8.26877E+00 0.00000E+00 1 50 EP 5 9.97519E-03 2.20516E+01 1.01994E+01 0.00000E+00 2.31756E+01 0.00000E+00 Total Time 0.356E-01 ezp ... done ***Compute one leg of the bifurcating family*** Starting ezp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 2 30 UZ 6 4.99997E+00 3.15533E+00 9.12656E-01 -3.08373E-26 3.53421E+00 2.91601E+00 2 38 UZ 7 5.99992E+00 3.36416E+00 7.68137E-01 4.85778E-25 3.29792E+00 3.64279E+00 Total Time 0.312E-01 ezp ... done ***Compute the other leg of the bifurcating family*** Starting ezp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 3 30 UZ 8 4.99997E+00 3.15533E+00 9.12656E-01 9.74535E-01 3.53421E+00 2.91601E+00 3 38 UZ 9 5.99992E+00 3.36416E+00 7.68137E-01 1.18970E+00 3.29792E+00 3.64279E+00 Total Time 0.181E+00 ezp ... done Saving to b.ezp, s.ezp, and d.ezp ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ezp is done Doing ffn Version 07p Copying demo ffn ... done Demo ffn is started ***Periodically forced FitzHugh-Nagumo equations*** ***Homotopy in the coupling constant *** gfortran -fopenmp -O -c ffn.f90 -o ffn.o gfortran -fopenmp -O ffn.o -o ffn.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ffn ... BR PT TY LAB PAR(4) L2-NORM U(1) MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.00000E+00 1.00000E+00 6.28319E-01 1 5 UZ 2 1.00000E-01 2.05084E-02 2.90000E-02 9.65878E-04 9.99925E-01 1.00000E+00 6.28319E-01 Total Time 0.160E-01 ffn ... done Saving to b.1, s.1, and d.1 ... done ***Continue with varying FHN parameter 'a'*** Starting ffn ... BR PT TY LAB PAR(1) L2-NORM U(1) MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 34 UZ 3 2.50000E-01 7.30307E-01 7.60002E-01 -5.98998E-01 9.99895E-01 1.00000E+00 6.28319E-01 1 44 TR 4 4.22945E-01 9.54521E-01 9.84560E-01 -6.63160E-01 9.99928E-01 1.00000E+00 6.28319E-01 1 48 UZ 5 5.00000E-01 1.03234E+00 1.06242E+00 -6.64140E-01 9.99923E-01 1.00000E+00 6.28319E-01 1 70 UZ 6 1.00000E+00 1.39322E+00 1.42219E+00 -4.90358E-01 9.99999E-01 1.00000E+00 6.28319E-01 Total Time 0.103E+00 ffn ... done ***Relabel and save the solution files*** Relabeling done Saving to b.2, s.2, and d.2 ... done ***Increase the coupling constant *** Starting ffn ... BR PT TY LAB PAR(4) L2-NORM U(1) MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 10 3 2.48616E+00 5.15176E-01 7.28502E-01 2.42705E-02 9.99760E-01 9.99992E-01 6.28319E-01 1 15 TR 4 4.52337E+00 9.54521E-01 1.35069E+00 4.49516E-02 9.99945E-01 9.99643E-01 6.28319E-01 1 20 5 6.96394E+00 1.47530E+00 2.08289E+00 6.95204E-02 9.99720E-01 9.99981E-01 6.28319E-01 1 27 UZ 6 1.00000E+01 1.99415E+00 2.79471E+00 9.42447E-02 9.99945E-01 1.00000E+00 6.28319E-01 Total Time 0.592E-01 ffn ... done ***Relabel and save the solution files*** Relabeling done Saving to b.3, s.3, and d.3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ffn is done Doing fhh Version 07p Copying demo fhh ... done Demo fhh is started ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done fhn : first run : homotopy in PAR(11) and PAR(17) gfortran -fopenmp -O -c fhn.f90 -o fhn.o gfortran -fopenmp -O fhn.o -o fhn.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(17) 1 1 EP 1 1.00000E-01 1.03003E-05 9.14711E-06 5.36002E-06 1.85833E-07 4.52787E-06 1 10 2 8.35625E+00 4.27117E-04 1.15279E-03 6.74490E-04 2.34377E-05 5.70145E-04 1 20 3 2.83501E+01 2.40993E-01 5.43662E-01 1.04926E-01 4.65792E-02 1.76046E-03 1 21 UZ 4 2.91921E+01 2.38053E-01 5.43621E-01 1.04935E-01 4.65790E-02 2.38037E-11 1 30 5 3.40500E+01 6.12881E-01 5.43656E-01 1.04697E-01 4.65768E-02 -4.51052E+00 1 40 6 3.42540E+01 1.46028E+00 5.43363E-01 1.04942E-01 4.65670E-02 -1.61389E+01 1 50 EP 7 3.43291E+01 2.63301E+00 5.43668E-01 1.04647E-01 4.65633E-02 -3.59993E+01 Total Time 0.158E+00 fhn ... done Saving to b.1, s.1, and d.1 ... done fhn : second run : homotopy in PAR(11) and PAR(2) Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 50 8 5.40582E+01 1.71225E-01 4.93249E-01 9.38435E-02 4.25509E-02 1.79286E-01 1 100 9 1.00397E+02 1.27551E-01 4.93201E-01 9.38421E-02 4.25533E-02 1.79286E-01 1 150 10 1.86185E+02 9.36709E-02 4.93011E-01 9.38400E-02 4.25509E-02 1.79286E-01 1 189 UZ 11 3.00000E+02 7.37931E-02 4.93066E-01 9.37541E-02 4.25536E-02 1.79286E-01 1 200 EP 12 3.50673E+02 6.82536E-02 4.93248E-01 9.37439E-02 4.25506E-02 1.79286E-01 Total Time 0.461E+00 fhn ... done Saving to b.2, s.2, and d.2 ... done fhn : third run : continue homoclinic orbit in PAR(11) Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 50 13 7.07922E+02 4.80379E-02 4.93119E-01 9.37797E-02 4.25550E-02 1.79286E-01 1 80 UZ 14 1.00000E+03 4.04182E-02 4.93230E-01 9.37914E-02 4.25549E-02 1.79286E-01 1 100 EP 15 1.20000E+03 3.68966E-02 4.92905E-01 9.38150E-02 4.25548E-02 1.79286E-01 Total Time 0.258E+00 fhn ... done Saving to b.3, s.3, and d.3 ... done fhn : fourth run : continue in PAR(2) and PAR(1) Starting fhn ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(22) 1 6 UZ 16 1.31812E-01 3.28710E-02 3.90923E-01 7.08856E-02 3.35270E-02 2.17166E-01 -6.31273E-06 1 10 UZ 17 9.99910E-02 2.83740E-02 3.27813E-01 5.67803E-02 2.80253E-02 2.25021E-01 -2.68995E-02 1 16 UZ 18 5.00000E-02 2.17850E-02 2.34093E-01 3.67364E-02 1.99387E-02 2.43501E-01 -6.63459E-02 1 20 UZ 19 2.00000E-02 1.80021E-02 1.80197E-01 2.60691E-02 1.53261E-02 2.59853E-01 -8.71390E-02 1 23 UZ 20 -8.54660E-08 1.56158E-02 1.44996E-01 1.95816E-02 1.23277E-02 2.74218E-01 -9.88772E-02 1 25 UZ 21 -1.00067E-02 1.47343E-02 1.27443E-01 1.65511E-02 1.08533E-02 2.82886E-01 -1.03786E-01 1 28 LP 22 -1.46682E-02 1.53871E-02 1.19162E-01 1.51597E-02 1.01619E-02 2.87352E-01 -1.05783E-01 1 32 UZ 23 -1.00010E-02 1.74693E-02 1.27439E-01 1.65501E-02 1.08543E-02 2.82881E-01 -1.03783E-01 1 36 UZ 24 -1.37207E-06 2.00144E-02 1.44899E-01 1.95137E-02 1.23310E-02 2.74219E-01 -9.88779E-02 1 40 UZ 25 2.00006E-02 2.44620E-02 1.80187E-01 2.60783E-02 1.53227E-02 2.59852E-01 -8.71386E-02 1 45 UZ 26 5.00008E-02 3.04906E-02 2.34105E-01 3.67311E-02 1.99385E-02 2.43501E-01 -6.63453E-02 1 57 UZ 27 1.00000E-01 4.01177E-02 3.27834E-01 5.67891E-02 2.80203E-02 2.25018E-01 -2.68916E-02 1 147 MX 28 1.26493E-01 4.53906E-02 3.80174E-01 6.84633E-02 3.25846E-02 2.18302E-01 -4.56872E-03 Total Time 0.525E+00 fhn ... done Saving to b.4, s.4, and d.4 ... done fhn : fifth run : continue in reverse direction Starting fhn ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(22) 1 8 UZ 29 2.00000E-01 4.42646E-02 5.42739E-01 1.04652E-01 4.69847E-02 2.08698E-01 6.00003E-02 1 36 UZ 30 2.00000E-01 1.24778E-01 9.32092E-01 1.66687E-01 1.05072E-01 3.85434E-01 5.46656E-02 1 57 UZ 31 1.07652E-01 1.72711E-01 9.55253E-01 1.70646E-01 1.33163E-01 5.32126E-01 -3.42075E-09 1 59 UZ 32 9.99960E-02 1.76561E-01 9.56559E-01 1.70705E-01 1.35394E-01 5.43786E-01 -2.98874E-03 1 71 UZ 33 5.00000E-02 2.01562E-01 9.63358E-01 1.71846E-01 1.49619E-01 6.18925E-01 -1.67500E-02 1 79 UZ 34 1.99997E-02 2.16549E-01 9.66577E-01 1.72200E-01 1.57894E-01 6.63387E-01 -2.02282E-02 1 85 UZ 35 -7.38045E-04 2.27307E-01 9.68656E-01 1.72229E-01 1.63506E-01 6.93921E-01 -2.05410E-02 1 115 MX 36 -1.92523E-03 2.29411E-01 9.68078E-01 1.72689E-01 1.63824E-01 6.95667E-01 -2.05071E-02 Total Time 0.578E+00 fhn ... done Appending fort.7 to b.4 ... done Appending fort.8 to s.4 ... done Appending fort.9 to d.4 ... done fhn : sixth run : add adjoint Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 2 EP 16 9.99998E+02 4.04182E-02 4.93230E-01 9.37914E-02 4.25549E-02 2.10000E-01 Total Time 0.273E-01 fhn ... done Saving to b.5, s.5, and d.5 ... done fhn : seventh run : compute inclination flip Starting fhn ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(33) 1 20 17 2.32375E-01 5.17153E-02 6.31361E-01 1.22953E-01 5.50968E-02 2.10040E-01 -4.06211E+10 1 29 UZ 18 2.40314E-01 5.40696E-02 6.57353E-01 1.27840E-01 5.74918E-02 2.11443E-01 5.40007E+01 1 40 19 2.48787E-01 5.69999E-02 6.88031E-01 1.33454E-01 6.03987E-02 2.13850E-01 6.43695E+09 1 60 20 2.64919E-01 6.62786E-02 7.70330E-01 1.46640E-01 6.86908E-02 2.25876E-01 1.23232E+09 1 80 21 2.23350E-01 1.11585E-01 9.21281E-01 1.64769E-01 9.73735E-02 3.44903E-01 2.31034E+07 1 100 EP 22 1.29237E-01 1.61773E-01 9.51405E-01 1.69847E-01 1.26775E-01 4.98966E-01 1.15327E+10 Total Time 0.765E+00 fhn ... done Saving to b.6, s.6, and d.6 ... done fhn : eighth run : continue inclination flip in PAR(3), PAR(1), PAR(2) Starting fhn ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(2) PAR(22) 1 10 23 3.89970E-03 5.43127E-02 6.49605E-01 1.25856E-01 7.09799E-02 2.60413E-01 2.00634E-01 3.42725E-02 1 20 24 4.92676E-03 5.54129E-02 6.54053E-01 1.26301E-01 8.04918E-02 2.91371E-01 1.78560E-01 6.55454E-04 1 30 25 4.96325E-03 5.56567E-02 6.56350E-01 1.26840E-01 8.10999E-02 2.92666E-01 1.78296E-01 5.40617E-07 1 32 UZ 26 4.96358E-03 5.56734E-02 6.56349E-01 1.26771E-01 8.11154E-02 2.92681E-01 1.78299E-01 6.16157E-09 Total Time 0.498E+00 fhn ... done Saving to b.7, s.7, and d.7 ... done fhn : ninth run : continue in reverse direction Starting fhn ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(2) PAR(22) 1 10 27 3.32602E-03 5.41379E-02 6.51725E-01 1.26434E-01 6.57605E-02 2.41697E-01 2.15544E-01 5.71084E-02 1 20 28 1.46452E-03 5.41988E-02 6.68592E-01 1.30413E-01 4.47920E-02 1.64358E-01 2.79838E-01 1.60821E-01 1 30 29 1.11899E-05 5.59939E-02 7.14126E-01 1.40517E-01 4.26621E-03 1.52114E-02 4.10626E-01 3.97581E-01 1 32 UZ 30 1.30776E-14 5.62922E-02 7.19425E-01 1.41650E-01 5.05111E-18 -5.23384E-07 4.24466E-01 4.24466E-01 1 35 MX 31 1.34988E-05 7.20981E-02 7.25833E-01 1.43074E-01 4.52354E-13 -1.69416E-02 4.40035E-01 4.55057E-01 Total Time 0.568E+00 fhn ... done Appending fort.7 to b.7 ... done Appending fort.8 to s.7 ... done Appending fort.9 to d.7 ... done fhn : tenth run : continue Belyakov point in PAR(3), PAR(1) and PAR(2) Starting fhn ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(2) 1 20 37 8.71369E-07 1.30574E-03 6.27813E-03 1.72111E-04 9.91521E-06 2.70256E-02 2.54294E-03 1 37 MX 38 7.48859E-11 1.17753E-04 3.15588E-04 2.59992E-06 1.90563E-08 2.52161E-04 8.54454E-05 Total Time 0.159E+00 fhn ... done Saving to b.8, s.8, and d.8 ... done fhn : eleventh run : continue in reverse direction Starting fhn ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(2) 1 20 39 3.85930E-03 4.35369E-02 5.24418E-01 1.00985E-01 5.63909E-02 2.54998E-01 1.60977E-01 1 40 40 2.42772E-03 1.76230E-01 9.56688E-01 1.70493E-01 1.33426E-01 5.35498E-01 1.05905E-01 1 60 41 1.10423E-03 2.88470E-01 9.81345E-01 1.73984E-01 1.38533E-01 6.01039E-01 6.92773E-02 1 75 EP 42 7.80239E-04 3.52290E-01 9.86756E-01 1.75215E-01 1.40039E-01 6.19998E-01 5.77659E-02 Total Time 0.537E+00 fhn ... done Appending fort.7 to b.8 ... done Appending fort.8 to s.8 ... done Appending fort.9 to d.8 ... done Demo fhh is done Doing fhn Version 07p Copying demo fhn ... done Demo fhn is started ***Stationary solutions*** gfortran -fopenmp -O -c fhn.f90 -o fhn.o gfortran -fopenmp -O fhn.o -o fhn.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting fhn ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 HB 2 4.22772E-01 1.16308E+00 9.54473E-01 -6.64625E-01 1 45 UZ 3 1.00000E+00 1.47754E+00 1.39334E+00 -4.91668E-01 Total Time 0.201E-01 fhn ... done ***Periodic solutions*** Starting fhn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 20 4 4.30518E-01 1.03023E+00 1.79928E+00 4.51988E-01 1.50691E+01 2 40 5 4.23466E-01 1.39157E+00 1.97196E+00 9.70223E-01 1.25781E+01 2 60 6 1.78438E-01 1.48712E+00 1.92848E+00 9.03889E-01 9.78885E+00 2 70 UZ 7 -8.71842E-06 1.49339E+00 1.89087E+00 8.53564E-01 9.53833E+00 Total Time 0.151E+00 fhn ... done Saving to b.fhn, s.fhn, and d.fhn ... done ***Continue Hopf bifurcations in 2 parameters*** Starting fhn ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 144 UZ 4 4.62671E-01 1.19851E+00 9.95992E-01 -6.66651E-01 1.00000E+01 Total Time 0.396E-01 fhn ... done ***Continue Hopf bifurcations in 2 parameters*** Starting fhn ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 63 UZ 4 -8.63997E-07 6.10938E-06 -4.31999E-06 4.31999E-06 8.94427E-01 Total Time 0.258E-01 fhn ... done ***Relabel and save the Hopf bifurcations files*** Relabeling done Saving to b.hb, s.hb, and d.hb ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo fhn is done Doing fnb Version 07p Copying demo fnb ... done Demo fnb is started ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done gcc -g -O2 -I/cnd0/home/boldeman/auto/07p/include -O -c fhn.c -o fhn.o gfortran -L/cnd0/home/boldeman/auto/07p/lib -fopenmp -O fhn.o -o fhn.exe /cnd0/home/boldeman/auto/07p/lib/*.o -lauto_c Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(17) 1 1 EP 1 1.00000E-01 1.03003E-05 9.14711E-06 5.36002E-06 1.85833E-07 4.52787E-06 1 10 2 8.35625E+00 4.27117E-04 1.15279E-03 6.74490E-04 2.34377E-05 5.70145E-04 1 20 3 2.83501E+01 2.40993E-01 5.43659E-01 1.04938E-01 4.65795E-02 1.76045E-03 1 21 UZ 4 2.91921E+01 2.38053E-01 5.43668E-01 1.04880E-01 4.65783E-02 2.37628E-11 1 30 5 3.40541E+01 6.12684E-01 5.43268E-01 1.04941E-01 4.65760E-02 -4.50863E+00 1 40 6 3.42665E+01 1.45988E+00 5.41524E-01 1.04934E-01 4.65563E-02 -1.61369E+01 1 50 EP 7 3.43542E+01 2.63193E+00 5.43477E-01 1.04067E-01 4.65761E-02 -3.59973E+01 Total Time 0.187E+00 fhn ... done Saving to b.1, s.1, and d.1 ... done Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 50 8 5.40583E+01 1.71225E-01 4.92521E-01 9.38275E-02 4.25528E-02 1.79286E-01 1 100 9 1.00151E+02 1.27707E-01 4.92651E-01 9.38426E-02 4.25550E-02 1.79286E-01 1 150 10 1.85939E+02 9.37328E-02 4.93272E-01 9.35985E-02 4.25429E-02 1.79286E-01 1 189 UZ 11 3.00000E+02 7.37932E-02 4.93160E-01 9.38357E-02 4.25549E-02 1.79286E-01 1 200 EP 12 3.50673E+02 6.82536E-02 4.92865E-01 9.38394E-02 4.25458E-02 1.79286E-01 Total Time 0.474E+00 fhn ... done Saving to b.2, s.2, and d.2 ... done Starting fhn ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 50 13 7.07922E+02 4.80380E-02 4.93220E-01 9.35267E-02 4.25460E-02 1.79286E-01 1 80 UZ 14 1.00000E+03 4.04183E-02 4.92618E-01 9.38427E-02 4.25444E-02 1.79286E-01 1 100 EP 15 1.20000E+03 3.68967E-02 4.92664E-01 9.38157E-02 4.25536E-02 1.79286E-01 Total Time 0.244E+00 fhn ... done Saving to b.3, s.3, and d.3 ... done Starting fhn ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(22) 1 6 UZ 16 1.31812E-01 3.28710E-02 3.90966E-01 7.08680E-02 3.35290E-02 2.17166E-01 -6.31233E-06 1 10 UZ 17 9.99910E-02 2.83740E-02 3.27814E-01 5.67806E-02 2.80238E-02 2.25021E-01 -2.68995E-02 1 16 UZ 18 5.00000E-02 2.17850E-02 2.34113E-01 3.67232E-02 1.99383E-02 2.43501E-01 -6.63459E-02 1 20 UZ 19 2.00000E-02 1.80021E-02 1.80136E-01 2.60775E-02 1.53240E-02 2.59853E-01 -8.71390E-02 1 23 UZ 20 -8.55040E-08 1.56158E-02 1.45016E-01 1.95960E-02 1.23277E-02 2.74218E-01 -9.88772E-02 1 25 UZ 21 -1.00067E-02 1.47344E-02 1.27553E-01 1.65235E-02 1.08501E-02 2.82886E-01 -1.03786E-01 1 28 LP 22 -1.46683E-02 1.53870E-02 1.19388E-01 1.51343E-02 1.01622E-02 2.87352E-01 -1.05783E-01 1 32 UZ 23 -1.00010E-02 1.74693E-02 1.27603E-01 1.64955E-02 1.08425E-02 2.82881E-01 -1.03783E-01 1 36 UZ 24 -1.37309E-06 2.00144E-02 1.45009E-01 1.95817E-02 1.23206E-02 2.74219E-01 -9.88779E-02 1 40 UZ 25 2.00006E-02 2.44620E-02 1.80187E-01 2.60553E-02 1.53220E-02 2.59852E-01 -8.71386E-02 1 45 UZ 26 5.00008E-02 3.04906E-02 2.33842E-01 3.67269E-02 1.99382E-02 2.43501E-01 -6.63453E-02 1 57 UZ 27 1.00000E-01 4.01177E-02 3.27781E-01 5.66559E-02 2.80246E-02 2.25018E-01 -2.68916E-02 1 153 MX 28 1.26612E-01 4.54149E-02 3.80410E-01 6.84046E-02 3.26048E-02 2.18276E-01 -4.46705E-03 Total Time 0.576E+00 fhn ... done Saving to b.4, s.4, and d.4 ... done Starting fhn ... BR PT TY LAB PAR(9) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(3) 1 2 EP 29 -1.00000E+00 1.56158E-02 1.44927E-01 1.95780E-02 1.23293E-02 2.50000E-03 Total Time 0.338E-01 fhn ... done Saving to b.5, s.5, and d.5 ... done Starting fhn ... BR PT TY LAB PAR(21) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(22) 1 99 UZ 30 5.20502E+02 3.37211E-02 1.45011E-01 1.95925E-02 7.95218E-03 2.74218E-01 5.83833E-17 1 102 UZ 31 5.06020E+02 3.37211E-02 1.45014E-01 1.95934E-02 7.95218E-03 2.74218E-01 -2.47348E-17 1 107 UZ 32 4.83373E+02 3.37211E-02 1.45016E-01 1.95917E-02 7.95218E-03 2.74218E-01 7.07884E-18 1 111 UZ 33 4.64949E+02 3.37211E-02 1.45016E-01 1.95954E-02 7.95218E-03 2.74218E-01 -7.10426E-17 1 116 UZ 34 4.44275E+02 3.37211E-02 1.45012E-01 1.95955E-02 7.95218E-03 2.74218E-01 7.36238E-16 1 120 UZ 35 4.24641E+02 3.37211E-02 1.45010E-01 1.95910E-02 7.95218E-03 2.74218E-01 -5.62902E-17 1 125 UZ 36 4.04510E+02 3.37211E-02 1.45015E-01 1.95888E-02 7.95218E-03 2.74218E-01 2.16316E-17 1 129 UZ 37 3.84610E+02 3.37211E-02 1.45016E-01 1.95946E-02 7.95218E-03 2.74218E-01 -1.71444E-17 1 134 UZ 38 3.64596E+02 3.37211E-02 1.45013E-01 1.95952E-02 7.95218E-03 2.74218E-01 3.08728E-17 1 138 UZ 39 3.44632E+02 3.37211E-02 1.45006E-01 1.95956E-02 7.95218E-03 2.74218E-01 -1.55662E-17 1 142 UZ 40 3.24643E+02 3.37211E-02 1.45015E-01 1.95910E-02 7.95218E-03 2.74218E-01 -1.52848E-14 1 146 UZ 41 3.04666E+02 3.37211E-02 1.45016E-01 1.95935E-02 7.95218E-03 2.74218E-01 1.42990E-13 1 150 UZ 42 2.84683E+02 3.37211E-02 1.45016E-01 1.95871E-02 7.95218E-03 2.74218E-01 -1.67509E-13 1 154 UZ 43 2.64702E+02 3.37211E-02 1.45016E-01 1.95953E-02 7.95218E-03 2.74218E-01 4.42561E-13 1 158 UZ 44 2.44720E+02 3.37211E-02 1.45016E-01 1.95903E-02 7.95218E-03 2.74218E-01 -8.74958E-13 1 162 UZ 45 2.24738E+02 3.37211E-02 1.45015E-01 1.95894E-02 7.95218E-03 2.74218E-01 1.79918E-12 1 166 UZ 46 2.04757E+02 3.37211E-02 1.45009E-01 1.95957E-02 7.95218E-03 2.74218E-01 -4.25171E-12 1 170 UZ 47 1.84773E+02 3.37211E-02 1.44999E-01 1.95904E-02 7.95218E-03 2.74218E-01 6.78112E-12 1 174 UZ 48 1.64796E+02 3.37211E-02 1.45007E-01 1.95952E-02 7.95218E-03 2.74218E-01 -2.47413E-11 1 178 UZ 49 1.44805E+02 3.37211E-02 1.45012E-01 1.95951E-02 7.95218E-03 2.74218E-01 1.09824E-11 1 182 UZ 50 1.24840E+02 3.37211E-02 1.45016E-01 1.95918E-02 7.95218E-03 2.74218E-01 3.01032E-16 1 187 UZ 51 1.04815E+02 3.37211E-02 1.45012E-01 1.95960E-02 7.95218E-03 2.74218E-01 1.02272E-10 1 191 UZ 52 8.48854E+01 3.37211E-02 1.44982E-01 1.95956E-02 7.95218E-03 2.74218E-01 8.00738E-15 1 196 UZ 53 6.46174E+01 3.37211E-02 1.44985E-01 1.95936E-02 7.95218E-03 2.74218E-01 -3.13587E-10 1 199 MX 54 5.71174E+01 3.37211E-02 1.45014E-01 1.95909E-02 7.95218E-03 2.74218E-01 3.78196E-03 Total Time 0.311E+01 fhn ... done Saving to b.6, s.6, and d.6 ... done Starting fhn ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 5 LP 55 -1.41665E-02 2.23335E-02 1.46381E-01 1.92655E-02 1.36572E-02 2.86857E-01 1 20 UZ 56 -9.99974E-03 2.25262E-02 1.39727E-01 1.84351E-02 1.24021E-02 2.82880E-01 1 28 UZ 57 7.79827E-06 2.43655E-02 1.48459E-01 2.00743E-02 1.27696E-02 2.74212E-01 1 39 UZ 58 2.00025E-02 2.89156E-02 1.80495E-01 2.60622E-02 1.53634E-02 2.59851E-01 1 40 59 2.09782E-02 2.91387E-02 1.82119E-01 2.64278E-02 1.55138E-02 2.59233E-01 1 60 60 3.34258E-02 3.19594E-02 2.04064E-01 3.06143E-02 1.73740E-02 2.51897E-01 1 80 61 4.04089E-02 3.35223E-02 2.16706E-01 3.32205E-02 1.84443E-02 2.48186E-01 1 100 EP 62 4.49441E-02 3.45313E-02 2.24916E-01 3.48836E-02 1.91480E-02 2.45915E-01 Total Time 0.447E+00 fhn ... done Saving to b.7, s.7, and d.7 ... done Demo fnb is done Doing fnc Version 07p Copying demo fnc ... done Demo fnc is started Demo fnc is started Demo attr is started attr : first run : Homotopy away from the folded node along the fold curve gfortran -fopenmp -O -c attr.f90 -o attr.o gfortran -fopenmp -O attr.o -o attr.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting attr ... BR PT TY LAB Ta L2-NORM MAX v MAX h MAX s va0 sa0 ha0 1 1 EP 1 0.00000E+00 8.36518E-01 -4.90000E-01 6.17600E-01 2.79700E-01 -4.90000E-01 2.79700E-01 6.17600E-01 1 85 UZ 2 9.00545E+01 8.63616E-01 -3.65148E-01 6.17977E-01 6.00000E-01 -3.65148E-01 6.00000E-01 5.48686E-01 Total Time 0.217E+00 attr ... done attr : second run : Homotopy away from the fold curve on the critical manifold Starting attr ... BR PT TY LAB va0 L2-NORM MAX v MAX h MAX s ha0 Ta 1 78 UZ 3 -2.40803E+00 2.45567E+00 -3.76965E-01 6.28384E-01 6.00000E-01 -6.00000E+00 9.00545E+01 Total Time 0.197E+00 attr ... done attr : third run: Actual computation of the attracting slow manifold Runner configured Starting attr ... BR PT TY LAB Ta L2-NORM MAX v MAX h va0 sa0 va1 ha1 1 58 UZ 4 9.84321E+01 2.36456E+00 -3.84004E-01 6.22176E-01 -2.40177E+00 6.44149E-01 -5.65810E-01 6.07500E-01 1 93 UZ 5 1.10047E+02 2.25916E+00 -3.92418E-01 6.26500E-01 -2.39233E+00 7.10782E-01 -4.84264E-01 6.26500E-01 1 115 UZ 6 1.20817E+02 2.17591E+00 -3.98953E-01 6.18447E-01 -2.38270E+00 7.78710E-01 -4.59231E-01 6.12300E-01 Total Time 0.274E+00 attr ... done Starting attr ... BR PT TY LAB Ta L2-NORM MAX v MAX h va0 sa0 va1 ha1 1 30 UZ 4 8.57971E+01 2.50858E+00 -3.73111E-01 6.31403E-01 -2.41104E+00 5.78737E-01 -3.73111E-01 6.09102E-01 1 78 UZ 5 7.18531E+01 2.71283E+00 -5.91709E-01 6.31400E-01 -2.42018E+00 5.14231E-01 -5.91709E-01 6.31400E-01 1 91 UZ 6 5.63127E+01 3.01591E+00 -9.50985E-01 4.35500E-01 -2.42917E+00 4.50775E-01 -9.50985E-01 4.35500E-01 Total Time 0.235E+00 attr ... done Merge done Saving to b.attr, s.attr, and d.attr ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Parsed output data Demo rep is started rep : first run : Homotopy away from the folded node along the fold curve gfortran -fopenmp -O -c rep.f90 -o rep.o gfortran -fopenmp -O rep.o -o rep.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting rep ... BR PT TY LAB Tr L2-NORM MAX v MAX h MAX s vr1 sr1 1 1 EP 1 0.00000E+00 8.36518E-01 -4.90000E-01 6.17600E-01 2.79700E-01 -4.90000E-01 2.79700E-01 1 137 UZ 2 2.03150E+02 8.44036E-01 -4.87456E-01 6.78503E-01 2.79700E-01 -5.62731E-01 5.00000E-02 Total Time 0.286E+00 rep ... done rep : second run : Homotopy away from the fold curve on the critical manifold Starting rep ... BR PT TY LAB vr1 L2-NORM MAX v MAX h MAX s Tr 1 18 UZ 3 -5.82092E-08 8.30291E-01 -5.82092E-08 6.94574E-01 2.79700E-01 2.03150E+02 Total Time 0.622E-01 rep ... done rep : third run: Actual computation of the repelling slow manifold Runner configured Starting rep ... BR PT TY LAB Tr L2-NORM MAX v MAX h MAX s sr1 vr0 hr0 1 17 UZ 4 2.18628E+02 8.30330E-01 -5.82092E-08 6.96194E-01 2.79700E-01 4.38531E-02 -4.84605E-01 6.26500E-01 1 39 UZ 5 2.40271E+02 8.33639E-01 -5.82092E-08 6.98137E-01 2.79700E-01 3.65039E-02 -4.59248E-01 6.12303E-01 Total Time 0.131E+00 rep ... done Starting rep ... BR PT TY LAB Tr L2-NORM MAX v MAX h MAX s sr1 vr0 hr0 1 7 UZ 4 1.97983E+02 8.29509E-01 -5.82092E-08 6.93982E-01 2.79700E-01 5.22379E-02 -5.65763E-01 6.07504E-01 1 27 UZ 5 1.78598E+02 8.25355E-01 -5.82092E-08 6.91580E-01 2.79700E-01 6.15651E-02 -3.73050E-01 6.09099E-01 1 43 UZ 6 1.60621E+02 8.21746E-01 -5.82092E-08 6.89002E-01 2.79700E-01 7.16975E-02 -5.91712E-01 6.31401E-01 1 66 UZ 7 1.44101E+02 8.38117E-01 -5.82092E-08 6.86319E-01 2.79700E-01 8.24724E-02 -9.50917E-01 4.35548E-01 Total Time 0.258E+00 rep ... done Merge done Saving to b.rep, s.rep, and d.rep ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Parsed output data Relabeling done Saving to b.attrrep, s.attrrep, and d.attrrep ... done calculating orbit for xi3 gfortran -fopenmp -O -c fnc.f90 -o fnc.o gfortran -fopenmp -O fnc.o -o fnc.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 92 UZ 2 1.00000E-04 2.33626E+00 0.00000E+00 6.20470E-01 5.43254E-01 -2.41607E+00 2.33481E-01 1.49465E+04 1 210 UZ 3 9.99986E-07 2.42117E+00 0.00000E+00 6.18071E-01 5.27532E-01 -2.41830E+00 2.42318E-01 1.37694E+06 Total Time 0.222E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 91 UZ 2 5.00000E-02 2.19405E+00 1.59199E+00 1.43799E+00 -1.25067E-01 -2.99660E+00 -1.25067E-01 1.19337E+02 1 123 LP 3 5.24827E-02 2.80480E+00 1.70039E+00 1.82874E+00 -1.40875E-01 -3.28256E+00 -1.40875E-01 1.25462E+02 1 170 UZ 4 5.00000E-02 2.99492E+00 1.45488E+00 1.96997E+00 -1.25067E-01 -3.39108E+00 -1.25067E-01 1.40740E+02 1 193 LP 5 4.73373E-02 2.95135E+00 1.07360E+00 1.98425E+00 -1.08063E-01 -3.40288E+00 -1.08063E-01 1.54641E+02 1 221 UZ 6 5.00000E-02 2.97717E+00 1.14027E+00 1.97004E+00 -1.25067E-01 -3.39114E+00 -1.25067E-01 1.40742E+02 1 281 LP 7 5.90408E-02 3.26782E+00 1.31998E+00 2.04102E+00 -1.82601E-01 -3.44372E+00 -1.82601E-01 1.09668E+02 1 305 LP 8 5.52685E-02 3.67882E+00 8.18355E-01 2.29020E+00 -1.58591E-01 -3.64339E+00 -1.58591E-01 1.28270E+02 1 320 UZ 9 6.00000E-02 3.58992E+00 8.81080E-01 2.20703E+00 -1.88720E-01 -3.57506E+00 -1.88720E-01 1.11058E+02 1 322 UZ 10 6.10000E-02 3.57581E+00 8.90865E-01 2.19187E+00 -1.95107E-01 -3.56266E+00 -1.95107E-01 1.07909E+02 1 332 LP 11 6.39130E-02 3.67730E+00 8.02402E-01 2.22076E+00 -2.13805E-01 -3.58514E+00 -2.13805E-01 1.01081E+02 1 339 LP 12 6.37615E-02 3.78246E+00 6.12993E-01 2.27438E+00 -2.12960E-01 -3.62853E+00 -2.12960E-01 1.02609E+02 1 347 LP 13 6.54118E-02 3.81133E+00 2.92344E-29 2.26442E+00 -2.36149E-01 -3.62005E+00 -2.36149E-01 9.70021E+01 1 358 UZ 14 6.30000E-02 4.16425E+00 0.00000E+00 2.39590E+00 -2.70376E-01 -3.72824E+00 -2.70376E-01 9.97337E+01 1 365 UZ 15 6.10000E-02 4.48300E+00 0.00000E+00 2.52579E+00 -2.84564E-01 -3.83695E+00 -2.84564E-01 1.04229E+02 1 368 UZ 16 6.00000E-02 4.70415E+00 0.00000E+00 2.61663E+00 -2.90409E-01 -3.91402E+00 -2.90409E-01 1.07203E+02 1 371 EP 17 5.89699E-02 5.04291E+00 0.00000E+00 2.75485E+00 -2.95619E-01 -4.03285E+00 -2.95619E-01 1.11260E+02 Total Time 0.449E+01 fnc ... done Merge done Saving to b.xi3, s.xi3, and d.xi3 ... done Appending to b.xis, s.xis and d.xis ... done calculating orbit for xi4 Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 99 UZ 2 1.00000E-04 2.30866E+00 0.00000E+00 6.21189E-01 5.49463E-01 -2.41519E+00 2.30643E-01 1.53641E+04 1 232 UZ 3 9.99984E-07 2.41783E+00 0.00000E+00 6.18148E-01 5.28161E-01 -2.41821E+00 2.42010E-01 1.38130E+06 Total Time 0.266E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 154 LP 2 4.36717E-02 2.72030E+00 1.77461E+00 1.86738E+00 -8.45102E-02 -3.31456E+00 -8.45102E-02 1.73187E+02 1 260 LP 3 4.02512E-02 2.85865E+00 1.14680E+00 2.02232E+00 -6.23179E-02 -3.43441E+00 -6.23179E-02 2.07671E+02 1 536 LP 4 4.79850E-02 3.24839E+00 1.46732E+00 2.12507E+00 -1.12205E-01 -3.51281E+00 -1.12205E-01 1.55679E+02 1 808 UZ 5 5.00000E-02 3.83739E+00 1.13504E+00 2.41242E+00 -1.25067E-01 -3.74481E+00 -1.25067E-01 1.53475E+02 1 840 LP 6 5.13190E-02 4.08943E+00 1.13160E+00 2.52011E+00 -1.33469E-01 -3.83421E+00 -1.33469E-01 1.49923E+02 1 897 EP 7 5.09678E-02 5.00181E+00 1.08346E+00 2.93436E+00 -1.31233E-01 -4.19122E+00 -1.31233E-01 1.60811E+02 Total Time 0.908E+01 fnc ... done Merge done Saving to b.xi4, s.xi4, and d.xi4 ... done Appending to b.xis, s.xis and d.xis ... done calculating orbit for xi5 Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 93 UZ 2 1.00000E-04 2.28200E+00 0.00000E+00 6.21911E-01 5.55753E-01 -2.41430E+00 2.27799E-01 1.57851E+04 1 239 UZ 3 9.99996E-07 2.41447E+00 0.00000E+00 6.18226E-01 5.28797E-01 -2.41812E+00 2.41701E-01 1.38567E+06 Total Time 0.273E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 165 LP 2 3.84748E-02 2.62920E+00 1.81759E+00 1.89071E+00 -5.06960E-02 -3.33388E+00 -5.06960E-02 2.21220E+02 1 301 LP 3 3.63166E-02 2.76185E+00 1.18391E+00 2.04371E+00 -3.65222E-02 -3.45219E+00 -3.65222E-02 2.57188E+02 1 751 LP 4 4.12036E-02 3.18232E+00 1.55036E+00 2.17509E+00 -6.85218E-02 -3.55426E+00 -6.85218E-02 2.04335E+02 1 1028 EP 5 4.00613E-02 5.00747E+00 1.38209E+00 3.09270E+00 -6.10789E-02 -4.33397E+00 -6.10789E-02 2.42509E+02 Total Time 0.102E+02 fnc ... done Merge done Saving to b.xi5, s.xi5, and d.xi5 ... done Appending to b.xis, s.xis and d.xis ... done calculating orbit for xi6 Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 99 UZ 2 1.00000E-04 2.25616E+00 0.00000E+00 6.22640E-01 5.62155E-01 -2.41339E+00 2.24943E-01 1.62111E+04 1 253 UZ 3 9.99995E-07 2.41110E+00 0.00000E+00 6.18305E-01 5.29440E-01 -2.41803E+00 2.41388E-01 1.39012E+06 Total Time 0.274E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 176 LP 2 3.53877E-02 2.53953E+00 1.84305E+00 1.90480E+00 -3.04471E-02 -3.34561E+00 -3.04471E-02 2.66754E+02 1 336 LP 3 3.40053E-02 2.66801E+00 1.20486E+00 2.05656E+00 -2.15115E-02 -3.46276E+00 -2.15115E-02 3.02831E+02 1 844 LP 4 3.70852E-02 3.09503E+00 1.59951E+00 2.20502E+00 -4.15697E-02 -3.57925E+00 -4.15697E-02 2.52084E+02 1 1066 EP 5 3.66933E-02 5.00415E+00 1.51139E+00 3.17326E+00 -3.89946E-02 -4.40699E+00 -3.89946E-02 2.88608E+02 Total Time 0.105E+02 fnc ... done Merge done Saving to b.xi6, s.xi6, and d.xi6 ... done Appending to b.xis, s.xis and d.xis ... done calculating orbit for xi7 Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 110 UZ 2 1.00000E-04 2.23108E+00 0.00000E+00 6.23374E-01 5.68678E-01 -2.41247E+00 2.22077E-01 1.66423E+04 1 283 UZ 3 1.00000E-06 2.40770E+00 0.00000E+00 6.18385E-01 5.30092E-01 -2.41793E+00 2.41071E-01 1.39462E+06 Total Time 0.296E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 352 LP 2 3.34745E-02 2.45331E+00 1.85883E+00 1.91371E+00 -1.81202E-02 -3.35300E+00 -1.81202E-02 3.09923E+02 1 535 LP 3 3.26039E-02 2.57844E+00 1.21729E+00 2.06434E+00 -1.26010E-02 -3.46922E+00 -1.26010E-02 3.45268E+02 1 1081 LP 4 3.45636E-02 3.00130E+00 1.62941E+00 2.22327E+00 -2.51017E-02 -3.59452E+00 -2.51017E-02 2.97082E+02 1 1406 EP 5 3.43605E-02 5.00535E+00 1.55785E+00 3.25868E+00 -2.37931E-02 -4.48476E+00 -2.37931E-02 3.36064E+02 Total Time 0.137E+02 fnc ... done Merge done Saving to b.xi7, s.xi7, and d.xi7 ... done Appending to b.xis, s.xis and d.xis ... done calculating orbit for xi8 Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 111 UZ 2 1.00000E-04 2.20674E+00 0.00000E+00 6.24113E-01 5.75326E-01 -2.41153E+00 2.19204E-01 1.70785E+04 1 300 UZ 3 9.99989E-07 2.40427E+00 0.00000E+00 6.18465E-01 5.30752E-01 -2.41784E+00 2.40751E-01 1.39919E+06 Total Time 0.324E+01 fnc ... done Starting fnc ... BR PT TY LAB epsilon L2-NORM MAX v MAX h MAX s va0 sr1 Tc 1 365 LP 2 3.23039E-02 2.37224E+00 1.86844E+00 1.91930E+00 -1.07131E-02 -3.35758E+00 -1.07131E-02 3.50259E+02 1 506 LP 3 3.17728E-02 2.49586E+00 1.22456E+00 2.06900E+00 -7.40334E-03 -3.47308E+00 -7.40334E-03 3.84161E+02 1 1154 LP 4 3.29742E-02 2.90632E+00 1.64823E+00 2.23491E+00 -1.49422E-02 -3.60413E+00 -1.49422E-02 3.39753E+02 1 1551 EP 5 3.28609E-02 5.00161E+00 1.58385E+00 3.33969E+00 -1.42248E-02 -4.55893E+00 -1.42248E-02 3.81441E+02 Total Time 0.152E+02 fnc ... done Merge done Saving to b.xi8, s.xi8, and d.xi8 ... done Appending to b.xis, s.xis and d.xis ... done Relabeling succeeded Relabeling done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo fnc is done Doing frc Version 07p Copying demo frc ... done Demo frc is started Demo frc is started frc : first run : continuation to nonzero r-value gfortran -fopenmp -O -c frc.f90 -o frc.o gfortran -fopenmp -O frc.o -o frc.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting frc ... BR PT TY LAB PAR(3) L2-NORM U(1) MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 1 EP 1 0.00000E+00 5.00000E-01 5.00000E-01 0.00000E+00 1.00000E+00 1.00000E+00 6.28319E-02 1 4 UZ 2 2.00000E-01 5.00007E-01 5.03634E-01 2.03251E-03 9.99281E-01 1.00000E+00 6.28319E-02 1 10 EP 3 5.09946E+00 5.04324E-01 5.93208E-01 5.18319E-02 9.99684E-01 1.00000E+00 6.28319E-02 Total Time 0.223E-01 frc ... done Saving to b.0, s.0, and d.0 ... done frc : second run : compute solution branch Starting frc ... BR PT TY LAB PAR(5) L2-NORM U(1) MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 20 EP 4 2.46098E+01 5.00484E-01 5.31119E-01 8.64747E-03 9.99376E-01 1.00000E+00 2.55313E-01 Total Time 0.179E+00 frc ... done Saving to b.frc, s.frc, and d.frc ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo frc is done Doing fsh Version 07p Copying demo fsh ... done Demo fsh is started Demo fsh is started fsh : first run : continuation in the period T gfortran -fopenmp -O -c fsh.f90 -o fsh.o gfortran -fopenmp -O fsh.o -o fsh.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting fsh ... BR PT TY LAB PAR(11) MIN U(1) MAX U(1) MAX U(2) PAR(12) PAR(13) PAR(14) 1 1 EP 1 1.00000E-02 9.99004E-01 9.99004E-01 8.98056E-05 -9.01699E-02 9.95959E-01 -8.98056E-02 1 7 UZ 2 1.00000E+01 9.97550E-01 9.99004E-01 2.20414E-04 -9.01699E-02 9.95959E-01 -8.98056E-02 1 12 UZ 3 5.00000E+01 9.16898E-01 9.99004E-01 6.87976E-03 -9.01699E-02 9.95959E-01 -8.98056E-02 1 16 UZ 4 1.00000E+02 1.05009E-01 9.99004E-01 2.27269E-02 -9.01699E-02 9.95959E-01 -8.98056E-02 1 23 UZ 5 2.00000E+02 1.22717E-05 9.99004E-01 2.27028E-02 -9.01699E-02 9.95959E-01 -8.98056E-02 Total Time 0.310E-01 fsh ... done Saving to b.0, s.0, and d.0 ... done fsh : second run : continuation in c and T Starting fsh ... BR PT TY LAB PAR(2) MIN U(1) MAX U(1) MAX U(2) PAR(11) PAR(12) PAR(13) PAR(14) 1 19 UZ 6 1.00000E+01 1.51890E-05 9.99005E-01 2.49994E-02 1.79635E+02 -9.90195E-02 9.95133E-01 -9.85376E-02 1 43 UZ 7 5.00000E+00 4.93109E-05 9.99018E-01 4.99792E-02 8.35240E+01 -1.92582E-01 9.81956E-01 -1.89108E-01 1 52 UZ 8 3.00000E+00 4.42154E-05 9.99043E-01 8.30860E-02 4.94503E+01 -3.02776E-01 9.57092E-01 -2.89784E-01 1 56 UZ 9 2.00000E+00 8.10312E-07 9.99076E-01 1.23308E-01 3.43865E+01 -4.14214E-01 9.23880E-01 -3.82683E-01 1 59 UZ 10 1.00000E+00 -5.66244E-02 9.99149E-01 2.25343E-01 2.19081E+01 -6.18034E-01 8.50651E-01 -5.25731E-01 1 60 EP 11 5.66724E-01 -1.74247E-01 9.99202E-01 3.24055E-01 1.77568E+01 -7.56010E-01 7.97693E-01 -6.03064E-01 Total Time 0.950E-01 fsh ... done Saving to b.fsh, s.fsh, and d.fsh ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo fsh is done Doing hen Version 07p Copying demo hen ... done Demo hen is started Demo hen is started hen : first run : fixed point solution branch for beta (alpha=1) gfortran -fopenmp -O -c hen.f90 -o hen.o gfortran -fopenmp -O hen.o -o hen.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting hen ... BR PT TY LAB beta L2-NORM x y 1 1 EP 1 0.00000E+00 1.41421E+00 1.00000E+00 1.00000E+00 1 13 PD 2 6.32992E-01 1.15470E+00 8.16497E-01 8.16497E-01 1 18 TR 3 1.00000E+00 1.03528E+00 7.32051E-01 7.32051E-01 Total Time 0.119E-01 hen ... done Saving to b.beta, s.beta, and d.beta ... done hen : second run : a 2-parameter curve of Naimark-Sacker bifurcations Runner configured Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 3 17 R2 4 3.00000E+00 1.41421E+00 1.00000E+00 1.00000E+00 1.00000E+00 Total Time 0.153E-01 hen ... done Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 3 12 R3 4 1.25000E+00 7.07107E-01 5.00000E-01 5.00000E-01 1.00000E+00 3 28 R4 5 4.04990E-07 2.86371E-07 2.02495E-07 2.02495E-07 1.00000E+00 3 60 R1 6 -1.00000E+00 1.41421E+00 -1.00000E+00 -1.00000E+00 1.00000E+00 Total Time 0.214E-01 hen ... done Merge done Saving to b.hen, s.hen, and d.hen ... done hen : third run : a 2-parameter curve of Period-Doubling bifurcations Runner configured Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 2 15 R2 4 3.00000E+00 1.41421E+00 1.00000E+00 1.00000E+00 1.00000E+00 2 26 UZ 5 3.99999E+00 1.63299E+00 1.15470E+00 1.15470E+00 1.30940E+00 Total Time 0.161E-01 hen ... done Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 2 33 LPD 4 1.87148E-14 1.16791E-07 -8.25836E-08 -8.25836E-08 -1.00000E+00 2 74 UZ 5 3.00000E+00 1.41421E+00 -1.00000E+00 -1.00000E+00 -3.00000E+00 Total Time 0.251E-01 hen ... done Merge done Appending to b.hen, s.hen and d.hen ... done hen : fourth run : fixed point solution branch for alpha (beta=1) Starting hen ... BR PT TY LAB alpha L2-NORM x y 1 1 EP 1 2.00000E+00 1.41421E+00 1.00000E+00 1.00000E+00 1 18 PD 2 7.50001E-01 7.07107E-01 5.00000E-01 5.00000E-01 1 36 LP 3 -2.50000E-01 7.07093E-01 -4.99990E-01 -4.99990E-01 Total Time 0.159E-01 hen ... done Saving to b.alpha, s.alpha, and d.alpha ... done hen : fifth run : a 2-parameter curve of fold bifurcations Runner configured Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 3 24 R1 4 -1.00000E+00 1.41421E+00 -1.00000E+00 -1.00000E+00 1.00000E+00 3 39 UZ 5 -1.99993E+00 1.99996E+00 -1.41419E+00 -1.41419E+00 1.82837E+00 Total Time 0.190E-01 hen ... done Starting hen ... BR PT TY LAB alpha L2-NORM x y beta 3 30 LPD 4 -6.34813E-17 1.15089E-08 8.13804E-09 8.13804E-09 -1.00000E+00 3 71 UZ 5 -1.00004E+00 1.41424E+00 1.00002E+00 1.00002E+00 -3.00004E+00 Total Time 0.251E-01 hen ... done Merge done Appending to b.hen, s.hen and d.hen ... done Relabeling succeeded Relabeling done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo hen is done Doing int Version 07p Copying demo int ... done Demo int is started Demo int is started int : first run : detection of a fold gfortran -fopenmp -O -c int.f90 -o int.o gfortran -fopenmp -O int.o -o int.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting int ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 11 UZ 2 1.00004E+00 2.96262E-01 4.29222E-02 5.00382E-01 1 14 UZ 3 3.00000E+00 9.26129E-01 1.37743E-01 1.51077E+00 1 21 LP 4 1.19238E+01 7.16493E+00 1.29249E+00 9.14571E+00 1 30 UZ 5 3.00000E+00 2.09605E+01 4.42789E+00 2.28138E+01 1 34 UZ 6 1.00000E+00 2.75893E+01 6.04503E+00 2.93292E+01 1 40 EP 7 1.07610E-01 3.94554E+01 8.94942E+00 4.10120E+01 Total Time 0.492E-01 int ... done Saving to b.int, s.int, and d.int ... done int : second run : generate starting data Starting int ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 5 EP 8 1.19238E+01 7.16487E+00 1.29012E+00 9.14566E+00 0.00000E+00 Total Time 0.412E-01 int ... done int : third run : compute a curve of folds Starting int ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 38 UZ 9 3.00000E+00 1.23728E+01 3.49316E+00 1.27456E+01 7.90922E+00 2 40 EP 10 1.36979E+00 1.48682E+01 4.58514E+00 1.47518E+01 1.03924E+01 Total Time 0.860E-01 int ... done Saving to b.lp, s.lp, and d.lp ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo int is done Doing ivp Version 07p Copying demo ivp ... done Demo ivp is started Demo ivp is started ivp : first run : time integration gfortran -fopenmp -O -c ivp.f90 -o ivp.o gfortran -fopenmp -O ivp.o -o ivp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ivp ... BR PT TY LAB PAR(14) L2-NORM MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 4.24264E-01 3.00000E-01 3.00000E-01 1 500 EP 2 2.29254E+01 2.02760E+00 3.33332E-01 2.00001E+00 Total Time 0.967E-01 ivp ... done Saving to b.ivp, s.ivp, and d.ivp ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ivp is done Doing kar Version 07p Copying demo kar ... done Demo kar is started Demo kar is started kar : computation of the solution branch gfortran -fopenmp -O -c kar.f90 -o kar.o gfortran -fopenmp -O kar.o -o kar.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting kar ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PAR(2) 1 1 EP 1 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 -0.00000E+00 1 19 UZ 2 -8.44947E-03 4.38682E-01 4.37056E-01 1.79954E-01 5.09252E-01 1.00845E+00 1.77196E-08 -4.37056E-01 1 27 LP 3 -1.60539E-01 1.49967E-01 2.25394E-01 1.52258E-01 4.73554E-01 1.16054E+00 1.02425E-02 1.37173E-01 1 70 UZ 4 3.07133E-05 2.73291E-01 2.28422E-01 1.97923E-01 4.99043E-01 9.99969E-01 6.81108E-02 -2.23847E-01 1 93 LP 5 7.45256E-02 2.72867E-01 2.24311E-01 1.66970E-01 4.94032E-01 9.25474E-01 5.95480E-02 2.25036E-01 1 127 UZ 6 -2.17859E-04 9.69972E-01 2.28388E-01 2.93904E-01 4.99043E-01 1.00022E+00 6.80575E-02 -1.93634E-01 1 167 LP 7 -5.74122E-02 4.59225E-01 2.25610E-01 1.79404E-01 4.96081E-01 1.05741E+00 6.30467E-02 2.17059E-01 1 234 MX 8 -2.75536E-04 5.52777E+00 2.28186E-01 5.35877E-01 4.99043E-01 1.00028E+00 6.77925E-02 -1.87109E-01 Total Time 0.739E+00 kar ... done Saving to b.kar, s.kar, and d.kar ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo kar is done Doing kdv Version 07p Copying demo kdv ... done Demo kdv is started gcc -g -O2 -I/cnd0/home/boldeman/auto/07p/include -O -c kdv.c -o kdv.o gfortran -L/cnd0/home/boldeman/auto/07p/lib -fopenmp -O kdv.o -o kdv.exe /cnd0/home/boldeman/auto/07p/lib/*.o -lauto_c Starting kdv ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(3) 1 1 EP 1 3.00000E+00 5.56544E+00 9.79669E+00 2.09322E+01 1.64944E+01 4.24685E+00 0.00000E+00 1 2 EP 2 3.04959E+00 5.49141E+00 9.79513E+00 1.99514E+01 1.66025E+01 4.40108E+00 9.14646E-17 Total Time 0.168E-01 kdv ... done Saving to b.1, s.1, and d.1 ... done Starting kdv ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(9) 1 2 EP 3 3.55014E-17 5.49141E+00 9.79513E+00 1.99514E+01 1.66025E+01 4.40108E+00 -1.00000E-02 Total Time 0.298E-01 kdv ... done Saving to b.2, s.2, and d.2 ... done Starting kdv ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(3) 1 3 UZ 4 2.72951E+00 5.39295E+00 9.71074E+00 2.13915E+01 1.63291E+01 4.16567E+00 -4.02219E-07 1 14 UZ 5 3.00000E+00 5.47612E+00 9.79593E+00 2.19306E+01 1.66901E+01 4.26205E+00 1.47696E-09 1 20 6 6.45896E+00 6.52392E+00 1.06032E+01 2.83152E+01 1.96691E+01 5.38195E+00 1.80344E-09 1 40 EP 7 3.98118E+01 1.63633E+01 1.55811E+01 9.24396E+01 4.03808E+01 1.48333E+01 1.66829E-09 Total Time 0.583E+00 kdv ... done Saving to b.3, s.3, and d.3 ... done Starting kdv ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(21) PAR(22) PAR(24) 1 13 8 5.87734E-10 6.31714E+00 9.79480E+00 2.19306E+01 1.66791E+01 1.65474E+01 -9.16046E-08 -6.04798E-07 1 23 UZ 9 1.53776E-09 6.31714E+00 9.79575E+00 2.19306E+01 1.66841E+01 9.84922E+00 -6.71278E-12 2.01853E-07 1 26 10 4.10040E-09 6.31714E+00 9.79665E+00 2.19306E+01 1.66901E+01 6.87313E+00 2.69211E-07 7.65791E-07 1 33 UZ 11 2.15472E-06 6.31713E+00 9.79477E+00 2.19300E+01 1.66719E+01 3.49999E+00 7.93927E-04 3.99048E-04 Total Time 0.653E+00 kdv ... done Saving to b.4, s.4, and d.4 ... done Starting kdv ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) PAR(3) PAR(22) PAR(24) PAR(26) PAR(28) 1 10 12 2.57980E+00 6.10227E+00 9.46446E+00 2.15720E-06 7.65428E-04 3.82659E-04 0.00000E+00 0.00000E+00 1 13 UZ 13 2.32044E+00 5.80271E+00 8.99580E+00 3.87185E-11 1.14014E-10 1.58561E-08 0.00000E+00 0.00000E+00 1 20 EP 14 -1.46221E-01 3.00826E+00 4.06919E+00 -9.43397E-04 -7.52818E-01 -3.43036E-01 0.00000E+00 0.00000E+00 Total Time 0.692E+00 kdv ... done Saving to b.5, s.5, and d.5 ... done Starting kdv ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) PAR(3) PAR(23) PAR(24) PAR(26) PAR(28) 1 23 UZ 15 2.32044E+00 5.80271E+00 8.99588E+00 3.33064E-12 1.48758E+01 -2.22780E-10 0.00000E+00 0.00000E+00 1 35 16 2.31894E+00 5.80098E+00 8.99101E+00 -2.15206E-08 7.69384E+00 -1.07763E-05 0.00000E+00 0.00000E+00 1 51 UZ 17 2.33852E+00 5.82359E+00 9.02685E+00 2.58578E-07 3.48147E+00 1.30129E-04 0.00000E+00 0.00000E+00 1 58 UZ 18 3.08085E+00 6.68282E+00 1.03538E+01 2.26227E-12 3.50004E+00 -1.61197E-10 0.00000E+00 0.00000E+00 1 70 EP 19 3.08872E+00 6.69198E+00 1.03659E+01 -8.12718E-08 5.87270E+00 -4.85486E-05 0.00000E+00 0.00000E+00 Total Time 0.223E+01 kdv ... done Saving to b.6, s.6, and d.6 ... done Starting kdv ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(3) 1 1 EP 20 2.33852E+00 7.50845E+00 9.02879E+00 1.95912E+01 1.53248E+01 3.83182E+00 2.58578E-07 Total Time 0.289E-01 kdv ... done Saving to b.7, s.7, and d.7 ... done Demo kdv is done Doing kpr Version 07p Copying demo kpr ... done Demo kpr is started Starting from analytical solution kpr : first run : continuation in the period T gfortran -fopenmp -O -c kpr.f90 -o kpr.o gfortran -fopenmp -O kpr.o -o kpr.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting kpr ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(17) 1 1 EP 1 1.00000E-01 1.66122E+00 -9.59111E-01 -9.59104E-01 -9.59102E-01 -9.42699E-06 1 29 UZ 2 1.90018E+01 1.69382E+00 -9.59111E-01 -9.59104E-01 -9.59102E-01 4.43281E-09 1 35 EP 3 2.05528E+01 1.69215E+00 -9.58610E-01 -9.59104E-01 -9.59102E-01 3.19184E-03 Total Time 0.777E-01 kpr ... done Saving to b.1, s.1, and d.1 ... done kpr : second run : locate the homoclinic orbit Starting kpr ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 35 UZ 4 6.00000E+01 1.67281E+00 -9.59104E-01 -9.59104E-01 -9.59102E-01 -1.85119E+00 1 50 EP 5 9.00000E+01 1.66895E+00 -9.59101E-01 -9.59101E-01 -9.59101E-01 -1.85119E+00 Total Time 0.271E+00 kpr ... done Saving to b.2, s.2, and d.2 ... done kpr : third run : generate adjoint variables Starting kpr ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 2 EP 6 6.00756E+01 1.67279E+00 -9.59104E-01 -9.59104E-01 -9.59102E-01 -1.85119E+00 Total Time 0.310E-01 kpr ... done Saving to b.3, s.3, and d.3 ... done kpr : fourth run : continue the homoclinic orbit Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) PAR(2) PAR(10) PAR(29) PAR(30) PAR(33) 1 6 UZ 7 -1.80166E+00 1.64982E+00 -9.43576E-01 -2.00266E-01 -7.25442E-07 -1.89976E-01 2.85405E+00 1.14076E-04 1 12 UZ 8 -1.56876E+00 1.54061E+00 -8.68854E-01 -4.39547E-01 -2.15625E-07 -1.87007E-01 6.84878E+00 -1.48740E-07 1 50 EP 9 1.76506E-01 7.26101E-01 4.45227E-01 -2.40533E+00 3.87631E-08 4.21878E-07 2.30932E+01 -1.86916E-05 Total Time 0.372E+00 kpr ... done Appending fort.7 to b.3 ... done Appending fort.8 to s.3 ... done Appending fort.9 to d.3 ... done kpr : fifth run : continue in reverse direction Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) PAR(2) PAR(10) PAR(29) PAR(30) PAR(33) 1 50 EP 10 -1.93828E+00 1.71350E+00 -9.87404E-01 -6.20316E-02 -7.52334E+00 -1.40874E-01 3.75005E-01 -3.19793E+01 Total Time 0.459E+00 kpr ... done Appending fort.7 to b.3 ... done Appending fort.8 to s.3 ... done Appending fort.9 to d.3 ... done kpr : sixth run : increase the period Starting kpr ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 35 UZ 6 1.00000E+03 1.66191E+00 -9.59101E-01 -9.59101E-01 -9.59101E-01 -1.50000E-01 1 37 UZ 7 1.10000E+03 1.66185E+00 -9.59101E-01 -9.59101E-01 -9.59101E-01 -1.50000E-01 Total Time 0.205E+00 kpr ... done Saving to b.6, s.6, and d.6 ... done kpr : seventh run : recompute the branch of homoclinic orbits Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(29) PAR(30) 1 29 UZ 8 1.76506E-01 7.47304E-01 4.45218E-01 4.45218E-01 4.45218E-01 -2.40533E+00 -1.78734E-06 2.30933E+01 1 40 EP 9 1.68277E-01 6.34322E-01 5.43385E-01 5.43384E-01 5.43384E-01 -2.39505E+00 7.06500E-02 2.00536E+01 Total Time 0.143E+00 kpr ... done Saving to b.7, s.7, and d.7 ... done kpr : eighth run : continue central saddle-node homoclinics Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(35) PAR(36) 1 20 10 1.76471E-01 7.56144E-01 1.25933E+00 7.91240E-01 6.80306E-01 -2.40541E+00 6.89065E-03 -6.05536E-02 1 38 UZ 11 1.76506E-01 7.49200E-01 1.37575E+00 7.82667E-01 6.55822E-01 -2.40533E+00 6.89014E-03 -2.94344E-05 1 40 12 1.76495E-01 7.47748E-01 1.38515E+00 7.82007E-01 6.54416E-01 -2.40536E+00 6.89021E-03 2.59989E-02 1 60 13 1.76541E-01 7.35800E-01 1.43517E+00 7.78813E-01 6.48953E-01 -2.40525E+00 6.88830E-03 1.98419E+00 1 80 EP 14 1.76427E-01 7.60582E-01 1.46335E+00 7.77311E-01 6.47042E-01 -2.40551E+00 6.88911E-03 2.31310E+00 Total Time 0.512E+00 kpr ... done Saving to b.8, s.8, and d.8 ... done kpr : ninth run : continue homoclinics from codim-2 point Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 50 15 1.32428E-01 4.11285E-01 1.53897E+00 8.08461E-01 7.00777E-01 -2.35111E+00 1 100 16 9.62374E-03 1.95963E-01 1.66560E+00 9.10597E-01 8.71125E-01 -2.20114E+00 1 150 17 -7.45474E-05 2.04572E-01 1.67238E+00 9.19026E-01 8.86486E-01 -2.18957E+00 1 200 18 8.68802E-05 2.09344E-01 1.67177E+00 9.19113E-01 8.84856E-01 -2.18971E+00 1 250 19 9.75678E-05 2.12675E-01 1.67215E+00 9.18690E-01 8.85412E-01 -2.18957E+00 1 300 20 2.39520E-05 2.14950E-01 1.67138E+00 9.18379E-01 8.86371E-01 -2.18964E+00 1 350 21 8.18966E-05 2.16447E-01 1.67199E+00 9.18446E-01 8.85905E-01 -2.18957E+00 1 400 22 8.26440E-05 2.17358E-01 1.67228E+00 9.18536E-01 8.84435E-01 -2.18964E+00 1 450 23 4.50089E-05 2.17865E-01 1.67166E+00 9.19089E-01 8.86342E-01 -2.18970E+00 1 500 EP 24 -1.05740E-04 2.18140E-01 1.67180E+00 9.19098E-01 8.86488E-01 -2.18954E+00 Total Time 0.116E+01 kpr ... done Saving to b.9, s.9, and d.9 ... done kpr : tenth run : 3-parameter curve of inclination-flips Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) PAR(2) PAR(3) PAR(29) PAR(30) PAR(33) 1 18 UZ 11 1.28270E-01 6.94091E-01 3.75556E-01 -2.51932E+00 5.74477E-01 -2.59161E-06 2.85405E+00 1.14076E-04 1 20 MX 12 1.04137E-01 6.86434E-01 8.17218E-01 -2.48888E+00 5.63749E-01 2.37560E-01 2.85405E+00 1.14076E-04 Total Time 0.320E+00 kpr ... done Saving to b.10, s.10, and d.10 ... done kpr : eleventh run : another curve of inclination-flips Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) PAR(2) PAR(3) PAR(29) PAR(30) PAR(33) 1 27 UZ 11 1.53542E-01 7.11853E-01 4.24928E-01 -2.45810E+00 1.17171E+00 -1.12011E-06 6.84878E+00 -1.48740E-07 1 30 EP 12 1.02191E-01 7.11394E-01 1.08901E+00 -2.39598E+00 1.10968E+00 5.03236E-01 6.84878E+00 -1.48740E-07 Total Time 0.329E+00 kpr ... done Saving to b.11, s.11, and d.11 ... done kpr : twelfth run : non-central saddle-node homoclinics Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) 1 10 10 1.74822E-01 7.45054E-01 4.43801E-01 4.43801E-01 4.43801E-01 -2.40912E+00 6.48532E+00 1 20 11 1.58937E-01 7.23036E-01 4.29931E-01 4.29931E-01 4.29931E-01 -2.44548E+00 1.48577E+00 1 30 12 1.50825E-02 3.37549E-01 1.94664E-01 1.94664E-01 1.94664E-01 -2.88463E+00 1.94109E-01 1 40 13 2.29716E-03 1.84450E-01 1.03602E-01 1.03602E-01 1.03602E-01 -2.96710E+00 1.73639E-01 1 50 EP 14 5.03063E-04 1.16116E-01 6.17713E-02 6.17713E-02 6.17713E-02 -2.98805E+00 1.69834E-01 Total Time 0.225E+00 kpr ... done Saving to b.12, s.12, and d.12 ... done kpr : thirteenth run : non-central saddle-node homoclinics Starting kpr ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) 1 10 15 1.75346E-01 7.47793E-01 1.35060E+00 7.88448E-01 6.70424E-01 -2.40794E+00 7.28412E+00 1 20 16 1.69268E-01 7.40247E-01 1.25102E+00 8.12329E-01 7.20730E-01 -2.42170E+00 2.99709E+00 1 30 17 9.68110E-02 6.25475E-01 6.44726E-01 6.16400E-01 6.10532E-01 -2.60154E+00 3.59708E-01 1 40 18 1.69159E-02 3.56055E-01 2.70616E-01 2.69959E-01 2.69757E-01 -2.87546E+00 1.96146E-01 1 50 EP 19 2.66413E-03 2.02116E-01 2.36541E-01 2.35061E-01 2.34832E-01 -2.96368E+00 1.72795E-01 Total Time 0.218E+00 kpr ... done Appending fort.7 to b.12 ... done Appending fort.8 to s.12 ... done Appending fort.9 to d.12 ... done Demo kpr is done Doing lcbp Version 07p Copying demo lcbp ... done Demo lcbp is started Runner configured ***lcbp: run 1: cycle continuation*** gfortran -fopenmp -O -c lcbp.f90 -o lcbp.o gfortran -fopenmp -O lcbp.o -o lcbp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 1 1 EP 1 1.00000E+00 1.00000E+00 1.00000E+00 1.00000E+00 1.00000E+00 1 10 2 1.45962E+00 1.45962E+00 1.45962E+00 1.45962E+00 1.00000E+00 1 18 BP 3 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 1 20 4 2.14142E+00 2.14142E+00 2.14142E+00 2.14142E+00 1.00000E+00 1 30 5 2.84853E+00 2.84853E+00 2.84853E+00 2.84853E+00 1.00000E+00 1 40 6 3.55564E+00 3.55564E+00 3.55564E+00 3.55564E+00 1.00000E+00 1 50 EP 7 4.26274E+00 4.26274E+00 4.26274E+00 4.26274E+00 1.00000E+00 Total Time 0.823E-01 lcbp ... done Saving to b.lcbp.1, s.lcbp.1, and d.lcbp.1 ... done ***lcbp: run 1: branch switch*** Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 1 8 2.00000E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 2 2 9 2.01414E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 2 3 10 2.02514E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 2 4 11 2.04164E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 2 5 EP 12 2.07464E+00 2.00000E+00 2.00000E+00 2.00000E+00 1.00000E+00 Total Time 0.356E-01 lcbp ... done Saving to b.lcbp.1.sw, s.lcbp.1.sw, and d.lcbp.1.sw ... done Runner configured ***lcbp: run 2: BP cont non-generic (sw)*** Starting lcbp ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PERIOD 2 5 EP 8 2.00000E+00 2.00000E+00 2.00000E+00 1.99999E+00 2.00000E+00 1.00000E+00 Total Time 0.151E+00 lcbp ... done Saving to b.lcbp.2.sw, s.lcbp.2.sw, and d.lcbp.2.sw ... done ***lcbp: run 2: BP cont non-generic (fw)*** Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PERIOD 2 10 9 2.37528E+00 2.37528E+00 2.37528E+00 2.37523E+00 2.37528E+00 1.00000E+00 2 20 10 2.95263E+00 2.95263E+00 2.95263E+00 2.95256E+00 2.95263E+00 1.00000E+00 2 30 11 3.52998E+00 3.52998E+00 3.52998E+00 3.52990E+00 3.52998E+00 1.00000E+00 2 40 12 4.10733E+00 4.10733E+00 4.10733E+00 4.10724E+00 4.10733E+00 1.00000E+00 2 50 EP 13 4.68468E+00 4.68468E+00 4.68468E+00 4.68458E+00 4.68468E+00 1.00000E+00 Total Time 0.311E+00 lcbp ... done Saving to b.lcbp.2.fw, s.lcbp.2.fw, and d.lcbp.2.fw ... done ***lcbp: run 2: BP cont non-generic (bw)*** Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PERIOD 2 10 9 1.62472E+00 1.62472E+00 1.62472E+00 1.62469E+00 1.62472E+00 1.00000E+00 2 20 10 1.04737E+00 1.04737E+00 1.04737E+00 1.04735E+00 1.04737E+00 1.00000E+00 2 30 11 4.70022E-01 4.70022E-01 4.70022E-01 4.70011E-01 4.70022E-01 1.00000E+00 2 40 MX 12 1.71142E-06 1.16553E-17 1.16771E-17 1.16550E-17 -1.48783E-01 1.00001E+00 Total Time 0.256E+00 lcbp ... done Saving to b.lcbp.2.bw, s.lcbp.2.bw, and d.lcbp.2.bw ... done Runner configured ***lcbp: run 3: BP cont generic (sw)*** Starting lcbp ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(3) PERIOD 2 5 EP 8 2.00000E+00 2.00000E+00 2.00000E+00 1.99999E+00 2.00000E+00 0.00000E+00 1.00000E+00 Total Time 0.150E+00 lcbp ... done Saving to b.lcbp.3.sw, s.lcbp.3.sw, and d.lcbp.3.sw ... done ***lcbp: run 3: BP cont generic (fw)*** Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(3) PERIOD 2 10 9 2.37528E+00 2.37528E+00 2.37528E+00 2.37523E+00 2.37528E+00 1.37194E-14 1.00000E+00 2 20 10 2.95263E+00 2.95263E+00 2.95263E+00 2.95256E+00 2.95263E+00 7.98788E-15 1.00000E+00 2 30 11 3.52998E+00 3.52998E+00 3.52998E+00 3.52990E+00 3.52998E+00 8.76262E-15 1.00000E+00 2 40 12 4.10733E+00 4.10733E+00 4.10733E+00 4.10724E+00 4.10733E+00 9.85655E-15 1.00000E+00 2 50 EP 13 4.68468E+00 4.68468E+00 4.68468E+00 4.68458E+00 4.68468E+00 5.86506E-15 1.00000E+00 Total Time 0.265E+00 lcbp ... done Saving to b.lcbp.3.fw, s.lcbp.3.fw, and d.lcbp.3.fw ... done ***lcbp: run 3: BP cont generic (bw)*** Starting lcbp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(3) PERIOD 2 10 9 1.62472E+00 1.62472E+00 1.62472E+00 1.62469E+00 1.62472E+00 1.50039E-14 1.00000E+00 2 20 10 1.04737E+00 1.04737E+00 1.04737E+00 1.04735E+00 1.04737E+00 7.54522E-15 1.00000E+00 2 30 11 4.70022E-01 4.70022E-01 4.70022E-01 4.70011E-01 4.70022E-01 7.19950E-15 1.00000E+00 2 40 12 2.23835E-05 2.23829E-05 2.23829E-05 2.23824E-05 2.23829E-05 6.93083E-15 1.00000E+00 2 44 BP 13 -8.29629E-07 5.60820E-08 5.60820E-08 5.60807E-08 2.21018E-08 -1.12614E-13 1.00000E+00 Total Time 0.696E+00 lcbp ... done Saving to b.lcbp.3.bw, s.lcbp.3.bw, and d.lcbp.3.bw ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo lcbp is done Doing lin Version 07p Copying demo lin ... done Demo lin is started Demo lin is started lin : first run : compute trivial solutions and locate eigenvalues gfortran -fopenmp -O -c lin.f90 -o lin.o gfortran -fopenmp -O lin.o -o lin.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting lin ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(3) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 6 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 12 BP 3 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 18 BP 4 3.00002E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 24 BP 5 4.00023E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 UZ 6 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.135E-01 lin ... done lin : second run : compute a few steps on the bifurcating branch Starting lin ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(3) 2 10 UZ 7 1.00000E+00 3.29690E+00 0.00000E+00 4.44287E+00 9.99994E-01 Total Time 0.151E-01 lin ... done Saving to b.lin, s.lin, and d.lin ... done lin : third run : compute a 2-parameter curve of eigenvalues Starting lin ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 23 EP 8 1.72433E+00 5.04425E+00 1.35095E+00 7.33418E+00 1.03136E+00 Total Time 0.169E-01 lin ... done Saving to b.2p, s.2p, and d.2p ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo lin is done Doing log Version 07p Copying demo log ... done Demo log is started Demo log is started log : first run : fixed point solution branch gfortran -fopenmp -O -c log.f90 -o log.o gfortran -fopenmp -O log.o -o log.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting log ... BR PT TY LAB mu L2-NORM x 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 1 58 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 1 188 UZ 3 3.60000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB mu L2-NORM x 2 227 PD 4 3.00000E+00 6.66667E-01 6.66667E-01 2 258 UZ 5 3.60000E+00 7.22222E-01 7.22222E-01 Total Time 0.461E-01 log ... done Saving to b.log, s.log, and d.log ... done log : perform 5 period-doublings Starting log ... BR PT TY LAB mu L2-NORM x 3 185 PD 6 3.44949E+00 4.39960E-01 4.39960E-01 3 194 UZ 7 3.60000E+00 4.08149E-01 4.08149E-01 Total Time 0.355E-01 log ... done Appending to b.log, s.log and d.log ... done Starting log ... BR PT TY LAB mu L2-NORM x 4 127 PD 8 3.54409E+00 5.23595E-01 5.23595E-01 4 138 UZ 9 3.60000E+00 5.45499E-01 5.45499E-01 Total Time 0.289E-01 log ... done Appending to b.log, s.log and d.log ... done Starting log ... BR PT TY LAB mu L2-NORM x 5 83 PD 10 3.56441E+00 4.90608E-01 4.90608E-01 5 108 UZ 11 3.60000E+00 4.68120E-01 4.68120E-01 Total Time 0.261E-01 log ... done Appending to b.log, s.log and d.log ... done Starting log ... BR PT TY LAB mu L2-NORM x 6 45 PD 12 3.56876E+00 5.03750E-01 5.03750E-01 6 83 UZ 13 3.60000E+00 5.29808E-01 5.29808E-01 Total Time 0.230E-01 log ... done Appending to b.log, s.log and d.log ... done Starting log ... BR PT TY LAB mu L2-NORM x 7 26 PD 14 3.56969E+00 4.98502E-01 4.98502E-01 7 93 UZ 15 3.60000E+00 4.70261E-01 4.70261E-01 Total Time 0.253E-01 log ... done Appending to b.log, s.log and d.log ... done Relabeling succeeded Relabeling done Approximation of Feigenbaum constant: 4.66883518193 ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo log is done Doing lor Version 07p Copying demo lor ... done Demo lor is started lor : first run : a solution branch starting from numerical data gfortran -fopenmp -O -c lor.f90 -o lor.o gfortran -fopenmp -O lor.o -o lor.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting lor ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD 1 1 EP 1 2.80000E+02 -6.25515E-01 4.21787E+01 7.98397E+01 3.57313E+02 4.33200E-01 1 18 PD 2 2.29407E+02 -1.06862E+00 3.65050E+01 6.67239E+01 3.06557E+02 4.80867E-01 1 21 UZ 3 2.00000E+02 -1.23833E+00 3.34489E+01 6.01792E+01 2.74317E+02 5.16877E-01 Total Time 0.508E+00 lor ... done lor : second run : switch branches at a period-doubling Starting lor ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD 2 22 PD 4 2.18210E+02 -1.05589E+00 3.58675E+01 6.61411E+01 2.99070E+02 9.87949E-01 2 28 UZ 5 2.00000E+02 -1.03415E+00 3.45010E+01 6.34211E+01 2.80408E+02 1.03581E+00 Total Time 0.591E-01 lor ... done lor : third run : third run : another period-doubling Starting lor ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD 3 14 PD 6 2.15966E+02 -1.06184E+00 3.58658E+01 6.63159E+01 2.97684E+02 1.98675E+00 3 24 UZ 7 2.00000E+02 -1.10428E+00 3.47657E+01 6.39736E+01 2.81084E+02 2.07002E+00 Total Time 0.679E-01 lor ... done Saving to b.lor, s.lor, and d.lor ... done Demo lor is done Doing lrz Version 07p Copying demo lrz ... done Demo lrz is started ***Compute stationary solution families*** gfortran -fopenmp -O -c lrz.f90 -o lrz.o gfortran -fopenmp -O lrz.o -o lrz.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting lrz ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 5 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 13 UZ 3 3.00000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 42 HB 4 2.47368E+01 2.62685E+01 7.95602E+00 7.95602E+00 2.37368E+01 2 45 UZ 5 3.00000E+01 3.15542E+01 8.79394E+00 8.79394E+00 2.90000E+01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 42 HB 6 2.47368E+01 2.62685E+01 -7.95602E+00 -7.95602E+00 2.37368E+01 2 45 UZ 7 3.00000E+01 3.15542E+01 -8.79394E+00 -8.79394E+00 2.90000E+01 Total Time 0.281E-01 lrz ... done ***Compute the first periodic solution family*** Starting lrz ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 4 2 8 2.47263E+01 2.62550E+01 8.24078E+00 8.35402E+00 2.42325E+01 6.53196E-01 4 4 9 2.46221E+01 2.61217E+01 8.87099E+00 9.25396E+00 2.52683E+01 6.56815E-01 4 6 10 2.43598E+01 2.57862E+01 9.55937E+00 1.02673E+01 2.62866E+01 6.66114E-01 4 8 11 2.38815E+01 2.51733E+01 1.02649E+01 1.13402E+01 2.71688E+01 6.83815E-01 4 10 12 2.31354E+01 2.42151E+01 1.09349E+01 1.23940E+01 2.77796E+01 7.13505E-01 4 12 13 2.20780E+01 2.28511E+01 1.15132E+01 1.33396E+01 2.79816E+01 7.60644E-01 4 14 14 2.06702E+01 2.10193E+01 1.19409E+01 1.40738E+01 2.76380E+01 8.35069E-01 4 16 15 1.88821E+01 1.86471E+01 1.21484E+01 1.44796E+01 2.66089E+01 9.57569E-01 4 18 16 1.67353E+01 1.56405E+01 1.20536E+01 1.44257E+01 2.47832E+01 1.18330E+00 4 20 17 1.48138E+01 1.23916E+01 1.17081E+01 1.39788E+01 2.27276E+01 1.62929E+00 4 22 18 1.39678E+01 9.14991E+00 1.14909E+01 1.36783E+01 2.17209E+01 2.78130E+00 4 24 19 1.39266E+01 5.88316E+00 1.14637E+01 1.36364E+01 2.16632E+01 6.70329E+00 4 26 20 1.39266E+01 4.27612E+00 1.14814E+01 1.36634E+01 2.16547E+01 1.26885E+01 4 28 21 1.39266E+01 2.60523E+00 1.14798E+01 1.36596E+01 2.16716E+01 3.41837E+01 4 30 22 1.39265E+01 1.77732E+00 1.14801E+01 1.36531E+01 2.15700E+01 7.34476E+01 4 32 23 1.39266E+01 1.14209E+00 1.14546E+01 1.36068E+01 2.16277E+01 1.77873E+02 4 34 24 1.39266E+01 7.31857E-01 1.14815E+01 1.36619E+01 2.16442E+01 4.33169E+02 4 35 EP 25 1.39266E+01 6.29547E-01 1.14802E+01 1.36631E+01 2.16345E+01 5.85401E+02 Total Time 0.702E-01 lrz ... done ***Compute the second periodic solution family*** Starting lrz ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 6 2 26 2.47263E+01 2.62550E+01 -7.66589E+00 -7.55614E+00 2.42325E+01 6.53196E-01 6 4 27 2.46221E+01 2.61217E+01 -6.98291E+00 -6.63766E+00 2.52683E+01 6.56815E-01 6 6 28 2.43598E+01 2.57862E+01 -6.16259E+00 -5.57720E+00 2.62866E+01 6.66114E-01 6 8 29 2.38815E+01 2.51733E+01 -5.21877E+00 -4.41802E+00 2.71688E+01 6.83815E-01 6 10 30 2.31354E+01 2.42151E+01 -4.18398E+00 -3.22592E+00 2.77796E+01 7.13505E-01 6 12 31 2.20780E+01 2.28511E+01 -3.10528E+00 -2.07754E+00 2.79816E+01 7.60644E-01 6 14 32 2.06702E+01 2.10193E+01 -2.04466E+00 -1.05682E+00 2.76380E+01 8.35069E-01 6 16 33 1.88821E+01 1.86471E+01 -1.08612E+00 -2.53862E-01 2.66089E+01 9.57569E-01 6 18 34 1.67353E+01 1.56405E+01 -3.58903E-01 2.34383E-01 2.47832E+01 1.18330E+00 6 20 35 1.48138E+01 1.23916E+01 -4.02246E-02 3.50485E-01 2.27276E+01 1.62929E+00 6 22 36 1.39678E+01 9.14991E+00 -1.09822E-04 3.28597E-01 2.17209E+01 2.78130E+00 6 24 37 1.39266E+01 5.88316E+00 2.71088E-12 3.26551E-01 2.16632E+01 6.70329E+00 6 26 38 1.39266E+01 4.27612E+00 3.10164E-11 3.26608E-01 2.16547E+01 1.26885E+01 6 28 39 1.39266E+01 2.60523E+00 1.78906E-10 3.26143E-01 2.16716E+01 3.41837E+01 6 30 40 1.39265E+01 1.77732E+00 2.29274E-15 3.16121E-01 2.15700E+01 7.34476E+01 6 32 41 1.39266E+01 1.14209E+00 6.72816E-13 3.25737E-01 2.16277E+01 1.77873E+02 6 34 42 1.39266E+01 7.31857E-01 1.18433E-09 3.26767E-01 2.16442E+01 4.33169E+02 6 35 EP 43 1.39266E+01 6.29547E-01 8.84298E-12 3.26839E-01 2.16345E+01 5.85401E+02 Total Time 0.884E-01 lrz ... done Saving to b.lrz, s.lrz, and d.lrz ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo lrz is done Doing man Version 07p Copying demo man ... done Demo man is started ***Compute an initial orbit in the manifold*** gfortran -fopenmp -O -c man.f90 -o man.o gfortran -fopenmp -O man.o -o man.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting man ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) PAR(6) PAR(7) PAR(8) PAR(9) PAR(12) 1 1 EP 1 1.00000E-05 1.52236E+00 -7.91539E-02 -7.91539E-02 1.01536E-01 1.51690E+00 1.52236E+00 0.00000E+00 1 160 UZ 2 -1.95990E-01 4.00767E+00 -7.91539E-02 -6.29807E+00 7.54578E+00 3.71360E+00 1.05069E+01 9.99997E+00 1 199 UZ 3 -2.38045E-01 8.17450E+00 -7.91539E-02 -1.56594E+01 1.73955E+01 9.88935E+00 2.54090E+01 2.50000E+01 1 241 UZ 4 -2.71120E-01 1.49008E+01 -7.91539E-02 -3.03314E+01 2.52059E+01 2.80292E+01 4.83835E+01 5.00000E+01 1 299 UZ 5 -3.09166E-01 2.66653E+01 -7.91539E-02 -5.24175E+01 -2.85412E+00 5.66707E+01 7.72484E+01 1.00000E+02 1 342 UZ 6 -3.37666E-01 3.41134E+01 -7.91539E-02 -6.29317E+01 -3.12977E+01 2.41127E+01 7.43059E+01 1.50000E+02 Total Time 0.853E+00 man ... done Saving to b.0, s.0, and d.0 ... done ***Compute the manifold*** Starting man ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) PAR(5) PAR(6) PAR(7) PAR(8) PAR(9) 1 2 7 -2.32384E-01 8.21028E+00 -8.88287E-02 1.14643E-01 -1.56483E+01 1.74930E+01 9.65290E+00 2.53782E+01 1 4 8 -2.23560E-01 8.24501E+00 -1.05686E-01 1.43620E-01 -1.56106E+01 1.76823E+01 9.14350E+00 2.52974E+01 1 6 9 -2.17370E-01 8.24585E+00 -1.18499E-01 1.71214E-01 -1.55581E+01 1.78584E+01 8.61136E+00 2.52018E+01 1 8 10 -2.13056E-01 8.22731E+00 -1.27397E-01 1.97473E-01 -1.54953E+01 1.80208E+01 8.07019E+00 2.50994E+01 1 10 11 -2.10157E-01 8.19802E+00 -1.32696E-01 2.22755E-01 -1.54251E+01 1.81701E+01 7.52590E+00 2.49945E+01 1 12 12 -2.08422E-01 8.16256E+00 -1.34647E-01 2.47445E-01 -1.53489E+01 1.83070E+01 6.98124E+00 2.48892E+01 1 14 13 -2.07746E-01 8.12280E+00 -1.33393E-01 2.71890E-01 -1.52675E+01 1.84319E+01 6.43788E+00 2.47846E+01 1 16 14 -2.08133E-01 8.07854E+00 -1.28981E-01 2.96405E-01 -1.51814E+01 1.85445E+01 5.89742E+00 2.46810E+01 1 18 15 -2.09695E-01 8.02761E+00 -1.21391E-01 3.21258E-01 -1.50907E+01 1.86440E+01 5.36217E+00 2.45781E+01 1 20 16 -2.12666E-01 7.96565E+00 -1.10593E-01 3.46639E-01 -1.49954E+01 1.87289E+01 4.83621E+00 2.44750E+01 1 22 17 -2.17421E-01 7.88582E+00 -9.66831E-02 3.72539E-01 -1.48958E+01 1.87966E+01 4.32686E+00 2.43705E+01 1 24 18 -2.24464E-01 7.77956E+00 -8.01830E-02 3.98491E-01 -1.47927E+01 1.88434E+01 3.84635E+00 2.42630E+01 1 26 19 -2.34260E-01 7.64011E+00 -6.24337E-02 4.23275E-01 -1.46878E+01 1.88662E+01 3.41012E+00 2.41515E+01 1 28 20 -2.46938E-01 7.46850E+00 -4.55157E-02 4.45126E-01 -1.45828E+01 1.88646E+01 3.02654E+00 2.40352E+01 1 30 21 -2.62246E-01 7.27450E+00 -3.12392E-02 4.62740E-01 -1.44767E+01 1.88424E+01 2.68521E+00 2.39128E+01 1 32 22 -2.79838E-01 7.07052E+00 -2.03243E-02 4.75887E-01 -1.43658E+01 1.88041E+01 2.36116E+00 2.37812E+01 1 34 23 -2.99476E-01 6.86693E+00 -1.25874E-02 4.85102E-01 -1.42450E+01 1.87526E+01 2.02816E+00 2.36367E+01 1 36 24 -3.21015E-01 6.67154E+00 -7.43700E-03 4.91206E-01 -1.41098E+01 1.86883E+01 1.66573E+00 2.34758E+01 1 38 25 -3.44347E-01 6.49039E+00 -4.19805E-03 4.95038E-01 -1.39561E+01 1.86102E+01 1.25960E+00 2.32959E+01 1 40 26 -3.69354E-01 6.32856E+00 -2.26840E-03 4.97319E-01 -1.37809E+01 1.85160E+01 7.99984E-01 2.30953E+01 1 42 27 -3.95870E-01 6.19058E+00 -1.17694E-03 4.98609E-01 -1.35817E+01 1.84029E+01 2.80134E-01 2.28737E+01 1 44 28 -4.23668E-01 6.08061E+00 -5.89110E-04 4.99304E-01 -1.33565E+01 1.82678E+01 -3.04290E-01 2.26319E+01 1 46 29 -4.52454E-01 6.00228E+00 -2.86305E-04 4.99662E-01 -1.31043E+01 1.81077E+01 -9.55314E-01 2.23724E+01 1 48 30 -4.81885E-01 5.95837E+00 -1.36141E-04 4.99839E-01 -1.28249E+01 1.79197E+01 -1.67260E+00 2.20996E+01 1 50 31 -5.11603E-01 5.95055E+00 -6.38637E-05 4.99925E-01 -1.25188E+01 1.77013E+01 -2.45359E+00 2.18191E+01 1 52 32 -5.41265E-01 5.97926E+00 -2.97915E-05 4.99965E-01 -1.21872E+01 1.74503E+01 -3.29387E+00 2.15381E+01 1 54 33 -5.70580E-01 6.04373E+00 -1.39173E-05 4.99984E-01 -1.18321E+01 1.71653E+01 -4.18782E+00 2.12646E+01 1 56 34 -5.99312E-01 6.14223E+00 -6.54794E-06 4.99992E-01 -1.14553E+01 1.68451E+01 -5.12920E+00 2.10070E+01 1 58 35 -6.27293E-01 6.27234E+00 -3.11578E-06 4.99996E-01 -1.10590E+01 1.64890E+01 -6.11170E+00 2.07736E+01 1 60 36 -6.54410E-01 6.43124E+00 -1.50374E-06 4.99998E-01 -1.06452E+01 1.60965E+01 -7.12924E+00 2.05729E+01 1 62 37 -6.80600E-01 6.61598E+00 -7.37319E-07 4.99999E-01 -1.02155E+01 1.56672E+01 -8.17622E+00 2.04125E+01 1 64 38 -7.05836E-01 6.82364E+00 -3.67574E-07 5.00000E-01 -9.77171E+00 1.52009E+01 -9.24757E+00 2.02995E+01 1 66 39 -7.30115E-01 7.05149E+00 -1.86325E-07 5.00000E-01 -9.31501E+00 1.46974E+01 -1.03388E+01 2.02404E+01 1 68 40 -7.53455E-01 7.29698E+00 -9.59944E-08 5.00000E-01 -8.84653E+00 1.41566E+01 -1.14458E+01 2.02404E+01 1 70 41 -7.75883E-01 7.55786E+00 -5.02240E-08 5.00000E-01 -8.36710E+00 1.35781E+01 -1.25651E+01 2.03040E+01 1 72 42 -7.97436E-01 7.83209E+00 -2.66556E-08 5.00000E-01 -7.87734E+00 1.29615E+01 -1.36934E+01 2.04344E+01 1 74 43 -8.18150E-01 8.11789E+00 -1.43316E-08 5.00000E-01 -7.37760E+00 1.23063E+01 -1.48280E+01 2.06336E+01 1 76 44 -8.38065E-01 8.41369E+00 -7.79382E-09 5.00000E-01 -6.86797E+00 1.16116E+01 -1.59662E+01 2.09025E+01 1 78 45 -8.57220E-01 8.71808E+00 -4.27925E-09 5.00000E-01 -6.34821E+00 1.08761E+01 -1.71054E+01 2.12411E+01 1 80 46 -8.75650E-01 9.02981E+00 -2.36708E-09 5.00000E-01 -5.81772E+00 1.00979E+01 -1.82435E+01 2.16481E+01 1 82 47 -8.93387E-01 9.34772E+00 -1.31565E-09 5.00000E-01 -5.27537E+00 9.27428E+00 -1.93781E+01 2.21213E+01 1 84 48 -9.10460E-01 9.67069E+00 -7.32272E-10 5.00000E-01 -4.71933E+00 8.40127E+00 -2.05067E+01 2.26578E+01 1 86 49 -9.26889E-01 9.99759E+00 -4.06199E-10 5.00000E-01 -4.14662E+00 7.47266E+00 -2.16264E+01 2.32538E+01 1 88 50 -9.42681E-01 1.03271E+01 -2.22938E-10 5.00000E-01 -3.55235E+00 6.47862E+00 -2.27338E+01 2.39043E+01 1 90 51 -9.57821E-01 1.06575E+01 -1.19544E-10 5.00000E-01 -2.92798E+00 5.40221E+00 -2.38236E+01 2.46033E+01 1 92 52 -9.72243E-01 1.09857E+01 -6.10080E-11 5.00000E-01 -2.25681E+00 4.21070E+00 -2.48864E+01 2.53408E+01 1 94 53 -9.85707E-01 1.13044E+01 -2.74986E-11 5.00000E-01 -1.49870E+00 2.82586E+00 -2.58990E+01 2.60958E+01 1 96 54 -9.96892E-01 1.15784E+01 -6.62533E-12 5.00000E-01 -4.99172E-01 9.49551E-01 -2.67535E+01 2.67750E+01 1 98 55 -9.90782E-01 1.14276E+01 1.13717E+00 5.00000E-01 1.13717E+00 -2.15278E+00 -2.62854E+01 2.63979E+01 1 100 56 -9.77753E-01 1.11147E+01 1.96882E+00 5.00000E-01 1.96882E+00 -3.68921E+00 -2.52985E+01 2.56418E+01 1 102 57 -9.63660E-01 1.07888E+01 2.66762E+00 5.00000E-01 2.66762E+00 -4.94409E+00 -2.42510E+01 2.48932E+01 1 104 58 -9.48791E-01 1.04587E+01 3.30793E+00 5.00000E-01 3.30793E+00 -6.06106E+00 -2.31704E+01 2.41774E+01 1 106 59 -9.33255E-01 1.01286E+01 3.91288E+00 5.00000E-01 3.91288E+00 -7.08531E+00 -2.20692E+01 2.35066E+01 1 108 60 -9.17080E-01 9.80049E+00 4.49345E+00 5.00000E-01 4.49345E+00 -8.03852E+00 -2.09539E+01 2.28883E+01 1 110 61 -9.00266E-01 9.47581E+00 5.05569E+00 5.00000E-01 5.05569E+00 -8.93278E+00 -1.98285E+01 2.23276E+01 1 112 62 -8.82796E-01 9.15575E+00 5.60321E+00 5.00000E-01 5.60321E+00 -9.77547E+00 -1.86960E+01 2.18288E+01 1 114 63 -8.64645E-01 8.84143E+00 6.13826E+00 5.00000E-01 6.13826E+00 -1.05714E+01 -1.75590E+01 2.13951E+01 1 116 64 -8.45783E-01 8.53397E+00 6.66219E+00 5.00000E-01 6.66219E+00 -1.13236E+01 -1.64199E+01 2.10291E+01 1 118 65 -8.26175E-01 8.23459E+00 7.17581E+00 5.00000E-01 7.17581E+00 -1.20344E+01 -1.52810E+01 2.07323E+01 1 120 66 -8.05784E-01 7.94463E+00 7.67949E+00 5.00000E-01 7.67949E+00 -1.27052E+01 -1.41447E+01 2.05054E+01 1 122 67 -7.84570E-01 7.66559E+00 8.17325E+00 5.00000E-01 8.17325E+00 -1.33371E+01 -1.30136E+01 2.03478E+01 1 124 68 -7.62496E-01 7.39917E+00 8.65684E+00 5.00000E-01 8.65684E+00 -1.39307E+01 -1.18903E+01 2.02579E+01 1 126 69 -7.39523E-01 7.14729E+00 9.12977E+00 5.00000E-01 9.12977E+00 -1.44865E+01 -1.07780E+01 2.02331E+01 1 128 70 -7.15621E-01 6.91213E+00 9.59127E+00 5.00000E-01 9.59127E+00 -1.50048E+01 -9.68008E+00 2.02692E+01 1 130 71 -6.90768E-01 6.69611E+00 1.00404E+01 5.00001E-01 1.00404E+01 -1.54859E+01 -8.60033E+00 2.03614E+01 1 132 72 -6.64957E-01 6.50190E+00 1.04758E+01 5.00001E-01 1.04758E+01 -1.59299E+01 -7.54309E+00 2.05037E+01 1 134 73 -6.38204E-01 6.33236E+00 1.08962E+01 5.00003E-01 1.08962E+01 -1.63371E+01 -6.51320E+00 2.06893E+01 1 136 74 -6.10557E-01 6.19044E+00 1.12997E+01 5.00006E-01 1.12997E+01 -1.67076E+01 -5.51607E+00 2.09106E+01 1 138 75 -5.82109E-01 6.07903E+00 1.16844E+01 5.00012E-01 1.16844E+01 -1.70420E+01 -4.55759E+00 2.11596E+01 1 140 76 -5.53003E-01 6.00074E+00 1.20484E+01 5.00026E-01 1.20484E+01 -1.73409E+01 -3.64401E+00 2.14278E+01 1 142 77 -5.23449E-01 5.95763E+00 1.23896E+01 5.00056E-01 1.23896E+01 -1.76052E+01 -2.78166E+00 2.17068E+01 1 144 78 -4.93716E-01 5.95087E+00 1.27060E+01 5.00119E-01 1.27060E+01 -1.78364E+01 -1.97646E+00 2.19883E+01 1 146 79 -4.64129E-01 5.98053E+00 1.29962E+01 5.00252E-01 1.29962E+01 -1.80363E+01 -1.23339E+00 2.22650E+01 1 148 80 -4.35044E-01 6.04542E+00 1.32592E+01 5.00524E-01 1.32592E+01 -1.82072E+01 -5.55794E-01 2.25304E+01 1 150 81 -4.06813E-01 6.14317E+00 1.34951E+01 5.01060E-01 1.34951E+01 -1.83518E+01 5.50633E-02 2.27796E+01 1 152 82 -3.79754E-01 6.27045E+00 1.37045E+01 5.02074E-01 1.37045E+01 -1.84733E+01 6.00267E-01 2.30095E+01 1 154 83 -3.54122E-01 6.42331E+00 1.38890E+01 5.03902E-01 1.38890E+01 -1.85747E+01 1.08324E+00 2.32185E+01 1 156 84 -3.30106E-01 6.59733E+00 1.40509E+01 5.07038E-01 1.40509E+01 -1.86590E+01 1.50973E+00 2.34065E+01 1 158 85 -3.07839E-01 6.78771E+00 1.41931E+01 5.12141E-01 1.41931E+01 -1.87285E+01 1.88817E+00 2.35747E+01 1 160 86 -2.87429E-01 6.98885E+00 1.43191E+01 5.20013E-01 1.43191E+01 -1.87851E+01 2.23083E+00 2.37254E+01 1 162 87 -2.69002E-01 7.19374E+00 1.44333E+01 5.31502E-01 1.44333E+01 -1.88289E+01 2.55551E+00 2.38616E+01 1 164 88 -2.52755E-01 7.39303E+00 1.45407E+01 5.47298E-01 1.45407E+01 -1.88579E+01 2.88643E+00 2.39872E+01 1 166 89 -2.38994E-01 7.57492E+00 1.46458E+01 5.67537E-01 1.46458E+01 -1.88683E+01 3.25048E+00 2.41056E+01 1 168 90 -2.28038E-01 7.72789E+00 1.47508E+01 5.91351E-01 1.47508E+01 -1.88555E+01 3.66560E+00 2.42189E+01 1 170 91 -2.19934E-01 7.84697E+00 1.48549E+01 6.17038E-01 1.48549E+01 -1.88180E+01 4.13036E+00 2.43279E+01 1 172 92 -2.14325E-01 7.93637E+00 1.49561E+01 6.43066E-01 1.49561E+01 -1.87582E+01 4.63022E+00 2.44335E+01 1 174 93 -2.10694E-01 8.00454E+00 1.50532E+01 6.68684E-01 1.50532E+01 -1.86798E+01 5.15088E+00 2.45370E+01 1 176 94 -2.08605E-01 8.05922E+00 1.51458E+01 6.93738E-01 1.51458E+01 -1.85858E+01 5.68317E+00 2.46399E+01 1 178 95 -2.07769E-01 8.10577E+00 1.52337E+01 7.18361E-01 1.52337E+01 -1.84783E+01 6.22196E+00 2.47432E+01 1 180 96 -2.08028E-01 8.14719E+00 1.53170E+01 7.42799E-01 1.53170E+01 -1.83582E+01 6.76440E+00 2.48474E+01 1 182 97 -2.09335E-01 8.18447E+00 1.53953E+01 7.67351E-01 1.53953E+01 -1.82261E+01 7.30870E+00 2.49525E+01 1 184 98 -2.11749E-01 8.21659E+00 1.54681E+01 7.92350E-01 1.54681E+01 -1.80818E+01 7.85332E+00 2.50577E+01 1 186 99 -2.15455E-01 8.24018E+00 1.55341E+01 8.18166E-01 1.55341E+01 -1.79248E+01 8.39606E+00 2.51615E+01 1 188 100 -2.20819E-01 8.24845E+00 1.55911E+01 8.45176E-01 1.55911E+01 -1.77543E+01 8.93255E+00 2.52604E+01 1 190 101 -2.28470E-01 8.22947E+00 1.56354E+01 8.73606E-01 1.56354E+01 -1.75703E+01 9.45288E+00 2.53483E+01 1 192 102 -2.39308E-01 8.16546E+00 1.56609E+01 9.02951E-01 1.56609E+01 -1.73756E+01 9.93529E+00 2.54143E+01 1 194 103 -2.54047E-01 8.04141E+00 1.56612E+01 9.30947E-01 1.56612E+01 -1.71795E+01 1.03454E+01 2.54447E+01 1 196 104 -2.72438E-01 7.86433E+00 1.56357E+01 9.54257E-01 1.56357E+01 -1.69912E+01 1.06661E+01 2.54350E+01 1 198 105 -2.93825E-01 7.65901E+00 1.55900E+01 9.71457E-01 1.55900E+01 -1.68061E+01 1.09246E+01 2.53937E+01 1 200 106 -3.18006E-01 7.44725E+00 1.55279E+01 9.83185E-01 1.55279E+01 -1.66094E+01 1.11636E+01 2.53301E+01 1 202 107 -3.45050E-01 7.24419E+00 1.54498E+01 9.90669E-01 1.54498E+01 -1.63862E+01 1.14160E+01 2.52493E+01 1 204 108 -3.74993E-01 7.06146E+00 1.53535E+01 9.95125E-01 1.53535E+01 -1.61239E+01 1.17029E+01 2.51529E+01 1 206 109 -4.07673E-01 6.90917E+00 1.52358E+01 9.97593E-01 1.52358E+01 -1.58131E+01 1.20368E+01 2.50413E+01 1 208 110 -4.42636E-01 6.79632E+00 1.50934E+01 9.98864E-01 1.50934E+01 -1.54478E+01 1.24239E+01 2.49158E+01 1 210 111 -4.79128E-01 6.72996E+00 1.49237E+01 9.99479E-01 1.49237E+01 -1.50259E+01 1.28651E+01 2.47792E+01 1 212 112 -5.16213E-01 6.71382E+00 1.47258E+01 9.99762E-01 1.47258E+01 -1.45499E+01 1.33563E+01 2.46362E+01 1 214 113 -5.52981E-01 6.74770E+00 1.44996E+01 9.99890E-01 1.44996E+01 -1.40259E+01 1.38901E+01 2.44929E+01 1 216 114 -5.88726E-01 6.82814E+00 1.42462E+01 9.99948E-01 1.42462E+01 -1.34613E+01 1.44580E+01 2.43556E+01 1 218 115 -6.23006E-01 6.94979E+00 1.39663E+01 9.99974E-01 1.39663E+01 -1.28635E+01 1.50522E+01 2.42301E+01 1 220 116 -6.55603E-01 7.10678E+00 1.36606E+01 9.99987E-01 1.36606E+01 -1.22388E+01 1.56665E+01 2.41213E+01 1 222 117 -6.86460E-01 7.29350E+00 1.33290E+01 9.99993E-01 1.33290E+01 -1.15921E+01 1.62961E+01 2.40334E+01 1 224 118 -7.15611E-01 7.50500E+00 1.29710E+01 9.99996E-01 1.29710E+01 -1.09276E+01 1.69377E+01 2.39697E+01 1 226 119 -7.43141E-01 7.73705E+00 1.25855E+01 9.99998E-01 1.25855E+01 -1.02484E+01 1.75890E+01 2.39332E+01 1 228 120 -7.69154E-01 7.98608E+00 1.21708E+01 9.99999E-01 1.21708E+01 -9.55719E+00 1.82483E+01 2.39263E+01 1 230 121 -7.93758E-01 8.24911E+00 1.17248E+01 9.99999E-01 1.17248E+01 -8.85617E+00 1.89146E+01 2.39513E+01 1 232 122 -8.17058E-01 8.52365E+00 1.12447E+01 9.99999E-01 1.12447E+01 -8.14744E+00 1.95872E+01 2.40101E+01 1 234 123 -8.39147E-01 8.80752E+00 1.07270E+01 1.00000E+00 1.07270E+01 -7.43300E+00 2.02657E+01 2.41043E+01 1 236 124 -8.60109E-01 9.09884E+00 1.01671E+01 1.00000E+00 1.01671E+01 -6.71485E+00 2.09498E+01 2.42354E+01 1 238 125 -8.80012E-01 9.39584E+00 9.55955E+00 1.00000E+00 9.55955E+00 -5.99510E+00 2.16393E+01 2.44046E+01 1 240 126 -8.98909E-01 9.69683E+00 8.89718E+00 1.00000E+00 8.89718E+00 -5.27598E+00 2.23337E+01 2.46128E+01 1 242 127 -9.16832E-01 1.00000E+01 8.17062E+00 1.00000E+00 8.17062E+00 -4.55994E+00 2.30322E+01 2.48603E+01 1 244 128 -9.33787E-01 1.03032E+01 7.36720E+00 1.00000E+00 7.36720E+00 -3.84954E+00 2.37332E+01 2.51468E+01 1 246 129 -9.49739E-01 1.06035E+01 6.46906E+00 1.00000E+00 6.46906E+00 -3.14734E+00 2.44329E+01 2.54700E+01 1 248 130 -9.64576E-01 1.08964E+01 5.44965E+00 1.00000E+00 5.44965E+00 -2.45529E+00 2.51232E+01 2.58245E+01 1 250 131 -9.78030E-01 1.11738E+01 4.26719E+00 1.00000E+00 4.26719E+00 -1.77332E+00 2.57867E+01 2.61975E+01 1 252 132 -9.89442E-01 1.14182E+01 2.85325E+00 1.00000E+00 2.85325E+00 -1.09549E+00 2.63814E+01 2.65578E+01 1 254 133 -9.97102E-01 1.15871E+01 1.11458E+00 1.00000E+00 1.11458E+00 -4.03029E-01 2.67988E+01 2.68250E+01 1 256 134 -9.97610E-01 1.15985E+01 -1.89316E-09 1.00000E+00 -8.83919E-01 3.18284E-01 2.68270E+01 2.68434E+01 1 258 135 -9.90506E-01 1.14414E+01 -6.33651E-09 1.00000E+00 -2.68133E+00 1.02132E+00 2.64384E+01 2.65936E+01 1 260 136 -9.79347E-01 1.12015E+01 -1.14286E-08 1.00000E+00 -4.13046E+00 1.70182E+00 2.58538E+01 2.62370E+01 1 262 137 -9.66055E-01 1.09263E+01 -1.78976E-08 1.00000E+00 -5.33453E+00 2.38353E+00 2.51943E+01 2.58630E+01 1 264 138 -9.51341E-01 1.06345E+01 -2.66035E-08 1.00000E+00 -6.36897E+00 3.07467E+00 2.45055E+01 2.55056E+01 1 266 139 -9.35497E-01 1.03347E+01 -3.87396E-08 1.00000E+00 -7.27844E+00 3.77598E+00 2.38062E+01 2.51788E+01 1 268 140 -9.18642E-01 1.00316E+01 -5.61045E-08 1.00000E+00 -8.09082E+00 4.48568E+00 2.31052E+01 2.48884E+01 1 270 141 -9.00819E-01 9.72832E+00 -8.15187E-08 1.00000E+00 -8.82475E+00 5.20127E+00 2.24062E+01 2.46367E+01 1 272 142 -8.82024E-01 9.42701E+00 -1.19530E-07 1.00000E+00 -9.49332E+00 5.92020E+00 2.17113E+01 2.44244E+01 1 274 143 -8.62228E-01 9.12950E+00 -1.77657E-07 1.00000E+00 -1.01062E+01 6.64000E+00 2.10213E+01 2.42512E+01 1 276 144 -8.41380E-01 8.83752E+00 -2.68649E-07 1.00000E+00 -1.06708E+01 7.35842E+00 2.03366E+01 2.41162E+01 1 278 145 -8.19411E-01 8.55278E+00 -4.14706E-07 1.00000E+00 -1.11927E+01 8.07333E+00 1.96576E+01 2.40182E+01 1 280 146 -7.96242E-01 8.27718E+00 -6.55607E-07 1.00000E+00 -1.16765E+01 8.78274E+00 1.89843E+01 2.39558E+01 1 282 147 -7.71778E-01 8.01284E+00 -1.06482E-06 1.00000E+00 -1.21259E+01 9.48466E+00 1.83173E+01 2.39274E+01 1 284 148 -7.45918E-01 7.76223E+00 -1.78253E-06 1.00000E+00 -1.25437E+01 1.01770E+01 1.76573E+01 2.39310E+01 1 286 149 -7.18551E-01 7.52827E+00 -3.08543E-06 1.00000E+00 -1.29321E+01 1.08576E+01 1.70051E+01 2.39646E+01 1 288 150 -6.89575E-01 7.31445E+00 -5.53920E-06 1.00001E+00 -1.32929E+01 1.15237E+01 1.63624E+01 2.40255E+01 1 290 151 -6.58900E-01 7.12494E+00 -1.03415E-05 1.00001E+00 -1.36272E+01 1.21723E+01 1.57315E+01 2.41111E+01 1 292 152 -6.26487E-01 6.96461E+00 -2.01118E-05 1.00002E+00 -1.39356E+01 1.27995E+01 1.51155E+01 2.42179E+01 1 294 153 -5.92381E-01 6.83902E+00 -4.07322E-05 1.00005E+00 -1.42182E+01 1.34003E+01 1.45190E+01 2.43419E+01 1 296 154 -5.56779E-01 6.75402E+00 -8.56077E-05 1.00010E+00 -1.44744E+01 1.39686E+01 1.39481E+01 2.44781E+01 1 298 155 -5.20096E-01 6.71506E+00 -1.85150E-04 1.00022E+00 -1.47034E+01 1.44971E+01 1.34104E+01 2.46210E+01 1 300 156 -4.83011E-01 6.72587E+00 -4.06212E-04 1.00048E+00 -1.49043E+01 1.49784E+01 1.29144E+01 2.47643E+01 1 302 157 -4.46414E-01 6.78706E+00 -8.86734E-04 1.00105E+00 -1.50769E+01 1.54061E+01 1.24677E+01 2.49019E+01 1 304 158 -4.11248E-01 6.89532E+00 -1.88605E-03 1.00223E+00 -1.52221E+01 1.57774E+01 1.20749E+01 2.50288E+01 1 306 159 -3.78297E-01 7.04390E+00 -3.83946E-03 1.00454E+00 -1.53423E+01 1.60937E+01 1.17356E+01 2.51419E+01 1 308 160 -3.48048E-01 7.22394E+00 -7.39351E-03 1.00874E+00 -1.54406E+01 1.63607E+01 1.14441E+01 2.52399E+01 1 310 161 -3.20695E-01 7.42542E+00 -1.33947E-02 1.01586E+00 -1.55205E+01 1.65876E+01 1.11889E+01 2.53224E+01 1 312 162 -2.96220E-01 7.63689E+00 -2.28040E-02 1.02708E+00 -1.55842E+01 1.67863E+01 1.09498E+01 2.53879E+01 1 314 163 -2.74558E-01 7.84358E+00 -3.64667E-02 1.04364E+00 -1.56318E+01 1.69717E+01 1.06955E+01 2.54320E+01 1 316 164 -2.55862E-01 8.02453E+00 -5.44690E-02 1.06627E+00 -1.56596E+01 1.71588E+01 1.03840E+01 2.54455E+01 1 318 165 -2.40710E-01 8.15505E+00 -7.49156E-02 1.09389E+00 -1.56623E+01 1.73542E+01 9.98381E+00 2.54195E+01 1 319 UZ 166 -2.38045E-01 8.17450E+00 -7.91542E-02 1.10000E+00 -1.56594E+01 1.73955E+01 9.88934E+00 2.54090E+01 Total Time 0.146E+01 man ... done Saving to b.1, s.1, and d.1 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo man is done Doing mtn Version 07p Copying demo mtn ... done Demo mtn is started mtn : first run : continue saddle-node homoclinic orbit gfortran -fopenmp -O -c mtn.f90 -o mtn.o gfortran -fopenmp -O mtn.o -o mtn.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting mtn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(35) PAR(36) 1 1 EP 1 6.00000E+00 5.65000E+00 5.75529E+00 3.33439E+00 6.72976E-02 1.43130E-02 -7.41895E-02 1 10 2 6.15431E+00 5.80382E+00 5.90989E+00 3.44467E+00 6.78467E-02 1.26651E-02 -6.62066E-02 1 20 3 6.44134E+00 6.08838E+00 6.19463E+00 3.64557E+00 6.88004E-02 6.95992E-03 -6.49098E-02 1 26 UZ 4 6.61046E+00 6.25491E+00 6.36144E+00 3.76410E+00 6.93248E-02 4.58970E-09 -6.42344E-02 1 30 EP 5 6.72587E+00 6.36770E+00 6.47496E+00 3.84503E+00 6.96681E-02 -8.90554E-03 -6.38060E-02 Total Time 0.827E-01 mtn ... done Saving to b.1, s.1, and d.1 ... done mtn : second run : continue in opposite direction Starting mtn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(35) PAR(36) 1 3 UZ 6 5.98510E+00 5.63528E+00 5.75124E+00 3.32592E+00 6.72432E-02 1.44250E-02 -6.70735E-02 1 10 7 5.83470E+00 5.48503E+00 5.58944E+00 3.22137E+00 6.66784E-02 1.53632E-02 -6.79246E-02 1 20 8 5.54929E+00 5.19838E+00 5.29760E+00 3.02251E+00 6.55258E-02 1.53973E-02 -6.97842E-02 1 30 9 5.26577E+00 4.90939E+00 4.99651E+00 2.82579E+00 6.42620E-02 8.88160E-03 -7.20357E-02 1 34 UZ 10 5.18044E+00 4.81981E+00 4.90176E+00 2.76674E+00 6.38556E-02 -4.64994E-09 -7.28128E-02 1 40 EP 11 5.04417E+00 4.64789E+00 4.74286E+00 2.67245E+00 6.31793E-02 -6.04878E-01 -7.41660E-02 Total Time 0.108E+00 mtn ... done Appending fort.7 to b.1 ... done Appending fort.8 to s.1 ... done Appending fort.9 to d.1 ... done mtn : third run : switch to saddle homoclinic orbit Starting mtn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(29) PAR(30) 1 10 12 7.11454E+00 6.74810E+00 6.85680E+00 4.11742E+00 7.08176E-02 -4.64986E-01 3.18357E-03 1 20 13 9.17684E+00 8.75258E+00 8.87942E+00 5.55932E+00 7.67874E-02 -4.68491E-01 1.60931E-02 1 30 14 1.21084E+01 1.15938E+01 1.17604E+01 7.60527E+00 8.54348E-02 -4.71887E-01 3.06965E-02 1 40 EP 15 1.50379E+01 1.44337E+01 1.46453E+01 9.65116E+00 9.42805E-02 -4.74379E-01 4.14457E-02 Total Time 0.917E-01 mtn ... done Appending fort.7 to b.1 ... done Appending fort.8 to s.1 ... done Appending fort.9 to d.1 ... done mtn : fourth run : continue in reverse direction Starting mtn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(29) PAR(30) 1 38 UZ 16 6.61046E+00 6.25491E+00 6.36145E+00 3.76407E+00 6.93248E-02 -4.63660E-01 3.13180E-08 1 40 EP 17 6.02955E+00 5.68237E+00 5.78648E+00 3.35683E+00 6.74688E-02 -4.61141E-01 -2.90787E-03 Total Time 0.734E-01 mtn ... done Saving to b.4, s.4, and d.4 ... done mtn : fifth run : other saddle homoclinic orbit branch Starting mtn ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(29) PAR(30) 1 10 16 4.96653E+00 4.58259E+00 4.64713E+00 2.61648E+00 6.29844E-02 -4.38249E-01 4.94348E-03 1 20 17 4.92526E+00 4.19028E+00 4.11025E+00 2.38232E+00 7.96063E-02 -3.39930E-01 3.28818E-02 1 30 18 7.09211E+00 5.25706E+00 4.73773E+00 2.94161E+00 1.58706E-01 -1.69292E-01 3.87632E-02 1 40 EP 19 1.10180E+01 7.33083E+00 6.16199E+00 4.08611E+00 2.80978E-01 -3.48314E-02 2.10456E-02 Total Time 0.968E-01 mtn ... done Appending fort.7 to b.1 ... done Appending fort.8 to s.1 ... done Appending fort.9 to d.1 ... done mtn : sixth run : 3-parameter continuation of non-central saddle-node homoclinic Starting mtn ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) PAR(1) PAR(2) 1 22 LP 20 1.08123E-02 5.32588E+00 5.41563E+00 3.12891E+00 5.67362E+00 6.60818E-02 1 31 UZ 21 1.00000E-02 4.81974E+00 4.90163E+00 2.76647E+00 5.18037E+00 6.38553E-02 1 40 EP 22 4.10657E-03 4.28276E+00 4.35967E+00 2.32395E+00 4.71386E+00 6.10168E-02 Total Time 0.123E+00 mtn ... done Saving to b.6, s.6, and d.6 ... done Demo mtn is done Doing nag Version 07p Copying demo nag ... done Demo nag is started Demo nag is started nag : first run : part of a branch of heteroclinic orbits gfortran -fopenmp -O -c nag.f90 -o nag.o gfortran -fopenmp -O nag.o -o nag.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting nag ... BR PT TY LAB PAR(1) L2-NORM PAR(2) PAR(3) PAR(4) PAR(5) PAR(6) PAR(7) 1 1 EP 1 5.00000E-01 6.97883E-01 0.00000E+00 5.41274E-16 5.41274E-16 7.07107E-01 -7.07107E-01 8.16497E-01 1 13 UZ 2 7.50000E-01 6.97880E-01 -3.53553E-01 1.06326E-09 2.36680E-14 7.07107E-01 -7.07107E-01 8.16497E-01 1 22 UZ 3 1.00000E+00 6.97880E-01 -7.07107E-01 7.04762E-11 3.69265E-07 7.07107E-01 -7.07107E-01 8.16497E-01 Total Time 0.292E-01 nag ... done nag : second run : compute in opposite direction Starting nag ... BR PT TY LAB PAR(1) L2-NORM PAR(2) PAR(3) PAR(4) PAR(5) PAR(6) PAR(7) 1 1 EP 1 5.00000E-01 6.97883E-01 0.00000E+00 5.41274E-16 5.41274E-16 7.07107E-01 -7.07107E-01 8.16497E-01 1 13 UZ 2 2.50000E-01 6.97880E-01 3.53553E-01 1.06588E-09 2.38876E-14 7.07107E-01 -7.07107E-01 8.16497E-01 1 22 UZ 3 9.00598E-10 6.97880E-01 7.07107E-01 7.37791E-11 3.85821E-07 7.07107E-01 -7.07107E-01 8.16497E-01 Total Time 0.117E+00 nag ... done Saving to b.nag, s.nag, and d.nag ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo nag is done Doing nep Version 07p Copying demo nep ... done Demo nep is started ***Compute the basic solution family*** gfortran -fopenmp -O -c nep.f90 -o nep.o gfortran -fopenmp -O nep.o -o nep.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting nep ... BR PT TY LAB PAR(1) MAX U(3) MAX U(1) MAX U(2) MAX U(3) PAR(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 12 UZ 2 2.00000E+00 2.00000E+00 0.00000E+00 0.00000E+00 2.00000E+00 4.00000E+00 1 22 UZ 3 4.00000E+00 4.00000E+00 0.00000E+00 0.00000E+00 4.00000E+00 8.00000E+00 1 27 BP 4 4.93480E+00 4.93480E+00 0.00000E+00 0.00000E+00 4.93480E+00 9.86960E+00 1 32 UZ 5 6.00000E+00 6.00000E+00 0.00000E+00 0.00000E+00 6.00000E+00 1.20000E+01 1 42 UZ 6 8.00000E+00 8.00000E+00 0.00000E+00 0.00000E+00 8.00000E+00 1.60000E+01 1 52 UZ 7 1.00000E+01 1.00000E+01 0.00000E+00 0.00000E+00 1.00000E+01 2.00000E+01 Total Time 0.409E-01 nep ... done ***Compute bifurcating solution families*** Starting nep ... BR PT TY LAB PAR(1) MAX U(3) MAX U(1) MAX U(2) MAX U(3) PAR(2) 2 11 UZ 8 6.00000E+00 6.00000E+00 7.91022E-23 2.91918E+00 6.00000E+00 9.86960E+00 2 17 UZ 9 8.00000E+00 8.00000E+00 7.29865E-31 4.95193E+00 8.00000E+00 9.86960E+00 2 22 UZ 10 1.00000E+01 1.00000E+01 9.93611E-33 6.36566E+00 1.00000E+01 9.86960E+00 Total Time 0.303E-01 nep ... done Saving to b.nep, s.nep, and d.nep ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo nep is done Doing non Version 07p Copying demo non ... done Demo non is started Demo non is started non : compute a solution branch gfortran -fopenmp -O -c non.f90 -o non.o gfortran -fopenmp -O non.o -o non.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting non ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) 1 1 EP 1 0.00000E+00 5.77350E-01 0.00000E+00 0.00000E+00 1.00000E+00 1 6 UZ 2 1.00010E+00 6.54564E-01 1.27305E-01 5.04983E-01 1.00000E+00 1 9 UZ 3 3.00000E+00 1.12309E+00 3.97315E-01 1.54786E+00 1.00000E+00 1 15 LP 4 1.40745E+01 9.00097E+00 3.63878E+00 1.06074E+01 1.00000E+00 1 20 UZ 5 3.00000E+00 2.59410E+01 9.69000E+00 1.49891E+01 1.00000E+00 1 22 UZ 6 9.99992E-01 3.32504E+01 1.21314E+01 1.68243E+01 1.00000E+00 1 36 EP 7 3.34926E-06 1.01240E+02 3.44087E+01 4.13201E+01 1.00000E+00 Total Time 0.358E-01 non ... done Saving to b.non, s.non, and d.non ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo non is done Doing obv Version 07p Copying demo obv ... done Demo obv is started Demo obv is started obv : first run : locate 1-parameter extrema as bifurcation points gfortran -fopenmp -O -c obv.f90 -o obv.o gfortran -fopenmp -O obv.o -o obv.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting obv ... BR PT TY LAB PAR(10) L2-NORM PAR(1) PAR(16) PAR(17) PAR(18) PAR(13) PAR(14) 1 1 EP 1 1.00000E+00 0.00000E+00 1.00000E-03 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 12 BP 2 9.23446E-01 3.10269E-01 9.24364E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 27 BP 3 1.42526E+00 2.60514E+00 3.50591E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 32 BP 4 1.32627E+00 4.42622E+00 3.05893E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 40 EP 5 2.55933E+00 7.78592E+00 1.47229E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.517E-01 obv ... done Saving to b.obv, s.obv, and d.obv ... done obv : second run : compute a few step on the first bifurcating branch Starting obv ... BR PT TY LAB PAR(10) L2-NORM PAR(1) PAR(16) PAR(17) PAR(18) PAR(13) PAR(14) 2 5 EP 6 9.23446E-01 3.11427E-01 9.24365E-01 6.54346E-04 -8.64174E-05 -1.15834E-06 -4.42778E-02 -4.42778E-02 Total Time 0.166E-01 obv ... done Saving to b.1, s.1, and d.1 ... done obv : third run : locate 2-parameter extremum Starting obv ... BR PT TY LAB PAR(10) L2-NORM PAR(1) PAR(2) PAR(17) PAR(18) PAR(13) PAR(14) 2 49 UZ 7 1.06300E+00 1.09790E+00 2.22971E+00 7.63889E-01 3.87678E-08 -7.24365E-04 -3.99530E-02 -3.99530E-02 2 78 UZ 8 3.60824E-01 3.46026E+00 6.86096E-01 8.51279E-01 1.85134E-06 -1.20936E-01 -8.14378E-02 -8.14378E-02 2 82 UZ 9 5.60413E-01 2.99427E+00 2.45898E-01 1.80708E+00 1.01848E-01 1.16330E-06 -6.88718E-02 -6.88717E-02 2 100 EP 10 3.92430E+00 3.00840E+00 9.28474E-05 6.06423E+00 3.35438E-01 9.79791E-04 -6.93169E-02 -6.93157E-02 Total Time 0.125E+00 obv ... done Saving to b.2, s.2, and d.2 ... done obv : fourth run : locate 3-parameter extremum Starting obv ... BR PT TY LAB PAR(10) L2-NORM PAR(1) PAR(2) PAR(3) PAR(18) PAR(13) PAR(14) 2 22 UZ 11 2.84593E-01 3.32435E+00 3.77205E-01 2.37830E-01 4.67624E-01 5.00193E-06 -7.72328E-02 -7.72328E-02 2 25 EP 12 2.90718E-01 3.22684E+00 3.13288E-01 1.43559E-01 6.25423E-01 2.40089E-02 -7.47261E-02 -7.47261E-02 Total Time 0.392E-01 obv ... done Saving to b.3, s.3, and d.3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo obv is done Doing ops Version 07p Copying demo ops ... done Demo ops is started Demo ops is started ops : first run : locate a Hopf bifurcation gfortran -fopenmp -O -c ops.f90 -o ops.o gfortran -fopenmp -O ops.o -o ops.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ops ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) U(3) 1 1 EP 1 9.00000E-01 1.82937E+00 9.00000E-01 1.31400E+00 9.00000E-01 1 7 HB 2 9.37557E-01 1.87497E+00 9.37557E-01 1.32570E+00 9.37557E-01 1 9 UZ 3 9.49998E-01 1.88936E+00 9.49998E-01 1.32842E+00 9.49998E-01 Total Time 0.103E-01 ops ... done ops : second run : compute a branch of periodic solutions Starting ops ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 2 30 UZ 4 9.29999E-01 1.83533E+00 1.20239E+00 1.44359E+00 9.75951E-01 5.01303E+00 2 52 LP 5 9.21972E-01 1.75279E+00 1.51133E+00 1.47811E+00 1.03204E+00 6.61494E+00 2 75 LP 6 9.28528E-01 1.97363E+00 2.00512E+00 1.51718E+00 1.20729E+00 1.01841E+01 2 101 UZ 7 9.20003E-01 2.07774E+00 2.04165E+00 1.52622E+00 1.21404E+00 9.81880E+00 2 116 EP 8 8.99164E-01 2.09994E+00 2.04162E+00 1.54078E+00 1.19926E+00 9.29532E+00 Total Time 0.183E+00 ops ... done Saving to b.0, s.0, and d.0 ... done ops : third run : locate a 1-parameter extremum as a bifurcation Starting ops ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD PAR(12) PAR(22) 2 17 BP 9 9.21972E-01 1.75279E+00 1.51132E+00 1.47820E+00 1.03184E+00 6.61496E+00 0.00000E+00 0.00000E+00 2 25 EP 10 9.27913E-01 1.89497E+00 1.95157E+00 1.51144E+00 1.18523E+00 9.87441E+00 0.00000E+00 0.00000E+00 Total Time 0.157E+00 ops ... done ops : fourth run : switch branches to generate adjoint variables Starting ops ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD PAR(12) PAR(22) 3 5 EP 11 9.21972E-01 1.75279E+00 1.51151E+00 1.47775E+00 1.03227E+00 6.61496E+00 8.17565E-02 3.51110E-03 Total Time 0.433E-01 ops ... done Saving to b.1, s.1, and d.1 ... done ops : fifth run : a 2-parameter branch of 1-parameter extrema Starting ops ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PERIOD PAR(22) 3 10 UZ 12 9.30001E-01 1.75194E+00 1.56395E+00 1.47651E+00 1.03332E+00 4.71848E+00 6.86504E+00 2.69161E-03 3 70 UZ 13 9.30000E-01 1.97335E+00 2.01156E+00 1.51330E+00 1.19810E+00 4.19035E+00 1.01857E+01 2.13545E-03 3 73 UZ 14 9.20000E-01 1.97827E+00 1.96539E+00 1.55346E+00 1.28507E+00 2.85567E+00 1.02005E+01 1.67579E-03 3 75 UZ 15 9.17752E-01 1.98754E+00 1.92356E+00 1.58817E+00 1.35712E+00 2.20621E+00 1.02505E+01 -3.36046E-07 3 77 UZ 16 9.20000E-01 2.00253E+00 1.86733E+00 1.62917E+00 1.44207E+00 1.66829E+00 1.03170E+01 -2.41937E-03 3 79 UZ 17 9.30000E-01 2.01120E+00 1.76992E+00 1.70010E+00 1.61175E+00 8.84511E-01 1.03013E+01 -3.74641E-03 3 102 MX 18 9.48227E-01 1.88733E+00 9.49547E-01 1.32965E+00 9.49505E-01 3.09310E-01 7.53355E+00 -7.63592E-04 Total Time 0.564E+00 ops ... done Saving to b.2, s.2, and d.2 ... done ops : sixth run : a 3-parameter branch of 2-parameter extrema Starting ops ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(1) PERIOD 3 19 UZ 19 9.31739E-01 1.84299E+00 1.84079E+00 1.46287E+00 1.27355E+00 2.17864E+00 9.99977E-02 9.19762E+00 3 24 UZ 20 9.31445E-01 1.80832E+00 1.80387E+00 1.44930E+00 1.25801E+00 2.10144E+00 4.99989E-02 8.92400E+00 3 38 UZ 21 9.29952E-01 1.77676E+00 1.75407E+00 1.43855E+00 1.23972E+00 1.99866E+00 9.99995E-03 8.56601E+00 3 45 UZ 22 9.29470E-01 1.77163E+00 1.74344E+00 1.43719E+00 1.23599E+00 1.97623E+00 4.99569E-03 8.48945E+00 3 58 MX 23 9.28962E-01 1.76705E+00 1.75200E+00 1.43609E+00 1.23227E+00 1.95779E+00 1.63910E-03 8.41829E+00 Total Time 0.907E+00 ops ... done Saving to b.3, s.3, and d.3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ops is done Doing opt Version 07p Copying demo opt ... done Demo opt is started Demo opt is started opt : first run : one free equation parameter gfortran -fopenmp -O -c opt.f90 -o opt.o gfortran -fopenmp -O opt.o -o opt.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting opt ... BR PT TY LAB FOPT L2-NORM U(1) PAR(1) PAR(2) PAR(3) PAR(4) 1 1 EP 1 1.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 19 LP 2 1.41421E+00 7.07091E-01 7.07091E-01 7.07123E-01 0.00000E+00 0.00000E+00 0.00000E+00 1 25 EP 3 1.29995E+00 3.71523E-01 3.71523E-01 9.28424E-01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.108E-01 opt ... done Saving to b.1, s.1, and d.1 ... done opt : second run : two free equation parameters Starting opt ... BR PT TY LAB FOPT L2-NORM U(1) PAR(1) PAR(2) PAR(3) PAR(4) 2 15 LP 4 1.73205E+00 5.77350E-01 5.77350E-01 5.77350E-01 5.77350E-01 0.00000E+00 0.00000E+00 2 25 EP 5 1.58659E+00 3.65097E-01 3.65097E-01 3.65097E-01 8.56393E-01 0.00000E+00 0.00000E+00 Total Time 0.161E-01 opt ... done Saving to b.2, s.2, and d.2 ... done opt : third run : three free equation parameters Starting opt ... BR PT TY LAB FOPT L2-NORM U(1) PAR(1) PAR(2) PAR(3) PAR(4) 4 13 LP 6 2.00000E+00 5.00000E-01 5.00000E-01 5.00000E-01 5.00000E-01 5.00000E-01 0.00000E+00 4 25 EP 7 1.76842E+00 3.07268E-01 3.07268E-01 3.07268E-01 3.07268E-01 8.46617E-01 0.00000E+00 Total Time 0.162E-01 opt ... done Saving to b.3, s.3, and d.3 ... done opt : fourth run : four free equation parameters Starting opt ... BR PT TY LAB FOPT L2-NORM U(1) PAR(1) PAR(2) PAR(3) PAR(4) 6 11 LP 8 2.23607E+00 4.47201E-01 4.47201E-01 4.47201E-01 4.47201E-01 4.47201E-01 4.47265E-01 6 25 EP 9 1.91005E+00 2.65746E-01 2.65746E-01 2.65746E-01 2.65746E-01 2.65746E-01 8.47063E-01 Total Time 0.162E-01 opt ... done Saving to b.4, s.4, and d.4 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo opt is done Doing p2c Version 07p Copying demo p2c ... done Demo p2c is started find the Branch point gfortran -fopenmp -O -c p2c.f90 -o p2c.o gfortran -fopenmp -O p2c.o -o p2c.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting p2c ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 3 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.751E-02 p2c ... done find the Hopf bifurcation Starting p2c ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 82 HB 3 2.47368E+01 2.62685E+01 7.95602E+00 7.95602E+00 2.37368E+01 Total Time 0.434E-01 p2c ... done a solution branch starting from the Hopf bifurcation Starting p2c ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 3 39 UZ 4 2.10000E+01 2.14506E+01 1.18670E+01 1.39402E+01 2.77646E+01 8.16222E-01 Total Time 0.823E-01 p2c ... done continue zero eigenfunction until eigenvalue Starting p2c ... BR PT TY LAB PAR(12) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(11) PAR(10) 4 81 BP 5 -2.31854E-01 2.14506E+01 1.18671E+01 1.39409E+01 2.77645E+01 0.00000E+00 8.16222E-01 0.00000E+00 4 105 BP 6 3.33029E-09 2.14506E+01 1.18671E+01 1.39409E+01 2.77645E+01 0.00000E+00 8.16222E-01 0.00000E+00 Total Time 0.191E+00 p2c ... done switch to continuation of nontrivial eigenfunction Starting p2c ... BR PT TY LAB PAR(12) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(11) PAR(10) 5 156 UZ 7 -2.31854E-01 2.14754E+01 1.18671E+01 1.39407E+01 2.77645E+01 5.11113E-01 8.16222E-01 9.99999E-01 Total Time 0.481E+00 p2c ... done homotopy in (T,h1) Starting p2c ... BR PT TY LAB PAR(13) L2-NORM PAR(11) PAR(12) PAR(21) PAR(14) PAR(15) PAR(16) 5 151 UZ 8 1.22446E+00 2.16596E+01 8.16222E-01 -2.31854E-01 -1.28262E-05 0.00000E+00 0.00000E+00 0.00000E+00 5 322 UZ 9 1.67765E+00 2.63120E+01 8.16222E-01 -2.31854E-01 -1.45720E-09 0.00000E+00 0.00000E+00 0.00000E+00 5 455 UZ 10 2.12778E+00 2.70269E+01 8.16222E-01 -2.31854E-01 2.75336E-06 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.367E+01 p2c ... done homotopy in (r,h2) Starting p2c ... BR PT TY LAB PAR(11) L2-NORM PAR(1) PAR(12) PAR(14) PAR(15) PAR(16) PAR(17) 5 21 UZ 11 6.77173E-01 3.24194E+01 2.40579E+01 -2.89119E-02 0.00000E+00 0.00000E+00 0.00000E+00 4.35842E-01 Total Time 0.201E+00 p2c ... done homotopy in (T,r) Starting p2c ... BR PT TY LAB PAR(13) L2-NORM PAR(1) PAR(11) PAR(12) PAR(14) PAR(15) PAR(16) 5 56 UZ 12 3.00000E+00 3.33699E+01 2.40579E+01 6.77172E-01 -2.89116E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 123 UZ 13 4.00000E+00 3.40276E+01 2.40579E+01 6.77172E-01 -2.89116E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 206 UZ 14 5.00000E+00 3.44372E+01 2.40579E+01 6.77172E-01 -2.89116E-02 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.165E+01 p2c ... done fwd continuation in two system parameters Runner configured Starting p2c ... BR PT TY LAB PAR(1) L2-NORM PAR(3) PAR(11) PAR(12) PAR(14) PAR(15) PAR(16) 5 60 15 2.45899E+01 3.42269E+01 1.15634E+01 6.56644E-01 -2.78124E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 120 16 2.57549E+01 3.60133E+01 1.40141E+01 6.32475E-01 -3.90520E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 180 17 2.70653E+01 3.80472E+01 1.65559E+01 6.17012E-01 -6.34744E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 240 18 2.84334E+01 3.99991E+01 1.92663E+01 6.08542E-01 -1.00050E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 300 19 2.98749E+01 4.18722E+01 2.22766E+01 6.05665E-01 -1.49981E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 360 20 3.14353E+01 4.38029E+01 2.57400E+01 6.07623E-01 -2.16296E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 420 21 3.31701E+01 4.59130E+01 2.98243E+01 6.13940E-01 -3.03704E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 450 EP 22 3.41147E+01 4.70603E+01 3.21384E+01 6.18538E-01 -3.56903E-01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.363E+01 p2c ... done bwd continuation in two system parameters Starting p2c ... BR PT TY LAB PAR(1) L2-NORM PAR(3) PAR(11) PAR(12) PAR(14) PAR(15) PAR(16) 5 60 15 2.39787E+01 3.30478E+01 8.47199E+00 6.99275E-01 -3.79933E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 120 16 2.75245E+01 3.71005E+01 5.86553E+00 7.14914E-01 -8.33748E-02 0.00000E+00 0.00000E+00 0.00000E+00 5 180 17 3.17873E+01 4.22777E+01 5.08236E+00 6.97206E-01 -1.17889E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 240 18 3.56451E+01 4.68487E+01 4.68712E+00 6.80133E-01 -1.48361E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 300 19 4.16691E+01 5.39160E+01 4.29341E+00 6.56834E-01 -1.98121E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 360 20 4.75173E+01 6.12884E+01 4.03686E+00 6.38462E-01 -2.49601E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 420 21 5.29428E+01 6.84705E+01 3.85869E+00 6.24508E-01 -3.00035E-01 0.00000E+00 0.00000E+00 0.00000E+00 5 450 EP 22 5.55390E+01 7.17217E+01 3.78711E+00 6.18691E-01 -3.25013E-01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.325E+01 p2c ... done Relabeling done Merge done Saving to b.cont, s.cont, and d.cont ... done Deleting fort.* *.o *.exe *.*~ ... done Demo p2c is done Doing pcl Version 07p Copying demo pcl ... done Demo pcl is started 1st run - continue equilibrium 0 and branches of secondary equilibria gfortran -fopenmp -O -c pcl.f90 -o pcl.o gfortran -fopenmp -O pcl.o -o pcl.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pcl ... BR PT TY LAB rho L2-NORM xgamma ygamma zgamma 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 5 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 22 UZ 3 3.16000E+01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB rho L2-NORM xgamma ygamma zgamma 2 44 HB 4 2.47368E+01 2.62685E+01 7.95602E+00 7.95602E+00 2.37368E+01 BR PT TY LAB rho L2-NORM xgamma ygamma zgamma 2 44 HB 5 2.47368E+01 2.62685E+01 -7.95602E+00 -7.95602E+00 2.37368E+01 Total Time 0.288E-01 pcl ... done 2nd run - switch to the periodic orbit and continue in rho up to 24.0579 Starting pcl ... BR PT TY LAB rho L2-NORM MAX xgamma MAX ygamma MAX zgamma T 5 14 UZ 6 2.40579E+01 2.53995E+01 -5.52614E+00 -4.78811E+00 2.69153E+01 6.77172E-01 Total Time 0.510E-01 pcl ... done 3rd run - extend the system Starting pcl ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX zgamma MAX x h T 5 13 BP 7 -9.28359E+00 2.53995E+01 -5.52599E+00 -4.78799E+00 2.69150E+01 0.00000E+00 0.00000E+00 6.77172E-01 Total Time 0.627E-01 pcl ... done 4th run - normalize the Floquet bundle Starting pcl ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX zgamma MAX x h T 6 3 UZ 8 -9.28359E+00 2.54279E+01 -5.52599E+00 -4.78799E+00 2.69150E+01 1.25948E+00 1.00000E+00 6.77172E-01 Total Time 0.529E-01 pcl ... done 5th run - integrate backwards from the periodic orbit measures the distance to Sigma = { x=10 } in sigma+ UZ point corresponds to an intersection with Sigma Starting pcl ... BR PT TY LAB T+ L2-NORM MAX xgamma MAX ygamma MAX zgamma mu T sigma+ 6 70 UZ 9 1.44037E+00 3.67832E+01 -5.52610E+00 -4.78797E+00 2.69152E+01 -9.28359E+00 6.77172E-01 3.82884E-08 Total Time 0.591E+00 pcl ... done 6th run - integrate away from the equilibrium up to Sigma (second UZ is the one we want) Starting pcl ... BR PT TY LAB T- L2-NORM MAX xgamma MAX ygamma sigma- T+ mu T 6 9 UZ 10 1.80755E+00 3.69870E+01 -5.52591E+00 -4.78844E+00 1.39186E-08 1.44037E+00 -9.28359E+00 6.77172E-01 6 20 UZ 11 2.00236E+00 3.89244E+01 -5.52618E+00 -4.78808E+00 -1.54977E-07 1.44037E+00 -9.28359E+00 6.77172E-01 Total Time 0.318E+00 pcl ... done 7th run - put starting data for Lin vector and Lin gap in Zx, Zy, Zz and eta close the gap (with some intermediate solutions) Starting pcl ... BR PT TY LAB eta L2-NORM rho delta eps T- T+ mu 6 10 12 7.15053E+00 3.90445E+01 2.41358E+01 1.12175E-07 9.43779E-08 2.00369E+00 1.43115E+00 -9.24057E+00 6 20 13 6.46457E+00 3.92521E+01 2.42741E+01 1.41165E-07 8.52028E-08 2.00601E+00 1.41256E+00 -9.16517E+00 6 30 14 5.75175E+00 3.94178E+01 2.43909E+01 1.80959E-07 7.81913E-08 2.00792E+00 1.39233E+00 -9.10248E+00 6 40 15 4.99923E+00 3.95357E+01 2.44835E+01 2.42650E-07 7.30703E-08 2.00940E+00 1.36836E+00 -9.05344E+00 6 50 16 4.18400E+00 3.95925E+01 2.45463E+01 3.53992E-07 6.98000E-08 2.01039E+00 1.33746E+00 -9.02049E+00 6 60 17 3.29917E+00 3.95603E+01 2.45668E+01 5.62006E-07 6.87675E-08 2.01071E+00 1.29915E+00 -9.00980E+00 6 70 18 2.44398E+00 3.94199E+01 2.45339E+01 8.22689E-07 7.04313E-08 2.01019E+00 1.26574E+00 -9.02695E+00 6 80 19 1.70165E+00 3.91968E+01 2.44571E+01 9.86316E-07 7.44914E-08 2.00898E+00 1.24674E+00 -9.06735E+00 6 90 20 1.05370E+00 3.89140E+01 2.43469E+01 1.01192E-06 8.07623E-08 2.00720E+00 1.23920E+00 -9.12602E+00 6 100 21 4.75643E-01 3.85811E+01 2.42076E+01 9.35509E-07 8.94916E-08 2.00490E+00 1.23936E+00 -9.20124E+00 6 110 UZ 22 -9.49852E-09 3.82392E+01 2.40579E+01 8.16218E-07 1.00007E-07 2.00235E+00 1.24433E+00 -9.28359E+00 Total Time 0.108E+01 pcl ... done Saving to b.closegap, s.closegap, and d.closegap ... done 8th run - keep the gap closed and continue in rho,beta Runner configured Starting pcl ... BR PT TY LAB rho L2-NORM beta delta eps T- T+ mu 6 8 UZ 23 2.50000E+01 3.96914E+01 2.86312E+00 1.59326E-06 4.26760E-08 2.03387E+00 1.17225E+00 -9.01847E+00 6 108 UZ 24 8.00000E+01 1.17112E+02 7.41392E+00 3.59656E-03 5.95707E-18 2.01561E+00 4.58809E-01 -5.71085E+00 Total Time 0.114E+01 pcl ... done Starting pcl ... BR PT TY LAB rho L2-NORM beta delta eps T- T+ mu 6 40 LP 23 1.28928E+01 2.02496E+01 8.08222E-01 1.83909E-10 2.88615E-01 7.19787E-01 4.24571E+00 -2.38073E+01 Total Time 0.558E+00 pcl ... done Merge done Saving to b.cont, s.cont, and d.cont ... done Deleting fort.* *.o *.exe *.*~ ... done Done. Demo pcl is done Doing pd1 Version 07p Copying demo pd1 ... done Demo pd1 is started Demo pd1 is started pd1 : first run : time integration towards stationary state gfortran -fopenmp -O -c pd1.f90 -o pd1.o gfortran -fopenmp -O pd1.o -o pd1.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pd1 ... BR PT TY LAB TIME L2-NORM MAX U(1) 1 1 EP 1 0.00000E+00 7.07107E-01 1.00000E+00 1 50 2 2.29809E+00 8.80106E-01 9.97553E-01 1 100 3 4.79305E+00 9.32012E-01 9.99496E-01 1 150 4 7.29294E+00 9.38955E-01 9.99948E-01 1 200 5 9.79295E+00 9.39752E-01 1.00004E+00 1 205 UZ 6 1.00000E+01 9.39770E-01 1.00015E+00 Total Time 0.546E-01 pd1 ... done Saving to b.1, s.1, and d.1 ... done pd1 : second run : continuation of stationary state Starting pd1 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) 1 25 7 6.45158E+00 9.76756E-01 1.00001E+00 1 50 8 1.89456E+01 9.86502E-01 1.00000E+00 1 75 9 3.14437E+01 9.89539E-01 1.00002E+00 1 100 EP 10 4.39427E+01 9.91158E-01 1.00001E+00 Total Time 0.124E+00 pd1 ... done Saving to b.2, s.2, and d.2 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pd1 is done Doing pd2 Version 07p Copying demo pd2 ... done Demo pd2 is started Demo pd2 is started pd2 : first run : time integration towards stationary state gfortran -fopenmp -O -c pd2.f90 -o pd2.o gfortran -fopenmp -O pd2.o -o pd2.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pd2 ... BR PT TY LAB TIME INTEGRAL U(1) MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 6.36620E-01 1.00000E+00 1.00000E+00 1 10 2 3.30173E-01 2.08360E-01 3.23508E-01 1.00000E+00 1 20 3 1.39181E+00 9.58280E-02 1.49742E-01 1.00000E+00 1 30 4 4.36574E+00 7.72029E-02 1.20754E-01 1.00000E+00 1 35 EP 5 1.08431E+01 7.64484E-02 1.19515E-01 1.00000E+00 Total Time 0.284E-01 pd2 ... done Saving to b.1, s.1, and d.1 ... done pd2 : second run : continuation of stationary state Starting pd2 ... BR PT TY LAB PAR(1) INTEGRAL U(1) MAX U(1) MAX U(2) 1 8 BP 6 1.07712E+01 1.08866E-05 1.70973E-05 1.00000E+00 1 15 EP 7 7.82250E+00 -2.78185E-01 0.00000E+00 1.00000E+00 Total Time 0.371E-01 pd2 ... done Saving to b.2, s.2, and d.2 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pd2 is done Doing pen Version 07p Copying demo pen ... done Demo pen is started pen : first run : locate a period doubling bifurcation gfortran -fopenmp -O -c pen.f90 -o pen.o gfortran -fopenmp -O pen.o -o pen.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pen ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 1 1 EP 1 4.00000E-01 8.70694E+00 7.52355E+00 7.52355E+00 4.24583E+00 4.24583E+00 1.57388E+00 1 34 PD 2 1.79163E-01 7.04803E+00 7.78673E+00 7.78673E+00 2.31669E+00 2.31669E+00 3.70528E+00 1 66 UZ 3 1.27009E-01 6.90348E+00 9.28967E+00 9.28967E+00 1.99585E+00 1.99585E+00 3.00000E+01 Total Time 0.921E-01 pen ... done pen : second run : a bifurcating branch of out-of-phase rotations Starting pen ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 2 28 BP 4 3.31445E-01 1.06425E+01 1.43931E+01 1.02011E+01 3.62435E+00 3.62435E+00 9.72615E+00 2 32 BP 5 1.75511E-01 9.77034E+00 1.33710E+01 1.03194E+01 2.73067E+00 2.73067E+00 1.34389E+01 2 38 UZ 6 1.73146E-01 9.35712E+00 1.35358E+01 9.21742E+00 2.50950E+00 2.50950E+00 3.00002E+01 Total Time 0.103E+00 pen ... done pen : third run : a secondary bifurcating branch (without bifurcation detection) Starting pen ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 3 30 UZ 7 1.59953E-01 1.00160E+01 9.39837E+00 9.27295E+00 2.54935E+00 2.15834E+00 3.00005E+01 Total Time 0.887E-01 pen ... done pen : fourth run : another secondary bifurcating branch (without bifurcation detection) Starting pen ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 4 37 UZ 8 2.28614E-01 1.01461E+01 1.39347E+01 9.19297E+00 2.72148E+00 2.31834E+00 3.00000E+01 Total Time 0.109E+00 pen ... done Saving to b.pen, s.pen, and d.pen ... done pen : fifth run : generate starting data for period doubling continuation Starting pen ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(3) PERIOD 5 5 EP 9 9.99998E-02 7.04803E+00 7.78673E+00 7.78673E+00 2.31658E+00 2.31658E+00 1.79163E-01 3.70527E+00 Total Time 0.145E+00 pen ... done pen : sixth run : compute a locus of period doubling bifurcations; restart from t Starting pen ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(3) PERIOD 5 19 UZ 10 9.80643E-01 6.63480E+00 8.15305E+00 8.15305E+00 1.62100E+00 1.62100E+00 9.57295E-01 2.99990E+01 Total Time 0.855E-01 pen ... done Saving to b.pd, s.pd, and d.pd ... done Demo pen is done Doing ph1 Version 07p Copying demo ph1 ... done Demo ph1 is started ***Compute stationary solutions*** gfortran -fopenmp -O -c ph1.f90 -o ph1.o gfortran -fopenmp -O ph1.o -o ph1.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ph1 ... BR PT TY LAB PAR(4) L2-NORM U(1) U(2) 1 1 EP 1 2.02163E+00 1.83543E+02 4.55597E+01 1.77799E+02 1 38 HB 2 3.49995E+00 9.40760E+01 2.79647E+01 8.98235E+01 1 48 HB 3 4.65046E+00 6.57556E+01 2.23669E+01 6.18346E+01 1 54 UZ 4 6.00000E+00 4.85751E+01 1.89456E+01 4.47281E+01 Total Time 0.188E+00 ph1 ... done ***Compute periodic solutions*** Starting ph1 ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 2 84 LP 5 2.75969E+00 1.20187E+02 5.36715E+01 1.44949E+02 1.00064E+01 2 250 UZ 6 4.00000E+00 7.92438E+01 4.10342E+01 9.51593E+01 6.73966E+00 Total Time 0.206E+00 ph1 ... done Starting ph1 ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 3 52 LP 5 5.00784E+00 6.02713E+01 3.19401E+01 6.89478E+01 5.67658E+00 3 83 UZ 6 4.00000E+00 7.92438E+01 4.10181E+01 9.51516E+01 6.73966E+00 Total Time 0.790E-01 ph1 ... done ***Relabel and save the sa output files*** Relabeling done Saving to b.sa, s.sa, and d.sa ... done ***Phase shift of Solution 6 in s.sa*** Starting ph1 ... BR PT TY LAB PAR(11) L2-NORM MAX U(1) MAX U(2) PAR(9) 2 15 9 6.73966E+00 7.92438E+01 4.10234E+01 9.51438E+01 4.10234E+01 2 30 10 6.73966E+00 7.92438E+01 4.10324E+01 9.51504E+01 4.03561E+01 2 45 11 6.73966E+00 7.92438E+01 4.10465E+01 9.51561E+01 3.86051E+01 2 60 12 6.73966E+00 7.92438E+01 4.10464E+01 9.51327E+01 3.55966E+01 2 75 13 6.73966E+00 7.92438E+01 4.10396E+01 9.51262E+01 3.11893E+01 2 79 UZ 14 6.73966E+00 7.92438E+01 4.10379E+01 9.51486E+01 3.00000E+01 Total Time 0.682E-01 ph1 ... done Relabeling done Saving to b.ph1, s.ph1, and d.ph1 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ph1 is done Doing phs Version 07p Copying demo phs ... done Demo phs is started ***Compute stationary solution families*** gfortran -fopenmp -O -c phs.f90 -o phs.o gfortran -fopenmp -O phs.o -o phs.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting phs ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 22 HB 2 -3.00001E-09 0.00000E+00 0.00000E+00 0.00000E+00 1 42 UZ 3 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.143E-01 phs ... done ***Compute a periodic solution family*** Starting phs ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 1 4 -3.00001E-09 0.00000E+00 0.00000E+00 0.00000E+00 6.28319E+00 2 2 5 3.65169E-15 1.00002E-02 1.00336E-02 9.99973E-03 6.28345E+00 2 3 6 3.51441E-15 2.50011E-02 2.52106E-02 2.49977E-02 6.28482E+00 2 4 7 2.59815E-15 4.75019E-02 4.82622E-02 4.74794E-02 6.28911E+00 2 5 8 4.44082E-15 7.22471E-02 7.40173E-02 7.21681E-02 6.29694E+00 2 6 9 2.75791E-15 9.94521E-02 1.02832E-01 9.92444E-02 6.30939E+00 2 7 10 3.39243E-15 1.29352E-01 1.35122E-01 1.28892E-01 6.32788E+00 2 8 11 5.15531E-15 1.62197E-01 1.71369E-01 1.61284E-01 6.35429E+00 2 9 12 4.71419E-15 1.98253E-01 2.12135E-01 1.96563E-01 6.39115E+00 2 10 13 2.74599E-15 2.37795E-01 2.58074E-01 2.34824E-01 6.44197E+00 2 11 14 3.76097E-15 2.81089E-01 3.09938E-01 2.76065E-01 6.51172E+00 2 12 15 3.49467E-15 3.28370E-01 3.68575E-01 3.20102E-01 6.60766E+00 2 13 16 3.72038E-15 3.79779E-01 4.34872E-01 3.66451E-01 6.74079E+00 2 14 17 3.54333E-15 4.35243E-01 5.09575E-01 4.14070E-01 6.92819E+00 2 15 18 3.60691E-15 4.94234E-01 5.92797E-01 4.61013E-01 7.19705E+00 2 16 19 1.93584E-15 5.55347E-01 6.82852E-01 5.03996E-01 7.58977E+00 2 17 20 2.51917E-15 6.15909E-01 7.74396E-01 5.38603E-01 8.16669E+00 2 18 21 2.25785E-15 6.72551E-01 8.57738E-01 5.61252E-01 8.99929E+00 2 19 22 2.38271E-15 7.19060E-01 9.18146E-01 5.71837E-01 1.00445E+01 2 20 23 2.05033E-15 7.57903E-01 9.57446E-01 5.75818E-01 1.13172E+01 2 21 24 2.64279E-15 7.91517E-01 9.80532E-01 5.77021E-01 1.28622E+01 2 22 25 1.50363E-15 8.21355E-01 9.92476E-01 5.77301E-01 1.47543E+01 2 23 26 1.31048E-15 8.48159E-01 9.97681E-01 5.77332E-01 1.71049E+01 2 24 27 2.28280E-15 8.72317E-01 9.99476E-01 5.77345E-01 2.00784E+01 2 25 28 -1.34038E-15 8.94066E-01 9.99923E-01 5.77350E-01 2.39227E+01 2 26 29 6.37850E-16 9.13583E-01 9.99994E-01 5.77345E-01 2.90266E+01 2 27 30 5.52862E-14 9.31014E-01 1.00000E+00 5.77255E-01 3.60328E+01 2 28 31 -1.66085E-14 9.46481E-01 1.00000E+00 5.77314E-01 4.60769E+01 2 29 32 3.17637E-14 9.60092E-01 1.00000E+00 5.77305E-01 6.13621E+01 2 30 33 1.26835E-12 9.71955E-01 1.00000E+00 5.77328E-01 8.67940E+01 2 31 34 -8.41047E-14 9.82224E-01 1.00000E+00 5.77300E-01 1.36223E+02 2 32 35 -9.49864E-14 9.91409E-01 1.00000E+00 5.77165E-01 2.80570E+02 2 33 36 -2.23369E-10 9.94873E-01 1.00000E+00 5.77144E-01 4.69286E+02 2 34 37 -3.11725E-12 9.97364E-01 1.00000E+00 5.77342E-01 9.11751E+02 2 35 38 -8.19372E-11 9.98259E-01 1.00000E+00 5.77260E-01 1.37971E+03 2 36 39 -3.39639E-09 9.98910E-01 1.00000E+00 5.77273E-01 2.20341E+03 2 37 40 -3.14727E-12 9.99484E-01 1.00000E+00 5.77267E-01 4.65389E+03 2 38 41 -2.69188E-11 9.99701E-01 1.00000E+00 5.77267E-01 8.02891E+03 2 39 42 -2.01366E-09 9.99858E-01 1.00000E+00 5.75689E-01 1.68905E+04 2 40 43 -2.55661E-13 9.99914E-01 1.00000E+00 5.77214E-01 2.78182E+04 2 41 44 -1.96767E-11 9.99953E-01 1.00000E+00 5.76853E-01 5.10126E+04 2 42 45 -2.59705E-10 9.99967E-01 1.00000E+00 5.77110E-01 7.31899E+04 2 43 46 -2.96444E-12 9.99978E-01 1.00000E+00 5.77349E-01 1.08860E+05 2 44 47 -8.00655E-12 9.99987E-01 1.00000E+00 5.77303E-01 1.87594E+05 2 45 48 2.36433E-10 9.99991E-01 1.00000E+00 5.76782E-01 2.60429E+05 2 46 49 -2.20722E-13 9.99994E-01 1.00000E+00 5.77346E-01 3.73804E+05 2 47 50 -1.47452E-13 9.99996E-01 1.00000E+00 5.77134E-01 5.99097E+05 2 48 51 -1.31278E-09 9.99998E-01 1.00000E+00 5.76575E-01 1.34637E+06 2 49 52 -6.31653E-13 9.99999E-01 1.00000E+00 5.77186E-01 2.63195E+06 2 50 53 -4.87797E-12 9.99999E-01 1.00000E+00 5.77314E-01 3.64738E+06 2 51 54 -3.56529E-11 1.00000E+00 1.00000E+00 5.77340E-01 5.08220E+06 2 52 55 -5.21231E-15 1.00000E+00 1.00000E+00 5.77321E-01 7.68194E+06 2 53 56 4.66660E-12 1.00000E+00 1.00000E+00 5.77181E-01 1.39894E+07 2 54 57 5.33697E-11 1.00000E+00 1.00000E+00 5.77205E-01 2.03882E+07 2 55 58 -3.77802E-14 1.00000E+00 1.00000E+00 5.77297E-01 3.11688E+07 2 56 59 3.98425E-12 1.00000E+00 1.00000E+00 5.77334E-01 5.75616E+07 2 57 60 -3.56278E-11 1.00000E+00 1.00000E+00 5.76613E-01 8.48488E+07 2 58 UZ 61 -4.61760E-13 1.00000E+00 1.00000E+00 5.77265E-01 1.01437E+08 Total Time 0.258E+00 phs ... done Saving to b.phs, s.phs, and d.phs ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo phs is done Doing pla Version 07p Copying demo pla ... done Demo pla is started Demo pla is started pla : first run : stationary solutions gfortran -fopenmp -O -c pla.f90 -o pla.o gfortran -fopenmp -O pla.o -o pla.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pla ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) U(4) U(5) 1 1 EP 1 5.00000E+01 2.90353E+00 -2.32960E+00 9.99216E-01 7.37331E-01 6.13595E-03 1.20885E+00 1 75 HB 2 1.52265E+01 1.05993E+01 -1.04558E+01 9.97353E-01 6.32525E-01 1.18091E-02 1.27549E+00 1 122 LP 3 2.58654E+00 2.82781E+01 -2.82263E+01 9.63246E-01 3.11169E-01 9.16735E-02 1.37737E+00 1 234 LP 4 4.74501E+01 5.15864E+01 -5.15727E+01 4.41297E-01 4.41769E-02 8.40381E-01 7.18595E-01 1 545 HB 5 -1.03779E+02 5.51191E+01 -5.51082E+01 3.17297E-01 3.05323E-02 9.08491E-01 5.26211E-01 1 578 UZ 6 -1.20000E+02 5.52307E+01 -5.52198E+01 3.13680E-01 3.01721E-02 9.10147E-01 5.20510E-01 Total Time 0.134E+00 pla ... done pla : second run : periodic solutions (1st branch) Starting pla ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 2 246 UZ 7 2.75910E+01 4.74899E+01 2.98620E+01 7.37100E-01 7.99064E-01 7.21904E-01 9.42907E-01 1.00000E+04 Total Time 0.307E+01 pla ... done pla : third run : periodic solutions (2nd branch) Starting pla ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PERIOD 5 221 UZ 7 1.25000E+00 5.44195E+01 -3.70145E+01 8.60221E-01 1.67870E-01 9.82084E-01 8.79610E-01 9.81178E+03 5 240 UZ 8 1.50000E+00 5.43194E+01 1.37996E+01 8.61142E-01 5.66947E-01 9.82260E-01 8.86126E-01 9.87551E+03 5 489 UZ 9 1.75000E+00 5.42796E+01 2.02647E+01 8.65370E-01 6.00469E-01 9.82257E-01 8.86015E-01 9.95958E+03 5 1261 UZ 10 2.10000E+00 5.42317E+01 2.41491E+01 8.59132E-01 6.25419E-01 9.82232E-01 8.85255E-01 1.00604E+04 5 3875 UZ 11 2.62000E+00 5.41681E+01 2.66153E+01 8.44615E-01 6.49196E-01 9.82239E-01 8.85977E-01 1.02058E+04 5 5485 UZ 12 2.86341E+00 3.86832E+01 2.72552E+01 9.38446E-01 6.57984E-01 9.88150E-01 1.37186E+00 5.00000E+04 Total Time 0.680E+02 pla ... done Saving to b.pla, s.pla, and d.pla ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pla is done Doing plp Version 07p Copying demo plp ... done Demo plp is started ***Compute stationary solutions*** gfortran -fopenmp -O -c plp.f90 -o plp.o gfortran -fopenmp -O plp.o -o plp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting plp ... BR PT TY LAB PAR(4) L2-NORM U(1) U(2) 1 1 EP 1 2.02163E+00 1.83543E+02 4.55597E+01 1.77799E+02 1 38 HB 2 3.49995E+00 9.40760E+01 2.79647E+01 8.98235E+01 1 48 HB 3 4.65046E+00 6.57556E+01 2.23669E+01 6.18346E+01 1 54 UZ 4 6.00000E+00 4.85751E+01 1.89456E+01 4.47281E+01 Total Time 0.154E-01 plp ... done ***Compute periodic solutions*** Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 2 84 LP 5 2.75969E+00 1.20187E+02 5.36495E+01 1.44896E+02 1.00064E+01 2 248 UZ 6 4.00000E+00 7.92438E+01 4.10342E+01 9.51255E+01 6.73966E+00 Total Time 0.155E+00 plp ... done Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 3 52 LP 5 5.00784E+00 6.02713E+01 3.19401E+01 6.89308E+01 5.67658E+00 3 83 UZ 6 4.00000E+00 7.92438E+01 4.10181E+01 9.51590E+01 6.73966E+00 Total Time 0.636E-01 plp ... done ***Relabel and save the plp output files*** Relabeling done Saving to b.plp, s.plp, and d.plp ... done ***Follow Hopf bifurcation*** Runner configured Starting plp ... BR PT TY LAB PAR(4) L2-NORM U(1) U(2) PAR(1) 2 24 UZ 9 5.10967E+00 5.60951E+01 1.95180E+01 5.25900E+01 1.09000E+02 Total Time 0.169E-01 plp ... done Starting plp ... BR PT TY LAB PAR(4) L2-NORM U(1) U(2) PAR(1) 2 14 UZ 9 3.10386E+00 1.06038E+02 2.93774E+01 1.01887E+02 1.09000E+02 Total Time 0.148E-01 plp ... done Merge done ***Follow periodic orbit folds: Starting data*** Starting plp ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PAR(1) PERIOD 4 5 EP 9 2.75969E+00 1.20187E+02 5.36479E+01 1.44967E+02 1.10000E+02 1.00064E+01 Total Time 0.195E-01 plp ... done ***Follow periodic orbit folds*** Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PAR(1) PERIOD 4 11 UZ 10 2.98629E+00 1.13066E+02 5.25766E+01 1.35911E+02 1.11000E+02 9.39099E+00 4 27 UZ 11 4.72213E+00 6.71267E+01 3.60889E+01 7.77614E+01 1.11000E+02 6.08717E+00 4 39 UZ 12 5.24332E+00 5.46467E+01 2.79695E+01 6.14450E+01 1.09000E+02 5.35315E+00 Total Time 0.115E+00 plp ... done Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PAR(1) PERIOD 4 10 UZ 10 2.58264E+00 1.26064E+02 5.43310E+01 1.52421E+02 1.09000E+02 1.05394E+01 Total Time 0.502E-01 plp ... done Merge done ***Relabel and save the loci output files*** Relabeling done Saving to b.loci, s.loci, and d.loci ... done ***Compute an isola of periodic solutions*** Runner configured Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 4 42 UZ 7 4.00000E+00 8.19781E+01 3.47048E+01 8.86724E+01 6.94798E+00 4 52 LP 8 4.72213E+00 6.71267E+01 3.60961E+01 7.77568E+01 6.08717E+00 Total Time 0.526E-01 plp ... done Starting plp ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PERIOD 4 46 UZ 7 4.00000E+00 8.17260E+01 4.27186E+01 9.75310E+01 6.90214E+00 4 55 LP 8 4.72213E+00 6.71267E+01 3.60948E+01 7.77455E+01 6.08717E+00 Total Time 0.543E-01 plp ... done Merge done Relabeling done Saving to b.iso, s.iso, and d.iso ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo plp is done Doing pp2 Version 07p Copying demo pp2 ... done Demo pp2 is started ***Compute stationary solution families*** gfortran -fopenmp -O -c pp2.f90 -o pp2.o gfortran -fopenmp -O pp2.o -o pp2.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pp2 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 12 BP 2 6.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 1 19 UZ 3 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 2 21 BP 4 8.21904E-01 3.33333E-01 3.33333E-01 0.00000E+00 2 25 LP 5 8.32929E-01 4.11162E-01 4.11162E-01 0.00000E+00 2 79 UZ 6 2.52388E-06 1.00000E+00 1.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 2 12 UZ 7 3.76454E-01 2.50000E-01 -2.50000E-01 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 3 12 UZ 8 1.00000E+00 5.46739E-01 3.33333E-01 -4.33373E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 3 10 HB 9 6.71594E-01 4.94866E-01 3.33333E-01 3.65762E-01 3 40 UZ 10 1.25990E-09 2.02759E+00 3.33333E-01 2.00000E+00 Total Time 0.336E-01 pp2 ... done ***Compute periodic solution families*** Starting pp2 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 9 2 11 6.71709E-01 4.94770E-01 3.47180E-01 3.90279E-01 1.04024E+01 9 4 12 6.72635E-01 4.93988E-01 3.76053E-01 4.37333E-01 1.05098E+01 9 6 13 6.74476E-01 4.92359E-01 4.06362E-01 4.80618E-01 1.07334E+01 9 8 14 6.77204E-01 4.89763E-01 4.38027E-01 5.18842E-01 1.10918E+01 9 10 15 6.80756E-01 4.86052E-01 4.70661E-01 5.50818E-01 1.16162E+01 9 12 16 6.85012E-01 4.81093E-01 5.03865E-01 5.75430E-01 1.23547E+01 9 14 17 6.89760E-01 4.74855E-01 5.36692E-01 5.91637E-01 1.33795E+01 9 16 18 6.94676E-01 4.67513E-01 5.67955E-01 5.99244E-01 1.47957E+01 9 18 19 6.99324E-01 4.59534E-01 5.96070E-01 5.99195E-01 1.67572E+01 9 20 20 7.03216E-01 4.51655E-01 6.19449E-01 5.94368E-01 1.94886E+01 9 22 21 7.05948E-01 4.44679E-01 6.36351E-01 5.88676E-01 2.33184E+01 9 24 22 7.07420E-01 4.39086E-01 6.46328E-01 5.84504E-01 2.87287E+01 9 26 UZ 23 7.07941E-01 4.34962E-01 6.50453E-01 5.82047E-01 3.59999E+01 Total Time 0.836E-01 pp2 ... done Saving to b.ps, s.ps, and d.ps ... done Saving to b.pp2, s.pp2, and d.pp2 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pp2 is done Doing pp3 Version 07p Copying demo pp3 ... done Demo pp3 is started ***Compute stationary solution families*** gfortran -fopenmp -O -c pp3.f90 -o pp3.o gfortran -fopenmp -O pp3.o -o pp3.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1 39 BP 2 7.50000E-01 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1 52 UZ 3 1.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 23 UZ 4 8.00796E-01 1.20000E+00 1.19897E+00 -4.97420E-02 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 62 HB 5 4.59600E-01 5.03121E-01 4.86465E-01 1.28384E-01 0.00000E+00 2 84 BP 6 3.19340E-01 3.72678E-01 3.33333E-01 1.66667E-01 0.00000E+00 2 113 HB 7 1.06415E-01 2.58002E-01 1.44183E-01 2.13954E-01 0.00000E+00 2 123 UZ 8 -1.07387E-11 2.42565E-01 6.25000E-02 2.34375E-01 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 3 17 HB 9 5.03835E-01 4.27100E-01 3.33333E-01 1.66667E-01 -2.08627E-01 3 55 UZ 10 1.00000E+00 8.55170E-01 3.33333E-01 1.66667E-01 -7.69692E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 3 10 HB 11 2.29357E-01 3.86319E-01 3.33333E-01 1.66667E-01 1.01753E-01 3 28 UZ 12 9.12600E-10 5.18932E-01 3.33333E-01 1.66667E-01 3.61111E-01 Total Time 0.575E-01 pp3 ... done ***Compute periodic solution families*** Computing a periodic solution family from label 5 Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 5 22 UZ 13 4.00000E-01 4.86747E-01 6.58366E-01 3.00358E-01 -1.73201E-29 7.59431E+00 5 28 UZ 14 3.50000E-01 4.67473E-01 6.70221E-01 3.75908E-01 1.08044E-29 7.93328E+00 5 32 BP 15 3.01234E-01 4.44550E-01 6.54611E-01 4.31062E-01 -1.82980E-23 8.27624E+00 5 33 UZ 16 3.00000E-01 4.43916E-01 6.53913E-01 4.32244E-01 1.81576E-28 8.28510E+00 Total Time 0.724E-01 pp3 ... done Computing a periodic solution family from label 7 Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 7 22 UZ 13 1.50000E-01 3.31815E-01 4.18108E-01 4.39800E-01 -1.06611E-28 9.25346E+00 7 28 UZ 14 2.00000E-01 3.80593E-01 5.42389E-01 4.79843E-01 2.06658E-29 9.00365E+00 7 32 UZ 15 2.50000E-01 4.15682E-01 6.13573E-01 4.69375E-01 4.06492E-30 8.64975E+00 7 36 UZ 16 3.00000E-01 4.43916E-01 6.53972E-01 4.32256E-01 1.38310E-26 8.28510E+00 Total Time 0.577E-01 pp3 ... done Computing a periodic solution family from label 9 Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 9 34 UZ 13 4.00000E-01 4.65866E-01 6.86057E-01 3.99493E-01 -4.04034E-02 9.78590E+00 9 40 UZ 14 3.50000E-01 4.60197E-01 6.95066E-01 4.36530E-01 -2.02436E-02 9.18831E+00 9 45 BP 15 3.01235E-01 4.44550E-01 6.54591E-01 4.30908E-01 -2.85401E-09 8.27623E+00 9 46 UZ 16 3.00000E-01 4.43981E-01 6.52813E-01 4.30080E-01 2.90781E-03 8.24882E+00 Total Time 0.587E-01 pp3 ... done Computing a periodic solution family from label 11 Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 11 18 UZ 13 2.50000E-01 4.09732E-01 5.21654E-01 3.26933E-01 1.03289E-01 7.00718E+00 11 27 UZ 14 3.00000E-01 4.43981E-01 6.52666E-01 4.30021E-01 2.90843E-03 8.24881E+00 Total Time 0.341E-01 pp3 ... done ***Relabel the output and save*** Relabeling done Saving to b.pp3, s.pp3, and d.pp3 ... done ***Compute a locus of Hopf bifurcations from label 7 *** Starting pp3 ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 7 136 BP 13 3.62537E-01 4.72458E-01 4.42085E-01 1.66667E-01 3.04840E-26 3.34749E+00 7 170 UZ 14 4.59600E-01 5.03121E-01 4.86465E-01 1.28384E-01 4.96323E-28 4.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 8 109 UZ 15 5.03835E-01 4.27100E-01 3.33333E-01 1.66667E-01 -2.08627E-01 4.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 8 87 UZ 16 2.29357E-01 3.86319E-01 3.33333E-01 1.66667E-01 1.01753E-01 4.00000E+00 Total Time 0.121E+00 pp3 ... done ***Relabel the output and save*** Relabeling done Saving to b.hb, s.hb, and d.hb ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pp3 is done Doing ppp Version 07p Copying demo ppp ... done Demo ppp is started Demo ppp is started ppp : first run : stationary solutions gfortran -fopenmp -O -c ppp.f90 -o ppp.o gfortran -fopenmp -O ppp.o -o ppp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ppp ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1 29 BP 2 5.50000E-01 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 1 32 UZ 3 6.00000E-01 1.00000E+00 1.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 14 LP 4 5.64596E-01 1.21783E+00 1.21571E+00 -7.19022E-02 0.00000E+00 2 55 EP 5 4.50010E-01 2.01134E+00 1.98439E+00 -3.28131E-01 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 31 BP 6 3.68452E-01 5.27022E-01 4.99971E-01 1.66676E-01 0.00000E+00 2 38 HB 7 2.92331E-01 4.39061E-01 3.88958E-01 2.03681E-01 0.00000E+00 2 48 HB 8 1.79023E-01 3.55511E-01 2.54109E-01 2.48630E-01 0.00000E+00 2 61 UZ 9 1.11901E-05 3.16715E-01 8.33429E-02 3.05552E-01 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 3 20 UZ 10 6.00000E-01 5.88494E-01 5.00000E-01 1.66667E-01 -2.61815E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 3 31 UZ 11 9.54345E-10 6.71855E-01 5.00000E-01 1.66667E-01 4.16667E-01 Total Time 0.454E-01 ppp ... done ppp : second run : periodic solutions Starting ppp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 8 15 EP 12 2.55739E-01 4.19724E-01 4.57034E-01 3.09596E-01 4.37433E-26 8.54670E+00 Total Time 0.229E-01 ppp ... done Saving to b.ppp, s.ppp, and d.ppp ... done ppp : third run : compute Hopf bifurcation curves Starting ppp ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 8 34 BP 13 3.62537E-01 4.72458E-01 4.42085E-01 1.66667E-01 -1.23855E-23 3.34749E+00 8 52 EP 14 5.82387E-01 5.26566E-01 5.17404E-01 9.78014E-02 -3.84530E-24 4.93445E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 9 58 GH 15 4.98747E-01 4.05424E-01 2.51693E-01 1.66667E-01 -2.70631E-01 4.48984E+00 9 80 GH 16 6.83875E-02 1.88008E-01 4.52111E-02 1.66667E-01 -7.43320E-02 5.72873E+00 9 91 BP 17 7.72928E-02 1.91472E-01 9.42532E-02 1.66667E-01 2.77220E-06 5.43448E+00 9 100 EP 18 1.32140E-01 2.57730E-01 1.84428E-01 1.66667E-01 6.80704E-02 4.89343E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 9 87 BP 19 7.72903E-02 1.91470E-01 9.42488E-02 1.66667E-01 -1.50756E-06 5.43451E+00 9 100 EP 20 6.04132E-02 1.83352E-01 4.88000E-02 1.66667E-01 -5.88116E-02 5.70720E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 10 4 GH 21 7.68867E-02 1.90341E-01 9.35157E-02 1.65785E-01 4.16900E-28 5.46783E+00 10 100 EP 22 4.54131E-02 7.23579E-02 3.00893E-02 6.58050E-02 0.00000E+00 1.47392E+01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(4) 10 4 GH 23 7.77041E-02 1.92616E-01 9.49991E-02 1.67559E-01 2.72473E-27 5.40108E+00 10 70 BP 24 3.62537E-01 4.72458E-01 4.42085E-01 1.66667E-01 3.70472E-24 3.34749E+00 10 89 EP 25 5.91459E-01 5.27873E-01 5.19056E-01 9.60782E-02 -1.06714E-22 5.00576E+00 Total Time 0.131E+00 ppp ... done Saving to b.hb, s.hb, and d.hb ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo ppp is done Doing pvl Version 07p Copying demo pvl ... done Demo pvl is started Demo pvl is started pvl : compute a solution branch gfortran -fopenmp -O -c pvl.f90 -o pvl.o gfortran -fopenmp -O pvl.o -o pvl.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting pvl ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) PAR(3) PAR(4) PAR(5) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 UZ 2 2.00000E+00 7.88670E-01 3.28952E-01 1.24822E+00 2.38376E-01 -1.24822E+00 1.24822E+00 1.24822E+00 1 19 LP 3 3.51383E+00 2.78203E+00 1.18657E+00 4.00011E+00 8.43552E-01 -4.00011E+00 4.00011E+00 4.00011E+00 1 20 UZ 4 3.37883E+00 3.59846E+00 1.54704E+00 5.00003E+00 1.09138E+00 -5.00003E+00 5.00003E+00 5.00003E+00 1 24 UZ 5 2.00000E+00 6.57685E+00 2.89524E+00 8.26878E+00 1.98936E+00 -8.26878E+00 8.26878E+00 8.26878E+00 1 28 UZ 6 7.79589E-01 9.98443E+00 4.47381E+00 1.16504E+01 3.00000E+00 -1.16504E+01 1.16504E+01 1.16504E+01 1 50 EP 7 1.94554E-04 3.16820E+01 1.47891E+01 3.23429E+01 9.18653E+00 -3.24174E+01 3.23429E+01 3.23429E+01 Total Time 0.103E+00 pvl ... done Saving to b.pvl, s.pvl, and d.pvl ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo pvl is done Doing python Version 07p Copying demo python ... done Demo python is started Copying demo ab ... done Runner configured ***Generate starting data*** gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.157E-01 ab ... done ***Compute stationary solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 14 UZ 7 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.136E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.261E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.46882E-01 1.44760E+00 3.72992E-01 1.39872E+00 1 67 UZ 8 2.50000E-01 3.35710E+00 8.65000E-01 3.24375E+00 Total Time 0.216E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.32538E-01 1.42450E+00 3.45491E-01 1.38197E+00 1 74 UZ 8 2.50000E-01 3.72020E+00 9.02281E-01 3.60912E+00 Total Time 0.235E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.20866E-01 1.40614E+00 3.22062E-01 1.36877E+00 1 32 LP 8 1.21901E-01 1.65357E+00 3.78732E-01 1.60961E+00 1 54 LP 9 1.17015E-01 2.71249E+00 6.21268E-01 2.64039E+00 1 80 HB 10 2.17079E-01 3.98722E+00 9.13231E-01 3.88123E+00 1 82 UZ 11 2.49999E-01 4.05225E+00 9.28125E-01 3.94453E+00 Total Time 0.241E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 26 HB 7 1.11153E-01 1.39119E+00 3.01792E-01 1.35806E+00 1 29 LP 8 1.11565E-01 1.53659E+00 3.33333E-01 1.50000E+00 1 60 LP 9 9.95741E-02 3.07318E+00 6.66667E-01 3.00000E+00 1 84 HB 10 1.83833E-01 4.24297E+00 9.20430E-01 4.14194E+00 1 87 UZ 11 2.50000E-01 4.36311E+00 9.46491E-01 4.25921E+00 Total Time 0.251E-01 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Compute periodic solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 161 UZ 18 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.156E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 222 UZ 18 2.50000E-01 3.37532E+00 9.87351E-01 5.87481E+00 1.72637E+00 Total Time 0.227E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 6 309 UZ 18 2.50000E-01 3.72137E+00 9.36686E-01 4.12902E+00 1.23162E+00 Total Time 0.312E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 8 116 UZ 18 1.20102E-01 2.07774E+00 4.77420E-01 2.02903E+00 9.99882E+02 Total Time 0.131E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 11 348 UZ 18 1.19455E-01 2.17761E+00 9.99196E-01 9.34169E+00 9.99991E+02 Total Time 0.445E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 13 67 UZ 18 1.10829E-01 1.75170E+00 3.80862E-01 1.71388E+00 9.99998E+02 Total Time 0.980E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 16 372 UZ 18 1.10114E-01 1.85878E+00 1.00071E+00 1.12332E+01 9.99991E+02 Total Time 0.484E+00 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Parsed output data Subtracting done Created plot Hit to continue Saving to b.abnew, s.abnew, and d.abnew ... done Copying demo ab ... done Runner configured Runner configured Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.137E-01 ab ... done Copying demo bvp ... done Runner configured gfortran -fopenmp -O -c bvp.f90 -o bvp.o gfortran -fopenmp -O bvp.o -o bvp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 6 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 11 BP 3 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 16 BP 4 3.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 21 BP 5 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 26 BP 6 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 UZ 7 5.50000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.228E-01 bvp ... done Runner configured Solution label 2 forwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 1.54612E+00 3.83253E+01 1.58769E+01 5.72642E+01 1.05383E+01 Total Time 0.143E+00 bvp ... done Solution label 2 backwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 144 UZ 8 -2.34238E-03 2.68852E+01 0.00000E+00 3.30820E+01 -7.25516E+00 Total Time 0.108E+00 bvp ... done Merge done Runner configured Solution label 3 forwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42248E+00 5.55859E+01 9.61732E-01 Total Time 0.170E+00 bvp ... done Solution label 3 backwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42311E+00 5.55828E+01 9.61732E-01 Total Time 0.168E+00 bvp ... done Merge done Runner configured Solution label 4 forwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 3.03291E+00 3.97680E+01 6.01544E+00 5.60360E+01 1.42869E+00 Total Time 0.163E+00 bvp ... done Solution label 4 backwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.97672E+00 3.97775E+01 6.11843E+00 5.58754E+01 -1.07606E+00 Total Time 0.159E+00 bvp ... done Merge done Runner configured Solution label 5 forwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50615E+00 5.61087E+01 6.30919E-02 Total Time 0.139E+00 bvp ... done Solution label 5 backwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50462E+00 5.60941E+01 6.30919E-02 Total Time 0.136E+00 bvp ... done Merge done Runner configured Solution label 6 forwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 5.00656E+00 3.97968E+01 3.58791E+00 5.61801E+01 4.80029E-01 Total Time 0.252E+00 bvp ... done Solution label 6 backwards Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.99427E+00 3.97973E+01 3.59638E+00 5.61579E+01 -4.30272E-01 Total Time 0.137E+00 bvp ... done Merge done Relabeling done Saving to b.bvp, s.bvp, and d.bvp ... done Created plot Hit to continue Copying demo bvp ... done Runner configured gfortran -fopenmp -O -c bvp.f90 -o bvp.o gfortran -fopenmp -O bvp.o -o bvp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 6 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 11 BP 3 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 16 BP 4 3.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 21 BP 5 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 26 BP 6 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 UZ 7 5.50000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.516E-01 bvp ... done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 1.54612E+00 3.83253E+01 1.58769E+01 5.72642E+01 1.05383E+01 Total Time 0.137E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 144 UZ 8 -2.34238E-03 2.68852E+01 0.00000E+00 3.30820E+01 -7.25516E+00 Total Time 0.261E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42248E+00 5.55859E+01 9.61732E-01 Total Time 0.245E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42311E+00 5.55828E+01 9.61732E-01 Total Time 0.160E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 3.03291E+00 3.97680E+01 6.01544E+00 5.60360E+01 1.42869E+00 Total Time 0.240E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.97672E+00 3.97775E+01 6.11843E+00 5.58754E+01 -1.07606E+00 Total Time 0.155E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50615E+00 5.61087E+01 6.30919E-02 Total Time 0.279E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50462E+00 5.60941E+01 6.30919E-02 Total Time 0.162E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 5.00656E+00 3.97968E+01 3.58791E+00 5.61801E+01 4.80029E-01 Total Time 0.262E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.99427E+00 3.97973E+01 3.59638E+00 5.61579E+01 -4.30272E-01 Total Time 0.130E+00 bvp ... done Merge done Relabeling done Created plot Saving to b.bvp, s.bvp, and d.bvp ... done Hit to continue Copying demo bvp ... done Runner configured gfortran -fopenmp -O -c bvp.f90 -o bvp.o gfortran -fopenmp -O bvp.o -o bvp.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 6 BP 2 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 11 BP 3 2.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 16 BP 4 3.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 21 BP 5 4.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 26 BP 6 5.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 29 UZ 7 5.50000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.222E-01 bvp ... done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 1.54612E+00 3.83253E+01 1.58769E+01 5.72642E+01 1.05383E+01 Total Time 0.135E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 144 UZ 8 -2.34238E-03 2.68852E+01 0.00000E+00 3.30820E+01 -7.25516E+00 Total Time 0.239E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42248E+00 5.55859E+01 9.61732E-01 Total Time 0.129E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.04008E+00 3.96086E+01 9.42311E+00 5.55828E+01 9.61732E-01 Total Time 0.134E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 3.03291E+00 3.97680E+01 6.01544E+00 5.60360E+01 1.42869E+00 Total Time 0.134E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 2.97672E+00 3.97775E+01 6.11843E+00 5.58754E+01 -1.07606E+00 Total Time 0.134E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50615E+00 5.61087E+01 6.30919E-02 Total Time 0.223E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.00133E+00 3.97970E+01 4.50462E+00 5.60941E+01 6.30919E-02 Total Time 0.289E+00 bvp ... done Merge done Runner configured Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 5.00656E+00 3.97968E+01 3.58791E+00 5.61801E+01 4.80029E-01 Total Time 0.132E+00 bvp ... done Starting bvp ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 200 EP 8 4.99427E+00 3.97973E+01 3.59638E+00 5.61579E+01 -4.30272E-01 Total Time 0.134E+00 bvp ... done Merge done Relabeling done Created plot Saving to b.bvp, s.bvp, and d.bvp ... done Hit to continue Copying demo wav ... done Runner configured clean.auto c.wav c.wav.1 c.wav.2 c.wav.3 c.wav.4 c.wav.5 c.wav.6 plaut04.rc wav.auto wav.f90 ALIASES DESCRIPTION append ap Append data files. cat Print the contents of a file cd Change directories. clean cl Clean the current directory. demo dm Copy a demo into the current directory and load it. copy cp Copy data files. copydemo Copy a demo into the current directory. save sv Save data files. gui Show AUTOs graphical user interface. delete dl Delete data files. df deletefort Clear the current directory of fort files. dlb Delete special labels. dsp Delete special points. double db Double a solution. man Get help on the AUTO commands. klb Keep special labels. ksp Keep special points. ls List the current directory. merge mb Merge branches in data files. move mv Move data-files to a new name. cn constantsget Get the current continuation constants. bt diagramandsolutionget Parse both bifurcation diagram and solution. dg diagramget Parse a bifurcation diagram. hcn Get the current HomCont continuation constants. loadbd bd Load bifurcation diagram files. sl solutionget Parse solution file: plot pl p2 Plotting of data. plot3 p3 3D plotting of data. branchpoint bp br Print the ``branch-point function''. eigenvalue ev eg Print eigenvalues of Jacobian (algebraic case). floquet fl Print the Floquet multipliers. hopf hp hb Print the value of the ``Hopf function''. iterations it Print the number of Newton interations. limitpoint lm lp Print the value of the ``limit point function''. note nt Print notes in info file. secondaryperiod sp sc Print value of ``secondary-periodic bif. fcn''. stepsize ss st Print continuation step sizes. quit q Quit the AUTO CLUI. relabel rl Relabel data files. run r rn Run AUTO. hch Modify HomCont continuation constants. ch changeconstant cc Modify continuation constants. load ld Load files into the AUTO runner or return modified solution data. hpr Print HomCont continuation parameters. pr printconstant pc Print continuation parameters. shell Run a shell command. splabs Return special labels subtract sb Subtract branches in data files. triple tr Triple a solution. us userdata Convert user-supplied data files. wait Wait for the user to enter a key. auto ex Execute an AUTO CLUI script. demofile dmf Execute an AUTO CLUI script, line by line (demo mode). Run AUTO. Type r=run([data],[options]) to run AUTO from solution data with the given AUTO constants or file keyword options. The results are stored in the bifurcation diagram r which you can later print with ``print r'', obtain branches from via r[0], r[1], ..., and obtain solutions from via r(3), r(5), r('LP2'), where 3 and 5 are label numbers, and 'LP2' refers to the second LP label. run(data) runs AUTO in the following way for different types of data: * A solution: AUTO starts from solution data, with AUTO constants data.c. * A bifurcation diagram: AUTO start from the solution specified by the AUTO constant IRS, or if IRS is not specified, the last solution in data, data()[-1], with AUTO constants data()[-1].c. * A string: AUTO uses the solution in the file 's.data' together with the constants in the files 'c.data', and 'h.data'. Not all of these files need to be present. If no solution data is specified, then the global values from the 'load' command are used instead, where options which are not explicitly set retain their previous value. Keyword argument options can be AUTO constants, such as DS=0.05, or ISW=-1, or specify a constant or solution file. These override the constants in s.c, where applicable. See ``load'': run(s,options) is equivalent to run(load(s,options)) Example: given a bifurcation diagram bd, with a branch point solution, switch branches and stop at the first Hopf bifurcation: hb = run(bd('BP1'),ISW=-1,STOP='HB1') Special keyword arguments are 'sv' and 'ap'; 'sv' is also an AUTO constant: run(bd('BP1'),ISW=-1,STOP='HB1',sv='hb',ap='all') saves to the files b.hb, s.hb and d.hb, and appends to b.all, s.all, and d.all. Command name: commandRun Aliases: run r rn NDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {3: 800.0} Runner configured gfortran -fopenmp -O -c wav.f90 -o wav.o gfortran -fopenmp -O wav.o -o wav.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting wav ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) U(3) U(4) 1 1 EP 1 5.00000E+02 1.08768E+02 6.27662E+01 8.88308E+01 0.00000E+00 0.00000E+00 1 47 LP 2 6.66144E+02 1.81841E+02 4.69085E+01 1.75687E+02 0.00000E+00 0.00000E+00 1 82 LP 3 6.30891E+02 7.49020E+01 3.23345E+01 6.75632E+01 0.00000E+00 0.00000E+00 1 87 HB 4 6.35591E+02 5.49735E+01 2.74121E+01 4.76515E+01 0.00000E+00 0.00000E+00 1 128 UZ 5 8.00000E+02 8.90054E+01 2.79228E+00 8.89616E+01 0.00000E+00 0.00000E+00 Total Time 0.248E-01 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 4 26 UZ 6 6.38000E+02 5.85936E+01 3.41194E+01 6.66882E+01 5.23176E+00 7.67732E+00 2.00436E+01 4 71 UZ 7 6.38000E+02 5.12350E+01 4.32537E+01 6.10864E+01 1.56626E+01 1.44212E+01 1.13908E+01 4 129 UZ 8 6.10000E+02 9.35063E+01 5.67543E+01 1.20462E+02 1.60747E+01 2.40970E+01 1.49753E+01 4 263 UZ 9 6.04728E+02 1.62520E+02 5.59844E+01 1.54751E+02 1.54410E+01 2.47128E+01 5.00000E+02 Total Time 0.264E+00 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(10) 4 50 10 6.34892E+02 6.77805E+01 4.88929E+01 8.92232E+01 1.98335E+01 2.26742E+01 3.31358E-01 4 100 11 6.38185E+02 6.14781E+01 4.47694E+01 7.71809E+01 7.78450E+00 9.26606E+00 -2.81251E-01 4 150 12 6.12152E+02 9.22702E+01 5.65260E+01 1.19617E+02 1.20552E+01 2.13923E+01 -1.66112E-01 4 200 13 6.31049E+02 7.39751E+01 5.17091E+01 9.91385E+01 2.10409E+01 2.47877E+01 3.52721E-01 4 250 14 6.40501E+02 5.60921E+01 3.94812E+01 6.50292E+01 6.87739E+00 9.43887E+00 -1.91003E-01 4 300 15 6.11584E+02 9.26076E+01 5.65906E+01 1.19830E+02 1.24223E+01 2.16750E+01 -1.45810E-01 4 350 16 6.00114E+02 1.23905E+02 5.64705E+01 1.36094E+02 1.04821E+01 1.37840E+01 -1.91736E-10 4 400 17 6.62431E+02 1.71195E+02 4.75911E+01 1.69640E+02 9.67626E-01 2.02388E+00 -3.44387E-13 4 450 18 5.91166E+02 1.17394E+02 5.72885E+01 1.30143E+02 1.25078E+01 1.54996E+01 -3.51007E-10 4 500 EP 19 6.10594E+02 8.30905E+01 5.37594E+01 9.86320E+01 1.34789E+01 1.51711E+01 -4.95168E-09 Total Time 0.533E+00 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Copying demo cir ... done Runner configured Starting conversion of cir.dat : (Required files : cir.f90, c.cir, cir.dat) gfortran -fopenmp -O -c cir.f90 -o cir.o gfortran -fopenmp -I/cnd0/home/boldeman/auto/07p/include -O cir.o -o fcon /cnd0/home/boldeman/auto/07p/src/fcon.f Finished running: ./fcon Conversion done : converted file saved as s.dat Runner configured gfortran -fopenmp -O cir.o -o cir.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting cir ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 1 EP 1 3.61300E+01 2.14038E-01 4.23177E-01 5.80472E-02 3.32867E-01 -7.21309E-01 1 21 UZ 2 1.00000E+02 1.28664E-01 4.22987E-01 5.80615E-02 3.32856E-01 -7.21309E-01 1 42 UZ 3 2.00000E+02 9.09790E-02 4.23224E-01 5.79878E-02 3.32854E-01 -7.21309E-01 1 50 EP 4 2.40000E+02 8.30521E-02 4.23072E-01 5.80102E-02 3.32844E-01 -7.21309E-01 Total Time 0.130E+00 cir ... done Starting cir ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 1 EP 1 3.61300E+01 2.14038E-01 4.23177E-01 5.80472E-02 3.32867E-01 -7.21309E-01 1 21 UZ 2 1.00000E+02 1.28664E-01 4.22987E-01 5.80615E-02 3.32856E-01 -7.21309E-01 1 42 UZ 3 2.00000E+02 9.09790E-02 4.23224E-01 5.79878E-02 3.32854E-01 -7.21309E-01 1 50 EP 4 2.40000E+02 8.30521E-02 4.23072E-01 5.80102E-02 3.32844E-01 -7.21309E-01 Total Time 0.109E+00 cir ... done Saving fort.7 as b.cir ... done Saving fort.8 as s.cir ... done Saving fort.9 as d.cir ... done 1 2 Next Step : 1.50000E+00 1 3 Next Step : 1.65000E+00 1 4 Next Step : 1.81500E+00 1 5 Next Step : 1.99650E+00 1 6 Next Step : 2.19615E+00 1 7 Next Step : 2.41577E+00 1 8 Next Step : 2.65734E+00 1 9 Next Step : 2.92308E+00 1 10 Next Step : 3.21538E+00 1 11 Next Step : 3.53692E+00 1 12 Next Step : 3.89061E+00 1 13 Next Step : 4.27968E+00 1 14 Next Step : 4.70764E+00 1 15 Next Step : 5.00000E+00 1 16 Next Step : 5.00000E+00 1 17 Next Step : 5.00000E+00 1 18 Next Step : 5.00000E+00 1 19 Next Step : 5.00000E+00 1 20 Next Step : 5.00000E+00 ==> Location of special point : Convergence. Step size = 3.85683E-07 1 21 Next Step : 5.00000E+00 1 22 Next Step : 5.00000E+00 1 23 Next Step : 5.00000E+00 1 24 Next Step : 5.00000E+00 1 25 Next Step : 5.00000E+00 1 26 Next Step : 5.00000E+00 1 27 Next Step : 5.00000E+00 1 28 Next Step : 5.00000E+00 1 29 Next Step : 5.00000E+00 1 30 Next Step : 5.00000E+00 1 31 Next Step : 5.00000E+00 1 32 Next Step : 5.00000E+00 1 33 Next Step : 5.00000E+00 1 34 Next Step : 5.00000E+00 1 35 Next Step : 5.00000E+00 1 36 Next Step : 5.00000E+00 1 37 Next Step : 5.00000E+00 1 38 Next Step : 5.00000E+00 1 39 Next Step : 5.00000E+00 1 40 Next Step : 5.00000E+00 1 41 Next Step : 5.00000E+00 ==> Location of special point : Convergence. Step size = 4.98081E-07 1 42 Next Step : 5.00000E+00 1 43 Next Step : 5.00000E+00 1 44 Next Step : 5.00000E+00 1 45 Next Step : 5.00000E+00 1 46 Next Step : 5.00000E+00 1 47 Next Step : 5.00000E+00 1 48 Next Step : 5.00000E+00 1 49 Next Step : 5.00000E+00 1 2 Iterations : 2 1 3 Iterations : 3 1 4 Iterations : 3 1 5 Iterations : 3 1 6 Iterations : 3 1 7 Iterations : 3 1 8 Iterations : 3 1 9 Iterations : 3 1 10 Iterations : 3 1 11 Iterations : 3 1 12 Iterations : 3 1 13 Iterations : 3 1 14 Iterations : 3 1 15 Iterations : 3 1 16 Iterations : 3 1 17 Iterations : 3 1 18 Iterations : 3 1 19 Iterations : 3 1 20 Iterations : 3 1 21 Iterations : 2 1 22 Iterations : 2 1 23 Iterations : 3 1 24 Iterations : 3 1 25 Iterations : 3 1 26 Iterations : 3 1 27 Iterations : 3 1 28 Iterations : 3 1 29 Iterations : 3 1 30 Iterations : 3 1 31 Iterations : 3 1 32 Iterations : 3 1 33 Iterations : 3 1 34 Iterations : 3 1 35 Iterations : 3 1 36 Iterations : 3 1 37 Iterations : 3 1 38 Iterations : 3 1 39 Iterations : 3 1 40 Iterations : 3 1 41 Iterations : 3 1 42 Iterations : 2 1 43 Iterations : 2 1 44 Iterations : 3 1 45 Iterations : 3 1 46 Iterations : 2 1 47 Iterations : 2 1 48 Iterations : 2 1 49 Iterations : 2 Deleting fort.* *.o *.exe *.*~ ... done Copying demo ab ... done Runner configured Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.786E-02 ab ... done RL1 changed to 0.4 Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.297E-02 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Appending fort.7 to b.ab ... done Appending fort.8 to s.ab ... done Appending fort.9 to d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 UZ 2 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.381E-02 ab ... done Copying b.ab to b.double ... done Copying s.ab to s.double ... done Copying d.ab to d.double ... done Copying c.ab to c.double ... done Finished running: /cnd0/home/boldeman/auto/07p/bin/double Solution doubling done. Renaming b.double as b.triple ... done Renaming s.double as s.triple ... done Renaming d.double as d.triple ... done Copying c.double to c.triple ... done Finished running: /cnd0/home/boldeman/auto/07p/bin/triple Solution tripling done. Parsed file: fort.8 Parsed file: fort.7 Parsed files: fort.7 and fort.8 Copying demo ab ... done Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.785E-02 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 UZ 2 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.502E-02 ab ... done Created plot Created plot Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue Copying demo ab ... done Runner configured ***Generate starting data*** gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.792E-02 ab ... done ***Compute stationary solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 14 UZ 7 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.381E-02 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.929E-02 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.46882E-01 1.44760E+00 3.72992E-01 1.39872E+00 1 67 UZ 8 2.50000E-01 3.35710E+00 8.65000E-01 3.24375E+00 Total Time 0.143E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.32538E-01 1.42450E+00 3.45491E-01 1.38197E+00 1 74 UZ 8 2.50000E-01 3.72020E+00 9.02281E-01 3.60912E+00 Total Time 0.153E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.20866E-01 1.40614E+00 3.22062E-01 1.36877E+00 1 32 LP 8 1.21901E-01 1.65357E+00 3.78732E-01 1.60961E+00 1 54 LP 9 1.17015E-01 2.71249E+00 6.21268E-01 2.64039E+00 1 80 HB 10 2.17079E-01 3.98722E+00 9.13231E-01 3.88123E+00 1 82 UZ 11 2.49999E-01 4.05225E+00 9.28125E-01 3.94453E+00 Total Time 0.126E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 26 HB 7 1.11153E-01 1.39119E+00 3.01792E-01 1.35806E+00 1 29 LP 8 1.11565E-01 1.53659E+00 3.33333E-01 1.50000E+00 1 60 LP 9 9.95741E-02 3.07318E+00 6.66667E-01 3.00000E+00 1 84 HB 10 1.83833E-01 4.24297E+00 9.20430E-01 4.14194E+00 1 87 UZ 11 2.50000E-01 4.36311E+00 9.46491E-01 4.25921E+00 Total Time 0.138E-01 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Compute periodic solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 161 UZ 18 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.146E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 222 UZ 18 2.50000E-01 3.37532E+00 9.87351E-01 5.87481E+00 1.72637E+00 Total Time 0.205E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 6 309 UZ 18 2.50000E-01 3.72137E+00 9.36686E-01 4.12902E+00 1.23162E+00 Total Time 0.275E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 8 116 UZ 18 1.20102E-01 2.07774E+00 4.77420E-01 2.02903E+00 9.99882E+02 Total Time 0.106E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 11 348 UZ 18 1.19455E-01 2.17761E+00 9.99196E-01 9.34169E+00 9.99991E+02 Total Time 0.316E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 13 67 UZ 18 1.10829E-01 1.75170E+00 3.80862E-01 1.71388E+00 9.99998E+02 Total Time 0.667E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 16 372 UZ 18 1.10114E-01 1.85878E+00 1.00071E+00 1.12332E+01 9.99991E+02 Total Time 0.442E+00 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done ***Clean the directory*** Deleting b.ab ... done Deleting s.ab ... done Deleting d.ab ... done Deleting fort.* *.o *.exe *.*~ ... done Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.785E-02 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.928E-02 ab ... done Appending fort.7 to b.ab ... done Appending fort.8 to s.ab ... done Appending fort.9 to d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.146E+00 ab ... done Saving fort.7 as b.2p ... done Saving fort.8 as s.2p ... done Saving fort.9 as d.2p ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95388E-01 6.87999E+00 2.22034E+00 Total Time 0.148E+00 ab ... done Appending fort.7 to b.2p ... done Appending fort.8 to s.2p ... done Appending fort.9 to d.2p ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.144E+00 ab ... done Appending fort.7 to b.2p ... done Appending fort.8 to s.2p ... done Appending fort.9 to d.2p ... done Demo python is done Doing python/n-body Version 07p Copying demo python/n-body ... done Demo python/n-body is started ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done gcc -g -O2 -I/cnd0/home/boldeman/auto/07p/include -O -c 3d.c -o 3d.o gfortran -L/cnd0/home/boldeman/auto/07p/lib -fopenmp -O 3d.o -o 3d.exe /cnd0/home/boldeman/auto/07p/lib/*.o -lauto_c Starting 3d ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 1 1 EP 1 0.00000E+00 1.00000E+00 1.41070E-01 9.90000E-01 0.00000E+00 0.00000E+00 3.00000E+00 9.90000E-01 1 172 BP 2 2.58352E-13 1.00000E+00 4.99999E-01 8.66026E-01 0.00000E+00 0.00000E+00 3.00000E+00 8.66026E-01 1 793 BP 3 2.38302E-11 1.00000E+00 4.99999E-01 -8.66026E-01 0.00000E+00 0.00000E+00 3.00000E+00 -8.66026E-01 1 1414 BP 4 -5.02959E-15 1.00000E+00 -1.00000E+00 -1.78467E-09 0.00000E+00 0.00000E+00 3.00000E+00 -1.78467E-09 1 1840 UZ 5 2.11575E-17 1.00000E+00 -1.33852E-01 9.91001E-01 0.00000E+00 0.00000E+00 3.00000E+00 9.91001E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 2 76 UZ 6 5.00000E-01 8.66025E-01 1.11603E-11 8.66025E-01 0.00000E+00 0.00000E+00 2.75000E+00 8.66025E-01 2 147 BP 7 9.99990E-01 9.99995E-01 -4.99990E-01 8.66025E-01 0.00000E+00 0.00000E+00 2.99999E+00 8.66025E-01 2 162 UZ 8 1.10000E+00 1.05357E+00 -6.00000E-01 8.66025E-01 0.00000E+00 0.00000E+00 3.11000E+00 8.66025E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 3 76 UZ 9 5.00000E-01 8.66025E-01 1.11919E-11 -8.66025E-01 0.00000E+00 0.00000E+00 2.75000E+00 -8.66025E-01 3 147 BP 10 9.99990E-01 9.99995E-01 -4.99990E-01 -8.66025E-01 0.00000E+00 0.00000E+00 2.99999E+00 -8.66025E-01 3 162 UZ 11 1.10000E+00 1.05357E+00 -6.00000E-01 -8.66025E-01 0.00000E+00 0.00000E+00 3.11000E+00 -8.66025E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 4 59 UZ 12 4.99999E-01 1.19841E+00 -1.19841E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.45680E+00 0.00000E+00 4 244 UZ 13 5.00000E-01 5.51007E-09 -5.51007E-09 0.00000E+00 0.00000E+00 0.00000E+00 4.00000E+00 0.00000E+00 4 429 UZ 14 5.00001E-01 1.19841E+00 1.19841E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.45680E+00 0.00000E+00 4 483 BP 15 1.00003E+00 9.99989E-01 9.99989E-01 0.00000E+00 0.00000E+00 0.00000E+00 2.99997E+00 0.00000E+00 4 494 UZ 16 1.10000E+00 9.58385E-01 9.58385E-01 0.00000E+00 0.00000E+00 0.00000E+00 2.89998E+00 0.00000E+00 Total Time 0.359E+00 3d ... done Starting 3d ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 1 1 EP 1 0.00000E+00 1.00000E+00 1.41070E-01 9.90000E-01 0.00000E+00 0.00000E+00 3.00000E+00 9.90000E-01 1 172 BP 2 2.58352E-13 1.00000E+00 4.99999E-01 8.66026E-01 0.00000E+00 0.00000E+00 3.00000E+00 8.66026E-01 1 793 BP 3 2.38302E-11 1.00000E+00 4.99999E-01 -8.66026E-01 0.00000E+00 0.00000E+00 3.00000E+00 -8.66026E-01 1 1414 BP 4 -5.02959E-15 1.00000E+00 -1.00000E+00 -1.78467E-09 0.00000E+00 0.00000E+00 3.00000E+00 -1.78467E-09 1 1840 UZ 5 2.11575E-17 1.00000E+00 -1.33852E-01 9.91001E-01 0.00000E+00 0.00000E+00 3.00000E+00 9.91001E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 2 76 UZ 6 5.00000E-01 8.66025E-01 1.11603E-11 8.66025E-01 0.00000E+00 0.00000E+00 2.75000E+00 8.66025E-01 2 147 BP 7 9.99990E-01 9.99995E-01 -4.99990E-01 8.66025E-01 0.00000E+00 0.00000E+00 2.99999E+00 8.66025E-01 2 162 UZ 8 1.10000E+00 1.05357E+00 -6.00000E-01 8.66025E-01 0.00000E+00 0.00000E+00 3.11000E+00 8.66025E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 3 76 UZ 9 5.00000E-01 8.66025E-01 1.11919E-11 -8.66025E-01 0.00000E+00 0.00000E+00 2.75000E+00 -8.66025E-01 3 147 BP 10 9.99990E-01 9.99995E-01 -4.99990E-01 -8.66025E-01 0.00000E+00 0.00000E+00 2.99999E+00 -8.66025E-01 3 162 UZ 11 1.10000E+00 1.05357E+00 -6.00000E-01 -8.66025E-01 0.00000E+00 0.00000E+00 3.11000E+00 -8.66025E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 4 59 UZ 12 4.99999E-01 1.19841E+00 -1.19841E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.45680E+00 0.00000E+00 4 244 UZ 13 5.00000E-01 5.51007E-09 -5.51007E-09 0.00000E+00 0.00000E+00 0.00000E+00 4.00000E+00 0.00000E+00 4 429 UZ 14 5.00001E-01 1.19841E+00 1.19841E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.45680E+00 0.00000E+00 4 483 BP 15 1.00003E+00 9.99989E-01 9.99989E-01 0.00000E+00 0.00000E+00 0.00000E+00 2.99997E+00 0.00000E+00 4 494 UZ 16 1.10000E+00 9.58385E-01 9.58385E-01 0.00000E+00 0.00000E+00 0.00000E+00 2.89998E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 5 176 UZ 17 1.00000E+00 1.00000E+00 -1.33861E-01 9.91000E-01 0.00000E+00 0.00000E+00 3.00000E+00 9.91000E-01 Total Time 0.382E+00 3d ... done Starting 3d ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) PAR(11) PAR(15) PAR(16) 5 760 BP 18 1.00000E+00 1.00000E+00 1.00000E+00 5.63120E-15 0.00000E+00 0.00000E+00 3.00000E+00 5.63120E-15 5 1381 BP 19 1.00000E+00 1.00000E+00 -4.99999E-01 -8.66026E-01 0.00000E+00 0.00000E+00 3.00000E+00 -8.66026E-01 5 2000 EP 20 1.00000E+00 1.00000E+00 -5.04557E-01 8.63378E-01 0.00000E+00 0.00000E+00 3.00000E+00 8.63378E-01 Total Time 0.274E+00 3d ... done Saving to b.lagrange_points, s.lagrange_points, and d.lagrange_points ... done Demo python/n-body is done Doing r3b Version 07p Copying demo r3b ... done Demo r3b is started ***Compute libration points gfortran -fopenmp -O -c r3b.f90 -o r3b.o gfortran -fopenmp -O r3b.o -o r3b.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting r3b ... BR PT TY LAB mu L2-NORM x y z ev1 ev2 ev3 1 1 EP 1 0.00000E+00 1.00000E+00 1.41070E-01 9.90000E-01 0.00000E+00 6.28319E+00 6.28319E+00 3.43182E+03 1 25 BP 2 -5.87409E-11 1.00000E+00 4.99917E-01 8.66073E-01 0.00000E+00 6.28319E+00 6.28319E+00 0.00000E+00 1 83 BP 3 -8.10663E-09 1.00000E+00 5.00000E-01 -8.66025E-01 0.00000E+00 6.28319E+00 6.28319E+00 0.00000E+00 1 141 BP 4 -4.41108E-08 1.00000E+00 -1.00000E+00 -7.76934E-08 0.00000E+00 6.28319E+00 6.28319E+00 1.84647E+04 1 181 UZ 5 -6.90239E-17 1.00000E+00 -1.33862E-01 9.91000E-01 0.00000E+00 6.28319E+00 6.28319E+00 0.00000E+00 BR PT TY LAB mu L2-NORM x y z ev1 ev2 ev3 2 13 UZ 6 6.30000E-02 9.70036E-01 4.37000E-01 8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 2 27 BP 7 1.00000E+00 1.00000E+00 -5.00000E-01 8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 2 29 UZ 8 1.10000E+00 1.05357E+00 -6.00000E-01 8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 BR PT TY LAB mu L2-NORM x y z ev1 ev2 ev3 3 13 UZ 9 6.30000E-02 9.70036E-01 4.37000E-01 -8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 3 27 BP 10 1.00000E+00 1.00000E+00 -5.00000E-01 -8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 3 29 UZ 11 1.10000E+00 1.05357E+00 -6.00000E-01 -8.66025E-01 0.00000E+00 6.28319E+00 0.00000E+00 0.00000E+00 BR PT TY LAB mu L2-NORM x y z ev1 ev2 ev3 4 12 UZ 12 6.29987E-02 1.02624E+00 -1.02624E+00 4.30521E-55 0.00000E+00 5.98154E+00 6.11212E+00 0.00000E+00 4 66 UZ 13 6.30047E-02 6.84812E-01 6.84812E-01 0.00000E+00 0.00000E+00 2.46895E+00 2.52972E+00 0.00000E+00 4 76 UZ 14 6.30044E-02 1.23970E+00 1.23970E+00 0.00000E+00 0.00000E+00 3.65074E+00 3.82721E+00 0.00000E+00 4 93 BP 15 1.00000E+00 9.99999E-01 9.99999E-01 0.00000E+00 0.00000E+00 6.28319E+00 6.28320E+00 2.75051E+03 4 95 UZ 16 1.10000E+00 9.58386E-01 9.58386E-01 0.00000E+00 0.00000E+00 6.56369E+00 7.11528E+00 1.13984E+01 Total Time 0.223E-01 r3b ... done L1: Label: 13 (UZ7, TY='HB5'); imaginary part: 2.54488372870; period: 2.46894788800 Label: 13 (UZ7, TY='HB6'); imaginary part: 2.48375085451; period: 2.52971641490 L2: Label: 14 (UZ8, TY='HB5'); imaginary part: 1.72107221193; period: 3.65073891940 Label: 14 (UZ8, TY='HB6'); imaginary part: 1.64171594889; period: 3.82720610800 L3: Label: 12 (UZ6, TY='HB5'); imaginary part: 1.05042944815; period: 5.98153956770 Label: 12 (UZ6, TY='HB6'); imaginary part: 1.02798826042; period: 6.11211776350 L4: Label: 6 (UZ2, TY='HB5'); imaginary part: 1.00000000000; period: 6.28318530720 L5: Label: 9 (UZ4, TY='HB5'); imaginary part: 1.00000000000; period: 6.28318530720 ***Lagrange family L1*** Starting r3b ... BR PT TY LAB lambda L2-NORM z MAX x MAX y MAX z PERIOD E fm 13 1 1 0.00000E+00 0.00000E+00 6.84812E-01 0.00000E+00 0.00000E+00 2.46895E+00 -1.76681E+00 0.00000E+00 13 2 2 6.41099E-16 0.00000E+00 6.91493E-01 2.50821E-02 0.00000E+00 2.47387E+00 -1.76506E+00 3.11816E+03 13 3 3 -2.72330E-15 0.00000E+00 6.98718E-01 5.03612E-02 0.00000E+00 2.48881E+00 -1.75979E+00 3.02063E+03 13 4 4 6.55697E-15 0.00000E+00 7.06562E-01 7.60276E-02 0.00000E+00 2.51436E+00 -1.75104E+00 2.86315E+03 13 5 BP 5 1.20285E-14 0.00000E+00 7.08064E-01 8.07609E-02 0.00000E+00 2.52022E+00 -1.74908E+00 2.82856E+03 13 6 6 7.67900E-14 0.00000E+00 7.26227E-01 1.34515E-01 0.00000E+00 2.61249E+00 -1.72005E+00 0.00000E+00 13 7 7 1.57312E-13 0.00000E+00 7.48871E-01 1.93317E-01 0.00000E+00 2.76925E+00 -1.67793E+00 0.00000E+00 13 8 8 3.34104E-12 0.00000E+00 7.81575E-01 2.60266E-01 0.00000E+00 3.01998E+00 -1.62494E+00 0.00000E+00 13 9 9 3.29233E-11 0.00000E+00 8.25995E-01 3.39410E-01 0.00000E+00 3.40520E+00 -1.56657E+00 0.00000E+00 13 10 BP 10 1.90868E-11 0.00000E+00 8.69307E-01 4.16444E-01 0.00000E+00 3.84080E+00 -1.52088E+00 4.17481E+02 13 11 11 -3.89843E-10 0.00000E+00 9.18785E-01 5.14600E-01 0.00000E+00 4.42287E+00 -1.47844E+00 2.28594E+02 13 12 12 2.75511E-08 0.00000E+00 9.62820E-01 6.18541E-01 0.00000E+00 5.01954E+00 -1.44679E+00 1.13335E+02 13 13 13 7.45115E-10 0.00000E+00 9.99039E-01 7.20396E-01 0.00000E+00 5.55755E+00 -1.42328E+00 5.61962E+01 13 14 14 6.06222E-09 0.00000E+00 1.02878E+00 8.16668E-01 0.00000E+00 6.01614E+00 -1.40412E+00 0.00000E+00 13 15 15 1.17305E-07 0.00000E+00 1.05336E+00 9.05999E-01 0.00000E+00 6.39030E+00 -1.38674E+00 0.00000E+00 13 16 16 1.63190E-09 0.00000E+00 1.07375E+00 9.88000E-01 0.00000E+00 6.68172E+00 -1.36934E+00 0.00000E+00 13 17 17 1.22094E-09 0.00000E+00 1.08250E+00 1.02556E+00 0.00000E+00 6.79759E+00 -1.36024E+00 0.00000E+00 13 18 18 9.21462E-10 0.00000E+00 1.09038E+00 1.06095E+00 0.00000E+00 6.89501E+00 -1.35071E+00 0.00000E+00 13 19 19 3.25712E-09 0.00000E+00 1.09755E+00 1.09453E+00 0.00000E+00 6.97541E+00 -1.34061E+00 0.00000E+00 13 20 20 5.56141E-09 0.00000E+00 1.10394E+00 1.12596E+00 0.00000E+00 7.03999E+00 -1.32987E+00 0.00000E+00 13 21 21 1.25902E-08 0.00000E+00 1.10959E+00 1.15540E+00 0.00000E+00 7.09004E+00 -1.31841E+00 0.00000E+00 13 22 22 1.70409E-09 0.00000E+00 1.11450E+00 1.18211E+00 0.00000E+00 7.12686E+00 -1.30619E+00 0.00000E+00 13 23 23 2.46949E-09 0.00000E+00 1.11872E+00 1.20746E+00 0.00000E+00 7.15177E+00 -1.29318E+00 0.00000E+00 13 24 24 5.00249E-09 0.00000E+00 1.12224E+00 1.23159E+00 0.00000E+00 7.16605E+00 -1.27937E+00 0.00000E+00 13 25 25 3.69859E-09 0.00000E+00 1.12511E+00 1.25454E+00 0.00000E+00 7.17096E+00 -1.26475E+00 0.00000E+00 13 26 26 6.01541E-09 0.00000E+00 1.12731E+00 1.27471E+00 0.00000E+00 7.16769E+00 -1.24937E+00 0.00000E+00 13 27 27 1.37009E-08 0.00000E+00 1.12890E+00 1.29309E+00 0.00000E+00 7.15736E+00 -1.23326E+00 0.00000E+00 13 28 28 2.24140E-08 0.00000E+00 1.12976E+00 1.31066E+00 0.00000E+00 7.14100E+00 -1.21647E+00 0.00000E+00 13 29 29 5.94998E-08 0.00000E+00 1.13024E+00 1.32582E+00 0.00000E+00 7.11961E+00 -1.19908E+00 0.00000E+00 13 30 30 2.12771E-07 0.00000E+00 1.13017E+00 1.33932E+00 0.00000E+00 7.09407E+00 -1.18118E+00 0.00000E+00 13 31 31 -1.63140E-08 0.00000E+00 1.12981E+00 1.34674E+00 0.00000E+00 7.08005E+00 -1.17210E+00 0.00000E+00 13 32 32 -9.54875E-09 0.00000E+00 1.12967E+00 1.34973E+00 0.00000E+00 7.07278E+00 -1.16754E+00 0.00000E+00 13 33 33 1.90011E-09 0.00000E+00 1.12949E+00 1.35262E+00 0.00000E+00 7.06535E+00 -1.16296E+00 0.00000E+00 13 34 34 1.02331E-08 0.00000E+00 1.12916E+00 1.35543E+00 0.00000E+00 7.05776E+00 -1.15836E+00 0.00000E+00 13 35 35 1.25597E-08 0.00000E+00 1.12888E+00 1.35814E+00 0.00000E+00 7.05002E+00 -1.15374E+00 0.00000E+00 13 36 36 1.51526E-08 0.00000E+00 1.12857E+00 1.36075E+00 0.00000E+00 7.04214E+00 -1.14911E+00 0.00000E+00 13 37 37 3.27871E-08 0.00000E+00 1.12848E+00 1.36248E+00 0.00000E+00 7.03414E+00 -1.14447E+00 0.00000E+00 13 38 UZ 38 3.52292E-08 0.00000E+00 1.12816E+00 1.36508E+00 0.00000E+00 7.02635E+00 -1.14000E+00 0.00000E+00 Total Time 0.115E+00 r3b ... done Saving fort.7 as b.L1 ... done Saving fort.8 as s.L1 ... done Saving fort.9 as d.L1 ... done ***Halo family H1*** Starting r3b ... BR PT TY LAB lambda L2-NORM z MAX x MAX y MAX z PERIOD E fm 14 2 1 8.80222E-15 1.87093E-02 7.10376E-01 8.53127E-02 2.76622E-02 2.52496E+00 -1.74495E+00 2.69519E+03 14 4 2 -2.50224E-15 5.25841E-02 7.25469E-01 1.11626E-01 7.88043E-02 2.55659E+00 -1.71733E+00 1.92968E+03 14 6 3 -3.64296E-15 8.31690E-02 7.50037E-01 1.45654E-01 1.26968E-01 2.60592E+00 -1.67318E+00 1.08387E+03 14 8 4 2.42355E-15 1.13216E-01 7.84780E-01 1.81908E-01 1.76517E-01 2.66103E+00 -1.61699E+00 4.75204E+02 14 10 5 1.18382E-14 1.42624E-01 8.30926E-01 2.15485E-01 2.27017E-01 2.69212E+00 -1.55505E+00 1.63338E+02 14 12 6 4.54756E-14 1.69940E-01 8.84867E-01 2.36050E-01 2.73427E-01 2.63584E+00 -1.49859E+00 4.56625E+01 14 14 7 6.20325E-13 1.95426E-01 9.27000E-01 2.27906E-01 3.08188E-01 2.44001E+00 -1.46558E+00 1.05972E+01 14 16 8 1.50444E-12 2.19346E-01 9.41353E-01 2.00819E-01 3.30992E-01 2.22779E+00 -1.45811E+00 2.04901E+00 14 18 9 2.83810E-11 2.42264E-01 9.43276E-01 1.73650E-01 3.50789E-01 2.08707E+00 -1.45727E+00 0.00000E+00 14 20 10 9.34191E-11 2.66340E-01 9.42008E-01 1.50463E-01 3.73450E-01 2.02031E+00 -1.45344E+00 0.00000E+00 14 22 11 1.93059E-10 2.95469E-01 9.40308E-01 1.32299E-01 4.05009E-01 2.03184E+00 -1.44047E+00 0.00000E+00 14 24 12 -1.12587E-08 3.38996E-01 9.38936E-01 1.22316E-01 4.58882E-01 2.15036E+00 -1.40727E+00 0.00000E+00 14 25 BP 13 -2.11357E-10 3.47805E-01 9.38779E-01 1.22142E-01 4.70413E-01 2.18050E+00 -1.39920E+00 1.00000E+00 14 26 14 6.39603E-09 3.79972E-01 9.38371E-01 1.25264E-01 5.13729E-01 2.29418E+00 -1.36701E+00 1.00000E+00 14 28 15 -1.93439E-09 4.14700E-01 9.38112E-01 1.33971E-01 5.61839E-01 2.41325E+00 -1.32812E+00 1.00000E+00 14 30 16 -8.16951E-10 4.46886E-01 9.37957E-01 1.46110E-01 6.07391E-01 2.51465E+00 -1.28829E+00 1.00000E+00 14 32 17 -2.03396E-09 4.76124E-01 9.37856E-01 1.60304E-01 6.49344E-01 2.59800E+00 -1.24855E+00 1.00000E+00 14 34 18 -3.49409E-09 5.02632E-01 9.37782E-01 1.75878E-01 6.87819E-01 2.66644E+00 -1.20909E+00 1.00000E+00 14 36 19 -3.57308E-09 5.26738E-01 9.37727E-01 1.92452E-01 7.22942E-01 2.72321E+00 -1.16979E+00 1.00000E+00 14 38 20 -4.38558E-09 5.48707E-01 9.37683E-01 2.09661E-01 7.55151E-01 2.77084E+00 -1.13055E+00 1.00000E+00 14 40 21 -4.74689E-09 5.68738E-01 9.37646E-01 2.27468E-01 7.84527E-01 2.81123E+00 -1.09128E+00 1.00000E+00 14 42 22 -4.59070E-09 5.86980E-01 9.37615E-01 2.45937E-01 8.11505E-01 2.84579E+00 -1.05193E+00 1.00000E+00 14 44 23 -5.32064E-09 6.03542E-01 9.37589E-01 2.64577E-01 8.35904E-01 2.87561E+00 -1.01247E+00 1.00000E+00 14 46 24 -6.20099E-09 6.18511E-01 9.37565E-01 2.83926E-01 8.58470E-01 2.90153E+00 -9.72870E-01 1.00000E+00 14 48 25 -5.84240E-09 6.31952E-01 9.37544E-01 3.03347E-01 8.78639E-01 2.92419E+00 -9.33146E-01 1.00000E+00 14 50 26 -4.43485E-09 6.43920E-01 9.37526E-01 3.23149E-01 8.96800E-01 2.94410E+00 -8.93299E-01 1.00000E+00 14 52 27 -4.00129E-09 6.54455E-01 9.37509E-01 3.43087E-01 9.12869E-01 2.96168E+00 -8.53345E-01 1.00000E+00 14 54 28 -3.72523E-09 6.63593E-01 9.37494E-01 3.63298E-01 9.26895E-01 2.97726E+00 -8.13300E-01 1.00000E+00 14 56 29 -3.33701E-09 6.71362E-01 9.37480E-01 3.83443E-01 9.38932E-01 2.99111E+00 -7.73187E-01 1.00000E+00 14 58 30 -2.88752E-09 6.77785E-01 9.37467E-01 4.04101E-01 9.48992E-01 3.00346E+00 -7.33030E-01 1.00000E+00 14 60 31 -2.67251E-09 6.82880E-01 9.37456E-01 4.24625E-01 9.57235E-01 3.01447E+00 -6.92854E-01 1.00000E+00 14 62 32 -2.90967E-09 6.86664E-01 9.37446E-01 4.45075E-01 9.63454E-01 3.02432E+00 -6.52686E-01 1.00000E+00 14 64 33 -2.31515E-09 6.89147E-01 9.37437E-01 4.65775E-01 9.67905E-01 3.03311E+00 -6.12556E-01 1.00000E+00 14 66 34 -2.10943E-09 6.90339E-01 9.37429E-01 4.86362E-01 9.70573E-01 3.04096E+00 -5.72494E-01 1.00000E+00 14 68 35 -2.14983E-09 6.90247E-01 9.37422E-01 5.07124E-01 9.71540E-01 3.04796E+00 -5.32529E-01 1.00000E+00 14 70 36 -2.16566E-09 6.88875E-01 9.37416E-01 5.27409E-01 9.70631E-01 3.05416E+00 -4.92694E-01 1.00000E+00 14 72 37 -1.88239E-09 6.86225E-01 9.37412E-01 5.47937E-01 9.67826E-01 3.05963E+00 -4.53022E-01 1.00000E+00 14 74 38 -1.52087E-09 6.82297E-01 9.37409E-01 5.68225E-01 9.63191E-01 3.06442E+00 -4.13547E-01 1.00000E+00 14 76 39 -1.70644E-09 6.77089E-01 9.37409E-01 5.88709E-01 9.56779E-01 3.06856E+00 -3.74304E-01 1.00000E+00 14 78 40 -1.59071E-09 6.70598E-01 9.37410E-01 6.08736E-01 9.48518E-01 3.07207E+00 -3.35329E-01 1.00000E+00 14 80 41 -9.97696E-10 6.62819E-01 9.37415E-01 6.28684E-01 9.38423E-01 3.07498E+00 -2.96662E-01 1.00000E+00 14 82 42 -9.64265E-10 6.53742E-01 9.37423E-01 6.48171E-01 9.26595E-01 3.07727E+00 -2.58341E-01 1.00000E+00 14 84 43 -8.85543E-10 6.43360E-01 9.37435E-01 6.67455E-01 9.12829E-01 3.07895E+00 -2.20407E-01 1.00000E+00 14 86 44 -8.56950E-10 6.31662E-01 9.37453E-01 6.86506E-01 8.97223E-01 3.07999E+00 -1.82905E-01 1.00000E+00 14 88 45 -6.31910E-10 6.18634E-01 9.37479E-01 7.05177E-01 8.79599E-01 3.08037E+00 -1.45880E-01 1.00000E+00 14 90 46 -6.24890E-10 6.04261E-01 9.37515E-01 7.23344E-01 8.60216E-01 3.08005E+00 -1.09378E-01 1.00000E+00 14 92 47 -6.71779E-10 5.88527E-01 9.37564E-01 7.40614E-01 8.38994E-01 3.07895E+00 -7.34502E-02 1.00000E+00 14 94 48 -6.44611E-10 5.71413E-01 9.37631E-01 7.58148E-01 8.15825E-01 3.07699E+00 -3.81486E-02 1.00000E+00 14 96 49 -5.80908E-10 5.52898E-01 9.37723E-01 7.74659E-01 7.90645E-01 3.07406E+00 -3.52762E-03 1.00000E+00 14 98 50 -4.88268E-10 5.32960E-01 9.37849E-01 7.90437E-01 7.63402E-01 3.07001E+00 3.03560E-02 1.00000E+00 14 100 51 -4.62411E-10 5.11574E-01 9.38023E-01 8.05025E-01 7.34268E-01 3.06463E+00 6.34438E-02 1.00000E+00 14 102 52 -3.80445E-10 4.88718E-01 9.38266E-01 8.18908E-01 7.03077E-01 3.05769E+00 9.56767E-02 1.00000E+00 14 104 53 -3.80340E-10 4.64368E-01 9.38612E-01 8.31969E-01 6.69882E-01 3.04883E+00 1.26996E-01 1.00000E+00 14 106 54 -2.39059E-10 4.38511E-01 9.39106E-01 8.43543E-01 6.34570E-01 3.03763E+00 1.57347E-01 1.00000E+00 14 108 55 -2.16504E-10 4.11148E-01 9.39827E-01 8.53382E-01 5.97217E-01 3.02354E+00 1.86684E-01 1.00000E+00 14 110 56 -1.93563E-10 3.82316E-01 9.40895E-01 8.61373E-01 5.57792E-01 3.00587E+00 2.14978E-01 1.00000E+00 14 112 57 -1.26365E-10 3.52127E-01 9.42492E-01 8.67122E-01 5.16666E-01 2.98386E+00 2.42236E-01 1.00000E+00 14 114 58 -1.12763E-10 3.20814E-01 9.44893E-01 8.70342E-01 4.73918E-01 2.95677E+00 2.68522E-01 1.00000E+00 14 116 59 -1.01127E-10 2.88803E-01 9.48462E-01 8.70674E-01 4.30135E-01 2.92431E+00 2.93994E-01 1.00000E+00 14 118 60 -5.76050E-11 2.56708E-01 9.53577E-01 8.68844E-01 3.85936E-01 2.88709E+00 3.18917E-01 1.00000E+00 14 120 61 -5.26289E-11 2.25198E-01 9.60470E-01 8.64936E-01 3.42083E-01 2.84707E+00 3.43589E-01 1.00000E+00 14 122 62 -2.84881E-11 1.94757E-01 9.69014E-01 8.60097E-01 2.98970E-01 2.80709E+00 3.68148E-01 1.00000E+00 14 124 63 -2.64388E-11 1.65555E-01 9.78662E-01 8.55155E-01 2.56669E-01 2.77000E+00 3.92326E-01 0.00000E+00 14 126 64 -2.13225E-11 1.37508E-01 9.88611E-01 8.50999E-01 2.15051E-01 2.73775E+00 4.15405E-01 0.00000E+00 14 128 65 -1.31469E-11 1.10403E-01 9.98018E-01 8.47893E-01 1.73926E-01 2.71128E+00 4.36389E-01 0.00000E+00 14 130 66 -1.13793E-11 8.39964E-02 1.00616E+00 8.45708E-01 1.33049E-01 2.69076E+00 4.54252E-01 -4.70122E+00 14 132 67 -1.06249E-11 5.80669E-02 1.01252E+00 8.44165E-01 9.23416E-02 2.67602E+00 4.68110E-01 -3.86291E+00 14 134 68 -9.82798E-12 3.24326E-02 1.01674E+00 8.43444E-01 5.17025E-02 2.66676E+00 4.77296E-01 -3.46796E+00 14 136 69 -1.14266E-11 6.94949E-03 1.01862E+00 8.43032E-01 1.10908E-02 2.66276E+00 4.81381E-01 -3.32782E+00 14 137 EP 70 -1.14118E-11 1.39684E-08 1.01871E+00 8.43014E-01 2.22935E-08 2.66257E+00 4.81579E-01 -3.32149E+00 Total Time 0.295E+00 r3b ... done Saving fort.7 as b.H1 ... done Saving fort.8 as s.H1 ... done Saving fort.9 as d.H1 ... done ***Vertical family V1*** Starting r3b ... BR PT TY LAB lambda L2-NORM z MAX x MAX y MAX z PERIOD E fm 13 1 1 0.00000E+00 0.00000E+00 6.84812E-01 0.00000E+00 0.00000E+00 2.52972E+00 -1.76681E+00 0.00000E+00 13 2 2 3.70853E-15 1.87123E-02 6.85507E-01 1.02401E-04 2.64560E-02 2.53573E+00 -1.76466E+00 3.79502E+03 13 3 3 3.78324E-15 3.95545E-02 6.87902E-01 4.61703E-04 5.58710E-02 2.55663E+00 -1.75730E+00 3.63694E+03 13 4 4 3.50442E-15 6.31229E-02 6.92604E-01 1.19622E-03 8.89964E-02 2.59840E+00 -1.74313E+00 3.34593E+03 13 5 5 1.87029E-14 9.03451E-02 7.00490E-01 2.51948E-03 1.26994E-01 2.67090E+00 -1.72011E+00 2.90961E+03 13 6 6 1.22637E-13 1.22722E-01 7.12840E-01 4.83644E-03 1.71716E-01 2.79156E+00 -1.68567E+00 2.33682E+03 13 7 7 1.12438E-13 1.62842E-01 7.31361E-01 8.94544E-03 2.26322E-01 2.99363E+00 -1.63675E+00 1.67400E+03 13 8 8 8.49961E-13 2.10121E-01 7.54674E-01 1.54372E-02 2.89743E-01 3.30358E+00 -1.57698E+00 1.07515E+03 13 9 9 5.15260E-12 2.68029E-01 7.78312E-01 2.42110E-02 3.66707E-01 3.76522E+00 -1.50850E+00 6.27619E+02 13 10 BP 10 4.95167E-12 2.89639E-01 7.83996E-01 2.69532E-02 3.95409E-01 3.94949E+00 -1.48506E+00 0.00000E+00 13 11 11 3.39293E-12 3.78382E-01 7.81380E-01 2.80908E-02 5.14217E-01 4.67583E+00 -1.39799E+00 0.00000E+00 13 12 12 9.19079E-12 4.58048E-01 7.45951E-01 1.00163E-02 6.22494E-01 5.19993E+00 -1.32196E+00 0.00000E+00 13 13 13 3.43185E-11 5.16011E-01 7.33150E-01 2.20998E-02 7.02178E-01 5.49498E+00 -1.26025E+00 0.00000E+00 13 14 14 3.69887E-11 5.63663E-01 7.30732E-01 5.49383E-02 7.68421E-01 5.69206E+00 -1.20140E+00 0.00000E+00 13 15 15 3.47665E-11 6.04211E-01 7.32122E-01 9.11980E-02 8.25261E-01 5.83383E+00 -1.14250E+00 0.00000E+00 13 16 16 2.44336E-11 6.38871E-01 7.35187E-01 1.29641E-01 8.74294E-01 5.94004E+00 -1.08268E+00 0.00000E+00 13 17 17 2.02866E-11 6.68275E-01 7.39003E-01 1.69632E-01 9.16143E-01 6.02195E+00 -1.02166E+00 0.00000E+00 13 18 18 1.50827E-11 6.92784E-01 7.43147E-01 2.10774E-01 9.51308E-01 6.08653E+00 -9.59406E-01 0.00000E+00 13 19 19 3.96254E-11 7.12624E-01 7.47380E-01 2.52770E-01 9.80126E-01 6.13836E+00 -8.95984E-01 0.00000E+00 13 20 20 3.07855E-11 7.27937E-01 7.51535E-01 2.95386E-01 1.00261E+00 6.18058E+00 -8.31533E-01 0.00000E+00 13 21 21 2.16065E-11 7.38814E-01 7.55563E-01 3.38422E-01 1.01893E+00 6.21541E+00 -7.66228E-01 0.00000E+00 13 22 22 6.87632E-11 7.45310E-01 7.59452E-01 3.81702E-01 1.02904E+00 6.24446E+00 -7.00261E-01 0.00000E+00 13 23 23 9.79428E-11 7.47454E-01 7.63199E-01 4.25062E-01 1.03317E+00 6.26891E+00 -6.33845E-01 0.00000E+00 13 24 24 1.24854E-10 7.45254E-01 7.66801E-01 4.68346E-01 1.03120E+00 6.28966E+00 -5.67203E-01 0.00000E+00 13 25 25 2.71502E-10 7.38701E-01 7.70257E-01 5.11398E-01 1.02308E+00 6.30739E+00 -5.00574E-01 0.00000E+00 13 26 26 3.54147E-10 7.27773E-01 7.73562E-01 5.54058E-01 1.00885E+00 6.32264E+00 -4.34214E-01 0.00000E+00 13 27 27 4.31120E-10 7.12435E-01 7.76718E-01 5.96161E-01 9.88419E-01 6.33581E+00 -3.68397E-01 0.00000E+00 13 28 28 3.84752E-10 6.92643E-01 7.79724E-01 6.37530E-01 9.61737E-01 6.34724E+00 -3.03422E-01 0.00000E+00 13 29 29 4.45919E-10 6.68346E-01 7.82575E-01 6.77973E-01 9.28673E-01 6.35719E+00 -2.39617E-01 0.00000E+00 13 30 30 4.98306E-10 6.39491E-01 7.85269E-01 7.17278E-01 8.89176E-01 6.36586E+00 -1.77345E-01 0.00000E+00 13 31 31 2.25730E-10 6.06031E-01 7.87800E-01 7.55210E-01 8.43430E-01 6.37343E+00 -1.17010E-01 0.00000E+00 13 32 32 2.41940E-10 5.67926E-01 7.90163E-01 7.91505E-01 7.90851E-01 6.38002E+00 -5.90654E-02 0.00000E+00 13 33 33 2.51378E-10 5.25162E-01 7.92349E-01 8.25869E-01 7.31683E-01 6.38575E+00 -4.01894E-03 0.00000E+00 13 34 34 6.16149E-10 4.77760E-01 7.94348E-01 8.57970E-01 6.65977E-01 6.39070E+00 4.75617E-02 0.00000E+00 13 35 35 6.64546E-10 4.25799E-01 7.96149E-01 8.87441E-01 5.93795E-01 6.39493E+00 9.50478E-02 0.00000E+00 13 36 36 7.01785E-10 3.69438E-01 7.97736E-01 9.13881E-01 5.15387E-01 6.39850E+00 1.37754E-01 0.00000E+00 13 37 37 5.57958E-10 3.08946E-01 7.99094E-01 9.36862E-01 4.31135E-01 6.40144E+00 1.74953E-01 0.00000E+00 13 38 38 5.69010E-10 2.44729E-01 8.00209E-01 9.55948E-01 3.41607E-01 6.40377E+00 2.05902E-01 0.00000E+00 13 39 39 5.73083E-10 1.77354E-01 8.01063E-01 9.70721E-01 2.47609E-01 6.40551E+00 2.29889E-01 0.00000E+00 13 40 UZ 40 1.83259E-10 1.76893E-01 8.01068E-01 9.70804E-01 2.46964E-01 6.40552E+00 2.30025E-01 0.00000E+00 Total Time 0.123E+00 r3b ... done Saving fort.7 as b.V1 ... done Saving fort.8 as s.V1 ... done Saving fort.9 as d.V1 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo r3b is done Doing rev Version 07p Copying demo rev ... done Demo rev is started rev : first run : increase PAR(1) gfortran -fopenmp -O -c rev.f90 -o rev.o gfortran -fopenmp -O rev.o -o rev.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting rev ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 1 1 EP 1 1.60000E+00 2.85704E-01 3.62232E-01 2.38513E-01 7.03009E-01 6.57178E-01 1 8 UZ 2 1.70000E+00 2.90288E-01 4.18225E-01 2.89525E-01 6.86246E-01 6.35709E-01 1 11 UZ 3 1.80000E+00 2.95723E-01 4.80604E-01 3.57521E-01 6.31696E-01 5.76606E-01 1 14 UZ 4 1.90000E+00 2.74864E-01 4.43069E-01 3.70028E-01 4.81754E-01 4.51471E-01 1 20 EP 5 1.99678E+00 1.13379E-01 9.59430E-02 9.54999E-02 9.64711E-02 9.61569E-02 Total Time 0.114E+00 rev ... done Saving to b.1, s.1, and d.1 ... done rev : second run : continue in reverse direction Starting rev ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(22) 1 11 UZ 6 1.00001E+00 2.81700E-01 1.76625E-01 9.63277E-02 6.73502E-01 6.30432E-01 -3.00001E+00 1 22 UZ 7 -1.00743E-07 2.89421E-01 4.69706E-02 2.14099E-02 5.59108E-01 4.92090E-01 -2.00000E+00 1 33 UZ 8 -1.00000E+00 3.02208E-01 4.32654E-03 1.74629E-03 4.56137E-01 3.71266E-01 -1.00000E+00 1 44 UZ 9 -2.00000E+00 3.16798E-01 1.22616E-11 1.14680E-11 3.75273E-01 2.81879E-01 2.66362E-08 1 55 UZ 10 -3.00000E+00 3.31497E-01 -2.74260E-10 0.00000E+00 3.13595E-01 2.17983E-01 1.00000E+00 Total Time 0.162E+00 rev ... done Appending fort.7 to b.1 ... done Appending fort.8 to s.1 ... done Appending fort.9 to d.1 ... done rev : third run : restart from solution with different reversibility Starting rev ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 1 1 EP 1 1.60000E+00 3.69766E-01 3.83942E-01 6.23319E-01 7.01808E-01 6.55902E-01 1 7 UZ 2 1.70000E+00 3.83640E-01 4.89066E-01 6.35016E-01 6.80523E-01 6.24032E-01 1 9 LP 3 1.71157E+00 3.92475E-01 5.46080E-01 6.46888E-01 6.71323E-01 6.09986E-01 1 11 UZ 4 1.69884E+00 4.04207E-01 6.10428E-01 6.69366E-01 6.69778E-01 6.03805E-01 1 14 UZ 5 1.60000E+00 4.32940E-01 7.77395E-01 7.42784E-01 6.86041E-01 6.08536E-01 1 26 UZ 6 1.00000E+00 4.80849E-01 1.08252E+00 8.34574E-01 7.03811E-01 6.20951E-01 1 49 UZ 7 -5.45245E-08 5.15846E-01 1.25849E+00 6.37427E-01 5.73660E-01 4.95153E-01 1 137 MX 8 -9.25986E-01 5.44524E-01 1.32410E+00 4.60845E-01 4.63002E-01 3.79506E-01 Total Time 0.676E+00 rev ... done Saving to b.3, s.3, and d.3 ... done rev : fourth run : continue in reverse direction Starting rev ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) 1 7 UZ 9 1.60000E+00 3.70171E-01 3.84045E-01 6.24618E-01 7.01223E-01 6.56168E-01 1 33 UZ 10 9.99998E-01 3.61440E-01 1.77504E-01 5.84083E-01 6.73397E-01 6.30863E-01 1 94 UZ 11 -1.59851E-06 3.71301E-01 4.69892E-02 5.09415E-01 5.58747E-01 4.92205E-01 1 159 MX 12 -2.46869E-01 3.74954E-01 3.05093E-02 4.91769E-01 5.31421E-01 4.58506E-01 Total Time 0.491E+00 rev ... done Appending fort.7 to b.3 ... done Appending fort.8 to s.3 ... done Appending fort.9 to d.3 ... done Demo rev is done Doing san Version 07p Copying demo san ... done Demo san is started Starting from analytical solution san : first run : continuation in PAR(1) Runner configured gfortran -fopenmp -O -c san.f90 -o san.o gfortran -fopenmp -O san.o -o san.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting san ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 1 EP 1 0.00000E+00 4.00000E-01 1.00000E+00 3.84710E-01 0.00000E+00 0.00000E+00 1 5 UZ 2 2.50000E-01 4.03054E-01 9.99948E-01 3.84663E-01 0.00000E+00 -1.85976E-11 Total Time 0.226E-01 san ... done san : second run : generate adjoint variables Starting san ... BR PT TY LAB PAR(9) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 2 EP 3 5.00000E-02 4.03054E-01 9.99948E-01 3.84663E-01 0.00000E+00 -1.85977E-11 Total Time 0.191E-01 san ... done san : third run : continue homoclinic orbit and adjoint Starting san ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PAR(8) PAR(10) PAR(21) PAR(33) 1 20 4 7.84722E-01 4.03054E-01 1.00000E+00 3.84797E-01 -2.72140E-11 -4.21813E-09 5.00000E-01 1.44112E+01 1 27 UZ 5 1.00000E+00 4.03054E-01 9.99994E-01 3.84856E-01 -3.91146E-11 -4.38660E-09 5.00000E-01 5.70167E+00 1 35 UZ 6 1.23086E+00 4.03054E-01 9.99918E-01 3.84867E-01 -6.18296E-11 -4.62672E-09 5.00000E-01 -9.48584E-06 1 40 7 1.38397E+00 4.03054E-01 9.99995E-01 3.84898E-01 -8.41988E-11 -4.63701E-09 5.00000E-01 -1.34882E+00 1 50 EP 8 1.69521E+00 4.03054E-01 9.99949E-01 3.84880E-01 -1.36449E-10 -5.35972E-09 5.00000E-01 -5.31105E-01 Total Time 0.261E+00 san ... done Saving to b.3, s.3, and d.3 ... done san : fourth run : no convergence without dummy step Starting san ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) PAR(8) PAR(10) PAR(21) PAR(33) 1 2 MX 3 0.00000E+00 4.03054E-01 9.99948E-01 3.84663E-01 -1.85976E-11 0.00000E+00 5.00000E-01 4.75534E-09 Total Time 0.446E-01 san ... done san : fifth run : continue non-orientable orbit Starting san ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(8) PAR(10) PAR(21) PAR(33) 1 8 UZ 9 -1.30447E-07 4.00000E-01 9.99986E-01 3.84817E-01 3.41547E-12 -1.63406E-09 -2.60894E-07 2.05264E+00 1 20 EP 10 -4.67414E-01 4.11453E-01 9.99855E-01 3.84883E-01 1.86188E-12 -1.51349E-09 -9.34828E-01 1.21503E+01 Total Time 0.130E+00 san ... done Saving to b.5, s.5, and d.5 ... done san : sixth run : restart and homotopy to PAR(4)=1.0 Starting san ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 1 EP 1 0.00000E+00 4.00000E-01 1.00000E+00 3.84710E-01 0.00000E+00 0.00000E+00 1 12 UZ 2 1.00000E+00 4.00000E-01 9.99990E-01 3.84770E-01 6.20569E-09 -8.38611E-12 Total Time 0.280E-01 san ... done san : seventh run : homotopy to PAR(5)=0.0 Starting san ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 12 UZ 3 5.00001E-09 4.00000E-01 9.99782E-01 3.84676E-01 3.00509E-17 -1.41448E-11 Total Time 0.241E-01 san ... done san : eighth run : homotopy to PAR(1)=0.5 Starting san ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 8 UZ 4 5.00001E-01 4.13305E-01 9.99999E-01 3.84889E-01 3.10444E-17 -4.06097E-10 Total Time 0.363E-01 san ... done san : ninth run : homotopy to PAR(2)=3.0 Starting san ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 24 UZ 5 3.00000E+00 2.31713E-01 9.99955E-01 3.84808E-01 5.91360E-17 -3.91799E-10 Total Time 0.541E-01 san ... done san : tenth run : homotopy to PAR(7)=0.25 Starting san ... BR PT TY LAB PAR(7) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 1 5 UZ 6 2.49999E-01 2.31541E-01 9.86986E-01 3.68390E-01 9.64378E-02 6.73259E-02 Total Time 0.411E-01 san ... done san : eleventh run : continue in PAR(7) to detect orbit flip Starting san ... BR PT TY LAB PAR(7) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) PAR(31) 1 5 UZ 7 6.33545E-06 2.31713E-01 9.99920E-01 3.84899E-01 2.45641E-06 1.70968E-06 -8.70508E-05 1 11 UZ 8 -5.00001E-01 2.39329E-01 1.02786E+00 4.20695E-01 3.25896E-11 -1.35617E-01 4.88474E+00 Total Time 0.302E-01 san ... done Saving to b.11, s.11, and d.11 ... done san : twelfth run : three-parameter continuation of orbit flip Starting san ... BR PT TY LAB PAR(7) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) PAR(6) 1 5 9 -7.38786E-19 2.31713E-01 9.99997E-01 3.84864E-01 4.46911E-17 -2.91177E-10 -3.25000E-01 1 10 10 -5.27166E-19 2.31713E-01 9.99693E-01 3.84885E-01 4.69045E-17 -2.23972E-10 -8.25000E-01 1 15 11 -6.15227E-19 2.31713E-01 9.99992E-01 3.84745E-01 6.13188E-17 -2.91907E-10 -1.32500E+00 1 20 EP 12 -5.96425E-19 2.31713E-01 9.99998E-01 3.84839E-01 6.30757E-17 -3.20086E-10 -1.82500E+00 Total Time 0.613E-01 san ... done Saving to b.12, s.12, and d.12 ... done Demo san is done Doing she Version 07p Copying demo she ... done Demo she is started she : first run : continue heteroclinic orbit gfortran -fopenmp -O -c she.f90 -o she.o gfortran -fopenmp -O she.o -o she.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting she ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PAR(1) 1 1 EP 1 5.00000E-01 4.05950E-01 4.04815E-01 0.00000E+00 1.72970E-01 4.62910E-01 1.83488E-01 1.63875E-01 1 5 2 4.52847E-01 3.72688E-01 3.69466E-01 -1.77601E-11 1.56326E-01 4.39443E-01 1.80687E-01 1.36505E-01 1 10 3 3.94351E-01 3.30390E-01 3.23140E-01 -2.77671E-11 1.32739E-01 4.02142E-01 1.75822E-01 1.04419E-01 1 15 4 3.35908E-01 2.87331E-01 2.74158E-01 -6.23711E-11 1.09251E-01 3.60154E-01 1.68970E-01 7.51623E-02 1 20 5 2.77287E-01 2.43351E-01 2.22558E-01 -2.57607E-10 8.59849E-02 3.12824E-01 1.59392E-01 4.95320E-02 1 25 6 2.18210E-01 1.98147E-01 1.68710E-01 -2.10342E-09 6.31806E-02 2.59372E-01 1.45859E-01 2.84629E-02 1 30 EP 7 1.58178E-01 1.51246E-01 1.13722E-01 -2.34740E-08 4.14258E-02 1.99192E-01 1.26458E-01 1.29327E-02 Total Time 0.312E+00 she ... done Saving to b.1, s.1, and d.1 ... done she : second run : repeat with IEQUIB=-1 Starting she ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PAR(1) 1 1 EP 1 5.00000E-01 4.05950E-01 4.04815E-01 0.00000E+00 1.72970E-01 4.62910E-01 1.83488E-01 1.63875E-01 1 5 2 4.43202E-01 3.65772E-01 3.62016E-01 -1.88334E-11 1.52444E-01 4.33624E-01 1.80008E-01 1.31056E-01 1 10 3 3.72309E-01 3.14244E-01 3.04975E-01 -3.57288E-11 1.23849E-01 3.86878E-01 1.73475E-01 9.30098E-02 1 15 4 3.00884E-01 2.61156E-01 2.43597E-01 -1.34083E-10 9.52780E-02 3.32506E-01 1.63634E-01 5.93397E-02 1 20 5 2.28665E-01 2.06219E-01 1.78324E-01 -1.40500E-09 6.71306E-02 2.69286E-01 1.48604E-01 3.17994E-02 1 25 6 1.55541E-01 1.49165E-01 1.11351E-01 -2.61687E-08 4.05297E-02 1.96465E-01 1.25438E-01 1.23990E-02 1 30 EP 7 8.10746E-02 9.14311E-02 4.88530E-02 -1.67845E-07 1.80643E-02 1.17640E-01 9.00713E-02 2.38662E-03 Total Time 0.133E+00 she ... done she : third run : continue in reverse direction Starting she ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) PAR(1) 1 5 8 4.99759E-01 4.06015E-01 4.04638E-01 -1.42617E-11 1.75085E-01 4.66450E-01 1.83495E-01 1.63732E-01 1 10 9 5.70530E-01 4.55187E-01 4.54452E-01 -1.16842E-11 2.03273E-01 5.02686E-01 1.86369E-01 2.06526E-01 1 15 10 6.41644E-01 5.03184E-01 5.00782E-01 -1.03602E-11 2.31087E-01 5.34250E-01 1.88023E-01 2.50783E-01 1 20 11 7.13330E-01 5.50067E-01 5.43998E-01 -9.63906E-12 2.58678E-01 5.61816E-01 1.88726E-01 2.95934E-01 1 25 12 7.85769E-01 5.95871E-01 5.84422E-01 -9.19133E-12 2.85911E-01 5.86157E-01 1.88738E-01 3.41549E-01 1 30 13 8.59097E-01 6.40618E-01 6.22334E-01 -8.93241E-12 3.12879E-01 6.07276E-01 1.88230E-01 3.87300E-01 1 35 EP 14 9.33416E-01 6.84317E-01 6.57972E-01 -8.75385E-12 3.39588E-01 6.25964E-01 1.87328E-01 4.32927E-01 Total Time 0.100E+00 she ... done Saving to b.2, s.2, and d.2 ... done Demo she is done Doing sib Version 07p Copying demo sib ... done Demo sib is started gcc -g -O2 -I/cnd0/home/boldeman/auto/07p/include -O -c sib.c -o sib.o gfortran -L/cnd0/home/boldeman/auto/07p/lib -fopenmp -O sib.o -o sib.exe /cnd0/home/boldeman/auto/07p/lib/*.o -lauto_c Starting sib ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 0.00000E+00 6.66667E-01 6.66667E-01 0.00000E+00 0.00000E+00 1 5 UZ 2 3.75000E-01 6.79869E-01 6.66667E-01 -1.33333E-01 0.00000E+00 Total Time 0.111E-01 sib ... done Saving to b.1, s.1, and d.1 ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM U(1) U(2) U(3) 1 6 HB 3 3.18429E-01 6.72529E-01 6.54375E-01 -1.34754E-01 7.70102E-02 1 10 EP 4 6.51784E-01 6.49734E-01 6.22543E-01 -1.29518E-01 1.33488E-01 Total Time 0.131E-01 sib ... done Saving to b.2, s.2, and d.2 ... done Starting sib ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 3 10 5 -2.41881E-03 6.70569E-01 7.38785E-01 -4.80670E-02 1.02988E-01 1.08975E+01 3 20 6 -8.73605E-03 6.62583E-01 8.19608E-01 5.21953E-02 1.14118E-01 1.14052E+01 3 30 7 -1.35273E-02 6.45013E-01 8.86658E-01 1.53919E-01 9.88372E-02 1.24104E+01 3 40 8 -1.29495E-02 6.14547E-01 9.37507E-01 2.46906E-01 6.51710E-02 1.41297E+01 3 50 9 -8.30278E-03 5.71568E-01 9.71159E-01 3.17559E-01 3.21479E-02 1.68042E+01 3 60 10 -3.51723E-03 5.19668E-01 9.89680E-01 3.59961E-01 1.16790E-02 2.07043E+01 3 70 11 -9.03991E-04 4.62781E-01 9.97508E-01 3.78860E-01 2.81217E-03 2.63249E+01 3 80 12 -1.13721E-04 4.03748E-01 9.99534E-01 3.83898E-01 3.47572E-04 3.46672E+01 3 81 UZ 13 -1.04657E-04 4.01829E-01 9.99642E-01 3.84183E-01 3.20003E-04 3.50000E+01 Total Time 0.366E+00 sib ... done Saving to b.3, s.3, and d.3 ... done Created plot Starting sib ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) 3 51 UZ 14 -2.00000E+00 4.01890E-01 1.00000E+00 3.84656E-01 4.01480E-09 2.66146E-09 Total Time 0.680E-01 sib ... done Saving to b.4, s.4, and d.4 ... done Starting sib ... BR PT TY LAB PAR(5) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(8) 3 2 EP 15 2.66146E-09 4.01890E-01 1.00000E+00 3.84656E-01 4.01480E-09 1.00000E-02 Total Time 0.301E-01 sib ... done Saving to b.5, s.5, and d.5 ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) PAR(33) 3 19 UZ 16 7.11774E-02 4.01890E-01 1.00000E+00 3.84878E-01 1.82115E-10 1.24373E-11 2.36702E-07 3 30 EP 17 -2.18814E-01 4.01890E-01 9.99937E-01 3.84868E-01 5.90566E-09 -1.77457E-09 -6.20980E+01 Total Time 0.289E+00 sib ... done Starting sib ... BR PT TY LAB PAR(21) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(22) PAR(5) 3 10 18 3.45897E+01 4.46818E-01 9.98952E-01 3.84894E-01 -1.84271E-15 7.87710E-07 -1.55891E-11 3 20 19 2.73699E+01 4.46818E-01 9.98952E-01 3.84861E-01 -1.93824E-13 2.91118E-05 -1.63973E-09 3 30 20 1.73720E+01 4.46817E-01 9.98946E-01 3.84820E-01 -3.66632E-09 4.42272E-03 -3.10166E-05 3 38 UZ 21 1.01451E+01 4.46796E-01 9.96343E-01 3.84382E-01 -1.75882E-06 2.00000E-01 -1.48615E-02 Total Time 0.288E+00 sib ... done Saving to b.7, s.7, and d.7 ... done Created plot Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) PAR(22) 3 3 UZ 22 7.40000E-02 4.46781E-01 9.96340E-01 3.84399E-01 -1.69429E-06 -1.43162E-02 1.93746E-01 3 32 UZ 23 1.98414E-01 4.46590E-01 9.96040E-01 3.84450E-01 -7.16686E-07 -6.05495E-03 2.29300E-06 Total Time 0.230E+00 sib ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) 3 7 UZ 24 1.50000E-01 4.94490E-01 9.98472E-01 3.84490E-01 3.23817E-01 -3.60248E-03 3 30 EP 25 7.61403E-02 4.98746E-01 9.99937E-01 3.84934E-01 6.16030E-02 -2.64846E-06 Total Time 0.124E+00 sib ... done Starting sib ... BR PT TY LAB PAR(21) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(22) PAR(24) PAR(5) 3 10 26 3.45896E+01 4.46818E-01 9.98952E-01 3.84777E-01 3.64441E-11 7.87891E-07 6.42157E-07 -1.06578E-11 3 20 27 2.73699E+01 4.46818E-01 9.98952E-01 3.84900E-01 -1.93448E-13 2.91125E-05 6.51591E-07 -1.63655E-09 3 30 28 1.73719E+01 4.46817E-01 9.98946E-01 3.84898E-01 -3.66656E-09 4.42288E-03 1.44089E-04 -3.10186E-05 3 38 UZ 29 1.01451E+01 4.46796E-01 9.96343E-01 3.84555E-01 -1.75882E-06 2.00000E-01 6.97445E-02 -1.48615E-02 Total Time 0.479E+00 sib ... done Saving to b.10, s.10, and d.10 ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) PAR(22) PAR(24) 3 6 UZ 30 8.20000E-02 4.46745E-01 9.96330E-01 3.84560E-01 -1.53604E-06 -1.29790E-02 1.76995E-01 6.37184E-02 3 32 UZ 31 1.98414E-01 4.46590E-01 9.96040E-01 3.84435E-01 -7.16686E-07 -6.05495E-03 2.30717E-06 3.62449E-02 Total Time 0.327E+00 sib ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) PAR(23) PAR(24) 3 16 UZ 32 1.98395E-01 4.46590E-01 9.96040E-01 3.84493E-01 -7.16734E-07 -6.05536E-03 2.01311E+01 1.82490E-08 3 24 UZ 33 1.80000E-01 4.46602E-01 9.96105E-01 3.84517E-01 -7.69687E-07 -6.50293E-03 1.27554E+01 -3.14294E-02 3 25 UZ 34 1.66990E-01 4.46611E-01 9.96146E-01 3.84438E-01 -8.15805E-07 -6.89270E-03 1.20559E+01 -2.28339E-08 3 31 UZ 35 1.66991E-01 4.46611E-01 9.96146E-01 3.84499E-01 -8.15801E-07 -6.89267E-03 9.41745E+00 -5.95661E-06 3 32 EP 36 1.72118E-01 4.46607E-01 9.96130E-01 3.84483E-01 -7.96644E-07 -6.73076E-03 9.43389E+00 -3.12140E-02 Total Time 0.564E+00 sib ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) 3 13 UZ 37 1.29999E-01 5.04807E-01 9.99084E-01 3.83227E-01 2.99589E-01 -2.33900E-03 3 30 EP 38 9.27237E-02 5.06560E-01 9.99267E-01 3.84363E-01 1.90085E-01 -2.76705E-04 Total Time 0.117E+00 sib ... done Starting sib ... BR PT TY LAB PAR(4) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(5) 3 7 UZ 39 1.45000E-01 5.34577E-01 9.97761E-01 3.84211E-01 3.16630E-01 -4.79399E-03 3 30 EP 40 8.35233E-02 5.39821E-01 9.99864E-01 3.83471E-01 1.33881E-01 -6.54420E-05 Total Time 0.943E-01 sib ... done Saving to b.6, s.6, and d.6 ... done Created plot Hit to continue Demo sib is done Doing snh Version 07p Copying demo snh ... done Demo snh is started 1st run - homotopy backwards in time from equilibrium b : x=y=0, phi=acos(-0.5*nu2) gfortran -fopenmp -O -c snh.f90 -o snh.o gfortran -fopenmp -O snh.o -o snh.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting snh ... BR PT TY LAB T L2-NORM MAX xgamma MAX ygamma MAX phigamma omega 1 1 EP 1 -1.00000E-01 7.61820E-01 -7.59560E-05 -9.35735E-05 7.62473E-01 -6.27446E+00 1 142 UZ 2 -9.32560E+00 3.33201E+00 2.15992E-01 8.81725E-01 6.63135E+00 -1.44376E-07 Total Time 0.257E+00 snh ... done 2nd run - improve connection Starting snh ... BR PT TY LAB T L2-NORM MAX xgamma MAX ygamma MAX phigamma nu1 1 439 UZ 3 -2.00000E+03 6.61957E+00 4.30896E-01 6.64432E-01 6.63135E+00 5.46409E-01 Total Time 0.851E+00 snh ... done 3rd run - follow connection forwards and backwards Runner configured Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma MAX ygamma MAX phigamma nu2 1 15 LP 4 5.45003E-01 6.66122E+00 4.89649E-01 6.94310E-01 6.67317E+00 -1.84983E+00 1 175 LP 5 7.26954E-01 7.00645E+00 8.07758E-01 6.68645E-01 7.02710E+00 -1.47165E+00 1 181 LP 6 7.26530E-01 7.00313E+00 6.78129E-01 5.94906E-01 7.02442E+00 -1.47527E+00 1 198 LP 7 7.35540E-01 7.00941E+00 8.93223E-01 7.21371E-01 7.03319E+00 -1.46337E+00 1 208 LP 8 7.32948E-01 7.00284E+00 6.43192E-01 6.85416E-01 7.02782E+00 -1.47067E+00 1 222 LP 9 7.39280E-01 7.00845E+00 9.20194E-01 7.40521E-01 7.03561E+00 -1.46007E+00 1 234 LP 10 7.35579E-01 7.00087E+00 6.34033E-01 7.52507E-01 7.02938E+00 -1.46856E+00 1 247 LP 11 7.40976E-01 7.00607E+00 9.30794E-01 7.49145E-01 7.03668E+00 -1.45861E+00 1 259 LP 12 7.36768E-01 6.99809E+00 6.30686E-01 7.78276E-01 7.03010E+00 -1.46758E+00 1 272 LP 13 7.41773E-01 7.00306E+00 9.35366E-01 7.52914E-01 7.03718E+00 -1.45793E+00 1 285 LP 14 7.37330E-01 6.99494E+00 6.28822E-01 7.89631E-01 7.03044E+00 -1.46711E+00 1 298 LP 15 7.42156E-01 6.99977E+00 9.37450E-01 7.54821E-01 7.03741E+00 -1.45760E+00 1 311 LP 16 7.37601E-01 6.99160E+00 6.28342E-01 7.95186E-01 7.03061E+00 -1.46688E+00 1 324 LP 17 7.42343E-01 6.99633E+00 9.38504E-01 7.55287E-01 7.03753E+00 -1.45744E+00 1 337 LP 18 7.37735E-01 6.98816E+00 6.27863E-01 7.97613E-01 7.03069E+00 -1.46677E+00 1 350 LP 19 7.42435E-01 6.99281E+00 9.38915E-01 7.56140E-01 7.03759E+00 -1.45736E+00 1 363 LP 20 7.37801E-01 6.98466E+00 6.27943E-01 7.98831E-01 7.03073E+00 -1.46672E+00 1 376 LP 21 7.42481E-01 6.98925E+00 9.39229E-01 7.56309E-01 7.03761E+00 -1.45733E+00 1 389 LP 22 7.37834E-01 6.98113E+00 6.27729E-01 7.99555E-01 7.03075E+00 -1.46669E+00 1 402 LP 23 7.42503E-01 6.98566E+00 9.39273E-01 7.56440E-01 7.03763E+00 -1.45731E+00 Total Time 0.312E+01 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma MAX ygamma MAX phigamma nu2 1 97 UZ 4 6.40374E-01 6.30401E+00 2.00274E-01 4.08401E-01 6.31481E+00 -1.99900E+00 Total Time 0.204E+00 snh ... done Merge done Saving to b.h1b, s.h1b, and d.h1b ... done Deleting fort.* *.o *.exe *.*~ ... done Done. 1st run - find and continue equilibrium a : x=y=0, phi=-acos(-0.5*nu2) gfortran -fopenmp -O -c snh.f90 -o snh.o gfortran -fopenmp -O snh.o -o snh.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting snh ... BR PT TY LAB nu1 L2-NORM xgamma ygamma phigamma 1 1 EP 1 0.00000E+00 5.53071E+00 0.00000E+00 0.00000E+00 5.53071E+00 1 4 HB 2 6.83447E-01 5.53071E+00 -4.34009E-30 1.38149E-30 5.53071E+00 Total Time 0.814E-02 snh ... done 2nd run - switch to the periodic orbit and continue in nu1 up to 0.74 Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma MAX ygamma MAX phigamma T 2 5 UZ 3 7.40000E-01 5.65209E+00 3.73558E-01 3.74500E-01 5.64003E+00 6.28320E+00 Total Time 0.287E-01 snh ... done 3rd run - extend the system Starting snh ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX phigamma MAX x h T 2 10 BP 4 6.46417E+00 5.65209E+00 3.73563E-01 3.74510E-01 5.64003E+00 0.00000E+00 0.00000E+00 6.28320E+00 Total Time 0.541E-01 snh ... done 4th run - normalize the Floquet bundle also put a starting value into sigma- (which measures the distance to Sigma = { phi=pi }) Starting snh ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX phigamma MAX x h T 3 9 UZ 5 6.46417E+00 5.73980E+00 3.73559E-01 3.74509E-01 5.64003E+00 2.20950E-01 1.00000E+00 6.28320E+00 Total Time 0.104E+00 snh ... done 5th run - integrate away from the periodic orbit, UZ points denote intersections with Sigma Starting snh ... BR PT TY LAB T- L2-NORM MAX xgamma MAX ygamma MAX phigamma mu T sigma- 3 23 UZ 6 1.11858E+01 7.96232E+00 3.73556E-01 3.74502E-01 5.64003E+00 6.46417E+00 6.28320E+00 -1.48297E-09 Total Time 0.441E+00 snh ... done 6th run - integrate backwards from the equilibrium b : x=y=0, phi=acos(-0.5*nu2) up to Sigma + put starting data for Lin vector and Lin gap in Zx, Zy, Zz, and eta. Starting snh ... BR PT TY LAB T+ L2-NORM MAX xgamma MAX ygamma sigma+ T- mu T 3 7 UZ 7 1.03352E+01 8.02090E+00 3.73563E-01 3.74509E-01 8.32263E-05 1.11858E+01 6.46417E+00 6.28320E+00 Total Time 0.289E+00 snh ... done 7th run - close the gap (with some intermediate solutions) Starting snh ... BR PT TY LAB eta L2-NORM nu1 delta eps T+ T- mu 3 5 8 7.89777E-02 8.01892E+00 7.39311E-01 -8.94150E-06 1.00016E-06 1.03351E+01 1.12393E+01 6.49987E+00 3 10 9 4.50166E-02 8.01858E+00 7.38920E-01 -7.56051E-06 1.00056E-06 1.03348E+01 1.13711E+01 6.51993E+00 3 15 10 2.15826E-02 8.02200E+00 7.39710E-01 -7.36885E-06 1.00084E-06 1.03346E+01 1.14611E+01 6.47925E+00 3 20 11 7.45989E-03 8.02552E+00 7.40597E-01 -7.53403E-06 1.00101E-06 1.03345E+01 1.15143E+01 6.43290E+00 3 24 UZ 12 -2.27878E-09 8.02783E+00 7.41189E-01 -7.71513E-06 1.00110E-06 1.03344E+01 1.15419E+01 6.40157E+00 Total Time 0.739E+00 snh ... done Saving to b.closegap, s.closegap, and d.closegap ... done 8th run - keep the gap closed and continue in nu1,nu2 Runner configured Starting snh ... BR PT TY LAB nu1 L2-NORM mu delta eps nu2 T+ T- 3 69 LP 13 1.00686E+00 6.91631E+00 1.25598E+01 -1.64315E-10 6.84896E-16 -5.07901E-02 2.29999E+01 1.16180E+01 3 100 14 8.08453E-01 6.22315E+00 1.01574E+01 -9.43064E-09 7.39241E-16 1.17803E+00 8.35406E+01 1.17281E+01 3 179 UZ 15 1.96860E-01 5.62200E+00 2.47382E+00 -3.00027E-03 -2.43284E-16 1.96086E+00 5.33068E+03 1.23677E+01 Total Time 0.580E+01 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM mu delta eps nu2 T+ T- 3 51 LP 13 6.86499E-01 8.27135E+00 1.50336E+00 -9.13507E-03 4.60057E-06 -1.54905E+00 9.89943E+00 1.15339E+01 Total Time 0.112E+01 snh ... done Merge done Saving to b.cb, s.cb, and d.cb ... done Deleting fort.* *.o *.exe *.*~ ... done Done. 1st run - find and continue equilibrium a : x=y=0, phi=-acos(-0.5*nu2) gfortran -fopenmp -O -c snh.f90 -o snh.o gfortran -fopenmp -O snh.o -o snh.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting snh ... BR PT TY LAB nu1 L2-NORM xgamma ygamma phigamma 1 1 EP 1 0.00000E+00 5.53071E+00 0.00000E+00 0.00000E+00 5.53071E+00 1 4 HB 2 6.83447E-01 5.53071E+00 -4.34009E-30 1.38149E-30 5.53071E+00 Total Time 0.789E-02 snh ... done 2nd run - switch to the periodic orbit and continue in nu1 up to 0.74 Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma MAX ygamma MAX phigamma T 2 5 UZ 3 7.40000E-01 5.65209E+00 3.73558E-01 3.74500E-01 5.64003E+00 6.28320E+00 Total Time 0.282E-01 snh ... done 3rd run - extend the system Starting snh ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX phigamma MAX x h T 2 4 BP 4 -6.83886E-01 5.65209E+00 3.73563E-01 3.74510E-01 5.64003E+00 0.00000E+00 0.00000E+00 6.28320E+00 Total Time 0.465E-01 snh ... done 4th run - normalize the Floquet bundle Starting snh ... BR PT TY LAB mu L2-NORM MAX xgamma MAX ygamma MAX phigamma MAX x h T 3 9 UZ 5 -6.83892E-01 5.74109E+00 3.73563E-01 3.74510E-01 5.64003E+00 8.68630E-01 1.00000E+00 6.28320E+00 Total Time 0.120E+00 snh ... done 5th run - integrate away from the periodic orbit in negative time. puts a starting value into sigma- (which measures the distance to W^u(b)) UZ points denote intersections with W^u(b) Starting snh ... BR PT TY LAB T- L2-NORM MAX xgamma MAX ygamma MAX phigamma mu T sigma- 3 266 UZ 6 -7.13665E+01 8.09513E+00 3.73563E-01 3.74505E-01 5.64003E+00 -6.83892E-01 6.28320E+00 3.38810E-08 Total Time 0.469E+01 snh ... done 6th run - improve the connection Starting snh ... BR PT TY LAB T- L2-NORM MAX xgamma MAX ygamma MAX phigamma mu T delta 3 872 UZ 7 -2.00000E+02 8.72145E+00 3.73563E-01 3.74511E-01 5.64003E+00 -6.83892E-01 6.28320E+00 6.44296E-05 Total Time 0.152E+02 snh ... done 7th run - find folds (tangencies of codimension-zero connection) Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma MAX ygamma mu T delta T- 3 3 LP 8 7.39324E-01 8.71684E+00 3.70870E-01 3.71789E-01 -6.76598E-01 6.28320E+00 6.52919E-05 -2.00136E+02 3 13 LP 9 7.45796E-01 8.71849E+00 3.96675E-01 3.97907E-01 -7.43979E-01 6.28321E+00 2.18797E-05 -2.00767E+02 Total Time 0.458E+00 snh ... done 8th run - continue left fold (t_b) Starting snh ... Generating starting data : Restart at EP label below : BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 5 EP 10 7.39324E-01 8.71684E+00 3.70869E-01 6.28320E+00 6.53931E-05 -1.46000E+00 -2.00136E+02 -6.76598E-01 Total Time 0.902E+00 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 13 LP 11 6.33179E-01 8.64400E+00 1.79464E-08 6.28319E+00 1.30644E-01 -1.54801E+00 -2.00124E+02 6.64600E-09 Total Time 0.618E+01 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 59 MX 11 1.27677E+00 9.09562E+00 9.25866E-01 6.28114E+00 9.53263E-07 -9.57788E-01 -2.00228E+02 -4.56815E+00 Total Time 0.165E+02 snh ... done Merge done 9th run - continue right fold (t_b) Starting snh ... Generating starting data : Restart at EP label below : BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 5 EP 10 7.45796E-01 8.71849E+00 3.96675E-01 6.28321E+00 2.20105E-05 -1.46000E+00 -2.00767E+02 -7.43979E-01 Total Time 0.975E+00 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 13 LP 11 6.27823E-01 8.63270E+00 4.60513E-04 6.28319E+00 1.29100E-01 -1.55671E+00 -2.00746E+02 -1.01301E-06 Total Time 0.343E+01 snh ... done Starting snh ... BR PT TY LAB nu1 L2-NORM MAX xgamma T delta nu2 T- mu 4 45 MX 11 1.19436E+00 9.04721E+00 8.74676E-01 6.28166E+00 1.74569E-06 -1.04058E+00 -2.00909E+02 -3.45437E+00 Total Time 0.118E+02 snh ... done Merge done Relabeling done Saving to b.tb, s.tb, and d.tb ... done Deleting fort.* *.o *.exe *.*~ ... done Done. Copying b.cb to b.all ... done Copying s.cb to s.all ... done Copying d.cb to d.all ... done Appending b.h1b to b.all ... done Appending s.h1b to s.all ... done Appending d.h1b to d.all ... done Appending b.tb to b.all ... done Appending s.tb to s.all ... done Appending d.tb to d.all ... done Relabeling succeeded Relabeling done Deleting fort.* *.o *.exe *.*~ ... done Done. Demo snh is done Doing spb Version 07p Copying demo spb ... done Demo spb is started ***Homotopy from lambda=0 to lambda=1*** gfortran -fopenmp -O -c spb.f90 -o spb.o gfortran -fopenmp -O spb.o -o spb.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting spb ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) 1 1 EP 1 0.00000E+00 1.38564E+00 1.50000E+00 -3.00000E-01 1 14 UZ 2 1.00000E+00 2.05442E+00 1.50000E+00 3.39457E+00 Total Time 0.183E-01 spb ... done Saving to b.0, s.0, and d.0 ... done ***Letting epsilon become small*** Starting spb ... BR PT TY LAB PAR(2) L2-NORM MAX U(1) MAX U(2) 1 23 UZ 3 1.00000E-02 5.18591E+00 1.50000E+00 1.25243E+01 1 50 UZ 4 1.00000E-03 1.43306E+01 1.50000E+00 6.77491E+01 1 88 UZ 5 1.00000E-04 4.40275E+01 1.50000E+00 5.29967E+02 1 135 UZ 6 1.00000E-05 1.38567E+02 1.50000E+00 4.94402E+03 Total Time 0.203E+00 spb ... done Relabeling done Saving to b.1, s.1, and d.1 ... done ***Continuation in gamma: First 15 steps*** Starting spb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 1 1 5 1.20000E+00 1.43306E+01 1.50000E+00 6.77491E+01 1 2 6 1.19281E+00 1.43141E+01 1.50000E+00 6.39057E+01 1 3 7 1.18169E+00 1.42903E+01 1.50000E+00 5.82855E+01 1 4 8 1.16420E+00 1.42571E+01 1.50000E+00 5.01938E+01 1 5 9 1.13900E+00 1.42173E+01 1.50000E+00 4.00754E+01 1 6 10 1.11097E+00 1.41824E+01 1.50000E+00 3.07962E+01 1 7 11 1.07889E+00 1.41525E+01 1.50000E+00 2.24615E+01 1 8 12 1.04036E+00 1.41270E+01 1.50000E+00 1.52137E+01 1 9 13 9.89989E-01 1.41056E+01 1.50000E+00 9.26120E+00 1 10 14 9.12900E-01 1.40868E+01 1.50000E+00 4.89975E+00 1 11 15 7.71139E-01 1.40688E+01 1.50000E+00 2.40189E+00 1 12 16 5.56613E-01 1.40531E+01 1.50000E+00 1.44033E+00 1 13 17 2.89418E-01 1.40400E+01 1.50000E+00 1.08862E+00 1 14 18 1.13808E-03 1.40300E+01 1.50000E+00 3.55575E-02 1 15 EP 19 -1.32815E-01 1.40509E+01 1.50000E+00 -2.38741E-06 Total Time 0.125E+00 spb ... done ***Continuation in gamma: Restart*** Starting spb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 1 50 20 -1.43972E+00 1.98363E+01 1.50000E+00 -4.22099E-06 1 100 21 -1.46931E+00 1.98388E+01 1.50000E+00 -7.12597E-06 1 150 22 -1.49692E+00 1.98412E+01 1.50000E+00 -1.19057E-05 1 200 23 -1.52228E+00 1.98435E+01 1.50000E+00 -1.98792E-05 1 250 24 -1.54698E+00 1.98460E+01 1.50000E+00 -3.34166E-05 1 300 25 -1.56947E+00 1.98483E+01 1.50000E+00 -5.67034E-05 1 350 26 -1.59204E+00 1.98509E+01 1.50000E+00 -9.85995E-05 1 400 27 -1.61243E+00 1.98532E+01 1.50000E+00 -1.56888E-04 1 450 28 -1.63310E+00 1.98558E+01 1.50000E+00 -2.67632E-04 1 500 29 -1.65225E+00 1.98583E+01 1.50000E+00 -4.48263E-04 1 550 30 -1.67115E+00 1.98609E+01 1.50000E+00 -7.57057E-04 1 600 31 -1.68890E+00 1.98634E+01 1.50000E+00 -1.26248E-03 1 650 32 -1.70664E+00 1.98661E+01 1.50000E+00 -2.18534E-03 1 700 33 -1.72355E+00 1.98687E+01 1.50000E+00 -3.60259E-03 1 750 34 -1.74013E+00 1.98714E+01 1.50000E+00 -6.08277E-03 1 800 35 -1.75587E+00 1.98741E+01 1.50000E+00 -1.02254E-02 1 850 36 -1.77172E+00 1.98769E+01 1.50000E+00 -1.72812E-02 1 900 37 -1.78686E+00 1.98798E+01 1.50000E+00 -2.92577E-02 1 950 38 -1.80179E+00 1.98827E+01 1.50000E+00 -4.96745E-02 1 1000 39 -1.81642E+00 1.98857E+01 1.50000E+00 -8.47902E-02 1 1050 40 -1.83042E+00 1.98891E+01 1.50000E+00 -1.44685E-01 1 1100 41 -1.84457E+00 1.98935E+01 1.50000E+00 -2.55252E-01 1 1150 42 -1.85787E+00 1.99002E+01 1.50000E+00 -4.07944E-01 1 1200 43 -1.87161E+00 1.99154E+01 1.50000E+00 -3.99583E-01 1 1250 44 -1.88440E+00 1.99542E+01 1.50000E+00 -3.92060E-01 1 1300 45 -1.89793E+00 2.00941E+01 1.50000E+00 -3.84343E-01 1 1350 46 -1.91240E+00 2.06503E+01 1.50000E+00 -3.76368E-01 1 1400 47 -1.93242E+00 2.24433E+01 1.50000E+00 -3.65769E-01 1 1450 48 -1.95314E+00 2.47507E+01 1.50000E+00 -3.55303E-01 1 1500 49 -1.97150E+00 2.68488E+01 1.50000E+00 -3.46433E-01 1 1550 50 -2.12554E+00 5.60661E+01 1.50000E+00 -2.84271E-01 1 1554 UZ 51 -2.20192E+00 6.96759E+01 1.50000E+00 -2.59854E-01 Total Time 0.477E+01 spb ... done Relabeling done Saving to b.2, s.2, and d.2 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo spb is done Doing sspg Version 07p Copying demo sspg ... done Demo sspg is started ***sspg: run 1: trivial solution*** gfortran -fopenmp -O -c sspg.f90 -o sspg.o gfortran -fopenmp -O sspg.o -o sspg.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting sspg ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 1 1 EP 1 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 10 2 1.65000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 20 3 2.65000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 30 4 3.65000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 33 BP 5 3.92069E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 40 6 4.62069E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 50 EP 7 5.62069E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.524E-01 sspg ... done Saving to b.sspg.1, s.sspg.1, and d.sspg.1 ... done ***sspg: run 1: branch switch*** Starting sspg ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) 2 1 8 3.92069E+00 0.00000E+00 0.00000E+00 0.00000E+00 2 2 9 3.91713E+00 1.00000E-02 6.80103E-03 2.72041E-02 2 3 10 3.91345E+00 2.03639E-02 1.38511E-02 5.54043E-02 2 4 11 3.90792E+00 3.59091E-02 2.44286E-02 9.77144E-02 2 5 EP 12 3.89962E+00 5.92254E-02 4.03005E-02 1.61202E-01 Total Time 0.197E+00 sspg ... done Saving to b.sspg.1.sw, s.sspg.1.sw, and d.sspg.1.sw ... done ***sspg: run 2: switch to BP continuation*** Starting sspg ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 5 EP 8 3.92069E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.00000E+00 Total Time 0.118E+00 sspg ... done Saving to b.sspg.2.sw, s.sspg.2.sw, and d.sspg.2.sw ... done ***sspg: run 2: BP continuation (fw)*** Starting sspg ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 10 9 4.28947E+00 0.00000E+00 0.00000E+00 0.00000E+00 4.34910E+00 2 20 10 5.00944E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.04310E+00 2 30 11 5.72396E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.74272E+00 2 40 12 6.43526E+00 0.00000E+00 0.00000E+00 0.00000E+00 6.44560E+00 2 50 EP 13 7.14471E+00 0.00000E+00 0.00000E+00 0.00000E+00 7.15035E+00 Total Time 0.414E+00 sspg ... done Saving to b.sspg.2.fw, s.sspg.2.fw, and d.sspg.2.fw ... done ***sspg: run 2: BP continuation (bw)*** Starting sspg ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PAR(2) 2 10 9 3.54897E+00 0.00000E+00 0.00000E+00 0.00000E+00 3.65404E+00 2 20 10 2.80511E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.98575E+00 2 30 11 2.03853E+00 0.00000E+00 0.00000E+00 0.00000E+00 2.34373E+00 2 40 12 1.23858E+00 0.00000E+00 0.00000E+00 0.00000E+00 1.74398E+00 2 50 EP 13 3.93712E-01 0.00000E+00 0.00000E+00 0.00000E+00 1.20974E+00 Total Time 0.638E+00 sspg ... done Saving to b.sspg.2.bw, s.sspg.2.bw, and d.sspg.2.bw ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo sspg is done Doing stw Version 07p Copying demo stw ... done Demo stw is started Demo stw is started stw : continuation of the sharp traveling wave gfortran -fopenmp -O -c stw.f90 -o stw.o gfortran -fopenmp -O stw.o -o stw.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting stw ... BR PT TY LAB PAR(1) L2-NORM PAR(10) PAR(12) PAR(13) PAR(14) PAR(15) PAR(16) 1 1 EP 1 0.00000E+00 7.82656E-01 1.00000E+00 2.15641E-22 2.15641E-22 1.00000E+00 -1.00000E+00 8.94427E-01 1 18 UZ 2 1.00001E+00 8.83099E-01 -8.24842E-06 -5.91700E-11 2.42240E-07 1.73206E+00 -1.52753E+00 8.66025E-01 1 20 EP 3 1.14464E+00 9.25132E-01 -2.48063E-01 -8.28806E-10 1.44711E-10 1.90168E+00 -1.71506E+00 8.55700E-01 Total Time 0.288E-01 stw ... done Saving to b.stw, s.stw, and d.stw ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo stw is done Doing tfc Version 07p Copying demo tfc ... done Demo tfc is started tfc: run 1: equilibrium continuation gfortran -fopenmp -O -c tfc.f90 -o tfc.o gfortran -fopenmp -O tfc.o -o tfc.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting tfc ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) U(3) 1 1 EP 1 1.10830E+00 1.65201E+00 -4.13049E-01 -1.59954E+00 0.00000E+00 1 10 2 1.07184E+00 1.58145E+00 -5.09739E-01 -1.49704E+00 0.00000E+00 1 20 3 9.57400E-01 1.57097E+00 -7.98624E-01 -1.35283E+00 0.00000E+00 1 26 HB 4 8.33333E-01 1.71872E+00 -1.09861E+00 -1.32176E+00 0.00000E+00 1 30 5 7.02410E-01 1.94938E+00 -1.41545E+00 -1.34036E+00 0.00000E+00 1 40 6 3.70521E-01 2.76635E+00 -2.35085E+00 -1.45815E+00 0.00000E+00 1 50 EP 7 1.62442E-01 3.66520E+00 -3.32432E+00 -1.54355E+00 0.00000E+00 Total Time 0.546E-01 tfc ... done Saving to b.tfc.1, s.tfc.1, and d.tfc.1 ... done tfc: run 2: cycle continuation Starting tfc ... BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD PAR(7) PAR(8) 4 10 8 8.29181E-01 -9.14867E-01 -9.14867E-01 -1.17400E+00 0.00000E+00 1.19568E+01 2.68293E-01 2.25133E-01 4 20 9 7.82961E-01 -5.78110E-01 -5.78110E-01 -8.71677E-01 0.00000E+00 1.23673E+01 1.30305E-01 1.31743E-01 4 23 UZ 10 7.50000E-01 -4.83481E-01 -4.83481E-01 -7.65028E-01 0.00000E+00 1.26846E+01 8.84981E-02 1.00996E-01 4 30 11 6.54898E-01 -3.45702E-01 -3.45702E-01 -5.49735E-01 0.00000E+00 1.37746E+01 2.99979E-02 5.32689E-02 4 40 12 5.39643E-01 -2.74102E-01 -2.74102E-01 -3.53705E-01 0.00000E+00 1.56877E+01 6.52553E-03 2.76118E-02 4 50 EP 13 4.55135E-01 -2.46443E-01 -2.46443E-01 -2.29808E-01 0.00000E+00 1.78335E+01 1.48346E-03 1.77339E-02 Total Time 0.927E-01 tfc ... done Saving to b.tfc.2, s.tfc.2, and d.tfc.2 ... done tfc: run 3: cycle continuation Starting tfc ... BR PT TY LAB PAR(6) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PERIOD PAR(7) PAR(8) 4 3 UZ 14 1.30000E-02 -4.83481E-01 -4.83481E-01 -7.65028E-01 0.00000E+00 1.26846E+01 8.84981E-02 1.00996E-01 4 4 BP 15 1.55004E-02 -4.83442E-01 -4.83442E-01 -7.65075E-01 0.00000E+00 1.26846E+01 8.85009E-02 1.01003E-01 4 10 16 7.35004E-02 -4.83500E-01 -4.83500E-01 -7.65017E-01 0.00000E+00 1.26846E+01 8.85031E-02 1.01004E-01 4 20 17 1.73500E-01 -4.83439E-01 -4.83439E-01 -7.65014E-01 0.00000E+00 1.26846E+01 8.84936E-02 1.00996E-01 4 30 18 2.73500E-01 -4.83441E-01 -4.83441E-01 -7.65016E-01 0.00000E+00 1.26846E+01 8.85027E-02 1.01000E-01 4 40 19 3.73500E-01 -4.83448E-01 -4.83448E-01 -7.65018E-01 0.00000E+00 1.26846E+01 8.85028E-02 1.01001E-01 4 50 EP 20 4.73500E-01 -4.83445E-01 -4.83445E-01 -7.65018E-01 0.00000E+00 1.26846E+01 8.85000E-02 1.01000E-01 Total Time 0.606E-01 tfc ... done Saving to b.tfc.3, s.tfc.3, and d.tfc.3 ... done tfc: run 4: BP continuation (sw) Starting tfc ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(6) MAX U(1) MAX U(1) MAX U(2) PAR(3) PERIOD PAR(7) PAR(8) 5 5 EP 21 1.55004E-02 -4.83465E-01 -4.83465E-01 -7.65046E-01 7.50000E-01 1.26846E+01 8.85002E-02 1.00997E-01 Total Time 0.149E+00 tfc ... done tfc: run 4: BP continuation (fw) Starting tfc ... BR PT TY LAB PAR(6) MAX U(1) MAX U(1) MAX U(2) PAR(3) PERIOD PAR(7) PAR(8) 5 10 22 1.59926E-02 -5.46974E-01 -5.46974E-01 -8.38614E-01 7.73766E-01 1.24534E+01 1.16597E-01 1.21843E-01 5 20 23 1.71875E-02 -8.50350E-01 -8.50350E-01 -1.12047E+00 8.25242E-01 1.19904E+01 2.43658E-01 2.09105E-01 5 23 LP 24 1.73913E-02 -1.09861E+00 -1.09861E+00 -1.32176E+00 8.33333E-01 1.19215E+01 3.33333E-01 2.66667E-01 Total Time 0.115E+01 tfc ... done Saving to b.tfc.4.fw, s.tfc.4.fw, and d.tfc.4.fw ... done tfc: run 4: BP continuation (bw) Starting tfc ... BR PT TY LAB PAR(6) MAX U(1) MAX U(1) MAX U(2) PAR(3) PERIOD PAR(7) PAR(8) 5 50 22 1.01738E-02 -2.03377E-01 -2.03377E-01 1.23293E-01 1.76502E-01 4.16147E+01 9.40304E-10 4.07119E-03 5 100 23 9.53626E-03 -1.89189E-01 -1.89189E-01 3.25228E-01 1.16277E-02 6.07289E+02 1.04294-152 1.37462E-03 5 150 24 9.50909E-03 -1.88615E-01 -1.88615E-01 3.36941E-01 3.80532E-03 1.85261E+03 0.00000E+00 1.28118E-03 5 200 25 9.50383E-03 -1.88564E-01 -1.88564E-01 3.39454E-01 2.27489E-03 3.09795E+03 0.00000E+00 1.26199E-03 5 250 26 9.50154E-03 -1.88497E-01 -1.88497E-01 3.40569E-01 1.62242E-03 4.34328E+03 0.00000E+00 1.25342E-03 5 300 EP 27 9.50030E-03 -1.88432E-01 -1.88432E-01 3.41174E-01 1.26079E-03 5.58861E+03 0.00000E+00 1.24861E-03 Total Time 0.554E+01 tfc ... done Saving to b.tfc.4.bw, s.tfc.4.bw, and d.tfc.4.bw ... done tfc: run 4: BP continuation (restart) Starting tfc ... BR PT TY LAB PAR(6) MAX U(1) MAX U(1) MAX U(2) PAR(3) PERIOD PAR(7) PAR(8) 5 10 25 1.64662E-02 -6.27685E-01 -6.27685E-01 -9.21518E-01 7.95096E-01 1.22560E+01 1.51912E-01 1.47054E-01 5 20 26 1.73716E-02 -1.01539E+00 -1.01539E+00 -1.25552E+00 8.32558E-01 1.19281E+01 3.04819E-01 2.48573E-01 5 21 LP 27 1.73913E-02 -1.09861E+00 -1.09861E+00 -1.32176E+00 8.33333E-01 1.19215E+01 3.33333E-01 2.66667E-01 Total Time 0.234E+01 tfc ... done Saving to b.tfc.4.rs, s.tfc.4.rs, and d.tfc.4.rs ... done tfc: run 5: iso-periodic cycle continuation Starting tfc ... BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PAR(1) 4 20 21 7.37179E-01 -8.61043E-01 -8.61043E-01 -1.02654E+00 0.00000E+00 4.46232E+00 4 24 BP 22 7.36121E-01 -1.05016E+00 -1.05016E+00 -1.16189E+00 0.00000E+00 4.41808E+00 4 40 23 7.59860E-01 -4.11822E-01 -4.11822E-01 -7.10321E-01 0.00000E+00 5.34269E+00 4 45 BP 24 7.70690E-01 -3.72165E-01 -3.72165E-01 -6.78011E-01 0.00000E+00 5.66109E+00 4 60 25 8.24647E-01 -3.02535E-01 -3.02535E-01 -6.21336E-01 0.00000E+00 6.89439E+00 4 80 26 9.19735E-01 -2.67268E-01 -2.67268E-01 -6.03389E-01 0.00000E+00 8.65590E+00 4 100 EP 27 1.02778E+00 -2.49522E-01 -2.49522E-01 -6.05002E-01 0.00000E+00 1.04801E+01 Total Time 0.176E+00 tfc ... done Saving to b.tfc.5, s.tfc.5, and d.tfc.5 ... done tfc: run 6: iso-periodic BP continuation (sw) Starting tfc ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(6) 5 5 EP 28 7.70690E-01 -3.72165E-01 -3.72165E-01 -6.77980E-01 -7.09999E-21 5.66109E+00 1.30000E-02 Total Time 0.152E+00 tfc ... done Saving to b.tfc.6.sw, s.tfc.6.sw, and d.tfc.6.sw ... done tfc: run 6: iso-periodic BP continuation (fw) Starting tfc ... BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(6) 5 10 29 7.79980E-01 -3.51116E-01 -3.51116E-01 -6.60308E-01 1.48708-118 5.90448E+00 1.23010E-02 5 20 30 8.11052E-01 -3.12458E-01 -3.12458E-01 -6.28737E-01 -6.22374-240 6.61350E+00 1.06892E-02 5 30 31 8.54330E-01 -2.87089E-01 -2.87089E-01 -6.11222E-01 6.45694-320 7.47338E+00 9.28019E-03 5 40 32 9.02847E-01 -2.71216E-01 -2.71216E-01 -6.04219E-01 3.34235-320 8.35890E+00 8.20283E-03 5 50 EP 33 9.54880E-01 -2.60231E-01 -2.60231E-01 -6.02798E-01 2.74651-320 9.26144E+00 7.35231E-03 Total Time 0.169E+01 tfc ... done Saving to b.tfc.6.fw, s.tfc.6.fw, and d.tfc.6.fw ... done tfc: run 6: iso-periodic BP continuation (bw) Starting tfc ... BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(6) 5 10 29 7.62493E-01 -3.99899E-01 -3.99899E-01 -7.00693E-01 1.84001-115 5.42456E+00 1.37785E-02 5 20 30 7.45353E-01 -5.48099E-01 -5.48099E-01 -8.11457E-01 -6.96031-211 4.81399E+00 1.64231E-02 5 29 BP 31 7.36085E-01 -1.08809E+00 -1.08809E+00 -1.18986E+00 2.72099-306 4.41657E+00 1.88235E-02 Total Time 0.115E+01 tfc ... done Saving to b.tfc.6.bw, s.tfc.6.bw, and d.tfc.6.bw ... done tfc: run 6: iso-periodic BP continuation (restart) Starting tfc ... BR PT TY LAB PAR(3) MAX U(1) MAX U(1) MAX U(2) MAX U(3) PAR(1) PAR(6) 5 10 34 8.25790E-01 -3.01776E-01 -3.01776E-01 -6.20853E-01 3.44067-320 6.91748E+00 1.01378E-02 5 20 35 8.69751E-01 -2.81158E-01 -2.81158E-01 -6.08218E-01 -5.03453-320 7.76123E+00 8.89682E-03 5 30 36 9.19573E-01 -2.67203E-01 -2.67203E-01 -6.03396E-01 -4.06814-320 8.65308E+00 7.90291E-03 5 40 37 9.72501E-01 -2.57270E-01 -2.57270E-01 -6.03043E-01 -1.26224-319 9.55993E+00 7.11124E-03 5 50 EP 38 1.02760E+00 -2.49592E-01 -2.49592E-01 -6.04940E-01 1.55838-319 1.04772E+01 6.46564E-03 Total Time 0.214E+01 tfc ... done Saving to b.tfc.6.rs, s.tfc.6.rs, and d.tfc.6.rs ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo tfc is done Doing tim Version 07p Copying demo tim ... done Demo tim is started Demo tim is started tim : Timing run gfortran -fopenmp -O -c tim.f90 -o tim.o gfortran -fopenmp -O tim.o -o tim.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting tim ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) MAX U(5) MAX U(6) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 10 EP 2 7.43505E-02 5.07146E-02 9.36658E-03 3.74082E-02 9.36658E-03 3.74082E-02 9.36658E-03 3.74082E-02 Total Time 0.134E+00 tim ... done Saving to b.tim, s.tim, and d.tim ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo tim is done Doing tor Version 07p Copying demo tor ... done Demo tor is started Demo tor is started tor : first run : stationary solution gfortran -fopenmp -O -c tor.f90 -o tor.o gfortran -fopenmp -O tor.o -o tor.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting tor ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 1 1 EP 1 -9.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 35 HB 2 -5.89337E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 44 BP 3 -5.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 54 UZ 4 -4.00000E-01 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 117 UZ 5 -9.00000E-01 7.19483E-01 5.62955E-01 4.26058E-27 4.48037E-01 BR PT TY LAB PAR(1) L2-NORM U(1) U(2) U(3) 2 117 UZ 6 -9.00000E-01 7.19483E-01 -5.62955E-01 -4.26058E-27 -4.48037E-01 Total Time 0.472E-01 tor ... done tor : second run : periodic solutions Starting tor ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 2 21 LP 7 -5.84335E-01 1.52570E-01 1.23288E-01 1.05937E-01 1.42501E-01 8.42647E+00 2 27 BP 8 -5.87029E-01 2.08647E-01 1.74802E-01 1.39875E-01 1.94009E-01 8.68967E+00 2 78 LP 9 -8.32514E-01 5.86906E-01 5.89484E-01 2.32086E-01 4.98779E-01 1.94158E+01 2 79 BP 10 -8.32438E-01 5.86747E-01 5.89087E-01 2.31400E-01 4.98367E-01 1.96365E+01 2 93 LP 11 -7.87590E-01 5.52575E-01 5.59136E-01 2.22246E-01 4.60873E-01 2.93732E+01 2 101 LP 12 -7.99899E-01 5.76023E-01 5.66917E-01 2.24408E-01 4.71347E-01 3.93706E+01 2 124 LP 13 -7.96906E-01 5.74512E-01 5.65976E-01 2.24040E-01 4.68778E-01 4.22879E+01 2 125 EP 14 -7.96925E-01 5.74750E-01 5.65888E-01 2.24378E-01 4.67640E-01 4.26650E+01 Total Time 0.187E+00 tor ... done tor : third run : a bifurcating branch of periodic solutions Starting tor ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PERIOD 3 11 TR 15 -5.91650E-01 2.18612E-01 2.29872E-01 1.42224E-01 2.22381E-01 8.79415E+00 3 19 PD 16 -6.14955E-01 2.59894E-01 3.12145E-01 1.47333E-01 2.67448E-01 9.26630E+00 3 47 LP 17 -7.60407E-01 4.40800E-01 5.25637E-01 1.52055E-01 4.17499E-01 1.39122E+01 3 61 LP 18 -7.18842E-01 4.26867E-01 4.93116E-01 1.49608E-01 3.81924E-01 1.89071E+01 3 71 LP 19 -7.31636E-01 4.57895E-01 5.03340E-01 1.50221E-01 3.92487E-01 2.39169E+01 3 78 LP 20 -7.28154E-01 4.64357E-01 5.00280E-01 1.50238E-01 3.90044E-01 2.89256E+01 3 83 LP 21 -7.29163E-01 4.72819E-01 5.01384E-01 1.50249E-01 3.90903E-01 3.39334E+01 3 87 LP 22 -7.28877E-01 4.77800E-01 5.00816E-01 1.50023E-01 3.90485E-01 3.89419E+01 3 90 EP 23 -7.28959E-01 4.81717E-01 5.01103E-01 1.50247E-01 3.90406E-01 4.36009E+01 Total Time 0.171E+00 tor ... done Saving to b.1, s.1, and d.1 ... done tor : fourth run : a branch of torus bifurcations (start) Starting tor ... Generating starting data : Restart at EP label below : BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PERIOD 4 5 EP 24 -5.91650E-01 2.18612E-01 2.29871E-01 1.42218E-01 2.22379E-01 5.00000E-01 8.79415E+00 Total Time 0.430E-01 tor ... done tor : fifth run : a branch of torus bifurcations Starting tor ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PERIOD 4 25 25 -6.00000E-01 7.91531E-04 9.43674E-04 4.12926E-04 8.27359E-04 5.99999E-01 9.93457E+00 4 50 26 -5.99724E-01 2.51132E-02 1.15202E-02 1.31387E-02 1.52334E-02 5.98564E-01 9.91531E+00 4 75 27 -5.94608E-01 1.22711E-01 6.02270E-02 6.83783E-02 8.07798E-02 5.66637E-01 9.50940E+00 4 100 EP 28 -5.95896E-01 2.65341E-01 1.88262E-01 1.81136E-01 2.33810E-01 4.56856E-01 8.41070E+00 Total Time 0.495E+00 tor ... done Saving to b.tor, s.tor, and d.tor ... done tor : sixth run : a 3-parameter branch fixing the angle Starting tor ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(2) PAR(3) PERIOD 4 25 25 -7.73718E-01 2.02836E-03 2.76127E-03 6.22360E-05 2.13946E-03 7.73711E-01 -7.73723E-01 1.31853E+02 4 50 26 -7.74589E-01 5.80513E-05 7.91026E-05 1.66545E-07 6.12727E-05 7.74589E-01 -7.74589E-01 1.40831E+03 4 60 UZ 27 -7.74595E-01 1.87007E-05 2.54830E-05 2.52131E-08 1.97391E-05 7.74595E-01 -7.74595E-01 2.99686E+03 Total Time 0.128E+01 tor ... done Saving to b.tor3, s.tor3, and d.tor3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo tor is done Doing um2 Version 07p Copying demo um2 ... done Demo um2 is started ***Grow an initial orbit by continuation*** gfortran -fopenmp -O -c um2.f90 -o um2.o gfortran -fopenmp -O um2.o -o um2.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting um2 ... BR PT TY LAB Period INTEGRAL x MAX x MAX y r1 1 1 EP 1 1.00000E-04 6.12323E-18 6.12323E-18 1.00000E-01 1.00000E-01 1 9 UZ 2 1.78222E+00 -1.49832E-02 6.12323E-18 5.94234E-01 6.00000E-01 Total Time 0.171E+00 um2 ... done Saving to b.1, s.1, and d.1 ... done ***Decrease the value of the problem parameter eps*** Starting um2 ... BR PT TY LAB eps INTEGRAL x MAX x MAX y Period 1 5 UZ 3 1.00000E-01 -1.31708E-02 6.12323E-18 5.95609E-01 1.78449E+00 Total Time 0.175E-01 um2 ... done Saving to b.2, s.2, and d.2 ... done ***Allow the initial condition to move around a small circle*** Starting um2 ... BR PT TY LAB theta INTEGRAL x MAX x MAX y Period 1 1 4 2.50000E-01 -1.31708E-02 6.12323E-18 5.95609E-01 1.78449E+00 1 2 5 2.91453E-01 -4.09625E-02 -2.57523E-02 5.91295E-01 1.81201E+00 1 3 6 3.37431E-01 -6.93022E-02 -5.22127E-02 5.85227E-01 1.92873E+00 1 4 7 3.82785E-01 -9.29481E-02 -7.40835E-02 5.78572E-01 2.16191E+00 1 5 8 4.25912E-01 -1.10342E-01 -8.93592E-02 5.72190E-01 2.56705E+00 1 6 9 4.63581E-01 -1.21733E-01 -9.73933E-02 5.66247E-01 3.27453E+00 1 7 10 4.89344E-01 -1.31508E-01 -9.97759E-02 5.58245E-01 4.65672E+00 1 8 11 4.97306E-01 -1.52230E-01 -9.99857E-02 5.36402E-01 7.59626E+00 1 9 12 4.97724E-01 -1.96994E-01 -9.99898E-02 4.65277E-01 1.22046E+01 1 10 13 4.97727E-01 -2.41811E-01 -9.99898E-02 3.34029E-01 1.55960E+01 1 11 14 4.97727E-01 -2.75408E-01 -9.99898E-02 1.43146E-01 1.76532E+01 1 12 15 4.97727E-01 -2.77595E-01 -9.99898E-02 1.21306E-01 1.77876E+01 1 13 16 4.97727E-01 -2.74978E-01 -9.99898E-02 1.05069E-01 1.76520E+01 1 14 17 4.97727E-01 -2.70798E-01 -9.99898E-02 9.06891E-02 1.74229E+01 1 15 18 4.97727E-01 -2.65141E-01 -9.99898E-02 7.62504E-02 1.71014E+01 1 16 19 4.97727E-01 -2.58059E-01 -9.99898E-02 6.20595E-02 1.66837E+01 1 17 20 4.97727E-01 -2.49516E-01 -9.99898E-02 4.85463E-02 1.61594E+01 1 18 21 4.97727E-01 -2.39414E-01 -9.99898E-02 3.61569E-02 1.55109E+01 1 19 22 4.97727E-01 -2.27612E-01 -9.99898E-02 2.53328E-02 1.47123E+01 1 20 23 4.97728E-01 -2.13965E-01 -9.99898E-02 1.64411E-02 1.37288E+01 1 21 24 4.97730E-01 -1.98399E-01 -9.99898E-02 9.69926E-03 1.25172E+01 1 22 25 4.97742E-01 -1.81063E-01 -9.99899E-02 5.10778E-03 1.10352E+01 1 23 26 4.97816E-01 -1.62622E-01 -9.99906E-02 2.39300E-03 9.27512E+00 1 24 27 4.98342E-01 -1.44658E-01 -9.99946E-02 1.04514E-03 7.34695E+00 1 25 28 5.01488E-01 -1.29391E-01 -9.99956E-02 -9.34919E-04 5.53847E+00 1 26 29 5.11609E-01 -1.18547E-01 -8.01567E-02 -7.28761E-03 4.23557E+00 1 27 30 5.30483E-01 -1.09689E-01 -6.47596E-02 -1.90361E-02 3.38485E+00 1 28 31 5.55414E-01 -1.00094E-01 -5.13289E-02 -3.41185E-02 2.83586E+00 1 29 32 5.83801E-01 -8.81187E-02 -3.67086E-02 -5.02541E-02 2.46449E+00 1 30 33 6.17320E-01 -7.15387E-02 -1.78969E-02 -6.72177E-02 2.18280E+00 1 31 34 6.55706E-01 -4.94448E-02 6.16886E-03 -8.29565E-02 1.97679E+00 1 32 35 6.94826E-01 -2.43426E-02 3.29134E-02 -9.40510E-02 1.85129E+00 1 33 36 7.34261E-01 2.39687E-03 6.11162E-02 -9.95114E-02 1.79147E+00 1 34 37 7.73859E-01 2.93317E-02 8.95078E-02 -9.88785E-02 1.79204E+00 1 35 38 8.13504E-01 5.49955E-02 1.16825E-01 -9.21448E-02 1.85554E+00 1 36 39 8.52940E-01 7.79481E-02 1.41859E-01 -7.98020E-02 1.99281E+00 1 37 40 8.91575E-01 9.69166E-02 1.63604E-01 -6.29769E-02 2.22591E+00 1 38 41 9.28218E-01 1.11127E-01 1.81628E-01 -4.35883E-02 2.59697E+00 1 39 42 9.60667E-01 1.20917E-01 1.96895E-01 -2.44628E-02 3.19488E+00 1 40 43 9.84881E-01 1.28870E-01 2.13699E-01 -9.48512E-03 4.23547E+00 1 41 44 9.95964E-01 1.41647E-01 2.43890E-01 -2.53557E-03 6.19291E+00 1 42 45 9.97667E-01 1.68622E-01 3.08102E-01 -1.46581E-03 9.48413E+00 1 43 46 9.97726E-01 2.07158E-01 4.05099E-01 -1.42895E-03 1.30554E+01 1 44 47 9.97727E-01 2.42816E-01 5.01222E-01 -1.42817E-03 1.56627E+01 1 45 48 9.97727E-01 2.72298E-01 5.85379E-01 -1.42814E-03 1.74745E+01 1 46 49 9.97727E-01 2.76764E-01 5.97883E-01 -1.42813E-03 1.77316E+01 1 47 50 9.97727E-01 2.77708E-01 5.99333E-01 2.82836E-02 1.77926E+01 1 48 51 9.97727E-01 2.75735E-01 5.91313E-01 1.01731E-01 1.76923E+01 1 49 52 9.97727E-01 2.71641E-01 5.76203E-01 1.67301E-01 1.74698E+01 1 50 53 9.97727E-01 2.65866E-01 5.55138E-01 2.27644E-01 1.71432E+01 1 51 54 9.97727E-01 2.58535E-01 5.28232E-01 2.84554E-01 1.67123E+01 1 52 55 9.97727E-01 2.49637E-01 4.95183E-01 3.38812E-01 1.61670E+01 1 53 56 9.97727E-01 2.39078E-01 4.56047E-01 3.90452E-01 1.54888E+01 1 54 57 9.97727E-01 2.26717E-01 4.13079E-01 4.38836E-01 1.46498E+01 1 55 58 9.97728E-01 2.12408E-01 3.66861E-01 4.82724E-01 1.36122E+01 1 56 59 9.97731E-01 1.96100E-01 3.18059E-01 5.20504E-01 1.23293E+01 1 57 60 9.97747E-01 1.78020E-01 2.68145E-01 5.50627E-01 1.07588E+01 1 58 61 9.97856E-01 1.59025E-01 2.20060E-01 5.72168E-01 8.90681E+00 1 59 62 9.98662E-01 1.41009E-01 1.78654E-01 5.85398E-01 6.92790E+00 1 60 63 1.00326E+00 1.26240E-01 1.48359E-01 5.92239E-01 5.15278E+00 1 61 64 1.01656E+00 1.15750E-01 1.29937E-01 5.95305E-01 3.93212E+00 1 62 65 1.03884E+00 1.06466E-01 1.16914E-01 5.96996E-01 3.16235E+00 1 63 66 1.06655E+00 9.56002E-02 1.04392E-01 5.98259E-01 2.66941E+00 1 64 67 1.09726E+00 8.17875E-02 9.00700E-02 5.99279E-01 2.33641E+00 1 65 68 1.13298E+00 6.28930E-02 7.14721E-02 5.99941E-01 2.08684E+00 1 66 69 1.16973E+00 4.06879E-02 5.01899E-02 5.99799E-01 1.92335E+00 1 67 70 1.20695E+00 1.62135E-02 2.71110E-02 5.98563E-01 1.82627E+00 1 68 71 1.24440E+00 -9.34192E-03 3.51740E-03 5.96085E-01 1.78589E+00 1 69 UZ 72 1.25000E+00 -1.31708E-02 -4.15073E-08 5.95609E-01 1.78449E+00 Total Time 0.177E+00 um2 ... done Saving to b.3, s.3, and d.3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo um2 is done Doing um3 Version 07p Copying demo um3 ... done Demo um3 is started ***Grow an initial orbit by continuation*** gfortran -fopenmp -O -c um3.f90 -o um3.o gfortran -fopenmp -O um3.o -o um3.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting um3 ... BR PT TY LAB Period MAX z MAX x MAX y MAX z r1 1 1 EP 1 1.00000E-04 0.00000E+00 1.83697E-18 3.00000E-02 0.00000E+00 3.00000E-02 1 22 UZ 2 3.45109E+00 1.63220E-02 1.83697E-18 9.41220E-01 1.63220E-02 9.99998E-01 Total Time 0.285E+00 um3 ... done Saving to b.1, s.1, and d.1 ... done ***Decrease the value of the problem parameter eps*** Starting um3 ... BR PT TY LAB eps MAX z MAX x MAX y MAX z Period 1 6 UZ 3 1.00005E-02 1.23889E-02 1.83697E-18 9.55702E-01 1.23889E-02 3.46458E+00 Total Time 0.213E-01 um3 ... done Saving to b.2, s.2, and d.2 ... done ***Part 1 of the unstable manifold*** Runner configured Starting um3 ... BR PT TY LAB theta MAX z MAX x MAX y MAX z Period 1 1 4 2.50000E-01 1.23889E-02 1.83697E-18 9.55702E-01 1.23889E-02 3.46458E+00 1 2 5 2.99197E-01 1.36985E-02 -9.12649E-03 9.53334E-01 1.36985E-02 3.51118E+00 1 3 6 3.47983E-01 1.50111E-02 -1.73246E-02 9.51147E-01 1.50111E-02 3.66386E+00 1 4 7 3.94854E-01 1.61293E-02 -2.36878E-02 9.49399E-01 1.61293E-02 3.94849E+00 1 5 8 4.37982E-01 1.69072E-02 -2.77511E-02 9.48237E-01 1.69072E-02 4.42828E+00 1 6 9 4.73526E-01 1.73113E-02 -2.95859E-02 9.47653E-01 1.73113E-02 5.26172E+00 1 7 10 4.94121E-01 1.74822E-02 -2.99795E-02 9.47411E-01 1.74822E-02 6.78193E+00 1 8 11 4.99375E-01 1.76389E-02 -2.99998E-02 9.47187E-01 1.76389E-02 9.26691E+00 1 9 12 4.99844E-01 1.78968E-02 -3.00000E-02 9.46818E-01 1.78968E-02 1.33125E+01 1 10 13 4.99852E-01 1.84193E-02 -3.00000E-02 9.46082E-01 1.84193E-02 2.09055E+01 1 11 14 4.99852E-01 1.98760E-02 -3.00000E-02 9.44093E-01 1.98760E-02 3.87184E+01 1 12 15 4.99852E-01 2.18284E-02 -3.00000E-02 9.41549E-01 2.18284E-02 5.72999E+01 1 13 16 4.99852E-01 2.68707E-02 -3.00000E-02 9.35456E-01 2.68707E-02 9.02573E+01 1 14 17 4.99852E-01 4.21938E-02 -3.00000E-02 9.19308E-01 4.21938E-02 1.42016E+02 1 15 18 4.99852E-01 6.71689E-02 -3.00000E-02 8.96309E-01 6.71689E-02 1.82591E+02 1 16 19 4.99852E-01 9.73887E-02 -3.00000E-02 8.70519E-01 9.73887E-02 2.11197E+02 1 17 20 4.99852E-01 1.31193E-01 -3.00000E-02 8.42487E-01 1.31193E-01 2.34353E+02 1 18 21 4.99852E-01 1.63992E-01 -3.00000E-02 8.15333E-01 1.63992E-01 2.54879E+02 1 19 22 4.99852E-01 1.90114E-01 -3.00000E-02 7.93505E-01 1.90114E-01 2.74883E+02 1 20 23 4.99852E-01 2.06207E-01 -3.00000E-02 7.79930E-01 2.06207E-01 2.96112E+02 1 21 24 4.99852E-01 2.13593E-01 -3.00000E-02 7.73666E-01 2.13593E-01 3.19773E+02 1 22 25 4.99852E-01 2.16157E-01 -3.00000E-02 7.71486E-01 2.16157E-01 3.46546E+02 1 23 26 4.99852E-01 2.16861E-01 -3.00000E-02 7.70888E-01 2.16861E-01 3.76995E+02 1 24 27 4.99852E-01 2.17015E-01 -3.00000E-02 7.70757E-01 2.17015E-01 4.11831E+02 1 25 28 4.99852E-01 2.17042E-01 -3.00000E-02 7.70734E-01 2.17042E-01 4.51975E+02 1 26 29 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 4.98625E+02 1 27 30 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 5.53355E+02 1 28 31 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 6.18281E+02 1 29 32 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 6.96314E+02 1 30 33 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 7.91578E+02 1 31 34 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 9.10136E+02 1 32 35 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.06132E+03 1 33 36 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.26044E+03 1 34 37 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.53480E+03 1 35 38 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.69265E+03 1 36 39 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.86142E+03 1 37 40 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 2.05714E+03 1 38 41 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 2.28742E+03 1 39 42 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 2.56161E+03 1 40 43 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 2.89261E+03 1 41 44 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 3.29890E+03 1 42 45 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 3.80796E+03 1 43 46 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 4.46284E+03 1 44 47 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 5.33572E+03 1 45 48 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 5.83204E+03 1 46 49 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 6.36241E+03 1 47 50 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 6.96968E+03 1 48 51 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 7.67284E+03 1 49 52 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 8.49459E+03 1 50 53 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 9.46500E+03 1 51 UZ 54 4.99852E-01 2.17046E-01 -3.00000E-02 7.70731E-01 2.17046E-01 1.00000E+04 Total Time 0.160E+00 um3 ... done ***Part 2 of the unstable manifold Starting um3 ... BR PT TY LAB theta MAX z MAX x MAX y MAX z Period 1 1 4 2.50000E-01 1.23889E-02 1.83697E-18 9.55702E-01 1.23889E-02 3.46458E+00 1 2 5 2.00889E-01 1.12339E-02 9.12986E-03 9.58005E-01 1.12339E-02 3.51493E+00 1 3 6 1.52342E-01 1.03268E-02 1.73640E-02 9.60023E-01 1.03268E-02 3.66956E+00 1 4 7 1.05764E-01 9.70540E-03 2.38258E-02 9.61571E-01 9.70540E-03 3.95242E+00 1 5 8 6.28541E-02 9.34243E-03 2.80818E-02 9.62574E-01 9.34243E-03 4.42401E+00 1 6 9 2.72739E-02 9.17587E-03 3.02289E-02 9.63075E-01 9.17587E-03 5.23484E+00 1 7 10 6.16390E-03 9.11164E-03 3.11104E-02 9.63280E-01 9.11164E-03 6.69917E+00 1 8 11 4.35068E-04 9.05419E-03 3.18869E-02 9.63460E-01 9.05419E-03 9.08145E+00 1 9 12 -1.34843E-04 8.96295E-03 3.31317E-02 9.63747E-01 8.96295E-03 1.28979E+01 1 10 13 -1.47657E-04 8.79528E-03 3.55277E-02 9.64297E-01 8.79528E-03 1.98570E+01 1 11 14 -1.47670E-04 8.42746E-03 4.14384E-02 9.65637E-01 8.42746E-03 3.51953E+01 1 12 15 -1.47670E-04 7.58052E-03 6.76816E-02 9.71292E-01 7.58052E-03 8.40897E+01 1 13 16 -1.47670E-04 1.28319E-02 1.13887E-01 9.80095E-01 1.28319E-02 1.35914E+02 1 14 17 -1.47670E-04 2.88468E-02 1.70777E-01 9.88853E-01 2.88468E-02 1.76029E+02 1 15 18 -1.47670E-04 5.19487E-02 2.29253E-01 9.95164E-01 5.19487E-02 2.04424E+02 1 16 19 -1.47670E-04 8.39220E-02 2.91644E-01 9.98077E-01 8.39220E-02 2.25817E+02 1 17 20 -1.47670E-04 1.28846E-01 3.62168E-01 9.94368E-01 1.28846E-01 2.41566E+02 1 18 21 -1.47670E-04 1.97015E-01 4.50438E-01 9.70404E-01 1.97015E-01 2.52016E+02 1 19 22 -1.47670E-04 3.07211E-01 5.71026E-01 8.51247E-01 3.07211E-01 2.57387E+02 1 20 23 -1.47670E-04 3.75400E-01 6.38904E-01 7.14625E-01 3.75400E-01 2.58441E+02 1 21 24 -1.47670E-04 4.44896E-01 7.11419E-01 5.48798E-01 4.44896E-01 2.58935E+02 1 22 25 -1.47670E-04 5.02914E-01 7.89662E-01 3.51434E-01 5.02914E-01 2.59124E+02 1 23 26 -1.47670E-04 5.39066E-01 8.35480E-01 1.06663E-01 5.39066E-01 2.59034E+02 1 24 27 -1.47670E-04 5.17040E-01 8.26314E-01 -2.78351E-05 5.17040E-01 2.58517E+02 1 25 28 -1.47670E-04 4.06785E-01 7.50385E-01 -2.78351E-05 4.06785E-01 2.57024E+02 1 26 29 -1.47670E-04 3.63572E-01 7.19875E-01 -2.78351E-05 3.63572E-01 2.56043E+02 1 27 30 -1.47670E-04 3.26485E-01 6.93040E-01 -2.78351E-05 3.26485E-01 2.54829E+02 1 28 31 -1.47670E-04 2.93833E-01 6.68679E-01 -2.78351E-05 2.93833E-01 2.53314E+02 1 29 32 -1.47670E-04 2.65309E-01 6.46626E-01 -2.78351E-05 2.65309E-01 2.51478E+02 1 30 33 -1.47670E-04 2.40406E-01 6.26601E-01 -2.78351E-05 2.40406E-01 2.49307E+02 1 31 34 -1.47670E-04 2.18569E-01 6.08295E-01 -2.78351E-05 2.18569E-01 2.46794E+02 1 32 35 -1.47670E-04 1.99285E-01 5.91410E-01 -2.78351E-05 1.99285E-01 2.43939E+02 1 33 36 -1.47670E-04 1.82112E-01 5.75687E-01 -2.78351E-05 1.82112E-01 2.40739E+02 1 34 37 -1.47670E-04 1.66684E-01 5.60902E-01 -2.78351E-05 1.66684E-01 2.37195E+02 1 35 38 -1.47670E-04 1.52707E-01 5.46871E-01 -2.78351E-05 1.52707E-01 2.33305E+02 1 36 39 -1.47670E-04 1.39949E-01 5.33444E-01 -2.78351E-05 1.39949E-01 2.29066E+02 1 37 40 -1.47670E-04 1.28227E-01 5.20497E-01 -2.78351E-05 1.28227E-01 2.24473E+02 1 38 41 -1.47670E-04 1.17398E-01 5.07933E-01 -2.78351E-05 1.17398E-01 2.19516E+02 1 39 42 -1.47670E-04 1.07354E-01 4.95676E-01 -2.78351E-05 1.07354E-01 2.14183E+02 1 40 43 -1.47670E-04 9.80091E-02 4.83667E-01 -2.78351E-05 9.80091E-02 2.08457E+02 1 41 44 -1.47670E-04 8.93017E-02 4.71864E-01 -2.78351E-05 8.93017E-02 2.02317E+02 1 42 45 -1.47670E-04 8.11848E-02 4.60238E-01 -2.78351E-05 8.11848E-02 1.95738E+02 1 43 46 -1.47670E-04 7.36251E-02 4.48776E-01 -2.78351E-05 7.36251E-02 1.88687E+02 1 44 47 -1.47670E-04 6.65997E-02 4.37477E-01 -2.78351E-05 6.65997E-02 1.81132E+02 1 45 48 -1.47670E-04 6.00950E-02 4.26357E-01 -2.78351E-05 6.00950E-02 1.73035E+02 1 46 49 -1.47670E-04 5.41047E-02 4.15448E-01 -2.78351E-05 5.41047E-02 1.64363E+02 1 47 50 -1.47670E-04 4.86298E-02 4.04805E-01 -2.78351E-05 4.86298E-02 1.55089E+02 1 48 51 -1.47670E-04 4.36780E-02 3.94511E-01 -2.78351E-05 4.36780E-02 1.45215E+02 1 49 52 -1.47670E-04 3.92631E-02 3.84685E-01 -2.78351E-05 3.92631E-02 1.34789E+02 1 50 53 -1.47670E-04 3.54029E-02 3.75485E-01 -2.78351E-05 3.54029E-02 1.23948E+02 1 51 54 -1.47670E-04 3.21115E-02 3.67096E-01 -2.78351E-05 3.21115E-02 1.12941E+02 1 52 55 -1.47670E-04 2.93863E-02 3.59692E-01 -2.78351E-05 2.93863E-02 1.02128E+02 1 53 56 -1.47670E-04 2.71926E-02 3.53374E-01 -2.78351E-05 2.71926E-02 9.18940E+01 1 54 57 -1.47670E-04 2.54628E-02 3.48126E-01 -2.78351E-05 2.54628E-02 8.25354E+01 1 55 58 -1.47670E-04 2.41104E-02 3.43837E-01 -2.78351E-05 2.41104E-02 7.41895E+01 1 56 59 -1.47670E-04 2.30510E-02 3.40348E-01 -2.78351E-05 2.30510E-02 6.68554E+01 1 57 60 -1.47670E-04 2.22136E-02 3.37501E-01 -2.78351E-05 2.22136E-02 6.04530E+01 1 58 61 -1.47670E-04 2.15436E-02 3.35162E-01 -2.78351E-05 2.15436E-02 5.48718E+01 1 59 62 -1.47670E-04 2.10004E-02 3.33222E-01 -2.78351E-05 2.10004E-02 4.99987E+01 1 60 63 -1.47670E-04 2.05541E-02 3.31598E-01 -2.78351E-05 2.05541E-02 4.57305E+01 1 61 64 -1.47670E-04 2.01830E-02 3.30226E-01 -2.78351E-05 2.01830E-02 4.19773E+01 1 62 65 -1.47670E-04 1.98709E-02 3.29055E-01 -2.78351E-05 1.98709E-02 3.86628E+01 1 63 66 -1.47670E-04 1.96058E-02 3.28048E-01 -2.78351E-05 1.96058E-02 3.57234E+01 1 64 67 -1.47670E-04 1.93785E-02 3.27176E-01 -2.78351E-05 1.93785E-02 3.31054E+01 1 65 68 -1.47670E-04 1.91820E-02 3.26415E-01 -2.78351E-05 1.91820E-02 3.07644E+01 1 66 69 -1.47670E-04 1.90109E-02 3.25747E-01 -2.78351E-05 1.90109E-02 2.86630E+01 1 67 70 -1.47670E-04 1.88608E-02 3.25156E-01 -2.78351E-05 1.88608E-02 2.67697E+01 1 68 71 -1.47670E-04 1.87283E-02 3.24632E-01 -2.78351E-05 1.87283E-02 2.50581E+01 1 69 72 -1.47670E-04 1.86108E-02 3.24164E-01 -2.78351E-05 1.86108E-02 2.35057E+01 1 70 73 -1.47671E-04 1.85060E-02 3.23745E-01 -2.78353E-05 1.85060E-02 2.20934E+01 1 71 74 -1.47674E-04 1.84121E-02 3.23367E-01 -2.78359E-05 1.84121E-02 2.08048E+01 1 72 75 -1.47685E-04 1.83276E-02 3.23026E-01 -2.78379E-05 1.83276E-02 1.96259E+01 1 73 76 -1.47714E-04 1.82512E-02 3.22716E-01 -2.78435E-05 1.82512E-02 1.85447E+01 1 74 77 -1.47790E-04 1.81820E-02 3.22434E-01 -2.78578E-05 1.81820E-02 1.75505E+01 1 75 78 -1.47971E-04 1.81189E-02 3.22177E-01 -2.78919E-05 1.81189E-02 1.66343E+01 1 76 79 -1.48372E-04 1.80614E-02 3.21942E-01 -2.79674E-05 1.80614E-02 1.57881E+01 1 77 80 -1.49207E-04 1.80088E-02 3.21725E-01 -2.81248E-05 1.80088E-02 1.50050E+01 1 78 81 -1.50847E-04 1.79604E-02 3.21527E-01 -2.84339E-05 1.79604E-02 1.42789E+01 1 79 82 -1.53908E-04 1.79159E-02 3.21343E-01 -2.90109E-05 1.79159E-02 1.36043E+01 1 80 83 -1.59357E-04 1.78748E-02 3.21173E-01 -3.00381E-05 1.78748E-02 1.29765E+01 1 81 84 -1.68656E-04 1.78369E-02 3.21016E-01 -3.17908E-05 1.78369E-02 1.23912E+01 1 82 85 -1.83918E-04 1.78017E-02 3.20870E-01 -3.46678E-05 1.78017E-02 1.18447E+01 1 83 86 -2.08102E-04 1.77690E-02 3.20734E-01 -3.92263E-05 1.77690E-02 1.13336E+01 1 84 87 -2.45205E-04 1.77385E-02 3.20607E-01 -4.62200E-05 1.77385E-02 1.08549E+01 1 85 88 -3.00474E-04 1.77102E-02 3.20489E-01 -5.66380E-05 1.77102E-02 1.04060E+01 1 86 89 -3.80607E-04 1.76837E-02 3.20379E-01 -7.17427E-05 1.76837E-02 9.98442E+00 1 87 90 -4.93936E-04 1.76589E-02 3.20275E-01 -9.31047E-05 1.76589E-02 9.58801E+00 1 88 91 -6.50584E-04 1.76356E-02 3.20178E-01 -1.22632E-04 1.76356E-02 9.21483E+00 1 89 92 -8.62575E-04 1.76138E-02 3.20086E-01 -1.62591E-04 1.76138E-02 8.86312E+00 1 90 93 -1.14389E-03 1.75933E-02 3.20000E-01 -2.15616E-04 1.75933E-02 8.53133E+00 1 91 94 -1.51043E-03 1.75739E-02 3.19919E-01 -2.84706E-04 1.75739E-02 8.21805E+00 1 92 95 -1.97994E-03 1.75555E-02 3.19842E-01 -3.73200E-04 1.75555E-02 7.92204E+00 1 93 96 -2.57171E-03 1.75380E-02 3.19769E-01 -4.84734E-04 1.75380E-02 7.64219E+00 1 94 97 -3.30626E-03 1.75214E-02 3.19700E-01 -6.23171E-04 1.75214E-02 7.37754E+00 1 95 98 -4.20482E-03 1.75053E-02 3.19633E-01 -7.92497E-04 1.75053E-02 7.12724E+00 1 96 99 -5.28859E-03 1.74896E-02 3.19567E-01 -9.96693E-04 1.74896E-02 6.89057E+00 1 97 100 -6.57799E-03 1.74742E-02 3.19503E-01 -1.23957E-03 1.74742E-02 6.66689E+00 1 98 101 -8.09166E-03 1.74586E-02 3.19439E-01 -1.52459E-03 1.74586E-02 6.45565E+00 1 99 102 -9.84552E-03 1.74428E-02 3.19373E-01 -1.85465E-03 1.74428E-02 6.25637E+00 1 100 103 -1.18519E-02 1.74261E-02 3.19304E-01 -2.23196E-03 1.74261E-02 6.06862E+00 1 101 104 -1.41187E-02 1.74084E-02 3.19230E-01 -2.65783E-03 1.74084E-02 5.89196E+00 1 102 105 -1.66495E-02 1.73891E-02 3.19150E-01 -3.13263E-03 1.73891E-02 5.72600E+00 1 103 106 -1.94428E-02 1.73678E-02 3.19062E-01 -3.65576E-03 1.73678E-02 5.57028E+00 1 104 107 -2.24930E-02 1.73439E-02 3.18963E-01 -4.22572E-03 1.73439E-02 5.42437E+00 1 105 108 -2.57908E-02 1.73171E-02 3.18851E-01 -4.84020E-03 1.73171E-02 5.28776E+00 1 106 109 -2.93243E-02 1.72867E-02 3.18724E-01 -5.49627E-03 1.72867E-02 5.15996E+00 1 107 110 -3.30793E-02 1.72525E-02 3.18580E-01 -6.19051E-03 1.72525E-02 5.04045E+00 1 108 111 -3.70409E-02 1.72138E-02 3.18417E-01 -6.91919E-03 1.72138E-02 4.92871E+00 1 109 112 -4.11937E-02 1.71705E-02 3.18234E-01 -7.67843E-03 1.71705E-02 4.82421E+00 1 110 113 -4.55225E-02 1.71221E-02 3.18029E-01 -8.46427E-03 1.71221E-02 4.72645E+00 1 111 114 -5.00128E-02 1.70684E-02 3.17800E-01 -9.27280E-03 1.70684E-02 4.63496E+00 1 112 115 -5.46507E-02 1.70092E-02 3.17546E-01 -1.01002E-02 1.70092E-02 4.54928E+00 1 113 116 -5.94235E-02 1.69442E-02 3.17267E-01 -1.09426E-02 1.69442E-02 4.46899E+00 1 114 117 -6.43197E-02 1.68734E-02 3.16960E-01 -1.17966E-02 1.68734E-02 4.39371E+00 1 115 118 -6.93285E-02 1.67966E-02 3.16626E-01 -1.26587E-02 1.67966E-02 4.32307E+00 1 116 119 -7.44403E-02 1.67138E-02 3.16265E-01 -1.35256E-02 1.67138E-02 4.25675E+00 1 117 120 -7.96463E-02 1.66249E-02 3.15874E-01 -1.43941E-02 1.66249E-02 4.19446E+00 1 118 121 -8.49387E-02 1.65301E-02 3.15455E-01 -1.52613E-02 1.65301E-02 4.13594E+00 1 119 122 -9.03104E-02 1.64294E-02 3.15007E-01 -1.61242E-02 1.64294E-02 4.08093E+00 1 120 123 -9.57550E-02 1.63229E-02 3.14529E-01 -1.69800E-02 1.63229E-02 4.02922E+00 1 121 124 -1.01267E-01 1.62108E-02 3.14023E-01 -1.78261E-02 1.62108E-02 3.98063E+00 1 122 125 -1.06840E-01 1.60931E-02 3.13488E-01 -1.86600E-02 1.60931E-02 3.93496E+00 1 123 126 -1.12470E-01 1.59701E-02 3.12924E-01 -1.94791E-02 1.59701E-02 3.89206E+00 1 124 127 -1.18153E-01 1.58420E-02 3.12332E-01 -2.02812E-02 1.58420E-02 3.85179E+00 1 125 128 -1.23884E-01 1.57091E-02 3.11713E-01 -2.10639E-02 1.57091E-02 3.81402E+00 1 126 129 -1.29659E-01 1.55716E-02 3.11066E-01 -2.18251E-02 1.55716E-02 3.77862E+00 1 127 130 -1.35476E-01 1.54298E-02 3.10393E-01 -2.25626E-02 1.54298E-02 3.74551E+00 1 128 131 -1.41331E-01 1.52840E-02 3.09694E-01 -2.32746E-02 1.52840E-02 3.71458E+00 1 129 132 -1.47221E-01 1.51346E-02 3.08970E-01 -2.39590E-02 1.51346E-02 3.68574E+00 1 130 133 -1.53143E-01 1.49818E-02 3.08222E-01 -2.46140E-02 1.49818E-02 3.65893E+00 1 131 134 -1.59095E-01 1.48261E-02 3.07452E-01 -2.52380E-02 1.48261E-02 3.63406E+00 1 132 135 -1.65074E-01 1.46677E-02 3.06659E-01 -2.58293E-02 1.46677E-02 3.61108E+00 1 133 136 -1.71077E-01 1.45070E-02 3.05846E-01 -2.63864E-02 1.45070E-02 3.58993E+00 1 134 137 -1.77102E-01 1.43445E-02 3.05013E-01 -2.69078E-02 1.43445E-02 3.57056E+00 1 135 138 -1.83148E-01 1.41804E-02 3.04162E-01 -2.73921E-02 1.41804E-02 3.55293E+00 1 136 139 -1.89212E-01 1.40151E-02 3.03294E-01 -2.78382E-02 1.40151E-02 3.53698E+00 1 137 140 -1.95291E-01 1.38491E-02 3.02410E-01 -2.82450E-02 1.38491E-02 3.52270E+00 1 138 141 -2.01385E-01 1.36826E-02 3.01512E-01 -2.86113E-02 1.36826E-02 3.51004E+00 1 139 142 -2.07491E-01 1.35161E-02 3.00601E-01 -2.89363E-02 1.35161E-02 3.49898E+00 1 140 143 -2.13608E-01 1.33499E-02 2.99679E-01 -2.92191E-02 1.33499E-02 3.48949E+00 1 141 144 -2.19733E-01 1.31844E-02 2.98748E-01 -2.94591E-02 1.31844E-02 3.48155E+00 1 142 145 -2.25865E-01 1.30199E-02 2.97808E-01 -2.96557E-02 1.30199E-02 3.47514E+00 1 143 146 -2.32001E-01 1.28566E-02 2.96862E-01 -2.98084E-02 1.28566E-02 3.47026E+00 1 144 147 -2.38142E-01 1.26951E-02 2.95911E-01 -2.99168E-02 1.26951E-02 3.46688E+00 1 145 148 -2.44284E-01 1.25354E-02 2.94956E-01 -2.99807E-02 1.25354E-02 3.46499E+00 1 146 149 -2.50427E-01 1.23780E-02 2.94000E-01 -2.99999E-02 1.23780E-02 3.46460E+00 1 147 150 -2.56568E-01 1.22231E-02 2.93044E-01 -2.99745E-02 1.22231E-02 3.46570E+00 1 148 151 -2.62705E-01 1.20710E-02 2.92089E-01 -2.99045E-02 1.20710E-02 3.46829E+00 1 149 152 -2.68839E-01 1.19218E-02 2.91138E-01 -2.97901E-02 1.19218E-02 3.47237E+00 1 150 153 -2.74966E-01 1.17759E-02 2.90191E-01 -2.96317E-02 1.17759E-02 3.47795E+00 1 151 154 -2.81084E-01 1.16334E-02 2.89251E-01 -2.94296E-02 1.16334E-02 3.48504E+00 1 152 155 -2.87194E-01 1.14945E-02 2.88319E-01 -2.91845E-02 1.14945E-02 3.49364E+00 1 153 156 -2.93292E-01 1.13594E-02 2.87396E-01 -2.88970E-02 1.13594E-02 3.50378E+00 1 154 157 -2.99377E-01 1.12282E-02 2.86484E-01 -2.85677E-02 1.12282E-02 3.51547E+00 1 155 158 -3.05448E-01 1.11010E-02 2.85585E-01 -2.81977E-02 1.11010E-02 3.52873E+00 1 156 159 -3.11503E-01 1.09780E-02 2.84700E-01 -2.77878E-02 1.09780E-02 3.54360E+00 1 157 160 -3.17539E-01 1.08593E-02 2.83830E-01 -2.73391E-02 1.08593E-02 3.56009E+00 1 158 161 -3.23555E-01 1.07448E-02 2.82977E-01 -2.68527E-02 1.07448E-02 3.57824E+00 1 159 162 -3.29549E-01 1.06348E-02 2.82142E-01 -2.63300E-02 1.06348E-02 3.59810E+00 1 160 163 -3.35520E-01 1.05291E-02 2.81326E-01 -2.57723E-02 1.05291E-02 3.61969E+00 1 161 164 -3.41464E-01 1.04279E-02 2.80531E-01 -2.51809E-02 1.04279E-02 3.64308E+00 1 162 165 -3.47380E-01 1.03312E-02 2.79758E-01 -2.45575E-02 1.03312E-02 3.66832E+00 1 163 166 -3.53266E-01 1.02389E-02 2.79007E-01 -2.39036E-02 1.02389E-02 3.69546E+00 1 164 167 -3.59118E-01 1.01511E-02 2.78280E-01 -2.32210E-02 1.01511E-02 3.72458E+00 1 165 168 -3.64935E-01 1.00676E-02 2.77577E-01 -2.25114E-02 1.00676E-02 3.75575E+00 1 166 169 -3.70713E-01 9.98854E-03 2.76900E-01 -2.17768E-02 9.98854E-03 3.78904E+00 1 167 170 -3.76450E-01 9.91377E-03 2.76249E-01 -2.10190E-02 9.91377E-03 3.82457E+00 1 168 171 -3.82142E-01 9.84325E-03 2.75625E-01 -2.02402E-02 9.84325E-03 3.86242E+00 1 169 172 -3.87786E-01 9.77691E-03 2.75029E-01 -1.94425E-02 9.77691E-03 3.90271E+00 1 170 173 -3.93377E-01 9.71466E-03 2.74461E-01 -1.86280E-02 9.71466E-03 3.94557E+00 1 171 174 -3.98912E-01 9.65642E-03 2.73921E-01 -1.77991E-02 9.65642E-03 3.99113E+00 1 172 175 -4.04386E-01 9.60210E-03 2.73410E-01 -1.69581E-02 9.60210E-03 4.03956E+00 1 173 176 -4.09793E-01 9.55158E-03 2.72927E-01 -1.61077E-02 9.55158E-03 4.09102E+00 1 174 177 -4.15129E-01 9.50477E-03 2.72474E-01 -1.52503E-02 9.50477E-03 4.14571E+00 1 175 178 -4.20387E-01 9.46154E-03 2.72050E-01 -1.43887E-02 9.46154E-03 4.20384E+00 1 176 179 -4.25559E-01 9.42178E-03 2.71654E-01 -1.35257E-02 9.42178E-03 4.26564E+00 1 177 180 -4.30639E-01 9.38536E-03 2.71287E-01 -1.26643E-02 9.38536E-03 4.33137E+00 1 178 181 -4.35618E-01 9.35214E-03 2.70949E-01 -1.18075E-02 9.35214E-03 4.40132E+00 1 179 182 -4.40486E-01 9.32199E-03 2.70637E-01 -1.09585E-02 9.32199E-03 4.47580E+00 1 180 183 -4.45233E-01 9.29475E-03 2.70353E-01 -1.01208E-02 9.29475E-03 4.55516E+00 1 181 184 -4.49848E-01 9.27028E-03 2.70095E-01 -9.29779E-03 9.27028E-03 4.63976E+00 1 182 185 -4.54318E-01 9.24841E-03 2.69862E-01 -8.49315E-03 9.24841E-03 4.73002E+00 1 183 186 -4.58630E-01 9.22897E-03 2.69652E-01 -7.71063E-03 9.22897E-03 4.82637E+00 1 184 187 -4.62769E-01 9.21178E-03 2.69465E-01 -6.95406E-03 9.21178E-03 4.92927E+00 1 185 188 -4.66721E-01 9.19665E-03 2.69299E-01 -6.22729E-03 9.19665E-03 5.03921E+00 1 186 189 -4.70471E-01 9.18338E-03 2.69152E-01 -5.53412E-03 9.18338E-03 5.15666E+00 1 187 190 -4.74005E-01 9.17176E-03 2.69022E-01 -4.87821E-03 9.17176E-03 5.28215E+00 1 188 191 -4.77308E-01 9.16158E-03 2.68907E-01 -4.26289E-03 9.16158E-03 5.41617E+00 1 189 192 -4.80368E-01 9.15263E-03 2.68805E-01 -3.69108E-03 9.15263E-03 5.55919E+00 1 190 193 -4.83177E-01 9.14470E-03 2.68715E-01 -3.16508E-03 9.14470E-03 5.71169E+00 1 191 194 -4.85729E-01 9.13757E-03 2.68633E-01 -2.68644E-03 9.13757E-03 5.87410E+00 1 192 195 -4.88021E-01 9.13105E-03 2.68558E-01 -2.25585E-03 9.13105E-03 6.04683E+00 1 193 196 -4.90057E-01 9.12496E-03 2.68488E-01 -1.87308E-03 9.12496E-03 6.23029E+00 1 194 197 -4.91843E-01 9.11914E-03 2.68422E-01 -1.53698E-03 9.11914E-03 6.42486E+00 1 195 198 -4.93390E-01 9.11345E-03 2.68357E-01 -1.24553E-03 9.11345E-03 6.63096E+00 1 196 199 -4.94715E-01 9.10777E-03 2.68292E-01 -9.96038E-04 9.10777E-03 6.84904E+00 1 197 200 -4.95834E-01 9.10199E-03 2.68227E-01 -7.85217E-04 9.10199E-03 7.07960E+00 1 198 201 -4.96767E-01 9.09604E-03 2.68160E-01 -6.09429E-04 9.09604E-03 7.32322E+00 1 199 202 -4.97534E-01 9.08985E-03 2.68090E-01 -4.64837E-04 9.08985E-03 7.58058E+00 1 200 203 -4.98156E-01 9.08337E-03 2.68018E-01 -3.47568E-04 9.08337E-03 7.85243E+00 1 201 204 -4.98653E-01 9.07655E-03 2.67942E-01 -2.53843E-04 9.07655E-03 8.13968E+00 1 202 205 -4.99045E-01 9.06934E-03 2.67861E-01 -1.80079E-04 9.06934E-03 8.44334E+00 1 203 206 -4.99348E-01 9.06172E-03 2.67776E-01 -1.22962E-04 9.06172E-03 8.76455E+00 1 204 207 -4.99578E-01 9.05364E-03 2.67686E-01 -7.94953E-05 9.05364E-03 9.10460E+00 1 205 208 -4.99751E-01 9.04507E-03 2.67590E-01 -4.70250E-05 9.04507E-03 9.46491E+00 1 206 209 -4.99877E-01 9.03596E-03 2.67488E-01 -2.32486E-05 9.03596E-03 9.84709E+00 1 207 210 -4.99967E-01 9.02628E-03 2.67379E-01 -6.20934E-06 9.02628E-03 1.02529E+01 1 208 211 -5.00030E-01 9.01598E-03 2.67262E-01 5.72011E-06 9.01598E-03 1.06844E+01 1 209 212 -5.00074E-01 9.00499E-03 2.67138E-01 1.38633E-05 9.00499E-03 1.11436E+01 1 210 213 -5.00102E-01 8.99328E-03 2.67005E-01 1.92708E-05 8.99328E-03 1.16331E+01 1 211 214 -5.00121E-01 8.98076E-03 2.66862E-01 2.27556E-05 8.98076E-03 1.21555E+01 1 212 215 -5.00132E-01 8.96736E-03 2.66709E-01 2.49288E-05 8.96736E-03 1.27139E+01 1 213 216 -5.00139E-01 8.95301E-03 2.66544E-01 2.62364E-05 8.95301E-03 1.33116E+01 1 214 217 -5.00143E-01 8.93762E-03 2.66365E-01 2.69927E-05 8.93762E-03 1.39525E+01 1 215 218 -5.00145E-01 8.92107E-03 2.66173E-01 2.75729E-05 8.92107E-03 1.46406E+01 1 216 219 -5.00147E-01 8.90325E-03 2.65964E-01 2.82094E-05 8.90325E-03 1.53809E+01 1 217 220 -5.00147E-01 8.88403E-03 2.65737E-01 2.89135E-05 8.88403E-03 1.61787E+01 1 218 221 -5.00147E-01 8.86326E-03 2.65490E-01 2.96935E-05 8.86326E-03 1.70401E+01 1 219 222 -5.00148E-01 8.84078E-03 2.65220E-01 3.05573E-05 8.84078E-03 1.79720E+01 1 220 223 -5.00148E-01 8.81640E-03 2.64925E-01 3.15251E-05 8.81640E-03 1.89823E+01 1 221 224 -5.00148E-01 8.78990E-03 2.64601E-01 3.26247E-05 8.78990E-03 2.00800E+01 1 222 225 -5.00148E-01 8.76103E-03 2.64244E-01 3.38466E-05 8.76103E-03 2.12754E+01 1 223 226 -5.00148E-01 8.72951E-03 2.63849E-01 3.52448E-05 8.72951E-03 2.25804E+01 1 224 227 -5.00148E-01 8.69504E-03 2.63411E-01 3.68315E-05 8.69504E-03 2.40088E+01 1 225 228 -5.00148E-01 8.65724E-03 2.62922E-01 3.86579E-05 8.65724E-03 2.55763E+01 1 226 229 -5.00148E-01 8.61571E-03 2.62376E-01 4.07826E-05 8.61571E-03 2.73016E+01 1 227 230 -5.00148E-01 8.56998E-03 2.61761E-01 4.32587E-05 8.56998E-03 2.92061E+01 1 228 231 -5.00148E-01 8.51954E-03 2.61066E-01 4.61721E-05 8.51954E-03 3.13153E+01 1 229 232 -5.00148E-01 8.46380E-03 2.60276E-01 4.96426E-05 8.46380E-03 3.36588E+01 1 230 233 -5.00148E-01 8.40214E-03 2.59373E-01 5.38286E-05 8.40214E-03 3.62717E+01 1 231 234 -5.00148E-01 8.33390E-03 2.58334E-01 5.88742E-05 8.33390E-03 3.91954E+01 1 232 235 -5.00148E-01 8.25848E-03 2.57129E-01 6.51944E-05 8.25848E-03 4.24788E+01 1 233 236 -5.00148E-01 8.17534E-03 2.55722E-01 7.31287E-05 8.17534E-03 4.61798E+01 1 234 237 -5.00148E-01 8.08431E-03 2.54065E-01 8.32326E-05 8.08431E-03 5.03658E+01 1 235 238 -5.00148E-01 7.98581E-03 2.52096E-01 9.64050E-05 7.98581E-03 5.51148E+01 1 236 239 -5.00148E-01 7.88153E-03 2.49739E-01 1.13928E-04 7.88153E-03 6.05144E+01 1 237 240 -5.00148E-01 7.77547E-03 2.46893E-01 1.37734E-04 7.77547E-03 6.66576E+01 1 238 241 -5.00148E-01 7.67568E-03 2.43436E-01 1.70910E-04 7.67568E-03 7.36327E+01 1 239 242 -5.00148E-01 7.59693E-03 2.39224E-01 2.18023E-04 7.59693E-03 8.15036E+01 1 240 243 -5.00148E-01 7.56414E-03 2.34106E-01 2.85960E-04 7.56414E-03 9.02768E+01 1 241 244 -5.00148E-01 7.61526E-03 2.27954E-01 3.84620E-04 7.61526E-03 9.98623E+01 1 242 245 -5.00148E-01 7.80117E-03 2.20702E-01 5.26790E-04 7.80117E-03 1.10052E+02 1 243 246 -5.00148E-01 9.41629E-03 2.12376E-01 7.28763E-04 9.41629E-03 1.20545E+02 1 244 247 -5.00148E-01 1.16181E-02 2.03084E-01 1.00767E-03 1.16181E-02 1.31026E+02 1 245 248 -5.00148E-01 1.42566E-02 1.92972E-01 1.38137E-03 1.42566E-02 1.41241E+02 1 246 249 -5.00148E-01 1.73415E-02 1.82184E-01 1.86826E-03 1.73415E-02 1.51029E+02 1 247 250 -5.00148E-01 2.08757E-02 1.70844E-01 2.48600E-03 2.08757E-02 1.60313E+02 1 248 251 -5.00148E-01 2.48567E-02 1.59047E-01 3.25499E-03 2.48567E-02 1.69073E+02 1 249 252 -5.00148E-01 2.92785E-02 1.46870E-01 4.19029E-03 2.92785E-02 1.77320E+02 1 250 253 -5.00148E-01 3.41300E-02 1.34376E-01 5.30874E-03 3.41300E-02 1.85087E+02 1 251 254 -5.00148E-01 3.93964E-02 1.21619E-01 6.62786E-03 3.93964E-02 1.92411E+02 1 252 255 -5.00148E-01 4.50561E-02 1.08651E-01 8.16044E-03 4.50561E-02 1.99333E+02 1 253 256 -5.00148E-01 5.10817E-02 9.55242E-02 9.91491E-03 5.10817E-02 2.05895E+02 1 254 257 -5.00148E-01 5.74379E-02 8.22956E-02 1.19008E-02 5.74379E-02 2.12136E+02 1 255 258 -5.00148E-01 6.40816E-02 6.90276E-02 1.41157E-02 6.40816E-02 2.18094E+02 1 256 259 -5.00148E-01 7.09610E-02 5.57905E-02 1.65613E-02 7.09610E-02 2.23806E+02 1 257 260 -5.00148E-01 7.80155E-02 4.26633E-02 1.92275E-02 7.80155E-02 2.29306E+02 1 258 261 -5.00148E-01 8.51763E-02 2.97339E-02 2.20946E-02 8.51763E-02 2.34627E+02 1 259 262 -5.00148E-01 9.23658E-02 1.70981E-02 2.51388E-02 9.23658E-02 2.39802E+02 1 260 263 -5.00148E-01 9.95026E-02 4.85790E-03 2.83280E-02 9.95026E-02 2.44859E+02 1 261 264 -5.00148E-01 1.06500E-01 -6.88130E-03 3.16206E-02 1.06500E-01 2.49829E+02 1 262 265 -5.00148E-01 1.13269E-01 -1.80151E-02 3.49689E-02 1.13269E-01 2.54740E+02 1 263 266 -5.00148E-01 1.19726E-01 -2.84448E-02 3.83195E-02 1.19726E-01 2.59619E+02 1 264 267 -5.00148E-01 1.25793E-01 -3.00000E-02 4.16140E-02 1.25793E-01 2.64492E+02 1 265 268 -5.00148E-01 1.31402E-01 -3.00000E-02 4.47949E-02 1.31402E-01 2.69383E+02 1 266 269 -5.00148E-01 1.36502E-01 -3.00000E-02 4.78122E-02 1.36502E-01 2.74316E+02 1 267 270 -5.00148E-01 1.41057E-01 -3.00000E-02 5.06138E-02 1.41057E-01 2.79312E+02 1 268 271 -5.00148E-01 1.45054E-01 -3.00000E-02 5.31615E-02 1.45054E-01 2.84390E+02 1 269 272 -5.00148E-01 1.48499E-01 -3.00000E-02 5.54323E-02 1.48499E-01 2.89567E+02 1 270 273 -5.00148E-01 1.51413E-01 -3.00000E-02 5.74139E-02 1.51413E-01 2.94859E+02 1 271 274 -5.00148E-01 1.53837E-01 -3.00000E-02 5.91094E-02 1.53837E-01 3.00277E+02 1 272 275 -5.00148E-01 1.55818E-01 -3.00000E-02 6.05328E-02 1.55818E-01 3.05834E+02 1 273 276 -5.00148E-01 1.57413E-01 -3.00000E-02 6.17034E-02 1.57413E-01 3.11539E+02 1 274 277 -5.00148E-01 1.58680E-01 -3.00000E-02 6.26485E-02 1.58680E-01 3.17401E+02 1 275 278 -5.00148E-01 1.59686E-01 -3.00000E-02 6.34022E-02 1.59686E-01 3.23429E+02 1 276 279 -5.00148E-01 1.60488E-01 -3.00000E-02 6.39914E-02 1.60488E-01 3.29628E+02 1 277 280 -5.00148E-01 1.61110E-01 -3.00000E-02 6.44460E-02 1.61110E-01 3.36008E+02 1 278 281 -5.00148E-01 1.61584E-01 -3.00000E-02 6.47923E-02 1.61584E-01 3.42575E+02 1 279 282 -5.00148E-01 1.61941E-01 -3.00000E-02 6.50527E-02 1.61941E-01 3.49337E+02 1 280 283 -5.00148E-01 1.62205E-01 -3.00000E-02 6.52456E-02 1.62205E-01 3.56302E+02 1 281 284 -5.00148E-01 1.62399E-01 -3.00000E-02 6.53871E-02 1.62399E-01 3.63479E+02 1 282 285 -5.00148E-01 1.62539E-01 -3.00000E-02 6.54893E-02 1.62539E-01 3.70875E+02 1 283 286 -5.00148E-01 1.62640E-01 -3.00000E-02 6.55627E-02 1.62640E-01 3.78500E+02 1 284 287 -5.00148E-01 1.62711E-01 -3.00000E-02 6.56146E-02 1.62711E-01 3.86363E+02 1 285 288 -5.00148E-01 1.62761E-01 -3.00000E-02 6.56508E-02 1.62761E-01 3.94474E+02 1 286 289 -5.00148E-01 1.62795E-01 -3.00000E-02 6.56757E-02 1.62795E-01 4.02844E+02 1 287 290 -5.00148E-01 1.62818E-01 -3.00000E-02 6.56927E-02 1.62818E-01 4.11485E+02 1 288 291 -5.00148E-01 1.62834E-01 -3.00000E-02 6.57041E-02 1.62834E-01 4.20407E+02 1 289 292 -5.00148E-01 1.62844E-01 -3.00000E-02 6.57116E-02 1.62844E-01 4.29623E+02 1 290 293 -5.00148E-01 1.62851E-01 -3.00000E-02 6.57166E-02 1.62851E-01 4.39146E+02 1 291 294 -5.00148E-01 1.62855E-01 -3.00000E-02 6.57197E-02 1.62855E-01 4.48990E+02 1 292 295 -5.00148E-01 1.62858E-01 -3.00000E-02 6.57217E-02 1.62858E-01 4.59170E+02 1 293 296 -5.00148E-01 1.62859E-01 -3.00000E-02 6.57230E-02 1.62859E-01 4.69702E+02 1 294 297 -5.00148E-01 1.62860E-01 -3.00000E-02 6.57237E-02 1.62860E-01 4.80601E+02 1 295 298 -5.00148E-01 1.62861E-01 -3.00000E-02 6.57242E-02 1.62861E-01 4.91884E+02 1 296 299 -5.00148E-01 1.62861E-01 -3.00000E-02 6.57245E-02 1.62861E-01 5.03572E+02 1 297 300 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57246E-02 1.62862E-01 5.15682E+02 1 298 301 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57247E-02 1.62862E-01 5.28235E+02 1 299 302 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.41254E+02 1 300 303 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.54762E+02 1 301 304 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.68784E+02 1 302 305 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.83346E+02 1 303 306 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.98477E+02 1 304 307 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.14206E+02 1 305 308 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.30566E+02 1 306 309 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.47591E+02 1 307 310 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.65318E+02 1 308 311 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.83786E+02 1 309 312 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.03036E+02 1 310 313 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.23115E+02 1 311 314 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.44071E+02 1 312 315 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.65955E+02 1 313 316 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.88823E+02 1 314 317 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 8.12737E+02 1 315 318 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 8.37760E+02 1 316 319 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 8.63963E+02 1 317 320 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 8.91421E+02 1 318 321 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 9.20217E+02 1 319 322 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 9.50439E+02 1 320 323 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 9.82184E+02 1 321 324 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.01556E+03 1 322 325 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.05067E+03 1 323 326 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.08765E+03 1 324 327 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.12663E+03 1 325 328 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.16776E+03 1 326 329 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.21120E+03 1 327 330 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.25712E+03 1 328 331 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.30574E+03 1 329 332 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.35725E+03 1 330 333 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.41189E+03 1 331 334 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.46994E+03 1 332 335 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.53167E+03 1 333 336 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.59742E+03 1 334 337 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.66753E+03 1 335 338 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.74242E+03 1 336 339 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.82252E+03 1 337 340 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.90834E+03 1 338 341 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.00045E+03 1 339 342 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.09947E+03 1 340 343 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.20614E+03 1 341 344 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.32127E+03 1 342 345 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.44580E+03 1 343 346 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.58078E+03 1 344 347 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.72745E+03 1 345 348 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 2.88722E+03 1 346 349 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 3.06173E+03 1 347 350 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 3.25288E+03 1 348 351 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 3.46291E+03 1 349 352 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 3.69446E+03 1 350 353 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 3.95062E+03 1 351 354 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 4.23513E+03 1 352 355 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 4.55245E+03 1 353 356 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 4.90798E+03 1 354 357 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.30834E+03 1 355 358 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 5.76169E+03 1 356 359 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.27819E+03 1 357 360 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 6.87072E+03 1 358 361 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 7.55572E+03 1 359 362 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 8.35464E+03 1 360 363 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 9.29589E+03 1 361 UZ 364 -5.00148E-01 1.62862E-01 -3.00000E-02 6.57248E-02 1.62862E-01 1.00006E+04 Total Time 0.108E+01 um3 ... done ***Merge, relabel and save the orbits*** Merge done Relabeling done Saving to b.3, s.3, and d.3 ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo um3 is done Doing vhb Version 07p Copying demo vhb ... done Demo vhb is started ***Compute the zero family*** gfortran -fopenmp -O -c vhb.f90 -o vhb.o gfortran -fopenmp -O vhb.o -o vhb.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting vhb ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 -1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 17 HB 2 -2.00001E-09 0.00000E+00 0.00000E+00 0.00000E+00 1 34 UZ 3 1.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.120E-01 vhb ... done ***Compute the bifurcating vertical branch of periodic solutions*** Starting vhb ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 1 4 -2.00001E-09 0.00000E+00 0.00000E+00 0.00000E+00 6.28319E+00 2 2 5 1.41518E-15 1.00163E-01 1.03593E-01 9.99505E-02 6.30977E+00 2 3 6 2.46543E-15 2.00522E-01 2.14737E-01 1.98760E-01 6.39376E+00 2 4 7 8.33035E-16 3.00175E-01 3.33300E-01 2.93985E-01 6.54775E+00 2 5 8 1.19582E-15 3.98247E-01 4.59310E-01 3.82618E-01 6.79747E+00 2 6 9 1.04324E-15 4.92795E-01 5.90657E-01 4.59870E-01 7.18941E+00 2 7 10 5.01115E-15 5.79809E-01 7.19721E-01 5.19090E-01 7.79436E+00 2 8 11 3.06088E-15 6.53615E-01 8.30575E-01 5.54809E-01 8.67838E+00 2 9 12 -4.11619E-14 7.11991E-01 9.09739E-01 5.70681E-01 9.85715E+00 2 10 13 2.46488E-13 7.58604E-01 9.58037E-01 5.75858E-01 1.13446E+01 2 11 14 1.69259E-13 7.97775E-01 9.83669E-01 5.77048E-01 1.32111E+01 2 12 15 -4.28162E-13 8.31906E-01 9.95047E-01 5.77327E-01 1.55889E+01 2 13 16 1.35923E-12 8.62070E-01 9.98947E-01 5.77349E-01 1.86891E+01 2 14 17 1.51354E-12 8.88786E-01 9.99868E-01 5.77122E-01 2.28507E+01 2 15 18 -5.48072E-12 9.12378E-01 9.99993E-01 5.76975E-01 2.86455E+01 2 16 19 6.58407E-12 9.33098E-01 1.00000E+00 5.77264E-01 3.71147E+01 2 17 20 -5.10217E-12 9.51157E-01 1.00000E+00 5.77303E-01 5.03666E+01 2 18 21 -5.68473E-10 9.66765E-01 1.00000E+00 5.76820E-01 7.34328E+01 2 19 22 4.58419E-11 9.80239E-01 1.00000E+00 5.76938E-01 1.22666E+02 2 20 23 1.78729E-10 9.85471E-01 1.00000E+00 5.77004E-01 1.66391E+02 2 21 24 -3.94778E-10 9.89613E-01 1.00000E+00 5.76936E-01 2.32267E+02 2 22 25 3.84737E-12 9.93193E-01 1.00000E+00 5.77205E-01 3.53777E+02 2 23 26 -2.31217E-09 9.96351E-01 1.00000E+00 5.77210E-01 6.58935E+02 2 24 27 2.77131E-07 9.97551E-01 1.00000E+00 5.74068E-01 9.81122E+02 2 25 28 2.86332E-11 9.97979E-01 1.00000E+00 5.77076E-01 1.18887E+03 2 26 29 9.45934E-11 9.98347E-01 1.00000E+00 5.77332E-01 1.45334E+03 2 27 30 3.95811E-10 9.98681E-01 1.00000E+00 5.77335E-01 1.82043E+03 2 28 31 1.37467E-10 9.98981E-01 1.00000E+00 5.77348E-01 2.35602E+03 2 29 32 4.28680E-10 9.99248E-01 1.00000E+00 5.77115E-01 3.19203E+03 2 30 33 3.91814E-09 9.99483E-01 1.00000E+00 5.76943E-01 4.64136E+03 2 31 34 6.99543E-11 9.99689E-01 1.00000E+00 5.77343E-01 7.70750E+03 2 32 35 1.09913E-10 9.99769E-01 1.00000E+00 5.76882E-01 1.04081E+04 2 33 36 7.16403E-10 9.99834E-01 1.00000E+00 5.76318E-01 1.44512E+04 2 34 37 3.32569E-10 9.99890E-01 1.00000E+00 5.77340E-01 2.18087E+04 2 35 38 5.26272E-08 9.99939E-01 1.00000E+00 5.77281E-01 3.95868E+04 2 36 39 2.12340E-06 9.99958E-01 1.00000E+00 5.73604E-01 5.75294E+04 2 37 40 2.23893E-10 9.99973E-01 1.00000E+00 5.77332E-01 8.76136E+04 2 38 UZ 41 3.15461E-10 9.99976E-01 1.00000E+00 5.77015E-01 1.00397E+05 Total Time 0.953E-01 vhb ... done Saving to b.vhb, s.vhb, and d.vhb ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo vhb is done Doing wav Version 07p Copying demo wav ... done Demo wav is started Demo wav is started wav : first run : stationary solutions of the ODE gfortran -fopenmp -O -c wav.f90 -o wav.o gfortran -fopenmp -O wav.o -o wav.exe /cnd0/home/boldeman/auto/07p/lib/*.o Starting wav ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) 1 1 EP 1 5.00000E+02 1.08768E+02 6.27662E+01 8.88308E+01 1 47 LP 2 6.66144E+02 1.81841E+02 4.69085E+01 1.75687E+02 1 82 LP 3 6.30891E+02 7.49020E+01 3.23345E+01 6.75632E+01 1 94 HB 4 6.62202E+02 3.25591E+01 1.79875E+01 2.71394E+01 1 127 UZ 5 8.00000E+02 8.90053E+01 2.79228E+00 8.89614E+01 Total Time 0.315E-01 wav ... done Saving to b.ode, s.ode, and d.ode ... done wav : second run : stationary solutions of the reduced PDE Starting wav ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) U(3) U(4) 1 1 EP 1 5.00000E+02 1.08768E+02 6.27662E+01 8.88308E+01 0.00000E+00 0.00000E+00 1 47 LP 2 6.66144E+02 1.81841E+02 4.69085E+01 1.75687E+02 0.00000E+00 0.00000E+00 1 82 LP 3 6.30891E+02 7.49020E+01 3.23345E+01 6.75632E+01 0.00000E+00 0.00000E+00 1 87 HB 4 6.35591E+02 5.49735E+01 2.74121E+01 4.76515E+01 0.00000E+00 0.00000E+00 1 128 UZ 5 8.00000E+02 8.90054E+01 2.79228E+00 8.89616E+01 0.00000E+00 0.00000E+00 Total Time 0.418E-01 wav ... done wav : third run : wave train solutions of fixed wave speed Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 4 26 UZ 6 6.38000E+02 5.85936E+01 3.41194E+01 6.66882E+01 5.23176E+00 7.67732E+00 2.00436E+01 4 71 UZ 7 6.38000E+02 5.12350E+01 4.32537E+01 6.10864E+01 1.56626E+01 1.44212E+01 1.13908E+01 4 129 UZ 8 6.10000E+02 9.35063E+01 5.67543E+01 1.20462E+02 1.60747E+01 2.40970E+01 1.49753E+01 4 263 UZ 9 6.04728E+02 1.62520E+02 5.59844E+01 1.54751E+02 1.54410E+01 2.47128E+01 5.00000E+02 Total Time 0.274E+00 wav ... done Saving to b.wav, s.wav, and d.wav ... done wav : fourth run : fixed wave length waves on a ring Runner configured Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(10) 4 50 10 6.34892E+02 6.77805E+01 4.88929E+01 8.92232E+01 1.98335E+01 2.26742E+01 3.31358E-01 4 100 11 6.38185E+02 6.14781E+01 4.47694E+01 7.71809E+01 7.78450E+00 9.26606E+00 -2.81251E-01 4 150 12 6.12152E+02 9.22702E+01 5.65260E+01 1.19617E+02 1.20552E+01 2.13923E+01 -1.66112E-01 4 200 13 6.31049E+02 7.39751E+01 5.17091E+01 9.91385E+01 2.10409E+01 2.47877E+01 3.52721E-01 4 250 14 6.40501E+02 5.60921E+01 3.94812E+01 6.50292E+01 6.87739E+00 9.43887E+00 -1.91003E-01 4 300 15 6.11584E+02 9.26076E+01 5.65906E+01 1.19830E+02 1.24223E+01 2.16750E+01 -1.45810E-01 4 350 16 6.00114E+02 1.23905E+02 5.64705E+01 1.36094E+02 1.04821E+01 1.37840E+01 -1.91736E-10 4 400 17 6.62431E+02 1.71195E+02 4.75911E+01 1.69640E+02 9.67626E-01 2.02388E+00 -3.44387E-13 4 450 18 5.91166E+02 1.17394E+02 5.72885E+01 1.30143E+02 1.25078E+01 1.54996E+01 -3.51007E-10 4 500 EP 19 6.10594E+02 8.30905E+01 5.37594E+01 9.86320E+01 1.34789E+01 1.51711E+01 -4.95168E-09 Total Time 0.540E+00 wav ... done Saving to b.rng, s.rng, and d.rng ... done wav : fifth run : time evolution computation Starting wav ... BR PT TY LAB TIME L2-NORM MAX U(1) MAX U(2) 4 5 10 2.21561E+00 9.19298E+01 5.67486E+01 1.20444E+02 4 10 11 8.33206E+00 9.19366E+01 5.67517E+01 1.20429E+02 4 15 12 1.44946E+01 9.19363E+01 5.67535E+01 1.20461E+02 4 20 13 2.07005E+01 9.19327E+01 5.67483E+01 1.20441E+02 4 25 14 2.69403E+01 9.19303E+01 5.67529E+01 1.20426E+02 4 30 15 3.32072E+01 9.19284E+01 5.67517E+01 1.20432E+02 4 35 16 3.94957E+01 9.19270E+01 5.67502E+01 1.20441E+02 4 40 17 4.69761E+01 9.19264E+01 5.67546E+01 1.20451E+02 4 45 18 5.44861E+01 9.19252E+01 5.67572E+01 1.20440E+02 4 50 19 6.20204E+01 9.19238E+01 5.67572E+01 1.20438E+02 4 55 20 6.95736E+01 9.19227E+01 5.67562E+01 1.20446E+02 4 60 21 7.71414E+01 9.19219E+01 5.67500E+01 1.20421E+02 4 65 22 8.47205E+01 9.19213E+01 5.67561E+01 1.20446E+02 4 70 23 9.23085E+01 9.19208E+01 5.67549E+01 1.20447E+02 4 75 24 9.99035E+01 9.19204E+01 5.67522E+01 1.20443E+02 4 80 25 1.07504E+02 9.19202E+01 5.67479E+01 1.20432E+02 4 85 26 1.15108E+02 9.19199E+01 5.67569E+01 1.20440E+02 4 90 27 1.22716E+02 9.19197E+01 5.67494E+01 1.20417E+02 4 95 28 1.30327E+02 9.19196E+01 5.67571E+01 1.20423E+02 4 100 29 1.37939E+02 9.19195E+01 5.67546E+01 1.20389E+02 4 105 30 1.45553E+02 9.19194E+01 5.67573E+01 1.20431E+02 4 110 31 1.53169E+02 9.19193E+01 5.67520E+01 1.20387E+02 4 115 32 1.60785E+02 9.19193E+01 5.67551E+01 1.20445E+02 4 120 33 1.68402E+02 9.19193E+01 5.67527E+01 1.20397E+02 4 125 34 1.76020E+02 9.19192E+01 5.67474E+01 1.20430E+02 4 130 35 1.83638E+02 9.19192E+01 5.67562E+01 1.20404E+02 4 135 36 1.91257E+02 9.19192E+01 5.67492E+01 1.20435E+02 4 140 37 1.98875E+02 9.19192E+01 5.67560E+01 1.20444E+02 4 145 38 2.06495E+02 9.19191E+01 5.67491E+01 1.20424E+02 4 150 39 2.14114E+02 9.19191E+01 5.67488E+01 1.20426E+02 4 155 40 2.21733E+02 9.19191E+01 5.67535E+01 1.20444E+02 4 160 41 2.29353E+02 9.19191E+01 5.67513E+01 1.20440E+02 4 165 42 2.36972E+02 9.19191E+01 5.67573E+01 1.20432E+02 4 170 43 2.44592E+02 9.19191E+01 5.67569E+01 1.20416E+02 4 175 44 2.52212E+02 9.19191E+01 5.67573E+01 1.20427E+02 4 180 45 2.59831E+02 9.19191E+01 5.67564E+01 1.20408E+02 4 185 46 2.67451E+02 9.19191E+01 5.67572E+01 1.20424E+02 4 190 47 2.75071E+02 9.19191E+01 5.67572E+01 1.20423E+02 4 195 48 2.82691E+02 9.19191E+01 5.67571E+01 1.20437E+02 4 200 49 2.90311E+02 9.19191E+01 5.67506E+01 1.20416E+02 4 205 50 2.97931E+02 9.19191E+01 5.67559E+01 1.20444E+02 4 210 51 3.05550E+02 9.19191E+01 5.67513E+01 1.20440E+02 4 215 52 3.13170E+02 9.19191E+01 5.67553E+01 1.20392E+02 4 220 53 3.20790E+02 9.19191E+01 5.67559E+01 1.20444E+02 4 225 54 3.28410E+02 9.19191E+01 5.67476E+01 1.20426E+02 4 230 EP 55 3.36030E+02 9.19191E+01 5.67544E+01 1.20393E+02 Total Time 0.276E+00 wav ... done Saving to b.tim, s.tim, and d.tim ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done Demo wav is done auto/07p/test/all.auto0000750000175000017500000000010013570013207012654 0ustar sksk#!/usr/bin/env auto import sys, test sys.exit(test.test('all')) auto/07p/test/hom.auto0000750000175000017500000000010113570013207012670 0ustar sksk#!/usr/bin/env auto import sys, test sys.exit(test.test('hom')) auto/07p/test/selec.auto0000750000175000017500000000010213570013207013201 0ustar sksk#!/usr/bin/env auto import sys, test sys.exit(test.test('selec')) auto/07p/test/README0000640000175000017500000000315513570013207012105 0ustar skskType "auto selec.auto" to run a selection of demos. The results are then compared to the results of runs on other machines. Such results may already be in files in the current directory. Apart from the listed CPU time, there should be no significant differences between *_log07p and hyper.all. In case of suspected portability problems send the file *_log07p to doedel@cs.concordia.ca and bartoldeman@gmail.com. If the test fails completely (no AUTO output at all) then you may have a Unix-related problem. First try to run a demo, e.g. ``ab'' in a clean directory (see the manual for details). If this demo does not give results either then you may want to consult a system's analyst. =================================================================== To run all runs of all demos, type "auto all.auto" In this very comprehensive test it is likely that some demos will give somewhat different results on different machines. This is to be expected for very sensitive calculations performed on machines of different architecture. =================================================================== To run a selection of HomCont demos only, type "auto hom.auto" =================================================================== To run all demos that were also present in AUTO97, type "auto all97.auto" =================================================================== To run some specified demos, type for instance "auto demo.auto abc dd2" =================================================================== To run the Python regression tests, run "auto python.auto" =================================================================== auto/07p/install-sh0000750000175000017500000002202113570013207012242 0ustar sksk#!/bin/sh # install - install a program, script, or datafile scriptversion=2005-05-14.22 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" chmodcmd="$chmodprog 0755" chowncmd= chgrpcmd= stripcmd= rmcmd="$rmprog -f" mvcmd="$mvprog" src= dst= dir_arg= dstarg= no_target_directory= usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: -c (ignored) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. --help display this help and exit. --version display version info and exit. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test -n "$1"; do case $1 in -c) shift continue;; -d) dir_arg=true shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; --help) echo "$usage"; exit $?;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -s) stripcmd=$stripprog shift continue;; -t) dstarg=$2 shift shift continue;; -T) no_target_directory=true shift continue;; --version) echo "$0 $scriptversion"; exit $?;; *) # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. test -n "$dir_arg$dstarg" && break # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dstarg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dstarg" shift # fnord fi shift # arg dstarg=$arg done break;; esac done if test -z "$1"; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi for src do # Protect names starting with `-'. case $src in -*) src=./$src ;; esac if test -n "$dir_arg"; then dst=$src src= if test -d "$dst"; then mkdircmd=: chmodcmd= else mkdircmd=$mkdirprog fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dstarg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dstarg # Protect names starting with `-'. case $dst in -*) dst=./$dst ;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dstarg: Is a directory" >&2 exit 1 fi dst=$dst/`basename "$src"` fi fi # This sed command emulates the dirname command. dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'` # Make sure that the destination directory exists. # Skip lots of stat calls in the usual case. if test ! -d "$dstdir"; then defaultIFS=' ' IFS="${IFS-$defaultIFS}" oIFS=$IFS # Some sh's can't handle IFS=/ for some reason. IFS='%' set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'` shift IFS=$oIFS pathcomp= while test $# -ne 0 ; do pathcomp=$pathcomp$1 shift if test ! -d "$pathcomp"; then $mkdirprog "$pathcomp" # mkdir can fail with a `File exist' error in case several # install-sh are creating the directory concurrently. This # is OK. test -d "$pathcomp" || exit fi pathcomp=$pathcomp/ done fi if test -n "$dir_arg"; then $doit $mkdircmd "$dst" \ && { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; } else dstfile=`basename "$dst"` # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 trap '(exit $?); exit' 1 2 13 15 # Copy the file name to the temp name. $doit $cpprog "$src" "$dsttmp" && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \ && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \ && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \ && { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } && # Now rename the file to the real destination. { $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \ || { # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { if test -f "$dstdir/$dstfile"; then $doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \ || $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \ || { echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2 (exit 1); exit 1 } else : fi } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dstdir/$dstfile" } } fi || { (exit 1); exit 1; } done # The final little trick to "correctly" pass the exit status to the exit trap. { (exit 0); exit 0 } # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: auto/07p/demos/0000750000175000017500000000000013570013207011350 5ustar skskauto/07p/demos/sib/0000750000175000017500000000000013570013207012125 5ustar skskauto/07p/demos/sib/c.sib.50000640000175000017500000000060213570013207013210 0ustar skskNDIM= 3, IPS = 9, IRS = 14, ILP = 0 ICP = [5, 8] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 60, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.01, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {3: -2.0} ITWIST = 1, ISTART = 1 auto/07p/demos/sib/c.sib0000640000175000017500000000055113570013207013050 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 10, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.375} auto/07p/demos/sib/c.sib.140000640000175000017500000000060113570013207013267 0ustar skskNDIM= 3, IPS = 9, IRS = 34, ILP = 0 ICP = [4, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {4: 0.145} ITWIST = 0, ISTART = 1 auto/07p/demos/sib/c.sib.40000640000175000017500000000056613570013207013220 0ustar skskNDIM= 3, IPS = 9, IRS = 13, ILP = 0 ICP = [3, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 60, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.01, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {3: -2.0} ISTART = 4 auto/07p/demos/sib/c.sib.60000640000175000017500000000064313570013207013216 0ustar skskNDIM= 3, IPS = 9, IRS = 15, ILP = 0 ICP = [4, 5, 33] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 60, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {33: 0.0}, UZSTOP = {4: 0.0} ITWIST = 1, ISTART = 1 IPSI = [13] auto/07p/demos/sib/c.sib.120000640000175000017500000000062213570013207013270 0ustar skskNDIM= 3, IPS = 9, IRS = 31, ILP = 0 ICP = [4, 5, 23, 24] NTST= 40, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 32, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -1.0, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {24: 0.0, 4: 0.18} ITWIST = 1, ISTART = -3 auto/07p/demos/sib/clean.auto0000640000175000017500000000023413570013207014101 0ustar sksk#============== # AUTO Demo sib #============== print "\n***Clean the directory***" dl("1") dl("2") dl("3") dl("4") dl("5") dl("6") dl("7") dl("10") cl() auto/07p/demos/sib/sib.auto0000640000175000017500000000262513570013207013602 0ustar sksk#first run r1=run(e='sib',c='sib') save(r1,'1') #second run r2=run(r1,ICP=[4]) save(r2,'2') #third run r3=run(r2('HB1'),IPS=2,ICP=[5,11],NMX=200,DS=0.01,DSMAX=0.01,UZSTOP={11:35}) save(r3,'3') plot(r3) #fourth run r4=run(r3,IPS=9,ICP=[3,5],NPR=60,UZSTOP={3:-2.0},ISTART=4) save(r4,'4') #fifth run r5=run(r4,ICP=[5,8],NMX=2,ITWIST=1,ISTART=1) save(r5,'5') #sixth run r6=run(r5,ICP=[4,5,33],NMX=30,DS=-0.01,DSMAX=1.0,UZR={33:0.0}, UZSTOP={4:0.0},IPSI=[13]) #seventh run r7=run(r6('UZ1'),ICP=[21,22,5],NMX=300,NPR=10,UZR={},UZSTOP={22:0.2}, ISTART=-2,IPSI=[]) save(r7,'7') plot(r7) #eighth run r8=run(r7,ICP=[4,5,22],NPR=310,DS=0.01,DSMAX=0.01,UZSTOP={22:0.0}, UZR={4:0.074}) r6=r6+r8 #ninth run r9=run(r8,ICP=[4,5],NMX=30,DS='-',DSMAX=0.1,UZR={4:0.15},ISTART=1,ITWIST=0) r6=r6+r9 #tenth run r10=run(r6('UZ1'),ICP=[21,22,24,5],NMX=300,NPR=10,UZSTOP={22:0.2}, ISTART=-3,IPSI=[]) save(r10,'10') #eleventh run r11=run(r10,ICP=[4,5,22,24],NPR=310,DS=0.01,DSMAX=0.01, UZR={4:0.082},UZSTOP={22:0.0}) r6=r6+r11 #twelfth run r12=run(r11,ICP=[4,5,23,24],NMX=32,NTST=40,DS=-1.0,DSMAX=1.0, UZR={24:0.0,4:0.18},UZSTOP={}) r6=r6+r12 #thirteenth run r13=run(r6('UZ7'),ICP=[4,5],NMX=30,DS=-0.01,DSMAX=0.1,UZR={4:0.13},ISTART=1, ITWIST=0) r6=r6+r13 #fourteenth run r14=run(r6('UZ9'),ICP=[4,5],NMX=30,DS=-0.01,DSMAX=0.1,UZR={4:0.145},ISTART=1, ITWIST=0) r6=r6+r14 save(r6,'6') plot(r6) wait() auto/07p/demos/sib/c.sib.10000640000175000017500000000055113570013207013207 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 10, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.375} auto/07p/demos/sib/c.sib.30000640000175000017500000000055513570013207013215 0ustar skskNDIM= 3, IPS = 2, IRS = 3, ILP = 0 ICP = [5, 11] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.01, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {11: 35.0} auto/07p/demos/sib/c.sib.100000640000175000017500000000062513570013207013271 0ustar skskNDIM= 3, IPS = 9, IRS = 16, ILP = 0 ICP = [21, 22, 24, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 300, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {22: 0.2} ITWIST = 1, ISTART = -3 IPSI = []auto/07p/demos/sib/c.sib.70000640000175000017500000000062213570013207013214 0ustar skskNDIM= 3, IPS = 9, IRS = 16, ILP = 0 ICP = [21, 22, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 300, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {22: 0.2} ITWIST = 1, ISTART = -2 IPSI = [] auto/07p/demos/sib/sib.c0000640000175000017500000001062013570013207013046 0ustar sksk#include "auto_f2c.h" /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* hom : Homoclinic bifurcations in general test example equation */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int func (integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *f, doublereal *dfdu, doublereal *dfdp) { /* System generated locals */ integer dfdu_dim1 = ndim; integer dfdp_dim1 = ndim; double a = par[0]; double b = par[1]; double c = par[2]; double alpha = par[3]; double mu = par[4]; double x = u[0]; double y = u[1]; double z = u[2]; f[0] = a * x + b * y - a * x * x - alpha * z * x * (2. - x * 3.); f[1] = b * x + a * y - 1.5 * x * (b * x + a * y) + alpha * z * 2. * y; f[2] = c * z + mu * x + 3.0 * x * z + alpha * (x * x * (1. - x) - y * y); if (ijac == 0) { return 0; } ARRAY2D(dfdu,0,0) = a - a * 2. * x - alpha * z * (2. - x * 6.); ARRAY2D(dfdu,0,1) = b; ARRAY2D(dfdu,0,2) = -alpha * x * (2. - x * 3.); ARRAY2D(dfdu,1,0) = b - b * 3. * x - a * 1.5 * y; ARRAY2D(dfdu,1,1) = a - a * 1.5 * x + alpha * z * 2.; ARRAY2D(dfdu,1,2) = alpha * 2. * y; ARRAY2D(dfdu,2,0) = mu + 3.0 * z + alpha * x * (2. - x * 3.); ARRAY2D(dfdu,2,1) = alpha * -2. * y; ARRAY2D(dfdu,2,2) = c + 3.0 * x; if (ijac == 1) { return 0; } ARRAY2D(dfdp,0,0) = x - x * x; ARRAY2D(dfdp,0,1) = y; ARRAY2D(dfdp,0,2) = 0; ARRAY2D(dfdp,0,3) = -z * x * (2. - x * 3.); ARRAY2D(dfdp,0,4) = 0; ARRAY2D(dfdp,1,0) = y - 1.5 * x * y; ARRAY2D(dfdp,1,1) = x - 1.5 * x * x; ARRAY2D(dfdp,1,2) = 0; ARRAY2D(dfdp,1,3) = z * 2. * y; ARRAY2D(dfdp,1,4) = 0; ARRAY2D(dfdp,2,0) = 0; ARRAY2D(dfdp,2,1) = 0; ARRAY2D(dfdp,2,2) = z; ARRAY2D(dfdp,2,3) = x * x * (1. - x) - y * y; ARRAY2D(dfdp,2,4) = x; return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int stpnt (integer ndim, doublereal t, doublereal *u, doublereal *par) { doublereal s; /* Sets parameter values for homoclinic bifurcation analysis (IPS=9). */ /* COMMON block needed if IPS=9 (homoclinic bifurcations) : */ /* ---------------------------------------------------------------------- */ /* Problem parameters (only PAR(1-9) are available to the user) : */ /* a */ par[0] = 0.; /* b */ par[1] = 0.625; /* c */ par[2] = -2.5; /* alpha */ par[3] = 0; /* mu */ par[4] = 0.; /* initial equilibrium */ u[0] = 2./3.; u[1] = 0; u[2] = 0; return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int pvls (integer ndim, const doublereal *u, doublereal *par) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int bcnd (integer ndim, const doublereal *par, const integer *icp, integer nbc, const doublereal *u0, const doublereal *u1, integer ijac, doublereal *fb, doublereal *dbc) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int icnd (integer ndim, const doublereal *par, const integer *icp, integer nint, const doublereal *u, const doublereal *uold, const doublereal *udot, const doublereal *upold, integer ijac, doublereal *fi, doublereal *dint) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int fopt (integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *fs, doublereal *dfdu, doublereal *dfdp) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ auto/07p/demos/sib/c.sib.80000640000175000017500000000063713570013207013223 0ustar skskNDIM= 3, IPS = 9, IRS = 21, ILP = 0 ICP = [4, 5, 22] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 300, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.01, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {22: 0.0, 4: 0.074}, STOP = ['UZ2'] ITWIST = 1, ISTART = -2 auto/07p/demos/sib/c.sib.130000640000175000017500000000060013570013207013265 0ustar skskNDIM= 3, IPS = 9, IRS = 32, ILP = 0 ICP = [4, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {4: 0.13} ITWIST = 0, ISTART = 1 auto/07p/demos/sib/c.sib.20000640000175000017500000000055113570013207013210 0ustar skskNDIM= 3, IPS = 1, IRS = 2, ILP = 0 ICP = [4] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 10, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.375} auto/07p/demos/sib/c.sib.110000640000175000017500000000064313570013207013272 0ustar skskNDIM= 3, IPS = 9, IRS = 29, ILP = 0 ICP = [4, 5, 22, 24] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 300, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.01, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {22: 0.0, 4: 0.082}, STOP = ['UZ2'] ITWIST = 1, ISTART = -3 auto/07p/demos/sib/sib_old.auto0000640000175000017500000000067613570013207014444 0ustar skskld('sib') rn() sv('1') rn(c='sib.2',s='1') sv('2') rn(c='sib.3',s='2') sv('3') #plot('3') wait() rn(c='sib.4',s='3') sv('4') rn(c='sib.5',s='4') sv('5') rn(c='sib.6',s='5') sv('6') rn(c='sib.7',s='6') sv('7') plot('7') wait() rn(c='sib.8',s='7') ap('6') rn(c='sib.9',s='6') ap('6') rn(c='sib.10',s='6') sv('10') rn(c='sib.11',s='10') ap('6') rn(c='sib.12',s='6') ap('6') rn(c='sib.13',s='6') ap('6') rn(c='sib.14',s='6') ap('6') plot('6') wait() auto/07p/demos/sib/c.sib.90000640000175000017500000000060013570013207013212 0ustar skskNDIM= 3, IPS = 9, IRS = 23, ILP = 0 ICP = [4, 5] NTST= 35, NCOL= 4, IAD = 1, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 310, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {4: 0.15} ITWIST = 0, ISTART = 1 auto/07p/demos/log/0000750000175000017500000000000013570013207012131 5ustar skskauto/07p/demos/log/clean.auto0000640000175000017500000000015413570013207014106 0ustar sksk #============== # AUTO Demo hen #============== print "\n***Clean the directory***" delete('log') clean() auto/07p/demos/log/log.auto0000640000175000017500000000077613570013207013617 0ustar sksk #============== # AUTO Demo log #============== print "\nDemo log is started" print "\nlog : first run : fixed point solution branch" r = run("log") save("log") print "\nlog : perform 5 period-doublings" olddiff = 1 for i in range(5): mu = r('PD1')['mu'] r = run(r('PD1'),ISW=-1,SP=['BP0']) append("log") diff = r('PD1')['mu'] - mu feig = olddiff/diff olddiff = diff relabel("log") print('Approximation of Feigenbaum constant: %s'%feig) print "\n***Clean the directory***" clean() auto/07p/demos/log/log.f900000640000175000017500000000250113570013207013231 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! log : The logistic map !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION x, mu x=U(1) mu=PAR(1) F(1)=mu*x*(1-x) IF(IJAC.EQ.0)RETURN DFDU(1,1)=mu*(1-2*x) IF(IJAC.EQ.1)RETURN DFDP(1,1)=x*(1-x) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 ! mu U(1)=0 ! x END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/log/autorc0000640000175000017500000001406213570013207013355 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. #solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"x": "$x$", "mu": "$\mu$"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. bifurcation_x = ["mu"] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ["x"] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/log/c.log0000640000175000017500000000061513570013207013061 0ustar skskunames = {1:'x'} parnames = {1:'mu'} NDIM= 1, IPS = -1, IRS = 0, ILP = 1 ICP = ['mu'] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 300, NPR= 0, MXBF= -1, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS =1e-6 DS = 0.0001, DSMIN= 0.0001, DSMAX= 0.02, IADS= 1 NPAR = 3, THL = {}, THU = {} UZSTOP = {'mu': 3.6} auto/07p/demos/abc/0000750000175000017500000000000013570013207012075 5ustar skskauto/07p/demos/abc/abc.auto0000640000175000017500000000054013570013207013514 0ustar sksk #============== # AUTO Demo abc #============== print "\n***Compute a stationary solution family***" abc=run(e='abc',c='abc.1') print "\n***Compute periodic solution families***" for solution in abc('HB'): abc=abc+run(solution,c='abc.2') print "\n***Relabel the output***" abc=rl(abc) save(abc,'abc') print "\n***Clean the directory***" cl() auto/07p/demos/abc/clean.auto0000640000175000017500000000016013570013207014047 0ustar sksk #=============== # AUTO Demo abc #=============== pgm="abc" print "\n***Clean the directory***" dl(pgm) cl() auto/07p/demos/abc/c.abc.40000640000175000017500000000055213570013207013133 0ustar skskNDIM= 3, IPS = 2, IRS = 4, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25} auto/07p/demos/abc/abc.f900000640000175000017500000000333113570013207013143 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! abc : The A --> B --> C reaction !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION X1,X2,X3,D,ALPHA,BETA,B,S,E,X1C X1=U(1) X2=U(2) X3=U(3) D=PAR(1) ALPHA=PAR(2) BETA=PAR(3) B=PAR(4) S=PAR(5) E=DEXP(X3) X1C=1-X1 F(1)=-X1 + D*X1C*E F(2)=-X2 + D*E*(X1C - S*X2) F(3)=-X3 - BETA*X3 + D*B*E*(X1C + ALPHA*S*X2) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0.0 PAR(2)=1.0 PAR(3)=1.55 PAR(4)=8. PAR(5)=0.04 U(1)=0. U(2)=0. U(3)=0. END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/abc/c.abc0000640000175000017500000000054513570013207012773 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 130, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.4} auto/07p/demos/abc/c.abc.30000640000175000017500000000055213570013207013132 0ustar skskNDIM= 3, IPS = 2, IRS = 3, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25} auto/07p/demos/abc/plaut04.rc0000640000175000017500000000700013570013207013712 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/abc/c.abc.10000640000175000017500000000054513570013207013132 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 130, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.4} auto/07p/demos/abc/c.abc.50000640000175000017500000000055213570013207013134 0ustar skskNDIM= 3, IPS = 2, IRS = 5, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25} auto/07p/demos/abc/c.abc.20000640000175000017500000000055213570013207013131 0ustar skskNDIM= 3, IPS = 2, IRS = 2, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.02, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25} auto/07p/demos/um2/0000750000175000017500000000000013570013207012053 5ustar skskauto/07p/demos/um2/c.um2.20000640000175000017500000000043413570013207013064 0ustar skskunames={1: 'x', 2: 'y'}, parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 2, IPS = 4, IRS = 2 ICP = ['eps', 'Period'] NTST= 60, IPLT= 3, NBC= 3 ITNW= 7 DS = -0.05, DSMIN= 1e-05, DSMAX= 1.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'eps': 0.1} auto/07p/demos/um2/um2.f900000640000175000017500000000511613570013207013102 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! AUTO demo um2 !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,ICP(*),IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*),DFDP(NDIM,*) DOUBLE PRECISION eps, Period, x, y eps = PAR(2) Period = PAR(11) x = U(1) y = U(2) F(1) = Period * ( eps * x - y**3 ) F(2) = Period * ( y + x**3 ) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, PARAMETER :: & theta = 0.25, & eps = 0.5, & r0 = 0.1, & r1 = r0, & Period= 1.d-4 DOUBLE PRECISION PI PI = 4*ATAN(1.D0) PAR(1:4) = (/theta,eps,r0,r1/) PAR(11)= Period U(1) = r0 * COS( 2.0D0 * PI * theta) U(2) = r0 * SIN( 2.0D0 * PI * theta) END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*),U0(NDIM),U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION x0, y0, x1, y1, PI, theta, r0, r1 x0 = U0(1) y0 = U0(2) x1 = U1(1) y1 = U1(2) PI = 4*ATAN(1.D0) theta = PAR(1) r0 = PAR(3) r1 = PAR(4) FB(1) = x0 - r0 * COS( 2.0 * PI * theta) FB(2) = y0 - r0 * SIN( 2.0 * PI * theta) FB(3) = SQRT(x1**2 + y1**2) - r1 END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- auto/07p/demos/um2/clean.auto0000640000175000017500000000016313570013207014030 0ustar sksk #============== # AUTO Demo um2 #============== print "\n***Clean the directory***" dl('1') dl('2') dl('3') cl() auto/07p/demos/um2/c.um2.10000640000175000017500000000041613570013207013063 0ustar skskunames={1: 'x', 2: 'y'} parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 2, IPS = 4 ICP = ['Period', 'r1'] NTST= 60, IPLT= 3, NBC= 3 ITNW= 7 DS = 0.05, DSMIN= 1e-05, DSMAX= 10.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'r1': 0.6} auto/07p/demos/um2/plaut04.rc0000640000175000017500000000700013570013207013670 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/um2/um2.auto0000640000175000017500000000151713570013207013455 0ustar sksk #============== # Demo um2 #============== print "\n***Grow an initial orbit by continuation***" init = run(e='um2', unames = {1:'x',2:'y'}, parnames = {1:'theta',2:'eps',3:'r0',4:'r1',11:'Period'}, NDIM=2,IPS=4,ICP=['Period','r1'], NTST=60,IPLT=3,NBC=3,ITNW=7, DS=0.05,DSMIN=1e-5,DSMAX=10.0, THL={'Period':0}, UZSTOP={'r1':0.6}, NPAR=11) save(init, '1') print "\n***Decrease the value of the problem parameter eps***" decr = run(init,ICP=['eps','Period'],DS='-',DSMAX=1.0,UZSTOP={'eps':0.1}) save(decr, '2') print "\n***Allow the initial condition to move around a small circle***" circle = run(decr,ICP=['theta','Period'],NPR=1,DS='-',DSMIN=1e-5, UZSTOP={'theta': [1.25, -0.75]}) save(circle, '3') print "\n***Clean the directory***" cl() auto/07p/demos/um2/c.um2.30000640000175000017500000000046513570013207013071 0ustar skskunames={1: 'x', 2: 'y'}, parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 2, IPS = 4, IRS = 3 ICP = ['theta', 'Period'] NTST= 60, IPLT= 3, NBC= 3 NPR= 1, ITNW= 7 DS = 0.05, DSMIN= 1e-05, DSMAX= 1.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'theta': [1.25, -0.75]} auto/07p/demos/phs/0000750000175000017500000000000013570013207012142 5ustar skskauto/07p/demos/phs/c.phs.10000640000175000017500000000055513570013207013245 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 50, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.02, DSMIN= 0.01, DSMAX= 0.05, IADS= 1 NPAR = 1, THL = {11: 0.0}, THU = {} UZSTOP = {1: [-1.0, 1.0]} auto/07p/demos/phs/clean.auto0000640000175000017500000000015613570013207014121 0ustar sksk #============== # AUTO Demo pp3 #============== print "\n***Clean the directory***" dl('pp2') dl('ps') cl() auto/07p/demos/phs/c.phs.20000640000175000017500000000055413570013207013245 0ustar skskNDIM= 2, IPS = 2, IRS = 2, ILP = 0 ICP = [1, 11] NTST= 110, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 1, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 1, THL = {11: 0.0}, THU = {} UZSTOP = {11: 1e+08} auto/07p/demos/phs/phs.auto0000640000175000017500000000041613570013207013630 0ustar sksk #============== # AUTO Demo phs #============== print "\n***Compute stationary solution families***" r1=run(e='phs',c='phs.1') print "\n***Compute a periodic solution family***" r2=run(r1('HB1'),c='phs.2') save(r1+r2,'phs') print "\n***Clean the directory***" cl() auto/07p/demos/phs/phs.f900000640000175000017500000000236013570013207013256 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! phs : A Hopf bifurcation leading to a homoclinic orbit !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)=-PAR(1)*U(1) - U(2) F(2)= U(1) * (1 - U(1)) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=-1.0 U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/nag/0000750000175000017500000000000013570013207012115 5ustar skskauto/07p/demos/nag/clean.auto0000640000175000017500000000014513570013207014072 0ustar sksk #============== # AUTO Demo nag #============== print "\n***Clean the directory***" dl('nag') cl() auto/07p/demos/nag/c.nag0000640000175000017500000000063313570013207013031 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 100, NPR= 100, MXBF= 8, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 12, THL = {}, THU = {} UZR = {1: [0.25, 0.75]} UZSTOP = {1: [0.0, 1.0]} auto/07p/demos/nag/nag.f900000640000175000017500000001212213570013207013201 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! nag : Heteroclinic orbits : A saddle-saddle connection !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Parameter assignment: ! ! PAR(1) , PAR(2) : a , c (parameters) ! PAR(3) , PAR(4) : eps-0 , eps-1 (radii) ! PAR(5) , PAR(6) : mu-0 , mu-1 (eigenvalues) ! PAR(7) , PAR(8) : v-0(1) , v-0(2) (eigenvector) ! PAR(9) , PAR(10): v-1(1) , v-1(2) (eigenvector) ! PAR(11) : period !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION PERIOD, DUMMY(1) CALL FFFF(2,U,ICP,PAR,0,F,DUMMY) PERIOD=PAR(11) F(1)=PERIOD*F(1) F(2)=PERIOD*F(2) END SUBROUTINE FUNC SUBROUTINE FFFF(NDM,U,ICP,PAR,IJAC,F,DFDU) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM) DOUBLE PRECISION A,C A=PAR(1) C=PAR(2) F(1)= U(2) F(2)= C*U(2) - U(1) * (1-U(1)) * (U(1)-A) IF(IJAC.EQ.0)RETURN DFDU(1,1)= 0 DFDU(1,2)= 1 DFDU(2,1)= - (1-U(1))*(U(1)-A) + U(1)*(U(1)-A) - U(1)*(1-U(1)) DFDU(2,2)= C END SUBROUTINE FFFF SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION PERIOD, SIGN, R, V1, V2, X, E, U0, V0, EPS ! The following initialization is done only in the first call IF(T==0)THEN ! Select period and connection (read from the constants-file) PERIOD=100. SIGN=1.0 R = 0.5*SQRT(2.D0) V1= 1./SQRT(1+R**2) V2= R /SQRT(1+R**2) X = -0.5*PERIOD E = EXP(X/SQRT(2.D0)) U0 = E/(1+E) V0 = ( E/(1+E)**2 ) / SQRT(2.D0) EPS= SQRT( U0**2 + V0**2 ) PAR(1)= 0.5 PAR(2)= 0 PAR(3)= EPS PAR(4)= EPS PAR(5)= R PAR(6)=-R PAR(7)= SIGN*V1 PAR(8)= SIGN*V2 PAR(9)= -SIGN*V1 PAR(10)= SIGN*V2 PAR(11)= PERIOD PAR(12)= SIGN ENDIF ! Specify exact solution as starting point : PERIOD=PAR(11) SIGN =PAR(12) X=PERIOD*SIGN*(T-0.5) E=DEXP(X/DSQRT(2.D0)) U(1)=E/(1+E) U(2)=SIGN*E/(1+E)**2/DSQRT(2.D0) END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local INTEGER, PARAMETER :: NDM=2 DOUBLE PRECISION V0(NDM),V1(NDM),G0(NDM),G1(NDM) DOUBLE PRECISION DGDU0(NDM,NDM),DGDU1(NDM,NDM) V0(1)=U0(1) - PAR(3)*PAR(7) V0(2)=U0(2) - PAR(3)*PAR(8) V1(1)=U1(1) - PAR(4)*PAR(9) V1(2)=U1(2) - PAR(4)*PAR(10) CALL FFFF(NDM,V0,ICP,PAR,1,G0,DGDU0) CALL FFFF(NDM,V1,ICP,PAR,1,G1,DGDU1) FB(1)= DGDU0(1,1)*PAR(7) + DGDU0(1,2)*PAR(8) - PAR(5)*PAR(7) FB(2)= DGDU0(2,1)*PAR(7) + DGDU0(2,2)*PAR(8) - PAR(5)*PAR(8) FB(3)= DGDU1(1,1)*PAR(9) + DGDU1(1,2)*PAR(10)- PAR(6)*PAR(9) FB(4)= DGDU1(2,1)*PAR(9) + DGDU1(2,2)*PAR(10)- PAR(6)*PAR(10) FB(5)= PAR(7)**2 + PAR(8)**2 -1 FB(6)= PAR(9)**2 + PAR(10)**2 -1 FB(7)= G0(1) FB(8)= G0(2) FB(9)= G1(1) FB(10)=G1(2) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local INTEGER, PARAMETER :: NDM=2 DOUBLE PRECISION F(NDM),F0(NDM),DFDU(NDM,NDM),DUMMY(1) CALL FFFF(NDM,U ,ICP,PAR,1,F ,DFDU) CALL FFFF(NDM,UOLD,ICP,PAR,0,F0,DUMMY) FI(1)= ( F(1) - F0(1) ) * ( DFDU(1,1)*F(1) + DFDU(1,2)*F(2) ) & + ( F(2) - F0(2) ) * ( DFDU(2,1)*F(1) + DFDU(2,2)*F(2) ) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/nag/c.nag.40000640000175000017500000000063313570013207013173 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 100, NPR= 100, MXBF= 8, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 12, THL = {}, THU = {} UZR = {1: [0.25, 0.75]} UZSTOP = {1: [0.0, 1.0]} auto/07p/demos/nag/c.nag.10000640000175000017500000000063313570013207013170 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 100, NPR= 100, MXBF= 8, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 12, THL = {}, THU = {} UZR = {1: [0.25, 0.75]} UZSTOP = {1: [0.0, 1.0]} auto/07p/demos/nag/nag.auto0000640000175000017500000000052213570013207013554 0ustar sksk #============== # AUTO Demo nag #============== pgm = "nag" print "\nDemo %s is started"%pgm print "\n%s : first run : part of a branch of heteroclinic orbits"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : compute in opposite direction"%pgm r2 = run(e=pgm,c=pgm,DS='-') save(r1+r2,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/nag/c.nag.30000640000175000017500000000063313570013207013172 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 100, NPR= 100, MXBF= 8, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 12, THL = {}, THU = {} UZR = {1: [0.25, 0.75]} UZSTOP = {1: [0.0, 1.0]} auto/07p/demos/nag/c.nag.20000640000175000017500000000063313570013207013171 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 100, NPR= 100, MXBF= 8, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 12, THL = {}, THU = {} UZR = {1: [0.25, 0.75]} UZSTOP = {1: [0.0, 1.0]} auto/07p/demos/obv/0000750000175000017500000000000013570013207012136 5ustar skskauto/07p/demos/obv/clean.auto0000640000175000017500000000017513570013207014116 0ustar sksk #============== # AUTO Demo obv #============== print "\n***Clean the directory***" dl('obv') dl('1') dl('2') dl('3') cl() auto/07p/demos/obv/c.obv.30000640000175000017500000000061513570013207013234 0ustar skskNDIM= 4, IPS = 4, IRS = 6, ILP = 0 ICP = [10, 1, 2, 17, 18, 13, 14, 15] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 6, NINT= 5 NMX= 100, NPR= 150, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 18, THL = {}, THU = {} UZR = {16: 1.0, 17: 0.0, 18: 0.0} auto/07p/demos/obv/c.obv.40000640000175000017500000000061413570013207013234 0ustar skskNDIM= 4, IPS = 4, IRS = 8, ILP = 0 ICP = [10, 1, 2, 3, 18, 13, 14, 15] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 6, NINT= 5 NMX= 25, NPR= 150, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 18, THL = {}, THU = {} UZR = {16: 1.0, 17: 0.0, 18: 0.0} auto/07p/demos/obv/c.obv0000640000175000017500000000061613570013207013074 0ustar skskNDIM= 4, IPS = 4, IRS = 0, ILP = 0 ICP = [10, 1, 16, 17, 18, 13, 14, 15] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 6, NINT= 5 NMX= 40, NPR= 150, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 18, THL = {}, THU = {} UZR = {16: 1.0, 17: 0.0, 18: 0.0} auto/07p/demos/obv/c.obv.20000640000175000017500000000061613570013207013234 0ustar skskNDIM= 4, IPS = 4, IRS = 2, ILP = 0 ICP = [10, 1, 16, 17, 18, 13, 14, 15] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 6, NINT= 5 NMX= 5, NPR= 150, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 18, THL = {}, THU = {} UZR = {16: 1.0, 17: 0.0, 18: 0.0} auto/07p/demos/obv/obv.auto0000640000175000017500000000120113570013207013611 0ustar sksk #============== # AUTO Demo obv #============== pgm = "obv" print "\nDemo %s is started"%pgm print "\n%s : first run : locate 1-parameter extrema as bifurcation points"%pgm r1 = run(e=pgm,c=pgm) save(r1,'obv') print "\n%s : second run : compute a few step on the first bifurcating branch"%pgm r2 = run(r1("BP1"),ISW=-1,NMX=5) save(r2,'1') print "\n%s : third run : locate 2-parameter extremum"%pgm r3 = run(r2,ICP=[10,1,2,17,18,13,14,15],ISW=1,NMX=100) save(r3,'2') print "\n%s : fourth run : locate 3-parameter extremum"%pgm r4 = run(r3("UZ2"),ICP=[10,1,2,3,18,13,14,15],NMX=25) save(r4,'3') print "\n***Clean the directory***" cl() auto/07p/demos/obv/obv.f900000640000175000017500000000527713570013207013260 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! obv : Optimization in a boundary value problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION P, E P=U(1) + PAR(2)*U(1)**2 + PAR(3)*U(1)**4 E=EXP(P) F(1)= U(2) F(2)=-PAR(1)*E F(3)= PAR(1)*E*(1+2*PAR(2)*U(1)+4*PAR(3)*U(1)**3 )*U(4) & + PAR(15)*2*(U(1)-1.0) F(4)=-U(3) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0.001 PAR(10)=1.0 U(1)=0.0 U(2)=0.0 U(3)=0.0 U(4)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) FB(3)=U0(3)-PAR(13) FB(4)=U0(4) FB(5)=U1(3)+PAR(14) FB(6)=U1(4) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) DOUBLE PRECISION P, E P=U(1) + PAR(2)*U(1)**2 + PAR(3)*U(1)**4 E=EXP(P) FI(1)=U(3)**2 - PAR(16) FI(2)=PAR(10)-(U(1)-1.0)**2 & - 0.1*( PAR(1)**2+PAR(2)**2+PAR(3)**2 ) FI(3)=-E*U(4)-PAR(15)*0.2*PAR(1) IF(NINT.EQ.3)RETURN FI(4)=-PAR(1)*E*U(1)**2*U(4)-PAR(15)*0.2*PAR(2) - PAR(17) IF(NINT.EQ.4)RETURN FI(5)=-PAR(1)*E*U(1)**4*U(4)-PAR(15)*0.2*PAR(3) - PAR(18) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/obv/c.obv.10000640000175000017500000000061613570013207013233 0ustar skskNDIM= 4, IPS = 4, IRS = 0, ILP = 0 ICP = [10, 1, 16, 17, 18, 13, 14, 15] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 6, NINT= 5 NMX= 40, NPR= 150, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 18, THL = {}, THU = {} UZR = {16: 1.0, 17: 0.0, 18: 0.0} auto/07p/demos/non/0000750000175000017500000000000013570013207012142 5ustar skskauto/07p/demos/non/clean.auto0000640000175000017500000000014513570013207014117 0ustar sksk #============== # AUTO Demo non #============== print "\n***Clean the directory***" dl('non') cl() auto/07p/demos/non/non.f900000640000175000017500000000327113570013207013260 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! non : A non-autonomous boundary value problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION U1,U2,X,P U1=U(1) U2=U(2) X =U(3) P=PAR(1) F(1)=U2 F(2)=-P*EXP(X**3*U1) F(3)=1.d0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,X) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: X PAR(1)=0.d0 U(1)=0.d0 U(2)=0.d0 U(3)=X END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) FB(3)=U0(3) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/non/non.auto0000640000175000017500000000033213570013207013625 0ustar sksk #============== # AUTO Demo non #============== pgm = "non" print "\nDemo %s is started"%pgm print "\n%s : compute a solution branch"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/non/c.non0000640000175000017500000000055713570013207013110 0ustar skskNDIM= 3, IPS = 4, IRS = 0, ILP = 1 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 3, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [1.0, 3.0]}, A1 = 100.0 auto/07p/demos/non/c.non.10000640000175000017500000000055713570013207013247 0ustar skskNDIM= 3, IPS = 4, IRS = 0, ILP = 1 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 3, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [1.0, 3.0]}, A1 = 100.0 auto/07p/demos/ext/0000750000175000017500000000000013570013207012150 5ustar skskauto/07p/demos/ext/c.ext.20000640000175000017500000000053013570013207013253 0ustar skskNDIM= 2, IPS = 4, IRS = 4, ILP = 0 ICP = [1] NTST= 8, NCOL= 3, IAD = 0, ISP = 2, ISW =-1, IPLT= 0, NBC= 2, NINT= 0 NMX= 500, NPR= 500, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN=0.0001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {} auto/07p/demos/ext/ext.f900000640000175000017500000000323013570013207013267 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ext : Spurious solutions to a boundary value problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION P,S,PI,Q P= U(1) + U(1)**2 + U(1)**3 S=SIN(P) PI=4*ATAN(1.d0) Q=(PAR(1)*PI)**2 F(1)=U(2) F(2)=-Q*S END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0.d0 U(1)=0.d0 U(2)=0.d0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ext/clean.auto0000640000175000017500000000014513570013207014125 0ustar sksk #============== # AUTO Demo ext #============== print "\n***Clean the directory***" dl('ext') cl() auto/07p/demos/ext/c.ext.10000640000175000017500000000054013570013207013253 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 8, NCOL= 2, IAD = 0, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 500, NPR= 500, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN=0.0001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZSTOP = {1: 6.0} auto/07p/demos/ext/ext.auto0000640000175000017500000000053613570013207013647 0ustar sksk #============== # AUTO Demo ext #============== pgm = "ext" print "\nDemo %s is started"%pgm print "\n%s : first run : detect bifurcations from the trivial solution"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : compute a bifurcating branch"%pgm r2 = run(r1("BP3"),ISW=-1,NCOL=3) save(r1+r2,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/ext/c.ext0000640000175000017500000000054013570013207013114 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 8, NCOL= 2, IAD = 0, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 500, NPR= 500, MXBF= 3, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN=0.0001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZSTOP = {1: 6.0} auto/07p/demos/apbp/0000750000175000017500000000000013570013207012272 5ustar skskauto/07p/demos/apbp/c.apbp0000640000175000017500000000052613570013207013364 0ustar skskNDIM= 1, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 0, NCOL= 0, IAD = 0, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 5, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.01, DSMIN= 1e-10, DSMAX= 0.1, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {} auto/07p/demos/apbp/clean.auto0000640000175000017500000000026713570013207014254 0ustar sksk #=============== # AUTO Demo apbp #=============== pgm="apbp" print "\n***Clean the directory***" dl(pgm+'.1') dl(pgm+'.2.bw') dl(pgm+'.2.fw') dl(pgm+'.3.bw') dl(pgm+'.3.fw') cl() auto/07p/demos/apbp/apbp.f900000640000175000017500000000310113570013207013530 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Example 1: The AP BP normal form !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) F(1) = (U(1)-PAR(1))*(U(1)-PAR(2))+PAR(3) IF(IJAC==0)RETURN DFDU(1,1) = U(1)-PAR(1)+U(1)-PAR(2) IF(IJAC==1)RETURN DFDP(1,1) = -(U(1)-PAR(2)) DFDP(1,2) = -(U(1)-PAR(1)) DFDP(1,3) = 1.0d0 END SUBROUTINE FUNC !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(OUT) :: U(NDIM), PAR(*) PAR(1:3) = (/ 1.0d0, 2.0d0, 0.0d0 /) U(1) = 1.0 END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/apbp/apbp.auto0000640000175000017500000000123013570013207014103 0ustar sksk #=============================== # AUTO demo apbp # BPCONT for algebraic equations #=============================== pgm="apbp" print "\n***"+pgm+": run 1: solution continuation***" r1=run(pgm,sv=pgm+'.1') bp=r1('BP1') print "\n***"+pgm+": run 2: BP cont non-generic (fw)***" run(bp,ICP=[1,2],ISW=2,sv=pgm+'.2.fw') print "\n***"+pgm+": run 2: BP cont non-generic (bw)***" run(bp,ICP=[1,2],ISW=2,sv=pgm+'.2.bw',DS='-') print "\n***"+pgm+": run 3: BP cont generic (fw)***" run(bp,ICP=[1,2,3],ISW=3,sv=pgm+'.3.fw') print "\n***"+pgm+": run 3: BP cont generic (bw)***" run(bp,ICP=[1,2,3],ISW=3,sv=pgm+'.3.bw',DS='-') print "\n***Clean the directory***" clean() auto/07p/demos/plp/0000750000175000017500000000000013570013207012143 5ustar skskauto/07p/demos/plp/c.plp.iso0000640000175000017500000000056113570013207013676 0ustar skskNDIM= 2, IPS = 2, IRS = 9, ILP = 1 ICP = [4, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 12, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.1, DSMIN= 0.01, DSMAX= 2.0, IADS= 1 NPAR = 5, THL = {}, THU = {} UZR = {4: 4.0}, STOP = ['LP1'] auto/07p/demos/plp/clean.auto0000640000175000017500000000017213570013207014120 0ustar sksk#============== # AUTO Demo plp #============== print "\n***Clean the directory***" dl("plp") dl("loci") dl("iso") cl() auto/07p/demos/plp/c.plp.hb0000640000175000017500000000054313570013207013475 0ustar skskNDIM= 2, IPS = 1, IRS = 2, ILP = 1 ICP = [4, 1] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = 0.1, DSMIN=0.0001, DSMAX= 3.0, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {1: 109.0} auto/07p/demos/plp/plp.f900000640000175000017500000000400313570013207013254 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! 1cl : A one-cell, two-substrate enzyme model !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION S,A,S0,A0,AL,RH,RK,D,R,DRDS,DRDA,DRDK S=U(1) A=U(2) S0=PAR(1) A0=PAR(2) AL=PAR(3) RH=PAR(4) RK=PAR(5) D=1+S+RK*S**2 R=S*A/D F(1)= (S0-S) - RH*R F(2)=AL*(A0-A) - RH*R IF(IJAC.EQ.0)RETURN DRDS=( A*D - S*A*(1+2*RK*S) ) / D**2 DRDA=S/D DRDK=-S**3*A/D**2 DFDU(1,1)=-1 - RH*DRDS DFDU(1,2)= - RH*DRDA DFDU(2,1)= - RH*DRDS DFDU(2,2)=-AL- RH*DRDA IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=1 DFDP(1,2)=0 DFDP(1,3)=0 DFDP(1,4)=-R DFDP(1,5)=-RH*DRDK DFDP(2,1)=0 DFDP(2,2)=AL DFDP(2,3)=A0-A DFDP(2,4)=-R DFDP(2,5)=-RH*DRDK END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=110. PAR(2)=500. PAR(3)=0.2 PAR(4)=2.021628 PAR(5)=0.1 U(1)=4.555974E+01 U(2)=1.777987E+02 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/plp/c.plp.ss0000640000175000017500000000053613570013207013533 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [4] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 0.01, DSMAX= 3.0, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {4: 6.0} auto/07p/demos/plp/plaut04.rc0000640000175000017500000000700013570013207013760 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/plp/c.plp.plp0000640000175000017500000000057113570013207013700 0ustar skskNDIM= 2, IPS = 2, IRS = 5, ILP = 1 ICP = [4, 1, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = 0.1, DSMIN=0.0001, DSMAX= 3.0, IADS= 1 NPAR = 5, THL = {}, THU = {} UZR = {1: 111.0} UZSTOP = {1: 109.0} auto/07p/demos/plp/c.plp.ps0000640000175000017500000000055113570013207013525 0ustar skskNDIM= 2, IPS = 2, IRS = 2, ILP = 1 ICP = [4, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.1, DSMIN=0.0001, DSMAX= 3.0, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {4: 4.0} auto/07p/demos/plp/plp.auto0000640000175000017500000000172413570013207013635 0ustar sksk #========= # Demo plp #========= print "\n***Compute stationary solutions***" plp = run(e='plp',c='plp.ss') print "\n***Compute periodic solutions***" for hb in plp('HB'): ps = run(hb,c='plp.ps') plp = plp + ps print "\n***Relabel and save the plp output files***" plp = rl(plp) save(plp, 'plp') print "\n***Follow Hopf bifurcation***" hbstart = load(plp("HB1"), c='plp.hb') loci = run(hbstart) loci = loci + run(hbstart, DS='-') loci = merge(loci) print "\n***Follow periodic orbit folds: Starting data***" lpstart = run(plp('LP1'),c='plp.plp') print "\n***Follow periodic orbit folds***" loci = loci + merge(run(lpstart) + run(lpstart, DS='-')) print "\n***Relabel and save the loci output files***" loci = rl(loci) save(loci, 'loci') print "\n***Compute an isola of periodic solutions***" isostart = load(loci('UZ4'), c='plp.iso') iso = merge(run(isostart) + run(isostart, DS='-')) iso = relabel(iso) save(iso, 'iso') print "\n***Clean the directory***" cl() auto/07p/demos/ops/0000750000175000017500000000000013570013207012151 5ustar skskauto/07p/demos/ops/ops.auto0000640000175000017500000000206713570013207013652 0ustar sksk #============== # AUTO Demo ops #============== pgm = "ops" print "\nDemo %s is started"%pgm print "\n%s : first run : locate a Hopf bifurcation"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : compute a branch of periodic solutions"%pgm uzr = {3: [0.92, 0.93]} r2 = run(r1("HB1"),IPS=2,ICP=[3,11],NMX=150,RL0=0.9,UZR=uzr,UZSTOP={}) save(r1+r2,'0') print "\n%s : third run : locate a 1-parameter extremum as a bifurcation"%pgm icp=[3,11,12,22,-22,-23,-31] r3 = run(r2("UZ1"),IPS=15,ILP=0,ICP=icp,ISP=2,NMX=25,ITNW=7,DS=-0.05) print "\n%s : fourth run : switch branches to generate adjoint variables"%pgm r4 = run(r3("BP1"),ISW=-1,ISP=0,NMX=5) save(r3+r4,'1') print "\n%s : fifth run : a 2-parameter branch of 1-parameter extrema"%pgm icp[1:3]=[2,11] uzr[22]=0.0 r5 = run(r4,ICP=icp,ISW=1,NMX=150,RL0=0.8,RL1=1.9,DS='-',UZR=uzr) save(r5,'2') print "\n%s : sixth run : a 3-parameter branch of 2-parameter extrema"%pgm icp[2:4]=[1,11] r6 = run(r5("UZ4"),IRS=15,ICP=icp,NTST=50,UZR={1:[0.1,0.05,0.01,0.005,0.001]}) save(r6,'3') print "\n***Clean the directory***" cl() auto/07p/demos/ops/clean.auto0000640000175000017500000000017313570013207014127 0ustar sksk #============== # AUTO Demo ops #============== print "\n***Clean the directory***" dl('0') dl('1') dl('2') dl('3') cl() auto/07p/demos/ops/c.ops.10000640000175000017500000000053713570013207013263 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZSTOP = {3: 0.95} auto/07p/demos/ops/c.ops.30000640000175000017500000000060013570013207013254 0ustar skskNDIM= 3, IPS = 15, IRS = 4, ILP = 0 ICP = [3, 11, 12, 22, -22, -23, -31] NTST= 15, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.05, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {3: [0.92, 0.93]} auto/07p/demos/ops/c.ops0000640000175000017500000000053713570013207013124 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZSTOP = {3: 0.95} auto/07p/demos/ops/ops.f900000640000175000017500000000543213570013207013277 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ops : Optimization of periodic solutions !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION x,y,z,p1,p2,p3,p4 INTEGER I,J x=U(1) y=U(2) z=U(3) p1=PAR(1) p2=PAR(2) p3=PAR(3) p4=PAR(4) F(1)=( -p4*(x**3/3-x) + (z-x)/p2 - y ) / p1 F(2)=x-p3 F(3)=-(z-x)/p2 IF(IJAC.EQ.0)RETURN DFDU(1,1)=( -p4*(x**2-1) - 1/p2 ) /p1 DFDU(1,2)=-1/p1 DFDU(1,3)=1/(p2*p1) DFDU(2,1)=1 DFDU(2,2)=0 DFDU(2,3)=0 DFDU(3,1)=1/p2 DFDU(3,2)=0 DFDU(3,3)=-1/p2 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DO I=1,3 DO J=1,9 DFDP(I,J)=0.d0 ENDDO ENDDO DFDP(1,1)=-( -p4*(x**3/3-x) + (z-x)/p2 - y )/p1**2 DFDP(1,2)=-(z-x)/(p2**2*p1) DFDP(1,3)=0 DFDP(1,4)=-(x**3/3-x)/p1 DFDP(2,1)=0 DFDP(2,2)=0 DFDP(2,3)=-1 DFDP(2,4)=0 DFDP(3,1)=0 DFDP(3,2)=(z-x)/p2**2 DFDP(3,3)=0 DFDP(3,4)=0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION p1,p2,p3,p4 p1=0.5 p2=4 p3=0.9 p4=2. U(1)=p3 U(2)=-p4*(p3**3/3-p3) U(3)=p3 PAR(1)=p1 PAR(2)=p2 PAR(3)=p3 PAR(4)=p4 END SUBROUTINE STPNT SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FS DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) INTEGER I FS=PAR(3) IF(IJAC.EQ.0)RETURN DO I=1,NDIM DFDU(I)=0.d0 ENDDO IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DO I=1,9 DFDP(I)=0.d0 ENDDO DFDP(3)=1.d0 END SUBROUTINE FOPT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ops/c.ops.50000640000175000017500000000061013570013207013257 0ustar skskNDIM= 3, IPS = 15, IRS = 11, ILP = 0 ICP = [3, 2, 11, 22, -22, -23, -31] NTST= 15, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {3: [0.92, 0.93], 22: 0.0} auto/07p/demos/ops/c.ops.20000640000175000017500000000055113570013207013260 0ustar skskNDIM= 3, IPS = 2, IRS = 2, ILP = 1 ICP = [3, 11] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {3: [0.92, 0.93]} auto/07p/demos/ops/c.ops.40000640000175000017500000000060013570013207013255 0ustar skskNDIM= 3, IPS = 15, IRS = 9, ILP = 0 ICP = [3, 11, 12, 22, -22, -23, -31] NTST= 15, NCOL= 4, IAD = 3, ISP = 0, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 5, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.05, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {3: [0.92, 0.93]} auto/07p/demos/ops/c.ops.60000640000175000017500000000062113570013207013262 0ustar skskNDIM= 3, IPS = 15, IRS = 15, ILP = 0 ICP = [3, 2, 1, 11, -22, -23, -31] NTST= 50, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {1: [0.1, 0.05, 0.01, 0.005, 0.001]} auto/07p/demos/tim/0000750000175000017500000000000013570013207012141 5ustar skskauto/07p/demos/tim/clean.auto0000640000175000017500000000014513570013207014116 0ustar sksk #============== # AUTO Demo tim #============== print "\n***Clean the directory***" dl('tim') cl() auto/07p/demos/tim/tim.auto0000640000175000017500000000031313570013207013622 0ustar sksk #============== # AUTO Demo tim #============== pgm = "tim" print "\nDemo %s is started"%pgm print "\n%s : Timing run"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/tim/c.tim0000640000175000017500000000052613570013207013102 0ustar skskNDIM= 10, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC=10, NINT= 0 NMX= 10, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL=0.0001, EPSU =0.0001, EPSS =0.0001 DS = 0.01, DSMIN= 0.01, DSMAX= 0.05, IADS= 0 NPAR = 1, THL = {}, THU = {} UZR = {} auto/07p/demos/tim/c.tim.10000640000175000017500000000052613570013207013241 0ustar skskNDIM= 10, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC=10, NINT= 0 NMX= 10, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL=0.0001, EPSU =0.0001, EPSS =0.0001 DS = 0.01, DSMIN= 0.01, DSMAX= 0.05, IADS= 0 NPAR = 1, THL = {}, THU = {} UZR = {} auto/07p/demos/tim/tim.f900000640000175000017500000000503113570013207013252 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! tim : A test problem for timing AUTO !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) INTEGER NDIM2,I,I1,I2 DOUBLE PRECISION E DOUBLE PRECISION, EXTERNAL :: FEXP NDIM2=NDIM/2 DO I=1,NDIM2 I1=2*(I-1)+1 I2=I1+1 E=FEXP(U(I1)) F(I1)=U(I2) F(I2)=-PAR(1)*E ENDDO END SUBROUTINE FUNC !---------------------------------------------------------------------- DOUBLE PRECISION FUNCTION FEXP(U) ! ------ --------- -------- ---- DOUBLE PRECISION, INTENT(IN) :: U INTEGER NTERMS,K DOUBLE PRECISION TRM NTERMS=25 FEXP=1.d0 TRM=FEXP DO K=1,NTERMS TRM=TRM*U/K FEXP=FEXP + TRM ENDDO END FUNCTION FEXP !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T INTEGER I DO I=1,NDIM U(I)=0.0 ENDDO END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER NDIM2,I,I1,I2 NDIM2=NDIM/2 DO I=1,NDIM2 I1=2*(I-1)+1 I2=I1+1 FB(I1)=U0(I1) FB(I2)=U1(I1) ENDDO END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- auto/07p/demos/um3/0000750000175000017500000000000013570013207012054 5ustar skskauto/07p/demos/um3/clean.auto0000640000175000017500000000016313570013207014031 0ustar sksk #============== # AUTO Demo um3 #============== print "\n***Clean the directory***" dl('1') dl('2') dl('3') cl() auto/07p/demos/um3/um3.auto0000640000175000017500000000202713570013207013454 0ustar sksk #============== # Demo um3 #============== print "\n***Grow an initial orbit by continuation***" init = run(e='um3', unames = {1:'x',2:'y',3:'z'}, parnames = {1:'theta',2:'eps',3:'r0',4:'r1',11:'Period'}, NDIM=3,IPS=4,ILP=0,ISP=0,ICP=['Period','r1'], NTST=60,IPLT=3,NBC=4, DS=5e-2,DSMIN=1e-5,DSMAX=1e1, THL={'Period':0.}, UZSTOP={'r1':1.}, NPAR=11) save(init, '1') print "\n***Decrease the value of the problem parameter eps***" decr = run(init,ICP=['eps','Period'],DS='-',DSMAX=1.0,UZSTOP={'eps':0.01}) save(decr, '2') print "\n***Part 1 of the unstable manifold***" startman = load(decr, ICP=['theta','Period'],NPR=1, DS=5e-2,DSMIN=1e-5,DSMAX=1e0, UZSTOP={'theta':[1.25,-0.75],'Period':1e4}) part1 = run(startman) print "\n***Part 2 of the unstable manifold" part2 = run(startman,DS='-') print "\n***Merge, relabel and save the orbits***" save(relabel(merge(part1+part2)),'3') print "\n***Clean the directory***" cl() auto/07p/demos/um3/c.um3.20000640000175000017500000000045113570013207013065 0ustar skskunames={1: 'x', 2: 'y'}, parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 3, IPS = 4, IRS = 2, ILP = 0 ICP = ['eps', 'Period'] NTST= 60, ISP = 0, IPLT= 3, NBC= 4 DS = -0.05, DSMIN= 1e-05, DSMAX= 1.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'eps': 0.01} auto/07p/demos/um3/plaut04.rc0000640000175000017500000000700113570013207013672 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 0 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/um3/c.um3.30000640000175000017500000000052313570013207013066 0ustar skskunames={1: 'x', 2: 'y'}, parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 3, IPS = 4, IRS = 3, ILP = 0 ICP = ['theta', 'Period'] NTST= 60, ISP = 0, IPLT= 3, NBC= 4 NPR= 1 DS = 0.05, DSMIN= 1e-05, DSMAX= 1.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'theta': [1.25, -0.75], 'Period': 10000.0} auto/07p/demos/um3/c.um3.40000640000175000017500000000052313570013207013067 0ustar skskunames={1: 'x', 2: 'y'}, parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 3, IPS = 4, IRS = 3, ILP = 0 ICP = ['theta', 'Period'] NTST= 60, ISP = 0, IPLT= 3, NBC= 4 NPR= 1 DS = -0.05, DSMIN= 1e-05, DSMAX= 1.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'theta': [1.25, -0.75], 'Period': 10000.0} auto/07p/demos/um3/um3.f900000640000175000017500000000501713570013207013104 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! um3: Computing a 2D unstable manifold in 3D (a phase portrait) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION eps, Period, x, y, z eps = PAR(2) Period = PAR(11) x = U(1) y = U(2) z = U(3) F(1) = Period * ( eps*x - y**3 + z**3) F(2) = Period * ( y + x**3 ) F(3) = Period * ( -z + x**2 ) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, PARAMETER :: & theta = 0.25, & eps = 0.5, & r0 = 0.03, & r1 = r0, & Period= 1.d-4 DOUBLE PRECISION PI PI = 4*ATAN(1.D0) PAR(1:4) = (/theta,eps,r0,r1/) PAR(11) = Period U(1) = r0 * COS( 2.0D0 * PI * theta) U(2) = r0 * SIN( 2.0D0 * PI * theta) U(3) = 0.d0 END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION x0,y0,z0 , x1,y1,z1 , PI,theta,r0,r1 x0 = U0(1) y0 = U0(2) z0 = U0(3) x1 = U1(1) y1 = U1(2) z1 = U1(3) PI = 4*ATAN(1.D0) theta = PAR(1) r0 = PAR(3) r1 = PAR(4) FB(1) = x0 - r0 * COS( 2.0 * PI * theta) FB(2) = y0 - r0 * SIN( 2.0 * PI * theta) FB(3) = z0 FB(4) = SQRT(x1**2 + y1**2 + z1**2) - r1 END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- auto/07p/demos/um3/c.um3.10000640000175000017500000000043213570013207013063 0ustar skskunames={1: 'x', 2: 'y'} parnames={1: 'theta', 2: 'eps', 3: 'r0', 4: 'r1', 11: 'Period'} NDIM= 3, IPS = 4, ILP = 0 ICP = ['Period', 'r1'] NTST= 60, ISP = 0, IPLT= 3, NBC= 4 DS = 0.05, DSMIN= 1e-05, DSMAX= 10.0 NPAR= 11, THL = {'Period': 0.0} UZSTOP = {'r1': 1.0} auto/07p/demos/python/0000750000175000017500000000000013570013207012671 5ustar skskauto/07p/demos/python/userScript.xauto0000750000175000017500000000105313570013207016120 0ustar skskfrom auto import * def myRun(demoname): demo(demoname) r = run(demoname) branchpoints = r("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) r = r + merged r=relabel(r) save(r, demoname) plot(r) wait() myRun('bvp') auto/07p/demos/python/userScript.py0000640000175000017500000000127113570013207015410 0ustar sksk# This is an example script for the AUTO07p command line user # interface. See the "Command Line User Interface" chapter in the # manual for more details. from auto import * def myRun(demoname): demo(demoname) r = run(demoname) branchpoints = r("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) r = r + merged r=relabel(r) save(r, demoname) plot(r) wait() auto/07p/demos/python/plotter.auto0000750000175000017500000000670213570013207015264 0ustar sksk# This script is a demonstration of some of the plotting # capabilities of AUTO 2000 # We create a sub directory ! rm -rf test ! mkdir test # and go into it cd test # We clean it up (in case it happen to exist previously) ! rm -f * # and copy the 'ab' into the current directory. This command # also loads the c.ab and ab.c files into the AUTO command # line user interface. dm("ab") # We now run the demo using the constants file 'c.ab.1' run(c="ab.1") # and save the resulting bifurcation diagram in the file 'b.ab', # the resulting solution in the file 's.ab', and the resulting # diagnostic file in 'd.ab'. sv("ab") # We run AUTO again, this time using the 'c.ab.2' constants file # and the previously saved solution file 's.ab' as starting data. run(c="ab.2",s="ab") # This command plots the bifurcation diagram and solution contained # in the files 'b.ab' and 's.ab' plot1=pl("ab") # This command plots the bifurcation diagram and solution contained # in the files 'fort.7' and 'fort.8' plot2=pl() # Wait for the user to hit a key before proceeding. wait() # We change the background color of plot1 to black and the # foreground color to white. 'color_list" is the list of # colors used for the actual plot. plot1.config(bg="black",fg="white",color_list="white") # We plot solution with label number 2 instead of the bifurcation diagram # in plot2. plot2.config(type="solution",label=[2]) wait() # These two commands put explicit bounds on the plotting # bounds, instead of having them computed automatically # from the data. plot1.config(miny=1.5,maxy=3.4) plot2.config(minx=0.8,maxx=0.9) wait() # This command plots column 0 vs column 3 in plot1 # instead of the default column 0 vs column 1 plot1.config(bifurcation_x=(0,),bifurcation_y=(3,)) # This command plots the value of the independent # variable 'time' vs column 0 in plot2 plot2.config(solution_x=("time",),solution_y=(0,)) wait() # This command changes the row and column labels plot1.config(xlabel="Randy is cool",ylabel="Sebius is cool") plot2.config(index=[1]) wait() # This command goes back to the default plot of column 0 vs column 1 in plot1 plot1.config(bifurcation_x=(0,),bifurcation_y=(1,)) # This command creates two plots in plot2. # The first is the independent variable 't' vs column 0 and the second # is the independent variable 't' vs column 1 plot2.config(solution_x=("time","time"),solution_y=(0,1)) wait() # This command places a marker at all the places where # the independent variable 'time' have value 0.1. plot2.config(mark_t=0.1) wait() # We now try to use the three dimensional plotting capabilities # AUTO2000. NOTE: These commands will only work if # three dimensional plotting has been enabled, and this # is NOT done by default. ##plot1=p3("ab") ##plot2=p3() ##wait() ##plot1.config() ##plot2.config(type="solution",label=[6]) ##wait() # This command is different from the two dimensional case in that # Z and color components can also be chosen. ##plot1.config(bifurcation_x=[0],bifurcation_y=[1],bifurcation_z=[2],bifurcation_color=[3]) ##plot2.config(solution_x=["t"],solution_y=[0]) ##wait() ##plot2.config(index=[4]) ##wait() # Similarity to the previous command, these commands differ # from the two dimensional case in that # Z and color components can also be chosen. ##plot1.config(bifurcation_x=(0,2),bifurcation_y=(1,3),bifurcation_z=(3,3),bifurcation_color=(0,0)) ##plot2.config(solution_x=("t","t"),solution_y=(0,1),solution_z=(0,1),solution_color=(0,1)) ##wait() ##plot2.config(mark_t=0.1) ##wait() auto/07p/demos/python/demo3.auto0000640000175000017500000000032013570013207014566 0ustar skskdemo('bvp') bvp=r('bvp') for solution in bvp('BP'): bp = ld(solution,NTST=50,ISW=-1) # Compute forwards and backwards bvp = bvp + mb(r(bp)+r(bp,DS='-')) bvp=rl(bvp) pl(bvp) sv(bvp,'bvp') wait() auto/07p/demos/python/fullTest.auto0000750000175000017500000001125313570013207015372 0ustar sksk# This is a sample AUTO-07P script file. This file uses the # entire AUTO-07P command set, except for the plotting commands. # Accordingly, some of the command sequences are not optimal # (i.e. some of the same functionality can be accomplished # with fewer commands). # The next two commands are sent to the shell ! rm -rf test ! mkdir test # Go into the newly created test directory cd test # Copy the wav demo into the current directory. This command # also loads in the problem definition file wav.c and the # constants file c.wav. Basically, the 'dm' command is # the concatenation of the 'copyDemo' command and the # 'ld' command dm("wav") # Check what files are in the current directory ls # Print out the short online help for all the commands man # Print out the long online help for the 'run' command man run # Print out the contents of the c.wav.1 file cat c.wav # Load the files wav.c, c.wav, s.wav, and h.wav into the AUTO # command interpretor. If either the s.wav or the h.wav file # does not exist it is silently ignored, since they are not # necessarily required to run AUTO. NOTE: in this case this # command is not needed since its functionality is included # in the 'dm' command. It is put here for clarity. ld("wav") # This loop runs the AUTO using each of the constants files # c.wav.2, c.wav.3, c.wav.4, and c.wav.5. The # results of each computation are appended to the file s.wav, # which is read back in to provide starting data for the # next calculation. Note the Python syntax 'c="wav.%d"%i', which # use to generate the constants file names. for i in range(2,5): rn(c="wav.%d"%i,s="wav") ap("wav") # Remove all files from the current directory. ! rm -f * # We set a Python variable to contain the name of the next # demo we want to run. cir = "cir" # We copy and load the demo files. dm(cir) # The 'cir' demo is somewhat non-standard in that it uses # a tabulated file of values for initial data. This command # takes that file and creates a AUTO input file from it. us(cir) # Again, this command is strictly redundant, but is here to # show the different ways that files may be loaded into # the interface. First you may use a 'ld' command with a single # argument to load in the standard files cir.c, c.cir, s.cir, and h.cir. ld(cir) # Or, you may load in the files are part of the 'run' command # itself. In this case we have used the extended form, in which # each filename is given individually. This command loads in # the files c.cir1, and s.dat and then runs AUTO. rn(c="cir.1",s="dat") # Or, you may run without defining any files, and this will # use whatever files were loaded last. run() # We save the data in s.cir sv(cir) # These commands print out various values associated with # solutions to the problem. # The pseudo arclength step-size. st(cir) # The 'secondary periodic' function sc(cir) # Any notes that AUTO entered in the diagnostic file nt(cir) # The 'limit point' function lm(cir) # The number of iterations required for convergence it(cir) # The 'Hopf bifurcation' function hp(cir) # The Floquet multipliers fl(cir) # The eigenvalues of the Jacobian (for algebraic problems) eg(cir) # The 'branch point' function br(cir) # Clean the directory by removing fort.*, o.*, and *.exe cl() # Now remove everything else ! rm -f * # Set a new variable with the name of a third demo. demo = "ab" # Copy and load the demo. dm(demo) # Delete all d.*, b.*, and s.* files dl(demo) # Load just the constants file c.ab.1 and leave the rest of the loaded files # the same. ld(constants="ab.1") # Run the demo run() # Change the constant RL1 to have the value 0.4 ch("RL1",0.4) # And run the demo again. run() # Save the results into d.ab, s.ab, and b.ab (since demo='ab') sv(demo) # Append another copy of the data into the same files ap(demo) # Run the demo, but changing the constants file to c.ab.2 and the # solution file to s.ab run(constants="ab.2",solution="ab") # Copy the files d.ab, s.ab, and b.ab to d.double, s.double, and b.double cp(demo,"double") # 'Double' the solutions in d.double, s.double, and b.double. This # is used to compute period doubling bifurcations. db("double") # Move the files d.double, s.double, and b.double to # d.triple, s.triple, and b.triple mv("double","triple") # 'Triple' the solutions in d.triple, s.triple, and b.triple. This # is used to compute period tripling bifurcations. tr("triple") # Parse the data in fort.8 and return a Python object containing # the data data=sl() # Parse the data in fort.7 and return a Python object containing # the data data=dg() # Parse the data in fort.7 and fort.8 and return a Python object containing # the data data=bt() # Clean the directory ! rm -rf * # Go up one directory level cd .. # Remove the test directory ! rmdir test auto/07p/demos/python/tutorial.auto0000750000175000017500000000454413570013207015440 0ustar sksk# This script shows how the tutorial from the AUTO07P manual # can be implemented in the new command line user interface. # In fact it shows two ways. The first uses the standard # ab.auto file which comes with the tutorial, and the second # uses only the problem definition file 'ab.c' # and the constant files 'c.ab.1', 'c.ab.2', and 'c.ab.3' # The next two commands are sent to the shell ! rm -rf test ! mkdir test # Go into the newly created test directory cd test # Copy the ab demo into the current directory. This command # also loads in the problem definition file ab.c and the # constants file c.ab. Basically, the 'dm' command is # the concatenation of the 'copyDemo' command and the # 'ld' command dm("ab") # The next two commands call other scripts auto('ab.auto') auto('clean.auto') # Now, we show how the tutorial can be run without # using scripts. See the manual for specifics. # Load the files ab.c, c.ab, s.ab, and h.ab into the AUTO # command interpretor. If either the s.ab or the h.ab file # does not exist it is silently ignored, since they are not # necessarily required to run AUTO. NOTE: in this case this # command is not needed since its functionality is included # in the 'dm' command. It is put here for clarity. ld("ab") # Run AUTO 2000 using the constants file c.ab.1 rn(c="ab.1") # Save the bifurcation diagram in b.ab, the solution in s.ab, # and the diagnostics in d.ab sv("ab") # Run AUTO 2000 using the constants file c.ab.2 and # the file s.ab as starting data. rn(c="ab.2",solution="ab",IRS=2) # Append the current solution onto the files b.ab, s.ab, and d.ab # as appropriate. ap("ab") # Run AUTO 2000 using the constants file c.ab.3 and # the file s.ab as starting data. rn(constants="ab.3",s="ab",IRS=7) # Save the bifurcation diagram in b.2p, the solution in s.2p, # and the diagnostics in d.2p sv("2p") # Run AUTO 2000 using the constants file c.ab.3 and # the file s.ab as starting data, reversing the direction. # Even though s="ab" # isn't specified, the command uses the last solution # file specified as the default. rn(c="ab.3",IRS=7,DS='-') # Append the current solution onto the files b.ab, s.ab, and d.ab # as appropriate. ap("2p") # Run AUTO 2000 using the constants file c.ab.3 and # the file s.ab as starting data. rn(constants="ab.3",IRS=7) # Append the current solution onto the files b.ab, s.ab, and d.ab # as appropriate. ap("2p") auto/07p/demos/python/demo4.auto0000640000175000017500000000031313570013207014571 0ustar sksk,demo bvp bvp=r('bvp') for solution in bvp('BP'): bp = ld(solution,NTST=50,ISW=-1) # Compute forwards and backwards bvp = bvp + mb(r(bp)+r(bp,DS='-')) bvp=rl(bvp) pl bvp sv bvp, 'bvp' wait auto/07p/demos/python/n-body/0000750000175000017500000000000013570013207014061 5ustar skskauto/07p/demos/python/n-body/compute_periodic_family.xauto0000640000175000017500000001527213570013207022046 0ustar sksk# This is an example of an 'expert' AUTO CLUI script. # This scripts takes the Lagrange points computed # by the compute_lagrange_points_0.5.auto and # computes the periodic orbits emanating from them. # In expert scripts we need to explicitly import the # AUTOclui library from AUTOclui import * # There isn't a AUTO CLUI command for diagnostic # file parsing yet, but in a script such as # this we can just as easily import the parsing # class directly. import parseD # We also import a few general Python utility # libraries. import sys import math # We have divided the functionality if this # script into two functions, so that the # same ideas may be more easily used in # other contexts. def compute_periodic_family(starting_point,mu,compute_bifur_flag="no",npr=20): # We load the 3d.c, the starting point file, and # c.3d into the AUTO CLUI # And we parse the starting solution. This # is mainly to determine what label the # file contains. starting_solution=load(starting_point,e='3d',c='3d') # We setup the calculation by setting the # starting solution to be the appropriate label. # And setting the problem type. In this case # we want to compute a family of equilibria. # Our initial calculation it to go from 0.5 # to the desired mu value, so we put in a # stopping condition for the mu value we want. # Since we are starting at mu=0.5 we want to # go down if the desired value is less, and # go up if the desired value is more. ds = starting_solution.c["DS"] if mu < 0.5: ds = -ds # Run and get a parsed solution as well. hopf_bifurcation = run(starting_solution,IPS=1,UZR={-1:mu},DS=ds) # We save this solution save(hopf_bifurcation,'hopf_bifurcation') # Get just the solution hopf_bifurcation = hopf_bifurcation()[-1] # This will eventually become an AUTO2000 internal # NOTE: the interface to the parseD object is # under development and may change significantly # in the final version parseD_object=parseD.parseD('fort.9') # We print out the eigenvalues of the Jacobian. print parseD_object[-2]["Eigenvalues"] # In this loop we look for all eigenvalues # with "zero" (i.e. sufficiently small) real part. # We begin by defining an array in which the periods # of the Hopf bifurcations will be stored. periods = [] # The parseD_object is basically a Python list, # so we use standard Python syntax to iterate # over it. for eigenvalue in parseD_object[-2]["Eigenvalues"]: if math.fabs(eigenvalue[0]) < 1e-8: # If the real part in sufficiently small # we get the imaginary part imag = math.fabs(eigenvalue[1]) print "imaginary part: ",imag print "period : ",2*math.pi/imag # and compute the period. If is is not in our # list of periods (i.e. it is not a complex conjugate # to one we have already computed) we add it. if 2*math.pi/imag not in periods: periods.append(2*math.pi/imag) # Now we have an array which contains the initial periods of all of the # periodic orbits emanating from the Hopf bifurcation. # We iterate over them and calculate each family. for period in periods: # Since we have a parsed version of the initial solution # it is easy to modify it to include the period # we want. In AUTO, the 11th parameter is always # the period. # Now, when this point was computed we had Hopf # bifurcation detection turned off (since all # points were Hopf bifurcations). So, we manually # mark the point as a Hopf bifurcation. hopf_bifurcation = load(hopf_bifurcation,TY="HB",PAR={11:period}) # We set the problem type, in this case we want to # compute a family of periodic orbits. # We turn off torus bifurcation detection, since there are # lots of torus bifurcations. # We want additional solutions to be saved, so we set NPR to # a smaller value. # We want the period, the y value at t=0, and the Jacobi constant to # be printed out, so we add the appropriate parameters, # And we run the calculation. per = run(hopf_bifurcation, IPS=2, ISP=3, NPR=npr, ICP=[2,11,15,16]) # Finally, we save the solution. save(per,'%s_mu_%f_period_%f'%(starting_point,mu,period)) # Now, if there were any bifurcation points detected we want # to compute the branches emanating from them as well. # Since this is a very common task, we have put that functionality # into a subroutine. if compute_bifur_flag == "yes": compute_bifur(per,'%s_mu_%f_period_%f'%(starting_point,mu,period)) # This subroutine takes a bifurcation diagram objec and a solution file name, # and for every bifurcation point in the diagram it attempts to # compute a bifurcating branch. def compute_bifur(problem,solution_file): # Use problem('BP') to get a list of all branch points and # then we can use standard Python syntax to iterate # over it. for solution in problem('BP'): # ISW=-1 is the syntax for telling AUTO to switch branches # at the bifurcation # Compute forward fw=run(solution,ISW=-1) # Save the branch save(fw,solution_file+"_+_"+`solution["LAB"]`) # Compute backward by making the initial step-size negative bw=run(solution,ISW=-1,DS='-') # Save the branch save(bw,solution_file+"_-_"+`solution["LAB"]`) # This is the Python syntax for making a script runable if __name__ == '__main__': # We want to have the option of computing the bifurcating # branches or not, so we use the Python getopt # routines to process command line options. import getopt # This line process the command line options and # looks for a -b option opts_list,args=getopt.getopt(sys.argv[1:],"bn:") # We take the list of options generated by # getopt command and turn it into a dictionary. # This is not strictly necessary, but it makes # it easier to use. opts={} for x in opts_list: opts[x[0]]=x[1] # If you use the -b option then we want to compute the bifurcating # branches. if "-b" in opts: compute_bifur_flag="yes" else: compute_bifur_flag="no" npr = 20 if "-n" in opts: npr = int(opts["-n"]) # The first argument is the name of the file in # which you find the starting point starting_point = args[0] # The second argument is the desired mu value. mu = float(args[1]) compute_periodic_family(starting_point,mu,compute_bifur_flag,npr) auto/07p/demos/python/n-body/clean.auto0000640000175000017500000000036313570013207016040 0ustar sksk #======================== # AUTO Demo python/n-body #======================== print "\n***Clean the directory***" import glob import os toclean = glob.glob("b.*") + glob.glob("s.*") + glob.glob("d.*") for f in toclean: os.remove(f) cl() auto/07p/demos/python/n-body/compute_lagrange_points_family.auto0000640000175000017500000000254213570013207023230 0ustar sksk# This script computes the initial circle of solutions for mu=0 # as well as the bifurcating branches which give us the # Lagrange points. It then plots the full bifurcation diagram. # Load 3d.c and c.3d into the AUTO CLUI # Add a stopping condition so we only compute the loop once # We tell AUTO to stop when parameter 16 is 0.991, parameter 1 is -0.1, # or parameter 1 is 1.1. If parameter1 is 0.5 we just report # a point. # We also want to compute branches for the first 4 bifurcation # points. # IPS=0 tells AUTO to compute a family of equilibria. # Compute the circle. # This command parses returns a Python object which contains # all of the data in the file in an easy to use format. circle = run('3d',UZR={-16:0.991, -1:[-0.1,1.1], 1:0.5}, MXBF=-4, IPS=0) # Use the label of the last solution of the previous calculation # and use this solution as the starting point of the next # calculation. # Do not compute any bifurcating branches. # We tell AUTO to stop when parameter 16 is 1.0, parameter 1 is -0.1, # or parameter 1 is 1.1. If parameter1 is 0.5 we just report # a point. # Run the calculation lagrangep = run(circle, MXBF=0, UZR={-16:1.0, -1:[-0.1,1.1], 1:0.5}) # Save the circle and data in b.lagrange_points, s.lagrange_points, # and d.lagrange_points. save(circle + lagrangep, 'lagrange_points') # Plot the solutions p3('lagrange_points') auto/07p/demos/python/n-body/c.3d0000640000175000017500000000053713570013207014541 0ustar skskNDIM= 6, IPS = 0, ILP = 0 ICP = [1, 11, 15, 16] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2000, NPR= 2000, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS =0.0001 DS = 0.001, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/python/n-body/plaut04.rc0000640000175000017500000001031213570013207015676 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Use r3b mode R3B = Yes # Initialize the default options: Draw Reference Plane = Yes Draw Primaries = Yes Draw Libration Points = Yes Highlight Orbit = No Orbit Animation = No Normalize Data = No Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 0 # Draw Scale: Draw Scale = No # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 1. # Background transparency: Background Transparency = 0.0 # Disk transparency # IF you turn Disk From File to "Yes", you should change the transparency there. Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 large primary Color = 0.0, 1.0, 0.0 large primary tail Color = 0.0, 1.0, 1.0 small primary Color = 0.0, 0.0, 1.0 small primary tail Color = 0.5, 0.5, 0.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UNStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 0.0, 0.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 Large Primary Radius = 3.0 Small Primary Radius = 2.0 Libration Point Size = 0.5 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = Yes #3DBif = No #3DSol = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/python/n-body/.autorc0000750000175000017500000000561413570013207015370 0ustar sksk[AUTO_command_aliases] ls =commandLs cd =commandCd shell =commandShell cat =commandCat wait =commandWait copyDemo =commandCopyDemo gui =commandCreateGUI branchPoint =commandQueryBranchPoint eigenvalue =commandQueryEigenvalue floquet =commandQueryFloquet help =commandInteractiveHelp hopf =commandQueryHopf iterations =commandQueryIterations limitpoint =commandQueryLimitpoint note =commandQueryNote secondaryPeriod =commandQuerySecondaryPeriod stepsize =commandQueryStepsize changeConstant =commandRunnerConfigFort2 printConstant =commandRunnerPrintFort2 append =commandAppend diagramAndSolutionGet =commandParseDiagramAndSolutionFile clean =commandClean constantsGet =commandParseConstantsFile copy =commandCopyDataFiles delete =commandDeleteDataFiles deleteFort =commandDeleteFortFiles diagramGet =commandParseDiagramFile double =commandDouble demo =commandCopyAndLoadDemo load =commandRunnerLoadName move =commandMoveFiles plot =commandPlotter plot3 =commandPlotter3D run =commandRun save =commandCopyFortFiles solutionGet =commandParseSolutionFile triple =commandTriple userData =commandUserData br =commandQueryBranchPoint eg =commandQueryEigenvalue fl =commandQueryFloquet hp =commandQueryHopf it =commandQueryIterations lm =commandQueryLimitpoint nt =commandQueryNote sc =commandQuerySecondaryPeriod st =commandQueryStepsize ch =commandRunnerConfigFort2 pr =commandRunnerPrintFort2 ap =commandAppend bt =commandParseDiagramAndSolutionFile cl =commandClean cn =commandParseConstantsFile cp =commandCopyDataFiles dl =commandDeleteDataFiles dg =commandParseDiagramFile db =commandDouble dm =commandCopyAndLoadDemo ld =commandRunnerLoadName mv =commandMoveFiles pl =commandPlotter #FIXME: This doesn't match the rule we use for all other commands p3 =commandPlotter3D rn =commandRun sv =commandCopyFortFiles sl =commandParseSolutionFile tr =commandTriple us =commandUserData man =commandInteractiveHelp bp =commandQueryBranchPoint ev =commandQueryEigenvalue hb =commandQueryHopf lp =commandQueryHopf cc =commandRunnerConfigFort2 pc =commandRunnerPrintFort2 p2 =commandPlotter r =commandRun sp =commandQuerySecondaryPeriod ss =commandQueryStepsize df =commandDeleteFortFiles [AUTO_plotter] #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "circle" #torus_symbol = "fillcircle" #user_point_symbol = None #error_symbol = "crosssquare" type = "solution" solution_x = [0] solution_y = [1] solution_column_defaults=[[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] [AUTO_plotter3D] mark_t = 0.0 mark_t_radius = 0.05 auto_scale = 0 solution_x = [0] solution_y = [1] solution_z = [2] solution_color = [3] bifurcation_x=[0] bifurcation_y=[2] bifurcation_z=[3] type = "bifurcation" solution_column_defaults=[[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] auto/07p/demos/python/n-body/Makefile0000640000175000017500000000005613570013207015523 0ustar skskclean: rm -f *~ *.o d.* s.* b.* fort.* *.exe auto/07p/demos/python/n-body/3d.c0000640000175000017500000000716213570013207014542 0ustar sksk/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* nb : The restricted 3-body problem */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ #include "auto_f2c.h" /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int func (integer ndim, const double *u, const integer *icp, const double *par, integer ijac, double *f, double *dfdu, double *dfdp) { double mu,p; double x, y, z; double xp, yp, zp; double rone, rone2, rone3; double rtwo, rtwo2, rtwo3; double Cx, Cy, Cz, Cxp, Cyp, Czp; x = u[0]; y = u[1]; z = u[2]; xp = u[3]; yp = u[4]; zp = u[5]; mu = par[0]; p = par[1]; rone = sqrt( (x+mu)*(x+mu) + y*y + z*z ); rone2 = rone*rone; rone3 = rone2*rone; rtwo = sqrt( (x-1+mu)*(x-1+mu) + y*y + z*z ); rtwo2 = rtwo*rtwo; rtwo3 = rtwo2*rtwo; Cx = x - (1-mu)*(x+mu)/rone3 - mu*(x-1+mu)/rtwo3; Cy = y - (1-mu)*y/rone3 - mu*y/rtwo3; Cz = - (1-mu)*z/rone3 - mu*z/rtwo3; Cxp = -2*xp; Cyp = -2*yp; Czp = -2*zp; f[0] = xp; f[1] = yp; f[2] = zp; #ifdef NEGATIVE_U f[3] = 2*yp - x + (1-mu)*(x+mu)/rone3 + mu*(x-1+mu)/rtwo3; f[4] = -2*xp - y + (1-mu)*y/rone3 + mu*y/rtwo3; f[5] = (1-mu)*z/rone3 + mu*z/rtwo3; #else f[3] = 2*yp + x - (1-mu)*(x+mu)/rone3 - mu*(x-1+mu)/rtwo3; f[4] = -2*xp + y - (1-mu)*y/rone3 - mu*y/rtwo3; f[5] = - (1-mu)*z/rone3 - mu*z/rtwo3; #endif #ifdef ALL_UNFOLDING f[0] += p*Cx; f[1] += p*Cy; f[2] += p*Cz; f[3] += p*Cxp; f[4] += p*Cyp; f[5] += p*Czp; #else f[3] += p*Cxp; f[4] += p*Cyp; f[5] += p*Czp; #endif return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int stpnt (integer ndim, double t, double *u, double *par) { double mu; mu =0.0; par[0] = mu; par[1] = 0.; u[0] = 0.14107; u[1] = 0.99; u[2] = 0.0; u[3] = 0.0; u[4] = 0.0; u[5] = 0.0; return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int pvls (integer ndim, const double *u, double *par) { integer tmp; extern double getp(); double x, y, z; double xp, yp, zp; double mu; double rone, rtwo; mu = par[0]; x = getp("BV0", 1, u); y = getp("BV0", 2, u); z = getp("BV0", 3, u); xp = getp("BV0", 4, u); yp = getp("BV0", 5, u); zp = getp("BV0", 6, u); rone = sqrt( (x+mu)*(x+mu) + y*y + z*z ); rtwo = sqrt( (x-1+mu)*(x-1+mu) + y*y + z*z ); par[14]=x*x+y*y+2*(1-mu)/rone+2*mu/rtwo-xp*xp-yp*yp-zp*zp; par[15]=y; return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int bcnd () { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int icnd () { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int fopt() { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ auto/07p/demos/python/n-body/compute_lagrange_points_0.5.auto0000640000175000017500000000312713570013207022251 0ustar sksk# This script computes the initial circle of solutions for mu=0 # as well as the bifurcating branches which give us the # Lagrange points. # Load 3d.c and c.3d into the AUTO CLUI # Add a stopping condition so we only compute the loop once # We tell AUTO to stop when parameter 16 is 0.991, parameter 1 is -0.1, # or parameter 1 is 1.1. If parameter1 is 0.5 we just report # a point. # We also want to compute branches for the first 3 bifurcation # points. # IPS=0 tells AUTO to compute a family of equilibria. # Compute the circle. circle = run('3d',UZR={-16:0.991, -1:[-0.1,1.1], 1:0.5}, MXBF=-3, IPS=0) # Extract the 5 Lagrange points for each of the branches # which we will use in later calculations. # This command parses the solution file fort.8 and returns # a Python object which contains all of the data in the # file in an easy to use format. i=0 # For every solution in the fort.8 file... # If the solution is a user defined point... for u in circle('UZ'): # We look at the value of one of the components # to determine which Lagrange point it is. # The solution is a Pointset. In this case there is only # one point, at t=0, accessible via u(0), u[0], or via the # u['U(1)'] and u['U(2)'] arrays. [x]=u['U(1)'] [y]=u['U(2)'] if y > 0.01: # When we determine which Lagrange point we have we save it. u.writeFilename("s.l4") elif y < -0.01: u.writeFilename("s.l5") elif x > 0.01: u.writeFilename("s.l2") elif x < -0.01: u.writeFilename("s.l3") else: u.writeFilename("s.l1") auto/07p/demos/python/n-body/to_matlab.xauto0000640000175000017500000000337013570013207017111 0ustar sksk# This is an example of an 'expert' AUTO CLUI script. # This script takes a set of AUTO data files and produces # files which can be read into Matlab . # For example, the command: # # autox to_matlab.xauto foo bar # # will take the bifurcation diagram file b.foo and produce # the file bar_bifur, and it will take the solution # file s.foo and, for each solution in the file, # produce a file bar_solution_??, where ?? is # the solution label number. # In expert scripts we need to explicitly import the # AUTOclui library from AUTOclui import * # We also import a few general Python utility # libraries. import sys # This function actually performs the decoding of the # AUTO data files. def to_matlab(filename,prefix): # We parse the bifurcation diagram file and solution file. data=loadbd(filename) # The Python object has a method for taking the # data and writing it out as columns, so # we use that here. data.writeRawFilename(prefix+'_bifur') # Next, we write out the solutions by first using data() to get the # solution list. data=data() # The we iterate over each of the solutions in the file # using the loop. for solution in data: # Just like above, the Python object for solutions # has a method for taking the # data and writing it out as columns, so # we use that here. solution.writeRawFilename(prefix+'_solution_'+`solution["Label"]`) # This is the Python syntax for making a script runnable if __name__ == '__main__': # The first argument is the name of the file that # you wish to parse. filename = sys.argv[1] # The second argument is the prefix to use for the # output files. prefix = sys.argv[2] to_matlab(filename,prefix) auto/07p/demos/python/n-body/README0000640000175000017500000000605313570013207014746 0ustar skskThis directory contains example scripts for computing period solutions to the N-body problem. 3d.c: This file contains the equations for the circular restricted 3-body problem in a rotating frame. c.3d: This is the basic AUTO constants file which is read in and modified by all of the scripts. There are two "basic" AUTO command line user interface scripts. Basic AUTO CLUI script are run by typing: auto scriptname Basic AUTO CLUI scripts always end with the suffix ".auto", and they provide access to most, but not all, Python syntax. The also allow the use of non-standard Python syntax such as 'cd /tmp'. In addition, there are two "expert" AUTO CLUI scripts. Expert AUTO CLUI script are run by typing: autox scriptname Expert AUTO CLUI scripts always end with the suffix ".autox". Expert AUTO CLUI scripts provide access to the full capabilities of the Python language, at the expense of a slightly more cumbersome syntax. For example, the non-standard Python syntax 'cd /tmp' is not allowed, and must be replaced with 'cd ('/tmp')'. Also, the AUTO CLUI libraries must be explicitly included using the command 'from AUTOclui import *'. ------------------------------------------------------------ compute_lagrange_points_family.auto: This is a basic script which computes and plots all of the lagrange points as a function of the ratio of the masses of the two planets. compute_lagrange_points_0.5.auto: This is a basic script which computes all of the lagrange points for the case where the masses of the two planets are equal, and saves the data. This script is used to compute starting data for the compute_periodic_family.xauto script. compute_periodic_family.xauto: NOTE: This script depends on the results of the compute_lagrange_points_0.5.auto script, so that script must be run before this script is used. This is an expert script which starts at a lagrange point computed by compute_lagrange_points_0.5.auto and continues in the ratio of the masses until a specified mass ratio is reached. It then computes a family of periodic orbits for each pair of purely complex eigenvalues. Finally, for each bifurcation point detected on the primary branch a bifurcating branch is also computed. E.g. the command autox compute_periodic_family.xauto l1 0.0123 computes families of periodic orbits emanating from l1 for mass ratio 0.0123. To run the same problem with branch switching do: autox -- compute_periodic_family.xauto -b l1 0.0123 to_matlab.xauto: This script takes a set of AUTO data files and creates a set of files formatted for importing into Matlab for either plotting or further calculations. E.g. the command autox to_matlab.xauto foo bar will take the solution file 's.foo' and bifurcation diagram file 'b.foo' and create the following files: 'bar_bifur' : This files contains the bifurcation diagram from 'b.foo' 'bar_solution_??' : These files each contain one solution from the file 's.foo'. The '??' is replaced with the solution label number. auto/07p/demos/python/demo2.auto0000750000175000017500000000066213570013207014600 0ustar skskdemo('bvp') bvp = run('bvp') branchpoints = bvp("BP") for solution in branchpoints: bp = load(solution, ISW=-1, NTST=50) # Compute forwards print "Solution label", bp["LAB"], "forwards" fw = run(bp) # Compute backwards print "Solution label", bp["LAB"], "backwards" bw = run(bp,DS='-') both = fw + bw merged = merge(both) bvp = bvp + merged bvp=relabel(bvp) save(bvp, 'bvp') plot(bvp) wait() auto/07p/demos/python/demo1.auto0000750000175000017500000000011413570013207014567 0ustar skskdemo('ab') ab = load(equation='ab') ab = load(ab, constants='ab.1') run(ab) auto/07p/demos/python/branches.auto0000640000175000017500000000103613570013207015351 0ustar sksk# get and run the ab demo demo('ab') auto('ab.auto') # load data from b.ab, s.ab, and d.ab ab = loadbd('ab') # change the branch number to either 1 or 2 depending on IPS for branch in ab: branch['BR'] = branch.c['IPS'] # delete the last branch del ab[-1] # subtract the first branch from all other branches with respect to PAR(1) ab = subtract(ab, ab, 'PAR(1)') # plot the branches, coloring by branch number plot(ab, coloring_method='branch', color_list='black red') wait() # save data to b.abnew, s.abnew, and d.abnew save(ab, 'abnew') auto/07p/demos/abcb/0000750000175000017500000000000013570013207012237 5ustar skskauto/07p/demos/abcb/clean.auto0000640000175000017500000000040413570013207014212 0ustar sksk #=============== # AUTO Demo abcb #=============== pgm="abcb" print "\n***Clean the directory***" dl(pgm+'.1') dl(pgm+'.2') dl(pgm+'.3.sw') dl(pgm+'.3.fw') dl(pgm+'.3.bw') dl(pgm+'.4.fw') dl(pgm+'.4.bw') dl(pgm+'.5.sw') dl(pgm+'.5.fw') dl(pgm+'.5.bw') cl() auto/07p/demos/abcb/abcb.auto0000640000175000017500000000234313570013207014023 0ustar sksk #================================ # AUTO demo abcb # BPCONT for generic periodic BVP #================================ pgm="abcb" ld(pgm) print "\n***"+pgm+": run 1: equilibrium continuation***" r1=run(sv=pgm+'.1') print "\n***"+pgm+": run 2: cycle continuation***" r2=run(r1('HB1'),IPS=2,ICP=[1,11],IPLT=1,sv=pgm+'.2') print "\n***"+pgm+": run 3: switch to LP continuation***" sw3=run(r2('LP1'),ICP=[1,2,11],ISW=2,IPLT=0,NPR=10,sv=pgm+'.3.sw') print "\n***"+pgm+": run 3: LP continuation (fw)***" sw3=load(sw3,ICP=[2,1,11],NMX=50,RL1=10.0) run(sw3,sv=pgm+'.3.fw') print "\n***"+pgm+": run 3: LP continuation (bw)***" sb3=run(sw3,DS='-',sv=pgm+'.3.bw') print "\n***"+pgm+": run 4: cycle continuation (bw)***" sb4=run(sb3('LP1'),ICP=[1,11],ISW=1,NMX=10,NPR=2,sv=pgm+'.4.bw') print "\n***"+pgm+": run 4: cycle continuation (fw)***" sf4=run(sb4('EP1'),ITMX=10,DS='-',sv=pgm+'.4.fw') print "\n***"+pgm+": run 5: switch to BP continuation***" sw5=run(sf4('BP1'),ICP=[1,2,3,11],ISW=3,NMX=50,NPR=10,ISP=1, DS=0.001,DSMAX=0.01,sv=pgm+'.5.sw') print "\n***"+pgm+": run 5: BP continuation (fw)***" run(sw5,sv=pgm+'.5.fw') print "\n***"+pgm+": run 5: BP continuation (bw)***" run(sw5,DS='-',sv=pgm+'.5.bw') print "\n***Clean the directory***" cl() auto/07p/demos/abcb/c.abcb0000640000175000017500000000054513570013207013277 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 20, MXBF= 0, IID = 2, ITMX= 8, ITNW= 7, NWTN= 5, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.01, DSMIN= 1e-10, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {1: 1.0} auto/07p/demos/abcb/abcb.f900000640000175000017500000000406613570013207013455 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Example 3: The A->B->C chemical reaction !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION x1,x2,x3,d,alpha,beta,b,s,e,x1c x1 = U(1) x2 = U(2) x3 = U(3) d = PAR(1) alpha = PAR(2) beta = PAR(3) b = PAR(4) s = PAR(5) e = dexp(X3) x1c = 1 - X1 F(1) = -x1 + d*x1c*e F(2) = -x2 + d*e*(x1c - s*x2) F(3) = -x3 - beta*x3 + d*b*e*(x1c + alpha*s*x2) IF(IJAC.EQ.0)RETURN DFDU(1,1) = -1.D0 - d*e DFDU(1,2) = 0.D0 DFDU(1,3) = d*x1c*e DFDU(2,1) = -d*e DFDU(2,2) = -1.D0 - d*e*s DFDU(2,3) = d*e*(x1c - s*x2) DFDU(3,1) = -d*b*e DFDU(3,2) = d*b*e*alpha*s DFDU(3,3) = -1.D0 - beta + d*b*e*(x1c + alpha*s*x2) IF(IJAC.EQ.1)RETURN DFDP(1,1) = x1c*e DFDP(1,2) = 0.D0 DFDP(1,3) = 0.D0 DFDP(1,4) = 0.D0 DFDP(1,5) = 0.D0 DFDP(2,1) = e*(x1c - s*x2) DFDP(2,2) = 0.D0 DFDP(2,3) = 0.D0 DFDP(2,4) = 0.D0 DFDP(2,5) = -d*e*x2 DFDP(3,1) = b*e*(x1c + alpha*s*x2) DFDP(3,2) = d*b*e*s*x2 DFDP(3,3) = -x3 DFDP(3,4) = d*e*(x1c + alpha*s*x2) DFDP(3,5) = d*b*e*alpha*x2 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, INTENT(OUT) :: U(NDIM), PAR(*) PAR(1:5)=(/0.0,1.0,1.55,8.,0.04/) U(1:3)=0. END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/opt/0000750000175000017500000000000013570013207012152 5ustar skskauto/07p/demos/opt/c.opt0000640000175000017500000000054313570013207013123 0ustar skskNDIM= 1, IPS = 5, IRS = 0, ILP = 1 ICP = [10, 1, 2, 3, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 25, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/opt/clean.auto0000640000175000017500000000017313570013207014130 0ustar sksk #============== # AUTO Demo opt #============== print "\n***Clean the directory***" dl('1') dl('2') dl('3') dl('4') cl() auto/07p/demos/opt/opt.auto0000640000175000017500000000100713570013207013645 0ustar sksk #============== # AUTO Demo opt #============== pgm = "opt" print "\nDemo %s is started"%pgm print "\n%s : first run : one free equation parameter"%pgm r1 = run(e=pgm,c=pgm) save(r1,'1') print "\n%s : second run : two free equation parameters"%pgm r2 = run(r1("LP1")) save(r2,'2') print "\n%s : third run : three free equation parameters"%pgm r3 = run(r2("LP1")) save(r3,'3') print "\n%s : fourth run : four free equation parameters"%pgm r4 = run(r3("LP1")) save(r4,'4') print "\n***Clean the directory***" cl() auto/07p/demos/opt/c.opt.30000640000175000017500000000054313570013207013264 0ustar skskNDIM= 1, IPS = 5, IRS = 4, ILP = 1 ICP = [10, 1, 2, 3, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 25, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/opt/c.opt.10000640000175000017500000000054313570013207013262 0ustar skskNDIM= 1, IPS = 5, IRS = 0, ILP = 1 ICP = [10, 1, 2, 3, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 25, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/opt/c.opt.20000640000175000017500000000054313570013207013263 0ustar skskNDIM= 1, IPS = 5, IRS = 2, ILP = 1 ICP = [10, 1, 2, 3, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 25, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/opt/opt.f900000640000175000017500000000446613570013207013307 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! opt : A model algebraic optimization problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION X1,X2,X3,X4,X5 X1=U(1) X2=PAR(1) X3=PAR(2) X4=PAR(3) X5=PAR(4) F(1)=X1*X1 + X2*X2 + X3*X3 + X4*X4 + X5*X5 - 1 IF(IJAC.EQ.0)RETURN DFDU(1,1)=2*X1 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=2*X2 DFDP(1,2)=2*X3 DFDP(1,3)=2*X4 DFDP(1,4)=2*X5 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION X1,X2,X3,X4,X5 X1=1.0 X2=0.0 X3=0.0 X4=0.0 X5=0.0 U(1)=X1 PAR(1)=X2 PAR(2)=X3 PAR(3)=X4 PAR(4)=X5 END SUBROUTINE STPNT SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FS DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) DOUBLE PRECISION X1,X2,X3,X4,X5 X1=U(1) X2=PAR(1) X3=PAR(2) X4=PAR(3) X5=PAR(4) FS=X1 + X2 + X3 + X4 + X5 IF(IJAC.EQ.0)RETURN DFDU(1)=1.0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1)=1.0 DFDP(2)=1.0 DFDP(3)=1.0 DFDP(4)=1.0 END SUBROUTINE FOPT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/opt/c.opt.40000640000175000017500000000054313570013207013265 0ustar skskNDIM= 1, IPS = 5, IRS = 6, ILP = 1 ICP = [10, 1, 2, 3, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 25, NPR= 25, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/nep/0000750000175000017500000000000013570013207012132 5ustar skskauto/07p/demos/nep/c.nep.10000640000175000017500000000060313570013207013217 0ustar skskNDIM= 3, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 3, NBC= 4, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 2, THL = {}, THU = {} UZR = {1: [2.0, 4.0, 6.0, 8.0]} UZSTOP = {1: 10.0} auto/07p/demos/nep/nep.f900000640000175000017500000000357013570013207013242 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! nep : A nonlinear ODE eigenvalue problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1) = U(2) F(2) = -PAR(2)*U(1) F(3) = -U(2)**2/2 - PAR(2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 PAR(2)=0 U(1)=0.0 U(2)=0.0 U(3)=0.0 END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) FB(3)=U0(3) - PAR(1) FB(4)=U1(3) + PAR(1) END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- auto/07p/demos/nep/c.nep0000640000175000017500000000060313570013207013060 0ustar skskNDIM= 3, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 3, NBC= 4, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 2, THL = {}, THU = {} UZR = {1: [2.0, 4.0, 6.0, 8.0]} UZSTOP = {1: 10.0} auto/07p/demos/nep/clean.auto0000640000175000017500000000014513570013207014107 0ustar sksk #============== # AUTO Demo nep #============== print "\n***Clean the directory***" dl('nep') cl() auto/07p/demos/nep/c.nep.20000640000175000017500000000060313570013207013220 0ustar skskNDIM= 3, IPS = 4, IRS = 4, ILP = 1 ICP = [1, 2] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 3, NBC= 4, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 2, THL = {}, THU = {} UZR = {1: [2.0, 4.0, 6.0, 8.0]} UZSTOP = {1: 10.0} auto/07p/demos/nep/nep.auto0000640000175000017500000000046513570013207013614 0ustar sksk #============== # AUTO Demo nep #============== print "\n***Compute the basic solution family***" nep = run(e='nep',c='nep.1') print "\n***Compute bifurcating solution families***" for solution in nep('BP'): nep = nep + run(solution,c='nep.2') save(nep,'nep') print "\n***Clean the directory***" cl() auto/07p/demos/nep/plaut04.rc0000640000175000017500000000700013570013207013747 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 5 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/exp/0000750000175000017500000000000013570013207012144 5ustar skskauto/07p/demos/exp/clean.auto0000640000175000017500000000014513570013207014121 0ustar sksk #============== # AUTO Demo exp #============== print "\n***Clean the directory***" dl('exp') cl() auto/07p/demos/exp/plaut04.rc0000640000175000017500000001163413570013207013771 0ustar sksk#version 0.0 ############################### # Primary settings ############################### # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Choose 3D or 2D graph for the solution diagram: 3DSol = No # Choose 3D or 2D graph for the bifurcation diagram: 3DBif = No # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Set coloring method: # -7 --- BRANCH # -6 --- STABILITY # -5 --- POINT # -4 --- CURVE # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. # For the solution diagram: Coloring Method Solution = -2 # For the bifurcation diagram: Coloring Method Bifurcation = -2 # Initialize the default graph style: # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Initialize the default options: Draw Reference Plane = No Draw Reference Sphere = No Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes Show Label Numbers = No Draw Legend = No # Labeled solutions: # -3 = Show all labeled solutions # -2 = Show HALF labeled solutions # -1 = Show SPEC labeled solutions # 0 = Show NONE of the solutions # Otherwise, show the specified solution(s) Labels = -3 # Colors are represented by RGB values from 0 to 1.0. # Background color: Background Color = 0., 0., 0. # Background transparency ([0.0, 1.0]): Background Transparency = 0.9 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 ############################### # Secondary settings ############################### # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Unstable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Surface color: Surface Color = 0.0, 1.0, 0.0 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP ALG = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Draw Scale: Draw Scale = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead # 4 --- always at origin Coordinate Type = 3 # Set the radius of the spheres used for labels: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Label Sphere Radius = 1.0 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Set the maximum and minimum animation speed: Object Animation Speed = 50 Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Animation Speed = 50 Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Disk Rotation Disk Rotation = 1.000000, 0.000000, 0.000000, 1.570796 # Disk Position Disk Position = 0.000000, 0.000000, 0.000000 # Disk Radius Disk Radius = 1.000000 # Disk Height Disk Height = 0.001000 # Disk Transparency [0, 1] Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Sphere Position Sphere Position = 0.000000, 0.000000, 0.000000 # Sphere Radius Sphere Radius = 1.000000 # Sphere Transparency [0, 1] Sphere Transparency = 0.7 # Read Sphere From File Sphere From File = No # Set the active AUTO parameter indices: parameter ID = 10 # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/exp/autorc0000640000175000017500000001435513570013207013375 0ustar sksk[AUTO_plotter] ############################ # active settings ############################ # Variable name to use instead of 't' for solutions. solution_indepvarname = "x" # A dictionary mapping names to axis labels. labelnames = {"x": "$x$", "u": "$u$", "v": "$v$", "lambda": "$\lambda$", "INTEGRAL u": "Integral $u$", "MAX u": "max $u$", "MAX v": "max $v$"} # The type of the plot, either "solution" or "bifurcation" type = "bifurcation" # The column to plot along the X-axis for bifurcation diagrams. bifurcation_x = ["lambda"] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ["INTEGRAL u"] # The column to plot along the Z-axis for bifurcation diagrams. bifurcation_z = None # The column to plot along the X-axis for solutions. solution_x = ["x"] # The column to plot along the Y-axis for solutions. solution_y = ["u"] # The column to plot along the Z-axis for solutions. solution_z = None # A list of colors to use for multiple plots. color_list = "red red red blue blue blue blue blue blue blue blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). coloring_method = "branch" # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). default_option="d1" d1 = {"grid": "yes", "use_labels": 0, "use_symbols": 1, "stability": 0} d2 = {"grid": "yes", "use_labels": 1, "use_symbols": 1, "stability": 0} # similarly you can redefine d0, d2, d3, d4. # The font size for the x-axis label. xlabel_fontsize = 16 # The font size for the y-axis label. ylabel_fontsize = 16 # The font size for the z-axis label. zlabel_fontsize = 16 # Azimuth of the axes in 3D plots, in degrees. azimuth = -120 # Elevation of the axes in 3D plots, in degrees. elevation = 25 # Whether to use letters (True) or symbols (False) for special points. letter_symbols = False ############################ # inactive settings ############################ # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/exp/exp.f900000640000175000017500000000352013570013207013261 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! exp : A boundary value problem (Bratu's equation) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)= U(2) F(2)=-PAR(1) * EXP(U(1)) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- auto/07p/demos/exp/c.exp.20000640000175000017500000000060513570013207013246 0ustar skskNDIM= 2, IPS = 4, IRS = 15, ILP = 1 ICP = ['lambda'] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 3, NBC= 2, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {'lambda': [0.5, 1.0, 1.5, 2.0, 2.5, 3.0]} auto/07p/demos/exp/exp.auto0000640000175000017500000000036113570013207013633 0ustar sksk #============== # AUTO Demo exp #============== print "\n***Compute a solution family***" r1=run(e='exp',c='exp') print "\n***Restart the solution family***" r2=run(r1,NTST=20) save(r1+r2,'exp') print "\n***Clean the directory***" cl() auto/07p/demos/exp/c.exp.10000640000175000017500000000067013570013207013247 0ustar skskunames = {1: 'u', 2: 'v'} parnames = {1: 'lambda'} NDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = ['lambda'] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 3, NBC= 2, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {'lambda': [0.5, 1.0, 1.5, 2.0, 2.5, 3.0]} auto/07p/demos/exp/c.exp0000640000175000017500000000067013570013207013110 0ustar skskunames = {1: 'u', 2: 'v'} parnames = {1: 'lambda'} NDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = ['lambda'] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 3, NBC= 2, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {'lambda': [0.5, 1.0, 1.5, 2.0, 2.5, 3.0]} auto/07p/demos/rev/0000750000175000017500000000000013570013207012144 5ustar skskauto/07p/demos/rev/c.rev.40000640000175000017500000000062213570013207013247 0ustar skskNDIM= 4, IPS = 9, IRS = 2, ILP = 1 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.02, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: [-1.0, 0.0, 1.0, 1.6, 1.7]} IEQUIB = 0 IREV = [1,0,1,0] auto/07p/demos/rev/clean.auto0000640000175000017500000000015313570013207014120 0ustar sksk#============== # AUTO Demo rev #============== print "\n***Clean the directory***" dl("1") dl("3") cl() auto/07p/demos/rev/c.rev.10000640000175000017500000000066013570013207013246 0ustar skskdat='rev.dat.1' PAR={11:39.0448429} NDIM= 4, IPS = 9, IRS = 0, ILP = 1 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 20, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.05, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: [1.6, 1.7, 1.8, 1.9]} IEQUIB = 0 IREV = [0,1,0,1] auto/07p/demos/rev/rev.dat.30000640000175000017500000010326613570013207013604 0ustar sksk 0.00000000E+00 -0.21401640E-05 0.36101460E-05 0.44234208E-05 -0.81252907E-06 0.25000000E-02 -0.16810916E-05 0.41277270E-05 0.42916954E-05 -0.14134205E-05 0.50000000E-02 -0.11617217E-05 0.46253907E-05 0.40870756E-05 -0.20404971E-05 0.75000000E-02 -0.58493617E-06 0.50943227E-05 0.38068687E-05 -0.26866475E-05 0.10000000E-01 0.45320285E-07 0.55254411E-05 0.34492755E-05 -0.33439277E-05 0.12500000E-01 0.72401550E-06 0.59095083E-05 0.30134857E-05 -0.40036126E-05 0.15000000E-01 0.14450183E-05 0.62372539E-05 0.24997674E-05 -0.46562622E-05 0.17500000E-01 0.22011025E-05 0.64995070E-05 0.19095466E-05 -0.52918036E-05 0.20000000E-01 0.29839669E-05 0.66873381E-05 0.12454771E-05 -0.58996292E-05 0.22500000E-01 0.37842728E-05 0.67922082E-05 0.51149681E-06 -0.64687092E-05 0.25000000E-01 0.45916995E-05 0.68061238E-05 -0.28712891E-06 -0.69877200E-05 0.27500000E-01 0.53950183E-05 0.67217959E-05 -0.11437813E-05 -0.74451867E-05 0.30000000E-01 0.61821855E-05 0.65328016E-05 -0.20504790E-05 -0.78296384E-05 0.32500000E-01 0.69404552E-05 0.62337450E-05 -0.29978887E-05 -0.81297763E-05 0.35000000E-01 0.76565100E-05 0.58204161E-05 -0.39753556E-05 -0.83346517E-05 0.37500000E-01 0.83166111E-05 0.52899445E-05 -0.49709564E-05 -0.84338534E-05 0.40000000E-01 0.89067660E-05 0.46409459E-05 -0.59715741E-05 -0.84177010E-05 0.42500000E-01 0.94129131E-05 0.38736578E-05 -0.69629968E-05 -0.82774436E-05 0.45000000E-01 0.98211209E-05 0.29900624E-05 -0.79300394E-05 -0.80054597E-05 0.47500000E-01 0.10117802E-04 0.19939941E-05 -0.88566897E-05 -0.75954565E-05 0.50000000E-01 0.10289939E-04 0.89122696E-06 -0.97262775E-05 -0.70426650E-05 0.52500000E-01 0.10325316E-04 -0.31045771E-06 -0.10521667E-04 -0.63440287E-05 0.55000000E-01 0.10212763E-04 -0.16012289E-05 -0.11225469E-04 -0.54983813E-05 0.57500000E-01 0.99423985E-05 -0.29691896E-05 -0.11820279E-04 -0.45066112E-05 0.60000000E-01 0.95058732E-05 -0.44003894E-05 -0.12288924E-04 -0.33718085E-05 0.62500000E-01 0.88966131E-05 -0.58788682E-05 -0.12614736E-04 -0.20993912E-05 0.65000000E-01 0.81100527E-05 -0.73867328E-05 -0.12781833E-04 -0.69720802E-06 0.67500000E-01 0.71438584E-05 -0.89042667E-05 -0.12775411E-04 0.82438722E-06 0.70000000E-01 0.59981364E-05 -0.10410077E-04 -0.12582047E-04 0.24524914E-05 0.72500000E-01 0.46756210E-05 -0.11881274E-04 -0.12189998E-04 0.41716418E-05 0.75000000E-01 0.31818397E-05 -0.13293691E-04 -0.11589508E-04 0.59638424E-05 0.77500000E-01 0.15252500E-05 -0.14622137E-04 -0.10773101E-04 0.78086291E-05 0.80000000E-01 -0.28265560E-06 -0.15840681E-04 -0.97358710E-05 0.96831760E-05 0.82500000E-01 -0.22272811E-05 -0.16922981E-04 -0.84757517E-05 0.11562445E-04 0.85000000E-01 -0.42908982E-05 -0.17842625E-04 -0.69937688E-05 0.13419377E-04 0.87500000E-01 -0.64526607E-05 -0.18573522E-04 -0.52942661E-05 0.15225134E-04 0.90000000E-01 -0.86886663E-05 -0.19090300E-04 -0.33850998E-05 0.16949375E-04 0.92500000E-01 -0.10972067E-04 -0.19368737E-04 -0.12777983E-05 0.18560587E-04 0.95000000E-01 -0.13273231E-04 -0.19386202E-04 0.10123207E-05 0.20026450E-04 0.97500000E-01 -0.15559960E-04 -0.19122107E-04 0.34660778E-05 0.21314247E-04 0.10000000E+00 -0.17797758E-04 -0.18558374E-04 0.60604115E-05 0.22391314E-04 0.10250000E+00 -0.19950153E-04 -0.17679884E-04 0.87684122E-05 0.23225515E-04 0.10500000E+00 -0.21979081E-04 -0.16474938E-04 0.11559415E-04 0.23785754E-04 0.10750000E+00 -0.23845313E-04 -0.14935688E-04 0.14399154E-04 0.24042513E-04 0.11000000E+00 -0.25508940E-04 -0.13058554E-04 0.17249985E-04 0.23968402E-04 0.11250000E+00 -0.26929898E-04 -0.10844607E-04 0.20071166E-04 0.23538727E-04 0.11500000E+00 -0.28068544E-04 -0.82999177E-05 0.22819215E-04 0.22732057E-04 0.11750000E+00 -0.28886270E-04 -0.54358567E-05 0.25448332E-04 0.21530795E-04 0.12000000E+00 -0.29346138E-04 -0.22693408E-05 0.27910881E-04 0.19921732E-04 0.12250000E+00 -0.29413559E-04 0.11769810E-05 0.30157947E-04 0.17896580E-04 0.12500000E+00 -0.29056976E-04 0.48746119E-05 0.32139951E-04 0.15452478E-04 0.12750000E+00 -0.28248560E-04 0.87891676E-05 0.33807318E-04 0.12592458E-04 0.13000000E+00 -0.26964909E-04 0.12880419E-04 0.35111202E-04 0.93258547E-05 0.13250000E+00 -0.25187734E-04 0.17102425E-04 0.36004257E-04 0.56686669E-05 0.13500000E+00 -0.22904522E-04 0.21403756E-04 0.36441446E-04 0.16438381E-05 0.13750000E+00 -0.20109171E-04 0.25727819E-04 0.36380873E-04 -0.27185350E-05 0.14000000E+00 -0.16802578E-04 0.30013281E-04 0.35784644E-04 -0.73810851E-05 0.14250000E+00 -0.12993171E-04 0.34194593E-04 0.34619730E-04 -0.12299153E-04 0.14500000E+00 -0.86973712E-05 0.38202619E-04 0.32858829E-04 -0.17420871E-04 0.14750000E+00 -0.39399789E-05 0.41965368E-04 0.30481208E-04 -0.22687359E-04 0.15000000E+00 0.12455377E-05 0.45408817E-04 0.27473520E-04 -0.28033037E-04 0.15250000E+00 0.68168549E-05 0.48457839E-04 0.23830574E-04 -0.33386061E-04 0.15500000E+00 0.12722722E-04 0.51037209E-04 0.19556044E-04 -0.38668881E-04 0.15750000E+00 0.18903012E-04 0.53072696E-04 0.14663109E-04 -0.43798932E-04 0.16000000E+00 0.25288910E-04 0.54492223E-04 0.91749981E-05 -0.48689445E-04 0.16250000E+00 0.31803239E-04 0.55227087E-04 0.31254375E-05 -0.53250387E-04 0.16500000E+00 0.38360936E-04 0.55213225E-04 -0.34410264E-05 -0.57389521E-04 0.16750000E+00 0.44869677E-04 0.54392510E-04 -0.10468833E-04 -0.61013581E-04 0.17000000E+00 0.51230660E-04 0.52714061E-04 -0.17891361E-04 -0.64029551E-04 0.17250000E+00 0.57339543E-04 0.50135551E-04 -0.25631037E-04 -0.66346042E-04 0.17500000E+00 0.63087535E-04 0.46624492E-04 -0.33599617E-04 -0.67874756E-04 0.17750000E+00 0.68362635E-04 0.42159473E-04 -0.41698643E-04 -0.68532010E-04 0.18000000E+00 0.73051017E-04 0.36731338E-04 -0.49820080E-04 -0.68240323E-04 0.18250000E+00 0.77038553E-04 0.30344272E-04 -0.57847151E-04 -0.66930022E-04 0.18500000E+00 0.80212450E-04 0.23016782E-04 -0.65655358E-04 -0.64540876E-04 0.18750000E+00 0.82463000E-04 0.14782540E-04 -0.73113700E-04 -0.61023705E-04 0.19000000E+00 0.83685427E-04 0.56910757E-05 -0.80086075E-04 -0.56341957E-04 0.19250000E+00 0.83781796E-04 -0.41917146E-05 -0.86432869E-04 -0.50473231E-04 0.19500000E+00 0.82662973E-04 -0.14783251E-04 -0.92012722E-04 -0.43410704E-04 0.19750000E+00 0.80250618E-04 -0.25984176E-04 -0.96684454E-04 -0.35164441E-04 0.20000000E+00 0.76479163E-04 -0.37678501E-04 -0.10030914E-03 -0.25762568E-04 0.20250000E+00 0.71297767E-04 -0.49733999E-04 -0.10275231E-03 -0.15252267E-04 0.20500000E+00 0.64672206E-04 -0.62002870E-04 -0.10388626E-03 -0.37005718E-05 0.20750000E+00 0.56586664E-04 -0.74322688E-04 -0.10359246E-03 0.88050645E-05 0.21000000E+00 0.47045401E-04 -0.86517628E-04 -0.10176395E-03 0.22156453E-04 0.21250000E+00 0.36074252E-04 -0.98399990E-04 -0.98307869E-04 0.36224634E-04 0.21500000E+00 0.23721933E-04 -0.10977201E-03 -0.93147850E-04 0.50860141E-04 0.21750000E+00 0.10061112E-04 -0.12042798E-03 -0.86226453E-04 0.65893582E-04 0.22000000E+00 -0.48107862E-05 -0.13015659E-03 -0.77507469E-04 0.81136563E-04 0.22250000E+00 -0.20771072E-04 -0.13874362E-03 -0.66978100E-04 0.96382954E-04 0.22500000E+00 -0.37671615E-04 -0.14597483E-03 -0.54650972E-04 0.11141052E-03 0.22750000E+00 -0.55339021E-04 -0.15163905E-03 -0.40565931E-04 0.12598290E-03 0.23000000E+00 -0.73575198E-04 -0.15553154E-03 -0.24791582E-04 0.13985196E-03 0.23250000E+00 -0.92158321E-04 -0.15745747E-03 -0.74265263E-05 0.15276052E-03 0.23500000E+00 -0.11084422E-03 -0.15723553E-03 0.11399736E-04 0.16444536E-03 0.23750000E+00 -0.12936820E-03 -0.15470163E-03 0.31526293E-04 0.17464061E-03 0.24000000E+00 -0.14744731E-03 -0.14971264E-03 0.52760720E-04 0.18308145E-03 0.24250000E+00 -0.16478305E-03 -0.14215009E-03 0.74879433E-04 0.18950800E-03 0.24500000E+00 -0.18106451E-03 -0.13192387E-03 0.97628528E-04 0.19366957E-03 0.24750000E+00 -0.19597195E-03 -0.11897570E-03 0.12072511E-03 0.19532896E-03 0.25000000E+00 -0.20918078E-03 -0.10328248E-03 0.14385920E-03 0.19426703E-03 0.25250000E+00 -0.22036588E-03 -0.84859400E-04 0.16669609E-03 0.19028726E-03 0.25500000E+00 -0.22920638E-03 -0.63762641E-04 0.18887934E-03 0.18322042E-03 0.25750000E+00 -0.23539059E-03 -0.40091797E-04 0.21003431E-03 0.17292915E-03 0.26000000E+00 -0.23862133E-03 -0.13991780E-04 0.22977215E-03 0.15931244E-03 0.26250000E+00 -0.23862136E-03 0.14345752E-04 0.24769441E-03 0.14230994E-03 0.26500000E+00 -0.23513899E-03 0.44681562E-04 0.26339808E-03 0.12190601E-03 0.26750000E+00 -0.22795374E-03 0.76728607E-04 0.27648116E-03 0.98133427E-04 0.27000000E+00 -0.21688200E-03 0.11015251E-03 0.28654856E-03 0.71076700E-04 0.27250000E+00 -0.20178257E-03 0.14457276E-03 0.29321841E-03 0.40874836E-04 0.27500000E+00 -0.18256204E-03 0.17956465E-03 0.29612869E-03 0.77235737E-05 0.27750000E+00 -0.15917985E-03 0.21466204E-03 0.29494404E-03 -0.28123055E-04 0.28000000E+00 -0.13165303E-03 0.24936095E-03 0.28936273E-03 -0.66351893E-04 0.28250000E+00 -0.10006040E-03 0.28312394E-03 0.27912370E-03 -0.10659062E-03 0.28500000E+00 -0.64546285E-04 0.31538538E-03 0.26401350E-03 -0.14840858E-03 0.28750000E+00 -0.25323460E-04 0.34555745E-03 0.24387317E-03 -0.19131852E-03 0.29000000E+00 0.17324588E-04 0.37303707E-03 0.21860476E-03 -0.23477928E-03 0.29250000E+00 0.63042300E-04 0.39721345E-03 0.18817753E-03 -0.27819953E-03 0.29500000E+00 0.11140162E-03 0.41747641E-03 0.15263363E-03 -0.32094242E-03 0.29750000E+00 0.16190260E-03 0.43322538E-03 0.11209318E-03 -0.36233143E-03 0.30000000E+00 0.21397508E-03 0.44387884E-03 0.66758542E-04 -0.40165703E-03 0.30250000E+00 0.26698154E-03 0.44888437E-03 0.16917848E-04 -0.43818457E-03 0.30500000E+00 0.32022119E-03 0.44772890E-03 -0.37052583E-04 -0.47116300E-03 0.30750000E+00 0.37293522E-03 0.43994932E-03 -0.94686843E-04 -0.49983453E-03 0.31000000E+00 0.42431338E-03 0.42514313E-03 -0.15542926E-03 -0.52344520E-03 0.31250000E+00 0.47350178E-03 0.40297899E-03 -0.21863550E-03 -0.54125618E-03 0.31500000E+00 0.51961201E-03 0.37320713E-03 -0.28357509E-03 -0.55255572E-03 0.31750000E+00 0.56173131E-03 0.33566937E-03 -0.34943535E-03 -0.55667163E-03 0.32000000E+00 0.59893409E-03 0.29030852E-03 -0.41532684E-03 -0.55298421E-03 0.32250000E+00 0.63029441E-03 0.23717712E-03 -0.48029040E-03 -0.54093935E-03 0.32500000E+00 0.65489944E-03 0.17644519E-03 -0.54330566E-03 -0.52006175E-03 0.32750000E+00 0.67186382E-03 0.10840693E-03 -0.60330121E-03 -0.48996798E-03 0.33000000E+00 0.68034474E-03 0.33486064E-04 -0.65916622E-03 -0.45037924E-03 0.33250000E+00 0.67955751E-03 -0.47760199E-04 -0.70976363E-03 -0.40113357E-03 0.33500000E+00 0.66879161E-03 -0.13463895E-03 -0.75394464E-03 -0.34219733E-03 0.33750000E+00 0.64742674E-03 -0.22632108E-03 -0.79056463E-03 -0.27367570E-03 0.34000000E+00 0.61494899E-03 -0.32184282E-03 -0.81850011E-03 -0.19582192E-03 0.34250000E+00 0.57096660E-03 -0.42010926E-03 -0.83666685E-03 -0.10904514E-03 0.34500000E+00 0.51522517E-03 -0.51990014E-03 -0.84403869E-03 -0.13916641E-04 0.34750000E+00 0.44762208E-03 -0.61987788E-03 -0.83966705E-03 0.88825941E-04 0.35000000E+00 0.36821984E-03 -0.71859798E-03 -0.82270088E-03 0.19827637E-03 0.35250000E+00 0.27725803E-03 -0.81452177E-03 -0.79240659E-03 0.31335992E-03 0.35500000E+00 0.17516358E-03 -0.90603150E-03 -0.74818797E-03 0.43283593E-03 0.35750000E+00 0.62559149E-04 -0.99144781E-03 -0.68960555E-03 0.55530298E-03 0.36000000E+00 -0.59730708E-04 -0.10690494E-02 -0.61639528E-03 0.67920683E-03 0.36250000E+00 -0.19067586E-03 -0.11370951E-02 -0.52848598E-03 0.80285118E-03 0.36500000E+00 -0.32903959E-03 -0.11938473E-02 -0.42601547E-03 0.92441135E-03 0.36750000E+00 -0.47338060E-03 -0.12375979E-02 -0.30934479E-03 0.10419510E-02 0.37000000E+00 -0.62205806E-03 -0.12666956E-02 -0.17907035E-03 0.11534414E-02 0.37250000E+00 -0.77324001E-03 -0.12795742E-02 -0.36033551E-04 0.12567844E-02 0.37500000E+00 -0.92491526E-03 -0.12747822E-02 0.11867239E-03 0.13498369E-02 0.37750000E+00 -0.10749087E-02 -0.12510129E-02 0.28369881E-03 0.14304394E-02 0.38000000E+00 -0.12209003E-02 -0.12071348E-02 0.45744134E-03 0.14964455E-02 0.38250000E+00 -0.13604478E-02 -0.11422216E-02 0.63804344E-03 0.15457549E-02 0.38500000E+00 -0.14910125E-02 -0.10555819E-02 0.82340382E-03 0.15763472E-02 0.38750000E+00 -0.16099893E-02 -0.94678763E-03 0.10111880E-02 0.15863177E-02 0.39000000E+00 -0.17147391E-02 -0.81570046E-03 0.11988444E-02 0.15739145E-02 0.39250000E+00 -0.18026248E-02 -0.66249676E-03 0.13836244E-02 0.15375755E-02 0.39500000E+00 -0.18710500E-02 -0.48768938E-03 0.15626072E-02 0.14759663E-02 0.39750000E+00 -0.19175000E-02 -0.29214639E-03 0.17327291E-02 0.13880174E-02 0.40000000E+00 -0.19395851E-02 -0.77106132E-04 0.18908172E-02 0.12729604E-02 0.40250000E+00 -0.19350847E-02 0.15581207E-03 0.20336268E-02 0.11303625E-02 0.40500000E+00 -0.19019934E-02 0.40460182E-03 0.21578834E-02 0.96015934E-03 0.40750000E+00 -0.18385668E-02 0.66686879E-03 0.22603285E-02 0.76268419E-03 0.41000000E+00 -0.17433672E-02 0.93983544E-03 0.23377677E-02 0.53869441E-03 0.41250000E+00 -0.16153087E-02 0.12203517E-02 0.23871227E-02 0.28939325E-03 0.41500000E+00 -0.14537002E-02 0.15049119E-02 0.24054855E-02 0.16447083E-04 0.41750000E+00 -0.12582867E-02 0.17896782E-02 0.23901736E-02 -0.27800283E-03 0.42000000E+00 -0.10292863E-02 0.20705110E-02 0.23387871E-02 -0.59133462E-03 0.42250000E+00 -0.76742445E-03 0.23430053E-02 0.22492655E-02 -0.92044661E-03 0.42500000E+00 -0.47396265E-03 0.26025347E-02 0.21199444E-02 -0.12617652E-02 0.42750000E+00 -0.15072184E-03 0.28443019E-02 0.19496105E-02 -0.16112602E-02 0.43000000E+00 0.19990059E-03 0.30633945E-02 0.17375544E-02 -0.19644682E-02 0.43250000E+00 0.57492086E-03 0.32548489E-02 0.14836206E-02 -0.23165238E-02 0.43500000E+00 0.97076672E-03 0.34137179E-02 0.11882525E-02 -0.26621994E-02 0.43750000E+00 0.13832837E-02 0.35351442E-02 0.85253254E-03 -0.29959530E-02 0.44000000E+00 0.18077502E-02 0.36144390E-02 0.47821671E-03 -0.33119849E-02 0.44250000E+00 0.22389028E-02 0.36471627E-02 0.67760897E-04 -0.36043024E-02 0.44500000E+00 0.26709700E-02 0.36292097E-02 -0.37566019E-03 -0.38667917E-02 0.44750000E+00 0.30977177E-02 0.35568940E-02 -0.84814341E-03 -0.40932979E-02 0.45000000E+00 0.35125035E-02 0.34270359E-02 -0.13450574E-02 -0.42777121E-02 0.45250000E+00 0.39083423E-02 0.32370478E-02 -0.18610534E-02 -0.44140634E-02 0.45500000E+00 0.42779811E-02 0.29850180E-02 -0.23900874E-02 -0.44966176E-02 0.45750000E+00 0.46139845E-02 0.26697912E-02 -0.29254544E-02 -0.45199788E-02 0.46000000E+00 0.49088286E-02 0.22910446E-02 -0.34598345E-02 -0.44791947E-02 0.46250000E+00 0.51550039E-02 0.18493572E-02 -0.39853520E-02 -0.43698636E-02 0.46500000E+00 0.53451265E-02 0.13462716E-02 -0.44936471E-02 -0.41882414E-02 0.46750000E+00 0.54720550E-02 0.78434678E-03 -0.49759600E-02 -0.39313474E-02 0.47000000E+00 0.55290139E-02 0.16719959E-03 -0.54232278E-02 -0.35970674E-02 0.47250000E+00 0.55097212E-02 -0.50046536E-03 -0.58261932E-02 -0.31842520E-02 0.47500000E+00 0.54085182E-02 -0.12128397E-02 -0.61755242E-02 -0.26928082E-02 0.47750000E+00 0.52205008E-02 -0.19630102E-02 -0.64619447E-02 -0.21237833E-02 0.48000000E+00 0.49416498E-02 -0.27429735E-02 -0.66763740E-02 -0.14794382E-02 0.48250000E+00 0.45689585E-02 -0.35436679E-02 -0.68100749E-02 -0.76330872E-03 0.48500000E+00 0.41005553E-02 -0.43550233E-02 -0.68548074E-02 0.19746429E-04 0.48750000E+00 0.35358199E-02 -0.51660296E-02 -0.68029881E-02 0.86351377E-03 0.49000000E+00 0.28754891E-02 -0.59648241E-02 -0.66478518E-02 0.17604101E-02 0.49250000E+00 0.21217527E-02 -0.67387982E-02 -0.63836138E-02 0.27014862E-02 0.49500000E+00 0.12783337E-02 -0.74747231E-02 -0.60056309E-02 0.36764513E-02 0.49750000E+00 0.35055430E-03 -0.81588951E-02 -0.55105582E-02 0.46737179E-02 0.50000000E+00 -0.65461779E-03 -0.87772977E-02 -0.48964985E-02 0.56804701E-02 0.50250000E+00 -0.17285425E-02 -0.93157826E-02 -0.41631436E-02 0.66827547E-02 0.50500000E+00 -0.28609033E-02 -0.97602655E-02 -0.33119022E-02 0.76655953E-02 0.50750000E+00 -0.40397273E-02 -0.10096937E-01 -0.23460133E-02 0.86131318E-02 0.51000000E+00 -0.52514307E-02 -0.10312484E-01 -0.12706417E-02 0.95087824E-02 0.51250000E+00 -0.64808916E-02 -0.10394325E-01 -0.92952848E-04 0.10335429E-01 0.51500000E+00 -0.77115511E-02 -0.10330851E-01 0.11778359E-02 0.11075628E-01 0.51750000E+00 -0.89255426E-02 -0.10111668E-01 0.25304298E-02 0.11711836E-01 0.52000000E+00 -0.10103851E-01 -0.97278436E-02 0.39514594E-02 0.12226660E-01 0.52250000E+00 -0.11226502E-01 -0.91721555E-02 0.54255146E-02 0.12603127E-01 0.52500000E+00 -0.12272774E-01 -0.84393258E-02 0.69352103E-02 0.12824961E-01 0.52750000E+00 -0.13221451E-01 -0.75262511E-02 0.84612869E-02 0.12876878E-01 0.53000000E+00 -0.14051084E-01 -0.64322175E-02 0.99827454E-02 0.12744885E-01 0.53250000E+00 -0.14740295E-01 -0.51590966E-02 0.11477019E-01 0.12416589E-01 0.53500000E+00 -0.15268086E-01 -0.37115198E-02 0.12920180E-01 0.11881500E-01 0.53750000E+00 -0.15614182E-01 -0.20970253E-02 0.14287184E-01 0.11131330E-01 0.54000000E+00 -0.15759381E-01 -0.32617481E-03 0.15552152E-01 0.10160290E-01 0.54250000E+00 -0.15685916E-01 0.15873659E-02 0.16688675E-01 0.89653646E-02 0.54500000E+00 -0.15377826E-01 0.36267846E-02 0.17670168E-01 0.75465692E-02 0.54750000E+00 -0.14821334E-01 0.57721229E-02 0.18470237E-01 0.59071861E-02 0.55000000E+00 -0.14005213E-01 0.80003230E-02 0.19063083E-01 0.40539674E-02 0.55250000E+00 -0.12921151E-01 0.10285323E-01 0.19423920E-01 0.19973056E-02 0.55500000E+00 -0.11564099E-01 0.12598202E-01 0.19529419E-01 -0.24863646E-03 0.55750000E+00 -0.99325963E-02 0.14907382E-01 0.19358158E-01 -0.26658387E-02 0.56000000E+00 -0.80290763E-02 0.17178879E-01 0.18891086E-01 -0.52323859E-02 0.56250000E+00 -0.58601292E-02 0.19376612E-01 0.18111979E-01 -0.79224814E-02 0.56500000E+00 -0.34367320E-02 0.21462767E-01 0.17007900E-01 -0.10706518E-01 0.56750000E+00 -0.77442964E-03 0.23398213E-01 0.15569646E-01 -0.13551207E-01 0.57000000E+00 0.21065360E-02 0.25142969E-01 0.13792170E-01 -0.16419774E-01 0.57250000E+00 0.51811556E-02 0.26656721E-01 0.11674983E-01 -0.19272213E-01 0.57500000E+00 0.84196461E-02 0.27899386E-01 0.92225139E-02 -0.22065617E-01 0.57750000E+00 0.11787513E-01 0.28831715E-01 0.64444372E-02 -0.24754572E-01 0.58000000E+00 0.15245688E-01 0.29415932E-01 0.33559391E-02 -0.27291621E-01 0.58250000E+00 0.18750740E-01 0.29616397E-01 -0.22070328E-04 -0.29627802E-01 0.58500000E+00 0.22255173E-01 0.29400300E-01 -0.36628131E-02 -0.31713249E-01 0.58750000E+00 0.25707801E-01 0.28738358E-01 -0.75335756E-02 -0.33497861E-01 0.59000000E+00 0.29054208E-01 0.27605520E-01 -0.11595723E-01 -0.34932026E-01 0.59250000E+00 0.32237294E-01 0.25981663E-01 -0.15804803E-01 -0.35967410E-01 0.59500000E+00 0.35197896E-01 0.23852276E-01 -0.20110747E-01 -0.36557770E-01 0.59750000E+00 0.37875496E-01 0.21209102E-01 -0.24458168E-01 -0.36659824E-01 0.60000000E+00 0.40208997E-01 0.18050752E-01 -0.28786761E-01 -0.36234122E-01 0.60250000E+00 0.42137573E-01 0.14383257E-01 -0.33031817E-01 -0.35245936E-01 0.60500000E+00 0.43601576E-01 0.10220553E-01 -0.37124828E-01 -0.33666135E-01 0.60750000E+00 0.44543504E-01 0.55848950E-02 -0.40994207E-01 -0.31472042E-01 0.61000000E+00 0.44909002E-01 0.50717170E-03 -0.44566098E-01 -0.28648242E-01 0.61250000E+00 0.44647902E-01 -0.49728782E-02 -0.47765288E-01 -0.25187342E-01 0.61500000E+00 0.43715282E-01 -0.10806562E-01 -0.50516194E-01 -0.21090664E-01 0.61750000E+00 0.42072524E-01 -0.16936253E-01 -0.52743940E-01 -0.16368847E-01 0.62000000E+00 0.39688370E-01 -0.23295541E-01 -0.54375489E-01 -0.11042374E-01 0.62250000E+00 0.36539947E-01 -0.29809518E-01 -0.55340839E-01 -0.51419876E-02 0.62500000E+00 0.32613750E-01 -0.36395217E-01 -0.55574261E-01 0.12909853E-02 0.62750000E+00 0.27906565E-01 -0.42962188E-01 -0.55015565E-01 0.82044251E-02 0.63000000E+00 0.22426316E-01 -0.49413235E-01 -0.53611389E-01 0.15535318E-01 0.63250000E+00 0.16192812E-01 -0.55645300E-01 -0.51316491E-01 0.23209773E-01 0.63500000E+00 0.92383836E-02 -0.61550504E-01 -0.48095034E-01 0.31143166E-01 0.63750000E+00 0.16083861E-02 -0.67017339E-01 -0.43921840E-01 0.39240418E-01 0.64000000E+00 -0.66384491E-02 -0.71932001E-01 -0.38783611E-01 0.47396429E-01 0.64250000E+00 -0.15429828E-01 -0.76179871E-01 -0.32680079E-01 0.55496682E-01 0.64500000E+00 -0.24679892E-01 -0.79647125E-01 -0.25625080E-01 0.63418046E-01 0.64750000E+00 -0.34289412E-01 -0.82222465E-01 -0.17647516E-01 0.71029807E-01 0.65000000E+00 -0.44146198E-01 -0.83798955E-01 -0.87921830E-02 0.78194943E-01 0.65250000E+00 -0.54125730E-01 -0.84275950E-01 0.87957287E-03 0.84771675E-01 0.65500000E+00 -0.64092020E-01 -0.83561087E-01 0.11289394E-01 0.90615312E-01 0.65750000E+00 -0.73898716E-01 -0.81572318E-01 0.22341694E-01 0.95580381E-01 0.66000000E+00 -0.83390449E-01 -0.78239954E-01 0.33923698E-01 0.99523035E-01 0.66250000E+00 -0.92404412E-01 -0.73508687E-01 0.45905799E-01 0.10230371E+00 0.66500000E+00 -0.10077219E+00 -0.67339549E-01 0.58142228E-01 0.10378996E+00 0.66750000E+00 -0.10832182E+00 -0.59711773E-01 0.70472072E-01 0.10385940E+00 0.67000000E+00 -0.11488001E+00 -0.50624509E-01 0.82720646E-01 0.10240267E+00 0.67250000E+00 -0.12027465E+00 -0.40098364E-01 0.94701210E-01 0.99326326E-01 0.67500000E+00 -0.12433742E+00 -0.28176709E-01 0.10621701E+00 0.94555413E-01 0.67750000E+00 -0.12690652E+00 -0.14926733E-01 0.11706362E+00 0.88035861E-01 0.68000000E+00 -0.12782959E+00 -0.44020062E-03 0.12703153E+00 0.79736372E-01 0.68250000E+00 -0.12696664E+00 0.15166107E-01 0.13590896E+00 0.69649884E-01 0.68500000E+00 -0.12419301E+00 0.31750296E-01 0.14348475E+00 0.57794550E-01 0.68750000E+00 -0.11940235E+00 0.49145618E-01 0.14955144E+00 0.44214283E-01 0.69000000E+00 -0.11250954E+00 0.67161082E-01 0.15390832E+00 0.28978949E-01 0.69250000E+00 -0.10345351E+00 0.85582443E-01 0.15636450E+00 0.12184351E-01 0.69500000E+00 -0.92199900E-01 0.10417355E+00 0.15674197E+00 -0.60478425E-02 0.69750000E+00 -0.78743599E-01 0.12267805E+00 0.15487871E+00 -0.25570020E-01 0.70000000E+00 -0.63110986E-01 0.14082147E+00 0.15063177E+00 -0.46208268E-01 0.70250000E+00 -0.45361957E-01 0.15831368E+00 0.14388041E+00 -0.67761588E-01 0.70500000E+00 -0.25591614E-01 0.17485170E+00 0.13452940E+00 -0.90000682E-01 0.70750000E+00 -0.39316013E-02 0.19012292E+00 0.12251245E+00 -0.11266637E+00 0.71000000E+00 0.19448966E-01 0.20380880E+00 0.10779591E+00 -0.13546784E+00 0.71250000E+00 0.44343031E-01 0.21558889E+00 0.90382528E-01 -0.15808115E+00 0.71500000E+00 0.70505644E-01 0.22514546E+00 0.70315530E-01 -0.18014838E+00 0.71750000E+00 0.97654569E-01 0.23216847E+00 0.47682579E-01 -0.20127805E+00 0.72000000E+00 0.12547152E+00 0.23636115E+00 0.22619663E-01 -0.22104749E+00 0.72250000E+00 0.15360410E+00 0.23744586E+00 -0.46854714E-02 -0.23900770E+00 0.72500000E+00 0.18166841E+00 0.23517045E+00 -0.33990625E-01 -0.25469114E+00 0.72750000E+00 0.20925247E+00 0.22931483E+00 -0.64997573E-01 -0.26762278E+00 0.73000000E+00 0.23592045E+00 0.21969759E+00 -0.97351989E-01 -0.27733433E+00 0.73250000E+00 0.26121761E+00 0.20618263E+00 -0.13064522E+00 -0.28338111E+00 0.73500000E+00 0.28467606E+00 0.18868533E+00 -0.16441819E+00 -0.28536077E+00 0.73750000E+00 0.30582120E+00 0.16717824E+00 -0.19816757E+00 -0.28293250E+00 0.74000000E+00 0.32417884E+00 0.14169584E+00 -0.23135413E+00 -0.27583509E+00 0.74250000E+00 0.33928269E+00 0.11233818E+00 -0.26341317E+00 -0.26390210E+00 0.74500000E+00 0.35068239E+00 0.79273224E-01 -0.29376641E+00 -0.24707215E+00 0.74750000E+00 0.35795153E+00 0.42737716E-01 -0.32183474E+00 -0.22539297E+00 0.75000000E+00 0.36069589E+00 0.30364915E-02 -0.34705106E+00 -0.19901797E+00 0.75250000E+00 0.35856130E+00 -0.39459650E-01 -0.36887223E+00 -0.16819525E+00 0.75500000E+00 0.35124134E+00 -0.84317421E-01 -0.38678929E+00 -0.13324961E+00 0.75750000E+00 0.33848448E+00 -0.13104559E+00 -0.40033522E+00 -0.94559367E-01 0.76000000E+00 0.32010061E+00 -0.17910028E+00 -0.40908980E+00 -0.52530592E-01 0.76250000E+00 0.29596700E+00 -0.22789062E+00 -0.41268137E+00 -0.75724908E-02 0.76500000E+00 0.26603350E+00 -0.27678453E+00 -0.41078598E+00 0.39922243E-01 0.76750000E+00 0.23032710E+00 -0.32511421E+00 -0.40312473E+00 0.89587968E-01 0.77000000E+00 0.18895586E+00 -0.37218126E+00 -0.38946048E+00 0.14108404E+00 0.77250000E+00 0.14211228E+00 -0.41726153E+00 -0.36959582E+00 0.19407778E+00 0.77500000E+00 0.90076034E-01 -0.45960983E+00 -0.34337383E+00 0.24821173E+00 0.77750000E+00 0.33216182E-01 -0.49846500E+00 -0.31068376E+00 0.30305647E+00 0.78000000E+00 -0.28007268E-01 -0.53305606E+00 -0.27147285E+00 0.35805297E+00 0.78250000E+00 -0.93042655E-01 -0.56261008E+00 -0.22576545E+00 0.41245047E+00 0.78500000E+00 -0.16124703E+00 -0.58636288E+00 -0.17368921E+00 0.46524852E+00 0.78750000E+00 -0.23188801E+00 -0.60357311E+00 -0.11550756E+00 0.51515311E+00 0.79000000E+00 -0.30414749E+00 -0.61354052E+00 -0.51655885E-01 0.56055781E+00 0.79250000E+00 -0.37712785E+00 -0.61562850E+00 0.17221915E-01 0.59955988E+00 0.79500000E+00 -0.44986103E+00 -0.60929082E+00 0.90241382E-01 0.63001943E+00 0.79750000E+00 -0.52132101E+00 -0.59410159E+00 0.16625517E+00 0.64966544E+00 0.80000000E+00 -0.59043995E+00 -0.56978706E+00 0.24384606E+00 0.65624725E+00 0.80250000E+00 -0.65612814E+00 -0.53625701E+00 0.32134026E+00 0.64772318E+00 0.80500000E+00 -0.71729746E+00 -0.49363330E+00 0.39684455E+00 0.62247118E+00 0.80750000E+00 -0.77288801E+00 -0.44227239E+00 0.46830872E+00 0.57949987E+00 0.81000000E+00 -0.82189679E+00 -0.38277909E+00 0.53361174E+00 0.51863434E+00 0.81250000E+00 -0.86340746E+00 -0.31600886E+00 0.59066724E+00 0.44065005E+00 0.81500000E+00 -0.89661953E+00 -0.24305682E+00 0.63754046E+00 0.34733104E+00 0.81750000E+00 -0.92087547E+00 -0.16523271E+00 0.67256696E+00 0.24143650E+00 0.82000000E+00 -0.93568397E+00 -0.84022195E-01 0.69446138E+00 0.12657010E+00 0.82250000E+00 -0.94073795E+00 -0.10364542E-02 0.70240544E+00 0.69599750E-02 0.82500000E+00 -0.93592598E+00 0.82047000E-01 0.69610538E+00 -0.11283023E+00 0.82750000E+00 -0.92133641E+00 0.16354813E+00 0.67581257E+00 -0.22822830E+00 0.83000000E+00 -0.89725384E+00 0.24184831E+00 0.64230492E+00 -0.33498150E+00 0.83250000E+00 -0.86414824E+00 0.31544983E+00 0.59683109E+00 -0.42944892E+00 0.83500000E+00 -0.82265750E+00 0.38302686E+00 0.54102380E+00 -0.50882627E+00 0.83750000E+00 -0.77356456E+00 0.44346472E+00 0.47679157E+00 -0.57128210E+00 0.84000000E+00 -0.71777074E+00 0.49588564E+00 0.40620010E+00 -0.61599643E+00 0.84250000E+00 -0.65626676E+00 0.53966032E+00 0.33135459E+00 -0.64310655E+00 0.84500000E+00 -0.59010329E+00 0.57440618E+00 0.25429341E+00 -0.65357536E+00 0.84750000E+00 -0.52036235E+00 0.59997406E+00 0.17690070E+00 -0.64900574E+00 0.85000000E+00 -0.44813087E+00 0.61642583E+00 0.10084303E+00 -0.63142767E+00 0.85250000E+00 -0.37447732E+00 0.62400619E+00 0.27531463E-01 -0.60308421E+00 0.85500000E+00 -0.30043183E+00 0.62311126E+00 -0.41891922E-01 -0.56623853E+00 0.85750000E+00 -0.22697015E+00 0.61425694E+00 -0.10654677E+00 -0.52301799E+00 0.86000000E+00 -0.15500120E+00 0.59804914E+00 -0.16579133E+00 -0.47530411E+00 0.86250000E+00 -0.85358033E-01 0.57515731E+00 -0.21918916E+00 -0.42467082E+00 0.86500000E+00 -0.18791626E-01 0.54629241E+00 -0.26647124E+00 -0.37236722E+00 0.86750000E+00 0.44032932E-01 0.51218922E+00 -0.30749825E+00 -0.31933738E+00 0.87000000E+00 0.10253845E+00 0.47359307E+00 -0.34222696E+00 -0.26626678E+00 0.87250000E+00 0.15623627E+00 0.43125008E+00 -0.37068317E+00 -0.21364454E+00 0.87500000E+00 0.20472594E+00 0.38590020E+00 -0.39294235E+00 -0.16183073E+00 0.87750000E+00 0.24769413E+00 0.33827211E+00 -0.40911823E+00 -0.11111975E+00 0.88000000E+00 0.28491308E+00 0.28907897E+00 -0.41935822E+00 -0.61792908E-01 0.88250000E+00 0.31623851E+00 0.23901444E+00 -0.42384424E+00 -0.14155674E-01 0.88500000E+00 0.34160705E+00 0.18874835E+00 -0.42279697E+00 0.31442144E-01 0.88750000E+00 0.36103310E+00 0.13892179E+00 -0.41648145E+00 0.74603037E-01 0.89000000E+00 0.37460517E+00 0.90141514E-01 -0.40521223E+00 0.11489293E+00 0.89250000E+00 0.38248139E+00 0.42973861E-01 -0.38935644E+00 0.15186319E+00 0.89500000E+00 0.38488433E+00 -0.20615160E-02 -0.36933390E+00 0.18507925E+00 0.89750000E+00 0.38209517E+00 -0.44497735E-01 -0.34561365E+00 0.21415114E+00 0.90000000E+00 0.37444705E+00 -0.83926133E-01 -0.31870689E+00 0.23876211E+00 0.90250000E+00 0.36231789E+00 -0.12000070E+00 -0.28915686E+00 0.25869170E+00 0.90500000E+00 0.34612281E+00 -0.15244116E+00 -0.25752647E+00 0.27383113E+00 0.90750000E+00 0.32630616E+00 -0.18103449E+00 -0.22438450E+00 0.28418989E+00 0.91000000E+00 0.30333358E+00 -0.20563480E+00 -0.19029170E+00 0.28989346E+00 0.91250000E+00 0.27768413E+00 -0.22616156E+00 -0.15578750E+00 0.29117316E+00 0.91500000E+00 0.24984267E+00 -0.24259641E+00 -0.12137841E+00 0.28834981E+00 0.91750000E+00 0.22029278E+00 -0.25497860E+00 -0.87528554E-01 0.28181320E+00 0.92000000E+00 0.18951024E+00 -0.26339958E+00 -0.54652866E-01 0.27199972E+00 0.92250000E+00 0.15795718E+00 -0.26799689E+00 -0.23112843E-01 0.25937006E+00 0.92500000E+00 0.12607700E+00 -0.26894769E+00 0.67850762E-02 0.24438882E+00 0.92750000E+00 0.94290058E-01 -0.26646221E+00 0.34788929E-01 0.22750731E+00 0.93000000E+00 0.62990131E-01 -0.26077749E+00 0.60698819E-01 0.20915030E+00 0.93250000E+00 0.32541587E-01 -0.25215135E+00 0.84363194E-01 0.18970696E+00 0.93500000E+00 0.32772526E-02 -0.24085693E+00 0.10567429E+00 0.16952592E+00 0.93750000E+00 -0.24503112E-01 -0.22717783E+00 0.12456319E+00 0.14891387E+00 0.94000000E+00 -0.50533783E-01 -0.21140373E+00 0.14099497E+00 0.12813701E+00 0.94250000E+00 -0.74583578E-01 -0.19382671E+00 0.15496399E+00 0.10742448E+00 0.94500000E+00 -0.96455931E-01 -0.17473793E+00 0.16648986E+00 0.86972946E-01 0.94750000E+00 -0.11598863E+00 -0.15442496E+00 0.17561380E+00 0.66951508E-01 0.95000000E+00 -0.13305323E+00 -0.13316932E+00 0.18239571E+00 0.47506337E-01 0.95250000E+00 -0.14755422E+00 -0.11124446E+00 0.18691166E+00 0.28764532E-01 0.95500000E+00 -0.15942796E+00 -0.88913923E-01 0.18925180E+00 0.10836940E-01 0.95750000E+00 -0.16864140E+00 -0.66429849E-01 0.18951855E+00 -0.61801528E-02 0.96000000E+00 -0.17519066E+00 -0.44031563E-01 0.18782494E+00 -0.22204384E-01 0.96250000E+00 -0.17909942E+00 -0.21944442E-01 0.18429293E+00 -0.37167525E-01 0.96500000E+00 -0.18041723E+00 -0.37895257E-03 0.17905169E+00 -0.51016248E-01 0.96750000E+00 -0.17921767E+00 0.20470102E-01 0.17223580E+00 -0.63713100E-01 0.97000000E+00 -0.17559648E+00 0.40424104E-01 0.16398329E+00 -0.75237362E-01 0.97250000E+00 -0.16966960E+00 0.59320913E-01 0.15443361E+00 -0.85585474E-01 0.97500000E+00 -0.16157123E+00 0.77014920E-01 0.14372566E+00 -0.94770800E-01 0.97750000E+00 -0.15145188E+00 0.93376853E-01 0.13199578E+00 -0.10282257E+00 0.98000000E+00 -0.13947641E+00 0.10829338E+00 0.11937597E+00 -0.10978397E+00 0.98250000E+00 -0.12582226E+00 0.12166648E+00 0.10599247E+00 -0.11570933E+00 0.98500000E+00 -0.11067756E+00 0.13341272E+00 0.91964522E-01 -0.12066072E+00 0.98750000E+00 -0.94239575E-01 0.14346236E+00 0.77403781E-01 -0.12470391E+00 0.99000000E+00 -0.76713037E-01 0.15175843E+00 0.62414078E-01 -0.12790410E+00 0.99250000E+00 -0.58308736E-01 0.15825584E+00 0.47091753E-01 -0.13032174E+00 0.99500000E+00 -0.39242150E-01 0.16292051E+00 0.31526459E-01 -0.13200852E+00 0.99750000E+00 -0.19732180E-01 0.16572866E+00 0.15802409E-01 -0.13300400E+00 0.10000000E+01 0.34041716E-07 0.16666625E+00 -0.27167038E-07 -0.13333300E+00 auto/07p/demos/rev/rev.auto0000640000175000017500000000065113570013207013635 0ustar sksk#========= # Demo rev #========= pgm = 'rev' print pgm, ": first run : increase PAR(1)" r1=run('rev',c='rev.1',sv='1') print pgm, ": second run : continue in reverse direction" r1=r1+run(r1('UZ1'),c='rev.2',ap='1') print pgm, ": third run : restart from solution with different reversibility" r3=run('rev',c='rev.3',sv='3') print pgm, ": fourth run : continue in reverse direction" r3=r3+run(r3('UZ1'),c='rev.4',ap='3') auto/07p/demos/rev/c.rev.20000640000175000017500000000066313570013207013252 0ustar skskNDIM= 4, IPS = 9, IRS = 2, ILP = 1 ICP = [1, 22] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 150, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.05, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {22: 0.0, 1: [1.0, 0.0, -1.0]} UZSTOP = {1: -3.0} IEQUIB = 0 IREV = [0,1,0,1] IPSI = [2] auto/07p/demos/rev/rev.f900000640000175000017500000000544213570013207013266 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! cir : Homoclinic Bifurcation in an Electronic Circuit ! (the same equations as in demo tor) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION P P=PAR(1) F(1)= U(2) F(2)= U(3) F(3)= U(4) F(4)= -P*U(3)-U(1)+U(1)**3 IF(IJAC.EQ.0)RETURN DFDU(1,1)=0.0d0 DFDU(1,2)=1.0d0 DFDU(1,3)=0.0d0 DFDU(1,4)=0.0d0 DFDU(2,1)=0.0d0 DFDU(2,2)=0.0d0 DFDU(2,3)=1.0d0 DFDU(2,4)=0.0d0 DFDU(3,1)=0.0d0 DFDU(3,2)=0.0d0 DFDU(3,3)=0.0d0 DFDU(3,4)=1.0d0 DFDU(4,1)=-1.0+3.0d0*U(1)**2 DFDU(4,2)=0.0d0 DFDU(4,3)=-P DFDU(4,4)=0.0d0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=0.0d0 DFDP(2,1)=0.0d0 DFDP(3,1)=0.0d0 DFDP(4,1)=-U(3) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1)=1.6 ! P !---------------------------------------------------------------------- ! If IEQUIB >0 put initial equilibrium in PAR(11+i), i=1,...,NDIM : PAR(12) = 0.0 PAR(13) = 0.0 PAR(14) = 0.0 PAR(15) = 0.0 END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) ! Homoclinic bifurcations COMMON block needed here : COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER I ! If IEQUIB =0 put analytic equilibrium in PAR(11+i), i=1..NDIM IF(IEQUIB.EQ.0)THEN DO I=1,NDIM PAR(11+I)= 0.0 ENDDO ENDIF END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/rev/c.rev0000640000175000017500000000066013570013207013107 0ustar skskdat='rev.dat.1' PAR={11:39.0448429} NDIM= 4, IPS = 9, IRS = 0, ILP = 1 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 20, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.05, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: [1.6, 1.7, 1.8, 1.9]} IEQUIB = 0 IREV = [0,1,0,1] auto/07p/demos/rev/rev.dat.10000640000175000017500000010326613570013207013602 0ustar sksk 0.00000000E+00 -0.22136854E-05 0.35531626E-05 0.44609028E-05 -0.73184002E-06 0.25000000E-02 -0.18457339E-05 0.39843422E-05 0.43656532E-05 -0.12232607E-05 0.50000000E-02 -0.14362248E-05 0.44038511E-05 0.42214649E-05 -0.17339623E-05 0.75000000E-02 -0.98653334E-06 0.48068263E-05 0.40266372E-05 -0.22601573E-05 0.10000000E-01 -0.49851681E-06 0.51882574E-05 0.37798589E-05 -0.27976647E-05 0.12500000E-01 0.25472706E-07 0.55430267E-05 0.34802452E-05 -0.33419264E-05 0.15000000E-01 0.58258012E-06 0.58659522E-05 0.31273738E-05 -0.38880273E-05 0.17500000E-01 0.11694433E-05 0.61518347E-05 0.27213186E-05 -0.44307217E-05 0.20000000E-01 0.17821938E-05 0.63955079E-05 0.22626806E-05 -0.49644631E-05 0.22500000E-01 0.24164625E-05 0.65918908E-05 0.17526154E-05 -0.54834396E-05 0.25000000E-01 0.30673908E-05 0.67360434E-05 0.11928571E-05 -0.59816143E-05 0.27500000E-01 0.37296472E-05 0.68232238E-05 0.58573839E-06 -0.64527703E-05 0.30000000E-01 0.43974493E-05 0.68489479E-05 -0.65794366E-07 -0.68905599E-05 0.32500000E-01 0.50645921E-05 0.68090495E-05 -0.75817109E-06 -0.72885590E-05 0.35000000E-01 0.57244818E-05 0.66997415E-05 -0.14871932E-05 -0.76403251E-05 0.37500000E-01 0.63701761E-05 0.65176774E-05 -0.22480349E-05 -0.79394595E-05 0.40000000E-01 0.69944298E-05 0.62600119E-05 -0.30352506E-05 -0.81796729E-05 0.42500000E-01 0.75897471E-05 0.59244611E-05 -0.38427889E-05 -0.83548542E-05 0.45000000E-01 0.81484390E-05 0.55093605E-05 -0.46640134E-05 -0.84591416E-05 0.47500000E-01 0.86626864E-05 0.50137209E-05 -0.54917309E-05 -0.84869964E-05 0.50000000E-01 0.91246088E-05 0.44372809E-05 -0.63182260E-05 -0.84332779E-05 0.52500000E-01 0.95263379E-05 0.37805561E-05 -0.71353043E-05 -0.82933188E-05 0.55000000E-01 0.98600952E-05 0.30448833E-05 -0.79343419E-05 -0.80630017E-05 0.57500000E-01 0.10118275E-04 0.22324598E-05 -0.87063431E-05 -0.77388346E-05 0.60000000E-01 0.10293528E-04 0.13463765E-05 -0.94420045E-05 -0.73180244E-05 0.62500000E-01 0.10378853E-04 0.39064448E-06 -0.10131787E-04 -0.67985495E-05 0.65000000E-01 0.10367685E-04 -0.62978562E-06 -0.10765996E-04 -0.61792283E-05 0.67500000E-01 0.10253989E-04 -0.17090126E-05 -0.11334864E-04 -0.54597846E-05 0.70000000E-01 0.10032353E-04 -0.28401821E-05 -0.11828642E-04 -0.46409079E-05 0.72500000E-01 0.96980796E-05 -0.40154932E-05 -0.12237700E-04 -0.37243082E-05 0.75000000E-01 0.92472785E-05 -0.52262144E-05 -0.12552627E-04 -0.27127638E-05 0.77500000E-01 0.86769564E-05 -0.64627109E-05 -0.12764334E-04 -0.16101625E-05 0.80000000E-01 0.79851029E-05 -0.77144808E-05 -0.12864169E-04 -0.42153403E-06 0.82500000E-01 0.71707734E-05 -0.89702038E-05 -0.12844028E-04 0.84692694E-06 0.85000000E-01 0.62341656E-05 -0.10217800E-04 -0.12696469E-04 0.21878472E-05 0.87500000E-01 0.51766908E-05 -0.11444498E-04 -0.12414827E-04 0.35926723E-05 0.90000000E-01 0.40010371E-05 -0.12636923E-04 -0.11993329E-04 0.50516756E-05 0.92500000E-01 0.27112243E-05 -0.13781180E-04 -0.11427208E-04 0.65539790E-05 0.95000000E-01 0.13126494E-05 -0.14862965E-04 -0.10712814E-04 0.80875864E-05 0.97500000E-01 -0.18787871E-06 -0.15867676E-04 -0.98477205E-05 0.96394303E-05 0.10000000E+00 -0.17821166E-05 -0.16780537E-04 -0.88308272E-05 0.11195432E-04 0.10250000E+00 -0.34603753E-05 -0.17586736E-04 -0.76624534E-05 0.12740575E-04 0.10500000E+00 -0.52115240E-05 -0.18271563E-04 -0.63444270E-05 0.14258995E-04 0.10750000E+00 -0.70230069E-05 -0.18820562E-04 -0.48801618E-05 0.15734077E-04 0.11000000E+00 -0.88808765E-05 -0.19219693E-04 -0.32747249E-05 0.17148576E-04 0.11250000E+00 -0.10769841E-04 -0.19455493E-04 -0.15348929E-05 0.18484742E-04 0.11500000E+00 -0.12673331E-04 -0.19515244E-04 0.33080645E-06 0.19724465E-04 0.11750000E+00 -0.14573576E-04 -0.19387150E-04 0.23120663E-05 0.20849429E-04 0.12000000E+00 -0.16451710E-04 -0.19060505E-04 0.43967884E-05 0.21841278E-04 0.12250000E+00 -0.18287879E-04 -0.18525874E-04 0.65710883E-05 0.22681795E-04 0.12500000E+00 -0.20061380E-04 -0.17775262E-04 0.88193173E-05 0.23353088E-04 0.12750000E+00 -0.21750804E-04 -0.16802287E-04 0.11124105E-04 0.23837789E-04 0.13000000E+00 -0.23334206E-04 -0.15602345E-04 0.13466417E-04 0.24119255E-04 0.13250000E+00 -0.24789285E-04 -0.14172765E-04 0.15825642E-04 0.24181779E-04 0.13500000E+00 -0.26093580E-04 -0.12512963E-04 0.18179687E-04 0.24010807E-04 0.13750000E+00 -0.27224679E-04 -0.10624580E-04 0.20505105E-04 0.23593146E-04 0.14000000E+00 -0.28160445E-04 -0.85116028E-05 0.22777234E-04 0.22917191E-04 0.14250000E+00 -0.28879249E-04 -0.61804812E-05 0.24970370E-04 0.21973130E-04 0.14500000E+00 -0.29360216E-04 -0.36402160E-05 0.27057942E-04 0.20753161E-04 0.14750000E+00 -0.29583478E-04 -0.90243582E-06 0.29012727E-04 0.19251696E-04 0.15000000E+00 -0.29530430E-04 0.20185508E-05 0.30807073E-04 0.17465553E-04 0.15250000E+00 -0.29183998E-04 0.51057247E-05 0.32413142E-04 0.15394146E-04 0.15500000E+00 -0.28528901E-04 0.83393511E-05 0.33803169E-04 0.13039650E-04 0.15750000E+00 -0.27551916E-04 0.11697000E-04 0.34949749E-04 0.10407162E-04 0.16000000E+00 -0.26242141E-04 0.15153595E-04 0.35826116E-04 0.75048299E-05 0.16250000E+00 -0.24591245E-04 0.18681492E-04 0.36406458E-04 0.43439735E-05 0.16500000E+00 -0.22593718E-04 0.22250585E-04 0.36666224E-04 0.93917099E-06 0.16750000E+00 -0.20247104E-04 0.25828447E-04 0.36582448E-04 -0.26916751E-05 0.17000000E+00 -0.17552218E-04 0.29380499E-04 0.36134077E-04 -0.65273025E-05 0.17250000E+00 -0.14513346E-04 0.32870216E-04 0.35302295E-04 -0.10543084E-04 0.17500000E+00 -0.11138426E-04 0.36259355E-04 0.34070856E-04 -0.14711054E-04 0.17750000E+00 -0.74392040E-05 0.39508230E-04 0.32426403E-04 -0.18999972E-04 0.18000000E+00 -0.34313550E-05 0.42576002E-04 0.30358783E-04 -0.23375422E-04 0.18250000E+00 0.86541487E-06 0.45421011E-04 0.27861354E-04 -0.27799943E-04 0.18500000E+00 0.54273075E-05 0.48001131E-04 0.24931273E-04 -0.32233209E-04 0.18750000E+00 0.10226406E-04 0.50274157E-04 0.21569763E-04 -0.36632241E-04 0.19000000E+00 0.15230685E-04 0.52198209E-04 0.17782361E-04 -0.40951656E-04 0.19250000E+00 0.20404066E-04 0.53732169E-04 0.13579142E-04 -0.45143966E-04 0.19500000E+00 0.25706512E-04 0.54836133E-04 0.89749029E-05 -0.49159906E-04 0.19750000E+00 0.31094170E-04 0.55471874E-04 0.39893240E-05 -0.52948804E-04 0.20000000E+00 0.36519555E-04 0.55603335E-04 -0.13529180E-05 -0.56458995E-04 0.20250000E+00 0.41931789E-04 0.55197110E-04 -0.70220716E-05 -0.59638258E-04 0.20500000E+00 0.47276884E-04 0.54222948E-04 -0.12983280E-04 -0.62434296E-04 0.20750000E+00 0.52498072E-04 0.52654250E-04 -0.19196600E-04 -0.64795247E-04 0.21000000E+00 0.57536188E-04 0.50468562E-04 -0.25617067E-04 -0.66670218E-04 0.21250000E+00 0.62330097E-04 0.47648056E-04 -0.32194820E-04 -0.68009848E-04 0.21500000E+00 0.66817167E-04 0.44180007E-04 -0.38875278E-04 -0.68766891E-04 0.21750000E+00 0.70933794E-04 0.40057236E-04 -0.45599374E-04 -0.68896812E-04 0.22000000E+00 0.74615961E-04 0.35278539E-04 -0.52303854E-04 -0.68358400E-04 0.22250000E+00 0.77799838E-04 0.29849075E-04 -0.58921626E-04 -0.67114382E-04 0.22500000E+00 0.80422427E-04 0.23780723E-04 -0.65382178E-04 -0.65132043E-04 0.22750000E+00 0.82422231E-04 0.17092393E-04 -0.71612052E-04 -0.62383831E-04 0.23000000E+00 0.83739948E-04 0.98102886E-05 -0.77535377E-04 -0.58847966E-04 0.23250000E+00 0.84319205E-04 0.19681111E-05 -0.83074462E-04 -0.54509014E-04 0.23500000E+00 0.84107285E-04 -0.63927902E-05 -0.88150441E-04 -0.49358443E-04 0.23750000E+00 0.83055888E-04 -0.15223339E-04 -0.92683973E-04 -0.43395152E-04 0.24000000E+00 0.81121880E-04 -0.24466723E-04 -0.96595994E-04 -0.36625948E-04 0.24250000E+00 0.78268049E-04 -0.34058454E-04 -0.99808506E-04 -0.29065987E-04 0.24500000E+00 0.74463846E-04 -0.43926521E-04 -0.10224542E-03 -0.20739158E-04 0.24750000E+00 0.69686110E-04 -0.53991609E-04 -0.10383340E-03 -0.11678400E-04 0.25000000E+00 0.63919766E-04 -0.64167422E-04 -0.10450281E-03 -0.19259562E-05 0.25250000E+00 0.57158488E-04 -0.74361077E-04 -0.10418856E-03 0.84664443E-05 0.25500000E+00 0.49405317E-04 -0.84473602E-04 -0.10283111E-03 0.19437495E-04 0.25750000E+00 0.40673230E-04 -0.94400521E-04 -0.10037736E-03 0.30916304E-04 0.26000000E+00 0.30985641E-04 -0.10403253E-03 -0.96781587E-04 0.42822476E-04 0.26250000E+00 0.20376842E-04 -0.11325624E-03 -0.92006381E-04 0.55066301E-04 0.26500000E+00 0.88923550E-05 -0.12195509E-03 -0.86023529E-04 0.67549038E-04 0.26750000E+00 -0.34108016E-05 -0.13001022E-03 -0.78814884E-04 0.80163315E-04 0.27000000E+00 -0.16463937E-04 -0.13730154E-03 -0.70373179E-04 0.92793629E-04 0.27250000E+00 -0.30186620E-04 -0.14370878E-03 -0.60702794E-04 0.10531696E-03 0.27500000E+00 -0.44486724E-04 -0.14911274E-03 -0.49820455E-04 0.11760352E-03 0.27750000E+00 -0.59260584E-04 -0.15339646E-03 -0.37755854E-04 0.12951756E-03 0.28000000E+00 -0.74393282E-04 -0.15644652E-03 -0.24552186E-04 0.14091836E-03 0.28250000E+00 -0.89759056E-04 -0.15815442E-03 -0.10266582E-04 0.15166126E-03 0.28500000E+00 -0.10522185E-03 -0.15841791E-03 0.50295648E-05 0.16159889E-03 0.28750000E+00 -0.12063598E-03 -0.15714243E-03 0.21250388E-04 0.17058235E-03 0.29000000E+00 -0.13584699E-03 -0.15424249E-03 0.38295476E-04 0.17846267E-03 0.29250000E+00 -0.15069255E-03 -0.14964313E-03 0.56049923E-04 0.18509221E-03 0.29500000E+00 -0.16500359E-03 -0.14328129E-03 0.74384545E-04 0.19032621E-03 0.29750000E+00 -0.17860554E-03 -0.13510723E-03 0.93156229E-04 0.19402440E-03 0.30000000E+00 -0.19131967E-03 -0.12508580E-03 0.11220846E-03 0.19605266E-03 0.30250000E+00 -0.20296457E-03 -0.11319778E-03 0.13137200E-03 0.19628473E-03 0.30500000E+00 -0.21335779E-03 -0.99441061E-04 0.15046574E-03 0.19460395E-03 0.30750000E+00 -0.22231757E-03 -0.83831733E-04 0.16929773E-03 0.19090501E-03 0.31000000E+00 -0.22966462E-03 -0.66405114E-04 0.18766634E-03 0.18509572E-03 0.31250000E+00 -0.23522411E-03 -0.47216617E-04 0.20536169E-03 0.17709875E-03 0.31500000E+00 -0.23882758E-03 -0.26342488E-04 0.22216713E-03 0.16685331E-03 0.31750000E+00 -0.24031511E-03 -0.38803803E-05 0.23786093E-03 0.15431684E-03 0.32000000E+00 -0.23953732E-03 0.20050240E-04 0.25221820E-03 0.13946655E-03 0.32250000E+00 -0.23635761E-03 0.45307875E-04 0.26501282E-03 0.12230094E-03 0.32500000E+00 -0.23065425E-03 0.71728986E-04 0.27601963E-03 0.10284115E-03 0.32750000E+00 -0.22232253E-03 0.99128193E-04 0.28501670E-03 0.81132185E-04 0.33000000E+00 -0.21127690E-03 0.12729871E-03 0.29178767E-03 0.57244010E-04 0.33250000E+00 -0.19745302E-03 0.15601299E-03 0.29612430E-03 0.31272449E-04 0.33500000E+00 -0.18080973E-03 0.18502369E-03 0.29782897E-03 0.33398856E-05 0.33750000E+00 -0.16133091E-03 0.21406477E-03 0.29671735E-03 -0.26404245E-04 0.34000000E+00 -0.13902731E-03 0.24285296E-03 0.29262100E-03 -0.57783199E-04 0.34250000E+00 -0.11393807E-03 0.27108946E-03 0.28539009E-03 -0.90592924E-04 0.34500000E+00 -0.86132188E-04 0.29846182E-03 0.27489601E-03 -0.12460232E-03 0.34750000E+00 -0.55709739E-04 0.32464620E-03 0.26103402E-03 -0.15955380E-03 0.35000000E+00 -0.22802863E-04 0.34930982E-03 0.24372578E-03 -0.19516410E-03 0.35250000E+00 0.12423486E-04 0.37211360E-03 0.22292181E-03 -0.23112547E-03 0.35500000E+00 0.49771069E-04 0.39271518E-03 0.19860381E-03 -0.26710710E-03 0.35750000E+00 0.89008195E-04 0.41077199E-03 0.17078681E-03 -0.30275692E-03 0.36000000E+00 0.12986986E-03 0.42594465E-03 0.13952118E-03 -0.33770370E-03 0.36250000E+00 0.17205823E-03 0.43790050E-03 0.10489435E-03 -0.37155948E-03 0.36500000E+00 0.21524347E-03 0.44631726E-03 0.67032340E-04 -0.40392228E-03 0.36750000E+00 0.25906497E-03 0.45088692E-03 0.26100948E-04 -0.43437922E-03 0.37000000E+00 0.30313289E-03 0.45131960E-03 -0.17693314E-04 -0.46250983E-03 0.37250000E+00 0.34703014E-03 0.44734762E-03 -0.64102668E-04 -0.48788970E-03 0.37500000E+00 0.39031477E-03 0.43872949E-03 -0.11283788E-03 -0.51009441E-03 0.37750000E+00 0.43252268E-03 0.42525397E-03 -0.16356845E-03 -0.52870372E-03 0.38000000E+00 0.47317079E-03 0.40674407E-03 -0.21592325E-03 -0.54330590E-03 0.38250000E+00 0.51176060E-03 0.38306099E-03 -0.26949155E-03 -0.55350238E-03 0.38500000E+00 0.54778205E-03 0.35410788E-03 -0.32382456E-03 -0.55891246E-03 0.38750000E+00 0.58071784E-03 0.31983346E-03 -0.37843739E-03 -0.55917821E-03 0.39000000E+00 0.61004802E-03 0.28023547E-03 -0.43281152E-03 -0.55396943E-03 0.39250000E+00 0.63525493E-03 0.23536377E-03 -0.48639779E-03 -0.54298865E-03 0.39500000E+00 0.65582848E-03 0.18532321E-03 -0.53861975E-03 -0.52597614E-03 0.39750000E+00 0.67127155E-03 0.13027604E-03 -0.58887769E-03 -0.50271487E-03 0.40000000E+00 0.68110576E-03 0.70444040E-04 -0.63655298E-03 -0.47303535E-03 0.40250000E+00 0.68487738E-03 0.61100924E-05 -0.68101294E-03 -0.43682033E-03 0.40500000E+00 0.68216328E-03 -0.62380693E-04 -0.72161620E-03 -0.39400929E-03 0.40750000E+00 0.67257711E-03 -0.13462041E-03 -0.75771842E-03 -0.34460262E-03 0.41000000E+00 0.65577539E-03 -0.21013835E-03 -0.78867842E-03 -0.28866549E-03 0.41250000E+00 0.63146362E-03 -0.28840165E-03 -0.81386469E-03 -0.22633139E-03 0.41500000E+00 0.59940233E-03 -0.36881655E-03 -0.83266223E-03 -0.15780510E-03 0.41750000E+00 0.55941287E-03 -0.45073033E-03 -0.84447958E-03 -0.83365273E-04 0.42000000E+00 0.51138309E-03 -0.53343401E-03 -0.84875619E-03 -0.33663710E-05 0.42250000E+00 0.45527267E-03 -0.61616570E-03 -0.84496986E-03 0.81759978E-04 0.42500000E+00 0.39111805E-03 -0.69811469E-03 -0.83264432E-03 0.17150430E-03 0.42750000E+00 0.31903701E-03 -0.77842636E-03 -0.81135683E-03 0.26527934E-03 0.43000000E+00 0.23923267E-03 -0.85620775E-03 -0.78074575E-03 0.36242085E-03 0.43250000E+00 0.15199692E-03 -0.93053386E-03 -0.74051795E-03 0.46218922E-03 0.43500000E+00 0.57713243E-04 -0.10004547E-02 -0.69045611E-03 0.56377195E-03 0.43750000E+00 -0.43141270E-04 -0.10650032E-02 -0.63042561E-03 0.66628698E-03 0.44000000E+00 -0.14999460E-03 -0.11232031E-02 -0.56038118E-03 0.76878692E-03 0.44250000E+00 -0.26217940E-03 -0.11740788E-02 -0.48037301E-03 0.87026421E-03 0.44500000E+00 -0.37893345E-03 -0.12166642E-02 -0.39055231E-03 0.96965714E-03 0.44750000E+00 -0.49940114E-03 -0.12500131E-02 -0.29117631E-03 0.10658569E-02 0.45000000E+00 -0.62263590E-03 -0.12732098E-02 -0.18261245E-03 0.11577154E-02 0.45250000E+00 -0.74760369E-03 -0.12853800E-02 -0.65341806E-04 0.12440541E-02 0.45500000E+00 -0.87318763E-03 -0.12857021E-02 0.60038412E-04 0.13236735E-02 0.45750000E+00 -0.99819363E-03 -0.12734183E-02 0.19281332E-03 0.13953639E-02 0.46000000E+00 -0.11213573E-02 -0.12478466E-02 0.33214989E-03 0.14579162E-02 0.46250000E+00 -0.12413517E-02 -0.12083919E-02 0.47709760E-03 0.15101344E-02 0.46500000E+00 -0.13567966E-02 -0.11545576E-02 0.62659030E-03 0.15508474E-02 0.46750000E+00 -0.14662687E-02 -0.10859567E-02 0.77944931E-03 0.15789228E-02 0.47000000E+00 -0.15683124E-02 -0.10023225E-02 0.93438783E-03 0.15932800E-02 0.47250000E+00 -0.16614526E-02 -0.90351900E-03 0.10900167E-02 0.15929046E-02 0.47500000E+00 -0.17442076E-02 -0.78955057E-03 0.12448515E-02 0.15768619E-02 0.47750000E+00 -0.18151034E-02 -0.66057071E-03 0.13973211E-02 0.15443119E-02 0.48000000E+00 -0.18726885E-02 -0.51689016E-03 0.15457775E-02 0.14945231E-02 0.48250000E+00 -0.19155498E-02 -0.35898378E-03 0.16885073E-02 0.14268866E-02 0.48500000E+00 -0.19423287E-02 -0.18749640E-03 0.18237441E-02 0.13409301E-02 0.48750000E+00 -0.19517382E-02 -0.32472848E-05 0.19496826E-02 0.12363311E-02 0.49000000E+00 -0.19425797E-02 0.19276681E-03 0.20644939E-02 0.11129298E-02 0.49250000E+00 -0.19137607E-02 0.39937011E-03 0.21663419E-02 0.97074061E-03 0.49500000E+00 -0.18643123E-02 0.61520799E-03 0.22534010E-02 0.80996358E-03 0.49750000E+00 -0.17934064E-02 0.83874884E-03 0.23238743E-02 0.63099395E-03 0.50000000E+00 -0.17003729E-02 0.10682879E-02 0.23760136E-02 0.43443079E-03 0.50250000E+00 -0.15847163E-02 0.13019529E-02 0.24081394E-02 0.22108409E-03 0.50500000E+00 -0.14461319E-02 0.15377120E-02 0.24186616E-02 -0.80197422E-05 0.50750000E+00 -0.12845204E-02 0.17733831E-02 0.24061013E-02 -0.25163422E-03 0.51000000E+00 -0.11000028E-02 0.20066462E-02 0.23691119E-02 -0.50829098E-03 0.51250000E+00 -0.89293225E-03 0.22350572E-02 0.23065010E-02 -0.77630006E-03 0.51500000E+00 -0.66390627E-03 0.24560641E-02 0.22172519E-02 -0.10537524E-02 0.51750000E+00 -0.41377586E-03 0.26670248E-02 0.21005446E-02 -0.13385247E-02 0.52000000E+00 -0.14365349E-03 0.28652280E-02 0.19557769E-02 -0.16282864E-02 0.52250000E+00 0.14508118E-03 0.30479147E-02 0.17825834E-02 -0.19205097E-02 0.52500000E+00 0.45077787E-03 0.32123027E-02 0.15808549E-02 -0.22124814E-02 0.52750000E+00 0.77151459E-03 0.33556124E-02 0.13507553E-02 -0.25013184E-02 0.53000000E+00 0.11050993E-02 0.34750941E-02 0.10927376E-02 -0.27839843E-02 0.53250000E+00 0.14490742E-02 0.35680571E-02 0.80755792E-03 -0.30573101E-02 0.53500000E+00 0.18007228E-02 0.36318997E-02 0.49628714E-03 -0.33180169E-02 0.53750000E+00 0.21570805E-02 0.36641405E-02 0.16032067E-03 -0.35627405E-02 0.54000000E+00 0.25149475E-02 0.36624505E-02 -0.19861474E-03 -0.37880598E-02 0.54250000E+00 0.28709055E-02 0.36246855E-02 -0.57845675E-03 -0.39905261E-02 0.54500000E+00 0.32213372E-02 0.35489191E-02 -0.97680640E-03 -0.41666957E-02 0.54750000E+00 0.35624492E-02 0.34334756E-02 -0.13909302E-02 -0.43131637E-02 0.55000000E+00 0.38902981E-02 0.32769619E-02 -0.18177655E-02 -0.44266002E-02 0.55250000E+00 0.42008197E-02 0.30782999E-02 -0.22539301E-02 -0.45037877E-02 0.55500000E+00 0.44898611E-02 0.28367564E-02 -0.26957345E-02 -0.45416597E-02 0.55750000E+00 0.47532159E-02 0.25519729E-02 -0.31391990E-02 -0.45373407E-02 0.56000000E+00 0.49866621E-02 0.22239927E-02 -0.35800741E-02 -0.44881865E-02 0.56250000E+00 0.51860024E-02 0.18532860E-02 -0.40138653E-02 -0.43918249E-02 0.56500000E+00 0.53471076E-02 0.14407726E-02 -0.44358613E-02 -0.42461962E-02 0.56750000E+00 0.54659605E-02 0.98784138E-03 -0.48411667E-02 -0.40495936E-02 0.57000000E+00 0.55387035E-02 0.49636668E-03 -0.52247382E-02 -0.38007023E-02 0.57250000E+00 0.55616859E-02 -0.31279350E-04 -0.55814252E-02 -0.34986371E-02 0.57500000E+00 0.55315132E-02 -0.59221825E-03 -0.59060126E-02 -0.31429789E-02 0.57750000E+00 0.54450970E-02 -0.11830613E-02 -0.61932690E-02 -0.27338080E-02 0.58000000E+00 0.52997043E-02 -0.17999104E-02 -0.64379962E-02 -0.22717354E-02 0.58250000E+00 0.50930074E-02 -0.24383638E-02 -0.66350829E-02 -0.17579305E-02 0.58500000E+00 0.48231324E-02 -0.30935273E-02 -0.67795599E-02 -0.11941449E-02 0.58750000E+00 0.44887065E-02 -0.37600309E-02 -0.68666586E-02 -0.58273270E-03 0.59000000E+00 0.40889033E-02 -0.44320513E-02 -0.68918698E-02 0.73334806E-04 0.59250000E+00 0.36234861E-02 -0.51033404E-02 -0.68510053E-02 0.77045859E-03 0.59500000E+00 0.30928471E-02 -0.57672592E-02 -0.67402588E-02 0.15044074E-02 0.59750000E+00 0.24980443E-02 -0.64168184E-02 -0.65562679E-02 0.22703191E-02 0.60000000E+00 0.18408331E-02 -0.70447247E-02 -0.62961754E-02 0.30627081E-02 0.60250000E+00 0.11236933E-02 -0.76434329E-02 -0.59576893E-02 0.38754792E-02 0.60500000E+00 0.34985156E-03 -0.82052042E-02 -0.55391416E-02 0.47019492E-02 0.60750000E+00 -0.47670344E-03 -0.87221695E-02 -0.50395443E-02 0.55348744E-02 0.61000000E+00 -0.13512112E-02 -0.91863990E-02 -0.44586424E-02 0.63664860E-02 0.61250000E+00 -0.22681374E-02 -0.95899753E-02 -0.37969629E-02 0.71885331E-02 0.61500000E+00 -0.32211783E-02 -0.99250729E-02 -0.30558599E-02 0.79923328E-02 0.61750000E+00 -0.42032746E-02 -0.10184040E-01 -0.22375540E-02 0.87688280E-02 0.62000000E+00 -0.52066316E-02 -0.10359486E-01 -0.13451653E-02 0.95086522E-02 0.62250000E+00 -0.62227500E-02 -0.10444369E-01 -0.38274035E-03 0.10202202E-01 0.62500000E+00 -0.72424634E-02 -0.10432089E-01 0.64472847E-03 0.10839717E-01 0.62750000E+00 -0.82559868E-02 -0.10316579E-01 0.17312918E-02 0.11411365E-01 0.63000000E+00 -0.92529728E-02 -0.10092400E-01 0.28700408E-02 0.11907335E-01 0.63250000E+00 -0.10222577E-01 -0.97548341E-02 0.40531138E-02 0.12317932E-01 0.63500000E+00 -0.11153535E-01 -0.92999770E-02 0.52717130E-02 0.12633686E-01 0.63750000E+00 -0.12034243E-01 -0.87248271E-02 0.65161313E-02 0.12845454E-01 0.64000000E+00 -0.12852852E-01 -0.80273736E-02 0.77757895E-02 0.12944534E-01 0.64250000E+00 -0.13597370E-01 -0.72066790E-02 0.90392854E-02 0.12922779E-01 0.64500000E+00 -0.14255766E-01 -0.62629564E-02 0.10294453E-01 0.12772710E-01 0.64750000E+00 -0.14816093E-01 -0.51976412E-02 0.11528434E-01 0.12487634E-01 0.65000000E+00 -0.15266602E-01 -0.40134540E-02 0.12727759E-01 0.12061759E-01 0.65250000E+00 -0.15595879E-01 -0.27144566E-02 0.13878444E-01 0.11490311E-01 0.65500000E+00 -0.15792970E-01 -0.13060965E-02 0.14966090E-01 0.10769641E-01 0.65750000E+00 -0.15847524E-01 0.20475750E-03 0.15976003E-01 0.98973348E-02 0.66000000E+00 -0.15749930E-01 0.18097933E-02 0.16893318E-01 0.88723133E-02 0.66250000E+00 -0.15491460E-01 0.34992445E-02 0.17703134E-01 0.76949289E-02 0.66500000E+00 -0.15064410E-01 0.52618944E-02 0.18390657E-01 0.63670511E-02 0.66750000E+00 -0.14462240E-01 0.70850935E-02 0.18941351E-01 0.48921444E-02 0.67000000E+00 -0.13679714E-01 0.89547928E-02 0.19341103E-01 0.32753349E-02 0.67250000E+00 -0.12713034E-01 0.10855593E-01 0.19576379E-01 0.15234650E-02 0.67500000E+00 -0.11559969E-01 0.12770808E-01 0.19634403E-01 -0.35486429E-03 0.67750000E+00 -0.10219975E-01 0.14682549E-01 0.19503323E-01 -0.23492668E-02 0.68000000E+00 -0.86943095E-02 0.16571824E-01 0.19172387E-01 -0.44475584E-02 0.68250000E+00 -0.69861336E-02 0.18418651E-01 0.18632124E-01 -0.66357617E-02 0.68500000E+00 -0.51006012E-02 0.20202193E-01 0.17874511E-01 -0.88981278E-02 0.68750000E+00 -0.30449359E-02 0.21900906E-01 0.16893148E-01 -0.11217176E-01 0.69000000E+00 -0.82849207E-03 0.23492712E-01 0.15683424E-01 -0.13573755E-01 0.69250000E+00 0.15372019E-02 0.24955171E-01 0.14242675E-01 -0.15947118E-01 0.69500000E+00 0.40384178E-02 0.26265689E-01 0.12570336E-01 -0.18315027E-01 0.69750000E+00 0.66592228E-02 0.27401722E-01 0.10668082E-01 -0.20653871E-01 0.70000000E+00 0.93814951E-02 0.28341005E-01 0.85399530E-02 -0.22938810E-01 0.70250000E+00 0.12184963E-01 0.29061787E-01 0.61924668E-02 -0.25143939E-01 0.70500000E+00 0.15047266E-01 0.29543080E-01 0.36347148E-02 -0.27242474E-01 0.70750000E+00 0.17944044E-01 0.29764909E-01 0.87843744E-03 -0.29206958E-01 0.71000000E+00 0.20849045E-01 0.29708580E-01 -0.20619216E-02 -0.31009497E-01 0.71250000E+00 0.23734267E-01 0.29356939E-01 -0.51691839E-02 -0.32622000E-01 0.71500000E+00 0.26570120E-01 0.28694644E-01 -0.84234307E-02 -0.34016454E-01 0.71750000E+00 0.29325615E-01 0.27708432E-01 -0.11802024E-01 -0.35165210E-01 0.72000000E+00 0.31968579E-01 0.26387378E-01 -0.15279658E-01 -0.36041282E-01 0.72250000E+00 0.34465901E-01 0.24723155E-01 -0.18828435E-01 -0.36618665E-01 0.72500000E+00 0.36783791E-01 0.22710283E-01 -0.22417984E-01 -0.36872658E-01 0.72750000E+00 0.38888072E-01 0.20346357E-01 -0.26015596E-01 -0.36780201E-01 0.73000000E+00 0.40744495E-01 0.17632278E-01 -0.29586408E-01 -0.36320205E-01 0.73250000E+00 0.42319066E-01 0.14572442E-01 -0.33093607E-01 -0.35473894E-01 0.73500000E+00 0.43578398E-01 0.11174926E-01 -0.36498674E-01 -0.34225133E-01 0.73750000E+00 0.44490078E-01 0.74516390E-02 -0.39761655E-01 -0.32560752E-01 0.74000000E+00 0.45023050E-01 0.34184471E-02 -0.42841472E-01 -0.30470860E-01 0.74250000E+00 0.45148002E-01 -0.90473199E-03 -0.45696250E-01 -0.27949133E-01 0.74500000E+00 0.44837766E-01 -0.54938688E-02 -0.48283684E-01 -0.24993095E-01 0.74750000E+00 0.44067724E-01 -0.10320799E-01 -0.50561424E-01 -0.21604368E-01 0.75000000E+00 0.42816205E-01 -0.15353240E-01 -0.52487489E-01 -0.17788894E-01 0.75250000E+00 0.41064891E-01 -0.20554844E-01 -0.54020697E-01 -0.13557137E-01 0.75500000E+00 0.38799205E-01 -0.25885304E-01 -0.55121114E-01 -0.89242447E-02 0.75750000E+00 0.36008692E-01 -0.31300492E-01 -0.55750518E-01 -0.39101887E-02 0.76000000E+00 0.32687384E-01 -0.36752654E-01 -0.55872880E-01 0.14601366E-02 0.76250000E+00 0.28834142E-01 -0.42190645E-01 -0.55454839E-01 0.71568443E-02 0.76500000E+00 0.24452972E-01 -0.47560212E-01 -0.54466201E-01 0.13145022E-01 0.76750000E+00 0.19553316E-01 -0.52804332E-01 -0.52880423E-01 0.19384735E-01 0.77000000E+00 0.14150301E-01 -0.57863588E-01 -0.50675103E-01 0.25831068E-01 0.77250000E+00 0.82649531E-02 -0.62676597E-01 -0.47832466E-01 0.32434209E-01 0.77500000E+00 0.19243681E-02 -0.67180488E-01 -0.44339829E-01 0.39139575E-01 0.77750000E+00 -0.48381703E-02 -0.71311418E-01 -0.40190067E-01 0.45887991E-01 0.78000000E+00 -0.11983122E-01 -0.75005138E-01 -0.35382044E-01 0.52615922E-01 0.78250000E+00 -0.19464679E-01 -0.78197596E-01 -0.29921028E-01 0.59255763E-01 0.78500000E+00 -0.27230818E-01 -0.80825584E-01 -0.23819067E-01 0.65736207E-01 0.78750000E+00 -0.35223414E-01 -0.82827416E-01 -0.17095338E-01 0.71982675E-01 0.79000000E+00 -0.43378424E-01 -0.84143635E-01 -0.97764327E-02 0.77917841E-01 0.79250000E+00 -0.51626139E-01 -0.84717753E-01 -0.18966020E-02 0.83462232E-01 0.79500000E+00 -0.59891513E-01 -0.84497007E-01 0.65020692E-02 0.88534934E-01 0.79750000E+00 -0.68094562E-01 -0.83433129E-01 0.15369559E-01 0.93054372E-01 0.80000000E+00 -0.76150841E-01 -0.81483121E-01 0.24647886E-01 0.96939198E-01 0.80250000E+00 -0.83971998E-01 -0.78610032E-01 0.34271178E-01 0.10010924E+00 0.80500000E+00 -0.91466399E-01 -0.74783719E-01 0.44165838E-01 0.10248656E+00 0.80750000E+00 -0.98539831E-01 -0.69981591E-01 0.54250810E-01 0.10399651E+00 0.81000000E+00 -0.10509627E+00 -0.64189315E-01 0.64437961E-01 0.10456886E+00 0.81250000E+00 -0.11103874E+00 -0.57401491E-01 0.74632565E-01 0.10413895E+00 0.81500000E+00 -0.11627017E+00 -0.49622261E-01 0.84733899E-01 0.10264879E+00 0.81750000E+00 -0.12069440E+00 -0.40865862E-01 0.94635950E-01 0.10004810E+00 0.82000000E+00 -0.12421717E+00 -0.31157107E-01 0.10422822E+00 0.96295344E-01 0.82250000E+00 -0.12674718E+00 -0.20531779E-01 0.11339660E+00 0.91358554E-01 0.82500000E+00 -0.12819717E+00 -0.90369338E-02 0.12202438E+00 0.85216119E-01 0.82750000E+00 -0.12848501E+00 0.32688954E-02 0.12999326E+00 0.77857377E-01 0.83000000E+00 -0.12753488E+00 0.16315594E-01 0.13718446E+00 0.69283073E-01 0.83250000E+00 -0.12527835E+00 0.30021474E-01 0.14347983E+00 0.59505670E-01 0.83500000E+00 -0.12165553E+00 0.44293395E-01 0.14876304E+00 0.48549520E-01 0.83750000E+00 -0.11661618E+00 0.59026994E-01 0.15292069E+00 0.36450934E-01 0.84000000E+00 -0.11012075E+00 0.74107033E-01 0.15584353E+00 0.23258176E-01 0.84250000E+00 -0.10214150E+00 0.89407858E-01 0.15742759E+00 0.90314250E-02 0.84500000E+00 -0.92663389E-01 0.10479397E+00 0.15757537E+00 -0.61572425E-02 0.84750000E+00 -0.81685097E-01 0.12012072E+00 0.15619697E+00 -0.22223806E-01 0.85000000E+00 -0.69219818E-01 0.13523509E+00 0.15321130E+00 -0.39072152E-01 0.85250000E+00 -0.55296055E-01 0.14997665E+00 0.14854722E+00 -0.56593794E-01 0.85500000E+00 -0.39958298E-01 0.16417854E+00 0.14214484E+00 -0.74667438E-01 0.85750000E+00 -0.23267584E-01 0.17766865E+00 0.13395674E+00 -0.93158430E-01 0.86000000E+00 -0.53019603E-02 0.19027092E+00 0.12394930E+00 -0.11191810E+00 0.86250000E+00 0.13843208E-01 0.20180674E+00 0.11210417E+00 -0.13078307E+00 0.86500000E+00 0.34055058E-01 0.21209650E+00 0.98419652E-01 -0.14957467E+00 0.86750000E+00 0.55203214E-01 0.22096131E+00 0.82912267E-01 -0.16809854E+00 0.87000000E+00 0.77139949E-01 0.22822483E+00 0.65618277E-01 -0.18614457E+00 0.87250000E+00 0.99700530E-01 0.23371530E+00 0.46595205E-01 -0.20348737E+00 0.87500000E+00 0.12270376E+00 0.23726767E+00 0.25923275E-01 -0.21988745E+00 0.87750000E+00 0.14595277E+00 0.23872587E+00 0.37067009E-02 -0.23509317E+00 0.88000000E+00 0.16923597E+00 0.23794522E+00 -0.19925263E-01 -0.24884370E+00 0.88250000E+00 0.19232832E+00 0.23479493E+00 -0.44817608E-01 -0.26087293E+00 0.88500000E+00 0.21499278E+00 0.22916059E+00 -0.70789297E-01 -0.27091452E+00 0.88750000E+00 0.23698206E+00 0.22094673E+00 -0.97633514E-01 -0.27870774E+00 0.89000000E+00 0.25804057E+00 0.21007929E+00 -0.12511854E+00 -0.28400421E+00 0.89250000E+00 0.27790662E+00 0.19650799E+00 -0.15298930E+00 -0.28657510E+00 0.89500000E+00 0.29631489E+00 0.18020849E+00 -0.18096965E+00 -0.28621853E+00 0.89750000E+00 0.31299900E+00 0.16118433E+00 -0.20876533E+00 -0.28276673E+00 0.90000000E+00 0.32769436E+00 0.13946848E+00 -0.23606766E+00 -0.27609237E+00 0.90250000E+00 0.34014108E+00 0.11512463E+00 -0.26255769E+00 -0.26611390E+00 0.90500000E+00 0.35008703E+00 0.88247853E-01 -0.28791092E+00 -0.25279897E+00 0.90750000E+00 0.35729088E+00 0.58965017E-01 -0.31180215E+00 -0.23616597E+00 0.91000000E+00 0.36152526E+00 0.27434545E-01 -0.33391045E+00 -0.21628320E+00 0.91250000E+00 0.36257976E+00 -0.61542099E-02 -0.35392383E+00 -0.19326554E+00 0.91500000E+00 0.36026394E+00 -0.41582056E-01 -0.37154359E+00 -0.16726882E+00 0.91750000E+00 0.35441013E+00 -0.78601443E-01 -0.38648795E+00 -0.13848217E+00 0.92000000E+00 0.34487614E+00 -0.11693826E+00 -0.39849481E+00 -0.10711883E+00 0.92250000E+00 0.33154777E+00 -0.15629385E+00 -0.40732369E+00 -0.73406177E-01 0.92500000E+00 0.31434107E+00 -0.19634719E+00 -0.41275658E+00 -0.37575975E-01 0.92750000E+00 0.29320443E+00 -0.23675705E+00 -0.41459795E+00 0.14423913E-03 0.93000000E+00 0.26812043E+00 -0.27716421E+00 -0.41267400E+00 0.39537487E-01 0.93250000E+00 0.23910754E+00 -0.31719348E+00 -0.40683147E+00 0.80400395E-01 0.93500000E+00 0.20622153E+00 -0.35645568E+00 -0.39693629E+00 0.12254210E+00 0.93750000E+00 0.16955677E+00 -0.39454941E+00 -0.38287266E+00 0.16577839E+00 0.94000000E+00 0.12924734E+00 -0.43106286E+00 -0.36454283E+00 0.20992087E+00 0.94250000E+00 0.85467952E-01 -0.46557561E+00 -0.34186828E+00 0.25476121E+00 0.94500000E+00 0.38434696E-01 -0.49766060E+00 -0.31479257E+00 0.30005137E+00 0.94750000E+00 -0.11594423E-01 -0.52688655E+00 -0.28328636E+00 0.34548078E+00 0.95000000E+00 -0.64319215E-01 -0.55282091E+00 -0.24735463E+00 0.39065240E+00 0.95250000E+00 -0.11939735E+00 -0.57503370E+00 -0.20704628E+00 0.43505968E+00 0.95500000E+00 -0.17644486E+00 -0.59310228E+00 -0.16246583E+00 0.47806723E+00 0.95750000E+00 -0.23503710E+00 -0.60661751E+00 -0.11378666E+00 0.51889770E+00 0.96000000E+00 -0.29471047E+00 -0.61519107E+00 -0.61265155E-01 0.55662795E+00 0.96250000E+00 -0.35496480E+00 -0.61846431E+00 -0.52546740E-02 0.59019684E+00 0.96500000E+00 -0.41526679E+00 -0.61611832E+00 0.53781928E-01 0.61842664E+00 0.96750000E+00 -0.47505439E+00 -0.60788512E+00 0.11526256E+00 0.64005938E+00 0.97000000E+00 -0.53374237E+00 -0.59355961E+00 0.17848045E+00 0.65380788E+00 0.97250000E+00 -0.59072905E+00 -0.57301180E+00 0.24260431E+00 0.65842027E+00 0.97500000E+00 -0.64540419E+00 -0.54619866E+00 0.30668541E+00 0.65275504E+00 0.97750000E+00 -0.69715806E+00 -0.51317490E+00 0.36967229E+00 0.63586221E+00 0.98000000E+00 -0.74539141E+00 -0.47410204E+00 0.43043340E+00 0.60706500E+00 0.98250000E+00 -0.78952624E+00 -0.42925472E+00 0.48778761E+00 0.56603530E+00 0.98500000E+00 -0.82901703E+00 -0.37902380E+00 0.54054138E+00 0.51285594E+00 0.98750000E+00 -0.86336205E+00 -0.32391558E+00 0.58753112E+00 0.44806299E+00 0.99000000E+00 -0.89211445E+00 -0.26454659E+00 0.62766849E+00 0.37266254E+00 0.99250000E+00 -0.91489256E+00 -0.20163411E+00 0.65998590E+00 0.28811803E+00 0.99500000E+00 -0.93138910E+00 -0.13598218E+00 0.68367929E+00 0.19630678E+00 0.99750000E+00 -0.94137880E+00 -0.68463844E-01 0.69814520E+00 0.99447037E-01 0.10000000E+01 -0.94472411E+00 -0.18626971E-07 0.70300944E+00 -0.85249654E-07 auto/07p/demos/rev/c.rev.30000640000175000017500000000066613570013207013256 0ustar skskdat='rev.dat.3' PAR={11:47.4464189} NDIM= 4, IPS = 9, IRS = 0, ILP = 1 ICP = [1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.02, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: [-1.0, 0.0, 1.0, 1.6, 1.7]} IEQUIB = 0 IREV = [1,0,1,0] auto/07p/demos/fnb/0000750000175000017500000000000013570013207012115 5ustar skskauto/07p/demos/fnb/fhn.c0000640000175000017500000000702613570013207013042 0ustar sksk#include "auto_f2c.h" extern struct { integer itwist, istart, iequib, nfixed, npsi, nunstab, nstab, nrev; } blhom_1; /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* fhn : Homoclinic bifurcations in Fitz-Hugh Nagumo System */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int func(integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *f, doublereal *dfdu, doublereal *dfdp) { /* System generated locals */ integer dfdu_dim1 = ndim, dfdp_dim1 = ndim; /* Function Body */ f[0] = u[1]; f[1] = par[0] * u[1] + u[0] * (u[0] - par[1]) * (u[0] - 1.) + u[2]; f[2] = par[2] * u[0] / par[0]; if (ijac == 0) { return 0; } ARRAY2D(dfdu,0,0) = 0.; ARRAY2D(dfdu,0,1) = 1.; ARRAY2D(dfdu,0,2) = 0.; ARRAY2D(dfdu,1,0) = u[0] * 3 * u[0] - (par[1] + 1) * 2 * u[0] + par[1]; ARRAY2D(dfdu,1,1) = par[0]; ARRAY2D(dfdu,1,2) = 1.; ARRAY2D(dfdu,2,0) = par[2] / par[0]; ARRAY2D(dfdu,2,1) = 0.; ARRAY2D(dfdu,2,2) = 0.; if (ijac == 1) { return 0; } ARRAY2D(dfdp,0,0) = 0.; ARRAY2D(dfdp,0,1) = 0.; ARRAY2D(dfdp,0,2) = 0.; ARRAY2D(dfdp,1,0) = u[1]; ARRAY2D(dfdp,1,1) = -u[0] * (u[0] - 1.); ARRAY2D(dfdp,1,2) = 0.; ARRAY2D(dfdp,2,0) = -par[2] * u[0] / (par[0] * par[0]); ARRAY2D(dfdp,2,1) = 0.; ARRAY2D(dfdp,2,2) = u[0] / par[0]; return 0; } /* func */ int stpnt(integer ndim, doublereal t, doublereal *u, doublereal *par) { /* ---------------- */ /* Sets parameter values for homoclinic bifurcation analysis (IPS=9). */ /* COMMON block needed if IPS=9 (homoclinic bifurcations) : */ /* ---------------------------------------------------------------------- */ /* Problem parameters (only PAR(1-9) are available to the user) : */ /* Function Body */ par[0] = .21; /* c */ par[1] = .2; /* a */ par[2] = .0025; /* b = epsilon */ par[10] = .1; /* ---------------------------------------------------------------------- */ /* If IEQUIB=1 then put the equilibrium in PAR(11+i), i=1,...,NDIM : */ /* truncated time interval */ if (blhom_1.iequib != 0) { par[11] = 0.; par[12] = 0.; par[13] = 0.; } /* ---------------------------------------------------------------------- */ /* Distance along the unstable manifold : */ if (blhom_1.istart == 3) { par[ndim * blhom_1.iequib + 11] = 1e-5; } /* ---------------------------------------------------------------------- */ return 0; } /* stpnt */ /* Subroutine */ int pvls(integer ndim, const doublereal *u, doublereal *par) { return 0; } /* pvls */ /* Subroutine */ int bcnd(integer ndim, const doublereal *par, const integer *icp, integer nbc, const doublereal *u0, const doublereal *u1, integer ijac, doublereal *fb, doublereal *dbc) { return 0; } /* bcnd */ /* Subroutine */ int icnd(integer ndim, const doublereal *par, const integer *icp, integer nint, const doublereal *u, const doublereal *uold, const doublereal *udot, const doublereal *upold, integer ijac, doublereal *fi, doublereal *dint) { return 0; } /* icnd */ /* Subroutine */ int fopt(integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *fs, doublereal *dfdu, doublereal *dfdp) { return 0; } /* fopt */ auto/07p/demos/fnb/c.fhn.70000640000175000017500000000063013570013207013201 0ustar skskNDIM= 3, IPS = 9, IRS = 49, ILP = 1 ICP = [2, 1] NTST= 60, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -1.0, DSMIN=0.0001, DSMAX= 15.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {2: [0.0, -0.01, 0.02, 0.05, 0.1, 0.2]} ITWIST = 0, ISTART = 0 auto/07p/demos/fnb/clean.auto0000640000175000017500000000022313570013207014067 0ustar sksk#============== # AUTO Demo fnb #============== print "\n***Clean the directory***" dl("1") dl("2") dl("3") dl("4") dl("5") dl("6") dl("7") cl() auto/07p/demos/fnb/c.fhn0000640000175000017500000000057413570013207013043 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {17: 0.0} ITWIST = 0, ISTART = 3 auto/07p/demos/fnb/c.fhn.20000640000175000017500000000060713570013207013200 0ustar skskNDIM= 3, IPS = 9, IRS = 4, ILP = 0 ICP = [11, 2] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 50, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.2, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [300.0, 1000.0]} ITWIST = 0, ISTART = 3 auto/07p/demos/fnb/c.fhn.30000640000175000017500000000060713570013207013201 0ustar skskNDIM= 3, IPS = 9, IRS = 11, ILP = 0 ICP = [11, 2] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 50, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN= 0.001, DSMAX= 10.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [300.0, 1000.0]} ITWIST = 0, ISTART = 0 auto/07p/demos/fnb/c.fhn.10000640000175000017500000000057413570013207013202 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {17: 0.0} ITWIST = 0, ISTART = 3 auto/07p/demos/fnb/fhn.auto0000640000175000017500000000036113570013207013563 0ustar skskr1 = run('fhn',sv='1') r2 = run(r1('UZ1'),c='fhn.2',sv='2') r3 = run(r2('UZ1'),c='fhn.3',sv='3') r4 = run(r3('UZ1'),c='fhn.4',sv='4') r5 = run(r4('UZ5'),c='fhn.5',sv='5') r6 = run(r5,c='fhn.6',sv='6') r7 = run(r6('UZ')[-3],c='fhn.7',sv='7') auto/07p/demos/fnb/c.fhn.50000640000175000017500000000061413570013207013201 0ustar skskNDIM= 3, IPS = 9, IRS = 20, ILP = 0 ICP = [9, 3] NTST= 80, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -1.0, DSMIN=0.0001, DSMAX= 15.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: [-0.1, 0.1]} ITWIST = 1, ISTART = 0 IPSI = [] auto/07p/demos/fnb/c.fhn.60000640000175000017500000000057613570013207013211 0ustar skskNDIM= 3, IPS = 9, IRS = 29, ILP = 0 ICP = [21, 1, 22] NTST= 80, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 1000, NPR= 200, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = -1.3, DSMIN= 1.3, DSMAX= 5.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0} ITWIST = 1, ISTART = -2 auto/07p/demos/fnb/c.fhn.40000640000175000017500000000066013570013207013201 0ustar skskNDIM= 3, IPS = 9, IRS = 14, ILP = 1 ICP = [2, 1, 22] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 2: [0.0, -0.01, 0.02, 0.05, 0.1, 0.2]} ITWIST = 0, ISTART = 0 IPSI = [2] auto/07p/demos/pen/0000750000175000017500000000000013570013207012132 5ustar skskauto/07p/demos/pen/pen.auto0000640000175000017500000000134613570013207013613 0ustar sksk#========= # Demo pen #========= pgm = 'pen' print pgm, ": first run : locate a period doubling bifurcation" pen=run(pgm,c='pen.1') print pgm, ": second run : a bifurcating branch of out-of-phase rotations" pen=pen+run(pen('PD1'),c='pen.2') print pgm, ": third run : a secondary bifurcating branch (without bifurcation detection)" pen=pen+run(pen('BP1'),c='pen.3') print pgm, ": fourth run : another secondary bifurcating branch (without bifurcation detection)" pen=pen+run(pen('BP2'),c='pen.4') save(pen,'pen') print pgm, ": fifth run : generate starting data for period doubling continuation" t=run(pen('PD1'),c='pen.5') print pgm, ": sixth run : compute a locus of period doubling bifurcations; restart from t" pd=run(t,sv='pd') auto/07p/demos/pen/clean.auto0000640000175000017500000000015613570013207014111 0ustar sksk#============== # AUTO Demo pen #============== print "\n***Clean the directory***" dl("pen") dl("pd") cl() auto/07p/demos/pen/c.pen.50000640000175000017500000000055713570013207013233 0ustar skskNDIM= 4, IPS = 2, IRS = 2, ILP = 0 ICP = [2, 3, 11] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/c.pen0000640000175000017500000000057013570013207013063 0ustar skskdat = 'pen' NDIM= 4, IPS = 2, IRS = 0, ILP = 0 ICP = [3, 11] NTST= 15, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 0.1, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/c.pen.40000640000175000017500000000055413570013207013227 0ustar skskNDIM= 4, IPS = 2, IRS = 5, ILP = 0 ICP = [3, 11] NTST= 30, NCOL= 4, IAD = 3, ISP = 1, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/pen.dat0000640000175000017500000001701713570013207013415 0ustar sksk 0.0000000000E+00 1.2403680193E+00 1.2403680193E+00 4.0783200778E+00 4.0783200778E+00 1.2412355801E-02 1.3198568477E+00 1.3198568477E+00 4.0594741698E+00 4.0594741698E+00 2.4824711603E-02 1.3989739194E+00 1.3989739194E+00 4.0402808315E+00 4.0402808315E+00 3.7237067404E-02 1.4777136344E+00 1.4777136344E+00 4.0208615884E+00 4.0208615884E+00 4.9649423206E-02 1.5560727639E+00 1.5560727639E+00 4.0013376727E+00 4.0013376727E+00 6.1782092165E-02 1.6322975681E+00 1.6322975681E+00 3.9822678366E+00 3.9822678366E+00 7.3914761124E-02 1.7081592516E+00 1.7081592516E+00 3.9633234056E+00 3.9633234056E+00 8.6047430084E-02 1.7836612451E+00 1.7836612451E+00 3.9446126088E+00 3.9446126088E+00 9.8180099043E-02 1.8588090185E+00 1.8588090185E+00 3.9262408124E+00 3.9262408124E+00 1.1069257885E-01 1.9359461575E+00 1.9359461575E+00 3.9077569252E+00 3.9077569252E+00 1.2320505866E-01 2.0127247996E+00 2.0127247996E+00 3.8898496855E+00 3.8898496855E+00 1.3571753847E-01 2.0891573171E+00 2.0891573171E+00 3.8726218201E+00 3.8726218201E+00 1.4823001828E-01 2.1652580537E+00 2.1652580537E+00 3.8561707779E+00 3.8561707779E+00 1.6159008277E-01 2.2461658726E+00 2.2461658726E+00 3.8395664333E+00 3.8395664333E+00 1.7495014727E-01 2.3267358870E+00 2.3267358870E+00 3.8240565489E+00 3.8240565489E+00 1.8831021177E-01 2.4069921286E+00 2.4069921286E+00 3.8097371716E+00 3.8097371716E+00 2.0167027626E-01 2.4869605594E+00 2.4869605594E+00 3.7966958685E+00 3.7966958685E+00 2.1655359577E-01 2.5757416715E+00 2.5757416715E+00 3.7837686750E+00 3.7837686750E+00 2.3143691527E-01 2.6642406519E+00 2.6642406519E+00 3.7726211247E+00 3.7726211247E+00 2.4632023478E-01 2.7525001618E+00 2.7525001618E+00 3.7633350127E+00 3.7633350127E+00 2.6120355428E-01 2.8405646111E+00 2.8405646111E+00 3.7559778329E+00 3.7559778329E+00 2.7728936315E-01 2.9355778046E+00 2.9355778046E+00 3.7502561518E+00 3.7502561518E+00 2.9337517202E-01 3.0304759890E+00 3.0304759890E+00 3.7468972374E+00 3.7468972374E+00 3.0946098089E-01 3.1253193594E+00 3.1253193594E+00 3.7459289259E+00 3.7459289259E+00 3.2554678976E-01 3.2201685618E+00 3.2201685618E+00 3.7473590169E+00 3.7473590169E+00 3.3956988778E-01 3.3029072109E+00 3.3029072109E+00 3.7505534652E+00 3.7505534652E+00 3.5359298579E-01 3.3857362098E+00 3.3857362098E+00 3.7555411405E+00 3.7555411405E+00 3.6761608380E-01 3.4686947949E+00 3.4686947949E+00 3.7622900225E+00 3.7622900225E+00 3.8163918182E-01 3.5518213697E+00 3.5518213697E+00 3.7707566435E+00 3.7707566435E+00 3.9464445690E-01 3.6290971875E+00 3.6290971875E+00 3.7800963502E+00 3.7800963502E+00 4.0764973199E-01 3.7065783826E+00 3.7065783826E+00 3.7908140649E+00 3.7908140649E+00 4.2065500707E-01 3.7842925492E+00 3.7842925492E+00 3.8028492150E+00 3.8028492150E+00 4.3366028216E-01 3.8622659588E+00 3.8622659588E+00 3.8161331609E+00 3.8161331609E+00 4.4603656863E-01 3.9367316670E+00 3.9367316670E+00 3.8298644516E+00 3.8298644516E+00 4.5841285510E-01 4.0114746053E+00 4.0114746053E+00 3.8445849551E+00 3.8445849551E+00 4.7078914156E-01 4.0865132828E+00 4.0865132828E+00 3.8602161365E+00 3.8602161365E+00 4.8316542803E-01 4.1618646217E+00 4.1618646217E+00 3.8766735838E+00 3.8766735838E+00 4.9533534475E-01 4.2362791680E+00 4.2362791680E+00 3.8935750414E+00 3.8935750414E+00 5.0750526146E-01 4.3110235462E+00 4.3110235462E+00 3.9110977992E+00 3.9110977992E+00 5.1967517818E-01 4.3861087490E+00 4.3861087490E+00 3.9291466803E+00 3.9291466803E+00 5.3184509490E-01 4.4615439057E+00 4.4615439057E+00 3.9476222807E+00 3.9476222807E+00 5.4464972206E-01 4.5412989906E+00 4.5412989906E+00 3.9674087134E+00 3.9674087134E+00 5.5745434923E-01 4.6214554009E+00 4.6214554009E+00 3.9874290208E+00 3.9874290208E+00 5.7025897639E-01 4.7020165672E+00 4.7020165672E+00 4.0075556709E+00 4.0075556709E+00 5.8306360356E-01 4.7829833236E+00 4.7829833236E+00 4.0276584980E+00 4.0276584980E+00 5.9484036020E-01 4.8578071601E+00 4.8578071601E+00 4.0460131440E+00 4.0460131440E+00 6.0661711684E-01 4.9329691829E+00 4.9329691829E+00 4.0641325041E+00 4.0641325041E+00 6.1839387347E-01 5.0084640716E+00 5.0084640716E+00 4.0819131180E+00 4.0819131180E+00 6.3017063011E-01 5.0842845937E+00 5.0842845937E+00 4.0992521194E+00 4.0992521194E+00 6.4120831128E-01 5.1556343689E+00 5.1556343689E+00 4.1150116901E+00 4.1150116901E+00 6.5224599245E-01 5.2272531767E+00 5.2272531767E+00 4.1302118991E+00 4.1302118991E+00 6.6328367362E-01 5.2991306022E+00 5.2991306022E+00 4.1447726804E+00 4.1447726804E+00 6.7432135479E-01 5.3712548620E+00 5.3712548620E+00 4.1586165179E+00 4.1586165179E+00 6.8524495454E-01 5.4428638348E+00 5.4428638348E+00 4.1715383134E+00 4.1715383134E+00 6.9616855430E-01 5.5146878035E+00 5.5146878035E+00 4.1836162093E+00 4.1836162093E+00 7.0709215405E-01 5.5867116991E+00 5.5867116991E+00 4.1947854144E+00 4.1947854144E+00 7.1801575380E-01 5.6589193760E+00 5.6589193760E+00 4.2049855187E+00 4.2049855187E+00 7.2950518546E-01 5.7350468113E+00 5.7350468113E+00 4.2146073016E+00 4.2146073016E+00 7.4099461711E-01 5.8113375379E+00 5.8113375379E+00 4.2230370607E+00 4.2230370607E+00 7.5248404877E-01 5.8877695283E+00 5.8877695283E+00 4.2302232829E+00 4.2302232829E+00 7.6397348042E-01 5.9643198900E+00 5.9643198900E+00 4.2361218013E+00 4.2361218013E+00 7.7754651141E-01 6.0548727929E+00 6.0548727929E+00 4.2413815167E+00 4.2413815167E+00 7.9111954239E-01 6.1455178883E+00 6.1455178883E+00 4.2447480313E+00 4.2447480313E+00 8.0469257337E-01 6.2362144029E+00 6.2362144029E+00 4.2461920311E+00 4.2461920311E+00 8.1826560436E-01 6.3269211148E+00 6.3269211148E+00 4.2457008159E+00 4.2457008159E+00 8.2949053835E-01 6.4019140799E+00 6.4019140799E+00 4.2438349549E+00 4.2438349549E+00 8.4071547234E-01 6.4768624820E+00 6.4768624820E+00 4.2406589777E+00 4.2406589777E+00 8.5194040634E-01 6.5517433344E+00 6.5517433344E+00 4.2361915777E+00 4.2361915777E+00 8.6316534033E-01 6.6265340476E+00 6.6265340476E+00 4.2304590316E+00 4.2304590316E+00 8.7405668198E-01 6.6989950137E+00 6.6989950137E+00 4.2237193401E+00 4.2237193401E+00 8.8494802363E-01 6.7713307704E+00 6.7713307704E+00 4.2158573577E+00 4.2158573577E+00 8.9583936528E-01 6.8435224444E+00 6.8435224444E+00 4.2069161734E+00 4.2069161734E+00 9.0673070693E-01 6.9155519495E+00 6.9155519495E+00 4.1969445335E+00 4.1969445335E+00 9.1785196725E-01 6.9889167939E+00 6.9889167939E+00 4.1857552758E+00 4.1857552758E+00 9.2897322757E-01 7.0620773287E+00 7.0620773287E+00 4.1736107947E+00 4.1736107947E+00 9.4009448789E-01 7.1350174224E+00 7.1350174224E+00 4.1605787006E+00 4.1605787006E+00 9.5121574821E-01 7.2077221645E+00 7.2077221645E+00 4.1467309338E+00 4.1467309338E+00 9.6341181116E-01 7.2871666863E+00 7.2871666863E+00 4.1306971601E+00 4.1306971601E+00 9.7560787410E-01 7.3662957279E+00 7.3662957279E+00 4.1138780874E+00 4.1138780874E+00 9.8780393705E-01 7.4450952516E+00 7.4450952516E+00 4.0963819709E+00 4.0963819709E+00 1.0000000000E+00 7.5235533265E+00 7.5235533265E+00 4.0783200778E+00 4.0783200778E+00 auto/07p/demos/pen/pen.f900000640000175000017500000000333713570013207013243 0ustar sksk!------------------------------------------------------------------------------ !------------------------------------------------------------------------------ ! pen : Coupled pendula (or rotations in coupled Josephson junctions) !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION GAMMA,EPS,RI,PH1,PH2,PS1,PS2 GAMMA = PAR(1) EPS = PAR(2) RI = PAR(3) PH1=U(1) PH2=U(2) PS1=U(3) PS2=U(4) F(1)= PS1 F(2)= PS2 F(3)= -EPS*PS1 - SIN(PH1) + RI + GAMMA*(PH2-PH1) F(4)= -EPS*PS2 - SIN(PH2) + RI + GAMMA*(PH1-PH2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION GAMMA,EPS,RI GAMMA=0.175 EPS=0.1 RI=0.4 PAR(1)=GAMMA PAR(2)=EPS PAR(3)=RI ! Set the actual period (since the data in pen.dat have scaled time variable) PAR(11)=1.5738797205 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/pen/c.pen.30000640000175000017500000000055413570013207013226 0ustar skskNDIM= 4, IPS = 2, IRS = 4, ILP = 0 ICP = [3, 11] NTST= 30, NCOL= 4, IAD = 3, ISP = 1, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/c.pen.10000640000175000017500000000057013570013207013222 0ustar skskdat = 'pen' NDIM= 4, IPS = 2, IRS = 0, ILP = 0 ICP = [3, 11] NTST= 15, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 0.1, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/c.pen.20000640000175000017500000000055413570013207013225 0ustar skskNDIM= 4, IPS = 2, IRS = 2, ILP = 0 ICP = [3, 11] NTST= 30, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/pen/c.pen.60000640000175000017500000000055713570013207013234 0ustar skskNDIM= 4, IPS = 2, IRS = 9, ILP = 0 ICP = [2, 3, 11] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {11: 30.0} auto/07p/demos/cir/0000750000175000017500000000000013570013207012125 5ustar skskauto/07p/demos/cir/c.cir.30000640000175000017500000000067213570013207013215 0ustar skskNDIM= 3, IPS = 9, IRS = 5, ILP = 0 ICP = [1, 2, 22, 24, 25, 29, 30] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 27, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.01, DSMIN=0.0001, DSMAX= 0.02, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 24: 0.0, 25: 0.0, 29: 0.0, 30: 0.0} IEQUIB = 0 IPSI = [2,4,5,9,10] auto/07p/demos/cir/c.cir.10000640000175000017500000000060613570013207013210 0ustar skskdat = 'cir' NDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 0, IID = 1, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN=0.0001, DSMAX= 5.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [100.0, 200.0]} IEQUIB = 0 auto/07p/demos/cir/c.cir.20000640000175000017500000000071413570013207013211 0ustar skskNDIM= 3, IPS = 9, IRS = 3, ILP = 0 ICP = [1, 2, 22, 24, 25, 29, 30] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {2: [0.01, -0.01], 22: 0.0, 24: 0.0, 25: 0.0, 29: 0.0, 30: 0.0} IEQUIB = 0 IPSI = [2,4,5,9,10] auto/07p/demos/cir/clean.auto0000640000175000017500000000015313570013207014101 0ustar sksk#============== # AUTO Demo cir #============== print "\n***Clean the directory***" dl("1") dl("2") cl() auto/07p/demos/cir/cir.dat0000640000175000017500000005605313570013207013406 0ustar sksk 0.00000000D+00 0.90407259D-03 0.14610608D-03 0.40162889D-03 0.27677830D-02 0.93756671D-03 0.15151908D-03 0.41650850D-03 0.55355660D-02 0.97230172D-03 0.15713262D-03 0.43193938D-03 0.83033490D-02 0.10083236D-02 0.16295412D-03 0.44794196D-03 0.11071132D-01 0.10456800D-02 0.16899129D-03 0.46453740D-03 0.13838915D-01 0.10844204D-02 0.17525212D-03 0.48174767D-03 0.16606698D-01 0.11245960D-02 0.18174490D-03 0.49959555D-03 0.19374481D-01 0.11662600D-02 0.18847821D-03 0.51810467D-03 0.22142264D-01 0.12094676D-02 0.19546098D-03 0.53729951D-03 0.24910047D-01 0.12542759D-02 0.20270244D-03 0.55720548D-03 0.27677830D-01 0.13007443D-02 0.21021217D-03 0.57784894D-03 0.30445613D-01 0.13489342D-02 0.21800012D-03 0.59925719D-03 0.33213396D-01 0.13989094D-02 0.22607659D-03 0.62145857D-03 0.35981179D-01 0.14507360D-02 0.23445226D-03 0.64448248D-03 0.38748962D-01 0.15044827D-02 0.24313824D-03 0.66835936D-03 0.41516745D-01 0.15602206D-02 0.25214600D-03 0.69312084D-03 0.44284528D-01 0.16180233D-02 0.26148748D-03 0.71879968D-03 0.47052311D-01 0.16779675D-02 0.27117503D-03 0.74542987D-03 0.49820094D-01 0.17401325D-02 0.28122148D-03 0.77304665D-03 0.52587877D-01 0.18046005D-02 0.29164011D-03 0.80168657D-03 0.55355660D-01 0.18714568D-02 0.30244473D-03 0.83138753D-03 0.58123443D-01 0.19407899D-02 0.31364962D-03 0.86218885D-03 0.60891226D-01 0.20126915D-02 0.32526963D-03 0.89413129D-03 0.63659009D-01 0.20872569D-02 0.33732011D-03 0.92725712D-03 0.66426792D-01 0.21645846D-02 0.34981702D-03 0.96161018D-03 0.69194575D-01 0.22447770D-02 0.36277691D-03 0.99723595D-03 0.71962358D-01 0.23279402D-02 0.37621691D-03 0.10341816D-02 0.74730141D-01 0.24141843D-02 0.39015481D-03 0.10724959D-02 0.77497924D-01 0.25036233D-02 0.40460907D-03 0.11122297D-02 0.80265707D-01 0.25963756D-02 0.41959879D-03 0.11534356D-02 0.83033490D-01 0.26925640D-02 0.43514382D-03 0.11961680D-02 0.85801273D-01 0.27923156D-02 0.45126473D-03 0.12404835D-02 0.88569056D-01 0.28957626D-02 0.46798286D-03 0.12864408D-02 0.91336839D-01 0.30030417D-02 0.48532032D-03 0.13341007D-02 0.94104622D-01 0.31142948D-02 0.50330004D-03 0.13835262D-02 0.96872405D-01 0.32296692D-02 0.52194582D-03 0.14347828D-02 0.99640188D-01 0.33493174D-02 0.54128233D-03 0.14879384D-02 0.10240797D+00 0.34733978D-02 0.56133516D-03 0.15430631D-02 0.10517575D+00 0.36020746D-02 0.58213083D-03 0.16002301D-02 0.10794354D+00 0.37355179D-02 0.60369687D-03 0.16595149D-02 0.11071132D+00 0.38739042D-02 0.62606178D-03 0.17209961D-02 0.11347910D+00 0.40174165D-02 0.64925516D-03 0.17847548D-02 0.11624689D+00 0.41662447D-02 0.67330770D-03 0.18508756D-02 0.11901467D+00 0.43205856D-02 0.69825121D-03 0.19194460D-02 0.12178245D+00 0.44806434D-02 0.72411869D-03 0.19905566D-02 0.12455024D+00 0.46466296D-02 0.75094434D-03 0.20643016D-02 0.12731802D+00 0.48187636D-02 0.77876365D-03 0.21407785D-02 0.13008580D+00 0.49972732D-02 0.80761340D-03 0.22200886D-02 0.13285358D+00 0.51823944D-02 0.83753177D-03 0.23023368D-02 0.13562137D+00 0.53743719D-02 0.86855830D-03 0.23876318D-02 0.13838915D+00 0.55734593D-02 0.90073402D-03 0.24760867D-02 0.14115693D+00 0.57799199D-02 0.93410147D-03 0.25678183D-02 0.14392472D+00 0.59940264D-02 0.96870477D-03 0.26629480D-02 0.14669250D+00 0.62160620D-02 0.10045897D-02 0.27616018D-02 0.14946028D+00 0.64463199D-02 0.10418036D-02 0.28639102D-02 0.15222807D+00 0.66851043D-02 0.10803957D-02 0.29700084D-02 0.15499585D+00 0.69327305D-02 0.11204171D-02 0.30800369D-02 0.15776363D+00 0.71895257D-02 0.11619206D-02 0.31941411D-02 0.16053141D+00 0.74558291D-02 0.12049610D-02 0.33124721D-02 0.16329920D+00 0.77319922D-02 0.12495952D-02 0.34351864D-02 0.16606698D+00 0.80183794D-02 0.12958822D-02 0.35624462D-02 0.16883476D+00 0.83153688D-02 0.13438831D-02 0.36944198D-02 0.17160255D+00 0.86233523D-02 0.13936613D-02 0.38312819D-02 0.17437033D+00 0.89427362D-02 0.14452825D-02 0.39732134D-02 0.17713811D+00 0.92739417D-02 0.14988149D-02 0.41204021D-02 0.17990590D+00 0.96174054D-02 0.15543291D-02 0.42730424D-02 0.18267368D+00 0.99735802D-02 0.16118983D-02 0.44313363D-02 0.18544146D+00 0.10342935D-01 0.16715986D-02 0.45954930D-02 0.18820924D+00 0.10725957D-01 0.17335086D-02 0.47657296D-02 0.19097703D+00 0.11123151D-01 0.17977100D-02 0.49422710D-02 0.19374481D+00 0.11535038D-01 0.18642875D-02 0.51253507D-02 0.19651259D+00 0.11962161D-01 0.19333286D-02 0.53152105D-02 0.19928038D+00 0.12405083D-01 0.20049245D-02 0.55121015D-02 0.20204816D+00 0.12864384D-01 0.20791694D-02 0.57162837D-02 0.20481594D+00 0.13340669D-01 0.21561610D-02 0.59280269D-02 0.20758373D+00 0.13834563D-01 0.22360007D-02 0.61476107D-02 0.21035151D+00 0.14346714D-01 0.23187934D-02 0.63753253D-02 0.21311929D+00 0.14877794D-01 0.24046480D-02 0.66114713D-02 0.21588707D+00 0.15428499D-01 0.24936773D-02 0.68563607D-02 0.21865486D+00 0.15999549D-01 0.25859983D-02 0.71103165D-02 0.22142264D+00 0.16591694D-01 0.26817320D-02 0.73736739D-02 0.22419042D+00 0.17205705D-01 0.27810042D-02 0.76467807D-02 0.22695821D+00 0.17842387D-01 0.28839447D-02 0.79299970D-02 0.22972599D+00 0.18502569D-01 0.29906887D-02 0.82236963D-02 0.23249377D+00 0.19187113D-01 0.31013757D-02 0.85282660D-02 0.23526156D+00 0.19896909D-01 0.32161505D-02 0.88441076D-02 0.23802934D+00 0.20632880D-01 0.33351629D-02 0.91716372D-02 0.24079712D+00 0.21395983D-01 0.34585683D-02 0.95112865D-02 0.24356490D+00 0.22187207D-01 0.35865278D-02 0.98635027D-02 0.24633269D+00 0.23007576D-01 0.37192079D-02 0.10228749D-01 0.24910047D+00 0.23858152D-01 0.38567812D-02 0.10607507D-01 0.25186825D+00 0.24740031D-01 0.39994261D-02 0.11000274D-01 0.25463604D+00 0.25654350D-01 0.41473277D-02 0.11407568D-01 0.25740382D+00 0.26602284D-01 0.43006779D-02 0.11829922D-01 0.26017160D+00 0.27585048D-01 0.44596747D-02 0.12267891D-01 0.26293939D+00 0.28603899D-01 0.46245234D-02 0.12722052D-01 0.26570717D+00 0.29660138D-01 0.47954362D-02 0.13192998D-01 0.26847495D+00 0.30755108D-01 0.49726329D-02 0.13681348D-01 0.27124273D+00 0.31890198D-01 0.51563410D-02 0.14187742D-01 0.27401052D+00 0.33066844D-01 0.53467953D-02 0.14712841D-01 0.27677830D+00 0.34286529D-01 0.55442387D-02 0.15257334D-01 0.27954608D+00 0.35550783D-01 0.57489223D-02 0.15821931D-01 0.28231387D+00 0.36861187D-01 0.59611060D-02 0.16407368D-01 0.28508165D+00 0.38219372D-01 0.61810581D-02 0.17014411D-01 0.28784943D+00 0.39627020D-01 0.64090558D-02 0.17643848D-01 0.29061722D+00 0.41085867D-01 0.66453851D-02 0.18296500D-01 0.29338500D+00 0.42597700D-01 0.68903415D-02 0.18973213D-01 0.29615278D+00 0.44164362D-01 0.71442298D-02 0.19674866D-01 0.29892056D+00 0.45787750D-01 0.74073644D-02 0.20402367D-01 0.30168835D+00 0.47469815D-01 0.76800693D-02 0.21156658D-01 0.30445613D+00 0.49212565D-01 0.79626782D-02 0.21938711D-01 0.30722391D+00 0.51018062D-01 0.82555352D-02 0.22749535D-01 0.30999170D+00 0.52888424D-01 0.85589946D-02 0.23590172D-01 0.31275948D+00 0.54825827D-01 0.88734205D-02 0.24461700D-01 0.31552726D+00 0.56832497D-01 0.91991876D-02 0.25365234D-01 0.31829505D+00 0.58910718D-01 0.95366804D-02 0.26301928D-01 0.32106283D+00 0.61062827D-01 0.98862938D-02 0.27272974D-01 0.32383061D+00 0.63291209D-01 0.10248433D-01 0.28279604D-01 0.32659839D+00 0.65598304D-01 0.10623512D-01 0.29323092D-01 0.32936618D+00 0.67986595D-01 0.11011955D-01 0.30404752D-01 0.33213396D+00 0.70458611D-01 0.11414196D-01 0.31525943D-01 0.33490174D+00 0.73016924D-01 0.11830679D-01 0.32688066D-01 0.33766953D+00 0.75664141D-01 0.12261854D-01 0.33892569D-01 0.34043731D+00 0.78402902D-01 0.12708181D-01 0.35140942D-01 0.34320509D+00 0.81235876D-01 0.13170127D-01 0.36434726D-01 0.34597288D+00 0.84165750D-01 0.13648165D-01 0.37775504D-01 0.34874066D+00 0.87195227D-01 0.14142772D-01 0.39164911D-01 0.35150844D+00 0.90327016D-01 0.14654431D-01 0.40604627D-01 0.35427622D+00 0.93563820D-01 0.15183627D-01 0.42096382D-01 0.35704401D+00 0.96908331D-01 0.15730848D-01 0.43641954D-01 0.35981179D+00 0.10036321D+00 0.16296577D-01 0.45243169D-01 0.36257957D+00 0.10393109D+00 0.16881300D-01 0.46901903D-01 0.36534736D+00 0.10761454D+00 0.17485493D-01 0.48620078D-01 0.36811514D+00 0.11141607D+00 0.18109627D-01 0.50399666D-01 0.37088292D+00 0.11533809D+00 0.18754159D-01 0.52242684D-01 0.37365071D+00 0.11938293D+00 0.19419533D-01 0.54151193D-01 0.37641849D+00 0.12355275D+00 0.20106175D-01 0.56127300D-01 0.37918627D+00 0.12784960D+00 0.20814485D-01 0.58173151D-01 0.38195405D+00 0.13227535D+00 0.21544836D-01 0.60290932D-01 0.38472184D+00 0.13683165D+00 0.22297567D-01 0.62482864D-01 0.38748962D+00 0.14151994D+00 0.23072977D-01 0.64751201D-01 0.39025740D+00 0.14634138D+00 0.23871315D-01 0.67098224D-01 0.39302519D+00 0.15129686D+00 0.24692776D-01 0.69526235D-01 0.39579297D+00 0.15638693D+00 0.25537490D-01 0.72037554D-01 0.39856075D+00 0.16161178D+00 0.26405512D-01 0.74634510D-01 0.40132854D+00 0.16697119D+00 0.27296814D-01 0.77319433D-01 0.40409632D+00 0.17246451D+00 0.28211272D-01 0.80094645D-01 0.40686410D+00 0.17809061D+00 0.29148653D-01 0.82962452D-01 0.40963188D+00 0.18384784D+00 0.30108601D-01 0.85925128D-01 0.41239967D+00 0.18973399D+00 0.31090624D-01 0.88984908D-01 0.41516745D+00 0.19574623D+00 0.32094079D-01 0.92143967D-01 0.41793523D+00 0.20188112D+00 0.33118151D-01 0.95404411D-01 0.42070302D+00 0.20813451D+00 0.34161840D-01 0.98768252D-01 0.42347080D+00 0.21450154D+00 0.35223942D-01 0.10223739D+00 0.42623858D+00 0.22097660D+00 0.36303024D-01 0.10581361D+00 0.42900637D+00 0.22755329D+00 0.37397414D-01 0.10949851D+00 0.43177415D+00 0.23422440D+00 0.38505172D-01 0.11329354D+00 0.43454193D+00 0.24098190D+00 0.39624073D-01 0.11719991D+00 0.43730971D+00 0.24781687D+00 0.40751587D-01 0.12121864D+00 0.44007750D+00 0.25471958D+00 0.41884859D-01 0.12535042D+00 0.44284528D+00 0.26167940D+00 0.43020690D-01 0.12959569D+00 0.44561306D+00 0.26868484D+00 0.44155521D-01 0.13395453D+00 0.44838085D+00 0.27572359D+00 0.45285415D-01 0.13842663D+00 0.45114863D+00 0.28278250D+00 0.46406045D-01 0.14301130D+00 0.45391641D+00 0.28984763D+00 0.47512687D-01 0.14770738D+00 0.45668420D+00 0.29690428D+00 0.48600212D-01 0.15251320D+00 0.45945198D+00 0.30393705D+00 0.49663081D-01 0.15742660D+00 0.46221976D+00 0.31092992D+00 0.50695354D-01 0.16244480D+00 0.46498754D+00 0.31786627D+00 0.51690696D-01 0.16756444D+00 0.46775533D+00 0.32472898D+00 0.52642390D-01 0.17278149D+00 0.47052311D+00 0.33150052D+00 0.53543362D-01 0.17809123D+00 0.47329089D+00 0.33816304D+00 0.54386205D-01 0.18348822D+00 0.47605868D+00 0.34469843D+00 0.55163214D-01 0.18896627D+00 0.47882646D+00 0.35108848D+00 0.55866432D-01 0.19451840D+00 0.48159424D+00 0.35731491D+00 0.56487693D-01 0.20013683D+00 0.48436203D+00 0.36335955D+00 0.57018680D-01 0.20581293D+00 0.48712981D+00 0.36920436D+00 0.57450988D-01 0.21153727D+00 0.48989759D+00 0.37483162D+00 0.57776188D-01 0.21729956D+00 0.49266538D+00 0.38022395D+00 0.57985899D-01 0.22308866D+00 0.49543316D+00 0.38536445D+00 0.58071867D-01 0.22889262D+00 0.49820094D+00 0.39023682D+00 0.58026043D-01 0.23469864D+00 0.50096872D+00 0.39482537D+00 0.57840660D-01 0.24049317D+00 0.50373651D+00 0.39911516D+00 0.57508323D-01 0.24626188D+00 0.50650429D+00 0.40309209D+00 0.57022083D-01 0.25198971D+00 0.50927207D+00 0.40674290D+00 0.56375518D-01 0.25766095D+00 0.51203986D+00 0.41005529D+00 0.55562816D-01 0.26325927D+00 0.51480764D+00 0.41301797D+00 0.54578840D-01 0.26876780D+00 0.51757542D+00 0.41562066D+00 0.53419202D-01 0.27416918D+00 0.52034321D+00 0.41785419D+00 0.52080324D-01 0.27944567D+00 0.52311099D+00 0.41971048D+00 0.50559493D-01 0.28457918D+00 0.52587877D+00 0.42118259D+00 0.48854911D-01 0.28955144D+00 0.52864655D+00 0.42226473D+00 0.46965734D-01 0.29434401D+00 0.53141434D+00 0.42295229D+00 0.44892106D-01 0.29893844D+00 0.53418212D+00 0.42324179D+00 0.42635179D-01 0.30331632D+00 0.53694990D+00 0.42313095D+00 0.40197137D-01 0.30745943D+00 0.53971769D+00 0.42261861D+00 0.37581190D-01 0.31134982D+00 0.54248547D+00 0.42170477D+00 0.34791586D-01 0.31496988D+00 0.54525325D+00 0.42039056D+00 0.31833588D-01 0.31830252D+00 0.54802104D+00 0.41867819D+00 0.28713467D-01 0.32133119D+00 0.55078882D+00 0.41657096D+00 0.25438470D-01 0.32404005D+00 0.55355660D+00 0.41407321D+00 0.22016791D-01 0.32641400D+00 0.55632438D+00 0.41119027D+00 0.18457533D-01 0.32843882D+00 0.55909217D+00 0.40792848D+00 0.14770660D-01 0.33010125D+00 0.56185995D+00 0.40429508D+00 0.10966952D-01 0.33138906D+00 0.56462773D+00 0.40029823D+00 0.70579519D-02 0.33229113D+00 0.56739552D+00 0.39594693D+00 0.30559018D-02 0.33279754D+00 0.57016330D+00 0.39125098D+00 -0.10263140D-02 0.33289964D+00 0.57293108D+00 0.38622095D+00 -0.51752340D-02 0.33259006D+00 0.57569887D+00 0.38086812D+00 -0.93768864D-02 0.33186283D+00 0.57846665D+00 0.37520442D+00 -0.13616859D-01 0.33071340D+00 0.58123443D+00 0.36924242D+00 -0.17880370D-01 0.32913867D+00 0.58400221D+00 0.36299523D+00 -0.22152338D-01 0.32713705D+00 0.58677000D+00 0.35647649D+00 -0.26417454D-01 0.32470844D+00 0.58953778D+00 0.34970030D+00 -0.30660258D-01 0.32185430D+00 0.59230556D+00 0.34268118D+00 -0.34865211D-01 0.31857765D+00 0.59507335D+00 0.33543400D+00 -0.39016769D-01 0.31488304D+00 0.59784113D+00 0.32797396D+00 -0.43099456D-01 0.31077659D+00 0.60060891D+00 0.32031651D+00 -0.47097938D-01 0.30626595D+00 0.60337670D+00 0.31247732D+00 -0.50997099D-01 0.30136031D+00 0.60614448D+00 0.30447222D+00 -0.54782112D-01 0.29607034D+00 0.60891226D+00 0.29631716D+00 -0.58438509D-01 0.29040818D+00 0.61168004D+00 0.28802814D+00 -0.61952259D-01 0.28438739D+00 0.61444783D+00 0.27962121D+00 -0.65309835D-01 0.27802293D+00 0.61721561D+00 0.27111238D+00 -0.68498282D-01 0.27133106D+00 0.61998339D+00 0.26251758D+00 -0.71505291D-01 0.26432932D+00 0.62275118D+00 0.25385265D+00 -0.74319263D-01 0.25703644D+00 0.62551896D+00 0.24513327D+00 -0.76929376D-01 0.24947227D+00 0.62828674D+00 0.23637491D+00 -0.79325646D-01 0.24165769D+00 0.63105453D+00 0.22759285D+00 -0.81498993D-01 0.23361457D+00 0.63382231D+00 0.21880208D+00 -0.83441296D-01 0.22536560D+00 0.63659009D+00 0.21001731D+00 -0.85145449D-01 0.21693425D+00 0.63935787D+00 0.20125293D+00 -0.86605413D-01 0.20834465D+00 0.64212566D+00 0.19252297D+00 -0.87816267D-01 0.19962147D+00 0.64489344D+00 0.18384111D+00 -0.88774245D-01 0.19078983D+00 0.64766122D+00 0.17522064D+00 -0.89476778D-01 0.18187514D+00 0.65042901D+00 0.16667445D+00 -0.89922524D-01 0.17290303D+00 0.65319679D+00 0.15821501D+00 -0.90111395D-01 0.16389920D+00 0.65596457D+00 0.14985439D+00 -0.90044570D-01 0.15488928D+00 0.65873236D+00 0.14160419D+00 -0.89724512D-01 0.14589873D+00 0.66150014D+00 0.13347564D+00 -0.89154963D-01 0.13695269D+00 0.66426792D+00 0.12547949D+00 -0.88340939D-01 0.12807588D+00 0.66703570D+00 0.11762608D+00 -0.87288712D-01 0.11929245D+00 0.66980349D+00 0.10992532D+00 -0.86005782D-01 0.11062583D+00 0.67257127D+00 0.10238669D+00 -0.84500837D-01 0.10209869D+00 0.67533905D+00 0.95019265D-01 -0.82783708D-01 0.93732740D-01 0.67810684D+00 0.87831673D-01 -0.80865301D-01 0.85548661D-01 0.68087462D+00 0.80832132D-01 -0.78757534D-01 0.77565993D-01 0.68364240D+00 0.74028429D-01 -0.76473248D-01 0.69803039D-01 0.68641019D+00 0.67427918D-01 -0.74026119D-01 0.62276772D-01 0.68917797D+00 0.61037508D-01 -0.71430554D-01 0.55002764D-01 0.69194575D+00 0.54863651D-01 -0.68701581D-01 0.47995109D-01 0.69471353D+00 0.48912317D-01 -0.65854731D-01 0.41266377D-01 0.69748132D+00 0.43188980D-01 -0.62905915D-01 0.34827562D-01 0.70024910D+00 0.37698582D-01 -0.59871293D-01 0.28688054D-01 0.70301688D+00 0.32445509D-01 -0.56767143D-01 0.22855621D-01 0.70578467D+00 0.27433552D-01 -0.53609731D-01 0.17336401D-01 0.70855245D+00 0.22665879D-01 -0.50415178D-01 0.12134913D-01 0.71132023D+00 0.18144994D-01 -0.47199334D-01 0.72540748D-02 0.71408802D+00 0.13872708D-01 -0.43977651D-01 0.26952400D-02 0.71685580D+00 0.98501024D-02 -0.40765074D-01 -0.15417597D-02 0.71962358D+00 0.60775056D-02 -0.37575929D-01 -0.54585567D-02 0.72239136D+00 0.25544675D-02 -0.34423829D-01 -0.90581812D-02 0.72515915D+00 -0.72025491D-03 -0.31321588D-01 -0.12344985D-01 0.72792693D+00 -0.37487067D-02 -0.28281152D-01 -0.15324560D-01 0.73069471D+00 -0.65337352D-02 -0.25313538D-01 -0.18003644D-01 0.73346250D+00 -0.90789808D-02 -0.22428792D-01 -0.20390031D-01 0.73623028D+00 -0.11388860D-01 -0.19635955D-01 -0.22492467D-01 0.73899806D+00 -0.13468536D-01 -0.16943045D-01 -0.24320554D-01 0.74176585D+00 -0.15323888D-01 -0.14357055D-01 -0.25884641D-01 0.74453363D+00 -0.16961463D-01 -0.11883959D-01 -0.27195729D-01 0.74730141D+00 -0.18388428D-01 -0.95287264D-02 -0.28265363D-01 0.75006919D+00 -0.19612511D-01 -0.72953527D-02 -0.29105537D-01 0.75283698D+00 -0.20641943D-01 -0.51868924D-02 -0.29728598D-01 0.75560476D+00 -0.21485389D-01 -0.32055020D-02 -0.30147153D-01 0.75837254D+00 -0.22151884D-01 -0.13524874D-02 -0.30373979D-01 0.76114033D+00 -0.22650762D-01 0.37164493D-03 -0.30421947D-01 0.76390811D+00 -0.22991589D-01 0.19671324D-02 -0.30303939D-01 0.76667589D+00 -0.23184095D-01 0.34349005D-02 -0.30032779D-01 0.76944368D+00 -0.23238110D-01 0.47765047D-02 -0.29621165D-01 0.77221146D+00 -0.23163500D-01 0.59940737D-02 -0.29081613D-01 0.77497924D+00 -0.22970108D-01 0.70902519D-02 -0.28426397D-01 0.77774702D+00 -0.22667703D-01 0.80681444D-02 -0.27667506D-01 0.78051481D+00 -0.22265924D-01 0.89312630D-02 -0.26816594D-01 0.78328259D+00 -0.21774238D-01 0.96834747D-02 -0.25884950D-01 0.78605037D+00 -0.21201897D-01 0.10328952D-01 -0.24883457D-01 0.78881816D+00 -0.20557902D-01 0.10872127D-01 -0.23822570D-01 0.79158594D+00 -0.19850973D-01 0.11317646D-01 -0.22712287D-01 0.79435372D+00 -0.19089516D-01 0.11670328D-01 -0.21562136D-01 0.79712151D+00 -0.18281606D-01 0.11935127D-01 -0.20381151D-01 0.79988929D+00 -0.17434966D-01 0.12117096D-01 -0.19177871D-01 0.80265707D+00 -0.16556947D-01 0.12221348D-01 -0.17960323D-01 0.80542485D+00 -0.15654522D-01 0.12253033D-01 -0.16736020D-01 0.80819264D+00 -0.14734276D-01 0.12217302D-01 -0.15511963D-01 0.81096042D+00 -0.13802396D-01 0.12119284D-01 -0.14294636D-01 0.81372820D+00 -0.12864674D-01 0.11964059D-01 -0.13090013D-01 0.81649599D+00 -0.11926502D-01 0.11756637D-01 -0.11903564D-01 0.81926377D+00 -0.10992874D-01 0.11501938D-01 -0.10740262D-01 0.82203155D+00 -0.10068392D-01 0.11204770D-01 -0.96045921D-02 0.82479934D+00 -0.91572680D-02 0.10869817D-01 -0.85005670D-02 0.82756712D+00 -0.82633331D-02 0.10501622D-01 -0.74317365D-02 0.83033490D+00 -0.73900446D-02 0.10104572D-01 -0.64012042D-02 0.83310268D+00 -0.65404962D-02 0.96828878D-02 -0.54116430D-02 0.83587047D+00 -0.57174282D-02 0.92406155D-02 -0.44653127D-02 0.83863825D+00 -0.49232392D-02 0.87816158D-02 -0.35640773D-02 0.84140603D+00 -0.41599983D-02 0.83095584D-02 -0.27094246D-02 0.84417382D+00 -0.34294588D-02 0.78279162D-02 -0.19024849D-02 0.84694160D+00 -0.27330715D-02 0.73399608D-02 -0.11440515D-02 0.84970938D+00 -0.20719992D-02 0.68487602D-02 -0.43460068D-03 0.85247717D+00 -0.14471313D-02 0.63571771D-02 0.22568799D-03 0.85524495D+00 -0.85909914D-03 0.58678682D-02 0.83691078D-03 0.85801273D+00 -0.30829101D-03 0.53832852D-02 0.13994194D-02 0.86078051D+00 0.20513230D-03 0.49056766D-02 0.19138005D-02 0.86354830D+00 0.68122198D-03 0.44370899D-02 0.23808557D-02 0.86631608D+00 0.11202257D-02 0.39793758D-02 0.28015811D-02 0.86908386D+00 0.15225721D-02 0.35341923D-02 0.31771487D-02 0.87185165D+00 0.18888558D-02 0.31030095D-02 0.35088865D-02 0.87461943D+00 0.22198217D-02 0.26871160D-02 0.37982604D-02 0.87738721D+00 0.25163512D-02 0.22876245D-02 0.40468566D-02 0.88015500D+00 0.27794465D-02 0.19054792D-02 0.42563637D-02 0.88292278D+00 0.30102178D-02 0.15414627D-02 0.44285569D-02 0.88569056D+00 0.32098687D-02 0.11962037D-02 0.45652816D-02 0.88845834D+00 0.33796837D-02 0.87018506D-03 0.46684391D-02 0.89122613D+00 0.35210150D-02 0.56375152D-03 0.47399716D-02 0.89399391D+00 0.36352709D-02 0.27711825D-03 0.47818494D-02 0.89676169D+00 0.37239042D-02 0.10379058D-04 0.47960584D-02 0.89952948D+00 0.37884010D-02 -0.23648508D-03 0.47845878D-02 0.90229726D+00 0.38302708D-02 -0.46359759D-03 0.47494197D-02 0.90506504D+00 0.38510365D-02 -0.67117821D-03 0.46925192D-02 0.90783283D+00 0.38522257D-02 -0.85953458D-03 0.46158248D-02 0.91060061D+00 0.38353619D-02 -0.10290538D-02 0.45212402D-02 0.91336839D+00 0.38019569D-02 -0.11801951D-02 0.44106265D-02 0.91613617D+00 0.37535042D-02 -0.13134818D-02 0.42857962D-02 0.91890396D+00 0.36914717D-02 -0.14294935D-02 0.41485060D-02 0.92167174D+00 0.36172960D-02 -0.15288590D-02 0.40004523D-02 0.92443952D+00 0.35323777D-02 -0.16122497D-02 0.38432665D-02 0.92720731D+00 0.34380763D-02 -0.16803723D-02 0.36785112D-02 0.92997509D+00 0.33357059D-02 -0.17339624D-02 0.35076765D-02 0.93274287D+00 0.32265318D-02 -0.17737789D-02 0.33321779D-02 0.93551066D+00 0.31117679D-02 -0.18005981D-02 0.31533540D-02 0.93827844D+00 0.29925736D-02 -0.18152076D-02 0.29724653D-02 0.94104622D+00 0.28700518D-02 -0.18184020D-02 0.27906930D-02 0.94381400D+00 0.27452477D-02 -0.18109777D-02 0.26091389D-02 0.94658179D+00 0.26191474D-02 -0.17937288D-02 0.24288250D-02 0.94934957D+00 0.24926773D-02 -0.17674425D-02 0.22506945D-02 0.95211735D+00 0.23667034D-02 -0.17328957D-02 0.20756121D-02 0.95488514D+00 0.22420316D-02 -0.16908519D-02 0.19043654D-02 0.95765292D+00 0.21194083D-02 -0.16420571D-02 0.17376668D-02 0.96042070D+00 0.19995202D-02 -0.15872381D-02 0.15761550D-02 0.96318849D+00 0.18829961D-02 -0.15270994D-02 0.14203967D-02 0.96595627D+00 0.17704074D-02 -0.14623210D-02 0.12708898D-02 0.96872405D+00 0.16622701D-02 -0.13935570D-02 0.11280654D-02 0.97149184D+00 0.15590457D-02 -0.13214335D-02 0.99229054D-03 0.97425962D+00 0.14611435D-02 -0.12465472D-02 0.86387089D-03 0.97702740D+00 0.13689225D-02 -0.11694648D-02 0.74305425D-03 0.97979518D+00 0.12826932D-02 -0.10907218D-02 0.63003322D-03 0.98256297D+00 0.12027201D-02 -0.10108217D-02 0.52494841D-03 0.98533075D+00 0.11292237D-02 -0.93023616D-03 0.42789168D-03 0.98809853D+00 0.10623832D-02 -0.84940417D-03 0.33890936D-03 0.99086632D+00 0.10023385D-02 -0.76873238D-03 0.25800547D-03 0.99363410D+00 0.94919305D-03 -0.68859515D-03 0.18514501D-03 0.99640188D+00 0.90301628D-03 -0.60933484D-03 0.12025714D-03 0.99916967D+00 0.86384595D-03 -0.53126225D-03 0.63238369D-04 0.10000000D+01 0.85346314D-03 -0.50811471D-03 0.47648054D-04 auto/07p/demos/cir/c.cir0000640000175000017500000000060613570013207013051 0ustar skskdat = 'cir' NDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 0, IID = 1, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN=0.0001, DSMAX= 5.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [100.0, 200.0]} IEQUIB = 0 auto/07p/demos/cir/cir.f900000640000175000017500000000663713570013207013237 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! cir : Homoclinic Bifurcation in an Electronic Circuit ! (the same equations as in demo tor) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION rn,be,ga,r,a3,b3,x,y,z rn=PAR(1) be=PAR(2) ga=PAR(3) r =PAR(4) a3=PAR(5) b3=PAR(6) x=U(1) y=U(2) z=U(3) F(1)= ( -(be+rn)*x + be*y - a3*x**3 + b3*(y-x)**3 )/r F(2)= be*x - (be+ga)*y - z - b3*(y-x)**3 F(3)= y IF(IJAC.EQ.0)RETURN DFDU(1,1)=( -(be+rn) -3*a3*x**2 - 3*b3*(y-x)**2 )/r DFDU(1,2)=( be + 3*b3*(y-x)**2 )/r DFDU(1,3)=0 DFDU(2,1)=be + 3*b3*(y-x)**2 DFDU(2,2)=-(be+ga) - 3*b3*(y-x)**2 DFDU(2,3)=-1 DFDU(3,1)=0 DFDU(3,2)=1 DFDU(3,3)=0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=-x/r DFDP(2,1)=0 DFDP(3,1)=0 DFDP(1,2)=( -x + y )/r DFDP(2,2)=x-y DFDP(3,2)=0 DFDP(1,3)=0 DFDP(2,3)=-y DFDP(3,3)=0 DFDP(1,4)=-F(1)/r DFDP(2,4)=0 DFDP(3,4)=0 DFDP(1,5)=x**3/r DFDP(2,5)=0 DFDP(3,5)=0 DFDP(1,6)=(y-x)**3 / r DFDP(2,6)=-(y-x)**3 DFDP(3,6)=0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1)=-0.721309D0 ! nu PAR(2)=0.6 ! beta PAR(3)=0.0 ! gamma PAR(4)=0.6 ! r PAR(5)=0.328578 ! a_3 PAR(6)=0.933578 ! b_3 PAR(11)=36.13 ! Truncated time interval !---------------------------------------------------------------------- ! If IEQUIB >0 put initial equilibrium in PAR(11+i), i=1,...,NDIM : PAR(12) = 0.0 PAR(13) = 0.0 PAR(14) = 0.0 END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) ! Homoclinic bifurcations COMMON block needed here : INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER I ! If IEQUIB =0 put analytic equilibrium in PAR(11+i), i=1..NDIM IF(IEQUIB.EQ.0)THEN DO I=1,NDIM PAR(11+I)= 0.0 ENDDO ENDIF END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/cir/cir.auto0000640000175000017500000000051613570013207013577 0ustar sksk#========= # Demo cir #========= pgm = 'cir' print pgm, ": first run : increase the truncation interval" r1=run('cir',c='cir.1',sv='1') print pgm, ": second run : continue saddle-focus homoclinic orbit" r2=run(r1('UZ2'),c='cir.2',sv='2') print pgm, " third run : continue in reverse direction" r3=run(r2('UZ1'),c='cir.3',ap='2') auto/07p/demos/stw/0000750000175000017500000000000013570013207012165 5ustar skskauto/07p/demos/stw/c.stw.10000640000175000017500000000061013570013207013303 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 10, 12, 13, 14, 15, 16, 17, 18, 19] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 20, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 19, THL = {11: 0.0}, THU = {} UZR = {1: 1.0} auto/07p/demos/stw/stw.auto0000640000175000017500000000035113570013207013674 0ustar sksk #============== # AUTO Demo stw #============== pgm = "stw" print "\nDemo %s is started"%pgm print "\n%s : continuation of the sharp traveling wave"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/stw/clean.auto0000640000175000017500000000014513570013207014142 0ustar sksk #============== # AUTO Demo stw #============== print "\n***Clean the directory***" dl('stw') cl() auto/07p/demos/stw/c.stw0000640000175000017500000000061013570013207013144 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 10, 12, 13, 14, 15, 16, 17, 18, 19] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 20, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 19, THL = {11: 0.0}, THU = {} UZR = {1: 1.0} auto/07p/demos/stw/stw.f900000640000175000017500000001375613570013207013337 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! stw : Sharp traveling waves !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Parameter assignment: ( Components of PAR(.) ) ! ! PAR : (1) : homotopy parameter ! (2) (3) : A0, A1, A2 (problem parameters) ! (4) (5) (6) : B0, B1, B2 (problem parameters) ! (7) (8) (9) : C0, C1, C2 (problem parameters) ! (10) : c (wave speed) ! (11) : T (period) ! (12) (13) : eps-0, eps-1 (radii) ! (14) (15) : mu-0 , mu-1 (eigenvalues) ! (16) (17) : v-0(1), v-0(2) (eigenvector) ! (18) (19) : v-1(1), v-1(2) (eigenvector) !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION PERIOD PERIOD=PAR(11) CALL FFFF(NDIM,U,ICP,PAR,IJAC,F,DFDU) F(1)=PERIOD*F(1) F(2)=PERIOD*F(2) END SUBROUTINE FUNC SUBROUTINE FFFF(NDIM,U,ICP,PAR,IJAC,F,DFDU) ! ---------- ---- ! ! The reduced system for traveling waves is defined here. A separate subroutine ! is used because the system and the Jacobian are also needed in the subroutines ! BCND and ICND below. The computation should be done with JAC=0. The derivatives ! below are for use in BCND and ICND only. IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM) DOUBLE PRECISION FA,FB,FC,C,DFA,DFB,DFC,P(2:9) ! A0, A1, A2: P(2)= (1-PAR(1))* 2 + PAR(1)* 2 P(3)= (1-PAR(1))* 0 + PAR(1)* 1 ! B0, B1, B2: P(4)= (1-PAR(1))* 2 + PAR(1)* 0 P(5)= (1-PAR(1))* 0 + PAR(1)* 1 P(6)= (1-PAR(1))* 0 + PAR(1)* 0 ! C0, C1, C2: P(7)= (1-PAR(1))* 0 + PAR(1)* 0 P(8)= (1-PAR(1))* 1 + PAR(1)* 1 P(9)= (1-PAR(1))*(-1) + PAR(1)*(-1) FA = P(2)*U(1) + P(3)*U(1)**2 FB = P(4) + P(5)*U(1) + P(6)*U(1)**2 FC = P(7) + P(8)*U(1) + P(9)*U(1)**2 C = PAR(10) F(1)= FA * U(2) F(2)= -C * U(2) - FB * U(2)**2 - FC IF(IJAC.EQ.0)RETURN DFA = P(2) + 2*P(3)*U(1) DFB = P(5) + 2*P(6)*U(1) DFC = P(8) + 2*P(9)*U(1) DFDU(1,1)= DFA*U(2) DFDU(1,2)= FA DFDU(2,1)= -DFB*U(2)**2 - DFC DFDU(2,2)= -C - 2*FB*U(2) END SUBROUTINE FFFF SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION PERIOD, TSC, E ! homotopy parameter : PAR(1)= 0 ! starting period PERIOD=100. ! c, T: PAR(10)= 1 PAR(11)= PERIOD ! eps-0, eps-1: PAR(12)= 0.5*DSQRT(5.D0)/(1+EXP(0.5*PERIOD)) PAR(13)= PAR(12) ! mu-0, mu-1: PAR(14)= 1 PAR(15)= -1 ! v-0(1), v-0(2): PAR(16)= 2/DSQRT(5.D0) PAR(17)= 1/DSQRT(5.D0) ! v-1(1), v-1(2): PAR(18)= 1 PAR(19)= 0 ! Exact solution TSC=PERIOD*(T-0.5) E=EXP(TSC) U(1)=1/(1+E) U(2)=-0.5*E/(1+E) END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local DOUBLE PRECISION V0(2),V1(2),G0(2),G1(2),DGDU0(2,2),DGDU1(2,2) V0(1)=U0(1) - PAR(12)*PAR(16) V0(2)=U0(2) - PAR(12)*PAR(17) V1(1)=U1(1) - PAR(13)*PAR(18) V1(2)=U1(2) - PAR(13)*PAR(19) CALL FFFF(NDIM,V0,ICP,PAR,1,G0,DGDU0) CALL FFFF(NDIM,V1,ICP,PAR,1,G1,DGDU1) ! Define eigenvalues and eigenvectors at t=0: FB(1)= DGDU0(1,1)*PAR(16) + DGDU0(1,2)*PAR(17) - PAR(14)*PAR(16) FB(2)= DGDU0(2,1)*PAR(16) + DGDU0(2,2)*PAR(17) - PAR(14)*PAR(17) ! Define eigenvalues and eigenvectors at t=1: FB(3)= DGDU1(1,1)*PAR(18) + DGDU1(1,2)*PAR(19) - PAR(15)*PAR(18) FB(4)= DGDU1(2,1)*PAR(18) + DGDU1(2,2)*PAR(19) - PAR(15)*PAR(19) ! Normalize the eigenvectors: FB(5)= PAR(16)**2 + PAR(17)**2 -1 FB(6)= PAR(18)**2 + PAR(19)**2 -1 ! Boundary condition at t=0: FB(7)= G0(1) FB(8)= G0(2) ! Boundary condition at t=1: FB(9)= G1(1) FB(10)=G1(2) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local DOUBLE PRECISION DFDU(2,2),F(2),F0(2),DGDU0(1) CALL FFFF(NDIM,U ,ICP,PAR,1,F ,DFDU ) CALL FFFF(NDIM,UOLD,ICP,PAR,0,F0,DGDU0) ! The integral phase condition is defined here: FI(1)= ( F(1) - F0(1) ) * ( DFDU(1,1)*F(1) + DFDU(1,2)*F(2) ) & + ( F(2) - F0(2) ) * ( DFDU(2,1)*F(1) + DFDU(2,2)*F(2) ) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/enz/0000750000175000017500000000000013570013207012144 5ustar skskauto/07p/demos/enz/clean.auto0000640000175000017500000000015413570013207014121 0ustar sksk #============== # AUTO Demo enz #============== print "\n***Clean the directory***" delete('enz') clean() auto/07p/demos/enz/c.enz0000640000175000017500000000070713570013207013111 0ustar skskunames = {1: 's1', 2: 's2'} parnames = {1: 's0', 2: 'mu', 3: 'rho', 4: 'kappa'} NDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = ['s0'] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 250, NPR= 250, MXBF= -1, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.01, DSMAX= 0.25, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {'mu': [1.0, 5.0]} STOP = ['LP3']auto/07p/demos/enz/enz.auto0000640000175000017500000000030213570013207013626 0ustar sksk #============== # AUTO Demo enz #============== print "\nDemo enz is started" print "\nenz : stationary solution branches" run("enz") save("enz") print "\n***Clean the directory***" clean() auto/07p/demos/enz/c.enz.10000640000175000017500000000070713570013207013250 0ustar skskunames = {1: 's1', 2: 's2'} parnames = {1: 's0', 2: 'mu', 3: 'rho', 4: 'kappa'} NDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = ['s0'] NTST= 15, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 250, NPR= 250, MXBF= -1, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.01, DSMAX= 0.25, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {'mu': [1.0, 5.0]} STOP = ['LP3']auto/07p/demos/enz/enz.f900000640000175000017500000000273213570013207013265 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! enz : A two-cell, one-substrate enzyme model !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION R,s,s1,s2,s0,mu,rho,kappa R(s)=s/(1+s+kappa*s**2) s1=U(1) s2=U(2) s0=PAR(1) mu=PAR(2) rho=PAR(3) kappa=PAR(4) F(1)=(s0 -s1) + (s2-s1) - rho * R(s1) F(2)=(s0+mu-s2) + (s1-s2) - rho * R(s2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 PAR(2)=0 PAR(3)=100 PAR(4)=1 U(1)=0 U(2)=0 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/enz/autorc0000750000175000017500000001416513570013207013376 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"s0": "$s_0$", "mu": "$\mu$", "rho": "$\rho$", "kappa": "$\kappa$", "s1": "$s_1$", "s2": "$s_2$"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. #bifurcation_x = [0] # The column to plot along the Y-axis for bifurcation diagrams. #bifurcation_y = [1] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/c2c/0000750000175000017500000000000013570013207012017 5ustar skskauto/07p/demos/c2c/c2c.f900000640000175000017500000001565513570013207013023 0ustar sksk!---------------------------------------------------------------------- ! Redoing the local bifurcation of the model analysed by ! Martin Boer, ch. 4 of thesis. ! Cycle-to-cycle connection 3D food chain ! ! Homoclinic, but set up also for heteroclinic ! ! U(1-3) = limit cycle ! U(4-6) = eigenfunction (ef) stable ! U(7-9) = limit cycle again ("second cycle") ! U(10-12) = ef unstable ! U(13-15) = connecting orbit ! ! George van Voorn, June 20th 2007 ! Bart Oldeman, December 2008 !---------------------------------------------------------------------- SUBROUTINE RHS(N,U,PAR,F,DFDU,IJAC) ! ---------- --- IMPLICIT NONE INTEGER N DOUBLE PRECISION U(N),PAR(*),F(N),DFDU(N,N) LOGICAL IJAC DOUBLE PRECISION f1,f2 DOUBLE PRECISION d1,d2,x,y,z,a1,a2,b1,b2 ! Declaring variables x=U(1) y=U(2) z=U(3) ! Parameter values d1=PAR(1) d2=PAR(2) a1 = 5.d0 a2 = 0.1d0 b1 = 3.d0 b2 = 2.d0 f1=a1/(1d0 + b1*x) f2=a2/(1d0 + b2*y) ! Formulas F(1)= x*(1d0 - x) - f1*x*y F(2)= f1*x*y - d1*y - f2*y*z F(3)= f2*y*z - d2*z IF(.NOT.IJAC)RETURN ! Jacobian elements DFDU(1,1)=1d0-2*x-f1*y+b1*x*y*(f1**2)/a1 DFDU(1,2)=-f1*x DFDU(1,3)=0.0d0 DFDU(2,1)=f1*y-b1*x*y*(f1**2)/a1 DFDU(2,2)=f1*x-d1-f2*z+b2*y*z*(f2**2)/a2 DFDU(2,3)=-f2*y DFDU(3,1)=0.0d0 DFDU(3,2)=f2*z-b2*y*z*(f2**2)/a2 DFDU(3,3)=f2*y-d2 END SUBROUTINE RHS SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- --- IMPLICIT NONE INTEGER NDIM,ICP(*),IJAC DOUBLE PRECISION U(NDIM),PAR(*),F(NDIM),DFDU(NDIM,*),DFDP(NDIM,*) DOUBLE PRECISION A(3,3) CALL RHS(3,U,PAR,F,A,NDIM/=3) IF(NDIM==3)RETURN F(1:3) = PAR(11)*F(1:3) IF(NDIM==6)THEN ! Variational equations ! PAR(11) = cycle period ! PAR(12) = log(FM) F(4:6) = PAR(11)*MATMUL(A(:,:),U(4:6))-PAR(12)*U(4:6) RETURN ENDIF ! Adjoint variational equations ! PAR(11) = cycle period ! PAR(4) = log(FM) F(4:6) = -PAR(11)*MATMUL(TRANSPOSE(A(:,:)),U(4:6))-PAR(4)*U(4:6) ! Functions limit cycle doubled U(7-9) ! We pretend this is a second different cycle CALL RHS(3,U(7:9),PAR,F(7:9),A,.TRUE.) F(7:9) = PAR(6)*F(7:9) ! Period=PAR(6), obviously equal to PAR(11), U(10-12) ! PAR(5) = log(FM) F(10:12) = -PAR(6)*MATMUL(TRANSPOSE(A(:,:)),U(10:12))-PAR(5)*U(10:12) IF(NDIM==12)RETURN ! Connection rescaled, PAR(7) = Tc CALL RHS(3,U(13:15),PAR,F(13:15),A,.FALSE.) F(13:15) = PAR(7)*F(13:15) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR) ! ---------- --- IMPLICIT NONE INTEGER NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION FLOQ,epsilon IF(NDIM==12)THEN ! extending from NDIM=6 to NDIM=12 U(7:12)=U(1:6) RETURN ELSEIF(NDIM==15)THEN ! extending from NDIM=12 to NDIM=15 epsilon=PAR(13) U(13:15)=PAR(14:16) + epsilon*PAR(17:19) RETURN ENDIF ! 0.16 B reaction !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- ! Evaluates the algebraic equations or ODE right hand side ! Input arguments : ! NDIM : Dimension of the ODE system ! U : State variables ! ICP : Array indicating the free parameter(s) ! PAR : Equation parameters ! Values to be returned : ! F : ODE right hand side values ! Normally unused Jacobian arguments : IJAC, DFDU, DFDP (see manual) IMPLICIT NONE INTEGER NDIM, IJAC, ICP(*) DOUBLE PRECISION U(NDIM), PAR(*), F(NDIM), DFDU(*), DFDP(*) DOUBLE PRECISION U1,U2,E U1=U(1) U2=U(2) E=EXP(U2) F(1)=-U1 + PAR(1)*(1-U1)*E F(2)=-U2 + PAR(1)*PAR(2)*(1-U1)*E - PAR(3)*U2 END SUBROUTINE FUNC !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- ! Input arguments : ! NDIM : Dimension of the ODE system ! Values to be returned : ! U : A starting solution vector ! PAR : The corresponding equation-parameter values ! T : Not used here IMPLICIT NONE INTEGER NDIM DOUBLE PRECISION U(NDIM), PAR(*), T ! Initialize the equation parameters PAR(1)=0. PAR(2)=8. PAR(3)=3. ! Initialize the solution U(1)=0. U(2)=0. END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! The following subroutines are not used here, ! but they must be supplied as dummy routines SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/ab/c.ab.10000640000175000017500000000061213570013207012617 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [2] NTST= 50, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZR = {2: [14.0, 15.0, 16.0, 17.0]} UZSTOP={2: 18.0} auto/07p/demos/ab/plaut04.rc0000640000175000017500000000700013570013207013547 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/ab/autorc0000750000175000017500000000372013570013207013157 0ustar sksk[AUTO_plotter] default_option="d1" d1 = {"grid": 1, "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. grid = 1 stability = 0 use_labels = 1 use_symbols = 0 top_title = 'The A $\to$ B reaction' top_title_fontsize = 12 xlabel = None # None uses *_coordnames xlabel_fontsize = 12 ylabel = None # None uses *_coordnames ylabel_fontsize = 12 labelnames = {"U(1)": "$u_1$", "U(2)": "$u_2$", "PAR(1)": "$p_1$", "PAR(2)": "$p_2$", "PAR(3)": "$p_3$", "L2-NORM": "L2-norm"} solution_indepvarname = "time" #solution_coordnames = ["$u_1$","$u_2$"] #bifurcation_coordnames = ["$p_1$", "L2-norm"] line_width = 2.0 dashes = (6.0,6.0) background = "white" foreground = "black" color_list = "black red green green blue blue yellow yellow gray gray gray brown brown orange orange orange" coloring_method = "branch" symbol_color = "red" symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" decorations = 1 smart_label = 1 minx = 0 maxx = 0 miny = 0 maxy = 0 width = 800 height = 800 left_margin = 80 right_margin = 40 top_margin = 40 bottom_margin = 40 xticks = 5 yticks = 5 tick_label_template = "%.2e" tick_length = 0.2 odd_tick_length = 0.4 even_tick_length = 0.2 ps_colormode = "color" mark_t = 0.5 type = "bifurcation" # or "solution" bifurcation_x = [0] bifurcation_y = [1] solution_x = [0] solution_y = [1] # Sets of columns that the user is likely to want to use bifurcation_column_defaults = [[0,1],[0,2],[0,3]] solution_column_defaults = [[0],[1]] # The label(s) of the solution we wish to draw label = [1,2,3] label_defaults = [[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17], [18,19,20,21,22,23,24]] # The index/indices of the solution we wish to draw index = [0] bifurcation_diagram_filename = 'fort.7' solution_filename = 'fort.8' bifurcation_symbol = "square" limit_point_symbol = None hopf_symbol = "fillsquare" period_doubling_symbol = "doubletriangle" torus_symbol = "filldiamond" user_point_symbol = "U" error_symbol = None auto/07p/demos/ab/c.ab.30000640000175000017500000000056713570013207012632 0ustar skskNDIM= 2, IPS = 2, IRS = 4, ILP = 0 ICP = [1, 11] NTST= 70, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25, 11: 1000.0} auto/07p/demos/ab/c.ab.20000640000175000017500000000054713570013207012627 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 50, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 400, NPR= 400, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.25} auto/07p/demos/tfc/0000750000175000017500000000000013570013207012124 5ustar skskauto/07p/demos/tfc/clean.auto0000640000175000017500000000041713570013207014103 0ustar sksk #============== # AUTO Demo tfc #============== print "\n***Clean the directory***" dl('tfc.1') dl('tfc.1') dl('tfc.2') dl('tfc.3') dl('tfc.4.sw') dl('tfc.4.bw') dl('tfc.4.fw') dl('tfc.4.rs') dl('tfc.5') dl('tfc.6.sw') dl('tfc.6.bw') dl('tfc.6.fw') dl('tfc.6.rs') cl() auto/07p/demos/tfc/tfc.auto0000640000175000017500000000275113570013207013600 0ustar sksk #============== # AUTO Demo tfc #============== print "\ntfc: run 1: equilibrium continuation" r1 = run(e='tfc',c='tfc',sv='tfc.1') print "\ntfc: run 2: cycle continuation" r2 = run(r1("HB1"),ICP=[3,11,7,8],UZR={3:0.75},IPS=2,IPLT=1, EPSL=1.e-9,EPSU=1.e-9,EPSS=1.e-7,ITMX=12,sv='tfc.2') print "\ntfc: run 3: cycle continuation" r3 = run(r2("UZ1"),ICP=[6,11,7,8],UZR={6:0.013},DS=0.001,DSMAX=0.01,sv='tfc.3') print "\ntfc: run 4: BP continuation (sw)" r4sw = run(r3("BP1"),ICP=[6,3,11,7,8],ISW=2,DS=0.01,DSMAX=0.1,UZR={}) print "\ntfc: run 4: BP continuation (fw)" r4fw = run(r4sw,STOP=['LP1','BP1'],sv='tfc.4.fw') print "\ntfc: run 4: BP continuation (bw)" r4bw = run(r4sw,STOP=['LP1'],NMX=300,NPR=50,NTST=70,DSMAX=10.0,DS='-',sv='tfc.4.bw') print "\ntfc: run 4: BP continuation (restart)" r4rs = run(r4fw()[0],NMX=50,NPR=10,DSMAX=0.1,sv='tfc.4.rs') print "\ntfc: run 5: iso-periodic cycle continuation" r5=run(r3("UZ1"),ICP=[3,1],ILP=0,NMX=100,NPR=20,THL={},DS=-0.01,DSMAX=0.1, sv='tfc.5') print "\ntfc: run 6: iso-periodic BP continuation (sw)" r6sw = run(r5("BP2"),ICP=[3,1,6],ISW=2,DS=0.01,DSMAX=0.1,NMX=50,NPR=10, sv='tfc.6.sw') print "\ntfc: run 6: iso-periodic BP continuation (fw)" r6fw = run(r6sw,sv='tfc.6.fw') print "\ntfc: run 6: iso-periodic BP continuation (bw)" r6bw = run(r6sw,STOP=['LP1','BP1'],DS='-',sv='tfc.6.bw') print "\ntfc: run 6: iso-periodic BP continuation (restart)" r6rs = run(r6fw()[1],sv='tfc.6.rs') print "\n***Clean the directory***" cl() auto/07p/demos/tfc/tfc.f900000640000175000017500000000625513570013207013231 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Demo tfc !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION t1,t2,t3,t4,t5,t7,t8,t9,t10,t12,t13,t15,t16,t17,t19 DOUBLE PRECISION t22,t27,t28,t29,t33,t34,t36,t39 DOUBLE PRECISION t42,t43,t44,t50,t51,t54,t56,t58,t64,t65,t66,t68,t69 DOUBLE PRECISION t74,t86 t1 = PAR(2) t2 = U(1) t3 = exp(t2) t4 = t1*t3 t5 = t3**2 t7 = PAR(1) t8 = U(2) t9 = exp(t8) t10 = t7*t9 t12 = 1.D0+t4 t13 = 1.D0/t12 F(1) = -(-1.D0-t4+t3+t1*t5+t10)*t13 t15 = t7*t3 t16 = PAR(5) t17 = t16*t9 t19 = PAR(3) t22 = t19*t1 t27 = PAR(4) t28 = U(3) t29 = t27*t28 t33 = 1.D0+t17 t34 = 1.D0/t33 F(2) = (t15+t15*t17-t19-t19*t16*t9-t22*t3-t22*t3*t16*t9-t29-t29*t4)*t13*t34 t36 = PAR(6) t39 = t27*t9-t36-t36*t16*t9 F(3) = t28*t39*t34 IF(IJAC.EQ.0)RETURN t42 = t1**2 t43 = 2.D0*t2 t44 = exp(t43) t50 = t12**2 t51 = 1.D0/t50 DFDU(1,1) = t3*(-1.D0-2.D0*t4-t42*t44+t1*t7*t9)*t51 DFDU(1,2) = -t10*t13 DFDU(1,3) = 0.D0 t54 = exp(t2+t8) t56 = t3+t16*t54 t58 = t51*t34 DFDU(2,1) = t7*t56*t58 t64 = t33**2 t65 = 1.D0/t64 t66 = (t9+t1*t54)*t13*t65 DFDU(2,2) = t16*t27*t28*t66 DFDU(2,3) = -t27*t34 DFDU(3,1) = 0.D0 t68 = t28*t9 t69 = t27*t65 DFDU(3,2) = t68*t69 DFDU(3,3) = t39*t34 IF(IJAC.EQ.1)RETURN DFDP(1,1) = -t9*t13 DFDP(1,2) = t54*t7*t51 DFDP(1,3) = 0.D0 DFDP(1,4) = 0.D0 DFDP(1,5) = 0.D0 DFDP(1,6) = 0.D0 DFDP(2,1) = t56*t13*t34 t74 = exp(t43+t8) DFDP(2,2) = -t7*(t44+t74*t16)*t58 DFDP(2,3) = -(1.D0+t17+t4+t1*t16*t54)*t13*t34 DFDP(2,4) = -t28*t34 DFDP(2,5) = t29*t66 DFDP(2,6) = 0.D0 DFDP(3,1) = 0.D0 DFDP(3,2) = 0.D0 DFDP(3,3) = 0.D0 DFDP(3,4) = t68*t34 t86 = exp(2.D0*t8) DFDP(3,5) = -t28*t86*t69 DFDP(3,6) = -t28 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, INTENT(OUT) :: U(NDIM), PAR(*) PAR(1)=5.0 ! a_1 PAR(2)=3.0 ! b_1 PAR(3)=1.10830E+00 ! d_1 PAR(4)=0.1 ! a_2 PAR(5)=2.0 ! b_2 PAR(6)=0.01 ! d_2 U(1:3)=(/LOG(0.66163D0),LOG(0.20199D0),0.0D0/) END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS(NDIM,U,PAR) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION GETP PAR(7)=EXP(GETP('MIN',1,U)) PAR(8)=EXP(GETP('MIN',2,U)) END SUBROUTINE PVLS auto/07p/demos/tfc/c.tfc0000640000175000017500000000053513570013207013050 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 8, ITNW= 7, NWTN= 5, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = -0.01, DSMIN= 1e-10, DSMAX= 0.1, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/lor/0000750000175000017500000000000013570013207012144 5ustar skskauto/07p/demos/lor/c.lor0000640000175000017500000000056713570013207013115 0ustar skskdat = 'lor' NDIM= 3, IPS = 2, IRS = 0, ILP = 0 ICP = [1, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 4, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 0.01, DSMAX= 25.0, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 200.0} auto/07p/demos/lor/c.lor.10000640000175000017500000000056713570013207013254 0ustar skskdat = 'lor' NDIM= 3, IPS = 2, IRS = 0, ILP = 0 ICP = [1, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 4, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 0.01, DSMAX= 25.0, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 200.0} auto/07p/demos/lor/clean.auto0000640000175000017500000000014513570013207014121 0ustar sksk#============== # AUTO Demo lor #============== print "\n***Clean the directory***" dl("lor") cl() auto/07p/demos/lor/lor.auto0000640000175000017500000000055213570013207013635 0ustar sksk#========= # Demo lor #========= pgm = 'lor' print pgm, ": first run : a solution branch starting from numerical data" lor=run('lor',c='lor.1') print pgm, ": second run : switch branches at a period-doubling" lor=lor+run(lor('PD1'),c='lor.2') print pgm, ": third run : third run : another period-doubling" lor=lor+run(lor('PD2'),c='lor.3') save(lor,'lor') auto/07p/demos/lor/lor.f900000640000175000017500000000251713570013207013266 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! lor : The Lorenz Equations !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)= PAR(3) * (U(2)- U(1)) F(2)= PAR(1)*U(1) - U(2) - U(1)*U(3) F(3)= U(1)*U(2) - PAR(2)*U(3) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! Parameter values for the starting orbit in lor.dat : PAR(1)=280. PAR(2)= 8.d0/3.d0 PAR(3)=10. END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/lor/lor.dat0000640000175000017500000001666513570013207013451 0ustar sksk 0.10002000D+01 -0.40674614D+01 -0.24183805D+02 0.21900338D+03 0.10040000D+01 -0.48346488D+01 -0.25134763D+02 0.21720890D+03 0.10062000D+01 -0.52832089D+01 -0.25781544D+02 0.21621997D+03 0.10084000D+01 -0.57368420D+01 -0.26501316D+02 0.21527021D+03 0.10106000D+01 -0.61970481D+01 -0.27296145D+02 0.21436206D+03 0.10128000D+01 -0.66653405D+01 -0.28168187D+02 0.21349829D+03 0.10152000D+01 -0.71872234D+01 -0.29210201D+02 0.21261035D+03 0.10176000D+01 -0.77225547D+01 -0.30349783D+02 0.21178370D+03 0.10200000D+01 -0.82733655D+01 -0.31590027D+02 0.21102364D+03 0.10224000D+01 -0.88417127D+01 -0.32934076D+02 0.21033620D+03 0.10228000D+01 -0.89382880D+01 -0.33168397D+02 0.21022915D+03 0.10252000D+01 -0.95297283D+01 -0.34637529D+02 0.20963505D+03 0.10276000D+01 -0.10143249D+02 -0.36217223D+02 0.20912929D+03 0.10300000D+01 -0.10780983D+02 -0.37910433D+02 0.20872053D+03 0.10324000D+01 -0.11445082D+02 -0.39719891D+02 0.20841843D+03 0.10348000D+01 -0.12137705D+02 -0.41647996D+02 0.20823371D+03 0.10372000D+01 -0.12861015D+02 -0.43696679D+02 0.20817826D+03 0.10396000D+01 -0.13617161D+02 -0.45867244D+02 0.20826520D+03 0.10442000D+01 -0.15165913D+02 -0.50369061D+02 0.20888363D+03 0.10488000D+01 -0.16857320D+02 -0.55310922D+02 0.21019520D+03 0.10534000D+01 -0.18704181D+02 -0.60662456D+02 0.21233518D+03 0.10580000D+01 -0.20716701D+02 -0.66361947D+02 0.21545738D+03 0.10626000D+01 -0.22900940D+02 -0.72304459D+02 0.21973049D+03 0.10672000D+01 -0.25256756D+02 -0.78328031D+02 0.22532986D+03 0.10718000D+01 -0.27775193D+02 -0.84199160D+02 0.23242270D+03 0.10764000D+01 -0.30435368D+02 -0.89600091D+02 0.24114474D+03 0.10810000D+01 -0.33201038D+02 -0.94122231D+02 0.25156664D+03 0.10856000D+01 -0.36017271D+02 -0.97272039D+02 0.26365071D+03 0.10902000D+01 -0.38807958D+02 -0.98497101D+02 0.27720206D+03 0.10948000D+01 -0.41475185D+02 -0.97239466D+02 0.29182347D+03 0.10994000D+01 -0.43901703D+02 -0.93018631D+02 0.30688990D+03 0.11040000D+01 -0.45957555D+02 -0.85536765D+02 0.32156207D+03 0.11086000D+01 -0.47511279D+02 -0.74784970D+02 0.33485527D+03 0.11132000D+01 -0.48444799D+02 -0.61117202D+02 0.34576645D+03 0.11178000D+01 -0.48669593D+02 -0.45256647D+02 0.35343916D+03 0.11224000D+01 -0.48140512D+02 -0.28214971D+02 0.35732386D+03 0.11270000D+01 -0.46863548D+02 -0.11135442D+02 0.35728220D+03 0.11316000D+01 -0.44895256D+02 0.48974393D+01 0.35359950D+03 0.11362000D+01 -0.42333938D+02 0.19025026D+02 0.34690308D+03 0.11408000D+01 -0.39305109D+02 0.30713378D+02 0.33801881D+03 0.11454000D+01 -0.35945021D+02 0.39768936D+02 0.32781466D+03 0.11500000D+01 -0.32385827D+02 0.46286322D+02 0.31707389D+03 0.11546000D+01 -0.28744690D+02 0.50559946D+02 0.30641948D+03 0.11592000D+01 -0.25117567D+02 0.52990840D+02 0.29628967D+03 0.11638000D+01 -0.21577161D+02 0.54009625D+02 0.28695104D+03 0.11684000D+01 -0.18173893D+02 0.54023925D+02 0.27853183D+03 0.11730000D+01 -0.14938665D+02 0.53389377D+02 0.27106126D+03 0.11776000D+01 -0.11886374D+02 0.52398735D+02 0.26450574D+03 0.11822000D+01 -0.90194700D+01 0.51282643D+02 0.25879782D+03 0.11868000D+01 -0.63311763D+01 0.50216641D+02 0.25385721D+03 0.11914000D+01 -0.38081741D+01 0.49330547D+02 0.24960475D+03 0.11960000D+01 -0.14327426D+01 0.48717908D+02 0.24597083D+03 0.12006000D+01 0.81560118D+00 0.48444300D+02 0.24290011D+03 0.12052000D+01 0.29588740D+01 0.48553981D+02 0.24035370D+03 0.12098000D+01 0.50197143D+01 0.49074801D+02 0.23830988D+03 0.12144000D+01 0.70206935D+01 0.50021441D+02 0.23676395D+03 0.12190000D+01 0.89837708D+01 0.51397138D+02 0.23572774D+03 0.12236000D+01 0.10929818D+02 0.53194010D+02 0.23522884D+03 0.12282000D+01 0.12878151D+02 0.55392101D+02 0.23530954D+03 0.12328000D+01 0.14846015D+02 0.57957216D+02 0.23602551D+03 0.12374000D+01 0.16847966D+02 0.60837640D+02 0.23744370D+03 0.12420000D+01 0.18895115D+02 0.63959905D+02 0.23963921D+03 0.12466000D+01 0.20994197D+02 0.67223869D+02 0.24269052D+03 0.12512000D+01 0.23146452D+02 0.70497668D+02 0.24667248D+03 0.12558000D+01 0.25346350D+02 0.73613391D+02 0.25164654D+03 0.12604000D+01 0.27580210D+02 0.76364826D+02 0.25764774D+03 0.12650000D+01 0.29824859D+02 0.78509079D+02 0.26466862D+03 0.12696000D+01 0.32046557D+02 0.79774224D+02 0.27264104D+03 0.12742000D+01 0.34200481D+02 0.79875112D+02 0.28141821D+03 0.12788000D+01 0.36231151D+02 0.78538675D+02 0.29076050D+03 0.12834000D+01 0.38074188D+02 0.75538248D+02 0.30033038D+03 0.12880000D+01 0.39659674D+02 0.70733513D+02 0.30970169D+03 0.12926000D+01 0.40917165D+02 0.64109212D+02 0.31838735D+03 0.12972000D+01 0.41782019D+02 0.55803037D+02 0.32588576D+03 0.13018000D+01 0.42202267D+02 0.46112751D+02 0.33174036D+03 0.13064000D+01 0.42144901D+02 0.35475960D+02 0.33560132D+03 0.13110000D+01 0.41600355D+02 0.24422877D+02 0.33727498D+03 0.13156000D+01 0.40584203D+02 0.13510616D+02 0.33674835D+03 0.13202000D+01 0.39135680D+02 0.32535889D+01 0.33418246D+03 0.13248000D+01 0.37313345D+02 -0.59343671D+01 0.32987730D+03 0.13294000D+01 0.35188809D+02 -0.13774938D+02 0.32421882D+03 0.13340000D+01 0.32839778D+02 -0.20133756D+02 0.31762152D+03 0.13386000D+01 0.30343542D+02 -0.25006077D+02 0.31047894D+03 0.13432000D+01 0.27771769D+02 -0.28487976D+02 0.30312923D+03 0.13478000D+01 0.25186975D+02 -0.30742214D+02 0.29583756D+03 0.13524000D+01 0.22640667D+02 -0.31966089D+02 0.28879304D+03 0.13570000D+01 0.20172887D+02 -0.32365568D+02 0.28211566D+03 0.13616000D+01 0.17812763D+02 -0.32137208D+02 0.27586862D+03 0.13662000D+01 0.15579697D+02 -0.31457380D+02 0.27007231D+03 0.13708000D+01 0.13484827D+02 -0.30477327D+02 0.26471752D+03 0.13754000D+01 0.11532568D+02 -0.29322311D+02 0.25977648D+03 0.13800000D+01 0.97220526D+01 -0.28093282D+02 0.25521156D+03 0.13846000D+01 0.80483936D+01 -0.26869870D+02 0.25098134D+03 0.13892000D+01 0.65037525D+01 -0.25713862D+02 0.24704493D+03 0.13938000D+01 0.50781956D+01 -0.24672664D+02 0.24336445D+03 0.13984000D+01 0.37603633D+01 -0.23782465D+02 0.23990661D+03 0.14030000D+01 0.25379760D+01 -0.23071002D+02 0.23664331D+03 0.14076000D+01 0.13982030D+01 -0.22559879D+02 0.23355189D+03 0.14122000D+01 0.32791861D+00 -0.22266492D+02 0.23061506D+03 0.14168000D+01 -0.68613097D+00 -0.22205595D+02 0.22782067D+03 0.14214000D+01 -0.16572324D+01 -0.22390570D+02 0.22516151D+03 0.14260000D+01 -0.25986653D+01 -0.22834438D+02 0.22263520D+03 0.14306000D+01 -0.35237047D+01 -0.23550664D+02 0.22024411D+03 0.14308000D+01 -0.35637573D+01 -0.23588202D+02 0.22014331D+03 0.14310000D+01 -0.36038051D+01 -0.23626283D+02 0.22004278D+03 0.14312000D+01 -0.36438493D+01 -0.23664909D+02 0.21994252D+03 0.14314000D+01 -0.36838909D+01 -0.23704081D+02 0.21984253D+03 0.14316000D+01 -0.37239311D+01 -0.23743800D+02 0.21974281D+03 0.14318000D+01 -0.37639709D+01 -0.23784067D+02 0.21964337D+03 0.14320000D+01 -0.38040114D+01 -0.23824884D+02 0.21954420D+03 0.14322000D+01 -0.38440537D+01 -0.23866252D+02 0.21944531D+03 0.14324000D+01 -0.38840990D+01 -0.23908172D+02 0.21934669D+03 0.14326000D+01 -0.39241483D+01 -0.23950645D+02 0.21924834D+03 0.14328000D+01 -0.39642027D+01 -0.23993674D+02 0.21915028D+03 0.14330000D+01 -0.40042633D+01 -0.24037258D+02 0.21905249D+03 0.14332000D+01 -0.40443313D+01 -0.24081400D+02 0.21895498D+03 0.14334000D+01 -0.40674614D+01 -0.24183805D+02 0.21900338D+03 auto/07p/demos/lor/c.lor.20000640000175000017500000000055313570013207013250 0ustar skskNDIM= 3, IPS = 2, IRS = 2, ILP = 0 ICP = [1, 11] NTST= 40, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 4, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.01, DSMAX= 25.0, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 200.0} auto/07p/demos/lor/c.lor.30000640000175000017500000000055313570013207013251 0ustar skskNDIM= 3, IPS = 2, IRS = 4, ILP = 0 ICP = [1, 11] NTST= 60, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 4, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.01, DSMAX= 25.0, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 200.0} auto/07p/demos/int/0000750000175000017500000000000013570013207012142 5ustar skskauto/07p/demos/int/clean.auto0000640000175000017500000000015613570013207014121 0ustar sksk #============== # AUTO Demo int #============== print "\n***Clean the directory***" dl('int') dl('lp') cl() auto/07p/demos/int/c.int0000640000175000017500000000055113570013207013102 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 1, NINT= 1 NMX= 40, NPR= 40, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 3, THL = {2: 0.0}, THU = {} UZR = {1: [1.0, 3.0]} auto/07p/demos/int/int.auto0000640000175000017500000000062013570013207013625 0ustar sksk #============== # AUTO Demo int #============== pgm = "int" print "\nDemo %s is started"%pgm print "\n%s : first run : detection of a fold"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n%s : second run : generate starting data"%pgm r2 = run(r1("LP1"),ICP=[1,2],ISW=2) print "\n%s : third run : compute a curve of folds"%pgm r3 = run(r2) save(r3,'lp') print "\n***Clean the directory***" cl() auto/07p/demos/int/c.int.30000640000175000017500000000055413570013207013246 0ustar skskNDIM= 2, IPS = 4, IRS = 8, ILP = 1 ICP = [1, 2] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 1, NINT= 1 NMX= 40, NPR= 40, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 3, THL = {2: 0.0}, THU = {} UZR = {1: [1.0, 3.0]} auto/07p/demos/int/int.f900000640000175000017500000000522613570013207013262 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! int : An ODE with boundary and integral constraints !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION E E=EXP(U(1)) F(1)=U(2) F(2)=-PAR(1)*E IF(IJAC.EQ.0)RETURN DFDU(1,1)=0.0 DFDU(1,2)=1 DFDU(2,1)=-PAR(1)*E DFDU(2,2)=0.0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=0.0 DFDP(2,1)=-E END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 PAR(2)=0 PAR(3)=0 U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1)-U1(1)-PAR(2) IF(IJAC.EQ.0)RETURN DBC(1,1)=1.0 DBC(1,2)=0.0 DBC(1,3)=-1.0 DBC(1,4)=0.0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DBC(1,5)=0.0 DBC(1,6)=-1.0 DBC(1,7)=0.0 END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) FI(1)=U(1)-PAR(3) IF(IJAC.EQ.0)RETURN DINT(1,1)=1.0 DINT(1,2)=0.0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DINT(1,3)=0.0 DINT(1,4)=0.0 DINT(1,5)=-1.0 END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/int/c.int.10000640000175000017500000000055113570013207013241 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 1, NINT= 1 NMX= 40, NPR= 40, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 3, THL = {2: 0.0}, THU = {} UZR = {1: [1.0, 3.0]} auto/07p/demos/int/c.int.20000640000175000017500000000055413570013207013245 0ustar skskNDIM= 2, IPS = 4, IRS = 4, ILP = 1 ICP = [1, 2] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 1, NINT= 1 NMX= 40, NPR= 40, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 3, THL = {2: 0.0}, THU = {} UZR = {1: [1.0, 3.0]} auto/07p/demos/pp2/0000750000175000017500000000000013570013207012051 5ustar skskauto/07p/demos/pp2/pp2.auto0000640000175000017500000000055213570013207013447 0ustar sksk #============== # AUTO Demo pp2 #============== print "\n***Compute stationary solution families***" pp2 = run('pp2') save('pp2') print "\n***Compute periodic solution families***" run(pp2('HB1'), ICP=['quota','PERIOD'], IPS=2, NPR=2, UZSTOP={'quota': [0.0, 1.0], 'PERIOD': 36.0}) save('ps') append('pp2') print "\n***Clean the directory***" clean() auto/07p/demos/pp2/c.pp20000640000175000017500000000241013570013207012714 0ustar sksk############################ # important primary settings ############################ # Problem Constants NDIM=2 # Output Control unames={1: 'fish', 2: 'sharks'} parnames={1: 'quota', 9: 'fish'} NPR=100 # Free Parameters ICP=['quota'] # Limits UZSTOP={'quota': [0.0, 1.0], 'fish': -0.25}, NMX=100 # Computation Constants IPS=1, IRS=0 # Continuation Step Size DS=0.02, DSMIN=0.01, DSMAX=0.06 # Discretization Constants NTST=90 ################################ # default secondary settings ################################ # Problem Constants #NPAR=36, JAC=0 # Discretization Constants #NCOL=4, IAD=3 # Tolerances #EPSL=1e-7, EPSU=1e-7, EPSS=1e-5, ITMX=9, NWTN=3, ITNW=5 # Continuation Step Size #IADS=1, THL={'PERIOD': 0.0}, THU={} # Limits #STOP = [] #RL0=-1.7976e+308, RL1=1.7976e+308, A0=-1.7976e+308, A1=1.7976e+308 # Computation Constants #ILP=1, SP=[], ISP=2, ISW=1, MXBF=10, s='', dat='', U={}, PAR={}, TY='' # Output Control #e = '', sv='', IBR=0, LAB=0, IIS=3, IID=2, IPLT=0, UZR={} ################### # inactive settings ################### # Problem Constants #NBC=0, NINT=0 ################################ # HomCont settings ################################ #NUNSTAB = -1, NSTAB = -1, IEQUIB = 1, ITWIST = 0, ISTART = 5 #IREV = [], IFIXED = [], IPSI = [] auto/07p/demos/pp2/pp2.f900000640000175000017500000000320513570013207013073 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! pp2 : Basic computations for continuous dynamical systems !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION e e=EXP(-PAR(3)*U(1)) F(1) = PAR(2)*U(1)*(1-U(1)) - U(1)*U(2) - PAR(1)*(1-e) F(2) = -U(2) + PAR(4)*U(1)*U(2) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(:4) = (/ 0.0, 3.0, 5.0, 3.0 /) U = 0.0 END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION GETP ! Set PAR(9) equal to U1 PAR(9)=GETP('BV0',1,U) END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- auto/07p/demos/pp2/clean.auto0000640000175000017500000000016613570013207014031 0ustar sksk #============== # AUTO Demo pp2 #============== print "\n***Clean the directory***" delete('pp2') delete('ps') cl() auto/07p/demos/pp2/plaut04.rc0000640000175000017500000001163613570013207013700 0ustar sksk#version 0.0 ############################### # Primary settings ############################### # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Choose 3D or 2D graph for the solution diagram: 3DSol = No # Choose 3D or 2D graph for the bifurcation diagram: 3DBif = No # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Set coloring method: # -7 --- BRANCH # -6 --- STABILITY # -5 --- POINT # -4 --- CURVE # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. # For the solution diagram: Coloring Method Solution = -2 # For the bifurcation diagram: Coloring Method Bifurcation = -6 # Initialize the default graph style: # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Initialize the default options: Draw Reference Plane = No Draw Reference Sphere = No Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes Show Label Numbers = No Draw Legend = No # Labeled solutions: # -3 = Show all labeled solutions # -2 = Show HALF labeled solutions # -1 = Show SPEC labeled solutions # 0 = Show NONE of the solutions # Otherwise, show the specified solution(s) Labels = -3 # Colors are represented by RGB values from 0 to 1.0. # Background color: Background Color = 0.8, 0.8, 1. # Background transparency ([0.0, 1.0]): Background Transparency = 0.9 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 ############################### # Secondary settings ############################### # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Unstable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Surface color: Surface Color = 0.0, 1.0, 0.0 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP ALG = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Draw Scale: Draw Scale = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead # 4 --- always at origin Coordinate Type = 3 # Set the radius of the spheres used for labels: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Label Sphere Radius = 1.0 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Set the maximum and minimum animation speed: Object Animation Speed = 50 Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Animation Speed = 50 Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Disk Rotation Disk Rotation = 1.000000, 0.000000, 0.000000, 1.570796 # Disk Position Disk Position = 0.000000, 0.000000, 0.000000 # Disk Radius Disk Radius = 1.000000 # Disk Height Disk Height = 0.001000 # Disk Transparency [0, 1] Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Sphere Position Sphere Position = 0.000000, 0.000000, 0.000000 # Sphere Radius Sphere Radius = 1.000000 # Sphere Transparency [0, 1] Sphere Transparency = 0.7 # Read Sphere From File Sphere From File = No # Set the active AUTO parameter indices: parameter ID = 10 # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/pp2/autorc0000640000175000017500000001426213570013207013277 0ustar sksk[AUTO_plotter] ############################ # active settings ############################ # A dictionary mapping names to axis labels. labelnames = {"L2-NORM": "L2-norm", "MAX fish": "max fish", "MAX sharks": "max sharks"} # The type of the plot, either "solution" or "bifurcation" type = "bifurcation" # The column to plot along the X-axis for bifurcation diagrams. bifurcation_x = ['quota'] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ['MAX fish'] #bifurcation_y = ['MAX sharks'] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = ['MAX fish'] # The column to plot along the X-axis for solutions. solution_x = ['fish'] # The column to plot along the Y-axis for solutions. solution_y = ['sharks'] # The column to plot along the Z-axis for solutions. solution_z = None # A list of colors to use for multiple plots. color_list = "red" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). coloring_method = "branch" # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": "yes", "use_labels": 0, "use_symbols": 1, "stability": 1} #d2 = {"grid": "yes", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d3, d4. # The font size for the x-axis label. xlabel_fontsize = 16 # The font size for the y-axis label. ylabel_fontsize = 16 # The font size for the z-axis label. zlabel_fontsize = 16 # Azimuth of the axes in 3D plots, in degrees. azimuth = -120 # Elevation of the axes in 3D plots, in degrees. elevation = 25 # Whether to use letters (True) or symbols (False) for special points. letter_symbols = False ############################ # inactive settings ############################ # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Variable name to use instead of 't' for solutions. #solution_indepvarname = "time" # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/kdv/0000750000175000017500000000000013570013207012134 5ustar skskauto/07p/demos/kdv/c.kdv0000640000175000017500000000060613570013207013067 0ustar skskNDIM= 4, IPS = 9, IRS = 0, ILP = 0 ICP = [1, 3] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-08, DSMAX= 0.1, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: 3.05} IEQUIB = 0, ITWIST = 0, ISTART = 2 auto/07p/demos/kdv/clean.auto0000640000175000017500000000022313570013207014106 0ustar sksk#============== # AUTO Demo kdv #============== print "\n***Clean the directory***" dl("1") dl("2") dl("3") dl("4") dl("5") dl("6") dl("7") cl() auto/07p/demos/kdv/c.kdv.50000640000175000017500000000062713570013207013235 0ustar skskNDIM= 4, IPS = 9, IRS = 11, ILP = 0 ICP = [2, 3, 22, 24, 26, 28] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.01, DSMIN= 1e-12, DSMAX= 3.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {22: 0.0} IEQUIB = 0, ITWIST = 1, ISTART = -3 auto/07p/demos/kdv/c.kdv.20000640000175000017500000000060513570013207013226 0ustar skskNDIM= 4, IPS = 9, IRS = 2, ILP = 0 ICP = [3, 9] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 1e-10, DSMAX= 5.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {2: 3.0} IEQUIB = 0, ITWIST = 1, ISTART = 2 auto/07p/demos/kdv/c.kdv.60000640000175000017500000000062713570013207013236 0ustar skskNDIM= 4, IPS = 9, IRS = 13, ILP = 0 ICP = [2, 3, 23, 24, 26, 28] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 70, NPR= 35, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.1, DSMIN= 1e-12, DSMAX= 10.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {24: 0.0} IEQUIB = 0, ITWIST = 1, ISTART = -3 auto/07p/demos/kdv/c.kdv.10000640000175000017500000000060613570013207013226 0ustar skskNDIM= 4, IPS = 9, IRS = 0, ILP = 0 ICP = [1, 3] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-08, DSMAX= 0.1, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: 3.05} IEQUIB = 0, ITWIST = 0, ISTART = 2 auto/07p/demos/kdv/c.kdv.30000640000175000017500000000060513570013207013227 0ustar skskNDIM= 4, IPS = 9, IRS = 3, ILP = 0 ICP = [1, 3] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS =-0.001, DSMIN= 1e-08, DSMAX= 2.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {1: 3.0} IEQUIB = 0, ITWIST = 1, ISTART = 2 auto/07p/demos/kdv/c.kdv.70000640000175000017500000000057613570013207013242 0ustar skskNDIM= 4, IPS = 9, IRS = 17, ILP = 0 ICP = [2, 3] NTST= 100, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 1 NPR= 10, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -2.0, DSMIN= 1e-10, DSMAX= 8.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} IEQUIB = 0, ITWIST = 0, ISTART = 1 auto/07p/demos/kdv/c.kdv.40000640000175000017500000000065113570013207013231 0ustar skskNDIM= 4, IPS = 9, IRS = 5, ILP = 0 ICP = [3, 21, 22, 24] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 13, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN= 1e-12, DSMAX= 1.8, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {21: 3.5, 22: 0.0}, STOP = ['UZ2'] IEQUIB = 0, ITWIST = 1, ISTART = -3 auto/07p/demos/kdv/kdv.auto0000640000175000017500000000032213570013207013610 0ustar skskr1=run('kdv',sv='1') r2=run(r1,c='kdv.2',sv='2') r3=run(r2,c='kdv.3',sv='3') r4=run(r3('UZ2'),c='kdv.4',sv='4') r5=run(r4,c='kdv.5',sv='5') r6=run(r5('UZ1'),c='kdv.6',sv='6') r7=run(r6('UZ2'),c='kdv.7',sv='7') auto/07p/demos/kdv/kdv.c0000640000175000017500000001423513570013207013072 0ustar sksk/* chamgr.f -- translated by f2c (version 19991025). You must link the resulting object file with the libraries: -lf2c -lm (in that order) */ #include "auto_f2c.h" /* Common Block Declarations */ extern struct { integer itwist, istart, iequib, nfixed, npsi, nunstab, nstab, nrev; } blhom_1; /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ /* chamgr: Champneys and Groves solitary waves. */ /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int func (integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *f, doublereal *dfdu, doublereal *dfdp) { /* System generated locals */ integer dfdu_dim1, dfdp_dim1; /* Local variables */ doublereal dhdp1, dhdq1, dhdq2, dhdp2, a, b, c; /* ---------- ---- */ /* Function Body */ dfdu_dim1 = dfdp_dim1 = ndim; a = par[0]; b = par[1]; c = par[2]; /* The real equation (Hamiltonian) + lambda (PAR(3)) *dH */ dhdq1 = u[0] * -1.5 * u[0] - a * u[0] + u[2] * .5 * u[2]; dhdp1 = u[2]; dhdq2 = u[1] - b * u[2] + u[0] * u[2]; dhdp2 = u[3] * 7.5; /* \dot q_1 = q_2 */ f[0] = dhdp1 + c * dhdq1; /* \dot p_1 = 3/2 q_1^2 + a q_1 - 1/2 q_2^2 */ f[1] = -dhdq1 + c * dhdp1; /* \dot q_2 = 15/2 p_2 */ f[2] = dhdp2 + c * dhdq2; /* \dot p_2 = -p_1+b q_2-q_1 q_2 */ f[3] = -dhdq2 + c * dhdp2; if (ijac == 0) { return 0; } ARRAY2D(dfdu,0,0) = c * (u[0] * -3. - a); ARRAY2D(dfdu,0,1) = 0.; ARRAY2D(dfdu,0,2) = c * u[2] + 1.; ARRAY2D(dfdu,0,3) = 0.; ARRAY2D(dfdu,1,0) = u[0] * 3. + a; ARRAY2D(dfdu,1,1) = 0.; ARRAY2D(dfdu,1,2) = -u[2] + c; ARRAY2D(dfdu,1,3) = 0.; ARRAY2D(dfdu,2,0) = c * u[2]; ARRAY2D(dfdu,2,1) = c; ARRAY2D(dfdu,2,2) = -c * (b - u[0]); ARRAY2D(dfdu,2,3) = 7.5; ARRAY2D(dfdu,3,0) = -u[2]; ARRAY2D(dfdu,3,1) = -1.; ARRAY2D(dfdu,3,2) = b - u[0]; ARRAY2D(dfdu,3,3) = c * 7.5; if (ijac == 1) { return 0; } ARRAY2D(dfdp,0,0) = -c * u[0]; ARRAY2D(dfdp,0,1) = 0; ARRAY2D(dfdp,0,2) = dhdq1; ARRAY2D(dfdp,1,0) = u[0]; ARRAY2D(dfdp,1,1) = 0; ARRAY2D(dfdp,1,2) = dhdp1; ARRAY2D(dfdp,2,0) = 0; ARRAY2D(dfdp,2,1) = -c * u[2]; ARRAY2D(dfdp,2,2) = dhdq2; ARRAY2D(dfdp,3,0) = 0; ARRAY2D(dfdp,3,1) = u[2]; ARRAY2D(dfdp,3,2) = dhdp2; return 0; } /* func_ */ int stpnt(integer ndim, const doublereal t, doublereal *u, doublereal *par) { /* Local variables */ doublereal a, b, f, s, f2, sec2, d1; /* ---------------- */ /* Sets parameter values for homoclinic bifurcation analysis (IPS=9). */ /* COMMON block needed if IPS=9 (homoclinic bifurcations) : */ /* ---------------------------------------------------------------------- */ /* Problem parameters (only PAR(1-9) are available to the user) : */ /* Parameter adjustments */ /* Function Body */ par[1] = (sqrt(65.) + 3.) / 4.; /* B */ par[0] = (par[1] * 2. + 1.) * .6 * (par[1] - 2.); /* A */ par[2] = 0.; /* C or lambda */ par[10] = 20.; /* ---------------------------------------------------------------------- */ /* If IEQUIB=1 then put initial equilibrium in PAR(11+i), i=0,...,NDIM-1 : */ /* truncated time interval */ if (blhom_1.iequib != 0) { par[11] = 0.; par[12] = 0.; par[13] = 0.; par[14] = 0.; } /* ---------------------------------------------------------------------- */ /* IF ISTART=2 then put analytic homoclinic orbit here with T in the */ /* interval [0,1] */ /* test example (a=0,b=1) */ if (blhom_1.istart == 2) { if (blhom_1.nrev == 0) { s = (t - .5) * par[10]; } else { s = (t - 1.) * par[10]; } f = sqrt((par[1] * 2. + 1.) * .75); /* Computing 2nd power */ d1 = cosh(f * s); sec2 = 1 / (d1 * d1); f2 = f * f; u[0] = f2 * 2. * sec2; u[1] = f2 * -.13333333333333333 * f * tanh(f * s) * sec2 * (f2 * 4 - f2 * 12. * sec2 - 15.); u[2] = f2 * -4. * f * tanh(f * s) * sec2; u[3] = f2 * .53333333333333333 * f2 * sec2 * (2. - sec2 * 3.); a = par[0]; b = par[1]; /* H = -0.5D0*(U(1)+A)*U(1)*U(1)+U(2)*U(3)- */ /* + 0.5D0*(B-U(1))*U(3)*U(3)+15D0/4D0*U(4)*U(4) */ /* PRINT *, H */ } /* ---------------------------------------------------------------------- */ /* Distance along the unstable manifold : */ if (blhom_1.istart == 3) { par[ndim * blhom_1.iequib + 11] = -1.e-5; } /* ---------------------------------------------------------------------- */ /* C */ return 0; } /* stpnt_ */ int pvls(integer ndim, const doublereal *u, doublereal *par) { /* Local variables */ integer i; /* COMMON block needed if IPS=9 (homoclinic bifurcations) : */ /* If IEQUIB=0 put analytic equilibrium in PAR(11+i), i=0,...,NDIM-1 : */ /* Parameter adjustments */ /* Function Body */ for (i = 0; i < ndim; ++i) { par[i + 11] = 0.; } return 0; } /* pvls_ */ int bcnd (integer ndim, const doublereal *par, const integer *icp, integer nbc, const doublereal *u0, const doublereal *u1, integer ijac, doublereal *fb, doublereal *dbc) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int icnd (integer ndim, const doublereal *par, const integer *icp, integer nint, const doublereal *u, const doublereal *uold, const doublereal *udot, const doublereal *upold, integer ijac, doublereal *fi, doublereal *dint) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ int fopt (integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *fs, doublereal *dfdu, doublereal *dfdp) { return 0; } /* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */ auto/07p/demos/pd2/0000750000175000017500000000000013570013207012035 5ustar skskauto/07p/demos/pd2/clean.auto0000640000175000017500000000015313570013207014011 0ustar sksk #============== # AUTO Demo pd2 #============== print "\n***Clean the directory***" dl('1') dl('2') cl() auto/07p/demos/pd2/c.pd20000640000175000017500000000053013570013207012665 0ustar skskNDIM= 2, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 3, NBC= 0, NINT= 0 NMX= 35, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {}, THU = {} UZR = {} auto/07p/demos/pd2/c.pd2.10000640000175000017500000000053013570013207013024 0ustar skskNDIM= 2, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 3, NBC= 0, NINT= 0 NMX= 35, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {}, THU = {} UZR = {} auto/07p/demos/pd2/c.pd2.20000640000175000017500000000053713570013207013034 0ustar skskNDIM= 2, IPS = 17, IRS = 5, ILP = 0 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 3, NBC= 0, NINT= 0 NMX= 15, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 16, THL = {}, THU = {} UZSTOP = {1: 0.0} auto/07p/demos/pd2/pd2.f900000640000175000017500000000426113570013207013046 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! pd1 : Time integration of a scalar nonlinear parabolic PDE !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) ! ! *Set the nonlinear term F(1)= PAR(1)*U(1)*( 1. - U(1) ) - U(1)*U(2) F(2)= -U(2) + U(1)*U(2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,X) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: X DOUBLE PRECISION pi pi=4*ATAN(1.d0) ! *Set the (constant) parameter PAR(1) = 12. ! *Set the actual width of the space interval [0,PAR(11)] PAR(11) = 1. ! *Set the initial data in the (scaled) interval [0,1] U(1) = SIN(pi*X) U(2) = 1. ! *Also set the space-derivative of the initial data ! *Note the scaling by 1/PAR(11) ! U(3) = pi * COS(pi*X) /PAR(11) U(4) = 0. / PAR(11) ! *Set the diffusion constants PAR(15) = 1. PAR(16) = 1. END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! *Define the boundary conditions. FB(1)=U0(1) FB(2)=U0(2)-1. FB(3)=U1(1) FB(4)=U1(2)-1. END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/pd2/pd2.auto0000640000175000017500000000062613570013207013421 0ustar sksk #============== # AUTO Demo pd2 #============== pgm = "pd2" print "\nDemo %s is started"%pgm print "\n%s : first run : time integration towards stationary state"%pgm r1 = run(e=pgm,c=pgm) save(r1,'1') print "\n%s : second run : continuation of stationary state"%pgm r2 = run(r1,IPS=17,ICP=[1],ISP=2,NMX=15,NPR=50,DS=-0.1,DSMAX=1.0,UZSTOP={1:0.0}) save(r2,'2') print "\n***Clean the directory***" cl() auto/07p/demos/p2c/0000750000175000017500000000000013570013207012034 5ustar skskauto/07p/demos/p2c/clean.auto0000640000175000017500000000002013570013207014001 0ustar skskdl('cont') cl() auto/07p/demos/p2c/p2c.auto0000640000175000017500000000271213570013207013415 0ustar sksk# initial part print "find the Branch point" r = run(e='p2c',NDIM=3,ILP=0,STOP="BP1",MXBF=0,DS=0.3,DSMAX=25,NPAR=23) # initial part print "find the Hopf bifurcation" r = r + run(r('BP1'),ISW=-1,STOP="HB1") print "a solution branch starting from the Hopf bifurcation" sol = run(r('HB1'),IPS=2,ICP=[1,11],NTST=50,UZSTOP={1:21}) print "continue zero eigenfunction until eigenvalue" zero = run(sol, NDIM=6,IPS=4,ICP=[12,11,10],NBC=7,NINT=1, DS=1.e-3,DSMIN=1.e-5,DSMAX=1.e-2,STOP=["BP2"]) bp = zero('BP1') print "switch to continuation of nontrivial eigenfunction" norm1 = run(bp,ISW=-1,UZSTOP={10:1.0},STOP=[]) # Add initial "connection" into the last three dimensions and do # the first homotopy print "homotopy in (T,h1)" h1 = run(norm1, NDIM=9,ICP=[13,11,12,21,14,15,16,17,18,19,20,22],ISW=1,ISP=0, NBC=19,THL={13:0,11:0}, DS=0.1,DSMIN=1e-10,DSMAX=500, UZR={21:0},UZSTOP={},STOP=["UZ3"]) print "homotopy in (r,h2)" h2 = run(h1('UZ3'),NINT=0, ICP=[11,1,12,14,15,16,17,18,19,20,22],DS=-1,DSMIN=1.e-5,NBC=19, UZR={22:0},STOP=["UZ1"]) print "homotopy in (T,r)" h3 = run(h2,DS=1, ICP=[13,1,11,12,14,15,16,17,18,19,20],NBC=19, UZR={13:[3,4]}, UZSTOP={13:5}, STOP=[]) print "fwd continuation in two system parameters" cont = load(h3('UZ1'),DS=1.e-5,DSMIN=1.e-7,DSMAX=0.5, ICP=[1,3,11,12,14,15,16,17,18,19,20],UZR={},UZSTOP={}, NTST=50,NMX=450,NPR=60) contb = run(cont) print "bwd continuation in two system parameters" contf = run(cont,DS='-') save(mb(rl(contf+contb)),'cont') cl() auto/07p/demos/p2c/plaut04.rc0000640000175000017500000000701413570013207013656 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1,4,7 Y Axis Solution = 2,5,8 Z Axis Solution = 3,6,9 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -5 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/p2c/p2c.f900000640000175000017500000001355313570013207013050 0ustar sksk!---------------------------------------------------------------------- ! lor: Point-to-cycle connection in the Lorenz model via homotopy !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Adjoint scaled eigenfunction of the cycle in the Lorenz model ! ! PAR(10)=square norm of the eigenfunction at T=0 ! PAR(12)=log(FM) !---------------------------------------------------------------------- SUBROUTINE RHS(N,U,PAR,F,DFDU,IJAC) ! ---------- ---- IMPLICIT NONE INTEGER N DOUBLE PRECISION U(N),PAR(*),F(N),DFDU(N,N) LOGICAL IJAC DOUBLE PRECISION x,y,z,r,b,sigma ! System parameters ! PAR(1) ! r ! PAR(2) ! b ! PAR(3) ! sigma ! Variables x=U(1) y=U(2) z=U(3) ! Parameters r=PAR(1) b=PAR(2) sigma=PAR(3) ! RHS F(1)=sigma*(y-x) F(2)=r*x-y-x*z F(3)=x*y-b*z IF(.NOT.IJAC)RETURN ! Jacobian elements DFDU(1,1)=-sigma DFDU(1,2)=sigma DFDU(1,3)=0.0d0 DFDU(2,1)=r-z DFDU(2,2)=-1.d0 DFDU(2,3)=-x DFDU(3,1)=y DFDU(3,2)=x DFDU(3,3)=-b END SUBROUTINE RHS SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION A(3,3) ! Variables ! U(1)-U(3) = limit cycle ! U(4)-U(6) = adjoint eigenfunction ! U(7)-U(9) = connecting orbit ! Cycle equations CALL RHS(3,U,PAR,F,A,NDIM/=3) IF(NDIM==3)RETURN F(1:3) = PAR(11)*F(1:3) ! Adjoint variational equations ! PAR(11) = cycle period ! PAR(12) = log(FM) F(4:6) = -PAR(11)*MATMUL(TRANSPOSE(A(:,:)),U(4:6))-PAR(12)*U(4:6) IF(NDIM==6)RETURN ! Connecting orbit equations CALL RHS(3,U(7),PAR,F(7),A,.FALSE.) ! PAR(13) = connection interval F(7:9) = PAR(13)*F(7:9) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION r,b,sigma,v1,v2,v3,vnorm,eps,i IF (NDIM==9) THEN !extend system eps=PAR(23) U(7:9)=PAR(14:16) + eps*PAR(17:19) RETURN ENDIF ! Parameter values for the starting equilibrium r=0.d0 b=8.0d0/3.0d0 sigma=10.0d0 U(1:3)=0. PAR(1)=r PAR(2)=b PAR(3)=sigma ! Eigenvalue approx PAR(12)=-1.0d0 ! Initial connection time PAR(13)=0.0d0 ! Equilibrium coordinates PAR(14:16)=U(1:3) ! Normalized exit eigenvector of the equilibrium r=21.0d0 v1=1.0-sigma+SQRT((1.0-sigma)**2+4.0*r*sigma) v2=2.0*r v3=0.0D0 vnorm=SQRT(v1**2+v2**2+v3**2) PAR(17)=v1/vnorm PAR(18)=v2/vnorm PAR(19)=v3/vnorm ! Exit eigenvalue PAR(20)=(-1.0d0-sigma+SQRT((1.0d0-sigma)**2+4.0d0*r*sigma))/2.0d0 ! epsilon for the starting point y0 PAR(23)=-1d-4 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION X(3),R(3),A(3,3),V(3),H(3),epsilon,rlambda ! Periodic boundary conditions ! ---------------------------- FB(1:3) = U0(1:3) - U1(1:3) FB(4:6) = U1(4:6) - U0(4:6) ! Eigenfunction normalisation FB(7) = DOT_PRODUCT(U0(4:6),U0(4:6)) - PAR(10) IF(NBC == 7)RETURN ! Exit eigenvector V(:) = PAR(17:19) ! Connecting orbit starting point epsilon = PAR(23) FB(8:10) = U0(7:9)-PAR(14:16)-epsilon*V(:) ! Equilibrium coordinates CALL RHS(3,PAR(14:16),PAR,FB(11:13),A,.TRUE.) ! Exit eigenvalue rlambda = PAR(20) FB(14:16) = MATMUL(A(:,:),V(:))-rlambda*V(:) ! Exit vector normalization FB(17) = DOT_PRODUCT(V(:),V(:)) - 1.0d0 ! Connection endpoint in the orthogonal plane to velocity H(:) = U1(7:9) - U0(1:3) CALL RHS(3,U0,PAR,R,A,.FALSE.) FB(18) = DOT_PRODUCT(H(:),R(:)) - PAR(21) ! Projection boundary condition at the endpoint FB(19) = DOT_PRODUCT(H(:),U0(4:6)) - PAR(22) END SUBROUTINE BCND SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION GETP DOUBLE PRECISION X(3),W(3),F(3),A(3,3),H(3),length IF(NDIM==6)THEN ! Initial values for homotopy parameters ! Base point on the cycle X(1)=GETP('BV0',1,U) X(2)=GETP('BV0',2,U) X(3)=GETP('BV0',3,U) ! End point of the initial connection length=PAR(23)*EXP(PAR(20)*PAR(13)) H(1:3)=PAR(14:16)+length*PAR(17:19)-X(1:3) CALL RHS(3,X,PAR,F,A,.FALSE.) ! Homotopy parameter PAR(21) = DOT_PRODUCT(H,F) ! Eigenfunction at t=0 W(1)=GETP('BV0',4,U) W(2)=GETP('BV0',5,U) W(3)=GETP('BV0',6,U) ! Homotopy parameter PAR(22) = DOT_PRODUCT(H,W) ENDIF END SUBROUTINE PVLS SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM),UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Integral phase condition ! ------------------------ FI(1) = DOT_PRODUCT(U(:3),UPOLD(:3)) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/fhh/0000750000175000017500000000000013570013207012115 5ustar skskauto/07p/demos/fhh/c.fhn.100000640000175000017500000000056713570013207013264 0ustar skskNDIM= 3, IPS = 9, IRS = 16, ILP = 0 ICP = [3, 1, 2] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 20, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN=0.0001, DSMAX= 0.02, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {} ITWIST = 0 IFIXED = [2] auto/07p/demos/fhh/c.fhn.90000640000175000017500000000064513570013207013211 0ustar skskNDIM= 3, IPS = 9, IRS = 23, ILP = 0 ICP = [3, 1, 2, 22] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-05 DS = -0.02, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 29: 0.0, 30: 0.0} ITWIST = 1 IFIXED = [13] IPSI = [2,9,10] auto/07p/demos/fhh/c.fhn.70000640000175000017500000000064013570013207013202 0ustar skskNDIM= 3, IPS = 9, IRS = 16, ILP = 0 ICP = [2, 1, 33] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 20, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.15, DSMIN=0.0001, DSMAX= 0.15, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 29: 0.0, 30: 0.0, 33: 0.0} ITWIST = 1 IPSI = [2,9,10,13] auto/07p/demos/fhh/clean.auto0000640000175000017500000000023313570013207014070 0ustar sksk#============== # AUTO Demo mtn #============== print "\n***Clean the directory***" dl("1") dl("2") dl("3") dl("4") dl("5") dl("6") dl("7") dl("8") cl() auto/07p/demos/fhh/c.fhn.110000640000175000017500000000056713570013207013265 0ustar skskNDIM= 3, IPS = 9, IRS = 37, ILP = 0 ICP = [3, 1, 2] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 75, NPR= 20, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.02, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {} ITWIST = 0 IFIXED = [2] auto/07p/demos/fhh/c.fhn0000640000175000017500000000054513570013207013041 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {17: 0.0} auto/07p/demos/fhh/c.fhn.20000640000175000017500000000057313570013207013202 0ustar skskNDIM= 3, IPS = 9, IRS = 4, ILP = 0 ICP = [11, 2] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.2, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [300.0, 1000.0]} ISTART = 3 auto/07p/demos/fhh/c.fhn.30000640000175000017500000000057313570013207013203 0ustar skskNDIM= 3, IPS = 9, IRS = 11, ILP = 0 ICP = [11, 2] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN= 0.001, DSMAX= 10.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {11: [300.0, 1000.0]} ISTART = 0 auto/07p/demos/fhh/c.fhn.10000640000175000017500000000056013570013207013175 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {17: 0.0} ISTART = 3 auto/07p/demos/fhh/fhn.auto0000640000175000017500000000212213570013207013560 0ustar sksk#========= # Demo fhn #========= pgm = 'fhn' print pgm, ": first run : homotopy in PAR(11) and PAR(17)" r1=run('fhn',c='fhn.1',sv='1') print pgm, ": second run : homotopy in PAR(11) and PAR(2)" r2=run(r1('UZ1'),c='fhn.2',sv='2') print pgm, ": third run : continue homoclinic orbit in PAR(11)" r3=run(r2('UZ1'),c='fhn.3',sv='3') print pgm, ": fourth run : continue in PAR(2) and PAR(1) " r4=run(r3('UZ1'),c='fhn.4',sv='4') print pgm, ": fifth run : continue in reverse direction" r4=r4+run(r4('UZ1'),c='fhn.5',ap='4') print pgm, ": sixth run : add adjoint" r5=run(r3('UZ1'),c='fhn.6',sv='5') print pgm, ": seventh run : compute inclination flip" r6=run(r5,c='fhn.7',sv='6') print pgm, ": eighth run : continue inclination flip in PAR(3), PAR(1), PAR(2)" r7=run(r6('UZ1'),c='fhn.8',sv='7') print pgm, ": ninth run : continue in reverse direction" r7=r7+run(r7()[0],c='fhn.9',ap='7') print pgm, ": tenth run : continue Belyakov point in PAR(3), PAR(1) and PAR(2)" r8=run(r4('UZ1'),c='fhn.10',sv='8') print pgm, ": eleventh run : continue in reverse direction" r8=r8+run(r8()[0],c='fhn.11',ap='8') auto/07p/demos/fhh/c.fhn.50000640000175000017500000000063113570013207013200 0ustar skskNDIM= 3, IPS = 9, IRS = 16, ILP = 0 ICP = [2, 1, 22] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 2: [0.0, -0.01, 0.02, 0.05, 0.1, 0.2]} IPSI = [2] auto/07p/demos/fhh/c.fhn.60000640000175000017500000000056213570013207013204 0ustar skskNDIM= 3, IPS = 9, IRS = 14, ILP = 0 ICP = [11, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 2, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {} ITWIST = 1 IPSI = [] auto/07p/demos/fhh/c.fhn.40000640000175000017500000000063113570013207013177 0ustar skskNDIM= 3, IPS = 9, IRS = 14, ILP = 1 ICP = [2, 1, 22] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN=0.0001, DSMAX= 0.01, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {22: 0.0, 2: [0.0, -0.01, 0.02, 0.05, 0.1, 0.2]} IPSI = [2] auto/07p/demos/fhh/c.fhn.80000640000175000017500000000067113570013207013207 0ustar skskNDIM= 3, IPS = 9, IRS = 18, ILP = 0 ICP = [3, 1, 2, 22] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS = 1e-04 DS = 0.02, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0, 33: 0.0} UZSTOP = {22: 0.0} ITWIST = 1 IFIXED = [13] IPSI = [2,9,10] auto/07p/demos/fhh/fhn.f900000640000175000017500000000544213570013207013216 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! fhn : Homoclinic bifurcations in Fitz-Hugh Nagumo System !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)= U(2) F(2)= PAR(1)*U(2)+U(1)*(U(1)-PAR(2))*(U(1)-1)+U(3) F(3)= PAR(3)*U(1)/PAR(1) IF(IJAC.EQ.0)RETURN DFDU(1,1)= 0 DFDU(1,2)= 1 DFDU(1,3)= 0 DFDU(2,1)= 3*U(1)*U(1)-2*(1+PAR(2))*U(1)+PAR(2) DFDU(2,2)= PAR(1) DFDU(2,3)= 1 DFDU(3,1)= PAR(3)/PAR(1) DFDU(3,2)= 0 DFDU(3,3)= 0 IF(IJAC.EQ.1)RETURN DFDP(1,1)= 0 DFDP(1,2)= 0 DFDP(1,3)= 0 DFDP(2,1)= U(2) DFDP(2,2)= -U(1)*(U(1)-1) DFDP(2,3)= 0 DFDP(3,1)= -PAR(3)*U(1)/PAR(1)**2 DFDP(3,2)= 0 DFDP(3,3)= U(1)/PAR(1) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------------- ! Sets parameter values for homoclinic bifurcation analysis (IPS=9). IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! ! COMMON block needed if IPS=9 (homoclinic bifurcations) : INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1) = 0.21 ! c PAR(2) = 0.2 ! a PAR(3) = 0.0025 ! b = epsilon PAR(11)= 0.1 ! truncated time interval !---------------------------------------------------------------------- ! If IEQUIB=1 then put the equilibrium in PAR(11+i), i=1,...,NDIM : IF (IEQUIB.NE.0) THEN PAR(12) = 0.0 PAR(13) = 0.0 PAR(14) = 0.0 ENDIF !---------------------------------------------------------------------- ! Distance along the unstable manifold : IF (ISTART.EQ.3) THEN PAR(12+NDIM*IEQUIB)=0.00001 ENDIF !---------------------------------------------------------------------- END SUBROUTINE STPNT SUBROUTINE PVLS END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/vhb/0000750000175000017500000000000013570013207012127 5ustar skskauto/07p/demos/vhb/c.vhb.20000750000175000017500000000055413570013207013221 0ustar skskNDIM= 2, IPS = 2, IRS = 2, ILP = 0 ICP = [1, 11] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 1, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 1, THL = {11: 0.0}, THU = {} UZSTOP = {11: 1e+05} auto/07p/demos/vhb/clean.auto0000640000175000017500000000014513570013207014104 0ustar sksk #============== # AUTO Demo vhb #============== print "\n***Clean the directory***" dl('vhb') cl() auto/07p/demos/vhb/plaut04.rc0000750000175000017500000000700013570013207013746 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/vhb/vhb.auto0000750000175000017500000000044113570013207013602 0ustar sksk #============== # AUTO Demo vhb #============== print "\n***Compute the zero family***" r1 = run(e='vhb',c='vhb.1') print "\n***Compute the bifurcating vertical branch of periodic solutions***" r2 = run(r1('HB1'),c='vhb.2') save(r1+r2,'vhb') print "\n***Clean the directory***" cl() auto/07p/demos/vhb/vhb.f900000750000175000017500000000250213570013207013230 0ustar sksk!--------------------------------------------------------------------- !--------------------------------------------------------------------- ! lin : A problem with a "vertical" Hopf bifurcation !--------------------------------------------------------------------- !--------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1) = PAR(1)*U(1) - U(2) F(2) = U(1)*(1-U(1)) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=-1. U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) RETURN END SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) RETURN END SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/vhb/c.vhb.10000750000175000017500000000053613570013207013220 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.06, DSMIN= 0.001, DSMAX= 0.06, IADS= 1 NPAR = 1, THL = {}, THU = {} UZSTOP = {1: 1.0} auto/07p/demos/ezp/0000750000175000017500000000000013570013207012146 5ustar skskauto/07p/demos/ezp/ezp.f900000640000175000017500000000336613570013207013275 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ezp : Complex bifurcation in a boundary value problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC COMPLEX(KIND(1.0D0)), INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(IN) :: PAR(*) COMPLEX(KIND(1.0D0)), INTENT(OUT) :: F(NDIM) COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) COMPLEX(KIND(1.0D0)) :: U1, U2, RL, E U1=U(1) U2=U(2) RL=PAR(1) E=CDEXP(U1) F(1)=U2 F(2)=-RL*E END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: T U(1)=0 U(2)=0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) COMPLEX(KIND(1.0D0)), INTENT(IN) :: U0(NDIM), U1(NDIM) COMPLEX(KIND(1.0D0)), INTENT(OUT) :: F(NBC) COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: DBC(NBC,*) F(1)=U0(1) F(2)=U1(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ezp/c.ezp0000640000175000017500000000056513570013207013117 0ustar skskNDIM= 4, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 4, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [2.0, 5.0]} UZSTOP = {1: 6.0} auto/07p/demos/ezp/clean.auto0000640000175000017500000000014513570013207014123 0ustar sksk #============== # AUTO Demo ezp #============== print "\n***Clean the directory***" dl('ezp') cl() auto/07p/demos/ezp/c.ezp.20000640000175000017500000000056513570013207013257 0ustar skskNDIM= 4, IPS = 4, IRS = 3, ILP = 0 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 4, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [2.0, 5.0]} UZSTOP = {1: 6.0} auto/07p/demos/ezp/plaut04.rc0000640000175000017500000000700013570013207013763 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/ezp/ezp.auto0000640000175000017500000000056113570013207013641 0ustar sksk #============== # AUTO Demo ezp #============== print "\n***Compute a solution family***" ezp=run(e='ezp',c='ezp') print "\n***Compute one leg of the bifurcating family***" ezp=ezp+run(ezp('BP1'),ISW=-1) print "\n***Compute the other leg of the bifurcating family***" ezp=ezp+run(ezp('BP1'),ISW=-1,DS='-') save(ezp,'ezp') print "\n***Clean the directory***" cl() auto/07p/demos/ezp/c.ezp.30000640000175000017500000000056513570013207013260 0ustar skskNDIM= 4, IPS = 4, IRS = 3, ILP = 0 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 4, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [2.0, 5.0]} UZSTOP = {1: 6.0} auto/07p/demos/ezp/c.ezp.10000640000175000017500000000056513570013207013256 0ustar skskNDIM= 4, IPS = 4, IRS = 0, ILP = 0 ICP = [1] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 4, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 1, THL = {}, THU = {} UZR = {1: [2.0, 5.0]} UZSTOP = {1: 6.0} auto/07p/demos/lin/0000750000175000017500000000000013570013207012132 5ustar skskauto/07p/demos/lin/c.lin.30000640000175000017500000000055113570013207013223 0ustar skskNDIM= 2, IPS = 4, IRS = 7, ILP = 0 ICP = [1, 2] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.2, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {3: 1.0}, A1 = 5.0 auto/07p/demos/lin/clean.auto0000640000175000017500000000015613570013207014111 0ustar sksk #============== # AUTO Demo lin #============== print "\n***Clean the directory***" dl('lin') dl('2p') cl() auto/07p/demos/lin/c.lin.20000640000175000017500000000055113570013207013222 0ustar skskNDIM= 2, IPS = 4, IRS = 2, ILP = 0 ICP = [1, 3] NTST= 6, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 2, NINT= 1 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.2, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {3: 1.0}, A1 = 5.0 auto/07p/demos/lin/c.lin0000640000175000017500000000055113570013207013062 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 3] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.2, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 3, THL = {}, THU = {} UZSTOP = {3: 1.0, 1: 5.0} auto/07p/demos/lin/lin.f900000640000175000017500000000407013570013207013236 0ustar sksk!--------------------------------------------------------------------- !--------------------------------------------------------------------- ! lin : A linear ODE eigenvalue problem !--------------------------------------------------------------------- !--------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION PI PI=4*ATAN(1.0D0) F(1) = U(2) F(2) = -( PAR(1)*PI )**2 * U(1) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0. PAR(2)=0. PAR(3)=0. U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1)-PAR(2) FB(2)=U1(1) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) FI(1)=U(1)*U(1)-PAR(3) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/lin/lin.auto0000640000175000017500000000101013570013207013577 0ustar sksk #============== # AUTO Demo lin #============== pgm = "lin" print "\nDemo %s is started"%pgm print "\n%s : first run : compute trivial solutions and locate eigenvalues"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : compute a few steps on the bifurcating branch"%pgm r2 = run(r1("BP1"),NTST=6,ISW=-1,DSMAX=0.5,A1=5.0) save(r1+r2,'lin') print "\n%s : third run : compute a 2-parameter curve of eigenvalues"%pgm r3 = run(r2("UZ1"),ICP=[1,2],NTST=5,ISW=1) save(r3,'2p') print "\n***Clean the directory***" cl() auto/07p/demos/lin/c.lin.10000640000175000017500000000055113570013207013221 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [1, 3] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.2, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 3, THL = {}, THU = {} UZSTOP = {3: 1.0, 1: 5.0} auto/07p/demos/she/0000750000175000017500000000000013570013207012127 5ustar skskauto/07p/demos/she/c.she.30000640000175000017500000000055013570013207013214 0ustar skskNDIM= 5, IPS = 9, IRS = 2, ILP = 0 ICP = [3, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 5, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = 0.02, DSMIN= 1e-05, DSMAX= 0.02, IADS= 1 NPAR = 21, THL = {}, THU = {} UZR = {} IEQUIB = -1 auto/07p/demos/she/clean.auto0000640000175000017500000000015313570013207014103 0ustar sksk#============== # AUTO Demo she #============== print "\n***Clean the directory***" dl("1") dl("2") cl() auto/07p/demos/she/she.f900000640000175000017500000001023113570013207013224 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! she : Heteroclinic Orbits In a Model of Shearing Instabilities !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) INTEGER I,J DOUBLE PRECISION P11SS,T02CS,P12CS,P01CS,A01CS,MUS,Q,SIGMA,ZETA,PI2 P11SS=U(1) T02CS=U(2) P12CS=U(3) P01CS=U(4) A01CS=U(5) MUS=PAR(1) Q=PAR(2) SIGMA=PAR(3) ZETA=PAR(4) PI2=3.141592654D0*3.141592654D0 F(1)=P11SS*T02CS+P11SS*MUS-P12CS*P01CS F(2)=-(P11SS**2+T02CS) F(3)=P12CS*MUS+P11SS*P01CS-9*SIGMA*P12CS/(4*(SIGMA+1)) F(4)=(-Q*SIGMA*A01CS/PI2-SIGMA*P01CS+(3*P11SS*P12CS*(1+1/SIGMA)))/4 F(5)=ZETA*(P01CS-A01CS)/4 IF(IJAC.EQ.0)RETURN DFDU(1,1)=T02CS+MUS DFDU(1,2)=P11SS DFDU(1,3)=-P01CS DFDU(1,4)=-P12CS DFDU(1,5)=0 DFDU(2,1)=-2*P11SS DFDU(2,2)=-1 DFDU(2,3:5)=0 DFDU(3,1)=P01CS DFDU(3,3)=MUS-9*SIGMA/(4*(SIGMA+1)) DFDU(3,4)=P11SS DFDU(3,5)=0 DFDU(4,1)=3*P12CS*(SIGMA+1)/(4*SIGMA) DFDU(4,2)=0 DFDU(4,3)=3*P11SS*(SIGMA+1)/(4*SIGMA) DFDU(4,4)=-SIGMA/4 DFDU(4,5)=-Q*SIGMA/(4*PI2) DFDU(5,1:3)=0 DFDU(5,4)=ZETA/4 DFDU(5,5)=-ZETA/4 IF(IJAC.EQ.1)RETURN DFDP(1,1)=P11SS DFDP(1,2:4)=0 DFDP(3,1)=P12CS DFDP(3,2)=0 DFDP(3,3)=-9*P12CS/(4*(SIGMA+1)**2) DFDP(3,4)=0 DFDP(4,1)=0 DFDP(4,2)=-SIGMA*A01CS/(4*PI2) DFDP(4,3)=(-Q*A01CS/PI2-P01CS-3*P11SS*P12CS/SIGMA**2)/4 DFDP(4,4)=0 DFDP(5,1:3)=0 DFDP(5,4)=(P01CS-A01CS)/4 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1)=0.163875d0 ! mu PAR(2)=0.0d0 ! q PAR(3)=0.5d0 ! sigma PAR(4)=0.2 ! zeta PAR(11)=85.07 ! Truncated time interval !---------------------------------------------------------------------- ! If IEQUIB =-2 put initial approximations to equilibria in ! PAR(11+i), i=1,...,NDIM : left-hand equilibrium ! PAR(11+i), i=NDIM+1,...,2*NDIM right-hand equilibrium PAR(12) = 0.4048147d0 PAR(13) = -0.163875d0 PAR(14) = 0.0 PAR(15) = 0.0 PAR(16) = 0.0 PAR(17) = 0.0 PAR(18) = 0.0 PAR(19) = 0.0 PAR(20) = 0.0 PAR(21) = 0.0 END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) ! Homoclinic bifurcations COMMON block needed here : COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER I ! If IEQUIB =-1 put analytic expressions for equilibria in ! PAR(11+i), i=1,..,NDIM left-hand equilibrium ! PAR(11+i), i=NDIM+1,...,2*NDIM right-hand equilibrium IF(IEQUIB.EQ.-1)THEN PAR(12)=DSQRT(PAR(1)) PAR(13)=-PAR(1) PAR(14)=0.0d0 PAR(15)=0.0d0 PAR(16)=0.0d0 DO I=NDIM+1,2*NDIM PAR(11+I)= 0.0 ENDDO ENDIF END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/she/c.she.20000640000175000017500000000056413570013207013220 0ustar skskdat = 'she' NDIM= 5, IPS = 9, IRS = 0, ILP = 0 ICP = [3, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 5, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = -0.02, DSMIN= 1e-05, DSMAX= 0.02, IADS= 1 NPAR = 21, THL = {}, THU = {} UZR = {} IEQUIB = -1 auto/07p/demos/she/she.auto0000640000175000017500000000046213570013207013603 0ustar sksk#========= # Demo she #========= pgm = 'she' print pgm, ": first run : continue heteroclinic orbit" r1=run('she',c='she.1',sv='1') print pgm, ": second run : repeat with IEQUIB=-1" r2=run('she',c='she.2') print pgm, ": third run : continue in reverse direction" r3=run(r2(2),c='she.3') save(r2+r3,'2') auto/07p/demos/she/she.dat0000640000175000017500000000743713570013207013414 0ustar sksk 0.000000E+00 0.404815E+00 -.163875E+00 0.730000E-08 0.143000E-07 0.100000E-08 0.728812E-02 0.404815E+00 -.163875E+00 0.840000E-08 0.175000E-07 0.150000E-08 0.161044E-01 0.404815E+00 -.163875E+00 0.103000E-07 0.221000E-07 0.210000E-08 0.266839E-01 0.404815E+00 -.163875E+00 0.133000E-07 0.288000E-07 0.320000E-08 0.393793E-01 0.404815E+00 -.163875E+00 0.183000E-07 0.397000E-07 0.480000E-08 0.546609E-01 0.404815E+00 -.163875E+00 0.267000E-07 0.581000E-07 0.750000E-08 0.729987E-01 0.404815E+00 -.163875E+00 0.422000E-07 0.918000E-07 0.125000E-07 0.948631E-01 0.404815E+00 -.163875E+00 0.731000E-07 0.158900E-06 0.223000E-07 0.115669E+00 0.404815E+00 -.163875E+00 0.123100E-06 0.267500E-06 0.382000E-07 0.140708E+00 0.404815E+00 -.163875E+00 0.230000E-06 0.500000E-06 0.720000E-07 0.170801E+00 0.404815E+00 -.163875E+00 0.487100E-06 0.105900E-05 0.153400E-06 0.206771E+00 0.404815E+00 -.163875E+00 0.119880E-05 0.260620E-05 0.378400E-06 0.240978E+00 0.404815E+00 -.163875E+00 0.282040E-05 0.613160E-05 0.890900E-06 0.273422E+00 0.404815E+00 -.163875E+00 0.635750E-05 0.138215E-04 0.200880E-05 0.312449E+00 0.404815E+00 -.163875E+00 0.168603E-04 0.366550E-04 0.532810E-05 0.349477E+00 0.404815E+00 -.163875E+00 0.425858E-04 0.925833E-04 0.134582E-04 0.384742E+00 0.404815E+00 -.163875E+00 0.102694E-03 0.223261E-03 0.324543E-04 0.418126E+00 0.404815E+00 -.163875E+00 0.236979E-03 0.515202E-03 0.748929E-04 0.458328E+00 0.404814E+00 -.163874E+00 0.646409E-03 0.140532E-02 0.204287E-03 0.496415E+00 0.404807E+00 -.163871E+00 0.167691E-02 0.364568E-02 0.529964E-03 0.532620E+00 0.404768E+00 -.163851E+00 0.414734E-02 0.901673E-02 0.131081E-02 0.567062E+00 0.404552E+00 -.163741E+00 0.979828E-02 0.213053E-01 0.309819E-02 0.599741E+00 0.403470E+00 -.163189E+00 0.221205E-01 0.481301E-01 0.700952E-02 0.630775E+00 0.398537E+00 -.160679E+00 0.474201E-01 0.103489E+00 0.151758E-01 0.660280E+00 0.378726E+00 -.150658E+00 0.935891E-01 0.206860E+00 0.312047E-01 0.688257E+00 0.316247E+00 -.119766E+00 0.153614E+00 0.356008E+00 0.592185E-01 0.702245E+00 0.258616E+00 -.924154E-01 0.173138E+00 0.424981E+00 0.785034E-01 0.715646E+00 0.192413E+00 -.627662E-01 0.171514E+00 0.462111E+00 0.987695E-01 0.728224E+00 0.130914E+00 -.375604E-01 0.149894E+00 0.463004E+00 0.117962E+00 0.743388E+00 0.730023E-01 -.169353E-01 0.109499E+00 0.429118E+00 0.138606E+00 0.757846E+00 0.380931E-01 -.684006E-02 0.717801E-01 0.380693E+00 0.154463E+00 0.771482E+00 0.193232E-01 -.261717E-02 0.443075E-01 0.333030E+00 0.165893E+00 0.784530E+00 0.975833E-02 -.986284E-03 0.265965E-01 0.291156E+00 0.173734E+00 0.800165E+00 0.415231E-02 -.289362E-03 0.137553E-01 0.246983E+00 0.179807E+00 0.814976E+00 0.179885E-02 -.870070E-04 0.711233E-02 0.211023E+00 0.182775E+00 0.829082E+00 0.799625E-03 -.271985E-04 0.372180E-02 0.181678E+00 0.183535E+00 0.842483E+00 0.366081E-03 -.890040E-05 0.198435E-02 0.157578E+00 0.182743E+00 0.855178E+00 0.172778E-03 -.305750E-05 0.108187E-02 0.137650E+00 0.180877E+00 0.867286E+00 0.839430E-04 -.110310E-05 0.604217E-03 0.121056E+00 0.178284E+00 0.881744E+00 0.346799E-04 -.323400E-06 0.298509E-03 0.103763E+00 0.174326E+00 0.895498E+00 0.143697E-04 -.100500E-06 0.152032E-03 0.896279E-01 0.169896E+00 0.908663E+00 0.557240E-05 -.331000E-07 0.797978E-04 0.779874E-01 0.165226E+00 0.921006E+00 0.151170E-05 -.115000E-07 0.431193E-04 0.683324E-01 0.160477E+00 0.932879E+00 -.540500E-06 -.420000E-08 0.239477E-04 0.602696E-01 0.155761E+00 0.946985E+00 -.196620E-05 -.130000E-08 0.117493E-04 0.518400E-01 0.149921E+00 0.960503E+00 -.290040E-05 -.400000E-09 0.590570E-05 0.449266E-01 0.144264E+00 0.973316E+00 -.368600E-05 -.100000E-09 0.300990E-05 0.392147E-01 0.138849E+00 0.985424E+00 -.445880E-05 -.100000E-09 0.152640E-05 0.344626E-01 0.133709E+00 0.100000E+01 -.550920E-05 0.000000E+00 0.598000E-06 0.295139E-01 0.127588E+00 auto/07p/demos/she/c.she.10000640000175000017500000000056513570013207013220 0ustar skskdat = 'she' NDIM= 5, IPS = 9, IRS = 0, ILP = 0 ICP = [3, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 5, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = -0.02, DSMIN= 1e-05, DSMAX= 0.02, IADS= 1 NPAR = 21, THL = {}, THU = {} UZR = {} IEQUIB = -2 auto/07p/demos/she/c.she0000640000175000017500000000056513570013207013061 0ustar skskdat = 'she' NDIM= 5, IPS = 9, IRS = 0, ILP = 0 ICP = [3, 1] NTST= 35, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 5, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = -0.02, DSMIN= 1e-05, DSMAX= 0.02, IADS= 1 NPAR = 21, THL = {}, THU = {} UZR = {} IEQUIB = -2 auto/07p/demos/ivp/0000750000175000017500000000000013570013207012146 5ustar skskauto/07p/demos/ivp/clean.auto0000640000175000017500000000014513570013207014123 0ustar sksk #============== # AUTO Demo ivp #============== print "\n***Clean the directory***" dl('ivp') cl() auto/07p/demos/ivp/ivp.f900000640000175000017500000000266513570013207013276 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ivp : Time integration (using Implicit Euler) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION E E=EXP(-PAR(3)*U(1)) F(1)=PAR(2)*U(1)*(1-U(1)) - U(1)*U(2) - PAR(1)*(1-E) F(2)=-U(2) + PAR(4)*U(1)*U(2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! **Set (constant) parameters PAR(1)=0. PAR(2)=3.0 PAR(3)=5.0 PAR(4)=3.0 ! **Set initial values U(1)=0.3 U(2)=0.3 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ivp/ivp.auto0000640000175000017500000000033513570013207013640 0ustar sksk #============== # AUTO Demo ivp #============== pgm = "ivp" print "\nDemo %s is started"%pgm print "\n%s : first run : time integration"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/ivp/c.ivp0000640000175000017500000000052713570013207013115 0ustar skskNDIM= 2, IPS = -2, IRS = 0, ILP = 0 ICP = [14] NTST= 1, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 0, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 1e-05, DSMAX= 0.05, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/ivp/c.ivp.10000640000175000017500000000052713570013207013254 0ustar skskNDIM= 2, IPS = -2, IRS = 0, ILP = 0 ICP = [14] NTST= 1, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 0, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 1e-05, DSMAX= 0.05, IADS= 1 NPAR = 4, THL = {}, THU = {} UZR = {} auto/07p/demos/san/0000750000175000017500000000000013570013207012131 5ustar skskauto/07p/demos/san/c.san.110000640000175000017500000000063613570013207013304 0ustar skskNDIM= 3, IPS = 9, IRS = 6, ILP = 0 ICP = [7, 8, 31] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {31: 0.0}, UZSTOP = {7: -0.5} IEQUIB= 0, ITWIST= 0 IPSI= [11] auto/07p/demos/san/clean.auto0000640000175000017500000000023513570013207014106 0ustar sksk#============== # AUTO Demo san #============== print "\n***Clean the directory***" dl("1") dl("2") dl("3") dl("4") dl("5") dl("6") dl("11") dl("12") cl() auto/07p/demos/san/c.san.30000640000175000017500000000064613570013207013226 0ustar skskNDIM= 3, IPS = 9, IRS = 3, ILP = 0 ICP = [4, 8, 10, 21, 33] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 20, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {33: 0.0, 4: 1.0, 21: 0.0} IEQUIB= 0, ITWIST= 1 IPSI= [1, 13] auto/07p/demos/san/san.auto0000640000175000017500000000304313570013207013605 0ustar sksk#========= # Demo san #========= pgm = 'san' print "Starting from analytical solution" print pgm, ": first run : continuation in PAR(1)" san=load('san',IPS=9,NDIM=3,ISP=0,ILP=0,ITNW=7,JAC=-1,NTST=35,IEQUIB=0,DS=0.05) r1=run(san,ICP=[1,8],UZSTOP={1:0.25}) print pgm, ": second run : generate adjoint variables" r2=run(r1,ICP=[9,8],ITWIST=1,NMX=2,UZSTOP={}) print pgm, ": third run : continue homoclinic orbit and adjoint" r3=run(r2,ICP=[4,8,10,21,33],IPSI=[1,13],NMX=50,NPR=20,UZR={4:1.0,21:0,33:0}) save(r3,'3') print pgm, ": fourth run : no convergence without dummy step" r4=run(r1,ICP=[4,8,10,21,33],ITWIST=1,IPSI=[1,13],NMX=50,UZR={33:0}) print pgm, ": fifth run : continue non-orientable orbit" r5=run(r3('UZ2'),ICP=[1,8,10,21,33],NMX=20,DS='-',sv='5') print pgm, ": sixth run : restart and homotopy to PAR(4)=1.0" r6=run(san,ICP=[4,8],UZSTOP={4:1}) print pgm, ": seventh run : homotopy to PAR(5)=0.0" r7=run(r6,ICP=[5,8],UZSTOP={5:0},DS='-') print pgm, ": eighth run : homotopy to PAR(1)=0.5" r8=run(r7,ICP=[1,8],UZSTOP={1:0.5},DS='-') print pgm, ": ninth run : homotopy to PAR(2)=3.0" r9=run(r8,ICP=[2,8],UZSTOP={2:3.0}) print pgm, ": tenth run : homotopy to PAR(7)=0.25" r10=run(r9,ICP=[7,8],UZSTOP={7:0.25}) print pgm, ": eleventh run : continue in PAR(7) to detect orbit flip" r11=run(r10,ICP=[7,8,31],IPSI=[11],UZR={31:0.0},UZSTOP={7:-0.5},DS='-') save(r11,'11') print pgm, ": twelfth run : three-parameter continuation of orbit flip" of = r11('UZ1') r12=run(of,ICP=[7,8,6],IPSI=[],NPR=5,NMX=20,IFIXED=[11],UZR={},UZSTOP={},DS='-') save(r12,'12') auto/07p/demos/san/c.san.70000640000175000017500000000057313570013207013231 0ustar skskNDIM= 3, IPS = 9, IRS = 2, ILP = 0 ICP = [5, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {5: 0.0} IEQUIB= 0, ITWIST= 0 auto/07p/demos/san/c.san.60000640000175000017500000000057313570013207013230 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [4, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {4: 1.0} IEQUIB= 0, ITWIST= 0 auto/07p/demos/san/c.san.90000640000175000017500000000057313570013207013233 0ustar skskNDIM= 3, IPS = 9, IRS = 4, ILP = 0 ICP = [2, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {2: 3.0} IEQUIB= 0, ITWIST= 0 auto/07p/demos/san/c.san.10000640000175000017500000000055713570013207013225 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [1, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {1: 0.25} IEQUIB= 0 auto/07p/demos/san/c.san.80000640000175000017500000000057313570013207013232 0ustar skskNDIM= 3, IPS = 9, IRS = 3, ILP = 0 ICP = [1, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {1: 0.5} IEQUIB= 0, ITWIST= 0 auto/07p/demos/san/c.san.20000640000175000017500000000056313570013207013223 0ustar skskNDIM= 3, IPS = 9, IRS = 2, ILP = 0 ICP = [9, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {} IEQUIB= 0, ITWIST= 1 auto/07p/demos/san/san.f900000640000175000017500000001002013570013207013224 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! hom : Homoclinic bifurcations in general test example equation !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)= PAR(1)*U(1) + PAR(2)*U(2) - PAR(1)*U(1)*U(1) & + (PAR(8) - PAR(4)*U(3)) * U(1)*(2.0D0 - 3.0D0*U(1)) F(2)= PAR(2)*U(1) + PAR(1)*U(2) & - 1.5D0*PAR(2)*U(1)*U(1) - 1.5D0*PAR(1)*U(1)*U(2) & - (PAR(8) - PAR(4)*U(3)) * 2.0D0*U(2) F(3)= PAR(3)*U(3) + PAR(7)*U(1) + PAR(6)*U(1)*U(3) & + PAR(4)*PAR(5)*(U(1)*U(1)*(1.0D0-U(1))-U(2)*U(2)) IF(IJAC.EQ.0)RETURN DFDU(1,1)= PAR(1) - 2.0D0*PAR(1)*U(1) & + (PAR(8)-PAR(4)*U(3)) * (2.0D0-6.0D0*U(1)) DFDU(1,2)= PAR(2) DFDU(1,3)= - PAR(4) * U(1)*(2.0D0-3.0D0*U(1)) DFDU(2,1)= PAR(2) - 3.0D0*PAR(2)*U(1) - 1.5D0*PAR(1)*U(2) DFDU(2,2)= PAR(1) - 1.5D0*PAR(1)*U(1) & - (PAR(8)-PAR(4)*U(3)) * 2.0D0 DFDU(2,3)= 2.0D0*PAR(4)*U(2) DFDU(3,1)= PAR(7) + PAR(6)*U(3) & + PAR(4)*PAR(5) * U(1)*(2.0D0-3.0D0*U(1)) DFDU(3,2)= -2.0D0*PAR(4)*PAR(5) * U(2) DFDU(3,3)= PAR(3) + PAR(6)*U(1) IF(IJAC.EQ.1)RETURN ! No parameter derivatives are specified with this example END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------------- ! Sets parameter values for homoclinic bifurcation analysis (IPS=9). IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! ! COMMON block needed if IPS=9 (homoclinic bifurcations) : INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV DOUBLE PRECISION S !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1) = 0.0D0 ! a PAR(2) = 1.0D0 ! b PAR(3) = -2.0D0 ! c PAR(4) = 0.0D0 ! alpha PAR(5) = 1.0D0 ! beta PAR(6) = 0.0D0 ! gamma PAR(7) = 0.0D0 ! mu PAR(8) = 0.0D0 ! tilde mu PAR(11)= 20.0D0 ! truncated time interval !---------------------------------------------------------------------- ! If IEQUIB=1 then put initial equilibrium in PAR(11+i), i=1,...,NDIM : IF (IEQUIB.NE.0) THEN PAR(12) = 0.0 PAR(13) = 0.0 PAR(14) = 0.0 ENDIF !---------------------------------------------------------------------- ! IF ISTART=2 then put analytic homoclinic orbit here with T in the ! interval [0,1] ! ! test example (a=0,b=1) S=(T-0.5)*PAR(11) U(1) = 1.0D0 - ( (1.0D0-DEXP(S))/(1.0D0+DEXP(S)) )**2 U(2) = 4.0D0 * DEXP(S) * (1.0D0-DEXP(S)) / (1.0D0+DEXP(S))**3 U(3) = 0.0D0 END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER I ! If IEQUIB=0 put analytic equilibrium in PAR(11+i), i=1,...,NDIM : DO I=1,NDIM PAR(11+i)=0 ENDDO END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/san/c.san.100000640000175000017500000000057413570013207013304 0ustar skskNDIM= 3, IPS = 9, IRS = 5, ILP = 0 ICP = [7, 8] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZSTOP = {7: 0.25} IEQUIB= 0, ITWIST= 0 auto/07p/demos/san/c.san.40000640000175000017500000000062513570013207013224 0ustar skskNDIM= 3, IPS = 9, IRS = 2, ILP = 0 ICP = [4, 8, 10, 21, 33] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {33: 0.0} IEQUIB= 0, ITWIST= 1 IPSI= [1, 13] auto/07p/demos/san/c.san.50000640000175000017500000000064613570013207013230 0ustar skskNDIM= 3, IPS = 9, IRS = 6, ILP = 0 ICP = [1, 8, 10, 21, 33] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 20, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {33: 0.0, 4: 1.0, 21: 0.0} IEQUIB= 0, ITWIST= 1 IPSI= [1, 13] auto/07p/demos/san/c.san.120000640000175000017500000000057213570013207013304 0ustar skskNDIM= 3, IPS = 9, IRS = 7, ILP = 0 ICP = [7, 8, 6] NTST= 35, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 5, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC=-1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 14, THL = {}, THU = {} IEQUIB= 0, ITWIST= 0 IFIXED= [11] auto/07p/demos/ppp/0000750000175000017500000000000013570013207012147 5ustar skskauto/07p/demos/ppp/ppp.f900000640000175000017500000000276013570013207013274 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ppp : A continuous dynamical system with period doubling !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)= U(1)*(1-U(1)) - PAR(4)*U(1)*U(2) F(2)=-PAR(2)*U(2) + PAR(4)*U(1)*U(2) - PAR(5)*U(2)*U(3) & - PAR(1)*(1-EXP(-PAR(6)*U(2))) F(3)=-PAR(3)*U(3) + PAR(5)*U(2)*U(3) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T U(1)=1.0 U(2)=0.0 U(3)=0.0 PAR(1)=0.0 PAR(2)=0.25 PAR(3)=0.5 PAR(4)=3.0 PAR(5)=3.0 PAR(6)=5.0 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ppp/c.ppp.40000640000175000017500000000053513570013207013260 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.02, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/ppp/clean.auto0000640000175000017500000000015613570013207014126 0ustar sksk #============== # AUTO Demo lin #============== print "\n***Clean the directory***" dl('ppp') dl('hb') cl() auto/07p/demos/ppp/ppp.auto0000640000175000017500000000077513570013207013652 0ustar sksk #============== # AUTO Demo ppp #============== pgm = "ppp" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions"%pgm ppp = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions"%pgm ppp = ppp+run(ppp("HB2"),IPS=2,ICP=[1,11],ILP=0,NMX=15,NPR=50,DS=0.1,DSMAX=0.5) save(ppp,'ppp') print "\n%s : third run : compute Hopf bifurcation curves"%pgm hb = run(ppp("HB2"),ICP=[1,4],ILP=0,ISW=2,NMX=100,RL1=0.58,DSMAX=0.1) save(hb,'hb') print "\n***Clean the directory***" cl() auto/07p/demos/ppp/c.ppp.70000640000175000017500000000054113570013207013260 0ustar skskNDIM= 3, IPS = 2, IRS = 25, ILP = 0 ICP = [1, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.03, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/ppp/c.ppp.60000640000175000017500000000054113570013207013257 0ustar skskNDIM= 3, IPS = 2, IRS = 25, ILP = 0 ICP = [1, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 20, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.03, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/ppp/c.ppp0000640000175000017500000000056613570013207013122 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 2, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.02, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZSTOP = {1: [0.0, 0.6]}, A1 = 2.0 auto/07p/demos/ppp/c.ppp.10000640000175000017500000000056613570013207013261 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 2, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.02, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZSTOP = {1: [0.0, 0.6]}, A1 = 2.0 auto/07p/demos/ppp/c.ppp.50000640000175000017500000000054113570013207013256 0ustar skskNDIM= 3, IPS = 2, IRS = 19, ILP = 0 ICP = [1, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.03, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/ppp/c.ppp.30000640000175000017500000000054013570013207013253 0ustar skskNDIM= 3, IPS = 1, IRS = 8, ILP = 0 ICP = [1, 4] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 2, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/ppp/c.ppp.20000640000175000017500000000054113570013207013253 0ustar skskNDIM= 3, IPS = 2, IRS = 8, ILP = 0 ICP = [1, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 15, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.002, DSMAX= 0.5, IADS= 1 NPAR = 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/kpr/0000750000175000017500000000000013570013207012144 5ustar skskauto/07p/demos/kpr/c.kpr.60000640000175000017500000000065313570013207013255 0ustar skskNDIM= 3, IPS = 9, IRS = 5, ILP = 0 ICP = [11, 2] NTST= 45, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.5, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 15, THL = {11: 0.01}, THU = {} UZR = {11: 1000.0}, UZSTOP = {11: 1100.0} ITWIST = 0, ISTART = 1 IPSI = [9,10] auto/07p/demos/kpr/c.kpr.130000640000175000017500000000064513570013207013334 0ustar skskNDIM= 3, IPS = 9, IRS = 11, ILP = 0 ICP = [1, 2, 3] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.2, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} NSTAB = 2, IEQUIB = 1, ITWIST = 0, ISTART = 1 IFIXED = [9], IPSI = [] auto/07p/demos/kpr/clean.auto0000640000175000017500000000026013570013207014117 0ustar sksk#============== # AUTO Demo san #============== print "\n***Clean the directory***" for name in ["1", "2", "3", "4", "6", "7", "8", "9", "10", "11", "12"]: dl(name) cl() auto/07p/demos/kpr/c.kpr.10000640000175000017500000000056113570013207013246 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 15, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {17: 0.0} ISTART = 3 auto/07p/demos/kpr/c.kpr.100000640000175000017500000000070113570013207013322 0ustar skskNDIM= 3, IPS = 9, IRS = 7, ILP = 0 ICP = [1, 2, 3, 29, 30, 33] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 100, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 4e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.5, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0, 33: 0.0} IEQUIB = 1, ITWIST = 1, ISTART = 1 IFIXED = [13], IPSI = [9] auto/07p/demos/kpr/c.kpr.30000640000175000017500000000056413570013207013253 0ustar skskNDIM= 3, IPS = 9, IRS = 4, ILP = 0 ICP = [11, 1] NTST= 15, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} ITWIST = 1, ISTART = 1 auto/07p/demos/kpr/c.kpr0000640000175000017500000000056113570013207013107 0ustar skskNDIM= 3, IPS = 9, IRS = 0, ILP = 0 ICP = [11, 17] NTST= 15, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {17: 0.0} ISTART = 3 auto/07p/demos/kpr/kpr.f900000640000175000017500000000563513570013207013272 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! kpr : Homoclinic bifurcations in Koper's extended Van der Pol model !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,ICP(*),IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) F(1)=PAR(3) * ( PAR(2)*U(2) - U(1)**3 + 3.0*U(1) - PAR(1) ) F(2)=U(1) - 2*U(2) + U(3) F(3)=U(2) - U(3) IF(IJAC.EQ.0)RETURN DFDU(1,1)=PAR(3)*(-3.0*U(1)**2 + 3.0) DFDU(1,2)=PAR(3)*PAR(2) DFDU(1,3)=0.0 DFDU(2,1)=1.0 DFDU(2,2)=-2.0 DFDU(2,3)=1.0 DFDU(3,1)=0.0 DFDU(3,2)=1.0 DFDU(3,3)=-1.0 IF(IJAC.EQ.1)RETURN DFDP(1,1)=- PAR(3) DFDP(2,1)=0.d0 DFDP(3,1)=0.d0 DFDP(1,2)=PAR(3) *U(2) DFDP(2,2)=0.d0 DFDP(3,2)=0.d0 DFDP(1,3)=PAR(2)*U(2) - U(1)**3 + 3.0*U(1) - PAR(1) DFDP(2,3)=0.d0 DFDP(3,3)=0.d0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------------- ! Sets parameter values for homoclinic bifurcation analysis (IPS=9). IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! COMMON block needed if IPS=9 (homoclinic bifurcations) : INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : PAR(1) = -1.851185124d0 ! lambda PAR(2) = -0.15D0 ! kappa PAR(3) = 10.0d0 ! 1/epsilon_1 PAR(11)= 0.1d0 ! truncated time interval !---------------------------------------------------------------------- ! If IEQUIB=1 then put the equilibrium in PAR(11+i), i=1,...,NDIM : IF (IEQUIB.NE.0) THEN PAR(12) = -0.9591016 PAR(13) = -0.9591016 PAR(14) = -0.9591016 ENDIF !---------------------------------------------------------------------- ! Distance along the unstable manifold : IF (ISTART.EQ.3) THEN PAR(12+NDIM*IEQUIB)=-0.00001 ENDIF !---------------------------------------------------------------------- END SUBROUTINE STPNT SUBROUTINE PVLS END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/kpr/c.kpr.90000640000175000017500000000061213570013207013253 0ustar skskNDIM= 3, IPS = 9, IRS = 11, ILP = 0 ICP = [1, 2] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} NSTAB = 2, IEQUIB = 1, ITWIST = 0, ISTART = 1 auto/07p/demos/kpr/c.kpr.70000640000175000017500000000063113570013207013252 0ustar skskNDIM= 3, IPS = 9, IRS = 6, ILP = 0 ICP = [1, 2, 29, 30] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 50, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.01, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0} ITWIST = 0, ISTART = 1 IPSI = [9,10] auto/07p/demos/kpr/c.kpr.80000640000175000017500000000064513570013207013260 0ustar skskNDIM= 3, IPS = 9, IRS = 8, ILP = 0 ICP = [1, 2, 35, 36] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 80, NPR= 20, MXBF= 0, IID = 3, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-5 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {35: 0.0, 36: 0.0} IEQUIB = 2, ITWIST = 0, ISTART = 1 IPSI = [15,16] auto/07p/demos/kpr/kpr.auto0000640000175000017500000000252513570013207013637 0ustar sksk#========= # Demo kpr #========= pgm = 'kpr' print "Starting from analytical solution" print pgm, ": first run : continuation in the period T" r1=run('kpr',c='kpr.1',sv='1') print pgm, ": second run : locate the homoclinic orbit" r2=run(r1('UZ1'),c='kpr.2',sv='2') print pgm, ": third run : generate adjoint variables" r3=run(r2('UZ1'),c='kpr.3',sv='3') print pgm, ": fourth run : continue the homoclinic orbit" r3=r3+run(r3,c='kpr.4',ap='3') print pgm, ": fifth run : continue in reverse direction" r3=r3+run(r3()[0],c='kpr.5',ap='3') print pgm, ": sixth run : increase the period" r6=run(r2('EP1'),c='kpr.6',sv='6') print pgm, ": seventh run : recompute the branch of homoclinic orbits" r7=run(r6('UZ1'),c='kpr.7',sv='7') print pgm, ": eighth run : continue central saddle-node homoclinics" r8=run(r7('UZ1'),c='kpr.8',sv='8') print pgm, ": ninth run : continue homoclinics from codim-2 point" r9=run(r8('UZ1'),c='kpr.9',sv='9') print pgm, ": tenth run : 3-parameter curve of inclination-flips" r10=run(r3('UZ1'),c='kpr.10',sv='10') print pgm, ": eleventh run : another curve of inclination-flips" r11=run(r3('UZ2'),c='kpr.11',sv='11') print pgm, ": twelfth run : non-central saddle-node homoclinics" r12=run(r7('UZ1'),c='kpr.12',sv='12') print pgm, ": thirteenth run : non-central saddle-node homoclinics" r12=r12+run(r8('UZ1'),c='kpr.13',ap='12') auto/07p/demos/kpr/c.kpr.20000640000175000017500000000056013570013207013246 0ustar skskNDIM= 3, IPS = 9, IRS = 2, ILP = 0 ICP = [11, 1] NTST= 15, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 2.0, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {11: 60.0} ISTART = 3 auto/07p/demos/kpr/c.kpr.40000640000175000017500000000065513570013207013255 0ustar skskNDIM= 3, IPS = 9, IRS = 6, ILP = 0 ICP = [1, 2, 10, 29, 30, 33] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.01, DSMAX= 0.2, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0, 33: 0.0} ITWIST = 1, ISTART = 1 IPSI = [9,10,13] auto/07p/demos/kpr/c.kpr.50000640000175000017500000000065513570013207013256 0ustar skskNDIM= 3, IPS = 9, IRS = 6, ILP = 0 ICP = [1, 2, 10, 29, 30, 33] NTST= 25, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 50, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.1, DSMIN= 0.01, DSMAX= 0.2, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0, 33: 0.0} ITWIST = 1, ISTART = 1 IPSI = [9,10,13] auto/07p/demos/kpr/c.kpr.120000640000175000017500000000064513570013207013333 0ustar skskNDIM= 3, IPS = 9, IRS = 8, ILP = 0 ICP = [1, 2, 3] NTST= 40, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.2, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} NSTAB = 2, IEQUIB = 1, ITWIST = 0, ISTART = 1 IFIXED = [9], IPSI = [] auto/07p/demos/kpr/c.kpr.110000640000175000017500000000070113570013207013323 0ustar skskNDIM= 3, IPS = 9, IRS = 8, ILP = 0 ICP = [1, 2, 3, 29, 30, 33] NTST= 30, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 100, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0, 33: 0.0} IEQUIB = 1, ITWIST = 1, ISTART = 1 IFIXED = [13], IPSI = [9] auto/07p/demos/lrz/0000750000175000017500000000000013570013207012157 5ustar skskauto/07p/demos/lrz/c.lrz.10000640000175000017500000000067513570013207013302 0ustar skskparnames = {1: 'rho', 2: 'beta', 3: 'sigma'} unames = {1: 'x', 2: 'y', 3: 'z'} NDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = ['rho'] NTST= 35, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {'rho': 30.0} auto/07p/demos/lrz/clean.auto0000640000175000017500000000015413570013207014134 0ustar sksk#============== # AUTO Demo lrz #============== print "\n***Clean the directory***" delete("lrz") clean() auto/07p/demos/lrz/c.lrz0000640000175000017500000000070313570013207013133 0ustar skskparnames = {1: 'rho', 2: 'beta', 3: 'sigma'} unames = {1: 'x', 2: 'y', 3: 'z'} NDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = ['rho'] NTST= 35, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 50, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 3, THL = {'PERIOD': 0.0}, THU = {} UZSTOP = {'rho': 30.0} auto/07p/demos/lrz/c.lrz.30000640000175000017500000000070013570013207013271 0ustar skskparnames = {1: 'rho', 2: 'beta', 3: 'sigma'} unames = {1: 'x', 2: 'y', 3: 'z'} NDIM= 3, IPS = 2, IRS = 6, ILP = 0 ICP = ['rho', 'PERIOD'] NTST= 35, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 2, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.5, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 3, THL = {'PERIOD': 0.0}, THU = {} UZR = {} auto/07p/demos/lrz/c.lrz.40000640000175000017500000000067613570013207013306 0ustar skskparnames = {1: 'rho', 2: 'beta', 3: 'sigma'} unames = {1: 'x', 2: 'y', 3: 'z'} NDIM= 3, IPS = 2, IRS = 9, ILP = 0 ICP = ['rho', 'beta'] NTST= 35, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 5, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 3, THL = {'PERIOD': 0.0}, THU = {} UZR = {} auto/07p/demos/lrz/c.lrz.20000640000175000017500000000070013570013207013270 0ustar skskparnames = {1: 'rho', 2: 'beta', 3: 'sigma'} unames = {1: 'x', 2: 'y', 3: 'z'} NDIM= 3, IPS = 2, IRS = 4, ILP = 0 ICP = ['rho', 'PERIOD'] NTST= 35, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 35, NPR= 2, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.5, DSMIN= 0.01, DSMAX= 5.0, IADS= 1 NPAR = 3, THL = {'PERIOD': 0.0}, THU = {} UZR = {} auto/07p/demos/lrz/plaut04.rc0000640000175000017500000000700013570013207013774 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -4 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/lrz/autorc0000750000175000017500000001421213570013207013402 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"x": "$x$", "y": "$y$", "z": "$z$", "rho": "$\rho$", "beta": "$\beta$", "sigma": "$\sigma$", "L2-NORM": "$L_2$-Norm"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. #bifurcation_x = [0] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = [2] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/lrz/lrz.auto0000640000175000017500000000070313570013207013661 0ustar sksk #============== # AUTO Demo lrz #============== print "\n***Compute stationary solution families***" lrz=run('lrz') save('lrz') print "\n***Compute the first periodic solution family***" run(lrz('HB1'),IPS=2,ICP=['rho','PERIOD'],NMX=35,NPR=2,DS=0.5) append('lrz') print "\n***Compute the second periodic solution family***" run(lrz('HB2'),IPS=2,ICP=['rho','PERIOD'],NMX=35,NPR=2,DS=0.5) append('lrz') print "\n***Clean the directory***" clean() auto/07p/demos/lrz/lrz.f900000640000175000017500000000265513570013207013317 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! lor : The Lorenz Equations !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION x, y, z, rho, beta, sigma x=U(1) y=U(2) z=U(3) rho=PAR(1) beta=PAR(2) sigma=PAR(3) F(1)= sigma * (y-x) F(2)= rho*x - y - x*z F(3)= x*y - beta*z END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0. PAR(2)= 8.d0/3.d0 PAR(3)=10. U(1)=0. U(2)=0. U(3)=0. END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/pcl/0000750000175000017500000000000013570013207012126 5ustar skskauto/07p/demos/pcl/pcl.f900000640000175000017500000001503413570013207013230 0ustar sksk!--------------------------------------------------------------------- !--------------------------------------------------------------------- ! pcl: Finding a point-to-cycle heteroclinic connection in the ! Lorenz equations ! ! Parameters: ! PAR(1) : rho ! PAR(2) : beta ! PAR(3) : sigma ! ! PAR(11) : T: period of the cycle ! PAR(12) : mu: log of the Floquet multiplier ! PAR(13) : h: norm of eigenfunction for cycle at 0 ! PAR(14) : T^+: time for connection from section to cycle (U(7:9)) ! PAR(15) : delta: distance from end connection to cycle ! PAR(16) : T^-: time for connection from point to section (U(10:12)) ! PAR(17) : eps: distance from point to start connection ! PAR(21) : sigma+: U0(7)-10 (x-distance W^s(P) from section x=10) ! PAR(22) : sigma-: U1(10)-10 (x-distance W^u(E) from section x=10) ! PAR(23) : eta: gap size for Lin vector ! PAR(24) : Z_x: Lin vector (x-coordinate) ! PAR(25) : Z_y: Lin vector (y-coordinate) ! PAR(26) : Z_z: Lin vector (z-coordinate) !--------------------------------------------------------------------- !--------------------------------------------------------------------- SUBROUTINE RHS(U,PAR,F,JAC,A) IMPLICIT NONE DOUBLE PRECISION, INTENT(IN) :: U(3), PAR(*) LOGICAL, INTENT(IN) :: JAC DOUBLE PRECISION, INTENT(OUT) :: F(3), A(3,3) DOUBLE PRECISION rho, beta, sigma DOUBLE PRECISION x, y, z rho = PAR(1) beta = PAR(2) sigma = PAR(3) x = U(1) y = U(2) z = U(3) F(1) = sigma * (y - x) F(2) = rho * x - y - x * z F(3) = x * y - beta * z IF(JAC)THEN A(1,1) = -sigma A(1,2) = sigma A(1,3) = 0 A(2,1) = rho - z A(2,2) = -1 A(2,3) = -x A(3,1) = y A(3,2) = x A(3,3) = -beta ENDIF END SUBROUTINE RHS SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- --- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) DOUBLE PRECISION T,mu DOUBLE PRECISION A(3,3) CALL RHS(U,PAR,F,NDIM>3,A) IF(NDIM==3)RETURN F(4:6) = MATMUL(A,U(4:6)) T = PAR(11) F(1:6) = F(1:6) * T ! log of Floquet multiplier in PAR(12) mu = PAR(12) F(4:6) = F(4:6) - mu*U(4:6) IF (NDIM==6) RETURN CALL RHS(U(7:9),PAR,F(7:9),.FALSE.,A) T = PAR(14) F(7:9) = F(7:9) * T IF (NDIM==9) RETURN CALL RHS(U(10:12),PAR,F(10:12),.FALSE.,A) T = PAR(16) F(10:12) = F(10:12) * T END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, PARAMETER :: delta = 1d-7, eps = 1d-7 DOUBLE PRECISION rho, beta, sigma, ev(3), nev DOUBLE PRECISION, SAVE :: s(6) IF(NDIM==9)THEN IF(T==0)THEN s(1:6) = U(1:6) ENDIF U(7:9) = s(1:3) + delta*s(4:6) RETURN ELSEIF(NDIM==12)THEN rho = PAR(1) beta = PAR(2) sigma = PAR(3) ! unstable eigenvector at the 0 equilibrium ev(1) = rho/(-0.5+0.5*sigma+0.5*sqrt(1-2*sigma+sigma*sigma+4*rho*sigma)) ev(2) = 1 ev(3) = 0 nev = sqrt(DOT_PRODUCT(ev,ev)) ev(1:3) = ev(1:3) / nev U(10:12) = eps*ev(1:3) RETURN ENDIF rho = 0 beta = 8d0/3d0 sigma = 10d0 PAR(1:3) = (/rho,beta,sigma/) PAR(15) = delta PAR(17) = eps PAR(21:22) = 0 U(1:3) = 0 END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP DOUBLE PRECISION d(3),normlv INTEGER i, NBC LOGICAL, SAVE :: FIRST = .TRUE. IF (FIRST) THEN ! initialization for BCND FIRST = .FALSE. IF (NDIM==9) THEN PAR(21) = GETP("BV0",7,U) - 10 ELSEIF (NDIM == 12) THEN NBC = AINT(GETP("NBC",0,U)) IF (NBC == 15) THEN PAR(22) = GETP("BV1",10,U) - 10 ELSE ! check if Lin vector initialized: IF (DOT_PRODUCT(PAR(24:26),PAR(24:26)) > 0) RETURN DO i=1,3 d(i) = GETP("BV0",6+i,U) - GETP("BV1",9+i,U) ENDDO normlv = sqrt(DOT_PRODUCT(d,d)) ! gap size in PAR(23) PAR(23) = normlv ! Lin vector in PAR(24)-PAR(26) PAR(24:26) = d(1:3)/normlv ENDIF ENDIF RETURN ENDIF END SUBROUTINE PVLS SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION rho, beta, sigma, delta, eps, ev(3), nev, eta ! Periodicity boundary conditions on state variables FB(1:3) = U0(1:3) - U1(1:3) ! Floquet boundary condition FB(4:6) = U1(4:6) - U0(4:6) ! normalization FB(7) = PAR(13) - DOT_PRODUCT(U0(4:6),U0(4:6)) IF (NBC==7) RETURN delta = PAR(15) FB(8:10) = U1(7:9) - (U0(1:3) + delta*U0(4:6)) FB(11) = U0(7) - 10 - PAR(21) IF (NBC==11) RETURN rho = PAR(1) beta = PAR(2) sigma = PAR(3) eps = PAR(17) ! unstable eigenvector at the 0 equilibrium ev(1) = rho/(-0.5+0.5*sigma+0.5*sqrt(1-2*sigma+sigma*sigma+4*rho*sigma)) ev(2) = 1 ev(3) = 0 nev = sqrt(DOT_PRODUCT(ev,ev)) ev(1:3) = ev(1:3) / nev FB(12:14) = U0(10:12) - eps*ev(1:3) IF (NBC==15) THEN FB(15) = U1(10) - 10 - PAR(22) RETURN ENDIF eta = PAR(23) FB(15:17) = U0(7:9) - U1(10:12) - eta*PAR(24:26) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Integral phase condition FI(1) = DOT_PRODUCT(U(1:3),UPOLD(1:3)) IF (NINT==1) RETURN FI(2) = DOT_PRODUCT(UPOLD(10:12),U(10:12)-UOLD(10:12)) END SUBROUTINE ICND SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) END SUBROUTINE FOPT auto/07p/demos/pcl/pclc.auto0000640000175000017500000000241213570013207013741 0ustar sksk# AUTO demo pcl using constants files # # Lorenz system # compute the EtoP connection via Lin's method print "\n1st run - continue equilibrium 0 and branches of secondary equilibria" run(e='pcl',c='pcl.1',sv='1') print "\n2nd run - switch to the periodic orbit and continue in rho up to 24.0579" run(c='pcl.2',s='1',sv='2') print "\n3rd run - extend the system" run(c='pcl.3',s='2',sv='3') print "\n4th run - normalize the Floquet bundle" run(c='pcl.4',s='3',sv='4') print "\n5th run - integrate backwards from the periodic orbit" print "measures the distance to Sigma = { x=10 } in sigma+" print "UZ point corresponds to an intersection with Sigma" run(c='pcl.5',s='4',sv='5') print "\n6th run - integrate away from the equilibrium up to Sigma" print "(second UZ is the one we want)" run(c='pcl.6',s='5',sv='6') print "\n7th run - put starting data for Lin vector and Lin gap in" print "Zx, Zy, Zz and eta" print "close the gap (with some intermediate solutions)" run(c='pcl.7',s='6',sv='7') cp('7','closegap') # plot this, have a look at the solution coordinates 'x-'-vs-'z-' and 'x+'-vs-'z+' #plot(r7) #wait() print "\n8th run - keep the gap closed and continue in rho,beta" load(c='pcl.8',s='7',sv='8') run(sv='8') run(DS='-',ap='8') merge('8','cont') clean() print "\nDone." auto/07p/demos/pcl/c.pcl.70000640000175000017500000000133513570013207013220 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z', 7: 'x+', 8: 'y+', 9: 'z+', 10: 'x-', 11: 'y-', 12: 'z-'}, parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h', 14: 'T+', 15: 'delta', 16: 'T-', 17: 'eps', 21: 'sigma+', 22: 'sigma-', 23: 'eta', 25: 'Zx', 26: 'Zy'} NDIM= 12, IPS = 4, IRS = UZ2, ILP = 0 ICP = ['eta', 'rho', 'delta', 'eps', 'T-', 'T+', 'mu', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=17, NINT= 2 NMX=99999, NPR= 10, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 1e-07, DSMAX= 0.1, IADS= 1 NPAR= 26, THL = {'T-': 0, 'T': 0, 'T+': 0}, THU = {} UZSTOP = {'eta': 0} auto/07p/demos/pcl/clean.auto0000640000175000017500000000012713570013207014103 0ustar skskfor suffix in ['closegap','cont','1','2','3','4','5','6','7','8']: dl(suffix) cl() auto/07p/demos/pcl/c.pcl.10000640000175000017500000000073013570013207013210 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma'} parnames={1: 'rho', 2: 'beta', 3: 'sigma'} NDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = ['rho'] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.005, DSMAX= 2.0, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZSTOP = {'rho': 31.6} STOP= ['HB1'] auto/07p/demos/pcl/pcl.auto0000640000175000017500000000451713570013207013606 0ustar sksk# AUTO demo pcl # # Lorenz system # compute the EtoP connection via Lin's method print "\n1st run - continue equilibrium 0 and branches of secondary equilibria" r1 = run(e='pcl',ICP=['rho'],NDIM=3,ILP=0,ITNW=7, STOP=['HB1'],UZSTOP={1:31.6},DS=0.1,DSMAX=2.0, unames={1:'xgamma',2:'ygamma',3:'zgamma',4:'x',5:'y',6:'z', 7:'x+',8:'y+',9:'z+',10:'x-',11:'y-',12:'z-'}, parnames={1:'rho',2:'beta',3:'sigma', 11:'T',12:'mu',13:'h',14:'T+',15:'delta',16:'T-',17:'eps', 21:'sigma+',22:'sigma-',23:'eta',25:'Zx',26:'Zy'}) print "\n2nd run - switch to the periodic orbit and continue in rho up to 24.0579" r2 = run(r1('HB2'),ICP=['rho','T'],IPS=2,NTST=50, STOP=[],UZSTOP={'rho':24.0579}) print "\n3rd run - extend the system" r3 = run(r2('UZ1'),ICP=['mu','h','T'],IPS=4,NDIM=6,NBC=7,NINT=1, STOP=['BP1'],UZSTOP={},DS=-0.1,DSMIN=1e-7,DSMAX=1.0) print "\n4th run - normalize the Floquet bundle" r4 = run(r3('BP1'),ISW=-1, STOP=[],UZSTOP={'h':1.0},DS=1,DSMIN=1e-5,DSMAX=100) print "\n5th run - integrate backwards from the periodic orbit" print "measures the distance to Sigma = { x=10 } in sigma+" print "UZ point corresponds to an intersection with Sigma" r5 = run(r4('UZ1'),ICP=['T+','mu','T','sigma+'],ISW=1,NDIM=9,NBC=11, STOP=['UZ1'],UZR={'sigma+':0},UZSTOP={},DS=1.0) print "\n6th run - integrate away from the equilibrium up to Sigma" print "(second UZ is the one we want)" r6 = run(r5('UZ1'),ICP=['T-','sigma-','T+','mu','T'],NDIM=12,NBC=15, STOP=['UZ2'],UZR={'sigma-':0}) print "\n7th run - put starting data for Lin vector and Lin gap in" print "Zx, Zy, Zz and eta" print "close the gap (with some intermediate solutions)" r7 = run(r6('UZ2'),ICP=['eta','rho','delta','eps','T-','T+','mu','T'], NBC=17,NINT=2,NPR=10,THL={'T':0,'T+':0,'T-':0}, STOP=['UZ1'],UZR={'eta':0},DS=-0.01,DSMIN=1e-7,DSMAX=0.1) save(r7,'closegap') # plot this, have a look at the solution coordinates 'x-'-vs-'z-' and 'x+'-vs-'z+' #plot(r7) #wait() print "\n8th run - keep the gap closed and continue in rho,beta" start8 = load(r7('UZ1'),ICP=['rho','beta','delta','eps','T-','T+','mu','T'], STOP=['LP1'],UZR={'rho':25},UZSTOP={'rho':80},ILP=1,NPR=200,DS=0.1,DSMAX=1) r8 = merge(run(start8) + run(start8,DS='-')) save(r8,'cont') clean() print "\nDone." auto/07p/demos/pcl/c.pcl.20000640000175000017500000000073213570013207013213 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma'} parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T'} NDIM= 3, IPS = 2, IRS = HB2, ILP = 0 ICP = ['rho', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 0.005, DSMAX= 2.0, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZSTOP = {'rho': 24.0579} auto/07p/demos/pcl/c.pcl.40000640000175000017500000000100413570013207013206 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z'} parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h'} NDIM= 6, IPS = 4, IRS = BP1, ILP = 0 ICP = ['mu', 'h', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 7, NINT= 1 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1, DSMIN= 1e-05, DSMAX= 100, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZSTOP = {'h': 1.0} auto/07p/demos/pcl/plaut04.rc0000640000175000017500000000703713570013207013755 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1,7,10 Y Axis Solution = 2,8,11 Z Axis Solution = 3,9,12 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -5 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3DBif = No 3DSol = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/pcl/autorc0000640000175000017500000000343413570013207013353 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" stability = 0 #use_labels = 1 #use_symbols = 0 top_title = "Lorenz: EtoP connections using Lin's method" #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = [r"$\rho$", "L2-norm", "max $x$", "max $y$", "max $z$", "$\beta", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 type = "solution" # or "bifurcation" bifurcation_x = [0] bifurcation_y = [2] solution_x = ['xgamma','x+','x-'] solution_y = ['zgamma','z+','z-'] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/pcl/c.pcl.50000640000175000017500000000110613570013207013212 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z', 7: 'x+', 8: 'y+', 9: 'z+'} parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h', 14: 'T+', 21: 'sigma+'} NDIM= 9, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['T+', 'mu', 'T', 'sigma+'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=11, NINT= 1 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN= 1e-05, DSMAX= 100, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZSTOP = {'sigma+': 0} auto/07p/demos/pcl/c.pcl.60000640000175000017500000000120213570013207013210 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z', 7: 'x+', 8: 'y+', 9: 'z+', 10: 'x-', 11: 'y-', 12: 'z-'} parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h', 14: 'T+', 16: 'T-', 21: 'sigma+', 22: 'sigma-'} NDIM= 12, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['T-', 'sigma-', 'T+', 'mu', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=15, NINT= 1 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 1.0, DSMIN= 1e-05, DSMAX= 100, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZSTOP = {'sigma-': 0} auto/07p/demos/pcl/c.pcl.30000640000175000017500000000101013570013207013202 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z'} parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h'} NDIM= 6, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['mu', 'h', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 7, NINT= 1 NMX=99999, NPR=99999, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.1, DSMIN= 1e-07, DSMAX= 1.0, IADS= 1 NPAR= 26, THL = {11: 0.0}, THU = {} UZR = {} STOP= ['BP1'] auto/07p/demos/pcl/c.pcl.80000640000175000017500000000140713570013207013221 0ustar skskunames={1: 'xgamma', 2: 'ygamma', 3: 'zgamma', 4: 'x', 5: 'y', 6: 'z', 7: 'x+', 8: 'y+', 9: 'z+', 10: 'x-', 11: 'y-', 12: 'z-'}, parnames={1: 'rho', 2: 'beta', 3: 'sigma', 11: 'T', 12: 'mu', 13: 'h', 14: 'T+', 15: 'delta', 16: 'T-', 17: 'eps', 21: 'sigma+', 22: 'sigma-', 23: 'eta', 25: 'Zx', 26: 'Zy'} NDIM= 12, IPS = 4, IRS = UZ1, ILP = 1 ICP = ['rho', 'beta', 'delta', 'eps', 'T-', 'T+', 'mu', 'T'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=17, NINT= 2 NMX=99999, NPR= 200, MXBF= 10, IID = 2, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.1, DSMIN= 1e-07, DSMAX= 1, IADS= 1 NPAR= 26, THL = {'T-': 0, 'T': 0, 'T+': 0}, THU = {} UZR = {'rho': [25, 80]} STOP= ['UZ2', 'LP1'] auto/07p/demos/frc/0000750000175000017500000000000013570013207012122 5ustar skskauto/07p/demos/frc/clean.auto0000640000175000017500000000015513570013207014100 0ustar sksk #============== # AUTO Demo frc #============== print "\n***Clean the directory***" dl('0') dl('frc') cl() auto/07p/demos/frc/c.frc.20000640000175000017500000000057713570013207013212 0ustar skskNDIM= 4, IPS = 2, IRS = 2, ILP = 1 ICP = [5, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 20, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 0.001, DSMAX= 5.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {3: 0.2, 11: [1.0, 2.0, 3.0, 4.0, 5.0]} auto/07p/demos/frc/frc.f900000640000175000017500000000364513570013207013225 0ustar sksk!------------------------------------------------------------------------------ !------------------------------------------------------------------------------ ! frc : A periodically forced system !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION FHN,Z,A,B,R,EPS,BET,D,V,W,X,Y,SS FHN(Z) = Z*(Z-A)*(1-Z) A = PAR(1) B = PAR(2) R = PAR(3) EPS= PAR(4) BET= PAR(5) D = PAR(6) V=U(1) W=U(2) X=U(3) Y=U(4) SS = X**2 + Y**2 F(1) = ( FHN(V) - W )/EPS F(2) = V - D*W - ( B + R*X ) F(3) = X + BET*Y - X*SS F(4) = -BET*X + Y - Y*SS END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION A,B,R,EPS,BET,D,TPI A =0.5 B = A R =0. EPS=0.005 BET=100 D =1.0 PAR(1)=A PAR(2)=B PAR(3)=R PAR(4)=EPS PAR(5)=BET PAR(6)=D TPI=8*ATAN(1.0D0) PAR(11)=TPI/BET U(1)=B U(2)=B*(B-A)*(1-B) U(3)=SIN(TPI*T) U(4)=COS(TPI*T) END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/frc/c.frc0000640000175000017500000000057713570013207013052 0ustar skskNDIM= 4, IPS = 2, IRS = 0, ILP = 1 ICP = [3, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 10, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {3: 0.2, 11: [1.0, 2.0, 3.0, 4.0, 5.0]} auto/07p/demos/frc/c.frc.10000640000175000017500000000057713570013207013211 0ustar skskNDIM= 4, IPS = 2, IRS = 0, ILP = 1 ICP = [3, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 10, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {3: 0.2, 11: [1.0, 2.0, 3.0, 4.0, 5.0]} auto/07p/demos/frc/frc.auto0000640000175000017500000000055413570013207013573 0ustar sksk #============== # AUTO Demo frc #============== pgm = "frc" print "\nDemo %s is started"%pgm print "\n%s : first run : continuation to nonzero r-value"%pgm r1 = run(e=pgm,c=pgm) save(r1,'0') print "\n%s : second run : compute solution branch"%pgm r2 = run(r1("UZ1"),ICP=[5,11],NMX=20,DS=-0.5,DSMAX=5.0) save(r2,'frc') print "\n***Clean the directory***" cl() auto/07p/demos/brc/0000750000175000017500000000000013570013207012116 5ustar skskauto/07p/demos/brc/clean.auto0000640000175000017500000000024413570013207014073 0ustar sksk #============== # AUTO Demo brc #============== print "\n***Clean the directory***" import os,glob dl('brc') cl() for f in glob.glob('brc.mod'): os.remove(f) auto/07p/demos/brc/brc.auto0000640000175000017500000000063113570013207013557 0ustar sksk #============== # AUTO Demo brc #============== pgm = "brc" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions"%pgm r2 = run(r1("HB1"),IPS=2,ICP=[5,11]) print "\n%s : third run : secondary periodic solutions"%pgm r3 = run(r2("BP1"),ISW=-1) save(r1+r2+r3,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/brc/c.brc.20000640000175000017500000000054213570013207013172 0ustar skskNDIM= 12, IPS = 2, IRS = 2, ILP = 0 ICP = [5, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {5: 2.0} auto/07p/demos/brc/c.brc.30000640000175000017500000000054213570013207013173 0ustar skskNDIM= 12, IPS = 2, IRS = 7, ILP = 0 ICP = [5, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {5: 2.0} auto/07p/demos/brc/c.brc0000640000175000017500000000053613570013207013035 0ustar skskNDIM= 12, IPS = 1, IRS = 0, ILP = 0 ICP = [5] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {5: 2.0} auto/07p/demos/brc/c.brc.10000640000175000017500000000053613570013207013174 0ustar skskNDIM= 12, IPS = 1, IRS = 0, ILP = 0 ICP = [5] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {}, THU = {} UZSTOP = {5: 2.0} auto/07p/demos/brc/brc.f900000640000175000017500000001370413570013207013212 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! brc : A parabolic PDE (the Brusselator) !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! (Discretized in space by polynomial collocation at Chebyshev points) !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! NOTE: The value of the constant NE is defined in the module brc below. ! ! NE : the dimension of the PDE system ! ! NN : the number of Chebyshev collocation points in space is ! determined by the AUTO-constant NDIM: ! NN = NDIM/NE !---------------------------------------------------------------------- !---------------------------------------------------------------------- MODULE brc SAVE INTEGER, PARAMETER :: NE=2 DOUBLE PRECISION, ALLOCATABLE :: D2(:,:) END MODULE brc SUBROUTINE FF(NE,U,PAR,F) ! ---------- -- ! Define the nonlinear term IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NE) DOUBLE PRECISION X,Y,A,B X=U(1) Y=U(2) A=PAR(1) B=PAR(2) F(1)= X**2*Y - (B+1)*X + A F(2)=-X**2*Y + B*X END SUBROUTINE FF SUBROUTINE SETDC(NE,DC,PAR) ! ---------- ----- ! Set the diffusion constants (constant, or in terms of PAR) IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(OUT) :: DC(NE) DOUBLE PRECISION, INTENT(IN) :: PAR(*) DC(1)=PAR(3)/PAR(5)**2 DC(2)=PAR(4)/PAR(5)**2 END SUBROUTINE SETDC SUBROUTINE SETBC(NE,PAR,U0,U1) ! ---------- ----- ! Set the boundary values (to be kept fixed in time) IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(OUT) :: U0(NE),U1(NE) DOUBLE PRECISION A,B A=PAR(1) B=PAR(2) U0(1)=A U0(2)=B/A U1(1)=A U1(2)=B/A END SUBROUTINE SETBC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- ! Define the starting stationary solution on the spatial mesh USE brc IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM/NE,NE),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T INTEGER I,NN DOUBLE PRECISION A,B,Dx,Dy,RL ! Set the parameter values A=2.d0 B=5.45d0 Dx=0.008d0 Dy=0.004d0 RL=0.4 PAR(1)=A PAR(2)=B PAR(3)=Dx PAR(4)=Dy PAR(5)=RL ! Set the starting solution at the Chebyshev collocation points NN=NDIM/NE DO I=1,NN U(I,1)=A U(I,2)=B/A ENDDO END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Problem-independent subroutines !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- USE brc IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM/NE,NE), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM/NE,NE) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION W(NE),FW(NE),DC(NE),U0(NE),U1(NE) INTEGER I,J,K,NN,NP ! Problem-independent initialization : NN=NDIM/NE NP=NN+1 CALL SETDC(NE,DC,PAR) CALL SETBC(NE,PAR,U0,U1) DO I=1,NN DO K=1,NE W(K)=U(I,K) ENDDO CALL FF(NE,W,PAR,FW) DO J=1,NE F(I,J)=FW(J) + DC(J)*(U0(J)*D2(I,0)+U1(J)*D2(I,NP)) DO K=1,NN F(I,J)=F(I,J)+DC(J)*D2(I,K)*U(K,J) ENDDO ENDDO ENDDO END SUBROUTINE FUNC SUBROUTINE GENCF(PAR,NN) ! ---------- ----- USE brc IMPLICIT NONE INTEGER, INTENT(IN) :: NN DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, ALLOCATABLE :: X(:),XX(:,:),CC(:,:),RI(:,:) INTEGER, ALLOCATABLE :: IR(:),IC(:) DOUBLE PRECISION pi,C,DET INTEGER I,J,K,M,NP NP=NN+1 M=NN+2 ALLOCATE(D2(NN,0:NP)) ALLOCATE(X(M),XX(M,M),CC(M,0:NP),RI(M,M),IR(M),IC(M)) pi=4*ATAN(1.d0) X(1)=0.d0 DO K=2,NP C=COS( (2*K-3)*pi/(2*NN) ) X(K)=(1+C)/2 ENDDO X(M)=1.d0 DO I=1,M DO J=1,M RI(I,J)=0.d0 XX(I,J)=X(I)**(J-1) ENDDO RI(I,I)=1.d0 ENDDO CALL GE(0,M,M,XX,M,M,CC,M,RI,IR,IC,DET) DO I=1,NN DO J=0,NP D2(I,J)=0.d0 DO K=2,M-1 D2(I,J)=D2(I,J)+CC(K+1,J)*K*(K-1)*X(I+1)**(K-2) ENDDO ENDDO ENDDO DEALLOCATE(X,XX,CC,RI,IR,IC) END SUBROUTINE GENCF SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- USE brc IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) LOGICAL, SAVE :: ifrst = .TRUE. ! Problem-independent initialization : IF(ifrst)THEN CALL GENCF(PAR,NDIM/NE) ifrst=.FALSE. ENDIF END SUBROUTINE PVLS auto/07p/demos/brf/0000750000175000017500000000000013570013207012121 5ustar skskauto/07p/demos/brf/c.brf.10000640000175000017500000000054613570013207013203 0ustar skskNDIM= 10, IPS = 1, IRS = 0, ILP = 0 ICP = [5] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {5: 2.05} auto/07p/demos/brf/brf.auto0000640000175000017500000000067713570013207013577 0ustar sksk #============== # AUTO Demo brf #============== pgm = "brf" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions"%pgm r2 = run(r1("HB1"),IPS=2,ICP=[5,11],NMX=120,EPSL=1e-08) print "\n%s : third run : secondary periodic solutions"%pgm r3 = run(r2("BP1"),ISW=-1,NMX=100,EPSL=1e-07) save(r1+r2+r3,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/brf/clean.auto0000640000175000017500000000024413570013207014076 0ustar sksk #============== # AUTO Demo brf #============== print "\n***Clean the directory***" import os,glob dl('brf') cl() for f in glob.glob('brf.mod'): os.remove(f) auto/07p/demos/brf/c.brf.30000640000175000017500000000055213570013207013202 0ustar skskNDIM= 10, IPS = 2, IRS = 7, ILP = 0 ICP = [5, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {5: 2.05} auto/07p/demos/brf/c.brf0000640000175000017500000000054613570013207013044 0ustar skskNDIM= 10, IPS = 1, IRS = 0, ILP = 0 ICP = [5] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {5: 2.05} auto/07p/demos/brf/c.brf.20000640000175000017500000000055213570013207013201 0ustar skskNDIM= 10, IPS = 2, IRS = 2, ILP = 0 ICP = [5, 11] NTST= 10, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 120, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN= 0.002, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZSTOP = {5: 2.05} auto/07p/demos/brf/brf.f900000640000175000017500000001410513570013207013214 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! brf : A parabolic PDE (the Brusselator) !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! (Discretized in space by fourth order finite differences) !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! NOTE: The value of the constant NE is defined below in a module. ! ! NE : the dimension of the PDE system ! ! NX : the number of space intervals for the discretization is ! derived from the AUTO-constant NDIM: ! NX = NDIM/NE + 1 !---------------------------------------------------------------------- !---------------------------------------------------------------------- MODULE brf SAVE INTEGER, PARAMETER :: NE=2 DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: DI,DD END MODULE brf SUBROUTINE FF(NE,U,PAR,F) ! ---------- -- ! Define the nonlinear term IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(IN) :: U(NE),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NE) DOUBLE PRECISION X,Y,A,B X=U(1) Y=U(2) A=PAR(1) B=PAR(2) F(1)= X**2*Y - (B+1)*X + A F(2)=-X**2*Y + B*X END SUBROUTINE FF SUBROUTINE SETDC(NE,DC,PAR) ! ---------- ----- ! Set the diffusion constants (constant, or in terms of PAR) IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(OUT) :: DC(NE) DOUBLE PRECISION, INTENT(IN) :: PAR(*) DC(1)=PAR(3)/PAR(5)**2 DC(2)=PAR(4)/PAR(5)**2 END SUBROUTINE SETDC SUBROUTINE SETBC(NE,PAR,U0,U1) ! ---------- ----- ! Set the boundary values (to be kept fixed in time) IMPLICIT NONE INTEGER, INTENT(IN) :: NE DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(OUT) :: U0(NE),U1(NE) DOUBLE PRECISION A,B A=PAR(1) B=PAR(2) U0(1)=A U0(2)=B/A U1(1)=A U1(2)=B/A END SUBROUTINE SETBC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- ! Define the starting stationary solution on the spatial mesh USE brf IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM/NE,NE),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION A,B,Dx,Dy,RL INTEGER I,NX ! Set the parameter values A=2.d0 B=5.45d0 Dx=0.008d0 Dy=0.004d0 RL=0.4 PAR(1)=A PAR(2)=B PAR(3)=Dx PAR(4)=Dy PAR(5)=RL ! Set the starting solution at space-points i/NX, i=1,2,...,NX-1 NX=NDIM/NE+1 DO I=1,NX-1 U(I,1)=A U(I,2)=B/A ENDDO END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Problem-independent subroutines !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- USE brf IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM/NE,NE), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM/NE,NE) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION W(NE),FW(NE),DC(NE) DOUBLE PRECISION U0(NE),U1(NE),F0(NE),F1(NE),V(NDIM/NE,NE) INTEGER I,J,K,NN,NX ! Problem-independent initialization : CALL SETDC(NE,DC,PAR) CALL SETBC(NE,PAR,U0,U1) CALL FF(NE,U0,PAR,F0) CALL FF(NE,U1,PAR,F1) NN=NDIM/NE NX=NN+1 DO I=1,NN DO J=1,NE V(I,J)= DI(I, 1)*( DC(J)*NX**2*U0(J) + F0(J)/12 ) & + DI(I,NN)*( DC(J)*NX**2*U1(J) + F1(J)/12 ) ENDDO ENDDO DO I=1,NN DO K=1,NE W(K)=U(I,K) ENDDO CALL FF(NE,W,PAR,FW) DO J=1,NE F(I,J)=V(I,J) + FW(J) DO K=1,NN F(I,J)=F(I,J)+DC(J)*DD(I,K)*U(K,J) ENDDO ENDDO ENDDO END SUBROUTINE FUNC SUBROUTINE GENCF(PAR,NN) ! ---------- ----- USE brf IMPLICIT NONE INTEGER, INTENT(IN) :: NN DOUBLE PRECISION, INTENT(IN) :: PAR(*) INTEGER NX,I,J,K DOUBLE PRECISION S,DET INTEGER, ALLOCATABLE :: IR(:),IC(:) DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:,:) :: D0,D2,RI ALLOCATE(DI(NN,NN),DD(NN,NN)) ALLOCATE(IR(NN),IC(NN),D0(NN,NN),D2(NN,NN),RI(NN,NN)) NX=NN+1 D0(:,:)=0 D2(:,:)=0 RI(:,:)=0 DO I=1,NN D0(I,I)=10.d0/12.d0 D2(I,I)=-2*NX**2 RI(I,I)=1 ENDDO DO I=1,NN-1 D0(I+1,I)=1.d0/12.d0 D0(I,I+1)=1.d0/12.d0 D2(I+1,I)=NX**2 D2(I,I+1)=NX**2 ENDDO ! calculate DI = D0^{-1} and DD = D0^{-1} D2 CALL GE(0,NN,NN,D0,NN,NN,DI,NN,RI,IR,IC,DET) DD = MATMUL(DI,D2) DEALLOCATE(IR,IC,D0,D2,RI) END SUBROUTINE GENCF SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- USE brf IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) LOGICAL, SAVE :: ifrst = .TRUE. ! Problem-independent initialization : IF(ifrst)THEN CALL GENCF(PAR,NDIM/NE) ifrst=.FALSE. ENDIF END SUBROUTINE PVLS auto/07p/demos/fhn/0000750000175000017500000000000013570013207012123 5ustar skskauto/07p/demos/fhn/clean.auto0000640000175000017500000000015613570013207014102 0ustar sksk #============== # AUTO Demo fhn #============== print "\n***Clean the directory***" dl('fhn') dl('hb') cl() auto/07p/demos/fhn/c.fhn0000640000175000017500000000054513570013207013047 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 1.0} auto/07p/demos/fhn/c.fhn.20000750000175000017500000000055113570013207013206 0ustar skskNDIM= 2, IPS = 2, IRS = 2, ILP = 0 ICP = [1, 11] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 20, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.05, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.0} auto/07p/demos/fhn/c.fhn.30000750000175000017500000000056113570013207013210 0ustar skskNDIM= 2, IPS = 1, IRS = 2, ILP = 0 ICP = [1, 3] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.005, DSMAX= 0.05, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.0, 3: 10.0} auto/07p/demos/fhn/c.fhn.10000750000175000017500000000054513570013207013210 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 1.0} auto/07p/demos/fhn/fhn.auto0000750000175000017500000000105113570013207013570 0ustar sksk #============== # AUTO Demo fhn: The FitzHugh-Nagumo Equations #============== print "\n***Stationary solutions***" r1 = run(e='fhn',c='fhn.1') print "\n***Periodic solutions***" r2 = run(r1("HB"),c='fhn.2') save(r1+r2,'fhn') print "\n***Continue Hopf bifurcations in 2 parameters***" r3 = run(r1("HB"),c='fhn.3') print "\n***Continue Hopf bifurcations in 2 parameters***" r4 = run(r1("HB"),c='fhn.4') hb = r3 + r4 print "\n***Relabel and save the Hopf bifurcations files***" hb = rl(hb) save(hb, 'hb') print "\n***Clean the directory***" cl() auto/07p/demos/fhn/plaut04.rc0000750000175000017500000000700013570013207013742 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/fhn/c.fhn.40000750000175000017500000000056113570013207013211 0ustar skskNDIM= 2, IPS = 1, IRS = 2, ILP = 0 ICP = [1, 3] NTST= 20, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.01, DSMIN= 0.005, DSMAX= 0.05, IADS= 1 NPAR = 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: 0.0, 3: 10.0} auto/07p/demos/fhn/fhn.f900000750000175000017500000000356013570013207013225 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! fhn : The FitzHugh - Nagumo Equation !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION a,b,c,x,y a=PAR(1) b=PAR(2) c=PAR(3) x=U(1) y=U(2) F(1)= c * ( x - x**3/3 + y ) F(2)=-( x - a + b*y ) / c END SUBROUTINE FUNC !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! ! Initialize the equation parameters PAR(1)=0. PAR(2)=0.8 PAR(3)=3.0 ! Initialize the solution (assuming PAR(1)=0 ) U(1)=0. U(2)=0. END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/lcbp/0000750000175000017500000000000013570013207012270 5ustar skskauto/07p/demos/lcbp/clean.auto0000640000175000017500000000034713570013207014251 0ustar sksk #=============== # AUTO Demo lcbp #=============== pgm="lcbp" print "\n***Clean the directory***" dl(pgm+'.1') dl(pgm+'.1.sw') dl(pgm+'.2.sw') dl(pgm+'.2.bw') dl(pgm+'.2.fw') dl(pgm+'.3.sw') dl(pgm+'.3.bw') dl(pgm+'.3.fw') cl() auto/07p/demos/lcbp/c.lcbp0000640000175000017500000000053513570013207013360 0ustar skskNDIM= 2, IPS = 2, IRS = 0, ILP = 1 ICP = [1, 11] NTST= 100, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 100, ITNW= 7, NWTN= 5, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.01, DSMIN= 1e-10, DSMAX= 0.1, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {} auto/07p/demos/lcbp/lcbp.f900000640000175000017500000000454113570013207013535 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Demo LCNF: The limit cycle BP normal form !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION pi pi=4*ATAN(1.d0) ! Equations F(1)=-U(1)*(U(1)**2+U(2)**2-(PAR(1)+PAR(2))* & SQRT(U(1)**2+U(2)**2)+PAR(1)*PAR(2)+PAR(3))-2*pi*U(2) F(2)=-U(2)*(U(1)**2+U(2)**2-(PAR(1)+PAR(2))* & SQRT(U(1)**2+U(2)**2)+PAR(1)*PAR(2)+PAR(3))+2*pi*U(1) IF(IJAC.EQ.0)RETURN DFDU(1,1)=-(U(1)**2+U(2)**2-(PAR(1)+PAR(2))* & SQRT(U(1)**2+U(2)**2)+PAR(1)*PAR(2)+PAR(3))-U(1)* & (2*U(1)-U(1)*(PAR(1)+PAR(2))/SQRT(U(1)**2+U(2)**2)) DFDU(1,2)=-U(1)*(2*U(2)-U(2)*(PAR(1)+PAR(2))/ & SQRT(U(1)**2+U(2)**2))-2*pi DFDU(2,1)=-U(2)*(2*U(1)-U(1)*(PAR(1)+PAR(2))/ & SQRT(U(1)**2+U(2)**2))+2*pi DFDU(2,2)=-(U(1)**2+U(2)**2-(PAR(1)+PAR(2))* & SQRT(U(1)**2+U(2)**2)+PAR(1)*PAR(2)+PAR(3))-U(2)* & (2*U(2)-U(2)*(PAR(1)+PAR(2))/SQRT(U(1)**2+U(2)**2)) IF(IJAC.EQ.1)RETURN DFDP(1,1)=-U(1)*(-SQRT(U(1)**2+U(2)**2)+PAR(2)) DFDP(1,2)=-U(1)*(-SQRT(U(1)**2+U(2)**2)+PAR(1)) DFDP(1,3)=-U(1) DFDP(2,1)=-U(2)*(-SQRT(U(1)**2+U(2)**2)+PAR(2)) DFDP(2,2)=-U(2)*(-SQRT(U(1)**2+U(2)**2)+PAR(1)) DFDP(2,3)=-U(2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, INTENT(OUT) :: U(NDIM), PAR(*) DOUBLE PRECISION pi pi=4*ATAN(1.d0) ! Parameters initialization PAR(1:3)=(/1.0,2.0,0.0/) PAR(11)=1.0 U(1)=PAR(1)*COS(2*pi*T) U(2)=PAR(1)*SIN(2*pi*T) END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/lcbp/lcbp.auto0000640000175000017500000000150313570013207014102 0ustar sksk #======================== # AUTO Demo lcbp # BPCONT for limit cycles #======================== pgm="lcbp" load(pgm) print "\n***"+pgm+": run 1: cycle continuation***" r1=run(sv=pgm+'.1') bp=r1('BP1') print "\n***"+pgm+": run 1: branch switch***" run(bp,ISW=-1,NMX=5,NPR=1,sv=pgm+'.1.sw') for isw in [2,3]: if isw==2: msg="\n***"+pgm+": run 2: BP cont non-generic " bp=load(bp,ICP=[1,2,11]) else: msg="\n***"+pgm+": run 3: BP cont generic " bp=load(bp,ICP=[1,2,3,11]) solprefix=pgm+'.'+str(isw)+'.' print msg+"(sw)***" sw=run(bp,ISW=isw,NMX=20,NPR=10,DS=1.e-4,UZSTOP={1:0},sv=solprefix+'sw') print msg+"(fw)***" run(sw,NMX=50,DS=0.01,sv=solprefix+'fw') print msg+"(bw)***" run(sw,NMX=50,DS=-0.01,STOP=['LP1','BP1'],sv=solprefix+'bw') print "\n***Clean the directory***" cl() auto/07p/demos/chu/0000750000175000017500000000000013570013207012127 5ustar skskauto/07p/demos/chu/clean.auto0000640000175000017500000000014513570013207014104 0ustar sksk #============== # AUTO Demo chu #============== print "\n***Clean the directory***" dl('chu') cl() auto/07p/demos/chu/c.chu0000640000175000017500000000054713570013207013061 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 500, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {}, A1 = 5.0 auto/07p/demos/chu/c.chu.40000640000175000017500000000060313570013207013214 0ustar skskNDIM= 3, IPS = 2, IRS = 9, ILP = 0 ICP = [1, 2] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 200, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {1: [1.0, 5.0, 9.0]} UZSTOP={1: 12.0} auto/07p/demos/chu/chu.f900000640000175000017500000000320713570013207013231 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! chu : Chua's circuit !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION ab,h,pi,alpha,beta,RK,a0,a1,x,y,z ab(x)=2*x*DATAN(RK*x)/pi h(x)=a1*x + 0.5*(a0-a1) * ( ab(x+1) - ab(x-1) ) pi=4*DATAN(1.d0) alpha=PAR(1) beta =PAR(2) RK =PAR(3) a0 =PAR(4) a1 =PAR(5) x=U(1) y=U(2) z=U(3) F(1)= alpha * ( y - h(x) ) F(2)= x - y + z F(3)= -beta * y END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=-1 PAR(2)= 14.3 PAR(3)= 10. PAR(4)= -1./7. PAR(5)= 2./7. U(1)=0. U(2)=0. U(3)=0. END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/chu/c.chu.50000640000175000017500000000060313570013207013215 0ustar skskNDIM= 3, IPS = 2, IRS = 13, ILP = 1 ICP = [1, 2] NTST= 80, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 200, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {1: [1.0, 5.0, 9.0]} UZSTOP={1: 12.0} auto/07p/demos/chu/c.chu.30000640000175000017500000000060713570013207013217 0ustar skskNDIM= 3, IPS = 2, IRS = 8, ILP = 0 ICP = [1, 11] NTST= 80, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 150, NPR= 500, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {11: [100.0, 500.0]} UZSTOP={11: 1000.0} auto/07p/demos/chu/chu.auto0000640000175000017500000000047613570013207013610 0ustar sksk #============== # AUTO Demo chu #============== pgm = "chu" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions"%pgm r2 = run(r1("HB1"),IPS=2,ICP=[1,11]) save(r1+r2,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/chu/c.chu.20000640000175000017500000000054113570013207013213 0ustar skskNDIM= 3, IPS = 2, IRS = 6, ILP = 0 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 500, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/chu/c.chu.10000640000175000017500000000054713570013207013220 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 0 ICP = [1] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 500, MXBF= -2, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.01, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 5, THL = {11: 0.0}, THU = {} UZR = {}, A1 = 5.0 auto/07p/demos/man/0000750000175000017500000000000013570013207012123 5ustar skskauto/07p/demos/man/man2.auto0000640000175000017500000000034213570013207013652 0ustar sksk #============== # AUTO Demo man #============== print "\n**Compute a bigger portion of the manifold***" start = loadbd('start') man2 = run(start('UZ5'),c='man.2') save(man2,'man2') print "\n***Clean the directory***" cl() auto/07p/demos/man/clean.auto0000640000175000017500000000022513570013207014077 0ustar sksk#============== # AUTO Demo man #============== print "\n***Clean the directory***" dl("0") dl("1") dl("2") dl("man1") dl("man2") dl("start") cl() auto/07p/demos/man/c.man.10000640000175000017500000000064713570013207013211 0ustar skskNDIM= 3, IPS = 4, IRS = 3, ILP = 0 ICP = [11, 5, 6, 7, 8, 9] NTST= 100, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 7, NINT= 1 NMX= 500, NPR= 2, MXBF= 2, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-05 DS = 0.2, DSMIN=0.0001, DSMAX= 0.2, IADS= 1 NPAR = 12, THL = {6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0, 10: 0.0, 11: 0.0}, THU = {} UZSTOP = {5: [1.1, -0.9]} auto/07p/demos/man/c.man.00000640000175000017500000000071213570013207013201 0ustar skskNDIM= 3, IPS = 4, IRS = 0, ILP = 0 ICP = [11, 6, 7, 8, 9, 12] NTST= 75, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 7, NINT= 1 NMX= 1000, NPR= 1000, MXBF= 2, IID = 3, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-05 DS = -0.01, DSMIN=0.0001, DSMAX= 10.0, IADS= 1 NPAR = 12, THL = {6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0, 11: 0.0, 12: 0.0}, THU = {} UZR = {12: [10.0, 25.0, 50.0, 100.0]} UZSTOP = {12: 150.0} auto/07p/demos/man/man.f900000640000175000017500000001051113570013207013215 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! man : Stable manifold of the origen in the Lorenz model !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION Period Period=PAR(11) F(1)= Period * (PAR(3) * (U(2)- U(1))) F(2)= Period * (PAR(1)*U(1) - U(2) - U(1)*U(3)) F(3)= Period * (U(1)*U(2) - PAR(2)*U(3)) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION rad,h,Period,RLength,pi,theta,cs,sn,V1(3),V2(3) PAR(1)=28. PAR(2)=8.d0/3.d0 PAR(3)=10. rad=5.0 h=0.1 Period=1e-5 RLength=0. PAR(4)=rad PAR(5)=h CALL EIGV(NDIM,PAR,V1,V2) ! Set initial approximate solution (for small Period) pi=4*ATAN(1.d0) theta=2*pi*h cs=COS(theta) sn=SIN(theta) U(1)= rad * ( cs*V1(1) + sn*V2(1) ) U(2)= rad * ( cs*V1(2) + sn*V2(2) ) U(3)= rad * ( cs*V1(3) + sn*V2(3) ) PAR(6) = U(1) PAR(7) = U(2) PAR(8) = U(3) PAR(9) = SQRT(U(1)**2 + U(2)**2 + U(3)**2) PAR(11)=Period PAR(12)=RLength END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION V1(3),V2(3),pi,rad,h,theta,cs,sn CALL EIGV(NDIM,PAR,V1,V2) pi=4*ATAN(1.d0) rad=PAR(4) h=PAR(5) theta=2*pi*h cs=COS(theta) sn=SIN(theta) ! At time=0 FB(1)= U0(1) - rad * ( cs*V1(1) + sn*V2(1) ) FB(2)= U0(2) - rad * ( cs*V1(2) + sn*V2(2) ) FB(3)= U0(3) - rad * ( cs*V1(3) + sn*V2(3) ) ! At time=1 FB(4)= U1(1) - PAR(6) FB(5)= U1(2) - PAR(7) FB(6)= U1(3) - PAR(8) FB(7)= SQRT(U1(1)**2 + U1(2)**2 + U1(3)**2) - PAR(9) END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE EIGV(NDIM,PAR,V1,V2) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(OUT) :: V1(NDIM),V2(NDIM) LOGICAL, SAVE :: ifirst = .TRUE. DOUBLE PRECISION e,ss ! Stable eigenvalue/vector 1 V1(1)= 0. V1(2)= 0. V1(3)= 1./2.66667 ! Stable eigenvalue/vector 2 e=-(11+SQRT(1201.d0))/2 V2(1)=1+e V2(2)=PAR(1) V2(3)= 0. ss=SQRT(V2(1)**2+V2(2)**2) V2(1)=V2(1)/(ss*22.8277) V2(2)=V2(2)/(ss*22.8277) IF(ifirst)THEN WRITE(10,*)V2(1),V2(2) ifirst=.FALSE. ENDIF END SUBROUTINE EIGV !---------------------------------------------------------------------- SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) DOUBLE PRECISION FF(3),DFDU(1),DFDP(1) CALL FUNC(NDIM,U,ICP,PAR,0,FF,DFDU,DFDP) FI(1)=SQRT(FF(1)**2 + FF(2)**2 + FF(3)**2 ) - PAR(12) END SUBROUTINE ICND SUBROUTINE PVLS END SUBROUTINE PVLS SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/man/plaut04.rc0000640000175000017500000000675713570013207013762 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahea Coordinate Type = 0 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 2 Y Axis Solution = 3 Z Axis Solution = 1 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 0.2 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 0.8 # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 #Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 # Set the maximum and minimum satellite animation speed: Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 #Set the maximum and minimum orbit-change animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 #Set the active AUTO parameter indices: parameter ID = 10 #Choose 3D or 2D graph: 3D = Yes auto/07p/demos/man/c.man.20000640000175000017500000000064713570013207013212 0ustar skskNDIM= 3, IPS = 4, IRS = 6, ILP = 0 ICP = [11, 5, 6, 7, 8, 9] NTST= 100, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 7, NINT= 1 NMX= 3000, NPR= 5, MXBF= 2, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-05 DS = 0.2, DSMIN=0.0001, DSMAX= 0.2, IADS= 1 NPAR = 12, THL = {6: 0.0, 7: 0.0, 8: 0.0, 9: 0.0, 10: 0.0, 11: 0.0}, THU = {} UZSTOP = {5: [1.1, -0.9]} auto/07p/demos/man/man.auto0000640000175000017500000000041413570013207013570 0ustar sksk #============== # AUTO Demo man #============== print "\n***Compute an initial orbit in the manifold***" r0=run(e='man',c='man.0') save(r0,'0') print "\n***Compute the manifold***" r1=run(r0('UZ2'),c='man.1') save(r1,'1') print "\n***Clean the directory***" cl() auto/07p/demos/man/man1.auto0000640000175000017500000000044413570013207013654 0ustar sksk #============== # AUTO Demo man #============== print "\n***Compute an initial orbit in the manifold***" start = run(e='man',c='man.0') save(start,'start') print "\n***Compute the manifold***" man1 = run(start('UZ2'),c='man.1') save(man1,'man1') print "\n***Clean the directory***" cl() auto/07p/demos/wav/0000750000175000017500000000000013570013207012145 5ustar skskauto/07p/demos/wav/clean.auto0000640000175000017500000000020313570013207014115 0ustar sksk #============== # AUTO Demo wav #============== print "\n***Clean the directory***" dl('ode') dl('wav') dl('rng') dl('tim') cl() auto/07p/demos/wav/c.wav.40000640000175000017500000000054213570013207013252 0ustar skskNDIM= 2, IPS = 12, IRS = 8, ILP = 0 ICP = [3, 10] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 2.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/wav/c.wav.50000640000175000017500000000054113570013207013252 0ustar skskNDIM= 2, IPS = 14, IRS = 8, ILP = 0 ICP = [14] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 230, NPR= 5, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 2.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {}, auto/07p/demos/wav/c.wav.60000640000175000017500000000054213570013207013254 0ustar skskNDIM= 2, IPS = 13, IRS = 19, ILP = 0 ICP = [3, 10] NTST= 20, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 10, NPR= 10, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 10.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/wav/plaut04.rc0000640000175000017500000000700013570013207013762 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/wav/c.wav.10000640000175000017500000000055013570013207013246 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {3: 800.0} auto/07p/demos/wav/c.wav0000640000175000017500000000055013570013207013107 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {3: 800.0} auto/07p/demos/wav/c.wav.30000640000175000017500000000061613570013207013253 0ustar skskNDIM= 2, IPS = 12, IRS = 4, ILP = 0 ICP = [3, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 0.1, DSMAX= 1.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {3: [610.0, 638.0], 11: 500.0}, STOP = ['UZ4'] auto/07p/demos/wav/wav.f900000640000175000017500000000311313570013207013261 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! wav : Periodic waves in an a nonlinear parabolic PDE !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION R R= U(2)/(PAR(5)+U(2)) * U(1)/(1+U(1)+PAR(6)*U(1)*U(1)) F(1)=-PAR(1)*( PAR(4)*R - (PAR(2)-U(1)) ) F(2)=-PAR(1)*( PAR(4)*R - PAR(7)*(PAR(3)-U(2)) ) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1) = 3.0 PAR(2) = 145 PAR(3) = 500. PAR(4) = 210 PAR(5) = 3.4 PAR(6) = 0.023 PAR(7) = 0.2 U(1) = 6.27662E+01 U(2) = 8.88308E+01 PAR(10) = 0.05 PAR(15) = 1.0 PAR(16) = 5.0 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/wav/wav.auto0000640000175000017500000000167413570013207013645 0ustar sksk #============== # AUTO Demo wav #============== pgm = "wav" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions of the ODE"%pgm r1 = run(e=pgm,c=pgm) save(r1,"ode") print "\n%s : second run : stationary solutions of the reduced PDE"%pgm r2 = run(e=pgm,c=pgm,IPS=11) print "\n%s : third run : wave train solutions of fixed wave speed"%pgm r3 = run(r2("HB1"),IPS=12,ICP=[3,11],ILP=0,ISP=0,RL1=700,DS=0.1,DSMAX=1.0, UZR={3:[610.0,638.0], 11:500.0}, STOP=['UZ4']) save(r2+r3,pgm) print "\n%s : fourth run : fixed wave length waves on a ring"%pgm uz3 = load(r3("UZ3"),RL1=1000,DS=0.5,DSMAX=2.0,UZR={}) r4 = run(uz3,ICP=[3,10],NPR=50) save(r4,'rng') print "\n%s : fifth run : time evolution computation"%pgm r5 = run(uz3,IPS=14,ICP=[14],NMX=230,NPR=5) save(r5,'tim') #print "\n%s : sixth run : stationary wave continuation"%pgm #r6 = run(r2+r3,c=pgm+'6') #save(r2+r3+r6,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/wav/c.wav.20000640000175000017500000000055013570013207013247 0ustar skskNDIM= 2, IPS = 11, IRS = 0, ILP = 1 ICP = [3] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {3: 800.0} auto/07p/demos/mtn/0000750000175000017500000000000013570013207012146 5ustar skskauto/07p/demos/mtn/clean.auto0000640000175000017500000000016313570013207014123 0ustar sksk#============== # AUTO Demo mtn #============== print "\n***Clean the directory***" dl("1") dl("4") dl("6") cl() auto/07p/demos/mtn/c.mtn.20000640000175000017500000000061613570013207013254 0ustar skskNDIM= 2, IPS = 9, IRS = 1, ILP = 0 ICP = [1, 2, 35, 36] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {35: 0.0, 36: 0.0} IEQUIB = 2 IPSI = [15,16] auto/07p/demos/mtn/c.mtn.60000640000175000017500000000057713570013207013266 0ustar skskNDIM= 2, IPS = 9, IRS = 4, ILP = 1 ICP = [3, 1, 2] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 40, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.1, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {3: 0.01} IEQUIB = 2 IFIXED = [15] auto/07p/demos/mtn/c.mtn0000640000175000017500000000063213570013207013112 0ustar skskdat = 'mtn' NDIM= 2, IPS = 9, IRS = 0, ILP = 0 ICP = [1, 2, 35, 36] NTST= 100, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {35: 0.0, 36: 0.0} IEQUIB = 2 IPSI = [15,16] auto/07p/demos/mtn/c.mtn.10000640000175000017500000000063213570013207013251 0ustar skskdat = 'mtn' NDIM= 2, IPS = 9, IRS = 0, ILP = 0 ICP = [1, 2, 35, 36] NTST= 100, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 30, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {35: 0.0, 36: 0.0} IEQUIB = 2 IPSI = [15,16] auto/07p/demos/mtn/mtn.dat0000640000175000017500000002023313570013207013437 0ustar sksk0.0000000 5.6856 0.56351 0.0012333 5.6905 0.56372 0.0016157 5.6915 0.56378 0.0029605 5.6939 0.56402 0.0035326 5.6945 0.56413 0.0050423 5.6954 0.56441 0.0058425 5.6956 0.56456 0.007596 5.6957 0.5649 0.0086822 5.6957 0.56511 0.010806 5.6955 0.56553 0.012279 5.6953 0.56582 0.015001 5.6949 0.56637 0.017049 5.6945 0.5668 0.020829 5.6939 0.5676 0.023844 5.6934 0.56825 0.029722 5.6924 0.56957 0.034639 5.6915 0.57071 0.043004 5.6898 0.57277 0.051435 5.6881 0.575 0.059549 5.6863 0.57729 0.067065 5.6845 0.57956 0.074235 5.6827 0.58188 0.081293 5.6808 0.58432 0.088335 5.6787 0.58692 0.095385 5.6765 0.58972 0.10244 5.6741 0.59273 0.10951 5.6716 0.59597 0.11658 5.6688 0.59949 0.12365 5.6658 0.6033 0.13073 5.6625 0.60745 0.1378 5.659 0.61198 0.14488 5.6551 0.61695 0.15194 5.6508 0.62241 0.15899 5.646 0.62844 0.16602 5.6408 0.63512 0.173 5.6349 0.64253 0.17994 5.6284 0.65078 0.1868 5.6212 0.65999 0.19355 5.6131 0.67028 0.20018 5.604 0.68178 0.20664 5.5938 0.69464 0.21291 5.5825 0.70899 0.21895 5.5699 0.725 0.22476 5.5558 0.74283 0.23031 5.5401 0.76265 0.23559 5.5227 0.78464 0.24059 5.5033 0.80899 0.24532 5.4819 0.83592 0.24979 5.4581 0.86562 0.254 5.4319 0.89834 0.25797 5.403 0.9343 0.2617 5.371 0.97375 0.26522 5.3358 1.017 0.26853 5.2971 1.0642 0.27165 5.2545 1.1157 0.2746 5.2076 1.1717 0.27739 5.156 1.2326 0.28004 5.0993 1.2987 0.28255 5.037 1.3701 0.28495 4.9684 1.4472 0.28724 4.8929 1.5303 0.28943 4.8096 1.6197 0.29154 4.7175 1.7158 0.29358 4.6155 1.8188 0.29555 4.5018 1.9293 0.29748 4.3744 2.0478 0.29937 4.2304 2.175 0.30125 4.0653 2.312 0.30314 3.8719 2.4605 0.3051 3.6362 2.6246 0.3073 3.3182 2.8172 0.30927 2.9705 2.9914 0.31114 2.5699 3.1471 0.31317 2.0329 3.2834 0.31466 1.5577 3.3349 0.31582 1.1492 3.3203 0.31676 0.80728 3.2499 0.31745 0.57678 3.1518 0.31811 0.39155 3.0131 0.31869 0.27078 2.8575 0.31921 0.19575 2.6956 0.31959 0.15876 2.5705 0.32005 0.12902 2.4153 0.32045 0.11326 2.282 0.32092 0.10274 2.1253 0.32138 0.098761 1.9816 0.32193 0.099477 1.8183 0.3225 0.1049 1.6625 0.32317 0.11638 1.4943 0.32386 0.13344 1.3406 0.32462 0.15925 1.1907 0.32539 0.19484 1.0578 0.32626 0.24901 0.93198 0.32721 0.33263 0.81891 0.32821 0.46051 0.72461 0.32907 0.61613 0.6617 0.32992 0.82643 0.61357 0.33069 1.0774 0.58024 0.33145 1.3958 0.55487 0.33219 1.7693 0.53656 0.33297 2.2231 0.52248 0.33378 2.7471 0.51193 0.33481 3.4377 0.5029 0.33556 3.9034 0.49861 0.33654 4.4343 0.49481 0.33736 4.7927 0.49273 0.33802 5.0212 0.49157 0.33871 5.2086 0.49069 0.33932 5.3381 0.49013 0.33997 5.4432 0.4897 0.34057 5.5187 0.4894 0.3412 5.5793 0.48918 0.34182 5.6236 0.48902 0.34247 5.6587 0.4889 0.34312 5.6846 0.48882 0.34381 5.7046 0.48877 0.34451 5.7193 0.48874 0.34526 5.7304 0.48872 0.34603 5.7384 0.48871 0.34686 5.7442 0.48872 0.34773 5.7482 0.48873 0.34867 5.7511 0.48875 0.34967 5.7529 0.48878 0.35076 5.7542 0.48881 0.35193 5.7549 0.48884 0.35322 5.7554 0.48888 0.35464 5.7556 0.48893 0.35623 5.7557 0.48898 0.358 5.7558 0.48904 0.36003 5.7557 0.4891 0.36236 5.7557 0.48917 0.36512 5.7556 0.48926 0.36843 5.7556 0.48936 0.37255 5.7555 0.48949 0.3778 5.7553 0.48965 0.38471 5.7552 0.48986 0.39302 5.755 0.4901 0.40121 5.7548 0.49033 0.40869 5.7546 0.49054 0.41574 5.7545 0.49074 0.42263 5.7543 0.49092 0.42949 5.7542 0.4911 0.43635 5.754 0.49128 0.44321 5.7539 0.49146 0.45007 5.7538 0.49163 0.45693 5.7536 0.4918 0.4638 5.7535 0.49196 0.47066 5.7534 0.49213 0.47753 5.7533 0.49229 0.48439 5.7531 0.49244 0.49126 5.753 0.4926 0.49812 5.7529 0.49275 0.50499 5.7528 0.4929 0.51185 5.7526 0.49305 0.51872 5.7525 0.49319 0.52559 5.7524 0.49334 0.53245 5.7523 0.49348 0.53932 5.7522 0.49362 0.54619 5.7521 0.49375 0.55306 5.752 0.49389 0.55992 5.7519 0.49402 0.56679 5.7518 0.49415 0.57366 5.7517 0.49427 0.58053 5.7516 0.4944 0.5874 5.7515 0.49452 0.59427 5.7514 0.49465 0.60114 5.7513 0.49477 0.60801 5.7512 0.49488 0.61488 5.7511 0.495 0.62175 5.751 0.49512 0.62862 5.7509 0.49523 0.63549 5.7508 0.49534 0.64236 5.7508 0.49545 0.64923 5.7507 0.49556 0.6561 5.7506 0.49567 0.66297 5.7505 0.49577 0.66984 5.7504 0.49588 0.67671 5.7503 0.49598 0.68359 5.7503 0.49608 0.69046 5.7502 0.49618 0.69733 5.7501 0.49628 0.7042 5.75 0.49638 0.71108 5.7499 0.49647 0.71795 5.7499 0.49657 0.72482 5.7498 0.49666 0.7317 5.7497 0.49675 0.73857 5.7497 0.49685 0.74544 5.7496 0.49694 0.75232 5.7495 0.49702 0.75919 5.7494 0.49711 0.76606 5.7494 0.4972 0.77294 5.7493 0.49728 0.77981 5.7492 0.49737 0.78669 5.7492 0.49745 0.79356 5.7491 0.49753 0.80044 5.749 0.49762 0.80731 5.749 0.4977 0.81419 5.7489 0.49778 0.82106 5.7489 0.49785 0.82794 5.7488 0.49793 0.83481 5.7487 0.49801 0.84169 5.7487 0.49808 0.84856 5.7486 0.49816 0.85544 5.7486 0.49823 0.86232 5.7485 0.49831 0.86919 5.7484 0.49838 0.87607 5.7484 0.49845 0.88295 5.7483 0.49852 0.88982 5.7483 0.49859 0.8967 5.7482 0.49866 0.90358 5.7482 0.49873 0.91045 5.7481 0.49879 0.91733 5.7481 0.49886 0.92421 5.748 0.49893 0.93108 5.748 0.49899 0.93796 5.7479 0.49906 0.94484 5.7479 0.49912 0.95172 5.7478 0.49918 0.9586 5.7478 0.49925 0.96547 5.7477 0.49931 0.97235 5.7477 0.49937 0.97923 5.7476 0.49943 0.98611 5.7476 0.49949 0.99299 5.7475 0.49955 1.0 5.7475 0.49961 auto/07p/demos/mtn/mtn.f900000640000175000017500000000524513570013207013273 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! mtn : Homoclinic bifurcations in M. Scheffer's preditor-prey model !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION DEM,PSIZ,PSIF,PSIZU1,PSIFU2 DEM=U(2)**2+PAR(4)**2 PSIZ=0.4D0*U(1)/(0.6D0+U(1)) PSIF=PAR(2)*U(2)**2/DEM PSIZU1=0.4D0*((1/(0.6D0+U(1)))- (U(1)/((0.6D0+U(1))**2))) PSIFU2=2*PAR(2)*( (U(2)/DEM) -(U(2)**3/(DEM**2) )) F(1)=0.5D0*U(1)*(1.0D0-U(1)/PAR(1))-U(2)*PSIZ+PAR(3)*PAR(1) F(2)=0.6D0*PSIZ*U(2)-0.15D0*U(2)-PSIF IF(IJAC.EQ.0)RETURN DFDU(1,1)=0.5D0-U(1)/PAR(1) -U(2)*PSIZU1 DFDU(1,2)=-PSIZ DFDU(2,1)=0.6D0*PSIZU1*U(2) DFDU(2,2)=0.6D0*PSIZ-0.15D0-PSIFU2 IF(IJAC.EQ.1)RETURN DFDP(1,1)=0.5D0*(U(1)/PAR(1))**2+PAR(3) DFDP(2,1)=0.d0 DFDP(1,2)=0.0d0 DFDP(2,2)=-U(2)**2/DEM DFDP(1,3)=PAR(1) DFDP(2,3)=0.d0 DFDP(1,4)=0.0d0 DFDP(2,4)=2*PAR(4)*PAR(2)*U(2)**2/DEM**2 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------------- ! Sets parameter values for homoclinic bifurcation analysis (IPS=9). IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T !---------------------------------------------------------------------- ! Problem parameters (only PAR(1-9) are available to the user) : ! PAR(11) is the trunction interval or `PERIOD' PAR(1) = 6.0D0 ! K PAR(2) = 0.06729762D0 ! GF PAR(3) = 0.01D0 ! D PAR(4) = 0.5D0 ! HZ PAR(11)= 1046.178D0 ! truncated time interval !---------------------------------------------------------------------- ! Since IEQUIB>0 put the equilibrium in PAR(11+i), i=1,...,NDIM : PAR(12) = 5.738626D0 PAR(13) = 0.5108401D0 !---------------------------------------------------------------------- END SUBROUTINE STPNT SUBROUTINE PVLS END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/mtn/c.mtn.30000640000175000017500000000063013570013207013251 0ustar skskNDIM= 2, IPS = 9, IRS = 4, ILP = 0 ICP = [1, 2, 29, 30] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.02, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0} NSTAB = 1, IEQUIB = 1 IPSI = [9,10] auto/07p/demos/mtn/c.mtn.40000640000175000017500000000061513570013207013255 0ustar skskNDIM= 2, IPS = 9, IRS = 15, ILP = 0 ICP = [1, 2, 29, 30] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 40, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.02, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0} IEQUIB = 1 IPSI = [9,10] auto/07p/demos/mtn/c.mtn.50000640000175000017500000000063013570013207013253 0ustar skskNDIM= 2, IPS = 9, IRS = 6, ILP = 0 ICP = [1, 2, 29, 30] NTST= 50, NCOL= 4, IAD = 1, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 40, NPR= 10, MXBF= 0, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.02, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 13, THL = {}, THU = {} UZR = {29: 0.0, 30: 0.0} NSTAB = 1, IEQUIB = 1 IPSI = [9,10] auto/07p/demos/mtn/mtn.auto0000640000175000017500000000121513570013207013636 0ustar sksk#========= # Demo mtn #========= pgm = 'mtn' print pgm, ": first run : continue saddle-node homoclinic orbit" r1=run('mtn',c='mtn.1',sv='1') print pgm, ": second run : continue in opposite direction" r1=r1+run(r1(1),c='mtn.2',ap='1') print pgm, ": third run : switch to saddle homoclinic orbit" r1=r1+run(r1('UZ1'),c='mtn.3',ap='1') print pgm, ": fourth run : continue in reverse direction" r4=run(r1,c='mtn.4',sv='4') print pgm, ": fifth run : other saddle homoclinic orbit branch" r1=r1+run(r1('UZ3'),c='mtn.5',ap='1') print pgm, ": sixth run : 3-parameter continuation of non-central saddle-node homoclinic" r6=run(r1('UZ1'),c='mtn.6',sv='6') auto/07p/demos/tor/0000750000175000017500000000000013570013207012154 5ustar skskauto/07p/demos/tor/c.tor.10000640000175000017500000000056013570013207013265 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 125, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.001, DSMIN=0.00001, DSMAX= 0.01, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZSTOP = {1: [-0.9, -0.4]} auto/07p/demos/tor/clean.auto0000640000175000017500000000017013570013207014127 0ustar sksk #============== # AUTO Demo tor #============== print "\n***Clean the directory***" dl('1') dl('tor') dl('tor3') cl() auto/07p/demos/tor/tor.f900000640000175000017500000000452713570013207013311 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! tor : Torus Bifurcation in an Electronic Oscillator !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION rn,be,ga,r,a3,b3,x,y,z rn=PAR(1) be=PAR(2) ga=PAR(3) r =PAR(4) a3=PAR(5) b3=PAR(6) x=U(1) y=U(2) z=U(3) F(1)= ( -(be+rn)*x + be*y - a3*x**3 + b3*(y-x)**3 )/r F(2)= be*x - (be+ga)*y - z - b3*(y-x)**3 F(3)= y IF(IJAC.EQ.0)RETURN DFDU(1,1)=( -(be+rn) -3*a3*x**2 - 3*b3*(y-x)**2 )/r DFDU(1,2)=( be + 3*b3*(y-x)**2 )/r DFDU(1,3)=0 DFDU(2,1)=be + 3*b3*(y-x)**2 DFDU(2,2)=-(be+ga) - 3*b3*(y-x)**2 DFDU(2,3)=-1 DFDU(3,1)=0 DFDU(3,2)=1 DFDU(3,3)=0 IF(IJAC.EQ.1)RETURN ! *Parameter derivatives DFDP(1,1)=-x/r DFDP(2,1)=0 DFDP(3,1)=0 DFDP(1,2)=( -x + y )/r DFDP(2,2)=x-y DFDP(3,2)=0 DFDP(1,3)=0 DFDP(2,3)=-y DFDP(3,3)=0 DFDP(1,4)=-F(1)/r DFDP(2,4)=0 DFDP(3,4)=0 DFDP(1,5)=x**3/r DFDP(2,5)=0 DFDP(3,5)=0 DFDP(1,6)=(y-x)**3 / r DFDP(2,6)=-(y-x)**3 DFDP(3,6)=0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=-0.9 PAR(2)=0.5 PAR(3)=-0.6 PAR(4)=0.6 PAR(5)=0.328578 PAR(6)=0.933578 U(1)=0. U(2)=0. U(3)=0. END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/tor/c.tor.30000640000175000017500000000054313570013207013270 0ustar skskNDIM= 3, IPS = 2, IRS = 8, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 0, NINT= 0 NMX= 90, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.001, DSMIN=0.00001, DSMAX= 0.01, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/tor/tor.auto0000640000175000017500000000147613570013207013663 0ustar sksk #============== # AUTO Demo tor #============== pgm = "tor" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solution"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions"%pgm r2 = run(r1("HB1"),IPS=2,ICP=[1,11]) print "\n%s : third run : a bifurcating branch of periodic solutions"%pgm r3 = run(r2("BP1"),ISW=-1,NMX=90) save(r1+r2+r3,'1') print "\n%s : fourth run : a branch of torus bifurcations (start)"%pgm r4 = run(r3("TR1"),ICP=[1,2,11],ISW=2,ILP=0,ISP=0,NPR=25,NMX=100, DS=0.05,DSMAX=0.1) print "\n%s : fifth run : a branch of torus bifurcations"%pgm r5 = run(r4,ITNW=7) save(r5,'tor') print "\n%s : sixth run : a 3-parameter branch fixing the angle"%pgm r6 = run(r4,ITNW=7,ICP=[1,2,3,11],UZSTOP={11:3000}) save(r6,'tor3') print "\n***Clean the directory***" cl() auto/07p/demos/tor/c.tor.50000640000175000017500000000054613570013207013275 0ustar skskNDIM= 3, IPS = 2, IRS = 23, ILP = 0 ICP = [1, 2, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN=0.00001, DSMAX= 0.1, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/tor/c.tor.40000640000175000017500000000054613570013207013274 0ustar skskNDIM= 3, IPS = 2, IRS = 15, ILP = 0 ICP = [1, 2, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN=0.00001, DSMAX= 0.1, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/tor/autorc0000640000175000017500000000334013570013207013375 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" #stability = 0 #use_labels = 1 #use_symbols = 0 top_title = 'Torus bifurcation' #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 solution_indepvarname = "time" solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = ["$\nu$", "L2-norm", "max $x$", "max $y$", "max $z$", "beta", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 #type = "bifurcation" # or "solution" bifurcation_x = [0] bifurcation_y = [5] #solution_x = ["t"] #solution_y = [0] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/tor/c.tor.20000640000175000017500000000054313570013207013267 0ustar skskNDIM= 3, IPS = 2, IRS = 2, ILP = 1 ICP = [1, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 125, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.001, DSMIN=0.00001, DSMAX= 0.01, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZR = {} auto/07p/demos/tor/c.tor.60000640000175000017500000000057413570013207013277 0ustar skskNDIM= 3, IPS = 2, IRS = 24, ILP = 0 ICP = [1, 2, 3, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN=0.00001, DSMAX= 0.1, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZSTOP = {11:3000} UZR = {} auto/07p/demos/tor/c.tor0000640000175000017500000000056013570013207013126 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 125, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.001, DSMIN=0.00001, DSMAX= 0.01, IADS= 1 NPAR= 6, THL = {11: 0.0}, THU = {} UZSTOP = {1: [-0.9, -0.4]} auto/07p/demos/ph1/0000750000175000017500000000000013570013207012040 5ustar skskauto/07p/demos/ph1/c.ph1.ss0000640000175000017500000000053713570013207013326 0ustar skskNDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [4] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.1, DSMIN= 0.01, DSMAX= 3.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZSTOP = {4: 6.0} auto/07p/demos/ph1/clean.auto0000640000175000017500000000015613570013207014017 0ustar sksk#============== # AUTO Demo ph1 #============== print "\n***Clean the directory***" dl("sa") dl("ph1") cl() auto/07p/demos/ph1/ph1.auto0000640000175000017500000000066713570013207013434 0ustar sksk #========== # Demo ph1 #========== print "\n***Compute stationary solutions***" sa = run(e='ph1',c='ph1.ss') print "\n***Compute periodic solutions***" for hb in sa('HB'): sa = sa + run(hb,c='ph1.ps') print "\n***Relabel and save the sa output files***" sa = rl(sa) save(sa, 'sa') print "\n***Phase shift of Solution 6 in s.sa***" ph1 = run(sa(6),c='ph1') ph1 = rl(ph1) save(ph1, 'ph1') print "\n***Clean the directory***" cl() auto/07p/demos/ph1/ph1.f900000640000175000017500000000514013570013207013051 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! ph1 : A one-cell, two-substrate enzyme model (also plp) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,ICP(*),IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*),DFDP(NDIM,*) DOUBLE PRECISION S,A,S0,A0,Al,RH,RK,T,D,R S=U(1) A=U(2) S0=PAR(1) A0=PAR(2) AL=PAR(3) RH=PAR(4) RK=PAR(5) T =1d0 IF(ICP(1)==11)THEN IF(ICP(2)==9)THEN ! only use when doing the phase shift T =PAR(11) ENDIF ENDIF D=1+S+RK*S**2 R=S*A/D F(1)=T*( (S0-S) - RH*R) F(2)=T*(AL*(A0-A) - RH*R) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*),U0(NDIM),U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) - U1(1) FB(2)=U0(2) - U1(2) END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM,*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP PAR(9)=GETP('BV0',1,U) END SUBROUTINE PVLS !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=110. PAR(2)=500. PAR(3)=0.2 PAR(4)=2.021628 PAR(5)=0.1 U(1)=4.555974E+01 U(2)=1.777987E+02 END SUBROUTINE STPNT SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/ph1/c.ph1.ps0000640000175000017500000000055213570013207013320 0ustar skskNDIM= 2, IPS = 2, IRS = 2, ILP = 1 ICP = [4, 11] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.1, DSMIN=0.0001, DSMAX= 3.0, IADS= 1 NPAR = 11, THL = {11: 0.0}, THU = {} UZSTOP = {4: 4.0} auto/07p/demos/ph1/plaut04.rc0000640000175000017500000000700013570013207013655 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/ph1/c.ph10000640000175000017500000000054313570013207012677 0ustar skskNDIM= 2, IPS = 4, IRS = 6, ILP = 0 ICP = [11, 9] NTST= 25, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 200, NPR= 15, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.1, DSMIN= 1e-06, DSMAX= 3.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZSTOP = {9: 30.0} auto/07p/demos/hen/0000750000175000017500000000000013570013207012122 5ustar skskauto/07p/demos/hen/clean.auto0000640000175000017500000000021313570013207014073 0ustar sksk #============== # AUTO Demo hen #============== print "\n***Clean the directory***" delete('alpha') delete('beta') delete('hen') clean() auto/07p/demos/hen/hen.f900000640000175000017500000000302413570013207013214 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Henon : The Henon map !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION x, y, alpha, beta x=U(1) y=U(2) alpha=PAR(1) beta=PAR(2) F(1)=y F(2)=alpha-beta*x-y**2 IF(IJAC.EQ.0)RETURN DFDU(1,1)=0 DFDU(1,2)=1 DFDU(2,1)=-beta DFDU(2,2)=-2*y IF(IJAC.EQ.1)RETURN DFDP(1,1)=0 DFDP(1,2)=0 DFDP(2,1)=1 DFDP(2,2)=-x END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=2 ! alpha PAR(2)=0 ! beta U(1)=1 U(2)=1 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/hen/autorc0000640000175000017500000001416413570013207013351 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. #solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"x": "$x$", "y": "$y$", "alpha": "$\alpha$", "beta": "$\beta$", "L2-NORM": "L2-norm"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. bifurcation_x = ["alpha"] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ["beta"] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/hen/hen.auto0000640000175000017500000000162513570013207013573 0ustar sksk #============== # AUTO Demo hen #============== print "\nDemo hen is started" print "\nhen : first run : fixed point solution branch for beta (alpha=1)" r1 = run('hen') save('beta') print "\nhen : second run : a 2-parameter curve of Naimark-Sacker bifurcations" run(r1("TR1"),ICP=['alpha','beta'],ISW=2,ILP=0,STOP=['R11','R21']) save('hen') run(DS='-') append('hen') print "\nhen : third run : a 2-parameter curve of Period-Doubling bifurcations" run(r1("PD1"),ICP=['alpha','beta'],ISW=2,ILP=0) append('hen') run(DS='-') append('hen') print "\nhen : fourth run : fixed point solution branch for alpha (beta=1)" r4 = run(c='hen',ICP=['alpha'],DS='-',STOP=['LP1']) save(r4,'alpha') print "\nhen : fifth run : a 2-parameter curve of fold bifurcations" run(r4("LP1"),ICP=['alpha','beta'],ISW=2,ILP=0) append('hen') run(DS='-') append('hen') merge('hen') relabel('hen') print "\n***Clean the directory***" clean() auto/07p/demos/hen/c.hen0000640000175000017500000000071413570013207013043 0ustar skskunames = {1:'x', 2:'y'} parnames = {1:'alpha', 2:'beta'} NDIM= 2, IPS = -1, IRS = 0, ILP = 1 ICP = ['beta'] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.02, DSMIN= 0.0005, DSMAX= 0.1, IADS= 1 NPAR = 3, THL = {}, THU = {} STOP = ['TR1'] UZSTOP = {'alpha':[-2.0,4.0],'beta':[-3.0,3.0]} auto/07p/demos/pvl/0000750000175000017500000000000013570013207012151 5ustar skskauto/07p/demos/pvl/clean.auto0000640000175000017500000000014513570013207014126 0ustar sksk #============== # AUTO Demo pvl #============== print "\n***Clean the directory***" dl('pvl') cl() auto/07p/demos/pvl/pvl.auto0000640000175000017500000000033213570013207013643 0ustar sksk #============== # AUTO Demo pvl #============== pgm = "pvl" print "\nDemo %s is started"%pgm print "\n%s : compute a solution branch"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/pvl/c.pvl.10000640000175000017500000000057013570013207013260 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2, 3, 4, 5] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {1: 2.0, 2: 3.0, 4: 5.0} auto/07p/demos/pvl/c.pvl0000640000175000017500000000057013570013207013121 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2, 3, 4, 5] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {1: 2.0, 2: 3.0, 4: 5.0} auto/07p/demos/pvl/pvl.f900000640000175000017500000001152413570013207013276 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! pvl : Setting functional parameter values (for Bratu's equation) !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION E E=EXP(U(1)) F(1)=U(2) F(2)=-PAR(1)*E END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0 U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1) FB(2)=U1(1) END SUBROUTINE BCND DOUBLE PRECISION FUNCTION GETU2(U,NDX,NTST,NCOL) ! ------ --------- -------- ----- INTEGER, INTENT(IN) :: NDX,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: U(NDX,0:NCOL*NTST) GETU2 = U(2,0) END FUNCTION GETU2 SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP,GETU2 INTEGER NDX,NCOL,NTST !---------------------------------------------------------------------- ! NOTE : ! Parameters set in this subroutine should be considered as ``solution ! measures'' and be used for output purposes only. ! ! They should never be used as `true'' continuation parameters. ! ! They may, however, be added as ``over-specified parameters'' in the ! parameter list associated with the AUTO-Constant NICP, in order to ! print their values on the screen and in the ``p.xxx file. ! ! They may also appear in the list associated with AUTO-constant NUZR. ! !---------------------------------------------------------------------- ! For algebraic problems the argument U is, as usual, the state vector. ! For differential equations the argument U represents the approximate ! solution on the entire interval [0,1]. In this case its values can ! be accessed indirectly by calls to GETP, as illustrated below, or ! by obtaining NDIM, NCOL, NTST via GETP and then dimensioning U as ! U(NDIM,0:NCOL*NTST) in a seperate subroutine that is called by PVLS. !---------------------------------------------------------------------- ! Set PAR(2) equal to the L2-norm of U(1) PAR(2)=GETP('NRM',1,U) ! Set PAR(3) equal to the minimum of U(2) PAR(3)=GETP('MIN',2,U) ! Set PAR(4) equal to the value of U(2) at the left boundary. PAR(4)=GETP('BV0',2,U) ! Set PAR(5) equal to the value of U(2) at the left boundary using ! another method NDX=NINT(GETP('NDX',0,U)) NTST=NINT(GETP('NTST',0,U)) NCOL=NINT(GETP('NCOL',0,U)) PAR(5)=GETU2(U,NDX,NTST,NCOL) !---------------------------------------------------------------------- ! The first argument of GETP may be one of the following: ! 'NRM' (L2-norm), 'MAX' (maximum), ! 'INT' (integral), 'BV0 (left boundary value), ! 'MIN' (minimum), 'BV1' (right boundary value). ! 'MNT' (t value for minimum) ! 'MXT' (t value for maximum) ! 'NDIM', 'NDX' (effective (active) number of dimensions) ! 'NTST' (NTST from constant file) ! 'NCOL' (NCOL from constant file) ! 'NBC' (active NBC) ! 'NINT' (active NINT) ! 'DTM' (delta t for all t values, I=1...NTST) ! 'WINT' (integration weights used for interpolation, I=0...NCOL) ! ! Also available are ! 'STP' (Pseudo-arclength step size used). ! 'FLD' (`Fold function', which vanishes at folds). ! 'BIF' (`Bifurcation function', which vanishes at singular points). ! 'HBF' (`Hopf function'; which vanishes at Hopf points). ! 'SPB' ( Function which vanishes at secondary periodic bifurcations). ! 'EIG' ( Eigenvalues/multipliers, I=1...2*NDIM, alternates real/imag parts). ! 'STA' ( Number of stable eigenvalues/multipliers). !---------------------------------------------------------------------- END SUBROUTINE PVLS SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/pvl/c.pvd0000640000175000017500000000055413570013207013113 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2, 3, 4] NTST= 5, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 50, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 6, THL = {}, THU = {} UZR = {1: [1.0, 3.0]} auto/07p/demos/spb/0000750000175000017500000000000013570013207012134 5ustar skskauto/07p/demos/spb/c.spb.30000640000175000017500000000054013570013207013225 0ustar skskNDIM= 2, IPS = 4, IRS = 19, ILP = 1 ICP = [1] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 2000, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 9, NWTN= 3, JAC= 0 EPSL= 1e-05, EPSU = 1e-05, EPSS = 0.001 DS = -0.1, DSMIN= 0.1, DSMAX=1000.0, IADS= 1 NPAR= 3, THL = {}, THU = {} UZSTOP = {1: -2.2} auto/07p/demos/spb/clean.auto0000640000175000017500000000016313570013207014111 0ustar sksk #============== # AUTO Demo spb #============== print "\n***Clean the directory***" dl('0') dl('1') dl('2') cl() auto/07p/demos/spb/c.spb.10000640000175000017500000000060613570013207013226 0ustar skskNDIM= 2, IPS = 4, IRS = 2, ILP = 0 ICP = [2] NTST= 100, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = -0.1, DSMIN= 0.001, DSMAX=1000.0, IADS= 1 NPAR= 3, THL = {}, THU = {} UZR = {2: [0.1, 0.01, 0.001, 0.0001]} UZSTOP={2: 1e-05} auto/07p/demos/spb/spb.auto0000640000175000017500000000067413570013207013622 0ustar sksk #============== # AUTO Demo spb #============== print "\n***Homotopy from lambda=0 to lambda=1***" r0=run(e='spb',c='spb.0') save(r0,'0') print "\n***Letting epsilon become small***" r1=run(r0,c='spb.1') r1=rl(r1) save(r1,'1') print "\n***Continuation in gamma: First 15 steps***" r2=run(r1('UZ2'),c='spb.2') print "\n***Continuation in gamma: Restart***" r3=run(r2,c='spb.3') save(rl(r2+r3),'2') print "\n***Clean the directory***" cl() auto/07p/demos/spb/c.spb.00000750000175000017500000000053713570013207013232 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [3] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 100, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = 0.1, DSMIN= 0.001, DSMAX=1000.0, IADS= 1 NPAR= 3, THL = {}, THU = {} UZSTOP = {3: 1.0} auto/07p/demos/spb/plaut04.rc0000750000175000017500000000700013570013207013753 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/spb/spb.f900000640000175000017500000000345313570013207013246 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! spb : A singularly perturbed BVP !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION U1,U2,EPS,RL U1=U(1) U2=U(2) EPS=PAR(2) RL =PAR(3) F(1)=U2 F(2)=RL * ( U1*(U1**2-1)*U2 + U1 ) / EPS END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,X) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: X DOUBLE PRECISION GAMMA,EPS,RL,S GAMMA=1.2 EPS=0.1 RL=0. PAR(1)=GAMMA PAR(2)=EPS PAR(3)=RL S=GAMMA-1.5 U(1)=1.5 + S*X U(2)=S END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB(1)=U0(1)-1.5 FB(2)=U1(1)-PAR(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/spb/c.spb.20000640000175000017500000000054013570013207013224 0ustar skskNDIM= 2, IPS = 4, IRS = 2, ILP = 1 ICP = [1] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 15, NPR= 1, MXBF= 10, IID = 2, ITMX= 8, ITNW= 9, NWTN= 3, JAC= 0 EPSL= 1e-05, EPSU = 1e-05, EPSS =0.0001 DS = -0.1, DSMIN= 0.1, DSMAX= 0.3, IADS= 1 NPAR= 3, THL = {}, THU = {} UZSTOP = {1: -2.2} auto/07p/demos/pp3/0000750000175000017500000000000013570013207012052 5ustar skskauto/07p/demos/pp3/pp3.auto0000640000175000017500000000147113570013207013452 0ustar sksk #============== # AUTO Demo pp3 #============== print "\n***Compute stationary solution families***" r1 = run(e='pp3',c='pp3') pp3 = r1 print "\n***Compute periodic solution families***" for solution in pp3("HB"): print "Computing a periodic solution family from label", solution["LAB"] r=run(solution,IPS=2,ICP=[1,11], UZR ={1:[0.15,0.20,0.25,0.35,0.40]}, UZSTOP={1:[1,0,0.30],9:1.20}) pp3 = pp3 + r print "\n***Relabel the output and save***" pp3 = rl(pp3) save(pp3,'pp3') # get the second Hopf bifurcation from the first run hb2 = r1('HB2') print "\n***Compute a locus of Hopf bifurcations from label ", hb2["LAB"], "***" hb=run(hb2,ICP=[1,4],ISW=2,UZR={},UZSTOP={4:4}) print "\n***Relabel the output and save***" hb=rl(hb) save(hb,'hb') print "\n***Clean the directory***" cl() auto/07p/demos/pp3/clean.auto0000640000175000017500000000015613570013207014031 0ustar sksk #============== # AUTO Demo pp3 #============== print "\n***Clean the directory***" dl('pp3') dl('hb') cl() auto/07p/demos/pp3/pp3.f900000640000175000017500000000350613570013207013101 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! pp3 : A continuous dynamical system with period doubling !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) F(1)= U(1)*(1-U(1)) - PAR(4)*U(1)*U(2) F(2)=-PAR(2)*U(2) + PAR(4)*U(1)*U(2) - PAR(5)*U(2)*U(3) & - PAR(1)*(1-EXP(-PAR(6)*U(2))) F(3)=-PAR(3)*U(3) + PAR(5)*U(2)*U(3) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T U = (/ 1.0, 0.0, 0.0 /) PAR(:6) = (/ 0.0, 0.25, 0.5, 4.0, 3.0, 5.0 /) END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION GETP DOUBLE PRECISION r1, r2, r3 ! Set PAR(9) equal to the L2-norm of U r1=GETP('NRM',1,U) r2=GETP('NRM',2,U) r3=GETP('NRM',3,U) PAR(9)=SQRT(r1**2 + r2**2 + r3**2) END SUBROUTINE PVLS SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- auto/07p/demos/pp3/plaut04.rc0000640000175000017500000000704213570013207013675 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method Solution = -2 Coloring Method Bifurcation = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/pp3/c.pp30000640000175000017500000000056413570013207012726 0ustar skskNDIM= 3, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 200, MXBF= 2, IID = 2, ITMX= 9, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.01, DSMIN=0.0001, DSMAX= 0.02, IADS= 1 NPAR = 9, THL = {11: 0.0}, THU = {} UZSTOP = {1: [1.0, 0.0], 9: 1.2} auto/07p/demos/fsh/0000750000175000017500000000000013570013207012130 5ustar skskauto/07p/demos/fsh/fsh.auto0000640000175000017500000000065413570013207013610 0ustar sksk #============== # AUTO Demo fsh #============== pgm = "fsh" print "\nDemo %s is started"%pgm print "\n%s : first run : continuation in the period T"%pgm r1 = run(e=pgm,c=pgm) save(r1, '0') print "\n%s : second run : continuation in c and T"%pgm r2 = run(r1("UZ4"),ICP = [2, 11, 12, 13, 14],NINT=1, DS='-',UZR = {2: [1.0,2.0,3.0,5.0,10.0]}, UZSTOP={2: 0.0}, A0=-0.1) save(r2, pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fsh/clean.auto0000640000175000017500000000015513570013207014106 0ustar sksk #============== # AUTO Demo fsh #============== print "\n***Clean the directory***" dl('0') dl('fsh') cl() auto/07p/demos/fsh/c.fsh0000640000175000017500000000065713570013207013065 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [11, 12, 13, 14] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT=-1, NBC= 5, NINT= 0 NMX= 200, NPR= 200, MXBF= 8, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.5, DSMIN= 0.01, DSMAX= 50.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {2: [1.0, 2.0, 3.0, 5.0, 10.0], 11: [10.0, 50.0, 100.0]} UZSTOP = {11: 200} auto/07p/demos/fsh/fsh.f900000640000175000017500000001051613570013207013234 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! fsh : Heteroclinic orbits : a saddle-node copnnection !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Parameter assignment: ! ! PAR(1) : (unused) ! PAR(2) : c (wave speed) ! PAR(4) : eps-1 1 (radius) ! PAR(11) : period ! PAR(12) : mu-1 (eigenvalue at 1) ! PAR(13) , PAR(14): v(1) , v(2) (eigenvector at 1) !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION PERIOD,DUMMY(1) INTEGER I CALL FFFF(2,U,ICP,PAR,IJAC,F,DUMMY) PERIOD=PAR(11) DO I=1,NDIM F(I)=PERIOD*F(I) ENDDO END SUBROUTINE FUNC SUBROUTINE FFFF(NDM,U,ICP,PAR,IJAC,F,DFDU) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM) DOUBLE PRECISION C C=PAR(2) F(1)= U(2) F(2)= C*U(2) - U(1) * (1-U(1)) IF(IJAC.EQ.0)RETURN DFDU(1,1)= 0 DFDU(1,2)= 1 DFDU(2,1)= -1 + 2*U(1) DFDU(2,2)= C END SUBROUTINE FFFF SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION PERIOD, C, EP1, D, RMU1, V11, V12 IF(T==0)THEN ! Set the starting period, wave speed, and radius PERIOD=0.01 C=11. EP1=0.001 D = SQRT(C**2+4) PAR(2)= C PAR(4)= EP1 PAR(11)= PERIOD PAR(12)= (C-D)/2 PAR(13) = 1./SQRT(1+PAR(12)**2) PAR(14)=PAR(12)/SQRT(1+PAR(12)**2) ENDIF C =PAR(2) EP1 =PAR(4) PERIOD=PAR(11) D=SQRT(C**2+4) RMU1= (C-D)/2 V11 = 1./SQRT(1+RMU1**2) V12 =RMU1/SQRT(1+RMU1**2) U(1)=1-EP1*V11 U(2)= -EP1*V12 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local INTEGER, PARAMETER :: NDM=2 DOUBLE PRECISION V1(NDM),G1(NDM),DGDU1(NDM,NDM) V1(1)=U1(1) + PAR(4)*PAR(13) V1(2)=U1(2) + PAR(4)*PAR(14) CALL FFFF(NDM,V1,ICP,PAR,1,G1,DGDU1) FB(1)= DGDU1(1,1)*PAR(13) + DGDU1(1,2)*PAR(14)- PAR(12)*PAR(13) FB(2)= DGDU1(2,1)*PAR(13) + DGDU1(2,2)*PAR(14)- PAR(12)*PAR(14) FB(3)= PAR(13)**2 + PAR(14)**2 -1 FB(4)= G1(1) FB(5)= G1(2) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local INTEGER, PARAMETER :: NDM=2 DOUBLE PRECISION F(NDM),F0(NDM),DFDU(NDM,NDM),DUMMY(1) CALL FFFF(NDM,U ,ICP,PAR,1,F ,DFDU) CALL FFFF(NDM,UOLD,ICP,PAR,0,F0,DUMMY) FI(1)= ( F(1) - F0(1) ) * ( DFDU(1,1)*F(1) + DFDU(1,2)*F(2) ) & + ( F(2) - F0(2) ) * ( DFDU(2,1)*F(1) + DFDU(2,2)*F(2) ) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/fsh/c.fsh.20000640000175000017500000000064313570013207013220 0ustar skskNDIM= 2, IPS = 4, IRS = 5, ILP = 0 ICP = [2, 11, 12, 13, 14] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT=-1, NBC= 5, NINT= 1 NMX= 200, NPR= 200, MXBF= 8, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = -0.5, DSMIN= 0.01, DSMAX= 50.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {2: [1.0, 2.0, 3.0, 5.0, 10.0]} UZSTOP = {2: 0.0}, A0 = -0.1 auto/07p/demos/fsh/c.fsh.10000640000175000017500000000065713570013207013224 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 0 ICP = [11, 12, 13, 14] NTST= 25, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT=-1, NBC= 5, NINT= 0 NMX= 200, NPR= 200, MXBF= 8, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.5, DSMIN= 0.01, DSMAX= 50.0, IADS= 1 NPAR = 14, THL = {}, THU = {} UZR = {2: [1.0, 2.0, 3.0, 5.0, 10.0], 11: [10.0, 50.0, 100.0]} UZSTOP = {11: 200} auto/07p/demos/bvp/0000750000175000017500000000000013570013207012137 5ustar skskauto/07p/demos/bvp/clean.auto0000640000175000017500000000014313570013207014112 0ustar sksk #============= # AUTO Demo bvp #============= print "\n***Clean the directory***" dl('bvp') cl() auto/07p/demos/bvp/bvp.f900000640000175000017500000000343213570013207013251 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! bvp : A nonlinear ODE eigenvalue problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION pi pi = 4.d0*ATAN(1.d0) F(1) = U(2) F(2) = -( PAR(1)*pi )**2 * U(1) + U(1)**2 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1:2) = 0.0d0 U = 0.0d0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) FB = (/ U0(1), U1(1) /) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) FI = (/ U(1)-PAR(2) /) END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/bvp/c.bvp.20000640000175000017500000000063113570013207013233 0ustar skskNDIM= 2, IPS = 4, IRS = 2, ILP = 1 ICP = [1, 2] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC= 2, NINT= 1 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.2, DSMIN= 0.001, DSMAX= 10.0, IADS= 1 NPAR = 2, THL = {}, THU = {} UZR = {2: [-3.0, -6.0, 3.0, 6.0]} UZSTOP={1: [0.0, 5.5], 2: [-9.0, 9.0]} auto/07p/demos/bvp/c.bvp0000640000175000017500000000055013570013207013073 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.2, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 2, THL = {}, THU = {} UZSTOP = {1: [0.0, 5.5]} auto/07p/demos/bvp/bvp.auto0000640000175000017500000000116413570013207013623 0ustar sksk #============= # AUTO Demo bvp #============= print "\n***Compute the zero solution branch***" bvp=run(e='bvp',c='bvp') save(bvp,'bvp') print "\n***Compute bifurcating branches***" for bp in bvp("BP"): solution = load(bp,ISW=-1,DSMAX=10,UZR={2:[-6.0,-3.0,3.0,6.0]}, UZSTOP={1:[0.0,5.5], 2:[-9.0,9.0]}) print "\n***Branch " , solution["LAB"] , "***" bvp = bvp + run(solution) bvp = bvp + run(solution,DS='-') print "\n***Relabel and save the output***" bvp=rl(bvp) save(bvp,'bvp') print "\n***Clean the directory***" cl() auto/07p/demos/bvp/c.bvp.10000640000175000017500000000055013570013207013232 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 1 NMX= 200, NPR= 200, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.2, DSMIN= 0.001, DSMAX= 0.2, IADS= 1 NPAR = 2, THL = {}, THU = {} UZSTOP = {1: [0.0, 5.5]} auto/07p/demos/bvp/plaut04.rc0000640000175000017500000000700313570013207013757 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 4 Z Axis Bifurcation = 1 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 2.0 # Background color: Background Color = 0.0, 0.0, 0.0 # Background transparency: Background Transparency = 0.5 # Axes color: X Axis Color = 1.0, 1.0, 1.0 Y Axis Color = 1.0, 1.0, 1.0 Z Axis Color = 1.0, 1.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 2.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/bvp/README0000640000175000017500000000015013570013207013014 0ustar skskType "auto bvp.auto" to run the complete demo. Type "auto clean.auto" to clean (back to original state).auto/07p/demos/kar/0000750000175000017500000000000013570013207012125 5ustar skskauto/07p/demos/kar/clean.auto0000640000175000017500000000014513570013207014102 0ustar sksk #============== # AUTO Demo kar #============== print "\n***Clean the directory***" dl('kar') cl() auto/07p/demos/kar/kar.auto0000640000175000017500000000034313570013207013575 0ustar sksk #============== # AUTO Demo kar #============== pgm = "kar" print "\nDemo %s is started"%pgm print "\n%s : computation of the solution branch"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/kar/c.kar.10000640000175000017500000000053713570013207013213 0ustar skskNDIM= 5, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 40, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {1: 0.0} auto/07p/demos/kar/c.kar0000640000175000017500000000053713570013207013054 0ustar skskNDIM= 5, IPS = 4, IRS = 0, ILP = 1 ICP = [1, 2] NTST= 40, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-07, EPSS =0.0001 DS = -0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {1: 0.0} auto/07p/demos/kar/kar.f900000640000175000017500000000450213570013207013224 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! kar : The Von Karman swirling flow !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION U1,U2,U3,U4,U5,GAMMA,ZINF U1=U(1) U2=U(2) U3=U(3) U4=U(4) U5=U(5) GAMMA=PAR(1) ZINF =PAR(3) F(1)=ZINF*U2 F(2)=ZINF*U3 F(3)=ZINF*( - 2*GAMMA*U4 + U2*U2 - 2*U1*U3 - U4*U4) F(4)=ZINF*U5 F(5)=ZINF*(2*GAMMA*U2 + 2*U2*U4 - 2*U1*U5) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION GAMMA,FINF,ZINF GAMMA=1. FINF =0. ZINF =500. PAR(1)=GAMMA PAR(2)=-FINF PAR(3)=ZINF U(1)=0. U(2)=0. U(3)=0. U(4)=0. U(5)=0. END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION GAMMA,FINF,C,A,B GAMMA=PAR(1) FINF=-PAR(2) C=SQRT(FINF**4 + 4*GAMMA**2) A=SQRT(C + FINF**2) / SQRT(2.d0) B=SQRT(C - FINF**2) / SQRT(2.d0) F(1)=U0(1) F(2)=U0(2) F(3)=U0(4)-1+GAMMA F(4)=(FINF+A)*U1(2) + U1(3) - GAMMA*U1(4)/A F(5)=A*B**2*U1(2)/GAMMA + (FINF+A)*U1(4) + U1(5) F(6)=U1(1)-FINF END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/snh/0000750000175000017500000000000013570013207012140 5ustar skskauto/07p/demos/snh/tb.auto0000640000175000017500000000425213570013207013443 0ustar sksk# AUTO demo snh # # Bifurcations of global reinjection orbits near a saddle-node Hopf bifurcation # compute the codimension-zero PtoE connection using homotopy print "\n1st run - find and continue equilibrium a : x=y=0, phi=-acos(-0.5*nu2)" # [ b would be x=y=0, phi=acos(-0.5*nu2) ] r1 = run(e='snh',ICP=['nu1'],NDIM=3,ILP=0,ITNW=7,ITMX=10, STOP=['HB1'],DS=0.1,DSMAX=1.0,DSMIN=1e-4,NPAR=26, unames={1:'xgamma',2:'ygamma',3:'phigamma',4:'x',5:'y',6:'phi', 7:'x-',8:'y-',9:'phi-'}, parnames={1:'nu1',2:'nu2',3:'d',4:'codim', 5:'delta',6:'eps',7:'mu',8:'h',9:'T-',10:'T+',11:'T', 21:'sigma-'}) print "\n2nd run - switch to the periodic orbit and continue in nu1 up to 0.74" r2 = run(r1('HB1'),ICP=['nu1','T'],IPS=2,NTST=100, STOP=[],UZSTOP={'nu1':0.74},DSMAX=0.1) print "\n3rd run - extend the system" r3 = run(r2('UZ1'),ICP=['mu','h','T'],IPS=4,NDIM=6,NBC=7,NINT=1, STOP=['BP1'],UZSTOP={},DS=-0.1,DSMAX=1) print "\n4th run - normalize the Floquet bundle" r4 = run(r3('BP1'),ISW=-1,DS=0.1, STOP=[],UZSTOP={'h':1.0},DSMAX=100) print "\n5th run - integrate away from the periodic orbit in negative time." print "puts a starting value into sigma- (which measures the distance to W^u(b))" print "UZ points denote intersections with W^u(b)" r5 = run(r4('UZ1'),ISW=0,ICP=['T-','mu','T','sigma-'],NDIM=9,NBC=11, PAR={'delta':1e-4,'codim':0},UZSTOP={'sigma-':0},DS=-1.0) print "\n6th run - improve the connection" r6 = run(r5('UZ1'),ICP=['T-','mu','T','delta'], THL={'T':0,'T-':0},UZSTOP={'T-':-200}) print "\n7th run - find folds (tangencies of codimension-zero connection)" r7 = run(r6('UZ1'),ICP=['nu1','mu','T','delta','T-'],NINT=2,ILP=1, STOP=['LP2'],UZSTOP={},DS=-0.1,DSMAX=0.1) print "\n8th run - continue left fold (t_b)" t = run(r7('LP1'),ICP=['nu1','T','delta','nu2','T-','mu'],ISW=2,ISP=0,ITMX=20, STOP=['LP1']) r8 = merge(run(t)+run(t,DS='-')) print "\n9th run - continue right fold (t_b)" t = run(r7('LP2'),ICP=['nu1','T','delta','nu2','T-','mu'],ISW=2,ISP=0, STOP=['LP1']) r9 = merge(run(t)+run(t,DS='-')) save(rl(r8+r9),'tb') clean() print "\nDone." auto/07p/demos/snh/clean.auto0000640000175000017500000000010613570013207014112 0ustar skskfor suffix in ['closegap','cb','tb','h1b','all']: dl(suffix) cl() auto/07p/demos/snh/cb.auto0000640000175000017500000000470313570013207013423 0ustar sksk# AUTO demo snh # # Bifurcations of global reinjection orbits near a saddle-node Hopf bifurcation # compute the codimension-one PtoE connection via Lin's method print "\n1st run - find and continue equilibrium a : x=y=0, phi=-acos(-0.5*nu2)" # [ b would be x=y=0, phi=acos(-0.5*nu2) ] r1 = run(e='snh',ICP=['nu1'],NDIM=3,ILP=0,ITNW=7,ITMX=20,IPS=1, UZR={},PAR={},STOP=['HB1'],DS=0.1,DSMAX=1.0,NPAR=26, unames={1:'xgamma',2:'ygamma',3:'phigamma',4:'x',5:'y',6:'phi', 7:'x-',8:'y-',9:'phi-',10:'x+',11:'y+',12:'phi+'}, parnames={1:'nu1',2:'nu2',3:'d', 5:'delta',6:'eps',7:'mu',8:'h',9:'T-',10:'T+',11:'T', 21:'sigma-',22:'sigma+',23:'eta',24:'Zx',25:'Zy',26:'Zz'}) print "\n2nd run - switch to the periodic orbit and continue in nu1 up to 0.74" r2 = run(r1('HB1'),ICP=['nu1','T'],IPS=2,NTST=100, STOP=[],UZSTOP={'nu1':0.74},DSMAX=0.1) print "\n3rd run - extend the system" r3 = run(r2('UZ1'),ICP=['mu','h','T'],IPS=4,NDIM=6,NBC=7,NINT=1, STOP=['BP1'],UZSTOP={},DSMAX=1) print "\n4th run - normalize the Floquet bundle" print "also put a starting value into sigma- (which" print "measures the distance to Sigma = { phi=pi })" r4 = run(r3('BP1'),ISW=-1, STOP=[],UZSTOP={'h':1.0},DSMAX=100) print "\n5th run - integrate away from the periodic orbit, UZ points denote" print " intersections with Sigma" r5 = run(r4('UZ1'),ISW=0,ICP=['T-','mu','T','sigma-'],NDIM=9,NBC=11, UZSTOP={'sigma-':0},DS=1.0) print "\n6th run - integrate backwards from the equilibrium b : x=y=0, phi=acos(-0.5*nu2)" print "up to Sigma + put starting data for Lin vector and Lin gap in Zx, Zy, Zz, and eta." r6 = run(r5('UZ1'),ICP=['T+','sigma+','T-','mu','T'],NDIM=12,NBC=15,NPR=10, UZSTOP={'sigma+':0}) print "\n7th run - close the gap (with some intermediate solutions)" r7 = run(r6('UZ1'),ICP=['eta','nu1','delta','eps','T+','T-','mu','T'], NBC=17,NINT=2,NPR=5,THL={'T':0,'T-':0,'T+':0}, UZSTOP={'eta':0},DS=-0.01,DSMAX=0.01) save(r7,'closegap') # plot this, have a look at the solution coordinates 'x-'-vs-'phi-' and 'x+'-vs-'phi+' #plot(r7) #wait() print "\n8th run - keep the gap closed and continue in nu1,nu2" start8 = load(r7('UZ1'),ICP=['nu1','mu','delta','eps','nu2','T+','T-','T'], UZSTOP={},ILP=1,NPR=100,ISP=0,DS=0.1,DSMAX=0.1) r8 = merge(run(start8,UZSTOP={'delta':-3e-3}) + run(start8,DS='-',STOP=['LP1'])) save(r8,'cb') clean() print "\nDone." auto/07p/demos/snh/snh.f900000640000175000017500000002036613570013207013260 0ustar sksk!--------------------------------------------------------------------- !--------------------------------------------------------------------- ! snh: Bifurcations of global reinjection orbits near a saddle-node ! Hopf bifurcation: cycle-to-point connections ! ! Parameters: ! PAR(1) : nu1 ! PAR(2) : nu2 ! PAR(3) : d ! PAR(4) : codimension of connection (0 or 1) ! ! PAR(5) : delta: distance from cycle to start connection ! PAR(6) : eps: distance from end connection to point ! PAR(7) : mu: log of the Floquet multiplier ! PAR(8) : h: norm of eigenfunction for cycle at 0 ! PAR(9) : T^-: time for connection from cycle (U(7:9)) to section ! PAR(10) : T^+: time for connection from section (U(10:12)) to point ! PAR(11) : T: period of the cycle ! PAR(21) : sigma-: U1(9)-pi (phi-distance W^u(P) from section phi=pi) ! ( distance to W^u(b) for codim 0 connection) ! PAR(22) : sigma+: U0(12)-pi (phi-distance W^s(E) from section phi=pi) ! PAR(23) : eta: gap size for Lin vector ! PAR(24) : Z_x: Lin vector (x-coordinate) ! PAR(25) : Z_y: Lin vector (y-coordinate) ! PAR(26) : Z_z: Lin vector (z-coordinate) !--------------------------------------------------------------------- !--------------------------------------------------------------------- SUBROUTINE RHS(U,PAR,F,JAC,A) IMPLICIT NONE DOUBLE PRECISION, INTENT(IN) :: U(3), PAR(*) LOGICAL, INTENT(IN) :: JAC DOUBLE PRECISION, INTENT(OUT) :: F(3), A(3,3) DOUBLE PRECISION x, y, phi DOUBLE PRECISION nu1, nu2, alpha, beta, omega, c, d, fp, s DOUBLE PRECISION sphi, x2y2, cphinu, cphinu2 nu1 = PAR(1) nu2 = PAR(2) d = PAR(3) fp = 4*atan(1.0d0)*d alpha = -1 s = -1 c = 0 omega = 1 beta = 0 x = U(1) y = U(2) phi = U(3) sphi = sin(phi) x2y2 = x*x + y*y cphinu = 2*cos(phi)+nu2 cphinu2 = cphinu*cphinu F(1) = nu1*x - omega*y - (alpha*x - beta*y)*sphi - x2y2*x + d*cphinu2 F(2) = nu1*y + omega*x - (alpha*y + beta*x)*sphi - x2y2*y + fp*cphinu2 F(3) = nu2 + s*x2y2 + 2.0*cos(phi) + c*x2y2*x2y2 IF(JAC)THEN A(1,1) = nu1 - alpha*sphi - 3*x**2 - y**2 A(1,2) = -omega + beta*sphi - 2*x*y A(1,3) = -(alpha*x - beta*y)*cos(phi) - d*4*(2*cos(phi)+nu2)*sphi A(2,1) = omega - beta*sphi - 2*x*y A(2,2) = nu1 - alpha*sphi - 3*y**2 - x*x A(2,3) = -(alpha*y + beta*x)*cos(phi) - fp*4*(2*cos(phi) + nu2)*sphi A(3,1) = 2*s*x + 4*c*x2y2*x A(3,2) = 2*s*y + 4*c*x2y2*y A(3,3) = -2*sphi ENDIF END SUBROUTINE RHS SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- --- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) DOUBLE PRECISION T,mu DOUBLE PRECISION A(3,3) CALL RHS(U,PAR,F,NDIM>3,A) IF(NDIM==3)RETURN F(4:6) = MATMUL(A,U(4:6)) T = PAR(11) F(1:6) = F(1:6) * T ! log of Floquet multiplier in PAR(7) mu = PAR(7) F(4:6) = F(4:6) - mu*U(4:6) IF (NDIM==6) RETURN CALL RHS(U(7:9),PAR,F(7:9),.FALSE.,A) T = PAR(9) F(7:9) = F(7:9) * T IF (NDIM==9) RETURN CALL RHS(U(10:12),PAR,F(10:12),.FALSE.,A) T = PAR(10) F(10:12) = F(10:12) * T END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T INTEGER, PARAMETER :: codim = 1 DOUBLE PRECISION, PARAMETER :: nu1 = 0, nu2 = -1.46d0, d = 0.01d0 DOUBLE PRECISION, PARAMETER :: delta = -1d-5, eps = 1d-6 DOUBLE PRECISION fp(3), ev(3), pi DOUBLE PRECISION, SAVE :: s(6) IF(NDIM==9)THEN IF(T==0)THEN s(1:6) = U(1:6) ENDIF U(7:9) = s(1:3) + PAR(5)*s(4:6) RETURN ELSEIF(NDIM==12)THEN fp = (/0d0, 0d0, acos(-nu2/2)/) ev = (/0d0, 0d0, 1d0/) U(10:12) = fp(1:3) + PAR(6)*ev(1:3) RETURN ENDIF PAR(1:3) = (/nu1,nu2,d/) PAR(4) = codim PAR(5) = delta PAR(6) = eps PAR(21:22) = 0.0 ! homotopy: equilibrium b and its phase-shifted version, to find ! the "heteroclinic" orbit in negative time. pi = 4 * ATAN(1D0) PAR(11) = -0.1 PAR(12) = 0 PAR(13) = 0 PAR(14) = acos(-PAR(2)/2) PAR(15) = 0 PAR(16) = 0 PAR(17) = acos(-PAR(2)/2)+2*pi PAR(18) = 0.01d0 ! epsilon_0 distance ! equilibrium a U(1:3) = (/ 0.0d0, 0.0d0, 2*pi-acos(-nu2/2) /) END SUBROUTINE STPNT SUBROUTINE PVLS(NDIM,U,PAR) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP DOUBLE PRECISION d(3), normlv INTEGER i, NBC, codim DOUBLE PRECISION pi LOGICAL, SAVE :: FIRST = .TRUE. IF (FIRST) THEN FIRST = .FALSE. ! initialization for BCND pi = 4d0 * ATAN(1d0) IF (NDIM==9) THEN codim = NINT(PAR(4)) IF (codim == 0) THEN IF (PAR(21)==0) THEN ! distance to W^u(b) where b is the phase-shifted equilibrium PAR(21) = GETP("BV1",9,U) - PAR(17) ENDIF ELSE PAR(21) = GETP("BV0",9,U) - pi ENDIF ELSEIF (NDIM==12) THEN NBC = AINT(GETP("NBC",0,U)) IF (NBC==15) THEN PAR(22) = GETP("BV0",12,U) - pi ELSE ! check if Lin vector initialized: IF (DOT_PRODUCT(PAR(24:26),PAR(24:26)) > 0) RETURN DO i=1,3 d(i) = GETP("BV1",6+i,U) - GETP("BV0",9+i,U) ENDDO normlv = sqrt(DOT_PRODUCT(d,d)) ! gap size in PAR(23) PAR(23) = normlv ! Lin vector in PAR(24)-PAR(26) PAR(24:26) = d(1:3)/normlv ENDIF ENDIF ENDIF END SUBROUTINE PVLS SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) DOUBLE PRECISION nu2, delta, eps, fp(3), ev(3), eta DOUBLE PRECISION pi INTEGER codim ! Periodicity boundary conditions on state variables FB(1:3) = U0(1:3) - U1(1:3) ! Floquet boundary condition FB(4:6) = U1(4:6) - U0(4:6) ! normalization FB(7) = PAR(8) - DOT_PRODUCT(U0(4:6),U0(4:6)) IF (NBC==7) RETURN delta = PAR(5) FB(8:10) = U0(7:9) - (U0(1:3) + delta*U0(4:6)) pi = 4d0 * ATAN(1d0) codim = NINT(PAR(4)) IF(codim == 0)THEN ! projection boundary condition for codimension-zero connection nu2 = PAR(2) FB(11) = COS(U1(9) - PAR(21)) +nu2/2 RETURN ENDIF FB(11) = U1(9) - pi - PAR(21) IF (NBC==11) RETURN nu2 = PAR(2) eps = PAR(6) IF (abs(nu2) > 2) THEN ! truncate nu2 to [-2,2] to avoid floating point exceptions with acos nu2 = sign(2d0, nu2) ENDIF fp = (/0d0, 0d0, acos(-nu2/2)/) ev = (/0d0, 0d0, 1d0/) FB(12:14) = U1(10:12) - (fp(1:3) + eps*ev(1:3)) IF (NBC==15) THEN FB(15) = U0(12) - pi - PAR(22) RETURN ENDIF eta = PAR(23) FB(15:17) = U1(7:9) - U0(10:12) - eta*PAR(24:26) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINTS,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINTS, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINTS) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINTS,*) INTEGER codim ! Integral phase condition FI(1) = DOT_PRODUCT(U(1:3),UPOLD(1:3)) IF (NINTS==1) RETURN codim = NINT(PAR(4)) IF (codim == 0) THEN ! phase condition for codimension-zero connection FI(2) = DOT_PRODUCT(UPOLD(7:9),U(7:9)-UOLD(7:9)) RETURN ENDIF FI(2) = DOT_PRODUCT(UPOLD(10:12),U(10:12)-UOLD(10:12)) END SUBROUTINE ICND SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) END SUBROUTINE FOPT auto/07p/demos/snh/plaut04.rc0000640000175000017500000000703713570013207013767 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1,7,10 Y Axis Solution = 2,8,11 Z Axis Solution = 3,9,12 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3DBif = No 3DSol = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/snh/h1b.auto0000640000175000017500000000170613570013207013511 0ustar sksk# AUTO demo snh # # Bifurcations of global reinjection orbits near a saddle-node Hopf bifurcation # compute the 1-reinjection homoclinic orbit with respect to equilibrium point # b print "\n1st run - homotopy backwards in time from equilibrium b : x=y=0, phi=acos(-0.5*nu2)" r1 = run(e='snh',ICP=['T','omega'],NDIM=3,ILP=0,ITNW=7,IPS=9,ISTART=3,IEQUIB=-2, PAR={'nu1':0.5,'nu2':-1.88},NPAR=26, UZSTOP={'omega':0},DS=-0.01, unames={1:'xgamma',2:'ygamma',3:'phigamma'}, parnames={1:'nu1',2:'nu2',3:'d',11:'T',20:'omega'}) print "\n2nd run - improve connection" r2 = run(r1('UZ1'),ICP=['T','nu1'],DSMAX=10,UZSTOP={'T':-2000}) print "\n3rd run - follow connection forwards and backwards" st = load(r2('UZ1'),ICP=['nu1','nu2'], IEQUIB=1,ISTART=1,DSMIN=1e-9,DS=-0.005,DSMAX=0.005) r3 = merge(run(st,UZSTOP={},ILP=1,STOP=['LP20'],NTST=200) + run(st,UZSTOP={'nu2':-1.999},NTST=50,DS='-')) save(r3,'h1b') clean() print "\nDone." auto/07p/demos/snh/autorc0000640000175000017500000000352713570013207013370 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" stability = 0 #use_labels = 1 #use_symbols = 0 #top_title = "SNH with reinjection: EtoP connections using Lin's method" #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$\phi$"] #bifurcation_coordnames = ["$\nu_1$", "L2-norm", "max $x$", "max $y$", "max $z$", "$\nu_2$", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 type = "bifurcation" # or "solution" bifurcation_x = [0] bifurcation_y = [5] solution_x = ['xgamma','x-','x+'] solution_y = ['ygamma','y-','y+'] solution_z = ['phigamma','phi-','phi+'] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/snh/snh.auto0000640000175000017500000000070113570013207013621 0ustar sksk# AUTO demo snh # # Bifurcations of global reinjection orbits near a saddle-node Hopf bifurcation # compute the homoclinic orbit h^1_b using homotopy and HomCont auto('h1b.auto') # compute the codimension-one PtoE connection via Lin's method auto('cb.auto') # compute the codimension-zero PtoE connection and tangency using homotopy auto('tb.auto') copy('cb','all') append('h1b','all') append('tb','all') relabel('all') clean() print "\nDone." auto/07p/demos/sspg/0000750000175000017500000000000013570013207012324 5ustar skskauto/07p/demos/sspg/c.sspg0000640000175000017500000000052613570013207013450 0ustar skskNDIM= 2, IPS = 4, IRS = 0, ILP = 1 ICP = [1] NTST= 100, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 2, NINT= 0 NMX= 50, NPR= 10, MXBF= 0, IID = 2, ITMX= 8, ITNW= 7, NWTN= 5, JAC= 1 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-06 DS = 0.01, DSMIN= 1e-10, DSMAX= 0.1, IADS= 1 NPAR = 2, THL = {}, THU = {} UZR = {} auto/07p/demos/sspg/clean.auto0000640000175000017500000000026713570013207014306 0ustar sksk #=============== # AUTO Demo sspg #=============== pgm="sspg" print "\n***Clean the directory***" dl(pgm+'.1') dl(pgm+'.1.sw') dl(pgm+'.2.sw') dl(pgm+'.2.bw') dl(pgm+'.2.fw') cl() auto/07p/demos/sspg/sspg.f900000640000175000017500000000410413570013207013620 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! Demo sspg: Size-structured plant growth !---------------------------------------------------------------------- !---------------------------------------------------------------------- ! !----67--0---------0---------3---------4---------5---------6---------7--- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION m,s ! Parameters m=PAR(1) s=PAR(2) ! Equations F(1) = -U(2) F(2) = -U(1)*U(2)-m*U(2) IF(IJAC.EQ.0)RETURN DFDU(1,1) = 0.0 DFDU(1,2) = -1.0 DFDU(2,1) = -U(2) DFDU(2,2) = -U(1)-m IF(IJAC.EQ.1)RETURN DFDP(1,1) = 0.0 DFDP(1,2) = 0.0 DFDP(2,1) = -U(2) DFDP(2,2) = 0.0 END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION, INTENT(OUT) :: U(NDIM), PAR(*) ! Parameters initialization PAR(1:2)=(/1.0,4.0/) ! Trivial solution U(1:2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC), DBC(NBC,*) DOUBLE PRECISION m,s ! Parameters m=PAR(1) s=PAR(2) ! Equations FB(1) = U1(1) FB(2) = -U0(2)+s*U0(1) IF(IJAC.EQ.0)RETURN DBC(1,1) = 0.0 DBC(1,2) = 0.0 DBC(1,3) = 1.0 DBC(1,4) = 0.0 DBC(2,1) = s DBC(2,2) = -1.0 DBC(2,3) = 0.0 DBC(2,4) = 0.0 IF(IJAC.EQ.1)RETURN DBC(1,5) = 0.0 DBC(1,6) = 0.0 DBC(2,5) = 0.0 DBC(2,6) = U0(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/sspg/sspg.auto0000640000175000017500000000121313570013207014170 0ustar sksk #======================================== # AUTO demo sspg # BPCONT for non-generic non-periodic BVP #======================================== pgm="sspg" print "\n***"+pgm+": run 1: trivial solution***" r1=run(pgm,sv=pgm+'.1') bp=r1('BP1') print "\n***"+pgm+": run 1: branch switch***" run(bp,ISW=-1,NMX=5,NPR=1,sv=pgm+'.1.sw') print "\n***"+pgm+": run 2: switch to BP continuation***" sw=run(bp,ICP=[1,2],ISW=2,NMX=50,NPR=10,sv=pgm+'.2.sw') print "\n***"+pgm+": run 2: BP continuation (fw)***" run(sw,sv=pgm+'.2.fw') print "\n***"+pgm+": run 2: BP continuation (bw)***" run(sw,DS='-',sv=pgm+'.2.bw') print "\n***Clean the directory***" cl() auto/07p/demos/fnc/0000750000175000017500000000000013570013207012116 5ustar skskauto/07p/demos/fnc/c.fnc.epsplus0000640000175000017500000000105413570013207014523 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 6: 'sr1', 7: 'ha0', 11: 'Tc'} NDIM= 3, IPS = 4, ILP = 1 ICP = ['epsilon', 'va0', 'sr1', 'Tc'] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 2000, NPR= 2000, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS =1.0, DSMIN= 5e-09, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {'Tc': 0.0}, THU = {} UZR = {epsilon:[0.05,0.06,0.061,0.063]}, UZSTOP = {epsilon:0.075}, A1 = 5.0 auto/07p/demos/fnc/clean.auto0000640000175000017500000000047313570013207014077 0ustar sksk #============== # AUTO Demo fnc #============== import os, glob pgm = "fnc" cd("attr") auto("clean.auto") cd("..") cd("rep") auto("clean.auto") cd("..") dl("attrrep") for i in [3,4,5,6,7,8]: dl("xi"+str(i)) dl("xis") for f in glob.glob("*.eps"): os.remove(f) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/fnc.auto0000640000175000017500000000227013570013207013560 0ustar sksk #============== # AUTO Demo fnc #============== pgm = "fnc" print "\nDemo %s is started"%pgm cd("attr") auto("attr.auto") attr = loadbd("attr") cd("..") cd("rep") auto("rep.auto") rep = loadbd("rep") cd("..") # for plotting attracting and repelling manifolds save(rl(attr+rep),'attrrep') pgm = "fnc" #reinitialize dl("xis") for i in [3,4,5,6,7,8]: print "calculating orbit for xi"+str(i) uzlabel = "UZ"+str(i-2) sola = attr(uzlabel) solr = rep(uzlabel) Ta = sola.PAR["Ta"] Tr = solr.PAR["Tr"] Tc = Ta + Tr # concatenate manifold coordinates and rescale t t = ([(ti * Ta)/Tc for ti in sola["t"][:-1]] + [(ti * Tr + Ta)/Tc for ti in solr["t"]]) v = list(sola["v"][:-1]) + list(solr["v"]) h = list(sola["h"][:-1]) + list(solr["h"]) s = list(sola["s"][:-1]) + list(solr["s"]) u = [t,v,h,s] p = {} for j in ["epsilon","gamma","delta","va0","ha0"]: p[j] = sola.PAR[j] p["sr1"] = solr.PAR["sr1"] p["Tc"] = Tc rmin = run(u,e=pgm,c=pgm,PAR=p) rplus = run(u,e=pgm,c=pgm+".epsplus",PAR=p) r = merge(rmin+rplus) save(r,"xi"+str(i)) append(r,"xis") rl("xis") print "\n***Clean the directory***" cl() auto/07p/demos/fnc/plot.auto0000640000175000017500000000377213570013207014000 0ustar sksk #===================== # AUTO Demo fnc: plots #===================== #use hide=True in the plot options to avoid on screen display p=plot('attrrep',type="solution",label='all',azimuth=70,elevation=20, minx=-0.1,maxx=0.6,miny=0.35,maxy=0.65,minz=-0.8,maxz=0.1, color_list="black red blue green gray orange", solution_x=["s"],solution_y=["h"], solution_z=["v"], xlabel="$s$",ylabel="$h$",zlabel="$v$") p.savefig("fnc_attrrep1.eps") p=plot('attrrep',type="bifurcation", bifurcation_x=["ha1","hr0"], bifurcation_y=["va1","vr0"], xlabel="$h$",ylabel="$v$") p.savefig("fnc_attrrep2.eps") p=plot('xis',type="bifurcation", bifurcation_x=["epsilon"], bifurcation_y=["L2-NORM"], minx=0,maxx=0.075,miny=1,maxy=5, color_list="black red blue green gray orange", xlabel=r"$\varepsilon$",ylabel="$||\cdot||_2$") p.savefig("fnc_canards1.eps") p=plot('xis',label=[4,8,11,16],type="solution", solution_x=["s"], solution_y=["v"],solution_z=None, color_list="black red blue green", minx=-3.6,maxx=0,miny=-3,maxy=2, xlabel="$s$",ylabel="$v$") p.savefig("fnc_canards2.eps") p=plot('attrrep',type="solution",label='all', color_list="black red blue green gray orange", solution_x=["s"],solution_y=["v"], solution_z=None, minx=0,maxx=0.72,miny=-2,maxy=0, xlabel="$s$",ylabel="$v$",hide=True) p.savefig("fnc_canards3.eps") p=plot('xis',label=[17,25,31,37,43,49],type="solution", solution_x=["s"], solution_y=["v"],solution_z=None, color_list="black red blue green gray orange", minx=0.2,maxx=0.56,miny=-2,maxy=0, xlabel="$s$",ylabel="$v$",width=300,hide=True) p.savefig("fnc_canards4.eps") p=plot('xis',label=[18,26,32,38,44,50],type="solution", solution_x=["s"], solution_y=["v"],solution_z=None, color_list="black red blue green gray orange", width=300,minx=0.2,maxx=0.56,miny=-2,maxy=0, xlabel="$s$",ylabel="$v$",width=300,hide=True) p.savefig("fnc_canards5.eps") wait() auto/07p/demos/fnc/rep/0000750000175000017500000000000013570013207012704 5ustar skskauto/07p/demos/fnc/rep/rep.auto0000640000175000017500000000136713570013207014374 0ustar sksk #================== # AUTO Demo fnc/rep #================== pgm = "rep" print "\nDemo %s is started"%pgm print '\n%s : first run : Homotopy away from the folded node along the fold curve'%pgm r1 = run(e=pgm,c=pgm) print '\n%s : second run : Homotopy away from the fold curve on the critical manifold'%pgm r2 = run(r1('UZ1'),ICP=['vr1','Tr'],NBC=4,UZR={'vr1':0}) print '\n%s : third run: Actual computation of the repelling slow manifold'%pgm start3 = load(r2('UZ1'),ICP=['Tr','sr1','vr0','hr0'], UZR = {'Tr':[144.10077659,160.62079695,178.59845751, 197.98334090,218.62796126,240.27107973]}) r3 = merge(run(start3,STOP='UZ2') + run(start3,STOP='UZ4',DS='-')) save(r3,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/rep/rep.f900000640000175000017500000001134113570013207014013 0ustar sksk! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! Slow manifolds computation in the self-coupled FitzHugh-Nagumo system ! ---------------------------------------------------------------------- ! C o m p. o f t h e r e p e l l i n g s l o w m a n i f o l d ! ---------------------------------------------------------------------- ! Homotopy step 1: "away from the folded node along the fold curve" ! followed by ! Homotopy step 2: "away from the fold curve on the critical manifold" ! followed by ! Actual computation of the repelling slow manifold ! ---------------------------------------------------------------------- ! Ref.: Desroches, Krauskopf and Osinga, CHAOS 18, 015107 (2008) ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION v, h, s, epsilon, gamma, delta, T ! Define the state variables v = U(1) h = U(2) s = U(3) ! Define the system parameters epsilon = PAR(1) gamma = PAR(2) delta = PAR(3) ! Define the integration time as a parameter T = PAR(11) ! Define the right-hand sides F(1) = T * (h - (v**3 - v + 1) / 2 - gamma * s * v) F(2) = T * (-epsilon * (2 * h + 2.6d0 * v)) F(3) = T * (-epsilon * delta * s) END SUBROUTINE FUNC ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! epsilon gamma delta PAR(1:3) = (/ 0.015d0, 0.5d0, 0.565d0 /) PAR(11) = 0 ! v h s U(1:3) = (/ -0.490d0, 0.61760d0, 0.27970d0 /) PAR(4) = U(1) ! v(1) PAR(5) = U(3) ! s(0) PAR(6) = U(3) ! s(1) END SUBROUTINE STPNT ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Define boundary conditions */ ! Define the critical manifold S as {(v,h,s) ; 2*h-v^3+v-1-v*s=0} ! (we use the fact that gamma is fixed at the value 0.5) FB(1) = 2*U1(2)-U1(1)**3+U1(1)-1-U1(3)*U1(1) FB(2) = U1(1) - PAR(4) ! End point is on the intersection between S FB(3) = U1(3) - PAR(6) ! and the plane {s=0.05/v=0.0} FB(4) = U0(3) - PAR(5) ! Initial point is in a cross-section containing ! the folded node: Sigma_fn={s=0.27970} IF(NBC==4) RETURN ! FB(1) and FB(5): {(v,h,s) ; s - (1 - 3*v^2=0)} ! together define the folded node F FB(5) = U1(3) - (1 - 3*U1(1)**2) END SUBROUTINE BCND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP ! Define external parameter which monitors the v- and the h-coordinate ! of the initial point in section Sigma_fn */ PAR(8) = GETP("BV0", 1, U) PAR(9) = GETP("BV0", 2, U) END SUBROUTINE PVLS ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/fnc/rep/c.rep.10000640000175000017500000000102013570013207013767 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'vr1', 5: 'sr0', 6: 'sr1', 8: 'vr0', 9: 'hr0', 11: 'Tr'} NDIM= 3, IPS = 4, IRS = 0, ILP = 0 ICP = ['Tr', 'vr1', 'sr1'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 5, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 1.0, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'sr1': 0.05}, STOP = ['UZ1'] auto/07p/demos/fnc/rep/clean.auto0000640000175000017500000000022513570013207014660 0ustar sksk #================== # AUTO Demo fnc/rep #================== pgm = "rep" dl('1') dl('2') dl('3') dl(pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/rep/c.rep.30000640000175000017500000000115413570013207014001 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'vr1', 5: 'sr0', 6: 'sr1', 8: 'vr0', 9: 'hr0', 11: 'Tr'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['Tr', 'sr1', 'vr0', 'hr0'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 4, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'Tr':[144.10077659,160.62079695,178.59845751, 197.98334090,218.62796126,240.27107973]} STOP = ['UZ2'] auto/07p/demos/fnc/rep/c.rep.40000640000175000017500000000115413570013207014002 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'vr1', 5: 'sr0', 6: 'sr1', 8: 'vr0', 9: 'hr0', 11: 'Tr'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['Tr', 'sr1', 'vr0', 'hr0'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 4, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS =-0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'Tr':[144.10077659,160.62079695,178.59845751, 197.98334090,218.62796126,240.27107973]} STOP = ['UZ4'] auto/07p/demos/fnc/rep/c.rep.20000640000175000017500000000101013570013207013767 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'vr1', 5: 'sr0', 6: 'sr1', 8: 'vr0', 9: 'hr0', 11: 'Tr'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['vr1', 'Tr'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 4, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'vr1': 0.0}, STOP = ['UZ1'] auto/07p/demos/fnc/rep/repc.auto0000640000175000017500000000105413570013207014530 0ustar sksk #================== # AUTO Demo fnc/rep #================== pgm = "rep" print "\nDemo %s is started"%pgm print '\n%s : first run : Homotopy away from the folded node along the fold curve'%pgm r1 = run(e=pgm,c=pgm,sv='1') print '\n%s : second run : Homotopy away from the fold curve on the critical manifold'%pgm r2 = run(c=pgm+'.2',s='1',sv='2') print '\n%s : third run: Actual computation of the repelling slow manifold'%pgm r3 = run(c=pgm+'.3',s='2',sv='3') r4 = run(c=pgm+'.4',s='2',ap='3') merge('3',pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/rep/plaut04.rc0000640000175000017500000000675713570013207014543 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahea Coordinate Type = 0 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 2 Y Axis Solution = 3 Z Axis Solution = 1 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 0.2 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 0.8 # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 #Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 # Set the maximum and minimum satellite animation speed: Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 #Set the maximum and minimum orbit-change animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 #Set the active AUTO parameter indices: parameter ID = 10 #Choose 3D or 2D graph: 3D = Yes auto/07p/demos/fnc/rep/autorc0000640000175000017500000000343113570013207014126 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" stability = 0 #use_labels = 1 #use_symbols = 0 top_title = "Lorenz: EtoP connections using Lin's method" #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = [r"$\rho$", "L2-norm", "max $x$", "max $y$", "max $z$", "$\beta", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 type = "bifurcation" # or "solution" bifurcation_x = ['vr0'] bifurcation_y = ['hr0'] solution_x = ['v'] solution_y = ['h'] solution_z = ['s'] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/fnc/rep/c.rep0000640000175000017500000000102013570013207013630 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'vr1', 5: 'sr0', 6: 'sr1', 8: 'vr0', 9: 'hr0', 11: 'Tr'} NDIM= 3, IPS = 4, IRS = 0, ILP = 0 ICP = ['Tr', 'vr1', 'sr1'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 5, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 1.0, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'sr1': 0.05}, STOP = ['UZ1'] auto/07p/demos/fnc/c.fnc0000640000175000017500000000101013570013207013021 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 6: 'sr1', 7: 'ha0', 11: 'Tc'} NDIM= 3, IPS = 4, ILP = 0 ICP = ['epsilon', 'va0', 'sr1', 'Tc'] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 2000, NPR= 2000, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS =-1.0, DSMIN= 5e-9, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {'Tc': 0.0}, THU = {} UZR = {epsilon:[1e-4,1e-6]}, STOP=['UZ2'] auto/07p/demos/fnc/plaut04.rc0000640000175000017500000000675713570013207013755 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahea Coordinate Type = 0 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 2 Y Axis Solution = 3 Z Axis Solution = 1 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 0.2 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 0.8 # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 #Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 # Set the maximum and minimum satellite animation speed: Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 #Set the maximum and minimum orbit-change animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 #Set the active AUTO parameter indices: parameter ID = 10 #Choose 3D or 2D graph: 3D = Yes auto/07p/demos/fnc/fnc.f900000640000175000017500000000647713570013207013223 0ustar sksk! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! Slow manifolds computation in the self-coupled FitzHugh-Nagumo system ! ---------------------------------------------------------------------- ! Continuation of canard orbits in parameter space ! ---------------------------------------------------------------------- ! Ref.: Desroches, Krauskopf and Osinga, preprint of the UoB, 2009 ! URL : http://rose.bris.ac.uk/dspace/handle/1983/1312 ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION v, h, s, epsilon, gamma, delta, T ! Define the state variables v = U(1) h = U(2) s = U(3) ! Define the system parameters epsilon = PAR(1) gamma = PAR(2) delta = PAR(3) ! Define the integration time as a parameter T = PAR(11) ! Define the right-hand sides F(1) = T * (h - (v**3 - v + 1) / 2 - gamma * s * v) F(2) = T * (-epsilon * (2 * h + 2.6d0 * v)) F(3) = T * (-epsilon * delta * s) END SUBROUTINE FUNC ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE STPNT END SUBROUTINE STPNT ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Define the critical manifold S as {(v,h,s) ; 2*h-v^3+v-1-s*v=0} ! (we use the fact that gamma is fixed at the value 0.5) ! Define boundary conditions */ FB(1) = U0(1) - PAR(4) ! Initial point is on the intersection between S FB(2) = U0(2) - PAR(7) ! and the plane {h=-6.0} FB(3) = 2*U0(2)-U0(1)**3+U0(1)-1-U0(3)*U0(1) FB(4) = U1(1) FB(5) = U1(2) - 0.5 FB(6) = U1(3) - PAR(6) ! End point is in a cross-section containing the ! folded node: Sigma_fn={s=0.27970} END SUBROUTINE BCND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE PVLS END SUBROUTINE PVLS ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/fnc/autorc0000640000175000017500000000344213570013207013342 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" stability = 0 #use_labels = 1 #use_symbols = 0 #top_title = "Continuation of canard orbits in parameter space" #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = [r"$\rho$", "L2-norm", "max $x$", "max $y$", "max $z$", "$\beta", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 type = "bifurcation" # or "solution" #bifurcation_x = ['epsilon'] #bifurcation_y = ['L2-NORM'] solution_x = ['s'] solution_y = ['h'] solution_z = ['v'] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' bifurcation_symbol = "square" limit_point_symbol = None hopf_symbol = "fillsquare" period_doubling_symbol = "doubletriangle" torus_symbol = "filldiamond" user_point_symbol = None error_symbol = None auto/07p/demos/fnc/attr/0000750000175000017500000000000013570013207013070 5ustar skskauto/07p/demos/fnc/attr/c.attr.10000640000175000017500000000104013570013207014341 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 5: 'sa1', 6: 'sa0', 7: 'ha0', 8: 'va1', 9: 'ha1', 11: 'Ta'} NDIM= 3, IPS = 4, IRS = 0, ILP = 0 ICP = ['Ta', 'va0', 'sa0', 'ha0'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'sa0': 0.6}, STOP = ['UZ1'] auto/07p/demos/fnc/attr/clean.auto0000640000175000017500000000023113570013207015041 0ustar sksk #=================== # AUTO Demo fnc/attr #=================== pgm = "attr" dl('1') dl('2') dl('3') dl(pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/attr/c.attr.30000640000175000017500000000120313570013207014344 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 5: 'sa1', 6: 'sa0', 7: 'ha0', 8: 'va1', 9: 'ha1', 11: 'Ta'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['Ta', 'va0', 'sa0', 'va1', 'ha1'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 5, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'Ta': [56.312667620, 71.853132166, 85.797089436, 98.432124179, 110.04693491, 120.81663908]} STOP = ['UZ3'] auto/07p/demos/fnc/attr/attr.auto0000640000175000017500000000142413570013207014736 0ustar sksk #=================== # AUTO Demo fnc/attr #==================- pgm = "attr" print "\nDemo %s is started"%pgm print '\n%s : first run : Homotopy away from the folded node along the fold curve'%pgm r1 = run(e=pgm,c=pgm) print '\n%s : second run : Homotopy away from the fold curve on the critical manifold'%pgm r2 = run(r1('UZ1'),ICP=['va0','ha0','Ta'],DS='-',NBC=5,UZR={'ha0':-6.0}) print '\n%s : third run: Actual computation of the attracting slow manifold'%pgm start3 = load(r2('UZ1'),ICP=['Ta','va0','sa0','va1','ha1'],STOP=['UZ3'],DS='-', UZR = {'Ta':[56.312667620, 71.853132166, 85.797089436, 98.432124179, 110.04693491, 120.81663908]}) r3 = merge(run(start3) + run(start3,DS='-')) save(r3,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/attr/c.attr.40000640000175000017500000000120313570013207014345 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 5: 'sa1', 6: 'sa0', 7: 'ha0', 8: 'va1', 9: 'ha1', 11: 'Ta'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['Ta', 'va0', 'sa0', 'va1', 'ha1'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 5, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS =-0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'Ta': [56.312667620, 71.853132166, 85.797089436, 98.432124179, 110.04693491, 120.81663908]} STOP = ['UZ3'] auto/07p/demos/fnc/attr/attr.f900000640000175000017500000001143313570013207014365 0ustar sksk! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! Slow manifolds computation in the self-coupled FitzHugh-Nagumo system ! ---------------------------------------------------------------------- ! C o m p. o f t h e a t t r a c t i n g s l o w m a n i f o l d ! ---------------------------------------------------------------------- ! Homotopy step 1: "away from the folded node along the fold curve" ! followed by ! Homotopy step 2: "away from the fold curve on the critical manifold" ! followed by ! Actual computation of the attracting slow manifold ! ---------------------------------------------------------------------- ! Ref.: Desroches, Krauskopf and Osinga, CHAOS 18, 015107 (2008) ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION v, h, s, epsilon, gamma, delta, T ! Define the state variables v = U(1) h = U(2) s = U(3) ! Define the system parameters epsilon = PAR(1) gamma = PAR(2) delta = PAR(3) ! Define the integration time as a parameter T = PAR(11) ! Define the right-hand sides F(1) = T * (h - (v**3 - v + 1) / 2 - gamma * s * v) F(2) = T * (-epsilon * (2 * h + 2.6d0 * v)) F(3) = T * (-epsilon * delta * s) END SUBROUTINE FUNC ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! epsilon gamma delta PAR(1:3) = (/ 0.015d0, 0.5d0, 0.565d0 /) PAR(11) = 0 ! v h s U(1:3) = (/ -0.490d0, 0.61760d0, 0.27970d0 /) PAR(4) = U(1) ! v(0) PAR(5) = U(3) ! s(1) PAR(6) = U(3) ! s(0) PAR(7) = U(2) ! h(0) END SUBROUTINE STPNT ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Define boundary conditions */ ! Define the critical manifold S as {(v,h,s) ; 2*h-v^3+v-1-v*s=0} ! (we use the fact that gamma is fixed at the value 0.5) FB(1) = 2*U0(2)-U0(1)**3+U0(1)-1-U0(3)*U0(1) FB(2) = U0(1) - PAR(4) ! Initial point is on the intersection between S FB(3) = U0(2) - PAR(7) ! and the plane {h=-6.0} FB(4) = U0(3) - PAR(6) FB(5) = U1(3) - PAR(5) ! End point is in a cross-section containing ! the folded node: Sigma_fn={s=0.27970} IF(NBC==5) RETURN ! FB(1) and FB(6): {(v,h,s) ; s - (1 - 3*v^2=0)} ! together define the folded node F FB(6) = U0(3) - (1 - 3*U0(1)**2) END SUBROUTINE BCND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, EXTERNAL :: GETP ! Define external parameter which monitors the v- and the h-coordinate ! of the end point in section Sigma_fn */ PAR(8) = GETP("BV1", 1, U) PAR(9) = GETP("BV1", 2, U) END SUBROUTINE PVLS ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE ICND END SUBROUTINE ICND ! ---------------------------------------------------------------------- ! ---------------------------------------------------------------------- SUBROUTINE FOPT END SUBROUTINE FOPT auto/07p/demos/fnc/attr/plaut04.rc0000640000175000017500000000675713570013207014727 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahea Coordinate Type = 0 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 2 Y Axis Solution = 3 Z Axis Solution = 1 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 0.2 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 0.8 # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 #Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 # Set the maximum and minimum satellite animation speed: Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 #Set the maximum and minimum orbit-change animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 #Set the active AUTO parameter indices: parameter ID = 10 #Choose 3D or 2D graph: 3D = Yes auto/07p/demos/fnc/attr/autorc0000640000175000017500000000343113570013207014312 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" stability = 0 #use_labels = 1 #use_symbols = 0 top_title = "Lorenz: EtoP connections using Lin's method" #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = [r"$\rho$", "L2-norm", "max $x$", "max $y$", "max $z$", "$\beta", "$\gamma$"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 type = "bifurcation" # or "solution" bifurcation_x = ['va1'] bifurcation_y = ['ha1'] solution_x = ['v'] solution_y = ['h'] solution_z = ['s'] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/fnc/attr/c.attr0000640000175000017500000000104013570013207014202 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 5: 'sa1', 6: 'sa0', 7: 'ha0', 8: 'va1', 9: 'ha1', 11: 'Ta'} NDIM= 3, IPS = 4, IRS = 0, ILP = 0 ICP = ['Ta', 'va0', 'sa0', 'ha0'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 6, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = 0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'sa0': 0.6}, STOP = ['UZ1'] auto/07p/demos/fnc/attr/attrc.auto0000640000175000017500000000106113570013207015076 0ustar sksk #=================== # AUTO Demo fnc/attr #=================== pgm = "attr" print "\nDemo %s is started"%pgm print '\n%s : first run : Homotopy away from the folded node along the fold curve'%pgm r1 = run(e=pgm,c=pgm,sv='1') print '\n%s : second run : Homotopy away from the fold curve on the critical manifold'%pgm r2 = run(c=pgm+'.2',s='1',sv='2') print '\n%s : third run: Actual computation of the attracting slow manifold'%pgm r3 = run(c=pgm+'.3',s='2',sv='3') r4 = run(c=pgm+'.4',s='2',ap='3') merge('3',pgm) print "\n***Clean the directory***" cl() auto/07p/demos/fnc/attr/c.attr.20000640000175000017500000000103313570013207014344 0ustar skskunames = {1:'v', 2:'h', 3:'s'} parnames = {1: 'epsilon', 2: 'gamma', 3: 'delta', 4: 'va0', 5: 'sa1', 6: 'sa0', 7: 'ha0', 8: 'va1', 9: 'ha1', 11: 'Ta'} NDIM= 3, IPS = 4, IRS = UZ1, ILP = 0 ICP = ['va0', 'ha0', 'Ta'] NTST= 100, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 5, NINT= 0 NMX= 1200, NPR= 1200, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-09, EPSU = 1e-09, EPSS = 1e-07 DS = -0.1, DSMIN= 5e-05, DSMAX= 10.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'ha0': -6.0}, STOP = ['UZ1'] auto/07p/demos/bru/0000750000175000017500000000000013570013207012140 5ustar skskauto/07p/demos/bru/clean.auto0000640000175000017500000000014513570013207014115 0ustar sksk #============== # AUTO Demo bru #============== print "\n***Clean the directory***" dl('bru') cl() auto/07p/demos/bru/c.bru0000640000175000017500000000063013570013207013074 0ustar skskNDIM= 2, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 3, NBC= 0, NINT= 0 NMX=10000, NPR= 0, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 0.001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR= 16, THL = {}, THU = {} UZR = {14: [21.0, 21.5, 22.0, 22.5, 23.0, 23.5, 24.0]} UZSTOP={14: 25.0} auto/07p/demos/bru/bru.auto0000640000175000017500000000036613570013207013630 0ustar sksk #============== # AUTO Demo bru #============== pgm = "bru" print "\nDemo %s is started"%pgm print "\n%s : first run : time integration towards stationary state"%pgm r1 = run(e=pgm,c=pgm) save(r1,pgm) print "\n***Clean the directory***" cl() auto/07p/demos/bru/c.bru.10000640000175000017500000000063013570013207013233 0ustar skskNDIM= 2, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 3, NBC= 0, NINT= 0 NMX=10000, NPR= 0, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 0.001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR= 16, THL = {}, THU = {} UZR = {14: [21.0, 21.5, 22.0, 22.5, 23.0, 23.5, 24.0]} UZSTOP={14: 25.0} auto/07p/demos/bru/bru.f900000640000175000017500000000476413570013207013264 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! bru : Time integration of a scalar nonlinear parabolic PDE !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION X,Y,A,B X=U(1) Y=U(2) A=PAR(1) B=PAR(2) ! *Set the nonlinear term F(1)= X**2*Y - (B+1)*X + A F(2)=-X**2*Y + B*X END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,Z) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: Z DOUBLE PRECISION pi,A,B,Dx,Dy,RL pi=4*DATAN(1.d0) ! *Set the (constant) parameters A = 2. B = 5.45 Dx = 0.008 Dy = 0.004 RL = 0.75 PAR(1)=A PAR(2)=B PAR(3)=RL ! *Set the actual width of the space interval [0,PAR(11)] PAR(11) = 1. ! *Set the initial data in the (scaled) interval [0,1] U(1) = A - 0.5*DSIN(pi*Z) U(2) = B/A + 0.7*DSIN(pi*Z) ! *Also set the space-derivative of the initial data ! *Note the scaling by PAR(11) U(3) = - 0.5*pi*DCOS(pi*Z)/PAR(11) U(4) = 0.7*pi*DCOS(pi*Z)/PAR(11) ! *Set the diffusion constants PAR(15) = Dx/RL**2 PAR(16) = Dy/RL**2 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! *Define the boundary conditions (Dirichlet, in this example). FB(1)=U0(1)-PAR(1) FB(2)=U0(2)-PAR(2)/PAR(1) FB(3)=U1(1)-PAR(1) FB(4)=U1(2)-PAR(2)/PAR(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/cusp/0000750000175000017500000000000013570013207012322 5ustar skskauto/07p/demos/cusp/clean.auto0000640000175000017500000000017513570013207014302 0ustar sksk#=============== # AUTO Demo cusp #=============== print "\n***Clean the directory***" delete("mu") delete("cusp") clean() auto/07p/demos/cusp/cusp.f900000640000175000017500000001666513570013207013633 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! cusp.f90 - cusp normal form !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !--------- ---- ! Evaluates the algebraic equations or ODE right hand side ! Input arguments : ! NDIM : Dimension of the algebraic or ODE system ! U : State variables ! ICP : Array indicating the free parameter(s) ! PAR : Equation parameters ! Values to be returned : ! F : Equation or ODE right hand side values ! Normally unused Jacobian arguments : IJAC, DFDU, DFDP (see manual) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) DOUBLE PRECISION x, mu, lambda x = U(1) lambda = PAR(1) mu = PAR(2) F(1)= mu + lambda*x - x**3 END SUBROUTINE FUNC !----------------------------------------------------------------------- !----------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) !--------- ----- ! Input arguments : ! NDIM : Dimension of the algebraic or ODE system ! Values to be returned : ! U : A starting solution vector ! PAR : The corresponding equation-parameter values ! Note : For time- or space-dependent solutions this subroutine has ! the scalar input parameter T contains the varying time or space ! variable value. IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! Initialize the equation parameters PAR(1:2) = (/ 1.0d0, 0.0d0 /) ! Initialize the solution U(1) = 0.0d0 END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !--------- ---- ! Boundary Conditions ! Input arguments : ! NDIM : Dimension of the ODE system ! PAR : Equation parameters ! ICP : Array indicating the free parameter(s) ! NBC : Number of boundary conditions ! U0 : State variable values at the left boundary ! U1 : State variable values at the right boundary ! Values to be returned : ! FB : The values of the boundary condition functions ! Normally unused Jacobian arguments : IJAC, DBC (see manual) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) !X FB(1)= !X FB(2)= END SUBROUTINE BCND !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !--------- ---- ! Integral Conditions ! Input arguments : ! NDIM : Dimension of the ODE system ! PAR : Equation parameters ! ICP : Array indicating the free parameter(s) ! NINT : Number of integral conditions ! U : Value of the vector function U at `time' t ! The following input arguments, which are normally not needed, ! correspond to the preceding point on the solution branch ! UOLD : The state vector at 'time' t ! UDOT : Derivative of UOLD with respect to arclength ! UPOLD : Derivative of UOLD with respect to `time' ! Normally unused Jacobian arguments : IJAC, DINT ! Values to be returned : ! FI : The value of the vector integrand IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) !X FI(1)= END SUBROUTINE ICND !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) !--------- ---- ! ! Defines the objective function for algebraic optimization problems ! ! Supplied variables : ! NDIM : Dimension of the state equation ! U : The state vector ! ICP : Indices of the control parameters ! PAR : The vector of control parameters ! ! Values to be returned : ! FS : The value of the objective function ! ! Normally unused Jacobian argument : IJAC, DFDP IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FS DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) !X FS= END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) !--------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) !---------------------------------------------------------------------- ! NOTE : ! Parameters set in this subroutine should be considered as ``solution ! measures'' and be used for output purposes only. ! ! They should never be used as `true'' continuation parameters. ! ! They may, however, be added as ``over-specified parameters'' in the ! parameter list associated with the AUTO-Constant NICP, in order to ! print their values on the screen and in the ``p.xxx file. ! ! They may also appear in the list associated with AUTO-Constant NUZR. ! !---------------------------------------------------------------------- ! For algebraic problems the argument U is, as usual, the state vector. ! For differential equations the argument U represents the approximate ! solution on the entire interval [0,1]. In this case its values must ! be accessed indirectly by calls to GETP, as illustrated below. !---------------------------------------------------------------------- ! ! Set PAR(2) equal to the L2-norm of U(1) !X PAR(2)=GETP('NRM',1,U) ! ! Set PAR(3) equal to the minimum of U(2) !X PAR(3)=GETP('MIN',2,U) ! ! Set PAR(4) equal to the value of U(2) at the left boundary. !X PAR(4)=GETP('BV0',2,U) ! ! Set PAR(5) equal to the pseudo-arclength step size used. !X PAR(5)=GETP('STP',1,U) ! !---------------------------------------------------------------------- ! The first argument of GETP may be one of the following: ! 'NRM' (L2-norm), 'MAX' (maximum), ! 'INT' (integral), 'BV0 (left boundary value), ! 'MIN' (minimum), 'BV1' (right boundary value). ! ! Also available are ! 'STP' (Pseudo-arclength step size used). ! 'FLD' (`Fold function', which vanishes at folds). ! 'BIF' (`Bifurcation function', which vanishes at singular points). ! 'HBF' (`Hopf function'; which vanishes at Hopf points). ! 'SPB' ( Function which vanishes at secondary periodic bifurcations). !---------------------------------------------------------------------- END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/cusp/cusp.auto0000640000175000017500000000140113570013207014163 0ustar sksk#=============== # AUTO Demo cusp #=============== # Load the files cusp.f90 and c.cusp into the AUTO # command interpreter. cusp = load('cusp') # Run and store the result in the Python variable mu mu = run(cusp) # Run backwards, and append to mu mu = mu + run(cusp,DS='-') # Relabel solutions mu = relabel(mu) # Save to b.mu, s.mu, and d.mu save(mu,'mu') # Plot bifurcation diagram p = plot(mu) p.config(bifurcation_y=['x']) # Set the new start label to the first LP label in b.mu and s.mu lp1 = load(mu('LP1'), ISW=2) # Continue from this label in two parameters cusp = run(lp1) cusp = cusp + run(lp1,DS='-') # save to b.cusp, s.cusp, and d.cusp save(cusp,'cusp') # Plot the cusp p = plot(cusp) p.config(bifurcation_y=['lambda']) #clean the directory clean() wait() auto/07p/demos/cusp/plaut04.rc0000640000175000017500000000700113570013207014140 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/cusp/autorc0000640000175000017500000000323313570013207013544 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": "no", "use_labels": 1, "use_symbols": 1, "stability": 1} # similarly you can redefine d0, d2, d3, d4. #grid = "no" #stability = 0 #use_labels = 1 #use_symbols = 0 #top_title = '' #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = ["?", "L2-norm"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = 1 #smart_label = 1 #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 #type = "bifurcation" # or "solution" #bifurcation_x = [0] #bifurcation_y = [1] #solution_x = ["t"] #solution_y = [0] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = None # The label(s) of the solution we wish to draw #label = [1,2,3] #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None auto/07p/demos/cusp/c.cusp0000640000175000017500000000064713570013207013450 0ustar skskparnames = {1:'lambda', 2:'mu'} unames = {1:'x'} NDIM= 1, IPS = 1, IRS = 0, ILP = 1 ICP = ['mu', 'lambda'] NTST= 5, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 200, NPR= 20, MXBF= 0, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 0.005, DSMAX= 0.1, IADS= 1 NPAR = 2, THL = {}, THU = {} UZSTOP = {'mu': [-2.0, 2.0]} auto/07p/demos/pd1/0000750000175000017500000000000013570013207012034 5ustar skskauto/07p/demos/pd1/c.pd1.10000640000175000017500000000054213570013207013025 0ustar skskNDIM= 1, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 0.001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 15, THL = {}, THU = {} UZSTOP = {14: 10.0} auto/07p/demos/pd1/clean.auto0000640000175000017500000000015313570013207014010 0ustar sksk #============== # AUTO Demo pd1 #============== print "\n***Clean the directory***" dl('1') dl('2') cl() auto/07p/demos/pd1/c.pd1.20000640000175000017500000000052713570013207013031 0ustar skskNDIM= 1, IPS = 17, IRS = 6, ILP = 0 ICP = [1] NTST= 20, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 25, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 0.001 DS = 0.1, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 15, THL = {}, THU = {} UZR = {} auto/07p/demos/pd1/pd1.f900000640000175000017500000000406413570013207013045 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! pd1 : Time integration of a scalar nonlinear parabolic PDE !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) ! ! *Set the nonlinear term F(1)= PAR(1) * U(1) * ( 1. - U(1) ) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,X) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: X DOUBLE PRECISION pi pi=4*ATAN(1.d0) ! *Set the (constant) parameter PAR(1) = 1. ! *Set the actual width of the space interval [0,PAR(11)] PAR(11) = 10. ! *Set the initial data in the (scaled) interval [0,1] U(1) = SIN(pi*X) ! *Also set the space-derivative of the initial data ! *Note the scaling by 1/PAR(11) ! U(2) = pi * COS(pi*X)/PAR(11) ! *Set the diffusion constant PAR(15) = 0.1 END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! *Define the boundary conditions (Dirichlet, in this demo). FB(1)=U0(1) FB(2)=U1(1) END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/pd1/c.pd10000640000175000017500000000054213570013207012666 0ustar skskNDIM= 1, IPS = 16, IRS = 0, ILP = 0 ICP = [14] NTST= 10, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 50, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 0.001 DS = 0.01, DSMIN= 0.001, DSMAX= 0.05, IADS= 1 NPAR = 15, THL = {}, THU = {} UZSTOP = {14: 10.0} auto/07p/demos/pd1/pd1.auto0000640000175000017500000000062013570013207013411 0ustar sksk #============== # AUTO Demo pd1 #============== pgm = "pd1" print "\nDemo %s is started"%pgm print "\n%s : first run : time integration towards stationary state"%pgm r1 = run(e=pgm,c=pgm) save(r1,'1') print "\n%s : second run : continuation of stationary state"%pgm r2 = run(r1,IPS=17,ICP=[1],NTST=20,NMX=100,RL1=50,NPR=25,DS=0.1,DSMAX=0.5) save(r2,'2') print "\n***Clean the directory***" cl() auto/07p/demos/dd2/0000750000175000017500000000000013570013207012021 5ustar skskauto/07p/demos/dd2/clean.auto0000640000175000017500000000017113570013207013775 0ustar sksk #============== # AUTO Demo dd2 #============== print "\n***Clean the directory***" delete('dd2') delete('pd') clean() auto/07p/demos/dd2/dd2.auto0000640000175000017500000000102513570013207013363 0ustar sksk #============== # AUTO Demo dd2 #============== print "\nDemo dd2 is started" print "\ndd2 : first run : fixed point solution branches" r1 = run("dd2") save("dd2") print "\ndd2 : second run : a 2-parameter curve of period-doubling bifurcations" run(r1("PD1"),ICP=[1,2],ISW=2) save("pd") print "\ndd2 : third run : perform a period-doubling" r3 = run(r1("PD1"),ISW=-1) append("dd2") print "\ndd2 : fourth run : perform another period-doubling (period-4)" run(r3("PD1")) append("dd2") print "\n***Clean the directory***" clean() auto/07p/demos/dd2/c.dd2.20000640000175000017500000000063113570013207012777 0ustar skskparnames = {1: "p1", 2: "p2"} unames = {1: "u1", 2: "u2"} NDIM= 2, IPS = -1, IRS = 5, ILP = 0 ICP = ["p1", "p2"] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 2, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.02, DSMIN= 0.01, DSMAX= 0.1, IADS= 1 NPAR = 3, THL = {}, THU = {} UZR = {} auto/07p/demos/dd2/c.dd2.10000640000175000017500000000065713570013207013006 0ustar skskparnames = {1: "p1", 2: "p2"} unames = {1: "u1", 2: "u2"} NDIM= 2, IPS = -1, IRS = 0, ILP = 0 ICP = ["p1"] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.02, DSMIN= 0.01, DSMAX= 0.1, IADS= 1 NPAR = 3, THL = {}, THU = {} UZSTOP = {"p1": [0.0, 5.0]}, A1 = 5.0 auto/07p/demos/dd2/dd2.f900000640000175000017500000000317213570013207013016 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! dd2 : Basic computations for discrete dynamical systems !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) F(1)=PAR(1)*U(1)*(1-U(1)) - PAR(2)*U(1)*U(2) F(2)=(1-PAR(3))*U(2) + PAR(2)*U(1)*U(2) IF(IJAC.EQ.0)RETURN DFDU(1,1)=PAR(1)*(1-2*U(1))-PAR(2)*U(2) DFDU(1,2)=-PAR(2)*U(1) DFDU(2,1)=PAR(2)*U(2) DFDU(2,2)=1-PAR(3) + PAR(2)*U(1) IF(IJAC.EQ.1)RETURN DFDP(1,1)=U(1)*(1-U(1)) DFDP(2,1)=0.0 DFDP(1,2)=-U(1)*U(2) DFDP(2,2)= U(1)*U(2) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T PAR(1)=0.0 PAR(2)=0.2 PAR(3)=0.1 U(1)=0.0 U(2)=0.0 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/dd2/autorc0000750000175000017500000001412113570013207013243 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"u1": "$u_1$", "u2": "$u_2$", "p1": "$p_1$", "p2": "$p_2$"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. #bifurcation_x = [0] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ["u1"] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/dd2/c.dd20000640000175000017500000000065713570013207012647 0ustar skskparnames = {1: "p1", 2: "p2"} unames = {1: "u1", 2: "u2"} NDIM= 2, IPS = -1, IRS = 0, ILP = 0 ICP = ["p1"] NTST= 10, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 100, NPR= 100, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 1 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.02, DSMIN= 0.01, DSMAX= 0.1, IADS= 1 NPAR = 3, THL = {}, THU = {} UZSTOP = {"p1": [0.0, 5.0]}, A1 = 5.0 auto/07p/demos/r3b/0000750000175000017500000000000013570013207012036 5ustar skskauto/07p/demos/r3b/V1b.auto0000640000175000017500000000125613570013207013365 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.V1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" V1 = loadbd('V1') flq = run(V1(12),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=1e-5) print "\n*** Time integration using continuation***" startV1b = run(startman,e='man',c='man.V1b.0',sv='startV1b') print "\n*** Compute the unstable manifold***" V1b = run(startV1b,c='man.V1b.1') save(rl(V1b),'V1b') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/c.man.H1a.20000640000175000017500000000060313570013207013525 0ustar skskNDIM= 6, IPS = 4, IRS = 6, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 2000, NPR= 50, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.man.H1a.00000640000175000017500000000064513570013207013531 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 400, NPR= 900, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 1e-05, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {21: [-0.5, -0.25, 0.0, 0.25, 0.5]} auto/07p/demos/r3b/c.r3b.flq.20000640000175000017500000000077413570013207013622 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'rho', 6: 'eps'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 12, IPS = 4, IRS = 1, ILP = 0 ICP = ['lambda', 'fm', 'rho'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=12, NINT= 2 NMX= 30, NPR= 500, MXBF= 5, IID = 3, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-05, DSMAX= 100.0, IADS= 1 NPAR = 16, THL = {'PERIOD': 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/data.py0000640000175000017500000000153113570013207013322 0ustar skskfrom AUTOclui import * def get(solution, eps=1e-3): #construct a new constant solution based on the flq solution PAR = solution.PAR PAR['eps'] = eps u = [] s0 = solution(0) for i in range(6): u.append(s0[i]+eps*s0[i+6]) p = {2:PAR(2),3:PAR(3),6:PAR(6),12:0} # init PAR(21:23) to u[:3] for i in range(3): p[21+i] = u[i] # init PAR(25:30) to USTART and PAR(31:36) to VSTART for i in range(12): p[25+i] = s0[i] return load(u,PAR=p) def create(sfile='flq',label=2): solution = loadbd(s=sfile)(label) save(get(solution,eps),'startman') # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 2: create(sys.argv[1], int(sys.argv[2])) elif len(sys.argv) > 1: create(sys.argv[1]) else: create() auto/07p/demos/r3b/H1a.auto0000640000175000017500000000151513570013207013344 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.H1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" H1 = loadbd('H1') flq = run(H1(7),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=-1e-3) print "\n*** Time integration using continuation***" startH1a = run(startman,e='man',c='man.H1a.0',sv='startH1a') print "\n*** Compute part of the unstable manifold***" startUZs = startH1a('UZ') startUZ = startUZs[0] for s in startUZs: # find minimum if abs(s.PAR(21)) < abs(startUZ.PAR(21)): startUZ = s H1a = run(startUZ,c='man.H1a.1') save(rl(H1a),'H1a') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/H1c.auto0000640000175000017500000000126713570013207013352 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.H1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" H1 = loadbd('H1') flq = run(H1(68),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=-1e-2) print "\n*** Time integration using continuation***" startH1c = run(startman,e='man',c='man.H1c.0',sv='startH1c') print "\n*** Compute part of the unstable manifold***" H1c = run(startH1c,c='man.H1c.1') save(rl(H1c),'H1c') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/c.r3b.V10000640000175000017500000000106213570013207013155 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'ev1', 6: 'ev2', 7: 'ev3', 16: 'y'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 6, IPS = 2, IRS = 13, ILP = 0 ICP = ['lambda', 'PERIOD', 'E', 'fm'] NTST= 50, NCOL= 4, IAD = 3, ISP = 3, ISW =-1, IPLT=15, NBC= 0, NINT= 0 NMX= 200, NPR= 1, MXBF= -5, IID = 2, ITMX= 10, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-05 DS = 0.05, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {'E': 0.23} LAB = 1, TY = 'HB6' auto/07p/demos/r3b/c.man.V1b.20000640000175000017500000000060313570013207013544 0ustar skskNDIM= 6, IPS = 4, IRS = 17, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 4500, NPR= 500, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/r3bplaut04.rc0000750000175000017500000001002613570013207014266 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and animating the solution change. # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Draw Reference Plane = Yes Orbit Animation = No Satellite Animation = No Draw Primaries = Yes Draw Libration Points = Yes Normalize Data = No Draw Background = No # Initialize the default coordinate axes: # 0 --- None, # 1 --- at origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 0 # Draw Scale on the Axes Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style: # 0 --- LINES, # 1 --- TUBES, # 2 --- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 4 Y Axis Bifurcation = 5 Z Axis Bifurcation = 6 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 Number of Period Animated = 1 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 1.0 # Background transparency: Background Transparency = 0.0 # Disk transparency # IF you turn Disk From File to "Yes", you should change the transparency there. Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 large primary Color = 0.0, 1.0, 0.0 large primary tail Color = 0.0, 1.0, 1.0 small primary Color = 0.0, 0.0, 1.0 small primary tail Color = 0.5, 0.5, 0.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # Stable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Set the radius of the satellite, large primary, and small primary: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Satellite Radius = 1.0 Large Primary Radius = 3.0 Small Primary Radius = 2.0 Libration Point Size = 0.5 # Set the maximum and minimum satellite animation speed: Sat Max Animation Speed = 100 Sat Min Animation Speed = 0 # Set the maximum and minimum orbit-change animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3DSol = Yes auto/07p/demos/r3b/c.man.H1b.30000640000175000017500000000060313570013207013527 0ustar skskNDIM= 6, IPS = 4, IRS = 15, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 1000, NPR= 500, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.man.V1a.00000640000175000017500000000061313570013207013542 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 800, NPR= 800, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 1.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {23: 0.0} auto/07p/demos/r3b/clean.auto0000640000175000017500000000071313570013207014014 0ustar sksk #========================================== # Remove data files that can be regenerated #========================================== print "\n***Clean the directory***" for f in ['L1', 'H1', 'V1', 'H1a', 'H1b', 'H1c', 'V1a', 'V1b', 'L1a', 'L1a2', 'startH1a', 'startH1b', 'startH1c', 'startV1a', 'startV1b', 'startL1a', 'ext', 'flq', 'start', 'startman', 'hetH1a', 'het1H1b', 'het2H1a', 'het2H1b', 'hetV1b']: dl(f) rm -f man.dat *.pyc cl() auto/07p/demos/r3b/r3b.auto0000640000175000017500000000071613570013207013423 0ustar sksk #============== # AUTO Demo r3b #============== # mass ratio mu = 0.063 print "\n***Compute libration points" r1=run('r3b',UZR={'mu':mu}) import compute_lps compute_lps.write_lagrange(r1) print "\n***Lagrange family L1***" L1=run(r1('UZ7'),c='r3b.L1') save('L1') print "\n***Halo family H1***" run(L1('BP1'),c='r3b.H1') save('H1') print "\n***Vertical family V1***" run(r1('UZ7'),e='r3b',c='r3b.V1') save('V1') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/c.man.H1b.20000640000175000017500000000060313570013207013526 0ustar skskNDIM= 6, IPS = 4, IRS = 16, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 4000, NPR= 500, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/H1b.auto0000640000175000017500000000125613570013207013347 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.H1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" H1 = loadbd('H1') flq = run(H1(3),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=-1e-5) print "\n*** Time integration using continuation***" startH1b = run(startman,e='man',c='man.H1b.0',sv='startH1b') print "\n*** Compute the unstable manifold***" H1b = run(startH1b,c='man.H1b.1') save(rl(H1b),'H1b') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/r3b.f900000640000175000017500000001360113570013207013046 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! r3b : The Restricted 3-Body Problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION x,y,z,xp,yp,zp,lambda,mu,dE,dM,mc,dE3,dM3,dE5,dM5 DOUBLE PRECISION dEx,dEy,dEz,cx,cy,cz,dx,dy,dz,ex,ey,ez,vx,vy,vz DOUBLE PRECISION vxp,vyp,vzp,dMx,dMy,dMz x = U(1) y = U(2) z = U(3) xp = U(4) yp = U(5) zp = U(6) lambda = PAR(1) mu = PAR(2) dE = SQRT((x+mu)**2 + y**2 + z**2) dM = SQRT( (x-1+mu)**2 + y**2 + z**2 ) mc = 1 - mu dE3 = 1/dE**3 dM3 = 1/dM**3 F(1)= xp F(2)= yp F(3)= zp F(4)= 2*yp + x - mc*dE3*(x+mu) - mu*dM3*(x-1+mu) + lambda*xp F(5)=-2*xp + y - mc*dE3*y - mu*dM3*y + lambda*yp F(6)= - mc*dE3*z - mu*dM3*z + lambda*zp IF(NDIM==6)RETURN ! Set up the linearized equations dE5 = 1/dE**5 dM5 = 1/dM**5 dEx = -3*(x+mu)*dE5 dEy = -3*y*dE5 dEz = -3*z*dE5 dMx = -3*(x-1+mu)*dM5 dMy = -3*y*dM5 dMz = -3*z*dM5 cx = 1 - mc*dE3 - mc*(x+mu)*dEx - mu*dM3 - mu*(x-1+mu)*dMx cy = -mc*(x+mu)*dEy - mu*(x-1+mu)*dMy cz = -mc*(x+mu)*dEz - mu*(x-1+mu)*dMz dx = -mc*y*dEx - mu*y*dMx dy = 1 - mc*dE3 - mc*y*dEy - mu*dM3 - mu*y*dMy dz = -mc*y*dEz - mu*y*dMz ex = -mc*z*dEx - mu*z*dMx ey = -mc*z*dEy - mu*z*dMy ez = -mc*dE3 - mc*z*dEz - mu*dM3 - mu*z*dMz vx = U(7) vy = U(8) vz = U(9) vxp= U(10) vyp= U(11) vzp= U(12) F(7) = vxp F(8) = vyp F(9) = vzp F(10)= cx*vx + cy*vy + cz*vz + 2*vyp F(11)= dx*vx + dy*vy + dz*vz - 2*vxp F(12)= ex*vx + ey*vy + ez*vz ! Scale F = F * PAR(11) END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR,T) !---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION lambda,mu lambda = 0. mu = 0. PAR(:2) = (/ lambda, mu /) U = (/ 0.14107D0, 0.99D0, 0D0, 0D0, 0D0, 0D0 /) END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC), DBC(NBC,*) DOUBLE PRECISION fm ! Periodicity boundary conditions FB(1:6) = U0(1:6) - U1(1:6) ! Floquet eigenvalue/vector boundary relation fm = PAR(4) FB(7:12) = U1(7:12) - fm*U0(7:12) END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT), DINT(NINT,*) ! Integral phase condition FI(1) = DOT_PRODUCT(U(1:6),UPOLD(1:6)) ! Integral Floquet eigenfunction normalization FI(2) = -PAR(5)+DOT_PRODUCT(U(7:12),U(7:12)) END SUBROUTINE ICND !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION GETP,mu,x,y,z,xp,yp,zp,d1,d2,EU,E,realfm,imagfm,ncmplx DOUBLE PRECISION routh,pi INTEGER i,j mu = PAR(2) x = U(1) y = U(2) z = U(3) xp = U(4) yp = U(5) zp = U(6) d1 = SQRT((x+mu)**2 + y**2 + z**2) d2 = SQRT( (x-1+mu)**2 + y**2 + z**2 ) EU = (x**2 + y**2)/2 + (1-mu)/d1 + mu/d2 E = (xp**2 + yp**2 + zp**2)/2 - EU - mu*(1-mu)/2 PAR(3) = E IF(NDIM==12)RETURN PAR(16)=y ! Maximum real Floquet multiplier: PAR(4) ! If there are two real multipliers with absolute value > 1 ! then PAR(4)=0. PAR(4) = 0 ncmplx = 0 DO i=1,NDIM imagfm = GETP('EIG',I*2,U) IF (imagfm == 0) THEN realfm = GETP('EIG',I*2-1,U) IF (ABS(realfm) > ABS(PAR(4))) THEN PAR(4) = realfm ENDIF ELSE ncmplx = ncmplx + 1 ENDIF ENDDO IF (ncmplx == 0) THEN ! no complex multipliers mean 6 real multipliers: 1,1, two with ! absolute value greater than 1 and two less than one PAR(4) = 0 ELSEIF (ncmplx == 4) THEN ! all non-trivial multipliers complex: must be 1 without rounding ! errors PAR(4) = 1 ENDIF ! Put purely imaginary eigenvalues in PAR(5), PAR(6) and PAR(7) j=1 PAR(5) = 0 PAR(6) = 0 PAR(7) = 0 pi = 4*ATAN(1d0) DO i=1,NDIM imagfm = GETP('EIG',I*2,U) IF (imagfm > 1d-5) THEN realfm = GETP('EIG',I*2-1,U) routh = 0.5d0*(1d0-sqrt(69d0)/9d0) ! above Routh's ratio we have one period for L4/L5, otherwise 3. IF (ABS(realfm) < EPSILON(1d0) .OR. mu < routh .OR. ABS(y) < 0.1) THEN PAR(4+j) = 2*pi/imagfm j=j+1 ENDIF ENDIF ENDDO END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/r3b/c.man.H1c.10000640000175000017500000000060313570013207013526 0ustar skskNDIM= 6, IPS = 4, IRS = 7, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 500, NPR= 5, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.man.L1a.00000640000175000017500000000066413570013207013536 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 700, NPR= 700, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 1.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {22: 0.0, 21: [-0.25, 0.25]} UZSTOP = {21: 0.75} auto/07p/demos/r3b/L1aX.auto0000640000175000017500000000053513570013207013501 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ auto('L1a.auto') print "\n*** 'Wind up' an orbit on the unstable manifold***" startL1a = loadbd('startL1a') L1a2 = run(startL1a,c='man.L1a.2') save(rl(L1a2),'L1a2') print "\n***Clean the directory***" cl() auto/07p/demos/r3b/c.man.H1a.10000640000175000017500000000060313570013207013524 0ustar skskNDIM= 6, IPS = 4, IRS = 4, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 90, NPR= 1, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/man.f900000640000175000017500000000610013570013207013127 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! r3b : The Restricted 3-Body Problem !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM), DFDU(NDIM,*), DFDP(NDIM,*) DOUBLE PRECISION x,y,z,xp,yp,zp,rmu,T,dE,dM,rmc,dE3,dM3 x = U(1) y = U(2) z = U(3) xp = U(4) yp = U(5) zp = U(6) rmu = PAR(2) T = PAR(11) dE = SQRT((x+rmu)**2 + y**2 + z**2) dM = SQRT( (x-1+rmu)**2 + y**2 + z**2 ) rmc = 1 - rmu dE3 = 1./dE**3 dM3 = 1./dM**3 F(1)= xp F(2)= yp F(3)= zp F(4)= 2*yp + x - rmc*dE3*(x+rmu) - rmu*dM3*(x-1+rmu) F(5)=-2*xp + y - rmc*dE3*y - rmu*dM3*y F(6)= - rmc*dE3*z - rmu*dM3*z F = T*F END SUBROUTINE FUNC !---------------------------------------------------------------------- SUBROUTINE STPNT END SUBROUTINE STPNT !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC), DBC(NBC,*) DOUBLE PRECISION eps,x,y,z,xp,yp,zp,rmu,dE,dM,U,E INTEGER m eps=PAR(6) ! PAR(25:30) are USTART and PAR(31:36) are VSTART m=MIN(NBC,NDIM) FB(1:m) = U0(1:m) - ( PAR(25:25+m-1) + eps*PAR(31:31+m-1) ) FB(NDIM+1:NDIM+3) = U1(1:3) - PAR(21:23) x = U1(1) y = U1(2) z = U1(3) xp = U1(4) yp = U1(5) zp = U1(6) rmu = PAR(2) dE = SQRT((x+rmu)**2 + y**2 + z**2) dM = SQRT( (x-1+rmu)**2 + y**2 + z**2 ) U = (x**2 + y**2)/2 + (1-rmu)/dE + rmu/dM E = (xp**2 + yp**2 + zp**2)/2 - U - rmu*(1-rmu)/2 FB(NDIM+4) = PAR(3) - E END SUBROUTINE BCND !---------------------------------------------------------------------- SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) !---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT), DINT(NINT,*) DOUBLE PRECISION FF(NDIM),DFDU(1),DFDP(1) CALL FUNC(NDIM,U,ICP,PAR,0,FF,DFDU,DFDP) FI(1)=SQRT(FF(1)**2 + FF(2)**2 + FF(3)**2 ) - PAR(12) END SUBROUTINE ICND !---------------------------------------------------------------------- SUBROUTINE FOPT END SUBROUTINE FOPT !---------------------------------------------------------------------- SUBROUTINE PVLS END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/demos/r3b/V1a.auto0000640000175000017500000000125613570013207013364 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.V1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" V1 = loadbd('V1') flq = run(V1(8),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=-1e-5) print "\n*** Time integration using continuation***" startV1a = run(startman,e='man',c='man.V1a.0',sv='startV1a') print "\n*** Compute the unstable manifold***" V1a = run(startV1a,c='man.V1a.1') save(rl(V1a),'V1a') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/c.r3b.H10000640000175000017500000000103313570013207013135 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'ev1', 6: 'ev2', 7: 'ev3', 16: 'y'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 6, IPS = 2, IRS = 5, ILP = 0 ICP = ['lambda', 'PERIOD', 'E', 'fm'] NTST= 50, NCOL= 4, IAD = 3, ISP = 3, ISW =-1, IPLT=15, NBC= 0, NINT= 0 NMX= 137, NPR= 2, MXBF= -5, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-05 DS = 0.05, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZR = {} LAB = 1 auto/07p/demos/r3b/c.man.H1b.00000640000175000017500000000064513570013207013532 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 400, NPR= 900, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.01, DSMIN= 1e-05, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {21: [-0.5, -0.25, 0.0, 0.25, 0.5]} auto/07p/demos/r3b/c.r3b.flq.40000640000175000017500000000077713570013207013627 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'rho', 6: 'eps'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 12, IPS = 4, IRS = 4, ILP = 0 ICP = ['fm', 'lambda', 'PERIOD'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC=12, NINT= 2 NMX= 100, NPR= 1, MXBF= 5, IID = 2, ITMX= 9, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 1e-05 DS = -0.5, DSMIN= 1e-05, DSMAX= 50.0, IADS= 1 NPAR = 16, THL = {'PERIOD': 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.man.V1a.10000640000175000017500000000060313570013207013542 0ustar skskNDIM= 6, IPS = 4, IRS = 13, ILP = 0 ICP = [6, 11, 12, 3, 21, 22] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 500, NPR= 5, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/plaut04.rc0000640000175000017500000001031213570013207013653 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Use r3b mode R3B = Yes # Initialize the default options: Draw Reference Plane = Yes Draw Primaries = Yes Draw Libration Points = Yes Highlight Orbit = No Orbit Animation = No Normalize Data = No Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 0 # Draw Scale: Draw Scale = No # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 0 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 0 #Set the window width and height: Window Width = 1000 Window Height = 1000 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 1 Y Axis Solution = 2 Z Axis Solution = 3 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 1 Z Axis Bifurcation = 2 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -2 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0.8, 0.8, 1. # Background transparency: Background Transparency = 0.0 # Disk transparency # IF you turn Disk From File to "Yes", you should change the transparency there. Disk Transparency = 0.7 # Read Disk From File Disk From File = No # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Color of the satellite, large primary, and small primary in animation: satellite Color = 1.0, 0.0, 0.0 large primary Color = 0.0, 1.0, 0.0 large primary tail Color = 0.0, 1.0, 1.0 small primary Color = 0.0, 0.0, 1.0 small primary tail Color = 0.5, 0.5, 0.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UNStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 0.0, 0.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 Large Primary Radius = 3.0 Small Primary Radius = 2.0 Libration Point Size = 0.5 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = Yes #3DBif = No #3DSol = Yes # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/r3b/c.man.V1b.10000640000175000017500000000060313570013207013543 0ustar skskNDIM= 6, IPS = 4, IRS = 9, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 112, NPR= 2, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.5, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.man.V1b.00000640000175000017500000000061313570013207013543 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 800, NPR= 800, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 1.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {23: 0.0} auto/07p/demos/r3b/c.man.H1c.20000640000175000017500000000060313570013207013527 0ustar skskNDIM= 6, IPS = 4, IRS = 6, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 500, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 2000, NPR= 50, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 0.5, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/compute_lps.py0000640000175000017500000000200013570013207014733 0ustar sksk# This script computes the initial circle of solutions for mu=0 # as well as the bifurcating branches which give us the # Lagrange points. from AUTOclui import * def write_lagrange(r): # Print all Lagrange points import math ltouz = {1: 7, 2: 8, 3: 6, 4: 2, 5: 4} for lnumber in (1, 2, 3, 4, 5): print("L"+str(lnumber)+":") uzlabel = 'UZ'+str(ltouz[lnumber]) x = r(uzlabel) label = x["LAB"] for parnumber in (5, 6, 7): period = x.PAR(parnumber) if period != 0: print("Label: %2d (%s, TY='HB%s'); imaginary part: %.11f; " "period: %.11f"% (label, uzlabel, parnumber, 2*math.pi/period, period)) def compute(m=0.063): # m is the desired mass ratio r1 = run('r3b', UZR={2:m}) write_lagrange(r1) # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: compute(float(sys.argv[1])) else: compute() auto/07p/demos/r3b/autorc0000640000175000017500000001430013570013207013255 0ustar sksk[AUTO_plotter] ############################ # active settings ############################ # Variable name to use instead of 't' for solutions. solution_indepvarname = "x" # A dictionary mapping names to axis labels. labelnames = {"x": "$x$", "y": "$y$", "z": "$z$", "lambda": "$\lambda$", "mu": "$\mu$", "E": "$E$", "rho": "$\rho$", "eps": "$\varepsilon$"} # The type of the plot, either "solution" or "bifurcation" type = "bifurcation" # The column to plot along the X-axis for bifurcation diagrams. bifurcation_x = ["x"] # The column to plot along the Y-axis for bifurcation diagrams. bifurcation_y = ["y"] # The column to plot along the Z-axis for bifurcation diagrams. bifurcation_z = None # The column to plot along the X-axis for solutions. solution_x = ["x"] # The column to plot along the Y-axis for solutions. solution_y = ["y"] # The column to plot along the Z-axis for solutions. solution_z = None # A list of colors to use for multiple plots. #color_list = "red blue green" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "branch" # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": "yes", "use_labels": 0, "use_symbols": 1, "stability": 0} #d2 = {"grid": "yes", "use_labels": 1, "use_symbols": 1, "stability": 0} # similarly you can redefine d0, d2, d3, d4. # The font size for the x-axis label. #xlabel_fontsize = 16 # The font size for the y-axis label. #ylabel_fontsize = 16 # The font size for the z-axis label. #zlabel_fontsize = 16 # Azimuth of the axes in 3D plots, in degrees. azimuth = -120 # Elevation of the axes in 3D plots, in degrees. elevation = 25 # Whether to use letters (True) or symbols (False) for special points. letter_symbols = False ############################ # inactive settings ############################ # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/demos/r3b/c.r3b.flq0000640000175000017500000000101613570013207013450 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'rho', 6: 'eps'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 12, IPS = 4, IRS = 1, ILP = 0 ICP = ['lambda', 'fm', 'rho'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC=12, NINT= 2 NMX= 30, NPR= 500, MXBF= 5, IID = 3, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-05, DSMAX= 100.0, IADS= 1 NPAR = 16, THL = {'PERIOD': 0.0}, THU = {} UZSTOP = {'rho': 1.0} LAB=1 auto/07p/demos/r3b/L1a.auto0000640000175000017500000000125613570013207013352 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ import os,data if not os.path.exists('s.L1'): auto('r3b.auto') print "\n*** Compute the Floquet eigenfunction***" L1 = loadbd('L1') flq = run(L1(3),c='r3b.flq',sv='flq') print "\n*** Extract data for the selected orbit from s.flq***" startman = data.get(flq('UZ1'),eps=-1e-5) print "\n*** Time integration using continuation***" startL1a = run(startman,e='man',c='man.L1a.0',sv='startL1a') print "\n*** Compute the unstable manifold***" L1a = run(startL1a,c='man.L1a.1') save(rl(L1a),'L1a') print "\n***Clean the directory***" clean() auto/07p/demos/r3b/c.man.H1c.00000640000175000017500000000060413570013207013526 0ustar skskNDIM= 6, IPS = 4, IRS = 1, ILP = 0 ICP = [11, 12, 3, 21, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 700, NPR= 100, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.1, DSMIN= 1e-05, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/c.r3b.L10000640000175000017500000000106313570013207013144 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'ev1', 6: 'ev2', 7: 'ev3', 16: 'y'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 6, IPS = 2, IRS = 13, ILP = 0 ICP = ['lambda', 'PERIOD', 'E', 'fm'] NTST= 50, NCOL= 4, IAD = 3, ISP = 3, ISW =-1, IPLT=15, NBC= 0, NINT= 0 NMX= 200, NPR= 1, MXBF= -5, IID = 2, ITMX= 10, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-08, EPSU = 1e-08, EPSS = 1e-05 DS = 0.05, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {'E': -1.14} LAB = 1, TY = 'HB5' auto/07p/demos/r3b/c.r3b0000640000175000017500000000110413570013207012665 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'ev1', 6: 'ev2', 7: 'ev3', 16: 'y'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 6, IPS = 1, IRS = 0, ILP = 0 ICP = ['mu', 'ev1', 'ev2', 'ev3'] NTST= 25, NCOL= 4, IAD = 3, ISP = 3, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 2000, NPR= 2000, MXBF= -3, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.0001, DSMIN=0.0001, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {'PERIOD': 0.0}, THU = {} UZSTOP = {'y':0.991, 'mu':[-0.1,1.1]} UZR = {'mu': 0.063} auto/07p/demos/r3b/c.r3b.flq.30000640000175000017500000000101013570013207013603 0ustar skskparnames = {1: 'lambda', 2: 'mu', 3: 'E', 4: 'fm', 5: 'rho', 6: 'eps'} unames = {1: 'x', 2: 'y', 3: 'z', 4: 'xp', 5: 'yp', 6: 'zp'} NDIM= 12, IPS = 4, IRS = 2, ILP = 0 ICP = ['lambda', 'fm', 'rho'] NTST= 50, NCOL= 4, IAD = 3, ISP = 2, ISW =-1, IPLT= 0, NBC=12, NINT= 2 NMX= 30, NPR= 500, MXBF= 5, IID = 3, ITMX= 9, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS = 1e-05 DS = 0.01, DSMIN= 1e-05, DSMAX= 100.0, IADS= 1 NPAR = 16, THL = {'PERIOD': 0.0}, THU = {} UZSTOP = {'rho': 1.0} auto/07p/demos/r3b/c.man.H1b.10000640000175000017500000000062313570013207013527 0ustar skskNDIM= 6, IPS = 4, IRS = 4, ILP = 0 ICP = [6, 11, 12, 3, 22, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 90, NPR= 1, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = -0.1, DSMIN= 1e-05, DSMAX= 0.1, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZSTOP = {6: [0.1, -0.1]} auto/07p/demos/r3b/V1bX.auto0000640000175000017500000000055213570013207013513 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ auto('V1b.auto') print "\n*** Locate a connecting orbit on the unstable manifold***" startV1b = loadbd('startV1b') hetV1b = run(startV1b,c='man.V1b.2') save(rl(hetV1b),'hetV1b') print "\n***Clean the directory***" cl() auto/07p/demos/r3b/c.man.L1a.20000640000175000017500000000060313570013207013531 0ustar skskNDIM= 6, IPS = 4, IRS = 10, ILP = 0 ICP = [6, 11, 12, 3, 21, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 500, NPR= 5, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 1e-05, DSMAX= 0.05, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/README0000640000175000017500000004320013570013207012716 0ustar sksk Computation of Periodic Solutions of the CR3BP ---------------------------------------------- Running the Python script r3b.auto will generate the families of periodic solutions L1, H1, and V1, for the case of the mass-ratio mu=0.063 : auto r3b.auto | auto('r3b.auto') where as in the following examples, the left hand side command can be used at the shell prompt, and the right hand side command at the Python CLUI prompt. Note that the commands starting with @ work in both interfaces, but cannot be used in the expert scripts with a .py suffix. For example, the data generated for the Lyapunov family L1 will consist of b.L1 - the bifurcation diagram data s.L1 - a selection of periodic orbits d.L1 - diagnostic data, including Floquet multipliers The necessary labeled starting solutions are first computed and stored in the file s.start. Each starting solution is an equilibrium ("libration point"), and its data also contains the period of a bifurcating family of periodic orbits. The Table below shows the label of each of the starting solutions in s.start, indicating which libration point it corresponds to, and which family of periodic orbits it will generate: Label Libration Pt. Family 1 L1 L1 2 L1 V1 3 L2 L2 4 L2 V2 5 L3 L3 6 L3 V3 7 L4 V4 8 L5 V5 Note (by looking at the constant-files c.r3b.*) that actually only the starting solutions labeled 1 and 2 are used in the current calculations, as executed by the Python script. Starting solution for other values of mu can be generated using the script compute_lps.py, for instance by running autox compute_lps.py 0.05 | import compute_lps | compute_lps.compute(0.05) After that, it is necessary to run r3b.auto again to regenerate the families. The demos L1a, H1a, H1b, H1c, V1a, V1b can be run subsequent to the r3b demo to compute 2D unstable manifolds of selected periodic orbits that belong to the L1, V1, and H1 families. Computing Unstable Manifolds of Periodic Orbits in the CR3BP ------------------------------------------------------------ Instructions for computing 2-d unstable manifolds of periodic orbits in the Circular Restricted 3-Body Problem (CR3BP) using AUTO-07p. The instructions below are for the Halo family L1 in AUTO demo L1a. =================================================================== Instructions for computing 2-d unstable manifolds of other periodic orbits in the CR3BP are similar (Demos H1a, H1b, H1c, V1a, V1b), and are given after these instructions. Select a labeled solution which has exactly one Floquet multiplier with absolute value greater than 1. (Floquet multipliers can be found in the file d.L1 generated by demo r3b.) Enter the label of the periodic solution in the file L1a.auto at label= in L1a.auto. Also enter the size of the initial step into the direction of the unstable manifold there at step= Note that representative values of these three quantities have already been entered there. Now run the Python script L1a.auto: auto L1a.auto | auto('L1a.auto') This will run r3b.auto as above if this was not already done. Through various computational steps the execution of the Python script will result in AUTO files b.L1a, s.L1a, and d.L1a, where the orbits in s.L1a constitute the manifold, which can be viewed with the graphics program plaut04 or r3bplaut04 : @pl L1a or @r3b L1a | plot3('L1a',r3b=True) The various steps executed by the Python commands in the script file L1a.auto are explained below, however, showing instead the equivalent Linux versions of these AUTO commands. The Python script L1aX.auto in L1a does the same as L1a.auto, but with additional calculations that generate additional AUTO data files, e.g., to detect heteroclinic connections. Some of these additional runs take quite a bit of CPU time and generate big data files. ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Detailed AUTO shell and Python commands for the L1a demo. --------------------------------------------------------- mkdir r3b | mkdir r3b cd r3b | cd r3b @dm r3b | demo('r3b') Copy the r3b demo to the local directory r3b. auto r3b.auto | auto('r3b.auto') Generate the CR3BP AUTO data files. autox ext.py L1 3 -1e-5 | import ext | sext=ext.get('L1',3,-1e-5) Convert the data for a selected labeled solution from s.L1, adding a zero adjoint variable. The solution label is 3, and the initial step size into the unstable manifold is -1e-5. The ext.py script looks for the relevant Floquet multiplier in d.L1. The converted solution will be written in the file s.ext or stored in sext. @r flq ext | flq=run(sext,c='flq',e='flq') Compute the Floquet eigenfunction. Free scalar variables in this run (see c.flq) are: PAR(1) = unfolding parameter PAR(4) = multiplier PAR(5) = norm of eigenfunction If this run is successful then PAR(5) should become nonzero, in fact, PAR(5) should reach the value 1. If the run is not successful then see REMARK 1 below. @sv flq | save(flq,'flq') Save the results in b.flq, s.flq, and d.flq . autox data.py | import data | startman=data.get(flq('UZ1')) Extract data for a selected orbit from s.flq. These data are for both the orbit and its Floquet eigenfunction. It is assumed that s.flq contains only one labeled solution, with label 2. If you did the "optional" computation (see Remark 2) then you may need to change the label of the restart solution: autox data.py flq n | startman=data.get(flq(n)) where n is the different label number. The extracted data may be saved in a file called s.startman, which contains a new starting solution that can be used as a base for the manifold computations. The orbit coordinates are at "time zero", and the Floquet eigenfunction are saved at PAR(25:30) and PAR(31:36), respectively. @R man L1a.0 startman | startL1a = run(startman,e='man',c='man.L1a.0') This step does a time integration using continuation in the "period" T, i.e., PAR(11), which here is the "integration time". The labeled solutions from this run all correspond to the same orbit, except that the orbit gets longer and longer. The starting point of the orbit is the point on the periodic orbit at "time zero" plus a small distance (epsilon) into the direction of the unstable manifold. In AUTO, epsilon corresponds to PAR(6). This parameter epsilon is initialized in the file flq.dat . (The sign of epsilon is significant!) The parameters in this run (see c.man.L1a.0) are: PAR(3) = energy PAR(11) = integration time PAR(12) = length of the orbit PAR(21) = x-coord at end point PAR(22) = y-coord at end point PAR(23) = z-coord at end point @sv startL1a | save(startL1a,'startL1a') Save the results in b.startL1a, s.startL1a, and d.startL1a . (*) @R man L1a.1 startL1a | L1a=run(startL1a,c='man.L1a.1') Look at c.man.L1a.1 to see from which label in s.startL1a this run starts. In this run the y-coordinate of the end point (PAR(22)) is kept fixed, while the "period" (PAR(11)), i.e., the total integration time, is allowed to vary, as is the value of epsilon, i.e., PAR(6). Note that if PAR(6) becomes "large" then the manifold may no longer be accurate. The free parameters in this run are: PAR(3) = energy PAR(6) = "starting distance" PAR(11) = integration time PAR(12) = length of the orbit PAR(21) = x-coord at end point PAR(23) = z-coord at end point @sv L1a | save(L1a,'L1a') Save the results in b.L1a, s.L1a, and d.L1a . @R man L1a.2 startL1a | L1a2=run(startL1a,c='man.L1a.2') Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the orbit winding around the selected periodic L1 orbit. @sv L1a2 | save(L1a2,'L1a2') Save the results in b.L1a2, s.L1a2, and d.L1a2 . ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Use auto clean.auto | auto('clean.auto') to remove all generated files. ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ----------------------------REMARK 1---------------------------------------- ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- If the run to compute the Floquet eigenfunction is not successful, i.e., if PAR(5) does not become nonzero, then try to compute the Floquet eigenfunction in more stages, as follows: Give the label of the selected solution, and a value that is smaller than the associated Floquet multiplier (magnitude greater than 1) . autox ext.py L1 3 -1e-5 2000 | import ext | sext=ext.get('L1',3,-1e-5,2000) @R flq 2 ext | flq=run(sext,c='flq.2',e='flq') Continue the approximate multiplier; If all goes well then the actual multiplier will be detected as a branch point (BP) with Label 2. Free scalar variables in this run are: PAR(1) = unfolding parameter PAR(4) = multiplier PAR(5) = norm of eigenfunction @sv flq | save(flq,'flq') @R flq 3 | flq=run(flq,e='flq',c='flq.3') Switch branches at the BP, thereby generating the nonzero Floquet eigenfunction. The free scalar variables are : PAR(1) = unfolding parameter PAR(4) = multiplier PAR(5) = norm of eigenfunction If all goes well then PAR(5) should become nonzero, and the corresponding solution should have Label 4. @sv flq | save(flq,'flq') ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- ----------------------------REMARK 2---------------------------------------- ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- One can also follow the orbit, its multiplier and eigenfunction, as follows: @R flq 4 | flq=run(flq,e='flq',c='flq.3') Free scalar variables in this run are PAR(1) = unfolding parameter PAR(4) = multiplier PAR(11) = period The norm, PAR(5), of the eigenfunction is fixed in this run. @sv flq | save(flq,'flq') ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- The instructions below are for the Halo family H1 in AUTO demo H1a. =================================================================== Follow the instructions for L1a above, where you replace L by H throughout, for instance you can run everything in one go using auto H1a.auto | auto('H1a.auto') or with the extra calculations: auto H1aX.auto | auto('H1aX.auto') The Floquet eigenfunction is now computed from label 7 with step size -1e-3. The detailed commands are likewise, except for the manifold calculations following (*) (at @sv startL1a): @R man H1a.1 startH1a | H1a=run(startH1a,e='man',c='man.H1a.1') Look at c.man.H1a.1 to see from which label in s.startH1a this run starts. In this run the x-coordinate of the end point (PAR(21)) is kept fixed, while the "period" (PAR(11)), i.e., the total integration time, is allowed to vary, as is the value of epsilon, i.e., PAR(6). Note that if PAR(6) becomes "large" then the manifold may no longer be accurate. The free parameters in this run are: PAR(3) = energy PAR(6) = "starting distance" PAR(11) = integration time PAR(12) = length of the orbit PAR(22) = y-coord at end point PAR(23) = z-coord at end point @sv H1a | save(H1a,'H1a') Save the results in b.H1a, s.H1a, and d.H1a . @R man H1a.2 startH1a | hetH1a=run(startH1a,e='man',c='man.H1a.2') Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of a connecting orbit. @sv hetH1a | save(hetH1a,'hetH1a') Save the results in b.hetH1a, s.hetH1a, and d.hetH1a . ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- The instructions below are for the Halo family H1 in AUTO demo H1b. =================================================================== Follow the instructions for L1a above, where you replace L by H, and a by b throughout; for instance you can run everything in one go using auto H1b.auto | auto('H1b.auto') or with the extra calculations: auto H1bX.auto | auto('H1bX.auto') The Floquet eigenfunction is now computed from label 3 with step size -1e-5. The detailed commands follow the ones for H1a above, except that there is one extra run: @R man H1b.3 startH1b | het2H1b=run(startH1b,e='man',c='man.H1b.3') Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of another connecting orbit. @sv het2H1b | save(het2H1b,'het2H1b') Save the results in b.het2H1b, s.het2H1b, and d.het2H1b . ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- The instructions below are for the Halo family H1 in AUTO demo H1c. =================================================================== Follow the instructions for L1a above, where you replace L by H, and a by c throughout; for instance you can run everything in one go using auto H1c.auto | auto('H1c.auto') The Floquet eigenfunction is now computed from label 68 with step size -1e-2. The detailed commands follow the ones for H1a above, except that the last run is left out, and so the H1cX.auto script is not necessary. ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- The instructions below are for the Halo family V1 in AUTO demo V1a. =================================================================== Follow the instructions for L1a above, where you replace L by V throughout, for instance you can run everything in one go using auto V1a.auto | auto('V1a.auto') The Floquet eigenfunction is now computed from label 8 with step size -1e-5. The detailed commands are likewise, except for the manifold calculations following (*) (at @sv startL1a): @R man V1a.1 startV1a | V1a=run(startV1a,e='man',c='man.V1a.1') Look at c.man.V1a.1 to see from which label in s.startV1a this run starts. In this run the z-coordinate of the end point (PAR(23)) is kept fixed, while the "period" (PAR(11)), i.e., the total integration time, is allowed to vary, as is the value of epsilon, i.e., PAR(6). Note that if PAR(6) becomes "large" then the manifold may no longer be accurate. The free parameters in this run are: PAR(3) = energy PAR(6) = "starting distance" PAR(11) = integration time PAR(12) = length of the orbit PAR(21) = x-coord at end point PAR(22) = y-coord at end point @sv V1a | save(V1a,'V1a') Save the results in b.V1a, s.V1a, and d.V1a . ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- The instructions below are for the Halo family V1 in AUTO demo V1b. =================================================================== Follow the instructions for L1a above, where you replace L by V, and a by b throughout; for instance you can run everything in one go using auto V1b.auto | auto('V1b.auto') or with the extra calculations: auto V1bX.auto | auto('V1bX.auto') The Floquet eigenfunction is now computed from label 12 with step size 1e-5. The detailed commands are likewise, except for the manifold calculations following (*) (at @sv startL1a): @R man V1b.1 startV1b | V1b=run(startV1b,e='man',c='man.V1b.1') Look at c.man.V1b.1 to see from which label in s.startV1b this run starts. In this run the x-coordinate of the end point (PAR(21)) is kept fixed, while the "period" (PAR(11)), i.e., the total integration time, is allowed to vary, as is the value of epsilon, i.e., PAR(6). Note that if PAR(6) becomes "large" then the manifold may no longer be accurate. The free parameters in this run are: PAR(3) = energy PAR(6) = "starting distance" PAR(11) = integration time PAR(12) = length of the orbit PAR(22) = y-coord at end point PAR(23) = z-coord at end point @sv V1b | save(V1b,'V1b') Save the results in b.V1b, s.V1b, and d.V1b . @R man V1b.2 startV1b | hetV1b=run(startV1b,e='man',c='man.V1b.2') Another run, starting from a longer initial orbit, which computes part of the manifold. The free parameters are the same as in the preceding run. This computation results in the detection of a connecting orbit. @sv hetV1b | save(hetV1b,'hetV1b') Save the results in b.hetV1b, s.hetV1b, and d.hetV1b . ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- auto/07p/demos/r3b/H1bX.auto0000640000175000017500000000077313570013207013502 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ auto('H1b.auto') print "\n*** Locate a connecting orbit on the unstable manifold ***" startH1b = loadbd('startH1b') het1H1b = run(startH1b,c='man.H1b.2') save(rl(het1H1b),'het1H1b') print "\n*** Locate another connecting orbit on the unstable manifold ***" het2H1b = run(startH1b,c='man.H1b.3') save(rl(het2H1b),'het2H1b') print "\n***Clean the directory***" cl() auto/07p/demos/r3b/c.man.L1a.10000640000175000017500000000060313570013207013530 0ustar skskNDIM= 6, IPS = 4, IRS = 8, ILP = 0 ICP = [6, 11, 12, 3, 21, 23] NTST= 200, NCOL= 4, IAD = 3, ISP = 0, ISW = 1, IPLT= 0, NBC=10, NINT= 1 NMX= 53, NPR= 1, MXBF= 5, IID = 3, ITMX= 8, ITNW= 7, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS =0.0001 DS = 0.05, DSMIN= 1e-05, DSMAX= 0.05, IADS= 1 NPAR = 16, THL = {21: 0.0, 22: 0.0, 23: 0.0}, THU = {} UZR = {} auto/07p/demos/r3b/H1aX.auto0000640000175000017500000000055213570013207013474 0ustar sksk #============================================ # AUTO Demo r3b: Computing unstable manifolds #============================================ auto('H1a.auto') print "\n*** Locate a connecting orbit on the unstable manifold***" startH1a = loadbd('startH1a') hetH1a = run(startH1a,c='man.H1a.2') save(rl(hetH1a),'hetH1a') print "\n***Clean the directory***" cl() auto/07p/demos/pla/0000750000175000017500000000000013570013207012124 5ustar skskauto/07p/demos/pla/pla.f900000640000175000017500000000501513570013207013222 0ustar sksk!------------------------------------------------------------ !------------------------------------------------------------ ! pla : Plant's Model of Bursting Nerve Cells !------------------------------------------------------------ !------------------------------------------------------------ SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION VI,VK,VL,VCa,gK,gL,Kp,Kc,rho,txT,zeta,gi,gP,gT DOUBLE PRECISION V,xT,xK,yI,c,a,b,Vs,am,ah,an,bm,bh,bn,si,sK DOUBLE PRECISION txK,tyI,zI,sT VI=30 VK=-75 VL=-40 VCa=140 gK=0.3 gL=0.003 Kp=0.5 Kc=0.0085 rho=0.0003 txT=235 zeta=1 gI=PAR(1) gP=PAR(2) gT=PAR(3) V =U(1) xT=U(2) xK=U(3) yI=U(4) c =U(5) a=127/(VI-VK) b=(115*VK+12*VI)/(VI-VK) Vs=a*V-b am=0.1*(50-Vs)/(DEXP((50-Vs)/10)-1) ah=0.07*DEXP((25-Vs)/20) an=0.01*(55-Vs)/(DEXP((55-Vs)/10)-1) bm=4*DEXP((25-Vs)/18) bh=1./(DEXP((55-Vs)/10)+1) bn=0.125*DEXP((45-Vs)/80) sI=am/(am+bm) sK=an/(an+bn) txK=12.5/(an+bn) tyI=12.5/(ah+bh) zI=ah/(ah+bh) sT=1./(DEXP(0.15*(-50-V))+1) F(1)= (gI*sI**3*yI + gT*xT) * (VI-V) & + (gK*xK**4 + gP*c/(Kp+c)) * (VK-V) & + gL * (VL-V) F(2)= (sT-xT) / (txT*zeta) F(3)= (sK-xK) / (txK*zeta) F(4)= (zI-yI) / (tyI*zeta) F(5)= rho * (Kc*xT*(VCa-V) - c) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T DOUBLE PRECISION gI,gP,gT gI=50. gP=0.03 gT=0.01 PAR(1)=gI PAR(2)=gP PAR(3)=gT U(1)=-2.329601E+00 U(2)= 9.992162E-01 U(3)= 7.373314E-01 U(4)= 6.135948E-03 U(5)= 1.208853E+00 END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/pla/clean.auto0000640000175000017500000000014513570013207014101 0ustar sksk #============== # AUTO Demo pla #============== print "\n***Clean the directory***" dl('pla') cl() auto/07p/demos/pla/c.pla0000640000175000017500000000055213570013207013047 0ustar skskNDIM= 5, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 150, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 9000, NPR= 9999, MXBF= 5, IID = 2, ITMX=12, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: -120.0} auto/07p/demos/pla/c.pla.20000640000175000017500000000055713570013207013214 0ustar skskNDIM= 5, IPS = 2, IRS = HB1, ILP = 0 ICP = [1, 11] NTST= 150, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 9000, NPR= 9999, MXBF= 5, IID = 2, ITMX=12, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZSTOP = {11: 10000.0} auto/07p/demos/pla/c.pla.10000640000175000017500000000055113570013207013205 0ustar skskNDIM= 5, IPS = 1, IRS = 0, ILP = 1 ICP = [1] NTST= 150, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 9000, NPR= 9999, MXBF= 5, IID = 2, ITMX=12, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZSTOP = {1: -120.0} auto/07p/demos/pla/pla.auto0000640000175000017500000000104213570013207013570 0ustar sksk #============== # AUTO Demo pla #============== pgm = "pla" print "\nDemo %s is started"%pgm print "\n%s : first run : stationary solutions"%pgm r1 = run(e=pgm,c=pgm) print "\n%s : second run : periodic solutions (1st branch)"%pgm r2 = run(r1('HB1'),IPS=2,ICP=[1,11],ILP=0,ISP=1,UZSTOP={11:1e4}) print "\n%s : third run : periodic solutions (2nd branch)"%pgm r3 = run(r1('HB2'),IPS=2,ICP=[1,11],ILP=0,ISP=1, UZR={1:[1.25,1.5,1.75,2.1,2.62]},UZSTOP={11:5e4}) all = r1+r2+r3 save(all, 'pla') print "\n***Clean the directory***" cl() auto/07p/demos/pla/c.pla.30000640000175000017500000000063013570013207013205 0ustar skskNDIM= 5, IPS = 2, IRS = HB2, ILP = 0 ICP = [1, 11] NTST= 150, NCOL= 4, IAD = 3, ISP = 1, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 9000, NPR= 9999, MXBF= 5, IID = 2, ITMX=12, ITNW= 6, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = -0.1, DSMIN=0.0001, DSMAX= 0.5, IADS= 1 NPAR= 3, THL = {11: 0.0}, THU = {} UZR = {1: [1.25, 1.5, 1.75, 2.1, 2.62]} UZSTOP = {11: 50000.0} auto/07p/demos/ffn/0000750000175000017500000000000013570013207012121 5ustar skskauto/07p/demos/ffn/clean.auto0000640000175000017500000000016313570013207014076 0ustar sksk #============== # AUTO Demo ffn #============== print "\n***Clean the directory***" dl('1') dl('2') dl('3') cl() auto/07p/demos/ffn/c.ffn.30000750000175000017500000000073713570013207013211 0ustar skskparnames = {1: 'a', 2: 'b', 3: 'c', 4: 'amp', 5: 'beta'} unames = {1: 'x', 2: 'y', 3: 'sn', 4: 'cs'} NDIM= 4, IPS = 2, IRS = 1, ILP = 1 ICP = ['amp', 'PERIOD'] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 100, NPR= 10, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.05, DSMIN= 0.001, DSMAX= 0.5, IADS= 1 NPAR = 11, THL = {}, THU = {} UZSTOP = {'amp': 10.0} LAB = 1 auto/07p/demos/ffn/c.ffn.20000750000175000017500000000076413570013207013210 0ustar skskparnames = {1: 'a', 2: 'b', 3: 'c', 4: 'amp', 5: 'beta'} unames = {1: 'x', 2: 'y', 3: 'sn', 4: 'cs'} NDIM= 4, IPS = 2, IRS = 2, ILP = 1 ICP = ['a', 'PERIOD'] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 100, NPR= 0, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-05 DS = 0.03, DSMIN= 0.001, DSMAX= 0.03, IADS= 1 NPAR = 11, THL = {}, THU = {} UZR = {'a': [0.25, 0.5]} UZSTOP = {'a': 1.0} LAB = 1 auto/07p/demos/ffn/ffn.f900000750000175000017500000000411113570013207013212 0ustar sksk!------------------------------------------------------------------------------ !------------------------------------------------------------------------------ ! frc : A periodically forced system !------------------------------------------------------------------------------ !------------------------------------------------------------------------------ SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM), DFDP(NDIM,*) DOUBLE PRECISION a,b,c,amp,beta,x,y,sn,cs,ss ! FHN parameters a = PAR(1) b = PAR(2) c = PAR(3) ! Forcing parameters amp = PAR(4) beta= PAR(5) ! FHN variables x=U(1) y=U(2) ! Forcing variables sn=U(3) cs=U(4) ss = sn**2 + cs**2 ! FHN equations F(1)= c * ( x - x**3/3 + y - amp*cs ) F(2)=-( x - a + b*y ) / c ! Oscillator F(3) = sn + beta*cs - sn*ss F(4) = -beta*sn + cs - cs*ss END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,t) ! ---------- ----- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: t DOUBLE PRECISION a,b,c,amp,beta,TPI ! FHN parameters a = 0. b = 0.8 c = 3. PAR(1)=a PAR(2)=b PAR(3)=c ! Forcing parameters amp=0. beta=10 PAR(4)=amp PAR(5)=beta TPI=8*ATAN(1.d0) PAR(11)=TPI/beta ! Initial FHB stationary solution (assuming a=0) U(1)= 0. U(2)= 0. ! Initialize the oscillator U(3)=SIN(TPI*t) U(4)=COS(TPI*t) END SUBROUTINE STPNT SUBROUTINE BCND END SUBROUTINE BCND SUBROUTINE ICND END SUBROUTINE ICND SUBROUTINE FOPT END SUBROUTINE FOPT SUBROUTINE PVLS END SUBROUTINE PVLS auto/07p/demos/ffn/c.ffn.10000750000175000017500000000072613570013207013205 0ustar skskparnames = {1: 'a', 2: 'b', 3: 'c', 4: 'amp', 5: 'beta'} unames = {1: 'x', 2: 'y', 3: 'sn', 4: 'cs'} NDIM= 4, IPS = 2, IRS = 0, ILP = 1 ICP = ['amp', 'PERIOD'] NTST= 20, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 9, NBC= 0, NINT= 0 NMX= 20, NPR= 0, MXBF= 5, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-07, EPSU = 1e-07, EPSS = 1e-06 DS = 0.01, DSMIN= 0.001, DSMAX= 1.0, IADS= 1 NPAR = 11, THL = {}, THU = {} UZSTOP = {'amp': 0.1} auto/07p/demos/ffn/ffn.auto0000750000175000017500000000140213570013207013564 0ustar sksk #============== # AUTO Demo ffn: Periodically forced FitzHugh-Nagumo equations #============== print "\n***Periodically forced FitzHugh-Nagumo equations***" print " " print "\n***Homotopy in the coupling constant ***" r1 = run(e='ffn', c='ffn.1') save('1') print "\n***Continue with varying FHN parameter 'a'***" r2 = run(r1('UZ1'), ICP=['a','PERIOD'], NTST=25, EPSS=1e-5, DS=0.03, DSMAX=0.03, UZR={'a': [0.25, 0.5]}, UZSTOP={'a': 1.0}, LAB=1, NMX=100) print "\n***Save the solution files***" save('2') print "\n***Increase the coupling constant ***" r3 = run(r1(1), NTST=25, EPSS=1e-5, DS=0.05, DSMAX=0.5, UZSTOP={'amp': 10.0}, LAB=1, NMX=100, NPR=10) print "\n***Save the solution files***" save('3') print "\n***Clean the directory***" clean() auto/07p/demos/ffn/plaut04.rc0000750000175000017500000000700013570013207013740 0ustar sksk#version 0.0 # Line colors are represented by RGB values from 0 to 1.0. # DEFAULT color is also used when animationLabel == 0, i.e., # when showing all solutions and highlighting the solutions # Point Type RED GREEN BLUE DEFAULT = 1.0, 1.0, 1.0, 0xffff BP = 1.0, 0.0, 0.0, 0xffff LP ALG = 0.0, 1.0, 0.0, 0xffff HB = 0.0, 0.0, 1.0, 0xffff UZ4 = 1.0, 1.0, 0.0, 0xffff UZ-4 = 0.5, 0.5, 0.0, 0xffff LP DIF = 0.0, 0.0, 0.5, 0xffff BP DIF = 0.0, 0.5, 0.5, 0xffff PD = 1.0, 0.0, 1.0, 0xffff TR = 0.0, 1.0, 1.0, 0xffff EP = 0.3, 0.0, 0.3, 0xffff MX = 0.6, 0.0, 0.6, 0xffff OTHERS = 1.0, 1.0, 1.0, 0xffff # Initialize the line pattern for showing stability: UNSTABLE LINE PATTERN = 0xffff STABLE LINE PATTERN = 0xffff # Initialize the default options: Highlight Orbit = No Orbit Animation = No Normalize Data = Yes Draw Background = No Draw Labels = Yes # Initialize the default coordinate axes: # 0 --- None, # 1 --- at geometry center or origin # 2 --- at left and behind # 3 --- at left and ahead Coordinate Type = 3 # Draw Scale: Draw Scale = Yes # Initialize the default graph type: # 0 --- Solution (fort.8) # 1 --- Bifurcation (fort.7) Graph Type = 1 # Initialize the default graph style # 0 --- LINES, 1 --- TUBES, 2 ---- SURFACE Graph Style = 1 #Set the window width and height: Window Width = 1000 Window Height = 600 # Set X, Y, Z axes for the solution diagram: # 0 is Time for X,Y,Z. X Axis Solution = 0 Y Axis Solution = 1 Z Axis Solution = 2 # Set X, Y, Z axes for the bifurcation diagram: X Axis Bifurcation = 0 Y Axis Bifurcation = 2 Z Axis Bifurcation = 3 #Labeled solutions: #-3 = Show all labeled solutions #-2 = Show HALF labeled solutions #-1 = Show SPEC labeled solutions #0 = Show NONE of the solutions #Otherwise, show the specified solution(s) Labels = -3 #Set coloring method: # -6 --- STABILITY # -5 --- POINT # -4 --- BRANCH # -3 --- TYPE # -2 --- LABEL # -1 --- COMPONENT # Otherwise, according to the data in the ith column of the solution file. # It can only be set to an integer value. Coloring Method = -6 # Line Width Scaler adjusts the thickness of curves: Line Width Scaler = 1.0 # The AniLine Thickness Scaler sets the thickness of animated solution curves: AniLine Thickness Scaler = 3.0 # Background color: Background Color = 0., 0., 0. # Background transparency: Background Transparency = 0.9 # Axes color: X Axis Color = 1.0, 0.0, 0.0 Y Axis Color = 0.0, 1.0, 0.0 Z Axis Color = 0.0, 0.0, 1.0 # Stable solution color: Stable Solution Color = 0.0, 0.0, 1.0 # UnStable solution color: Unstable Solution Color = 1.0, 0.0, 0.0 # Color of the animation object: Object Color = 1.0, 1.0, 1.0 # Set the radius of the animation object: # The normal size is 1.0. # For smaller radius, use 0.xxx # For bigger radius, use X.XXX Object Radius = 1.0 # Set the maximum and minimum animation speed: Object Max Animation Speed = 100 Object Min Animation Speed = 0 # Set the maximum and minimum highlighting animation speed: Orbit Max Animation Speed = 100 Orbit Min Animation Speed = 0 # Set the active AUTO parameter indices: parameter ID = 10 # Choose 3D or 2D graph: 3D = No # Set the number of periods animated. # The value should be the power of 2. Number of Period Animated = 1 auto/07p/demos/ffn/autorc0000750000175000017500000001417413570013207013353 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. solution_indepvarname = "time" # A dictionary mapping names to axis labels. labelnames = {"a": "$a$", "b": "$b$", "c": "$c$", "beta": "$\beta$", "x": "$x$", "y": "$y$", "z": "$z$"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. #bifurcation_x = [0] # The column to plot along the Y-axis for bifurcation diagrams. #bifurcation_y = [1] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/.gitignore0000640000175000017500000000057413570013207012240 0ustar sksk*.o *.mod *.pyc *.aux *.bbl *.log *.blg *.out *.toc Makefile /bin/ !/bin/auto !/bin/autox /lib/ /config.log /config.status /include/config.h /doc/include/*.pdf cmds/@H cmds/@LB cmds/@R cmds/@RD cmds/cmds.make cmds/compat.sh doc/auto.pdf gui/auto.makefile plaut04/doc/userguide.pdf plaut04/src/gmainqt.moc.c++ tek2ps/tek2ps test/verification/*.html test/*_log* demos/python/test/ auto/07p/plaut/0000750000175000017500000000000013570013207011366 5ustar skskauto/07p/plaut/plautlib.f0000640000175000017500000101103413570013207013352 0ustar skskC----------------------------------------------------------------------- C DEFINES DISTANCE OF RELATIVE AND ABSOLUTE MODE C----------------------------------------------------------------------- SUBROUTINE DFDIST INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /ABSRL/ ABSDX,ABSDY,ABSDXY,RLDX,RLDY,RLDXY C--- C--- *ABSOLUTE MODE ABSDX = MAXSX - MINSX ABSDY = MAXSY - MINSY ABSDXY = SQRT(ABSDX ** 2 + ABSDY ** 2) C--- *RELATIVE MODE RLDX = XMAX - XMIN RLDY = YMAX - YMIN RLDXY = SQRT(RLDX ** 2 + RLDY ** 2) RETURN END C--- C----------------------------------------------------------------------- C CONVERT TO PACKAGE USE C----------------------------------------------------------------------- FUNCTION COVTX(XNUM) COMMON /REVTN/ P10DX,P10DY,P10DXY,PDX,PDY,PDXY C--- C--- *PLOT-10 COVTX = XNUM C--- RETURN END C--- C----------------------------------------------------------------------- C CONVERT Y NUMBER TO GRAPHICS PACKAGE UNITS C----------------------------------------------------------------------- FUNCTION COVTY(YNUM) COMMON /REVTN/ P10DX,P10DY,P10DXY,PDX,PDY,PDXY C--- COVTY = YNUM C--- RETURN END C--- C----------------------------------------------------------------------- C CONVERT XYNUM TO GRAPHICS PACKAGE UNITS C----------------------------------------------------------------------- FUNCTION COVTXY(XYNUM) COMMON /REVTN/ P10DX,P10DY,P10DXY,PDX,PDY,PDXY C--- COVTXY = XYNUM C--- RETURN END C--- C----------------------------------------------------------------------- C CONVERTS RELATIVE MODE TO ABSOLUTE MODE C----------------------------------------------------------------------- SUBROUTINE WINCT(XIN,YIN,XOUT,YOUT) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /ABSRL/ ABSDX,ABSDY,ABSDXY,RLDX,RLDY,RLDXY C--- C--- DX = (XIN - XMIN) / RLDX DY = (YIN - YMIN) / RLDY XOUT = DX * ABSDX + MINSX YOUT = DY * ABSDY + MINSY RETURN END C--- C----------------------------------------------------------------------- C CONVERTS FROM ABSOLUTE MODE TO RELATIVE MODE C----------------------------------------------------------------------- SUBROUTINE REVCT(XIN,YIN,XOUT,YOUT) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /ABSRL/ ABSDX,ABSDY,ABSDXY,RLDX,RLDY,RLDXY C--- C--- DX = (XIN - MINSX) / ABSDX DY = (YIN - MINSY) / ABSDY XOUT = DX * RLDX + XMIN YOUT = DY * RLDY + YMIN RETURN END C--- C----------------------------------------------------------------------- C CALCULATES THE AMOUNT OF CHARACTER SPACE NECESSARY C TO PRINT AXES LABELS IN. IT DOES THIS BY CALCULATING THE MAX SIZE C OF THE INTEGER PART AND THE MAX SIZE OF THE FRACTION AND ADDING 2 C TO THE TOTAL. THE TOTAL SIZE IS PASSED BACK IN WHOLE AND THE C FRACTION SIZE IS PASSED BACK IN FRACT. C----------------------------------------------------------------------- SUBROUTINE CALCSZ(BMIN,BMAX,WHOLE,FRACT,XINCR) INTEGER WHOLE,FRACT C--- C--- FRACT = 0 INTSD = 0 TMAX = ABS(BMAX) TMIN = ABS(BMIN) IF (TMAX.GT.TMIN) THEN BIGNUM = TMAX ELSE BIGNUM = TMIN END IF IF (BIGNUM.LT.10) THEN INTSD = 0 ELSE INTSD = INT(LOG10(ABS(BIGNUM)) * 1.00001) + 1 END IF XINV = 1 / XINCR IF (XINV.GT.1) THEN I1 = INT(LOG10(ABS(XINV))) IF (I1.GT.0) THEN I2 = INT(XINV / (I1 * 10)) ELSE I2 = INT(XINV) END IF IF (I2.EQ.4) THEN FRACT = I1 + 2 ELSE FRACT = I1 + 1 END IF ELSE IF (XINCR.EQ.2.5) THEN FRACT = 1 ELSE FRACT = 0 END IF END IF WHOLE = INTSD + FRACT + 2 RETURN END C--- C----------------------------------------------------------------------- C DRAWS THE X GRID LINES AND C SPACES THE X AXIS GRID LABELS. C----------------------------------------------------------------------- SUBROUTINE XAXIS(XINCR) LOGICAL ODD,DFT,USR,PLTR,BRNCH,POINT,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY INTEGER WHOLE,FRACT,NVX(2),SPLPT COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /PLOTT/ PLTR,POINT C--- *FIND THE SIZE OF THE WHOLE C--- *AND FRACTIONAL PARTS OF C--- *LARGEST LABEL C--- CALL CALCSZ(XMIN,XMAX,WHOLE,FRACT,XINCR) ODD = .FALSE. IF (GRIDS) THEN GRDEND = MAXSY ELSE GRDEND = MINSY END IF C = 0 X1 = XMIN XTEMP = MINSX IX = XTEMP - COVTX(C+40) IY = MINSY - COVTY(C+35) C--- *WRITE FIRST GRID LABEL NGRIDS = INT(((XMAX - XMIN)/XINCR) + 0.00001) SPACE = (MAXSX - MINSX) / NGRIDS INDX = NINT(SPACE / COVTX(C+17)) WHOLE=WHOLE+1 IF(FRACT.EQ.0)ICODE=1 IF(FRACT.NE.0)ICODE=2 CXX THIS IS A "FIX" TO GET THE X-AXIS NUMBERS ALIGNED WITH THE TIC MARKS CXX (EJD AUG. 1985) CXX IBM GDDM GRAPHICS : CXX FINC=WHOLE-6 CXX GDDM/TEK 614 GRAPHICS : FINC=0.0 CXX CALL CVTIFE(WHOLE,FRACT,X1,ICODE) IF (INDX.LE.WHOLE) ODD = .TRUE. IX = IX - FINC CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) INDX = 0 1 XTEMP = XTEMP + SPACE INDX = INDX + 1 IX = XTEMP - COVTX(C+40) IY = MINSY - COVTY(C+35) C--- *WRITE OTHER GRID LABELS X1 = X1 + XINCR CALL CVTIFE(WHOLE,FRACT,X1,ICODE) IX = IX - FINC IF (ODD.AND.MOD(INDX,2).EQ.1) THEN IY = IY - COVTY(C + 30) END IF CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) IX = XTEMP IY = MINSY - COVTY(C+15) C--- *DRAW SHORT OR LONG GRID LINE CALL PLCMDS(22) CALL PLCMDS(2) CALL PLCMDS(20) IY = GRDEND CALL PLCMDS(3) NGRIDS = NGRIDS - 1 IF (NGRIDS.GT.1) THEN GO TO 1 ELSE IF(NGRIDS.EQ.1) THEN C--- *LAST GRID LINE ALWAYS LONG GRDEND = MAXSY GO TO 1 ENDIF END IF RETURN END C--- C----------------------------------------------------------------------- C OUTPUTS THE Y GRID LINES AND SPACES THE C Y AXIS GRID LABELS. IT IS SIMILAR TO THE X AXIS. C----------------------------------------------------------------------- SUBROUTINE YAXIS(YINCR) INTEGER WHOLE,FRACT,NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL DFT,USR,PLTR,BRNCH,POINT,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /PLOTT/ PLTR,POINT C--- C--- CALL CALCSZ(YMIN,YMAX,WHOLE,FRACT,YINCR) IF (GRIDS) THEN GRDEND = MAXSX ELSE GRDEND = MINSX END IF C = 0 YTEMP = MINSY Y1 = YMIN IX = MINSX - COVTX(C+149) IY = YTEMP IF(FRACT.EQ.0)ICODE=1 IF(FRACT.NE.0)ICODE=2 WHOLE=10 CALL CVTIFE(WHOLE,FRACT,Y1,ICODE) CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) NGRIDS = INT(((YMAX - YMIN)/YINCR) + 0.00001) SPACE = (MAXSY - MINSY) / NGRIDS 1 YTEMP = YTEMP + SPACE IX = MINSX - COVTX(C+149) IY = YTEMP Y1 = Y1 + YINCR CALL CVTIFE(WHOLE,FRACT,Y1,ICODE) CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) IX = MINSX - COVTX(C+15) IY = YTEMP CALL PLCMDS(22) CALL PLCMDS(2) CALL PLCMDS(20) IX = GRDEND CALL PLCMDS(22) CALL PLCMDS(3) CALL PLCMDS(20) NGRIDS = NGRIDS - 1 IF (NGRIDS.GT.1) THEN GO TO 1 ELSE C--- *LAST GRID LINE ALWAYS LONG IF (NGRIDS.EQ.1) THEN GRDEND = MAXSX GO TO 1 ENDIF END IF RETURN END C--- *LAST GRID LINE ALWAYS LONG C----------------------------------------------------------------------- C CONVERTS NUMERIC TO STRING CHARACTER: C IF ICODE = 1 THEN CONVERT FROM FORMAT TO STRING CHARACTER C IF ICODE = 2 THEN CONVERT FROM FORMAT TO STRING CHARACTER C IF ICODE = 3 THEN CONVERT FROM FORMAT TO STRING CHARACTER C----------------------------------------------------------------------- SUBROUTINE CVTIFE(IWHOLE,IFRACT,XYNUM,ICODE) GO TO (1,2,3) ICODE 1 CALL COVTI(IWHOLE,IFRACT,XYNUM) RETURN 2 CALL COVTF(IWHOLE,IFRACT,XYNUM) RETURN 3 CALL COVTF(IWHOLE,IFRACT,XYNUM) RETURN END C--- *LAST GRID LINE ALWAYS LONG C----------------------------------------------------------------------- C CONVERTS FROM NUMERIC TO STRING (EXPONENT) C----------------------------------------------------------------------- SUBROUTINE COVTE(WHOLE,FRACT,XYNUM) INTEGER WHOLE,FRACT CHARACTER*1 CHONE,CH(0:9),CHTWO*2,CHFIF*15 LOGICAL NEG COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF DATA CH /'0','1','2','3','4','5','6','7','8','9'/ CHFIF = ' ' INDXCH = WHOLE NEG = .FALSE. F = LOG10(ABS(XYNUM) + 0.00001) KF = INT(F) IF (KF.LT.0) KF = KF + 1 NUM = INT(10 ** (FRACT + F - KF)) IF (KF.LT.0) NEG = .TRUE. KF = ABS(KF) INDEX = WHOLE - 1 DO 1 I=WHOLE,INDEX,-1 INDX = MOD(KF,10) KF = KF / 10 CHFIF(I:I) = CH(INDX) 1 CONTINUE I = WHOLE - 3 IF (NEG) THEN CHFIF(I:I+1) = 'E-' ELSE CHFIF(I:I+1) = 'E+' END IF INDX = WHOLE - 4 INDEX = INDX - FRACT + 1 DO 2 I=INDX,INDEX,-1 KF = MOD(NUM,10) NUM = NUM / 10 CHFIF(I:I) = CH(KF) 2 CONTINUE CHFIF(INDEX-1:INDEX-1) = '.' IF (XYNUM.GT.0) THEN CHFIF(INDEX-2:INDEX-2) = '0' ELSE KF = WHOLE - FRACT - 5 IF (KF.EQ.2) THEN CHFIF(1:2) = '-0' ELSE CHFIF(1:1) = '-' END IF END IF RETURN END C--- *LAST GRID LINE ALWAYS LONG C----------------------------------------------------------------------- C CONVERT FROM NUMERIC TO STRING CHARACTER (FN.0 FORMAT) C----------------------------------------------------------------------- SUBROUTINE COVTI(WHOLE,FRACT,XYNUM) INTEGER WHOLE,FRACT CHARACTER*1 CHONE,CH(0:9),CHTWO*2,CHFIF*15 LOGICAL NEG COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF DATA CH/'0','1','2','3','4','5','6','7','8','9'/ CHFIF = ' ' INDXCH = WHOLE NEG = .FALSE. IF (XYNUM.LT.0) NEG = .TRUE. NUM = INT(ABS((1.0+1.0E-5)*XYNUM)) CHFIF(WHOLE:WHOLE) = '.' INDX = WHOLE - 1 IF (NUM.EQ.0) THEN CHFIF(INDX:INDX) = '0' RETURN END IF DO 1 I=INDX,1,-1 IF (NUM.EQ.0) THEN IF (NEG) CHFIF(I:I) = '-' RETURN END IF KF = MOD(NUM,10) NUM = NUM / 10 CHFIF(I:I) = CH(KF) 1 CONTINUE RETURN END C--- C----------------------------------------------------------------------- C CONVERT FROM NUMERIC TO STRING CHARACTER ( FORMAT) C----------------------------------------------------------------------- SUBROUTINE COVTF(WHOLE,FRACT,XYNUM) INTEGER WHOLE,FRACT CHARACTER*1 CHONE,CH(0:9),CHTWO*2,CHFIF*15 LOGICAL NEG COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF DATA CH/'0','1','2','3','4','5','6','7','8','9'/ CHFIF = ' ' INDXCH = WHOLE NEG = .FALSE. IF (XYNUM.LT.0) NEG = .TRUE. NUM = ABS(INT((1.0+1.0E-5)*XYNUM)) F = ABS(XYNUM) - NUM KF = NINT(F * 10 ** FRACT) IF (NUM.EQ.0.AND.KF.EQ.0) NEG = .FALSE. INDX = WHOLE - FRACT + 1 DO 1 I=WHOLE,INDX,-1 K = MOD(KF,10) KF = KF / 10 CHFIF(I:I) = CH(K) 1 CONTINUE CHFIF(INDX-1:INDX-1) = '.' INDX = WHOLE - FRACT - 1 IF (INDX.EQ.0) RETURN IF (INDX.EQ.1.AND.NUM.EQ.0.AND.NEG) THEN CHFIF(1:1) = '-' RETURN ELSE IF (INDX.EQ.1.AND.NUM.EQ.0) THEN CHFIF(1:1) = '0' RETURN END IF IF (NUM.EQ.0) THEN IF (NEG) THEN CHFIF(INDX-1:INDX) = '-0' ELSE CHFIF(INDX:INDX) = '0' END IF RETURN END IF DO 2 I=INDX,1,-1 IF (NUM.EQ.0)THEN IF (NEG) CHFIF(I:I) = '-' RETURN END IF KF = MOD(NUM,10) NUM = NUM / 10 CHFIF(I:I) = CH(KF) 2 CONTINUE RETURN END C----------------------------------------------------------------------- C SAVE THE CURRENT PLOT IN FILE UNIT ISAVE. C----------------------------------------------------------------------- SUBROUTINE ASKSVE(SAVE) LOGICAL SAVE COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- SAVE = .FALSE. IF (IWRITE.NE.ISAVE) THEN IWRITE = ISAVE SAVE = .TRUE. ELSE IWRITE = ITERM CALL COMPLT ENDIF RETURN END C--- C----------------------------------------------------------------------- C WRITES A MESSAGE TO CONFIRM C THAT A PLOT HAS BEEN SAVED. C----------------------------------------------------------------------- SUBROUTINE COMPLT CHARACTER OST2*20 COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- OST2 = ' SAVE COMPLETE' WRITE(IWRITE,1) OST2 1 FORMAT(A20) RETURN END C--- C----------------------------------------------------------------------- C--- C JOINS THE POINTS (X0,Y0) AND (X,Y) BY ONE OF C FOUR LINE TYPES DEPENDING ON THE VALUE OF 'ID'. C--- C----------------------------------------------------------------------- SUBROUTINE SYMBLS(X0,Y0,ID,IDS,FIRST,SYMBOL) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL SYMBOL,FIRST,SOLID,DSH,DSHS,LHCIR,LNKDSH LOGICAL LSYBL,LDSH,LDOT COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /SYBL/ SOLID,DSH,DSHS,LHCIR,LSYBL,LDSH,LDOT COMMON /MUDSH/ XDSH,YDSH,XDSHS,YDSHS,XD1,YD1 COMMON /LINKDA/ LNKDSH COMMON /RADI/ RASY,RATY,RADI,RADINC COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /DSH1/ SKD1,DSH1,DSH2,S1,D1,D2,IDASH COMMON /TWOPT/ XNEW1,YNEW1,XOLD1,YOLD1 COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD C--- C--- C--- *SOLID LINES IF (ID.EQ.2) THEN CALL PLCMDS(36) IF (.NOT.SOLID.AND.FIRST) THEN CALL CLIP(X0,Y0,1) SOLID = .TRUE. ELSE IF (.NOT.SOLID.AND..NOT.FIRST) THEN CALL CLIP(XOLD1,YOLD1,3) CALL CLIP(X0,Y0,2) SOLID = .TRUE. ELSE CALL CLIP(X0,Y0,2) END IF CALL PLCMDS(20) END IF C--- IF (ID.EQ.1) THEN C--- *DASHED LINES CALL PLCMDS(35) IF (.NOT.DSH.AND.FIRST) THEN IF (FIRST) CALL CLIP(X0,Y0,1) XDSH = X0 YDSH = Y0 DSH = .TRUE. LNKDSH = .TRUE. CDASH = DSDSH DSKDSH = SKDSH ELSE IF (.NOT.DSH.AND..NOT.FIRST) THEN XDSH = XOLD1 YDSH = YOLD1 DSH = .TRUE. LNKDSH = .TRUE. CDASH = DSDSH CALL DPDSH ELSE CALL DPDSH END IF CALL PLCMDS(20) END IF IF (ID.EQ.3) THEN C--- *OPEN CIRCLES IF (.NOT.LHCIR.AND.FIRST) THEN CALL PLCMDS(7) CALL HCIR LHCIR = .TRUE. SKCIR = DSCIR ELSE IF (.NOT.LHCIR.AND..NOT.FIRST) THEN X = XOLD1 Y = YOLD1 CALL PLCMDS(7) CALL HCIR LHCIR = .TRUE. SKCIR = DSCIR CALL DPCIR(ID) ELSE CALL DPCIR(ID) END IF END IF IF (ID.EQ.4) THEN C--- *SOLID CIRCLES IF (.NOT.LHCIR.AND.FIRST) THEN CALL PLCMDS(7) CALL SCIR LHCIR = .TRUE. SKCIR = DSCIR ELSE IF (.NOT.LHCIR.AND..NOT.FIRST) THEN X = XOLD1 Y = YOLD1 CALL PLCMDS(7) CALL SCIR LHCIR = .TRUE. SKCIR = DSCIR CALL DPCIR(ID) ELSE CALL DPCIR(ID) END IF END IF IF (ID.EQ.5) THEN C--- *DOTTED LINES IF (.NOT.LDOT.AND.FIRST) THEN CALL CLIP(X0,Y0,1) LDOT = .TRUE. ELSE IF (.NOT.LDOT.AND..NOT.FIRST) THEN CALL CLIP(XOLD1,YOLD1,1) LDOT = .TRUE. CALL DPDOLN ELSE CALL DPDOLN END IF END IF IF (ID.EQ.6) THEN C--- *DASHED LINES IF (.NOT.DSHS.AND.FIRST) THEN XDSHS = X0 YDSHS = Y0 DSHS = .TRUE. ITYPE = 1 CD1 = CDASHS CSK1 = DKDSHS IF (FIRST) CALL CLIP(X0,Y0,1) ELSE IF (.NOT.DSHS.AND..NOT.FIRST) THEN XDSHS = XOLD1 YDSHS = YOLD1 DSHS = .TRUE. ITYPE = 1 CD1 = CDASHS CSK1 = DKDSHS CALL DASHES ELSE CALL DASHES END IF END IF C--- *LONG AND SHORT DASHES IF (ID.EQ.7) THEN IF (.NOT.LDSH.AND.FIRST) THEN XD1 = X0 YD1 = Y0 LDSH = .TRUE. IDASH = 1 D1 = DSH1 D2 = DSH2 S1 = SKD1 IF (FIRST) CALL CLIP(X0,Y0,1) ELSE IF (.NOT.LDSH.AND..NOT.FIRST) THEN XD1 = XOLD1 YD1 = YOLD1 LDSH = .TRUE. IDASH = 1 D1 = DSH1 D2 = DSH2 S1 = SKD1 CALL LSDSH ELSE CALL LSDSH END IF END IF C--- *SYMBOLS IF (IDS.GE.8.AND.IDS.LE.27) THEN IF (.NOT.LSYBL.AND.FIRST) THEN X = X0 Y = Y0 RADI = RATY CALL PLCMDS(7) CALL DPSYBL(IDS) MBACK = 1 LSYBL = .TRUE. ELSE IF (.NOT.LSYBL.AND..NOT.FIRST) THEN IX = XOLD IY = YOLD RADI = RATY CALL DPSYBL(IDS) CALL CLSYBL(IDS,MBACK) MBACK = 1 LSYBL = .TRUE. ELSE CALL CLSYBL(IDS,MBACK) END IF IF (MBACK.EQ.1.AND.SOLID) CALL CLIP(X0,Y0,3) END IF C--- *WITH SYMBOL IF (SYMBOL) THEN IF (IDS.EQ.0.AND.ID.NE.3.AND.ID.NE.4) THEN X = X0 Y = Y0 RADI = RASY CALL PLCMDS(7) CALL DRAW END IF END IF RETURN END C--- C----------------------------------------------------------------------- C--- C IS USED TO SET THE PLOTTING SYMBOL FOR C BRANCHES IN THE BIFURCATION DIAGRAM. TO DIFFERENTIATE BETWEEN C BRANCHES, THE SIGNS OF THE BRANCH NUMBER AND THE POINT NUMBER C ARE USED (I.E., THE FIRST AND SECOND COLUMNS IN UNIT 7) C--- C FOR EXAMPLE: C--- C SIGN OF C BRANCH # POINT # REPRESENTS SYMBOL USED C =============================================================== C + + UNSTABLE STEADY STATE 1 C + - STABLE STEADY STATE 2 C - + UNSTABLE PERIODIC 3 C - - STABLE PERIODIC 4 C =============================================================== C--- C----------------------------------------------------------------------- SUBROUTINE SDFPLT(ICD,ICDS) CHARACTER*2 SIGN(4) DIMENSION ICD(4),ICDS(4) DATA SIGN/'++','+-','-+','--'/ C--- C--- CALL PRSYBL DO 1 I=1,4 IF (ICD(I).NE.0.AND.ICDS(I).NE.0) THEN WRITE(6,2) SIGN(I),ICD(I),ICDS(I) ELSE IF (ICD(I).NE.0) THEN WRITE(6,3) SIGN(I),ICD(I) ELSE IF (ICDS(I).NE.0) THEN WRITE(6,3) SIGN(I),ICDS(I) ELSE WRITE(6,4) SIGN(I) END IF CALL READSY(ICD(I),ICDS(I)) 1 CONTINUE RETURN 2 FORMAT(T5,'ENTER CODES FOR ',A2,' OLD VALUES WERE ',I3, + 2X,I3,' ') 3 FORMAT(T5,'ENTER CODE FOR ',A2,' OLD VALUE WAS',I3, + ' ') 4 FORMAT(T5,'ENTER CODE FOR ',A2,' ') END C----------------------------------------------------------------------- C PRINTS TYPE AND SYMBOL C----------------------------------------------------------------------- SUBROUTINE PRSYBL COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- WRITE(ITERM,1) 1 FORMAT( ' TYPES :', + /,T5 ,'<1> DASHED LINE', + T40,'<5) DOTTED LINE', + /,T5 ,'<2> SOLID LINE', + T40,'<6> DASHED AND DOTTED LINE', + /,T5 ,'<3> OPEN CIRCLE (FIXED SIZE)', + T40,'<7> LONG AND SHORT DASHES', + /,T5 ,'<4> SOLID CIRCLE (FIXED SIZE)', + /, + /,T5 ,'<8> OPEN SQUARE', + T40,'<18> SOLID DOWN TRIANGLE', + /,T5 ,'<9> SOLID SQUARE', + T40,'<19> SQUARE AND "X" SIGN', + /,T5 ,'<10> OPEN TRIANGLE', + T40,'<20> CIRCLE AND PLUS SIGN') WRITE(ITERM,2) 2 FORMAT( T5 ,'<11> SOLID TRIANGLE', + T40,'<21> DOUBLE TRIANGLE', + /,T5 ,'<12> OPEN CIRCLE (VAR. SIZE)', + T40,'<22> CIRCLE AND "X" SIGN', + /,T5 ,'<13> SOLID CIRCLE (VAR. SIZE)', + T40,'<23> SQUARE AND TRIANGLE', + /,T5 ,'<14> PLUS SIGN', + T40,'<24> SQUARE AND PLUS SIGN', + /,T5 ,'<15> OPEN DIAMOND', + T40,'<25> DIAMOND AND PLUS SIGN', + /,T5 ,'<16> SOLID DIAMOND', + T40,'<26> "X" SIGN', + /,T5 ,'<17> OPEN DOWN TRIANGLE', + T40,'<27> START',/) RETURN END C----------------------------------------------------------------------- C PRINTS SYMBOLS FOR SPECIAL SYMBOLS COMMAND C----------------------------------------------------------------------- SUBROUTINE PRSYM COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- WRITE(ITERM,1) WRITE(ITERM,2) 1 FORMAT(/,T30,'SYMBOLS',/) 2 FORMAT(T5 ,'<1> OPEN SQUARE', + T40,'<11> SOLID DOWN TRIANGLE',/, + T5 ,'<2> SOLID SQUARE', + T40,'<12> SQUARE AND "X" SIGN',/, + T5 ,'<3> OPEN TRIANGLE', + T40,'<13> CIRCLE AND PLUS SIGN',/, + T5 ,'<4> SOLID TRIANGLE', + T40,'<14> DOUBLE TRIANGLE',/, + T5 ,'<5> OPEN CIRCLE', + T40,'<15> CIRCLE AND "X" SIGN',/, + T5 ,'<6> SOLID CIRCLE', + T40,'<16> SQUARE AND TRIANGLE',/, + T5 ,'<7> PLUS SIGN', + T40,'<17> SQUARE AND PLUS SIGN',/, + T5 ,'<8> OPEN DIAMOND', + T40,'<18> DIAMOND AND PLUS SIGN',/, + T5 ,'<9> SOLID DIAMOND', + T40,'<19> "X" SIGN',/, + T5 ,'<10> OPEN DOWN TRIANGLE', + T40,'<20> START',/) RETURN END C----------------------------------------------------------------------- C PRINTS DEFAULT SPECIAL SYMBOLS C----------------------------------------------------------------------- SUBROUTINE SYSDF(IPT,SYMBOL) INTEGER IPT(10),SYMBOL(10) COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- WRITE(ITERM,2) DO 1 I=1,5 J = I + 5 IF (SYMBOL(I).NE.0.AND.SYMBOL(J).NE.0) THEN WRITE(ITERM,3) I,IPT(I),SYMBOL(I),J,IPT(J),SYMBOL(J) ELSE IF (SYMBOL(I).NE.0) THEN WRITE(ITERM,4) I,IPT(I),SYMBOL(I),J ELSE IF (SYMBOL(J).NE.0) THEN WRITE(ITERM,5) I,J,IPT(J),SYMBOL(J) ELSE WRITE(ITERM,6) I,J END IF 1 CONTINUE RETURN 2 FORMAT(T10,'DEFAULT SYMBOLS ARE : ',/, + T10,'INDEX',T21,'IPT',T31,'SYMBOL', + T41,'INDEX',T53,'IPT',T61,'SYMBOL') 3 FORMAT(T12,I2,T20,I3,T32,I3,T42,I3,T52,I3,T62,I3) 4 FORMAT(T12,I2,T20,I3,T32,I3,T42,I3) 5 FORMAT(T12,I2, T42,I3,T52,I3,T62,I3) 6 FORMAT(T12,I2, T42,I3) END C----------------------------------------------------------------------- C ENTER NEW SYMBOLS C----------------------------------------------------------------------- SUBROUTINE ETSYBL(ITP,SYMBOL) INTEGER PARRY(1999),ITP(10),SYMBOL(10) CHARACTER*80 ISTR,OSTR LOGICAL VALID COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- INDEX = 0 OSTR = ' ' WRITE(ITERM,2) OSTR OSTR = ' ENTER : INDEX, POINT TYPE, AND SYMBOL NUMBER' WRITE(ITERM,2) OSTR OSTR = ' ( TO TERMINATE TYPING : OR OR )' WRITE(ITERM,2) OSTR 1 CALL READS8(ISTR) IF (ISTR.EQ.'END'.OR.ISTR.EQ.'end'.OR. + ISTR.EQ.'E '.OR.ISTR.EQ.'e '.OR. + ISTR.EQ.' ') RETURN I = 1 IF (ISTR(1:1).EQ.' ') I = 2 CALL CONVT(ISTR,I,NUM,PARRY,VALID) IF (.NOT.VALID) GO TO 1 IF (NUM.EQ.1.AND.PARRY(1).GE.1.AND.PARRY(1).LE.10) THEN SYMBOL(PARRY(1)) = 0 INDEX = INDEX + 1 END IF IF (NUM.EQ.3.AND.PARRY(1).GE.1.AND.PARRY(1).LE.10) THEN J = PARRY(1) IF (PARRY(3).GE.1.AND.PARRY(3).LE.20) THEN ITP(J) = PARRY(2) SYMBOL(J) = PARRY(3) INDEX = INDEX + 1 ELSE SYMBOL(J) = 0 END IF END IF C--- *ERROR IF (.NOT.(NUM.EQ.1.OR.NUM.EQ.3)) THEN OSTR = ' ERROR , ENTER AGAIN' WRITE(ITERM,2) OSTR END IF IF (INDEX.LT.10) GO TO 1 RETURN 2 FORMAT(A80) END C----------------------------------------------------------------------- C INITIALIZES SPECIAL SYMBOLS C----------------------------------------------------------------------- SUBROUTINE IBDSY(IPT,SYMBOL) INTEGER IPT(10),SYMBOL(10) C--- C--- DO 1 I=1,10 IPT(I) = I SYMBOL(I) = 0 1 CONTINUE SYMBOL(1) = 1 SYMBOL(3) = 2 SYMBOL(6) = 8 SYMBOL(7) = 14 SYMBOL(8) = 9 RETURN END C----------------------------------------------------------------------- C READS STRING DATA AND CONVERTS TO C INTEGER AND ASSIGNS ID AND IDS C----------------------------------------------------------------------- SUBROUTINE READSY(ICDT,ICDS) INTEGER PARRY(1999) LOGICAL VALID CHARACTER*80 ISTR C--- C--- CALL READS8(ISTR) I = 1 IF (ISTR(1:1).EQ.' ') I=2 IF (ISTR.NE.' ') THEN CALL CONVT(ISTR,I,NUM,PARRY,VALID) IF (VALID) THEN IDATA1 = PARRY(1) IF (NUM.EQ.1) THEN IF (IDATA1.GE.1.AND.IDATA1.LE.7) THEN ICDT = IDATA1 ELSE ICDT = 0 END IF IF (IDATA1.GE.8.AND.IDATA1.LE.27) THEN ICDS = IDATA1 ELSE ICDS = 0 END IF ELSE IF (NUM.GE.2) THEN IDATA2 = PARRY(2) IF (IDATA1.GE.1.AND.IDATA1.LE.7) THEN ICDT = IDATA1 ELSE IF (IDATA2.GE.1.AND.IDATA2.LE.7) THEN ICDT = IDATA2 ELSE ICDT = 0 END IF IF (IDATA1.GE.8.AND.IDATA1.LE.27) THEN ICDS = IDATA1 ELSE IF (IDATA2.GE.8.AND.IDATA2.LE.27) THEN ICDS = IDATA2 ELSE ICDS = 0 END IF END IF END IF END IF RETURN END C----------------------------------------------------------------------- C DRAWS THE SYMBOLS WHEN THE SYMBOL FLAG IS TRUE. C----------------------------------------------------------------------- SUBROUTINE DRAW INTEGER NVX(2),SPLPT,ITP(10),SYMBL(10) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /BDSY/ITP,SYMBL C--- C--- DO 1 I=1,10 IF (SYMBL(I).NE.0) THEN IF (ITP(I).EQ.SPLPT) THEN ID = SYMBL(I) + 7 CALL DPSYBL(ID) CALL PLCMDS(4) RETURN END IF END IF 1 CONTINUE RETURN END C----------------------------------------------------------------------- C DISPLAYS ALL DEFAULT PLOTTING SYMBOLS. C----------------------------------------------------------------------- SUBROUTINE SHWSYS INTEGER ITP(10),SYMBL(10) COMMON /BDSY/ ITP,SYMBL C--- C--- CALL PRSYM CALL SYSDF(ITP,SYMBL) CALL ETSYBL(ITP,SYMBL) RETURN END C----------------------------------------------------------------------- C READS STRING DATA AND CONVERTS TO INTEGER C----------------------------------------------------------------------- SUBROUTINE READAT(IDATA) INTEGER PARRY(1999) LOGICAL VALID CHARACTER*80 ISTR C--- C--- CALL READS8(ISTR) I = 1 IF (ISTR(1:1).EQ.' ') I = 2 IF (ISTR.NE.' ') THEN CALL CONVT(ISTR,I,NUM,PARRY,VALID) IF (VALID) IDATA = PARRY(1) END IF RETURN END C----------------------------------------------------------------------- C DEFINES RADIUS OF THE SYMBOLS IN SET C SYMBOLS OR RADIUS OF C----------------------------------------------------------------------- SUBROUTINE DFRADI(RADI,ICODE) COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- C = 0 D1 = COVTXY(C+2) D2 = COVTXY(C+15) 1 IF (ICODE.EQ.1) THEN WRITE(ITERM,2)D1,D2,RADI ELSE WRITE(ITERM,3)D1,D2,RADI END IF READ(5,*,ERR=1) DATA IF (DATA.GE.D1.AND.DATA.LE.D2) THEN RADI = DATA ELSE GOTO 1 END IF RETURN 2 FORMAT(' ENTER SYMBOL RADIUS; LIMITS(',F4.1,',',F4.1, * '); CURRENT ',F4.1,' : ') 3 FORMAT(' ENTER CURVE SYMBOL RADIUS; LIMITS(',F4.1,',',F4.1, * '); CURRENT ',F4.1,' : ') END C----------------------------------------------------------------------- C COMPUTES THE DISTANCE BETWEEN TWO POINTS C----------------------------------------------------------------------- SUBROUTINE DISXY(XMAX,YMAX,XMIN,YMIN,DISTCE) C--- C--- DX = XMAX - XMIN DY = YMAX - YMIN DISTCE = SQRT(DX ** 2 + DY ** 2) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES USING DASHED LINES C----------------------------------------------------------------------- SUBROUTINE DPDSH LOGICAL LNKDSH COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD COMMON /LINKDA/ LNKDSH COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /MUDSH/ XDSH,YDSH,XDSHS,YDSHS,XD1,YD1 C--- C--- X1 = XOLD Y1 = YOLD 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) C--- *DASHED LINES IF (LNKDSH) THEN IF (CDASH.GE.DIS) THEN CALL CLIP(XDSH,YDSH,3) CALL REVCT(XNEW,YNEW,XDSH,YDSH) CALL CLIP(XDSH,YDSH,2) CDASH = CDASH - DIS ELSE CALL CLIP(XDSH,YDSH,3) RINC = CDASH / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XDSH,YDSH) CALL CLIP(XDSH,YDSH,2) CDASH = DSDSH LNKDSH = .FALSE. END IF END IF C--- *SKIP IF (.NOT.LNKDSH) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (DSKDSH.GE.DIS) THEN DSKDSH = DSKDSH - DIS ELSE DX = XNEW - XOLD DY = YNEW - YOLD RINC = DSKDSH / DIS XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY DSKDSH = SKDSH LNKDSH = .TRUE. CALL REVCT(XOLD,YOLD,XDSH,YDSH) GO TO 1 END IF END IF C--- *KEEP LAST POINT XOLD = X1 YOLD = Y1 RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES USING DASHED LINES C----------------------------------------------------------------------- SUBROUTINE DASHES COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /MUDSH/ XDSH,YDSH,XDSHS,YDSHS,XD1,YD1 C--- C--- C--- *KEEP LAST POINT X1 = XOLD Y1 = YOLD 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) C--- *DASHED LINES CALL PLCMDS(35) IF (ITYPE.EQ.1) THEN IF (CD1.GE.DIS) THEN CALL CLIP(XDSHS,YDSHS,3) CALL REVCT(XNEW,YNEW,XDSHS,YDSHS) CALL CLIP(XDSHS,YDSHS,2) CD1 = CD1 - DIS ELSE RINC = CD1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL CLIP(XDSHS,YDSHS,3) CALL REVCT(XOLD,YOLD,XDSHS,YDSHS) CALL CLIP(XDSHS,YDSHS,2) CD1 = CDASHS ITYPE = 2 END IF END IF C--- *POINT BETWEEN DASHES IF (ITYPE.EQ.2) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (CSK1.GE.DIS) THEN CSK1 = CSK1 - DIS ELSE RINC = CSK1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XDSHS,YDSHS) CALL CLIP(XDSHS,YDSHS,1) CSK1 = DKDSHS ITYPE = 3 END IF END IF C--- *SKIP IF (ITYPE.EQ.3) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (CSK1.GE.DIS) THEN CSK1 = CSK1 - DIS ELSE RINC = CSK1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XDSHS,YDSHS) CSK1 = DKDSHS ITYPE = 1 GO TO 1 END IF END IF C--- *RETURN LAST POINT XOLD = X1 YOLD = Y1 CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES WITH LONG AND SHORT DASHES C----------------------------------------------------------------------- SUBROUTINE LSDSH COMMON /DSH1/ SKD1,DSH1,DSH2,S1,D1,D2,IDASH COMMON /MUDSH/ XDSH,YDSH,XDSHS,YDSHS,XD1,YD1 COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD C--- *KEEP LAST POINT X1 = XOLD Y1 = YOLD 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) CALL PLCMDS(38) IF (IDASH.EQ.1) THEN IF (D1.GE.DIS) THEN CALL CLIP(XD1,YD1,3) CALL REVCT(XNEW,YNEW,XD1,YD1) CALL CLIP(XD1,YD1,2) D1 = D1 - DIS ELSE RINC = D1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL CLIP(XD1,YD1,3) CALL REVCT(XOLD,YOLD,XD1,YD1) CALL CLIP(XD1,YD1,2) D1 = DSH1 IDASH = 2 END IF END IF C--- *SKIP IF (IDASH.EQ.2) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (S1.GE.DIS) THEN S1 = S1 - DIS ELSE RINC = S1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XD1,YD1) S1 = SKD1 IDASH = 3 END IF END IF C--- *SHORT DASH IF (IDASH.EQ.3) THEN CALL PLCMDS(39) CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) CALL CLIP(XD1,YD1,3) IF (D2.GE.DIS) THEN CALL REVCT(XNEW,YNEW,XD1,YD1) CALL CLIP(XD1,YD1,2) D2 = D2 - DIS ELSE RINC = D2 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XD1,YD1) CALL CLIP(XD1,YD1,2) D2 = DSH2 IDASH = 4 END IF END IF C--- *SKIP IF (IDASH.EQ.4) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (S1.GE.DIS) THEN S1 = S1 - DIS ELSE RINC = S1 / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + RINC * DX YOLD = YOLD + RINC * DY CALL REVCT(XOLD,YOLD,XD1,YD1) S1 = SKD1 IDASH = 1 GO TO 1 END IF END IF XOLD = X1 YOLD = Y1 CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C--- C--- C----------------------------------------------------------------------- SUBROUTINE DPCIR(ID) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD C--- C--- 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (DIS.LE.SKCIR) THEN SKCIR = SKCIR - DIS ELSE RINC = SKCIR / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + DX * RINC YOLD = YOLD + DY * RINC IX = XOLD IY = YOLD IF (ID.EQ.3) CALL HCIR IF (ID.EQ.4) CALL SCIR SKCIR = DSCIR GO TO 1 END IF RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES USING DOTTED LINES C----------------------------------------------------------------------- SUBROUTINE DPDOLN COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DICIR,DSSYBL COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD C--- C--- X1 = XOLD Y1 = YOLD 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) CALL PLCMDS(37) IF (DIS.LE.SKDOT) THEN SKDOT = SKDOT - DIS ELSE RINC = SKDOT / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + DX * RINC YOLD = YOLD + DY * RINC CALL REVCT(XOLD,YOLD,X,Y) CALL CLIP(X,Y,1) SKDOT = DSDOT GO TO 1 END IF XOLD = X1 YOLD = Y1 CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES USING SYMBOLS ( OPEN SQUARE, C SOLID SQUARE, OPEN TRIANGLE, SOLID TRIANGLE, OPEN CIRCLE, C SOLID CIRCLE, PLUS SIGN) C----------------------------------------------------------------------- SUBROUTINE CLSYBL(ID,MBACK) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD C--- C--- MBACK = 0 1 CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (DIS.LE.SKSYBL) THEN SKSYBL = SKSYBL - DIS ELSE MBACK = 1 RINC = SKSYBL / DIS DX = XNEW - XOLD DY = YNEW - YOLD XOLD = XOLD + DX * RINC YOLD = YOLD + DY * RINC IX = XOLD IY = YOLD CALL DPSYBL(ID) SKSYBL = DSSYBL GO TO 1 END IF RETURN END C----------------------------------------------------------------------- C READS 80 CHARACTER FROM INTERACTIVE INPUT, C IF END OF FILE THEN RETURN BLANKS C----------------------------------------------------------------------- SUBROUTINE READS8(ISTR) CHARACTER*80 ISTR C--- C--- ISTR = ' ' READ(5,2,END=1) ISTR 1 RETURN 2 FORMAT(A80) END C----------------------------------------------------------------------- C READS 10 CHARACTERS FROM INTERACTIVE INPUT C IF END OF FILE THEN RETURN BLANKS C----------------------------------------------------------------------- SUBROUTINE READS1(ISTR) CHARACTER*10 ISTR C--- C--- ISTR = ' ' READ(5,2,END=1) ISTR 1 RETURN 2 FORMAT(A10) END C----------------------------------------------------------------------- C READ TWO CHARACTERS FROM INPUT C----------------------------------------------------------------------- SUBROUTINE READ2(CH1,CH2) CHARACTER*1 CH1,CH2 C--- C--- CH1 = ' ' CH2 = ' ' READ(5,2,END=1) CH1,CH2 1 RETURN 2 FORMAT(2A1) END C----------------------------------------------------------------------- C READS SINGLE CHARACTER C----------------------------------------------------------------------- SUBROUTINE READ1(CH) CHARACTER*1 CH C--- C--- CH = ' ' READ(5,2,END=1) CH 1 RETURN 2 FORMAT(A1) END C----------------------------------------------------------------------- C DEFINES RELATIVE WINDOW ON SCREEN C----------------------------------------------------------------------- SUBROUTINE DFSCR(XMIN,XMAX,YMIN,YMAX) C--- C--- C = 0 XMIN = COVTX(C+150) XMAX = COVTX(C+950) YMIN = COVTY(C+150) YMAX = COVTY(C+650) RETURN END C----------------------------------------------------------------------- C DEFINED INTERVAL OF DOTTED LINE, DASHED LINE, CIR, SYMBOLS, C DISTANCE, AND RADIUS OF SYMBOLS C----------------------------------------------------------------------- SUBROUTINE DFITVL COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /UTDSH/ UDSH,UDSHS,ULD,USD,RIDS1 COMMON /RADI/ RASY,RATY,RADI,RAINC COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- C--- C = 0 RIDASH = 80 RIDOT = 110 RICIR = 50 RISYBL = 50 RIDIS = 500 RIDSHS = 60 RIDS1 = 50 UDSH = 0.5 UDSHS = 0.4 ULD = 0.3 USD = 0.2 RASY = COVTX(C+7) RATY = COVTX(C+5) RAINC = COVTX(C+1) SP1 = COVTX(C+150) SP2 = COVTX(C+10) SP3 = COVTY(C+150) SP4 = COVTY(C+10) RETURN END C----------------------------------------------------------------------- C SUBROUTINE BDS EXECUTES THE BD, BD0 AND BD1 COMMANDS. C----------------------------------------------------------------------- SUBROUTINE BDS(ISTR,II,SAVE,ICDS,ICD,SYMBOL) REAL Z(10),IX,IY,MINSX,MAXSX,MINSY,MAXSY,PNTS(1999,4) CHARACTER*80 OSTR,ISTR CHARACTER*1 CHAR,MP(81,251) LOGICAL BRNCH,POINT,DFT,USR,PLTR,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM,SAVE,SYMBOL,FIRST,LNKDSH,IBD2 LOGICAL SOLID,DSH,DSHS,LHCIR,LSYBL,LDSH,LDOT INTEGER GRNUM,SPLPT,SPTNM,ERROR INTEGER PTNUM,PINDX,PRESGN,PNTCNT,NVX(2),SYMBL(10) INTEGER ICDS(4),ITP(10),XAXIS,YAXIS,ICD(4) C--- COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /PLOTT/ PLTR,POINT COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /TWOPT/ XNEW1,YNEW1,XOLD1,YOLD1 COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /LINKDA/ LNKDSH COMMON /UTDSH/ UDSH,UDSHS,ULD,USD,RIDS1 COMMON /BD2/ IBD2 COMMON /BDSY/ ITP,SYMBL COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD COMMON /SYBL/ SOLID,DSH,DSHS,LHCIR,LSYBL,LDSH,LDOT COMMON /RADI/ RASY,RATY,RADI,RADINC COMMON /DSH1/ SKD1,DSH1,DSH2,S1,D1,D2,IDASH COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- C--- PINDX = 0 PNTCNT = 0 PRESGN = 0 ID = 0 IDS = 0 XAXIS = NVX(1) YAXIS = NVX(2) NMX = MAX(XAXIS,YAXIS) IF(SAVE) GO TO 5 REWIND 17 CHAR=ISTR(II:II) 30 IF(CHAR.EQ.'0') THEN C--- *SCAN UNIT 7 FOR LARGEST C--- *AND SMALLEST VALUES OF X AND Y. C--- *STORE IN /PLVARS/ CALL SCANBD(ERROR) IF(ERROR.NE.0) RETURN IBD2 = .TRUE. ELSE IF (CHAR.EQ.'1') THEN C--- *READ PLOT LIMITS FROM UNIT 7 READ(17,*,ERR=70)GRNUM,XMIN,XMAX,YMIN,YMAX IBD2 = .TRUE. ELSE IF (CHAR.EQ.'2') THEN IF (.NOT.IBD2) THEN CALL SCANBD(ERROR) IF (ERROR.NE.0) RETURN IBD2 = .TRUE. END IF ELSE IF (USR) THEN OSTR = ' LIMITS' ELSE OSTR = ' ENTER XMIN,XMAX,YMIN,YMAX' END IF WRITE(IWRITE,2) OSTR C--- *READ USER LIMITS READ(5,*,ERR=30)XMIN,XMAX,YMIN,YMAX IBD2 = .TRUE. END IF CALL SINGLE IF(.NOT.DFT) THEN C--- *QUERY BRANCH OR POINT CALL RLABL END IF C--- *SET PLOT PAGE 5 CALL SPAGE C--- *INITIALIZE MAP C--- *AND POINT SAVING ARRAY CALL INARRS(MP,PNTS) CALL INITIN C--- *COMPUTE THE DISTANCE C--- *DEFINE DASHES, ETC. CALL DISXY(MAXSX,MAXSY,MINSX,MINSY,DIS1) TOOCLS = DIS1 / RIDIS C--- REWIND 17 10 READ(17,*,ERR=70,END=90) GRNUM IF (GRNUM.EQ.0) GO TO 10 BACKSPACE 17 C--- FIRST = .TRUE. C--- 20 READ(17,*,END=90,ERR=80)GRNUM,PTNUM,SPLPT,SPTNM,(Z(I),I=1,NMX) IF (GRNUM.EQ.0) GOTO 10 C--- C--- *NEW CURVE IF (ABS(PTNUM).EQ.1) THEN CALL DFNCUR FIRST = .TRUE. END IF C--- X = Z(XAXIS) Y = Z(YAXIS) CALL PLCMDS(7) XNEW = IX YNEW = IY XNEW1 = X YNEW1 = Y IF (BRNCH.OR.POINT) THEN IF (FIRST) THEN CALL MAP(MP,XNEW,YNEW,XNEW,YNEW) ELSE CALL MAP(MP,XNEW,YNEW,XOLD,YOLD) END IF END IF IF(X.GE.XMIN.AND.X.LE.XMAX.AND.Y.GE.YMIN.AND.Y.LE.YMAX)THEN IF (POINT.AND.SPTNM.NE.0) THEN C--- *SAVE SPECIAL POINT PINDX = PINDX + 1 PNTS(PINDX,1) = IX PNTS(PINDX,2) = IY PNTS(PINDX,3) = SPTNM PNTS(PINDX,4) = 1 END IF IF (BRNCH.AND.GRNUM.NE.PRESGN) THEN C--- *ON NEW BRANCH ? PNTCNT = PNTCNT + 1 END IF C--- IF (PNTCNT.EQ.10.AND.GRNUM.NE.PRESGN) THEN C--- *LABELLED POINT PRESGN = GRNUM PINDX = PINDX + 1 PNTS(PINDX,1) = IX PNTS(PINDX,2) = IY PNTS(PINDX,3) = GRNUM PNTS(PINDX,4) = 4 PNTCNT = 0 END IF END IF C--- C--- *ASSIGN TYPE IF (GRNUM.GT.0.AND.PTNUM.GT.0) THEN ID = ICD(1) IDS = ICDS(1) ELSE IF (GRNUM.GT.0.AND.PTNUM.LT.0) THEN ID = ICD(2) IDS = ICDS(2) ELSE IF (GRNUM.LT.0.AND.PTNUM.GT.0) THEN ID = ICD(3) IDS = ICDS(3) ELSE IF (GRNUM.LT.0.AND.PTNUM.LT.0) THEN ID = ICD(4) IDS = ICDS(4) END IF C--- IF (.NOT.DP) ID = 2 C--- IF (ID.NE.1) DSH = .FALSE. IF (ID.NE.2) SOLID = .FALSE. IF (.NOT.(ID.EQ.3.OR.ID.EQ.4)) LHCIR = .FALSE. IF (ID.NE.5) LDOT = .FALSE. IF (ID.NE.6) DSHS = .FALSE. IF (ID.NE.7) LDSH = .FALSE. IF (IDS.EQ.0) LSYBL = .FALSE. C--- IF (.NOT.FIRST) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (TOOCLS.GT.DIS) THEN IF (SYMBOL) THEN IF (IDS.EQ.0.AND.ID.NE.3.AND.ID.NE.4) THEN RADI = RASY IX = XOLD IY = YOLD CALL PLCMDS(6) IX = XNEW IY = YNEW CALL DRAW END IF IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)THEN GOTO 10 ELSE GOTO 20 ENDIF END IF END IF END IF C--- CALL SYMBLS(XNEW1,YNEW1,ID,IDS,FIRST,SYMBOL) C--- FIRST = .FALSE. XOLD = XNEW YOLD = YNEW XOLD1 = XNEW1 YOLD1 = YNEW1 IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)THEN GOTO 10 ELSE GOTO 20 ENDIF C--- 70 IF(GRNUM.EQ.0)GO TO 10 ERROR = 8 RETURN C--- 80 ERROR = 6 GO TO 10 90 CONTINUE C--- IF (POINT.OR.BRNCH) THEN CALL LGRPHS(MP,PNTS) END IF C--- CALL PLCMDS(9) C--- IF(PLTR) THEN CALL PLCHDW(2) END IF 2 FORMAT(A80) RETURN END C----------------------------------------------------------------------- C DEFINE INTERVAL, LENGTH, DISTANCE C----------------------------------------------------------------------- SUBROUTINE INITIN INTEGER NVX(2),SPLPT,COUNTC REAL XS(4),YS(4),XYPT(4,2),IX,IY,MINSX,MAXSX,MINSY,MAXSY C--- COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC COMMON /UTDSH/ UDSH,UDSHS,ULD,USD,RIDS1 COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /DSH1/ SKD1,DSH1,DSH2,S1,D1,D2,IDASH C--- C--- *DEFINE SCREEN C--- XLEFT = XMIN XRIGHT = XMAX YBOTTM = YMIN YTOP = YMAX C--- *DEFINE LENGTH C--- *DASH, DOT, CIR, SYMBOL CALL DFSCR(XI,XA,YI,YA) CALL DISXY(XA,YA,XI,YI,DIS) DSDSH = DIS / RIDASH DSDOT = DIS / RIDOT DSCIR = DIS / RICIR DSSYBL = DIS / RISYBL CDASHS = DIS / RIDSHS DSH1 = DIS / RIDS1 C--- C--- SKDSH = DSDSH * (1.0 - UDSH) DSDSH = DSDSH * UDSH DKDSHS = CDASHS * (1.0 - UDSHS) / 2.0 CDASHS = CDASHS * UDSHS SKD1 = DSH1 * (1.0 - ULD - USD) / 2.0 DSH2 = DSH1 * USD DSH1 = DSH1 * ULD CALL DFNCUR RETURN END C----------------------------------------------------------------------- C DEFINE INTERVAL FOR NEW CURVES C----------------------------------------------------------------------- SUBROUTINE DFNCUR LOGICAL SOLID,DSH,DSHS,LHCIR,LSYBL,LDSH,LNKDSH,LDOT C--- COMMON /SKDS/ SKDSH,SKDOT,SKCIR,SKSYBL,DSDSH,DSDOT,DSCIR,DSSYBL COMMON /DASHC/ CDASH,DSKDSH,CDASHS,DKDSHS,CD1,CSK1,ITYPE COMMON /LINKDA/ LNKDSH COMMON /DSH1/ SKD1,DSH1,DSH2,S1,D1,D2,IDASH COMMON /SYBL/ SOLID,DSH,DSHS,LHCIR,LSYBL,LDSH,LDOT C--- C--- SOLID = .FALSE. DSH = .FALSE. DSHS = .FALSE. LHCIR = .FALSE. LSYBL = .FALSE. LDSH = .FALSE. LDOT = .FALSE. LNKDSH = .TRUE. C--- CDASH = DSDSH DSKDSH = SKDSH SKDOT = DSDOT SKCIR = DSCIR SKSYBL = DSSYBL ITYPE = 1 CD1 = CDASHS CSK1 = DKDSHS IDASH = 1 S1 = SKD1 D1 = DSH1 D2 = DSH2 RETURN END C----------------------------------------------------------------------- C INITIALIZE OF ICDS EQUAL TO ZEROS C----------------------------------------------------------------------- SUBROUTINE ICDS0(ICDS) INTEGER ICDS(4) C--- C--- DO 1 I=1,4 ICDS(I) = 0 1 CONTINUE RETURN END C----------------------------------------------------------------------- C THE FOLLOWING SUBROUTINE SCANS UNIT 7 TO FIND THE C SMALLEST AND LARGEST VALUES OF X AND Y IN THE FILE. THESE C ARE RETURNED TO SUBROUTINE BDS AS XMIN, XMAX, YMIN, YMAX C IN COMMON AREA /PLVARS/. C----------------------------------------------------------------------- SUBROUTINE SCANBD(ERROR) REAL Z(50),IX,IY,MINSX,MAXSX,MINSY,MAXSY INTEGER GRNUM,PTNUM,SPLPT,SPTNUM,ERROR,NVX(2),XAXIS,YAXIS LOGICAL FPASS COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- XAXIS = NVX(1) YAXIS = NVX(2) NMX = MAX(XAXIS,YAXIS) ERROR = 0 FPASS = .TRUE. 1 READ(17,*,ERR=4,END=5)GRNUM IF(GRNUM.EQ.0)GO TO 1 BACKSPACE 17 2 READ(17,*,ERR=3,END=5)GRNUM,PTNUM,SPLPT + ,SPTNUM,(Z(I),I=1,NMX) X = Z(XAXIS) Y = Z(YAXIS) IF (GRNUM.EQ.0) GOTO 1 IF(FPASS) THEN XMIN = X XMAX = X YMIN = Y YMAX = Y FPASS = .FALSE. ELSE IF(X.LT.XMIN)XMIN = X IF(X.GT.XMAX)XMAX = X IF(Y.LT.YMIN)YMIN = Y IF(Y.GT.YMAX)YMAX = Y END IF IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)GOTO 1 GO TO 2 3 IF (GRNUM.EQ.0) GO TO 1 4 ERROR = 11 5 RETURN END C----------------------------------------------------------------------- C REDEFINES A PROPER WINDOW SIZE FOR PLOTTING C A SINGLE POINT, A HORIZONTAL OR A VERTICAL LINE C----------------------------------------------------------------------- SUBROUTINE SINGLE INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- CALL REDFMM(XMIN,XMAX) CALL REDFMM(YMIN,YMAX) RETURN END C----------------------------------------------------------------------- C REDEFINES MINIMUM AND MAXIMUM OF X, Y OR Z C----------------------------------------------------------------------- SUBROUTINE REDFMM(FMIN,FMAX) C--- C--- IF (FMIN.EQ.FMAX) THEN FMIN = FMIN * 0.95 FMAX = FMAX * 1.05 END IF C--- *IF MIN AND MAX ZERO IF (FMIN.EQ.0.AND.FMAX.EQ.0) THEN FMIN = -0.1 FMAX = 0.1 END IF C--- *CHECK FMIN IF (FMIN.GT.FMAX) THEN S1 = FMIN FMIN = FMAX FMAX = S1 END IF RETURN END C----------------------------------------------------------------------- C SETS UP THE BASIC OUTLINE OF THE GRAPH C ON THE SCREEN. THIS INCLUDES AXIS LINES, AXIS LABELS, C GRAPH TITLE AND TYPE OF GRID LINE WANTED. IT CALLS C SUBROUTINE SAXIS TO LABEL AND PUT OUT GRID LINES AND C INFORMATION PASSED BACK IN /PLVARS/ IS USED TO SET THE C VIRTUAL PAGE AND SCREEN WINDOW. C----------------------------------------------------------------------- SUBROUTINE SPAGE CHARACTER*80 TTITLE,BTITLE,XLAB,YLAB,ADJ CHARACTER*1 AXIS INTEGER NVX(2),SPLPT LOGICAL DFT,USR,PLTR,BRNCH,POINT,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM,QSCOM REAL NAVRX,NAVRY,IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /LABLS/TTITLE,BTITLE,XLAB,YLAB COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /QSC/ QSCOM COMMON /PLOTT/ PLTR,POINT COMMON /PTITLE/ ADJ,NCHR C--- C--- IF((.NOT.DFT).AND.(IWRITE.EQ.ITERM)) THEN CALL ENTGRD(2) END IF CALL PLCMDS(1) CALL PLCHDW(3) IF(PLTR) THEN CALL PLCHDW(1) END IF C--- *HEAVY AXIS LINES C = 0 IX = MINSX - COVTX(C+2) IY = MINSY - COVTY(C+15) CALL PLCMDS(2) IY = MAXSY CALL PLCMDS(3) IX = MINSX CALL PLCMDS(3) IY = MINSY CALL PLCMDS(3) IX = MINSX - COVTX(C+15) CALL PLCMDS(2) IX = MAXSX CALL PLCMDS(3) IY = MINSY - COVTY(C+2) CALL PLCMDS(3) IX = MINSX - COVTX(C+15) CALL PLCMDS(3) C--- C--- IF (QSCOM) THEN IX = MINSX IY = MAXSY CALL PLCMDS(2) IX = MAXSX CALL PLCMDS(3) IY = MINSY CALL PLCMDS(3) END IF C--- C--- *TOP TITLES IF (TIT) THEN IF(TOP.AND.TTITLE.NE.' ') THEN NAVRX = (MAXSX+MINSX)/2 NCHR = 60 IX = NAVRX-COVTX(C+370) IY = MAXSY+COVTY(C+60) CALL ADJT(TTITLE,NCHR,ADJ) CALL PLCMDS(25) CALL PLCTNM(1) CALL PLCMDS(20) END IF C--- C--- C--- *BOTTOM TITLES IF(BOTTOM.AND.BTITLE.NE.' ') THEN NAVRX = (MAXSX+MINSX)/2 NCHR = 60 IX = NAVRX-COVTX(C+370) IY = MINSY-COVTY(C+100) CALL ADJT(BTITLE,NCHR,ADJ) CALL PLCMDS(26) CALL PLCTNM(1) CALL PLCMDS(20) END IF END IF C--- C--- C--- *LABELS ON X-AXIS C--- IF (AXLB) THEN IF (XLAB.NE.' ') THEN NAVRX = (MAXSX+MINSX)/2 NCHR = 30 IX = NAVRX+COVTX(C+30) IY = MINSY-COVTY(C+70) CALL ADJX(XLAB,NCHR,ADJ) CALL PLCMDS(27) CALL PLCTNM(1) CALL PLCMDS(20) END IF C--- C--- *LABELS ON Y-AXIS C--- IF (YLAB.NE.' ') THEN NAVRY = (MAXSY+MINSY)/2 NCHR = 30 IX = MINSX-COVTX(C+75) IY = NAVRY+COVTY(C+280) CALL ADJY(YLAB,NCHR,ADJ) CALL PLCMDS(27) CALL PLCTNM(1) CALL PLCMDS(20) END IF END IF C--- IF (.NOT.QSCOM) THEN C--- *X AXIS AXIS = 'X' CALL SAXIS(XMIN,XMAX,AXIS,XINCR) CALL XAXIS(XINCR) C--- *Y AXIS AXIS = 'Y' CALL SAXIS(YMIN,YMAX,AXIS,YINCR) CALL YAXIS(YINCR) END IF CALL DFDIST RETURN END C----------------------------------------------------------------------- C ELIMINATES ANY BLANK C CHARACTERS AT THE BEGINNING OF A TITLE. C----------------------------------------------------------------------- SUBROUTINE RESLAB(LAB) CHARACTER*(*) LAB LOGICAL BLANK C--- C--- BLANK = .TRUE. K = 0 N = LEN(LAB) DO 1 J=1,N IF (BLANK) K = K + 1 IF (LAB(J:J).NE.' ') BLANK = .FALSE. 1 CONTINUE L = 0 DO 2 J=K,N L = L + 1 LAB(L:L) = LAB(J:J) 2 CONTINUE RETURN END C----------------------------------------------------------------------- C DECOMPOSES A STRING OF C CHARACTERS FOR CENTERING IT ON THE GRAPH. C----------------------------------------------------------------------- SUBROUTINE ADJT(LAB,NCHR,ADJ) CHARACTER*80 ADJ,LAB C--- C--- CALL RESLAB(LAB) ADJ = ' ' J = 0 2 J = J + 1 IF(J.GT.NCHR) GO TO 3 IF(LAB(J:J).NE.' ') GO TO 2 IF(LAB(J+1:J+1).NE.' ') GO TO 2 3 J = J - 1 IDF = (NCHR-J)/2 DO 4 IP=1,J IDF = IDF + 1 4 ADJ(IDF:IDF) = LAB(IP:IP) RETURN END C----------------------------------------------------------------------- C DECOMPOSES A CHARACTER STRING FOR RIGHT C ADJUSTMENT ON THE HORIZONTAL AXIS. C----------------------------------------------------------------------- SUBROUTINE ADJX(LAB,NCHR,ADJ) CHARACTER*80 ADJ,LAB C--- C--- CALL RESLAB(LAB) ADJ = ' ' J = 0 2 J = J+1 IF(J.GT.NCHR) GO TO 3 IF(LAB(J:J).NE.' ') GO TO 2 IF(LAB(J+1:J+1).NE.' ') GO TO 2 3 J = J-1 IDF = NCHR - J DO 4 IP=1,J IDF = IDF + 1 4 ADJ(IDF:IDF) = LAB(IP:IP) RETURN END C----------------------------------------------------------------------- C DECOMPOSES A CHARACTER STRING FOR LEFT C ADJUSTMENT ON THE VERTICAL AXIS. C----------------------------------------------------------------------- SUBROUTINE ADJY(LAB,NCHR,ADJ) CHARACTER*80 ADJ,LAB C--- C--- CALL RESLAB(LAB) ADJ = ' ' J = 0 2 J = J+1 IF(J.GT.NCHR) GO TO 3 IF(LAB(J:J).NE.' ') GO TO 2 IF(LAB(J+1:J+1).NE.' ') GO TO 2 3 J = J - 1 DO 4 IP=1,J 4 ADJ(IP:IP) = LAB(IP:IP) RETURN END C----------------------------------------------------------------------- C USED TO ENTER TITLES AND AXIS LABELS. C WITH A SERIAL USAGE OPTION IT ALSO ASKS IF TITLES, AXIS LABELS C OR GRIDS LINES ARE WANTED. C----------------------------------------------------------------------- SUBROUTINE ENTGRD(CALR) INTEGER CALR CHARACTER*80 OSTR,TTITLE*80,BTITLE*80,XLAB*80,YLAB*80 CHARACTER*1 CHAR,CHAR1 LOGICAL DFT,USR,PLTR,BRNCH,POINT,TOP,BOTTOM,TIT LOGICAL AXLB,QLBS,RTIT,RAXLB,GRIDS,DP,QSCOM COMMON /LABLS/TTITLE,BTITLE,XLAB,YLAB COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /QSC/ QSCOM COMMON /PLOTT/ PLTR,POINT C--- C--- C--- * USER OPTION* IF(CALR.EQ.1) THEN RAXLB = .TRUE. RTIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. GO TO 20 END IF TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. RTIT = .FALSE. RAXLB = .FALSE. GRIDS = .FALSE. C--- *GRID LINES ? IF (.NOT.QSCOM) THEN IF (USR) THEN OSTR = ' GL' ELSE OSTR = ' GRID LINES ? (Y OR N)' END IF WRITE(IWRITE,1)OSTR CALL READ1(CHAR) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN GRIDS = .TRUE. ELSE GRIDS = .FALSE. END IF END IF C--- *SHORT TITLE AND AXES ? IF (USR) THEN OSTR = ' T - C' WRITE(IWRITE,1)OSTR CALL READ2(CHAR,CHAR1) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN TIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. IF ((CHAR1.EQ.'Y').OR.(CHAR1.EQ.'y')) THEN RTIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. END IF END IF OSTR = ' A - C' WRITE(IWRITE,1)OSTR CALL READ2(CHAR,CHAR1) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN AXLB = .TRUE. IF ((CHAR1.EQ.'Y').OR.(CHAR1.EQ.'y')) THEN RAXLB = .TRUE. END IF END IF ELSE C--- *LONG TITLE AND AXES ? OSTR = ' TITLE ? (Y OR N)' WRITE(IWRITE,1)OSTR CALL READ1(CHAR) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN TIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. IF(ICT.EQ.0) THEN ICT = 1 RTIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. ELSE OSTR = ' CHANGE TITLES ? (Y OR N)' WRITE(IWRITE,1)OSTR CALL READ1(CHAR) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN RTIT = .TRUE. TOP = .TRUE. BOTTOM = .TRUE. END IF END IF END IF OSTR = ' AXES LABELS ? (Y OR N)' WRITE(IWRITE,1)OSTR CALL READ1(CHAR) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN AXLB = .TRUE. IF(ICL.EQ.0) THEN ICL = 1 RAXLB = .TRUE. ELSE OSTR = ' CHANGE AXES LABELS ? (Y OR N)' WRITE(IWRITE,1) OSTR CALL READ1(CHAR) IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN RAXLB = .TRUE. END IF END IF END IF END IF 20 IF (RAXLB) THEN C--- *READ X AXIS LABEL IF (.NOT.USR) THEN OSTR = ' ENTER X AXIS LABEL BETWEEN THE QUOTES' WRITE(IWRITE,1)OSTR END IF OSTR = ' " "' WRITE(IWRITE,1)OSTR CALL READS8(XLAB) C--- *READ Y AXIS LABEL IF (.NOT.USR) THEN OSTR = ' ENTER Y AXIS LABEL BETWEEN THE QUOTES' WRITE(IWRITE,1)OSTR END IF OSTR = ' " "' WRITE(IWRITE,1)OSTR CALL READS8(YLAB) END IF IF (RTIT) THEN C--- *READ TOP AND BOTTOM TI IF (TOP) THEN IF (.NOT.USR) THEN OSTR = ' ENTER TOP TITLE BETWEEN THE QUOTES' WRITE(IWRITE,1)OSTR END IF WRITE(IWRITE,15) CALL READS8(TTITLE) END IF IF (BOTTOM) THEN IF (.NOT.USR) THEN OSTR = ' ENTER BOTTOM TITLE BETWEEN THE QUOTES' WRITE(IWRITE,1)OSTR END IF WRITE(IWRITE,15) CALL READS8(BTITLE) END IF END IF 1 FORMAT(A80) 15 FORMAT(1X,'" ' + ,' "') RETURN END C----------------------------------------------------------------------- C WRITES THE AXIS LINES AND FORMATS PARAMETERS C TO OUTPUT THE GRID LINES AND GRID LABELS. C----------------------------------------------------------------------- SUBROUTINE SAXIS(MIN,MAX,AXIS,INCR) CHARACTER*1 AXIS REAL INCR,MIN,MAX C--- C--- DIFF = MAX - MIN TEMP = LOG10(ABS(DIFF)) IF (TEMP.GT.1.0) THEN EXPON = AINT(TEMP) ELSE IF (TEMP.LE.0.0) THEN EXPON = AINT(TEMP) - 1 ELSE EXPON = 0 END IF END IF DIFF = DIFF / (10 ** EXPON) C--- *INCR IS THE DIFFERENCE C--- *BETWEEN GRID AND C--- *LABEL VALUES INCR = 1 IF (DIFF.LE.2) THEN INCR = 0.25 ELSE IF (DIFF.LE.4) THEN INCR = 0.5 END IF END IF INCR = INCR * (10 ** EXPON) C--- *MIN IS THE SMALLEST AXIS C--- *LABEL VALUE FACTOR = 1 / INCR IF (MIN.GE.0) THEN MIN = AINT(MIN * FACTOR * 1.00001) / FACTOR ELSE MIN = AINT(MIN * FACTOR - 0.99999) / FACTOR ENDIF C--- *MAX IS THE LARGEST AXIS C--- *LABEL VALUE IF (MAX.GE.0) THEN MAX = AINT(MAX * FACTOR + 0.99999) / FACTOR ELSE MAX = AINT(MAX * FACTOR * 0.99999) / FACTOR END IF RETURN END C----------------------------------------------------------------------- C ASKS IF BRANCH AND POINT C LABELLING IS REQUIRED. IT SETS THE BRANCH AND POINT FLAGS C IN THE COMMON AREA /UOPTS/. C----------------------------------------------------------------------- SUBROUTINE RLABL LOGICAL BRNCH,POINT,USR,DFT,TIT,AXLB,QLBS,GRIDS,PLTR,DP LOGICAL TOP,BOTTOM CHARACTER*1 OSTR*80,CHAR COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /PLOTT/ PLTR,POINT C--- C--- POINT = .FALSE. BRNCH = .FALSE. C--- *SHORT QUESTION* IF (USR) THEN OSTR = ' LAB' WRITE(IWRITE,2)OSTR ELSE C--- *LONG QUESTION* OSTR = ' SOLUTION LABELS ? ( OR ) ' WRITE(IWRITE,2)OSTR END IF CALL READ1(CHAR) C--- IF ((CHAR.EQ.'Y').OR.(CHAR.EQ.'y')) THEN C--- *SET POINT LABELLING FLAG POINT = .TRUE. END IF 2 FORMAT(A80) RETURN END C----------------------------------------------------------------------- C SUBROUTINE CONVT CONVERTS A CHARACTER STRING OF DIGITS SEPARATED C BY BLANKS TO AN ARRAY CONTAINING THE EQUIVALENT INTEGERS (PARRY). C IT IS USED TO DECODE THE POINTS INPUT IN THE "2D" COMMAND. C----------------------------------------------------------------------- SUBROUTINE CONVT(ISTR,II,NUM,PARRY,VALID) CHARACTER*1 CHAR,BLANK,ZERO,NINE,COMMA CHARACTER*80 ISTR,OSTR INTEGER TEMP,TOTAL,PARRY(1999),POS LOGICAL VALID,LINT COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- ZERO = '0' NINE = '9' BLANK = ' ' COMMA = ',' POS = II C--- *FIRST CHARACTER POSITION TOTAL = 0 VALID = .TRUE. LINT = .FALSE. C--- *INITIALIZE PARRY TO ZERO DO 1 I = 1,1999 PARRY(I) = 0 1 CONTINUE INDX = 0 2 IF(POS.LE.80)THEN CHAR = ISTR(POS:POS) POS = POS+1 IF(CHAR.GE.ZERO.AND.CHAR.LE.NINE)THEN C--- *CONVERT TEMP = ICHAR(CHAR)-ICHAR(ZERO) IF(LINT)THEN TOTAL = TOTAL*10+TEMP ELSE C--- *STARTING NEW INTEGER TOTAL = TEMP LINT = .TRUE. END IF ELSE IF(LINT)THEN INDX = INDX+1 PARRY(INDX) = TOTAL LINT = .FALSE. END IF IF(CHAR.NE.BLANK.AND.CHAR.NE.COMMA)THEN OSTR = ' INVALID COMMAND, REENTER' VALID = .FALSE. WRITE(IWRITE,3)OSTR END IF END IF IF(VALID)THEN C--- *CONVERT GO TO 2 END IF END IF NUM = INDX IF (INDX.EQ.0.AND.VALID) THEN OSTR = ' INVALID COMMAND' WRITE(IWRITE,3) OSTR VALID = .FALSE. END IF RETURN 3 FORMAT(A80) END C----------------------------------------------------------------------- C THE MAIN ROUTINE FOR PUTTING C BRANCH AND POINT LABELS ON THE CURVES. C----------------------------------------------------------------------- SUBROUTINE LGRPHS(MP,PNTS) CHARACTER*1 MP(81,251) REAL PNTS(1999,4) C--- C--- I = 1 1 IF((PNTS(I,1).EQ.0).OR.(I.GT.1999)) RETURN CALL FINDSP(I,PNTS,MP) I = I + 1 GO TO 1 END C----------------------------------------------------------------------- C TRIES TO FIND AN EMPTY SPACE TO PUT THE C POINT OR BRANCH LABEL FROM PNTS IN BY SEARCHING FOR THREE C UNCHANGED ENTRIES IN MP. THE SEARCH IS OUTWARD FROM THE C POINT TO BE LABELLED. IF SPACE CAN'T BE FOUND THE LABEL C WILL BE WRITTEN OUT ANYWAY. C----------------------------------------------------------------------- SUBROUTINE FINDSP(II,PNTS,MP) INTEGER XD,YD,NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,PNTS(1999,4) CHARACTER*1 MP(81,251),ANS,CHONE,CHTWO*2,CHFIF*15 COMMON/PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /SPNUM/ SP1,SP2,SP3,SP4 COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF C--- C--- X1 = PNTS(II,1) Y1 = PNTS(II,2) NUM = INT(ABS(PNTS(II,3))) CALL DICHR(NUM) C--- *X1, Y1 ARE SCREEN COORDINATES XI = (X1 - SP1) / SP2 + 1 YI = (Y1 - SP3) / SP4 + 1 RD = ACOS(-1.0) / 180.0 START = RD * 30.0 A45 = RD * 45.0 A135 = RD * 135.0 A225 = RD * 225.0 A315 = RD * 315.0 RADIUS = 1 NPOINT = 16 C--- 1 RADIUS = RADIUS + 1 NPOINT = NPOINT + 8 ST = START RINC = RD * 360.0 / REAL(NPOINT) C--- DO 2 I=1,NPOINT XD = INT(RADIUS * COS(ST) + XI) YD = INT(RADIUS * SIN(ST) + YI) CALL EMPTSP(XD,YD,MP,ANS) IF (ANS.EQ.'Y') THEN R1 = (RADIUS + 3) * SP2 CALL DXY(R1,ST,X1,Y1,IX,IY) IF (IX.GE.MINSX.AND.IX.LE.MAXSX.AND.IY.GE.MINSY.AND. + IY.LE.MAXSY) THEN DO 4 I1=XD-2,XD+2 DO 3 I2=YD-1,YD+1 MP(I1,I2) = 'X' 3 CONTINUE 4 CONTINUE GOTO 5 END IF END IF ST = ST + RINC 2 CONTINUE IF (RADIUS.LT.70) GOTO 1 C--- *IF NO EMPTY SPACE RETURN 5 IF (ST.GE.A135.AND.ST.LE.A225) THEN R1 = (RADIUS + INDXCH + 0.5) * SP2 CALL DXY(R1,ST,X1,Y1,IX,IY) ELSE IF (ST.LE.A45.OR.ST.GE.A315) THEN R1 = (RADIUS + 0.5) * SP2 CALL DXY(R1,ST,X1,Y1,IX,IY) ELSE IF (ST.GE.A225.AND.ST.LE.A315) THEN R1 = (RADIUS + 1.0) * SP2 CALL DXY(R1,ST,X1,Y1,IX,IY) IX = IX - (INDXCH - 1) * SP2 IY = IY - SP2 ELSE R1 = (RADIUS + 0.5) * SP2 CALL DXY(R1,ST,X1,Y1,IX,IY) IX = IX - (INDXCH - 1) * SP2 END IF C--- *SAVE LABEL RIX=IX RIY=IY C--- *LABEL DASH RADIUS = RADIUS * SP2 CALL DXY(RADIUS,ST,X1,Y1,IX,IY) CALL PLCMDS(23) CALL PLCMDS(2) IX = X1 IY = Y1 CALL PLCMDS(3) C--- C *PRINT LABEL IX=RIX IY=RIY CALL PLCTNM(22) CALL PLCMDS(20) C--- RETURN END C----------------------------------------------------------------------- C ORGANIZES THE SEARCH ALONG TWO SIDES OF C A SQUARE OF SIZE 2(XD) WITH PNT XI, YI IN ITS CENTER. C----------------------------------------------------------------------- SUBROUTINE EMPTSP(IX,IY,MP,ANS) CHARACTER*1 MP(81,251),ANS C--- ANS = 'N' IF (IX.GT.77.OR.IX.LT.4) RETURN IF (IY.GT.47.OR.IY.LT.4) RETURN DO 2 I=IX-2,IX+2 DO 1 J=IY-2,IY+2 IF (MP(I,J).EQ.'X') RETURN 1 CONTINUE 2 CONTINUE ANS = 'Y' RETURN END C----------------------------------------------------------------------- C INITIALIZES THE MAP AND POINT ARRAYS THAT ARE C USED TO LABEL THE PLOTTED CURVES. C----------------------------------------------------------------------- SUBROUTINE INARRS(MP,PNTS) CHARACTER*1 MP(81,251) REAL PNTS(1999,4) C--- C--- DO 2 I = 1,81 DO 1 J = 1,251 MP(I,J) = 'O' 1 CONTINUE 2 CONTINUE DO 3 I = 1,1999 PNTS(I,1) = 0 PNTS(I,2) = 0 PNTS(I,3) = 0 PNTS(I,4) = 0 3 CONTINUE RETURN END C----------------------------------------------------------------------- C SCANS THE "2D" FILE TO FIND THE MAX AND MIN POINTS T C BE PLOTTED. THESE ARE PUT IN ARARY BNDS. THE SPECIAL POINTS TO BE C PLOTTED ARE ALSO CHECKED FOR DUPLICATE POINTS (ERROR NO. 4). ERROR C MESSAGES WILL BE GENERATED IF THE "Q" FILE ISN'T STRUCTURED PROPERLY C (ERROR NO. 3). C----------------------------------------------------------------------- SUBROUTINE SCAN2D(PARRY,BNDS,NUM,ERROR) INTEGER PARRY(1999),ERROR,TEMP,SLAB(1999),ENLAB(1999) REAL BNDS(251,2) REAL MINA(1999,251),MAXA(1999,251),AVERA(1999,251) COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /MMA/ MINA,MAXA,AVERA C--- C--- C--- C--- *SHOW POINTS FROM <2D> ERROR = 0 C--- *DUPLICATE <2D> DO 20 I = 1,NUM-1 TEMP = PARRY(I) DO 18 J = I+1,NUM IF (TEMP.EQ.PARRY(J)) THEN ERROR = 4 RETURN END IF 18 CONTINUE 20 CONTINUE C--- *CHECK LABELS DO 2 I=1,NUM DO 1 J=1,NLAB IF (PARRY(I).EQ.SLAB(J)) GO TO 2 1 CONTINUE ERROR = 5 RETURN 2 CONTINUE C--- *GET MIN AND MAX OF ALL LABELS C--- *ENTERED DO 4 I=1,NUM DO 3 J=1,NLAB IF (PARRY(I).NE.SLAB(J)) GO TO 3 IF (I.EQ.1) THEN DO 5 K=1,NAXIS BNDS(K,1) = MINA(J,K) BNDS(K,2) = MAXA(J,K) 5 CONTINUE ELSE DO 6 K=1,NAXIS IF(BNDS(K,1).GT.MINA(J,K)) BNDS(K,1)=MINA(J,K) IF(BNDS(K,2).LT.MAXA(J,K)) BNDS(K,2)=MAXA(J,K) 6 CONTINUE END IF GO TO 4 3 CONTINUE 4 CONTINUE RETURN END C----------------------------------------------------------------------- C THIS IS THE MAIN ROUTINE FOR PLOTTING THE "Q" FILE. C----------------------------------------------------------------------- SUBROUTINE PLOT2D(XAXS,YAXS,PARRY,NUM,BNDS,ANS) CHARACTER*2 ANS,CHTWO,CHFIF*15 CHARACTER*80 XLAB,YLAB,TTITLE,BTITLE,CHONE*1 INTEGER ERROR,XAXS,YAXS,PARRY(1999),NVX(2),SPLPT INTEGER ID2D(1999),IDS2D(1999) REAL BNDS(251,2),IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL DFT,USR,PLTR,BRNCH,POINT,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM COMMON /UOPTS/DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /LABLS/TTITLE,BTITLE,XLAB,YLAB COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /PLOTT/ PLTR,POINT COMMON /SY2D/ ID2D,IDS2D COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF C--- C--- ANS = ' ' DO 1 I=1,NUM ID2D(I) = 2 IDS2D(I) = 0 1 CONTINUE XAXS = 1 YAXS = 2 XMIN = BNDS(XAXS,1) XMAX = BNDS(XAXS,2) YMIN = BNDS(YAXS,1) YMAX = BNDS(YAXS,2) CALL SINGLE C--- *<2D> 2 CALL ENT2D(XAXS,YAXS,PARRY,NUM,BNDS,ICODE) IF (ICODE.EQ.3) THEN RETURN ELSE IF (ICODE.EQ.2) THEN ANS = '3D' RETURN END IF C--- *DISPLAY IF (.NOT.DFT) THEN CALL RLABL END IF IF (QLBS) THEN XLAB = ' ' YLAB = ' ' IF (XAXS.EQ.1) THEN XLAB = 'TIME' ELSE CALL DICHR(XAXS-1) XLAB(1:1) = 'X' IF (INDXCH.EQ.1) THEN XLAB(2:3) = CHONE ELSE XLAB(2:3) = CHTWO END IF END IF C--- *PUT TITLE ON Y AXIS IF (YAXS.EQ.1) THEN YLAB = 'TIME' ELSE CALL DICHR(YAXS-1) YLAB(1:1) = 'X' IF (INDXCH.EQ.1) THEN YLAB(2:3) = CHONE ELSE YLAB(2:3) = CHTWO END IF END IF END IF CALL SPAGE CALL DRW2D(XAXS,YAXS,PARRY,ERROR,NUM,POINT,PLTR) CALL PLCHDW(3) GO TO 2 END C----------------------------------------------------------------------- C EXECUTES <2D> COMMANDS C----------------------------------------------------------------------- SUBROUTINE ENT2D(XAXS,YAXS,PARRY,NUM,BNDS,ICODE) INTEGER SLAB(1999),ENLAB(1999),PARR1(1999),ID2D(1999),IDS2D(1999) INTEGER XAXS,YAXS,PARRY(1999),NVX(2),SPLPT,ERROR REAL BNDS(251,2),IX,IY,MINSX,MAXSX,MINSY,MAXSY CHARACTER*80 ISTR,OSTR LOGICAL PLTR,POINT,VALID,DFT,USR,BRNCH,TOP,BOTTOM,TIT,AXLB LOGICAL QLBS,GRIDS,DP C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /PLOTT/ PLTR,POINT COMMON /SY2D/ ID2D,IDS2D COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /UOPTS/ DFT,USR,BRNCH,ICL,ICT,TOP,BOTTOM,TIT,AXLB, + QLBS,GRIDS,DP C--- C--- 1 OSTR = ' NUMBER OF COMPONENTS :' WRITE(ITERM,3) OSTR(1:24),NAXIS OSTR = + ' ENTER AXES (DEFAULT ), (DISPLAY), OR (EXIT)' WRITE(ITERM,7) OSTR(1:23),XAXS,YAXS,OSTR(24:59) C--- *READ DATA INPUT CALL READS8(ISTR) C--- *DISPLAY IF (ISTR.EQ.'D '.OR.ISTR.EQ.'d ') THEN ICODE = 1 RETURN END IF C--- *PLOTTER IF (ISTR.EQ.'PO'.OR.ISTR.EQ.'po') THEN PLTR = .TRUE. ICODE = 1 RETURN END IF C--- *SAVE GRAPH IF (ISTR.EQ.'SA' .OR.ISTR.EQ.'sa' .OR. * ISTR.EQ.'SAV' .OR.ISTR.EQ.'sav' .OR. * ISTR.EQ.'SAVE'.OR.ISTR.EQ.'save' )THEN IWRITE = ISAVE CALL CRFLNM(1) CALL SPAGE CALL DRW2D(XAXS,YAXS,PARRY,ERROR,NUM,POINT,PLTR) CALL PLCHDW(3) CALL CRFLNM(2) IWRITE = ITERM CALL COMPLT GO TO 1 END IF C--- *SET UP TITLE IF (ISTR.EQ.'ST'.OR.ISTR.EQ.'st') THEN CALL ENTGRD(1) TIT = .TRUE. AXLB = .TRUE. QLBS = .FALSE. GO TO 1 END IF C--- *SET DIFFERENTIAL PLOT IF (ISTR.EQ.'SD'.OR.ISTR.EQ.'sd') THEN CALL ENTSY GO TO 1 END IF C--- *RESET DIFFERENTIAL PLOT IF (ISTR.EQ.'RS'.OR.ISTR.EQ.'rs') THEN DO 2 I=1,NUMLB ID2D(I) = 2 IDS2D(I) = 0 2 CONTINUE GO TO 1 END IF C--- *GET NEW LABELS FROM USER IF (ISTR.EQ.'2D'.OR.ISTR.EQ.'2d') THEN CALL PRLAB OSTR = ' ENTER NEW LABELS : ' WRITE(ITERM,4) OSTR CALL READS8(ISTR) I = 1 IF (ISTR(1:1).EQ.' ') I = 2 CALL CONVT(ISTR,I,NUM1,PARR1,VALID) IF (.NOT.VALID) GO TO 1 CALL SCAN2D(PARR1,BNDS,NUM1,ERROR) IF (ERROR.NE.0) THEN CALL WERRS(ERROR) GO TO 1 END IF NUMLB = NUM1 NUM = NUM1 C--- *RESET DIFFERENTIAL PLOT DO 6 I=1,NUM PARRY(I) = PARR1(I) ID2D(I) = 2 IDS2D(I) = 0 ENLAB(I) = PARR1(I) 6 CONTINUE XAXS = 1 YAXS = 2 XMIN = BNDS(XAXS,1) XMAX = BNDS(XAXS,2) YMIN = BNDS(YAXS,1) YMAX = BNDS(YAXS,2) CALL SINGLE TIT = .FALSE. AXLB = .FALSE. GO TO 1 END IF C--- *CLEAR SCREEN IF (ISTR.EQ.'CL'.OR.ISTR.EQ.'cl') THEN CALL PLCMDS(1) CALL PLCHDW(3) GO TO 1 END IF C--- *CHANGE TO <3D> IF (ISTR.EQ.'3D'.OR.ISTR.EQ.'3d') THEN ICODE = 2 RETURN END IF C--- *TERMINATE <2D> IF (ISTR.EQ.'END'.OR.ISTR.EQ.'end'.OR. + ISTR.EQ.'EX' .OR.ISTR.EQ.'ex' .OR. + ISTR.EQ.'E' .OR.ISTR.EQ.'e') THEN ICODE = 3 RETURN END IF C--- *GET NEW AXES IF (ISTR.EQ.' ') GO TO 1 I = 1 IF (ISTR(1:1).EQ.' ') I = 2 CALL CONVT(ISTR,I,NUM1,PARR1,VALID) IF (.NOT.VALID) GO TO 1 IF (NUM1.NE.2) THEN OSTR = ' ERROR - REENTER TWO AXIS' WRITE(ITERM,4) OSTR OSTR = ' DEFAULT AXES ARE : ' WRITE(ITERM,5) OSTR,XAXS,YAXS OSTR = ' LABELS HAVE DIMENSION ' WRITE(ITERM,5) OSTR,NAXIS GO TO 1 END IF IX1 = PARR1(1) IY1 = PARR1(2) IF (IX1.LT.1.OR.IX1.GT.NAXIS.OR. + IY1.LT.1.OR.IY1.GT.NAXIS) THEN OSTR = ' ERROR - REENTER TWO INTEGERS .GT. 0 AND .LT.' WRITE(ITERM,5) OSTR,NAXIS GO TO 1 END IF C---*GET TWO VALID AXES AND MI XAXS = IX1 YAXS = IY1 XMIN = BNDS(IX1,1) XMAX = BNDS(IX1,2) YMIN = BNDS(IY1,1) YMAX = BNDS(IY1,2) CALL SINGLE GO TO 1 3 FORMAT(A,I5) 4 FORMAT(A) 5 FORMAT(A,2I5) 7 FORMAT(A,2I3,A) END C----------------------------------------------------------------------- C DRAWS UNIT 8 FILE IN 2D. C----------------------------------------------------------------------- SUBROUTINE DRW2D(XAXS,YAXS,PARRY,ERROR,NUM,POINT,PLTR) INTEGER PARRY(1999),PTNUM,DOUBLE(1999) INTEGER ERROR,XAXS,YAXS INTEGER GNUM,SPLPT,SPNUM,NUMPTS,BLKSZE,NVX(2) INTEGER ID2D(1999),IDS2D(1999) CHARACTER*1 MP(81,251) LOGICAL POINT,LABYET,PLTR,SYMBOL,FIRST REAL HOLD(251),IX,IY,MINSX,MAXSX,MINSY,MAXSY,PNTS(1999,4) COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /SY2D/ ID2D,IDS2D COMMON /ITWOPT/ XNEW,YNEW,XOLD,YOLD COMMON /TWOPT/ XNEW1,YNEW1,XOLD1,YOLD1 COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- CALL DISXY(MAXSX,MAXSY,MINSX,MINSY,DIS) TOOCLS = DIS / RIDIS SYMBOL = .FALSE. REWIND 18 LBPT = 10 NOLAB = NUM DO 50 I=1,NUM DOUBLE(I) = 0 50 CONTINUE CALL INITIN C--- *INITIALIZE CURVE LABEL CALL INARRS(MP,PNTS) INDX = 0 15 IF (NOLAB.EQ.0) GO TO 80 C--- *READ BLOCK HEADER LINE READ(18,*,END=80)GNUM,PTNUM,SPLPT,SPNUM,X,Y,NUMPTS,NAXIS,BLKSZE INDEX = 0 LABYET = .FALSE. DO 20 I = 1,NUM IF (DOUBLE(I).EQ.1) GO TO 20 IF (PARRY(I).EQ.SPNUM) THEN INDEX = I DOUBLE(I) = 1 END IF 20 CONTINUE C--- *CHECK BLOCK IF (INDEX.EQ.0) GO TO 2 FIRST = .TRUE. CALL DFNCUR NOLAB = NOLAB - 1 ID = ID2D(INDEX) IDS = IDS2D(INDEX) DO 1 I=1,NUMPTS C--- *PLOT CURVE READ(18,*)(HOLD(J),J=1,NAXIS) X = HOLD(XAXS) Y = HOLD(YAXS) CALL PLCMDS(24) CALL PLCMDS(7) CALL PLCMDS(20) XNEW = IX YNEW = IY XNEW1 = X YNEW1 = Y IF (POINT) THEN C--- *SAVE IF (NUMPTS.LE.15)LBPT = 2 IF (I.EQ.LBPT.AND..NOT.LABYET) THEN C--- *INCREASE LBPT = LBPT + 10 IF (LBPT.GE.NUMPTS)LBPT = 15 INDX = INDX + 1 PNTS(INDX,1) = IX PNTS(INDX,2) = IY PNTS(INDX,3) = SPNUM PNTS(INDX,4) = 4 LABYET = .TRUE. END IF C--- *SAVE CURVE MAP IF (I.EQ.1) THEN CALL MAP(MP,XNEW,YNEW,XNEW,YNEW) ELSE CALL MAP(MP,XNEW,YNEW,XOLD,YOLD) END IF END IF IF (.NOT.FIRST) THEN CALL DISXY(XNEW,YNEW,XOLD,YOLD,DIS) IF (TOOCLS.GT.DIS) GO TO 1 END IF CALL SYMBLS(XNEW1,YNEW1,ID,IDS,FIRST,SYMBOL) FIRST = .FALSE. XOLD1 = XNEW1 YOLD1 = YNEW1 XOLD = XNEW YOLD = YNEW 1 CONTINUE NA1 = INT(NAXIS/7) IF (MOD(NAXIS,7).NE.0) NA1 = NA1 + 1 BLKSZE = BLKSZE - NUMPTS * NA1 2 CONTINUE C--- *SKIP TO THE NEXT BLOCK DO 60 I = 1,BLKSZE 60 READ(18,*) GO TO 15 80 IF (POINT) THEN CALL LGRPHS(MP,PNTS) END IF CALL PLCMDS(9) IF (PLTR) THEN CALL PLCHDW(2) PLTR = .FALSE. END IF RETURN END C----------------------------------------------------------------------- C DEFINES TYPE AND SYMBOLS FOR <2D> C AND PREPARES CURVES FOR DISPLAY C----------------------------------------------------------------------- SUBROUTINE ENTSY INTEGER SLAB(1999),ENLAB(1999),ID2D(1999),IDS2D(1999),PARRY(1999) CHARACTER*80 OSTR,ISTR,OSTR1*25 LOGICAL VALID COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /SY2D/ ID2D,IDS2D COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- NUM 1 = NUMLB OSTR1 = ' LABEL TYPE SYMBOL' CALL PRSYBL OSTR = ' LABELS, TYPE AND SYMBOLS DEFAULT ARE :' WRITE(ITERM,4) OSTR C--- C--- IF (NUMLB.EQ.1) THEN WRITE(ITERM,5) OSTR1 ELSE IF (NUMLB.EQ.2) THEN WRITE(ITERM,5) OSTR1,OSTR1 ELSE WRITE(ITERM,5) OSTR1,OSTR1,OSTR1 END IF C--- C--- *PRINT LABELS C--- WRITE(ITERM,6) (ENLAB(I),ID2D(I),IDS2D(I),I=1,NUMLB) OSTR = ' ENTER OLD LABEL AND NEW TYPE OR SYMBOL' WRITE(ITERM,4) OSTR OSTR = ' OR OR TERMINATE DEFINE' WRITE(ITERM,4) OSTR C--- *READ DATA 1 CALL READS8(ISTR) IF (ISTR.EQ.'END'.OR.ISTR.EQ.'end'.OR. + ISTR.EQ.'EX' .OR.ISTR.EQ.'ex' .OR. + ISTR.EQ.'E' .OR.ISTR.EQ.'e' .OR. + ISTR.EQ.' ') RETURN I = 1 IF (ISTR(I:I).EQ.' ') I = 2 CALL CONVT(ISTR,I,NUM,PARRY,VALID) IF (.NOT.VALID) GO TO 1 IF (NUM.EQ.1) THEN OSTR = ' ERROR - DATA INPUT, REENTER AGAIN' WRITE(ITERM,4) OSTR GO TO 1 END IF C--- *CHECK LABEL INDEX = 0 DO 2 I=1,NUMLB IF (ENLAB(I).EQ.PARRY(1)) INDEX = I 2 CONTINUE IF (INDEX.EQ.0) THEN OSTR = ' ERROR - LABEL NOT FOUND, REENTER ' WRITE(ITERM,4) OSTR GO TO 1 END IF C--- *REDEFINE ID2D(INDEX) = 0 IDS2D(INDEX) = 0 J = 2 3 ISYBL = PARRY(J) IF (ISYBL.LE.7.AND.ISYBL.GE.1) THEN ID2D(INDEX) = ISYBL ELSE IF (ISYBL.LE.27.AND.ISYBL.GE.8) THEN IDS2D(INDEX) = ISYBL END IF IF (NUM.GE.3.AND.J.EQ.2) THEN J = 3 GO TO 3 END IF NUM1 = NUM1 - 1 IF (NUM1.EQ.0) RETURN GO TO 1 4 FORMAT(A) 5 FORMAT(3A25) 6 FORMAT(3(5X,I3,5X,I2,5X,I3,2X)) END C----------------------------------------------------------------------- C CONVERTS THE INTEGER IN INT TO THE TWO C CHARACTER EQUIVALENT IN DSTG. C----------------------------------------------------------------------- SUBROUTINE DICHR(INT) CHARACTER*1 CHONE,CH9(0:9),CHTWO*2,CHFIF*15 COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF DATA CH9/'0','1','2','3','4','5','6','7','8','9'/ C--- C--- IF (INT.LT.10) THEN INDXCH = 1 CHONE = CH9(INT) ELSE INDXCH = 2 I = INT / 10 CHTWO(1:1) = CH9(I) I = MOD(INT,10) CHTWO(2:2) = CH9(I) END IF RETURN END C----------------------------------------------------------------------- C WRITES OUT ERROR MESSAGES. C----------------------------------------------------------------------- SUBROUTINE WERRS(ERROR) CHARACTER*80 OSTR INTEGER ERROR COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- GO TO (1,2,3,4,5,6,7,8,9,10,11,12),ERROR 1 OSTR = ' WARNING - DUPLICATE BLOCK NUMBERS IN UNIT 8' GO TO 13 2 OSTR = ' ERROR - NUMBER OF UNIT 8 DIMENSIONS GREATER THAN 251' GO TO 13 3 OSTR = ' ERROR - FORMAT, NUMPTS OR BLKSIZE' GO TO 13 4 OSTR = ' ERROR - DUPLICATE POINTS ENTERED IN <2D> COMMAND' GO TO 13 5 OSTR = ' ERROR - POINT ENTERED NOT IN UNIT 8' GO TO 13 6 OSTR = ' ERROR - UNIT 7 HAS BAD FORMAT' GO TO 13 7 OSTR = ' ERROR IN PLCMDS CALL. BAD COMMAND NUMBER' GO TO 13 8 OSTR = ' ERROR - FIRST LINE IN UNIT 7 HAS BAD FORMAT' GO TO 13 9 OSTR = ' ERROR - IN UNIT 8' GO TO 13 10 OSTR = ' WARNING - NUMBER OF AXES ARE DIFFERENT' GO TO 13 11 OSTR = ' ERROR - DIMENSION IS 2, YOU CAN NOT USE <3D> COMMAND' GO TO 13 12 OSTR = ' MORE THAN 1999 LABELS IN UNIT 8,' 13 WRITE(IWRITE,14) OSTR RETURN 14 FORMAT(A80) END C----------------------------------------------------------------------- C CURVE SYMBOLS C----------------------------------------------------------------------- SUBROUTINE DPSYBL(ID) C--- C--- ICODE = ID - 7 GO TO (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) + ICODE C--- 1 CALL OPNSQR RETURN 2 CALL FILSQR RETURN 3 CALL OPNTRI RETURN 4 CALL FILTRI RETURN 5 CALL HCRCLE RETURN 6 CALL FILCIR RETURN 7 CALL PLUS RETURN 8 CALL OPNDIA RETURN 9 CALL FILDIA RETURN 10 CALL OPNDTR RETURN 11 CALL FILDTR RETURN 12 CALL SQRMUT RETURN 13 CALL CIRPLS RETURN 14 CALL DBLTRI RETURN 15 CALL CIRMUT RETURN 16 CALL SQRTRI RETURN 17 CALL SQRPLS RETURN 18 CALL DIAPLS RETURN 19 CALL MUTSGN RETURN 20 CALL START RETURN END C----------------------------------------------------------------------- C DRAWS AN OPEN SQUARE AS AN ITP SYMBOL. C----------------------------------------------------------------------- SUBROUTINE OPNSQR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RINC = ACOS(-1.0) / 2.0 RADIUS = RADI ANGLE = ACOS(-1.0) / 4.0 NPOINT = 5 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DRAWS A FILLED SQUARE AS AN ITP SYMBOL. C----------------------------------------------------------------------- SUBROUTINE FILSQR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(30) TX = IX TY = IY RINC = ACOS(-1.0) / 2.0 NPOINT = 5 R = RADI 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = ACOS(-1.0) / 4.0 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DRAWS A TRIANGLE AS AN ITP SYMBOL. C----------------------------------------------------------------------- SUBROUTINE OPNTRI INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RADIUS = RADI RINC = ACOS(-1.0) * 2.0 / 3.0 ANGLE = ACOS(-1.0) / 2.0 NPOINT = 4 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DRAWS A FILLED TRIANGLE AS AN ITP SYMBOL. C----------------------------------------------------------------------- SUBROUTINE FILTRI INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(30) TX = IX TY = IY NPOINT = 4 RINC = ACOS(-1.0) * 2.0 / 3.0 R = RADI 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = ACOS(-1.0) / 2.0 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DRAWS A CIRCLE AS AN ITP SYMBOL. C----------------------------------------------------------------------- SUBROUTINE HCRCLE INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RADIUS = RADI RINC = ACOS(-1.0) / 5.0 ANGLE = 0.0 NPOINT = 11 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DRAWS A FILLED CIRCLE AS AN ITP SYMBOL C----------------------------------------------------------------------- SUBROUTINE FILCIR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.LT.MINSX.OR.IX.GT.MAXSX) RETURN IF (IY.LT.MINSY.OR.IY.GT.MAXSY) RETURN CALL PLCMDS(30) TX = IX TY = IY RINC = ACOS(-1.0) / 5.0 NPOINT = 11 R = RADI 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = 0 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX CALL PLCMDS(20) IY = TY RETURN END C----------------------------------------------------------------------- C DRAWS A FILLED TRIANGLE AS AN ITP SYMBOL C----------------------------------------------------------------------- SUBROUTINE PLUS INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(30) TX = IX TY = IY IY = TY + RADI CALL PLCMDS(2) IY = TY - RADI CALL PLCMDS(3) IY = TY IX = TX - RADI CALL PLCMDS(2) IX = TX + RADI CALL PLCMDS(3) IX = TX CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C OPEN DIAMOND C----------------------------------------------------------------------- SUBROUTINE OPNDIA INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RADIUS = RADI IX = TX + RADIUS CALL PLCMDS(2) IX = TX IY = TY + RADIUS CALL PLCMDS(3) IX = TX - RADIUS IY = TY CALL PLCMDS(3) IX = TX IY = TY - RADIUS CALL PLCMDS(3) IX = TX + RADIUS IY = TY CALL PLCMDS(3) IX = TX CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C SOLID DIAMOND C----------------------------------------------------------------------- SUBROUTINE FILDIA INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(30) TX = IX TY = IY RINC = ACOS(-1.0) / 2.0 NPOINT = 5 R = RADI 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = RINC CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C OPEN DOWN TRIANGLE C----------------------------------------------------------------------- SUBROUTINE OPNDTR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RINC = ACOS(-1.0) * 2.0 / 3.0 NPOINT = 4 ANGLE = ACOS(-1.0) / 6.0 RADIUS = RADI CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C SOLID DOWN TRIANGLE C----------------------------------------------------------------------- SUBROUTINE FILDTR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(30) TX = IX TY = IY NPOINT = 4 RINC = ACOS(-1.0) * 2.0 / 3.0 R = RADI 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = ACOS(-1.0) / 6.0 CALL DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C "X" SIGN C----------------------------------------------------------------------- SUBROUTINE MUTSGN INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY ANGLE = ACOS(-1.0) / 4.0 RINC = ACOS(-1.0) RADIUS = RADI CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) CALL PLCMDS(2) ANGLE = ANGLE + RINC CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) CALL PLCMDS(3) ANGLE = ACOS(-1.0) * 3.0 / 4.0 CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) CALL PLCMDS(2) ANGLE = ANGLE + RINC CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) CALL PLCMDS(3) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DOUBLE TRIANGLE C----------------------------------------------------------------------- SUBROUTINE DBLTRI INTEGER NVX(2),SPLPT REAL X1(4),Y1(4),IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY ANGLE = ACOS(-1.0) / 4.0 RINC = ACOS(-1.0) / 2.0 RADIUS = RADI DO 1 I= 1,4 CALL DXY(RADIUS,ANGLE,TX,TY,X1(I),Y1(I)) ANGLE = ANGLE + RINC 1 CONTINUE IX1 = INT((X1(1) - X1(2)) / 2.0 + X1(2)) IX = X1(1) IY = Y1(1) CALL PLCMDS(2) IX = X1(2) CALL PLCMDS(3) IX = IX1 IY = Y1(3) CALL PLCMDS(3) IX = X1(1) IY = Y1(1) CALL PLCMDS(3) IX = X1(4) IY = Y1(4) CALL PLCMDS(2) IX = IX1 IY = Y1(1) CALL PLCMDS(3) IX = X1(3) IY = Y1(3) CALL PLCMDS(3) IX = X1(4) IY = Y1(4) CALL PLCMDS(3) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C OPEN SQUARE AND OPEN TRIANGLE C----------------------------------------------------------------------- SUBROUTINE SQRTRI INTEGER NVX(2),SPLPT REAL X1(5),Y1(5),IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL PLCMDS(31) TX = IX TY = IY RADIUS = RADI RINC = ACOS(-1.0) / 2.0 ANGLE = ACOS(-1.0) / 4.0 DO 1 I=1,5 CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) X1(I) = IX Y1(I) = IY IF (I.EQ.1) THEN CALL PLCMDS(2) ELSE CALL PLCMDS(3) END IF ANGLE = ANGLE + RINC 1 CONTINUE IX = X1(4) IY = Y1(4) CALL PLCMDS(2) IX = (X1(1) - X1(2)) / 2.0 + X1(2) IY = Y1(1) CALL PLCMDS(3) IX = X1(3) IY = Y1(3) CALL PLCMDS(3) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C OPEN SQUARE AND PLUS SIGN C----------------------------------------------------------------------- SUBROUTINE SQRPLS INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- CALL PLCMDS(31) IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN TX = IX TY = IY CALL OPNSQR RADIUS = RADI / 1.4142 ANGLE = ACOS(-1.0) / 4.0 CALL DXY(RADIUS,ANGLE,TX,TY,IX,IY) RADIUS = IX - TX IX = TX + RADIUS IY = TY CALL PLCMDS(2) IX = TX - RADIUS CALL PLCMDS(3) IX = TX IY = TY + RADIUS CALL PLCMDS(2) IY = TY - RADIUS CALL PLCMDS(3) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C CIRCLE AND PLUS SIGN C----------------------------------------------------------------------- SUBROUTINE CIRPLS C--- C--- CALL HCRCLE CALL PLUS RETURN END C----------------------------------------------------------------------- C CIRCLE AND "X" SIGN C----------------------------------------------------------------------- SUBROUTINE CIRMUT C--- C--- CALL HCRCLE CALL MUTSGN RETURN END C----------------------------------------------------------------------- C OPEN SQUARE AND "X" SIGN C----------------------------------------------------------------------- SUBROUTINE SQRMUT C--- C--- CALL OPNSQR CALL MUTSGN RETURN END C----------------------------------------------------------------------- C OPEN DIAMOND AND PLUS SIGN C----------------------------------------------------------------------- SUBROUTINE DIAPLS C--- C--- CALL OPNDIA CALL PLUS RETURN END C----------------------------------------------------------------------- C START C----------------------------------------------------------------------- SUBROUTINE START INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.GT.MAXSX.OR.IX.LT.MINSX) RETURN IF (IY.GT.MAXSY.OR.IY.LT.MINSY) RETURN CALL MUTSGN TX = IX IX = TX - RADI CALL PLCMDS(2) IX = TX + RADI CALL PLCMDS(3) IX = TX RETURN END C----------------------------------------------------------------------- C DISPLAYS THE SYMBOLS WITH TX,TY AS CENTER C----------------------------------------------------------------------- SUBROUTINE DPSHAP(RADIUS,RINC,ANGLE,NPOINT,TX,TY) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- DO 1 I=1,NPOINT IX = TX + RADIUS * COS(ANGLE) IY = TY + RADIUS * SIN(ANGLE) ANGLE = ANGLE + RINC IF (I.EQ.1) THEN CALL PLCMDS(2) ELSE CALL PLCMDS(3) END IF 1 CONTINUE RETURN END C----------------------------------------------------------------------- C--- C 3D COMMANDS C DATE JUNE 1, 1984 TO AUGUST 1, 1985 C AUTHOR : NGUYEN, THANH LONG C--- C LISTING OF SUBROUTINES : C--- C SUB LIST3D : LISTS 3D COMMANDS C--- C SUB C2D3D : EXECUTES <2D> AND <3D> COMMANDS. C A. IF LABELS ARE NOT YET DEFINED THEN PRINT ALL LABELS IN UNIT 8 C RECEIVE LABELS FROM USER. C B. CONVERT LABELS FROM CHARACTERS TO INTEGERS, MAXIMUM 1999 LABELS C C. EXECUTE BODY OF <2D> OR <3D> COMMAND. C--- C SUB GERR : EXECUTES <2D>, <3D> AND COMMANDS C A. GET ALL LABELS MIN, MAX AND AVERAGE FROM UNIT 8 C B. IF ERROR IN UNIT 8, PRINT ERROR MESSAGE AND RETURN C C. IF COMMAND THEN PRINT ALL LABELS IN UNIT 8 C D. IF <2D> COMMAND CHECK FOR ERROR IN UNIT 8 C E. IF <3D> COMMAND AND NUMBER OF DIMENSION = 2 THEN PRINT ERROR C--- C SUB PLAB : PRINT LABELS ON THE SCREEN C A. PRINT ALL LABELS OF UNIT 8 ON THE SCREEN C B. IF THE LABELS' DIMENSIONS ARE DIFFERENT THEN PRINT MESSAGE C--- C SUB GETNAX : GET NUMBER OF AXES AFTER GETTING LABELS. C IF THE LABELS' DIMENSIONS ARE DIFFERENT THEN GET THE MINIMUM C DIMENSION OF THE LABELS DEFINED. C--- C SUB IDENTI : SET TRAN MATRIX TO IDENTITY MATRIX. C--- C SUB COPYMA : COPY MATRIX M2 TO MATRIX M1 C--- C SUB AXYZ : ADD X,Y,Z TO TRAN MATRIX (TRANSFORMATION OR PARALLEL C--- PROJECTIO C--- C SUB MULTMA : MULTIPLY MATRICES TRAN AND MATRIX AND PUT RESULT C IN TRAN C--- C SUB GETLB : GET ALL LABELS FROM UNIT 8, AND THEIR MIN AND MAX. C IF ERROR (FORMAT,EMPTY,DIMENSIONS LESS THAN 2 OR GREATER THAN 251) C THEN PRINT MESSAGE AND RETURN. C IF WARNING (DUPLICATE LABELS, VARYING DIMENSIONS) C THEN PRINT MESSAGE AND RETURN. C--- C SUB GTLB3D : GET LABELS ENTERED BY USER. C - CHECK FOR ERRORS IN ENTERED LABELS. C - COMPARE THE LABELS ENTERED WITH THE LABELS IN UNIT 8. C--- C SUB GETWLB : EXECUTE COMMAND. C IF LESS THAN OR EQUAL TO 1999 LABELS IN UNIT 8, THEN GET ALL C ELSE GET FIRST 1999 LABELS. NO DUPLICATE LABELS. C--- C SUB SNGXYZ : C IF MIN, MAX OF X,Y OR Z ARE EQUAL THEN C MIN = MIN * 0.95 C MAX = MAX * 1.05. C IF MIN, MAX OF X,Y OR Z ARE EQUAL TO ZERO THEN C MIN = -0.1 C MAX = 0.1 C--- C SUB GETDIM : GET THE 3 DIMENSIONS AFTER GETTING LABELS FROM <3D>. C ON ERROR GET NEW DIMENSIONS. C GET MIN,MAX AND AVERAGE OF X,Y AND Z . C--- C SUB DFUNIT : DEFINE UNIT OF X,Y AND Z. C--- C SUB SETSMA : SET MIN AND MAX OF X,Y AND Z. C--- C SUB SVIEWP : DEFINE VIEW POINT BY : C VIEW POINT(X,Y,Z) = MAX(X,Y,Z) + 3.05 * DISTANCE(X,Y,Z) C--- C SUB SO3D : SOFTWARE FOR 3D. C IF CODE EQUAL TO C <1> THEN TRANSLATION IN X,Y AND Z C <2> THEN SCALING OF X,Y AND Z C <3> THEN ROTATION ABOUT X AXIS C <4> THEN ROTATION ABOUT Y AXIS C <5> THEN ROTATION ABOUT Z AXIS C <6> THEN ROTATION ABOUT ABITRARY AXIS. C--- C SUB CINFO : CLEAR ALL TRANSFORMATIONS DEFINED BY USER. C--- C SUB KINFO : KEEP 3D INFORMATION ON MIN, MAX, AVERAGE C IN ARRAY INFO C--- C SUB INIFO : INITIALIZATION OF INFORMATION C CLEAR TRANSFORMATION MATRIX. C MIN, MAX AND AVERAGE(X,Y,Z) OF THE CURVES. C SET MIN, MAX EQUAL TO DISTANCE FROM ORIGIN. C SET MIN, MAX OF THE SCREEN. C--- C SUB DFCOOR : SET MIN, MAX, ERASE TRANSFORMATION, C DEFINE MIN, MAX, SET UP VIEW POINT. C--- C SUB SCTWO :SCALING OF (X,Y,Z) BY DEFAULTS , AND C--- C SUB ENT3DC : ENTER <3D> COMMAND. C RECEIVES COMMAND FROM USER AND EXECUTES : C 1. DEFAULT : D1,D2,D3,D4,D5,D6. C 2. LABELS : LAB,AX. C 3. TRANSFORMATION : TR,SC,RX,RY,RZ,RA,ET. C 4. LINE TYPE : SL,SA,SO,DA,DO,HL C 5 SYMBOLS,TITLES : CI,DCI,ST,DST,BR,DBR,PN,DPN. C 5. ORIGIN : CA,CZ,CM,CU,C1,C2,C3,C4,C5. C 6. PROJECTIONS : PJ,PJU,DPJ,PSL. C 7. VIEW POINTS : VD,VU. C 8. DISPLAY : D,DIS,SAV,PLOT. C 9. USER LINE TYPE : SDO,SDA,LDA,RES. C 10. SCREEN : SN,SU,CL,CLEAR. C 11. <2D> COMMAND : 2D. C 12. INFORMATION : LI,LIST,INFO,HELP. C 13. TERMINATE <3D> : END EXIT. C 14. STOP EXECUTION : STOP. C--- C SUB DEFINE : DEFINE CURVES AND SYMBOLS OF <3D> OR COMMAND: C DASHED LINE, DOTTED LINE, SMALL CIRCLE, SYMBOLS OF , C DASHES, AND PLOTTING ACCURACY C--- C SUB HELP3D : LISTS <3D> COMMANDS. C--- C SUB SWIND : C - SET PARALLEL PROJECTION FOR 3 DIMENSIONS. C - SET PROPER WINDOW FOR 2 DIMENSIONS. C - KEEP MIN, MAX OF TRANSFORMATION. C--- C SUB NUST : CONVERTS FROM NUMERIC TO STRING CHARACTERS C--- C SUB ADDT : ADD TRANSFORMATION C--- C SUB SCIR : DISPLAY SOLID CIRCLE ON CURVE. C--- C SUB HCIR : DISPLAY OPEN CIRCLE ON CURVE. C--- C SUB DICRAV : C COMPUTE AFTER CONVERSION FROM 3D TO 2D: C 1. THE ORIGIN C 2. (XMAX,CRY,CRZ) C 3. (CRX,YMAX,CRZ) C 4. (CRX,CRY,ZMAX) C AND ANGLE. C--- C SUB FDA : C GET DISTANCE FROM ORIGIN TO THE DISPLAY POINT C COMMAND THEN C PRINT COORDINATE NUMBER AND MAX. C--- C SUB PRAXIS : C PRINT (X,Y,Z) ON EACH AXIS OR PRINT COORDINATE NUMBERS C--- C SUB DAXIS : DISPLAY THE COORDINATE AXES AND ARROWS C--- C FUNCTION FANGLE : COMPUTE ANGLE C--- C SUB DXY : COMPUTE DISTANCE C--- C SUB ARROW : COMPUTE LOCATION TO PRINT (X,Y,Z) OR COORDINATE NUMBER C ON EACH AXIS TO THE RIGHT OF THE ARROW. C--- C SUB ARROWL : SAME AS SUB ARROW BUT POINT IS ON LEFT SIDE C--- C SUB DN : COMPUTE THE 3 MAXIMUM POINTS AFTER TRANSFORMATION AND C 3 POINTS TO MARK THE ORIGIN. C--- C SUB DZERO : COMPUTE TWO POINTS ON (X,Y,Z) C--- C SUB DISDOT : DISPLAY WITH DOTTED LINE. C--- C SUB LINDAS : DISPLAY WITH SOLID LINE AND DASHED LINE. C--- C SUB DASHSL : DISPLAY WITH DASHED LINE ONLY. C--- C SUB LINDOT : DISPLAY WITH DOTTED LINE AND SOLID LINE C--- C SUB DISTLN : COMPUTE DISTANCE C--- C SUB DISP3D : DISPLAY IN 3 DIMENSIONS. C--- C SUB CLIP : IF LINE IS OUTSIDE WINDOW THENCLIP C (LEFT, RIGHT, BOTTOM AND TOP). C IF (OPCODE = 1) THEN C DISPLAY (X1,Y1) WITH DOTTED LINE. C IF (OPCODE = 2) THEN C MOVE THE PEN TO (X1,Y1) C ELSE C DISPLAY (X1,Y1) WITH SOLID LINE. C--- C SUB CLEFT : CLIP ON LEFT C--- C SUB CRIGHT : CLIP ON RIGHT C--- C SUB CBOTTOM : CLIP AT BOTTOM C--- C SUB CTOP : CLIP AT TOP C--- C SUB SAVECL : SAVE POINT AFTER CLIP. C--- C SUB STRCI : COMPUTE POINT WHERE LINE CROSSES COORDINATE PLANE C--- C SUB DIPJ : PROJECTION C IF (X0,Y0,Z0) IS THE ORIGIN C 1. PROJECTION ON X AXIS (X,Y,Z0) C 2. PROJECTION ON Y AXIS (X0,Y,Z) C 3. PROJECTION ON Z AXIS (X,Y0,Z) C--- C----------------------------------------------------------------------- C LISTS <3D> COMMANDS C----------------------------------------------------------------------- SUBROUTINE LIST3D CHARACTER*50 EMPTY,OSTR COMMON /IO/ IWRITE,ITERM,ISAVE C--- CALL PLCMDS(1) EMPTY = ' ' WRITE(IWRITE,1) EMPTY OSTR = ' LIST OF <3D> AND COMMANDS' WRITE(IWRITE,1) OSTR WRITE(IWRITE,1) EMPTY C--- OSTR = ' DEFAULT : D1,D2,D3,D4,D5,D6' WRITE(IWRITE,1) OSTR OSTR = ' LABELS : LAB,AX' WRITE(IWRITE,1) OSTR OSTR = ' TRANSFORMATION : TR,SC,RX,RY,RZ,RA,ET' WRITE(IWRITE,1) OSTR OSTR = ' LINE TYPE : SL,SA,SO,DA,DO,HL' WRITE(IWRITE,1) OSTR OSTR = ' TITLE, SYMBOLS : CI,DCI,ST,DST,BR,DBR,PN,DPN' WRITE(IWRITE,1) OSTR OSTR = ' SET ORIGIN : CA,CZ,CM,CU,C1,C2,C3,C4,C5' WRITE(IWRITE,1) OSTR OSTR = ' PROJECTIONS : PJ,PJU,DPJ,PSL' WRITE(IWRITE,1) OSTR OSTR = ' VIEW POINT : VD,VU,DVX,DVY' WRITE(IWRITE,1) OSTR OSTR = ' DISPLAY : D,DIS,SAV,PLOT' WRITE(IWRITE,1) OSTR OSTR = ' USER LINE TYPE : SDO,SDA,LDA,RES' WRITE(IWRITE,1) OSTR OSTR = ' SCREEN : SN,SU,CL,CLEAR ' WRITE(IWRITE,1) OSTR OSTR = ' <2D> COMMAND : 2D' WRITE(IWRITE,1) OSTR OSTR = ' INFORMATION : LI,LIST,INFO,HELP' WRITE(IWRITE,1) OSTR OSTR = ' TERMINATE <3D> : END,EXIT' WRITE(IWRITE,1) OSTR OSTR = ' STOP EXECUTION : STOP' WRITE(IWRITE,1) OSTR WRITE(IWRITE,1) EMPTY RETURN 1 FORMAT(A50) END C----------------------------------------------------------------------- C EXECUTES <2D> AND <3D> COMMAND C----------------------------------------------------------------------- SUBROUTINE C2D3D(ISTR,II,XAXS,YAXS,PARRY,NUM,CHECKQ) INTEGER XAXS,YAXS,PARRY(1999),ERROR,SLAB(1999),ENLAB(1999) INTEGER NAX(1999),DAX(1999) REAL MIMA(3,2),VIEW(3),BNDS(251,2) CHARACTER*80 ISTR,OSTR,COM*2 LOGICAL CHECKQ,VALID,QSCOM C--- COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /QSC/ QSCOM COMMON /DAXIS1/ NAX,DAX,NDIM C--- C--- ERROR = 0 IF (QSCOM) THEN COM = '3D' ELSE COM = '2D' END IF C--- *LABELS OF <2D> OR <3D> C--- *IF NOT ENTERED IF (ISTR(II:).EQ.' ') THEN CALL PRLAB OSTR = ' ENTER LABELS, OR (ALL)' WRITE(IWRITE,5) OSTR CALL READS8(ISTR) II = 1 IF (ISTR(1:1).EQ.' ') II = 2 END IF C--- *GET LABELS FOR <3D> IF (QSCOM) THEN CALL GTLB3D(ISTR,II,ERROR) IF (ERROR.NE.0) RETURN CALL GETNAX(SLAB,NLAB,ENLAB,NUMLB,NAX,NAXIS) GO TO 1 END IF C--- *GET LABELS FOR <2D> IF (ISTR(II:).EQ.'A'.OR.ISTR(II:).EQ.'a') THEN CALL GETWLB(NUM,PARRY,NLAB,SLAB) ELSE CALL CONVT(ISTR,II,NUM,PARRY,VALID) IF (.NOT.VALID) RETURN END IF CALL GETNAX(SLAB,NLAB,PARRY,NUM,NAX,NAXIS) CALL SCAN2D(PARRY,BNDS,NUM,ERROR) IF (ERROR.NE.0) THEN CALL WERRS(ERROR) RETURN END IF 1 CONTINUE C--- *<3D> IF (COM.EQ.'3D'.OR.COM.EQ.'3d') THEN QSCOM = .TRUE. CALL GETDIM(MIMA) CALL ENT3DC(MIMA,VIEW,COM) C--- *<2D> QSCOM = .FALSE. IF (COM.EQ.'2D'.OR.COM.EQ.'2d') THEN CHECKQ = .TRUE. NUM = NUMLB DO 2 J = 1,NUM PARRY(J) = ENLAB(J) 2 CONTINUE CALL SCAN2D(PARRY,BNDS,NUM,ERROR) GO TO 1 ELSE CHECKQ = .FALSE. RETURN END IF C--- *<2D> ELSE IF(COM.EQ.'2D'.OR.COM.EQ.'2d') THEN NUMLB = NUM DO 3 J=1,NUM ENLAB(J) = PARRY(J) 3 CONTINUE CALL PLOT2D(XAXS,YAXS,PARRY,NUM,BNDS,COM) CHECKQ = .TRUE. C--- *<3D> IF (COM.EQ.'3D'.OR.COM.EQ.'3d') THEN CHECKQ = .FALSE. IF (NAXIS.EQ.2) THEN CALL WERRS(11) RETURN END IF GO TO 1 END IF END IF 5 FORMAT(A80) RETURN END C----------------------------------------------------------------------- C GETS LABELS IN UNIT 8 AND CHECKS ERRORS C----------------------------------------------------------------------- SUBROUTINE GERR(ERRQ,IERR8,ERROR,INTGLB,ICODE) INTEGER SLAB(1999),ENLAB(1999),NAX(1999),DAX(1999) LOGICAL ERRQ,INTGLB COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /DAXIS1/ NAX,DAX,NDIM C--- C--- ERROR = 0 IF (INTGLB) THEN IERR8 = 0 CALL GETLB(ERRQ,IERR8) INTGLB = .FALSE. END IF IF (IERR8.NE.0) CALL WERRS(IERR8) C--- *PRINT LABELS AND DIMENSIONS C--- *IN CASE OF DUPLICATE LABELS C--- *OR VARIABLE DIMENSION IF (IERR8.EQ.10.OR.IERR8.EQ.2) THEN CALL PRLAB RETURN END IF C--- *DUPLICATE LABELS IF (IERR8.EQ.1) THEN CALL PRLAB RETURN END IF C--- *PRINT LABELS FOR IF (ICODE.EQ.1) THEN IF (IERR8.EQ.0.OR.IERR8.EQ.12) THEN CALL PRLAB END IF C--- *<2D> OR <3D> ELSE IF (ERRQ) THEN ERROR = 1 RETURN END IF IF (ICODE.EQ.3) THEN IF (NAXIS.EQ.2) THEN ERROR = 1 CALL WERRS(11) END IF END IF END IF RETURN END C----------------------------------------------------------------------- C PRINTS LABELS AND NUMBER OF DIMENSIONS C----------------------------------------------------------------------- SUBROUTINE PRLAB INTEGER SLAB(1999),ENLAB(1999),NAX(1999),DAX(1999),PR(1999) LOGICAL DDIM COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /DAXIS1/ NAX,DAX,NDIM COMMON /DIFFA/ DDIM COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- C--- *PRINT LABELS IF (.NOT.DDIM) THEN WRITE(IWRITE,3) (SLAB(I),I=1,NLAB) ELSE DO 2 I=1,NDIM NUM = 0 DO 1 J=1,NLAB IF (DAX(I).NE.NAX(J)) GO TO 1 NUM = NUM + 1 PR(NUM) = SLAB(J) 1 CONTINUE WRITE(IWRITE,3) (PR(J),J=1,NUM) WRITE(IWRITE,4) DAX(I) 2 CONTINUE END IF RETURN 3 FORMAT(/,2X,'THE LABELS ARE :',10(T22,10I5,/)) 4 FORMAT(2X,'HAS',I5,' DIMENSIONS') END C----------------------------------------------------------------------- C GETS NUMBER OF AXES OF LABELS C IF DIMENSIONS DIFFER THEN USE SMALLEST DIMENSION C----------------------------------------------------------------------- SUBROUTINE GETNAX(SLAB,NLAB,PARRY,NUM,NAX,NAXIS) INTEGER SLAB(1999),PARRY(1999),NAX(1999) LOGICAL DDIM COMMON /DIFFA/ DDIM C--- C--- IF (.NOT.DDIM) THEN NAXIS = NAX(1) RETURN END IF DO 2 I=1,NUM DO 1 J=1,NLAB IF (PARRY(I).NE.SLAB(J)) GO TO 1 IF (I.EQ.1) NAXIS = NAX(J) IF (NAXIS.GT.NAX(J)) NAXIS = NAX(J) GO TO 2 1 CONTINUE 2 CONTINUE RETURN END C----------------------------------------------------------------------- C INITIALIZES MATRIX TRAN AS IDENTITY C----------------------------------------------------------------------- SUBROUTINE IDENTI(TRAN) REAL TRAN(4,4) C--- C--- DO 2 I=1,4 DO 1 J=1,4 IF (I.EQ.J) THEN TRAN(I,J) = 1 ELSE TRAN(I,J) = 0 END IF 1 CONTINUE 2 CONTINUE RETURN END C----------------------------------------------------------------------- C COPIES MATRIX M2 TO M1 C----------------------------------------------------------------------- SUBROUTINE COPYMA(M1,M2) REAL M1(4,4),M2(4,4) C--- C--- DO 2 I=1,4 DO 1 J=1,4 M1(I,J) = M2(I,J) 1 CONTINUE 2 CONTINUE RETURN END C----------------------------------------------------------------------- C ADDS TRANSFORMATION TO X,Y AND Z C----------------------------------------------------------------------- SUBROUTINE AXYZ(X,Y,Z,X0,Y0,Z0,TRAN) REAL TRAN(4,4) C--- C--- X0 = X*TRAN(1,1) + Y*TRAN(2,1) + Z*TRAN(3,1) + TRAN(4,1) Y0 = X*TRAN(1,2) + Y*TRAN(2,2) + Z*TRAN(3,2) + TRAN(4,2) Z0 = X*TRAN(1,3) + Y*TRAN(2,3) + Z*TRAN(3,3) + TRAN(4,3) RETURN END C----------------------------------------------------------------------- C MULTIPLIES TRAN AND MATRIX C----------------------------------------------------------------------- SUBROUTINE MULTMA(TRAN,MATRIX) REAL TRAN(4,4),MATRIX(4,4),T(4,4) C--- C--- DO 3 I=1,4 DO 2 J=1,4 T(I,J) = 0 DO 1 L=1,4 T(I,J) = T(I,J) + TRAN(I,L) * MATRIX(L,J) 1 CONTINUE 2 CONTINUE 3 CONTINUE CALL COPYMA(TRAN,T) RETURN END C----------------------------------------------------------------------- C GETS UNIT 8 LABELS AND MIN, MAX AND C AVER OF EACH COORDINATE OF LABEL C----------------------------------------------------------------------- SUBROUTINE GETLB(ERRORQ,IERR8) INTEGER SLAB(1999),GNUM,PTNUM,SPLPT,SPNUM,NUMPTS,BLKSZE INTEGER ENLAB(1999),CNAXIS,NAX(1999),DAX(1999) REAL MINA(1999,251),MAXA(1999,251),AVERA(1999,251),AXIS(251) LOGICAL ERRORQ,INITL,DDIM COMMON /MMA/ MINA,MAXA,AVERA COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /DAXIS1/ NAX,DAX,NDIM COMMON /DIFFA/ DDIM C--- C--- INITL = .TRUE. NLAB = 0 NDIM = 0 REWIND 18 1 READ(18,*,END=8,ERR=6)GNUM,PTNUM,SPLPT,SPNUM,X,Y,NUMPTS, + NAXIS,BLKSZE C--- *CHECK AXIS IF (INITL) THEN CNAXIS = NAXIS INITL = .FALSE. ELSE IF (CNAXIS.NE.NAXIS) DDIM = .TRUE. END IF C--- *CHECK LABELS IN UNIT 8 C--- *(MAX 1999) IF (NLAB.GT.1999) THEN IERR8 = 12 GO TO 8 END IF NLAB = NLAB + 1 NAX(NLAB) = NAXIS SLAB(NLAB) = SPNUM IF (NAXIS.GT.251.OR.NAXIS.LT.2) THEN ERRORQ = .TRUE. IERR8 = 2 RETURN END IF C--- *DIMENSION TOO LARGE OR SMALL C--- *KEEP LOW,HIGH AND AVERAGE OF C--- *EACH LABEL DO 3 I=1,NUMPTS READ(18,*,END=8,ERR=7) (AXIS(J),J=1,NAXIS) DO 2 J=1,NAXIS IF (I.EQ.1) THEN MINA(NLAB,J) = AXIS(J) MAXA(NLAB,J) = AXIS(J) AVERA(NLAB,J) = AXIS(J) ELSE IF (MINA(NLAB,J).GT.AXIS(J)) MINA(NLAB,J) = AXIS(J) IF (MAXA(NLAB,J).LT.AXIS(J)) MAXA(NLAB,J) = AXIS(J) AVERA(NLAB,J) = AVERA(NLAB,J) + AXIS(J) END IF 2 CONTINUE 3 CONTINUE DO 4 I=1,NAXIS AVERA(NLAB,I) = AVERA(NLAB,I) / REAL(NUMPTS) 4 CONTINUE NA1 = INT(NAXIS/7) IF (MOD(NAXIS,7).NE.0) NA1 = NA1 + 1 BLKSZE = BLKSZE - NUMPTS * NA1 C--- *SKIP BLOCK DO 5 I=1,BLKSZE READ(18,*,ERR=7) 5 CONTINUE GO TO 1 6 CONTINUE C--- *ERROR IN UNIT 8 ERRORQ = .TRUE. IERR8 = 9 RETURN 7 CONTINUE C--- *ERROR IN NUMBER OF POINTS C--- *OR BLOCK SIZE ERRORQ = .TRUE. IERR8 = 3 RETURN 8 CONTINUE C--- *NO LABELS IN UNIT 8 IF (NLAB.EQ.0) THEN ERRORQ = .TRUE. IERR8 = 9 RETURN END IF C--- *DUPLICATE LABELS DO 10 I=1,NLAB-1 DO 9 J=I+1,NLAB IF (SLAB(I).EQ.SLAB(J)) THEN IERR8 = 1 END IF 9 CONTINUE 10 CONTINUE IF (.NOT.DDIM) RETURN NDIM = 1 DAX(1) = NAX(1) DO 12 I=2,NLAB DO 11 J=1,NDIM IF (DAX(J).EQ.NAX(I)) GO TO 12 11 CONTINUE NDIM = NDIM + 1 DAX(NDIM) = NAX(I) 12 CONTINUE RETURN END C----------------------------------------------------------------------- C GETS USER LABELS FOR THE <3D> COMMAND C----------------------------------------------------------------------- SUBROUTINE GTLB3D(ISTR,II,ERROR) CHARACTER*80 ISTR INTEGER SLAB(1999),PARRY(1999),ENLAB(1999),ERROR LOGICAL VALID COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB C--- C--- ERROR = 0 IF (ISTR(II:).EQ.'A'.OR.ISTR(II:).EQ.'a') THEN CALL GETWLB(NUMLB,ENLAB,NLAB,SLAB) RETURN END IF CALL CONVT(ISTR,II,NUM,PARRY,VALID) IF (.NOT.VALID) THEN ERROR = 1 RETURN END IF NUMLB = NUM DO 1 I=1,NUMLB ENLAB(I) = PARRY(I) 1 CONTINUE C--- *DUPLICATE LABELS ENTER IF (NUMLB.EQ.1) GO TO 4 DO 3 I=1,NUMLB-1 DO 2 J=I+1,NUMLB IF (ENLAB(I).EQ.ENLAB(J)) THEN ERROR = 4 CALL WERRS(ERROR) WRITE(IWRITE,7) (SLAB(JJ),JJ=1,NLAB) RETURN END IF 2 CONTINUE 3 CONTINUE 4 CONTINUE C--- *CHECK LABELS DO 6 I=1,NUMLB DO 5 J=1,NLAB IF (SLAB(J).EQ.ENLAB(I)) GO TO 6 5 CONTINUE ERROR = 5 CALL WERRS(ERROR) WRITE(IWRITE,7) (SLAB(JJ),JJ=1,NLAB) RETURN 6 CONTINUE 7 FORMAT(/,2X,'THE LABELS ARE : ',10(T22,10I5,/)) RETURN END C----------------------------------------------------------------------- C GETS ALL LABELS IN UNIT 8. C NO MORE THAN 1999 LABELS C NO DUPLICATE LABELS C----------------------------------------------------------------------- SUBROUTINE GETWLB(NUM,PARRY,NLAB,SLAB) INTEGER PARRY(1999),SLAB(1999) LOGICAL DOUBLE COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- IF (NLAB.GT.1999) THEN INUM = 1999 ELSE INUM = NLAB END IF C--- *GET LABELS FROM UNIT 8 NUM = 0 DO 2 I =1,INUM NUM = NUM + 1 DOUBLE = .FALSE. IF (NUM.GT.1) THEN DO 1 J=1,NUM - 1 IF (PARRY(J).EQ.SLAB(I)) DOUBLE = .TRUE. 1 CONTINUE END IF IF (DOUBLE) THEN NUM = NUM - 1 ELSE PARRY(NUM) = SLAB(I) END IF 2 CONTINUE WRITE(IWRITE,3) (PARRY(I),I=1,NUM) RETURN 3 FORMAT(/,2X,'LABELS DEFINED ARE :',20(T24,10I5,/)) END C----------------------------------------------------------------------- C REDEFINES A PROPER WINDOW SIZE FOR PLOTTING C A SINGLE POINT AT MIN, MAX OF (X,Y,Z) C----------------------------------------------------------------------- SUBROUTINE SNGXYZ REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ C--- C--- C--- *CHECK X CALL REDFMM(MINQX,MAXQX) C--- *CHECK Y CALL REDFMM(MINQY,MAXQY) C--- *CHECK Z CALL REDFMM(MINQZ,MAXQZ) RETURN END C----------------------------------------------------------------------- C GETS THREE DIMENSIONS OF THE LABELS, C MIN, MAX, AVERAGE AND VIEW POINT C----------------------------------------------------------------------- SUBROUTINE GETDIM(MIMA) INTEGER ENLAB(1999),SLAB(1999),XAXIS,YAXIS,ZAXIS,ERROR INTEGER PARRY(1999) REAL MINA(1999,251),MAXA(1999,251),AVERA(1999,251),MIMA(3,2) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ CHARACTER*80 OST3,ISTR,OST1*16,OST2*5 LOGICAL CAXIS,VALID COMMON /MMA/ MINA,MAXA,AVERA COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /INKA/ CAXIS COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB C--- C--- 10 ERROR = 0 IF (NAXIS.GT. 3.OR.CAXIS) THEN OST1 = ' EACH POINT HAS' OST2 = ' AXES' WRITE(IWRITE,1) OST1,NAXIS,OST2 1 FORMAT(A,I3,A) OST3 = ' ENTER THE THREE AXES THAT YOU WANT PLOTTED' WRITE(IWRITE,2) OST3 2 FORMAT(A) CALL READS8(ISTR) II = 1 IF (ISTR(1:1).EQ.' ') II = 2 CALL CONVT(ISTR,II,NA,PARRY,VALID) IF (.NOT.VALID.OR.NA.NE.3) GO TO 10 XAXIS = PARRY(1) YAXIS = PARRY(2) ZAXIS = PARRY(3) MIAX = MIN(XAXIS,YAXIS,ZAXIS) MAAX = MAX(XAXIS,YAXIS,ZAXIS) IF (MIAX.LT.1.OR.MAAX.GT.NAXIS) ERROR = 1 IF (ERROR.EQ.1) THEN OST3 = ' CHOOSE AXES NUMBERS .GT. 0 AND .LT. ' WRITE(IWRITE,3) OST3(1:37),NAXIS 3 FORMAT(A,I3) GO TO 10 END IF CAXIS = .TRUE. ELSE XAXIS = 1 YAXIS = 2 ZAXIS = 3 END IF C--- *GET MIN, MAX AND AVER AVERX = 0 AVERY = 0 AVERZ = 0 DO 6 I=1,NUMLB DO 5 J=1,NLAB IF (ENLAB(I).NE.SLAB(J)) GO TO 5 IF (I.EQ.1) THEN MINQX = MINA(J,XAXIS) MINQY = MINA(J,YAXIS) MINQZ = MINA(J,ZAXIS) MAXQX = MAXA(J,XAXIS) MAXQY = MAXA(J,YAXIS) MAXQZ = MAXA(J,ZAXIS) ELSE IF(MINQX.GT.MINA(J,XAXIS)) MINQX = MINA(J,XAXIS) IF(MINQY.GT.MINA(J,YAXIS)) MINQY = MINA(J,YAXIS) IF(MINQZ.GT.MINA(J,ZAXIS)) MINQZ = MINA(J,ZAXIS) IF(MAXQX.LT.MAXA(J,XAXIS)) MAXQX = MAXA(J,XAXIS) IF(MAXQY.LT.MAXA(J,YAXIS)) MAXQY = MAXA(J,YAXIS) IF(MAXQZ.LT.MAXA(J,ZAXIS)) MAXQZ = MAXA(J,ZAXIS) END IF AVERX = AVERX + AVERA(J,XAXIS) AVERY = AVERY + AVERA(J,YAXIS) AVERZ = AVERZ + AVERA(J,ZAXIS) GO TO 6 5 CONTINUE 6 CONTINUE AVERX = AVERX / REAL(NUMLB) AVERY = AVERY / REAL(NUMLB) AVERZ = AVERZ / REAL(NUMLB) MIMA(1,1) = MINQX MIMA(1,2) = MAXQX MIMA(2,1) = MINQY MIMA(2,2) = MAXQY MIMA(3,1) = MINQZ MIMA(3,2) = MAXQZ RETURN END C----------------------------------------------------------------------- C DEFINES UNIT OF X,Y AND Z C----------------------------------------------------------------------- SUBROUTINE DFUNIT(TRAN) REAL TRAN(4,4) COMMON /UNIT1/ SX,SY,SZ COMMON /TRANSF/ TX,TY,TZ,RZ C--- C--- TX = SX TY = SY TZ = SZ ICODE = 2 CALL SO3D(ICODE,TRAN) RETURN END C----------------------------------------------------------------------- C--- C----------------------------------------------------------------------- SUBROUTINE SETSMA(INFO) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ,INFO(13,3) COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /UNIT1/ SX,SY,SZ C--- C--- CALL SNGXYZ X7 = ABS(MAXQX - AVERX) X8 = ABS(AVERX - MINQX) Y7 = ABS(MAXQY - AVERY) Y8 = ABS(AVERY - MINQY) Z7 = ABS(MAXQZ - AVERZ) Z8 = ABS(AVERZ - MINQZ) SX = MAX(X7,X8) SY = MAX(Y7,Y8) SZ = MAX(Z7,Z8) C--- INFO(7,1) = AVERX - SX INFO(7,2) = AVERY - SY INFO(7,3) = AVERZ - SZ INFO(8,1) = AVERX + SX INFO(8,2) = AVERY + SY INFO(8,3) = AVERZ + SZ XYZ = MAX(SX,SY,SZ) C--- MAXQX = AVERX + XYZ MINQX = AVERX - XYZ MAXQY = AVERY + XYZ MINQY = AVERY - XYZ MAXQZ = AVERZ + XYZ MINQZ = AVERZ - XYZ C--- SX = XYZ / SX SY = XYZ / SY SZ = XYZ / SZ RETURN END C----------------------------------------------------------------------- C SETS UP THE VIEW POINT C----------------------------------------------------------------------- SUBROUTINE SVIEWP(VIEW) REAL VIEW(3),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ LOGICAL VIEWNG COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /DL/ XL,YL,ZL,DIS C--- C--- CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) DIS = DIS * 3.05 VIEW(1) = MAXQX + DIS CXX CHANGED (EJD AUG. 1985) CXX VIEW(2) = MAXQY + DIS VIEW(2) = MAXQY + DIS*0.8 VIEW(3) = MAXQZ + DIS IF (VIEWNG(VIEW)) THEN VIEW(1) = VIEW(1) + DIS VIEW(2) = VIEW(2) + DIS VIEW(3) = VIEW(3) + DIS IF (VIEWNG(VIEW)) THEN VIEW(1) = ABS(VIEW(1)) VIEW(2) = ABS(VIEW(2)) VIEW(3) = ABS(VIEW(3)) END IF END IF RETURN END C----------------------------------------------------------------------- C THIS FUNCTION CHECKS IF THE VIEW POINT IS NEGATIVE C----------------------------------------------------------------------- LOGICAL FUNCTION VIEWNG(V) REAL V(3) VIEWNG = .FALSE. IF (MIN(V(1),V(2),V(3)).LT.0) VIEWNG = .TRUE. RETURN END C----------------------------------------------------------------------- C USED FOR TRANSLATION, SCALING AND ROTATION C----------------------------------------------------------------------- SUBROUTINE SO3D(CODE,TRAN) REAL TRAN(4,4),T(4,4),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ,L INTEGER CODE COMMON /TRANSF/ TX,TY,TZ,RZ COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ C--- C--- CALL IDENTI(T) C--- *MOVE ORIGIN IF (CODE.EQ.1) GO TO 1 T(4,1) = - AVERX T(4,2) = - AVERY T(4,3) = - AVERZ CALL MULTMA(TRAN,T) CALL IDENTI(T) GO TO(1,2,3,4,5,6) CODE C--- *TRANSLATION 1 T(4,1) = TX T(4,2) = TY T(4,3) = TZ CALL MULTMA(TRAN,T) RETURN C--- *SCALING 2 T(1,1) = TX T(2,2) = TY T(3,3) = TZ CALL MULTMA(TRAN,T) GO TO 10 C--- *ROTATION ABOUT X AXIS 3 T(2,2) = COS(TX) T(2,3) = SIN(TX) T(3,2) = - SIN(TX) T(3,3) = COS(TX) CALL MULTMA(TRAN,T) GO TO 10 C--- *ROTATION ABOUT Y AXIS 4 T(1,1) = COS(TY) T(1,3) = - SIN(TY) T(3,1) = SIN(TY) T(3,3) = COS(TY) CALL MULTMA(TRAN,T) GO TO 10 C--- *ROTATION ABOUT Z AXIS 5 T(1,1) = COS(TZ) T(1,2) = SIN(TZ) T(2,1) = - SIN(TZ) T(2,2) = COS(TZ) CALL MULTMA(TRAN,T) GO TO 10 C--- *ROTATION ABOUT OTHERAXIS 6 V = SQRT(TY**2 + TZ**2) L = SQRT(TX**2 + TY**2 + TZ**2) C--- *ROTATION ABOUT X AXIS T(2,2) = TZ / V T(2,3) = TY / V T(3,2) = - TY / V T(3,3) = TZ / V CALL MULTMA(TRAN,T) CALL IDENTI(T) C--- *ROTATION ABOUT Y AXIS T(1,1) = V / L T(1,3) = TX / L T(3,1) = - TX / L T(3,3) = V / L CALL MULTMA(TRAN,T) CALL IDENTI(T) C--- *ROTATION ABOUT Z AXIS T(1,1) = COS(RZ) T(1,2) = SIN(RZ) T(2,1) = - SIN(RZ) T(2,2) = COS(RZ) CALL MULTMA(TRAN,T) CALL IDENTI(T) C--- *INVERT ROTATION T(1,1) = V / L T(1,3) = - TX / L T(3,1) = TX / L T(3,3) = V / L CALL MULTMA(TRAN,T) CALL IDENTI(T) C--- *INVERT ROTATION T(2,2) = TZ / V T(2,3) = - TY / V T(3,2) = TY / V T(3,3) = TZ / V CALL MULTMA(TRAN,T) 10 CONTINUE C--- *INVERT CALL IDENTI(T) T(4,1) = AVERX T(4,2) = AVERY T(4,3) = AVERZ CALL MULTMA(TRAN,T) RETURN END C----------------------------------------------------------------------- C INITIALIZES INFORMATION ON TRANSFORMATION C AND MIN, MAX, AVER OF THE CURVES C----------------------------------------------------------------------- SUBROUTINE CINFO (INFO) REAL INFO(13,3) C--- C--- DO 2 I=1,4 DO 1 J=1,3 IF (I.EQ.2) THEN INFO(I,J) = 1 ELSE INFO(I,J) = 0 END IF 1 CONTINUE 2 CONTINUE RETURN END C----------------------------------------------------------------------- C KEEPS INFORMATION ON TRANSLATION AND MINIMUM, C MAXIMUM, AVERAGE C----------------------------------------------------------------------- SUBROUTINE KINFO(INFO,VIEW,INDEX) REAL INFO(13,3),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL VIEW(3) COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ C--- C--- I = INDEX INFO(I,1) = MINQX INFO(I,2) = MINQY INFO(I,3) = MINQZ C--- I = I + 1 INFO(I,1) = MAXQX INFO(I,2) = MAXQY INFO(I,3) = MAXQZ C--- I = I + 1 INFO(I,1) = AVERX INFO(I,2) = AVERY INFO(I,3) = AVERZ C--- I = 13 INFO(I,1) = VIEW(1) INFO(I,2) = VIEW(2) INFO(I,3) = VIEW(3) RETURN END C----------------------------------------------------------------------- C INITIALIZES INFORMATION IN ARRAYINFO C----------------------------------------------------------------------- SUBROUTINE ININFO(INFO,VIEW,MIMA) REAL INFO(13,3),VIEW(3),MIMA(3,2) C--- C--- CALL CINFO(INFO) INFO(5,1) = MIMA(1,1) INFO(5,2) = MIMA(2,1) INFO(5,3) = MIMA(3,1) C--- INFO(6,1) = MIMA(1,2) INFO(6,2) = MIMA(2,2) INFO(6,3) = MIMA(3,2) C--- INDEX = 7 CALL KINFO(INFO,VIEW,INDEX) INDEX = 10 CALL KINFO(INFO,VIEW,INDEX) RETURN END C----------------------------------------------------------------------- C DEFINE ORIGIN AS AVERAGE AND ERASE TRANSFORMATION C----------------------------------------------------------------------- SUBROUTINE DFCOOR(TRAN,INFO,VIEW) REAL TRAN(4,4),INFO(13,3),VIEW(3),MINQX,MINQY,MINQZ REAL MAXQX,MAXQY,MAXQZ COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ C--- C--- MINQX = INFO(5,1) MINQY = INFO(5,2) MINQZ = INFO(5,3) C--- MAXQX = INFO(6,1) MAXQY = INFO(6,2) MAXQZ = INFO(6,3) C--- CALL SETSMA(INFO) CALL IDENTI(TRAN) CALL DFUNIT(TRAN) CALL CINFO(INFO) CALL SVIEWP(VIEW) CALL CINFO(INFO) INDEX = 10 CALL KINFO(INFO,VIEW,INDEX) RETURN END C----------------------------------------------------------------------- C SETS SCALING TO 2 FOR ,, C----------------------------------------------------------------------- SUBROUTINE SCTWO(TRAN,INFO) REAL TRAN(4,4),INFO(13,3) COMMON /TRANSF/ TX,TY,TZ,RZ C--- C--- TX = 2 TY = 2 TZ = 2 ICODE = 2 CALL SO3D(ICODE,TRAN) C--- INFO(2,1) = 2 INFO(2,2) = 2 INFO(2,3) = 2 RETURN END C----------------------------------------------------------------------- C GETS <3D> COMMAND FOR TRANSFORMATION, DISPLAY C OR HARD COPY PLOT. C----------------------------------------------------------------------- SUBROUTINE ENT3DC(MIMA,VIEW,COM) CHARACTER*10 COMAND,OST1*80,OST2*80,ISTR*80 CHARACTER*1 CH,WAXIS(3),COM*2,TIT3C(3)*15 INTEGER XAXIS,YAXIS,ZAXIS,ENLAB(1999),CODE,ERROR,SLAB(1999) INTEGER CLAB(1999),CNUM,CERROR,NVX(2),SPLPT INTEGER PARRY(1999),NAX(1999),DAX(1999),CTIT3C(3) REAL TRAN(4,4),MIMA(3,2),VIEW(3),ROWIND(4,4) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL CMIMA(3,2),CVIEW(3),INFO(13,3) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL PLTR,POINT,CAXIS,CIR LOGICAL DFT,USR,BRNCH,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP LOGICAL DFDOT,MIDDLE,DIAXIS,B3DC,ST3D LOGICAL PJXY,PJYZ,PJXZ,VALID,PSL,DCOOR,PRNUM C--- COMMON /UOPTS/ DFT,USR,BRNCH, + ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /TRANSF/ TX,TY,TZ,RZ COMMON /PLOTT/ PLTR,POINT COMMON /INKA/ CAXIS COMMON /DS/ CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,ST3D COMMON /DS1/ DAINT,DOINT,PSIX,PFOUR COMMON /ROWI/ ROWIND COMMON /SYMB/ KTYPE COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /PJXYZ/ PJXY,PJYZ,PJXZ,IPJ,PSL COMMON /UNIT1/ SX,SY,SZ COMMON /DAXIS1/ NAX,DAX,NDIM COMMON /CB3D/ B3DC COMMON /SPNUM/ SP1,SP2,SP3,SP4 COMMON /T3D/ CTIT3C,TIT3C DATA WAXIS/'X','Y','Z'/ C--- C--- C--- CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) IWRITE = ITERM MIDDLE = .FALSE. DIAXIS = .TRUE. DFDOT = .FALSE. CIR = .TRUE. PLTR = .FALSE. CHRAD = ACOS(-1.0) / 180.0 DAINT = 50.0 DOINT = 125.0 PSIX = 0.6 PFOUR = 0.4 KTYPE = 3 POINT = .TRUE. DFT = .TRUE. TIT = .FALSE. AXLB = .FALSE. CALL IDENTI(ROWIND) CALL ININFO(INFO,VIEW,MIMA) CALL DFCOOR(TRAN,INFO,VIEW) AINFO = 0 PJXY = .FALSE. PJYZ = .FALSE. PJXZ = .FALSE. PSL = .FALSE. DCOOR = .TRUE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COM = ' ' IF (B3DC) THEN OST1 = ' ENTER COMMAND :' ELSE OST1 = ' ENTER <3D> COMMAND :' END IF 1 WRITE(IWRITE,10) OST1 3 CALL READS1(COMAND) 50 CONTINUE C--- *D1 IF (COMAND.EQ.'D1'.OR.COMAND.EQ.'d1') THEN AVERX = INFO(9,1) AVERY = INFO(9,2) AVERZ = INFO(9,3) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .FALSE. MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .TRUE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *D2 IF (COMAND.EQ.'D2'.OR.COMAND.EQ.'d2') THEN AVERX = 0 AVERY = 0 AVERZ = 0 CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) CALL SCTWO(TRAN,INFO) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .TRUE. PJXY = .TRUE. PJYZ = .TRUE. PJXZ = .TRUE. IPJ = 3 MIDDLE = .TRUE. DIAXIS = .FALSE. PSL = .FALSE. DCOOR = .TRUE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *D3 IF (COMAND.EQ.'D3'.OR.COMAND.EQ.'d3') THEN AVERX = MIMA(1,1) AVERY = MIMA(2,1) AVERZ = MIMA(3,1) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) CALL SCTWO(TRAN,INFO) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .FALSE. MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .TRUE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *D4 IF (COMAND.EQ.'D4'.OR.COMAND.EQ.'d4') THEN AVERX = MIMA(1,1) AVERY = MIMA(2,1) AVERZ = MIMA(3,1) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) CALL SCTWO(TRAN,INFO) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .TRUE. PJXY = .TRUE. PJYZ = .TRUE. PJXZ = .TRUE. PSL = .FALSE. DCOOR = .TRUE. IPJ = 3 MIDDLE = .TRUE. DIAXIS = .FALSE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *D5 IF (COMAND.EQ.'D5'.OR.COMAND.EQ.'d5') THEN AVERX = INFO(9,1) AVERY = INFO(9,2) AVERZ = INFO(9,3) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .FALSE. MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .FALSE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *D6 IF (COMAND.EQ.'D6'.OR.COMAND.EQ.'d6') THEN AVERX = INFO(9,1) AVERY = INFO(9,2) AVERZ = INFO(9,3) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) KTYPE = 3 CIR = .TRUE. TIT = .FALSE. AXLB = .FALSE. DFDOT = .TRUE. PJXY = .TRUE. PJYZ = .TRUE. PJXZ = .TRUE. PSL = .FALSE. IPJ = 3 MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .FALSE. PRNUM = .FALSE. ST3D = .FALSE. IDP2C = 0 COMAND = 'DIS' END IF C--- *TRANSLATION IF (COMAND.EQ.'TR'.OR.COMAND.EQ.'tr') THEN OST2 = ' TRANSLATION, ENTER THREE TRANSLATIONS FOR (X,Y,Z)' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TX,TY,TZ INFO(1,1) = INFO(1,1) + TX INFO(1,2) = INFO(1,2) + TY INFO(1,3) = INFO(1,3) + TZ CODE = 1 CALL SO3D(CODE,TRAN) CALL SO3D(CODE,ROWIND) GO TO 1 END IF C--- *SCALING IF (COMAND.EQ.'SC'.OR.COMAND.EQ.'sc') THEN OST2 = ' SCALING, ENTER THREE SCALING FACTORS FOR (X,Y,Z)' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TX,TY,TZ INFO(2,1) = INFO(2,1) * TX INFO(2,2) = INFO(2,2) * TY INFO(2,3) = INFO(2,3) * TZ CODE = 2 CALL SO3D(CODE,TRAN) GO TO 1 END IF C--- *ROTATION ABOUT X AXIS IF (COMAND.EQ.'RX'.OR.COMAND.EQ.'rx') THEN OST2 = ' ROTATION ABOUT X AXIS, ENTER DEGREES' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TX INFO(3,1) = INFO(3,1) + TX TX = TX * CHRAD CODE = 3 CALL SO3D(CODE,TRAN) CALL SO3D(CODE,ROWIND) GO TO 1 END IF C--- *ROTATION ABOUT Y AXIS IF (COMAND.EQ.'RY'.OR.COMAND.EQ.'ry') THEN OST2 = ' ROTATION ABOUT Y AXIS, ENTER DEGREES' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TY INFO(3,2) = INFO(3,2) + TY TY = TY * CHRAD CODE = 4 CALL SO3D(CODE,TRAN) CALL SO3D(CODE,ROWIND) GO TO 1 END IF C--- *ROTATION ABOUT Z AXIS IF (COMAND.EQ.'RZ'.OR.COMAND.EQ.'rz') THEN OST2 = ' ROTATION ABOUT Z AXIS, ENTER DEGREES' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TZ INFO(3,3) = INFO(3,3) + TZ TZ = TZ * CHRAD CODE = 5 CALL SO3D(CODE,TRAN) CALL SO3D(CODE,ROWIND) GO TO 1 END IF C--- *ROTATION ABOUT OTHER A IF (COMAND.EQ.'RA'.OR.COMAND.EQ.'ra') THEN OST2 = ' ROTATION ABOUT ANOTHER AXIS THROUGH (0,0,0)' WRITE(IWRITE,10) OST2 OST2 = ' ENTER THREE COORDINATES TO DEFINE AXIS' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) TX,TY,TZ IF (TY.EQ.0.AND.TZ.EQ.0) THEN OST2 = ' Y AND Z CAN NOT BE BOTH ZERO ' WRITE(IWRITE,10) OST2 GO TO 1 END IF OST2 = ' ENTER ANGLE OF ROTATION IN DEGREES' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) RZ INFO(4,1) = INFO(4,1) + TX INFO(4,2) = INFO(4,2) + TY INFO(4,3) = INFO(4,3) + TZ AINFO = AINFO + RZ RZ = RZ * CHRAD CODE = 6 CALL SO3D(CODE,TRAN) CALL SO3D(CODE,ROWIND) GO TO 1 END IF C--- *IDENTIFY THE LABELS IN UNIT 8 C--- *AND LABELS DEFINED BY USER IF (.NOT.B3DC) THEN IF (COMAND.EQ.'LAB'.OR.COMAND.EQ.'lab') THEN CALL PRLAB WRITE(IWRITE,43) (ENLAB(I),I=1,NUMLB) 43 FORMAT(/,2X,'THE LABELS DEFINED ARE :',20(T28,10I5,/)) WRITE(IWRITE,44) XAXIS,YAXIS,ZAXIS 44 FORMAT(/,2X,'AXES DEFINED ARE :',3I3,/) GO TO 1 END IF C--- *GET NEW LABELS FROM USER IF (COMAND.EQ.'3D'.OR.COMAND.EQ.'3d')THEN CALL PRLAB WRITE(IWRITE,43) (ENLAB(I),I=1,NUMLB) OST2 = ' ' WRITE(IWRITE,10) OST2 OST2 = ' ENTER LABELS ' WRITE(IWRITE,10) OST2 CALL READS8(ISTR) II = 1 IF (ISTR(1:1).EQ.' ') II = II + 1 CNUM = NUMLB DO 101 I=1,NUMLB CLAB(I) = ENLAB(I) 101 CONTINUE CALL GTLB3D(ISTR,II,CERROR) IF (CERROR.EQ.0) THEN CALL GETNAX(SLAB,NLAB,ENLAB,NUMLB,NAX,NAXIS) CAXIS = .TRUE. CALL GETDIM(CMIMA) DO 103 I =1,3 VIEW(I) = CVIEW(I) MIMA(I,1) = CMIMA(I,1) MIMA(I,2) = CMIMA(I,2) 103 CONTINUE CALL ININFO(INFO,VIEW,MIMA) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) KTYPE = 3 DFDOT = .FALSE. MIDDLE = .FALSE. DIAXIS = .TRUE. DCOOR = .TRUE. CIR = .TRUE. DAINT = 50.0 DOINT =125.0 PSIX = 0.6 PFOUR = 0.4 TIT = .FALSE. AXLB = .FALSE. PRNUM = .FALSE. ELSE NUMLB = CNUM DO 105 I=1,CNUM 105 ENLAB(I) = CLAB(I) END IF ST3D = .FALSE. IDP2C = 0 GO TO 1 END IF END IF C--- *BRANCH NUMBERS IF (COMAND.EQ.'BR'.OR.COMAND.EQ.'br') THEN POINT = .TRUE. GO TO 1 END IF C--- *RESET BRANCH NUMBERS IF (COMAND.EQ.'DBR'.OR.COMAND.EQ.'dbr') THEN POINT = .FALSE. GO TO 1 END IF C--- *SET WINDOW IF (COMAND.EQ.'SN'.OR.COMAND.EQ.'sn') THEN CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) GO TO 1 END IF C--- *SCREEN IF (COMAND.EQ.'SU'.OR.COMAND.EQ.'su') THEN WRITE(IWRITE,60) MINSX,MAXSX,MINSY,MAXSY,SP1 CALL READS8(ISTR) II = 1 IF (ISTR(1:1).EQ.' ') II = II + 1 CALL CONVT(ISTR,II,NA,PARRY,VALID) IF (.NOT.VALID) GO TO 1 IF (NA.NE.4) THEN OST2 = ' ERROR - INVALID SIZE' WRITE(IWRITE,10) OST2 GO TO 1 END IF IX1 = MIN(PARRY(1),PARRY(2)) IX2 = MAX(PARRY(1),PARRY(2)) IY1 = MIN(PARRY(3),PARRY(4)) IY2 = MAX(PARRY(3),PARRY(4)) MINSX = IX1 MAXSX = IX2 MINSY = IY1 MAXSY = IY2 GO TO 1 END IF C--- *SET UP TITLE IF (COMAND.EQ.'ST'.OR.COMAND.EQ.'st') THEN CALL ENTGRD(1) TIT = .TRUE. AXLB = .TRUE. OST2 = ' AXES LABELS ? ( OR ) ' WRITE(ITERM,10) OST2 CALL READ1(CH) IF (CH.EQ.'Y'.OR.CH.EQ.'y') THEN CALL TIT3D ST3D = .TRUE. END IF GO TO 1 END IF C--- *RESET IF (COMAND.EQ.'DST'.OR.COMAND.EQ.'dst') THEN TIT = .FALSE. AXLB = .FALSE. ST3D = .FALSE. GO TO 1 END IF C--- *ERASE TRANSFORMATION IF (COMAND.EQ.'ET'.OR.COMAND.EQ.'et') THEN CALL IDENTI(ROWIND) CALL DFCOOR(TRAN,INFO,VIEW) AINFO = 0 GO TO 1 END IF C--- *CLEAR SCREEN IF (COMAND.EQ.'CLR'.OR.COMAND.EQ.'clr'.OR. + COMAND.EQ.'CL '.OR.COMAND.EQ.'cl ') THEN CALL PLCMDS(1) CALL PLCHDW(3) GO TO 1 END IF C--- *CHANGE COORDINATES IF (COMAND.EQ.'AX'.OR.COMAND.EQ.'ax') THEN WRITE(IWRITE,44) XAXIS,YAXIS,ZAXIS IF (.NOT.B3DC) THEN CAXIS = .TRUE. CALL GETDIM(MIMA) ELSE CALL GAXB3D(MIMA,ERROR) IF (ERROR.NE.0) GO TO 1 END IF CALL ININFO(INFO,VIEW,MIMA) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) DAINT = 50.0 DOINT =125.0 IDP2C = 0 GO TO 1 END IF C--- *SAVE PLOT IN UNIT 16 IF (COMAND.EQ.'SAV'.OR.COMAND.EQ.'sav') THEN IWRITE = ISAVE CALL CRFLNM(1) CALL SWIND(TRAN,VIEW,MIMA,INFO,IDP2C) CALL PLCHDW(3) CALL CRFLNM(2) IWRITE = ITERM CALL COMPLT GO TO 1 END IF C--- *PLOTTER IF (COMAND.EQ.'PLOT'.OR.COMAND.EQ.'plot') THEN PLTR = .TRUE. CALL SWIND(TRAN,VIEW,MIMA,INFO,IDP2C) CALL PLCHDW(3) PLTR = .FALSE. GO TO 1 END IF C--- *SET UP 2 DIFFERENT VIEW POINTS IF (COMAND.EQ.'DVX'.OR.COMAND.EQ.'dvx') THEN IDP2C = 1 GO TO 1 END IF IF (COMAND.EQ.'DVY'.OR.COMAND.EQ.'dvy') THEN IDP2C = 2 GO TO 1 END IF C--- *SOLID LINES IF (COMAND.EQ.'SL'.OR.COMAND.EQ.'sl') THEN KTYPE = 1 GO TO 1 END IF C--- *DASHES IF (COMAND.EQ.'DA'.OR.COMAND.EQ.'da') THEN KTYPE = 2 GO TO 1 END IF C--- *SOLID AND DASHED LINES IF (COMAND.EQ.'SA'.OR.COMAND.EQ.'sa') THEN KTYPE = 3 GO TO 1 END IF C--- *DOTTED LINES IF (COMAND.EQ.'DO'.OR.COMAND.EQ.'do') THEN KTYPE = 4 DFDOT = .FALSE. GO TO 1 END IF C--- * SOLID AND DOTTED IF (COMAND.EQ.'SO'.OR.COMAND.EQ.'so') THEN KTYPE = 5 GO TO 1 END IF C--- * HEAVY LINE IF (COMAND.EQ.'HL'.OR.COMAND.EQ.'hl') THEN KTYPE = 6 GO TO 1 END IF C--- *PROJECTION IF (COMAND.EQ.'PJ'.OR.COMAND.EQ.'pj') THEN DFDOT = .TRUE. IPJ = 3 PJXY = .TRUE. PJYZ = .TRUE. PJXZ = .TRUE. PSL = .FALSE. GO TO 1 END IF C--- *PROJECTION DEFINED BY USER IF (COMAND.EQ.'PJU'.OR.COMAND.EQ.'pju') THEN OST2 = ' ENTER <1> FOR PROJECTION ON (X,Y,Z0)' WRITE(IWRITE,10) OST2 OST2 = ' ENTER <2> FOR PROJECTION ON (X0,Y,Z)' WRITE(IWRITE,10) OST2 OST2 = ' ENTER <3> FOR PROJECTION ON (X,Y0,Z)' WRITE(IWRITE,10) OST2 CALL READS8(ISTR) II = 1 IF (ISTR(1:1).EQ.' ') II = 2 CALL CONVT(ISTR,II,NA,PARRY,VALID) IF (.NOT.VALID) GO TO 1 IF (NA.GT.3) THEN OST2 = ' ERROR - CODE CANNOT BE GREATER THAN 3' WRITE(IWRITE,10) OST2 GO TO 1 END IF PJXY = .FALSE. PJYZ = .FALSE. PJXZ = .FALSE. IPJ = 0 DO 110 I = 1,NA IF (PARRY(I).EQ.1.AND..NOT.PJXY) THEN IPJ = IPJ + 1 PJXY = .TRUE. END IF IF (PARRY(I).EQ.2.AND..NOT.PJYZ) THEN IPJ = IPJ + 1 PJYZ = .TRUE. END IF IF (PARRY(I).EQ.3.AND..NOT.PJXZ) THEN IPJ = IPJ + 1 PJXZ = .TRUE. END IF 110 CONTINUE IF (IPJ .GE. 1) THEN DFDOT = .TRUE. PSL = .FALSE. ELSE DFDOT = .FALSE. END IF GO TO 1 END IF C--- *PROJECTION USING SOLID LINE IF (COMAND.EQ.'PSL'.OR.COMAND.EQ.'psl') THEN PSL = .TRUE. GO TO 1 END IF C--- *RESET PROJECTION IF (COMAND.EQ.'DPJ'.OR.COMAND.EQ.'dpj') THEN DFDOT = .FALSE. GO TO 1 END IF C--- *DEFINE DASHES IF (COMAND.EQ.'DDL'.OR.COMAND.EQ.'ddl') THEN OST2 = ' OLD DASH LENGTH IS' WRITE(IWRITE,30) OST2(1:22),PSIX 30 FORMAT(A,F6.2) OST2 = ' ENTER NEW LENGTH' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) UNIT IF (UNIT.LE.0.OR.UNIT.GE.1) THEN OST2 = ' ERROR : 0 < LENGTH < 1' WRITE(IWRITE,10) OST2 GO TO 1 END IF PSIX = UNIT PFOUR = 1.0 - UNIT GO TO 1 END IF C--- *RESET DASHES, DOTS IF (COMAND.EQ.'DDD'.OR.COMAND.EQ.'ddd') THEN PSIX = 0.6 PFOUR = 0.4 DAINT = 50.0 DOINT =125.0 GO TO 1 END IF C--- *DEFINE NUMBER OF DOTS IF (COMAND.EQ.'SDO'.OR.COMAND.EQ.'sdo') THEN CALL DEFINE(DOINT,2) GO TO 1 END IF C--- *DEFINE NUMBER OF DASHES IF (COMAND.EQ.'SDA'.OR.COMAND.EQ.'sda') THEN CALL DEFINE(DAINT,1) GO TO 1 END IF C--- *VIEW POINT IF (COMAND.EQ.'VU'.OR.COMAND.EQ.'vu') THEN OST2 = + ' MIN MAX COOR VIEW' WRITE(IWRITE,10) OST2 WRITE(IWRITE,20) WAXIS(1),MINQX,MAXQX,AVERX,VIEW(1) WRITE(IWRITE,20) WAXIS(2),MINQY,MAXQY,AVERY,VIEW(2) WRITE(IWRITE,20) WAXIS(3),MINQZ,MAXQZ,AVERZ,VIEW(3) 20 FORMAT(2X,A1,4(2X,F12.5)) OST2 = ' ENTER VIEW POINT ' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) VIEWX,VIEWY,VIEWZ IF (VIEWZ.EQ.0) THEN OST2 = ' VIEW POINT ON Z AXIS CAN NOT BE ZERO' WRITE(IWRITE,10) OST2 GO TO 1 END IF VIEW(1) = VIEWX VIEW(2) = VIEWY VIEW(3) = VIEWZ INFO(13,1) = VIEWX INFO(13,2) = VIEWY INFO(13,3) = VIEWZ GO TO 1 END IF C--- *VIEW POINT WITH DISTANCE IF (COMAND.EQ.'VD'.OR.COMAND.EQ.'vd') THEN CALL SVIEWP(VIEW) INFO(13,1) = VIEW(1) INFO(13,2) = VIEW(2) INFO(13,3) = VIEW(3) GO TO 1 END IF C--- *DISPLAY ORIGIN AT AVERAGE IF (COMAND.EQ.'C1'.OR.COMAND.EQ.'c1') THEN MIDDLE = .FALSE. DIAXIS = .FALSE. DCOOR = .TRUE. GO TO 1 END IF C--- *DISPLAY ORIGIN AT AVERAGE C--- *AND PLOT COORDINATE NUMBER IF (COMAND.EQ.'C2'.OR.COMAND.EQ.'c2') THEN MIDDLE = .FALSE. DIAXIS = .TRUE. DCOOR = .TRUE. GO TO 1 END IF C--- *DISPLAY ORIGIN AT MINIMUM IF (COMAND.EQ.'C3'.OR.COMAND.EQ.'c3') THEN MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .TRUE. GO TO 1 END IF IF (COMAND.EQ.'C4'.OR.COMAND.EQ.'c4') THEN MIDDLE = .TRUE. DIAXIS = .TRUE. DCOOR = .TRUE. GO TO 1 END IF IF (COMAND.EQ.'C5'.OR.COMAND.EQ.'c5') THEN MIDDLE = .TRUE. DIAXIS = .FALSE. DCOOR = .FALSE. GO TO 1 END IF C--- *PRINT COORDINATE NUMBER C--- *AND MAXIMUM ON AXIS IF (COMAND.EQ.'PN'.OR.COMAND.EQ.'pn') THEN PRNUM = .TRUE. GO TO 1 END IF C--- *DELETE COORDINATE NUMBER C--- IF (COMAND.EQ.'DPN'.OR.COMAND.EQ.'dpn') THEN PRNUM = .FALSE. GO TO 1 END IF C--- *CIRCLE C--- *(COORDINATE PLANE INTERCEPT) IF (COMAND.EQ.'CI'.OR.COMAND.EQ.'ci') THEN CIR = .TRUE. GO TO 1 END IF C--- *RESET CIRCLE IF (COMAND.EQ.'DCI'.OR.COMAND.EQ.'dci') THEN CIR = .FALSE. GO TO 1 END IF C--- *DISPLAY CURVE IF (COMAND.EQ.'DIS'.OR.COMAND.EQ.'dis'.OR. + COMAND.EQ.'D '.OR.COMAND.EQ.'d ') THEN CALL SWIND(TRAN,VIEW,MIMA,INFO,IDP2C) CALL PLCHDW(3) GO TO 1 END IF C--- *ORIGIN AT (0,0,0) IF (COMAND.EQ.'CZ'.OR.COMAND.EQ.'cz') THEN AVERX = 0 AVERY = 0 AVERZ = 0 CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) GO TO 1 END IF C--- *USER DEFINED ORIGIN IF (COMAND.EQ.'CU'.OR.COMAND.EQ.'cu') THEN OST2 = ' ENTER ORIGIN (X,Y,Z)' WRITE(IWRITE,10) OST2 READ(5,*,ERR=1) A1,A2,A3 AVERX = A1 AVERY = A2 AVERZ = A3 CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) GO TO 1 END IF C--- *ORIGIN AT AVERAGE IF (COMAND.EQ.'CA'.OR.COMAND.EQ.'ca') THEN AVERX = INFO(9,1) AVERY = INFO(9,2) AVERZ = INFO(9,3) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) GO TO 1 END IF C--- *ORIGIN AT MIN(X,Y,Z) IF (COMAND.EQ.'CM'.OR.COMAND.EQ.'cm') THEN AVERX = INFO(5,1) AVERY = INFO(5,2) AVERZ = INFO(5,3) CALL DFCOOR(TRAN,INFO,VIEW) CALL IDENTI(ROWIND) GO TO 1 END IF C--- *PRINT INFORMATION IF (COMAND.EQ.'INFO'.OR.COMAND.EQ.'info') THEN OST2 = ' ' WRITE(IWRITE,10) OST2 WRITE(IWRITE,300) WRITE(IWRITE,10) OST2 WRITE(IWRITE,302) WRITE(IWRITE,10) OST2 DO 200 I=1,3 WRITE(IWRITE,303) WAXIS(I),(INFO(J,I),J=1,6) 200 CONTINUE WRITE(IWRITE,306) AINFO WRITE(IWRITE,10) OST2 WRITE(IWRITE,301) WRITE(IWRITE,10) OST2 WRITE(IWRITE,304) WRITE(IWRITE,10) OST2 DO 201 I=1,3 WRITE(IWRITE,305) WAXIS(I),(INFO(J,I),J=7,13) 201 CONTINUE WRITE(IWRITE,10) OST2 GO TO 1 END IF C--- *<2D> IF (.NOT.B3DC) THEN IF (COMAND.EQ.'2D'.OR.COMAND.EQ.'2d') THEN COM = '2D' TIT = .FALSE. AXLB = .FALSE. CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) GO TO 100 END IF END IF C--- *TERMINATE <3D> IF (COMAND.EQ.'EXIT'.OR.COMAND.EQ.'exit'.OR. + COMAND.EQ.'EX' .OR.COMAND.EQ.'ex') THEN TIT = .FALSE. AXLB = .FALSE. CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) GO TO 100 END IF IF (COMAND.EQ.'END'.OR.COMAND.EQ.'end'.OR. + COMAND.EQ.'E' .OR.COMAND.EQ.'e') THEN TIT = .FALSE. AXLB = .FALSE. CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) GO TO 100 END IF C--- *LISTING OF <3D> IF (COMAND.EQ.'HELP'.OR.COMAND.EQ.'help') THEN COMAND = ' ' CALL HELP3D(COMAND,1) IF (COMAND.NE.' ') GO TO 50 GO TO 1 END IF IF (COMAND.EQ.'STOP'.OR.COMAND.EQ.'stop') STOP C--- *LISTING OF <3D> IF (COMAND.EQ.'LI '.OR.COMAND.EQ.'li '.OR. + COMAND.EQ.'LIST'.OR.COMAND.EQ.'list') THEN CALL LIST3D GO TO 1 END IF OST2 = ' OR IN CASE OF DIFFICULTY' WRITE(IWRITE,10) OST2 OST2 = ' ILLEGAL COMMAND' WRITE(IWRITE,10) OST2 GO TO 3 100 CONTINUE 10 FORMAT(A) 300 FORMAT(14X,'TRANSFORMATION',18X,' LIMITS ') 301 FORMAT(18X,' GRAPH ',16X, + ' SCREEN ') 302 FORMAT(4X,'TRANSLATE',4X,'SCALE',4X,'ROTATE',6X,'RA', + 8X,'MIN',8X,'MAX') 303 FORMAT(1X,A1,2X,F9.5,2X,F7.3,2X,F8.3,2X,F6.2,2X, + F9.4,2X,F9.4) 304 FORMAT(10X,'MIN',8X,'MAX',6X,'AVER',7X,'MIN',8X, + 'MAX',6X,'COOR',6X,'VIEW') 305 FORMAT(1X,A1,2(2X,F9.4,2X,F9.4,2X,F8.4),2X,F8.4) 306 FORMAT(/,T20,'ANGLE OF ROTATION ABOUT OTHER AXIS : ',F9.5) 60 FORMAT(/,' THE DEFAULT SETTING FOR THE RELATIVE DIMENSION OF', + ' THE SCREEN IS :',//,' MIN(X)=',F8.2,6X,'MAX(X)=',F8.2,6X, + 'MIN(Y)=',F8.2,6X,'MAX(Y)=',F8.2,//, + ' ENTER THE NEW SCREEN DIMENSION SUCH THAT MIN(X) > ',F8.2) RETURN END C----------------------------------------------------------------------- C DEFINES THE NUMBER OF DASHES AND DOTS C----------------------------------------------------------------------- SUBROUTINE DEFINE(INTVAL,ICODE) REAL INTVAL CHARACTER*80 OSTR COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- IF (ICODE.EQ.1) THEN OSTR = ' OLD NUMBER OF DASHES IS ' ELSE IF (ICODE.EQ.2) THEN OSTR = ' OLD NUMBER OF DOTS IS ' ELSE IF (ICODE.EQ.3) THEN OSTR = ' OLD NUMBER OF CIRCLES IS ' ELSE IF (ICODE.EQ.4) THEN OSTR = ' OLD NUMBER OF SYMBOLS IS ' ELSE IF (ICODE.EQ.5) THEN OSTR = ' PLOTTING ACCURACY IS ' ELSE IF (ICODE.EQ.6) THEN OSTR = ' OLD NUMBER OF DASHES-DOTS IS ' END IF WRITE(ITERM,1) OSTR(1:30),INTVAL OSTR = ' ENTER NEW NUMBER ' WRITE(IWRITE,2) OSTR READ(5,*,ERR=3) RINTVL IF (RINTVL.LT.5) THEN OSTR = 'ERROR - NUMBER SHOULD BE >= 5' WRITE(IWRITE,2) OSTR ELSE INTVAL = RINTVL END IF 3 RETURN 1 FORMAT(A,F7.2) 2 FORMAT(A80) END C----------------------------------------------------------------------- C PRINTS INFORMATION ON <3D> C----------------------------------------------------------------------- SUBROUTINE HELP3D(ISTR,ICODE) CHARACTER*70 OST1,BLANK,ENTC,LIST,ISTR*10 COMMON /IO/ IWRITE,ITERM,ISAVE C--- C--- BLANK = ' ' LIST = ' PRESS FOR MORE...' ENTC = ' PRESS FOR MORE, OR ENTER COMMAND ...' C--- CALL PLCMDS(1) WRITE(ITERM,1) BLANK OST1 = ' LIST OF 3D COMMANDS' WRITE(ITERM,1) BLANK WRITE(ITERM,1) BLANK OST1 = ' DEFAULT COMMANDS' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT "AVERAGE" OF THE CURVES,' WRITE(IWRITE,1) OST1 OST1 = ' AND DISPLAY THE CURVES ' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT (0,0,0),' WRITE(IWRITE,1) OST1 OST1 = ' AND DISPLAY THE CURVES AND THEIR PROJECTIONS' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT MIN(X,Y,Z),' WRITE(IWRITE,1) OST1 OST1 = ' AND DISPLAY THE CURVES ' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT MIN(X,Y,Z),' WRITE(IWRITE,1) OST1 OST1 = ' AND DISPLAY THE CURVES AND THEIR PROJECTIONS' WRITE(IWRITE,1) OST1 OST1 = ' ' WRITE(IWRITE,1) OST1 OST1 = ' ' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK IF (ICODE.EQ.1) THEN WRITE(IWRITE,1) ENTC ELSE WRITE(IWRITE,1) LIST END IF C--- CALL READS1(ISTR) IF (ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(IWRITE,1) BLANK OST1 = ' LIST LABELS IN UNIT 8,' WRITE(IWRITE,1) OST1 OST1 = ' AND LABELS DEFINED BY THE USER' WRITE(IWRITE,1) OST1 OST1 = ' <3D> GET NEW LABELS FROM UNIT 8 (MAX 1999)' WRITE(IWRITE,1) OST1 OST1 = ' CHANGE AXES' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK OST1 = ' TRANSFORMATIONS' WRITE(IWRITE,1) OST1 OST1 = ' TRANSLATION IN (X,Y,Z)' WRITE(IWRITE,1) OST1 OST1 = ' SCALING OF (X,Y,Z)' WRITE(IWRITE,1) OST1 OST1 = ' ROTATION ABOUT X-AXIS, (IN DEGREES)' WRITE(IWRITE,1) OST1 OST1 = ' ROTATION ABOUT Y-AXIS, (IN DEGREES)' WRITE(IWRITE,1) OST1 OST1 = ' ROTATION ABOUT Z-AXIS, (IN DEGREES)' WRITE(IWRITE,1) OST1 OST1 = ' ROTATION ABOUT AN ABITRARY AXIS' WRITE(IWRITE,1) OST1 OST1 = ' PASSING THROUGH (0,0,0) AND (PX,PY,PZ)' WRITE(IWRITE,1) OST1 OST1 = ' RESET TRANSFORMATIONS' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK IF (ICODE.EQ.1) THEN WRITE(IWRITE,1) ENTC ELSE WRITE(IWRITE,1) LIST END IF C--- CALL READS1(ISTR) IF (ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(IWRITE,1) BLANK OST1 = ' CURVES' WRITE(IWRITE,1) OST1 OST1 = ' DISPLAY ALL CURVES USING SOLID LINES' WRITE(IWRITE,1) OST1 OST1 = ' USE SOLID LINE WHEN INSIDE,' WRITE(IWRITE,1) OST1 OST1 = ' AND DASHED LINE WHEN OUTSIDE THE MAIN OCTANT' WRITE(IWRITE,1) OST1 OST1 = ' USE SOLID LINE WHEN INSIDE,' WRITE(IWRITE,1) OST1 OST1 = ' AND DOTTED LINE WHEN OUTSIDE THE MAIN OCTANT' WRITE(IWRITE,1) OST1 OST1 = ' DISPLAY CURVES USING DASHED LINES' WRITE(IWRITE,1) OST1 OST1 = ' DISPLAY CURVES USING DOTTED LINES' WRITE(IWRITE,1) OST1 OST1 = ' DISPLAY CURVES USING HEAVY LINES' WRITE(IWRITE,1) OST1 OST1 = ' DRAW A CIRCLE AT COORDINATE-PLANE INTERCEPTS' WRITE(IWRITE,1) OST1 OST1 = ' (SOLID FOR MAIN OCTANT, OPEN OTHERWISE' WRITE(IWRITE,1) OST1 OST1 = ' RESET COMMAND' WRITE(IWRITE,1) OST1 OST1 = '
    DISPLAY BRANCH NUMBERS' WRITE(IWRITE,1) OST1 OST1 = ' RESET
    COMMAND' WRITE(IWRITE,1) OST1 OST1 = ' DISPLAY COORDINATE VALUES' WRITE(IWRITE,1) OST1 OST1 = ' RESET COMMAND' WRITE(IWRITE,1) OST1 OST1 = ' SET UP TITLES' WRITE(IWRITE,1) OST1 OST1 = ' RESET COMMAND' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK IF (ICODE.EQ.1) THEN WRITE(IWRITE,1) ENTC ELSE WRITE(IWRITE,1) LIST END IF C--- CALL READS1(ISTR) IF (ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(IWRITE,1) BLANK OST1 = ' ORIGIN ' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT "AVERAGE" OF THE CURVES' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT (0,0,0)' WRITE(IWRITE,1) OST1 OST1 = ' USER DEFINED ORIGIN' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT "AVERAGE" OF THE CURVES' WRITE(IWRITE,1) OST1 OST1 = ' AND PLOT AXES NUMBERS' WRITE(IWRITE,1) OST1 OST1 = ' ' WRITE(IWRITE,1) OST1 OST1 = ' ' WRITE(IWRITE,1) OST1 OST1 = ' ' WRITE(IWRITE,1) OST1 OST1 = ' SET ORIGIN AT MIN(X,Y,Z) ' WRITE(IWRITE,1) OST1 OST1 = ' AND PLOT AXES NUMBERS' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK IF (ICODE.EQ.1) THEN WRITE(IWRITE,1) ENTC ELSE WRITE(IWRITE,1) LIST END IF C--- CALL READS1(ISTR) IF (ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(IWRITE,1) BLANK OST1 = ' PROJECTION COMMANDS' WRITE(IWRITE,1) OST1 OST1 = ' ALSO PLOT THE PROJECTIONS ' WRITE(IWRITE,1) OST1 OST1 = ' ON THE THREE COORDINATE PLANES ' WRITE(IWRITE,1) OST1 OST1 = ' PROJECTIONS CHOSEN BY USER' WRITE(IWRITE,1) OST1 OST1 = ' ENTER <1> FOR PROJECTION ON (X ,Y ,Z0)' WRITE(IWRITE,1) OST1 OST1 = ' <2> FOR PROJECTION ON (X0,Y ,Z )' WRITE(IWRITE,1) OST1 OST1 = ' <3> FOR PROJECTION ON (X ,Y0,Z )' WRITE(IWRITE,1) OST1 OST1 = ' USE SOLID CURVE FOR DRAWING THE PROJECTIONS' WRITE(IWRITE,1) OST1 OST1 = ' RESET PROJECTION COMMAND' WRITE(IWRITE,1) OST1 C--- C--- WRITE(IWRITE,1) BLANK OST1 = ' VIEW POINT' WRITE(IWRITE,1) OST1 OST1 = ' SET DEFAULT VIEW POINT' WRITE(IWRITE,1) OST1 OST1 = ' VIEW POINT DEFINED BY USER' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK OST1 = ' DISPLAY COMMANDS' WRITE(IWRITE,1) OST1 OST1 = ' OR DISPLAY THE CURVES ' WRITE(IWRITE,1) OST1 OST1 = ' THIS COMMAND SAVES A PLOT IN UNIT 16' WRITE(IWRITE,1) OST1 OST1 = ' PLOT DISPLAY ON HARDCOPY UNIT' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK IF (ICODE.EQ.1) THEN WRITE(IWRITE,1) ENTC ELSE WRITE(IWRITE,1) LIST END IF C--- CALL READS1(ISTR) IF (ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(IWRITE,1) BLANK OST1 = ' DEFINE SPACING OF DOTS, DEFAULT IS 125' WRITE(IWRITE,1) OST1 OST1 = ' DEFINE SPACING OF DASHES, DEFAULT IS 50' WRITE(IWRITE,1) OST1 OST1 = ' DEFINE LENGTH OF DASHES, DEFAULT IS 0.6' WRITE(IWRITE,1) OST1 OST1 = ' RESET , , AND ' WRITE(IWRITE,1) OST1 C--- C--- OST1 = ' NORMAL SCREEN (WINDOW) SIZE' WRITE(IWRITE,1) OST1 OST1 = ' X : 150 - 950, AND Y : 150 - 650 (PLOT10)' WRITE(IWRITE,1) OST1 OST1 = ' TO CHANGE SCREEN (WINDOW) SIZE' WRITE(IWRITE,1) OST1 C--- C--- OST1 = ' PRINTS INFORMATION ON TRANSFORMATIONS USED,' WRITE(IWRITE,1) OST1 OST1 = ' MIN, MAX, AVER, ORIGIN AND VIEW POINT' WRITE(IWRITE,1) OST1 OST1 = '
  1. OR LISTS ALL <3D> COMMANDS' WRITE(IWRITE,1) OST1 OST1 = ' <2D> TO RETURN TO 2D' WRITE(IWRITE,1) OST1 OST1 = ' OR TERMINATE <3D> COMMAND' WRITE(IWRITE,1) OST1 OST1 = ' STOP EXECUTION' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK C--- OST1 = ' ------------- END OF LIST -------------' WRITE(IWRITE,1) OST1 WRITE(IWRITE,1) BLANK OST1 = ' ENTER COMMAND ...' WRITE(IWRITE,1) OST1 CALL READS1(ISTR) RETURN 1 FORMAT(A70) END C----------------------------------------------------------------------- C DRAWS OUTLINE AND PRINTS TITLE C----------------------------------------------------------------------- SUBROUTINE SWIND(TRAN,VIEW,MIMA,INFO,IDP2C) INTEGER AX1(8),AY1(8),AZ1(8) INTEGER SPLPT,NVX(2) REAL TRAN(4,4),VIEW(3),PARA(4,4),MMXYZ(3,2),PARADP(4,4) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ,ROWIND(4,4) REAL MIMA(3,2),INFO(13,3),IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL DFDOT,MIDDLE,DIAXIS,ST3D,CIR,DCOOR,PRNUM LOGICAL PK,PLTR,POINT CHARACTER*1 CH C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /DS/ CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,ST3D COMMON /DL/ XL,YL,ZL,DIS COMMON /ROWI/ ROWIND COMMON /COOR/ CRX,CRY,CRZ COMMON /PR/ PX,PY,PZ COMMON /PLOTT/ PLTR,POINT DATA AX1/1,1,1,1,2,2,2,2/,AY1/1,1,2,2,1,1,2,2/, + AZ1/1,2,1,2,1,2,1,2/ C--- C--- CALL IDENTI(PARA) C--- *UP PARALLEL PROJECTION PARA(3,3) = 0 PARA(3,1) = - VIEW(1) / VIEW(3) PARA(3,2) = - VIEW(2) / VIEW(3) FOURTY = 40.0 CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) XL = XL / FOURTY YL = YL / FOURTY ZL = ZL / FOURTY C--- MMXYZ(1,1) = MINQX - XL MMXYZ(1,2) = MAXQX + XL MMXYZ(2,1) = MINQY - YL MMXYZ(2,2) = MAXQY + YL MMXYZ(3,1) = MINQZ - ZL MMXYZ(3,2) = MAXQZ + ZL C--- *8 DIFFERENT POSITIONS DO 1 I=1,8 X = MMXYZ(1,AX1(I)) Y = MMXYZ(2,AY1(I)) Z = MMXYZ(3,AZ1(I)) CALL AXYZ(X,Y,Z,X0,Y0,Z0,PARA) IF (I.EQ.1) THEN XMIN = X0 YMIN = Y0 XMAX = X0 YMAX = Y0 ELSE IF (XMIN.GT.X0) XMIN = X0 IF (YMIN.GT.Y0) YMIN = Y0 IF (XMAX.LT.X0) XMAX = X0 IF (YMAX.LT.Y0) YMAX = Y0 END IF 1 CONTINUE CALL SPAGE C--- *SET UP ORIGIN IF (DCOOR) THEN CRX = AVERX CRY = AVERY CRZ = AVERZ PX = AVERX PY = AVERY PZ = AVERZ ELSE CRX = MINQX CRY = MINQY CRZ = MINQZ PX = INFO(7,1) PY = INFO(7,2) PZ = INFO(7,3) END IF C--- *DIFFERENT VIEWPOINTS IF (IDP2C.NE.0) THEN CALL DISTLN(CRX,CRY,CRZ,VIEW(1),VIEW(2),VIEW(3)) DIS1 = DIS * 0.05 PK = PLTR CALL COPYMA(PARADP,PARA) PARADP(3,IDP2C) = PARADP(3,IDP2C) + DIS1 / VIEW(3) CALL DICRAV(PARADP,TRAN,INFO) CALL DISP3D(TRAN,PARADP,MIMA) CALL PLCHDW(3) WRITE(6,2) CALL READ1(CH) PARADP(3,IDP2C) = PARA(3,IDP2C) - DIS1 / VIEW(3) PLTR = PK CALL SPAGE CALL DICRAV(PARADP,TRAN,INFO) CALL DISP3D(TRAN,PARADP,MIMA) ELSE CALL DICRAV(PARA,TRAN,INFO) CALL DISP3D(TRAN,PARA,MIMA) END IF RETURN 2 FORMAT(' FOR DIFFERENT VIEW POINT') END C----------------------------------------------------------------------- C RECEIVES DATA FOR TITLE ON 3D COORDINATE AXES C----------------------------------------------------------------------- SUBROUTINE TIT3D CHARACTER*15 TIT3C(3),IST,OST*50 INTEGER CTIT3C(3) COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /T3D/ CTIT3C,TIT3C C--- C--- OST = ' ENTER AXES LABELS FOR (X,Y,Z) ' WRITE(ITERM,5) OST OST = ' BETWEEN THE QUOTE' WRITE(ITERM,5) OST DO 2 I=1,3 WRITE(ITERM,4) TIT3C(I) = ' ' CTIT3C(I) = 0 IST = ' ' READ(5,3,END=2) IST TIT3C(I) = IST DO 1 J=1,15 IF (IST(J:).NE.' ') CTIT3C(I) = J 1 CONTINUE 2 CONTINUE RETURN 3 FORMAT(1X,A15) 4 FORMAT(T2,'"',T18,'"') 5 FORMAT(A50) END C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE FMM(D1,D2,TRAN) REAL D1(3,2),D2(3,2),TRAN(4,4) INTEGER AX(8),AY(8),AZ(8) DATA AX/1,1,1,1,2,2,2,2/,AY/1,1,2,2,1,1,2,2/ DATA AZ/1,2,1,2,1,2,1,2/ C--- C--- DO 1 I=1,8 X = D1(1,AX(I)) Y = D1(2,AY(I)) Z = D1(3,AZ(I)) CALL AXYZ(X,Y,Z,X0,Y0,Z0,TRAN) IF (I.EQ.1) THEN D2(1,1) = X0 D2(1,2) = X0 D2(2,1) = Y0 D2(2,2) = Y0 D2(3,1) = Z0 D2(3,2) = Z0 ELSE IF (D2(1,1).GT.X0) D2(1,1) = X0 IF (D2(1,2).LT.X0) D2(1,2) = X0 IF (D2(2,1).GT.Y0) D2(2,1) = Y0 IF (D2(2,2).LT.Y0) D2(2,2) = Y0 IF (D2(3,1).GT.Z0) D2(3,1) = Z0 IF (D2(3,2).LT.Z0) D2(3,2) = Z0 END IF 1 CONTINUE RETURN END C----------------------------------------------------------------------- C CONVERTS FROM NUMERIC TO STRING CHARACTER C TO PRINT NUMBER ON AXES OF 3D C----------------------------------------------------------------------- SUBROUTINE NUST(RNUM,INDEX,CH) CHARACTER*1 CH9(0:9),C(10),CH*6 DATA CH9/'0','1','2','3','4','5','6','7','8','9'/ C--- C--- IFIVE = 6 CH = ' ' I = 0 F = INT(RNUM * 10000) / 10000.0 IF (F.EQ.0) THEN I = 1 CH(1:1) = '0' GO TO 4 END IF IF (F.LT.0) THEN I = 1 CH(1:1) = '-' END IF F = ABS(F) M = INT(F) F = F - M J = 0 1 IF (M.GT.0) THEN J = J + 1 K = MOD(M,10) M = M /10 C(J) = CH9(K) GO TO 1 END IF IF (J.GT.0) THEN DO 2 K =J,1,-1 I = I + 1 CH(I:I) = C(K) IF (I.EQ.IFIVE) GO TO 4 2 CONTINUE IF (J.EQ.4) GO TO 4 I = I + 1 CH(I:I) = '.' ELSE I = I + 1 CH(I:I) = '.' END IF 3 F = F * 10 M = INT(F) F = F - M IF (I.EQ.IFIVE) GO TO 4 I = I + 1 CH(I:I) = CH9(M) GO TO 3 4 INDEX = I RETURN END C----------------------------------------------------------------------- C ADDS TRANSFORMATION AND PARALLEL PROJECTION C WITH X3, Y3 AND Z3 TO X,Y AND Z C----------------------------------------------------------------------- SUBROUTINE ADDT(X,Y,Z,X3,Y3,Z3,TRAN,PARA) REAL TRAN(4,4),PARA(4,4) C--- C--- CALL AXYZ(X3,Y3,Z3,X0,Y0,Z0,TRAN) CALL AXYZ(X0,Y0,Z0,X,Y,Z,PARA) RETURN END C----------------------------------------------------------------------- C DISPLAYS SOLID CIRCLE C----------------------------------------------------------------------- SUBROUTINE SCIR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /RADI/ RASY,RATY,RADI,RADINC C--- C--- IF (IX.LT.MINSX.OR.IX.GT.MAXSX) RETURN IF (IY.LT.MINSY.OR.IY.GT.MAXSY) RETURN CALL PLCMDS(33) TX = IX TY = IY AINCR = ACOS(-1.0) / 5.0 NPOINT = 11 C = 0 R1 = COVTXY(C+5) R = R1 1 IF (R.LT.RADINC) GOTO 2 RADIUS = R ANGLE = 0.0 CALL DPSHAP(RADIUS,AINCR,ANGLE,NPOINT,TX,TY) R = R - RADINC GOTO 1 2 CONTINUE IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS OPEN CIRCLE C----------------------------------------------------------------------- SUBROUTINE HCIR INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX, + MAXSX,MINSY,MAXSY,NVX,SPLPT C--- C--- C = 0 RADIUS = COVTXY(C+5) IF (IX.LT.MINSX.OR.IX.GT.MAXSX) RETURN IF (IY.LT.MINSY.OR.IY.GT.MAXSY) RETURN CALL PLCMDS(34) TX = IX TY = IY AINCR = ACOS(-1.0) / 5.0 ANGLE = 0.0 NPOINT = 11 CALL DPSHAP(RADIUS,AINCR,ANGLE,NPOINT,TX,TY) IX = TX IY = TY CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS ORIGIN AT AVER(X,Y,Z) C----------------------------------------------------------------------- SUBROUTINE DICRAV(PARA,TRAN,INFO) INTEGER NVX(2),SPLPT,TE(3) REAL PARA(4,4),IX,IY,MINSX,MAXSX,MINSY,MAXSY,MINQX,MINQY,MINQZ REAL MAXQX,MAXQY,MAXQZ,ANGXY(3),TRAN(4,4),INFO(13,3) COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ C--- C--- CALL PLCMDS(28) CALL AXYZ(CRX,CRY,CRZ,X,Y,Z,PARA) CALL PLCMDS(7) TX = IX TY = IY CALL AXYZ(MAXQX,CRY,CRZ,X,Y,Z,PARA) CALL PLCMDS(7) SX = IX SY = IY IF (TX.EQ.SX.AND.TY.EQ.SY) THEN TE(1) = 1 ELSE TE(1) = 0 ANGXY(1) = FANGLE(SX,SY,TX,TY) END IF C--- CALL AXYZ(CRX,MAXQY,CRZ,X,Y,Z,PARA) CALL PLCMDS(7) SX = IX SY = IY IF (TX.EQ.SX.AND.TY.EQ.SY) THEN TE(2) = 1 ELSE TE(2) = 0 ANGXY(2) = FANGLE(SX,SY,TX,TY) END IF C--- CALL AXYZ(CRX,CRY,MAXQX,X,Y,Z,PARA) CALL PLCMDS(7) SX = IX SY = IY IF (TX.EQ.SX.AND.TY.EQ.SY) THEN TE(3) = 1 ELSE TE(3) = 0 ANGXY(3) = FANGLE(SX,SY,TX,TY) A1 = ACOS(-1.0) / 2.0 IF (ANGXY(3).LE.A1) ANGXY(3) = ANGXY(3) + ACOS(-1.0) END IF CALL FDA(ANGXY,TX,TY,TE,PARA,TRAN,INFO) CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C FINDS THREE POINTS ON AXIS TO MAKE IT LONGER, C ANOTHER TWO POINTS FOR THE ARROW C AND ONE MORE POINT TO PRINT AXIS OR COORDINATE NUMBER C----------------------------------------------------------------------- SUBROUTINE FDA(ANGXY,TX,TY,TE,PARA,TRAN,INFO) INTEGER NVX(2),SPLPT,TE(3) REAL ANGLE(4),ANGXY(3),RA(4),PARA(4,4),TRAN(4,4),INFO(13,3) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,XC(3,4),YC(3,4) LOGICAL CIR,DFDOT,MIDDLE,DIAXIS,P1,DCOOR,PRNUM,ST3D COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /DS/ CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,ST3D C--- C--- P1 = DIAXIS S1 = MINSX S2 = MAXSX S3 = MINSY S4 = MAXSY C--- ANGLE(1) = FANGLE(S2,S4,TX,TY) ANGLE(2) = FANGLE(S1,S4,TX,TY) ANGLE(3) = FANGLE(S1,S3,TX,TY) ANGLE(4) = FANGLE(S2,S3,TX,TY) C--- RA(1) = (S2 - TX) * 0.95 RA(2) = (S4 - TY) * 0.95 RA(3) = (TX - S1) * 0.95 RA(4) = (TY - S3) * 0.95 C--- DA = SQRT((S2-S1)**2 + (S4-S3)**2) DA = DA / 40.0 C--- *FIND 3 POINTS DO 2 I=1,3 IF (TE(I).EQ.1) GO TO 2 DO 1 J=1,4 IF (ANGXY(I).GT.ANGLE(J)) GO TO 1 ALFA = ANGXY(I) IF (MOD(J,2).EQ.0) THEN RADIUS = ABS(RA(J) / SIN(ALFA)) ELSE RADIUS = ABS(RA(J) / COS(ALFA)) END IF CALL DXY(RADIUS,ALFA,TX,TY,IX,IY) XC(I,2) = IX YC(I,2) = IY CALL ARROW(I,IX,IY,ALFA,DA,ANGLE,XC,YC) GO TO 2 1 CONTINUE ALFA = ANGXY(I) RADIUS = ABS(RA(1) / SIN(ALFA)) CALL DXY(RADIUS,ALFA,TX,TY,IX,IY) XC(I,2) = IX YC(I,2) = IY CALL ARROW(I,IX,IY,ALFA,DA,ANGLE,XC,YC) 2 CONTINUE C--- CALL PRAXIS(P1,XC,YC,TX,TY,TE,DA) IF (ST3D) THEN DO 4 I=1,3 IF (TE(I).EQ.1) GO TO 4 IX = XC(I,2) IY = YC(I,2) ALFA = ANGXY(I) CALL ARROWL(I,IX,IY,ALFA,DA,ANGLE,XC,YC,ICODE) CALL PRTIT3(XC,YC,DA,I,ICODE) 4 CONTINUE ELSE IF (MIDDLE) THEN P1 = .NOT.P1 DO 3 I =1,3 IF (TE(I).EQ.1) GO TO 3 IX = XC(I,2) IY = YC(I,2) ALFA = ANGXY(I) CALL ARROWL(I,IX,IY,ALFA,DA,ANGLE,XC,YC,ICODE) 3 CONTINUE CALL PRAXIS(P1,XC,YC,TX,TY,TE,DA) END IF CALL DAXIS(XC,YC,TX,TY,TE) C--- *PRINT NUMBER IF (PRNUM) THEN CALL DN(XC,YC,TX,TY,TE,DA,TRAN,INFO,PARA,ANGXY,ANGLE) END IF RETURN END C----------------------------------------------------------------------- C PRINTS 3 AXES LABELS C----------------------------------------------------------------------- SUBROUTINE PRTIT3(XC,YC,DIS,INDX,CODE) REAL XC(3,4),YC(3,4),IX,IY,MINSX,MAXSX,MINSY,MAXSY INTEGER CTIT3C(3),NVX(2),SPLPT,CODE CHARACTER*15 TIT3C(3),CHFIF,CHONE*1,CHTWO*2 COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /T3D/ CTIT3C,TIT3C COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF C--- C--- IX = XC(INDX,4) IY = YC(INDX,4) C = 0 INDXCH = CTIT3C(INDX) SKIP = COVTX(C+12.78) SKIP1 = COVTX(C+5) IF (CODE.NE.4.AND.CODE.NE.6.AND.CODE.NE.5) THEN IX = IX - (INDXCH - 1) * SKIP END IF IF ((CODE.EQ.2.OR.CODE.EQ.3).AND.INDXCH.GT.11) THEN IX = IX - SKIP1 END IF CHFIF = TIT3C(INDX) CALL PLCMDS(27) CALL PLCTNM(23) CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C PRINTS (X,Y,Z) ON EACH AXIS C----------------------------------------------------------------------- SUBROUTINE PRAXIS(PAXIS,XC,YC,TX,TY,TE,DA) INTEGER XAXIS,YAXIS,ZAXIS,NVX(2),SPLPT,AX1(3),TE(3) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,XC(3,4),YC(3,4) CHARACTER*1 AX2(3),CHONE,CHTWO*2,CHFIF*15 LOGICAL PAXIS C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF DATA AX2 /'X','Y','Z'/ C--- C--- AX1(1) = XAXIS AX1(2) = YAXIS AX1(3) = ZAXIS D1 = DA / 2.0 C--- IF (.NOT.PAXIS) THEN DO 1 I=1,3 IF (TE(I).EQ.0) THEN IX = XC(I,4) IY = YC(I,4) ELSE IX = TX + D1 IY = TY - D1 END IF INDXCH = 1 CHONE = AX2(I) CALL PLCMDS(27) CALL PLCTNM(22) CALL PLCMDS(20) 1 CONTINUE ELSE DO 2 I=1,3 IF (TE(I).EQ.0) THEN IX = XC(I,4) IY = YC(I,4) ELSE IX = TX + D1 IY = TY - D1 END IF CALL DICHR(AX1(I)) CALL PLCMDS(27) CALL PLCTNM(22) CALL PLCMDS(20) 2 CONTINUE END IF RETURN END C----------------------------------------------------------------------- C DISPLAYS THREE AXES AND ARROWS C----------------------------------------------------------------------- SUBROUTINE DAXIS(XC,YC,TX,TY,TE) INTEGER TE(3),NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,XC(3,4),YC(3,4) COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- CALL PLCMDS(28) DO 1 I = 1,3 IF (TE(I).EQ.1) GO TO 1 IX = TX IY = TY CALL PLCMDS(2) IX = XC(I,2) IY = YC(I,2) CALL PLCMDS(3) IX = XC(I,1) IY = YC(I,1) CALL PLCMDS(2) IX = XC(I,2) IY = YC(I,2) CALL PLCMDS(3) IX = XC(I,3) IY = YC(I,3) CALL PLCMDS(3) 1 CONTINUE CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C THIS FUNCTION FINDS ANGLE WITH THE POINT TX,TY C----------------------------------------------------------------------- FUNCTION FANGLE(XT,YT,XB,YB) C--- C--- A = YT - YB B = XT - XB C = SQRT(A**2 + B**2) D = ABS(B/C) ALFA = ACOS(D) A1 = ACOS(-1.0) / 180.0 TPI = ACOS(-1.0) * 2 IF (A.GE.0.AND.B.GE.0) THEN FANGLE = ALFA ELSE IF (A.GE.0.AND.B.LT.0) THEN FANGLE = 180.0 * A1 - ALFA ELSE IF (A.LT.0.AND.B.LE.0) THEN FANGLE = 180.0 * A1 + ALFA ELSE FANGLE = TPI - ALFA END IF RETURN END C----------------------------------------------------------------------- C COMPUTES TWO POINTS X AND Y, RADIUS ALFA C----------------------------------------------------------------------- SUBROUTINE DXY(RADIUS,ALFA,TX,TY,X,Y) C--- C--- X = RADIUS * COS(ALFA) + TX Y = RADIUS * SIN(ALFA) + TY RETURN END C----------------------------------------------------------------------- C COMPUTES TWO POINTS FOR ARROW AND ANOTHER POINT C TO SET UP TITLE C----------------------------------------------------------------------- SUBROUTINE ARROW(INDEX,IX,IY,ALFA,RADIUS,ANGLE,XC,YC) REAL ANGLE(4),XC(3,4),YC(3,4),IX,IY REAL MINSX,MAXSX,MINSY,MAXSY INTEGER NVX(2),SPLPT COMMON /PLVARS/ X1,Y1,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- A1 = ACOS(-1.0) / 180.0 TX = IX TY = IY TALFA = ALFA - 150.0 * A1 CALL DXY(RADIUS,TALFA,TX,TY,IX,IY) XC(INDEX,1) = IX YC(INDEX,1) = IY TALFA = ALFA - 210.0*A1 CALL DXY(RADIUS,TALFA,TX,TY,IX,IY) XC(INDEX,3) = IX YC(INDEX,3) = IY C--- *FIND EMPTY SPACE PIH = 90 * A1 PI = 180 * A1 PITH = 270 * A1 R1 = RADIUS / 2.0 C--- IF (ALFA.LE.ANGLE(1)) THEN XC(INDEX,4) = XC(INDEX,3) YC(INDEX,4) = YC(INDEX,3) + R1 ELSE IF (ALFA.LE.PIH) THEN XC(INDEX,4) = XC(INDEX,1) + R1 YC(INDEX,4) = YC(INDEX,1) ELSE IF (ALFA.LE.ANGLE(2)) THEN XC(INDEX,4) = XC(INDEX,1) + R1 YC(INDEX,4) = YC(INDEX,1) ELSE IF (ALFA.LE.PI) THEN XC(INDEX,4) = XC(INDEX,1) YC(INDEX,4) = YC(INDEX,1) + R1 ELSE IF (ALFA.LE.ANGLE(3)) THEN XC(INDEX,4) = XC(INDEX,1) YC(INDEX,4) = YC(INDEX,1) + R1 ELSE IF (ALFA.LE.PITH) THEN XC(INDEX,4) = XC(INDEX,1) YC(INDEX,4) = YC(INDEX,1) + R1 ELSE IF (ALFA.LE.ANGLE(4)) THEN XC(INDEX,4) = XC(INDEX,3) + R1 YC(INDEX,4) = YC(INDEX,3) ELSE XC(INDEX,4) = XC(INDEX,3) YC(INDEX,4) = YC(INDEX,3) + R1 END IF R1 = R1 / 2 IF (XC(INDEX,4).LE.MINSX) XC(INDEX,4) = MINSX + R1 IF (XC(INDEX,4).GE.MAXSX) XC(INDEX,4) = MAXSX - R1 IF (YC(INDEX,4).LE.MINSY) YC(INDEX,4) = MINSY + R1 IF (YC(INDEX,4).GE.MAXSY) YC(INDEX,4) = MAXSY - R1 RETURN END C----------------------------------------------------------------------- C FINDS SPACE TO PRINT DIMENSION C AT LEFT ARROW C----------------------------------------------------------------------- SUBROUTINE ARROWL(INDEX,IX,IY,ALFA,RADIUS,ANGLE,XC,YC,ICODE) REAL ANGLE(4),XC(3,4),YC(3,4),IX,IY,MINSX,MAXSX,MINSY,MAXSY INTEGER NVX(2),SPLPT COMMON /PLVARS/ X1,Y1,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- A1 = ACOS(-1.0) / 180.0 TX = IX TY = IY TALFA = ALFA - 150.0 * A1 CALL DXY(RADIUS,TALFA,TX,TY,IX,IY) XC(INDEX,1) = IX YC(INDEX,1) = IY TALFA = ALFA - 210.0 * A1 CALL DXY(RADIUS,TALFA,TX,TY,IX,IY) XC(INDEX,3) = IX YC(INDEX,3) = IY PIH = 90.0 * A1 PI = 180.0 * A1 PITH = 270.0 * A1 R1 = RADIUS C = 0 SKIP = COVTX(C+12.78) C--- IF (ALFA.LE.ANGLE(1)) THEN XC(INDEX,4) = XC(INDEX,1) YC(INDEX,4) = YC(INDEX,1) - R1 ICODE = 1 ELSE IF (ALFA.LE.PIH) THEN XC(INDEX,4) = XC(INDEX,3) - R1 YC(INDEX,4) = YC(INDEX,3) ICODE = 2 ELSE IF (ALFA.LE.ANGLE(2)) THEN XC(INDEX,4) = XC(INDEX,3) - R1 YC(INDEX,4) = YC(INDEX,3) ICODE = 3 ELSE IF (ALFA.LE.PI) THEN XC(INDEX,4) = XC(INDEX,3) + SKIP YC(INDEX,4) = YC(INDEX,3) - R1 ICODE = 4 ELSE IF (ALFA.LE.ANGLE(3)) THEN XC(INDEX,4) = XC(INDEX,3) + SKIP YC(INDEX,4) = YC(INDEX,3) - R1 ICODE = 5 ELSE IF (ALFA.LE.PITH) THEN XC(INDEX,4) = XC(INDEX,3) + SKIP YC(INDEX,4) = YC(INDEX,3) - R1 ICODE = 6 ELSE IF (ALFA.LE.ANGLE(4)) THEN XC(INDEX,4) = XC(INDEX,1) - R1 YC(INDEX,4) = YC(INDEX,1) ICODE = 7 ELSE XC(INDEX,4) = XC(INDEX,1) YC(INDEX,4) = YC(INDEX,1) - R1 ICODE = 8 END IF R1 = R1 / 2 IF (XC(INDEX,4).LE.MINSX) XC(INDEX,4) = MINSX + R1 IF (XC(INDEX,4).GE.MAXSX) XC(INDEX,4) = MAXSX - R1 IF (YC(INDEX,4).LE.MINSY) YC(INDEX,4) = MINSY + R1 IF (YC(INDEX,4).GE.MAXSY) YC(INDEX,4) = MAXSY - R1 RETURN END C----------------------------------------------------------------------- C DISPLAYS MAX OF X,Y,Z ON THE SCREEN C----------------------------------------------------------------------- SUBROUTINE DN(XC,YC,TX,TY,TE,DA,T,INFO,PA,ANGXY,ANGLE) REAL T(4,4),INFO(13,3),PA(4,4),ANGXY(3),ROWIND(4,4) REAL ANGLE(4),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL D1(3,2),D2(3,2),D3(3,2) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,XC(3,4),YC(3,4) INTEGER TE(3),NVX(2),SPLPT CHARACTER*6 STR,CHONE*1,CHTWO*2,CHFIF*15 C--- COMMON /ROWI/ ROWIND COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ COMMON /PR/ PX,PY,PZ COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF C--- C--- D1(1,1) = INFO(7,1) D1(2,1) = INFO(7,2) D1(3,1) = INFO(7,3) D1(1,2) = INFO(8,1) D1(2,2) = INFO(8,2) D1(3,2) = INFO(8,3) C = 0 C--- *COMPUTE 6 POINTS CALL FMM(D1,D2,ROWIND) C--- CALL FMM(D1,D3,T) X2 = D3(1,2) Y2 = D3(2,2) Z2 = D3(3,2) CALL AXYZ(X2,CRY,CRZ,X,Y,Z,PA) CALL PLCMDS(7) TE(1) = 1 IX1 = INT(MIN(TX,XC(1,2))) IX2 = INT(MAX(TX,XC(1,2))) IY1 = INT(MIN(TY,YC(1,2))) IY2 = INT(MAX(TY,YC(1,2))) C--- *CHECK LENGTH OF X AXIS IF (IX.LT.IX1.OR.IX.GT.IX2) GO TO 1 IF (IY.LT.IY1.OR.IY.GT.IY2) GO TO 1 TE(1) = 0 ALFA = ANGXY(1) XC(1,2) = IX + DA * COS(ALFA) YC(1,2) = IY + DA * SIN(ALFA) 1 CONTINUE CALL AXYZ(CRX,Y2,CRZ,X,Y,Z,PA) CALL PLCMDS(7) TE(2) = 1 IX1 = INT(MIN(TX,XC(2,2))) IX2 = INT(MAX(TX,XC(2,2))) IY1 = INT(MIN(TY,YC(2,2))) IY2 = INT(MAX(TY,YC(2,2))) C--- *CHECK LENGTH OF Y AXIS IF (IX.LT.IX1.OR.IX.GT.IX2) GO TO 2 IF (IY.LT.IY1.OR.IY.GT.IY2) GO TO 2 TE(2) = 0 ALFA = ANGXY(2) XC(2,2) = IX + DA * COS(ALFA) YC(2,2) = IY + DA * SIN(ALFA) 2 CONTINUE CALL AXYZ(CRX,CRY,Z2,X,Y,Z,PA) CALL PLCMDS(7) TE(3) = 1 C--- IX1 = INT(MIN(TX,XC(3,2))) IX2 = INT(MAX(TX,XC(3,2))) IY1 = INT(MIN(TY,YC(3,2))) IY2 = INT(MAX(TY,YC(3,2))) C--- *CHECK LENGTH OF Z AXIS IF (IX.LT.IX1.OR.IX.GT.IX2) GO TO 3 IF (IY.LT.IY1.OR.IY.GT.IY2) GO TO 3 TE(3) = 0 ALFA = ANGXY(3) XC(3,2) = IX + DA * COS(ALFA) YC(3,2) = IY + DA * SIN(ALFA) 3 CONTINUE C--- *FIND MIN, MAX(X,Y,Z) DO 4 I=1,3 IF (TE(I).EQ.1) GO TO 4 ALFA = ANGXY(I) CALL ARROWL(I,XC(I,2),YC(I,2),ALFA,DA,ANGLE,XC,YC,ICODE) IX = XC(I,1) IY = YC(I,1) CALL PLCMDS(2) IX = XC(I,3) IY = YC(I,3) CALL PLCMDS(3) CALL NUST(D2(I,2),INDEX,STR) IX = XC(I,4) IY = YC(I,4) IF (ICODE.EQ.1.OR.ICODE.EQ.4.OR.ICODE.EQ.5.OR. + ICODE.EQ.8) THEN IX = IX - INDEX * COVTX(C+5) ELSE IX = IX - INDEX * COVTX(C+10) END IF CHFIF = STR INDXCH = INDEX CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) 4 CONTINUE C--- SKIP = 12.8 SKIP = COVTX(SKIP) IX = TX + DA IY = TY + DA CALL NUST(PX,INDEX,STR) CHFIF = STR INDXCH = INDEX CALL PLCTNM(23) C--- IX = IX + SKIP * INDEX CALL NUST(PY,INDEX,STR) CHFIF = STR INDXCH = INDEX CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) C--- IX = IX + SKIP * INDEX CALL NUST(PZ,INDEX,STR) CHFIF = STR INDXCH = INDEX CALL PLCMDS(21) CALL PLCTNM(23) CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C CHECKS DISTANCE OF (X,Y,Z), IF LESS THAN OR C EQUAL TO ERROR NUMBER THEN SKIP THAT POINT C----------------------------------------------------------------------- SUBROUTINE DZERO(X,Y,Z) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DL/ XL,YL,ZL,DIS COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ C--- C--- ERR = 10.0 ** (-8.0) CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) XZ = ABS(XL) YZ = ABS(YL) ZZ = ABS(ZL) XYZZ = MIN(XZ,YZ,ZZ) C--- *CHECK XL,YL,ZL > ERR IF (XYZZ.GT.ERR) THEN R1 = ABS((CRX-XOLD) / XL) R2 = ABS((CRY-YOLD) / YL) R3 = ABS((CRZ-ZOLD) / ZL) RINT = MIN(R1,R2,R3) X = XOLD + XL * RINT Y = YOLD + YL * RINT Z = ZOLD + ZL * RINT GO TO 1 END IF C--- *CHECK XL,YL,ZL <= ERR XYZZ = MAX(XZ,YZ,ZZ) IF (XYZZ.LE.ERR) THEN X = X1 Y = Y1 Z = Z1 GO TO 1 END IF C--- *CHECK XZ,YZ <= ERR IF (XZ.LE.ERR.AND.YZ.LE.ERR) THEN X = X1 Y = Y1 RINT = ABS((CRZ-ZOLD) / ZL) Z = ZOLD + ZL * RINT GO TO 1 END IF C--- *CHECK YZ,ZZ <= ERR IF (YZ.LE.ERR.AND.ZZ.LE.ERR) THEN Y = Y1 Z = Z1 RINT = ABS((CRX-XOLD) / XL) X = XOLD + XL * RINT GO TO 1 END IF C--- *CHECK XZ,ZZ <= ERR IF (XZ.LE.ERR.AND.ZZ.LE.ERR) THEN X = X1 Z = Z1 RINT = ABS((CRY-YOLD) / YL) Y = YOLD + YL * RINT GO TO 1 END IF C--- *CHECK XZ <= ERR IF (XZ.LE.ERR) THEN X = X1 R1 = ABS((CRY-YOLD) / YL) R2 = ABS((CRZ-ZOLD) / ZL) RINT = MIN(R1,R2) Y = YOLD + YL * RINT Z = ZOLD + ZL * RINT GO TO 1 END IF C--- *CHECK YZ <= ERR IF (YZ.LE.ERR) THEN Y = Y1 R1 = ABS((CRX-XOLD) / XL) R2 = ABS((CRZ-ZOLD) / ZL) RINT = MIN(R1,R2) X = XOLD + XL * RINT Z = ZOLD + ZL * RINT GO TO 1 END IF C--- *CHECK ZZ <= ERR IF (ZZ.LE.ERR) THEN Z = Z1 R1 = ABS((CRX-XOLD) / XL) R2 = ABS((CRY-YOLD) / YL) RINT = MIN(R1,R2) X = XOLD + XL * RINT Y = YOLD + YL * RINT END IF 1 CONTINUE RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVE USING DOTS C----------------------------------------------------------------------- SUBROUTINE DISDOT(PARA) INTEGER NVX(2),SPLPT REAL PARA(4,4),IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DL/ XL,YL,ZL,DIS C--- C--- 1 CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) CALL PLCMDS(37) IF (RSKIP.GE.DIS) THEN RSKIP = RSKIP - DIS ELSE XYZINT = RSKIP / DIS XOLD = XOLD + XL * XYZINT YOLD = YOLD + YL * XYZINT ZOLD = ZOLD + ZL * XYZINT CALL AXYZ(XOLD,YOLD,ZOLD,X,Y,Z,PARA) RSKIP = DISD IF (X.GT.XMAX.OR.X.LT.XMIN) GO TO 1 IF (Y.GT.YMAX.OR.Y.LT.YMIN) GO TO 1 CALL PLCMDS(10) GO TO 1 END IF C--- XOLD = X1 YOLD = Y1 ZOLD = Z1 CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVE USING DASHES AND SOLID LINE. C (DASHES WHEN X1.LT.AVERX .OR. Y1.LT.AVERY .OR. Z1.LT.AVERZ) C----------------------------------------------------------------------- SUBROUTINE LINDAS(PARA) REAL PARA(4,4) LOGICAL SKIP,LINE,CONECT,CMPLTE,DASH COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DL/ XL,YL,ZL,DIS C--- C--- CALL PLCMDS(36) CMPLTE = .TRUE. C--- IF (LINE.AND..NOT.DASH) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) XOLD = X1 YOLD = Y1 ZOLD = Z1 DASH = .NOT. LINE CALL PLCMDS(20) RETURN END IF C--- IF (LINE.AND.DASH) THEN XK = X1 YK = Y1 ZK = Z1 CALL DZERO(X3,Y3,Z3) X1 = X3 Y1 = Y3 Z1 = Z3 CMPLTE = .FALSE. LINE = .FALSE. END IF C--- IF (.NOT.LINE.AND..NOT.DASH) THEN CALL DZERO(X3,Y3,Z3) XOLD = X3 YOLD = Y3 ZOLD = Z3 CALL AXYZ(XOLD,YOLD,ZOLD,X,Y,Z,PARA) CALL CLIP(X,Y,2) SKIP = .TRUE. RSKIP = FSKXYZ CONECT = .FALSE. DASH = .TRUE. END IF C--- IF (.NOT.LINE.AND.DASH) THEN CALL DASHSL(PARA) CALL PLCMDS(36) END IF C--- *CHECK IF COMPLETE IF (.NOT.CMPLTE) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,3) CALL AXYZ(XK,YK,ZK,X,Y,Z,PARA) CALL CLIP(X,Y,2) XOLD = XK YOLD = YK ZOLD = ZK LINE = .TRUE. END IF DASH = .NOT.LINE CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVE USING DASHED LINE C----------------------------------------------------------------------- SUBROUTINE DASHSL(PARA) REAL PARA(4,4) LOGICAL SKIP,LINE,CONECT,DASH COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DL/ XL,YL,ZL,DIS C--- C--- CALL PLCMDS(35) 1 CONTINUE IF (CONECT) THEN CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (RCONCT.GT.DIS) THEN XOLD = X1 YOLD = Y1 ZOLD = Z1 CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) RCONCT = RCONCT - DIS CALL PLCMDS(20) RETURN ELSE CONECT = .FALSE. SKIP = .TRUE. RSKIP = FSKXYZ XYZINT = RCONCT / DIS XOLD = XOLD + XL * XYZINT YOLD = YOLD + YL * XYZINT ZOLD = ZOLD + ZL * XYZINT CALL AXYZ(XOLD,YOLD,ZOLD,X,Y,Z,PARA) CALL CLIP(X,Y,2) END IF END IF C--- IF (SKIP) THEN CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (RSKIP.GT.DIS) THEN XOLD = X1 YOLD = Y1 ZOLD = Z1 RSKIP = RSKIP - DIS RETURN ELSE SKIP = .FALSE. CONECT = .TRUE. RCONCT = FDXYZ XYZINT = RSKIP / DIS XOLD = XOLD + XL * XYZINT YOLD = YOLD + YL * XYZINT ZOLD = ZOLD + ZL * XYZINT CALL AXYZ(XOLD,YOLD,ZOLD,X,Y,Z,PARA) CALL CLIP(X,Y,3) GO TO 1 END IF END IF CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVE USING LINE OR DOT C USE DOT IF X1.LT.AVERX .OR. Y1.LT.AVERY .OR. Z1.LT.AVEZ C----------------------------------------------------------------------- SUBROUTINE LINDOT(PARA) REAL PARA(4,4) LOGICAL SKIP,LINE,CONECT,CMPLTE,DASH COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DL/ XL,YL,ZL,DIS C--- C--- CALL PLCMDS(36) CMPLTE = .TRUE. C--- IF (LINE.AND..NOT.DASH) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) XOLD = X1 YOLD = Y1 ZOLD = Z1 DASH = .NOT. LINE CALL PLCMDS(20) RETURN END IF C--- IF (LINE.AND.DASH) THEN XK = X1 YK = Y1 ZK = Z1 CALL DZERO(X3,Y3,Z3) X1 = X3 Y1 = Y3 Z1 = Z3 CMPLTE = .FALSE. LINE = .FALSE. END IF C--- IF (.NOT.LINE.AND..NOT.DASH) THEN CALL DZERO(X3,Y3,Z3) XOLD = X3 YOLD = Y3 ZOLD = Z3 CALL AXYZ(XOLD,YOLD,ZOLD,X,Y,Z,PARA) CALL CLIP(X,Y,2) DASH = .TRUE. RSKIP = DISD END IF C--- IF (.NOT.LINE.AND.DASH) THEN CALL DISDOT(PARA) CALL PLCMDS(36) END IF IF (.NOT.CMPLTE) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,3) XOLD = XK YOLD = YK ZOLD = ZK CALL AXYZ(XK,YK,ZK,X,Y,Z,PARA) CALL CLIP(X,Y,2) LINE = .TRUE. END IF DASH = .NOT.LINE CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C COMPUTES DISTANCE AND LENGTH C----------------------------------------------------------------------- SUBROUTINE DISTLN(XMAX,YMAX,ZMAX,XMIN,YMIN,ZMIN) COMMON /DL/XL,YL,ZL,DIS C--- C--- XL = XMAX - XMIN YL = YMAX - YMIN ZL = ZMAX - ZMIN DIS = SQRT(XL**2 + YL**2 + ZL**2) RETURN END C----------------------------------------------------------------------- C DISPLAYS THE GRAPH ON THE SCREEN C WITH PARALLEL PROJECTION C----------------------------------------------------------------------- SUBROUTINE DISP3D(TRAN,PARA,MIMA) INTEGER SPLPT,NVX(2),COUNTC REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL TRAN(4,4),PARA(4,4),XS(4),YS(4),XYPT(4,2),MIMA(3,2) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,PNTS(1999,4) LOGICAL PLTR,POINT,SKIP,LINE,CONECT,DASH,B3DC CHARACTER*1 MP(81,251) C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /PLOTT/ PLTR,POINT COMMON /DL/ XL,YL,ZL,DIS COMMON /DS1/ DAINT,DOINT,PSIX,PFOUR COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /CB3D/ B3DC COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC C--- C--- XLEFT = XMIN XRIGHT = XMAX YBOTTM = YMIN YTOP = YMAX C--- CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) DIST = DIS / DAINT DISD = DIS / DOINT FDXYZ = DIST * PSIX FSKXYZ = DIST * PFOUR SKIP = .FALSE. CONECT = .FALSE. LINE = .TRUE. DASH = .FALSE. CALL INARRS(MP,PNTS) C--- *<3D> OR IF (B3DC) THEN CALL DPB3D(TRAN,PARA,MP,PNTS) ELSE CALL DP3D(TRAN,PARA,MP,PNTS) END IF C--- IF (POINT) THEN CALL LGRPHS(MP,PNTS) END IF CALL PLCMDS(9) IF (PLTR) THEN CALL PLCHDW(2) END IF RETURN END C----------------------------------------------------------------------- C CLIPS IF THE LINE IS OUTSIDE THE WINDOW C CHECK FOUR SIDES OF THE WINDOW : LEFT, RIGHT, BOTTOM AND TOP C----------------------------------------------------------------------- SUBROUTINE CLIP(X1,Y1,OP) INTEGER OP,COUNTC,SPLPT,NVX(2) REAL XS(4),YS(4),XYPT(4,2),IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT C--- C--- X = X1 Y = Y1 IF (OP.EQ.1.OR.OP.EQ.3) THEN DO 1 I=1,4 XS(I) = X YS(I) = Y 1 CONTINUE C--- *CHECK IF INSIDE IF (X.GT.XRIGHT.OR.X.LT.XLEFT) RETURN IF (Y.GT.YTOP.OR.Y.LT.YBOTTM) RETURN IF (OP.EQ.1) THEN CALL PLCMDS(10) ELSE CALL PLCMDS(4) END IF RETURN END IF C--- *CLIP IF (X.GT.XRIGHT.OR.X.LT.XLEFT.OR. + XS(1).GT.XRIGHT.OR.XS(1).LT.XLEFT.OR. + Y.GT.YTOP.OR.Y.LT.YBOTTM.OR. + YS(1).GT.YTOP.OR.YS(1).LT.YBOTTM) GO TO 3 C--- *SOLID LINE CALL PLCMDS(5) DO 2 I=1,4 XS(I) = X YS(I) = Y 2 CONTINUE RETURN C--- *CLIP 3 COUNTC = 0 CALL CLEFT(X,Y) IF (COUNTC.EQ.2) THEN X = XYPT(1,1) Y = XYPT(1,2) CALL PLCMDS(4) X = XYPT(2,1) Y = XYPT(2,2) CALL PLCMDS(5) ELSE IF(COUNTC.EQ.1) THEN X = XYPT(1,1) Y = XYPT(1,2) CALL PLCMDS(5) END IF X = X1 Y = Y1 RETURN END C----------------------------------------------------------------------- C CLIPS LEFT SIDE OF THE WINDOW C----------------------------------------------------------------------- SUBROUTINE CLEFT(X,Y) REAL XS(4),YS(4),XYTP(4,2) INTEGER COUNTC COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYTP,COUNTC C--- C--- C--- *OUTSIDE IN IF (X.GE.XLEFT.AND.XS(1).LT.XLEFT) THEN X1 = XLEFT Y1 = (Y-YS(1)) * (XLEFT-X) / (X-XS(1)) + Y CALL CRIGHT(X1,Y1) END IF C--- *INSIDE OUT IF (X.LE.XLEFT.AND.XS(1).GT.XLEFT) THEN X1 = XLEFT Y1 = (Y-YS(1)) * (XLEFT-X) / (X-XS(1)) + Y CALL CRIGHT(X1,Y1) END IF C--- *SAVE POINT TO SERVE AS END C--- *OF NEXT LINE XS(1) = X YS(1) = Y C--- *POINT INSIDE IF (X.GE.XLEFT) THEN CALL CRIGHT(X,Y) END IF RETURN END C----------------------------------------------------------------------- C CLIPS RIGHT OF THE WINDOW C----------------------------------------------------------------------- SUBROUTINE CRIGHT(X,Y) REAL XS(4),YS(4),XYPT(4,2) INTEGER COUNTC COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC C--- C--- C--- *OUTSIDE IN IF (X.LE.XRIGHT.AND.XS(2).GT.XRIGHT) THEN X1 = XRIGHT Y1 = (Y-YS(2))*(XRIGHT-X) / (X-XS(2)) + Y CALL CBOTTM(X1,Y1) END IF C--- *INSIDE OUT IF (X.GE.XRIGHT.AND.XS(2).LT.XRIGHT) THEN X1 = XRIGHT Y1 = (Y-YS(2))*(XRIGHT-X)/(X-XS(2)) + Y CALL CBOTTM(X1,Y1) END IF C--- *SAVE POINT TO SERVE A C--- *ENDPOINT OF NEXT LINE XS(2) = X YS(2) = Y IF (X.LE.XRIGHT) THEN CALL CBOTTM(X,Y) END IF RETURN END C----------------------------------------------------------------------- C CLIPS BOTTOM OF THE WINDOW C----------------------------------------------------------------------- SUBROUTINE CBOTTM(X,Y) REAL XS(4),YS(4),XYPT(4,2) INTEGER COUNTC COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC C--- C--- C--- *OUTSIDE IN IF (Y.GE.YBOTTM.AND.YS(3).LT.YBOTTM) THEN X1 = (X-XS(3))*(YBOTTM-Y) / (Y-YS(3)) + X Y1 = YBOTTM CALL CTOP(X1,Y1) END IF C--- *INSIDE OUT IF (Y.LE.YBOTTM.AND.YS(3).GT.YBOTTM) THEN X1 = (X-XS(3))*(YBOTTM-Y) / (Y-YS(3)) + X Y1 = YBOTTM CALL CTOP(X1,Y1) END IF C--- *SAVE POINT TO SERVE AS C--- *ENDPOINT OF NEXT BRANCH XS(3) = X YS(3) = Y C--- *POINT INSIDE IF (Y.GE.YBOTTM) THEN CALL CTOP(X,Y) END IF RETURN END C----------------------------------------------------------------------- C CLIPS TOP SIDE AND SAVES THE POINT CLIPPED C----------------------------------------------------------------------- SUBROUTINE CTOP(X,Y) REAL XS(4),YS(4),XYPT(4,2) INTEGER COUNTC COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC C--- C--- C--- *OUTSIDE IN IF (Y.LE.YTOP.AND.YS(4).GT.YTOP) THEN X1 = (X-XS(4))*(YTOP-Y) / (Y-YS(4)) + X Y1 = YTOP CALL SAVECL(X1,Y1) END IF C--- *INSIDE OUT IF (Y.GE.YTOP.AND.YS(4).LT.YTOP) THEN X1 = (X-XS(4))*(YTOP-Y) / (Y-YS(4)) + X Y1 = YTOP CALL SAVECL(X1,Y1) END IF XS(4) = X YS(4) = Y IF (Y.LE.YTOP) THEN CALL SAVECL(X,Y) END IF RETURN END C----------------------------------------------------------------------- C SAVES THE POINT AFTER CLIPPING C----------------------------------------------------------------------- SUBROUTINE SAVECL(X,Y) INTEGER COUNTC REAL XS(4),YS(4),XYPT(4,2) COMMON /LRBT/ XLEFT,XRIGHT,YBOTTM,YTOP,XS,YS,XYPT,COUNTC C--- C--- C--- *CHECK IF OUTSIDE WINDOW IF (X.GT.XRIGHT.OR.X.LT.XLEFT) RETURN IF (Y.GT.YTOP.OR.Y.LT.YBOTTM) RETURN COUNTC = COUNTC + 1 XYPT(COUNTC,1) = X XYPT(COUNTC,2) = Y RETURN END C----------------------------------------------------------------------- C STORES AVER(X,Y,Z) C----------------------------------------------------------------------- SUBROUTINE STRCI(NUMCI,INFCI,TECI,PARA) INTEGER TECI(3),SPLPT,NVX(2) REAL PARA(4,4),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,INFCI(3,2) C--- COMMON /DL/ XL,YL,ZL,DIS COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ C--- C--- ERR = 10.0 ** (-8.0) NUMCI = 0 X2 = MIN(X1,XOLD) X3 = MAX(X1,XOLD) Y2 = MIN(Y1,YOLD) Y3 = MAX(Y1,YOLD) Z2 = MIN(Z1,ZOLD) Z3 = MAX(Z1,ZOLD) C--- CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) C--- *CHECK IF (X2.LT.CRX.AND.X3.GT.CRX) THEN IF (ABS(XL).LE.ERR) THEN XK = X1 YK = Y1 ZK = Z1 ELSE RINT = ABS((CRX-XOLD) / XL) XK = XOLD + XL * RINT YK = YOLD + YL * RINT ZK = ZOLD + ZL * RINT END IF C--- CALL AXYZ(XK,YK,ZK,X,Y,Z,PARA) IF (X.GT.XMAX.OR.X.LT.XMIN) GO TO 1 IF (Y.GT.YMAX.OR.Y.LT.YMIN) GO TO 1 CALL PLCMDS(7) NUMCI = 1 INFCI(1,1) = IX INFCI(1,2) = IY IF (YK.GE.CRY.AND.ZK.GE.CRZ) THEN TECI(1) = 2 ELSE TECI(1) = 1 END IF END IF 1 CONTINUE C--- *CHECK IF (Y2.LT.CRY.AND.Y3.GT.CRY) THEN IF (ABS(YL).LE.ERR) THEN XK = X1 YK = Y1 ZK = Z1 ELSE RINT = ABS((CRY-YOLD) / YL) XK = XOLD + XL * RINT YK = YOLD + YL * RINT ZK = ZOLD + ZL * RINT END IF C--- CALL AXYZ(XK,YK,ZK,X,Y,Z,PARA) IF (X.GT.XMAX.OR.X.LT.XMIN) GO TO 3 IF (Y.GT.YMAX.OR.Y.LT.YMIN) GO TO 3 CALL PLCMDS(7) DO 2 I=1,NUMCI IF (IX.EQ.INFCI(I,1).AND.IY.EQ.INFCI(I,2)) THEN GO TO 3 END IF 2 CONTINUE NUMCI = NUMCI + 1 INFCI(NUMCI,1) = IX INFCI(NUMCI,2) = IY IF (XK.GE.CRX.AND.ZK.GE.CRZ) THEN TECI(NUMCI) = 2 ELSE TECI(NUMCI) = 1 END IF END IF 3 CONTINUE C--- *CHECK IF (Z2.LT.CRZ.AND.Z3.GT.CRZ) THEN IF (ABS(ZL).LE.ERR) THEN XK = X1 YK = Y1 ZK = Z1 ELSE RINT = ABS((CRZ-ZOLD) / ZL) XK = XOLD + XL * RINT YK = YOLD + YL * RINT ZK = ZOLD + ZL * RINT END IF CALL AXYZ(XK,YK,ZK,X,Y,Z,PARA) IF (X.GT.XMAX.OR.X.LT.XMIN) GO TO 5 IF (Y.GT.YMAX.OR.Y.LT.YMIN) GO TO 5 CALL PLCMDS(7) DO 4 I=1,NUMCI IF (IX.EQ.INFCI(I,1).AND.IY.EQ.INFCI(I,2)) GO TO 5 4 CONTINUE NUMCI = NUMCI + 1 INFCI(NUMCI,1) = IX INFCI(NUMCI,2) = IY IF (XK.GE.CRX.AND.YK.GE.CRY) THEN TECI(NUMCI) = 2 ELSE TECI(NUMCI) = 1 END IF END IF 5 CONTINUE RETURN END C----------------------------------------------------------------------- C DISPLAYS THREE PROJECTIONS (X,Y), (Y,Z) AND (X,Z C WITH DOTTED LINE C----------------------------------------------------------------------- SUBROUTINE DIPJ(PARA,ST3,NUMPTS) REAL PARA(4,4),ST3(500,3) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ LOGICAL PJXZ,PJYZ,PJXY,P1,P2,P3,PSL C--- COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /PJXYZ/ PJXY,PJYZ,PJXZ,IPJ,PSL COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ COMMON /DL/ XL,YL,ZL,DIS COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS C--- C--- P1 = PJXY P2 = PJYZ P3 = PJXZ CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) TOOCLS = DIS / RIDIS DO 3 I = 1,IPJ C--- *GET EACH POINT RSKIP = DISD DO 2 J=1,NUMPTS X1 = ST3(J,1) Y1 = ST3(J,2) Z1 = ST3(J,3) C--- IF (P1) THEN Z1 = CRZ ELSE IF (P2) THEN X1 = CRX ELSE IF (P3) THEN Y1 = CRY END IF C--- *PROJECTION USING SOLID LINE IF (PSL) THEN IF (J.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) ELSE CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (TOOCLS.GT.DIS) GO TO 2 CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) END IF XOLD = X1 YOLD = Y1 ZOLD = Z1 GO TO 2 END IF C--- *PROJECTION USING DOTS IF (J.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) XOLD = X1 YOLD = Y1 ZOLD = Z1 RSKIP = DISD ELSE CALL DISDOT(PARA) END IF 2 CONTINUE C--- IF (P1) THEN P1 = .FALSE. ELSE IF (P2) THEN P2 = .FALSE. ELSE IF (P3) THEN P3 = .FALSE. END IF 3 CONTINUE RETURN END C----------------------------------------------------------------------- C EXECUTES B3D COMMAND. CALL SCAN B3D TO GET C MIN, MAX AND AVERAGE OF X,Y AND Z C----------------------------------------------------------------------- SUBROUTINE EXB3D INTEGER XAXIS,YAXIS,ZAXIS REAL MIMA(3,2),VIEW(3),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ CHARACTER*2 COM LOGICAL B3DC C--- COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /AXB3D/ IB3DX,IB3DY,IB3DZ COMMON /CB3D/ B3DC C--- C--- CALL SCNB3D(IERROR) C--- *ON ERROR IN FILE 7 RETURN IF (IERROR.NE.0) THEN CALL WERRS(IERROR) RETURN END IF B3DC = .TRUE. XAXIS = IB3DX YAXIS = IB3DY ZAXIS = IB3DZ C--- *KEEP MIN AND MAX IN MIMA MIMA(1,1) = MINQX MIMA(2,1) = MINQY MIMA(3,1) = MINQZ MIMA(1,2) = MAXQX MIMA(2,2) = MAXQY MIMA(3,2) = MAXQZ CALL ENT3DC(MIMA,VIEW,COM) C--- *RESET B3D B3DC = .FALSE. RETURN END C----------------------------------------------------------------------- C SCAN FILE 7 TO FIND MIN, MAX (X,Y,Z) AND AVERAGE C----------------------------------------------------------------------- SUBROUTINE SCNB3D(IERROR) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ,HOLD(10) INTEGER GRNUM,PTNUM,SPLPT,SPTNM LOGICAL FIRSTP COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /AXB3D/ IB3DX,IB3DY,IB3DZ C--- C--- POINT = 0 FIRSTP = .TRUE. IERROR = 0 NAXIS = MAX(IB3DX,IB3DY,IB3DZ) AVERX = 0 AVERY = 0 AVERZ = 0 REWIND 17 1 READ(17,*,ERR=4,END=5) GRNUM IF (GRNUM.EQ.0) GO TO 1 BACKSPACE 17 2 READ(17,*,ERR=3,END=5) GRNUM,PTNUM,SPLPT,SPTNM, + (HOLD(I),I=1,NAXIS) IF (GRNUM.EQ.0) GOTO 1 X = HOLD(IB3DX) Y = HOLD(IB3DY) Z = HOLD(IB3DZ) POINT = POINT + 1 AVERX = AVERX + X AVERY = AVERY + Y AVERZ = AVERZ + Z IF (FIRSTP) THEN MINQX = X MINQY = Y MINQZ = Z MAXQX = X MAXQY = Y MAXQZ = Z ELSE IF (MINQX.GT.X) MINQX = X IF (MINQY.GT.Y) MINQY = Y IF (MINQZ.GT.Z) MINQZ = Z IF (MAXQX.LT.X) MAXQX = X IF (MAXQY.LT.Y) MAXQY = Y IF (MAXQZ.LT.Z) MAXQZ = Z END IF FIRSTP = .FALSE. IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)GOTO 1 GO TO 2 3 IF (GRNUM.EQ.0) GO TO 1 4 IERROR = 7 RETURN 5 IF (POINT.EQ.0) THEN IERROR = 7 RETURN END IF C--- *AVERAGE OF (X,Y,Z) AVERX = AVERX / POINT AVERY = AVERY / POINT AVERZ = AVERZ / POINT RETURN END C----------------------------------------------------------------------- C GET 3 NEW AXES FROM USER, IF ERROR IN INPUT THEN KEEP C OLD 3 AXIS AND MIN, MAX, AVER OF (X,Y,Z) C----------------------------------------------------------------------- SUBROUTINE GAXB3D(MIMA,ERROR) INTEGER PARRY(1999),XAXIS,YAXIS,ZAXIS,ERROR REAL MIMA(3,2),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ CHARACTER*80 ISTR,OSTR LOGICAL VALID C--- COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /AXB3D/ IB3DX,IB3DY,IB3DZ COMMON /AXIS/ XAXIS,YAXIS,ZAXIS C--- C--- ERROR = 0 OSTR = ' ENTER THE NEW THREE AXES FOR (X,Y,Z) ' 2 WRITE(ITERM,3) OSTR CALL READS8(ISTR) I = 1 IF (ISTR(1:1).EQ.' ') I = 2 CALL CONVT(ISTR,I,NUM,PARRY,VALID) IF (.NOT.VALID.OR.NUM.LT.3) THEN OSTR = ' ERROR : ENTER AGAIN ' GO TO 2 END IF C--- IX1 = PARRY(1) IY1 = PARRY(2) IZ1 = PARRY(3) IMIN = MIN(IX1,IY1,IZ1) IMAX = MAX(IX1,IY1,IZ1) C---*CHECK FOR ERROR IF (IMIN.LE.0.OR.IMAX.GT.8) THEN OSTR = ' ENTER THREE POSITIVE INTEGERS' GO TO 2 END IF C--- IB3DX = IX1 IB3DY = IY1 IB3DZ = IZ1 C--- *KEEP OLD VALUE OF MIN,MA AX = AVERX AY = AVERY AZ = AVERZ XMIN = MINQX YMIN = MINQY ZMIN = MINQZ XMAX = MAXQX YMAX = MAXQY ZMAX = MAXQZ C--- *SCAN FILE 7 AND GET NEW C--- *MIN, MAX AND AVERAGE CALL SCNB3D(ERROR) IF (ERROR.EQ.0) THEN XAXIS = IB3DX YAXIS = IB3DY ZAXIS = IB3DZ MIMA(1,1) = MINQX MIMA(2,1) = MINQY MIMA(3,1) = MINQZ MIMA(1,2) = MAXQX MIMA(2,2) = MAXQY MIMA(3,2) = MAXQZ RETURN END IF C--- *KEEP NEW VALUES IB3DX = XAXIS IB3DY = YAXIS IB3DZ = ZAXIS AVERX = AX AVERY = AY AVERZ = AZ MINQX = XMIN MINQY = YMIN MINQZ = ZMIN MAXQX = XMAX MAXQY = YMAX MAXQZ = ZMAX RETURN 3 FORMAT(A) END C----------------------------------------------------------------------- C DISPLAYS CURVES USING SOLID, DASHED, DOTTED C OR HEAVY LINE, IN THREE DIMENSIONS C----------------------------------------------------------------------- SUBROUTINE TYPE3D(IFIRST,PARA) INTEGER NVX(2),SPLPT REAL PARA(4,4),IX,IY,MINSX,MAXSX,MINSY,MAXSY LOGICAL SKIP,LINE,CONECT,DASH C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /COOR/ CRX,CRY,CRZ COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /SYMB/ KTYPE COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /HEAVY/ X3,Y3,Z3,X4,Y4,Z4 C--- C--- GO TO (1,2,3,4,5,6) KTYPE C--- *SOLID LINE 1 CALL PLCMDS(36) CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) IF (IFIRST.EQ.1) THEN CALL CLIP(X,Y,1) ELSE CALL CLIP(X,Y,2) END IF CALL PLCMDS(20) RETURN C--- C--- *DASHED LINE 2 IF (IFIRST.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) CONECT = .TRUE. RCONCT = FDXYZ SKIP = .FALSE. ELSE CALL DASHSL(PARA) END IF RETURN C--- *DASHED AND SOLID LINE 3 IF (X1.LT.CRX.OR.Y1.LT.CRY.OR.Z1.LT.CRZ) THEN LINE = .FALSE. ELSE LINE = .TRUE. END IF C--- IF (IFIRST.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) DASH = .NOT. LINE ELSE CALL LINDAS(PARA) END IF RETURN C--- *DOTTED LINE 4 IF (IFIRST.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) RSKIP = DISD ELSE CALL DISDOT(PARA) END IF RETURN C--- *DOTTED AND SOLID 5 IF (X1.LT.CRX.OR.Y1.LT.CRY.OR.Z1.LT.CRZ) THEN LINE = .FALSE. ELSE LINE = .TRUE. END IF C--- IF (IFIRST.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) DASH = .NOT. LINE ELSE CALL LINDOT(PARA) END IF RETURN C--- *HEAVY LINE 6 CALL AXYZ(X1,Y1,Z1,X4,Y4,Z4,PARA) CALL PLCMDS(36) IF (IFIRST.EQ.1) THEN X = X4 Y = Y4 X3 = X4 Y3 = Y4 CALL CLIP(X,Y,1) ELSE X = X3 Y = Y3 CALL CLIP(X,Y,3) X = X4 Y = Y4 CALL CLIP(X,Y,4) X = X3 Y = Y3 CALL CLIP(X,Y,3) X = X4 Y = Y4 CALL CLIP(X,Y,2) X3 = X4 Y3 = Y4 END IF CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAY THE CURVES FROM FILE 7 OR OF C----------------------------------------------------------------------- SUBROUTINE DPB3D(TRAN,PARA,MP,PNTS) INTEGER XAXIS,YAXIS,ZAXIS,TECI(3),NVX(2) INTEGER GRNUM,PTNUM,SPLPT,SPTNM,PNTCNT,PRESGN REAL TRAN(4,4),PARA(4,4),HOLD(10),IX,IY,MINSX,MAXSX,MINSY,MAXSY REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ,INFCI(3,2),PNTS(1999,4) CHARACTER*1 MP(81,251) LOGICAL CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,PLTR,POINT LOGICAL SKIP,LINE,CONECT,DASH,DFT,USR,BRNCH LOGICAL TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP,ST3D C--- C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /PLOTT/ PLTR,POINT COMMON /SYMB/ KTYPE COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /DS/ CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,ST3D COMMON /UOPTS/ DFT,USR,BRNCH,ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS, + GRIDS,DP COMMON /DL/ XL,YL,ZL,DIS COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- C--- NUMCI = 0 INDX = 0 PNTCNT = 0 PRESGN = 0 NMX = MAX(XAXIS,YAXIS,ZAXIS) CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) TOOCLS = DIS / RIDIS REWIND 17 1 READ(17,*,END=5) GRNUM IF (GRNUM.EQ.0) GO TO 1 BACKSPACE 17 IFIRST = 1 RCONCT = FDXYZ SKIP = .FALSE. CONECT = .TRUE. 2 READ(17,*,END=5,ERR=4) GRNUM,PTNUM,SPLPT,SPTNM, + (HOLD(I),I=1,NMX) IF (GRNUM.EQ.0) GOTO 1 C--- IF (ABS(PTNUM).EQ.1) THEN IFIRST = 1 SKIP = .FALSE. CONECT = .TRUE. RCONCT = FDXYZ END IF X1 = HOLD(XAXIS) Y1 = HOLD(YAXIS) Z1 = HOLD(ZAXIS) CALL AXYZ(X1,Y1,Z1,X0,Y0,Z0,TRAN) X1 = X0 Y1 = Y0 Z1 = Z0 IF (IFIRST.NE.1) THEN CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (TOOCLS.GT.DIS) GO TO 6 END IF IF (CIR.AND.IFIRST.GT.1) THEN CALL STRCI(NUMCI,INFCI,TECI,PARA) END IF C--- *DISPLAY THE CURVES CALL TYPE3D(IFIRST,PARA) C--- *CIRCLE IF (CIR) THEN DO 3 J=1,NUMCI IF (TECI(J).EQ.1) THEN IX = INFCI(J,1) IY = INFCI(J,2) CALL HCIR CALL PLCMDS(4) ELSE IX = INFCI(J,1) IY = INFCI(J,2) CALL SCIR CALL PLCMDS(4) END IF 3 CONTINUE END IF XOLD = X1 YOLD = Y1 ZOLD = Z1 C--- 6 CALL WINCT(X,Y,XNEW1,YNEW1) IF (BRNCH.OR.POINT) THEN IF (IFIRST.EQ.1) THEN CALL MAP(MP,XNEW1,YNEW1,XNEW1,YNEW1) ELSE CALL MAP(MP,XNEW1,YNEW1,XOLD1,YOLD1) END IF XOLD1 = XNEW1 YOLD1 = YNEW1 END IF IF (X.GE.XMIN.AND.X.LE.XMAX.AND.Y.GE.YMIN.AND.Y.LE.YMAX) THEN IF (POINT.AND.SPTNM.NE.0) THEN INDX = INDX + 1 PNTS(INDX,1) = XNEW1 PNTS(INDX,2) = YNEW1 PNTS(INDX,3) = SPTNM PNTS(INDX,4) = 1 END IF C--- IF (BRNCH.AND.GRNUM.NE.PRESGN) THEN PNTCNT = PNTCNT + 1 END IF C--- IF (PNTCNT.EQ.10.AND.GRNUM.NE.PRESGN) THEN PRESGN = GRNUM INDX = INDX + 1 PNTS(INDX,1) = XNEW1 PNTS(INDX,2) = YNEW1 PNTS(INDX,3) = GRNUM PNTS(INDX,4) = 4 PNTCNT = 0 END IF END IF IFIRST = IFIRST + 1 IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)GOTO 1 GO TO 2 C--- 4 IF (GRNUM.EQ.0) GO TO 1 5 CONTINUE C--- *DISPLAY PROJECTION FOR IF (DFDOT) THEN CALL DPJB3D(TRAN,PARA) END IF RETURN END C----------------------------------------------------------------------- C DISPLAYS CURVES FROM FILE 8 OR <3D> C----------------------------------------------------------------------- SUBROUTINE DP3D(TRAN,PARA,MP,PNTS) INTEGER ENLAB(1999),PARRY(1999),XAXIS,YAXIS,ZAXIS INTEGER TECI(3),NVX(2),GRNUM,PTNUM,SPLPT,SPNUM INTEGER SLAB(1999),BLKSZE,MPJ(1999) REAL TRAN(4,4),PARA(4,4),HOLD(251),ST3(500,3),INFCI(3,2) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY,PNTS(1999,4) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ LOGICAL CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,PLTR,POINT LOGICAL LABYET,FOUND,SKIP,LINE,CONECT,DASH,ST3D CHARACTER*1 MP(81,251) C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /PLOTT/ PLTR,POINT COMMON /SYMB/ KTYPE COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /LDD1/ SKIP,LINE,CONECT,DASH COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /DS/ CIR,DFDOT,MIDDLE,DIAXIS,DCOOR,PRNUM,ST3D COMMON /DL/ XL,YL,ZL,DIS COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- C--- LBPT = 10 INDX = 0 NOLAB = NUMLB NUMCI = 0 IMPJ = 0 DO 1 I=1,NUMLB PARRY(I) = 0 1 CONTINUE C--- CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) TOOCLS = DIS / RIDIS REWIND 18 2 IF (NOLAB.EQ.0) GO TO 9 READ(18,*,END=9) GRNUM,PTNUM,SPLPT,SPNUM,X0,Y0,NUMPTS,NAXIS1, + BLKSZE FOUND = .FALSE. LABYET = .FALSE. LINE = .TRUE. C--- DO 3 I=1,NUMLB IF (PARRY(I).EQ.0.AND.ENLAB(I).EQ.SPNUM) THEN PARRY(I) = 1 FOUND = .TRUE. END IF 3 CONTINUE IF (.NOT.FOUND) GO TO 6 NOLAB = NOLAB - 1 SKIP = .FALSE. CONECT = .TRUE. RCONCT = FDXYZ ICOUNT = 0 C--- DO 5 I=1,NUMPTS READ(18,*,END=8) (HOLD(J),J=1,NAXIS1) X1 = HOLD(XAXIS) Y1 = HOLD(YAXIS) Z1 = HOLD(ZAXIS) CALL AXYZ(X1,Y1,Z1,X0,Y0,Z0,TRAN) X1 = X0 Y1 = Y0 Z1 = Z0 IF (I.NE.1) THEN CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (TOOCLS.GT.DIS) GO TO 8 END IF ICOUNT = ICOUNT + 1 IF (DFDOT.AND.ICOUNT.LE.500) THEN ST3(ICOUNT,1) = X1 ST3(ICOUNT,2) = Y1 ST3(ICOUNT,3) = Z1 END IF IF (CIR.AND.I.GT.1) THEN CALL STRCI(NUMCI,INFCI,TECI,PARA) END IF C--- *DISPLAY THE CURVES CALL TYPE3D(I,PARA) XOLD = X1 YOLD = Y1 ZOLD = Z1 IF (CIR) THEN DO 4 J=1,NUMCI IF (TECI(J).EQ.1) THEN IX = INFCI(J,1) IY = INFCI(J,2) CALL HCIR CALL PLCMDS(4) ELSE IF (TECI(J).EQ.2) THEN IX = INFCI(J,1) IY = INFCI(J,2) CALL SCIR CALL PLCMDS(4) END IF 4 CONTINUE END IF C--- 8 IF (POINT) THEN CALL PLCMDS(7) XNEW1 = IX YNEW1 = IY IF (I.EQ.1) THEN CALL MAP(MP,XNEW1,YNEW1,XOLD1,YOLD1) ELSE CALL MAP(MP,XNEW1,YNEW1,XOLD1,YOLD1) END IF XOLD1 = XNEW1 YOLD1 = YNEW1 IF (X.GE.XMIN.AND.X.LE.XMAX.AND. + Y.GE.YMIN.AND.Y.LE.YMAX) THEN IF (NUMPTS.LE.15) LBPT = 2 IF (I.EQ.LBPT.AND..NOT.LABYET) THEN LBPT = LBPT + 10 IF (LBPT.GE.NUMPTS) LBPT = 15 INDX = INDX + 1 PNTS(INDX,1) = IX PNTS(INDX,2) = IY PNTS(INDX,3) = SPNUM PNTS(INDX,4) = 4 LABYET = .TRUE. END IF END IF END IF 5 CONTINUE NA1 = INT(NAXIS1 / 7) IF (MOD(NAXIS1,7).NE.0) NA1 = NA1 + 1 BLKSZE = BLKSZE - NUMPTS * NA1 IF (DFDOT.AND.ICOUNT.LE.500) THEN CALL DIPJ(PARA,ST3,ICOUNT) ELSE IF (DFDOT.AND.ICOUNT.GT.500) THEN IMPJ = IMPJ + 1 MPJ(IMPJ) = SPNUM END IF 6 CONTINUE DO 7 I=1,BLKSZE READ(18,*) 7 CONTINUE GO TO 2 9 IF (DFDOT.AND.IMPJ.GT.0) THEN CALL DIPJA(TRAN,PARA,MPJ,IMPJ) END IF RETURN END C----------------------------------------------------------------------- C MAPS THE CURVES IN MP ARRAY C----------------------------------------------------------------------- SUBROUTINE MAP(MP,XNEW,YNEW,XOLD,YOLD) CHARACTER*1 MP(81,251) COMMON /SPNUM/ SP1,SP2,SP3,SP4 DX = (XNEW - XOLD) / SP2 DY = (YNEW - YOLD) / SP4 INDEX = INT(MAX(ABS(DX),ABS(DY))) + 1 X1 = (XOLD - SP1) / SP2 + 1 Y1 = (YOLD - SP3) / SP4 + 1 DO I=0,INDEX-1 F = REAL(I)/INDEX IX = INT(X1 + F * DX) IY = INT(Y1 + F * DY) IF (IX.GE.1.AND.IX.LE.81.AND.IY.GE.1.AND.IY.LE.251) THEN MP(IX,IY) = 'X' END IF ENDDO RETURN END C----------------------------------------------------------------------- C DISPLAY PROJECTION OF UNIT 8 C----------------------------------------------------------------------- SUBROUTINE DIPJA(TRAN,PARA,MPJ,IMPJ) REAL PARA(4,4),TRAN(4,4),MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ REAL IX,IY,MINSX,MINSY,MAXSX,MAXSY,HOLD(251) INTEGER GRNUM,PTNUM,SPNUM,BLKSZE,XAXIS,YAXIS,ZAXIS INTEGER SPLPT,NVX(2),DOUBLE(1999),MPJ(1999) LOGICAL PJXZ,PJYZ,PJXY,P1,P2,P3,PSL,FOUND C--- C--- COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /PJXYZ/ PJXY,PJYZ,PJXZ,IPJ,PSL COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /COOR/ CRX,CRY,CRZ COMMON /DL/ XL,YL,ZL,DIS COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /AXIS/ XAXIS,YAXIS,ZAXIS C--- C--- P1 = PJXY P2 = PJYZ P3 = PJXZ CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) TOOCLS = DIS / RIDIS DO 1 I=1,IMPJ DOUBLE(I) = 0 1 CONTINUE NOLAB = IMPJ C--- DO 3 I=1,IMPJ REWIND 18 2 IF (NOLAB.EQ.0) GO TO 7 READ(18,*) GRNUM,PTNUM,SPLPT,SPNUM,X0,Y0,NUMPTS,NAXIS,BLKSZE FOUND = .FALSE. C--- *FIND LABEL DO 4 J=1,IMPJ IF (SPNUM.EQ.MPJ(J).AND.DOUBLE(J).EQ.0) THEN FOUND = .TRUE. DOUBLE(J) = 1 END IF 4 CONTINUE C--- *IF NOT FOUND SKIP IF (.NOT.FOUND) GO TO 8 NOLAB = NOLAB - 1 RSKIP = DISD C--- *GET EACH AXIS FOR DISPLAY DO 5 J =1,NUMPTS READ(18,*) (HOLD(L),L=1,NAXIS) X0 = HOLD(XAXIS) Y0 = HOLD(YAXIS) Z0 = HOLD(ZAXIS) CALL AXYZ(X0,Y0,Z0,X1,Y1,Z1,TRAN) IF (P1) THEN Z1 = CRZ ELSE IF (P2) THEN X1 = CRX ELSE IF (P3) THEN Y1 = CRY END IF C--- *DISPLAY WITH SOLID LINE IF (PSL) THEN CALL PLCMDS(32) IF (J.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) ELSE CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (TOOCLS.GT.DIS) GO TO 5 CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) END IF XOLD = X1 YOLD = Y1 ZOLD = Z1 CALL PLCMDS(20) GO TO 5 END IF C--- *DISPLAY PROJECTION USING DOTS IF (J.EQ.1) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) XOLD = X1 YOLD = Y1 ZOLD = Z1 ELSE CALL DISDOT(PARA) CALL PLCMDS(32) END IF 5 CONTINUE NA = INT(NAXIS/7) IF (MOD(NAXIS,7).NE.0) NA = NA + 1 BLKSZE = BLKSZE - NUMPTS * NA 8 CONTINUE C--- *SKIP BLOCK DO 6 J=1,BLKSZE READ(18,*) 6 CONTINUE GO TO 2 C--- *RESET PROJECTION FLAG 7 IF (P1) THEN P1 = .FALSE. ELSE IF (P2) THEN P2 = .FALSE. ELSE IF (P3) THEN P3 = .FALSE. END IF 3 CONTINUE CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C DISPLAY PROJECTION OF UNIT 7 C----------------------------------------------------------------------- SUBROUTINE DPJB3D(TRAN,PARA) REAL PARA(4,4),TRAN(4,4),HOLD(10) REAL MINQX,MINQY,MINQZ,MAXQX,MAXQY,MAXQZ INTEGER XAXIS,YAXIS,ZAXIS,GRNUM,PTNUM,SPLPT,SPTNM LOGICAL PJXZ,PJYZ,PJXY,P1,P2,P3,PSL,FIRST C--- COMMON /PJXYZ/ PJXY,PJYZ,PJXZ,IPJ,PSL COMMON /LDD2/ RSKIP,RCONCT,FDXYZ,FSKXYZ,XOLD,YOLD,ZOLD, + X1,Y1,Z1,DIST,DISD COMMON /COOR/ CRX,CRY,CRZ COMMON /AXIS/ XAXIS,YAXIS,ZAXIS COMMON /AMIMA/ AVERX,AVERY,AVERZ,MINQX,MINQY,MINQZ, + MAXQX,MAXQY,MAXQZ COMMON /DL/ XL,YL,ZL,DIS COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS C--- C--- CALL PLCMDS(32) P1 = PJXY P2 = PJYZ P3 = PJXZ RSKIP = DISD CALL DISTLN(MAXQX,MAXQY,MAXQZ,MINQX,MINQY,MINQZ) TOOCLS = DIS / RIDIS NMX = MAX(XAXIS,YAXIS,ZAXIS) DO 6 INDEX = 1,IPJ REWIND 17 1 READ(17,*,END=5) GRNUM IF (GRNUM.EQ.0) GO TO 1 BACKSPACE 17 FIRST = .TRUE. 2 READ(17,*,END=5,ERR=7) GRNUM,PTNUM,SPLPT,SPTNM, + (HOLD(I),I=1,NMX) IF (GRNUM.EQ.0) GOTO 1 IF (ABS(PTNUM).EQ.1) THEN FIRST = .TRUE. RSKIP = DISD END IF X2 = HOLD(XAXIS) Y2 = HOLD(YAXIS) Z2 = HOLD(ZAXIS) CALL AXYZ(X2,Y2,Z2,X1,Y1,Z1,TRAN) IF (P1) THEN Z1 = CRZ ELSE IF (P2) THEN X1 = CRX ELSE IF (P3) THEN Y1 = CRY END IF C--- *SOLID LINE IF (PSL) THEN IF (FIRST) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) ELSE CALL DISTLN(X1,Y1,Z1,XOLD,YOLD,ZOLD) IF (TOOCLS.GT.DIS) GOTO 4 CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,2) END IF XOLD = X1 YOLD = Y1 ZOLD = Z1 GO TO 4 END IF C--- IF (FIRST) THEN CALL AXYZ(X1,Y1,Z1,X,Y,Z,PARA) CALL CLIP(X,Y,1) XOLD = X1 YOLD = Y1 ZOLD = Z1 ELSE CALL DISDOT(PARA) CALL PLCMDS(32) END IF 4 CONTINUE FIRST = .FALSE. IF(MOD(IABS(SPLPT),10).EQ.9.AND.IABS(PTNUM).NE.1)GOTO 1 GO TO 2 7 IF (GRNUM.EQ.0) GO TO 1 5 IF (P1) THEN P1 = .FALSE. ELSE IF (P2) THEN P2 = .FALSE. ELSE IF (P3) THEN P3 = .FALSE. END IF 6 CONTINUE CALL PLCMDS(20) RETURN END C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE CRFLNM(ICODE) CHARACTER*20 FLNAME C-- GO TO (1, 2) ICODE 1 WRITE(6,*) ' ENTER FILE NAME:' READ(5,3) FLNAME IF (FLNAME .EQ.' ') THEN OPEN(UNIT=16, FILE='fig.1', STATUS='unknown', + ACCESS='sequential') ELSE CALL RESLAB(FLNAME) OPEN(UNIT=16, FILE=FLNAME, STATUS='unknown', + ACCESS='sequential') END IF RETURN C-- 2 CLOSE(16) RETURN C-- 3 FORMAT(A20) END auto/07p/plaut/Makefile.in0000750000175000017500000000072613570013207013443 0ustar sksk# # Makefile Xianjun WANG 3/1994 # .SUFFIXES: .f .o # FC = @FC@ FFLAGS = @OPT_FLAG@ -c SRC = plautdev.f plautint.f plautlib.f plautmain.f PGM = ../bin/plaut RM = rm -f COMPAT = @COMPAT@ # .f.o: $(FC) $(FFLAGS) $*.f -o $@ # $(PGM): $(SRC:.f=.o) compat.o $(FC) $(SRC:.f=.o) compat.o -o $@ compat.o : ../src/$(COMPAT).f90 $(FC) $(FFLAGS) ../src/$(COMPAT).f90 -o $@ plautmain.o: plautmain.f compat.o # clean: $(RM) *.o *.mod auto/07p/plaut/plaut.ps0000750000175000017500000014676413570013207013104 0ustar sksk%!PS-Adobe-2.0 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software %%Title: plaut.dvi %%Pages: 3 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips plaut -o plaut.ps %DVIPSParameters: dpi=600, compressed %DVIPSSource: TeX output 2005.11.22:1429 %%BeginProcSet: texc.pro %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B /chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ /cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 {2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ 1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ /Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) (LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet TeXDict begin 39158280 55380996 1000 600 600 (plaut.dvi) @start %DVIPSBitmapFont: Fa cmcsc10 12 9 /Fa 9 117 df80 D<49B46C13C0010FEBF001013FEBFC039038FF007FD801F8EB0F874848EB03E7D807 C0EB01FF48487F001F157F90C8123F003E151FA2007E150F127C160712FC1603A37E1601 7EA27F6C6C91C7FC7F7FEA3FFCEBFFC06C13FC6CEBFFC015FC6CECFF806C15E0C615F86D 80011F80010380D9003F1480020314C0EC003F030313E01500EE7FF0161FA2EE0FF81607 12E01603A21601A37EA217F07E16037E17E06C15076C16C06DEC0F806D141F6DEC3F00D8 F8F8147E017F5C3AF01FE007F00107B55AD8E00191C7FC39C0001FFC2D4879C53D>83 D<4AB4EB0180021FEBF00391B5EAFC0701039038007E0FD907F8EB0F9FD91FE0EB03DF49 48EB01FF01FFC8FC4848157F4848153FA24848151F4848150F121F491507123F5BA2007F 1603A3484892C7FCAB6C7EEF0380A2123FA27F001F16076D1600000F5E6C6C150E6C6C15 1E171C6C6C153C6C6C5DD93FC05C6D6CEB03E0D907F8495A902703FF807FC7FC0100EBFF FC021F13F00201138031357BB33B>99 D105 D111 DI114 D<90390FF0018090387FFE 0348B512873907F00FEF390FC001FF48C7FC003E143F151F5A150F5A1507A36C1403A27E 6C91C7FC6C7E7FEA3FF8EBFF806C13FC6CEBFFC06C14F06C80C614FE011F7F01031480D9 001F13C014019138003FE0151F150FED07F0150312E01501A37EA216E06C1403A26CEC07 C06CEC0F806C6CEB1F0001E0133ED8FBFE13FC00F0B55AD8E01F13E0D8C00390C7FC2435 7BB32E>I<007FB812C0A3903A8007FC003F277E0003F8130F007C160700781603007016 01A200F017E0A2481600A6C71600B3AA4A7E4A7E010FB512FEA333327CB13B>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fb cmbx12 12 21 /Fb 21 125 df48 DII< ECFFF0010713FF011F14C0017F14F049C66C7ED803F8EB3FFED807E06D7E81D80FF86D13 8013FE001F16C07FA66C5A6C4815806C485BC814005D5E4B5A4B5A4B5A4A5B020F138090 2607FFFEC7FC15F815FF16C090C713F0ED3FFCED0FFEEEFF80816F13C017E0A26F13F0A2 17F8A3EA0FC0EA3FF0487EA2487EA217F0A25D17E06C5A494913C05BD83F80491380D81F F0491300D80FFEEBFFFE6CB612F800015D6C6C14C0011F49C7FC010113E02D427BC038> I<163FA25E5E5D5DA25D5D5D5DA25D92B5FCEC01F7EC03E7140715C7EC0F87EC1F07143E 147E147C14F8EB01F0EB03E0130714C0EB0F80EB1F00133E5BA25B485A485A485A120F5B 48C7FC123E5A12FCB91280A5C8000F90C7FCAC027FB61280A531417DC038>I65 DIII I76 D78 D80 D82 DI<003FBA12E0A59026FE000FEB 8003D87FE09338003FF049171F90C71607A2007E1803007C1801A300781800A400F819F8 481978A5C81700B3B3A20107B8FCA545437CC24E>III<007FB6D8C003B61280A5D8000F01E0 C7D801F8C7FC6D4C5A6F14076D6D5D6D6D4A5A4E5A6D6D143F6E6C92C8FC6E157E705B6E EBC0016E01E05B4D5A6E6D485A6EEBF80F6E01FC5B4D5A6E6D48C9FC6F6C5A6F137E5F6F 5B815F816F7F81836F7F707E93B5FC844B805D4B8004E77FDB0FC37FED1F83DB3F817F04 007F037E137F4B8002016E7F4B6D7F4A5A4A486D7F020F6E7F4B7F4A48814AC76C7F717F 147E4A6F7E0101707F4A8149488349486F7F010F707FB600E00103B612FCA54E447DC355 >88 DI124 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fc cmbx12 14.4 31 /Fc 31 118 df46 D<157815FC14031407141F14FF130F0007B5FCB6FCA2147F13F0EAF800C7FCB3 B3B3A6007FB712FEA52F4E76CD43>49 DI<91380FFF C091B512FC0107ECFF80011F15E090263FF8077F9026FF800113FC4848C76C7ED803F86E 7E491680D807FC8048B416C080486D15E0A4805CA36C17C06C5B6C90C75AD801FC1680C9 FC4C13005FA24C5A4B5B4B5B4B13C04B5BDBFFFEC7FC91B512F816E016FCEEFF80DA0007 13E0030113F89238007FFE707E7013807013C018E07013F0A218F8A27013FCA218FEA2EA 03E0EA0FF8487E487E487EB57EA318FCA25E18F891C7FC6C17F0495C6C4816E001F04A13 C06C484A1380D80FF84A13006CB44A5A6CD9F0075BC690B612F06D5D011F1580010302FC C7FCD9001F1380374F7ACD43>I<177C17FEA2160116031607160FA2161F163F167FA216 FF5D5DA25D5DED1FBFED3F3F153E157C15FCEC01F815F0EC03E01407EC0FC01580EC1F00 5C147E147C5C1301495A495A5C495A131F49C7FC133E5B13FC485A5B485A1207485A485A 90C8FC123E127E5ABA12C0A5C96C48C7FCAF020FB712C0A53A4F7CCE43>I<171F4D7E4D 7EA24D7EA34C7FA24C7FA34C7FA34C7FA24C7FA34C8083047F80167E8304FE804C7E0301 8116F8830303814C7E03078116E083030F814C7E031F81168083033F8293C77E4B82157E 8403FE824B800201835D840203834B800207835D844AB87EA24A83A3DA3F80C88092C97E 4A84A2027E8202FE844A82010185A24A820103854A82010785A24A82010F855C011F717F EBFFFCB600F8020FB712E0A55B547BD366>65 D<932601FFFCEC01C0047FD9FFC0130303 07B600F81307033F03FE131F92B8EA803F0203DAE003EBC07F020F01FCC7383FF0FF023F 01E0EC0FF94A01800203B5FC494848C9FC4901F8824949824949824949824949824990CA 7E494883A2484983485B1B7F485B481A3FA24849181FA3485B1B0FA25AA298C7FC5CA2B5 FCAE7EA280A2F307C07EA36C7FA21B0F6C6D1980A26C1A1F6C7F1C006C6D606C6D187EA2 6D6C606D6D4C5A6D6D16036D6D4C5A6D6D4C5A6D01FC4C5A6D6DEE7F806D6C6C6C4BC7FC 6E01E0EC07FE020F01FEEC1FF80203903AFFE001FFF0020091B612C0033F93C8FC030715 FCDB007F14E0040101FCC9FC525479D261>67 DI70 D76 D<93380FFFC00303B6FC031F15E092B712FC0203D9FC0013FF020F01C0010F13C0023F90 C7000313F0DA7FFC02007F494848ED7FFE4901E0ED1FFF49496F7F49496F7F4990C96C7F 49854948707F4948707FA24849717E48864A83481B804A83481BC0A2481BE04A83A2481B F0A348497113F8A5B51AFCAF6C1BF86E5FA46C1BF0A26E5F6C1BE0A36C6D4D13C0A26C6D 4D1380A26C1B006C6D4D5A6E5E6C626D6C4C5B6D6D4B5B6D6D4B5B6D6D4B5B6D6D4B5B6D 6D4B90C7FC6D6D4B5A6D01FF02035B023F01E0011F13F0020F01FC90B512C0020390B7C8 FC020016FC031F15E0030392C9FCDB001F13E0565479D265>79 DI<003FBC1280A59126C0003F 9038C0007F49C71607D87FF8060113C001E08449197F49193F90C8171FA2007E1A0FA300 7C1A07A500FC1BE0481A03A6C994C7FCB3B3AC91B912F0A553517BD05E>84 DI97 D<913801FFF8021FEBFF8091B612F0010315FC010F9038C00FFE903A1FFE00 01FFD97FFC491380D9FFF05B4817C048495B5C5A485BA2486F138091C7FC486F1300705A 4892C8FC5BA312FFAD127F7FA27EA2EF03E06C7F17076C6D15C07E6E140F6CEE1F806C6D EC3F006C6D147ED97FFE5C6D6CEB03F8010F9038E01FF0010390B55A01001580023F49C7 FC020113E033387CB63C>99 D<4DB47E0407B5FCA5EE001F1707B3A4913801FFE0021F13 FC91B6FC010315C7010F9038E03FE74990380007F7D97FFC0101B5FC49487F4849143F48 4980485B83485B5A91C8FC5AA3485AA412FFAC127FA36C7EA37EA26C7F5F6C6D5C7E6C6D 5C6C6D49B5FC6D6C4914E0D93FFED90FEFEBFF80903A0FFFC07FCF6D90B5128F0101ECFE 0FD9003F13F8020301C049C7FC41547CD24B>I<913803FFC0023F13FC49B6FC010715C0 4901817F903A3FFC007FF849486D7E49486D7E4849130F48496D7E48178048497F18C048 8191C7FC4817E0A248815B18F0A212FFA490B8FCA318E049CAFCA6127FA27F7EA218E06C EE01F06E14037E6C6DEC07E0A26C6DEC0FC06C6D141F6C6DEC3F806D6CECFF00D91FFEEB 03FE903A0FFFC03FF8010390B55A010015C0021F49C7FC020113F034387CB63D>IIII<137F 497E000313E0487FA2487FA76C5BA26C5BC613806DC7FC90C8FCADEB3FF0B5FCA512017E B3B3A6B612E0A51B547BD325>I 108 DII<913801FFE0021F13FE 91B612C0010315F0010F9038807FFC903A1FFC000FFED97FF86D6C7E49486D7F48496D7F 48496D7F4A147F48834890C86C7EA24883A248486F7EA3007F1880A400FF18C0AC007F18 80A3003F18006D5DA26C5FA26C5F6E147F6C5F6C6D4A5A6C6D495B6C6D495B6D6C495BD9 3FFE011F90C7FC903A0FFF807FFC6D90B55A010015C0023F91C8FC020113E03A387CB643 >I<903A3FF001FFE0B5010F13FE033FEBFFC092B612F002F301017F913AF7F8007FFE00 03D9FFE0EB1FFFC602806D7F92C76C7F4A824A6E7F4A6E7FA2717FA285187F85A4721380 AC1A0060A36118FFA2615F616E4A5BA26E4A5B6E4A5B6F495B6F4990C7FC03F0EBFFFC91 26FBFE075B02F8B612E06F1480031F01FCC8FC030313C092CBFCB1B612F8A5414D7BB54B >I<90397FE003FEB590380FFF80033F13E04B13F09238FE1FF89139E1F83FFC0003D9E3 E013FEC6ECC07FECE78014EF150014EE02FEEB3FFC5CEE1FF8EE0FF04A90C7FCA55CB3AA B612FCA52F367CB537>114 D<903903FFF00F013FEBFE1F90B7FC120348EB003FD80FF8 1307D81FE0130148487F4980127F90C87EA24881A27FA27F01F091C7FC13FCEBFFC06C13 FF15F86C14FF16C06C15F06C816C816C81C681013F1580010F15C01300020714E0EC003F 030713F015010078EC007F00F8153F161F7E160FA27E17E07E6D141F17C07F6DEC3F8001 F8EC7F0001FEEB01FE9039FFC00FFC6DB55AD8FC1F14E0D8F807148048C601F8C7FC2C38 7CB635>I<143EA6147EA414FEA21301A313031307A2130F131F133F13FF5A000F90B6FC B8FCA426003FFEC8FCB3A9EE07C0AB011FEC0F8080A26DEC1F0015806DEBC03E6DEBF0FC 6DEBFFF86D6C5B021F5B020313802A4D7ECB34>II E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fd cmtt12 12 16 /Fd 16 121 df<121FEA3F80EA7FC0EAFFE0A5EA7FC0EA3F80EA1F000B0B6C8A33>46 D<127CB8128017C0A4178048C813004B5A4B5A007C4A5AC8485A5E151F4B5A4B5A93C7FC 5D5D4A5A14035D14075D140F5D141F5D143F5DA24AC8FCA25C5CA213015CA3495AA41307 5CA5130F5CAA6D5A6D5A2A3F7CBD33>55 DI64 D98 D102 DI<14E0EB03F8A2497EA36D5AA2EB00E091C8FCAA38 3FFFF8487FA47EEA0001B3AD007FB612C0B712E016F0A216E06C15C0243E78BD33>105 D<383FFFFC487FB5FCA27E7EC7FCB3B3AD003FB612F84815FCB712FEA26C15FC6C15F827 3D7ABC33>108 D111 DI<02FF137C0107EBE0FE011F13F0017F13FC90B512FE4814FF4813C03907FE003F4848 131F01F0130F484813071503485A491301127F90C7FC15005A5AA97E7E15017F123F6D13 0315076C7E6C6C130F6D131FD807FE137F3903FF81FF6CEBFFFE6C14FC6D13F86D13F001 0F13C0903801FE0090C8FCAF92387FFFFC92B512FEA46F13FC2F427CAB33>II<90381FFE0F90B5EA8F80000314FF120F5A5AEBF007387F800190C7FC00FE147F5A15 3FA37E007FEC1F0001C090C7FCEA3FF8EBFFC06C13FF6C14E0000314F8C680011F13FF01 001480020713C0EC007FED1FE0007C140F00FEEC07F01503A27EA27F15076D14E06D130F 6DEB3FC09038FE01FF90B61280160000FD5C00FC14F8D8F83F13E0D8780790C7FC242E79 AC33>II<3B3FFFC07FFF80486DB512C0B500F114E0A26C01E014C06C496C13803B00 FE000FE000017F495AEB3F804B5A6D6C48C7FC90380FE07E903807F0FEECF1FC903803FB F8EB01FF6D5B5D6E5A143F6E5A143F814A7E14FF903801FBF0ECF9F8903803F1FCEB07E0 157E90380FC07F011F6D7E90383F801F02007F496D7E01FE6D7E484813033B7FFFC03FFF E0B56C4813F0A46C496C13E02C2B7DAA33>120 D E %EndDVIPSBitmapFont %DVIPSBitmapFont: Fe cmr12 12 63 /Fe 63 123 df<9239FFC001FC020F9038F80FFF913B3F803E3F03C0913BFC00077E07E0 D903F890390FFC0FF0494890383FF81F4948EB7FF0495A494814E049C7FCF00FE0499139 3FC0038049021F90C7FCAFB912F0A3C648C7D81FC0C7FCB3B2486CEC3FF0007FD9FC0FB5 12E0A33C467EC539>11 D<4AB4FC020F13E091387F80F8903901FC001C49487FD907E013 0F4948137F011FECFF80495A49C7FCA25B49EC7F00163E93C7FCACEE3F80B8FCA3C648C7 FC167F163FB3B0486CEC7FC0007FD9FC1FB5FCA330467EC536>I<001EEB03C0397F800F F000FF131F01C013F8A201E013FCA3007F130F391E6003CC0000EB000CA401E0131C4913 18A3000114384913300003147090C712604814E0000614C0000E130148EB038048EB0700 48130E0060130C1E1D7DC431>34 D<140C141C1438147014E0EB01C01303EB0780EB0F00 A2131E5BA25B13F85B12015B1203A2485AA3485AA348C7FCA35AA2123EA2127EA4127CA3 12FCB3A2127CA3127EA4123EA2123FA27EA36C7EA36C7EA36C7EA212017F12007F13787F A27F7FA2EB0780EB03C01301EB00E014701438141C140C166476CA26>40 D<12C07E12707E7E7E120F6C7E6C7EA26C7E6C7EA21378137C133C133E131E131FA2EB0F 80A3EB07C0A3EB03E0A314F0A21301A214F8A41300A314FCB3A214F8A31301A414F0A213 03A214E0A3EB07C0A3EB0F80A3EB1F00A2131E133E133C137C13785BA2485A485AA2485A 48C7FC120E5A5A5A5A5A16647BCA26>I<121EEA7F8012FF13C0A213E0A3127FEA1E6012 00A413E013C0A312011380120313005A1206120E5A5A5A12600B1D78891B>44 DI<121EEA7F80A2EAFFC0A4EA7F80A2EA1E000A0A78891B>I<16 18163C167CA2167816F8A216F01501A216E01503A216C01507A21680150FA2ED1F00A215 1E153EA2153C157CA2157815F8A25D1401A24A5AA25D1407A25D140FA292C7FC5CA2141E 143EA2143C147CA25CA25C1301A25C1303A25C1307A25C130FA291C8FC5BA2133EA2133C 137CA2137813F8A25B1201A25B1203A2485AA25B120FA290C9FC5AA2121E123EA2123C12 7CA2127812F8A25A126026647BCA31>I<14FF010713E090381F81F890383E007C01FC13 3F4848EB1F8049130F4848EB07C04848EB03E0A2000F15F0491301001F15F8A2003F15FC A390C8FC4815FEA54815FFB3A46C15FEA56D1301003F15FCA3001F15F8A26C6CEB03F0A3 6C6CEB07E0000315C06D130F6C6CEB1F806C6CEB3F00013E137C90381F81F8903807FFE0 010090C7FC28447CC131>I<143014F013011303131F13FFB5FC13E713071200B3B3B049 7E497E007FB6FCA3204278C131>II< 49B4FC010F13E0013F13FC9038FE01FE3A01F0007F80D803C0EB3FC048C7EA1FE0120EED 0FF0EA0FE0486C14F8A215077F5BA26C48130FEA03C0C813F0A3ED1FE0A2ED3FC01680ED 7F0015FE4A5AEC03F0EC1FC0D90FFFC7FC15F090380001FCEC007FED3F80ED1FC0ED0FE0 16F0ED07F816FC150316FEA2150116FFA3121EEA7F80487EA416FE491303A2007EC713FC 00701407003015F80038140F6C15F06CEC1FE06C6CEB3FC0D803E0EB7F803A01FE01FE00 39007FFFF8010F13E0010190C7FC28447CC131>II<121CA2EA1F8090B712C0 A3481680A217005E0038C8120C0030151C00705D0060153016705E5E4814014B5A4BC7FC C81206150E5D151815385D156015E04A5AA24A5A140792C8FC5CA25C141E143EA2147E14 7CA214FCA21301A3495AA41307A6130FAA6D5AEB01C02A457BC231>55 D<14FF010713E0011F13F890387F00FE01FC133FD801F0EB1F804848EB0FC049EB07E000 07EC03F048481301A290C713F8481400A47FA26D130116F07F6C6CEB03E013FC6C6CEB07 C09039FF800F806C9038C01F006CEBF03EECF87839007FFEF090383FFFC07F01077F6D13 F8497F90381E7FFFD97C1F1380496C13C02601E00313E048486C13F000079038007FF848 48EB3FFC48C7120F003EEC07FE150148140016FF167F48153FA2161FA56C151E007C153E A2007E153C003E157C6C15F86DEB01F06C6CEB03E06C6CEB07C0D803F8EB1F80C6B4EBFF 0090383FFFFC010F13F00101138028447CC131>I<007FBAFCBB1280A26C1900CEFCB000 7FBAFCBB1280A26C190041187BA44C>61 D63 D<16C04B7EA34B7EA34B7EA34B7EA3ED19FEA3ED30FFA203707FED607FA203E07FEDC03F A2020180ED801FA2DA03007F160FA20206801607A24A6D7EA34A6D7EA34A6D7EA2027081 0260147FA202E08191B7FCA249820280C7121FA249C87F170FA20106821707A2496F7EA3 496F7EA3496F7EA201788313F8486C83D80FFF03037FB500E0027FEBFFC0A342477DC649 >65 DI< B8FC17F017FC00019039C00007FF6C499038007FC0017FED1FE0EF07F0EF03FC717E717E 84727E727E727EA2727E85180385A2180185A38584A31A80AD1A00A36061A36118036118 0761180F614E5A183F614EC7FC18FEEF03FC4D5AEF1FE001FFED7FC0486DD907FFC8FCB8 12FC17F094C9FC41447CC34B>68 DII72 DI76 D78 DII<49B41303010FEBE007 013F13F89039FE00FE0FD801F8131FD807E0EB079F49EB03DF48486DB4FC48C8FC488100 3E81127E82127C00FC81A282A37E82A27EA26C6C91C7FC7F7FEA3FF813FE381FFFE06C13 FE6CEBFFE06C14FC6C14FF6C15C0013F14F0010F80010180D9001F7F14019138001FFF03 031380816F13C0167F163F161F17E000C0150FA31607A37EA36C16C0160F7E17806C151F 6C16006C5D6D147ED8FBC05CD8F9F0495AD8F07C495A90393FC00FE0D8E00FB512800101 49C7FC39C0003FF02B487BC536>83 D<003FB912F8A3903BF0001FF8001F01806D481303 003EC7150048187C0078183CA20070181CA30060180CA5481806A5C81600B3B3A54B7EED 7FFE49B77EA33F447DC346>II87 D<003FB500E0011FB5FCA3C6 91C7000713E0D93FFC020190C7FC6D4815FC010F6F5A6D6C15E0A26D6C4A5A6D6C5D4DC8 FC6D6D5B6E6C13065F6E6C131C6E6C13185F6E6C13706E6C13605F913803FE01DA01FF5B 4CC9FC6E1387ED7FC616CCED3FFC6F5A5E6F7E6F7EA26F7E82A203067F150E92380C7FC0 4B6C7E15389238301FF04B6C7E15E04B6C7E4A486C7E14034B6C7E02066D7F140E020C6E 7E4A6E7E143802306E7E4A6E7E14E04A6E7E49486E7E130349C86C7E496F7F5B496C8201 FF83000701E0020313F8B500F8021FEBFFF0A344447EC349>II91 D<01C01318000114384848137048C712E0 000EEB01C0000C1480001C13030018140000385B003013060070130E0060130CA300E013 1C481318A400CFEB19E039FFC01FF801E013FCA3007F130FA2003F130701C013F8390F00 01E01E1D71C431>II97 DII<167FED3FFFA315018182B3EC7F80903803FFF090380FC07C 90383F000E017E1307496D5AD803F87F48487F5B000F81485AA2485AA2127FA290C8FC5A AB7E7FA2123FA26C7EA2000F5D7F6C6C5B00035C6C6C9038077F806C6C010E13C0013F01 1C13FE90380FC0F8903803FFE09026007F0013002F467DC436>III III107 DII<3901FC01FE00FF903807FFC091381E07F091383801F8000701707F 0003EBE0002601FDC07F5C01FF147F91C7FCA25BA35BB3A8486CECFF80B5D8F83F13FEA3 2F2C7DAB36>II<3901FC03FC00FF90380F FF8091383C07E091387001F83A07FDE000FE00030180137FD801FFEC3F8091C7EA1FC049 15E049140F17F0160717F8160317FCA3EE01FEABEE03FCA3EE07F8A217F0160F6D15E0EE 1FC06D143F17806EEB7E00D9FDC05B9039FCF003F891383C0FE091381FFF80DA03FCC7FC 91C9FCAE487EB512F8A32F3F7DAB36>I<91387F8003903903FFE00790380FE07890393F 801C0F90387E000E496D5AD803F8EB039F0007EC01BF4914FF48487F121F5B003F81A248 5AA348C8FCAB6C7EA3123F7F121F6D5C120F6D5B12076C6C5B6C6C497E6C6C130E013F13 1C90380FC0F8903803FFE09038007F0091C7FCAEEEFF80033F13FEA32F3F7DAB33>I<39 03F803F000FFEB1FFCEC3C3EEC707F0007EBE0FF3803F9C000015B13FBEC007E153C01FF 13005BA45BB3A748B4FCB512FEA3202C7DAB26>I<90383FE0183901FFFC383907E01F78 390F0003F8001E1301481300007C1478127800F81438A21518A27EA27E6C6C13006C7E13 FC383FFFE06C13FC6C13FF6C14C06C14E0C614F0011F13F81300EC0FFC140300C0EB01FE 1400157E7E153EA27EA36C143C6C147C15786C14F86CEB01F039F38003E039F1F00F8039 E07FFE0038C00FF01F2E7DAC26>I<1306A5130EA4131EA3133E137EA213FE1201120700 1FB512F0B6FCA2C648C7FCB3A4150CAA017E131C017F1318A26D133890381F8030ECC070 903807E0E0903801FFC09038007F001E3E7EBC26>III III<003FB612E0A29038C0003F90C713C0003CEC7F800038ECFF 00A20030495A0070495AA24A5A0060495AA24A5A4A5AA2C7485A4AC7FC5B5C495A13075C 495A131F4A1360495A495AA249C712C0485AA2485A485A1501485A48481303A24848EB07 804848131F00FF14FF90B6FCA2232B7DAA2B>I E %EndDVIPSBitmapFont %DVIPSBitmapFont: Ff cmbx12 17.28 18 /Ff 18 116 df<16F04B7E1507151F153FEC01FF1407147F010FB5FCB7FCA41487EBF007 C7FCB3B3B3B3007FB91280A6395E74DD51>49 D65 D<4DB5ED03C0057F02F014070407B600FE140F047FDBFFC0 131F4BB800F0133F030F05FC137F033F9127F8007FFE13FF92B6C73807FF814A02F00201 13C3020702C09138007FE74A91C9001FB5FC023F01FC16074A01F08291B5488249028082 4991CB7E49498449498449498449865D49498490B5FC484A84A2484A84A24891CD127FA2 5A4A1A3F5AA348491A1FA44899C8FCA25CA3B5FCB07E071FB812F880A37EA296C70001EC C000A26C7FA37E807EA26C80A26C80A26C807F6D7F816D7F7F6D7F6D6D5F6D14C06D6E5E 6E7F6E01FC5E020F01FF5E6E02C0ED7FEF020102F8EDFFC76E02FF02071383033F02FC01 3F1301030F91B638FC007F03014D131F6F6C04E01307040704801301DC007F02F8CAFC05 0191CBFC6D6677E37F>71 D76 D80 D<001FBEFCA64849C79126E0000F 148002E0180091C8171F498601F81A0349864986A2491B7FA2491B3F007F1DC090C9181F A4007E1C0FA600FE1DE0481C07A5CA95C7FCB3B3B3A3021FBAFCA663617AE070>84 DI<913803FFFE02 7FEBFFF00103B612FE010F6F7E4916E090273FFE001F7FD97FE001077FD9FFF801017F48 6D6D7F717E486D6E7F85717FA2717FA36C496E7FA26C5B6D5AEB1FC090C9FCA74BB6FC15 7F0207B7FC147F49B61207010F14C0013FEBFE004913F048B512C04891C7FC485B4813F8 5A5C485B5A5CA2B55AA45FA25F806C5E806C047D7F6EEB01F96C6DD903F1EBFF806C01FE D90FE114FF6C9027FFC07FC01580000191B5487E6C6C4B7E011F02FC130F010302F00101 1400D9001F90CBFC49437CC14E>97 D<92380FFFF04AB67E020F15F0023F15FC91B77E01 039039FE001FFF4901F8010113804901E0010713C04901804913E0017F90C7FC49484A13 F0A2485B485B5A5C5A7113E0485B7113C048701380943800FE0095C7FC485BA4B5FCAE7E A280A27EA2806C18FCA26C6D150119F87E6C6D15036EED07F06C18E06C6D150F6D6DEC1F C06D01E0EC7F806D6DECFF00010701FCEB03FE6D9039FFC03FFC010091B512F0023F5D02 0F1580020102FCC7FCDA000F13C03E437BC148>99 D<92380FFFC04AB512FC020FECFF80 023F15E091B712F80103D9FE037F499039F0007FFF011F01C0011F7F49496D7F4990C76C 7F49486E7F48498048844A804884485B727E5A5C48717EA35A5C721380A2B5FCA391B9FC A41A0002C0CBFCA67EA380A27EA27E6E160FF11F806C183F6C7FF17F006C7F6C6D16FE6C 17016D6C4B5A6D6D4A5A6D01E04A5A6D6DEC3FE0010301FC49B45A6D9026FFC01F90C7FC 6D6C90B55A021F15F8020715E0020092C8FC030713F041437CC14A>101 D103 D<903807FF80B6FCA6C6FC7F7FB3A8EF1FFF94 B512F0040714FC041F14FF4C8193267FE07F7F922781FE001F7FDB83F86D7FDB87F07FDB 8FC0814C7F039FC78015BE03BC8003FC825DA25DA25DA45DB3B2B7D8F007B71280A65164 7BE35A>II< 902607FF80D91FFFEEFFF8B691B500F00207EBFF80040702FC023F14E0041F02FF91B612 F84C6F488193267FE07F6D4801037F922781FE001F9027E00FF0007FC6DA83F86D9026F0 1FC06D7F6DD987F06D4A487F6DD98FC0DBF87EC7804C6D027C80039FC76E488203BEEEFD F003BC6E4A8003FC04FF834B5FA24B5FA24B94C8FCA44B5EB3B2B7D8F007B7D8803FB612 FCA67E417BC087>109 D<923807FFE092B6FC020715E0021F15F8027F15FE494848C66C 6C7E010701F0010F13E04901C001037F49496D7F4990C87F49486F7E49486F7E48496F13 804819C04A814819E048496F13F0A24819F8A348496F13FCA34819FEA4B518FFAD6C19FE A46C6D4B13FCA36C19F8A26C6D4B13F0A26C19E06C6D4B13C0A26C6D4B13806C6D4B1300 6D6C4B5A6D6D495B6D6D495B010701F0010F13E06D01FE017F5B010090B7C7FC023F15FC 020715E0020092C8FC030713E048437CC151>111 D<902607FF80EBFFF8B6010FEBFF80 047F14F00381B612FC038715FF038F010114C09227BFF0003F7FC6DAFFC0010F7F6D91C7 6C7F6D496E7F03F86E7F4B6E7F4B17804B6F13C0A27313E0A27313F0A21BF885A21BFCA3 851BFEAE4F13FCA41BF861A21BF0611BE0611BC06F92B512801B006F5C6F4A5B6F4A5B03 FF4A5B70495B04E0017F13C09226CFFC03B55A03C7B648C7FC03C115F803C015E0041F91 C8FC040313E093CBFCB3A3B712F0A64F5D7BC05A>I114 D<913A3FFF8007800107B5EAF81F011FECFE7F017F91B5FC48B8FC48EBE00148 90C7121FD80FFC1407D81FF0801600485A007F167F49153FA212FF171FA27F7F7F6D92C7 FC13FF14E014FF6C14F8EDFFC06C15FC16FF6C16C06C16F06C826C826C826C82013F1680 010F16C01303D9007F15E0020315F0EC001F1500041F13F81607007C150100FC81177F6C 163FA2171F7EA26D16F0A27F173F6D16E06D157F6D16C001FEEDFF806D0203130002C0EB 0FFE02FCEB7FFC01DFB65A010F5DD8FE0315C026F8007F49C7FC48010F13E035437BC140 >I E %EndDVIPSBitmapFont end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%PaperSize: A4 %%EndSetup %%Page: 1 1 1 0 bop 328 631 a Ff(1)161 b(The)53 b(Graphics)h(Program)f(PLA)l(UT)328 850 y Fe(is)45 b(a)g(program)f(that)h(can)h(b)s(e)f(used)i(to)e (extract)h(graphical)d(information)f(from)i(the)328 970 y(A)m(UTO)34 b(output)f(\014les)h Fd(fort.7)g Fe(and)g Fd(fort.8)p Fe(.)46 b(These)35 b(\014les)f(are)f(referred)h(to)f(b)s (elo)m(w)g(as)328 1091 y(Unit)27 b(7)g(and)h(Unit)f(8,)i(resp)s(ectiv)m (ely)-8 b(.)42 b(When)29 b(sa)m(v)m(ed,)i(these)e(\014les)e(are)h (called)f Fd(p.xxx)i Fe(and)328 1211 y Fd(q.xxx)p Fe(,)34 b(resp)s(ectiv)m(ely)-8 b(,)33 b(where)h Fd(xxx)g Fe(stands)f(for)f(a)h (user)g(selected)h(name.)328 1500 y Fc(1.1)135 b(The)45 b(Principal)g(PLA)l(UT)f(Commands)328 1685 y Fe(The)33 b(principal)e(PLA)m(UT)j(commands)e(are)328 1913 y Fb(BD0)37 b(|)49 b Fe(This)39 b(command)f(is)g(useful)h(for)f(an)h(initial)c(o)m (v)m(erview)41 b(of)d(the)h(bifurcation)572 2033 y(diagram)d(as)j (stored)h(in)e(Unit)g(7.)62 b(If)39 b(y)m(ou)g(ha)m(v)m(e)h(not)f (previously)g(selected)g(one)572 2154 y(of)c(the)h(default)e(options)h (\(D0,)h(D1,)f(D2,)h(D3,)f(or)g(D4\))g(describ)s(ed)h(b)s(elo)m(w,)g (then)572 2274 y(y)m(ou)j(will)e(b)s(e)h(ask)m(ed)j(whether)f(y)m(ou)f (w)m(an)m(t)h(solution)d(lab)s(els,)i(grid)e(lines,)j(titles,)572 2395 y(or)32 b(lab)s(eled)f(axes.)328 2598 y Fb(BD)37 b(|)49 b Fe(This)36 b(command)g(is)f(the)i(same)f(as)h(the)g(BD0)f (command,)g(except)i(that)e(y)m(ou)572 2718 y(will)24 b(b)s(e)i(ask)m(ed)i(to)e(en)m(ter)h(the)f(minim)m(um)d(and)k(the)f (maxim)m(um)e(of)i(the)g(horizon)m(tal)572 2839 y(and)i(v)m(ertical)f (axes.)43 b(This)27 b(is)h(useful)f(for)h(blo)m(wing)e(up)i(p)s (ortions)f(of)g(a)h(previously)572 2959 y(displa)m(y)m(ed)33 b(bifurcation)e(diagram.)328 3163 y Fb(AX)37 b(|)48 b Fe(With)37 b(the)g(AX)h(command)e(y)m(ou)h(can)h(select)f(an)m(y)h (pair)e(of)h(columns)f(of)h(real)572 3283 y(n)m(um)m(b)s(ers)d(from)e (Unit)g(7)h(as)g(horizon)m(tal)f(and)h(v)m(ertical)g(axis)f(in)h(the)g (bifurcation)572 3403 y(diagram.)50 b(\(The)36 b(default)f(is)g (columns)g(1)g(and)h(2\).)52 b(T)-8 b(o)35 b(determine)h(what)f(these) 572 3524 y(columns)28 b(represen)m(t,)k(one)d(can)g(lo)s(ok)e(at)i(the) g(screen)i(ouput)e(of)f(the)h(corresp)s(ond-)572 3644 y(ing)k(A)m(UTO)j(run,)f(or)f(one)h(can)g(insp)s(ect)g(the)g(column)e (headings)h(in)g(the)h(Unit)f(7)572 3764 y(\014le.)328 3968 y Fb(2D)j(|)49 b Fe(Up)s(on)43 b(en)m(tering)f(the)h(2D)f (command,)i(the)f(lab)s(els)f(of)g(all)f(solutions)g(stored)572 4088 y(in)h(Unit)h(8)f(will)f(b)s(e)i(listed)g(and)g(y)m(ou)h(can)f (select)h(one)f(or)g(more)f(of)h(these)h(for)572 4209 y(displa)m(y)-8 b(.)42 b(The)32 b(n)m(um)m(b)s(er)f(of)f(solution)f (comp)s(onen)m(ts)i(is)f(also)g(listed)g(and)h(y)m(ou)g(will)572 4329 y(b)s(e)40 b(prompted)g(to)g(select)h(t)m(w)m(o)g(of)f(these)h(as) g(horizon)m(tal)e(and)h(v)m(ertical)f(axis)i(in)572 4449 y(the)29 b(displa)m(y)-8 b(.)42 b(Note)29 b(that)g(the)g(\014rst)g (comp)s(onen)m(t)g(is)g(t)m(ypically)e(the)j(indep)s(enden)m(t)572 4570 y(time)h(or)h(space)i(v)-5 b(ariable)31 b(scaled)h(to)h(the)g(in)m (terv)-5 b(al)31 b([0,1].)328 4773 y Fb(SA)-12 b(V)36 b(|)49 b Fe(T)-8 b(o)44 b(sa)m(v)m(e)h(the)f(displa)m(y)m(ed)g(plot)f (in)g(a)g(\014le.)76 b(Y)-8 b(ou)44 b(will)d(b)s(e)j(ask)m(ed)h(to)f (en)m(ter)572 4894 y(a)g(\014le)g(name.)79 b(Eac)m(h)45 b(plot)f(m)m(ust)g(b)s(e)h(stored)g(in)f(a)g(separate)h(new)h(\014le.) 79 b(The)1922 5214 y(1)p eop %%Page: 2 2 2 1 bop 572 631 a Fe(plot)34 b(is)h(stored)h(in)f(compact)f(PLOT10)i (format,)f(whic)m(h)g(can)h(b)s(e)g(con)m(v)m(erted)h(to)572 751 y(P)m(ostscript)27 b(format)e(with)h(the)h(A)m(UTO)g Fd(@ps)g Fe(and)g Fd(@pr)g Fe(commands)f(\(See)h(Section)572 872 y(???.\))328 1075 y Fb(CL)38 b(|)48 b Fe(T)-8 b(o)33 b(clear)f(the)h(graphics)f(windo)m(w.)328 1279 y Fb(LAB)37 b(|)49 b Fe(T)-8 b(o)50 b(list)e(the)i(lab)s(els)e(of)h(all)f (solutions)h(stored)h(in)f(Unit)g(8.)94 b(Note)50 b(that)572 1399 y(PLA)m(UT)44 b(requires)g(all)d(lab)s(els)h(to)h(b)s(e)g (distinct.)75 b(In)44 b(case)g(of)e(m)m(ultiple)f(lab)s(els)572 1519 y(y)m(ou)h(can)g(use)h(the)f(A)m(UTO)h(command)d Fd(@lb)j Fe(to)e(relab)s(el)f(solutions)h(in)g(Unit)g(7)572 1640 y(and)32 b(Unit)g(8.)328 1843 y Fb(END)k(|)49 b Fe(T)-8 b(o)33 b(end)g(execution)g(of)f(PLA)m(UT.)328 2132 y Fc(1.2)135 b(Default)46 b(Options)328 2317 y Fe(After)40 b(en)m(tering)g(the)g(commands)f(BD0,)i(BD,)f(or)g(2D,)f(y)m(ou)h(will) e(b)s(e)i(ask)m(ed)h(whether)328 2437 y(y)m(ou)34 b(w)m(an)m(t)g (solution)d(lab)s(els,)i(grid)f(lines,)g(titles,)g(or)h(axes)h(lab)s (els.)44 b(F)-8 b(or)33 b(quic)m(k)h(plotting)328 2557 y(it)g(is)g(con)m(v)m(enien)m(t)j(to)e(b)m(ypass)i(these)f(selections.) 51 b(This)35 b(can)g(b)s(e)h(done)f(b)m(y)h(the)f(default)328 2678 y(commands)g(D0,)h(D1,)g(D2,)g(D3,)g(or)g(D4)f(b)s(elo)m(w.)53 b(These)38 b(can)e(b)s(e)g(en)m(tered)h(as)f(a)g(single)328 2798 y(command)24 b(b)s(efore)h(the)g(BD0)g(or)g(BD)f(command,)i(or)e (they)i(can)g(b)s(e)f(en)m(tered)i(as)e(pre\014xes)328 2919 y(in)h(the)i(BD0)f(or)g(BD)g(command.)40 b(Th)m(us,)30 b(for)d(example,)h(one)f(can)h(en)m(ter)g(the)g(command)328 3039 y(D1BD0.)328 3267 y Fb(D0)37 b(|)49 b Fe(Use)34 b(solid)d(curv)m(es,)j(sho)m(wing)f(solution)e(lab)s(els)h(and)g(sym)m (b)s(ols.)328 3471 y Fb(D1)37 b(|)49 b Fe(Use)29 b(solid)d(curv)m(es,) 31 b(except)e(use)g(dashed)g(curv)m(es)h(for)d(unstable)h(solutions)f (and)572 3591 y(for)32 b(solutions)f(of)h(unkno)m(wn)j(stabilit)m(y)-8 b(.)41 b(Sho)m(w)34 b(solution)d(lab)s(els)g(and)i(sym)m(b)s(ols.)328 3794 y Fb(D2)k(|)49 b Fe(As)33 b(D1,)f(but)h(with)f(grid)g(lines.)328 3998 y Fb(D3)37 b(|)49 b Fe(As)41 b(D1,)g(except)h(for)e(p)s(erio)s (dic)e(solutions)i(use)h(solid)e(circles)h(if)f(stable,)j(and)572 4118 y(op)s(en)33 b(circles)f(if)f(unstable)i(or)f(if)g(the)h(stabilit) m(y)d(is)j(unkno)m(wn.)328 4322 y Fb(D4)k(|)49 b Fe(Use)34 b(solid)d(curv)m(es,)j(without)f(lab)s(els)e(and)h(sym)m(b)s(ols.)474 4550 y(If)i(no)f(default)g(option)g(\(D0,)g(D1,)g(D2,)g(D3,)g(or)h (D4\))e(has)i(b)s(een)h(selected)f(or)g(if)e(y)m(ou)328 4670 y(w)m(an)m(t)46 b(to)f(o)m(v)m(erride)i(a)e(default)g(feature,)k (then)d(the)g(the)g(follo)m(wing)d(commands)h(can)328 4791 y(b)s(e)37 b(used.)58 b(These)39 b(can)e(b)s(e)g(en)m(tered)i(as)e (individual)e(commands)h(or)h(as)g(pre\014xes.)59 b(F)-8 b(or)328 4911 y(example,)32 b(one)h(can)g(en)m(ter)g(the)g(command)f (SYDPBD0.)1922 5214 y(2)p eop %%Page: 3 3 3 2 bop 328 631 a Fb(SY)37 b(|)49 b Fe(Use)34 b(sym)m(b)s(ols)e(for)g (sp)s(ecial)g(solution)f(p)s(oin)m(ts,)h(for)g(example,)g(op)s(en)h (square)h(=)572 751 y(bifurcation,)d(solid)g(square)j(=)e(Hopf)g (bifurcation.)328 955 y Fb(DP)37 b(|)49 b Fe(\\Di\013eren)m(tial)24 b(Plots",)j(i.e.,)g(sho)m(w)h(stabilit)m(y)d(of)h(the)h(solutions.)41 b(Solid)25 b(curv)m(es)572 1075 y(represen)m(t)41 b(stable)e (solutions.)63 b(Dashed)40 b(curv)m(es)h(are)f(used)g(for)f(unstable)h (solu-)572 1196 y(tions)45 b(and)h(for)g(solutions)e(of)i(unkno)m(wn)i (stabilit)m(y)-8 b(.)81 b(F)-8 b(or)45 b(p)s(erio)s(dic)g(solutions)572 1316 y(use)32 b(solid)f(and)g(op)s(en)h(circles)f(to)h(indicate)e (stabilit)m(y/instabilit)m(y)e(\(or)j(unkno)m(wn)572 1436 y(stabilit)m(y\).)328 1640 y Fb(ST)38 b(|)48 b Fe(Set)33 b(up)g(titles)f(and)g(axes)i(lab)s(els.)328 1843 y Fb(NU)j(|)49 b Fe(Normal)30 b(usage)k(\(reset)f(sp)s(ecial)f(options\).)328 2132 y Fc(1.3)135 b(Other)45 b(PLA)l(UT)g(Commands)328 2317 y Fe(The)34 b(full)d(PLA)m(UT)k(program)d(has)h(sev)m(eral)h (other)f(capabilities.)43 b(The)34 b(most)f(useful)g(of)328 2437 y(the)g(additional)d(commands)h(are)328 2665 y Fb(SCR)37 b(|)49 b Fe(T)-8 b(o)33 b(c)m(hange)g(the)g(diagram)d(size.)328 2869 y Fb(RSS)37 b(|)49 b Fe(T)-8 b(o)33 b(c)m(hange)g(the)g(size)g(of) f(sp)s(ecial)g(p)s(oin)m(t)g(sym)m(b)s(ols.)328 3158 y Fc(1.4)135 b(Prin)l(ting)46 b(PLA)l(UT)e(Files)328 3342 y Fd(@ps)38 b Fb(|)49 b Fe(T)-8 b(o)23 b(con)m(v)m(ert)i(a)e(PLA)m (UT)h(\014le)f Fd(fig.x)h Fe(to)f Fa(PostScript)f Fe(format)f(as)j Fd(fig.x.ps)p Fe(.)328 3546 y Fd(@pr)38 b Fb(|)49 b Fe(T)-8 b(o)40 b(con)m(v)m(ert)i(a)e(PLA)m(UT)h(\014le)f Fd(fig.x)h Fe(to)f Fa(PostScript)p Fe(,)h(and)f(to)g(send)h(the)572 3666 y(resulting)31 b(\014le)i Fd(fig.x.ps)h Fe(to)e(the)h(prin)m(ter.) 1922 5214 y(3)p eop %%Trailer end userdict /end-hook known{end-hook}if %%EOF auto/07p/plaut/plautmain.f0000640000175000017500000005203113570013207013531 0ustar skskC----------------------------------------------------------------------- C----------------------------------------------------------------------- C PLAUT : A program for plotting AUTO Unit 7 and Unit 8 Output C----------------------------------------------------------------------- C----------------------------------------------------------------------- C AUTHORS : - WILLIAM R. MORRILL (MAY 15, 1982) C - PATRICK P.C. LEUNG (NOV. 3, 1982) MODIFIED C - MIKE MIKALAJUNAS (FEB. 1, 1984) MODIFIED C - NGUYEN, THANH LONG (JUN. 1, 1985) MODIFIED + 3D C----------------------------------------------------------------------- C----------------------------------------------------------------------- C THE MAIN PROGRAM SETS UP INITIAL USER OPTIONS. IT READS AND DECODES C USER OPTIONS AND COMMANDS, SETTING THE APPROPRIATE FLAGS IN COMMON C AREA /UOPTS/ AND CALLS SUBROUTINES TO EXECUTE THE INDICATED COMMAND. C USER OPTIONS CAN BE SEPARATE FROM OR PREFIXED TO THE BASIC COMMAND C----------------------------------------------------------------------- C----------------------------------------------------------------------- C--- USE COMPAT CHARACTER*80 ISTR,OSTR,PART2*2,INB,INS CHARACTER*4 TTITLE*80,BTITLE*80 * ,XLAB*80,YLAB*80 CHARACTER*1 CH,NOTC*10 LOGICAL DFT,USR,PLTR,BRNCH,POINT,TIT,AXLB,QLBS,GRIDS,DP LOGICAL TOP,BOTTOM,CHECKB,CHECKQ,SAVE,SYMBOL LOGICAL QSCOM,CAXIS,ERRQ,INTGLB,DDIM,IBD2 LOGICAL B3DC INTEGER ERROR,XAXS,YAXS,PARRY(1999) INTEGER SPLPT,NVX(2) INTEGER SLAB(1999),ERROR8,ICD(4) INTEGER SYMBL(10),ITP(10) INTEGER ENLAB(1999),ICDS(4),ID2D(1999),IDS2D(1999) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY COMMON /LABLS/TTITLE,BTITLE,XLAB,YLAB COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, * MINSY,MAXSY,NVX,SPLPT COMMON /UOPTS/DFT,USR,BRNCH, * ICL,ICT,TOP,BOTTOM,TIT,AXLB,QLBS,GRIDS,DP COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /QSC/ QSCOM COMMON /PLOTT/ PLTR,POINT COMMON /INKA/ CAXIS COMMON /LBQ/ SLAB,NLAB,NAXIS,ENLAB,NUMLB COMMON /DIFFA/ DDIM COMMON /IAOCS/ RIDASH,RIDOT,RICIR,RISYBL,RIDIS,RIDSHS COMMON /UTDSH/ UDSH,UDSHS,ULD,USD,RIDS1 COMMON /BD2/ IBD2 COMMON /RADI/ RASY,RATY,RADI,RADINC COMMON /SY2D/ ID2D,IDS2D COMMON /BDSY/ ITP,SYMBL COMMON /AXB3D/ IB3DX,IB3DY,IB3DZ COMMON /CB3D/ B3DC COMMON /SPNUM/ SP1,SP2,SP3,SP4 C--- IF(AUTARGC()==2)THEN CALL AUTGETARG(1,INB) CALL AUTGETARG(2,INS) ELSE INB='fort.17' INS='fort.18' ENDIF OPEN(17,FILE=INB,STATUS='unknown',ACCESS='sequential') OPEN(18,FILE=INS,STATUS='unknown',ACCESS='sequential') C IWRITE = 6 ITERM = 6 ISAVE = 16 NVX(1) = 1 NVX(2) = 2 XLAB = ' ' YLAB = ' ' TTITLE = ' ' BTITLE = ' ' CHECKB = .FALSE. CHECKQ = .FALSE. USR = .FALSE. DFT = .FALSE. QLBS = .FALSE. PLTR = .FALSE. POINT = .FALSE. BRNCH = .FALSE. DP = .FALSE. SYMBOL = .FALSE. QSCOM = .FALSE. CAXIS = .FALSE. ERRQ = .FALSE. INTGLB = .TRUE. DDIM = .FALSE. IBD2 = .FALSE. B3DC = .FALSE. SAVE = .FALSE. ICD(1) = 1 ICD(2) = 2 ICD(3) = 3 ICD(4) = 4 IB3DX = 1 IB3DY = 3 IB3DZ = 4 CALL IBDSY(ITP,SYMBL) CALL ICDS0(ICDS) C--- *SCREEN SIZE CALL DFREV CALL DFITVL C--- *RELATIVE DIMENSION CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) OSTR = ' ENTER IN CASE OF DIFFICULTY' WRITE(IWRITE,1)OSTR 10 OSTR = ' ENTER COMMAND' WRITE(IWRITE,1)OSTR CALL READS8(ISTR) C--- *TERMINATION 11 IF(ISTR.EQ.'STOP'.OR.ISTR.EQ.'stop'.OR. + ISTR.EQ.'EXIT'.OR.ISTR.EQ.'exit'.OR. + ISTR.EQ.'QUIT'.OR.ISTR.EQ.'quit'.OR. + ISTR.EQ.'END' .OR.ISTR.EQ.'end') STOP C--- *SCREEN IF(ISTR.EQ.'SCR'.OR.ISTR.EQ.'SCREEN'.OR. + ISTR.EQ.'scr'.OR.ISTR.EQ.'screen') THEN WRITE(ITERM,46) MINSX,MAXSX,MINSY,MAXSY,SP1 READ(5,*,END=10,ERR=10) MINSX,MAXSX,MINSY,MAXSY GO TO 10 END IF C--- *SET SYMBOL IF (ISTR.EQ.'SS'.OR.ISTR.EQ.'ss'.OR. + ISTR.EQ.'SET SYM'.OR.ISTR.EQ.'set sym') THEN RADI = RASY CALL SHWSYS GO TO 10 END IF C--- *SET DIFFERENTIAL PLOTS IF (ISTR.EQ.'SD '.OR.ISTR.EQ.'sd ') THEN CALL SDFPLT(ICD,ICDS) ITS = 1 GOTO 10 ENDIF C--- *LABEL IF (ISTR.EQ.'LAB'.OR.ISTR.EQ.'LABEL'.OR. + ISTR.EQ.'lab'.OR.ISTR.EQ.'label') THEN CALL GERR (ERRQ,IERR8,ERROR8,INTGLB,1) GO TO 10 END IF C--- *CLEAR IF (ISTR.EQ.'C'.OR.ISTR.EQ.'c'.OR. + ISTR.EQ.'CL'.OR.ISTR.EQ.'cl'.OR. + ISTR.EQ.'CLR'.OR.ISTR.EQ.'clr'.OR. + ISTR.EQ.'CLEAR'.OR.ISTR.EQ.'clear') THEN CALL PLCMDS(1) CALL PLCHDW(3) GO TO 10 END IF C--- *SAVE IF (ISTR.EQ.'SAVE'.OR.ISTR.EQ.'save'.OR. + ISTR.EQ.'SAV' .OR.ISTR.EQ.'sav' .OR. + ISTR.EQ.'SA' .OR.ISTR.EQ.'sa' .OR. + ISTR.EQ.'S' .OR.ISTR.EQ.'s' ) THEN C--- *SAVE COMMAND FOR "BD" IF (CHECKB) THEN SAVE = .FALSE. CALL ASKSVE(SAVE) IF (SAVE) CALL CRFLNM(1) CALL BDS(ISTR,I+2,SAVE,ICDS,ICD,SYMBOL) CALL PLCHDW(3) IF (SAVE) CALL CRFLNM(2) CALL ASKSVE(SAVE) CHECKB = .FALSE. ELSE IF (CHECKQ) THEN C--- *SAVE COMMAND FOR "2D" IWRITE = ISAVE IF (SAVE) CALL CRFLNM(1) CALL SPAGE CALL DRW2D(XAXS,YAXS,PARRY,ERROR,NUM,POINT,PLTR) CALL PLCHDW(3) IF (SAVE) CALL CRFLNM(2) IWRITE = ITERM CALL COMPLT CHECKQ = .FALSE. END IF GO TO 10 END IF C--- *HELP IF (ISTR.EQ.'HELP'.OR.ISTR.EQ.'help') THEN CALL HELPS(ISTR) IF(ISTR.NE.' ') GO TO 11 GO TO 10 END IF C--- *SHOW SYMBOL IF (ISTR.EQ.'SY '.OR.ISTR.EQ.'sy '.OR. + ISTR.EQ.'SYM '.OR.ISTR.EQ.'sym '.OR. + ISTR.EQ.'SYMBOL'.OR.ISTR.EQ.'symbol') THEN SYMBOL = .TRUE. GO TO 10 END IF C--- *SYMBOL I = 1 DO 100 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'SY'.OR.PART2.EQ.'sy') THEN SYMBOL = .TRUE. ITS = 1 END IF I = I + 2 100 CONTINUE C--- *DIFFERENTIAL PLOTS I = 1 DO 103 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'DP'.OR.PART2.EQ.'dp') THEN DP = .TRUE. ITS = 1 END IF I = I + 2 103 CONTINUE C--- *VERTICAL AXIS I = 1 DO 105 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'AX'.OR.PART2.EQ.'ax') THEN OSTR = ' ENTER HORIZONTAL AND VERTICAL AXIS NUMBER (1,2,...) :' WRITE(IWRITE,1)OSTR READ(5,*,ERR=10)(NVX(L),L=1,2) ITS = 1 IBD2 = .FALSE. ENDIF I = I + 2 105 CONTINUE C--- *SET TITLES I = 1 DO 106 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'ST'.OR.PART2.EQ.'st') THEN CALL ENTGRD(1) TIT = .TRUE. AXLB = .TRUE. QLBS = .FALSE. ITS = 1 END IF I = I + 2 106 CONTINUE C--- *D0 I = 1 DO 107 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'D0'.OR.PART2.EQ.'d0') THEN DFT = .TRUE. USR = .FALSE. BRNCH = .FALSE. POINT = .FALSE. TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. QLBS = .TRUE. GRIDS = .FALSE. SYMBOL = .TRUE. DP = .FALSE. ICD(1) = 1 ICD(2) = 1 ICD(3) = 1 ICD(4) = 1 ITS = 1 CALL ICDS0(ICDS) END IF I = I + 2 107 CONTINUE C--- *D1 I = 1 DO 108 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'D1'.OR.PART2.EQ.'d1') THEN DFT = .TRUE. USR = .FALSE. BRNCH = .FALSE. POINT = .TRUE. TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. QLBS = .TRUE. GRIDS = .FALSE. SYMBOL = .TRUE. DP = .TRUE. ICD(1) = 1 ICD(2) = 2 ICD(3) = 1 ICD(4) = 2 ITS = 1 CALL ICDS0(ICDS) END IF I = I + 2 108 CONTINUE C--- *D2 I = 1 DO 109 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'D2'.OR.PART2.EQ.'d2') THEN DFT = .TRUE. USR = .FALSE. BRNCH = .FALSE. POINT = .FALSE. TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. QLBS = .TRUE. GRIDS = .FALSE. SYMBOL = .TRUE. DP = .TRUE. ICD(1) = 1 ICD(2) = 2 ICD(3) = 1 ICD(4) = 2 ITS = 1 CALL ICDS0(ICDS) END IF I = I + 2 109 CONTINUE C--- *D3 I = 1 DO 110 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'D3'.OR.PART2.EQ.'d3') THEN DFT = .TRUE. USR = .FALSE. BRNCH = .FALSE. POINT = .TRUE. TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. QLBS = .TRUE. GRIDS = .TRUE. SYMBOL = .TRUE. DP = .TRUE. ICD(1) = 1 ICD(2) = 2 ICD(3) = 1 ICD(4) = 2 ITS = 1 CALL ICDS0(ICDS) END IF I = I + 2 110 CONTINUE C--- *D4 I = 1 DO 111 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'D4'.OR.PART2.EQ.'d4') THEN DFT = .TRUE. USR = .FALSE. BRNCH = .FALSE. POINT = .FALSE. TIT = .FALSE. TOP = .FALSE. BOTTOM = .FALSE. AXLB = .FALSE. QLBS = .TRUE. GRIDS = .TRUE. SYMBOL = .TRUE. DP = .TRUE. ICD(1) = 1 ICD(2) = 2 ICD(3) = 1 ICD(4) = 2 ITS = 1 CALL ICDS0(ICDS) END IF I = I + 2 111 CONTINUE C--- *NU (NORMAL USE) I = 1 DO 112 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'NU'.OR.PART2.EQ.'nu') THEN DFT = .FALSE. USR = .FALSE. DP = .FALSE. QLBS = .FALSE. SYMBOL = .FALSE. CALL DFSCR(MINSX,MAXSX,MINSY,MAXSY) ICD(1) = 1 ICD(2) = 2 ICD(3) = 3 ICD(4) = 4 ITS = 1 IBD2 = .FALSE. END IF I = I + 2 112 CONTINUE C--- *"EXPERT" I = 1 DO 113 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'XP'.OR.PART2.EQ.'xp') THEN USR = .TRUE. DFT = .FALSE. QLBS = .FALSE. ITS = 1 IBD2 = .FALSE. END IF I = I + 2 113 CONTINUE C--- *EXECUTE BD COMMANDS I = 1 DO 114 J=1,6 PART2 = ISTR(I:I+1) IF (PART2.EQ.'BD'.OR.PART2.EQ.'bd') THEN IP2=I+2 CALL BDS(ISTR,IP2,SAVE,ICDS,ICD,SYMBOL) CALL PLCHDW(3) CHECKB = .TRUE. ITS = 0 GO TO 10 END IF I = I + 2 114 CONTINUE C--- *EXECUTE B3D IF (ISTR.EQ.'B3D'.OR.ISTR.EQ.'b3d') THEN QSCOM = .TRUE. CALL EXB3D QSCOM = .FALSE. IBD2 = .FALSE. GO TO 10 END IF C--- *EXECUTE HELP <3D> IF (ISTR.EQ.'HELP3D'.OR.ISTR.EQ.'help3d'.OR. + ISTR.EQ.'H3D '.OR.ISTR.EQ.'h3d ') THEN CALL LIST3D OSTR = ' FOR MORE DETAIL ON <3D> COMMANDS' WRITE(IWRITE,1) OSTR READ(5,20,END=10) NOTC 20 FORMAT(A10) IF (NOTC.NE.' ') GO TO 10 CALL HELP3D(NOTC,0) GO TO 10 END IF C--- *EXECUTE <2D> I = 1 PART2 = ISTR(I:I+1) IF (PART2.EQ.'3D'.OR.PART2.EQ.'3d') THEN CALL GERR(ERRQ,IERR8,ERROR8,INTGLB,3) IF (ERROR8.NE.0) GO TO 10 QSCOM = .TRUE. CH = ISTR(3:3) IF (CH.EQ.' ') I = I+1 CALL C2D3D(ISTR,I+2,XAXS,YAXS,PARRY,NUM,CHECKQ) QSCOM = .FALSE. IBD2 = .FALSE. GO TO 10 END IF C--- IF (PART2.EQ.'2D'.OR.PART2.EQ.'2d') THEN CALL GERR(ERRQ,IERR8,ERROR8,INTGLB,2) IF (ERROR8.NE.0) GO TO 10 CH = ISTR(3:3) IF (CH.EQ.' ') I = I+1 CALL C2D3D(ISTR,I+2,XAXS,YAXS,PARRY,NUM,CHECKQ) ITS = 1 IBD2 = .FALSE. TIT = .FALSE. AXLB = .FALSE. GO TO 10 END IF C--- *DASHED LINES IF (ISTR.EQ.'SDA'.OR.ISTR.EQ.'sda') THEN CALL DEFINE(RIDASH,1) GO TO 10 END IF C--- *DOTTED LINES IF (ISTR.EQ.'SDO'.OR.ISTR.EQ.'sdo') THEN CALL DEFINE(RIDOT,2) GO TO 10 END IF C--- *CIRCLES IF (ISTR.EQ.'SCI'.OR.ISTR.EQ.'sci') THEN CALL DEFINE(RICIR,3) GO TO 10 END IF C--- *SYMBOLS IF (ISTR.EQ.'SSY'.OR.ISTR.EQ.'ssy') THEN CALL DEFINE(RISYBL,4) GO TO 10 END IF C--- *PLOTTING ACCURACY IF (ISTR.EQ.'PA'.OR.ISTR.EQ.'pa') THEN CALL DEFINE(RIDIS,5) GO TO 10 END IF C--- *DASH-DOT IF (ISTR.EQ.'SDD'.OR.ISTR.EQ.'sdd') THEN CALL DEFINE(RIDSHS,6) GO TO 10 END IF C--- *LONG-SHORT DASH IF (ISTR.EQ.'SLS'.OR.ISTR.EQ.'sls') THEN CALL DEFINE(RIDS1,6) GO TO 10 END IF C--- *DASHES IF (ISTR.EQ.'LDA'.OR.ISTR.EQ.'lda') THEN OSTR = ' DASH LENGTH IS ' WRITE(ITERM,2) OSTR(1:15),UDSH OSTR = ' ENTER NEW DASH LENGTH ' WRITE(ITERM,1) OSTR READ(5,*,ERR=10) UNIT IF (UNIT.LT.1.AND.UNIT.GT.0) THEN UDSH = UNIT ELSE OSTR = ' ERROR, DASH LENGTH MUST SATISFY : 0 < LENGTH < 1' WRITE(ITERM,1) OSTR END IF GO TO 10 END IF C--- *DASHES IF (ISTR.EQ.'US'.OR.ISTR.EQ.'us') THEN OSTR = ' DASH LENGTH IS ' WRITE(ITERM,2) OSTR(1:15),UDSHS OSTR = ' ENTER NEW LENGTH' WRITE(ITERM,1) OSTR READ(5,*,ERR=10) UNIT IF (UNIT.LT.1.AND.UNIT.GT.0) THEN UDSHS = UNIT ELSE OSTR = ' ERROR, DASH LENGTH MUST SATISFY : 0 < LENGTH < 1' WRITE(ITERM,1) OSTR END IF GO TO 10 END IF C--- *LONG-SHORT DASH IF (ISTR.EQ.'LLS'.OR.ISTR.EQ.'lss') THEN OSTR = ' LONG AND SHORT DASH LENGTHS ARE : ' WRITE(ITERM,2) OSTR(1:33),ULD,USD OSTR = ' ENTER NEW LENGTHS' WRITE(ITERM,1) OSTR OSTR = ' ' READ(5,*,ERR=10) UNIT1,UNIT2 IF (UNIT1.LE.0.OR.UNIT2.LE.0) THEN OSTR = ' ERROR - 0 < LONG, SHORT DASH < 1' ELSE IF (UNIT1.GE.1.OR.UNIT2.GE.1) THEN OSTR = ' ERROR - 0 < LONG, SHORT DASH < 1' ELSE IF ((UNIT1+UNIT2).GE.1) THEN OSTR = ' ERROR - 0 < LONG, SHORT DASH < 1' ELSE ULD = UNIT1 USD = UNIT2 END IF IF (OSTR.NE.' ') WRITE(6,1) OSTR GO TO 10 END IF C--- *RADIUS OF SYMBOL IN IF (ISTR.EQ.'RSS'.OR.ISTR.EQ.'rss') THEN CALL DFRADI(RASY,1) GO TO 10 END IF C--- *RADIUS OF SYMBOL IN IF (ISTR.EQ.'RCS'.OR.ISTR.EQ.'rcs') THEN CALL DFRADI(RATY,2) GO TO 10 END IF C--- *RESET IF (ISTR.EQ.'RES'.OR.ISTR.EQ.'res') THEN CALL DFITVL GO TO 10 END IF IF(ITS.EQ.0) THEN OSTR = ' ILLEGAL COMMAND - REENTER' ELSE IF (ITS.EQ.1.AND.ISTR(3:3).EQ.' ') THEN OSTR = ' ' ITS = 0 END IF WRITE(ITERM,1) OSTR GO TO 10 1 FORMAT(A80) 2 FORMAT(A,2F7.3) 46 FORMAT(/,' THE DEFAULT SETTING FOR THE RELATIVE DIMENSION OF', + ' THE SCREEN IS :',//,' MIN(X) =',F8.2,4X,'MAX(X) =',F8.2, + 4X,'MIN(Y) =',F8.2,4X,'MAX(Y) =',F8.2,//, + ' ENTER THE NEW SCREEN DIMENSION SUCH THAT MIN(X) >',F8.2) END C--- C----------------------------------------------------------------------- C LISTS THE POSSIBLE COMMANDS. C----------------------------------------------------------------------- SUBROUTINE HELPS(ISTR) CHARACTER*80 ISTR COMMON /IO/ IWRITE,ITERM,ISAVE C--- CALL PLCMDS(1) WRITE(ITERM,1) 1 FORMAT( + /,' Principal PLAUT Commands :' + ,///,' Bifurcation diagram with default limits' + ,//,' Bifurcation diagram with user-limits' + ,//,' To select bifurcation diagram axes' + ,//,' <2D> 2D plot of labeled solutions' + ,//,' To save the current plot in a file' + ,//,' To clear the graphics window' + ,//,' List all labeled solutions in Unit 8' + ,//,' To End PLAUT' + ,///,' Press RETURN for more or Enter Command ...' + ) C CALL READS8(ISTR) IF(ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(ITERM,2) 2 FORMAT( + /,' PLAUT Default Options :' + ,///,' Use solid curves, symbols, but no labels' + ,//,' As , showing stability and labels' + ,//,' As , without labels' + ,//,' As , with grid lines' + ,//,' AS , with grid lines' + ,///,' Individual Options :' + ,///,' Use symbols for special points' + ,//,' Differential Plot (show stability)' + ,//,' Set up titles and axes labels' + ,//,' Normal usage (Reset special options)' + ,///,' Press RETURN for more or Enter Command ...' + ) C CALL READS8(ISTR) IF(ISTR.NE.' ') RETURN C--- CALL PLCMDS(1) WRITE(ITERM,3) 3 FORMAT( + /,' Additional PLAUT Commands :' + ,///,' To change the plot size' + ,/,' To define symbols' + ,/,' Set symbol size' + ,/,' "Expert" (Abbreviated prompts)' + ,/,' To change curve type' + ,//,' Set dash spacing' + ,/,' Set dash size' + ,/,' Set dot spacing' + ,/,' Set circle spacing' + ,/,' Set curve-symbol spacing' + ) WRITE(ITERM,4) 4 FORMAT( ' Set curve-symbol size' + ,/,' Set dash-dot spacing' + ,/,' Set long-short dash spacing' + ,/,' Set long-short dash size' + ,/,' Set plotting accuracy' + ,/,' Reset curves and symbols' + ,///,' <3D> 3D plot of labeled solutions' + ,/,' 3D bifurcation diagram' + ,/,' For list of <3D> and commands' + ,///,' --- End of Help ---',// + ) C--- RETURN END C----------------------------------------------------------------------- C----------------------------------------------------------------------- auto/07p/plaut/plaut.tex0000750000175000017500000001340213570013207013240 0ustar sksk \documentstyle[12pt]{article} \begin{document} \section{The Graphics Program PLAUT} \index{PLAUT} is a program that can be used to extract graphical information from the AUTO output files {\tt fort.7} and {\tt fort.8}. These files are referred to below as Unit 7 and Unit 8, respectively. When saved, these files are called {\tt p.xxx} and {\tt q.xxx}, respectively, where {\tt xxx} stands for a user selected name. \subsection{The Principal PLAUT Commands} The principal PLAUT commands are \begin{description} \item[\bf BD0 ---] This command is useful for an initial overview of the bifurcation diagram as stored in Unit~7. If you have not previously selected one of the default options (D0, D1, D2, D3, or D4) described below, then you will be asked whether you want solution labels, grid lines, titles, or labeled axes. \item[\bf BD ---] This command is the same as the BD0 command, except that you will be asked to enter the minimum and the maximum of the horizontal and vertical axes. This is useful for blowing up portions of a previously displayed bifurcation diagram. \item[\bf AX ---] With the AX command you can select any pair of columns of real numbers from Unit 7 as horizontal and vertical axis in the bifurcation diagram. (The default is columns 1 and 2). To determine what these columns represent, one can look at the screen ouput of the corresponding AUTO run, or one can inspect the column headings in the Unit~7 file. \item[\bf 2D ---] Upon entering the 2D command, the labels of all solutions stored in Unit~8 will be listed and you can select one or more of these for display. The number of solution components is also listed and you will be prompted to select two of these as horizontal and vertical axis in the display. Note that the first component is typically the independent time or space variable scaled to the interval [0,1]. \item[\bf SAV ---] To save the displayed plot in a file. You will be asked to enter a file name. Each plot must be stored in a separate new file. The plot is stored in compact PLOT10 format, which can be converted to Postscript format with the AUTO {\tt @ps} and {\tt @pr} commands (See Section ???.) \item[\bf CL ---] To clear the graphics window. \item[\bf LAB ---] To list the labels of all solutions stored in Unit 8. Note that PLAUT requires all labels to be distinct. In case of multiple labels you can use the AUTO command {\tt @lb} to relabel solutions in Unit~7 and Unit~8. \item[\bf END ---] To end execution of PLAUT. \end{description} \subsection{Default Options} After entering the commands BD0, BD, or 2D, you will be asked whether you want solution labels, grid lines, titles, or axes labels. For quick plotting it is convenient to bypass these selections. This can be done by the default commands D0, D1, D2, D3, or D4 below. These can be entered as a single command before the BD0 or BD command, or they can be entered as prefixes in the BD0 or BD command. Thus, for example, one can enter the command D1BD0. \begin{description} \item[\bf D0 ---] Use solid curves, showing solution labels and symbols. \item[\bf D1 ---] Use solid curves, except use dashed curves for unstable solutions and for solutions of unknown stability. Show solution labels and symbols. \item[\bf D2 ---] As D1, but with grid lines. \item[\bf D3 ---] As D1, except for periodic solutions use solid circles if stable, and open circles if unstable or if the stability is unknown. \item[\bf D4 ---] Use solid curves, without labels and symbols. \end{description} If no default option (D0, D1, D2, D3, or D4) has been selected or if you want to override a default feature, then the the following commands can be used. These can be entered as individual commands or as prefixes. For example, one can enter the command SYDPBD0. \begin{description} \item[\bf SY ---] Use symbols for special solution points, for example, open square = bifurcation, solid square = Hopf bifurcation. \item[\bf DP ---] ``Differential Plots'', i.e., show stability of the solutions. Solid curves represent stable solutions. Dashed curves are used for unstable solutions and for solutions of unknown stability. For periodic solutions use solid and open circles to indicate stability/instability (or unknown stability). \item[\bf ST ---] Set up titles and axes labels. \item[\bf NU ---] Normal usage (reset special options). \end{description} \subsection{Other PLAUT Commands} The full PLAUT program has several other capabilities. The most useful of the additional commands are \begin{description} \item[\bf SCR ---] To change the diagram size. \item[\bf RSS ---] To change the size of special point symbols. \end{description} \subsection{Printing PLAUT Files} \begin{description} \item[{\tt @ps} ---] To convert a PLAUT file {\tt fig.x} to {\sc Post}{\sc Script} format as {\tt fig.x.ps}. \item[{\tt @pr} ---] To convert a PLAUT file {\tt fig.x} to {\sc Post}{\sc Script}, and to send the resulting file {\tt fig.x.ps} to the printer. \end{description} \end{document} auto/07p/plaut/plautcom.f0000640000175000017500000000066513570013207013371 0ustar skskC plautcom.f COMMON /PLTCOM/ TMINVX,TMINVY,TMAXVX,TMAXVY,TREALX, 1 TREALY,TIMAGX,TIMAGY,TRCOSF,TRSINF,TRSCAL,TRFACX, 2 TRFACY,TRPAR1,TRPAR2,TRPAR3,TRPAR4,TRPAR5,TRPAR6, 3 KMOFLG(8),KPAD2,KBAUDR,KGNFLG,KGRAFL,KHOMEY,KKMODE, 4 KHORSZ,KVERSZ,KTBLSZ,KSIZEF,KLMRGN,KRMRGN,KFACTR, 5 KTERM,KLINE,KZAXIS,KBEAMX,KBEAMY,KMOVEF,KPCHAR(5), 6 KDASHT,KMINSX,KMINSY,KMAXSX,KMAXSY,KEYCON,KINLFT, 7 KOTLFT,KUNIT auto/07p/plaut/plautdev.f0000640000175000017500000010736413570013207013375 0ustar skskC plautdev.f SUBROUTINE SQUARE(X,Y,SIDE,THETA) INCLUDE 'plautcom.f' CALL MOVEA(X,Y) CALL RROTAT(THETA) CALL DRAWR(0.,SIDE) CALL DRAWR(SIDE,0.) CALL DRAWR(0.,-SIDE) CALL DRAWR(-SIDE,0.) CALL RROTAT(-THETA) CALL ANMODE RETURN END C SUBROUTINE ANMODE INCLUDE 'plautcom.f' CALL ALFMOD CALL TSEND RETURN END C SUBROUTINE SEEMRG(MLEFT,MRIGHT) INCLUDE 'plautcom.f' MLEFT=KLMRGN MRIGHT=KRMRGN RETURN END C SUBROUTINE SEETRM(IBAUDR,ITERM,ICSIZE,MAXSCR) INCLUDE 'plautcom.f' IBAUDR=KBAUDR ITERM=KTERM ICSIZE=KSIZEF MAXSCR=4096/KFACTR RETURN END C SUBROUTINE SEETW(MINX,MAXX,MINY,MAXY) INCLUDE 'plautcom.f' MINX=KMINSX MAXX=KMAXSX MINY=KMINSY MAXY=KMAXSY RETURN END C SUBROUTINE SEEDW(XMIN,XMAX,YMIN,YMAX) INCLUDE 'plautcom.f' XMIN=TMINVX XMAX=TMAXVX YMIN=TMINVY YMAX=TMAXVY RETURN END C SUBROUTINE SEEMOD(LINE,IZAXIS,MODE) INCLUDE 'plautcom.f' LINE=KLINE IZAXIS=KZAXIS MODE=KKMODE RETURN END C SUBROUTINE SEETRN(XFAC,YFAC,KEY) INCLUDE 'plautcom.f' XFAC=TRFACX YFAC=TRFACY KEY=KEYCON RETURN END C SUBROUTINE SEEREL(RCOS,RSIN,SCALE) INCLUDE 'plautcom.f' RCOS=TRCOSF RSIN=TRSINF SCALE=TRSCAL RETURN END C SUBROUTINE TTBLSZ(ITBLSZ) INCLUDE 'plautcom.f' KTBLSZ=ITBLSZ RETURN END C SUBROUTINE TERM(ITERM,ISCAL) INCLUDE 'plautcom.f' KTERM=ITERM KFACTR=4 IF(ISCAL .GT. 1025)KFACTR=1 CALL RESET RETURN END C SUBROUTINE DASHSR(X,Y,L) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,RX,RY) CALL DASHSA(RX,RY,L) RETURN END C SUBROUTINE DASHSA(X,Y,L) INCLUDE 'plautcom.f' CALL LVLCHT XOLD=TIMAGX YOLD=TIMAGY KEY=KEYCON IF(KEYCON .LT. 1)KEY=5 IF(KEYCON .GT. 4)KEY=4 GO TO (100, 100, 200, 400, 100),KEY 100 CALL DASHA(X,Y,L) XOLD=X YOLD=Y RETURN 200 DX=X-XOLD DY=Y-YOLD YSTEP=SIGN(5.0/TRFACY,DY) IF(ABS(DY*.75) .LT. ABS(YSTEP)) GO TO 100 FRAC=DX/DY NSEG=INT((DY/YSTEP)+.9999) YOUT=YOLD 300 IF(NSEG .LT. 2) GO TO 100 YOUT=YOUT+YSTEP XOUT=XOLD+(YOUT-YOLD)*FRAC CALL DASHA(XOUT,YOUT,L) NSEG=NSEG-1 GO TO 300 400 CONTINUE GO TO 100 END C SUBROUTINE DRAWSR(X,Y) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,RX,RY) CALL DRAWSA(RX,RY) RETURN END C SUBROUTINE DRAWSA(X,Y) INCLUDE 'plautcom.f' CALL LVLCHT XOLD=TIMAGX YOLD=TIMAGY KEY=KEYCON IF(KEYCON .LT. 1)KEY=5 IF(KEYCON .GT. 4)KEY=4 GO TO (100, 100, 200, 400, 100),KEY 100 CALL DRAWA(X,Y) XOLD=X YOLD=Y RETURN 200 DX=X-XOLD DY=Y-YOLD YSTEP=SIGN(5.0/TRFACY,DY) IF(ABS(DY*.75) .LT. ABS(YSTEP)) GO TO 100 FRAC=DX/DY NSEG=INT((DY/YSTEP)+.9999) YOUT=YOLD 300 IF(NSEG .LT. 2) GO TO 100 YOUT=YOUT+YSTEP XOUT=XOLD+(YOUT-YOLD)*FRAC CALL DRAWA(XOUT,YOUT) NSEG=NSEG-1 GO TO 300 400 CONTINUE GO TO 100 END C SUBROUTINE INCPLT(IONOFF,IDIR,NO) INCLUDE 'plautcom.f' DIMENSION IPLTBL(8),KBMUP(10) DATA IPLTBL(1),IPLTBL(2),IPLTBL(3),IPLTBL(4)/4,5,1,9/ DATA IPLTBL(5),IPLTBL(6),IPLTBL(7),IPLTBL(8)/8,10,2,6/ DATA KBMUP(1),KBMUP(2),KBMUP(3),KBMUP(4)/0,1,1,1/ DATA KBMUP(5),KBMUP(6),KBMUP(7),KBMUP(8)/0,-1,-1,-1/ DATA KBMUP(9),KBMUP(10)/0,1/ IF(KKMODE .NE. 3)CALL IPMOD IPEN=32+IONOFF*48 CALL TOUTPT(IPEN) IPEN=64 KMOVEF=IABS(IONOFF-1) NDXPLT=MOD(IDIR,8)+1 IPLTCH=IPLTBL(NDXPLT)+IPEN KBMUPX=KBMUP(NDXPLT) KBMUPY=KBMUP(NDXPLT+2) DO 10 I=1,NO CALL TOUTPT(IPLTCH) KBEAMX=KBEAMX+KBMUPX 10 KBEAMY=KBEAMY+KBMUPY RETURN END C SUBROUTINE RROTAT(DEG) INCLUDE 'plautcom.f' TRSINF=SIN(DEG/57.29578) TRCOSF=COS(DEG/57.29578) RETURN END C SUBROUTINE RSCALE(FACTOR) INCLUDE 'plautcom.f' TRSCAL=FACTOR RETURN END C SUBROUTINE FINITT(IX,IY) INCLUDE 'plautcom.f' COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE CALL MOVABS(IX,IY) CALL ALFMOD CALL TSEND RETURN END C SUBROUTINE BELL INCLUDE 'plautcom.f' CALL TOUTPT(7) KMOVEF=0 RETURN END C SUBROUTINE VWINDO(XMIN,XRANGE,YMIN,YRANGE) INCLUDE 'plautcom.f' TMINVX=XMIN TMAXVX=XMIN+XRANGE TMINVY=YMIN TMAXVY=YMIN+YRANGE CALL RESCAL RETURN END C SUBROUTINE SWINDO(MINX,LENX,MINY,LENY) INCLUDE 'plautcom.f' KMINSX=MINX KMAXSX=MINX+LENX KMINSY=MINY KMAXSY=MINY+LENY CALL RESCAL RETURN END C SUBROUTINE TWINDO(MINX,MAXX,MINY,MAXY) INCLUDE 'plautcom.f' KMINSX=MINX KMAXSX=MAXX KMINSY=MINY KMAXSY=MAXY CALL RESCAL RETURN END C SUBROUTINE DWINDO(XMIN,XMAX,YMIN,YMAX) INCLUDE 'plautcom.f' TMINVX=XMIN TMAXVX=XMAX TMINVY=YMIN TMAXVY=YMAX CALL RESCAL RETURN END C SUBROUTINE LWINDO(XMIN,XMAX,YMIN,YMAX,KEY) INCLUDE 'plautcom.f' CALL DWINDO(XMIN,XMAX,YMIN,YMAX) IF(KEY-3.GT.0.OR.KEY.LE.0)THEN CALL LINTRN RETURN ENDIF CALL LOGTRN(KEY) RETURN END C SUBROUTINE POINTR(X,Y) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,RX,RY) CALL POINTA(RX,RY) RETURN END C SUBROUTINE DASHR(X,Y,L) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,XL,YL) CALL DASHA(XL,YL,L) RETURN END C SUBROUTINE DASHA(X,Y,L) INCLUDE 'plautcom.f' CALL LVLCHT CALL V2ST(1,X,Y,IX,IY) IF(KGNFLG .EQ. 1)GO TO 10 CALL DSHMOD(L) CALL TKDASH(IX,IY) 10 RETURN END C SUBROUTINE DSHREL(IX,IY,L) INCLUDE 'plautcom.f' JX=IX+KBEAMX JY=IY+KBEAMY CALL DSHABS(JX,JY,L) RETURN END C SUBROUTINE DSHABS(IX,IY,L) INCLUDE 'plautcom.f' CALL DSHMOD(L) CALL TKDASH(IX,IY) RETURN END C SUBROUTINE DRAWR(X,Y) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,RX,RY) CALL DRAWA(RX,RY) RETURN END C SUBROUTINE POINTA(X,Y) INCLUDE 'plautcom.f' CALL LVLCHT CALL V2ST(0,X,Y,IX,IY) IF(KGNFLG .EQ. 1)GO TO 10 IF(KKMODE .NE. 2)CALL PNTMOD CALL TKPNT(IX,IY) 10 RETURN END C SUBROUTINE DRAWA(X,Y) INCLUDE 'plautcom.f' IF(KLINE .EQ. 0)GO TO 5 KLINE=0 CALL CWSEND 5 CONTINUE CALL LVLCHT CALL V2ST(1,X,Y,IX,IY) IF(KGNFLG .EQ. 1)GO TO 10 IF(KKMODE.NE.1)CALL VECMOD IF(KMOVEF.EQ.1)CALL XYCNVT(KBEAMX,KBEAMY) CALL XYCNVT(IX,IY) 10 RETURN END C SUBROUTINE MOVER(X,Y) INCLUDE 'plautcom.f' CALL REL2AB(X,Y,RX,RY) CALL MOVEA(RX,RY) RETURN END C SUBROUTINE REL2AB(XIN,YIN,XOUT,YOUT) INCLUDE 'plautcom.f' CALL LVLCHT XOUT=(((XIN*TRCOSF)-(YIN*TRSINF))*TRSCAL)+TIMAGX YOUT=(((XIN*TRSINF)+(YIN*TRCOSF))*TRSCAL)+TIMAGY RETURN END C SUBROUTINE MOVEA(X,Y) INCLUDE 'plautcom.f' CALL LVLCHT CALL V2ST(0,X,Y,IX,IY) IF(KGNFLG .EQ. 1)GO TO 10 CALL VECMOD CALL XYCNVT(IX,IY) 10 RETURN END C SUBROUTINE VCURSR(ICHAR,X,Y) INCLUDE 'plautcom.f' CALL SCURSR(ICHAR,IXA,IYA) CALL REVCOT(IXA,IYA,X,Y) RETURN END C SUBROUTINE V2ST(I,X,Y,IX,IY) INCLUDE 'plautcom.f' DIMENSION BUFIN(4),BFOUT(4) EQUIVALENCE (BUFIN(1),XS),(BUFIN(2),YS),(BUFIN(3),XE), 1(BUFIN(4),YE) EQUIVALENCE (BFOUT(1),CXS),(BFOUT(2),CYS),(BFOUT(3),CXE), 1 (BFOUT(4),CYE) XE=X YE=Y IF(I .EQ. 0) GO TO 10 XS=TIMAGX YS=TIMAGY CALL CLIPT(BUFIN,BFOUT) IF(KGNFLG .EQ. 1) GO TO 110 IF(CXS .EQ. TREALX .AND. CYS .EQ. TREALY) GO TO 120 MODE=KKMODE CALL VECMOD CALL WINCOT(CXS,CYS,IX,IY) CALL XYCNVT(IX,IY) KKMODE=MODE GO TO 120 10 CALL PCLIPT(XE,YE) IF(KGNFLG .EQ. 1) GO TO 110 CXE=XE CYE=YE 120 CALL WINCOT(CXE,CYE,IX,IY) TREALX=CXE TREALY=CYE 110 TIMAGX=X TIMAGY=Y RETURN END C SUBROUTINE CLIPT(BUFIN,OUTBF) INCLUDE 'plautcom.f' DIMENSION BUFIN(*),OUTBF(*) GSTAX=BUFIN(1) GSTAY=BUFIN(2) GENDX=BUFIN(3) GENDY=BUFIN(4) IF(GSTAX.GE.TMINVX)GO TO 10 IF(GENDX.GE.TMINVX)GO TO 20 GO TO 110 10 IF(GSTAX.LE.TMAXVX)GO TO 20 IF(GENDX.LE.TMAXVX)GO TO 20 GO TO 110 20 IF(GSTAY.GE.TMINVY)GO TO 21 IF(GENDY.GE.TMINVY)GO TO 30 GO TO 110 21 IF(GSTAY.LE.TMAXVY)GO TO 30 IF(GENDY.LE.TMAXVY)GO TO 30 GO TO 110 30 IF(GSTAX.NE.GENDX)GO TO 31 DSTAX=GSTAX DENDX=GSTAX CALL PARCLT(GSTAY,GENDY,TMINVY,TMAXVY,DSTAY,DENDY) GO TO 120 31 IF(GSTAY.NE.GENDY)GO TO 40 DSTAY=GSTAY DENDY=GSTAY CALL PARCLT(GSTAX,GENDX,TMINVX,TMAXVX,DSTAX,DENDX) GO TO 120 40 A=GENDX-GSTAX B=GENDY-GSTAY IF(GSTAX.LT.TMINVX)GO TO 41 IF(GSTAX.LE.TMAXVX)GO TO 43 Q=TMAXVX GO TO 42 43 IF(GSTAY.GT.TMAXVY)GO TO 140 IF(GSTAY.LT.TMINVY)GO TO 44 DSTAX=GSTAX DSTAY=GSTAY GO TO 150 41 Q=TMINVX 42 DSTAY=GSTAY+((Q-GSTAX)*B/A) IF(DSTAY.GT.TMAXVY)GO TO 140 IF(DSTAY.LT.TMINVY)GO TO 44 DSTAX=Q GO TO 150 44 R=TMINVY GO TO 45 140 R=TMAXVY 45 DSTAX=GSTAX+((R-GSTAY)*A/B) IF(DSTAX.GT.TMAXVX)GO TO 110 IF(DSTAX.LT.TMINVX)GO TO 110 DSTAY=R 150 IF(GENDX.LT.TMINVX)GO TO 50 IF(GENDX.GT.TMAXVX)GO TO 51 IF(GENDY.GT.TMAXVY)GO TO 160 IF(GENDY.LT.TMINVY)GO TO 52 DENDX=GENDX DENDY=GENDY GO TO 120 51 Q=TMAXVX GO TO 53 50 Q=TMINVX 53 DENDY=GSTAY+((Q-GSTAX)*B/A) IF(DENDY.GT.TMAXVY)GO TO 160 IF(DENDY.LT.TMINVY)GO TO 52 DENDX=Q GO TO 120 52 R=TMINVY GO TO 60 160 R=TMAXVY 60 DENDX=GSTAX+((R-GSTAY)*A/B) DENDY=R 120 OUTBF(1)=DSTAX OUTBF(2)=DSTAY OUTBF(3)=DENDX OUTBF(4)=DENDY KGNFLG=0 GO TO 70 110 KGNFLG=1 70 RETURN END C SUBROUTINE PARCLT(RL1,RL2,RM1,RM2,RN1,RN2) INCLUDE 'plautcom.f' IF(RL1.LT.RM1)GO TO 10 IF(RL1.GT.RM2)GO TO 20 RN1=RL1 IF(RL2-RM1.LT.0)GO TO 30 GO TO 40 10 RN1=RM1 40 IF(RL2.LE.RM2)GO TO 50 RN2=RM2 GO TO 60 50 RN2=RL2 GO TO 60 20 RN1=RM2 IF(RL2.GE.RM1)GO TO 50 30 RN2=RM1 60 RETURN END C SUBROUTINE LINTRN INCLUDE 'plautcom.f' KEYCON=1 CALL RESCAL RETURN END C SUBROUTINE LOGTRN(ITYPE) INCLUDE 'plautcom.f' KEYCON=2 TRPAR1=ITYPE CALL RESCAL RETURN END C SUBROUTINE POLTRN(ANGMIN,ANGMAX,RSUPRS) INCLUDE 'plautcom.f' KEYCON=3 TRPAR1=ANGMIN TRPAR2=ANGMAX TRPAR5=RSUPRS CALL PSCAL RETURN END C SUBROUTINE RESCAL INCLUDE 'plautcom.f' KGRAFL=0 KEY=KEYCON IF(KEYCON .LT. 1)KEY=5 IF(KEYCON .GT. 4)KEY=4 GO TO (100,200,300,400,500),KEY 100 TRPAR1=0. 200 KEYL=INT(TRPAR1+1.001) GO TO (210,220,210,220),KEYL 210 TRFACX=FLOAT(KMAXSX-KMINSX)/(TMAXVX-TMINVX) GO TO 250 220 TRPAR2=ALOG(TMINVX) TRFACX=FLOAT(KMAXSX-KMINSX)/(ALOG(TMAXVX)-TRPAR2) 250 GO TO (260,260,280,280),KEYL 260 TRFACY=FLOAT(KMAXSY-KMINSY)/(TMAXVY-TMINVY) GO TO 600 280 TRPAR3=ALOG(TMINVY) TRFACY=FLOAT(KMAXSY-KMINSY)/(ALOG(TMAXVY)-TRPAR3) GO TO 600 300 CALL PSCAL GO TO 600 400 CONTINUE GO TO 600 500 TRFACX=1. TRFACY=1. 600 RETURN END C SUBROUTINE PSCAL INCLUDE 'plautcom.f' LOGICAL ANEG ANEG=TRPAR1 .GT. TRPAR2 KGRAFL=0 PIDV2=90.00 TRPAR3=0. TRPAR4=0. TRFACY=1. TRPAR6=0. R1=TMINVX R2=TMAXVX RMAX=AMAX1(ABS(R1),ABS(R2)) TRFACX=1000./RMAX THMIN=AMIN1(TRPAR1,TRPAR2) THMAX=AMAX1(TRPAR2,TRPAR1) CALL WINCOT(R1,THMIN,IX1,IY1) CALL WINCOT(R1,THMAX,IX2,IY2) CALL WINCOT(R2,THMIN,IX3,IY3) CALL WINCOT(R2,THMAX,IX4,IY4) IXMIN=MIN0(IX1,IX2,IX3,IX4) IXMAX=MAX0(IX1,IX2,IX3,IX4) IYMIN=MIN0(IY1,IY2,IY3,IY4) IYMAX=MAX0(IY1,IY2,IY3,IY4) X=THMIN/PIDV2 IF(THMIN.GT.0.)X=X+.999 QUAD=FLOAT(IFIX(X))*PIDV2 NQUAD=0 200 IF(QUAD.GE.THMAX)GO TO 300 NQUAD=NQUAD+1 CALL WINCOT(R1,QUAD,IX1,IY1) CALL WINCOT(R2,QUAD,IX2,IY2) IXMIN=MIN0(IX1,IX2,IXMIN) IXMAX=MAX0(IX1,IX2,IXMAX) IYMIN=MIN0(IY1,IY2,IYMIN) IYMAX=MAX0(IY1,IY2,IYMAX) QUAD=QUAD+PIDV2 IF(NQUAD.LT.4)GO TO 200 300 TSRANX=KMAXSX-KMINSX TSRANY=KMAXSY-KMINSY XRANGE=IXMAX-IXMIN YRANGE=IYMAX-IYMIN FACTOR=AMIN1(ABS(TSRANX)/XRANGE,ABS(TSRANY)/YRANGE) TRPAR3=FLOAT(KMINSX)-FACTOR*FLOAT(IXMIN) TRPAR4=FLOAT(KMINSY)-FACTOR*FLOAT(IYMIN) TRFACX=TRFACX*FACTOR TRFACY=(TRPAR2-TRPAR1)/(TMAXVY-TMINVY) TRFACY=SIGN(1.,TSRANX*TSRANY)*TRFACY AANG=0. IF(ANEG.AND.TSRANY.LT.0..OR.TSRANX.LT.0..AND..NOT.ANEG) 1 AANG=180. TRPAR6=TMINVY-(TRPAR1+AANG)/TRFACY RETURN END C SUBROUTINE WINCOT(X,Y,IX,IY) INCLUDE 'plautcom.f' DATA DE2RAD/0.01745/ DX=X-TMINVX DY=Y-TMINVY KEY=KEYCON IF(KEYCON .LT. 1)KEY=5 IF(KEYCON .GT. 4)KEY=4 GO TO(500,300,600,700,100),KEY 100 IX=INT(X) IY=INT(Y) GO TO 800 300 KEYL=INT(TRPAR1+.001) IF(KEYL .EQ. 2) GO TO 400 DX=ALOG(X)-TRPAR2 400 IF(KEYL .EQ. 1) GO TO 500 DY=ALOG(Y)-TRPAR3 500 IX=IFIX(DX*TRFACX)+KMINSX IY=IFIX(DY*TRFACY)+KMINSY GO TO 800 600 A=(Y-TRPAR6)*TRFACY R=(X-TRPAR5)*TRFACX IX=INT(R*COS(A*DE2RAD)+TRPAR3) IY=INT(R*SIN(A*DE2RAD)+TRPAR4) GO TO 800 700 CONTINUE 800 RETURN END C SUBROUTINE LVLCHT INCLUDE 'plautcom.f' IF(KGRAFL.NE.0)GO TO 10 CALL REVCOT(KBEAMX,KBEAMY,TREALX,TREALY) TIMAGX=TREALX TIMAGY=TREALY KGRAFL=1 10 RETURN END C SUBROUTINE REVCOT(IX,IY,X,Y) INCLUDE 'plautcom.f' LOGICAL DEC E=2.7182818284 DX=FLOAT(IX-KMINSX)/TRFACX DY=FLOAT(IY-KMINSY)/TRFACY KEY=KEYCON IF(KEYCON .LT. 1)KEY=5 IF(KEYCON .GT. 4)KEY=4 GO TO(300, 400, 500, 600, 100 ),KEY 100 X=IX Y=IY GO TO 700 300 X=DX+TMINVX Y=DY+TMINVY GO TO 700 400 KEYL=INT(TRPAR1) X=DX+TMINVX Y=DY+TMINVY IF(KEYL .NE. 2)X=E**(DX+TRPAR2) IF(KEYL .NE. 1)Y=E**(DY+TRPAR3) GO TO 700 500 DX=FLOAT(IX)-TRPAR3 DY=FLOAT(IY)-TRPAR4 Y=ATAN2(DY,DX)*57.2957795131 X=SQRT(DY*DY+DX*DX)/TRFACX+TRPAR5 DEC=.FALSE. 510 IF(Y .GT. TRPAR1) GO TO 530 Y=Y+360.0 GO TO 510 530 IF(Y .LE. TRPAR2) GO TO 550 Y=Y-360.0 DEC=.TRUE. GO TO 530 550 IF(DEC .AND. Y .LT. TRPAR1)Y=Y+360.0 IF(TMINVX .GE. 0.)GO TO 560 TR1A=AMOD(TRPAR1+180.,360.) TR2A=AMOD(TRPAR2+180.,360.) IF(Y.GT.AMAX1(TR1A,TR2A).OR.Y.LT.AMIN1(TR1A,TR2A)) 1 GO TO 560 Y=AMOD(Y+180.,360.) X=-X 560 Y=Y/TRFACY+TRPAR6 GO TO 700 600 CONTINUE 700 CALL PCLIPT(X,Y) RETURN END C SUBROUTINE PCLIPT(X,Y) INCLUDE 'plautcom.f' KGNFLG=0 IF(X.LT.TMINVX)GO TO 10 IF(X.GT.TMAXVX)GO TO 10 IF(Y.LT.TMINVY)GO TO 10 IF(Y.LE.TMAXVY)GO TO 20 10 KGNFLG=1 20 RETURN END C SUBROUTINE PNTREL(IX,IY) INCLUDE 'plautcom.f' JX=KBEAMX+IX JY=KBEAMY+IY CALL PNTABS(JX,JY) RETURN END C SUBROUTINE PNTABS(IX,IY) INCLUDE 'plautcom.f' IF(KKMODE .NE. 2)CALL PNTMOD CALL TKPNT(IX,IY) KGRAFL=0 RETURN END C SUBROUTINE DRWREL(IX,IY) INCLUDE 'plautcom.f' JX=KBEAMX+IX JY=KBEAMY+IY CALL DRWABS(JX,JY) RETURN END C SUBROUTINE DRWABS(IX,IY) INCLUDE 'plautcom.f' IF(KLINE .EQ. 0)GO TO 5 KLINE=0 CALL CWSEND 5 CONTINUE IF(KKMODE.NE.1)CALL VECMOD IF(KMOVEF.EQ.1)CALL XYCNVT(KBEAMX,KBEAMY) CALL XYCNVT(IX,IY) KGRAFL=0 RETURN END C SUBROUTINE SETMRG(MLEFT,MRIGHT) INCLUDE 'plautcom.f' KLMRGN=MLEFT KRMRGN=MRIGHT RETURN END C SUBROUTINE MOVREL(IX,IY) INCLUDE 'plautcom.f' JX=KBEAMX+IX JY=KBEAMY+IY CALL MOVABS(JX,JY) RETURN END C SUBROUTINE SETTAB(ITAB,ITBTBL) INCLUDE 'plautcom.f' DIMENSION ITBTBL(1) KGNFLG=0 IF(ITAB.LE.0)GO TO 10 I=1 20 IF(ITBTBL(I).EQ.ITAB)GO TO 10 IF(ITAB.LT.ITBTBL(I))GO TO 60 IF(ITBTBL(I).EQ.0)GO TO 60 I=I+1 IF(I.LE.KTBLSZ)GO TO 20 30 KGNFLG=1 10 RETURN 60 ITEMP=ITBTBL(I) ITBTBL(I)=ITAB 70 IF(ITEMP.EQ.0)GO TO 10 I=I+1 IF(I.GT.KTBLSZ)GO TO 30 ITEMPA=ITBTBL(I) ITBTBL(I)=ITEMP ITEMP=ITEMPA GO TO 70 END C SUBROUTINE RSTTAB(ITAB,ITBTBL) INCLUDE 'plautcom.f' DIMENSION ITBTBL(1) IF(ITAB.LT.0)GO TO 10 IF(ITAB.EQ.0)GO TO 20 DO I=1,KTBLSZ IF(ITAB.EQ.ITBTBL(I))GO TO 50 ENDDO GO TO 10 50 J=KTBLSZ-1 DO 60 K=I,J 60 ITBTBL(K)=ITBTBL(K+1) ITBTBL(KTBLSZ)=0 GO TO 10 20 DO 21 II=1,KTBLSZ 21 ITBTBL(II)=0 10 RETURN END C SUBROUTINE TABHOR(ITBTBL) INCLUDE 'plautcom.f' DIMENSION ITBTBL(1) KFLG=0 DO 10 K=1,KTBLSZ IF(ITBTBL(K).NE.0)KFLG=1 IF(ITBTBL(K).GT.KBEAMX)GO TO 20 10 CONTINUE IF(KFLG.EQ.0)GO TO 30 15 CALL NEWLIN GO TO 30 20 IF (ITBTBL(K).GE.KRMRGN) GO TO 15 CALL MOVABS(ITBTBL(K),KBEAMY) CALL ALFMOD 30 RETURN END C SUBROUTINE TABVER(ITBTBL) INCLUDE 'plautcom.f' DIMENSION ITBTBL (1) DO 10 K=1,KTBLSZ I=KTBLSZ-K+1 IF(ITBTBL(I) .LE. 0)GO TO 10 IF(ITBTBL(I) .LT. KBEAMY)GO TO 30 10 CONTINUE GO TO 20 30 CALL MOVABS(KBEAMX,ITBTBL(I)) CALL ALFMOD 20 RETURN END C SUBROUTINE DSHMOD(L) INCLUDE 'plautcom.f' IF(KKMODE .EQ. 4) GO TO 10 KKMODE=4 CALL TOUTPT(31) CALL TOUTPT(29) KMOVEF=1 DO 5 I=1,5 5 KPCHAR(I)=-1 CALL XYCNVT(KBEAMX,KBEAMY) 10 KDASHT=L RETURN END C SUBROUTINE TKDASH(IX,IY) INCLUDE 'plautcom.f' DIMENSION DTABL(10), U(9), WORK(10),ISIMHD(4) DATA ISIMHD(1),ISIMHD(2),ISIMHD(3)/12,31212,32/ DATA ISIMHD(4),IDTYPE/52,-1/ DATA U(1),U(2),U(3),U(4),U(5)/5.,-5.,10.,-10.,25./ DATA U(6),U(7),U(8),U(9)/-25.,50.,-50.,0./ DATA LASTX,LASTY/-1,-1/ IF(KDASHT .LT. 0)GO TO 320 IF(KDASHT .GT. 4)GO TO 101 IF(KTERM .GE. 3)GO TO 103 IF(KDASHT .EQ. 0)GO TO 330 KDASHT=ISIMHD(KDASHT) 101 IF(KLINE .EQ. 0)GO TO 104 KLINE=0 CALL CWSEND GO TO 104 103 IF(KLINE .EQ. KDASHT)GO TO 330 KLINE=KDASHT CALL CWSEND GO TO 330 104 CONTINUE IF(KDASHT .EQ. 0)GO TO 330 IF(KDASHT .EQ. IDTYPE)GO TO 170 ICHAR=KDASHT DO 140 NO=1,10 120 IF(ICHAR.EQ.0)GO TO 150 I=ICHAR-((ICHAR/10)*10) ICHAR=ICHAR/10 IF(I.EQ.0)GO TO 120 140 WORK(NO)=U(I) NO=11 150 NO=NO-1 DO 160 I=1,NO ISUB=NO+1-I 160 DTABL(I)=WORK(ISUB) D1=DTABL(1) NUM=NO-1 DO 165 K=1,NUM DCUR=DTABL(K) IF(DCUR*DTABL(K+1).GT.0. .OR. DCUR*D1 .LT.0.)GO TO 165 DTABL(K)=DTABL(K)-1. DTABL(K+1)=DTABL(K+1)-1. 165 CONTINUE IDTYPE=KDASHT I=0 SEGLEN=0 170 IF(NO-1.LT.0)GO TO 320 IF(NO-1.EQ.0)GO TO 330 IF(LASTX-KBEAMX.NE.0)GO TO 200 IF(LASTY-KBEAMY.EQ.0)GO TO 210 200 SEGLEN=0 I=0 210 X=FLOAT(KBEAMX) Y=FLOAT(KBEAMY) DX=FLOAT(IX-KBEAMX) DY=FLOAT(IY-KBEAMY) DIAG=SQRT(DX*DX+DY*DY) DIST=DIAG IF (SEGLEN-1.5.GT.0)GO TO 230 220 I=MOD(I,NO)+1 SEGLEN=ABS(DTABL(I)) 230 IF(SEGLEN-DIST.GE.0)GO TO 270 F=SEGLEN/DIAG X=X+DX*F Y=Y+DY*F IF (DTABL(I).GT.0)GO TO 260 CALL TOUTPT(29) KMOVEF=1 260 CALL XYCNVT(IFIX(X),IFIX(Y)) DIST=DIST-SEGLEN SEGLEN=0 GO TO 220 270 IF(DTABL(I).GT.0)GO TO 290 CALL TOUTPT(29) KMOVEF=1 290 CALL XYCNVT(IX,IY) LASTX=IX LASTY=IY SEGLEN=SEGLEN-DIST GO TO 340 320 CALL TOUTPT(29) KMOVEF=1 330 CALL XYCNVT(IX,IY) NO=1-NO IDTYPE=KDASHT 340 RETURN END C SUBROUTINE HDCOPY INCLUDE 'plautcom.f' DIMENSION ICODE(2) DATA ICODE(1),ICODE(2)/27,23/ CALL TOUTST(2,ICODE) CALL IOWAIT(10) RETURN END C FUNCTION KIN(RI) INCLUDE 'plautcom.f' KIN=INT(RI*546.0/FLOAT(KFACTR)) IF(KTERM .GT. 1)KIN=INT(RI*285.7/FLOAT(KFACTR)) RETURN END C FUNCTION KCM(RC) INCLUDE 'plautcom.f' KCM=INT(RC*215.2/FLOAT(KFACTR)) IF(KTERM .GT. 1)KCM=INT(RC*112.48/FLOAT(KFACTR)) RETURN END C SUBROUTINE DCURSR(ICHAR,IX,IY) INCLUDE 'plautcom.f' CALL SCURSR(ICHAR,IX,IY) RETURN END C SUBROUTINE SCURSR(ICHAR,IX,IY) INCLUDE 'plautcom.f' DIMENSION ICODE(2),IN(5) DATA ICODE(1),ICODE(2)/27,26/ KMOFLG(1)=1 CALL TOUTST(2,ICODE) KINLFT=0 CALL TINSTR(5,IN) KMOFLG(1)=0 CALL RECOVR ICHAR=IN(1) IX=MOD(IN(2),32)*32+MOD(IN(3),32) IY=MOD(IN(4),32)*32+MOD(IN(5),32) IX=IX*4/KFACTR IY=IY*4/KFACTR RETURN END C SUBROUTINE SVSTAT(RARRAY) INCLUDE 'plautcom.f' DIMENSION RARRAY(60),IB(41),RB(19) EQUIVALENCE (IB(1),KMOFLG(1)),(RB(1),TMINVX) DO 100 I=1,19 100 RARRAY(I)=RB(I) DO 101 I=1,41 101 RARRAY(I+19)=IB(I) RETURN END C SUBROUTINE RESTAT(RARRAY) INCLUDE 'plautcom.f' DIMENSION RARRAY(60),IB(41),RB(19) EQUIVALENCE (IB(1),KMOFLG(1)),(RB(1),TMINVX) DO 100 I=1,19 100 RB(I)=RARRAY(I) DO 101 I=1,41 101 IB(I)=INT(RARRAY(I+19)) IF(KTERM .GT. 1)CALL CHRSIZ(KSIZEF) IF(KTERM .GT. 2)CALL CWSEND CALL RECOVR RETURN END C SUBROUTINE INITT(KCPS,KREAD,KWRITE,KBUF,KBL) INCLUDE 'plautcom.f' KBAUDR = KCPS KPAD2 = KCPS / 22 + 1 KMOFLG(1)=0 KTERM=1 KFACTR=4 KUNIT=3 KINLFT=0 KOTLFT=72 CALL IOSET(KREAD,KWRITE,KBUF,KBL) CALL RESET CALL NEWPAG RETURN END C SUBROUTINE SEELOC(IX,IY) INCLUDE 'plautcom.f' IX=KBEAMX IY=KBEAMY RETURN END C SUBROUTINE SEEBUF(KFORM) INCLUDE 'plautcom.f' KFORM=KUNIT RETURN END C SUBROUTINE SETBUF(KFORM) INCLUDE 'plautcom.f' KUNIT=KFORM IF(KUNIT .LT. 1)KUNIT=1 IF(KUNIT .GT. 3)KUNIT=3 RETURN END C FUNCTION LEFTIO(IOBUF) INCLUDE 'plautcom.f' ITEMP=KINLFT IF(IOBUF .EQ. 2)ITEMP = KOTLFT LEFTIO=ITEMP RETURN END C SUBROUTINE RESET INCLUDE 'plautcom.f' KEYCON=1 TRFACX=1. TRFACY=1. KBEAMX=0 KHOMEY=3068/KFACTR KBEAMY=KHOMEY KMINSX=0 KMAXSX=4095/KFACTR KMINSY=0 KMAXSY=3120/KFACTR KHORSZ=56 KLINE=0 KZAXIS=0 KLMRGN=0 KRMRGN=4040/KFACTR KSIZEF=1 KTBLSZ=10 KVERSZ=88 TMINVX=0. TMAXVX=4095./FLOAT(KFACTR) TMINVY=0. TMAXVY=3120./FLOAT(KFACTR) TRCOSF=1. TRSINF=0. TRSCAL=1. CALL MOVABS(KLMRGN,KHOMEY) IF(KTERM .GE. 3)CALL CWSEND IF(KTERM .GE. 2)CALL CHRSIZ(1) CALL ALFMOD RETURN END C SUBROUTINE TKPNT(IX,IY) INCLUDE 'plautcom.f' IF(KTERM .GE. 3)GO TO 10 CALL TOUTPT(29) KMOVEF=1 CALL XYCNVT(IX,IY) 10 CALL XYCNVT(IX,IY) RETURN END C LOGICAL FUNCTION GENFLG(ITEM) INCLUDE 'plautcom.f' GENFLG=KGNFLG .EQ. ITEM RETURN END C SUBROUTINE NEWLIN INCLUDE 'plautcom.f' CALL CARTN CALL LINEF RETURN END C SUBROUTINE CARTN INCLUDE 'plautcom.f' IF(KLMRGN.EQ.0)GO TO 10 CALL MOVABS(KLMRGN,KBEAMY) CALL ALFMOD GO TO 30 10 IF(KKMODE.NE.0)CALL ALFMOD CALL TOUTPT(13) KBEAMX=0 IF(KTERM .GE. 2)CALL CWSEND 30 RETURN END C SUBROUTINE LINEF INCLUDE 'plautcom.f' IF(KKMODE .NE. 0)CALL ALFMOD CALL TOUTPT(10) KBEAMY=KBEAMY-(KVERSZ+KFACTR/2)/KFACTR IF(KBEAMY .GE. 0)GO TO 200 KBEAMY=KHOMEY CALL MOVABS(KBEAMX,KBEAMY) CALL ALFMOD 200 IF(KTERM .GE. 2)CALL CWSEND RETURN END C SUBROUTINE BAKSP INCLUDE 'plautcom.f' IF(KKMODE.EQ.0)CALL ALFMOD CALL TOUTPT(8) KBEAMX=KBEAMX-(KHORSZ+KFACTR/2)/KFACTR IF(KBEAMX.GE.0)GO TO 10 KBEAMX=KBEAMX+4095/KFACTR 10 RETURN END C SUBROUTINE HOME INCLUDE 'plautcom.f' CALL MOVABS(KLMRGN,KHOMEY) CALL ALFMOD RETURN END C SUBROUTINE ERASE INCLUDE 'plautcom.f' DIMENSION ICODE(2) DATA ICODE(1),ICODE(2)/27,12/ CALL TOUTST(2,ICODE) CALL IOWAIT(3) CALL RECOVR RETURN END C SUBROUTINE RECOVR INCLUDE 'plautcom.f' IFLAG=KGRAFL KMOVEF=0 MODE=KKMODE+1 IY=KBEAMY CALL ALFMOD CALL MOVABS(KBEAMX,IY) IF(MODE .LT. 1)MODE=1 IF(MODE .GT.5)MODE=5 GO TO (100,200,120,200,200),MODE 100 CALL ALFMOD GO TO 200 120 CALL PNTMOD 200 KGRAFL=IFLAG RETURN END C SUBROUTINE NEWPAG INCLUDE 'plautcom.f' DIMENSION ICODE(2) DATA ICODE(1),ICODE(2)/27,12/ IF(KKMODE .NE. 0)CALL ALFMOD CALL TOUTST(2,ICODE) CALL IOWAIT(3) IF(KLMRGN.EQ.0)GO TO 10 CALL MOVABS(KLMRGN,KHOMEY) CALL ALFMOD GO TO 20 10 KBEAMX=0 KBEAMY=KHOMEY 20 RETURN END C SUBROUTINE MOVABS(IX,IY) INCLUDE 'plautcom.f' CALL VECMOD CALL XYCNVT(IX,IY) KGRAFL=0 RETURN END C SUBROUTINE IOWAIT(ITIME) INCLUDE 'plautcom.f' IF(KBAUDR.LE.0)GO TO 20 KOUNT = ITIME * KBAUDR DO 10 J=1,KOUNT 10 CALL TOUTPT(22) 20 RETURN END C SUBROUTINE VECMOD INCLUDE 'plautcom.f' IF(KKMODE.EQ.1)GO TO 10 CALL TOUTPT(31) DO 112 II=1,5 112 KPCHAR(II)=-1 KKMODE=1 10 CALL TOUTPT(29) KMOVEF=1 RETURN END C SUBROUTINE CSIZE(IHORZ,IVERT) INCLUDE 'plautcom.f' IHORZ=(KHORSZ+KFACTR/2)/KFACTR IVERT=(KVERSZ+KFACTR/2)/KFACTR RETURN END C SUBROUTINE PNTMOD INCLUDE 'plautcom.f' CALL TOUTPT(31) DO 111 II=1,5 111 KPCHAR(II)=-1 KKMODE=2 IF(KTERM .GE. 3)CALL TOUTPT(28) RETURN END C SUBROUTINE IPMOD INCLUDE 'plautcom.f' DIMENSION ICODE(2) DATA ICODE(1),ICODE(2)/31,30/ CALL TOUTST(2,ICODE) KKMODE=3 KGRAFL=0 RETURN END C SUBROUTINE XYCNVT(IX,IY) INCLUDE 'plautcom.f' DIMENSION IPLT(6),IOPT(6) DATA IDREW,ISYN /0,22/ CALL PLTCHR(IX,IY,IPLT) LEN=0 IF(KPCHAR(1) .EQ. IPLT(1))GO TO 10 LEN=1 KPCHAR(1)=IPLT(1) IOPT(1)=IPLT(1) 10 IF(KTERM .LE. 2)GO TO 20 IF(KPCHAR(2) .EQ. IPLT(2))GO TO 20 LEN=LEN+1 KPCHAR(2)=IPLT(2) IOPT(LEN)=IPLT(2) GO TO 30 20 IF(KPCHAR(3) .NE. IPLT(3))GO TO 30 IF(KPCHAR(4) .EQ. IPLT(4))GO TO 40 30 LEN=LEN+1 KPCHAR(3)=IPLT(3) IOPT(LEN)=IPLT(3) IF(KPCHAR(4) .EQ. IPLT(4))GO TO 50 LEN=LEN+1 KPCHAR(4)=IPLT(4) IOPT(LEN)=IPLT(4) 40 IF(KPCHAR(5) .NE. IPLT(5))GO TO 50 IF(LEN .NE. 0)GO TO 50 IF(KMOVEF .EQ. 1)GO TO 50 IF(IDREW .EQ. 1)GO TO 80 50 LEN=LEN+1 KPCHAR(5)=IPLT(5) IOPT(LEN)=IPLT(5) 60 IF(LEN .GE. KPAD2)GO TO 70 LEN=LEN+1 IOPT(LEN)=ISYN GO TO 60 70 CALL TOUTST(LEN,IOPT) IDREW=1 IF(KMOVEF .EQ. 1)IDREW=0 KMOVEF=0 80 KBEAMX=IX KBEAMY=IY RETURN END C FUNCTION LINWDT(NUMCHR) INCLUDE 'plautcom.f' LINWDT=(KHORSZ * NUMCHR + KFACTR/2)/KFACTR RETURN END C FUNCTION LINHGT(NUMLIN) INCLUDE 'plautcom.f' LINHGT=(KVERSZ * NUMLIN + KFACTR/2)/KFACTR RETURN END C SUBROUTINE CHRSIZ(K) INCLUDE 'plautcom.f' DIMENSION ICODE(2),ICHRTB(2,4) COMMON /TKCHRT/ ICHRTB DATA ICHRTB(1,1),ICHRTB(2,1)/56,88/ DATA ICHRTB(1,2),ICHRTB(2,2)/51,83/ DATA ICHRTB(1,3),ICHRTB(2,3)/34,53/ DATA ICHRTB(1,4),ICHRTB(2,4)/31,48/ DATA ICODE(1)/27/ IF(KTERM .LE. 1)GO TO 10 IF(K .LT. 1)K=1 IF(K .GT. 4)K=4 KSIZEF=K KHORSZ=ICHRTB(1,K) KVERSZ=ICHRTB(2,K) ICODE(2)=55+K CALL TOUTST(2,ICODE) 10 RETURN END C SUBROUTINE CZAXIS(ICODE) INCLUDE 'plautcom.f' IF(KTERM .LE. 1)GO TO 10 KZAXIS=ICODE CALL CWSEND 10 RETURN END C SUBROUTINE CWSEND INCLUDE 'plautcom.f' DIMENSION ICODE(2) DATA ICODE(1)/27/ ICODE(2)=96+KZAXIS*8+KLINE CALL TOUTST(2,ICODE) RETURN END C SUBROUTINE PLTCHR(IX,IY,ICHAR) INCLUDE 'plautcom.f' DIMENSION ICHAR(*) KX=IX*KFACTR KY=IY*KFACTR ICHAR(1)=MOD(KY/128,32)+32 ICHAR(2)=MOD(KY,4)*4+MOD(KX,4)+96 ICHAR(3)=MOD(KY/4,32)+96 ICHAR(4)=MOD(KX/128,32)+32 ICHAR(5)=MOD(KX/4,32)+64 RETURN END C SUBROUTINE A1IN(NCHAR,IA1) INCLUDE 'plautcom.f' DIMENSION IADE(74), IA1(1) CALL ALFMOD ISEND = MIN0(NCHAR,74) CALL TINSTR(ISEND,IADE) CALL KAS2A1(ISEND,IADE,IA1) RETURN END C SUBROUTINE AINST(NCHAR,IAM) INCLUDE 'plautcom.f' DIMENSION IADE(74), IAM(1) CALL ALFMOD ISEND = MIN0(NCHAR,74) CALL TINSTR(ISEND,IADE) CALL KAS2AM(ISEND,IADE,IAM) RETURN END C SUBROUTINE TINPUT(IN) INCLUDE 'plautcom.f' DIMENSION INT(1) CALL TINSTR(1,INT) IN=INT(1) RETURN END C SUBROUTINE A1OUT(NCHAR,IA1) INCLUDE 'plautcom.f' DIMENSION IADE(72),IA1(1) ITEMP=NCHAR DO 10 I=1,NCHAR,72 ISEND=72 IF(ITEMP .LT. 72)ISEND=ITEMP CALL KA12AS(ISEND,IA1(I),IADE) CALL ANSTR(ISEND,IADE) 10 ITEMP=ITEMP-72 RETURN END C SUBROUTINE AOUTST(NCHAR,IAM) INCLUDE 'plautcom.f' DIMENSION IADE(72) ITEMP = NCHAR DO 10 I=1,NCHAR,72 ISEND = MIN0(ITEMP,72) CALL KAM2AS(ISEND) CALL ANSTR(ISEND,IADE) 10 ITEMP = ITEMP - 72 RETURN END C SUBROUTINE ANSTR(NCHAR,IADE) INCLUDE 'plautcom.f' DIMENSION IADE(1) IPT=1 IF(KKMODE .NE. 0)CALL ALFMOD IF(KBEAMX .LT. KLMRGN)GO TO 10 IF(KBEAMX .LT. KRMRGN)GO TO 20 10 CALL NEWLIN 20 ISEND=((KRMRGN-KBEAMX)*KFACTR+KHORSZ-1)/KHORSZ IF(ISEND .LT. 1)ISEND=1 IEND=IPT+ISEND-1 IF(IEND .GT. NCHAR)ISEND=NCHAR-IPT+1 CALL TOUTST(ISEND,IADE(IPT)) KBEAMX=KBEAMX+(ISEND*KHORSZ+KFACTR/2)/KFACTR IPT=IPT+ISEND IF(IEND .LT. NCHAR)GO TO 10 RETURN END C SUBROUTINE ANCHO(ICHAR) INCLUDE 'plautcom.f' IF(KKMODE.EQ.0)GO TO 10 CALL ALFMOD 10 CALL TOUTPT(ICHAR) KBEAMX=KBEAMX+(KHORSZ+KFACTR/2)/KFACTR IF(KBEAMX.LT.KRMRGN)GO TO 20 CALL NEWLIN 20 RETURN END C SUBROUTINE TOUTPT(KKOUT) INCLUDE 'plautcom.f' DIMENSION KOUT(1) KOUT(1)=KKOUT CALL TOUTST(1,KOUT) RETURN END C SUBROUTINE ALFMOD INCLUDE 'plautcom.f' CALL TOUTPT(31) KKMODE=0 IF(KBEAMY.GT.KHOMEY) KBEAMY=KHOMEY RETURN END C SUBROUTINE TOUTST(LEN,IADE) INCLUDE 'plautcom.f' integer*2 iout(75) INTEGER IADE(1), FIRST, BLOKLEN COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE DATA BLOKLEN /73/ IF((LEN.LE.0) .OR. (KWRITE.LE.0))RETURN FIRST = 1 LAST = BLOKLEN 20 IF(LAST.GT.LEN)LAST = LEN NXTOUT = 0 DO 40 I=FIRST,LAST NXTOUT = NXTOUT + 1 40 IOUT(NXTOUT) = IADE(I) WRITE(KWRITE,101)char(iout(1)) if(nxtout.gt.1)then do 99 i=2,nxtout write(kwrite,101)char(iout(i)) 99 continue endif 101 FORMAT(A1,$) IF(LAST.GE.LEN)RETURN FIRST = FIRST + BLOKLEN LAST = LAST + BLOKLEN GO TO 20 END C SUBROUTINE TINSTR(NCHAR,IADE) INCLUDE 'plautcom.f' INTEGER IBUFF(75), IADE(1) COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE DATA IBLANK /32/ IF(NCHAR.LE.0)RETURN IF(INMODE.EQ.0 .AND. KINLFT.GT.0)GO TO 20 CALL ADEIN(IGOT,IBUFF) NXTOUT = 0 MOVENUM = 0 KINLFT = IGOT IF(KINLFT .LE. 0)GO TO 60 20 MOVENUM = NCHAR IF(MOVENUM .GT. KINLFT)MOVENUM = KINLFT DO 40 I=1,MOVENUM NXTOUT = NXTOUT + 1 IADE(I) = IBUFF(NXTOUT) 40 CONTINUE KINLFT = IGOT - NXTOUT IF(MOVENUM .LT. NCHAR)GO TO 60 IF(INMODE .EQ. 1)KINLFT = 0 RETURN 60 KINLFT = 0 MOVENUM = MOVENUM + 1 DO 80 I=MOVENUM,NCHAR IADE(I) = IBLANK 80 CONTINUE RETURN END C SUBROUTINE ADEIN(ICOUNT,IBUFF) INCLUDE 'plautcom.f' INTEGER IPK(75), IBUFF(1) COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE ICOUNT = 0 IF((KREAD.EQ.0) .OR. (KWRITE.EQ.0))RETURN READ(KREAD,101)IPK 101 FORMAT(75A1) DO 40 I=1,75 IF(IPK(I) .EQ. 0)GO TO 40 IF(IPK(I) .EQ. 15) GO TO 80 IF(IPK(I) .NE. 10) GO TO 30 ITEMP = MAX0(ITEMP-1,0) GO TO 40 30 ITEMP = ITEMP + 1 IBUFF(ITEMP) = IPK(I) 40 CONTINUE 80 ICOUNT = MAX0(ITEMP,0) RETURN END C SUBROUTINE IOSET(KIN,KOUT,KBUF,KBL) INCLUDE 'plautcom.f' COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE DATA KREAD, KWRITE, KSPOOL, INMODE /3*0,0/ KREAD = KIN KWRITE = KOUT IF((KREAD.LT.0) .OR. (KREAD.GT.99)) KREAD = 0 IF((KWRITE.LT.0) .OR. (KWRITE.GT.99)) KWRITE = 0 RETURN END C SUBROUTINE TSEND INCLUDE 'plautcom.f' RETURN END C SUBROUTINE BUFMOD INCLUDE 'plautcom.f' COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE INMODE = 0 RETURN END C SUBROUTINE LINMOD INCLUDE 'plautcom.f' COMMON /TIOCOM/ KREAD, KWRITE, KSPOOL, INMODE INMODE = 1 KINLFT = 0 RETURN END C SUBROUTINE KAS2A1(NCHAR,KADE,KA1) INCLUDE 'plautcom.f' INTEGER KA1(1), KADE(1) IF(NCHAR .LE. 0)RETURN DO 100 I=1,NCHAR 100 KA1(I) = KADE(I) RETURN END C SUBROUTINE KA12AS(NCHAR,KA1,KADE) INCLUDE 'plautcom.f' INTEGER KA1(1), KADE(1) IF(NCHAR .LE. 0)RETURN DO 100 I=1,NCHAR 100 KADE(I) = KA1(I) RETURN END C SUBROUTINE KAS2AM(NCHAR,KADE,KAM) INCLUDE 'plautcom.f' INTEGER KADE(1), KAM(1) IF(NCHAR .LE. 0) RETURN IN = 0 IOUT = 0 LEFT = NCHAR IF(LEFT .LT. 4) GO TO 60 20 IOUT = IOUT + 1 KAM(IOUT) = KADE(IN+1)+KADE(IN+2)*256 KAM(IOUT) = KAM(IOUT)+KADE(IN+3)*65536+KADE(IN+4)*16777216 IN = IN + 4 LEFT = LEFT - 4 IF(LEFT .GE. 4) GO TO 20 IF(LEFT .EQ. 0) RETURN 60 IOUT = IOUT + 1 IF(LEFT.NE.3) GO TO 61 KAM(IOUT)=KADE(IN+1)+KADE(IN+2)*256+KADE(IN+3)*65536+32*16777216 RETURN 61 IF(LEFT.NE.2) GO TO 62 KAM(IOUT)=KADE(IN+1)+KADE(IN+2)*256+32*65536+32*16777216 RETURN 62 IF(LEFT.NE.1) RETURN KAM(IOUT)=KADE(IN+1)+32*256+32*65536+32*16777216 RETURN END C SUBROUTINE KAM2AS(NCHAR) INCLUDE 'plautcom.f' IF(NCHAR .LE. 0) RETURN RETURN END auto/07p/plaut/plautint.f0000640000175000017500000001214213570013207013376 0ustar skskC----------------------------------------------------------------------- C----------------------------------------------------------------------- C Interface Subroutines for Calls to External Graphics Package C----------------------------------------------------------------------- C----------------------------------------------------------------------- C SUBROUTINE DFREV C DEFINES THE SCREEN SIZE OF THE GRAPHICS PACKAGE COMMON /REVTN/ P10DX,P10DY,P10DXY,PDX,PDY,PDXY C P10DX =1023 P10DY = 780 P10DXY = SQRT(P10DX**2 + P10DY**2) C RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- C CALLS PLOTTING PACKAGE ROUTINES C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE PLCMDS(ICMDNO) REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY INTEGER NVX(2),SPLPT COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /NORPAK/ NXOLD,NYOLD,NXNEW,NYNEW C IF(ICMDNO.GT.10)RETURN GO TO (1,2,3,4,5,6,7,8,9,10) ICMDNO 1 CALL INITT(120,5,IWRITE,0,0) RETURN 2 CALL MOVEA(IX,IY) RETURN 3 CALL DRAWA(IX,IY) RETURN 4 CALL WINCT(X,Y,X1,Y1) CALL MOVEA(X1,Y1) RETURN 5 CALL WINCT(X,Y,X1,Y1) CALL DRAWA(X1,Y1) RETURN 6 CALL REVCT(IX,IY,X,Y) RETURN 7 CALL WINCT(X,Y,IX,IY) RETURN 8 CALL ANMODE RETURN 9 CALL HOME RETURN 10 CALL WINCT(X,Y,X1,Y1) CALL POINTA(X1,Y1) RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- C PRINTS TITLE AND COORDINATE NUMBERS C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE PLCTNM(ICODE) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY CHARACTER*1 CHONE,CHTWO*2,CHFIF*15,ADJ*80 COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /IO/ IWRITE,ITERM,ISAVE COMMON /XYLAB/ XYNUM COMMON /PTITLE/ ADJ,NCHR COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF C CALL PLCMDS(2) CALL PLCMDS(8) IF (ICODE.EQ.1) THEN IF (NCHR.EQ.30) THEN WRITE(IWRITE,1) (ADJ(I:I),I=1,NCHR) ELSE WRITE(IWRITE,2) (ADJ(I:I),I=1,NCHR) END IF ELSE IF (ICODE.EQ.22) THEN IF (INDXCH.EQ.1) THEN WRITE(IWRITE,3) CHONE ELSE WRITE(IWRITE,4) CHTWO END IF ELSE IF (ICODE.EQ.23) THEN WRITE(IWRITE,5) (CHFIF(I:I),I=1,INDXCH) END IF 1 FORMAT(30A1,$) 2 FORMAT(60A1,$) 3 FORMAT(A1,$) 4 FORMAT(A2,$) 5 FORMAT(15A1,$) C RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE PLCHDW(ICODE) C----------------------------------------------------------------------- C----------------------------------------------------------------------- C INTEGER ATNO,ADDO,EO,CRO,ATNOF,ADDOF,EOF,CROF,IESC(12) COMMON /IO/ IWRITE,ITERM,ISAVE DATA ATNO,ADDO,EO,CRO /27,65,69,13/ DATA ATNOF,ADDOF,EOF,CROF /27,65,70,13/ DATA IESC /27,60,27,91,48,59,48,72,27,91,50,74/ C C---------------------------------------------------------------------- C THIS BLOCK FOR PLOT-10 PLOTTER AND TO CLEAR ALFA MODE C---------------------------------------------------------------------- C GO TO (1,2,3) ICODE C *TURN ON PLOTTER 1 WRITE(ITERM,4) ATNO,ADDO,EO,CRO RETURN C *TURN OFF PLOTTER 2 WRITE(ITERM,4) ATNOF,ADDOF,EOF,CROF RETURN C *CLEAR ALFA MODE 3 CONTINUE C 4 FORMAT(1X,4A1) C RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- C PRINTS STRING CHARACTERS ON SCREEN C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE PLCCAL(ICODE) INTEGER NVX(2),SPLPT REAL IX,IY,MINSX,MAXSX,MINSY,MAXSY CHARACTER*1 CHONE,CHTWO*2,CHFIF*15,ADJ*80 COMMON /PLVARS/ IX,IY,X,Y,XMIN,XMAX,YMIN,YMAX,MINSX,MAXSX, + MINSY,MAXSY,NVX,SPLPT COMMON /PTITLE/ ADJ,NCHR COMMON /LBNM/ INDXCH,CHONE,CHTWO,CHFIF COMMON /REVTN/ P10DX,P10DY,P10DXY,PDX,PDY,PDXY C RETURN END C----------------------------------------------------------------------- C----------------------------------------------------------------------- auto/07p/plaut/README0000640000175000017500000000121313570013207012244 0ustar skskType "make" to compile PLAUT. Type "make clean" to remove unnecessary files after compilation. =============================================================== Known Problems : - The s-file orbit is not plotted correctly if, for example, the first two lines of the data set look like : 1 20 9 3 4 1 41 5 87 10 4 0.0000000000E+00 -1.0483288692E-26 -3.8282567843E-16 1.5654469197E+00 1.5654469197E+00 ==== - Axes labelling algorithm does not always work properly. - One should be able to select "A" ("all") after typing 2D while one is already in the 2D mode. auto/07p/configure0000750000175000017500000070264113570013207012162 0ustar sksk#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="plaut04/src/gmain.c++" ac_subst_vars='LTLIBOBJS LIBOBJS DEPS_INCLUDES DEPS_LIBS SOXT_OBJS_R3B SOXT_OBJS PLAUT04 MOC HAVE_SOXT_CONFIG HAVE_SOQT_CONFIG HAVE_COIN_CONFIG ac_ct_CXX CXXFLAGS CXX TEK2PS GUI PLAUT FFLAGS EGREP GREP X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS CPP XMKMF SET_MAKE FCLIBS host_os host_vendor host_cpu host build_os build_vendor build_cpu build COMPAT FCFLAGS_f90 ac_ct_FC FCFLAGS INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC MPIFILE OPT_FLAG MPIFC FC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir runstatedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_optimization_flags with_openmp with_mpi enable_plaut enable_plaut04 enable_plaut04_qt enable_gui enable_tek2ps with_x ' ac_precious_vars='build_alias host_alias target_alias FC MPIFC CC CFLAGS LDFLAGS LIBS CPPFLAGS FCFLAGS XMKMF CPP CXX CXXFLAGS CCC' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-plaut Compile the Plaut plotting package (default: yes) --enable-plaut04 Compile the Plaut04 plotting package (default: yes) --enable-plaut04-qt Try to use QT instead of Motif/LessTif for Plaut04 (default: yes) --enable-gui Compile the Motif based GUI package (default: no) --enable-tek2ps Compile the Tek2ps conversion utility (default: yes) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-optimization-flags=FLAGS Choose an optimization flag to give to the compilers (default: -O) --with-openmp Try to use OpenMP (default: yes) --with-mpi Try to use MPI (default: no) --with-x use the X Window System Some influential environment variables: FC Choose a Fortran (>=90) compiler other than the default MPIFC Command to use to compile MPI programs (default: mpif90) CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory FCFLAGS Fortran compiler flags XMKMF Path to xmkmf, Makefile generator for X Window System CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_fc_try_compile LINENO # --------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_compile # ac_fn_fc_try_link LINENO # ------------------------ # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_fc_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_fc_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_fc_try_link # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_cxx_try_link LINENO # ------------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers include/config.h" # Check whether --with-optimization-flags was given. if test "${with_optimization_flags+set}" = set; then : withval=$with_optimization_flags; OPT_FLAG=$withval else OPT_FLAG="-O" fi # Check whether --with-openmp was given. if test "${with_openmp+set}" = set; then : withval=$with_openmp; openmp=$withval else openmp="yes" fi # Check whether --with-mpi was given. if test "${with_mpi+set}" = set; then : withval=$with_mpi; mpi=$withval else mpi="no" fi # Check whether --enable-plaut was given. if test "${enable_plaut+set}" = set; then : enableval=$enable_plaut; ENABLE_PLAUT=$enableval else ENABLE_PLAUT=yes fi # Check whether --enable-plaut04 was given. if test "${enable_plaut04+set}" = set; then : enableval=$enable_plaut04; ENABLE_PLAUT04=$enableval else ENABLE_PLAUT04=yes fi # Check whether --enable-plaut04-qt was given. if test "${enable_plaut04_qt+set}" = set; then : enableval=$enable_plaut04_qt; ENABLE_PLAUT04_QT=$enableval else ENABLE_PLAUT04_QT=yes fi # Check whether --enable-gui was given. if test "${enable_gui+set}" = set; then : enableval=$enable_gui; ENABLE_GUI=$enableval else ENABLE_GUI=no fi # Check whether --enable-tek2ps was given. if test "${enable_tek2ps+set}" = set; then : enableval=$enable_tek2ps; ENABLE_TEK2PS=$enableval else ENABLE_TEK2PS=yes fi MPIFILE=nompi.f90 if test x$mpi = "xyes"; then # We first check for the MPI compilation script. If it exists # we try and us it to override the default compiler. if test x$MPIFC = "x"; then # sometimes (FC4/5) mpif77 actually calls f95... for ac_prog in mpif90 mpif95 mpif77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MPIFC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MPIFC"; then ac_cv_prog_MPIFC="$MPIFC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MPIFC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MPIFC=$ac_cv_prog_MPIFC if test -n "$MPIFC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MPIFC" >&5 $as_echo "$MPIFC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MPIFC" && break done test -n "$MPIFC" || MPIFC=""no"" if test x$MPIFC = "xmpif77"; then if ! ( $MPIFC -v 2>&1 | grep f95 > /dev/null ) ; then MPIFC=no fi fi fi if test x$MPIFC != "xno"; then MPI="yes" MPIFILE=mpi.f90 FC=$MPIFC fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # adjust include path if gfortran is installed without MinGW on Windows cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else CPPFLAGS="$CPPFLAGS -iwithprefix ../../../../include" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test x$FCFLAGS != "x"; then FFLAGS=$FCFLAGS fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test -n "$ac_tool_prefix"; then for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_FC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$FC"; then ac_cv_prog_FC="$FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_FC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi FC=$ac_cv_prog_FC if test -n "$FC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FC" >&5 $as_echo "$FC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$FC" && break done fi if test -z "$FC"; then ac_ct_FC=$FC for ac_prog in gfortran g95 xlf95 f95 fort ifort ifc efc pgfortran pgf95 lf95 ftn nagfor xlf90 f90 pgf90 pghpf epcf90 g77 xlf f77 frt pgf77 cf77 fort77 fl32 af77 do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_FC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_FC"; then ac_cv_prog_ac_ct_FC="$ac_ct_FC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_FC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_FC=$ac_cv_prog_ac_ct_FC if test -n "$ac_ct_FC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FC" >&5 $as_echo "$ac_ct_FC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_FC" && break done if test "x$ac_ct_FC" = x; then FC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac FC=$ac_ct_FC fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done rm -f a.out # If we don't use `.F' as extension, the preprocessor is not run on the # input file. (Note that this only needs to work for GNU compilers.) ac_save_ext=$ac_ext ac_ext=F { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU Fortran compiler" >&5 $as_echo_n "checking whether we are using the GNU Fortran compiler... " >&6; } if ${ac_cv_fc_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main #ifndef __GNUC__ choke me #endif end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_fc_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_compiler_gnu" >&5 $as_echo "$ac_cv_fc_compiler_gnu" >&6; } ac_ext=$ac_save_ext ac_test_FCFLAGS=${FCFLAGS+set} ac_save_FCFLAGS=$FCFLAGS FCFLAGS= { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $FC accepts -g" >&5 $as_echo_n "checking whether $FC accepts -g... " >&6; } if ${ac_cv_prog_fc_g+:} false; then : $as_echo_n "(cached) " >&6 else FCFLAGS=-g cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_cv_prog_fc_g=yes else ac_cv_prog_fc_g=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_g" >&5 $as_echo "$ac_cv_prog_fc_g" >&6; } if test "$ac_test_FCFLAGS" = set; then FCFLAGS=$ac_save_FCFLAGS elif test $ac_cv_prog_fc_g = yes; then if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-g -O2" else FCFLAGS="-g" fi else if test "x$ac_cv_fc_compiler_gnu" = xyes; then FCFLAGS="-O2" else FCFLAGS= fi fi if test $ac_compiler_gnu = yes; then GFC=yes else GFC= fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag to compile .f90 files" >&5 $as_echo_n "checking for Fortran flag to compile .f90 files... " >&6; } if ${ac_cv_fc_srcext_f90+:} false; then : $as_echo_n "(cached) " >&6 else ac_ext=f90 ac_fcflags_srcext_save=$ac_fcflags_srcext ac_fcflags_srcext= ac_cv_fc_srcext_f90=unknown case $ac_ext in #( [fF]77) ac_try=f77;; #( *) ac_try=f95;; esac for ac_flag in none -qsuffix=f=f90 -Tf "-x $ac_try"; do test "x$ac_flag" != xnone && ac_fcflags_srcext="$ac_flag" cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_cv_fc_srcext_f90=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest.$ac_objext conftest.f90 ac_fcflags_srcext=$ac_fcflags_srcext_save fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_srcext_f90" >&5 $as_echo "$ac_cv_fc_srcext_f90" >&6; } if test "x$ac_cv_fc_srcext_f90" = xunknown; then as_fn_error $? "Fortran could not compile .f90 files" "$LINENO" 5 else ac_fc_srcext=f90 if test "x$ac_cv_fc_srcext_f90" = xnone; then ac_fcflags_srcext="" FCFLAGS_f90="" else ac_fcflags_srcext=$ac_cv_fc_srcext_f90 FCFLAGS_f90=$ac_cv_fc_srcext_f90 fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran flag needed to accept free-form source" >&5 $as_echo_n "checking for Fortran flag needed to accept free-form source... " >&6; } if ${ac_cv_fc_freeform+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_fc_freeform=unknown ac_fc_freeform_FCFLAGS_save=$FCFLAGS for ac_flag in none -ffree-form -FR -free -qfree -Mfree -Mfreeform \ -freeform "-f free" -8 +source=free -nfix --nfix -Free do test "x$ac_flag" != xnone && FCFLAGS="$ac_fc_freeform_FCFLAGS_save $ac_flag" cat > conftest.$ac_ext <<_ACEOF program freeform ! FIXME: how to best confuse non-freeform compilers? print *, 'Hello ', & 'world.' end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_cv_fc_freeform=$ac_flag; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done rm -f conftest.err conftest.$ac_objext conftest.$ac_ext FCFLAGS=$ac_fc_freeform_FCFLAGS_save fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_freeform" >&5 $as_echo "$ac_cv_fc_freeform" >&6; } if test "x$ac_cv_fc_freeform" = xunknown; then echo Fortran 77 compilers no longer work to compile AUTO. echo Please check with the manual. exit 1 else if test "x$ac_cv_fc_freeform" != xnone; then FCFLAGS="$FCFLAGS $ac_cv_fc_freeform" fi fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu # ifc needs -Vaxlib to use FLUSH and ETIME. COMPAT="f2003" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for F2003 or pre-F2003 compatibility functions" >&5 $as_echo_n "checking for F2003 or pre-F2003 compatibility functions... " >&6; } cat > conftest.$ac_ext <<_ACEOF program main real t character*80 s print *,'hello' flush(6) call cpu_time(t) t=command_argument_count() call get_command_argument(0,s) end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : else COMPAT="unix"; cat > conftest.$ac_ext <<_ACEOF program main real t(2),r,etime character*80 s print *,'hello' call flush(6) r=etime(t) t=iargc() call getarg(0,s) end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : else tmp=$FCFLAGS; FCFLAGS="$FCFLAGS -Vaxlib" cat > conftest.$ac_ext <<_ACEOF program main real t(2),r,etime character*80 s print *,'hello' call flush(6) r=etime(t) t=iargc() call getarg(0,s) end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : FFLAGS="$FFLAGS -Vaxlib" else FCFLAGS=$tmp;COMPAT="compat" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $COMPAT.f90" >&5 $as_echo "$COMPAT.f90" >&6; } # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to get verbose linking output from $FC" >&5 $as_echo_n "checking how to get verbose linking output from $FC... " >&6; } if ${ac_cv_prog_fc_v+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : ac_cv_prog_fc_v= # Try some options frequently used verbose output for ac_verb in -v -verbose --verbose -V -\#\#\#; do cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_verb" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac # look for -l* and *.a constructs in the output for ac_arg in $ac_fc_v_output; do case $ac_arg in [\\/]*.a | ?:[\\/]*.a | -[lLRu]*) ac_cv_prog_fc_v=$ac_verb break 2 ;; esac done done if test -z "$ac_cv_prog_fc_v"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot determine how to obtain linking information from $FC" >&5 $as_echo "$as_me: WARNING: cannot determine how to obtain linking information from $FC" >&2;} fi else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: compilation failed" >&5 $as_echo "$as_me: WARNING: compilation failed" >&2;} fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_fc_v" >&5 $as_echo "$ac_cv_prog_fc_v" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran libraries of $FC" >&5 $as_echo_n "checking for Fortran libraries of $FC... " >&6; } if ${ac_cv_fc_libs+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$FCLIBS" != "x"; then ac_cv_fc_libs="$FCLIBS" # Let the user override the test. else cat > conftest.$ac_ext <<_ACEOF program main end _ACEOF # Compile and link our simple test program by passing a flag (argument # 1 to this macro) to the Fortran compiler in order to get # "verbose" output that we can then parse for the Fortran linker # flags. ac_save_FCFLAGS=$FCFLAGS FCFLAGS="$FCFLAGS $ac_cv_prog_fc_v" eval "set x $ac_link" shift $as_echo "$as_me:${as_lineno-$LINENO}: $*" >&5 # gfortran 4.3 outputs lines setting COLLECT_GCC_OPTIONS, COMPILER_PATH, # LIBRARY_PATH; skip all such settings. ac_fc_v_output=`eval $ac_link 5>&1 2>&1 | sed '/^Driving:/d; /^Configured with:/d; '"/^[_$as_cr_Letters][_$as_cr_alnum]*=/d"` $as_echo "$ac_fc_v_output" >&5 FCFLAGS=$ac_save_FCFLAGS rm -rf conftest* # On HP/UX there is a line like: "LPATH is: /foo:/bar:/baz" where # /foo, /bar, and /baz are search directories for the Fortran linker. # Here, we change these into -L/foo -L/bar -L/baz (and put it first): ac_fc_v_output="`echo $ac_fc_v_output | grep 'LPATH is:' | sed 's|.*LPATH is\(: *[^ ]*\).*|\1|;s|: */| -L/|g'` $ac_fc_v_output" # FIXME: we keep getting bitten by quoted arguments; a more general fix # that detects unbalanced quotes in FLIBS should be implemented # and (ugh) tested at some point. case $ac_fc_v_output in # With xlf replace commas with spaces, # and remove "-link" and closing parenthesis. *xlfentry*) ac_fc_v_output=`echo $ac_fc_v_output | sed ' s/,/ /g s/ -link / /g s/) *$// ' ` ;; # With Intel ifc, ignore the quoted -mGLOB_options_string stuff (quoted # $LIBS confuse us, and the libraries appear later in the output anyway). *mGLOB_options_string*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"-mGLOB[^"]*"/ /g'` ;; # Portland Group compiler has singly- or doubly-quoted -cmdline argument # Singly-quoted arguments were reported for versions 5.2-4 and 6.0-4. # Doubly-quoted arguments were reported for "PGF90/x86 Linux/x86 5.0-2". *-cmdline\ * | *-ignore\ * | *-def\ *) ac_fc_v_output=`echo $ac_fc_v_output | sed "\ s/-cmdline *'[^']*'/ /g; s/-cmdline *\"[^\"]*\"/ /g s/-ignore *'[^']*'/ /g; s/-ignore *\"[^\"]*\"/ /g s/-def *'[^']*'/ /g; s/-def *\"[^\"]*\"/ /g"` ;; # If we are using fort77 (the f2c wrapper) then filter output and delete quotes. *fort77*f2c*gcc*) ac_fc_v_output=`echo "$ac_fc_v_output" | sed -n ' /:[ ]\+Running[ ]\{1,\}"gcc"/{ /"-c"/d /[.]c"*/d s/^.*"gcc"/"gcc"/ s/"//gp }'` ;; # If we are using Cray Fortran then delete quotes. *cft90*) ac_fc_v_output=`echo $ac_fc_v_output | sed 's/"//g'` ;; esac ac_cv_fc_libs= # Save positional arguments (if any) ac_save_positional="$@" set X $ac_fc_v_output while test $# != 1; do shift ac_arg=$1 case $ac_arg in [\\/]*.a | ?:[\\/]*.a) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -bI:*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_arg; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi fi ;; # Ignore these flags. -lang* | -lcrt*.o | -lc | -lgcc* | -lSystem | -libmil | -little \ |-LANG:=* | -LIST:* | -LNO:* | -link) ;; -lkernel32) case $host_os in *cygwin*) ;; *) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; esac ;; -[LRuYz]) # These flags, when seen by themselves, take an argument. # We remove the space between option and argument and re-iterate # unless we find an empty arg or a new option (starting with -) case $2 in "" | -*);; *) ac_arg="$ac_arg$2" shift; shift set X $ac_arg "$@" ;; esac ;; -YP,*) for ac_j in `$as_echo "$ac_arg" | sed -e 's/-YP,/-L/;s/:/ -L/g'`; do ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_j" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_arg="$ac_arg $ac_j" ac_cv_fc_libs="$ac_cv_fc_libs $ac_j" fi done ;; -[lLR]*) ac_exists=false for ac_i in $ac_cv_fc_libs; do if test x"$ac_arg" = x"$ac_i"; then ac_exists=true break fi done if test x"$ac_exists" = xtrue; then : else ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" fi ;; -zallextract*| -zdefaultextract) ac_cv_fc_libs="$ac_cv_fc_libs $ac_arg" ;; # Ignore everything else. esac done # restore positional arguments set X $ac_save_positional; shift # We only consider "LD_RUN_PATH" on Solaris systems. If this is seen, # then we insist that the "run path" must be an absolute path (i.e. it # must begin with a "/"). case `(uname -sr) 2>/dev/null` in "SunOS 5"*) ac_ld_run_path=`$as_echo "$ac_fc_v_output" | sed -n 's,^.*LD_RUN_PATH *= *\(/[^ ]*\).*$,-R\1,p'` test "x$ac_ld_run_path" != x && if test "$ac_compiler_gnu" = yes; then for ac_link_opt in $ac_ld_run_path; do ac_cv_fc_libs="$ac_cv_fc_libs -Xlinker $ac_link_opt" done else ac_cv_fc_libs="$ac_cv_fc_libs $ac_ld_run_path" fi ;; esac fi # test "x$[]_AC_LANG_PREFIX[]LIBS" = "x" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_libs" >&5 $as_echo "$ac_cv_fc_libs" >&6; } FCLIBS="$ac_cv_fc_libs" ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; } if ${ac_cv_fc_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 $as_echo "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown; then : fc_dummy="yes" else fc_dummy="no" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu realcc=$CC if test x$fc_dummy = "xno"; then # Use gfortran/g95 to link wrapper functions if possible. # It appears that otherwise AC_FC_WRAPPERS gets confused on Windows, # because of spaces in names such as 'Program Files' CC=$FC # avoid caching previous result $as_unset ac_cv_fc_dummy_main ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dummy main to link with Fortran libraries" >&5 $as_echo_n "checking for dummy main to link with Fortran libraries... " >&6; } if ${ac_cv_fc_dummy_main+:} false; then : $as_echo_n "(cached) " >&6 else ac_fc_dm_save_LIBS=$LIBS LIBS="$LIBS $FCLIBS" ac_fortran_dm_var=FC_DUMMY_MAIN ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu # First, try linking without a dummy main: cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=none else ac_cv_fortran_dummy_main=unknown fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test $ac_cv_fortran_dummy_main = unknown; then for ac_func in MAIN__ MAIN_ __main MAIN _MAIN __MAIN main_ main__ _main; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define $ac_fortran_dm_var $ac_func #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_fortran_dummy_main=$ac_func; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_cv_fc_dummy_main=$ac_cv_fortran_dummy_main rm -rf conftest* LIBS=$ac_fc_dm_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_dummy_main" >&5 $as_echo "$ac_cv_fc_dummy_main" >&6; } FC_DUMMY_MAIN=$ac_cv_fc_dummy_main if test "$FC_DUMMY_MAIN" != unknown; then : fc_dummy="yes" else fc_dummy="no" fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu fi if test x$fc_dummy = "xno"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \"Warning: can't link C with Fortran\"" >&5 $as_echo "$as_me: WARNING: \"Warning: can't link C with Fortran\"" >&2;} fi ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Fortran name-mangling scheme" >&5 $as_echo_n "checking for Fortran name-mangling scheme... " >&6; } if ${ac_cv_fc_mangling+:} false; then : $as_echo_n "(cached) " >&6 else cat > conftest.$ac_ext <<_ACEOF subroutine foobar() return end subroutine foo_bar() return end _ACEOF if ac_fn_fc_try_compile "$LINENO"; then : mv conftest.$ac_objext cfortran_test.$ac_objext ac_save_LIBS=$LIBS LIBS="cfortran_test.$ac_objext $LIBS $FCLIBS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success=no for ac_foobar in foobar FOOBAR; do for ac_underscore in "" "_"; do ac_func="$ac_foobar$ac_underscore" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success=yes; break 2 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success" = "yes"; then case $ac_foobar in foobar) ac_case=lower ac_foo_bar=foo_bar ;; FOOBAR) ac_case=upper ac_foo_bar=FOO_BAR ;; esac ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_success_extra=no for ac_extra in "" "_"; do ac_func="$ac_foo_bar$ac_underscore$ac_extra" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $ac_func (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return $ac_func (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_success_extra=yes; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu if test "$ac_success_extra" = "yes"; then ac_cv_fc_mangling="$ac_case case" if test -z "$ac_underscore"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, underscore" fi if test -z "$ac_extra"; then ac_cv_fc_mangling="$ac_cv_fc_mangling, no extra underscore" else ac_cv_fc_mangling="$ac_cv_fc_mangling, extra underscore" fi else ac_cv_fc_mangling="unknown" fi else ac_cv_fc_mangling="unknown" fi LIBS=$ac_save_LIBS rm -rf conftest* rm -f cfortran_test* else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compile a simple Fortran program See \`config.log' for more details" "$LINENO" 5; } fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_fc_mangling" >&5 $as_echo "$ac_cv_fc_mangling" >&6; } ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu case $ac_cv_fc_mangling in "lower case, no underscore, no extra underscore") $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) name" >>confdefs.h ;; "lower case, no underscore, extra underscore") $as_echo "#define FC_FUNC(name,NAME) name" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, no extra underscore") $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) name ## _" >>confdefs.h ;; "lower case, underscore, extra underscore") $as_echo "#define FC_FUNC(name,NAME) name ## _" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) name ## __" >>confdefs.h ;; "upper case, no underscore, no extra underscore") $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) NAME" >>confdefs.h ;; "upper case, no underscore, extra underscore") $as_echo "#define FC_FUNC(name,NAME) NAME" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, no extra underscore") $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) NAME ## _" >>confdefs.h ;; "upper case, underscore, extra underscore") $as_echo "#define FC_FUNC(name,NAME) NAME ## _" >>confdefs.h $as_echo "#define FC_FUNC_(name,NAME) NAME ## __" >>confdefs.h ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unknown Fortran name-mangling scheme" >&5 $as_echo "$as_me: WARNING: unknown Fortran name-mangling scheme" >&2;} ;; esac ac_ext=${ac_fc_srcext-f} ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5' ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_fc_compiler_gnu CC=$realcc if test x$openmp = "xyes"; then # Check for OpenMP. If it exists we try to use it. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenMP flag of Fortran compiler" >&5 $as_echo_n "checking for OpenMP flag of Fortran compiler... " >&6; } if ${ax_cv_fc_openmp+:} false; then : $as_echo_n "(cached) " >&6 else saveFCFLAGS=$FCFLAGS ax_cv_fc_openmp=unknown # Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), # -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" if test "x$OPENMP_FCFLAGS" != x; then ax_openmp_flags="$OPENMP_FCFLAGS $ax_openmp_flags" fi for ax_openmp_flag in $ax_openmp_flags; do case $ax_openmp_flag in none) FCFLAGS=$saveFC ;; *) FCFLAGS="$saveFCFLAGS $ax_openmp_flag" ;; esac cat > conftest.$ac_ext <<_ACEOF program main call omp_set_num_threads end _ACEOF if ac_fn_fc_try_link "$LINENO"; then : ax_cv_fc_openmp=$ax_openmp_flag; break fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext done FCFLAGS=$saveFCFLAGS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_cv_fc_openmp" >&5 $as_echo "$ax_cv_fc_openmp" >&6; } if test "x$ax_cv_fc_openmp" = "xunknown"; then openmp="no" else if test "x$ax_cv_fc_openmp" != "xnone"; then OPENMP_FCFLAGS=$ax_cv_fc_openmp fi FFLAGS="$FFLAGS $OPENMP_FCFLAGS" fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi #Check for the default X stuff ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.i conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = xyes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if ${ac_cv_lib_nsl_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if ${ac_cv_lib_bsd_gethostbyname+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = xyes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if ${ac_cv_lib_socket_connect+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = xyes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = xyes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if ${ac_cv_lib_posix_remove+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = xyes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if ${ac_cv_lib_ipc_shmat+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = xyes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi # We also need Motif. If we don't find it, X is not useful for us # so we set the same no_x variable as the above macro #Now we want to check to see is Motif is installed { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XmCreateMainWindow in -lXm" >&5 $as_echo_n "checking for XmCreateMainWindow in -lXm... " >&6; } if ${ac_cv_lib_Xm_XmCreateMainWindow+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lXm $X_PRE_LIBS $X_LIBS -lXt -lX11 $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XmCreateMainWindow (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return XmCreateMainWindow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_Xm_XmCreateMainWindow=yes else ac_cv_lib_Xm_XmCreateMainWindow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Xm_XmCreateMainWindow" >&5 $as_echo "$ac_cv_lib_Xm_XmCreateMainWindow" >&6; } if test "x$ac_cv_lib_Xm_XmCreateMainWindow" = xyes; then : X_LIBS="$X_LIBS -lXm -lXt -lX11" else no_x=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi CFLAGS="$CPPFLAGS $CFLAGS" if test x$ENABLE_PLAUT = xyes; then PLAUT=plaut else PLAUT="" fi if test x$no_x != xyes && test x$ENABLE_GUI = xyes; then GUI=gui else GUI="" fi if test x$ENABLE_TEK2PS = xyes; then TEK2PS=tek2ps else TEK2PS="" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CXX+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if ${ac_cv_cxx_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if ${ac_cv_prog_cxx_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : HAVE_CXX="yes" else HAVE_CXX="no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext PLAUT04_TEST=yes # Extract the first word of "coin-config", so it can be a program name with args. set dummy coin-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_HAVE_COIN_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_COIN_CONFIG"; then ac_cv_prog_HAVE_COIN_CONFIG="$HAVE_COIN_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_HAVE_COIN_CONFIG="true" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_COIN_CONFIG" && ac_cv_prog_HAVE_COIN_CONFIG="false" fi fi HAVE_COIN_CONFIG=$ac_cv_prog_HAVE_COIN_CONFIG if test -n "$HAVE_COIN_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_COIN_CONFIG" >&5 $as_echo "$HAVE_COIN_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi COIN_LIBS="-lCoin" COIN_LDFLAGS= COIN_INCLUDES= if test x$HAVE_COIN_CONFIG = "xtrue"; then COIN_LIBS="`coin-config --libs`" COIN_LDFLAGS="`coin-config --ldflags`" COIN_INCLUDES="`coin-config --cppflags`" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $COIN_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $COIN_LDFLAGS" tmp_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $COIN_INCLUDES" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main(void){SoDB::init();} _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : COIN3D="yes" else COIN3D="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x$COIN3D = "xno" && test x$CXX = "xg++"; then tmp_CXX=$CXX # for 64-bit Mac OS try with -m32 to link with 32bit coin CXX="g++ -m32" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main(void){SoDB::init();} _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : COIN3D="yes" else COIN3D="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test x$COIN3D = "xno"; then CXX=$tmp_CXX fi fi LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS CPPFLAGS=$tmp_CPPFLAGS if test x$COIN3D = "xno"; then { echo "configure: error: COIN3D is not installed"; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for abort in -lInventor" >&5 $as_echo_n "checking for abort in -lInventor... " >&6; } if ${ac_cv_lib_Inventor_abort+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lInventor $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char abort (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return abort (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_Inventor_abort=yes else ac_cv_lib_Inventor_abort=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_Inventor_abort" >&5 $as_echo "$ac_cv_lib_Inventor_abort" >&6; } if test "x$ac_cv_lib_Inventor_abort" = xyes; then : OI="yes" else OI="no" fi if test x$OI = "xno"; then { echo "configure: error: OI is not installed"; PLAUT04_TEST=no } else { DEPS_LIBS="$DEPS_LIBS -lInventor" echo "configure: SGI Open Inventor OK. $DEPS_LIBS"; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for abort in -lInventorXt" >&5 $as_echo_n "checking for abort in -lInventorXt... " >&6; } if ${ac_cv_lib_InventorXt_abort+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lInventorXt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char abort (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return abort (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_InventorXt_abort=yes else ac_cv_lib_InventorXt_abort=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_InventorXt_abort" >&5 $as_echo "$ac_cv_lib_InventorXt_abort" >&6; } if test "x$ac_cv_lib_InventorXt_abort" = xyes; then : OIXTLIB="yes" else OIXTLIB="no" fi if test x$OIXTLIB = "xno"; then { echo "configure: error: SGI Open Inventor Xt Library is not installed"; PLAUT04_TEST=no; } else { DEPS_LIBS="$DEPS_LIBS -lInventorXt" echo "configure: SGI Open Inventor Xt OK. $DEPS_LIBS"; } fi } fi } else { echo "configure: Coin3d OK."; SOXT_LDFLAGS=$COIN_LDFLAGS SOXT_LIBS=$COIN_LIBS SOXT_INCLUDES=$COIN_INCLUDES SOXTLIB="no" if test x$ENABLE_PLAUT04_QT = xyes; then # Extract the first word of "soqt-config", so it can be a program name with args. set dummy soqt-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_HAVE_SOQT_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_SOQT_CONFIG"; then ac_cv_prog_HAVE_SOQT_CONFIG="$HAVE_SOQT_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_HAVE_SOQT_CONFIG="true" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_SOQT_CONFIG" && ac_cv_prog_HAVE_SOQT_CONFIG="false" fi fi HAVE_SOQT_CONFIG=$ac_cv_prog_HAVE_SOQT_CONFIG if test -n "$HAVE_SOQT_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_SOQT_CONFIG" >&5 $as_echo "$HAVE_SOQT_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$HAVE_SOQT_CONFIG = "xtrue"; then SOXT_LIBS="`soqt-config --libs`" SOXT_LDFLAGS="`soqt-config --ldflags`" SOXT_INCLUDES="`soqt-config --cppflags` -DSOQT_DLL" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $SOXT_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $SOXT_LDFLAGS" tmp_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $SOXT_INCLUDES" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main(void){(void)SoQt::init((const char *)0L);} _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : SOXTLIB="SoQt" else # -lXi is a workaround for Fedora Core 5 tmp_LIBS1="$LIBS" LIBS="$LIBS -lXi" tmp_SOXT_LIBS="$SOXT_LIBS" SOXT_LIBS="$SOXT_LIBS -lXi" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main(void){(void)SoQt::init((const char *)0L);} _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : SOXTLIB="SoQt" else #explictly look for Qt (sometimes necessary on Mac OS) SOXT_LIBS="$tmp_SOXT_LIBS `pkg-config --libs 'QtCore QtGui QtOpenGL'`" LIBS="$tmp_LIBS1 `pkg-config --libs 'QtCore QtGui QtOpenGL'`" SOXT_INCLUDES="$SOXT_INCLUDES `pkg-config --cflags 'QtCore QtGui QtOpenGL'`" CPPFLAGS="$CPPFLAGS `pkg-config --cflags 'QtCore QtGui QtOpenGL'`" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main(void){(void)SoQt::init((const char *)0L);} _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : SOXTLIB="SoQt" else SOXTLIB="no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS CPPFLAGS=$tmp_CPPFLAGS fi if test x$SOXTLIB = xno; then # Extract the first word of "soxt-config", so it can be a program name with args. set dummy soxt-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_HAVE_SOXT_CONFIG+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_SOXT_CONFIG"; then ac_cv_prog_HAVE_SOXT_CONFIG="$HAVE_SOXT_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_HAVE_SOXT_CONFIG="true" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_SOXT_CONFIG" && ac_cv_prog_HAVE_SOXT_CONFIG="false" fi fi HAVE_SOXT_CONFIG=$ac_cv_prog_HAVE_SOXT_CONFIG if test -n "$HAVE_SOXT_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_SOXT_CONFIG" >&5 $as_echo "$HAVE_SOXT_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test x$HAVE_SOXT_CONFIG = "xtrue"; then SOXT_LIBS="`soxt-config --libs`" SOXT_LDFLAGS="`soxt-config --ldflags`" SOXT_INCLUDES="`soxt-config --cppflags`" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $SOXT_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $SOXT_LDFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for abort in -lSoXt" >&5 $as_echo_n "checking for abort in -lSoXt... " >&6; } if ${ac_cv_lib_SoXt_abort+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lSoXt $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char abort (); #ifdef FC_DUMMY_MAIN #ifndef FC_DUMMY_MAIN_EQ_F77 # ifdef __cplusplus extern "C" # endif int FC_DUMMY_MAIN() { return 1; } #endif #endif int main () { return abort (); ; return 0; } _ACEOF if ac_fn_cxx_try_link "$LINENO"; then : ac_cv_lib_SoXt_abort=yes else ac_cv_lib_SoXt_abort=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_SoXt_abort" >&5 $as_echo "$ac_cv_lib_SoXt_abort" >&6; } if test "x$ac_cv_lib_SoXt_abort" = xyes; then : SOXTLIB="SoXt" else SOXTLIB="no" fi LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS fi if test x$SOXTLIB = "xno"; then { echo "configure: error: Coin3d SoQt/SoXt Library is not installed"; PLAUT04_TEST=no; } else { if test x$HAVE_SOXT_CONFIG = "xfalse"; then SOXT_LIBS="-lCoin -l$SOXTLIB" if test x$HAVE_COIN_CONFIG = "xtrue"; then SOXT_LIBS="$COIN_LIBS -l$SOXTLIB" SOXT_LDFLAGS=$COIN_LDFLAGS fi fi DEPS_LIBS="$SOXT_LDFLAGS $DEPS_LIBS $SOXT_LIBS" DEPS_INCLUDES="$DEPS_INCLUDES $SOXT_INCLUDES" echo "configure: Coin3d $SOXTLIB OK. $DEPS_INCLUDES $DEPS_LIBS"; } fi } fi if (test x$HAVE_SOXT_CONFIG = "xtrue" || test x$HAVE_SOQT_CONFIG = "xtrue" || \ test x$no_x != xyes) && \ test x$ENABLE_PLAUT04 = xyes && test x$PLAUT04_TEST = xyes; then PLAUT04=plaut04 if test x$SOXTLIB = "xSoXt"; then DEPS_LIBS="$X_PRE_LIBS $DEPS_LIBS $X_LIBS $X_EXTRA_LIBS" SOXT_OBJS=gmainxt.o SOXT_OBJS_R3B=gmainxt.o else MOCNAMES="moc-qt3 moc" if ( echo $SOXT_LIBS | grep QtGui > /dev/null ); then MOCNAMES="moc-qt4 moc" fi if test -n "$QTDIR"; then mocpath=$QTDIR/bin:$PATH else mocpath=$PATH fi for ac_prog in $MOCNAMES do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MOC+:} false; then : $as_echo_n "(cached) " >&6 else case $MOC in [\\/]* | ?:[\\/]*) ac_cv_path_MOC="$MOC" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $mocpath do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi MOC=$ac_cv_path_MOC if test -n "$MOC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 $as_echo "$MOC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MOC" && break done test -n "$MOC" || MOC="false" if test x"$MOC" = x"false"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: ''moc'' Qt preprocessor not found" >&5 $as_echo "$as_me: WARNING: ''moc'' Qt preprocessor not found" >&2;} if test -z "$QTDIR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: (QTDIR environment variable not set)" >&5 $as_echo "$as_me: WARNING: (QTDIR environment variable not set)" >&2;} fi PLAUT04="" PLAUT04_TEST="no" else SOXT_OBJS="gmainqt.moc.o gmainqt.o" SOXT_OBJS_R3B="../gmainqt.moc.o gmainqt.o" X_CFLAGS="$X_CFLAGS -DUSE_SOQT" fi fi else PLAUT04="" PLAUT04_TEST="no" fi ac_config_files="$ac_config_files Makefile src/Makefile util/Makefile gui/Makefile tek2ps/Makefile plaut/Makefile plaut04/Makefile plaut04/src/Makefile cmds/cmds.make cmds/Makefile gui/auto.makefile cmds/compat.sh" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; "gui/Makefile") CONFIG_FILES="$CONFIG_FILES gui/Makefile" ;; "tek2ps/Makefile") CONFIG_FILES="$CONFIG_FILES tek2ps/Makefile" ;; "plaut/Makefile") CONFIG_FILES="$CONFIG_FILES plaut/Makefile" ;; "plaut04/Makefile") CONFIG_FILES="$CONFIG_FILES plaut04/Makefile" ;; "plaut04/src/Makefile") CONFIG_FILES="$CONFIG_FILES plaut04/src/Makefile" ;; "cmds/cmds.make") CONFIG_FILES="$CONFIG_FILES cmds/cmds.make" ;; "cmds/Makefile") CONFIG_FILES="$CONFIG_FILES cmds/Makefile" ;; "gui/auto.makefile") CONFIG_FILES="$CONFIG_FILES gui/auto.makefile" ;; "cmds/compat.sh") CONFIG_FILES="$CONFIG_FILES cmds/compat.sh" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi if test x$no_x = xyes && test x$ENABLE_GUI = xyes; then echo "***************************************************" echo "It was requested that the GUI front end be compiled" echo "but the proper X libraries (libX and libXt) and/or " echo "Motif libraries (libXm) could not be found. The " echo "compilation of the GUI had been disabled. " echo "***************************************************" fi if test x$ENABLE_PLAUT04 = xyes && test x$PLAUT04_TEST = xno; then echo "***************************************************" echo "It was requested that the plotting utility PLAUT04 " echo "be compiled but the proper libraries (Coin3D and " echo "SoQt or SoXt or Open Inventor and Open Inventor Xt)" echo "and perhaps Motif libraries (libXm) could not be " echo "found. The compilation of PLAUT04 is disabled. " if test x$HAVE_CXX = xno; then echo "You will also need to install a C++ compiler, e.g. g++." fi echo "***************************************************" fi if test x$openmp = "xyes" && test x$MPI != "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for OpenMP" echo "***************************************************" fi if test x$openmp != "xyes" && test x$MPI = "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for MPI" echo "***************************************************" fi if test x$openmp = "xyes" && test x$MPI = "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for" echo "OpenMP and MPI" echo "***************************************************" fi auto/07p/.autorc0000750000175000017500000001165713570013207011554 0ustar sksk[AUTO_plotter] #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. #grid = False #stability = False #use_labels = True #use_symbols = False #top_title = '' #top_title_fontsize = 12 #xlabel = '' #xlabel_fontsize = 12 #ylabel = '' #ylabel_fontsize = 12 #zlabel = '' #zlabel_fontsize = 12 #solution_indepvarname = "time" #solution_coordnames = ["$x$","$y$","$z$"] #bifurcation_coordnames = ["?", "L2-norm"] #line_width = 2.0 #dashes = (6.0,6.0) #background = "white" #foreground = "black" #color_list = "black red green blue" #coloring_method = "curve" # or "branch" #symbol_color = "red" #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #decorations = True #smart_label = True #minx = 0 #maxx = 0 #miny = 0 #maxy = 0 #minz = 0 #maxz = 0 #azimuth = -60 # for 3D plots, in degrees #elevation = 30 # for 3D plots, in degrees #width = 600 #height = 480 #left_margin = 80 #right_margin = 40 #top_margin = 40 #bottom_margin = 40 #xticks = 5 #yticks = 5 #zticks = 5 #tick_label_template = "%.2e" #tick_length = 0.2 #odd_tick_length = 0.4 #even_tick_length = 0.2 #ps_colormode = "color" #mark_t = None #or a real value between 0 and 1 #type = "bifurcation" # or "solution" #bifurcation_x = [0] #bifurcation_y = [1] #bifurcation_z = None #solution_x = [0,3,6,9] #solution_y = [1,4,7,10] #solution_z = [2,5,8,11] ## Sets of columns that the user is likely to want to use #bifurcation_column_defaults = None #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # The label(s) of the solution we wish to draw #label = [1,2,3] # or "all" #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] #bifurcation_diagram_filename = 'fort.7' #solution_filename = 'fort.8' #bifurcation_symbol = "square" #limit_point_symbol = None #hopf_symbol = "fillsquare" #period_doubling_symbol = "doubletriangle" #torus_symbol = "filldiamond" #user_point_symbol = "U" #error_symbol = None ############################################################ # below are defaults, for documentation purposes only # uncomment the section header and all entries to customize #[AUTO_command_aliases] #ls =commandLs #cd =commandCd #shell =commandShell #cat =commandCat #wait =commandWait #copyDemo =commandCopyDemo #gui =commandCreateGUI #branchPoint =commandQueryBranchPoint #eigenvalue =commandQueryEigenvalue #floquet =commandQueryFloquet #hopf =commandQueryHopf #iterations =commandQueryIterations #limitpoint =commandQueryLimitpoint #note =commandQueryNote #secondaryPeriod =commandQuerySecondaryPeriod #stepsize =commandQueryStepsize #changeConstant =commandRunnerConfigFort2 #printConstant =commandRunnerPrintFort2 #append =commandAppend #diagramAndSolutionGet =commandParseDiagramAndSolutionFile #clean =commandClean #constantsGet =commandParseConstantsFile #copy =commandCopyDataFiles #delete =commandDeleteDataFiles #deleteFort =commandDeleteFortFiles #diagramGet =commandParseDiagramFile #double =commandDouble #demo =commandCopyAndLoadDemo #load =commandRunnerLoadName #loadbd =commandParseOutputFiles #move =commandMoveFiles #plot =commandPlotter #plot3 =commandPlotter3D #relabel =commandRelabel #merge =commandMergeBranches #subtract =commandSubtractBranches #run =commandRun #save =commandCopyFortFiles #solutionGet =commandParseSolutionFile #triple =commandTriple #userData =commandUserData #quit =commandQuit #br =commandQueryBranchPoint #eg =commandQueryEigenvalue #fl =commandQueryFloquet #hp =commandQueryHopf #it =commandQueryIterations #lm =commandQueryLimitpoint #nt =commandQueryNote #sc =commandQuerySecondaryPeriod #st =commandQueryStepsize #ch =commandRunnerConfigFort2 #hch =commandRunnerConfigFort12 #pr =commandRunnerPrintFort2 #hpr =commandRunnerPrintFort12 #ap =commandAppend #bt =commandParseDiagramAndSolutionFile #cl =commandClean #cn =commandParseConstantsFile #hcn =commandParseHomcontFile #dl =commandDeleteDataFiles #dsp =commandDeleteSpecialPoints #ksp =commandKeepSpecialPoints #dlb =commandDeleteLabels #klb =commandKeepLabels #dg =commandParseDiagramFile #db =commandDouble #dm =commandCopyAndLoadDemo #bd =commandParseOutputFiles #ld =commandRunnerLoadName #pl =commandPlotter ##FIXME: This doesn't match the rule we use for all other commands #p3 =commandPlotter3D #rl =commandRelabel #mb =commandMergeBranches #sb =commandSubtractBranches #rn =commandRun #sv =commandCopyFortFiles #sl =commandParseSolutionFile #tr =commandTriple #us =commandUserData #man =commandInteractiveHelp #bp =commandQueryBranchPoint #ev =commandQueryEigenvalue #hb =commandQueryHopf #lp =commandQueryLimitpoint #cc =commandRunnerConfigFort2 #pc =commandRunnerPrintFort2 #p2 =commandPlotter #r =commandRun #sp =commandQuerySecondaryPeriod #ss =commandQueryStepsize #df =commandDeleteFortFiles #q =commandQuit #splabs =commandSpecialPointLabels auto/07p/.github/0000750000175000017500000000000013570013207011601 5ustar skskauto/07p/.github/workflows/0000750000175000017500000000000013570013207013636 5ustar skskauto/07p/.github/workflows/test.yml0000640000175000017500000000362713570013207015351 0ustar skskname: CI on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Install dependencies run: | sudo apt-get update sudo apt-get install gfortran libsoqt4-dev libmotif-dev sudo apt-get install python-matplotlib python3-matplotlib sudo apt-get install openmpi-bin libopenmpi-dev sudo apt-get install texlive texlive-latex-extra transfig - name: Compile run: | # compile auto ./configure --enable-gui --with-mpi make # compile manual make -C doc auto.pdf ../plaut04/doc/userguide.pdf - name: Run test (python2) run: | export OMPI_MCA_btl="^openib" cd test python2 ../python/auto all.auto mv *_log07p python2log.txt - uses: actions/upload-artifact@v1 with: name: python2log path: test/python2log.txt - uses: actions/upload-artifact@v1 with: name: python2verification path: test/verification - name: Run test (python3) run: | export OMPI_MCA_btl="^openib" cd test python3 ../python/auto all.auto mv *_log07p python3log.txt - uses: actions/upload-artifact@v1 with: name: python3log path: test/python3log.txt - uses: actions/upload-artifact@v1 with: name: python3verification path: test/verification - name: Run test (MPI + python3) run: | export AUTO_COMMAND_PREFIX="mpirun -n 2" export OMP_NUM_THREADS=1 export OMPI_MCA_btl="^openib" cd test python3 ../python/auto all.auto mv *_log07p python3mpilog.txt - uses: actions/upload-artifact@v1 with: name: python3mpilog path: test/python3mpilog.txt - uses: actions/upload-artifact@v1 with: name: python3mpiverification path: test/verification auto/07p/autorc0000750000175000017500000001410413570013207011464 0ustar sksk# Example file for autorc: you need to uncomment settings for them # to take effect! [AUTO_plotter] # Variable name to use instead of 't' for solutions. #solution_indepvarname = "time" # A dictionary mapping names to axis labels. #labelnames = {"U(1)": "$x$", "U(2)": "$y$", "PAR(1)": "$p$"} # The type of the plot, either "solution" or "bifurcation" #type = "bifurcation" # or "solution" # The column to plot along the X-axis for bifurcation diagrams. #bifurcation_x = [0] # The column to plot along the Y-axis for bifurcation diagrams. #bifurcation_y = [1] # The column to plot along the Z-axis for bifurcation diagrams. #bifurcation_z = None # The column to plot along the X-axis for solutions. #solution_x = [0,3,6,9] # The column to plot along the Y-axis for solutions. #solution_y = [1,4,7,10] # The column to plot along the Z-axis for solutions. #solution_z = [2,5,8,11] # A list of colors to use for multiple plots. #color_list = "black red green blue" # color_list index: 'branch' (BR), 'type' (TY), or 'curve' (seq.). #coloring_method = "curve" # or "branch" or "type" # Turn on or off the grid. #grid = False # Turn on or off stability information using dashed curves #stability = False # Whether or not to display label numbers in the graph. #use_labels = True # Whether or not to display bifurcation symbols in the graph. #use_symbols = False # Whether to use letters (True) or symbols (False) for special points. #letter_symbols = True # Default d0, d1, d2, etc. setting to use with PyPLAUT (@pp). #default_option="d1" #d1 = {"grid": False, "use_labels": True, "use_symbols": True, "stability":True} # similarly you can redefine d0, d2, d3, d4. # The label for the top title. #top_title = '' # The font size for the top title. #top_title_fontsize = 12 # The font size for the x-axis label. #xlabel_fontsize = 12 # The font size for the y-axis label. #ylabel_fontsize = 12 # The font size for the z-axis label. #zlabel_fontsize = 12 # Azimuth of the axes in 3D plots. #azimuth = -60 # for 3D plots, in degrees # Elevation of the axes in 3D plots. #elevation = 30 # for 3D plots, in degrees # The lower bound for the x-axis of the plot. #minx = 0 # The upper bound for the x-axis of the plot. #maxx = 0 # The lower bound for the y-axis of the plot. #miny = 0 # The upper bound for the y-axis of the plot. #maxy = 0 # The lower bound for the z-axis of the plot. #minz = 0 # The upper bound for the z-axis of the plot. #maxz = 0 # The label for the x-axis. #xlabel = '' # The label for the y-axis. #ylabel = '' # The label for the z-axis. #zlabel = '' # Width to use for lines and curves. #line_width = 2.0 # List of dash, no-dash lengths for dashed lines. #dashes = (6.0,6.0) # The background color of the plot. #background = "white" # The foreground color of the plot #foreground = "black" # The color to use for the marker symbols. #symbol_color = "red" # The font to use for marker symbols. #symbol_font = "-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*" # Turn on or off the axis, tick marks, etc. #decorations = True # Whether to use a smart but slower label placement algorithm. #smart_label = True # Width of the graph. #width = 600 # Height of the graph. #height = 480 # The margin between the graph and the left edge. #left_margin = 80 # The margin between the graph and the left edge. #right_margin = 40 # The margin between the graph and the top edge. #top_margin = 40 # The margin between the graph and the bottom edge. #bottom_margin = 40 # The number of ticks on the x-axis. #xticks = 5 # The number of ticks on the y-axis. #yticks = 5 # The number of ticks on the z-axis. #zticks = 5 # A string which defines the format of the tick labels. #tick_label_template = "%.2e" # The length of the tick marks. #tick_length = 0.2 # The length of the odd tick marks. #odd_tick_length = 0.4 # The length of the even tick marks. #even_tick_length = 0.2 # The PostScript output mode: 'color', 'gray' or 'monochrome'. #ps_colormode = "color" # The t value to marker with a small ball. #mark_t = None #or a real value between 0 and 1 # A set of bifurcation columns the user is likely to use. #bifurcation_column_defaults = None # A set of solution columns the user is likely to use. #solution_column_defaults = [[0,3,6,9],[1,4,7,10],[2,5,8,11],['t','t','t','t']] # An array of labels to plot, or 'all' for all labels. #label = [1,2,3] # or "all" # A set of labels that the user is likely to use. #label_defaults = None # The index/indices of the solution we wish to draw #index = [0] # The filename of the bifurcation diagram to plot. #bifurcation_diagram_filename = 'fort.7' # The filename of the solution to plot. #solution_filename = 'fort.8' # The symbol to use for bifurcation points. # Here 8 denotes the size of the square #bifurcation_symbol = "square8" # The symbol to use for limit points. #limit_point_symbol = None # The symbol to use for Hopf bifurcation points. #hopf_symbol = "fillsquare" # The symbol to use for period doubling bifurcation points. #period_doubling_symbol = "doubletriangle" # The symbol to use for torus bifurcation points. #torus_symbol = "filldiamond" # The symbol to use for user defined output points. #user_point_symbol = "U" # The symbol to use for error points. #error_symbol = None # The symbol to use for Cusp points. #cusp_symbol = None # The symbol to use for Bogdanov-Takens points. #bogdanov_takens_symbol = "circle" # The symbol to use for Generalized Hopf points. #generalized_hopf_symbol = "triangle" # The symbol to use for zero-Hopf points. #zero_hopf_symbol = "doubletriangle" # The symbol to use for fold-flip points. #fold_flip_symbol = "doubletriangle" # The symbol to use for fold-torus points. #fold_torus_symbol = "doubletriangle" # The symbol to use for flip-torus points. #flip_torus_symbol = "doubletriangle" # The symbol to use for torus-torus points. #torus_torus_symbol = "doubletriangle" # The symbol to use for 1:1 resonance points. #1_1_resonance_symbol = "filldiamond" # The symbol to use for 1:2 resonance points. #1_2_resonance_symbol = "filldiamond" # The symbol to use for 1:3 resonance points. #1_3_resonance_symbol = "filldiamond" # The symbol to use for 1:4 resonance points. #1_4_resonance_symbol = "filldiamond" auto/07p/include/0000750000175000017500000000000013570013207011664 5ustar skskauto/07p/include/config.h.in0000640000175000017500000000170513570013207013713 0ustar sksk/* include/config.h.in. Generated from configure.ac by autoheader. */ /* Define to a macro mangling the given C identifier (in lower and upper case), which must not contain underscores, for linking with Fortran. */ #undef FC_FUNC /* As FC_FUNC, but for C identifiers containing underscores. */ #undef FC_FUNC_ /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if the X Window System is missing or not being used. */ #undef X_DISPLAY_MISSING auto/07p/include/auto.h0000640000175000017500000000077413570013207013016 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! NOTE : Do not decrease NPARX below 20 !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! PARAMETER (NPARX=36) !----------------------------------------------------------------------- !----------------------------------------------------------------------- auto/07p/include/GuiMotif.h0000640000175000017500000000266213570013207013567 0ustar sksk#ifndef _GUIMOTIF_H #define _GUIMOTIF_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #include #include #include #include #include #include #include #include #include #if __STDC__ #include #else #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIMOTIF_H */ /*** DON'T ADD ANYTHING AFTER THIS #endif ***/ auto/07p/include/GuiGlobal.h0000640000175000017500000004521013570013207013705 0ustar sksk#ifndef _GUIGLOBAL_H #define _GUIGLOBAL_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif /* define global varibales */ /* GP : Global Parameter */ GlobalPar GP; /* GW : Global Widget */ GlobalWidget GW; enum { PAR_NDIM, PAR_NBC, PAR_NINT, PAR_JAC, PAR_NTST, PAR_NCOL, PAR_IAD, PAR_EPSL, PAR_EPSU, PAR_EPSS, PAR_ITMX, PAR_NWTN, PAR_ITNW, PAR_DS, PAR_DSMIN, PAR_DSMAX, PAR_IADS, PAR_NMX, PAR_RL0, PAR_RL1, PAR_A0, PAR_A1, PAR_NICP, PAR_ICP, PAR_ILP, PAR_ISP, PAR_ISW, PAR_MXBF, PAR_IRS, PAR_IPS, PAR_NPR, PAR_IID, PAR_IPLT, PAR_NUZR, PAR_NTHL, PAR_NTHU }; char *parLabel[] = { "NDIM", "NBC", /* problem */ "NINT", "JAC", "NTST", "NCOL", /* discretization */ "IAD", "EPSL", "EPSU", "EPSS", /* tolerance */ "ITMX", "NWTN", "ITNW", "DS", "DSMIN", "DSMAX", "IADS", /* step size */ "NMX", "RL0", "RL1", "A0", "A1", "NICP", /* continuation */ "ICP", "ILP", "ISP", "ISW", /* run */ "MXBF", "IRS", "IPS", "NPR", "IID", "IPLT", /* output */ "NUZR", "NTHL", "NTHU" }; char *strHelp[] = { "NDIM\n\ \n\ Dimension of the system of equations as specified in the user-supplied\n\ subroutine FUNC.", "NBC\n\ \n\ The number of boundary conditions as specified in the user-supplied\n\ subroutine BCND.", "NINT\n\ \n\ The number of integral conditions as specified in the user-supplied\n\ subroutine ICND.", "JAC\n\ \n\ Used to indicate whether derivatives are supplied by the user or to\n\ be obtained by differencing :\n\ \n\ JAC=0 :\n\ \n\ No derivatives are given by the user. (Most demos use JAC=0.)\n\ \n\ JAC=1 :\n\ \n\ Derivatives with respect to state- and problem-parameters are given\n\ in the user-supplied subroutines FUNC, BCND, ICND and FOPT.", "NTST\n\ \n\ The number of mesh intervals used for discretization. NTST remains\n\ fixed during any particular run, but can be changed when restarting.\n\ Recommended value of NTST : As small as possible to maintain\n\ convergence.", "NCOL\n\ \n\ The number of Gauss collocation points per mesh interval (2<=NCOL<=7).\n\ NCOL remains fixed during any given run, but can be changed when\n\ restarting at a previously computed solution. The choice NCOL=4,\n\ used in most demos, is recommended.", "IAD \n\ \n\ This constant controls the mesh adaption : \n\ \n\ IAD=0 :Fixed mesh. This choice should never be used, as it may result \n\ in spurious solutions. \n\ \n\ IAD>0 : Adapt the mesh every IAD steps along the branch. Most demos\n\ use IAD=3, which is the strongly recommended value.", "EPSL\n\ \n\ Relative convergence criterion for equation parameters in the\n\ Newton/Chord method. Most demos use EPSL=10^{-6} or EPSL=10^{-7}, \n\ which is the recommended value range.", "EPSU\n\ \n\ Relative convergence criterion for solution components in the\n\ Newton/Chord method. Most demos use EPSU=10^{-6} or EPSU=10^{-7}, \n\ which is the recommended value range.", "EPSS\n\ \n\ Relative arclength convergence criterion for detecting special \n\ solutions. Most demos use EPSS=10^{-4} or EPSS=10^{-5}, which is\n\ the recommended value range. Generally, EPSS should be approximately\n\ 100 to 1000 times the value of EPSL, EPSU.", "ITMX\n\ \n\ The maximum number of iterations allowed in the accurate location of\n\ special solutions, such as bifurcations, folds, and user output points, \n\ by Muller's method with bracketing. The recommended value is ITMX=8, \n\ used in most demos.", "NWTN\n\ \n\ After NWTN Newton iterations the Jacobian is frozen, i.e., AUTO uses\n\ full Newton for the first NWTN iterations and the Chord method for\n\ iterations NWTN+1 to ITNW. The choice NWTN=3 is strongly recommended\n\ and used in most demos. Note that this constant is only effective for\n\ ODEs, i.e., for solving the piecewise polynomial collocation equations.\n\ For algebraic systems AUTO always uses full Newton.", "ITNW\n\ \n\ The maximum number of combined Newton-Chord iterations. When this\n\ maximum is reached, the step will be retried with half the stepsize.\n\ This is repeated until convergence, or until the minimum stepsize is\n\ reached. In the latter case the computation of the branch is\n\ discontinued and a message printed in fort.9. The recommended value\n\ is ITNW=5, but ITNW=7 may be used for difficult problems.", "DS\n\ \n\ The constant DS defines the pseudo-arclength stepsize to be used for\n\ the first attempted step along any branch. (Note that if IADS>0 then\n\ DS will automatically be adapted for subsequent steps and for failed\n\ steps.) DS may be chosen positive or negative; changing its sign\n\ reverses the direction of computation. The relation\n\ \n\ DSMIN < |DS| <= DSMAX\n\ \n\ must be satisfied. The precise choice of DS is problem-dependent; the demos\n\ use a value that was found appropriate after some experimentation.", "DSMIN\n\ \n\ This is minimum allowable absolute value of the pseudo-arclength\n\ stepsize. DSMIN must be positive. It is only effective if the \n\ pseudo-arclength step is adaptive, i.e., if IADS>0. The choice of\n\ DSMIN is highly problem-dependent; most demos use a value that was\n\ found appropriate after some experimentation.", "DSMAX\n\ \n\ The maximum allowable absolute value of the pseudo-arclength stepsize. \n\ DSMAX must be positive. It is only effective if the pseudo-arclength \n\ step is adaptive, i.e., if IADS>0. The choice of DSMAX is highly \n\ problem-dependent; most demos use a value that was found appropriate\n\ after some experimentation.", "IADS\n\ \n\ This constant controls the frequency of adaption of the\n\ pseudo-arclength stepsize.\n\ \n\ IADS=0 :\n\ \n\ Use fixed pseudo-arclength stepsize, i.e., the stepsize will be equal\n\ to the specified value of DS for every step. The computation of a\n\ branch will be discontinued as soon as the maximum number of\n\ iterations ITNW is reached. This choice is not recommended.\n\ \n\ IADS>0 :\n\ \n\ Adapt the pseudo-arclength stepsize after every IADS steps. The \n\ recommended value is IADS=1, which is used in almost all demos.", "NMX\n\ \n\ The maximum number of steps to be taken along any branch.", "RL0\n\ \n\ The lower bound on the principal continuation parameter. i.e., on the\n\ parameter that appears first in the ICP list.", "RL1\n\ \n\ The upper bound on the principal continuation parameter.", "A0\n\ \n\ The lower bound on the principal solution measure. (By default, if\n\ IPLT=0, the principal solution measure is the L_2-norm of the state \n\ vector or state vector function.)", "A1\n\ \n\ The upper bound on the principal solution measure.", "ICP\n\ \n\ For each equation type and for each continuation calculation there is \n\ a typical (generic) number of problem parameters that must be\n\ allowed to vary, in order for the calculations to be properly posed. \n\ The constant NICP indicates how many free parameters have been\n\ specified, while the array ICP designates these free parameters. \n\ The parameter that appears first in the ICP list is called the\n\ principal continuation parameter. See the AUTO manual for more details.", "NICP \n\ \n\ For each equation type and for each continuation calculation there is \n\ a typical (generic) number of problem parameters that must be\n\ allowed to vary, in order for the calculations to be properly posed. \n\ The constant NICP indicates how many free parameters have been\n\ specified, while the array ICP designates these free parameters. \n\ The parameter that appears first in the ICP list is called the\n\ principal continuation parameter. See the AUTO manual for more details.", "ILP\n\ \n\ ILP=0 : No detection of folds. This choice is recommended. \n\ \n\ ILP=1 : Detection of folds. This setting should be used if subsequent \n\ fold continuation is intended.", "ISP\n\ \n\ This constant controls the detection of branch points, period-doubling\n\ bifurcations, and torus bifurcations.\n\ \n\ ISP=0 :\n\ \n\ This setting disables the detection of branch points, period-doubling \n\ bifurcations, and torus bifurcations and the computation of Floquet\n\ multipliers. \n\ \n\ ISP=1 :\n\ \n\ Branch points are detected for algebraic equations, but not for \n\ periodic solutions and boundary value problems. Period-doubling \n\ bifurcations and torus bifurcations are not located either. However, \n\ Floquet multipliers are computed. \n\ \n\ ISP=2 :\n\ \n\ This setting enables the detection of all special solutions. \n\ \n\ ISP=3 :\n\ \n\ Branch points will be detected, but AUTO will not monitor the \n\ Floquet multipliers. Period-doubling and torus bifurcations will \n\ go undetected. This option is useful for certain problems with \n\ non-generic Floquet behavior.", "ISW\n\ \n\ This constant controls branch switching at branch points for the case \n\ of differential equations. Note that branch switching is automatic for \n\ algebraic equations. \n\ \n\ ISW=1 : This is the normal value of ISW. \n\ \n\ ISW=-1 : \n\ \n\ If IRS is the label of a branch point or a period-doubling bifurcation \n\ then branch switching will be done. \n\ \n\ ISW=2 : \n\ \n\ If IRS is the label of a fold, a Hopf bifurcation point, or a\n\ a period-doubling or torus bifurcation then a locus of such points \n\ will be computed.", "MXBF\n\ \n\ This constant, which is effective for algebraic problems only, sets\n\ the maximum number of bifurcations to be treated. Additional branch\n\ points will be noted, but the corresponding bifurcating branches will \n\ not be computed. If MXBF is positive then the bifurcating branches of \n\ the first MXBF branch points will be traced out in both directions. \n\ If MXBF is negative then the bifurcating branches of the first |MXBF| \n\ branch points will be traced out in only one direction.", "IRS\n\ \n\ This constant sets the label of the solution where the computation is\n\ to be restarted. \n\ \n\ IRS=0 :\n\ \n\ This setting is typically used in the first run of a new problem. \n\ \n\ IRS>0 : \n\ \n\ Restart the computation at the previously computed solution with label \n\ IRS. This solution is normally expected to be in the current\n\ data-file. Various AUTO-constants can be modified when restarting.", "IPS\n\ \n\ This constant defines the problem type : \n\ \n\ IPS=0 : An algebraic bifurcation problem. \n\ \n\ IPS=1 : Stationary solutions of ODEs with detection of Hopf bifurcations. \n\ \n\ IPS=-1 : Fixed points of a discrete dynamical system. \n\ \n\ IPS=-2 : Time integration using implicit Euler.\n\ \n\ IPS=2 : Computation of periodic solutions.\n\ \n\ IPS=4 : A boundary value problem.\n\ \n\ IPS=5 : Algebraic optimization problems.\n\ \n\ IPS=7 : A boundary value problem with computation of Floquet multipliers.\n\ \n\ IPS=9 : This option is used in connection with the HomCont algorithms\n\ for the detection and continuation of homoclinic bifurcations.\n\ \n\ IPS=11 : Spatially uniform solutions of a system of parabolic PDEs,\n\ with detection of bifurcations to traveling waves.\n\ \n\ IPS=12 : Continuation of traveling wave solutions to a system of \n\ parabolic PDEs.\n\ \n\ IPS=14 : Time evolution for a system of parabolic PDEs subject to\n\ periodic boundary conditions.\n\ \n\ IPS=15 : Optimization of periodic solutions.\n\ \n\ IPS=16 : This option is similar to IPS=14, except that user supplies\n\ the boundary conditions.\n\ \n\ IPS=17 : This option can be used to continue stationary solutions of\n\ parabolic systems obtained from an evolution run with IPS=16.", "NPR\n\ \n\ This constant can be used to regularly write fort.8 plotting and\n\ restart data.\n\ \n\ IF NPR>0 then such output is written every NPR steps. \n\ \n\ IF NPR=0 or if NPR >= NMX then no such output is written.", "IID \n\ \n\ This constant controls the amount of diagnostic output printed in\n\ fort.9 : the greater IID the more detailed the diagnostic output. \n\ \n\ IID=0 : Minimal diagnostic output. This setting is not recommended. \n\ \n\ IID=2 : Regular diagnostic output. This value is recommended. \n\ \n\ IID=3 : This gives additional diagnostic output for algebraic equations, \n\ namely the Jacobian and the residual vector at the starting point. \n\ \n\ IID=4 : This gives additional diagnostic output for differential\n\ equations, namely the reduced system and the associated residual\n\ vector. \n\ \n\ IID=5 : This setting gives very extensive diagnostic output for \n\ differential equations, namely, debug output from the linear \n\ equation solver. This setting should not normally be used.", "IPLT\n\ \n\ This constant allows redefinition of the principal solution measure,\n\ which is printed as the second (real) column in the screen output and\n\ in the fort.7 output-file : \n\ \n\ If IPLT = 0 then the L_2-norm is printed. Most demos use this setting. \n\ \n\ If 0 < IPLT <= NDIM then the maximum of the IPLT'th solution component \n\ is printed. \n\ \n\ If - NDIM <= IPLT <0 then the minimum of the IPLT'th solution component \n\ is printed. \n\ \n\ If NDIM < IPLT <= 2* NDIM then the integral of the ( IPLT- NDIM)'th\n\ solution component is printed.\n\ \n\ If 2* NDIM < IPLT <= 3* NDIM then the L_2-norm of the ( IPLT- NDIM)'th\n\ solution component is printed.", "NUZR\n\ \n\ This constant allows the setting of parameter values at which labeled \n\ plotting and restart information is to be written in the fort.8\n\ output-file. Optionally, it also allows the computation to terminate \n\ at such a point. \n\ \n\ Set NUZR=0 if no such output is needed. Many demos use this setting. \n\ \n\ If NUZR>0 then one must enter NUZR pairs, \n\ \n\ \n\ \n\ If the is preceded by a minus sign then the\n\ computation will terminate at such a solution point.", "NTHL\n\ \n\ By default, the pseudo-arclength stepsize includes all state variables \n\ (or state functions) and all free parameters. Under certain\n\ circumstances one may want to modify the weight accorded to individual \n\ parameters in the definition of stepsize. \n\ \n\ If NTHL=0 then all weights will have default value 1.0 . \n\ \n\ If NTHL>0 then one must enter NTHL pairs, \n\ \n\ ", "NTHU\n\ \n\ Under certain circumstances one may want to modify the weight accorded\n\ to individual state variables (or state functions) in the definition\n\ of stepsize.\n\ \n\ If NTHU=0 then all weights will have default value 1.0 . \n\ \n\ If NTHU>0 then one must enter NTHU pairs, \n\ \n\ " }; char *demoItems[] = { "ab.f90", "abc.f90", "brc.f90", "brf.f90", "bru.f90", "bvp.f90", "chu.f90", "cir.f90", "dd2.f90", "enz.f90", "exp.f90", "ext.f90", "ezp.f90", "frc.f90", "fsh.f90", "int.f90", "ivp.f90", "kar.f90", "kpr.f90", "lin.f90", "lor.f90", "lrz.f90", "mtn.f90", "nag.f90", "non.f90", "obv.f90", "ops.f90", "opt.f90", "pd1.f90", "pd2.f90", "pen.f90", "phs.f90", "plp.f90", "pp2.f90", "pp3.f90", "ppp.f90", "pvl.f90", "san.f90", "she.f90", "spb.f90", "stw.f90", "tim.f90", "tor.f90", "wav.f90" }; char *demoHelp[] = { "See AUTO manual for help on ab", "See AUTO manual for help on abc", "See AUTO manual for help on brc", "See AUTO manual for help on brf", "See AUTO manual for help on bru", "See AUTO manual for help on bvp", "See AUTO manual for help on chu", "See AUTO manual for help on cir", "See AUTO manual for help on dd2", "See AUTO manual for help on enz", "See AUTO manual for help on exp", "See AUTO manual for help on ext", "See AUTO manual for help on ezp", "See AUTO manual for help on frc", "See AUTO manual for help on fsh", "See AUTO manual for help on int", "See AUTO manual for help on ivp", "See AUTO manual for help on kar", "See AUTO manual for help on kpr", "See AUTO manual for help on lin", "See AUTO manual for help on lor", "See AUTO manual for help on lrz", "See AUTO manual for help on mtn", "See AUTO manual for help on nag", "See AUTO manual for help on non", "See AUTO manual for help on obv", "See AUTO manual for help on ops", "See AUTO manual for help on opt", "See AUTO manual for help on pd1", "See AUTO manual for help on pd2", "See AUTO manual for help on pen", "See AUTO manual for help on phs", "See AUTO manual for help on plp", "See AUTO manual for help on pp2", "See AUTO manual for help on pp3", "See AUTO manual for help on ppp", "See AUTO manual for help on pvl", "See AUTO manual for help on san", "See AUTO manual for help on she", "See AUTO manual for help on spb", "See AUTO manual for help on stw", "See AUTO manual for help on tim", "See AUTO manual for help on tor", "See AUTO manual for help on wav" }; /* bits for exclamation point in dialog */ unsigned char warningBits[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xf0, 0x0f, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00 }; static char transTable[] = "ShiftP: ArmAndActivate() \n\ ShiftD: ArmAndActivate() \n\ ShiftT: ArmAndActivate() \n\ ShiftS: ArmAndActivate() \n\ ShiftL: ArmAndActivate() \n\ ShiftC: ArmAndActivate() \n\ ShiftR: ArmAndActivate() \n\ ShiftO: ArmAndActivate() \n\ ShiftA: ArmAndActivate()"; #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIGLOBAL_H */ /*** DON'T ADD ANYTHING AFTER THIS #endif ***/ auto/07p/include/auto.h.NDIM=4000000750000175000017500000000121113570013207014052 0ustar skskC----------------------------------------------------------------------- C----------------------------------------------------------------------- C NOTE : Do not change NPARX, NODES, KREDO, NIAP, NRAP C----------------------------------------------------------------------- C----------------------------------------------------------------------- C PARAMETER (NDIMX=400,NCOLX=1,NTSTX=1,NBCX=1,NINTX=1, * NPARX=36,NBIFX=5,NUZRX=20, * NODES=1,KREDO=1,NIAP=41,NRAP=19) C----------------------------------------------------------------------- C----------------------------------------------------------------------- auto/07p/include/GuiWidgets.h0000640000175000017500000000371513570013207014117 0ustar sksk#ifndef _GUIWIDGETS_H #define _GUIWIDGETS_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #include /* Global Widget : GW */ typedef struct _GlobalWidget { Widget help; /* message box widget */ Widget helpList; Widget demoList; Widget demo_list; Widget textDALG; Widget textField; Widget *parButton; Widget *probButton; Widget *disButton; Widget *tolButton; Widget *stepButton; Widget *limButton; Widget *conButton; Widget *runButton; Widget *outButton; Widget text; /* multi-line text widget */ Widget cut_button; /* clipboard cut button */ Widget copy_button; /* clipboard copy button */ Widget paste_button; /* clipboard paste button */ Widget clear_button; /* clipboard clear button */ Widget open_dialog; /* file selection dialog */ Widget new_dialog; /* file name prompt dialog */ Widget close_warning; /* special internal selection dialog */ Widget exit_warning; /* special internal selection dialog */ Widget save_dialog; /* save as prompt dialog */ Widget print_warning; /* warning dialog */ Widget mainWindow; Widget thlButton[2*MAX_NTHL]; Widget thlTg[MAX_NTHL]; Widget thuButton[2*MAX_NTHU]; Widget thuTg[MAX_NTHU]; Widget uzrButton[2*MAX_NUZR]; Widget uzrTg[MAX_NUZR]; Widget icpButton[2*MAX_NICP]; Widget icpTg[MAX_NICP]; Widget popThl,popThu,popIcp,popUzr; Widget copyFrom,copyTo; Widget moveFrom,moveTo; Widget appendFrom,appendTo; } GlobalWidget; extern GlobalWidget GW; #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIWIDGETS_H */ /* DON'T ADD ANY STUFF AFTER THIS LINE */ auto/07p/include/GuiPar.h0000640000175000017500000000337413570013207013234 0ustar sksk#ifndef _GUIPAR_H #define _GUIPAR_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #include typedef struct _ClientData { Widget widget; int data; } ClientData; /* Global Parameter : GP */ typedef struct _GlobalPar { Boolean exit; Boolean quit; Boolean fileIn; Boolean question; int numFileName; int activeFile; int numParameter; int numDemo; int nthl,nthu,nuzr,nicp; char nthlStr[WX_TEXTLENGTH],nthuStr[WX_TEXTLENGTH],nuzrStr[WX_TEXTLENGTH]; double thlValue[2*MAX_NTHL]; char thlStrValue[2*MAX_NTHL][WX_TEXTLENGTH]; Boolean thlToggle[MAX_NTHL]; double thuValue[2*MAX_NTHU]; char thuStrValue[2*MAX_NTHU][WX_TEXTLENGTH]; Boolean thuToggle[MAX_NTHU]; double uzrValue[2*MAX_NUZR]; char uzrStrValue[2*MAX_NUZR][WX_TEXTLENGTH]; Boolean uzrToggle[MAX_NUZR]; double icpValue[20*MAX_NICP]; char icpStrValue[20*MAX_NICP][WX_TEXTLENGTH]; Boolean icpToggle[MAX_NICP]; double *parValue; char **parStrValue; XmString *parXmLabel; XmString *demoXmItems; char fileDir[WX_FNLEN]; char filePattern[WX_FNLEN]; char fileName[WX_FNLEN]; char demoFileName[WX_FNLEN]; Boolean file_saved; char xedit[WX_FNLEN]; char emacs[WX_FNLEN]; char command[WX_FNLEN]; int autoPid; int restart; int nicpFlag; char q[10]; char autoDir[50]; } GlobalPar; extern GlobalPar GP; #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIPAR_H */ /* DON'T ADD ANY STUFF AFTER THIS LINE */ auto/07p/include/auto_f2c.h0000640000175000017500000000550113570013207013541 0ustar sksk/* f2c.h -- Standard Fortran to C header file */ /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ #ifndef F2C_INCLUDE #define F2C_INCLUDE #include "config.h" #include #include #include #include typedef int integer; typedef float real; typedef double doublereal; typedef struct { real r, i; } complex; typedef struct { doublereal r, i; } doublecomplex; typedef integer logical; #define TRUE_ (1) #define FALSE_ (0) /* I/O stuff */ #define VOID void #ifndef abs #define abs(x) ((x) >= 0 ? (x) : -(x)) #endif #ifndef fabs #define fabs(x) ((x) >= 0 ? (x) : -(x)) #endif #define min(a,b) ((a) <= (b) ? (a) : (b)) #define max(a,b) ((a) >= (b) ? (a) : (b)) #define dmin(a,b) (doublereal)min(a,b) #define dmax(a,b) (doublereal)max(a,b) #define ARRAY2D(array,i,j) array[(i) + (j) * array ## _dim1] #define ARRAY3D(array,i,j,k) array[(i) + ((j) + (k) * array ## _dim2) * array ## _dim1] #ifdef FC_FUNC #define blhom_1 FC_FUNC(blhom,BLHOM) #endif /* problem defined functions*/ typedef int user_func_t(integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *f, doublereal *dfdu, doublereal *dfdp); typedef int user_stpnt_t(integer ndim, doublereal t, doublereal *u, doublereal *par); typedef int user_bcnd_t(integer ndim, const doublereal *par, const integer *icp, integer nbc, const doublereal *u0, const doublereal *u1, integer ijac, doublereal *f, doublereal *dbc); typedef int user_icnd_t(integer ndim, const doublereal *par, const integer *icp, integer nint, const doublereal *u, const doublereal *uold, const doublereal *udot, const doublereal *upold, integer ijac, doublereal *fi, doublereal *dint); typedef int user_fopt_t(integer ndim, const doublereal *u, const integer *icp, const doublereal *par, integer ijac, doublereal *fs, doublereal *dfdu, doublereal *dfdp); typedef int user_pvls_t(integer ndim, const doublereal *u, doublereal *par); typedef struct { user_func_t *func; user_stpnt_t *stpnt; user_bcnd_t *bcnd; user_icnd_t *icnd; user_fopt_t *fopt; user_pvls_t *pvls; int uses_fortran; } user_function_list; extern const user_function_list user; #ifdef FC_FUNC extern doublereal FC_FUNC(getp,GETP)(const char *code, integer *ic, const doublereal *u); /* C wrapper for getp; call it getp_ if we have name clashes */ #define name 1 #if FC_FUNC(name,NAME) == 1 #define getp getp_ #endif #undef name #endif extern doublereal getp(const char *code, integer ic, const doublereal *u); #ifndef WRAPPER /* user functions */ static int func(); static int stpnt(); static int bcnd(); static int icnd(); static int fopt(); static int pvls(); const user_function_list user = { func, stpnt, bcnd, icnd, fopt, pvls }; #endif #endif auto/07p/include/GuiFuncs.h0000640000175000017500000002621313570013207013565 0ustar sksk#ifndef _GUIFUNCS_H #define _GUIFUNCS_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #ifdef _NO_PROTO extern Widget AppendData(); extern void AppendDataCB(); extern void clallCB(); extern void cleanCB(); extern void CloseFile(); extern void clselCB(); extern void ConfigInit(); extern char *copyenv(); extern void CopyFileToClipboard(); extern Widget CopyData(); extern void CopyDataCB(); extern int countAny(); extern void CreateActionMenu(); extern void CreateAppendMenu(); extern void CreateBox(); extern void CreateBoxCon(); extern void CreateBoxDis(); extern void CreateBoxLim(); extern void CreateBoxOut(); extern void CreateBoxProb(); extern void CreateBoxRun(); extern void CreateBoxStep(); extern void CreateBoxTol(); extern void CreateBrowseRfileMenu(); extern void CreateFilesMenu(); extern XImage *CreateDefaultImage(); extern void CreateDefineMenu(); extern Widget CreateDemoList(); extern void CreateDemoMenu(); extern void CreateEditMenu(); extern void CreateFileMenu(); extern void CreateFileMenuDef(); extern Widget CreateFileSelectionDialog(); extern Widget CreateFormCon(); extern Widget CreateFormDefault(); extern Widget CreateFormDis(); extern Widget CreateFormLim(); extern Widget CreateFormOut(); extern Widget CreateFormProb(); extern Widget CreateFormRun(); extern Widget CreateFormStep(); extern Widget CreateFormTol(); extern void CreateHelpMenu(); extern Widget CreateLayout(); extern void CreateLoadRfileMenu(); extern void CreateMenuBar(); extern void CreateMiscMenu(); extern Widget CreateNewFileDialog(); extern void CreatePlotMenu(); extern void CreateRunMenu(); extern Widget CreateQuestionDialog(); extern void CreateSaveMenu(); extern Widget CreateScrolledDemoList(); extern Widget CreateScrolledHelpList(); extern void CreateSettingMenu(); extern Widget CreateSpWarningDialog(); extern void CreateText(); extern void CreateWriteMenu(); extern void DefDriverCB(); extern void DeleteCB(); extern void DeletePrimarySelection(); extern void DemoCopyCB(); extern void DemoRunCB(); extern void DemoBrowseCB(); extern void DemoHelpCB(); extern void DialogAcceptCB(); extern void DialogApplyCB(); extern void DialogCancelCB(); extern void EntCancelCB(); extern void EntOkCB(); extern void ExitCB(); extern void FileChangedCB(); extern int GetAutoPid(); extern char *GetDirName(); extern void GetJobName(); extern char **getstr(); extern void HelpCB(); extern void ManualCB(); extern void MenuCB(); extern Widget MoveData(); extern void MoveDataCB(); extern void NewOutputCB(); extern Boolean noting(); extern void OkFormConCB(); extern void OkFormDefCB(); extern void OkFormDisCB(); extern void OkFormLimCB(); extern void OkFormOutCB(); extern void OkFormProbCB(); extern void OkFormRunCB(); extern void OkFormStepCB(); extern void OkFormTolCB(); extern Boolean OpenFile(); extern void OutputCB(); extern void PasteItemFromClipboard(); extern void PopdownCB(); extern void PopupCB(); extern void PopupCB1(); extern void PopupCon(); extern void PopupDis(); extern Widget PopupIcp(); extern Widget PopupIid(); extern Widget PopupIlp(); extern Widget PopupIps(); extern Widget PopupIsp(); extern Widget PopupIsw(); extern Widget PopupJac(); extern void PopupLim(); extern Widget PopupNcol(); extern void PopupOut(); extern void PopupProb(); extern void PopupRun(); extern void PopupStep(); extern void PopupTemplate(); extern void PopupTemplate1(); extern void PopupTemplate2(); extern void PopupTemplate3(); extern void PopupTemplate4(); extern Widget PopupThl(); extern Widget PopupThu(); extern void PopupTol(); extern Widget PopupUzr(); extern void PostItCB(); extern void PostItCB1(); extern void PrintCB(); extern char* ProgramName(); extern void ReadDefCB(); extern Widget ReadFile(); extern void ReadFileCB(); extern int ReadRfile(); extern void RestartCB(); extern void RunAllDemoCB(); extern void RunCB(); extern void RunDemo(); extern Boolean SaveFile(); extern void SaveParScreen(); extern void SelOkCB(); extern void SetParCB(); extern void SetParScreen(); extern void StopCB(); extern void TekCB(); extern void TmpCB(); extern void UpdateTime(); extern void UzrToggleCB(); extern void VtCB(); extern void Wprintf(); extern void WriteRfile(); #else extern Widget AppendData(Widget); extern void AppendDataCB(Widget,XtPointer,XtPointer); extern void clallCB(Widget,XtPointer,XtPointer); extern void cleanCB(Widget,XtPointer,XtPointer); extern void CloseFile(); extern void clselCB(Widget,XtPointer,XtPointer); extern void ConfigInit(Widget); extern char *copyenv(char *); extern void CopyFileToClipboard(Time); extern Widget CopyData(Widget); extern void CopyDataCB(Widget,XtPointer,XtPointer); extern int countAny(int); extern void CreateActionMenu(Widget); extern void CreateAppendMenu(Widget); extern void CreateBrowseRfileMenu(Widget); extern void CreateBox(Widget); extern void CreateBoxCon(Widget); extern void CreateBoxDis(Widget); extern void CreateBoxLim(Widget); extern void CreateBoxOut(Widget); extern void CreateBoxProb(Widget); extern void CreateBoxRun(Widget); extern void CreateBoxStep(Widget); extern void CreateBoxTol(Widget); extern void CreateFilesMenu(Widget); extern XImage *CreateDefaultImage(char*, int, int); extern void CreateDefineMenu(Widget); extern Widget CreateDemoList(Widget); extern void CreateDemoMenu(Widget); extern void CreateEditMenu(Widget); extern void CreateFileMenu(Widget); extern void CreateFileMenuDef(Widget); extern Widget CreateFileSelectionDialog(Widget,int); extern Widget CreateFormCon(Widget); extern Widget CreateFormDefault(Widget); extern Widget CreateFormDis(Widget); extern Widget CreateFormLim(Widget); extern Widget CreateFormOut(Widget); extern Widget CreateFormProb(Widget); extern Widget CreateFormRun(Widget); extern Widget CreateFormStep(Widget); extern Widget CreateFormTol(Widget); extern void CreateHelpMenu(Widget); extern Widget CreateLayout(Widget); extern void CreateLoadRfileMenu(Widget); extern void CreateMenuBar(Widget); extern void CreateMiscMenu(Widget); extern Widget CreateNewFileDialog(Widget,int); extern void CreatePlotMenu(Widget); extern void CreateRunMenu(Widget); extern Widget CreateQuestionDialog(Widget); extern void CreateSaveMenu(Widget); extern Widget CreateScrolledDemoList(Widget); extern Widget CreateScrolledHelpList(Widget); extern void CreateSettingMenu(Widget); extern Widget CreateSpWarningDialog(Widget,String,String,String,ArgList,int); extern void CreateText(Widget); extern void CreateWriteMenu(Widget); extern void DefDriverCB(Widget,XtPointer,XtPointer); extern void DeleteCB(Widget,XtPointer,XtPointer); extern void DeletePrimarySelection(Time); extern void DemoCopyCB(Widget,XtPointer,XtPointer); extern void DemoRunCB(Widget,XtPointer,XtPointer); extern void DemoBrowseCB(Widget,XtPointer,XtPointer); extern void DemoHelpCB(Widget,XtPointer,XtPointer); extern void DialogAcceptCB(Widget,XtPointer,XtPointer); extern void DialogApplyCB(Widget,XtPointer,XtPointer); extern void DialogCancelCB(Widget,XtPointer,XtPointer); extern void EntCancelCB(Widget,XtPointer,XtPointer); extern void EntOkCB(Widget,XtPointer,XtPointer); extern void ExitCB(Widget,XtPointer,XtPointer); extern void FileChangedCB(Widget,XtPointer,XtPointer); extern int GetAutoPid(char *); extern char *GetDirName(); extern void GetJobName(char *,char *); extern char **getstr(int,int); extern void HelpCB(Widget ,XtPointer, XtPointer); extern void ManualCB(Widget,XtPointer,XtPointer); extern void MenuCB(Widget,XtPointer,XtPointer); extern Widget MoveData(Widget); extern void MoveDataCB(Widget,XtPointer,XtPointer); extern void NewOutputCB(Widget,XtPointer,XtPointer); extern Boolean noting(char *); extern void OkFormConCB(Widget,XtPointer,XtPointer); extern void OkFormDefCB(Widget,XtPointer,XtPointer); extern void OkFormDisCB(Widget,XtPointer,XtPointer); extern void OkFormLimCB(Widget,XtPointer,XtPointer); extern void OkFormOutCB(Widget,XtPointer,XtPointer); extern void OkFormProbCB(Widget,XtPointer,XtPointer); extern void OkFormRunCB(Widget,XtPointer,XtPointer); extern void OkFormStepCB(Widget,XtPointer,XtPointer); extern void OkFormTolCB(Widget,XtPointer,XtPointer); extern Boolean OpenFile(char *); extern void OutputCB(Widget,XtPointer,XtPointer); extern void PasteItemFromClipboard(); extern void PopdownCB(Widget,XtPointer,XtPointer); extern void PopupCB(Widget,XtPointer,XtPointer); extern void PopupCB1(Widget,XtPointer,XtPointer); extern void PopupCon(Widget); extern void PopupDis(Widget); extern Widget PopupIcp(Widget); extern Widget PopupIid(Widget); extern Widget PopupIlp(Widget); extern Widget PopupIps(Widget); extern Widget PopupIsp(Widget); extern Widget PopupIsw(Widget); extern Widget PopupJac(Widget); extern void PopupLim(Widget); extern Widget PopupNcol(Widget); extern void PopupOut(Widget); extern void PopupProb(Widget); extern void PopupRun(Widget); extern void PopupStep(Widget); extern void PopupTemplate(Widget,Widget*,Widget*,Widget*, Widget*,Widget*,int); extern void PopupTemplate1(Widget,Widget*,Widget*,Widget*,Widget*,Widget*); extern void PopupTemplate2(Widget,Widget*); extern void PopupTemplate3(Widget,Widget*,Widget*,Widget*,Widget*,Widget*); extern void PopupTemplate4(Widget,Widget*,Widget*,Widget*); extern Widget PopupThl(Widget); extern Widget PopupThu(Widget); extern void PopupTol(Widget); extern Widget PopupUzr(Widget); extern void PostItCB(Widget,XtPointer,XEvent *,Boolean *); extern void PostItCB1(Widget,XtPointer,XEvent *,Boolean *); extern void PrintCB(Widget,XtPointer,XtPointer); extern char* ProgramName(char *); extern void ReadDefCB(Widget,XtPointer,XtPointer); extern Widget ReadFile(Widget); extern void ReadFileCB(Widget,XtPointer,XtPointer); extern int ReadRfile(char *); extern void RestartCB(Widget,XtPointer,XtPointer); extern void RunAllDemoCB(Widget,XtPointer,XtPointer); extern void RunCB(Widget,XtPointer,XtPointer); extern void RunDemo(char *); extern Boolean SaveFile(); extern void SaveParScreen(int); extern void SelOkCB(Widget,XtPointer,XtPointer); extern void SetParCB(Widget w,XtPointer,XtPointer); extern void SetParScreen(); extern void StopCB(Widget,XtPointer,XtPointer); extern void TekCB(Widget,XtPointer,XtPointer); extern void TmpCB(Widget,XtPointer,XtPointer); extern void UpdateTime(XtPointer, XtIntervalId *); extern void UzrToggleCB(Widget,XtPointer,XtPointer); extern void VtCB(Widget,XtPointer,XtPointer); #if __STDC__ extern void Wprintf(Widget,...); #else extern void Wprintf(...); #endif extern void WriteRfile(char *); #endif /* _NO_PROTO */ #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIFUNCS_H */ /*** DON'T ADD ANYTHING AFTER THIS #endif ***/ auto/07p/include/auto.h.sav0000750000175000017500000000122113570013207013574 0ustar skskC----------------------------------------------------------------------- C----------------------------------------------------------------------- C NOTE : Do not change NPARX, NODES, KREDO, NIAP, NRAP C----------------------------------------------------------------------- C----------------------------------------------------------------------- C PARAMETER (NDIMX=12,NCOLX=4,NTSTX=200,NBCX=NDIMX+3,NINTX=6, * NPARX=36,NBIFX=20,NUZRX=20, * NODES=1,KREDO=1,NIAP=41,NRAP=19) C----------------------------------------------------------------------- C----------------------------------------------------------------------- auto/07p/include/fcon.h0000640000175000017500000000051113570013207012760 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- INTEGER, PARAMETER :: NPARX=36 !----------------------------------------------------------------------- !----------------------------------------------------------------------- auto/07p/include/GuiConsts.h0000640000175000017500000000414313570013207013756 0ustar sksk#ifndef _GUICONSTS_H #define _GUICONSTS_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #define WX_BUTTONS 30 #define WX_DEBUG 1 #define WX_TEXTLENGTH 20 #define DE_TEXTLENGTH 10 #define WX_FNLEN 100 #define XEDIT "xedit" #define XEDIT_OPTION 1 #define EMACS "emacs" #define EMACS_OPTION 2 #define AUTO_DIR "AUTO_DIR" #define MAX_NICP 10 /* has to be an even number */ #define MAX_NUZR 10 /* has to be an even number */ #define MAX_NTHL 10 /* has to be an even number */ #define MAX_NTHU 10 /* has to be an even number */ #define NONE 0 #define DEFAULT_RFILE "c.aut" /* "c.default" */ #define CURRENT_RFILE "c.current" #define DEFAULT_FILE "aut.f90" /* "default.f90" */ #define DEFAULT_NAME "aut.f90" #define TEXT_WIDTH 72 #define EMPTY "" #define MAX_FILESIZE 50000 #define MIN_FILESIZE 10000 #define PRINT_FILE "lp < " /* don't modify anything after this line */ #define MENU_HELP 200 #define MENU_EXIT 201 #define MENU_OPEN 202 #define MENU_NEW 203 #define MENU_CLOSE 204 #define MENU_SAVE 205 #define MENU_SAVE_AS 206 #define MENU_PRINT 207 #define MENU_CUT 208 #define MENU_COPY 209 #define MENU_PASTE 210 #define MENU_CLEAR 211 #define DIALOG_FSELECT 300 #define DIALOG_CWARNING 301 #define DIALOG_XWARNING 302 #define DIALOG_NEW 303 #define DIALOG_SAVE 304 #define DIALOG_HELP 305 #define DIALOG_PRINT 306 #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUICONSTS_H */ /* DON'T ADD ANY STUFF AFTER THIS LINE */ auto/07p/util/0000750000175000017500000000000013570013207011216 5ustar skskauto/07p/util/triple.f900000640000175000017500000000603513570013207013042 0ustar sksk!============================================================================== !============================================================================== ! Utility Program for ``tripling'' solutions in an AUTO q.xxx file !============================================================================== !============================================================================== ! PROGRAM TRIPLE IMPLICIT NONE ! DOUBLE PRECISION, ALLOCATABLE :: TM(:),RLDOT(:),PAR(:),U(:,:) INTEGER, ALLOCATABLE :: ICP(:) LOGICAL OLD CHARACTER(120) LINE DOUBLE PRECISION, PARAMETER :: EPS = 1d-16 INTEGER I,J,L,IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NTPL1,NROWPRSMALL INTEGER NAR,NROWPR,NROWPR1,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ! L=0 OPEN(28,FILE='fort.28',STATUS='old',ACCESS='sequential') OPEN(38,FILE='fort.38',STATUS='unknown',ACCESS='sequential') 1 CONTINUE READ(28,'(A)',END=99)LINE IF (LEN_TRIM(LINE) <= 73) THEN READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR OLD=.TRUE. ELSE READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV OLD=.FALSE. ENDIF NROWPRSMALL=((NAR-1)/7+1)*NTPL + (NPAR+6)/7 IF(NTPL.EQ.1)THEN NTPL1=NTPL NROWPR1=NROWPR ELSE NTST=3*NTST NTPL1=3*NTPL-2 NROWPR1=NROWPR+2*NTPL-2 IF(NTST.NE.0.AND.NROWPR.GT.NROWPRSMALL)THEN NROWPR1=NROWPR1+2*NTPL-2 ENDIF ENDIF IF(OLD)THEN WRITE(38,101)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL1, & NAR,NROWPR1,NTST,NCOL,NPAR ELSE WRITE(38,111)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL1, & NAR,NROWPR1,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ENDIF ALLOCATE(TM(NTPL),U(NTPL,NAR-1)) DO J=1,NTPL READ(28,*) TM(J),(U(J,I),I=1,NAR-1) WRITE(38,102)TM(J)/3,(U(J,I),I=1,NAR-1) ENDDO IF(NTPL.GT.1)THEN DO J=2,NTPL WRITE(38,102)(1+TM(J))/3, & (U(J,I)+U(NTPL,I)-U(1,I),I=1,NAR-1) ENDDO DO J=2,NTPL WRITE(38,102)(2+TM(J))/3, & (U(J,I)+2*(U(NTPL,I)-U(1,I)),I=1,NAR-1) ENDDO ENDIF IF(NTST.NE.0.AND.NROWPR.GT.NROWPRSMALL)THEN ALLOCATE(RLDOT(NPAR),ICP(NPAR)) READ(28,*) (ICP(I),I=1,NFPR) WRITE(38,103)(ICP(I),I=1,NFPR) READ(28,*) (RLDOT(I),I=1,NFPR) WRITE(38,102)(RLDOT(I),I=1,NFPR) DO J=1,NTPL READ(28,*) (U(J,I),I=1,NAR-1) WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO IF(NTPL.GT.1)THEN DO J=2,NTPL WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO DO J=2,NTPL WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO ENDIF DEALLOCATE(RLDOT,ICP) ENDIF ALLOCATE(PAR(NPAR)) READ(28,*) (PAR(I),I=1,NPAR) IF(NTPL.GT.1)THEN PAR(11)=3*PAR(11) ENDIF WRITE(38,102)(PAR(I),I=1,NPAR) DEALLOCATE(PAR,TM,U) GOTO 1 101 FORMAT(6I6,I8,I6,I8,3I5) 111 FORMAT(6I6,I8,I6,I8,7I5) 102 FORMAT(4X,7ES19.10E3) 103 FORMAT(20I5) 99 STOP END PROGRAM TRIPLE !============================================================================== !============================================================================== auto/07p/util/keepbp.f900000750000175000017500000000115313570013207013007 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM KEEPBP USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM KEEPBP LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = (ITP/=1 .AND. ITP/=6) END FUNCTION DELETEFN auto/07p/util/Makefile.in0000750000175000017500000000316713570013207013275 0ustar sksk# ===> Makefile # # Makefile Xianjun WANG 3/1994 # # used to compile AUTO utilities # # FC=@FC@ FFLAGS=@FFLAGS@ OPT=@OPT_FLAG@ COMPAT=@COMPAT@ RM=rm -f # all: ../bin/autlab ../bin/double ../bin/triple \ ../bin/keeplp ../bin/keepbp ../bin/keepsp ../bin/keepuz \ ../bin/deletelp ../bin/listlabels ../bin/reduce ../bin/relabel # utility.o: utility.f90 $(FC) $(FFLAGS) $(OPT) -c utility.f90 -o $@ # ../bin/autlab: autlab.f90 utility.o $(FC) $(FFLAGS) $(OPT) autlab.f90 utility.o -o $@ # ../bin/double: double.f90 $(FC) $(FFLAGS) $(OPT) double.f90 -o $@ # ../bin/triple: triple.f90 $(FC) $(FFLAGS) $(OPT) triple.f90 -o $@ # ../bin/keepbp: keepbp.f90 utility.o $(FC) $(FFLAGS) $(OPT) keepbp.f90 utility.o -o $@ # ../bin/keeplp: keeplp.f90 utility.o $(FC) $(FFLAGS) $(OPT) keeplp.f90 utility.o -o $@ # ../bin/keepuz: keepuz.f90 utility.o $(FC) $(FFLAGS) $(OPT) keepuz.f90 utility.o -o $@ # ../bin/keepsp: keepsp.f90 utility.o $(FC) $(FFLAGS) $(OPT) keepsp.f90 utility.o -o $@ # ../bin/deletelp: deletelp.f90 utility.o $(FC) $(FFLAGS) $(OPT) deletelp.f90 utility.o -o $@ # ../bin/listlabels: listlabels.f90 utility.o $(FC) $(FFLAGS) $(OPT) listlabels.f90 utility.o -o $@ # ../bin/reduce: reduce.f90 utility.o $(FC) $(FFLAGS) $(OPT) reduce.f90 utility.o -o $@ # compat.o : ../src/$(COMPAT).f90 $(FC) $(FFLAGS) $(OPT) -c ../src/$(COMPAT).f90 -o $@ # ../bin/relabel: relabel.f90 compat.o $(FC) $(FFLAGS) $(OPT) relabel.f90 compat.o -o $@ # zero: $(AUTO_DIR)/util/zero.f90 $(FC) $(FFLAGS) $(OPT) $(AUTO_DIR)/util/zero.f90 -o zero # superclean: rm -f *.mod *.o clean: superclean # # DO NOT ADD ANYTHING AFTER THIS LINE # auto/07p/util/utility.f900000640000175000017500000002720613570013207013251 0ustar sksk!====================================================================== !====================================================================== ! Utility Module for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO-07p Data Files !====================================================================== !====================================================================== ! MODULE UTILITY IMPLICIT NONE PRIVATE PUBLIC KEEPMAIN,RDFILE7,RDFILE8,LISTLB,INLIST,WRFILE7,WRFILE8,RELABEL PUBLIC GTFILE7, GTFILE8, LABEL TYPE LABEL INTEGER BR, PT, TY, LAB TYPE(LABEL), POINTER :: NEXT END TYPE LABEL CONTAINS ! ---------- -------- SUBROUTINE KEEPMAIN(DELETEFN) LOGICAL, EXTERNAL :: DELETEFN INTEGER, ALLOCATABLE :: LBR(:),LPT(:),LTY(:),LLB(:),LNL(:) TYPE(LABEL), POINTER :: LIST INTEGER DUM(1) INTEGER NLB,I OPEN(27,FILE='fort.27',STATUS='old',ACCESS='sequential') OPEN(28,FILE='fort.28',STATUS='old',ACCESS='sequential') OPEN(37,FILE='fort.37',STATUS='unknown',ACCESS='sequential') OPEN(38,FILE='fort.38',STATUS='unknown',ACCESS='sequential') NULLIFY(LIST) CALL RDFILE8(LIST,NLB,28) ALLOCATE(LBR(NLB),LPT(NLB),LTY(NLB),LLB(NLB),LNL(NLB)) CALL GTFILE8(LIST,NLB,LBR,LPT,LTY,LLB,LNL) DO I=1,NLB IF(DELETEFN(I,MOD(LTY(I),10)))THEN LNL(I)=0 LTY(I)=0 ENDIF ENDDO CALL WRFILE7(0,DUM,NLB,LLB,LNL) CALL WRFILE8(LBR,LNL) END SUBROUTINE KEEPMAIN ! ---------- ------- SUBROUTINE GTFILE7(LIST,NBR,BBR,BNB) TYPE(LABEL), POINTER :: LIST INTEGER NBR INTEGER BBR(NBR),BNB(NBR) TYPE(LABEL), POINTER :: P,Q INTEGER I P=>LIST DO I=1,NBR BBR(I)=P%BR BNB(I)=P%BR Q=>P P=>P%NEXT DEALLOCATE(Q) ENDDO IF(ASSOCIATED(P))DEALLOCATE(P) NULLIFY(LIST) END SUBROUTINE GTFILE7 ! ---------- ------- SUBROUTINE RDFILE7(LIST,NBR,NLB,LBI,UNIT) ! just scan branch numbers and labels on the branch TYPE(LABEL), POINTER :: LIST INTEGER, INTENT(IN) :: NLB, UNIT INTEGER, INTENT(OUT) :: NBR INTEGER, INTENT(OUT) :: LBI(NLB) INTEGER J,IBR,IPT,ITY,ILB,PREVPT TYPE(LABEL), POINTER :: P NBR=0 J=1 ALLOCATE(LIST) P=>LIST DO NULLIFY(P%NEXT) DO READ(UNIT,*,END=99,ERR=99)IBR IF(IBR/=0)EXIT ENDDO NBR=NBR+1 P%BR=ABS(IBR) BACKSPACE UNIT READ(UNIT,*,END=99,ERR=98)IBR,IPT,ITY,ILB DO PREVPT=ABS(IPT) IF(ILB/=0)THEN LBI(J)=NBR J=J+1 ENDIF READ(UNIT,*,END=99,ERR=98)IBR,IPT,ITY,ILB IF(IBR==0)EXIT IF(ABS(IPT)==1.AND.PREVPT/=9999.AND.PREVPT/=0)THEN BACKSPACE UNIT EXIT ENDIF ENDDO 98 CONTINUE ALLOCATE(P%NEXT) P=>P%NEXT ENDDO 99 RETURN END SUBROUTINE RDFILE7 ! ---------- ------- SUBROUTINE GTFILE8(LIST,NLB,LBR,LPT,LTY,LLB,LNL) TYPE(LABEL), POINTER :: LIST INTEGER NLB INTEGER LBR(NLB),LPT(NLB),LTY(NLB),LLB(NLB),LNL(NLB) TYPE(LABEL), POINTER :: P,Q INTEGER I P=>LIST DO I=1,NLB LBR(I)=P%BR LPT(I)=P%PT LTY(I)=P%TY LLB(I)=P%LAB LNL(I)=P%LAB Q=>P P=>P%NEXT DEALLOCATE(Q) ENDDO IF(ASSOCIATED(P))DEALLOCATE(P) NULLIFY(LIST) END SUBROUTINE GTFILE8 ! ---------- ------- SUBROUTINE RDFILE8(LIST,NLB,UNIT) TYPE(LABEL), POINTER :: LIST INTEGER NLB,UNIT LOGICAL EOF INTEGER IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NSKIP TYPE(LABEL), POINTER :: P NLB=0 ALLOCATE(LIST) P=>LIST DO NULLIFY(P%NEXT) READ(UNIT,*,END=2)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NSKIP NLB=NLB+1 P%BR=ABS(IBR) P%PT=ABS(NTOT) P%TY=ITP P%LAB=LAB CALL SKIP(UNIT,NSKIP,EOF) IF(EOF)RETURN ALLOCATE(P%NEXT) P=>P%NEXT ENDDO 2 RETURN END SUBROUTINE RDFILE8 ! ---------- ------- SUBROUTINE WRFILE7(NBR,BNB,NLB,LLB,LNL) INTEGER NBR,NEWBR,NLB INTEGER BNB(NBR),LLB(NLB),LNL(NLB) CHARACTER(LEN=132) LINE CHARACTER(LEN=1) CH1 CHARACTER(LEN=17) FMT ! fits "(I99,I99,I99,I99)" INTEGER I,J,L,LNUM,LEN,BRI,BR,PREVPT,PT,TY,LAB,IND(4),L0,L1,L2,L3 LOGICAL EOL, HEADER L=0 LNUM=0 L0=0 L1=0 L2=0 L3=0 BRI=0 HEADER=.FALSE. PT=0 REWIND 27 DO EOL=.TRUE. READ(27,"(A)",ADVANCE='NO',EOR=97,END=99,SIZE=LEN)LINE EOL=.FALSE. 97 CONTINUE LNUM=LNUM+1 J=1 IND(1)=0 DO I=1,4 ! skip spaces DO IF(LINE(J:J)/=' ')EXIT J=J+1 IF(J>LEN)EXIT ENDDO ! check for header line IF(I==1.AND.LINE(J:J)=='0')THEN IF(.NOT.HEADER)THEN BRI=BRI+1 ENDIF HEADER=.TRUE. EXIT ENDIF ! look for next space after BR/PT/TY/LAB DO IF(LINE(J:J)==' ')EXIT J=J+1 IF(J>LEN)EXIT ENDDO IF(J>LEN)THEN IND(1)=0 EXIT ENDIF ! Put line index for PT, TY, LAB, rest here IND(I)=J ENDDO LAB=0 BR=0 IF(IND(1)/=0)THEN PREVPT=PT READ(LINE(:IND(4)-1),*)BR,PT,TY,LAB IF(.NOT.HEADER.AND.PT==1.AND.PREVPT/=9999.AND.PREVPT/=0)THEN BRI=BRI+1 ENDIF HEADER=.FALSE. ENDIF NEWBR=BR IF(BRI<=NBR)THEN NEWBR=BNB(BRI) IF(IND(1)/=0)THEN NEWBR=SIGN(NEWBR,BR) ELSE BR=NEWBR ENDIF ENDIF IF(LAB/=0.OR.NEWBR/=BR)THEN IF(LAB/=0)L=L+1 IF(LAB/=0.AND.LAB/=LLB(L))THEN WRITE(6,"(A/A,I5,A,I5/A,I5/A/A)", ADVANCE="NO") & ' WARNING : The two files have incompatible labels :', & ' b-file label',LAB,' at line ',LNUM, & ' s-file label',LLB(L), & ' New labels may be assigned incorrectly.', & ' Continue ? : ' READ(5,"(A1)")CH1 IF(CH1/='y'.AND.CH1/='Y')THEN WRITE(6,"(A)") & 'Rewrite discontinued. Recover original files' RETURN ENDIF ENDIF IF(IND(1)-1/=L0.OR.IND(2)-IND(1)/=L1.OR. & IND(3)-IND(2)/=L2.OR.IND(4)-IND(3)/=L3) THEN L0=IND(1)-1 L1=IND(2)-IND(1) L2=IND(3)-IND(2) L3=IND(4)-IND(3) WRITE(FMT,"(A,I2,A,I2,A,I2,A,I2,A)")& '(I',L0,',I',L1,',I',L2,',I',L3,')' ENDIF IF(LAB==0)THEN WRITE(LINE(:IND(4)-1),FMT)NEWBR,PT,TY,LAB ELSE WRITE(LINE(:IND(4)-1),FMT)NEWBR,PT,TY,LNL(L) ENDIF ENDIF IF(NEWBR==0)THEN ! deleted branch; don't write IF(.NOT.EOL)THEN READ(27,"()",END=99) ENDIF CYCLE ENDIF IF(.NOT.EOL)THEN DO WRITE(37,"(A)",ADVANCE='NO')LINE(1:LEN) READ(27,"(A)",ADVANCE='NO',EOR=98,SIZE=LEN)LINE ENDDO 98 CONTINUE ENDIF WRITE(37,"(A)")LINE(1:LEN) ENDDO 99 RETURN END SUBROUTINE WRFILE7 ! ---------- ------- SUBROUTINE WRFILE8(LBR,LNL) INTEGER LBR(*),LNL(*) INTEGER IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR INTEGER NPARI,NDM,IPS,IPRIV INTEGER I,L CHARACTER(150) LINE LOGICAL EOF ! L=0 REWIND 28 DO READ(28,'(A)',END=99)LINE IF (LEN_TRIM(LINE) <= 73) THEN READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR L=L+1 IF(LNL(L)>0)THEN WRITE(38,101)LBR(L),NTOT,ITP,LNL(L),NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR ENDIF ELSE READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV L=L+1 IF(LNL(L)>0)THEN WRITE(38,111)LBR(L),NTOT,ITP,LNL(L),NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ENDIF ENDIF IF(LNL(L)>0)THEN DO I=1,NROWPR LINE(:)=' ' READ(28,'(A)',END=99)LINE WRITE(38,'(A)')LINE(1:LEN_TRIM(LINE)) ENDDO ELSE CALL SKIP(28,NROWPR,EOF) IF(EOF)RETURN ENDIF ENDDO 101 FORMAT(6I6,I8,I6,I8,3I5) 111 FORMAT(6I6,I8,I6,I8,7I5) 99 RETURN END SUBROUTINE WRFILE8 ! ------- -------- ------ LOGICAL FUNCTION INLIST(NLB,LAB,NL,LFR,LTO) INTEGER NLB,LAB,NL,LFR(NLB),LTO(NLB) INTEGER I INLIST=.FALSE. DO I=1,NL IF(LAB.GE.LFR(I).AND.LAB.LE.LTO(I))THEN INLIST=.TRUE. RETURN ENDIF ENDDO END FUNCTION INLIST ! ! ---------- ---- SUBROUTINE SKIP(IUNIT,NSKIP,EOF) ! ! Skips the specified number of lines on fort.IUNIT. ! INTEGER, INTENT(IN) :: IUNIT,NSKIP LOGICAL, INTENT(OUT) :: EOF CHARACTER(12) FMT ! WRITE(FMT,'(A,I9,A)')'(',NSKIP-1,'/)' EOF=.TRUE. READ(IUNIT,FMT,END=2) EOF=.FALSE. 2 RETURN END SUBROUTINE SKIP ! ! LISTLB, TYPE, and RELABEL are used by listlabels.f, autlab.f, or relabel.f ! ! ---------- ------ SUBROUTINE LISTLB(NLB,LBR,LPT,LTY,LLB,LNL,NL,LFR,LTO,NEW) ! LOGICAL NEW INTEGER NLB,LBR(NLB),LPT(NLB),LTY(NLB),LLB(NLB),LNL(NLB) INTEGER NL,LFR(NLB),LTO(NLB) LOGICAL FIRST INTEGER I ! IF(NLB.EQ.0)THEN WRITE(6,"(/,' Empty solutions file')") RETURN ENDIF FIRST=.TRUE. DO I=1,NLB IF(NL==0 .OR. INLIST(NLB,LLB(I),NL,LFR,LTO))THEN IF(FIRST)THEN IF(NEW)THEN WRITE(6,"(/,' BR PT TY LAB NEW')") ELSE WRITE(6,"(/,' BR PT TY LAB')") ENDIF FIRST=.FALSE. ENDIF WRITE(6,"(I4,I6,1X,A3,I5)",ADVANCE="no")LBR(I),LPT(I), & ADJUSTR(TYPE(LTY(I))),LLB(I) IF(.NOT.NEW)THEN WRITE(6,"()") ELSEIF(LLB(I)==LNL(I).OR.LNL(I)/=0)THEN WRITE(6,"(I5)")LNL(I) ELSE WRITE(6,"(' DELETED')") ENDIF ENDIF ENDDO CONTAINS CHARACTER(3) FUNCTION TYPE(ITP) ! returns the string label type corresponding to numerical type ITP INTEGER, INTENT(IN) :: ITP CHARACTER(2), PARAMETER :: ATYPES(-9:9) = & (/ 'MX','R4','R3','R2','R1','UZ','ZH','CP','BT',' ', & 'BP','LP','HB',' ','LP','BP','PD','TR','EP' /) SELECT CASE(ITP) CASE(-32) TYPE='GH' CASE(23,83) TYPE='LTR' CASE(77,87) TYPE='PTR' CASE(28,78) TYPE='LPD' CASE(88) TYPE='TTR' CASE DEFAULT TYPE=ATYPES(MOD(ITP,10)) END SELECT END FUNCTION TYPE END SUBROUTINE LISTLB ! ---------- ------- SUBROUTINE RELABEL(S,NLB,LLB,LNL,NL,LFR,LTO) CHARACTER(*) S INTEGER NLB,NL INTEGER LLB(NLB),LNL(NLB) INTEGER LFR(NLB),LTO(NLB) INTEGER NN,I IF(NL==0)THEN NN=0 DO I=1,NLB IF(LNL(I)>0)THEN NN=NN+1 LNL(I)=NN ENDIF ENDDO ELSE DO I=1,NLB IF(NL==0 .OR. & (LNL(I)>0 .AND. INLIST(NLB,LLB(I),NL,LFR,LTO)) )THEN WRITE(6,"(' Old ',A,I5,'; Enter new ',A,' : ')", & ADVANCE="no")S,LLB(I),S READ(5,*)LNL(I) ENDIF ENDDO ENDIF END SUBROUTINE RELABEL !====================================================================== !====================================================================== END MODULE UTILITY auto/07p/util/relabel.f900000640000175000017500000001207213570013207013147 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM RELABELF USE COMPAT IMPLICIT NONE CHARACTER(80) INB,OUTB,INS,OUTS INTEGER N,NLB TYPE LABEL INTEGER LAB TYPE(LABEL), POINTER :: NEXT END TYPE LABEL TYPE(LABEL), POINTER :: LIST N=AUTARGC() IF (N==4) THEN CALL AUTGETARG(1,INB) CALL AUTGETARG(2,INS) CALL AUTGETARG(3,OUTB) CALL AUTGETARG(4,OUTS) ELSE INB='fort.27' INS='fort.28' OUTB='fort.37' OUTS='fort.38' ENDIF OPEN(28,FILE=INS,STATUS='old',ACCESS='sequential') OPEN(38,FILE=OUTS,STATUS='replace',ACCESS='sequential') CALL SFILE(LIST,NLB) CLOSE(28) CLOSE(38) OPEN(27,FILE=INB,STATUS='old',ACCESS='sequential') OPEN(37,FILE=OUTB,STATUS='replace',ACCESS='sequential') CALL BFILE(LIST,NLB) CLOSE(27) CLOSE(37) STOP CONTAINS ! ---------- ------ SUBROUTINE SFILE(LIST,NLB) INTEGER NLB INTEGER IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR INTEGER NPARI,NDM,IPS,IPRIV INTEGER I,L,LEN CHARACTER(150) LINE LOGICAL OLD TYPE(LABEL), POINTER :: LIST, P ! L=0 NLB=0 ALLOCATE(LIST) P=>LIST DO NULLIFY(P%NEXT) READ(28,'(A)',END=99)LINE IF (LEN_TRIM(LINE) == 0) GOTO 99 IF (LEN_TRIM(LINE) <= 73) THEN READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR OLD=.TRUE. ELSE READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV OLD=.FALSE. ENDIF NLB=NLB+1 P%LAB=LAB L=L+1 IF(OLD)THEN WRITE(38,101)IBR,NTOT,ITP,L,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR ELSE WRITE(38,111)IBR,NTOT,ITP,L,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ENDIF DO I=1,NROWPR READ(28,"(A)",ADVANCE='NO',EOR=98,END=99,SIZE=LEN)LINE DO WRITE(38,"(A)",ADVANCE='NO')LINE(1:LEN) READ(28,"(A)",ADVANCE='NO',EOR=98,END=99,SIZE=LEN)LINE ENDDO 98 CONTINUE WRITE(38,"(A)")LINE(1:LEN) ENDDO ALLOCATE(P%NEXT) P=>P%NEXT ENDDO 101 FORMAT(6I6,I8,I6,I8,3I5) 111 FORMAT(6I6,I8,I6,I8,7I5) 99 RETURN END SUBROUTINE SFILE ! ---------- ------- SUBROUTINE BFILE(LIST,NLB) INTEGER NLB,LAB CHARACTER(132) LINE CHARACTER(1) CH1 INTEGER I,J,I1,I2,L1,L,LNUM,LEN LOGICAL EOL CHARACTER(LEN=5) FMT ! fits "(I99)" TYPE(LABEL), POINTER :: LIST, P L=0 LNUM=0 L1=0 P=>LIST DO EOL=.TRUE. READ(27,"(A)",ADVANCE='NO',EOR=97,END=99,SIZE=LEN)LINE EOL=.FALSE. 97 CONTINUE LNUM=LNUM+1 J=1 I2=0 DO I=1,4 ! skip spaces DO IF(LINE(J:J)/=' ')EXIT J=J+1 IF(J>LEN)EXIT ENDDO ! check for header line IF(I==1.AND.LINE(J:J)=='0')THEN EXIT ENDIF ! look for next space after BR/PT/TY/LAB DO IF(LINE(J:J)==' ')EXIT J=J+1 IF(J>LEN)EXIT ENDDO IF(J>LEN)THEN EXIT ENDIF ! Put line index for LAB, rest here IF(I==3)THEN I1=J ELSEIF(I==4)THEN I2=J ENDIF ENDDO LAB=0 IF(I2/=0)THEN READ(LINE(I1:I2-1),*)LAB ENDIF IF(LAB/=0)THEN L=L+1 IF(L>NLB.OR.LAB/=P%LAB)THEN WRITE(*,"(A/A,I5,A,I5/A,I5/A/A)", ADVANCE="NO") & ' WARNING : The two files have incompatible labels :', & ' b-file label ',LAB,' at line ',LNUM, & ' s-file label ',P%LAB, & ' New labels may be assigned incorrectly.', & ' Continue ? : ' READ(*,"(A1)")CH1 IF(CH1/='y'.AND.CH1/='Y')THEN WRITE(*,"(A)") & 'Rewrite discontinued. Recover original files' RETURN ENDIF ENDIF IF(ASSOCIATED(P%NEXT))THEN P=P%NEXT ENDIF IF(I2-I1/=L1)THEN L1=I2-I1 WRITE(FMT,"(A,I2,A)")'(I',L1,')' ENDIF WRITE(LINE(I1:I2-1),FMT)L ENDIF IF(.NOT.EOL)THEN DO WRITE(37,"(A)",ADVANCE='NO')LINE(1:LEN) READ(27,"(A)",ADVANCE='NO',EOR=98,SIZE=LEN)LINE ENDDO 98 CONTINUE ENDIF WRITE(37,"(A)")LINE(1:LEN) ENDDO 99 RETURN END SUBROUTINE BFILE END PROGRAM RELABELF !====================================================================== !====================================================================== auto/07p/util/keepuz.f900000750000175000017500000000113513570013207013044 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM KEEPUZ USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM KEEPUZ LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = ITP/=-4 END FUNCTION DELETEFN auto/07p/util/autlab.f900000640000175000017500000001734113570013207013015 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM AUTLAB USE UTILITY IMPLICIT NONE INTEGER, ALLOCATABLE :: LBR(:),LPT(:),LTY(:),LLB(:),LNL(:) INTEGER, ALLOCATABLE :: LFR(:),LTO(:),LBI(:) INTEGER, ALLOCATABLE :: BBR(:),BNB(:) TYPE(LABEL), POINTER :: LIST CHARACTER(2) CMD INTEGER NBR,NLB,NL,ILB OPEN(27,FILE='fort.27',STATUS='old',ACCESS='sequential') OPEN(28,FILE='fort.28',STATUS='old',ACCESS='sequential') NULLIFY(LIST) CALL RDFILE8(LIST,NLB,28) ALLOCATE(LBR(NLB),LPT(NLB),LTY(NLB),LLB(NLB),LNL(NLB),& LFR(NLB),LTO(NLB),LBI(NLB)) CALL GTFILE8(LIST,NLB,LBR,LPT,LTY,LLB,LNL) CALL RDFILE7(LIST,NBR,NLB,LBI,27) ALLOCATE(BBR(NBR),BNB(NBR)) CALL GTFILE7(LIST,NBR,BBR,BNB) CALL SYSTEM('clear') DO CALL RDCMD(NLB,CMD,NL,LFR,LTO) SELECT CASE(TRIM(CMD)) CASE('H') CALL SYSTEM('clear') CALL HELP CASE('L') CALL LISTLB(NLB,LBR,LPT,LTY,LLB,LNL,NL,LFR,LTO,.TRUE.) CASE('LB') CALL LISTBR(NBR,BBR,BNB,NLB,LBI,LNL,NL,LFR,LTO) CASE('D') CALL DELETE('label',NLB,LLB,LNL,NL,LFR,LTO) CASE('DB') CALL DELETE('branch',NBR,BBR,BNB,NL,LFR,LTO) ! delete all labels on the branch DO ILB=1,NLB IF(LBI(ILB)/=0)THEN IF(BNB(LBI(ILB))==0)THEN LNL(ILB)=0 ENDIF ENDIF ENDDO CASE('R') CALL RELABEL('label',NLB,LLB,LNL,NL,LFR,LTO) CASE('RB') CALL RELABEL('branch',NBR,BBR,BNB,NL,LFR,LTO) DO ILB=1,NLB ! sync solutions IF(LBI(ILB)/=0)THEN LBR(ILB)=BNB(LBI(ILB)) ENDIF ENDDO CASE('W') IF(CHCKLB(NLB,LNL))THEN WRITE(6,"(/,' Rewriting files ... ')") OPEN(37,FILE='fort.37',STATUS='unknown',ACCESS='sequential') OPEN(38,FILE='fort.38',STATUS='unknown',ACCESS='sequential') CALL WRFILE7(NBR,BNB,NLB,LLB,LNL) CALL WRFILE8(LBR,LNL) STOP ENDIF CASE('Q') WRITE(6,"(' Relabeling discontinued. Recover original files')") STOP END SELECT ENDDO CONTAINS !--------- ----- SUBROUTINE RDCMD(NLB,CMD,NL,LFR,LTO) INTEGER NLB,NL INTEGER LFR(NLB),LTO(NLB) CHARACTER(1) CMD1 CHARACTER(2) CMD INTEGER, SAVE :: IFIRST CHARACTER(1) CHR CHARACTER(80) LINE INTEGER IP,i DO IF(IFIRST.NE.1)THEN WRITE(6,'(/A)',ADVANCE="no")' Enter Command ( h for Help) : ' IFIRST=1 ELSE WRITE(6,'(/A)',ADVANCE="no")' Enter Command : ' ENDIF LINE=' ' READ(5,'(A80)')LINE IP=1 CMD1=GETCHR(LINE,IP) i=INDEX('hldrwq',CMD1) IF(i>=1)THEN CMD1='HLDRWQ'(i:i) EXIT ENDIF WRITE(6,'(/A)',ADVANCE="no")' Invalid Command ' IFIRST=0 ENDDO CMD=CMD1 IF(CMD1=='L'.OR.CMD1=='D'.OR.CMD1=='R')THEN NL=0 DO CHR=GETCHR(LINE,IP) IF(CHR=='b'.OR.CHR=='B')THEN CMD(2:2)='B' CYCLE ENDIF IF(INDEX('0123456789',CHR)==0)EXIT IP=IP-1 NL=NL+1 LFR(NL)=GETNUM(LINE,IP) CHR=GETCHR(LINE,IP) IF(CHR=='-')THEN LTO(NL)=GETNUM(LINE,IP) ELSE IP=IP-1 LTO(NL)=LFR(NL) ENDIF ENDDO ENDIF END SUBROUTINE RDCMD !----------- -------- ------ CHARACTER(1) FUNCTION GETCHR(LINE,IP) ! ! Gets next character from LINE that is not a ' ' or ',' ! CHARACTER(80), INTENT(IN) :: LINE INTEGER, INTENT(INOUT) :: IP INTEGER I I=VERIFY(LINE(IP:),' ,') IF(I>0)THEN IP=IP+I GETCHR=LINE(IP-1:IP-1) ELSE IP=81 GETCHR=' ' ENDIF END FUNCTION GETCHR !------ -------- ------ INTEGER FUNCTION GETNUM(LINE,IP) CHARACTER(80), INTENT(IN) :: LINE INTEGER, INTENT(INOUT) :: IP INTEGER I GETNUM=0 I=SCAN(LINE(IP+1:),'-, ') IF(I>0)THEN READ(LINE(IP:IP+I-1),*)GETNUM IP=IP+I ELSE READ(LINE(IP:),*)GETNUM IP=81 ENDIF END FUNCTION GETNUM !--------- ---- SUBROUTINE HELP WRITE(6,"(/A//A/A/A/A/A/A/A)") & ' Available commands : ', & ' l : list labels', & ' lb : list branch numbers', & ' d : delete labels', & ' db : delete branches', & ' r : relabel', & ' rb : relabel branches', & ' w : rewrite files', & ' q : quit ', & ' h : help ' WRITE(6,"(//A/A//A/A/A/A)") & ' The l, d, r, lb, db, and rb commands can be followed on the ', & ' same line by a list of labels, for example, ', & ' l 13 (list label 13)', & ' d 7 13 (delete labels 7 and 13)', & ' r 1 13 6-9 (relabel 1, 13, and 6 to 9)', & ' rb 1, 3-5, 7-9 (relabel branches 1, 3 to 5, and 7 to 9)' WRITE(6,"(//A//A/A/A/A/)") & ' If a list is not specified then the actions are', & ' l (list all labels)', & ' d (delete/confirm all labels)', & ' r (automatic relabeling)', & ' rb (automatic relabeling of branches)' END SUBROUTINE HELP !--------- ------ SUBROUTINE DELETE(S,NLB,LLB,LNL,NL,LFR,LTO) USE UTILITY CHARACTER(*) S INTEGER NLB,LLB(NLB),LNL(NLB),LFR(NLB),LTO(NLB),NL CHARACTER(1) CH1 INTEGER I IF(NL.EQ.0)THEN DO I=1,NLB IF(LNL(I).GT.0)THEN WRITE(6,"(A,A,I5,A)",ADVANCE="no") & ' Delete (old) ',TRIM(S),LLB(I),' ? : ' READ(5,'(A1)')CH1 IF(CH1.EQ.'y'.OR.CH1.EQ.'Y')THEN LNL(I)=0 ENDIF ENDIF ENDDO ELSE DO I=1,NLB IF(INLIST(NLB,LLB(I),NL,LFR,LTO))THEN LNL(I)=0 ENDIF ENDDO ENDIF END SUBROUTINE DELETE !------ -------- ------ LOGICAL FUNCTION CHCKLB(NLB,LNL) INTEGER, INTENT(IN) :: NLB, LNL(NLB) INTEGER I, J CHCKLB=.TRUE. DO I=1,NLB IF(LNL(I).GT.0)THEN DO J=1,NLB IF(J.NE.I .AND. LNL(J).GT.0)THEN IF(LNL(J).EQ.LNL(I))THEN WRITE(6,101) CHCKLB=.FALSE. RETURN ENDIF ENDIF ENDDO ENDIF ENDDO 101 FORMAT(' Duplicate labels: File not written') RETURN END FUNCTION CHCKLB ! ---------- ------ SUBROUTINE LISTBR(NBR,BBR,BNB,NLB,LBI,LNL,NB,BFR,BTO) ! USE UTILITY INTEGER NBR,BBR(NBR),BNB(NBR),NLB,LBI(NLB),LNL(NLB) INTEGER NB,BFR(NBR),BTO(NBR) LOGICAL FIRST INTEGER I, J ! IF(NBR.EQ.0)THEN WRITE(6,"(/,' Empty bifurcation diagram file')") RETURN ENDIF FIRST=.TRUE. J=1 DO I=1,NBR IF(NB==0 .OR. INLIST(NLB,I,NB,BFR,BTO))THEN IF(FIRST)THEN WRITE(6,"(/,' BR NEW Labels in branch')") FIRST=.FALSE. ENDIF WRITE(6,"(I4)",ADVANCE="no")BBR(I) IF(I==BNB(I).OR.BNB(I)/=0)THEN WRITE(6,"(I4)",ADVANCE="no")BNB(I) IF(J<=NLB)THEN IF(LBI(J)==I)THEN WRITE(6,"(I5)",ADVANCE="no")LNL(J) J=J+1 DO WHILE(LBI(J)==I) WRITE(6,"(A,I5)",ADVANCE="no")", ",LNL(J) J=J+1 ENDDO ENDIF ENDIF WRITE(6,"()") ELSE WRITE(6,"(' DELETED')") ENDIF ENDIF ENDDO END SUBROUTINE LISTBR !====================================================================== END PROGRAM AUTLAB !====================================================================== auto/07p/util/listlabels.f900000640000175000017500000000142513570013207013677 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM LISTLABELS USE UTILITY INTEGER, ALLOCATABLE :: LBR(:),LPT(:),LTY(:),LLB(:),LNL(:),LFR(:),LTO(:) TYPE(LABEL), POINTER :: LIST ! NULLIFY(LIST) CALL RDFILE8(LIST,NLB,5) ALLOCATE(LBR(NLB),LPT(NLB),LTY(NLB),LLB(NLB),LNL(NLB),LFR(NLB),LTO(NLB)) CALL GTFILE8(LIST,NLB,LBR,LPT,LTY,LLB,LNL) CALL LISTLB(NLB,LBR,LPT,LTY,LLB,LNL,0,LFR,LTO,.FALSE.) ! STOP END PROGRAM LISTLABELS auto/07p/util/zero.f900000640000175000017500000000551713570013207012526 0ustar sksk!======================================================================= !======================================================================= ! Utility Program for "zeroing small numbers" in an AUTO s.xxx file !======================================================================= !======================================================================= ! PROGRAM ZERO IMPLICIT NONE ! DOUBLE PRECISION, ALLOCATABLE :: TM(:),RLDOT(:),PAR(:),U(:,:) INTEGER, ALLOCATABLE :: ICP(:) LOGICAL OLD CHARACTER(100) LINE DOUBLE PRECISION, PARAMETER :: EPS = 1d-16 INTEGER I,J,L,IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NROWPRSMALL INTEGER NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ! L=0 OPEN(28,FILE='fort.28',STATUS='old',ACCESS='sequential') OPEN(38,FILE='fort.38',STATUS='unknown',ACCESS='sequential') 1 CONTINUE READ(28,'(A)',END=99)LINE IF (LEN_TRIM(LINE) <= 73) THEN READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR OLD=.TRUE. ELSE READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV OLD=.FALSE. ENDIF IF(OLD)THEN WRITE(38,101)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR ELSE WRITE(38,111)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ENDIF ALLOCATE(TM(NTPL),U(NTPL,NAR-1)) DO J=1,NTPL READ(28,*) TM(J),(U(J,I),I=1,NAR-1) DO I=1,NAR-1 IF(ABS(U(J,I)).LT.EPS) U(J,I)=0.d0 ENDDO WRITE(38,102)TM(J),(U(J,I),I=1,NAR-1) ENDDO ! -------------------------------------------- NROWPRSMALL=((NAR-1)/7+1)*NTPL + (NPAR+6)/7 IF(NTST.NE.0.AND.NROWPR.GT.NROWPRSMALL)THEN ! -------------------------------------------- ALLOCATE(RLDOT(NPAR),ICP(NPAR)) READ(28,*) (ICP(I),I=1,NFPR) WRITE(38,103)(ICP(I),I=1,NFPR) ! -------------------------------------------- READ(28,*) (RLDOT(I),I=1,NFPR) DO I=1,NFPR IF(ABS(RLDOT(I)).LT.EPS) RLDOT(I)=0.d0 ENDDO WRITE(38,102)(RLDOT(I),I=1,NFPR) ! -------------------------------------------- DO J=1,NTPL READ(28,*) (U(J,I),I=1,NAR-1) DO I=1,NAR-1 IF(ABS(U(J,I)).LT.EPS) U(J,I)=0.d0 ENDDO WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO DEALLOCATE(RLDOT,ICP) ENDIF ! -------------------------------------------- ALLOCATE(PAR(NPAR)) READ(28,*) (PAR(I),I=1,NPAR) DO I=1,NPAR IF(ABS(PAR(I)).LT.EPS) PAR(I)=0.d0 ENDDO WRITE(38,102)(PAR(I),I=1,NPAR) ! -------------------------------------------- DEALLOCATE(PAR,TM,U) GOTO 1 101 FORMAT(6I6,I8,I6,I8,3I5) 111 FORMAT(6I6,I8,I6,I8,7I5) 102 FORMAT(4X,7ES19.10E3) 103 FORMAT(20I5) 99 STOP END PROGRAM ZERO !======================================================================= !======================================================================= auto/07p/util/deletelp.f900000750000175000017500000000115713570013207013343 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM DELETELP USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM DELETELP LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = (ITP==2 .OR. ITP==5) END FUNCTION DELETEFN auto/07p/util/keeplp.f900000750000175000017500000000115313570013207013021 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM KEEPLP USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM KEEPLP LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = (ITP/=2 .AND. ITP/=5) END FUNCTION DELETEFN auto/07p/util/keepsp.f900000750000175000017500000000115313570013207013030 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM KEEPSP USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM KEEPSP LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = (ITP==4 .OR. ITP==-4) END FUNCTION DELETEFN auto/07p/util/double.f900000640000175000017500000000552713570013207013022 0ustar sksk!============================================================================== !============================================================================== ! Utility Program for ``doubling'' solutions in an AUTO q.xxx file !============================================================================== !============================================================================== ! PROGRAM DOUBLE IMPLICIT NONE ! DOUBLE PRECISION, ALLOCATABLE :: TM(:),RLDOT(:),PAR(:),U(:,:) INTEGER, ALLOCATABLE :: ICP(:) LOGICAL OLD CHARACTER(100) LINE DOUBLE PRECISION, PARAMETER :: EPS = 1d-16 INTEGER I,J,L,IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NTPL1,NROWPRSMALL INTEGER NAR,NROWPR,NROWPR1,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ! L=0 OPEN(28,FILE='fort.28',STATUS='old',ACCESS='sequential') OPEN(38,FILE='fort.38',STATUS='unknown',ACCESS='sequential') 1 CONTINUE READ(28,'(A)',END=99)LINE IF (LEN_TRIM(LINE) <= 73) THEN READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR OLD=.TRUE. ELSE READ(LINE,*)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL, & NAR,NROWPR,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV OLD=.FALSE. ENDIF NROWPRSMALL=((NAR-1)/7+1)*NTPL + (NPAR+6)/7 IF(NTPL.EQ.1)THEN NTPL1=NTPL NROWPR1=NROWPR ELSE NTST=2*NTST NTPL1=2*NTPL-1 NROWPR1=NROWPR+NTPL-1 IF(NTST.NE.0.AND.NROWPR.GT.NROWPRSMALL)THEN NROWPR1=NROWPR1+NTPL-1 ENDIF ENDIF IF(OLD)THEN WRITE(38,101)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL1, & NAR,NROWPR1,NTST,NCOL,NPAR ELSE WRITE(38,111)IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL1, & NAR,NROWPR1,NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV ENDIF ALLOCATE(TM(NTPL),U(NTPL,NAR-1)) DO J=1,NTPL READ(28,*) TM(J),(U(J,I),I=1,NAR-1) WRITE(38,102)TM(J)/2,(U(J,I),I=1,NAR-1) ENDDO IF(NTPL.GT.1)THEN DO J=2,NTPL WRITE(38,102)(1+TM(J))/2, & (U(J,I)+U(NTPL,I)-U(1,I),I=1,NAR-1) ENDDO ENDIF IF(NTST.NE.0.AND.NROWPR.GT.NROWPRSMALL)THEN ALLOCATE(RLDOT(NPAR),ICP(NPAR)) READ(28,*) (ICP(I),I=1,NFPR) WRITE(38,103)(ICP(I),I=1,NFPR) READ(28,*) (RLDOT(I),I=1,NFPR) WRITE(38,102)(RLDOT(I),I=1,NFPR) DO J=1,NTPL READ(28,*) (U(J,I),I=1,NAR-1) WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO IF(NTPL.GT.1)THEN DO J=2,NTPL WRITE(38,102)(U(J,I),I=1,NAR-1) ENDDO ENDIF DEALLOCATE(RLDOT,ICP) ENDIF ALLOCATE(PAR(NPAR)) READ(28,*) (PAR(I),I=1,NPAR) IF(NTPL.GT.1)THEN PAR(11)=2*PAR(11) ENDIF WRITE(38,102)(PAR(I),I=1,NPAR) DEALLOCATE(PAR,TM,U) GOTO 1 101 FORMAT(6I6,I8,I6,I8,3I5) 111 FORMAT(6I6,I8,I6,I8,7I5) 102 FORMAT(4X,7ES19.10E3) 103 FORMAT(20I5) 99 STOP END PROGRAM DOUBLE !============================================================================== !============================================================================== auto/07p/util/reduce.f900000640000175000017500000000116013570013207013004 0ustar sksk!====================================================================== !====================================================================== ! Utility Program for Listing, Deleting, Relabeling Labeled Solutions ! in AUTO97 Data Files !====================================================================== !====================================================================== ! PROGRAM REDUCE USE UTILITY LOGICAL, EXTERNAL :: DELETEFN CALL KEEPMAIN(DELETEFN) END PROGRAM REDUCE LOGICAL FUNCTION DELETEFN(I,ITP) INTEGER I,ITP DELETEFN = (MOD(I,2)==0 .AND. ITP==4) END FUNCTION DELETEFN auto/07p/config.sub0000750000175000017500000010645013570013207012232 0ustar sksk#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-22' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo "$1" | sed 's/-[^-]*$//'` if [ "$basic_machine" != "$1" ] then os=`echo "$1" | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | e2k | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | wasm32 \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pru-* \ | pyramid-* \ | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-pc os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; asmjs) basic_machine=asmjs-unknown ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2*) basic_machine=m68k-bull os=-sysv3 ;; e500v[12]) basic_machine=powerpc-unknown os=$os"spe" ;; e500v[12]-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=$os"spe" ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; nsv-tandem) basic_machine=nsv-tandem ;; nsx-tandem) basic_machine=nsx-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh5el) basic_machine=sh5le-unknown ;; simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; x64) basic_machine=x86_64-pc ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases that might get confused # with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # es1800 is here to avoid being matched by es* (a different OS) -es1800*) os=-ose ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \ | -midnightbsd*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -xray | -os68k* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4*) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $basic_machine in arm*) os=-eabi ;; *) os=-elf ;; esac ;; -nacl*) ;; -ios) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; pru-*) os=-elf ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"` ;; esac echo "$basic_machine$os" exit # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: auto/07p/config.guess0000750000175000017500000012637313570013207012575 0ustar sksk#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2018 Free Software Foundation, Inc. timestamp='2018-02-24' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > "$dummy.c" ; for c in cc gcc c89 c99 ; do if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval "$set_cc_for_build" cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" # If ldd exists, use it to detect musl libc. if command -v ldd >/dev/null && \ ldd --version 2>&1 | grep -q ^musl then LIBC=musl fi ;; esac # Note: order is significant - the case branches are not exclusive. case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ echo unknown)` case "$UNAME_MACHINE_ARCH" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine="${arch}${endian}"-unknown ;; *) machine="$UNAME_MACHINE_ARCH"-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case "$UNAME_MACHINE_ARCH" in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval "$set_cc_for_build" if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "$UNAME_VERSION" in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "$machine-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE" exit ;; *:ekkoBSD:*:*) echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE" exit ;; *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:MirBSD:*:*) echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE" exit ;; *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) echo mips-dec-osf1 exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`" # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo "$UNAME_MACHINE"-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix"$UNAME_RELEASE" exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval "$set_cc_for_build" SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos"$UNAME_RELEASE" ;; sun4) echo sparc-sun-sunos"$UNAME_RELEASE" ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos"$UNAME_RELEASE" exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint"$UNAME_RELEASE" exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint"$UNAME_RELEASE" exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint"$UNAME_RELEASE" exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint"$UNAME_RELEASE" exit ;; m68k:machten:*:*) echo m68k-apple-machten"$UNAME_RELEASE" exit ;; powerpc:machten:*:*) echo powerpc-apple-machten"$UNAME_RELEASE" exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix"$UNAME_RELEASE" exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix"$UNAME_RELEASE" exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix"$UNAME_RELEASE" exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos"$UNAME_RELEASE" exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] then if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \ [ "$TARGET_BINARY_INTERFACE"x = x ] then echo m88k-dg-dgux"$UNAME_RELEASE" else echo m88k-dg-dguxbcs"$UNAME_RELEASE" fi else echo i586-dg-dgux"$UNAME_RELEASE" fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV" exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi echo "$IBM_ARCH"-ibm-aix"$IBM_REV" exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` case "$UNAME_MACHINE" in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "$sc_cpu_version" in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "$sc_kernel_bits" in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if [ "$HP_ARCH" = "" ]; then eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ "$HP_ARCH" = hppa2.0w ] then eval "$set_cc_for_build" # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE" exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi"$UNAME_RELEASE" exit ;; *:BSD/OS:*:*) echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case "$UNAME_PROCESSOR" in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin exit ;; *:MINGW64*:*) echo "$UNAME_MACHINE"-pc-mingw64 exit ;; *:MINGW*:*) echo "$UNAME_MACHINE"-pc-mingw32 exit ;; *:MSYS*:*) echo "$UNAME_MACHINE"-pc-msys exit ;; i*:PW*:*) echo "$UNAME_MACHINE"-pc-pw32 exit ;; *:Interix*:*) case "$UNAME_MACHINE" in x86) echo i586-pc-interix"$UNAME_RELEASE" exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix"$UNAME_RELEASE" exit ;; IA64) echo ia64-unknown-interix"$UNAME_RELEASE" exit ;; esac ;; i*:UWIN*:*) echo "$UNAME_MACHINE"-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" exit ;; *:GNU:*:*) # the GNU system echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC" exit ;; i*86:Minix:*:*) echo "$UNAME_MACHINE"-pc-minix exit ;; aarch64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; arm*:Linux:*:*) eval "$set_cc_for_build" if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi else echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf fi fi exit ;; avr32*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; cris:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; crisv32:Linux:*:*) echo "$UNAME_MACHINE"-axis-linux-"$LIBC" exit ;; e2k:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; frv:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; hexagon:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:Linux:*:*) echo "$UNAME_MACHINE"-pc-linux-"$LIBC" exit ;; ia64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; k1om:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m32r*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; m68*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval "$set_cc_for_build" sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`" test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; } ;; mips64el:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-"$LIBC" exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; padre:Linux:*:*) echo sparc-unknown-linux-"$LIBC" exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-"$LIBC" exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;; PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;; *) echo hppa-unknown-linux-"$LIBC" ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-"$LIBC" exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-"$LIBC" exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-"$LIBC" exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-"$LIBC" exit ;; riscv32:Linux:*:* | riscv64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo "$UNAME_MACHINE"-ibm-linux-"$LIBC" exit ;; sh64*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sh*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; tile*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; vax:Linux:*:*) echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) if objdump -f /bin/sh | grep -q elf32-x86-64; then echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32 else echo "$UNAME_MACHINE"-pc-linux-"$LIBC" fi exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION" exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo "$UNAME_MACHINE"-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo "$UNAME_MACHINE"-unknown-stop exit ;; i*86:atheos:*:*) echo "$UNAME_MACHINE"-unknown-atheos exit ;; i*86:syllable:*:*) echo "$UNAME_MACHINE"-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos"$UNAME_RELEASE" exit ;; i*86:*DOS:*:*) echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL" fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}" exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL" else echo "$UNAME_MACHINE"-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos"$UNAME_RELEASE" exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos"$UNAME_RELEASE" exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos"$UNAME_RELEASE" exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos"$UNAME_RELEASE" exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv"$UNAME_RELEASE" exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo "$UNAME_MACHINE"-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux"$UNAME_RELEASE" exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux"$UNAME_RELEASE" exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux"$UNAME_RELEASE" exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux"$UNAME_RELEASE" exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux"$UNAME_RELEASE" exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux"$UNAME_RELEASE" exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux"$UNAME_RELEASE" exit ;; SX-ACE:SUPER-UX:*:*) echo sxace-nec-superux"$UNAME_RELEASE" exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval "$set_cc_for_build" if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE" exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE" exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk"$UNAME_RELEASE" exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk"$UNAME_RELEASE" exit ;; NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk"$UNAME_RELEASE" exit ;; NSV-*:NONSTOP_KERNEL:*:*) echo nsv-tandem-nsk"$UNAME_RELEASE" exit ;; NSX-*:NONSTOP_KERNEL:*:*) echo nsx-tandem-nsk"$UNAME_RELEASE" exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE" exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo "$UNAME_MACHINE"-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos exit ;; i*86:AROS:*:*) echo "$UNAME_MACHINE"-pc-aros exit ;; x86_64:VMkernel:*:*) echo "$UNAME_MACHINE"-unknown-esx exit ;; amd64:Isilon\ OneFS:*:*) echo x86_64-unknown-onefs exit ;; esac echo "$0: unable to guess system type" >&2 case "$UNAME_MACHINE:$UNAME_SYSTEM" in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF exit 1 # Local variables: # eval: (add-hook 'write-file-functions 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: auto/07p/cmds/0000750000175000017500000000000013570013207011167 5ustar skskauto/07p/cmds/@bp0000750000175000017500000000011613570013207011614 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep "BP" d.$1 else grep "BP" fort.9 fi auto/07p/cmds/@ap0000750000175000017500000000071013570013207011613 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cat fort.7 >> b.$1 cat fort.8 >> s.$1 cat fort.9 >> d.$1 echo "Appending fort.7 to b.$1 ... done" echo "Appending fort.8 to s.$1 ... done" echo "Appending fort.9 to d.$1 ... done" elif ( test $# -eq 2 ) then cat b.$1 >> b.$2 cat s.$1 >> s.$2 cat d.$1 >> d.$2 echo "Appending b.$1 to b.$2 ... done" echo "Appending s.$1 to s.$2 ... done" echo "Appending d.$1 to d.$2 ... done" else echo "Illegal command" fi auto/07p/cmds/@@RD0000750000175000017500000000157513570013207011632 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then mv b.$1 fort.27 mv s.$1 fort.28 "$AUTO_DIR"/bin/reduce mv fort.27 b.$1~ mv fort.28 s.$1~ if (test -r fort.37) then mv fort.37 b.$1 fi if (test -r fort.38) then mv fort.38 s.$1 echo " rl: File reduction finished." fi elif( test $# -eq 2 ) then mv b.$1 fort.27 mv s.$1 fort.28 "$AUTO_DIR"/bin/reduce mv fort.27 b.$1~ mv fort.28 s.$1~ if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " rl: File reduction finished." fi else mv fort.7 fort.27 mv fort.8 fort.28 "$AUTO_DIR"/bin/reduce mv fort.27 fort.7~ mv fort.28 fort.8~ if (test -r fort.37) then mv fort.37 fort.7 fi if (test -r fort.38) then mv fort.38 fort.8 echo " rl: File reduction finished." fi fi auto/07p/cmds/@kbp0000750000175000017500000000163113570013207011772 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keepbp rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " keepbp: Rewriting finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keepbp rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " keepbp: Rewriting finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/keepbp rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " keepbp: Rewriting finished." fi fi auto/07p/cmds/@@H0000750000175000017500000000125413570013207011506 0ustar sksk#!/bin/sh rm -f fort.2 CFILE= SFILE= if ( test $# -eq 1 ) then CFILE="$1" if (test -r s.$1) then SFILE="$1" fi elif ( test $# -eq 2 ) then CFILE="$1.$2" if (test -r s.$1) then SFILE="$1" fi else CFILE="$1.$2" SFILE="$3" fi cat h.$CFILE > fort.12 if ( test "$OS" = "Windows_NT" && echo "$AUTO_DIR" | grep " " ) then if command -v cygpath > /dev/null; then # use short file name for AUTO_DIR with spaces AUTO_DIR=$(cygpath -u $(cygpath -s -m "$AUTO_DIR")) fi fi if ( test -n "$SFILE" -a -r c.$CFILE ) then echo s=\'$SFILE\' | cat - c.$CFILE | make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 else make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 < c.$CFILE fi auto/07p/cmds/@zr0000750000175000017500000000027413570013207011653 0ustar sksk#!/bin/sh echo " " echo " Zeroing small numbers in s.$1 ... " make -f "$AUTO_DIR"/util/Makefile zero cp s.$1 fort.28 mv s.$1 s.$1~ ./zero mv fort.38 s.$1 rm fort.28 rm zero echo " Done. " auto/07p/cmds/@eps0000750000175000017500000000006613570013207012006 0ustar sksk#!/bin/sh cat $1 | "$AUTO_DIR"/tek2ps/tek2ps > $1.eps auto/07p/cmds/@dsp0000750000175000017500000000230413570013207012002 0ustar sksk#! /usr/bin/env autox import sys import os from auto.AUTOclui import * from auto import parseBandS # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: code=sys.argv[1] if code[0] == '-': codes=[code[1:3].upper()] n=1 else: codes=None n=0 if len(sys.argv) == n+3: changedb='b.'+sys.argv[n+2] changeds='s.'+sys.argv[n+2] bs=bt(sys.argv[n+1]) else: if len(sys.argv) == n+2: changedb='b.'+sys.argv[n+1] changeds='s.'+sys.argv[n+1] else: changedb='fort.7' changeds='fort.8' origb=changedb+'~' origs=changeds+'~' try: os.remove(origb) except: pass try: os.remove(origs) except: pass os.rename(changedb,origb) os.rename(changeds,origs) if len(sys.argv) == n+2: bs=bt(sys.argv[n+1]+'~') else: bs=parseBandS.parseBandS('fort.7~','fort.8~') bs.deleteLabel(codes) bs.writeFilename(changedb,changeds) print(" @dsp: Rewriting finished.") auto/07p/cmds/@@LB0000750000175000017500000000147113570013207011615 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then mv b.$1 fort.27 mv s.$1 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$1 fi if (test -r fort.38) then mv fort.38 s.$1 echo " Rewriting finished." fi elif( test $# -eq 2 ) then mv b.$1 fort.27 mv s.$1 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " Rewriting finished." fi else mv fort.7 fort.27 mv fort.8 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 fort.7 fi if (test -r fort.38) then mv fort.38 fort.8 echo " Rewriting finished." fi fi auto/07p/cmds/@ls0000750000175000017500000000045113570013207011633 0ustar sksk#! /usr/bin/env autox import sys from auto import parseB # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: diagram=parseB.parseB('b.'+sys.argv[1]) else: diagram=parseB.parseB('fort.7') diagram.writeScreen() auto/07p/cmds/@ksp0000750000175000017500000000231313570013207012011 0ustar sksk#! /usr/bin/env autox import sys import os from auto.AUTOclui import * from auto import parseBandS # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: code=sys.argv[1] if code[0] == '-': codes=[code[1:3].upper()] n=1 else: codes=None n=0 if len(sys.argv) == n+3: changedb='b.'+sys.argv[n+2] changeds='s.'+sys.argv[n+2] bs=bt(sys.argv[n+1]) else: if len(sys.argv) == n+2: changedb='b.'+sys.argv[n+1] changeds='s.'+sys.argv[n+1] else: changedb='fort.7' changeds='fort.8' origb=changedb+'~' origs=changeds+'~' try: os.remove(origb) except: pass try: os.remove(origs) except: pass os.rename(changedb,origb) os.rename(changeds,origs) if len(sys.argv) == n+2: bs=bt(sys.argv[n+1]+'~') else: bs=parseBandS.parseBandS('fort.7~','fort.8~') bs.deleteLabel(codes,keep=1) bs.writeFilename(changedb,changeds) print(" @ksp: Rewriting finished.") auto/07p/cmds/@mb0000750000175000017500000000061513570013207011615 0ustar sksk#! /usr/bin/env autox import sys from auto.AUTOCommands import commandMergeBranches # This is the Python syntax for making a script runnable if __name__ == '__main__': if len(sys.argv) > 2: merge = commandMergeBranches(sys.argv[1],sys.argv[2]) elif len(sys.argv) > 1: merge = commandMergeBranches(sys.argv[1]) else: merge = commandMergeBranches() merge() auto/07p/cmds/@ev0000750000175000017500000000013213570013207011623 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Eigenvalue d.$1 else grep Eigenvalue fort.9 fi auto/07p/cmds/Makefile.in0000640000175000017500000001245713570013207013246 0ustar sksk#===> auto.makefile # # Makefile written by Xianjun WANG in March 1994 # # This Makefile is called from the Graphic User Interface (GUI) # # The following environment variables are controlled in GUI program # at run time: # # PROGRAMNAME : the name of the program # NEW_PROGRAMNAME : the output data name saved by "save as ..." button # NEW_PLOTNAME : the output data name to be plotted by "plot name ..." button # RESTARTNAME : the restart data name to be set to unit 3 (fort.3) # RESTARTDATA : same as RESTARTNAME, but only needed in GUI program # COPYFROM : the name of the output data to be copied from # COPYTO : the name of the output data to be copied to # MOVEFROM : the name of the output data to be moved from # MOVETO : the name of the output data to be moved to # APPENDFROM : the name of the output data to be appended from # APPENDTO : the name of the output data to be appended to # DELETEDATA : the name of the output data to be deleted # # .IGNORE: # FC = @FC@ FFLAGS = @FFLAGS@ OPT = @OPT_FLAG@ SRC = $(PROGRAMNAME).f OBJ = $(PROGRAMNAME).o EXE = $(PROGRAMNAME).exe LIBS = $(AUTO_DIR)/lib/*.o RM = rm -f # start: $(EXE) run # run: @echo " " @echo "Starting $(PROGRAMNAME) ..." @echo " " @cp c.$(PROGRAMNAME) fort.2 @touch fort.3 @./$(EXE) @rm -f fort.3 @echo " " @echo "$(PROGRAMNAME) ... done" # restart: $(EXE) rerun rerun: @echo " " @echo "Restarting $(PROGRAMNAME) ..." @echo " " @cp c.$(PROGRAMNAME) fort.2 @cp s.$(RESTARTNAME) fort.3 @./$(EXE) @rm -f fort.3 @echo " " @echo "$(PROGRAMNAME) ... done" # $(EXE): $(OBJ) $(FC) $(FFLAGS) $(OPT) $(OBJ) -o $@ $(LIBS) # $(OBJ): $(SRC) $(FC) $(FFLAGS) $(OPT) -c $(SRC) -o $@ # save: @echo " " @echo "Starting save ..." @cp fort.7 b.$(PROGRAMNAME) @echo "Saved fort.7 as b.$(PROGRAMNAME)" @cp fort.8 s.$(PROGRAMNAME) @echo "Saved fort.8 as s.$(PROGRAMNAME)" @cp fort.9 d.$(PROGRAMNAME) @echo "Saved fort.9 as d.$(PROGRAMNAME)" @echo "Saving ... done" @echo " " # saveas: @echo " " @echo "Starting save ..." @cp fort.7 b.$(NEW_PROGRAMNAME) @echo "Saved fort.7 as b.$(NEW_PROGRAMNAME)" @cp fort.8 s.$(NEW_PROGRAMNAME) @echo "Saved fort.8 as s.$(NEW_PROGRAMNAME)" @cp fort.9 d.$(NEW_PROGRAMNAME) @echo "Saved fort.9 as d.$(NEW_PROGRAMNAME)" @cp fort.2 c.$(NEW_PROGRAMNAME) @echo "Saved fort.2 as c.$(NEW_PROGRAMNAME)" @echo "Saving ... done" @echo " " # append: @echo " " @echo "Starting append ..." @cat fort.7 >> b.$(PROGRAMNAME) @echo "Appended fort.7 to b.$(PROGRAMNAME)" @cat fort.8 >> s.$(PROGRAMNAME) @echo "Appended fort.8 to s.$(PROGRAMNAME)" @cat fort.9 >> d.$(PROGRAMNAME) @echo "Appended fort.9 to d.$(PROGRAMNAME)" @echo "Appending ... done" @echo " " # appendto: @echo " " @echo "Starting append ..." @cat fort.7 >> b.$(NEW_PROGRAMNAME) @echo "Appended fort.7 to b.$(NEW_PROGRAMNAME)" @cat fort.8 >> s.$(NEW_PROGRAMNAME) @echo "Appended fort.8 to s.$(NEW_PROGRAMNAME)" @cat fort.9 >> d.$(NEW_PROGRAMNAME) @echo "Appended fort.9 to d.$(NEW_PROGRAMNAME)" @echo "Appending ... done" @echo " " # plot_current: @echo " " @echo "Starting plaut ..." @cp b.$(PROGRAMNAME) fort.17 @cp s.$(PROGRAMNAME) fort.18 @echo "Plotting b.$(PROGRAMNAME) and s.$(PROGRAMNAME) ..." @xterm -bg black -fg white -t -e $(AUTO_DIR)/bin/plaut @$(RM) fort.17 @$(RM) fort.18 @echo "Plotting ... done" @echo " " # plot_other: @echo " " @echo "Starting plaut ..." @cp b.$(NEW_PLOTNAME) fort.17 @cp s.$(NEW_PLOTNAME) fort.18 @echo "Plotting b.$(NEW_PLOTNAME) and s.$(NEW_PLOTNAME) ..." @xterm -bg black -fg white -t -e $(AUTO_DIR)/bin/plaut @$(RM) fort.17 @$(RM) fort.18 @echo "Plotting ... done" @echo " " # restartdata: @echo " " @echo "Setting s.$(RESTARTDATA) as restart file ... done" # copydata: @echo " " @cp b.$(COPYFROM) b.$(COPYTO) @echo "Copying b.$(COPYFROM) to b.$(COPYTO) ... done" @cp s.$(COPYFROM) s.$(COPYTO) @echo "Copying s.$(COPYFROM) to s.$(COPYTO) ... done" @cp d.$(COPYFROM) d.$(COPYTO) @echo "Copying d.$(COPYFROM) to d.$(COPYTO) ... done" @cp c.$(COPYFROM) c.$(COPYTO) @echo "Copying c.$(COPYFROM) to c.$(COPYTO) ... done" # appenddata: @echo " " @cat b.$(APPENDFROM) >> b.$(APPENDTO) @echo "Appending b.$(APPENDFROM) to b.$(APPENDTO) ... done" @cat s.$(APPENDFROM) >> s.$(APPENDTO) @echo "Appending s.$(APPENDFROM) to s.$(APPENDTO) ... done" @cat d.$(APPENDFROM) >> d.$(APPENDTO) @echo "Appending d.$(APPENDFROM) to d.$(APPENDTO) ... done" # movedata: @echo " " @mv -f b.$(MOVEFROM) b.$(MOVETO) @echo "Moving b.$(MOVEFROM) to b.$(MOVETO) ... done" @mv -f s.$(MOVEFROM) s.$(MOVETO) @echo "Moving s.$(MOVEFROM) to s.$(MOVETO) ... done" @mv -f d.$(MOVEFROM) d.$(MOVETO) @echo "Moving d.$(MOVEFROM) to d.$(MOVETO) ... done" @mv -f c.$(MOVEFROM) c.$(MOVETO) @echo "Moving c.$(MOVEFROM) to c.$(MOVETO) ... done" # deletedata: @echo " " @$(RM) b.$(DELETEDATA) @echo "Deleting b.$(DELETEDATA) ... done" @$(RM) s.$(DELETEDATA) @echo "Deleting s.$(DELETEDATA) ... done" @$(RM) d.$(DELETEDATA) @echo "Deleting d.$(DELETEDATA) ... done" # clean: @echo " " @echo "Cleaning ..." @$(RM) *.o fort.* *.exe *.trace core @echo "Cleaning ... done" @echo " " # # DO NOT ADD ANYTHING AFTER THIS LINE # auto/07p/cmds/@r3b0000750000175000017500000000005713570013207011705 0ustar sksk#!/bin/sh "$AUTO_DIR"/bin/plaut04 -r3b $1 $2 & auto/07p/cmds/@fc0000750000175000017500000000111213570013207011600 0ustar sksk#!/bin/sh echo " " if test -f $1.f -o ! -f $1.c; then echo "(Required files : $1.f, c.$1, $1.dat)" else echo "(Required files : $1.c, c.$1, $1.dat)" fi echo " " if ( test "$OS" = "Windows_NT" && echo "$AUTO_DIR" | grep " " ) then if command -v cygpath > /dev/null; then # use short file name for AUTO_DIR with spaces AUTO_DIR=$(cygpath -u $(cygpath -s -m "$AUTO_DIR")) fi fi make -f "$AUTO_DIR"/cmds/cmds.make fcon EQUATION_NAME=$1 cp c.$1 fort.2 cp $1.dat fort.3 ./fcon mv fort.8 s.dat rm fcon* fort.2 fort.3 echo " " echo "Conversion done : converted file saved as s.dat" auto/07p/cmds/@df0000750000175000017500000000006613570013207011610 0ustar sksk#!/bin/sh rm -f fort.* echo "Deleting fort.* ... done"auto/07p/cmds/auto.env0000640000175000017500000000026513570013207012655 0ustar sksk# # This file has to be sourced before activating AUTO # setenv AUTO_DIR $HOME/auto/07p set path=($AUTO_DIR/cmds $AUTO_DIR/bin $path) # # DON'T ADD ANYTHING AFTER THIS LINE # auto/07p/cmds/@lb0000750000175000017500000000160113570013207011610 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " Rewriting finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " Rewriting finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/autlab rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " Rewriting finished." fi fi auto/07p/cmds/cmds.make.in0000640000175000017500000000410713570013207013364 0ustar sksk#===> cmds.make # # Makefile written by Xianjun WANG in March 1994 # # This Makefile is used under command mode # # EQUATION_NAME : AUTO-Equation name # .IGNORE: .SUFFIXES: .f90 # CC = @CC@ FC = @FC@ CFLAGS = @CFLAGS@ -I$(AUTO_DIR)/include FFLAGS = @FFLAGS@ OPT = @OPT_FLAG@ SRC = $(EQUATION_NAME).f OBJ = $(EQUATION_NAME).o EXE = $(EQUATION_NAME).exe LIBS = $(AUTO_DIR)/lib/*.o RM = rm -f # @rn run: $(EXE) @echo "Starting $(EQUATION_NAME) ..." @$(AUTO_COMMAND_PREFIX) ./$(EXE) @rm -f fort.2 fort.3 @echo "$(EQUATION_NAME) ... done" # $(EXE): $(OBJ) $(LIBS) @if [ -f $(EQUATION_NAME).f90 -o -f $(EQUATION_NAME).f ]; then \ echo $(FC) $(FFLAGS) $(OPT) $(OBJ) -o $@ '$(LIBS)'; \ $(FC) $(FFLAGS) $(OPT) $(OBJ) -o $@ $(LIBS); \ elif [ -f $(EQUATION_NAME).c ]; then \ echo $(FC) -L$(AUTO_DIR)/lib $(FFLAGS) $(OPT) $(OBJ) -o $@ '$(LIBS)' -lauto_c; \ $(FC) -L$(AUTO_DIR)/lib $(FFLAGS) $(OPT) $(OBJ) -o $@ $(LIBS) -l auto_c; \ else \ echo $(EQUATION_NAME).f does not exist.; \ fi # .f.o: $(FC) $(FFLAGS) $(OPT) -c $< -o $@ # .f90.o: $(FC) $(FFLAGS) $(OPT) -c $< -o $@ # .c.o: @if [ -f $(EQUATION_NAME).f90 ]; then \ echo $(FC) $(FFLAGS) $(OPT) -c $(EQUATION_NAME).f90 -o $@; \ $(FC) $(FFLAGS) $(OPT) -c $(EQUATION_NAME).f90 -o $@; \ elif [ -f $(EQUATION_NAME).f ]; then \ echo $(FC) $(FFLAGS) $(OPT) -c $(EQUATION_NAME).f -o $@; \ $(FC) $(FFLAGS) $(OPT) -c $(EQUATION_NAME).f -o $@; \ else \ echo $(CC) $(CFLAGS) $(OPT) -c $< -o $@; \ $(CC) $(CFLAGS) $(OPT) -c $< -o $@; \ fi # FLAGS=-I$(AUTO_DIR)/include $(OPT) FCON=$(AUTO_DIR)/src/fcon.f fcon: $(EQUATION_NAME).o $(AUTO_DIR)/src/fcon.f $(AUTO_DIR)/include/fcon.h @if [ -f $(EQUATION_NAME).f90 ]; then \ $(FC) $(FLAGS) $(FFLAGS) $(EQUATION_NAME).o $(FCON) -o $@; \ elif [ -f $(EQUATION_NAME).f ]; then \ $(FC) $(FLAGS) $(FFLAGS) $(EQUATION_NAME).o $(FCON) -o $@; \ elif [ -f $(EQUATION_NAME).c ]; then \ $(FC) -L$(AUTO_DIR)/lib $(FFLAGS) $(OPT) $(EQUATION_NAME).o $(FCON) -o $@ -lauto_c; \ fi # # DO NOT ADD ANYTHING AFTER THIS LINE # auto/07p/cmds/@e80000750000175000017500000000002413570013207011525 0ustar sksk#!/bin/sh vi fort.8 auto/07p/cmds/@ll0000750000175000017500000000070313570013207011624 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then file=s.$1 else file=fort.8 fi if autox - 2> /dev/null < 4: branch = int(sys.argv[4]) if len(sys.argv) > 5: point = int(sys.argv[5]) sub = commandSubtractBranches(sys.argv[1],sys.argv[2],sys.argv[3], branch=branch,point=point) sub() auto/07p/cmds/@sr0000750000175000017500000000003213570013207011634 0ustar sksk#!/bin/sh cp c.$1 c.$1.$2 auto/07p/cmds/@sv0000750000175000017500000000026513570013207011650 0ustar sksk#!/bin/sh cat fort.7 > b.$1 cat fort.8 > s.$1 cat fort.9 > d.$1 echo "Saving fort.7 as b.$1 ... done" echo "Saving fort.8 as s.$1 ... done" echo "Saving fort.9 as d.$1 ... done" auto/07p/cmds/@@R0000750000175000017500000000122513570013207011516 0ustar sksk#!/bin/sh rm -f fort.2 CFILE= SFILE= if ( test $# -eq 1 ) then CFILE="$1" if (test -r s.$1) then SFILE="$1" fi elif ( test $# -eq 2 ) then CFILE="$1.$2" if (test -r s.$1) then SFILE="$1" fi else CFILE="$1.$2" SFILE="$3" fi if ( test "$OS" = "Windows_NT" && echo "$AUTO_DIR" | grep " " ) then if command -v cygpath > /dev/null; then # use short file name for AUTO_DIR with spaces AUTO_DIR=$(cygpath -u $(cygpath -s -m "$AUTO_DIR")) fi fi if ( test -n "$SFILE" -a -r c.$CFILE ) then echo s=\'$SFILE\' | cat - c.$CFILE | make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 else make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 < c.$CFILE fi auto/07p/cmds/@rc0000750000175000017500000000046413570013207011625 0ustar sksk#!/bin/sh echo " File recovery ... done." if ( test $# -eq 1 ) then mv b.$1 b.tmp mv s.$1 s.tmp mv b.$1~ b.$1 mv s.$1~ s.$1 mv b.tmp b.$1~ mv s.tmp s.$1~ else mv fort.7 tmp.7 mv fort.8 tmp.8 mv fort.7~ fort.7 mv fort.8~ fort.8 mv tmp.7 fort.7~ mv tmp.8 fort.8~ fi echo " File recovery ... done." auto/07p/cmds/@it0000750000175000017500000000013213570013207011625 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Iterations d.$1 else grep Iterations fort.9 fi auto/07p/cmds/@dl0000750000175000017500000000020713570013207011613 0ustar sksk#!/bin/sh rm -r b.$1 rm -r s.$1 rm -r d.$1 echo "Deleting b.$1 ... done" echo "Deleting s.$1 ... done" echo "Deleting d.$1 ... done" auto/07p/cmds/@mn0000750000175000017500000000074313570013207011633 0ustar sksk#!/bin/sh VIEWERS="xpdf acroread evince gv" MANUAL="$AUTO_DIR/doc/auto.pdf" GOT_VIEWER="false" for VIEWER in $VIEWERS; do saveIFS=$IFS IFS=":" for d in $PATH; do if test -f "$d/$VIEWER" && test -x "$d/$VIEWER"; then $VIEWER $MANUAL & GOT_VIEWER="true" break fi done IFS=$saveIFS if test "$GOT_VIEWER" = "true"; then break fi done if test "$GOT_VIEWER" = "false"; then echo "No suitable PDF viewer found (tried: $VIEWERS)" fi auto/07p/cmds/@ps0000750000175000017500000000007013570013207011634 0ustar sksk#!/bin/sh cat $1 | "$AUTO_DIR"/tek2ps/tek2ps -i > $1.ps auto/07p/cmds/@p0000750000175000017500000000067613570013207011465 0ustar sksk#!/bin/sh . compat.sh if ( test $# -eq 1 ) then b1=b.$1 s1=s.$1 echo "Plotting b.$1 and s.$1 ..." else b1=fort.7 s1=fort.8 echo "Plotting fort.7 and fort.8 ..." fi if test $COMPAT = compat; then cp $b1 fort.17 cp $s1 fort.18 b1= s1= fi if [ -x "$AUTO_DIR"/bin/xterm-tek ]; then "$AUTO_DIR"/bin/xterm-tek -bg black -fg white -t -e "$AUTO_DIR"/bin/plaut $b1 $s1 & else xterm -bg black -fg white -t -e "$AUTO_DIR"/bin/plaut $b1 $s1 & fi auto/07p/cmds/@pl0000750000175000017500000000005213570013207011625 0ustar sksk#!/bin/sh "$AUTO_DIR"/bin/plaut04 $1 $2 & auto/07p/cmds/@fl0000750000175000017500000000011613570013207011614 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Mult d.$1 else grep Mult fort.9 fi auto/07p/cmds/@klb0000750000175000017500000000232413570013207011766 0ustar sksk#! /usr/bin/env autox import sys import os from auto.AUTOclui import * from auto import parseBandS # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: code=sys.argv[1] if code[0] == '-': codes=[code[1:3].upper()] n=1 else: codes=None n=0 if len(sys.argv) == n+3: changedb='b.'+sys.argv[n+2] changeds='s.'+sys.argv[n+2] bs=bt(sys.argv[n+1]) else: if len(sys.argv) == n+2: changedb='b.'+sys.argv[n+1] changeds='s.'+sys.argv[n+1] else: changedb='fort.7' changeds='fort.8' origb=changedb+'~' origs=changeds+'~' try: os.remove(origb) except: pass try: os.remove(origs) except: pass os.rename(changedb,origb) os.rename(changeds,origs) if len(sys.argv) == n+2: bs=bt(sys.argv[n+1]+'~') else: bs=parseBandS.parseBandS('fort.7~','fort.8~') bs.deleteLabel(codes,keep=1,keepTY=1) bs.writeFilename(changedb,changeds) print(" @klb: Rewriting finished.") auto/07p/cmds/@sp0000750000175000017500000000011413570013207011633 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep SPB d.$1 else grep SPB fort.9 fi auto/07p/cmds/@gz0000750000175000017500000000007213570013207011634 0ustar sksk#!/bin/sh gzip --best b.* gzip --best s.* gzip --best d.* auto/07p/cmds/@auto0000750000175000017500000000010113570013207012155 0ustar sksk#!/bin/sh cp "$AUTO_DIR"/gui/auto.makefile ./Makefile ; auto97 & auto/07p/cmds/@j80000750000175000017500000000002513570013207011533 0ustar sksk#!/bin/sh jot fort.8 auto/07p/cmds/@pp0000750000175000017500000000007613570013207011637 0ustar sksk#!/bin/sh exec "$AUTO_DIR/python/auto/graphics/pyplaut.py" $1 auto/07p/cmds/@rd0000750000175000017500000000163413570013207011626 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/reduce rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " rl: File reduction finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/reduce rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " rl: File reduction finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/reduce rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " rl: File reduction finished." fi fi auto/07p/cmds/@st0000750000175000017500000000012213570013207011636 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Stable d.$1 else grep Stable fort.9 fi auto/07p/cmds/@r0000750000175000017500000000151013570013207011453 0ustar sksk#!/bin/sh rm -f fort.2 CFILE= SFILE= if ( test $# -eq 1 ) then CFILE="$1" if (test -r s.$1) then SFILE="$1" fi elif ( test $# -eq 2 ) then if ( test -r c.$1 -a -r s.$2 ) then CFILE="$1" SFILE="$2" else CFILE="$1.$2" if (test -r s.$1) then SFILE="$1" fi fi elif ( test -r c.$3 -a -r s.$2 ) then CFILE="$3" SFILE="$2" else CFILE="$1.$2" SFILE="$3" fi if ( test "$OS" = "Windows_NT" && echo "$AUTO_DIR" | grep " " ) then if command -v cygpath > /dev/null; then # use short file name for AUTO_DIR with spaces AUTO_DIR=$(cygpath -u $(cygpath -s -m "$AUTO_DIR")) fi fi if ( test -n "$SFILE" -a -r c.$CFILE ) then echo s=\'$SFILE\' | cat - c.$CFILE | make -f "$AUTO_DIR/cmds/cmds.make" EQUATION_NAME=$1 else make -f "$AUTO_DIR/cmds/cmds.make" EQUATION_NAME=$1 < c.$CFILE fi auto/07p/cmds/@lp0000750000175000017500000000011613570013207011626 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Fold d.$1 else grep Fold fort.9 fi auto/07p/cmds/@a0000750000175000017500000000010113570013207011425 0ustar sksk#!/bin/sh cp "$AUTO_DIR"/gui/auto.makefile ./Makefile ; AUTO97 & auto/07p/cmds/@kuz0000750000175000017500000000163113570013207012027 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keepuz rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " keepuz: Rewriting finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keepuz rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " keepuz: Rewriting finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/keepuz rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " keepuz: Rewriting finished." fi fi auto/07p/cmds/@lbf0000750000175000017500000000045013570013207011757 0ustar sksk#! /usr/bin/env autox import sys from auto import parseB # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: diagram=parseB.parseB('b.'+sys.argv[1]) else: diagram=parseB.parseB('fort.7') diagram.writeShort() auto/07p/cmds/@ho0000750000175000017500000000011613570013207011621 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Hopf d.$1 else grep Hopf fort.9 fi auto/07p/cmds/compat.sh.in0000640000175000017500000000002013570013207013404 0ustar skskCOMPAT=@COMPAT@ auto/07p/cmds/@hb0000750000175000017500000000011613570013207011604 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep Hopf d.$1 else grep Hopf fort.9 fi auto/07p/cmds/@j70000750000175000017500000000002513570013207011532 0ustar sksk#!/bin/sh jot fort.7 auto/07p/cmds/@e90000750000175000017500000000002413570013207011526 0ustar sksk#!/bin/sh vi fort.9 auto/07p/cmds/@mv0000750000175000017500000000142513570013207011641 0ustar sksk#!/bin/sh error="true" name1="$1" name2="$2" dir1="" dir2="" if test -d "$1"; then dir1="$1/" name1="$2" if test $# -eq 4; then dir2="$3/" name2="$4" elif test $# -eq 3; then name2="$3" fi elif test -d "$2"; then dir2="$2/" if test $# -eq 3; then file2="$3" else file2="$1" fi fi for prefix in b s d c; do file1="$dir1$prefix.$name1" file2="$dir2$prefix.$name2" if test $prefix == "c"; then if cp -f "$file1" "$file2" 2> /dev/null; then echo "Copying $file1 to $file2 ... done" unset error fi elif mv -f "$file1" "$file2" 2> /dev/null; then echo "Renaming $file1 as $file2 ... done" unset error fi done if test -n "$error"; then echo "Renaming: no files found for $dir1[bsdc].$name1 and $dir2[bsdc].$name2" fi auto/07p/cmds/@tr0000750000175000017500000000040213570013207011636 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp s.$1 fort.28 cp b.$1 b.$1~ mv s.$1 s.$1~ "$AUTO_DIR"/bin/triple mv fort.38 s.$1 rm fort.28 else cp fort.8 fort.28 cp fort.7 fort.7~ mv fort.8 fort.8~ "$AUTO_DIR"/bin/triple mv fort.38 fort.8 rm fort.28 fi auto/07p/cmds/@dlp0000750000175000017500000000164513570013207012002 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/deletelp rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " deletelp: Rewriting finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/deletelp rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " deletelp: Rewriting finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/deletelp rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " deletelp: Rewriting finished." fi fi auto/07p/cmds/@rn0000750000175000017500000000025613570013207011637 0ustar sksk#!/bin/sh for i in r.*; do mv $i c.${i#r.} done for i in s.*; do mv $i h.${i#s.} done for i in p.*; do mv $i b.${i#p.} done for i in q.*; do mv $i s.${i#q.} done auto/07p/cmds/@e70000750000175000017500000000002413570013207011524 0ustar sksk#!/bin/sh vi fort.7 auto/07p/cmds/@cnvc0000750000175000017500000000145013570013207012146 0ustar sksk#! /usr/bin/env autox import sys import os from auto.parseC import parseC from auto.parseH import parseH # This is the Python syntax for making a script runnable if __name__ == '__main__': input = sys.argv[1] output = sys.argv[1] if len(sys.argv) > 2: output = sys.argv[2] c=None try: h=parseH('h.'+input) c=parseC() except IOError: h=None try: c=parseC('c.'+input) except IOError: pass if h is not None: for k,v in h.items(): c[k] = v elif c is None: sys.stderr.write("Neither the c. file nor the h. file exists. Aborting.\n") sys.exit(1) c.writeFilename('c.'+output,new=True) if len(sys.argv) <= 2 and os.path.exists('h.'+sys.argv[1]): os.remove('h.'+sys.argv[1]) auto/07p/cmds/@dm0000750000175000017500000000050113570013207011611 0ustar sksk#!/bin/sh # copy one level deep without hidden files for i in "$AUTO_DIR"/demos/$1/* do if test -d "$i"; then d=`expr "$i" : "$AUTO_DIR/demos/$1/\(.*\)"` if test -f "$d"; then rm "$d$" fi mkdir -p $d > /dev/null 2>&1 cp "$i"/* $d else cp "$i" . fi done echo "Copying demo $1 ... done" auto/07p/cmds/@no0000750000175000017500000000011613570013207011627 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then grep NOTE d.$1 else grep NOTE fort.9 fi auto/07p/cmds/@uz0000750000175000017500000000005313570013207011651 0ustar sksk#!/bin/sh unzip b.* unzip s.* unzip d.* auto/07p/cmds/@cp0000750000175000017500000000120213570013207011612 0ustar sksk#!/bin/sh error="true" name1="$1" name2="$2" dir1="" dir2="" if test -d "$1"; then dir1="$1/" name1="$2" if test $# -eq 4; then dir2="$3/" name2="$4" elif test $# -eq 3; then name2="$3" fi elif test -d "$2"; then dir2="$2/" if test $# -eq 3; then file2="$3" else file2="$1" fi fi for prefix in b s d c; do file1="$dir1$prefix.$name1" file2="$dir2$prefix.$name2" if cp "$file1" "$file2" 2> /dev/null; then echo "Copying $file1 to $file2 ... done" unset error fi done if test -n "$error"; then echo "Copying: no files found for $dir1[bsdc].$name1 and $dir2[bsdc].$name2" fi auto/07p/cmds/@dlb0000750000175000017500000000231513570013207011757 0ustar sksk#! /usr/bin/env autox import sys import os from auto.AUTOclui import * from auto import parseBandS # This is the Python syntax for making a script runable if __name__ == '__main__': if len(sys.argv) > 1: code=sys.argv[1] if code[0] == '-': codes=[code[1:3].upper()] n=1 else: codes=None n=0 if len(sys.argv) == n+3: changedb='b.'+sys.argv[n+2] changeds='s.'+sys.argv[n+2] bs=bt(sys.argv[n+1]) else: if len(sys.argv) == n+2: changedb='b.'+sys.argv[n+1] changeds='s.'+sys.argv[n+1] else: changedb='fort.7' changeds='fort.8' origb=changedb+'~' origs=changeds+'~' try: os.remove(origb) except: pass try: os.remove(origs) except: pass os.rename(changedb,origb) os.rename(changeds,origs) if len(sys.argv) == n+2: bs=bt(sys.argv[n+1]+'~') else: bs=parseBandS.parseBandS('fort.7~','fort.8~') bs.deleteLabel(codes,keepTY=1) bs.writeFilename(changedb,changeds) print(" @dlb: Rewriting finished.") auto/07p/cmds/@cl0000750000175000017500000000013313570013207011610 0ustar sksk#!/bin/sh rm -f fort.* *.o *.exe *.*~ core echo "Deleting fort.* *.o *.exe *.*~ ... done" auto/07p/cmds/@db0000750000175000017500000000040113570013207011575 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp s.$1 fort.28 cp b.$1 b.$1~ mv s.$1 s.$1~ "$AUTO_DIR"/bin/double mv fort.38 s.$1 rm fort.28 else cp fort.8 fort.28 cp fort.7 fort.7~ mv fort.8 fort.8~ "$AUTO_DIR"/bin/double mv fort.38 fort.8 rm fort.28 fi auto/07p/cmds/@h0000750000175000017500000000153713570013207011452 0ustar sksk#!/bin/sh rm -f fort.2 CFILE= SFILE= if ( test $# -eq 1 ) then CFILE="$1" if (test -r s.$1) then SFILE="$1" fi elif ( test $# -eq 2 ) then if ( test -r c.$1 -a -r s.$2 ) then CFILE="$1" SFILE="$2" else CFILE="$1.$2" if (test -r s.$1) then SFILE="$1" fi fi elif ( test -r c.$3 -a -r s.$2 ) then CFILE="$3" SFILE="$2" else CFILE="$1.$2" SFILE="$3" fi cat h.$CFILE > fort.12 if ( test "$OS" = "Windows_NT" && echo "$AUTO_DIR" | grep " " ) then if command -v cygpath > /dev/null; then # use short file name for AUTO_DIR with spaces AUTO_DIR=$(cygpath -u $(cygpath -s -m "$AUTO_DIR")) fi fi if ( test -n "$SFILE" -a -r c.$CFILE ) then echo s=\'$SFILE\' | cat - c.$CFILE | make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 else make -f "$AUTO_DIR"/cmds/cmds.make EQUATION_NAME=$1 < c.$CFILE fi auto/07p/cmds/@klp0000750000175000017500000000163113570013207012004 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keeplp rm fort.27 rm fort.28 if (test -r fort.37) then cp b.$1 b.$1~ mv fort.37 b.$1 fi if (test -r fort.38) then cp s.$1 s.$1~ mv fort.38 s.$1 echo " keeplp: Rewriting finished." fi elif( test $# -eq 2 ) then cp b.$1 fort.27 cp s.$1 fort.28 "$AUTO_DIR"/bin/keeplp rm fort.27 rm fort.28 if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 echo " keeplp: Rewriting finished." fi else cp fort.7 fort.27 cp fort.8 fort.28 "$AUTO_DIR"/bin/keeplp rm fort.27 rm fort.28 if (test -r fort.37) then cp fort.7 fort.7~ mv fort.37 fort.7 fi if (test -r fort.38) then cp fort.8 fort.8~ mv fort.38 fort.8 echo " keeplp: Rewriting finished." fi fi auto/07p/cmds/@rl0000750000175000017500000000200013570013207011622 0ustar sksk#!/bin/sh if ( test $# -eq 1 ) then inb=b.$1 ins=s.$1 outb=b.$1~~ outs=s.$1~~ elif( test $# -eq 2 ) then inb=b.$1 ins=s.$1 outb=b.$2 outs=s.$2 else inb=fort.7 ins=fort.8 outb=fort.37 outs=fort.38 fi if "$AUTO_DIR"/python/auto/relabel.py $inb $ins $outb $outs 2> /dev/null; then :; else #Fortran relabelling . compat.sh if test $COMPAT = compat; then cp $inb fort.27 cp $ins fort.28 outb=fort.37 outs=fort.38 "$AUTO_DIR"/bin/relabel rm fort.27 fort.28 if test $# -eq 2; then if (test -r fort.37) then mv fort.37 b.$2 fi if (test -r fort.38) then mv fort.38 s.$2 outs=s.$2 fi fi else "$AUTO_DIR"/bin/relabel $inb $ins $outb $outs fi fi if( test $# -eq 2 ) then if (test -r $outs) then echo " rl: Relabeling finished." fi else if (test -r $outb) then mv $inb $inb~ mv $outb $inb fi if (test -r $outs) then mv $ins $ins~ mv $outs $ins echo " rl: Relabeling finished." fi fi auto/07p/cmds/auto.env.sh0000750000175000017500000000061513570013207013267 0ustar sksk# # This file has to be sourced before activating AUTO if you are using # a 'sh' compatible shell, such as sh, bash, ksh, or ash. # AUTO_DIR=$HOME/auto/07p PATH=$AUTO_DIR/cmds:$AUTO_DIR/bin:$PATH # the following is an example (to be uncommented) for Windows+MSYS: #PATH="/c/Python27:/bin:/c/Program Files/gfortran/bin:$PATH" export AUTO_DIR export PATH # # DON'T ADD ANYTHING AFTER THIS LINE # auto/07p/CHANGELOG0000640000175000017500000014147613570013207011471 0ustar sksk0.9.2: * Main AUTO - Print eigenvalues in Hopf detection function if following a BP curve or an Rn/BT has been detected. - Don't write MAX/MIN for IPS==-2, that is, IVPs (request by Sebius). - Replace tabs with spaces in continuation lines (bug reported by Sebius). - Fix warnings reported by newer GCCs. - Update included BLAS from www.netlib.org/blas (LAST UPDATE: Tuesday Apr 19th 2011) - Use 3-digit exponents for all 19.10 formats (in solution files), to avoid numbers such as 1.1234567891-100. - Fix constant file output for strings with backslashes, using "'"+str(s)+"'" instead of repr(s) (report from Sebius Doedel). - Thanks to Felix Becker : fix error detected by -fcheck=bounds in ae.f90 and bvp.f90. - Use TRIM(ATYPE)//'0' instead of ATYPE//'0' to fix a problem detecting spurious Torus bifurcations. Thanks to Medhi Paak for reporting this bug. - Change sorting algorithm for Floquet multipliers from selection to insertion sort to keep complex conjugates together correctly. Solves sorting issue reported by Medhi Paak and Sebius Doedel. - Only compute L2-NORM (or similar) for WRTBV9 if IID>=2, else it is not used. - Better MPI parallelization: * The code in bvp.f90 has been parallelized so that the solution vectors are nearly always distributed and only concatenated when Newton iterations converge (for mesh adaptation, solution measures, and I/O). This speeds up the code significantly for higher processor counts. * Some work space arrays used in the linear solver now have the minimum size required (of length NTST/NP+log2(NTST) instead of length NTST where NP is the number of processors). This significantly reduces memory consumption. * HomCont works with MPI. * BPCont works with MPI. * MPI is properly ignored for algebraic problems so it can be easily used in scripts and automatic testing, by setting e.g. AUTO_COMMAND_PREFIX="mpirun -n 4" * AUTO now calls MPI_Init_thread instead of MPI_Init for hybrid MPI/OpenMP configurations - Better OpenMP parallelization: * Call STUPBV (time derivatives) in parallel for OpenMP. * Parallellize part of fort.8 I/O (FP to string conversion) using OpenMP. - Store UOLD vector into U past NDIM. This allows equation files to access UOLD in FUNC. - Meshing improvements: * Let INTERP work on two solutions in one loop, to save on recomputing weights. * Simplify INTWTS interface/implementation to remove the need for the array X and with less potential loss of precision. * Store "E" (deqf/dt) from EQDF into DEQF and use it directly in NEWMSH This avoids an addition followed by a subtraction which resulted in rounding errors. - Move to git repository, add .gitignore file (with Andreas Amann) - Adapt configure script, makefiles and shell scripts to newer Mac OS and Windows (using MSYS2). * Python: - Python 3 support * Adapt for Python3 compatibility (Andreas Amann) All tests now run for Python3 and Python2 * Python3: only use binary mode for solutions, not constants. Solution files use binary mode for speed since they only contain numbers and no strings, unlike constants files, but a text mode workaround is there now just in case the stdin pipe has no binary buffer. - Python packaging support * Add setup.py/setup.cfg and move Python code to auto subdirectory (Rike-Benjamin Schuppner) * Add __init__.py and use relative imports (Rike-Benjamin Schuppner) * Add __main__.py to simplify testing, and allow "python /path/to/auto" * Python: Change relative to absolute imports and adjust commands. Absolute imports work more nicely with existing scripts, and are recommended by PEP8 anyway. - IPython support * Support IPython >= 0.11, thanks to Andreas Amann . * included support for IPython >1.x * Prompts need to be defined differently with IPython >= 5. - Use numpy.ndim instead of the deprecated numpy.rank. - Remove support for long (~10 years) obsolete Numeric and numarray. - Avoid identifying np.nonzero and np.flatnonzero (Andreas Amann) Monkey patching np.nonzero to be np.flatnonzero had bad effects on matplotlib, which depends on the correct np.nonzero to be available. - Avoid plain python in shebangs. "python" may not exist, but "python3" may exist. The auto and autox shell scripts now take care of this. * PyPLAUT - For Python 3: fix handling of dashes and parser for autorc files. - If Tk cannot be initialized, hide the plot if possible. This allows to run the automated test without DISPLAY set. - Use NavigationToolbar2Tk for matplotlib 2.2+ - Use get/set_facecolor if available instead of deprecated functions. - Fix problem when updating small plotting window * PLAUT - Fix compilation with newer versions of gfortran: ANGLE needs 4 elements, otherwise it cannot call ARROWL with it. * PLAUT04 - Eliminate use of QT3_SUPPORT methods for pulldown menus. Eliminate QT3_SUPPORT define. - Qt4 compat for file dialog windows. - Replace insertItem with addItem for lists for Qt4 compatibility. - Use toLocal8Bit() instead of implicit QString->const char * conversions. - Call constructors for QComboBox, QSpinBox, QDialog, etc. in Qt4 style. - Create a seperate method for every pulldown menu entry for better QT4 compatibility. - Workaround for the menu bar in newer Mac OS X versions (Mavericks+) - Fix set but not used warnings for PLAUT04. * Testing - Setup automated testing (Continuous Integration) using Github Actions (on Ubuntu) * Compile AUTO and manual * Test with both python2 and python3. * Enabled test with MPI enabled * Properly exit with error code in test scripts. * Upload test artifacts (logfile and verification html). - Adjust r3b demo test reference. - The eighth run of the fhh demo converges (since 703607e for NEWMSH) - Fix two more results for ab demo in test reference. * Manual - Fix documentation illustrating Python data access for lrz demo. Closes #3. - Latex compile fix (Andreas Amann) the unknown m placement specifier for figures was ignored by older latex versions but is now an error. * Demos - Make tfc demo more robust. - Tweak EPS* in fhh demo to properly detect UZ in eighth run - Adjust EPSS in fhh demo to still detect the test point. - Increase NTST in ab demo to make it more robust in the last run. - Increase NTST in c.ab.3 to 70 so it does not MX unreliably. - c2c demo: increase NTST a little to make it work correctly with GCC8 - Increase NTST in c.fhn.5 to match c.fhn.6 (elimates spurious UZ) 0.9.1: * Main AUTO: - Fix makefile dependency problem. - Create *F variants for FNBL, BCBL, and ICBL to allow toolboxes to follow folds in general BVPs by supplying their ODEs, boundary, and integral conditions. - Make HomCont use those new interfaces in toolboxbv.f90 to be able to follow LPs for homoclinic orbits in n+1 parameters. * Python: - Fix problem about AUTO complaining about a missing solution file when using old-style constant files. - Write out complete fort.2 file in case of problems to be able to reproduce a run quickly. 0.9.0: * Main AUTO: - Allow to use the AUTO constant "U" for constant-in-time solutions for BVPs. - Do not try to compute first Lyapunov coefficient if a Bogdanov-Takens bifurcation function is already detected, which gave erroneous results. (Bug reported by Christoph Kirst ) - Turn off detection of PD/TR/Rn bifurcations for 2 dimensional systems. They should not occur but sometimes the Floquet multipliers are inaccurate. - Fix issue with directly reading python/test_data/c.ab from Fortran, ignoring spaces directly after { or [. - Reintroduce the AUTO_COMMAND_PREFIX environment variable from AUTO2000 for running with MPI. - Reading AUTO constants from standard input instead of fort.2: - Avoid BACKSPACE for reading the old-style ICP list read NICP manually. - Completely eliminate BACKSPACE for fort.2 reads by manually reading the first non-blank characters on each line and checking for a number: in which case it is an old-style constants file. - If fort.2 does not exist, then read from standard input. - A special value for the AUTO constant 's', namely s='/' is used by the Python interface to also pass solution files using standard input, following the line containing s='/'. - BP continuation (BPCONT) improvements: - Use explicit derivatives where possible for algebraic equations, limit cycles, and BVPs. - Merge common code for boundary conditions for BVPs. - Cleanups, so the indices are consistent between fixed/variable period continuations. - Match coordinates in start/restart systems for BPCONT for LCs/BVPs to simplify code. - Shuffle internal parameters so that unused internal parameters can be dropped after they are no longer necessary. - Pass UPOLD from solvebv to FUNI via extra coordinates in UOLD past NDIM. This eliminates an implementation problem in BPCONT where it is needed to reevaluate F(UOLD) but it did so for the new parameter values. - Avoid unnecessary repeat calculations of UPOLD. - Use UPOLD directly for BP continuation for BVPs. - Add more comments to BP cont functions and make RLOLD accessible to toolbox functions. - Automatically add -m32 to g++ for 64bit Macs with 32bit Coin3D, avoiding the need to specify this manually. - Make extending solutions (in STPNT) possible from loci of bifurcations, including certain old solution files. - Force recalculation of the direction vector if dimensions have changed. - Avoid memory allocations where possible in extended systems with expanded Jacobian matrices. - Copy UOLD in STUPV to avoid problems. - Check for infinite Floquet multipliers to avoid floating-point exceptions. - Centralize ITPST*10+ITP calculations out of toolboxes. - Replace ITP in toolbox test functions by ASCII ATYPE for clarity. - Extract type/number from restarts like IRS='LPD1' manually to deal with three-letter types. - Internally denote special points without stability changes by for example 'HB0' witha trailing '0'. Allows for special handling in LCSP**, where these are used in the first detection but ignored after. * PyPLAUT: - Fixes and workarounds to get PyPLAUT to work with Matplotlib 1.1: - To get 2D limits for Matplotlib 1.1, use get_xlim/get_ylim explicitly from the 2D Axes class. - Fix 3D graphics problem with Matplotlib 1.1. - Add comments to default autorc file. - Reorder autorc commands to move often-used settings at the top. - Do not plot unplottable 3D curves (when at least one coordinate is invalid for a particular branch). - Deal with d0/d1/... autorc options correctly if they use True/False instead of numbers. - Add a strategic garbage collect call to avoid memory issues. - Fix memory leak when using the labelnames setting. - Use azimuth/elevation settings if one of them is commented out. * PLAUT04: - Change order of settings in plaut04.rc in order of importance. - Fix plotting s files without matching b files. - Fix crash when plotting bifurcation curves if no solution is present. - Check for PT 9999 for wraparound in bifurcation diagrams. - Fix "@r3b" or plaut04 -r3b without other arguments. * Python: - Parse blank lines with spaces in constants files correctly (reported by Jorge Galan-Vioque). - Make working with branches a little easier: - Negative indices now work on a branch ([-1] for the last point). - save(list of branches, 'xxx') now works. - 'TY' for 'TY name' now works on points in branches. - Allow s.PAR to be used directly as an argument for the PAR= AUTO constant. (Based on a suggestion by Jan-Hendrik Schleimer .) - Avoid read() on already read & parsed solutions. - Parse more Fortran-style floating point constants, in the form of 2-3 (which means 2e-3). - Fixes for Python 3. - The run command now uses input redirection instead of fort.2/fort.3 to pass constants and solutions to AUTO. * Shell commands: - @H, @R, @h, and @r now use input redirection instead of fort.2 to supply AUTO with constants. The @ commands automatically add s='xxx' to avoid copying to fort.3. Together with sv='xxx' this allows running multiple AUTO instances within the same folder. * Demos: - Updated enz, log, hen, lrz, dd2, pp2, ffn, and exp demos. * Manual: - Document role of PAR(12). - Specify location of Mac OS X development tools. - Updated demos. 0.8.0: * Main AUTO: - Support for codimension-two bifurcations: - Add support for detecting Generalized-Hopf/Bautin (GH), Bogdanov-Takens (BT), Zero-Hopf (ZH), and Cusp (CP) bifurcations in algebraic systems along Hopf (HB) and fold (LP) curves. - Add support for detection of 1:1 (R1), 1:2 (R2), 1:3 (R3), and 1:4 (R4) resonances for limit cycles and maps along fold (LP), period-doubling (PD) and torus (TR) curves. - Add support for detection of fold-flip (LPD), fold-torus (LTR), and flip-torus (PTR), bifurcations for maps along LP, PD, and TR curves. - Improved support for maps: - Display PD or TR instead of HB for period-doubling and Neimark-Sacker bifurcations. - Implement branch switching at period-doubling bifurcations for maps. The discrete period is taken from PAR(11). Maps are then iterated n times and the derivatives are determined from the basic derivatives using the chain rule. - PD continuation for maps now uses a smaller system (2n+1 dim), similar to folds. - Improved support for waves (IPS=11,12): - Fix continuation of Hopf bifurcations. - Period doublings with ISW=-1 are now possible.. - Permit continuation of PD/LP/TR/BP, where applicable. - Don't change IPS anymore for waves but check explicitly for 11 or 12 instead. - AUTO constants: - Use JAC=-1 if you only specify the function derivatives (DFDU) without parameter derivatives (DFDP) in equation files. - Let IID=0 produce no diagnostic output. - Introduce new AUTO constant IIS to optionally add no direction information to solution files to save space: IIS=0 no directions in s files. IIS=1 only directions for LP(BVP),BP,PD,TR IIS=2 for all points except RG IIS=3 everywhere - New: LAB=n starts with label n - New: IBR=n starts with branch n - New: TY='HB4' redefines type of restart label to be a Hopf bifurcation with period in PAR(4). - New: UZSTOP, like UZR but stops, to avoid minus signs in the UZR lists. - Change default values of NMX and NPR to 0. - Changed the Hopf/Neimark-Sacker bifurcation following algorithm to use a reduced standard augmented system. (2n+2 instead of 3n+2, see Kuznetsov, 3rd ed., (10.80)). This makes it possible to detect BT bifurcations on Hopf curves; the algorithm is forced to stop there. The Hopf phase condition was replaced by a symmetric expression that approximates the previously used phase condition. - Added support for computing the first Lyapunov coefficient for Hopf bifurcations to detect GH bifs and print supercritical/subcritical information in diagnostics file. - Avoid calculating derivatives numerically when possible for HB, LP, PD, TR, and HomCont continuations to improve accuracy and performance. Note (esp. for HomCont) that equation files now need parameter derivatives with JAC=1; use JAC=-1 if only variable derivatives are present. Existing demos were adjusted. - Reorganized test function zero detection: - Merged individual bifurcation checks into a loop. - FNCS is no longer a dummy procedure; the variable ITEST determines the test function that is used. This allows for the removal of many unused arguments. Also eliminate IAP(26) for IUZR. - Do not try to find a special point after non-convergence. Adjust ITP while looking for a special point where appropriate. - Correct mid-value given to Mueller's method in special point locators: RDS can be changed by STEPBV/STEPAE so needs to be added to the right-hand value S1 after instead of before calling it. - Modified the special point locators to be more accurate: * if Newton iterations do not converge, revert to the previous converged state and report "possible special point" * try all special points: do not report one or disable other types as soon as one is found * recompute test functions if the locator has changed UPS through STEPAE/STEPBV, using STEPPED and ISTEPPED variables. * some demos now report new labels (pp3, sib, tfc, tor) - Change Mueller's method to avoid loss of significance, by multiplying -c+r by (-c-r)/(-c-r) and evaluating the result manually. - Completely recover the previous state if a special point is not found. - Added some logic to deal with multiple test functions becoming zero at a special point. Make explicit that "first come, first served" except for a few exceptions. - Do not transpose DFDU in inner loop because it destroys the assumed zeros that can be skipped in the user's FUNC. - Detect overflows for PAR(*) with respect to NPAR after calling PVLS. PAR(*) always has at least NPARX elements. - Only print and use the basic Floquet multipliers for BP/LP/PD/TR continuations of limit cycles. For this, NULLVC needs to return the pivot rows, so a set of independent rows can be found for parts of the monodromy matrix factors. - Reorganized the linear solver so the algorithm works independently of the parallellization so results are identical independent of the number of processors used. - Fix GETP for the step size, that is, GETP('STP',0,U). - Sort purely imaginary eigenvalues for conservative systems returned by GETP('EIG',...) by imaginary part. - Fix stability information for last point on curve. - Improve torus bifurcation initialiation by using the correct sin/cos functions. - Move the torus angle back to PAR(12) so it can be explicitly specified in ICP and monitored that way. - Use consistent sign for branch direction also when switching branches, not just for normal branches. - If the parameter direction is close to zero when starting a new branch, look at the other parameters and coordinates instead to find a positive direction. This should make branch directions unique in most cases across architectures. - Physically swap columns and rows in Gauss elimination routines. - Do not write a space before the header line on standard output. - Update lapack routines to v 3.2.2. Change DGESVJ to not divide by zero for zero columns. - Use a derived type (AUTOPARAMETERS) AP instead of IAP and RAP. - To makes the reduction algorithm in the linear solver more elegant, replaced part of the role of S1 by A1. - Reorganization of source code with toolboxes: - Renamed autlib1.f to main.f90, autlib2.f to solvebv.f90, autlib4.f to floquet.f90, and autlib5.f to homcont.f90. - Split general bvp interface routines from autlib3.f & bvp.f90 into toolboxbv.f90. - Split off equilibrium (equilibrium.f90), map (maps.f90), periodic solution (periodic.f90), optimization (optimization.f90), and parabolic PDE routines (parabolic.f90) from autlib3.f. - Do allocation of PAR, THU, THL, IUZ, and VUZ arrays later to reduce the number of parameters passed. - Moved function dispatchers to toolboxes. - Moved "redefinition of constants" to toolboxes. - Introduced AP%NTEST, which can be set in the toolboxes, to replace AP%NUZR+xx. - Renamed UZR to TEST and IUZR to ITEST to clarify that this array is used for all test functions and not just user-defined ones. - Renamed PVLI to FNCI to provide a generic test function interface. Called with ITEST=0 it calls PVLS. - Adjusted MPI to work with changed toolbox interface. Transferred AP structure directly with MPI. - MPI improvements: - Only send parts of a1, a2, s1, bb, cc, and faa from workers to master that are needed. This speeds up the MPI parallel code significantly. Let MPI send and receive matrix parts in a recursive fashion on demand. This makes the nested dissection work more in parallel with less communication. Example: reduction for NTST=8, 4 CPUs. CPU 0 1 2 3 1. 12 34 56 78, CPU1 sends 4 to CPU0, CPU3 sends 8 to CPU2. 2. 24 68 , CPU2 sends 8 to CPU0 3. 48 This sequence is similar to the sequence documented for AUTO94P but reversed in this way: AUTO94P used: CPU 0 1 2 3 1. 12 34 56 78, CPU0 sends 2 to CPU1, CPU2 sends 6 to CPU3. 2. 24 68, CPU1 sends 4 to CPU3 3. 48 The new way has the advantage that all non-parallel processing is done in the master, CPU0. - Make MPI work with HomCont. A few more MPI adjustments to print better error messages. - Replace STOP by CALL AUTOSTOP, to give MPI a chance to cleanly finish. * PyPLAUT: - Introduced new boolean "letter_symbols" option to use letters for symbols (like in plot()) or not (like in @pp). - Add "labelnames" plotter option for autorc, so we can do labelnames={"U(1)":"$x",PAR(1):"$p"}. - Improve handing of margins and font sizes in matplotlib plotter. - Allow symbol sizes using "circle5" etc. - Changed the bifurcation/solution selector to radiobutton style. - Uses Pmw's RadioSelect and MainMenuBar widgets. * PLAUT04: - Add an option to plot by branch ID instead of sequential branch. Coloring method -4 now correspond to "CURV" and -7 to "BRAN". - New plaut04 option: R3B=Yes to switch on R3B mode. Used by the r3b demo so that @pl works. - Made r3bplaut04 a run-time option instead of a separate binary, ie. "plaut04 -r3b". - Removed some arbitrary limits on the number of parameters and labels in files that are plotted. - When testing PLAUT04, change directories to allow the current directory to be deleted on Windows. Get plaut04.rc from the specified directory in PLAUT04. * Python: - Drop Python 2.2 compatibility. Python 2.3 is the new minimum. - Let writeRaw/writeRawFilename use the coordarray and indepvararray structures directly, to be much faster. - Fix dlb/klb/deleteLabel with function argument across multiple branches. - Added error messages if the length of the produced fort.7 file is 0 or you try to run AUTO with an empty solution list or bifurcation diagram. - Add more diagnostics for run() with wrong IRS or missing equation file argument. Fix online help in a few places. - The global runner is now used to always keep the current constants and solution data, so that run() always repeats the latest run, run(DS='-') reverts, etc. load() with a non-keyword argument now always resets the current constants. But handle "unames", "parnames", "e", "homcont", "auto_dir" as special keys for parseC objects: they are not overwritten when a new constants file is read without such keys. - Make the global runner local to the current auto environment. Mainly this is to let auto('foo.auto') use a clean state. - Reset current solution if IRS=0. - Remove unused kw argument from parseS' read() and readFilename() methods. - Simplified log and err redirection system by having only one interface: log and err need to be objects with write() and flush() methods; if None (the default), stdout and stderr are used. Be able to redirect ls and cat so the tests can see everything on sys.stdout.err & log now affect sys.stdout and sys.stderr so we can capture print statements from AUTO scripts as well. - Use an open file so we only read headers using sl('name'). When writing the file, everything is read into memory to avoid overwriting. - Reorganize parseS to keep track of when the s-file if fully read so it can be closed. Always read the file completely on Windows. - Explicitly close auto script files after reading them. - Branches in bifurcation diagrams can now deal with solutions using the () notation, and will write solutions and diagnostics. Functional notation for deleting labels is generalized to apply to any () notation, to select labels for solution lists of bifurcation diagrams. - Allow loadbd([list]). - Further straightening out of AUTOSolution constructor, also to facilitate adding parameters through PAR. s=load([1,2,3]); s=load(s,PAR={1:2}) now works. - Created an update() method for parseS.AUTOSolution objects. Use a few sets and disallow strange "constants" key for parseC. parseS.AUTOSolution's c attribute can now be None to indicate that no constants are attached. - The AUTOSolution constructor no longer allows AUTO constants as keywords. These are now handled by load(). - Fix headers of merged branches to get the header of the forward branch. - Don't try to import Numeric on 64-bit systems. * Shell commands: - Eliminated compile-time limits on the maximum number of labels and branches in the utilities using a linked list and dynamic allocation. - Adjust @zr, @db, @tr, PLAUT04, and @fc to solution files without directions generated with IIS<3. - In @ll/listlabels/@lb, use as much space for the label number as in normal AUTO output. * Demos: - Added test infrastructure in test directory. See README file there. - Added LP1/BP1 stopping conditions to BPCONT demos since those branches double back in machine-dependent ways. - Use UZSTOP where appropriate. - abcb: Switch off unreliable BP detection during BP cont. - dd2: Improve to perform period-doublings. - fhh: Add stopping condition in because inclination flips with complex eigenvalues do not make sense. Make IF changes to the correct constant file. - fhh: Adjusted tolerances a bit to avoid an MX and further adjustments. - fnb: Increase NTST for robustness. - fnb: Fix starting label for last run to be the third from below. - fnb: Further adjustments to make this demo more robust. - log and hen: Added two demos for maps: Logistic and Hénon. - phs and tor: make more robust. Do not copy c.xxx.1 to c.xxx if c.xxx already exists with copydemo(). - pla: Update Plant demo to be less sensitive, mostly as suggested by Sebius. - python/n-body: Added plaut04.rc file to; solve issues with logged plaut04 spawning. - r3b: Use a numerical tolerance to determine purely imaginary eigenvalues. - r3b: Setting ITNW=7 for V1 family gives consistent results. - r3b: Made more robust. - r3b: Reorganized initial part using TY= constant. - snh: Fix typo in equation in the manual for SN-Hopf demo. - snh: Truncate nu2 to [-2,2] to avoid floating point exceptions with acos. - snh: Adjusted DSMIN to work with new test function algorithms. - snh: Put a stopping condition on delta to avoid MX-ing sensitively. - tfc: Avoid MX by increasing NTST. - tor: set maximum period to avoid MX in last run. * Manual: - Use hyperref in the manual; change to use pdflatex. Update reference for Desroches paper. - Add acroread to list of viewers. 0.7.3: * Main AUTO: - Fix typo in auto.env.sh - Fix compilation with ifort. * Python: - Fix a problem with load(U=...) to change U(*) values with respect to STPNT. 0.7.2: * Main AUTO: - Fix torus bifurcation initialization; a long standing bug was fixed: torus continuations did not work from TR labels where the relevant Floquet multipliers have negative real part. - Fix some intents that are reported as errors by gfortran 4.5 and ifort. - HomCont: initialize ISTART to 5 in DATA block. - For plotter: in fort.7 use stability of previous point for bifurcation points. * Python: - Fix a problem with numpy fromstring and the last element in Fortran exponential notation. - Fix logical "or" which should be "and" in parseS efficiency header length check. - Fix plot3() with bifurcation diagram argument. - Fix UZR handling with old-style constant files. - Fix message for save(). - Only complain but do not crash if files are missing for append(). - Fix error_symbol handling for plotter. * Demos: p2c: Remove superfluous and wrong ISP=-2. snh: use PAR(4) to store the intended integer codimension instead of using mu < 0 which fails when reaching the end of the codim 0 tangencies at the Hopf bifurcations. * Shell commands: - Fix bifurcation file write bug in @kuz, @klp, etc. * PLAUT04: - Change SoQt init statement to avoid a crash in Fedora 12. - Change HardCopy include path for PLAUT04 for Mac OS X compatibility. 0.7.1: * Python: - Fix solution plotting for plot()/@pp without arguments. (reported by Thomas Wagenknecht) 0.7: * Main AUTO: - Allow three parameter continuations for torus bifurcations, fixing the angle (Sebius Doedel). See the demo 'tor' for an example. - IRS now support strings like IRS='UZ1' in constant files and Python. - The new "STOP" constant as an alternative to "SP" allows to clearly specify stopping conditions such as STOP=['HB2',UZ2'] which stops at the second Hopf or second user defined point, whichever comes first. This setting does not switch special points off or on, unlike SP. - HomCont now has a new default setting "ISTART=5" which performs a phase shift only if the restart solution is not already a homoclinic orbit that was continued by HomCont. - A problem where extremely flat starts of curves, which sometimes occur with heteroclinic and homoclinic orbits, caused the mesh to be wrongly calculated was fixed (problem reported by Thomas Wagenknecht). - Automatic rotation detection (angular variables) is now switched off for heteroclinic orbits in HomCont. This fixes another problem reported by Thomas Wagenknecht. - Fix crashes with the phase shift algorithm and mesh problems for homoclinic branch switching with HomCont, which occurred in a problem by Daniele Linaro. - Fix crash for BPCONT (algebraic problems) with ISW=2 (reported by David Barton). - Fix problems with the Intel Fortran compiler ifort (reported by Patrick McNeil). - Rotations no longer use PAR(19) internally, so this parameter is free to use. - The following types of continuations now use parameters above NPAR, instead of PAR(12), PAR(13), PAR(14), etc. as internal parameters: + fold continuations for periodic orbits and general BVPs. + branch point continuations for periodic orbits and general BVPs. + torus continuations for periodic orbits. + period-doubling continuations for periodic orbits. Only PAR(11) is reserved for periodic orbits; for general BVPs (IPS=4) all parameter indices can be freely used in the equations file. For homoclinic branch switching, the internal parameters for the Lin vector and the point where the gap is located were moved beyond NPAR as well. - Solution file headers now have 4 extra fields on the same line: NPARI, NDM, IPS, IPRIV which mean: number of internal parameters, user dimension, problem type, and a per-problem private field, respectively. - Bifurcation diagram files now only print user-specified constants that are visually different from the ones used internally, under the heading "User-specified constants, where different from above:". - Made sure PVLS is always called first, before FUNC, to be able to initialize state in user equation files. - If pivots are 0 or smaller in absolute value than 1d-308*||A||_max, then AUTO will not converge instead of continuing with NaNs - Portability problems with some versions of GFortran were fixed, for instance avoiding the use of BACKSPACE at EOF for reading constant files. * PyPLAUT: - The plotter PyPLAUT can now plot in three dimensions, if used with a suitable version of matplotlib (not 0.98.x). Related new settings for autorc and the Python plot() command are: minz, maxz, zlabel, zlabel_fontsize, zticks, azimuth, elevation, bifurcation_z, solution_z @pp, like @p, now accepts some basic 3D commands too (B3D and 3D). - A new plot() argument, hide=True, hides the graphics, to be used for just printing to a file with matplotlib. - The savefig() method of an object returned by plot() saves the file. - The new settings: coloring_method = "branch" or coloring_method = "type" let the color of the curve depend on the branch number (BR) or type number (TY) - label="all" (or label = ["all"]) now plots all labels. - The plotter now primarily plots by label name, which is useful for appended branches of bifurcation diagrams that change the column header name for numbered columns. Here, for example, "U(1)" denotes just point continuations; "MAX U(1)" applies to both "U(1)" and "MAX U(1)" (points and BVPs) - @pp now accepts both ',' and ' ' to separate input lists, similar to PLAUT. * PLAUT04: - Print support is added to the File menu if Coin3D is used. - With new versions of SoQt, libsimage is no longer necessary. To accomplish this, the images of the Sun, the Earth and the stars were converted to JPEG format. - New settings: Object Animation Speed, Sat Animation Speed, Orbit Animation Speed, which set default values for the speeds. - A new "Draw Coord" menu option, "At Origin" causes the coordinate axes to be drawn at the system origin. This corresponds to Coordinate Type = 4 in (r3b)plaut04.rc. - Draw reference planes and spheres, if specified in (r3b)plaut04.rc, via the new settings: Draw Reference Plane, Draw Reference Sphere, Disk Rotation, Disk Position, Disk Radius, Disk Height, Disk Transparency, Disk From File, Sphere Position, Sphere Radius, Sphere Transparency, Sphere From File * Python: - The run command no longer redirects output by default: AUTO writes directly to the terminal. - When AUTO crashes, stop immediately with an AUTO Runtime Error. - Skip entries with a 0 label number in @ls and "print" for bifurcation diagrams, and if there are no entries left under a header, don't print the header. - Default command aliases are now set in AUTOCommands.py instead of .autorc. - Before every run(), the Python CLUI explicitly performs memory garbage collection, to avoid memory problems. - Initially, do not read solution files into memory, but just the headers, except for fort.8, because that file is often overwritten. - Solution objects now contains keys for corresponding entries in the bifurcation diagram file such as "L2-NORM". - Add s.b to a solution object, where b is the corresponding point on its branch. - Branch objects now contain "BR", "TY", and "TY number" keys which you can change similar to those of solutions. - The dlb, dsp, klb, and ksp functions can now take functions as arguments. These functions return a boolean value based on a solution causing it to be deleted or kept. A function with two arguments compare the two solutions for every combination and if satisfied the second one is deleted or kept. This allows for the deletion of "close" solutions. - The dlb, dsp, klb, and ksp functions can now be given two file suffix arguments, such as dlb("old", "new", f). - Improve error reporting: complain about missing files in a clear way, not exposing internals. - Allow the U keyword for load() to update a solution just like PAR does. - Changed writeRaw and toArray to output in table form. - Allow mv() and cp() to be used; without () it'll use the shell command. - Fixed parsing of headerless bifurcation diagram files. The coordinates are then called COLUMN(1), COLUMN(2), etc. - Extend @cp/@mv/copy()/move() to accept up to 4 arguments and directories. - The Python code no longer tries to be compatible with Python 1.5.2; at least Python 2.2 is assumed. - The Python code is mostly compatible with Python 3.x. * Configure checks: - Improved Coin3D detection for Mac OS X. - Fixed Coin detection to include cppflags from coin-config. - Added check for C++ compiler existence (not included by default in Ubuntu). - Fix C equation files when using AUTO with g95. * Shell commands: - @cp and @mv now accept up to 4 arguments and directories. - @rl, @lb, @kuz, @klp, @kbp, and @dlp are more flexible with bifurcation diagram files, and can work with older versions of those. - @fc and us() always generate the .o file for the equation file, in order not to confuse Sun f95. - Added lb, db, and rb commands to @lb (autlab), so it can list, relabel and delete branches. * Demos: - Converted all demo Fortran files to free-form format. - Use IMPLICIT NONE in all demos. - Modularized the "brf" and "brc" demos. Use dynamic arrays in the "brc" and "brf" demo so NDIM determines the number of collocation points. - Added a 3-parameter continuation fixing the angle to the "tor" demo. - New demo "pcl" that uses Lin's method to connect point-to-cycle connections in the Lorenz equations. Thanks to Thorsten Riess and Bernd Krauskopf. - New demo "snh": bifurcations of global reinjection orbits near a saddle-node Hopf bifurcation: cycle-to-point connections. Also thanks to Thorsten Riess and Bernd Krauskopf. - New demo "fnc": computation of attracting and repelling slow manifolds and the continuation of canard orbits in parameter space in the FitzHugh- Nagumo equations. Thanks to Mathieu Desroches and Bernd Krauskopf. - Use STOP and NPAR in all demos where applicable. - Replaced RL0 and RL1, where used, by conditions in UZR or STOP. - Removed A0, A1 except where they are really used. - Fixed the 'mtn' HomCont demo: we must explicitly specify NSTAB for saddle-node homoclinics. - Added autorc files to the demos ab and tor. * GUI94: - The old GUI can now work with .f90 equation files (but not with new-style constants files!). 0.6: * The 2D plotter PyPLAUT can now use matplotlib, be called via the @pp command, and operated like the old PLAUT plotter. New settings were added to .autorc/autorc for more effective control: xlabel, ylabel, xlabel_fontsize, ylabel_fontsize, top_title, top_title_fontsize, dashes, solution_coordnames, solution_indepvarname, bifurcation_coordnames, stability, default_option, d0, d1, d2, d3, d4. PyPLAUT can now also show the stability of branches via dashed curves. The coordinate input boxes are more permissive: no need to type quotes or ['t','t','t']: just type t. The input boxes now, by default, show the column names from bifurcation diagram files. * A new free-form constants file format is introduced with the following new constants: sv, e, s, dat, unames, parnames, SP, U, PAR, NPAR. The "dat" constant obsoletes the @fc/us() commands by reading directly from the ASCII data file. HomCont constants can also be added. Strings, set via unames and parnames, can be used in ICP, THU, THL, and UZR. * Add new setting ISP=4 which detects PDs and TRs but not BPs. * Implemented SP AUTO constant: SP=["HB1","LP2"] stops at the first HB or second LP. SP=["HB","LP"] selects which special points to detect. * Support new, more compact, dictionary notation for the AUTO constants THL, THU, UZR, PAR, and U. * If IRS is set to -1, then just get the first solution from the solution file. Use IRS<-I for the Ith label in the solution file. * HomCont can automatically detect NSTAB and NUNSTAB, the number of stable and unstable eigenvalues in most cases. * Introduce new @ksp, @dsp, @klb, and @dlb commands: @dsp -lp abc removes all 'LP' labels from b.abc and s.abc @dsp -bp removes all 'BP' labels from fort.7 and fort.8 @dsp -uz abc abc2 removes all 'UZ' labels from b.abc and s.abc; writes to b.abc2 and s.abc2 @dsp abc removes all special labels (anything that is not either every NPR steps or an 'UZ' label) from b.abc and s.abc. @ksp does the opposite, e.g.: @ksp -lp abc keeps all 'LP' labels, and removes all other labels in b.abc and s.abc @dlb and @klb retain type numbers in b. files so they can be plotted. The new ksp, dsp, klb, and dlb commands in the Python interface work similarly. * New merge/@mb commands merge branches in bifurcation diagram files. * New subtract/@sb commands subtract branches using interpolation in bifurcation diagram files. * The relabel (@rl) command is much faster. * Removed obsolete @ commands. * Avoid problems on case-insensitive filesystems by using @@R etc. instead of @R; make creates @R from @@R and so on, on case-sensitive filesystems. * Allow manual branch switching for algebraic problems with ISW=-1. Derivatives are now stored in solution files to allow this to work reliably. * The GETP function that can be called via PVLS supports new arguments: * 'EIG' obtains eigenvalues and Floquet multipliers: index 1, 3, 5,... obtain the real parts of ev's 1, 2, 3,... and 2, 4, 6,... the imaginary parts. Eigenvalues are ordered by real part. Floquet multipliers are ordered by distance from |z|=1. * 'NBC' gets the active NBC * 'NINT' gets the active NINT * 'NTST' gets NTST * 'NCOL' gets NCOL * 'NDIM' and 'NDX' get the dimension of the extended system * 'MXT' gets t value for maximum of component * 'MNT' gets t value for minumum of component * 'WINT' gets weight for integral; 0<=I<=NCOL * 'DTM' gets value for delta t array 1<=I<=NTST Some of these together allow for direct access of the solution array in * If the last point of a branch has type UZ, PD, HB, LP, etc. then that type is printed instead of EP. * AUTO computes and prints Floquet multipliers, eigenvalues and stability also for the first and last points on a branch. * NBIFX is eliminated from auto.h. Only NPARX is relevant. It now just designates a default maximum; it can be changed at runtime by the NPAR auto constant. * Bifurcation diagram files (fort.7/b.xxx) now have complete headers showing all AUTO constants. * DFDU, DFDP, DBC, and DICD are zero-initialized so it is not necessary to initialize those entries in equation files. * It is now possible to extend a system via STPNT. * Allow restarting from a point that is not a Hopf bifurcation in a BVP: it will be seen as a constant solution on the interval [0,1]. * Use LAPACK instead of EISPACK throughout. Eigenvectors might be different than before but are normalized to have the largest component positive. * Better diagnostics for errors in fort.2/c.xxx and fort.12/h.xxx input files. * Better performance and accuracy for fold continuations through smarter computation of the Jacobian matrix. * The performance of input/output routines and commands has improved, for instance by avoiding re-reads. * Some parallellization and cache use performance improvements. * Fix issue not detecting Hopf bifurcations and stability changes: a tolerance is only set if the trace of the Jacobian is zero and the dimension is even so the system is probably conservative. * Fix numerous bugs, thanks also to Thomas Wagenknecht, Hinke Osinga, Phil Naylor. * Many Python syntax changes, all backwards-compatible: The run command returns a bifurcation diagram object that represents all output, and can work in a bd=run(solution,options) fashion. The load command returns a solutions + constants to start from. The loadbd command returns a bifurcation diagram object from files. It is straightforward to obtain all bifurcation points, branches, or a selection from bifurcation diagram objects; these objects can be concatenated like standard Python lists. * "load" now supports changing LAB/PT/TY/BR/PAR in a solution. * In Python allow starting AUTO via "run" directly from a Python solution array. * Solutions and bifurcation diagrams in Python now use PyDSTool Pointsets and can use numpy/numarray/Numeric for efficiency. * Elimination of internal use of shell commands by the Python CLUI, so it works especially faster in Windows and does not depend on a shell. * Improved ctrl-c handling running Python scripts. * You can now plot and read gzipped files directly in PyPLAUT and Python commands. * Introduce "-c" for the auto command (works like python's -c), and preserve already set PYTHONPATH. * Add an r3b boolean parameter to plot3 in the Python CLUI. * The Python CLUI can now read .auto files with DOS line endings on Unix systems. * The lp Python CLUI alias now finds limit points instead of Hopf points, and cp is no longer aliased to commandCopyDataFiles (conflicts with cp as Unix copy). * Python2.6 compatibility. * PLAUT04 uses less memory and parses solution, bifurcation diagram and diagnostics files more efficiently. * You can set PLAUT04's axis colours in plaut04.rc. * All demos were updated to use Python, also thanks to Fabio Dercole. Special HomCont (h.xxx) were eliminated from all demos. * New demos: um2, um3, ph1 (Eusebius Doedel), c2c and p2c (based on work by Doedel, Kooi, van Voorn, and Kuznetsov). * Improved configure script for use with MacOS X. * Many updates to the manual, also thanks to Fabio Dercole. 0.5: * PLAUT04 can now also use the SoQt and Qt libraries. That makes it easier to compile on various Linux distributions, and makes it portable to native Windows and MacOS X without an X server. Using SoQt also avoids some issues with LessTif, in particular on 64-bit systems where LessTif is unstable. * PLAUT04 can now show label numbers in bifurcation diagrams. plaut04.rc option: "Show Label Numbers" * The coloring method options in plaut04.rc can now be set seperately for solution displays and bifurcation diagrams: "Coloring Method Solution" and "Coloring Method Bifurcation". * You can also set the "Label Sphere Radius" in plaut04.rc. * The r3b (now with extensive manifold calculations), pp2, pp3, lor and bvp demos were updated. * Some issues with g95 and Sun's Fortran compiler were solved. * Likewise for the configure script. * Repaired MPI regression in 0.4. * Add support for ipython (auto -i) and also auto-quotes and auto-parentheses in the normal auto Python CLUI. * Added some often used shell commands to the Python CLUI: "clear","less","mkdir","rmdir","cp","mv","rm". * Added ex and dmf aliases for execfile and demofile to the Python CLUI. * Added a GETMDMX(NDIM,P0,P1,NMM) routine to obtain the monodromy matrix factorization in PVLS (adapted from Kazuyuki Yagasaki). * Corrected integral conditions for torus bifurcation continuations (bug well-spotted by Huguette Croisier). * Added BPCont: code for BP continuation of periodic solutions and BVPs (Fabio Dercole). * Added BPCont demos: sspg, lcnf, tfc, and abcb. * Added @lbf, @ls commands, and the writeShort() and writeScreen() Python methods for displaying the bifurcation diagram file in a compact way. 0.4: * AUTO-07p can now continue branch points in two parameters (Fabio Dercole) * Includes all demos that are documented in the manual. * The manual documents a new tutorial demo ('cusp'). * The run() and load() commands in the Python CLUI have been extended to directly specify AUTO constants, save and append files as parameters. * A new splabs() Python CLUI function directly obtains special labels from a solution file (e.g., all Hopf bifurcation labels). * You can now run the @ command (@dm, @R, etc.) directly in the Python CLUI without having to escape them with a !. * The number of parameters printed in the bifurcation diagram files is now given by NICP; the parameters beyond the 7th are displayed as well. * A higher precision for numbers is used in the bifurcation diagram files. This helps when plotting small sections of bifurcation diagrams. * AUTO now allows free-form Fortran for equation files (.f90 extension). * Parallelisation has improved. 0.3: * The configure script is fixed for certain GNU Fortran configurations on Windows and has improved detection for the Coin and SoXt libraries for PLAUT04. * Some PLAUT04 crashes were fixed. * The MPI parallellization was improved so that most of the big data arrays that form the Jacobian matrix are split between machines. The distribution of memory enables AUTO to work with much larger systems. * Both OpenMP and MPI parallellizations were improved so that the setting up the RHS, copying to a smaller system and inflation of parameter routines are done in parallel. * An OpenMP parallellization issue with integral conditions, and several other small bugs were fixed. * A few new demos and helper utilities were added. * The 'total time' reported by AUTO is now the total wall clock time for both OpenMP and MPI. 0.2: * The configure script is fixed if PLAUT04 dependencies are not available and is more robust. * MPI support is ported from AUTO2000. * A bug is fixed involving the continuation of folds with more than two parameters. * Automake is no longer used for PLAUT04, using just autoconf and Makefile.in files for the whole project instead. * Various performance improvements have been made. 0.1: * This is a preliminary version of AUTO-07p. auto/07p/README0000640000175000017500000000124413570013207011123 0ustar skskNOTE: this is a beta version of AUTO-07p. It is already usable, but some of the demos and the manual in particular need more work. Please have a look at the manual, doc/auto.pdf, in particular Chapter 1, for information about requirements and differences with earlier versions of AUTO. See the file CHANGELOG for changes between sub-versions of AUTO-07p. --------- For installation instructions see the AUTO manual. The LaTeX source file of the manual is in doc/auto.tex. Note that you must define the correct path to the AUTO directory in your (.bashrc) resource file. This version of AUTO incorporates both a Unix and a Python command language user interface (CLUI). auto/07p/setup.cfg0000640000175000017500000000037113570013207012064 0ustar sksk[metadata] name = auto_07p version = 0.0.1 [options] zip_safe = True packages = auto, auto.graphics # python_requires = >=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.* # install_requires = package_dir = =python [options.packages.find] where = python auto/07p/configure.ac0000640000175000017500000003014213570013207012530 0ustar skskAC_INIT(plaut04/src/gmain.c++) AC_CONFIG_HEADERS(include/config.h) AC_ARG_VAR(FC, [Choose a Fortran (>=90) compiler other than the default]) AC_ARG_VAR(MPIFC, [Command to use to compile MPI programs (default: mpif90)]) AC_ARG_WITH(optimization-flags, [ --with-optimization-flags=FLAGS Choose an optimization flag to give to the compilers (default: -O)], [OPT_FLAG=$withval],[OPT_FLAG="-O"]) AC_ARG_WITH(openmp, [ --with-openmp Try to use OpenMP (default: yes)], [openmp=$withval],[openmp="yes"]) AC_ARG_WITH(mpi, [ --with-mpi Try to use MPI (default: no)], [mpi=$withval],[mpi="no"]) AC_ARG_ENABLE(plaut, [ --enable-plaut Compile the Plaut plotting package (default: yes)], [ENABLE_PLAUT=$enableval],ENABLE_PLAUT=yes) AC_ARG_ENABLE(plaut04, [ --enable-plaut04 Compile the Plaut04 plotting package (default: yes)], [ENABLE_PLAUT04=$enableval],ENABLE_PLAUT04=yes) AC_ARG_ENABLE(plaut04-qt, [ --enable-plaut04-qt Try to use QT instead of Motif/LessTif for Plaut04 (default: yes)], [ENABLE_PLAUT04_QT=$enableval],ENABLE_PLAUT04_QT=yes) AC_ARG_ENABLE(gui, [ --enable-gui Compile the Motif based GUI package (default: no)], [ENABLE_GUI=$enableval],ENABLE_GUI=no) AC_ARG_ENABLE(tek2ps, [ --enable-tek2ps Compile the Tek2ps conversion utility (default: yes)], [ENABLE_TEK2PS=$enableval],ENABLE_TEK2PS=yes) AC_SUBST(OPT_FLAG) dnl Checks for programs. MPIFILE=nompi.f90 if test x$mpi = "xyes"; then # We first check for the MPI compilation script. If it exists # we try and us it to override the default compiler. if test x$MPIFC = "x"; then # sometimes (FC4/5) mpif77 actually calls f95... AC_CHECK_PROGS(MPIFC,[mpif90 mpif95 mpif77],"no") if test x$MPIFC = "xmpif77"; then if ! ( $MPIFC -v 2>&1 | grep f95 > /dev/null ) ; then MPIFC=no fi fi fi if test x$MPIFC != "xno"; then MPI="yes" MPIFILE=mpi.f90 FC=$MPIFC fi fi AC_SUBST(MPIFILE) AC_PROG_CC # adjust include path if gfortran is installed without MinGW on Windows AC_COMPILE_IFELSE([AC_LANG_SOURCE([#include ])],,[CPPFLAGS="$CPPFLAGS -iwithprefix ../../../../include"]) AC_PROG_INSTALL AC_LANG_PUSH(Fortran) if test x$FCFLAGS != "x"; then FFLAGS=$FCFLAGS fi AC_PROG_FC AC_FC_SRCEXT(f90) AC_FC_FREEFORM(, echo Fortran 77 compilers no longer work to compile AUTO. echo Please check with the manual. exit 1 ) # ifc needs -Vaxlib to use FLUSH and ETIME. COMPAT="f2003" AC_DEFUN([F2KPROG], [ program main real t character*80 s print *,'hello' flush(6) call cpu_time(t) t=command_argument_count() call get_command_argument(0,s) end ]) AC_DEFUN([UNIXPROG], [ program main real t(2),r,etime character*80 s print *,'hello' call flush(6) r=etime(t) t=iargc() call getarg(0,s) end ]) AC_MSG_CHECKING([for F2003 or pre-F2003 compatibility functions]) AC_LINK_IFELSE([F2KPROG],,[ COMPAT="unix"; AC_LINK_IFELSE([UNIXPROG],, [tmp=$FCFLAGS; FCFLAGS="$FCFLAGS -Vaxlib" AC_LINK_IFELSE([UNIXPROG], FFLAGS="$FFLAGS -Vaxlib",[FCFLAGS=$tmp;COMPAT="compat"])])]) AC_SUBST(COMPAT) AC_MSG_RESULT([$COMPAT.f90]) AC_FC_DUMMY_MAIN([fc_dummy="yes"],[fc_dummy="no"]) realcc=$CC if test x$fc_dummy = "xno"; then # Use gfortran/g95 to link wrapper functions if possible. # It appears that otherwise AC_FC_WRAPPERS gets confused on Windows, # because of spaces in names such as 'Program Files' CC=$FC # avoid caching previous result $as_unset ac_cv_fc_dummy_main AC_FC_DUMMY_MAIN([fc_dummy="yes"],[fc_dummy="no"]) fi if test x$fc_dummy = "xno"; then AC_MSG_WARN(["Warning: can't link C with Fortran"]) fi AC_FC_WRAPPERS CC=$realcc if test x$openmp = "xyes"; then # Check for OpenMP. If it exists we try to use it. AX_OPENMP(FFLAGS="$FFLAGS $OPENMP_FCFLAGS",openmp="no") fi AC_LANG_POP AC_PROG_MAKE_SET dnl Checks for libraries. #Check for the default X stuff AC_PATH_XTRA # We also need Motif. If we don't find it, X is not useful for us # so we set the same no_x variable as the above macro #Now we want to check to see is Motif is installed AC_CHECK_LIB(Xm,XmCreateMainWindow,X_LIBS="$X_LIBS -lXm -lXt -lX11", no_x=yes,$X_PRE_LIBS $X_LIBS -lXt -lX11 $X_EXTRA_LIBS) dnl Checks for header files. AC_HEADER_STDC AC_SUBST(FFLAGS) CFLAGS="$CPPFLAGS $CFLAGS" if test x$ENABLE_PLAUT = xyes; then PLAUT=plaut else PLAUT="" fi AC_SUBST(PLAUT) if test x$no_x != xyes && test x$ENABLE_GUI = xyes; then GUI=gui else GUI="" fi AC_SUBST(GUI) if test x$ENABLE_TEK2PS = xyes; then TEK2PS=tek2ps else TEK2PS="" fi AC_SUBST(TEK2PS) dnl AC_HAVE_LIBRARY([m]) AC_PROG_CXX AC_LANG(C++) AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],[HAVE_CXX="yes"],[HAVE_CXX="no"]) PLAUT04_TEST=yes AC_CHECK_PROG(HAVE_COIN_CONFIG, coin-config, true, false) COIN_LIBS="-lCoin" COIN_LDFLAGS= COIN_INCLUDES= if test x$HAVE_COIN_CONFIG = "xtrue"; then COIN_LIBS="`coin-config --libs`" COIN_LDFLAGS="`coin-config --ldflags`" COIN_INCLUDES="`coin-config --cppflags`" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $COIN_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $COIN_LDFLAGS" tmp_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $COIN_INCLUDES" AC_LINK_IFELSE([AC_LANG_SOURCE([#include int main(void){SoDB::init();}])], [COIN3D="yes"],[COIN3D="no"]) if test x$COIN3D = "xno" && test x$CXX = "xg++"; then tmp_CXX=$CXX # for 64-bit Mac OS try with -m32 to link with 32bit coin CXX="g++ -m32" AC_LINK_IFELSE([AC_LANG_SOURCE([#include int main(void){SoDB::init();}])], [COIN3D="yes"],[COIN3D="no"]) if test x$COIN3D = "xno"; then CXX=$tmp_CXX fi fi LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS CPPFLAGS=$tmp_CPPFLAGS if test x$COIN3D = "xno"; then { echo "configure: error: COIN3D is not installed"; AC_CHECK_LIB([Inventor], abort, OI="yes", OI="no") if test x$OI = "xno"; then { echo "configure: error: OI is not installed"; PLAUT04_TEST=no } else { DEPS_LIBS="$DEPS_LIBS -lInventor" echo "configure: SGI Open Inventor OK. $DEPS_LIBS"; AC_CHECK_LIB([InventorXt],abort,OIXTLIB="yes",OIXTLIB="no") if test x$OIXTLIB = "xno"; then { echo "configure: error: SGI Open Inventor Xt Library is not installed"; PLAUT04_TEST=no; } else { DEPS_LIBS="$DEPS_LIBS -lInventorXt" echo "configure: SGI Open Inventor Xt OK. $DEPS_LIBS"; } fi } fi } else { echo "configure: Coin3d OK."; SOXT_LDFLAGS=$COIN_LDFLAGS SOXT_LIBS=$COIN_LIBS SOXT_INCLUDES=$COIN_INCLUDES SOXTLIB="no" if test x$ENABLE_PLAUT04_QT = xyes; then AC_CHECK_PROG(HAVE_SOQT_CONFIG, soqt-config, true, false) if test x$HAVE_SOQT_CONFIG = "xtrue"; then SOXT_LIBS="`soqt-config --libs`" SOXT_LDFLAGS="`soqt-config --ldflags`" SOXT_INCLUDES="`soqt-config --cppflags` -DSOQT_DLL" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $SOXT_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $SOXT_LDFLAGS" tmp_CPPFLAGS=$CPPFLAGS CPPFLAGS="$CPPFLAGS $SOXT_INCLUDES" AC_LINK_IFELSE([AC_LANG_SOURCE([#include int main(void){(void)SoQt::init((const char *)0L);}])], [SOXTLIB="SoQt"], # -lXi is a workaround for Fedora Core 5 [tmp_LIBS1="$LIBS" LIBS="$LIBS -lXi" tmp_SOXT_LIBS="$SOXT_LIBS" SOXT_LIBS="$SOXT_LIBS -lXi" AC_LINK_IFELSE([AC_LANG_SOURCE([#include int main(void){(void)SoQt::init((const char *)0L);}])], [SOXTLIB="SoQt"], #explictly look for Qt (sometimes necessary on Mac OS) [SOXT_LIBS="$tmp_SOXT_LIBS `pkg-config --libs 'QtCore QtGui QtOpenGL'`" LIBS="$tmp_LIBS1 `pkg-config --libs 'QtCore QtGui QtOpenGL'`" SOXT_INCLUDES="$SOXT_INCLUDES `pkg-config --cflags 'QtCore QtGui QtOpenGL'`" CPPFLAGS="$CPPFLAGS `pkg-config --cflags 'QtCore QtGui QtOpenGL'`" AC_LINK_IFELSE([AC_LANG_SOURCE([#include int main(void){(void)SoQt::init((const char *)0L);}])], [SOXTLIB="SoQt"], [SOXTLIB="no"])])]) LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS CPPFLAGS=$tmp_CPPFLAGS fi if test x$SOXTLIB = xno; then AC_CHECK_PROG(HAVE_SOXT_CONFIG, soxt-config, true, false) if test x$HAVE_SOXT_CONFIG = "xtrue"; then SOXT_LIBS="`soxt-config --libs`" SOXT_LDFLAGS="`soxt-config --ldflags`" SOXT_INCLUDES="`soxt-config --cppflags`" fi tmp_LIBS=$LIBS LIBS="$LIBS $DEPS_LIBS $SOXT_LIBS" tmp_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $SOXT_LDFLAGS" AC_CHECK_LIB([SoXt],abort,SOXTLIB="SoXt",SOXTLIB="no") LIBS=$tmp_LIBS LDFLAGS=$tmp_LDFLAGS fi if test x$SOXTLIB = "xno"; then { echo "configure: error: Coin3d SoQt/SoXt Library is not installed"; PLAUT04_TEST=no; } else { if test x$HAVE_SOXT_CONFIG = "xfalse"; then SOXT_LIBS="-lCoin -l$SOXTLIB" if test x$HAVE_COIN_CONFIG = "xtrue"; then SOXT_LIBS="$COIN_LIBS -l$SOXTLIB" SOXT_LDFLAGS=$COIN_LDFLAGS fi fi DEPS_LIBS="$SOXT_LDFLAGS $DEPS_LIBS $SOXT_LIBS" DEPS_INCLUDES="$DEPS_INCLUDES $SOXT_INCLUDES" echo "configure: Coin3d $SOXTLIB OK. $DEPS_INCLUDES $DEPS_LIBS"; } fi } fi if (test x$HAVE_SOXT_CONFIG = "xtrue" || test x$HAVE_SOQT_CONFIG = "xtrue" || \ test x$no_x != xyes) && \ test x$ENABLE_PLAUT04 = xyes && test x$PLAUT04_TEST = xyes; then PLAUT04=plaut04 if test x$SOXTLIB = "xSoXt"; then DEPS_LIBS="$X_PRE_LIBS $DEPS_LIBS $X_LIBS $X_EXTRA_LIBS" SOXT_OBJS=gmainxt.o SOXT_OBJS_R3B=gmainxt.o else MOCNAMES="moc-qt3 moc" if ( echo $SOXT_LIBS | grep QtGui > /dev/null ); then MOCNAMES="moc-qt4 moc" fi if test -n "$QTDIR"; then mocpath=$QTDIR/bin:$PATH else mocpath=$PATH fi AC_PATH_PROGS(MOC,[$MOCNAMES],false,$mocpath) if test x"$MOC" = x"false"; then AC_MSG_WARN([''moc'' Qt preprocessor not found]) if test -z "$QTDIR"; then AC_MSG_WARN([(QTDIR environment variable not set)]) fi PLAUT04="" PLAUT04_TEST="no" else SOXT_OBJS="gmainqt.moc.o gmainqt.o" SOXT_OBJS_R3B="../gmainqt.moc.o gmainqt.o" X_CFLAGS="$X_CFLAGS -DUSE_SOQT" fi fi else PLAUT04="" PLAUT04_TEST="no" fi AC_SUBST(PLAUT04) AC_SUBST(MOC) AC_SUBST(SOXT_OBJS) AC_SUBST(SOXT_OBJS_R3B) AC_SUBST(DEPS_LIBS) AC_SUBST(DEPS_INCLUDES) AC_OUTPUT(Makefile src/Makefile util/Makefile gui/Makefile tek2ps/Makefile plaut/Makefile plaut04/Makefile plaut04/src/Makefile cmds/cmds.make cmds/Makefile gui/auto.makefile cmds/compat.sh) if test x$no_x = xyes && test x$ENABLE_GUI = xyes; then echo "***************************************************" echo "It was requested that the GUI front end be compiled" echo "but the proper X libraries (libX and libXt) and/or " echo "Motif libraries (libXm) could not be found. The " echo "compilation of the GUI had been disabled. " echo "***************************************************" fi if test x$ENABLE_PLAUT04 = xyes && test x$PLAUT04_TEST = xno; then echo "***************************************************" echo "It was requested that the plotting utility PLAUT04 " echo "be compiled but the proper libraries (Coin3D and " echo "SoQt or SoXt or Open Inventor and Open Inventor Xt)" echo "and perhaps Motif libraries (libXm) could not be " echo "found. The compilation of PLAUT04 is disabled. " if test x$HAVE_CXX = xno; then echo "You will also need to install a C++ compiler, e.g. g++." fi echo "***************************************************" fi if test x$openmp = "xyes" && test x$MPI != "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for OpenMP" echo "***************************************************" fi if test x$openmp != "xyes" && test x$MPI = "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for MPI" echo "***************************************************" fi if test x$openmp = "xyes" && test x$MPI = "xyes"; then echo "***************************************************" echo "AUTO has been configured with support for" echo "OpenMP and MPI" echo "***************************************************" fi
  2. {w\~4kvofOSl'5'AnX%˺x\Ϥ yZV W-437X0tݭ37^2-ޓQ5茷Pd txLmΔv#UDgE$1/*DH;qNO,qq7Gsb0jաL=e)IkChxIQ˖^Ҿ0e]@ΑԺǧTkӵd6c{cQ%VB5 q$;r$`ږ1Qr}x.y@3A*I"ݰˌ~ltKU(~(E]" qƯ[\)zP' ee48Tt_G߼y@sjjIWA)ߥ]aӪZ&DIkOwf+\+)?ȩ-}`ы 7^Dh(R~_@Hr3p✕ݘf! T9P/Ւb3`0"2]'zXCў^UgcH-gc،~-0{gƼ{?,όVy1kA4:hE-L`2t!#̱;;c["LP:_ox~yQMS r%Î.sA1+ځxS(9K"}I>j#K&?%KGOY~ORm(Ւb+G%S[bl-cY~WTGh;5*KOh/ŀhbqR9S:'Gp|-,]ºW㩣>CPQL"Ò8ꔱvyf/T! YYqa9&<.,3g=ՒXvpFfDbnWmdXhqN`⁙)I$zN,EL'=Hb)Hi oz(yȞHJmWwf2v ryHj%"&[{ x x. '…a _vgچe኱q̝\DŽ#-=ܐ*Y3?%3fُ.~Ϗ_eъp|]Ls@jUNjIq P. '-CkIMO Rt{>bʂ5_92h@JK.PT7l l}ZF=c, edlgFZfJjgyjNcnڳ6'D*P%BRYQ%Uȥ(yJZÞ$~1`gVj9b9_<"\)!wwpHC(#{6} OXe[^؇ۚ7-,ZS :Hc I`d){xk2hh4֠.d3ԺSk³i ߖg:"_Xqw# =GbVSdjI1Yz& dQW/PM\WYN=RY'G>^cؐw{#3WV gǐ/!'fMm3-٨ 6́[hMQ-CQ+6LBwzOy+WW-V4Y°ۥ﹘-<)mV^?(ZubHa0o_l5N1o\o~rY.YU]`9t`YS?H[uy畃Lji>_rSrXyGō4Tq呹81/ϐx؂&/6<@pqi̒Fywy9v?i|f qmcc0X\bbFM A?YjI%:N~(iFY{jR]+䠳c=Ԫfv]06L>,YIG4HhJQ4kG<~]IRi)SԾ.H.j#kF%S(޻iexǜqw?YĈ05.?Feg,fAKբW?8d]h:Im4G \oQ"+ݔB,kZ#C'9Wugy z`mWY xʲ٣:tFG F+JC^]Mz`;q/}J$dԐ[ŚS3P9Փz_}^6F< f@MeQ#m&{\Z }=L)eL%P"*poߣEԼ{ZZVmQݜKU@K$a)ZRX|=r@h31GyX43\1_~Nmq$S$cp ;pU t撴kxl/lyѓ|0}eH ?ҩ]VbE#oNeq.gQϴ"kC)fМpM#ܤE6)@X{SNg6Ǒ&U2ZIJX#?-C XƓ4qӦUZyLXu>מĞ}77)8W  Cw\<_f8jh^/ Ҥ6Xy*NǕ^{)C$ZHs(I̫AYY\[[Jک$m87W*rL!Y?"rCUgUMN+_\ ^W@Hg3+ WCQXHd1J4LY IXLs!H]$g93/SVg8M{#IBR\"&Z,"ͱٜע}l1w,W3^wU¯!U߬-R''\s{˶"~x(Fg4MTit=_*a۬FH׻VIyujPR[r#u]|Gy "CF-=p&=u;[S[Sm)>c` ?۟|/9a9gq3Q0A][\&Yj@Oxry6ie o۲?G_6ŕOXi *F1ǕCc9U$7)IO1_XaMju:=sZ|z E8icFF ^h߉"lܥ*w9Y-бLTeYFܲ[Cu}{~/KC%uZ'm@# 3r\CpFqO]Jް@Q+V). !0e/&M9j:.p Xbx11Xd' Io~ÁbGYҴfŽ&Cr-n[I%eJysJ[(gmԒ\7H @&E\y0!>;& \旡,% z^4HA,3bD5$ki=ʃVOu"jINze:"VGyS]X$hSd!uҏH ? /9aO5jjRASųI5&cŁDJNog?}\P925dU3z:eeAfY^kOmͲa播^=EoV'*y)LCUň.V'\H'Z^nF5W )6ٻUlA-R̝˜AHyϩ`CyPDsݬ'mTOY:qAfN %*"s<_ɝdQͬ,T~ ܣ]JH&zsS %vی_GT6Ir0 dX;PunU NR}v0UGN;RuUm(C2*p@9'p7Q5I}H֘S;KKiF8tVvooW)S2?D֟JПBӠ Jm-4h+!iP$=Wċڟv[55 zkזuCG$̨lze^.J|tɩ`T-lkvUkV"&v8?OR-ņ]57-PfugVlޕbwdk8G3r9ZpI#yh f^dz%eh+_+̆fNE&>p=[~R=IzRfŞ- Nv V*ecZl`76MhIЋ:=%x:8xYn}\]c{34YTƢ^~"g#˜YLa C=jEJM3M[%3ⶹ6"]E-:jQ8&,sF5ÚGͷ^ԡƧvGmǛQJaĉWNղ޸`r}jIӆ5ZV7#ʼv`sՄ%ψ~_ͪ?#4cvr^9/OU9R[-~JVu%)~d3IDATOa&]{zZݏcU8x{Ɛ,+B?nW z6RR,s:t W-AK?wyu3 0!lep6OY]DG Y}SM(ݩ蕩X`e}~'?(NOcvRNm8nJ7_EͮyhYT$ŨX-tn8I`R[ y^YY;ߝxm/˯E)?WҪ^WEG*%Y_;㎟C 6d`?xʎ$$PFiV!;\XZM֟]CeGW9j` gۨQ$rx: ڌr^qNI4*_,h/e; ڶW9)LzS}$S*XkHpa-@e /#ʚ2Ҋ8ȎMP_6!ͨM+qУ+jy?śjOʔdف+`ڈeb5AU=Ij}C'jwq&+b$&1DIƯy* Va/~7U hi8q;JċZ!A*r8,9Iz '()jV†b4gQ'@ѳ~%E #4m{zA^VR|jVҐ)Ee%ngg n:$i', ~HIY!b:WLdMDTϤ?sW5-`zFok֢g0RZ95Ay`TFmZ3Ug}!]A25^~vw?%MA*urIH˜XG2I;5 lN;XjU4AbW5!~FClN QżRISq?=T4j V=xL 6'hr7:+; Ճ*n0$YY =U-\Fx)o|)SRi܉/9zTK1y&ٝNm( W1aIW-VFU٩~1"2J>S㶾̨\j[t^:cfG$_孷6BV-iHdYAZUY7$O%7<6dWݤsg e-+Qю5b%a*U'Mz"HU˼=j~JFܥj-: c<tqE cTT?-Yr+~lF"N.^[xs0UN~,jIy}V4SUאpKmb;jia$톲'y}YDdA~(tqؙw ]UK<H4ɣX8Z)EU{RWː 2ЎZŊsve6ʦ@-2fS!Z_Ϫ-5N5&OBUWPy%Xaj 3b⛽T8f^sQSNs;GUKij#*f&CĵwcnSy\ePu$!VTkoڳ Ss#O;4bi0?h1| ? ̋$S|i(2X=n)V'[n \Gdt8 ᢪIs,JtH^,E3'aUl=/V^dS|d1|@ jijTS6ǾMRemTEM3 >$?ٙʔ|ڊ*7l8Լ8?0"%S(բmV-Uh8'\EKZѨ s8;R,FZ[WGxp?#`3)P԰Szi+vRT-ɘT"gy ZR{Dك#ŃC.mS]Q꛿&E!b%!:mzND}d ZXrLPM̾LuRUI!D g1eF6&VF)iX!r<[?;y^~PrU͊)ՠ! f:d:Ō^=bF?0 S_i$'~q'UyEr ijIOa!@Oc{S׶$o=! g֌4xSֆCW)L u+~lDb2ej)M0~?:$-$Dj:JۥLmeԾ!T EPoiE>)aja͂ \i̐Ymjl9RMEb/[v3*<ċa ɨF\ŝZ$. Q !"fT9f<{4Jٱ~Tz* RX˶jYPۛZTY"RI;4`ؽ.ګ^o jYo NO{=6U%G]NvjW)`gV;dW5cSjqN2I"FWU$"sY7m;XL_,aYQF80Q+"BhT\˴TKghz0pK]HTXTR*TSq6~ u YGb61NdX/RU ݩKˑf/cΝs6%U5#=sif+]C$$yw E%\(۰ԮP/Y3<`, 61mɓ|KGt["3=DES+DFͬ=UXV-IdC󏕛H,pR=VNQSjlT Ւυ=%KyCBuH}Ū}*a_zֆ"2ڑVgoƟASjbSE- u*"Ś c#^ Ԫƪ%6,#0@)DrςNQ-CND"uVlꤡLmYVso 51l T6<ȍZR@.8"%RfᒺKsyohXˆOx=jC w!tRdSx/Ee2T ;W-ų0CG[ٶD}dZe}Z}tVSųmS-A%[,(N1'x!_AQ.7 #5 :ߨU}EU!=&6Dk~lS>\Y8EvVEh[cL;P֮E4_0z t1ԗ tnnX(i.T #DŽ (b[1I;LeOg6΄TR-dp!~쉹Av$i,? -W6WX0E<6 lGQ$muTs ygHFJ}1HdVLb`L ǐͩjݎTȨnnF0/\RxJk~;\l:g !=+۾H#p`g=v7*QS)f,V"(3SpeS{4-S̫?ښ$[^COE4f96!{cjxݨMK`{?_ﰜQ֙ވ;%=d WX"k3U/.Lg@%De,zk V_LGԳA{`%3 ӣS\K.`$|=l‹xfxf`#=@C'Pճn3t%{n^X D%HMޙKῠ ?KCA8~S'V1v?m+B㈃oSOAŴUYcm5 s_#R`yÎX!Zb c韦fxO5CfPЛx+0Aj/[ѰLv{^/cN<ڨ[[g6` BWO&m|vޯC.a}-maŐwxx:eF=?REM/W vG٠Mo[0@D-IENDB`auto/07p/doc/include/floquet.png0000640000175000017500000013637213570013207014633 0ustar skskPNG  IHDRLD pHYs M MέNtEXtSoftwareGNU Ghostscript 7.05BC IDATxyt[7؉;N;+g8JVBRR: tO;O:LaO2C42-: rBn%o"q{%Jr~N>WײnD%O<~^կ~-M߾-%_p7>/WFk^>ǧ}lAq?Wz?~!~d"ya y ""yDDǏ))O!"&!Jܬ䄄h"lmmmjj^L\!&FGde4WDGʑvr`\lO\尣?^VM*&p-/ɮaI*derLIs}=-U{S&qe+_ZesFjiLs=M\ a*wo_W).++;k&;3+LJ[휩\~+wZleO5/;Uޜ('sl*M+3\egك/v5}:'{p'sgʆeռYj~~h_}pv:+>+k?U^\T8Uּx_dlWYyݥ2e\reօ|iblZV.tՖ ]eS[ʛW5+ϭ^*o-g,*W]*W[*^ϕW7,C%Jˆk?s:> ¨xctt4&&`̙~d??A)6řL(Ƙ%c2X7 QQQ0$ŎJ0:3,GGbGPܤIr1)>~Y NaeBB +R9<4lg?99e`P*RRSβ755v[Zzz߀T:=}CR9=%cjo?+22rs괬^옖ʾ]6M޶93X9`kɝ*g̘mʞm]R4sV~[n9uowìV}] t 8˺¹βpμ&gY3gނ~쨙;oauܞ?Vg~{-}Rf]pVY-^Z,/Y^֛.iKhsח-_uY6_[rzjb՚[=Rtu:ljZW^jtu7~fmnW*֮xTv4T߰.*+>ڰʭNlмqe++?ظyjldRY~IOn-[w~|C*[t.ܺcwvζ{.9˖l߱5gy}JwT6[+w>6gi{=\ʦ;x2+˭RyT68'-RyCT6\8xw_eK(QDgp?>sZk[~ ቈA)\Og!W_Y`!* m}d2)0:- Mx?uJC_{9ar'dꄗJx7d^7UN^Ǵ,YΑ'<>L_l/ /v!fxMxs oׄK»k>-ZLޒe+|Hx+ oHV^њ fE»zK*>4o,7_[M%y,ᕔzMx#]r^'<vݲ{,w/ 3{N7J(\3]p~4[+M1Е< 1fČx7 bSӟӣs=^'^xiӦY,iӦ577G(}_>藿eAޥ7MD#CUH<Ĉ oќuKM-_e?OccA^*R'Ln*Ox !#&Ay__rr R /5U}Kx}#Kx'&^'u7 o"6l oˇ'U%}ɻw>%< ڢDr%T~fg]O͙f8X_ ohLxc>g 3DYqE_}p~ti˴D,&ǏO<瞭s3?UDpW_ʙtuwZͿvѤAЊp 2]sG |K-jOx|›!KxS /K“M1͘!Ox3 /Ox3g:yIx R$^򚮮X%Oxު|[ڷڮStoHxܠ U~W1-oKsk^%&i=wPޥ% rKߡ EF>y^syzsObi}?яx {LqǏmU%ŭ^'+;_TEE:,}[_ȡ }f핳u'pudžGӚ컦eʙ(?.WRk緟?Ԕ‹ay/+^ ^ ) !_x'A‹A < /iyA‹E<^<^^ʧ^ʧ &_xa'y'y//Oj'.y/Ov^t^t^t^^^<^|E|Z^|E|E|E|Er,5Wg=,5W߻5-湽.qu5ݔ 6ݨ琫KFCx/]>QDҷC*3^-ƚظxq1+''?äD# Oٓ&N8#*ED_hQKLDJSWF읭]D4<gi]rum^Y*{;n\W*oZNTگ.Zw`[k׳{{ۯ^VmW׬+6XvU^^W^*{Z/o0oY#-nXr͟lؼFTv7l޼zmXZTv5]T.lh֝Wnv],>زn,ݹSkTֿuOegv*=m}RYvԾs|gރnHe{;w|{C^;kRvr??sj|߿"ߺ/o?x޻JeJ(QX?zYk]'0dKLJ4Ec\ħ &<==RӫS^xA1Dk2?v7>ε?p %"x@wBs7ijd"jh|`(u7g2MHDo׼څsR~XigdM&9wib3F)(" 8\>eʀC*32β/=c:u`)YYvVddg H吽;gzNw]6gț,;f˙kϟece[6TJk),lw;暢uܽ7kl`eOuko7ڤo5Hew˵ =R|\U^1o,ʮ˛6n*?ݴflts֛5Rqɖ7jYt;*ݶmgYi]WowIeG۶,;>ھ+w~}+~}^V~s׾ˮ]>)5}STռ{=T;;w7;_?T,[oK7X΁{躳=|ip>,+Zy?%J1v罝:?A[kvvNPtkΜ9C=tw+2"ͅ{L_=%4 g?# (GEEODD-=##lb8Θ;5Z!Mx~ܽ˖Cj|\p_ݲX9[|j1JՍmYHq1C;ֻ۫շH\5k뚝e5뚤r˺næڦ>V/T wysƒ F[ryS-:KJo;f.kJY]%;mR~us:V^޲uZgvtۮ5=rםe_vvl۹mV~}jWnu;K;vKsي%J>Sfu-fbbHGD/:#).&9#~ۄ'/|mBkݎXNEDbLwk!ظg3v }o$~b"zoM&[PZj兩o]7{vnʽ[Gޱ^v??>|Rl kCi49!!Lb3M#ɉ QDNMJQԔdt |::"&rH_ILKOvÂTfLb=##cUdff9HnK˚尳7{Z>"CR) N>+ ٦gL˞ܜ\9#7Y:fQGWY}}\,GfζI`G,w*豹ʂ=h/(,rxp^_Ι,[ ʡw:ym?o޻\ermƅ s]ZRp]˛YikXxESX:luKKW6H堭vՍ-RSlfW|EQ}Yr\[,Z;Vkt]V^ϗE:ˁ.k^)i5k6ީwkn͗6ޮs7׭tUXaZTذZÕgymy++ڮ7my%J(,ۮ߰V3TP0g>%^RKKcS29*2n_;v!tQO]^{Bc2 {x14rݛ_g̘5eZz|ߗ6_zYm]/ '3077xeΡ11QGYڳ -9>·/?zuS$-Oז:VFcrd(6n6^F&MIآG|d#~2_Ne-kv4hXvΘ\c56DZۚg̜VmMy3{OS,E9SZ+cn_,gn̒ې_,f.lfrgq-Quڥe7]ustruΙ3-묝3o~cf=w_X%J*鹳JGat$*:Fʿ?k{{;H/Kx޽{"#߿z"xzTTԗe"/~""z ?4Vtk‹.=Ɩ}A۬ GEG?N7KIjjoܶ'ȟ5{6ܸqU5k\pFdN͚7oaLlloUՇv n weSFGGFc˘Qv a46&fUĺёX˸8*q& ;Pܤx4)~Y  W:&sSY6Fpp!5!aUR'$!{bRࠧr 1)/?))/RXOQɩvgvte_JJLMp`_Joojjz?+{SӼiiͱݖ.)S\eOnS{ϔ^F=%cj/2#c/3XΘʘ:/`=85UVvN ˬgwfeew{,;wx*۳sr:mQDr+c4::2+ Du߳l~g}/^4զ_o2^zp_$ybmK[?m &I{e4QQQ(G]Htt2&zd/]CptL,wuؘa/elpl,wpl^ʡظ8e\ܤ!T^:\sL򥌟V;.'ɓ]c'O Li<9r>9U $$$A211.+: $&%]eRz1̗I.QDrdh 1!>~= Gİ_/;#ݻ7\Of7bbcc}}~sZ_FkGbџ+kr.dRߥ@dX V*e*XQ&/R2:*a4htLFG+zU IDATC9LX& z)2&&qrLp_DeJIK7IKH}xq?䉧H'N{\B֒l]v/#b~_ŧ Л y+z~zZZZ.zM bQ^^}qBÍDTUUk׮ŃVk88ydQQxT"B@B@y! !D fc2|iX<ӽa/i@0n[k6Yꇑ?=y;#2R% Wp0Jck>1x ZkC}}w /y--[OȿOpmu(UTosZu{k6/?!Op!9 %hK4RǾ`nwmK7Z-ngט1ۦ'x^wb5K?<;TZNY~MM3\E(%z`gWsY| >yu9L'$P7n_nL;*[>sr٧00 &zFܞA=S `K<56E0Z5fkO5AU^^}vGUyut)mЧ'O>|v9y!^.'(|K=8» ly! !DՊi "??*P9ydXr YȳZ>`Z`Dn }i+𤺺Zqŋ2@%9`WpA z+_vzx{(bL5 Hǰ[0 zqȰw^c\L( ~3[fg[>lϻ=\lՅɛ_:t(+Kŀ8@^(DA|}վ> P2L_JӶ8VZcR ,^|<~ރg掎"Ex@%Mk21f!߳XU .mR$<MXo-Tv?<`r… !V!XQKu_TZ`-|ɓ!Fb)F^7POd1y_p?Δؐ7::JDQQXz?5*Q/8 gQpʧ_z֧tMBݓcl6o>}VTTL4裏I0?N:EDr222{「" ZX2bAi}#:3O=o:5΅ϠtCA0gP8Dt=h<>Ï~!vBBB^^ڵkLBD}Qbb4IqNP+GB?ڹ"v=Ѝ'ٷFo0[v{TA V5>狵A<[>^g͚EDs=}+W.\o߾_җz{{|͖M6gҥK.]l˖-[lAKK盚؟_WU8pӧoT33=؟3/d-O?Fa²[8>p)B;t+W׳# ͚5kÆ CCCZyy%}[oUPPs΋/?~tttŊb ?%''?~=@Q&R|G骻&תg۷۷O1C^bb" !/55u===### yA""ٜR\\\]]]UU|ꁁEQtt6DqoX& p=* 19J@:؀˜+n~ٳ^Sܻw{dm6%&&#oFzzz__99׿bCfAm6[JJA#"&ngkgw) C)XSSoLc^?`qO'Nд>E/hݯx#0's6=Lگ{`=|WBѣ!Hc‹#/zzx) AN{,Y"g` `rr2BD@叫Zltj;~g>#RSBBE? #9xCkkŋbcc_.BAA^LdmVk4;j %ޏؙn<{KիE]x#O$|p8VXb |Ldafy vgiG˚Ax=iB^bb;}+>e/L}<4Ɏ 6&\]^ ~w-#/+67!w7-5 q^]_zccx0@ЩÇ}ue^ݿ݉*2zO[6iF<෠<+&":x 71gv+{O1ǀ' ycȞ2KQoe+J;} Ad!/x`A@|S\I<\[@x` @$y't梢" /׭_K\s;@4pm`G1M ྗaPb.@g}< }>+J;} &<VĘMR? dГǎ Z>[UZ%MpCZ>[zpرGy$s~NLx)8zc&?. b9m6/'͕%8a]!߶Y,fsCO?^ *O>Bgz|**ЏcǎMX͕VOW:Tˁ9y!湫gWOS3{<83RR+((Z߫)9OLx+ifX{,KOqZ s)J;} iViV(gr巾i@-:|ff+ﴚU'9L?מyJx4fs\(vUZ,f9st;x=y:p8t8N8CVBg s*dǎ{ę0y y#sG*jb#my[] `Bq O$ωiϿ58)X,(]Xqx?򲳳əyZCj6T^ w<0X;vY}ž9N>yڡUUEyyy,)ٳgêcmN^@i.Ĵo})@ƼpEfddC׳544ГПƥw+niW999ƻvw@g**΄ nBg&2A7QC{|s8OI02L#^L<%96o,s[PO9xQx#ǽgSKKKy|be2 {3xxGDfٳ3gq֊yN}WƛSJ;}j}3ĄW'}WhvlU(2:iCG!go߾WSS⨨WVTTQmmx ycGXSé ]^^?byGΝ;'漲2"---S]EEEii/069d\m}b)))s߈#BQsnyM 3c}**쓧Z>[TQ s;sjZq'ķkKSú v^jNx'o`Kj3^OxYoDft^jɅ g}m۶Gy6G<~ܹs?/))ٶmOtӓw ղƕbV)mj#%%%QGA}*٪-K{=O>؄ N0HwLII c|7gZ|As=@ċxGzꩧzsb藡WΆQCCB w!",4rrrVNUU'O;J;}j'Aw6"Гa^]9r$-//W4^ODŠDI:3yDOb+i$<,ƄIS\l3^O>BgJK n R,Kx>N*:dOZ/@R\>$-0d1@/0'/" Bz9/dtl6x!ONUU'O`J8U`!D0S: ߍ @۩h<4>R;<Gwte,M<99x!ONUU'O;J;J(GGQw lC@pqD,dc)MLxWZZZZZjX4@(w9O=Kܬ;tiĂ7aw={T0JKK~\^x!ONUU'O;J ç<943gΌ3#%%%ODD?0w>x!o) Hx[H (77pӦM!4㰞6Iq\ -~N͜9Ο?kCO!({>cSrrp+'''''ϟo:!ؓ}xhvlUi2ܭP{ViV ? kΚ5y,:!Г`  ]V}fz'`A@sH'ƻ|;>!@"w߽iӦO/މ'ߠUUgt*}Whvi]uyz)8lEED ym:7 ⹍qv ^/|L?#x' W+'Ɔ""zt8*_U[7^UiiU_p(K\ixݖV]V@xn[!Z;PZ<~yvޖR=2 BxyYcxn Dt Ӂy}v xbJPۣi.=?WϕGcKxɾ=}@Ì<ͭq-KǛf7.珄8aH{@< ya9!&߫ ު1^X8R"_U y)| /}~tx<-=M;\A4.=<1`y,CKWUҿ{>'UU[|z<[U|&`*-?_ ®.+Ys¯(ןW1^="[cu+mҍ\ <9z7DŽZyJrHx0nb㶞zb眧&+vpԞZ>[}p{ViVt08bFQC;[<Bjm'uJp-,<ZY0rs Z>[UZb w+^UUvWk;䥋ѿbn^x!wKiat[%" #[}Cg N{ʶdJU)WHo!NȮ{:'O ou>'dE IDATUU[7^UUFG k' D9Ӗ'Oyg<&ViVUT w{ViV<0=Q>,ya`6[>vͷ'Οay&&<Ѽyׯ?ƛ}**쓧Z>[a'ww__=yƺDvv.YBc?! <g_ߢ=y:s3p--YB6ϖ͟O?Jʤ#Lgο ydĐ}**쓧Z>[z$ƻiNr弳g򞊊"Ő yFw}4mڞDD'=1m޼弒"eD{<P+++[nwCS{eeeb;{,-/=l@O@[.33333S}WYYJJJ+7s)J;}tRV(Bg 233~n nOә+nvq2@O@HIDsM nm+9S\O! RRRwӵSZ~zz)))1Ls;[nyBw!t؊9oϞ=bgJIIikk* yw N>yڡUUveeeMV__~ӵwj_[SaO/ZqJ "jjj3☌BISrݞ<_g_{Dd\r^g}xr]uWۛher^{e^ou-@IQ,GA`7T?msBc9og\< $oX2w=-!%0_|&9Rgwjm_ȼx~"dDFDsZ[NMgj?B>BgOvhvlʧ6>)%K]6+,vlun"jmg:5m{ׯ?%BL{SX„d ^n.NDYYLj;BZ+q\- G*T8nI|9?S71͟0^8鸹X,Ńb"r;\kzp\!9}xŢM yChv!kvTVQqMsf39~; x+C1n~3^Χlfb1ͮWz?ſCD:ydh^!"ꊴZ=z4d IK|QD=ȑ#8myy/s Z]`[t5}&w0P*=ZTT8:}BHg1Y ?<0(D= -2 Џp77a OfYBycL|  tx=yw n<2<'oJns}0 H\x=y` bs^PY*-b $<*1WK|z.Ba R!AP G*ͧ}yywFOx"oLb A0yxNY‹< "{d3:x<|3Lx<<CCƒb8NJxf_Ȉ!p nUڍ٪$3|99Ϡ@ 4 5}R3Rԟ7΄Gy+*ቐ b-,z9}z< ZV7`yjn; i!4gՙյ$<gΓa}z.!Nx:yxb3fX"^, DAƒ0(-c}*V/1<@Aƒa$XN !F?xyabo7wƁvмB4J;} Z .ح:ǻ}ʻN+Pד ~p0Bѣ!{-< Bn&I7z<9kWǸ pO<ÆJEjCƒ9rH0N[^^>_,۝8,8+NmNz,OPIx#N"h%"^e] 24$<0G#l}'DDY,&"{t e]qnâ ]gܴzV5g2x!OnE\\"KKX,^&Glus&1V1N݇Y /1mTDX|u^1QMS9۠CXN x!`r;J" ca*B1]P+>1-_E=uDM2dC]1́B~}DDՅ"1U=7.)t oJٷNixC8c%Y?2a*l"Zj6S o_sH.g=yGTL6cO|zHxCf>]U1r]iv49#YY/awRZ^w=z>?@(u(=o˟+㡙*(.t`cM2o{Uˈ.Q2ø oGΨ$[6ZMj-X^K/l>H=g+y0VB(y+`'&?=Oyj} Wݫ'R=D6|#e֥Wl0.={fLJ؟GDX-q 3u2,c 6X,3 &Ŵ&fanvۮ> EұǢ)`3ϖmElk=dkoņ9G&g(HxO,}LJ,EE1g9Be-Ut):\!­g$z oSw{' ( n4-[D.=h@Xp𕒳Ua yE}zf6C<~9-GMmPCwF(?Elg= = }Z O{sAe`X':qXv ""6z{5zK.jqB= gXfNl(An<_E@ʉMn(>V~5o=3jF)qnрهxCS[hl;Vx>tm"Ykq93B _^5VJskA7ltr":e7"kņUIDdf"%!W`$<04cax!O0اk *c^fH'$iybm<<-Po6Xs{a4{KO\`XFK̅Aƒ0; y^v%P}agnoU)yv؟>}^ii2"Ҷ72OmdQOm4zKDRQt鉝y'& Vd&/M^q(joF;x!O?ViVn w{ViVIy<%?(v;f'脻U\Q鄻GD>P.=Rmo ^%U%KD\LDdK"&8""/B07hK{cv1l;\Q<⢞"7z+d7;'Hϴ={]K1U6mHQo_e5cL@y6z '+" d{lWa;$+RsbO+wkwDqgc9{T:Y*ou+8 ѥ-SmB-&%i SHr"E^ͽ Q6JtP&M\4pvku$3ϼ3 gwN9*>g!rYsw${#h/Ep *7٪zG&^ѼWl<'.Bwž ^+W-&ge܏z@U>ᜇuer-<;^GX츻x8_ȣiby3rEA! Mu,WH6-'Pb䊢@tfEB8J^D^UJD\vvN{zyÌM'a.Y5ꙗ9h|$]C^7x*BljBטȮ%G&~!y`ڕH6v<-I.簮H{9:XQŁ:&,)e'WSo s= "Ƀ<~ yDD1y>;Ն6Zr^?Ozj)9i$Zz5[tk ,t9(\hh-WR.mu|sM/</򵓼9Oب;o {vio:ɛ5`[IKKQQOO?P[9O_#WoTrL #12hh硿N2:r|M[C&u&NݷbNЌJ2w6,G9'aMhi)j|g}g'ջMSn;$ViW#<!SBM+Q̛t+&e<6cDې{虈JyiϰHqe *+QӢeΫ'rݡ)^?O7Plw;)4NE <\jn1QlqLE(MwK$)@ Ϻ\r\-gp[6癉\ "*GU@Abx|^ TP9tO΃x_'E?X[WկWΣiÐGQ49 MвeUO|0D3G=}ԫbD1d:oŢ*Oފy<-5aP1伥vJ*}6N]j 'aT_w-͈@}u4Ny]}o:M6EC߇kocT?3C*Ʈ[1UL5, XO/Mi;CHqpMUfעx IDATd5@ĽU$1Dr,j*>];Wm;v- Vx~n瞉z0`Z?YyJz, ?mg-XrH6V }3<9bpCwIwjCÜ:>Ow d}]uf iP#yy[쮥K-]MOmռsWyK\o mXuE[xEc~~V%=E1>ٶTKC0ꉿ<@ʨS,B9?M_̃yVՅ9Jr#[ݫ˃#~!oZW lJK]r:ycvz3y*`pjҞ9>\\%`#r^{ɢ֜ t 1VD9/jׯV;m[h-; yDiϰ]T *&r;!%j0/7H{yQC(ʢd[]8xIYZA`8F Xׯ/D6NjoA3dvw;]MG}dU)M`]3/l9?wu#1@C]?.VbQZ%=-༒.eKU"vJ9hH%45QT2Y:NɶGj#A7DO?>OTrbo+@kEi:J:R(`#"9O2A7='r2ƜSkQO#r 9O5ج zo7yv}Yf'+ZJ6L@7as "$~ݵDQ_pX0eu,Q|ʭV90V9og6O5jS1(~F1< @acttEUzz-vrۨvZNr5Z*~Aa7`܈fܮ7T{V*LvПukh8*c-Y]E EC3D]qa~AQGD4;l0.Yn- е~myz_YiOCƒ=ɜusiFhhQ @(J5-R1M ƀU׭e$ ch`*ƅWQ/}U20H 6D[C{N鴽F"NԛuĹV*Rt1M?o M`g6pvUm`X}x߮5E=JPKz0E=[O9Oʹ]ਁpţ,Q /Ep *7*G4[%T캵42= X7uk7cc }8VV˥>ܕUjIgvݎyz9Oik=y(X3"te<@?mk8Mdw0bGsXPK]9I]9??M4ggVԨF6kmB3=E| 42⁶M4EndnB$?b#"q<s%Fv 'iOXo̭7Uo;u@-eGǐGD?cu5CVt|{ 5WQRl }Ӣyy[-~rj^>:j6v AͰrk7"!(<QmI0ցiw!;4tOzۛjfjQORy(굗y;Y,KHP"*9wrv ƢR&챥(_ȋUnDUwI7B4[%/Vyuyy9[2>Ev0({oEIPG,n&˝ vu.WWs=q yDD[׭ :ړ+VӢ'%=R0@;PżJQ-ճpYݣVyÏ%<"x`ے[!zȜ9OɝakQO9O]-AΛB*hQ'fP坻CE CQi9JzaT׭uj QϮV۪`N2~OGD1Ocİ'^P/]~}MVɋfyI7B4[%o̭sI/['n3_ Qog\Ia7u+r>uơDo(j1O̴Pvr 6-L yDD`l%=V2ߌ"!(<XެS+9OQcyX9D3HKz% y7l<'T<vj سS+&355;k):b@z۱=VfNiԷQzçWs^_k˙ ō:Σ}YIjDLc("bco!='C&7Pr0h燢hsVfΡҾD1ߔirXNІנҏ}ׯG=.h\N!r9&dZ<4 p3'Cd9/X$tķQ[BU-KWUC AO-^P/vnޱ`|el;=^3{ ߏu[袞[mXGf^Ao>_oWEWϺm)Ey@QݫQVRJFF-%;Gvyf޲oNs2&5PÄ |HEn:J/13 ^Zܬ^Rbl:IDJQV-yDaiUO뽅tUCIlz}DvgnZ XB* [X߭ f{R[ˆglhG\j<.7V0E=E==oԱm [6RBX/WJ.5WZ.*Ҫ+K| RF'vDXϣI_#?C,tY~[|D=Qnۇdm.;b3@mtQ[ٝBnרoev uOZKz@pb%_E d&׻Lx yD1Qtm/>xn8[q+oަbBOE 7UrU\@Ṁ~hF}ٝz}[=\-4-֩۬RЪ+Yey|Mdg\%"/k;'?7 2vY۴ ɨ.Ŋf-_ikTvݦҪ+*vJתoQRa7`܈f>pE4[%6kIE7RgN7}Ǎ)DtDCbɻ&r 73Ci<9OY-'#\ VA}#Y6IY6jٝvP( E*{@,L%WE5_k7rLM-CoƏ! $DŽG!7w~<\ƍzp?\/٭m7(=P,gwJkuc4W>P6GFT>$W hRb1}^:w+W'G>=Q>/'+ w=mt P{RXF)Եu<@bs>PldFq9Si5s`+sMDBWÒVsNxD^UBj]WgGвgbQiZRW0VTHy- ڞbv; IDAT^}c4ZE=RTzUM./lޓGGO\*WsպnXH_";YٷVvOr2*nE6y,jjbQ <<"ӢÜzzudQ5=Lm"m̃H쎢Nă12%++Yg+Vo9n0D0ŞXioG *a(.ƫwXom cQ- UۛGmS} B :m; P7bf( #[m5- K"k9hl"8ll]wc`ҭ0b䍳U+I[ea ;om6LC+a`=E+ %S(U"z̮ҸfNW†.bGAc1#~!|D= <*% q tj^?wzajK˹R9⤍ǔ۔|O/W啡/:mh򈈢k' *n#iga/:迖z2JHvRmtK|{+V? V,1RPZ2gƕj 2Q򈈢k <='*yŋ _+G\z-A}%[0wso yX0RVWv.u `(-v.L_țհ|bqTj+UJs du4ө1ӊy2*%1V-urA.Yy?so|i6g`*~!>i[&ڢg=<%4 PslI+`^wR-(-j{/Q38JV ĐGDQ1z(TCp=#^ohdE2JlP_])-$ݶOy\^xEc3*`F)~[E(%2[E$J@=cnM@B޴JɓV*'gC@k  |j%. (Z ೚~(տB^E[Ű豵q&-~!hv^.imrq؄:o:(2*.r-g`Q8"Mvn^QOCaϼ׫4W6 ˫o Smo @žXٰ\^_c̆uY>GD!@! `dmO؊T~_~m]+ }U#t Mᵜ{A[F4[uUBjwyX:s5з[`h(i%=c([y~}_#""xzUW`;s5aOtoV>[_haybf)쫥0Ř) 72hol6!ē/H)T27&r!($໰agjӞo 61(_%ݒzE)k.T$<(< yӺV*y\'O[%OQOER =!\վƺfA~zl T%mYv\I)Da_#")ZiO2 ؃)2K[YV<08<2OLGFݸ&Ao쮥01ŃwQO`&~a)^حghr*~1l;tJ#k OҶ3j(l yDDqzp<4EXЊ|1>n@̹ OW_eTJ]ZmHxGca7`܈fNR{n`7ٞ\Ps-`[`02ri@} sWh~r;n]|e"rxV {r=oy`,_oS@xhE}zihu50Ua)]y~zuK裰hRF32QՍ 7qoyܱkۘ9$QCYP/Ep *7*u&y*ychrrB[F]s/Z;pE@B8J}ܓ+Dȧ6t:hlj~r4i yDpoYbGɡܓ+|i|tZV+8.EC(=,Z&=$gneC?X;(bH;=g-;u[s8W9A]XHc#"+˞\x |])9슫JuBDpwa yDDu|'>.aT [z(nQYȋ_ȋUnDUMJ4[%ybfoh~?^I ]MBl 6!-19wayRq9E%t!(~> E>=W ➈`'0Q|1E?;4o6z |p|~|aD@2.YbTG#~!oFV [%:y{V*gsCp~"/J[hPKv4}f|9Oc缧[U4DŽ2)ŐGD'[(g_@h0"nvc柡aa7`܈fNяe/馛]O[!W7x眳y5Wr#M<"YO}SaK|WD@t:w|D昿o})-gp^' <"vEÖ7 CU:{~N|ư^|a7Rd2s df]B^݀r#:y*ylHwJa//?{'xы^Gl9KK*~!_WU{󻻻bb /3|3ow(esL4eȣx_ki=yoo]tIL}~'?~W쬯<~c4 yDD>{}s>gG>1׮]{ꩧo3MCEW|+{o&W7|>2}//lQJ.A5ɳhpaEU\'O[%/o=ye/曯]oow?O6 2~a^5i<򈈈,}g?k|ŋ|+^xᩧַW gb/-ĐGDD쓟'?I??x^'&͉Gdw0?W5) yDD4sOPQ??CvI=::?ӑ}vk>s gׯk_ǻp;#j߉B{}:S|C2l_ٟ}ᇓٳg>O>'> nn{]h<~r;{޾`㯭{gbJ[W_emgk=y_g^~g>wDfY> OBQt9<]=h,xXQa#M2v9F2~W~g~g~nٳ7nx?ß_~{^Axa#""/}K_җ w__vi%}!uHa#""/~_'Yۋ<"!w%# yDGf#1VrÉ"!hq,x8!(gq\l7&"""" Cb#"""BwO DD{ο򖷌1D4bI7ȗW:*h&]zuM "ʈhl8&h 1M!<""")ĐGDDD4򈈈Plf׎ښb? !"""`CLvekkkλjmu5C{*d?e yXEJP-M ybI!O=,1ϴo<]22o?r2 ZY9+dOD31&/JT [A]>k'?J@Ʌ)5У>, LxzKφj(չTew( lWU84ڵ [O""g3$;pFS L28cv,f,e:ͯ2Ў;b= g9B E 8r.ȏɓ8w>w2ݍ4_/9CĴ JDLǻ s%"31"5a{<5}<|r+v oYG9|nZ sW͔ǥٍTa'\G kgy!2톚MN7 wVei*i4?Ȗ8_䵛[ˉDD=⫽T*i<:ԶqOu˝qnonn_}V|[DDA V< o#,4cb*.Q&.$")ŴF}$"JE>#Y~u:Wֆ9iBW[ 1s{,MM1*Qze-Qxx76!oii~=ߒG+kC2[DZ,];!7ȟgW[nŐG48&(7`Wt-6$؃Nj狚ʻAD4A31&hְgZ)Z""'lةǹ"sNΫ?>2Ca3&8>)53?˘mw-mĠ[0@D7!Kyi\>kSsn2p[g$f<f1k,1ly]޵̻ogd{dX~kw($31&/߿(2#};|w!ݟޥ¸ov/ JY'S%yn\nss>Zxv8&?DDzS]k"@U,vWd0xv§j޵('Sf g8jwH3C!/(n'9PnG9 #^.p?">fSs7|iQa9Y JVU ;Qy_DD4cl#f[`3>+0٣)U[Ϟ ;ކ:D=#X{is7&ej+yqH#bZ*,1w?.߰A۬?N\ݫ~mA?ύ)s.{]aH^s7&b'_RN'''9m>VC=1;"*妆狚ʻn)r'''S[,7`Wt-|U5whfbLѬa%(ݵd'^Z""Ț'9m9+͓a˻v/c9r<72 ᖚ%q~C=YF^oˠllI@D4!yƜۃOWL$n8>? 2)v%1{"}dPoJH0moE1c׮e52y8|uʲ=-΍`y85<-vhYJ{U,y5U9s‹# ϹN< 7Y==8f_ 1C!/^@'Cn_2P2=Σ`3?ȸf)f-):`z'g0;bd*&x7C!/(=F\Q} {{8 o7SfLaa<8C}&xǐ71c(lP,HM3v-7jyE djAO{cjkfG mcPHܣ*ϲkRUZ3`Uo9JOZ9W߻AD`B^6&Gm#_LfBx;jxʄ~bx&x7Ð71V\3HMp]t/'"AxÜy45iم H-1KDD2}؏Tsuq-4*]ܽ%|O=c}ˌ'(s.ۻ-%O7'MJG^2a"JsO>joo/JtՅ]6ܘ #2$a7*55w-#'"" Rx̿=NNNYPo?8[$P//j*Ę<"""YJQLkNDDD5!OsrW2;DKxbR-M2ώO9/dc>K,yC5v$,'_`($ yu5g-3Tݤ.>޶8|ɼ閧1ϭ]sPs<:o=2?4@HAk&>۽2gOU *!SSm\T8,c~pY\G!"L#G ]Z Me58d>㵪ϳK' a'<%S \~CDJAK6%/7k/NrNdy#1y j,o ^,GrQ #},]&9嵻j͸0lDqwk"aM#Y~K54Xn+Iʄ6A`v/{eyOS8Po8͸0lKxs1}O/quy zh:d'^r-|uh}ȣɏJćp~_t ;|KJb߬5Fs{=ud+y/~ы旽%vߍ!J1}-s2>m~I:Y^ o?<2Fv/F ­onB-[|dWEꇙ+5ORNkkkۿ [+^R/G,3:-p>;b)y77+#I|-oJދn&+O1JHB=xxQSydCٳg~;o-eɗ<6͔0tȻ&79hu]"""" %nӧo>c]"""" %n&gΜ*KJWa-w 3Otwȃ0kD79AAK:9W/.&"""FrN>WDDDDAAu;cU̐GDDDYAK5┧O:mun0JީS+岒w4+yDDDD #hɆuSv%""""ZBީ9<"""`CީSNLDDDD$#岒wԩ UOAD{W[5"%岒77g}+yw_ا " իW퍭1D)a-w!YիW'uj"WY #hɆ<+m^׿5h\w׾ᵯ.yFrWɛhd܅Sss:7!岒777J޹s|F"q a-׈h977wͬ}cnEEA+ݵG0x'"v2Wa-w~s0lț_oso4""""Zk4쮥)&_&"" \A]%ow⋑&(~(ͮ%f>"" [Ae%ܬѴb#"1#hɆ<׾'xB|}-DLx4fr{tsh܂ Zտ9ǒ@zw{d"Il [oot[hBZB0B?2$<""twmܞ(Dc-(.mA(R;9""];^J1d;_h Z*y~ʲ%T< !h\[a($-/OGDDDYAݘ\wZ/o'pk׮""I];CD`Њ;w~*o}khM#"o};_Os=4fEtC?px׼56H+sD4)P9;'pQKD_xD3+%];9'_X~7 77+yw7mqgz-Mll~m(v!$|(%Cs-\sSh!=8 T0@k:qdi{y#{WjkXF3ڝ1vŠ#huVVA+h3ݭbiLB@XqBeEB Ol߾{bGꬒwÙqo'#h yi !,!w| ZV,J@Z<.;!϶J ZCa!...h<4<v 8VgB4e@q!Ou!iYW(B#hy!0ZLJ@Xq!Occv ZAC^]ׅSS[[!@+q!iBgφ#~"4mBMj!j&Z 8VАWV#CC@ZACѴכفh?|jZACWZB^\|b؂V"y=Ѓy=(ݵĭJ@" B@" B@"eB@t!='R%,t5B^w?}zdhh0eL/d2T*NSt2JRɤ|%UUUUMl&c"96({T%(N[!Ku9ήq۶DZGm۶m-۶,q,Ӳ̝axnahiu]iv^*JjL,k+O_hcTJMX"J%fogT%g}kk|3?z4;1TU:ꔬ޹[,$DBV3{ KQssB-BdqbpΝYqdv۲W%=۶-˴Sӗ/ͦڞaozaa roVדZ@{rٍm2Xp?~ 9Y)?5`;FK=";\瞿p_XXv2;1##mˁB^sT pgҷ:FK S|~e=w?|t>7Eɶ7Z O{o.J>Bo\ɯY-`d 6\oO(\z5\G ]Y^^^ZZrJ %766BիȗD= Z[7IENDB`auto/07p/doc/include/cont_snh_all_par.eps0000640000175000017500000011754513570013207016465 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: -5 -12 544 429 %%HiResBoundingBox: -5.689977 -12.484975 543.310023 428.515025 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.00 0 %%Copyright: Copyright 1996-2004 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font BHADEJ+CMR12 %!FontType1-1.0: BHADEJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /BHADEJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 475 676] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32B2F2A11AA8625CB85C4 77A982EF5D4404C917CE65889BBB376BF501413117388A323B55321ECB74D1AB E972C198932773975CABB41D0EC9AEB36E76FD3DC57E2DEF9F06F87D5A8B1FF2 071F711D73CD121FE6DC7C86BFE234501EAE24CA8B4B32DB9C35522EC6876400 2670DBAF578D9AFD8A9FBBA2624D1F3BF5993F109220B774F1BC32CBF0DF3346 16E290B9C83A564C6FC59DAECD3A9594D3E0C6EF9E75AA0A31CE59C0A04AA53A 48FAD794B4F10A665876C531E40959348542747E503D420EE82306DC56D0D3BD 01A80ED5A841EB00CDC47829D82BBD3A238D30B61500E5AFF1198B9098BABE0F 390B6B1327A973D36B588F48DB01EE8ADA552F2C08466381C650FE6382170A5B E972A7E58712342282D5F871D3A2497E0E009E0726509B5E8446FC6ECC2D8FBE 2556DDFAE8063E52AA9D32C23F178A4CA2F121C5D393ECBA45255D8F3190B9F5 4F0E8243EB804F3269682A2BF64E37C0B4B9D791801AB15C7BDCD1EE1BE27E13 3C898E6D232440D076347CC434B918340B61E00593F1C01722CC948E6FCBD4A0 EFE43DA3D16DF1D7BEC9D2D9F319466934F1BF711353083C64B35AE8AF4D3783 931ADD2D7E89D7A2ACB68F9EEB68753FCF4A0F3B101CA9E5726895A0A9E709BA 5201C077DA30B2A9AACB952834BE77067C82474CF9E7F5A0200449B10CB551C2 F133439F98603F330FDA153E18358E45033403EB4CE391B5A6B3D7455CB4F83A 9D01B2A14557F030E64EC26FE6C58B3BE6C4B569DB09F04CB470E5E0CC37A3C1 C76189540D08EF26EF7367E95DC4385E766589D6F968B91F97AF7D88A1F83643 DE8C4082A6C3BABE7F118E8E8A46C1242FAC3AC9ABDFFE818968507E59447796 2E5FD09A29353397FA59ED661560D1FFD627A8B56C482E0FBAAF6B259D81BED7 1C1FD9F5D30EC36A131168579719CAFDF1A869B0BC98BE9C733349A34941BF14 23D1FF32F710F42BD66ECAF8E304BA0FEE099A984140C48CACAAD1F62E1D4858 DB1F8950D30C5F79F3FCA104BA545ED1B95E589228B1563266102D6E8E4E8BDD 73AA1F16EB6762FA6CA3EF87C8841F330C37CC30F383B2DAD7ADC739013D584E 0E9DB146873A324B0AB6BF329ACD4558EA742E23972534AE6649AC3AC1D16E24 A2CED953779503FF54F612460EA143AD3AB7D2D0916502CF1775298E025DF3B3 61DC8F5018BBBF869EA1E3055D3DADD25D5F0C5F482B0240A14F78D46A248CA4 B6E1202B1E6936ABA68DB8693B50FF501B6DE460C127DE7F02D3746D8128B4EB 9473C3D116546675EFB105B510DD08096C06D0D6578C1A1B0404610A44234285 18B664BF1594FF2DAC887048E4E3D057687329B42E169C8F79476F6F0DC59C61 B6C5327D26B3F5532B5F3C7A161399DAC705CF86B553528ACD498A9B5D37E25A EC063E267B815DE9A7EC8F16A5FFBA8F5F81C99CEDBBBCCB9733DC6B62D6B845 817DAED1C4DB22C8DA80427963F7C3004FAE20B110DA9FC8050A8145FA66D016 2418B8F2FD287C784A307C890B6042CBBE999497E466A8F50C50F3B61FAD0F60 213E7A7EC1958B8071FD94FBBDE426ADFB71287C18850BD947E247346DC677EF 89C2FDEA04C92628EA1128C19EED5B5F7CB6D7259AC52966478635ABC9F4F528 3ADB901CEC489F136EAB0B6DD01689F812A1A6369AA1021EC7361FCCC97D99F0 E2150100555F703763F8DDA2671277B03499831E4D0325CC250AF6E419939AC5 8ED96B81D520D159BD12811171138391C6C5F071389323530458D0E014B033E0 E701D4455B27AD381666D51909908EF4999FAAD6FE7A2F0BA981B14B6F1D9CD3 37515580E54333B88E1E685D05929ACC7E56DF929B72E41E6825DCEB5A93CAFF 3BA904040C35D5D4FE2C2909D640A68D0EFCDD3764ABEDDFA431D92E57FA3191 3C6EC99257780FF4F0B8E8397D1B3F66CCC34C42A317F775EDFAF625EAA28A48 F3C0B09D6B3DD1D10404690D760E353635204D01A7753BF3B7DB333EAF742D06 A097457A5BBEE0746959B980D06DAC31AD46EF7727E2CCC2885EF24927FE585A BCE6736C2E0FACA909B9DCF37AB635368DDDA96BBBA1AAE94D86012B1B2437BB 8D9ADC6BA60A349C12BF484F0F77BEACE440E7BE493DD52221673257D3652550 D43E3CAFE0BC90579DE992A74F0D4F038DA5B05638EDDBF93C7ECF0EB047287B 4B969D8310F3A1FED3CF1251F44D8E8829A2DA9A1A9ED2BF52B060E87768C080 51ED6FF454F31BC584BA685B8F655BF7984EDD1225E11E6C54E438F99FC52C61 A89CEE6CA3018A6BFDBBAF2D1E83280E8D1DA783AFE15C092765F364DABFC6B3 0B471FB2F47FA8E181B478E9715044523466C902A89B43E56FCCB8AC5B58E3D3 46B4E6BCEE0249004BA9BBC3D6F6E59242432BD5336D14073DFED09E0C054FDF 6A6CE11BDD049AE117049AED6CAB2D94ACFFE39E0D7322C740FAAD238A107C88 E24FB0223133910BBE16FFA0A55A6D43B083E5987DCEC7209DE3819692C207D0 1D11FB87AF8C2F546E043B3E3160971AF640C3E9FAF56C804334D99319F24A78 EA69E1EA3BBEB0590F2F8DF4099B7F2A12AC6BBA8928E829352FE0453A0DC226 EC9971F72A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /BHADEJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 720 360 4410 3690 re f q 720 360 4410 3690 re W 20 w /DeviceGray {} CS [0] SC 285.652 0 m 335.078 47.7305 l 490.148 196.484 l 642.578 341.09 l 791.992 480.418 l 937.852 613.051 l 1079.4 737.215 l 1215.61 850.77 l 1345.17 951.27 l 1466.5 1036.25 l 1578.06 1103.75 l 1678.75 1152.99 l 1768.44 1185.04 l 1848.24 1202.85 l 1920.36 1210.79 l 1987.72 1213.99 l 2053.5 1217.78 l 2120.76 1227.3 l 2192.05 1247.09 l 2269.09 1280.55 l 2352.48 1329.45 l 2441.78 1393.7 l 2535.81 1471.7 l 2633.11 1560.94 l 2732.22 1658.63 l 2831.8 1761.98 l 2930.61 1868.31 l 3027.48 1975 l 3121.18 2079.38 l 3210.35 2178.57 l 3293.42 2269.4 l 3368.52 2348.33 l 3433.61 2411.63 l 3486.72 2455.91 l 3526.44 2478.96 l 3552.53 2480.62 l 3566.13 2463.05 l 3569.53 2434.32 l 3566.31 2392.63 l 3558.3 2343.36 l 3548.49 2292.02 l 3539.91 2243.3 l 3535.59 2201.92 l 3535.5 2196.41 l 3539.64 2169.89 l 3554.05 2159.7 l 3580.42 2169.71 l 3618.96 2200.81 l 3668.34 2251.36 l 3726.21 2317.89 l 3789.96 2396.19 l 3857.07 2482.09 l 3925.29 2571.68 l 3992.49 2661.24 l 4056.63 2747.09 l 4115.55 2825.41 l 4166.96 2892.15 l 4208.56 2943.25 l 4238.27 2975.16 l 4254.81 2985.72 l 4258.51 2979.39 l 4252.93 2954.76 l 4237.05 2913.3 l 4213.37 2859.59 l 4184.55 2797.98 l 4153.19 2732.66 l 4121.85 2667.71 l 4093.15 2607.27 l 4069.84 2555.7 l 4054.79 2517.55 l 4050.52 2499.17 l 4056.77 2496.06 l 4076.4 2514.68 l 4108.55 2554.24 l 4150.95 2611.33 l 4200.74 2681.45 l 4255.08 2760.01 l 4311.32 2842.64 l 4367.03 2925.25 l 4419.83 3003.8 l 4467.31 3074.14 l 4507.02 3132.05 l 4536.57 3173.42 l 4554.04 3194.98 l 4558.67 3196.54 l 4552.77 3179.89 l 4535.52 3144.47 l 4509.06 3094.11 l 4475.89 3032.99 l 4438.49 2965.23 l 4399.25 2894.72 l 4360.54 2825.32 l 4324.8 2760.97 l 4294.69 2705.88 l 4272.99 2664.51 l 4262.38 2641.18 l 4261.69 2638.09 l 4268.22 2642.81 l 4288.18 2669.4 l 4320 2715.62 l 4361 2777.27 l 4408.2 2849.59 l 4458.74 2927.98 l 4510 3008.07 l 4559.45 3085.68 l 4604.61 3156.62 l 4642.97 3216.59 l 4672.03 3261.35 l 4689.69 3287.28 l 4694.75 3292.72 l 4688.81 3279.63 l 4671.2 3247.2 l 4643.91 3198.83 l 4609.34 3138.6 l 4569.9 3070.57 l 4527.92 2998.6 l 4485.67 2926.42 l 4445.49 2857.83 l 4409.86 2796.84 l 4381.47 2747.76 l 4363.09 2715 l 4357.07 2702.51 l 4363.6 2710.38 l 4383.44 2739.92 l 4414.78 2788.4 l 4454.82 2851.37 l 4500.56 2924.04 l 4549.16 3001.78 l 4597.96 3080.25 l 4644.44 3155.23 l 4686.05 3222.43 l 4720.25 3277.56 l 4744.61 3316.45 l 4757.17 3335.75 l 4758.69 3337.51 l 4752.74 3326.06 l 4735.03 3295.06 l 4707.45 3247.72 l 4672.35 3188.05 l 4632.1 3120.07 l 4589.02 3047.63 l 4545.34 2974.42 l 4503.31 2904.15 l 4465.36 2840.73 l 4434.12 2788.39 l 4412.34 2751.54 l 4402.52 2734.18 l 4402.14 2733.24 l 4408.69 2742.57 l 4428.45 2773.45 l 4459.52 2822.87 l 4499.05 2886.34 l 4544.04 2959.04 l 4591.67 3036.36 l 4639.27 3113.96 l 4684.3 3187.6 l 4724.21 3252.98 l 4756.44 3305.77 l 4778.6 3341.89 l 4788.85 3358.2 l 4789.45 3358.97 l 4783.5 3348.31 l 4765.79 3318.03 l 4738.11 3271.25 l 4702.8 3211.91 l 4662.23 3144.03 l 4618.68 3071.43 l 4574.36 2997.8 l 4531.52 2926.8 l 4492.52 2862.29 l 4459.96 2808.45 l 4436.58 2769.67 l 4424.92 2750.01 l 4423.95 2748.18 l 4430.5 2758.19 l 4450.2 2789.65 l 4481.1 2839.47 l 4520.35 2903.11 l 4564.95 2975.77 l 4612.08 3052.83 l 4659.08 3129.97 l 4703.4 3202.94 l 4742.49 3267.44 l 4773.79 3319.14 l 4794.94 3354 l 4804.13 3368.96 l 4804.45 3369.42 l 4798.52 3359.15 l 4780.81 3329.24 l 4753.1 3282.75 l 4717.71 3223.61 l 4677.01 3155.81 l 4633.27 3083.18 l 4588.68 3009.38 l 4545.46 2938.06 l 4505.96 2873.04 l 4472.77 2818.47 l 4448.61 2778.73 l 4436.03 2757.91 l 4434.66 2755.53 l 4441.19 2765.85 l 4460.84 2797.55 l 4491.62 2847.52 l 4530.7 2911.19 l 4575.08 2983.78 l 4621.94 3060.68 l 4668.64 3137.58 l 4712.61 3210.21 l 4751.31 3274.29 l 4782.19 3325.5 l 4802.88 3359.82 l 4811.61 3374.21 l 4811.84 3374.56 l 4805.91 3364.48 l 4788.21 3334.77 l 4760.51 3288.45 l 4725.1 3229.43 l 4684.36 3161.7 l 4640.54 3089.09 l 4595.83 3015.23 l 4552.44 2943.77 l 4512.71 2878.51 l 4479.2 2823.58 l 4454.63 2783.33 l 4441.57 2761.88 l 4439.95 2759.17 l 4446.47 2769.63 l 4466.08 2801.43 l 4496.79 2851.44 l 4535.77 2915.11 l 4580.02 2987.62 l 4626.73 3064.42 l 4673.26 3141.17 l 4717.06 3213.63 l 4755.57 3277.52 l 4786.25 3328.51 l 4806.75 3362.61 l 4815.3 3376.79 l 4815.5 3377.1 l 4809.57 3367.13 l 4791.89 3337.52 l 4764.2 3291.31 l 4728.81 3232.38 l 4688.06 3164.72 l 4644.21 3092.14 l 4599.46 3018.28 l 4556 2946.76 l 4516.15 2881.38 l 4482.48 2826.25 l 4457.69 2785.72 l 4444.35 2763.89 l 4442.58 2760.98 l 4449.09 2771.5 l 4468.67 2803.34 l 4499.33 2853.35 l 4538.24 2916.97 l 4582.41 2989.43 l 4629.03 3066.14 l 4675.47 3142.8 l 4719.17 3215.17 l 4757.6 3278.97 l 4788.2 3329.89 l 4808.62 3363.91 l 4817.12 3378.05 l 4817.31 3378.36 l S /DeviceRGB {} CS [0 0.5019 0] SC 2627 0 m 2686.63 83.5195 l 2829.46 286.398 l 2976.93 498.812 l 3129.07 720.992 l 3285.91 953.18 l 3447.46 1195.61 l 3613.74 1448.55 l 3784.77 1712.23 l 3960.58 1986.92 l 4141.17 2272.87 l 4326.57 2570.37 l 4516.79 2879.68 l 4711.85 3201.07 l 4911.75 3534.85 l 5116.51 3881.31 l 5326.14 4240.73 l 5423.56 4410 l S /DeviceRGB {} CS [0 0 1] SC 5490 3847.22 m 4562.19 3201.07 l 3444.98 2427.31 l 2343.48 1668.6 l 1263.47 928.707 l 213.145 212.969 l 0 68.4727 l S /DeviceGray {} CS [0] SC 5490 3483.87 m 5081.52 3201.07 l 3936.15 2413.27 l 2809.1 1642.98 l 1703.96 892.34 l 626.102 164.621 l 380.852 0 l S 5 w 3556.03 2457.7 m 3457.03 2629.18 l S 3539.02 2169.64 m 3559 2017.95 l S 4260.27 3006.33 m 4270.28 3159 l S 4040.18 2474.22 m 3947.19 2249.72 l S 4560.44 3223.49 m 4570.44 3376.16 l S 4286.35 2627.11 m 4467.24 2546.58 l S 4698.28 3319.49 m 4729.99 3560.41 l S 4384 2704.53 m 4671.19 2726.05 l S 4740.33 3357.3 m 4544.44 3568.42 l S 4400.37 2706.3 m 4378.59 2374.01 l S 4794.14 3385.56 m 4859.77 3757.81 l S 4443.66 2729.73 m 4686.7 2502.09 l S 4793.04 3393.89 m 4633.29 3736.47 l S 4444.33 2730.33 m 4595.92 2335.42 l S 4784.85 3375.27 m 4362 3386.34 l S 4466.5 2754.25 m 4882.42 2677.16 l S 4821.86 3350.86 m 4932.2 2896.05 l S 4420.59 2776.64 m 4039.37 3048.1 l S 4792.36 3388.69 m 4318.41 3585.01 l S Q 5 w 0 J /DeviceGray {} CS [0] SC 1406.64 360 m 1406.64 400 l S 1406.64 4050 m 1406.64 4010 l S 2209.09 360 m 2209.09 400 l S 2209.09 4050 m 2209.09 4010 l S 3011.53 360 m 3011.53 400 l S 3011.53 4050 m 3011.53 4010 l S 3813.98 360 m 3813.98 400 l S 3813.98 4050 m 3813.98 4010 l S 4616.42 360 m 4616.42 400 l S 4616.42 4050 m 4616.42 4010 l S 720 568.805 m 760 568.805 l S 5130 568.805 m 5090 568.805 l S 720 1226.87 m 760 1226.87 l S 5130 1226.87 m 5090 1226.87 l S 720 1884.94 m 760 1884.94 l S 5130 1884.94 m 5090 1884.94 l S 720 2543.01 m 760 2543.01 l S 5130 2543.01 m 5090 2543.01 l S 720 3201.07 m 760 3201.07 l S 5130 3201.07 m 5090 3201.07 l S 720 3859.14 m 760 3859.14 l S 5130 3859.14 m 5090 3859.14 l S 10 w 2 J 720 4050 m 5130 4050 l S 5130 360 m 5130 4050 l S 720 360 m 5130 360 l S 720 360 m 720 4050 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 3833.88] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 130.259 24.2961] Tm 0 0 Td /F9_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 5.8801 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 9.1199 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2637 TJm (0) 5.858 Tj -4967.83 TJm (0) 5.858 Tj -2.2627 TJm 86.1242 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 89.3641 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (1) 5.858 Tj -4967.9 TJm (0) 5.858 Tj -2.2627 TJm 166.3692 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 169.609 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (2) 5.858 Tj -4967.8 TJm (0) 5.858 Tj -2.2627 TJm 246.6129 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 249.8527 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (3) 5.858 Tj -4967.93 TJm (0) 5.858 Tj -2.2627 TJm 326.8582 0 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 330.0981 0 Td /F9_0 11.9552 Tf (7) 5.858 Tj -2.2627 TJm (4) 5.858 Tj -2.2668 TJm 152.3301 -13.4941 Td /F13_0 11.9552 Tf (n) 6.6471 Tj 13.9682 TJm (u) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -92.3679 29.1938 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1281 29.1938 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.248 29.1938 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0082 29.1938 Td /F9_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm (0) 5.858 Tj -2.2632 TJm -92.368 95.0008 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1281 95.0008 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.248 95.0008 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0082 95.0008 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (9) 5.858 Tj -2.2632 TJm -92.368 160.8078 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1282 160.8078 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.2481 160.8078 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0082 160.8078 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (8) 5.858 Tj -2.2632 TJm -92.368 226.6141 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1282 226.6141 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.2481 226.6141 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0083 226.6141 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (7) 5.858 Tj -2.2632 TJm -92.3681 292.4211 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1282 292.4211 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.2482 292.4211 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0083 292.4211 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (6) 5.858 Tj -2.2632 TJm -92.3681 358.2277 Td /F14_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -83.1283 358.2277 Td /F9_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -77.2482 358.2277 Td /F11_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -74.0084 358.2277 Td /F9_0 11.9552 Tf (4) 5.858 Tj -2.2632 TJm (5) 5.858 Tj -2.2632 TJm [0 1 -1 0 32.6512 210.589] Tm 0 0 Td /F13_0 11.9552 Tf (n) 6.6471 Tj 13.9682 TJm (u) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm [1 0 0 1 338.156 264.476] Tm 0 0 Td /F13_0 11.9552 Tf (2) 6.6471 Tj 3.9372 TJm 14.6551 -72.959 Td (3) 6.6471 Tj 3.9372 TJm 85.666 53.22 Td (4) 6.6471 Tj 3.9372 TJm 49.2269 -49.254 Td (5) 6.6471 Tj 3.9372 TJm 115.6831 75.176 Td (6) 6.6471 Tj 3.9372 TJm 110.212 -18.6619 Td (7) 6.6471 Tj 3.9372 TJm 131.755 93.5901 Td (8) 6.6471 Tj 3.9372 TJm 130.7581 4.137 Td (9) 6.6471 Tj 3.9372 TJm 101.769 93.9253 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm 92.939 -37.3887 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm 141.487 113.0783 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm 131.828 -23.9897 Td (1) 6.6471 Tj 3.9372 TJm (3) 6.6471 Tj 3.9372 TJm 111.119 110.8033 Td (1) 6.6471 Tj 3.9372 TJm (4) 6.6471 Tj 3.9372 TJm 115.4338 -41.1067 Td (1) 6.6471 Tj 3.9372 TJm (5) 6.6471 Tj 3.9372 TJm 82.9498 70.0783 Td (1) 6.6471 Tj 3.9372 TJm (6) 6.6471 Tj 3.9372 TJm 151.8549 -1.3467 Td (1) 6.6471 Tj 3.9372 TJm (7) 6.6471 Tj 3.9372 TJm 148.8409 14.8873 Td (1) 6.6471 Tj 3.9372 TJm (8) 6.6471 Tj 3.9372 TJm 51.0198 41.6185 Td (1) 6.6471 Tj 3.9372 TJm (9) 6.6471 Tj 3.9372 TJm 78.728 94.9544 Td (2) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font YGZXPE+CMSY10 %%+ font GJCTBM+CMMI12 %%+ font BHADEJ+CMR12 %%EOF auto/07p/doc/include/closegap_snh.eps0000640000175000017500000035277713570013207015635 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 20 -17 570 424 %%HiResBoundingBox: 20.644162 -17.214861 569.644162 423.785139 %%Creator: dvips(k) 5.96.1 Copyright 2007 Radical Eye Software %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 549 441 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.00 0 %%Copyright: Copyright 1996-2004 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font ODEMPY+CMR12 %!FontType1-1.0: ODEMPY+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /ODEMPY+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 462 675] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32D9B31D10B260CD4CC1D 847FA11D4A6147194663D6D7E38C5CA39E6E046476ADA46B08E683CE7C25C698 15EFBCC5EAAE453F74AF2BCCFA7955F783DD909E7389A52224F0C838E5479D64 2684D0691CB5D5F7BA68D85B902DB2A02A41C662732AED500D26C1D02588983D 1E43ED5BFE7AC10D90FC177DCC23089456D776EFBD2F985940004AFC00FE89A1 111C2911AB5BEAA730781BD8EB7A596E5FCD9989932E686CAA8350ED2B8F03F2 F76C01A1FB6E3C324A1D2555EA81DB44AB665A14C91A83141D527B0EE597A606 0FD116A58DE9B56ADBBF5966C63957E09F4CF0E2A9CBB1EEDA0D70D2C5403C8E E64BA2F46EE950CE925492FF5A6C727D969C16B164AD65078D98FDDEA1474590 53227DD422881A8A884F99AE810715C66B7F7DABA465D5083BD01FD891D09A5C 4F10295046B270CB3761973AC861D8C8BF7D8A626A4DCED20303706177141846 3B27352C82B0018A473EAFB67C490134F2EECEA702F8EECA5A50208DDC1596F3 09B2A4CB5E0B14DE34E1E75A9FF227B0711E78868919A8B8C3EBFF692E8719C5 319403A6F211103301303AD2B8E8EAB320D62C1009EBFC66F8E9F0920FD03D60 D85BAFED9B949C6B53904770E1283C3E32B575843627ECED1B143A34242D861F D91B6BB6B66E5B36FDA5276ADFB03321BD48C4A4DAF29AC2A78B995CCA672D00 4D2E080CBAC7338285105117E1685E580DC87C64140358F74C7709F8F905CE91 C20751C815DE70ACB6F86E91F6DFA67A55795014E1270505F24C88FA625917DD C19CDFAFA1FB465F17EF87A5D29D92386B0A4B3FE51123E2E2828DA3F9B47FB5 2ED29F15E452AAC49F2F5DB402ED0D01F654D82138C3322F204310008E66DDAC 8A2AC62482BDFFDF74A3D48229F630E82322D246379E141411311CA382BEDED1 DE4EAF1F4A4DC5FC462486E21CFC64BFEBA15DB8347A5DB764EAADA169477329 CE6C9425F048633FB8BAA63A510CA8BA220D0DCE730EA72337480DE3AC0B81BA 1EB3F94AB057A27619099654F01881BE3148596D6B318FCF262BD0D7F5A0B87C 7EAF31CB9BE42FF393DBD7E3E5F3BD227FB4668EC0F862992C0427CD031055F2 DB358CC0414D90C6D70DC848FB35CC8100DA1E56CE24096713FD206F80FBC346 22F3210D8BCC20530B02AE00E5C94EFDD879C68637B81213404DE7FF0C4BB763 F8C8698EFA615F616FBA3445B66870473B825B351A4310CD349B8D24ED7B2F7D 46C1A4377E0334E8970CFF40AD52F9B9A7F627254D9176644DB4777B2587F6D7 7303FFC130DB6EDFF6E66BD3AC3AC554298FB4BAD165CC16E3F105546AEC8D9D 35BDC872789C3DF9DB0308866FA63A762F9E6E82522602235736CF05A19467E8 95AFB33786BFE4B6BD5BA05E0BCA157673B719204D68130747F94AEF8B9F0149 8CAC80FDCE149C66671322A5E689E3FC45B4B79CB18F1BE2446727AEEB7AFDAD 5E55D8A21C5AE0C85007DC704F8EA478FFA5F4D582E6F70852FDFC065742E133 77A64D8025ECF60C1C24BD241DB334236E50B7C3313C3F7DFF154E4B79B179F6 E9A1F7D269EFFF97D880BE1AF192D81B03B7C73CC3940FF4A3F8DD33FD141F64 74C27B6A47E280650AD53C77825E50E2DDA408AFD86D7117F971C7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F12_0 /ODEMPY+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F10_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F9_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont 549 441 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 549 441 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer q q [0.1 0 0 0.1 0 0] cm /DeviceGray {} cs [1] sc 0 0 5490 4410 re f 10 w 2 J 1 j /DeviceGray {} CS [1] SC 0 0 5490 4410 re S 0 0 5490 4410 re f /DeviceGray {} cs [0.9492] sc 874.531 826.738 m 1809.02 1449.78 l 1786.95 3736.71 l 827.668 3333.93 l f /DeviceGray {} CS [0.9492] SC 874.531 826.738 m 1809.02 1449.78 l 1786.95 3736.71 l 827.668 3333.93 l S /DeviceGray {} CS [0] SC 1304.49 806 m 1280.71 789.402 l S 1668.57 783.363 m 1645.6 766.66 l S 2035.06 760.578 m 2012.91 743.762 l S 2404 737.641 m 2382.68 720.711 l S 2775.4 714.551 m 2754.92 697.508 l S 3149.28 691.305 m 3129.66 674.148 l S 3525.69 667.902 m 3506.93 650.629 l S /DeviceGray {} cs [0.9004] sc 1809.02 1449.78 m 4631.42 1291.53 l 4672.05 3634.57 l 1786.95 3736.71 l f /DeviceGray {} CS [0.9004] SC 1809.02 1449.78 m 4631.42 1291.53 l 4672.05 3634.57 l 1786.95 3736.71 l S /DeviceGray {} CS [0] SC 4038.98 736.164 m 4114.17 731.555 l S 4124.33 819.621 m 4198.67 815.121 l S 4207.64 901.082 m 4281.14 896.691 l S 4288.99 980.629 m 4361.68 976.34 l S 4368.44 1058.32 m 4440.33 1054.13 l S 4446.06 1134.22 m 4517.18 1130.13 l S 4521.92 1208.4 m 4592.27 1204.4 l S /DeviceGray {} cs [0.9258] sc 874.531 826.738 m 3962.13 634.605 l 4631.42 1291.53 l 1809.02 1449.78 l f /DeviceGray {} CS [0.9258] SC 874.531 826.738 m 3962.13 634.605 l 4631.42 1291.53 l 1809.02 1449.78 l S /DeviceGray {} CS [0] SC 4615.35 1706.88 m 4685.11 1703.23 l S 4621.7 2077.7 m 4691.71 2074.26 l S 4628.09 2451.14 m 4698.36 2447.92 l S 4634.53 2827.24 m 4705.05 2824.24 l S 4641.02 3206.03 m 4711.79 3203.25 l S 20 w 3535.9 3116.96 m 3544.96 3117.75 l 3553.98 3118.55 l 3562.95 3119.36 l 3571.88 3120.18 l 3581.75 3121.1 l 3591.56 3122.03 l 3601.31 3122.98 l 3611.01 3123.93 l 3620.88 3124.92 l 3630.69 3125.92 l 3640.43 3126.94 l 3650.11 3127.97 l 3659.42 3128.97 l 3668.67 3129.98 l 3677.85 3131.01 l 3686.97 3132.05 l 3695.54 3133.04 l 3704.05 3134.04 l 3712.51 3135.05 l 3720.9 3136.06 l 3729.37 3137.11 l 3737.78 3138.16 l 3746.13 3139.22 l 3754.42 3140.3 l 3762.88 3141.41 l 3771.27 3142.53 l 3779.6 3143.66 l 3787.85 3144.8 l 3796.45 3146.01 l 3804.97 3147.23 l 3813.41 3148.46 l 3821.78 3149.7 l 3831.14 3151.11 l 3840.41 3152.53 l 3849.57 3153.97 l 3858.63 3155.42 l 3868.42 3157.02 l 3878.09 3158.63 l 3887.63 3160.25 l 3897.05 3161.89 l 3906.47 3163.57 l 3915.75 3165.26 l 3924.91 3166.96 l 3933.94 3168.68 l 3943.38 3170.52 l 3952.67 3172.37 l 3961.8 3174.24 l 3970.79 3176.12 l 3979.91 3178.07 l 3988.86 3180.05 l 3997.65 3182.03 l 4006.27 3184.03 l 4014.61 3186.02 l 4022.78 3188.02 l 4030.79 3190.03 l 4038.63 3192.05 l 4046.29 3194.08 l 4053.79 3196.13 l 4061.12 3198.19 l 4068.27 3200.25 l 4075.37 3202.37 l 4082.3 3204.49 l 4089.04 3206.62 l 4095.61 3208.76 l 4102.15 3210.97 l 4108.51 3213.19 l 4114.67 3215.41 l 4120.65 3217.65 l 4126.63 3219.97 l 4132.4 3222.3 l 4137.97 3224.63 l 4143.33 3226.98 l 4148.69 3229.43 l 4153.83 3231.89 l 4158.75 3234.36 l 4163.45 3236.83 l 4168.11 3239.42 l 4172.53 3242.02 l 4176.7 3244.63 l 4180.63 3247.24 l 4184.36 3249.9 l 4187.84 3252.56 l 4191.06 3255.23 l 4194.03 3257.9 l 4196.78 3260.61 l 4199.28 3263.33 l 4201.51 3266.05 l 4203.48 3268.77 l 4205.22 3271.55 l 4206.68 3274.34 l 4207.88 3277.12 l 4208.8 3279.9 l 4209.47 3282.75 l 4209.85 3285.6 l 4209.94 3288.45 l 4209.76 3291.3 l 4209.27 3294.21 l 4208.49 3297.13 l 4207.41 3300.03 l 4206.04 3302.94 l 4204.32 3305.92 l 4202.29 3308.9 l 4199.95 3311.87 l 4197.31 3314.84 l 4194.24 3317.9 l 4190.85 3320.95 l 4187.13 3323.99 l 4183.09 3327.02 l 4178.49 3330.19 l 4173.54 3333.35 l 4168.23 3336.5 l 4162.57 3339.63 l 4156.33 3342.86 l 4149.72 3346.08 l 4142.74 3349.27 l 4135.4 3352.45 l 4127.87 3355.53 l 4119.99 3358.59 l 4111.78 3361.63 l 4103.22 3364.65 l 4094.36 3367.64 l 4085.17 3370.6 l 4075.64 3373.54 l 4065.8 3376.46 l 4055.6 3379.36 l 4045.07 3382.23 l 4034.23 3385.08 l 4023.08 3387.9 l 4011.54 3390.71 l 3999.68 3393.49 l 3987.52 3396.24 l 3975.06 3398.96 l 3962.18 3401.68 l 3949 3404.36 l 3935.52 3407.01 l 3921.75 3409.62 l 3907.53 3412.23 l 3893.02 3414.8 l 3878.23 3417.34 l 3863.15 3419.84 l 3847.59 3422.34 l 3831.75 3424.79 l 3815.63 3427.21 l 3799.25 3429.58 l 3782.33 3431.96 l 3765.14 3434.28 l 3747.68 3436.57 l 3729.97 3438.81 l 3711.66 3441.05 l 3693.09 3443.24 l 3674.27 3445.39 l 3655.2 3447.48 l 3635.41 3449.58 l 3615.38 3451.63 l 3595.11 3453.62 l 3574.61 3455.56 l 3553.14 3457.52 l 3531.44 3459.41 l 3509.52 3461.25 l 3487.37 3463.03 l 3463.83 3464.84 l 3440.05 3466.59 l 3416.06 3468.27 l 3391.86 3469.88 l 3367.04 3471.45 l 3342.03 3472.95 l 3316.82 3474.38 l 3291.44 3475.74 l 3266.22 3477.01 l 3240.85 3478.21 l 3215.33 3479.34 l 3189.67 3480.4 l 3164.32 3481.37 l 3138.85 3482.27 l 3113.27 3483.1 l 3087.59 3483.87 l 3062.27 3484.55 l 3036.87 3485.17 l 3011.4 3485.72 l 2985.86 3486.2 l 2960.42 3486.61 l 2934.93 3486.95 l 2909.4 3487.23 l 2883.85 3487.44 l 2858.26 3487.58 l 2832.66 3487.65 l 2807.06 3487.66 l 2781.46 3487.6 l 2755.74 3487.47 l 2730.03 3487.27 l 2704.35 3487.01 l 2678.71 3486.67 l 2653.05 3486.27 l 2627.45 3485.8 l 2601.91 3485.26 l 2576.45 3484.66 l 2550.89 3483.98 l 2525.42 3483.23 l 2500.04 3482.41 l 2474.78 3481.53 l 2449.27 3480.57 l 2423.89 3479.53 l 2398.65 3478.43 l 2373.55 3477.26 l 2347.87 3475.98 l 2322.36 3474.63 l 2297.04 3473.21 l 2271.9 3471.72 l 2246.79 3470.14 l 2221.88 3468.49 l 2197.2 3466.78 l 2172.75 3464.99 l 2149.14 3463.18 l 2125.76 3461.31 l 2102.63 3459.37 l 2079.76 3457.36 l 2057.36 3455.31 l 2035.22 3453.2 l 2013.36 3451.03 l 1991.78 3448.8 l 1970.56 3446.52 l 1949.63 3444.17 l 1929.01 3441.77 l 1908.7 3439.31 l 1888.69 3436.79 l 1869.01 3434.22 l 1849.66 3431.59 l 1830.66 3428.91 l 1811.91 3426.15 l 1793.53 3423.35 l 1775.51 3420.5 l 1757.87 3417.59 l 1740.46 3414.6 l 1723.45 3411.57 l 1706.84 3408.49 l 1690.64 3405.35 l 1674.64 3402.13 l 1659.08 3398.86 l 1643.95 3395.54 l 1629.28 3392.17 l 1614.74 3388.68 l 1600.69 3385.15 l 1587.12 3381.57 l 1574.06 3377.96 l 1561 3374.14 l 1548.49 3370.29 l 1536.54 3366.39 l 1525.17 3362.46 l 1513.95 3358.32 l 1503.36 3354.14 l 1493.41 3349.93 l 1484.11 3345.69 l 1475.72 3341.54 l 1467.95 3337.36 l 1460.8 3333.15 l 1454.29 3328.92 l 1448.67 3324.87 l 1443.64 3320.8 l 1439.19 3316.71 l 1435.34 3312.6 l 1432.15 3308.58 l 1429.52 3304.55 l 1427.46 3300.51 l 1425.98 3296.46 l 1425.08 3292.46 l 1424.73 3288.46 l 1424.95 3284.46 l 1425.73 3280.45 l 1427.06 3276.46 l 1428.95 3272.47 l 1431.4 3268.49 l 1434.41 3264.5 l 1437.91 3260.6 l 1441.96 3256.69 l 1446.54 3252.8 l 1451.67 3248.92 l 1457.26 3245.1 l 1463.37 3241.3 l 1470.01 3237.51 l 1477.16 3233.73 l 1484.77 3230.01 l 1492.89 3226.3 l 1501.51 3222.62 l 1510.65 3218.96 l 1520.22 3215.34 l 1530.3 3211.75 l 1540.87 3208.18 l 1551.92 3204.64 l 1563.43 3201.14 l 1575.41 3197.67 l 1587.88 3194.23 l 1600.81 3190.82 l 1614.22 3187.45 l 1628.09 3184.11 l 1642.42 3180.81 l 1657.21 3177.55 l 1672.55 3174.31 l 1688.34 3171.11 l 1704.58 3167.95 l 1721.26 3164.84 l 1738.55 3161.74 l 1756.28 3158.68 l 1774.45 3155.68 l 1793.04 3152.73 l 1811.73 3149.88 l 1830.83 3147.07 l 1850.31 3144.33 l 1870.18 3141.63 l 1889.73 3139.08 l 1909.63 3136.58 l 1929.87 3134.13 l 1950.44 3131.74 l 1970.85 3129.46 l 1991.57 3127.23 l 2012.58 3125.05 l 2033.88 3122.93 l 2055.06 3120.9 l 2076.5 3118.93 l 2098.2 3117.02 l 2120.15 3115.16 l 2141.97 3113.39 l 2164.03 3111.67 l 2186.3 3110.01 l 2208.79 3108.41 l 2231.18 3106.88 l 2253.77 3105.42 l 2276.55 3104.01 l 2299.5 3102.65 l 2322.53 3101.36 l 2345.72 3100.13 l 2369.07 3098.96 l 2392.56 3097.85 l 2415.91 3096.81 l 2439.39 3095.83 l 2462.98 3094.91 l 2486.69 3094.04 l 2511.11 3093.22 l 2535.62 3092.46 l 2560.23 3091.77 l 2584.93 3091.13 l 2607.62 3090.61 l 2630.36 3090.14 l 2653.16 3089.73 l 2676 3089.37 l 2697.69 3089.07 l 2719.42 3088.83 l 2741.16 3088.63 l 2762.93 3088.49 l 2784.33 3088.39 l 2805.74 3088.34 l 2827.15 3088.34 l 2848.55 3088.38 l 2870.34 3088.48 l 2892.11 3088.62 l 2913.86 3088.81 l 2935.58 3089.05 l 2956.33 3089.33 l 2977.05 3089.65 l 2997.73 3090.02 l 3018.37 3090.42 l 3036.42 3090.82 l 3054.44 3091.25 l 3072.42 3091.71 l 3090.35 3092.21 l 3105.88 3092.67 l 3121.37 3093.15 l 3136.82 3093.66 l 3152.23 3094.19 l 3166.11 3094.7 l 3179.95 3095.22 l 3193.75 3095.76 l 3207.51 3096.33 l 3220.31 3096.87 l 3233.07 3097.44 l 3245.79 3098.02 l 3258.47 3098.61 l 3270.76 3099.21 l 3283 3099.83 l 3295.2 3100.46 l 3307.36 3101.1 l 3320.36 3101.81 l 3333.32 3102.54 l 3346.22 3103.29 l 3359.07 3104.06 l 3373.27 3104.93 l 3387.4 3105.83 l 3401.46 3106.75 l 3415.44 3107.69 l 3426.6 3108.45 l 3437.7 3109.24 l 3448.76 3110.04 l 3459.76 3110.85 l 3469.48 3111.58 l 3479.15 3112.32 l 3488.78 3113.07 l 3498.37 3113.84 l 3507.82 3114.6 l 3517.23 3115.38 l 3526.59 3116.17 l 3535.9 3116.96 l S /DeviceRGB {} CS [1 0 0] SC 3535.9 3116.96 m 3552.08 3118.38 l 3568.11 3119.83 l 3584.01 3121.31 l 3599.75 3122.82 l 3617.07 3124.54 l 3634.2 3126.29 l 3651.13 3128.07 l 3667.87 3129.89 l 3684.81 3131.8 l 3701.53 3133.74 l 3718.04 3135.71 l 3734.33 3137.72 l 3749.87 3139.7 l 3765.2 3141.71 l 3780.31 3143.76 l 3795.2 3145.83 l 3809.07 3147.82 l 3822.74 3149.84 l 3836.21 3151.88 l 3849.47 3153.95 l 3862.72 3156.08 l 3875.75 3158.23 l 3888.57 3160.41 l 3901.15 3162.62 l 3913.86 3164.91 l 3926.33 3167.23 l 3938.56 3169.57 l 3950.53 3171.94 l 3962.84 3174.45 l 3974.86 3176.98 l 3986.61 3179.54 l 3998.07 3182.13 l 4010.69 3185.07 l 4022.93 3188.05 l 4034.81 3191.06 l 4046.32 3194.09 l 4058.46 3197.43 l 4070.16 3200.81 l 4081.41 3204.21 l 4092.19 3207.64 l 4102.65 3211.14 l 4112.64 3214.67 l 4122.14 3218.22 l 4131.17 3221.79 l 4140.23 3225.61 l 4148.74 3229.45 l 4156.71 3233.32 l 4164.12 3237.2 l 4171.19 3241.22 l 4177.68 3245.27 l 4183.57 3249.33 l 4188.87 3253.4 l 4193.51 3257.42 l 4197.58 3261.46 l 4201.07 3265.5 l 4203.98 3269.55 l 4206.31 3273.6 l 4208.06 3277.65 l 4209.23 3281.7 l 4209.84 3285.75 l 4209.86 3289.86 l 4209.3 3293.97 l 4208.15 3298.07 l 4206.41 3302.16 l 4204.02 3306.35 l 4201.02 3310.52 l 4197.42 3314.68 l 4193.21 3318.82 l 4188.23 3323.08 l 4182.62 3327.33 l 4176.37 3331.54 l 4169.5 3335.74 l 4161.68 3340.08 l 4153.2 3344.38 l 4144.05 3348.66 l 4134.25 3352.9 l 4123.31 3357.29 l 4111.68 3361.64 l 4099.35 3365.95 l 4086.34 3370.21 l 4072.46 3374.48 l 4057.89 3378.69 l 4042.65 3382.85 l 4026.74 3386.96 l 4009.94 3391.07 l 3992.47 3395.11 l 3974.35 3399.09 l 3955.59 3403 l 3935.8 3406.93 l 3915.36 3410.78 l 3894.3 3414.55 l 3872.63 3418.25 l 3849.84 3421.95 l 3826.42 3425.57 l 3802.42 3429.1 l 3777.83 3432.54 l 3752.02 3435.98 l 3725.64 3439.32 l 3698.69 3442.55 l 3671.21 3445.69 l 3642.38 3448.82 l 3613.01 3451.83 l 3583.14 3454.73 l 3552.77 3457.51 l 3520.83 3460.28 l 3488.41 3462.91 l 3455.53 3465.42 l 3422.21 3467.81 l 3386.7 3470.17 l 3350.77 3472.39 l 3314.43 3474.47 l 3277.72 3476.39 l 3239.3 3478.23 l 3200.54 3479.91 l 3161.47 3481.42 l 3122.13 3482.77 l 3083.43 3483.93 l 3044.54 3484.93 l 3005.47 3485.78 l 2966.26 3486.46 l 2927.06 3486.98 l 2887.79 3487.35 l 2848.46 3487.55 l 2809.11 3487.6 l 2769.63 3487.48 l 2730.19 3487.2 l 2690.82 3486.77 l 2651.54 3486.17 l 2612.13 3485.41 l 2572.88 3484.49 l 2533.82 3483.4 l 2494.98 3482.16 l 2456.04 3480.74 l 2417.39 3479.17 l 2379.06 3477.43 l 2341.08 3475.53 l 2303.06 3473.45 l 2265.46 3471.22 l 2228.31 3468.82 l 2191.65 3466.27 l 2155.02 3463.53 l 2118.95 3460.63 l 2083.47 3457.57 l 2048.62 3454.36 l 2013.88 3450.95 l 1979.85 3447.39 l 1946.56 3443.68 l 1914.04 3439.82 l 1881.71 3435.74 l 1850.25 3431.51 l 1819.69 3427.14 l 1790.06 3422.63 l 1760.69 3417.87 l 1732.36 3412.98 l 1705.1 3407.95 l 1678.94 3402.79 l 1653.05 3397.32 l 1628.41 3391.73 l 1605.04 3386.01 l 1582.98 3380.17 l 1561.2 3373.91 l 1540.94 3367.54 l 1522.21 3361.06 l 1505.07 3354.47 l 1489.27 3347.68 l 1475.16 3340.8 l 1462.76 3333.85 l 1452.1 3326.82 l 1443.3 3319.83 l 1436.23 3312.78 l 1430.9 3305.69 l 1427.34 3298.56 l 1425.57 3291.53 l 1425.52 3284.49 l 1427.21 3277.44 l 1430.64 3270.39 l 1435.7 3263.47 l 1442.45 3256.57 l 1450.89 3249.7 l 1461.01 3242.86 l 1472.74 3236.1 l 1486.11 3229.4 l 1501.13 3222.76 l 1517.78 3216.19 l 1536.06 3209.69 l 1555.93 3203.28 l 1577.39 3196.97 l 1600.41 3190.76 l 1625.11 3184.62 l 1651.34 3178.61 l 1679.08 3172.73 l 1708.29 3166.98 l 1739.01 3161.37 l 1771.15 3155.91 l 1804.66 3150.61 l 1839.51 3145.48 l 1875.89 3140.49 l 1913.54 3135.69 l 1952.41 3131.09 l 1992.45 3126.68 l 2034.2 3122.42 l 2077.03 3118.38 l 2120.91 3114.57 l 2165.76 3110.98 l 2212.88 3107.54 l 2260.91 3104.36 l 2309.77 3101.43 l 2359.39 3098.77 l 2410.05 3096.36 l 2461.33 3094.24 l 2513.15 3092.39 l 2565.43 3090.83 l 2616.78 3089.59 l 2668.41 3088.61 l 2720.25 3087.92 l 2772.23 3087.5 l 2823.78 3087.37 l 2875.31 3087.5 l 2926.75 3087.91 l 2978.02 3088.59 l 3028.89 3089.53 l 3079.44 3090.74 l 3129.62 3092.22 l 3179.34 3093.96 l 3228.58 3095.96 l 3277.24 3098.22 l 3325.22 3100.73 l 3372.47 3103.49 l 3419.15 3106.5 l 3464.96 3109.76 l 3509.83 3113.26 l 3553.7 3116.98 l 3596.9 3120.96 l 3638.96 3125.17 l 3679.82 3129.58 l 3719.43 3134.21 l 3758.28 3139.1 l 3795.74 3144.19 l 3831.75 3149.47 l 3866.27 3154.93 l 3900.02 3160.69 l 3932.11 3166.62 l 3962.5 3172.71 l 3991.16 3178.95 l 4019.13 3185.59 l 4045.13 3192.37 l 4069.15 3199.27 l 4091.14 3206.28 l 4111.85 3213.69 l 4130.32 3221.19 l 4146.52 3228.77 l 4160.44 3236.42 l 4171.75 3243.88 l 4180.9 3251.37 l 4187.89 3258.89 l 4192.71 3266.41 l 4195.3 3273.57 l 4195.93 3280.72 l 4194.62 3287.84 l 4191.38 3294.93 l 4186.37 3301.79 l 4179.56 3308.6 l 4170.97 3315.34 l 4160.6 3322 l 4148.69 3328.48 l 4135.11 3334.87 l 4119.89 3341.17 l 4103.06 3347.35 l 4084.74 3353.39 l 4064.87 3359.3 l 4043.51 3365.08 l 4020.67 3370.72 l 3996.82 3376.13 l 3971.62 3381.38 l 3945.11 3386.47 l 3917.31 3391.41 l 3888.68 3396.11 l 3858.89 3400.64 l 3827.97 3404.99 l 3795.96 3409.15 l 3763.22 3413.1 l 3729.5 3416.85 l 3694.83 3420.4 l 3659.27 3423.75 l 3623.08 3426.88 l 3586.08 3429.8 l 3548.34 3432.51 l 3509.88 3435 l 3470.9 3437.26 l 3431.3 3439.29 l 3391.15 3441.1 l 3350.47 3442.68 l 3309.33 3444.01 l 3267.77 3445.11 l 3225.83 3445.97 l 3183.58 3446.58 l 3140.78 3446.95 l 3097.76 3447.05 l 3054.57 3446.9 l 3011.26 3446.49 l 2967.44 3445.81 l 2923.6 3444.85 l 2879.81 3443.62 l 2836.11 3442.12 l 2793.26 3440.36 l 2750.6 3438.34 l 2708.2 3436.04 l 2666.1 3433.46 l 2625.77 3430.71 l 2585.81 3427.69 l 2546.29 3424.41 l 2507.23 3420.87 l 2469.56 3417.15 l 2432.43 3413.18 l 2395.88 3408.94 l 2359.96 3404.45 l 2325.36 3399.79 l 2291.45 3394.88 l 2258.27 3389.71 l 2225.85 3384.29 l 2194.75 3378.7 l 2164.46 3372.86 l 2135.03 3366.78 l 2106.49 3360.43 l 2079.23 3353.92 l 2052.9 3347.16 l 2027.54 3340.14 l 2003.19 3332.87 l 1979.96 3325.36 l 1957.78 3317.6 l 1936.69 3309.57 l 1916.72 3301.27 l 1898.1 3292.8 l 1880.62 3284.07 l 1864.3 3275.06 l 1849.17 3265.77 l 1834.92 3255.95 l 1821.95 3245.82 l 1810.29 3235.38 l 1799.96 3224.61 l 1791.68 3214.45 l 1784.53 3204.01 l 1778.53 3193.26 l 1773.69 3182.21 l 1770.17 3171.44 l 1767.69 3160.38 l 1766.26 3149.01 l 1765.88 3137.32 l 1766.53 3125.51 l 1768.19 3113.36 l 1770.85 3100.87 l 1774.51 3088.02 l 1779.25 3074.54 l 1785.01 3060.65 l 1791.77 3046.33 l 1799.53 3031.56 l 1807.85 3016.98 l 1817.05 3001.95 l 1827.11 2986.44 l 1838 2970.42 l 1848.23 2955.94 l 1859.06 2941.04 l 1870.49 2925.69 l 1882.5 2909.89 l 1893.38 2895.78 l 1904.67 2881.3 l 1916.36 2866.43 l 1928.42 2851.17 l 1939.63 2837.04 l 1951.12 2822.56 l 1962.88 2807.73 l 1974.91 2792.55 l 1986.35 2778.06 l 1998 2763.25 l 2009.84 2748.11 l 2021.85 2732.65 l 2033.68 2717.3 l 2045.65 2701.64 l 2057.74 2685.67 l 2069.95 2669.39 l 2083.16 2651.56 l 2096.45 2633.38 l 2109.81 2614.86 l 2123.2 2596 l 2138.07 2574.68 l 2152.91 2552.98 l 2167.67 2530.92 l 2182.29 2508.52 l 2193.88 2490.36 l 2205.33 2472.01 l 2216.59 2453.5 l 2227.64 2434.86 l 2237.24 2418.22 l 2246.62 2401.5 l 2255.76 2384.72 l 2264.64 2367.9 l 2273.13 2351.22 l 2281.32 2334.52 l 2289.17 2317.83 l 2296.66 2301.17 l S /DeviceRGB {} CS [0 0.5019 0] SC 2516.07 2266.91 m 2526.75 2252.09 l 2537.25 2237.3 l 2547.55 2222.56 l 2557.65 2207.89 l 2568.61 2191.67 l 2579.3 2175.56 l 2589.71 2159.58 l 2599.82 2143.73 l 2609.86 2127.65 l 2619.59 2111.74 l 2628.98 2096.02 l 2638.05 2080.49 l 2646.51 2065.67 l 2654.66 2051.05 l 2662.5 2036.65 l 2670.03 2022.47 l 2676.87 2009.27 l 2683.45 1996.28 l 2689.77 1983.5 l 2695.82 1970.93 l 2701.72 1958.4 l 2707.35 1946.09 l 2712.74 1934.02 l 2717.89 1922.17 l 2722.94 1910.24 l 2727.76 1898.55 l 2732.34 1887.1 l 2736.7 1875.91 l 2741.05 1864.42 l 2745.17 1853.2 l 2749.07 1842.24 l 2752.77 1831.55 l 2756.72 1819.78 l 2760.43 1808.34 l 2763.91 1797.21 l 2767.18 1786.4 l 2770.53 1774.93 l 2773.66 1763.83 l 2776.57 1753.07 l 2779.3 1742.65 l 2781.87 1732.43 l 2784.26 1722.54 l 2786.5 1712.97 l 2788.58 1703.72 l 2790.64 1694.22 l 2792.55 1685.04 l 2794.33 1676.18 l 2795.98 1667.63 l 2797.56 1659.11 l 2799.02 1650.89 l 2800.38 1642.96 l 2801.64 1635.31 l 2802.79 1628.04 l 2803.87 1621.01 l 2804.86 1614.23 l 2805.79 1607.68 l 2806.65 1601.37 l 2807.45 1595.27 l 2808.2 1589.38 l 2808.9 1583.69 l 2809.56 1578.1 l 2810.17 1572.71 l 2810.74 1567.5 l 2811.27 1562.46 l 2811.78 1557.48 l 2812.25 1552.67 l 2812.7 1548.02 l 2813.11 1543.54 l 2813.5 1539.06 l 2813.87 1534.74 l 2814.21 1530.57 l 2814.53 1526.54 l 2814.84 1522.49 l 2815.13 1518.59 l 2815.39 1514.83 l 2815.64 1511.19 l 2815.88 1507.53 l 2816.11 1504.01 l 2816.31 1500.61 l 2816.51 1497.33 l 2816.69 1494.13 l 2816.86 1491.04 l 2817.01 1488.06 l 2817.16 1485.19 l 2817.3 1482.39 l 2817.42 1479.68 l 2817.54 1477.07 l 2817.65 1474.55 l 2817.76 1472.07 l 2817.85 1469.69 l 2817.94 1467.38 l 2818.03 1465.16 l 2818.11 1462.97 l 2818.18 1460.86 l 2818.25 1458.83 l 2818.31 1456.86 l 2818.38 1454.92 l 2818.43 1453.06 l 2818.48 1451.26 l 2818.53 1449.52 l 2818.58 1447.8 l 2818.62 1446.15 l 2818.66 1444.55 l 2818.7 1443.02 l 2818.73 1441.48 l 2818.77 1440.01 l 2818.8 1438.6 l 2818.83 1437.23 l 2818.85 1435.85 l 2818.88 1434.53 l 2818.9 1433.25 l 2818.92 1432.03 l 2818.94 1430.81 l 2818.96 1429.65 l 2818.98 1428.52 l 2819 1427.45 l 2819.01 1426.44 l 2819.02 1425.47 l 2819.04 1424.53 l 2819.05 1423.64 l 2819.06 1422.78 l 2819.07 1421.95 l 2819.08 1421.16 l 2819.09 1420.39 l 2819.09 1419.65 l 2819.1 1418.95 l 2819.11 1418.26 l 2819.11 1417.61 l 2819.12 1416.97 l 2819.12 1416.36 l 2819.13 1415.78 l 2819.13 1415.21 l 2819.14 1414.67 l 2819.14 1413.63 l 2819.15 1413.15 l 2819.15 1412.22 l 2819.16 1411.78 l 2819.16 1410.56 l 2819.17 1410.18 l 2819.17 1408.17 l 2819.18 1407.88 l 2819.18 1404.85 l 2819.19 1404.67 l 2819.19 1400.76 l S /DeviceRGB {} CS [0 0 1] SC 3532.78 3117.36 m 3541.59 3118.12 l 3550.36 3118.9 l 3559.09 3119.69 l 3567.77 3120.48 l 3577.51 3121.39 l 3587.2 3122.31 l 3596.83 3123.24 l 3606.41 3124.18 l 3616.61 3125.2 l 3626.76 3126.24 l 3636.83 3127.28 l 3646.84 3128.35 l 3656.02 3129.34 l 3665.15 3130.34 l 3674.22 3131.35 l 3683.23 3132.38 l 3691.77 3133.36 l 3700.25 3134.36 l 3708.67 3135.36 l 3717.04 3136.38 l 3725.38 3137.41 l 3733.66 3138.44 l 3741.89 3139.49 l 3750.05 3140.55 l 3758.41 3141.64 l 3766.7 3142.75 l 3774.92 3143.87 l 3783.08 3144.99 l 3791.63 3146.19 l 3800.11 3147.4 l 3808.52 3148.63 l 3816.85 3149.86 l 3825.92 3151.22 l 3834.89 3152.6 l 3843.77 3153.99 l 3852.56 3155.39 l 3862.01 3156.92 l 3871.34 3158.47 l 3880.56 3160.03 l 3889.67 3161.61 l 3898.94 3163.25 l 3908.09 3164.9 l 3917.12 3166.57 l 3926.02 3168.25 l 3935.21 3170.02 l 3944.25 3171.81 l 3953.15 3173.61 l 3961.91 3175.42 l 3971.85 3177.54 l 3981.59 3179.67 l 3991.14 3181.81 l 4000.49 3183.97 l 4008.75 3185.94 l 4016.86 3187.91 l 4024.8 3189.9 l 4032.57 3191.9 l 4040.19 3193.92 l 4047.65 3195.94 l 4054.94 3197.98 l 4062.07 3200.03 l 4069.14 3202.13 l 4076.03 3204.23 l 4082.76 3206.35 l 4089.3 3208.48 l 4095.83 3210.67 l 4102.17 3212.87 l 4108.32 3215.08 l 4114.29 3217.3 l 4120.24 3219.6 l 4126 3221.91 l 4131.55 3224.22 l 4136.9 3226.55 l 4142.23 3228.97 l 4147.35 3231.4 l 4152.25 3233.83 l 4156.93 3236.28 l 4161.61 3238.85 l 4166.04 3241.43 l 4170.23 3244.02 l 4174.17 3246.61 l 4177.92 3249.24 l 4181.41 3251.88 l 4184.66 3254.52 l 4187.65 3257.17 l 4190.44 3259.86 l 4192.96 3262.56 l 4195.23 3265.26 l 4197.24 3267.96 l 4199.03 3270.72 l 4200.54 3273.49 l 4201.79 3276.25 l 4202.76 3279.02 l 4203.48 3281.85 l 4203.92 3284.68 l 4204.08 3287.51 l 4203.96 3290.33 l 4203.54 3293.23 l 4202.83 3296.13 l 4201.83 3299.02 l 4200.53 3301.91 l 4198.89 3304.87 l 4196.94 3307.83 l 4194.69 3310.79 l 4192.13 3313.74 l 4189.16 3316.78 l 4185.86 3319.81 l 4182.24 3322.84 l 4178.3 3325.85 l 4173.81 3329 l 4168.97 3332.14 l 4163.79 3335.27 l 4158.25 3338.38 l 4152.15 3341.59 l 4145.69 3344.78 l 4138.86 3347.95 l 4131.66 3351.1 l 4124.29 3354.16 l 4116.58 3357.2 l 4108.53 3360.21 l 4100.15 3363.21 l 4091.45 3366.18 l 4082.42 3369.13 l 4073.07 3372.05 l 4063.4 3374.95 l 4053.36 3377.84 l 4043.01 3380.7 l 4032.34 3383.53 l 4021.36 3386.34 l 4009.99 3389.14 l 3998.32 3391.91 l 3986.33 3394.65 l 3974.05 3397.36 l 3961.35 3400.07 l 3948.35 3402.74 l 3935.05 3405.38 l 3921.46 3407.99 l 3907.42 3410.59 l 3893.1 3413.16 l 3878.49 3415.69 l 3863.59 3418.19 l 3848.22 3420.68 l 3832.56 3423.14 l 3816.63 3425.55 l 3800.42 3427.92 l 3783.68 3430.3 l 3766.68 3432.63 l 3749.41 3434.91 l 3731.88 3437.15 l 3713.74 3439.4 l 3695.35 3441.59 l 3676.7 3443.74 l 3657.81 3445.84 l 3638.19 3447.95 l 3618.33 3450 l 3598.22 3452 l 3577.88 3453.95 l 3556.55 3455.92 l 3534.97 3457.83 l 3513.17 3459.68 l 3491.15 3461.47 l 3466.74 3463.37 l 3442.08 3465.2 l 3417.18 3466.96 l 3392.05 3468.64 l 3367.33 3470.22 l 3342.41 3471.72 l 3317.29 3473.15 l 3292 3474.51 l 3267.02 3475.78 l 3241.89 3476.98 l 3216.61 3478.1 l 3191.19 3479.16 l 3166.13 3480.13 l 3140.96 3481.03 l 3115.68 3481.87 l 3090.3 3482.63 l 3065.18 3483.32 l 3039.98 3483.94 l 3014.71 3484.5 l 2989.37 3484.99 l 2964.1 3485.41 l 2938.77 3485.76 l 2913.41 3486.05 l 2888.02 3486.27 l 2862.58 3486.42 l 2837.13 3486.5 l 2811.67 3486.52 l 2786.21 3486.47 l 2760.56 3486.36 l 2734.93 3486.17 l 2709.32 3485.92 l 2683.75 3485.6 l 2658.17 3485.21 l 2632.63 3484.75 l 2607.15 3484.23 l 2581.75 3483.63 l 2556.19 3482.97 l 2530.72 3482.23 l 2505.35 3481.43 l 2480.08 3480.55 l 2454.45 3479.59 l 2428.94 3478.57 l 2403.58 3477.47 l 2378.35 3476.3 l 2352.15 3475 l 2326.12 3473.63 l 2300.28 3472.18 l 2274.64 3470.66 l 2250.04 3469.12 l 2225.64 3467.51 l 2201.45 3465.84 l 2177.48 3464.09 l 2154.14 3462.31 l 2131.03 3460.46 l 2108.16 3458.55 l 2085.53 3456.58 l 2063.32 3454.56 l 2041.36 3452.48 l 2019.68 3450.34 l 1998.27 3448.13 l 1977.18 3445.88 l 1956.38 3443.56 l 1935.88 3441.19 l 1915.69 3438.75 l 1895.77 3436.26 l 1876.17 3433.72 l 1856.91 3431.11 l 1837.98 3428.46 l 1819.29 3425.73 l 1800.95 3422.95 l 1782.98 3420.12 l 1765.38 3417.24 l 1747.99 3414.28 l 1730.99 3411.27 l 1714.4 3408.21 l 1698.21 3405.1 l 1682.19 3401.89 l 1666.6 3398.64 l 1651.46 3395.34 l 1636.76 3392 l 1622.17 3388.52 l 1608.06 3385 l 1594.44 3381.43 l 1581.32 3377.83 l 1568.08 3373.99 l 1555.41 3370.12 l 1543.31 3366.2 l 1531.79 3362.24 l 1520 3357.91 l 1508.9 3353.54 l 1498.51 3349.13 l 1488.83 3344.68 l 1480.75 3340.66 l 1473.27 3336.61 l 1466.37 3332.53 l 1460.07 3328.43 l 1454.55 3324.45 l 1449.59 3320.44 l 1445.21 3316.42 l 1441.39 3312.39 l 1438.21 3308.42 l 1435.58 3304.44 l 1433.51 3300.44 l 1432 3296.44 l 1431.06 3292.48 l 1430.67 3288.52 l 1430.83 3284.55 l 1431.54 3280.58 l 1432.8 3276.63 l 1434.61 3272.68 l 1436.97 3268.73 l 1439.89 3264.79 l 1443.3 3260.9 l 1447.25 3257.02 l 1451.74 3253.15 l 1456.76 3249.29 l 1462.25 3245.49 l 1468.27 3241.7 l 1474.81 3237.92 l 1481.87 3234.16 l 1489.39 3230.44 l 1497.43 3226.74 l 1505.97 3223.06 l 1515.02 3219.4 l 1524.54 3215.78 l 1534.56 3212.18 l 1545.07 3208.61 l 1556.08 3205.06 l 1567.57 3201.54 l 1579.56 3198.06 l 1592.02 3194.6 l 1604.97 3191.18 l 1618.49 3187.77 l 1632.49 3184.39 l 1646.96 3181.05 l 1661.9 3177.76 l 1677.64 3174.43 l 1693.85 3171.15 l 1710.54 3167.91 l 1727.7 3164.72 l 1744.71 3161.68 l 1762.14 3158.69 l 1780 3155.74 l 1798.26 3152.85 l 1816.36 3150.09 l 1834.83 3147.38 l 1853.67 3144.72 l 1872.88 3142.11 l 1892 3139.6 l 1911.47 3137.15 l 1931.26 3134.75 l 1951.37 3132.4 l 1971.41 3130.14 l 1991.74 3127.94 l 2012.37 3125.79 l 2033.28 3123.69 l 2054.1 3121.69 l 2075.19 3119.73 l 2096.52 3117.83 l 2118.1 3115.99 l 2139.59 3114.23 l 2161.3 3112.52 l 2183.23 3110.87 l 2205.37 3109.27 l 2227.42 3107.75 l 2249.67 3106.28 l 2272.1 3104.87 l 2294.71 3103.52 l 2317.33 3102.23 l 2340.11 3101 l 2363.04 3099.83 l 2386.12 3098.72 l 2409.08 3097.67 l 2432.17 3096.68 l 2455.39 3095.75 l 2478.71 3094.88 l 2501.93 3094.07 l 2525.23 3093.32 l 2548.63 3092.63 l 2572.11 3091.99 l 2596.08 3091.4 l 2620.12 3090.88 l 2644.22 3090.41 l 2668.37 3090.01 l 2690.55 3089.69 l 2712.76 3089.42 l 2735 3089.21 l 2757.26 3089.04 l 2779.22 3088.93 l 2801.18 3088.87 l 2823.15 3088.86 l 2845.12 3088.9 l 2868.38 3088.99 l 2891.63 3089.14 l 2914.86 3089.35 l 2938.06 3089.61 l 2958.68 3089.89 l 2979.27 3090.22 l 2999.82 3090.58 l 3020.33 3091 l 3037.88 3091.39 l 3055.39 3091.81 l 3072.86 3092.26 l 3090.28 3092.74 l 3106.55 3093.23 l 3122.78 3093.74 l 3138.97 3094.28 l 3155.1 3094.84 l 3168.97 3095.35 l 3182.81 3095.88 l 3196.6 3096.43 l 3210.35 3097.01 l 3223 3097.55 l 3235.61 3098.11 l 3248.18 3098.69 l 3260.71 3099.29 l 3272.77 3099.88 l 3284.78 3100.49 l 3296.76 3101.11 l 3308.69 3101.75 l 3321.15 3102.44 l 3333.57 3103.14 l 3345.94 3103.87 l 3358.26 3104.6 l 3372.46 3105.48 l 3386.6 3106.38 l 3400.66 3107.3 l 3414.65 3108.24 l 3425.31 3108.98 l 3435.92 3109.73 l 3446.49 3110.49 l 3457.01 3111.27 l 3466.63 3111.99 l 3476.21 3112.73 l 3485.74 3113.47 l 3495.24 3114.23 l 3504.69 3115 l 3514.1 3115.77 l 3523.46 3116.56 l 3532.78 3117.36 l S /DeviceGray {} CS [0] SC 3532.78 3117.35 m 3548.69 3118.75 l 3564.47 3120.18 l 3580.11 3121.63 l 3595.6 3123.12 l 3612.9 3124.82 l 3630.01 3126.57 l 3646.93 3128.35 l 3663.65 3130.17 l 3681.36 3132.16 l 3698.84 3134.19 l 3716.08 3136.26 l 3733.08 3138.37 l 3748.57 3140.35 l 3763.85 3142.37 l 3778.9 3144.41 l 3793.74 3146.49 l 3807.68 3148.5 l 3821.42 3150.54 l 3834.95 3152.61 l 3848.26 3154.7 l 3861.42 3156.82 l 3874.35 3158.98 l 3887.06 3161.15 l 3899.55 3163.36 l 3912.19 3165.65 l 3924.59 3167.97 l 3936.74 3170.32 l 3948.64 3172.69 l 3960.96 3175.22 l 3972.99 3177.78 l 3984.74 3180.36 l 3996.2 3182.97 l 4008.46 3185.86 l 4020.38 3188.79 l 4031.93 3191.73 l 4043.13 3194.71 l 4054.9 3197.97 l 4066.24 3201.26 l 4077.14 3204.58 l 4087.61 3207.92 l 4097.96 3211.4 l 4107.84 3214.9 l 4117.24 3218.43 l 4126.17 3221.98 l 4135.02 3225.72 l 4143.33 3229.48 l 4151.12 3233.26 l 4158.38 3237.06 l 4166.1 3241.47 l 4173.11 3245.9 l 4179.4 3250.34 l 4184.98 3254.81 l 4189.4 3258.84 l 4193.24 3262.88 l 4196.5 3266.93 l 4199.17 3270.99 l 4201.27 3275.05 l 4202.78 3279.12 l 4203.71 3283.19 l 4204.06 3287.25 l 4203.82 3291.38 l 4202.99 3295.5 l 4201.56 3299.62 l 4199.54 3303.73 l 4196.85 3307.93 l 4193.54 3312.12 l 4189.63 3316.29 l 4185.1 3320.45 l 4179.79 3324.71 l 4173.84 3328.96 l 4167.26 3333.18 l 4160.05 3337.37 l 4151.9 3341.7 l 4143.08 3345.99 l 4133.6 3350.25 l 4123.46 3354.47 l 4112.13 3358.86 l 4100.09 3363.21 l 4087.35 3367.51 l 4073.92 3371.77 l 4059.64 3376.02 l 4044.67 3380.22 l 4029.02 3384.37 l 4012.71 3388.45 l 3995.47 3392.55 l 3977.56 3396.57 l 3959 3400.53 l 3939.81 3404.42 l 3919.55 3408.32 l 3898.66 3412.15 l 3877.14 3415.9 l 3855.01 3419.57 l 3831.73 3423.24 l 3807.84 3426.82 l 3783.35 3430.32 l 3758.29 3433.72 l 3731.98 3437.11 l 3705.11 3440.41 l 3677.67 3443.6 l 3649.7 3446.69 l 3620.37 3449.76 l 3590.5 3452.72 l 3560.13 3455.56 l 3529.28 3458.29 l 3496.84 3460.98 l 3463.94 3463.55 l 3430.57 3465.99 l 3396.79 3468.3 l 3360.86 3470.58 l 3324.52 3472.71 l 3287.8 3474.69 l 3250.71 3476.52 l 3211.93 3478.26 l 3172.84 3479.84 l 3133.45 3481.25 l 3093.8 3482.49 l 3054.89 3483.54 l 3015.8 3484.43 l 2976.55 3485.16 l 2937.18 3485.73 l 2897.77 3486.14 l 2858.31 3486.38 l 2818.82 3486.47 l 2779.32 3486.39 l 2739.7 3486.15 l 2700.13 3485.75 l 2660.66 3485.19 l 2621.31 3484.46 l 2581.84 3483.57 l 2542.55 3482.51 l 2503.48 3481.29 l 2464.66 3479.91 l 2425.76 3478.36 l 2387.17 3476.64 l 2348.94 3474.76 l 2311.09 3472.72 l 2273.22 3470.49 l 2235.81 3468.1 l 2198.88 3465.56 l 2162.47 3462.86 l 2126.13 3459.96 l 2090.38 3456.91 l 2055.26 3453.7 l 2020.8 3450.34 l 1986.49 3446.77 l 1952.93 3443.04 l 1920.15 3439.17 l 1888.19 3435.15 l 1856.46 3430.91 l 1825.64 3426.52 l 1795.76 3421.99 l 1766.85 3417.33 l 1738.26 3412.4 l 1710.76 3407.34 l 1684.38 3402.15 l 1659.15 3396.84 l 1634.23 3391.2 l 1610.61 3385.43 l 1588.33 3379.55 l 1567.42 3373.55 l 1546.08 3366.85 l 1526.46 3360.03 l 1508.58 3353.09 l 1492.49 3346.06 l 1478.55 3339.11 l 1466.35 3332.08 l 1455.93 3324.98 l 1447.31 3317.82 l 1440.62 3310.74 l 1435.7 3303.62 l 1432.56 3296.47 l 1431.22 3289.3 l 1431.65 3282.25 l 1433.83 3275.19 l 1437.76 3268.14 l 1443.45 3261.11 l 1450.77 3254.19 l 1459.8 3247.3 l 1470.53 3240.45 l 1482.96 3233.65 l 1497 3226.93 l 1512.71 3220.28 l 1530.07 3213.71 l 1549.06 3207.21 l 1569.7 3200.8 l 1591.93 3194.5 l 1615.74 3188.29 l 1641.11 3182.21 l 1668.22 3176.2 l 1696.86 3170.33 l 1726.99 3164.61 l 1758.57 3159.03 l 1791.65 3153.61 l 1826.12 3148.35 l 1861.93 3143.27 l 1899.04 3138.37 l 1937.75 3133.62 l 1977.69 3129.07 l 2018.79 3124.74 l 2061.02 3120.61 l 2105.13 3116.64 l 2150.29 3112.91 l 2196.42 3109.41 l 2243.46 3106.17 l 2293.53 3103.05 l 2344.44 3100.21 l 2396.11 3097.66 l 2448.45 3095.4 l 2499.65 3093.49 l 2551.33 3091.87 l 2603.41 3090.53 l 2655.8 3089.47 l 2707.56 3088.71 l 2759.47 3088.23 l 2811.47 3088.03 l 2863.46 3088.1 l 2915.03 3088.46 l 2966.44 3089.08 l 3017.63 3089.98 l 3068.53 3091.15 l 3118.96 3092.59 l 3168.95 3094.29 l 3218.42 3096.26 l 3267.31 3098.48 l 3315.64 3100.97 l 3363.25 3103.71 l 3410.06 3106.7 l 3456 3109.93 l 3501.28 3113.42 l 3545.56 3117.14 l 3588.78 3121.09 l 3630.87 3125.27 l 3672.18 3129.7 l 3712.23 3134.35 l 3750.96 3139.2 l 3788.33 3144.24 l 3824.82 3149.56 l 3859.8 3155.06 l 3893.22 3160.74 l 3925.03 3166.58 l 3955.94 3172.73 l 3985.08 3179.04 l 4012.41 3185.49 l 4037.89 3192.07 l 4062.65 3199.11 l 4085.31 3206.28 l 4105.83 3213.55 l 4124.2 3220.91 l 4141.62 3228.96 l 4156.47 3237.09 l 4168.75 3245.28 l 4178.44 3253.51 l 4184.92 3260.92 l 4189.32 3268.33 l 4191.64 3275.74 l 4191.89 3283.14 l 4190.16 3290.26 l 4186.52 3297.34 l 4180.98 3304.37 l 4173.56 3311.34 l 4164.48 3318.11 l 4153.64 3324.8 l 4141.05 3331.4 l 4126.75 3337.91 l 4110.96 3344.24 l 4093.56 3350.46 l 4074.56 3356.56 l 4054.01 3362.54 l 4032.06 3368.35 l 4008.63 3374.02 l 3983.77 3379.54 l 3957.52 3384.9 l 3930.28 3390.03 l 3901.75 3395 l 3871.99 3399.79 l 3841.02 3404.41 l 3809.27 3408.79 l 3776.43 3412.98 l 3742.54 3416.99 l 3707.65 3420.79 l 3672.06 3424.37 l 3635.57 3427.74 l 3598.23 3430.9 l 3560.08 3433.85 l 3521.32 3436.57 l 3481.85 3439.06 l 3441.73 3441.33 l 3401 3443.37 l 3359.71 3445.18 l 3317.91 3446.74 l 3275.65 3448.07 l 3232.98 3449.15 l 3189.64 3449.99 l 3146 3450.58 l 3102.1 3450.9 l 3058 3450.97 l 3012.81 3450.77 l 2967.52 3450.29 l 2922.2 3449.53 l 2876.9 3448.49 l 2833.21 3447.21 l 2789.65 3445.67 l 2746.27 3443.86 l 2703.12 3441.78 l 2661.55 3439.5 l 2620.31 3436.96 l 2579.43 3434.17 l 2538.98 3431.11 l 2499.85 3427.87 l 2461.22 3424.38 l 2423.13 3420.64 l 2385.62 3416.64 l 2349.41 3412.47 l 2313.86 3408.06 l 2278.99 3403.4 l 2244.85 3398.49 l 2212.04 3393.43 l 2180.02 3388.12 l 2148.82 3382.57 l 2118.48 3376.79 l 2089.48 3370.85 l 2061.39 3364.67 l 2034.24 3358.26 l 2008.07 3351.61 l 1983.22 3344.81 l 1959.39 3337.77 l 1936.61 3330.5 l 1914.9 3322.98 l 1894.43 3315.28 l 1875.08 3307.34 l 1856.87 3299.15 l 1839.83 3290.72 l 1824.15 3282.14 l 1809.65 3273.3 l 1796.36 3264.22 l 1784.3 3254.88 l 1773.58 3245.37 l 1764.1 3235.6 l 1755.87 3225.56 l 1748.9 3215.25 l 1743.11 3204.46 l 1738.66 3193.38 l 1735.53 3181.98 l 1733.75 3170.26 l 1733.29 3159.23 l 1733.96 3147.91 l 1735.76 3136.28 l 1738.67 3124.34 l 1742.63 3112.25 l 1747.67 3099.82 l 1753.78 3087.05 l 1760.95 3073.9 l 1769.68 3059.56 l 1779.56 3044.76 l 1790.57 3029.48 l 1802.7 3013.7 l 1814.41 2999.19 l 1826.95 2984.24 l 1840.32 2968.81 l 1854.48 2952.89 l 1867.24 2938.83 l 1880.55 2924.36 l 1894.39 2909.48 l 1908.75 2894.15 l 1922.65 2879.4 l 1936.97 2864.23 l 1951.69 2848.63 l 1966.8 2832.58 l 1980.13 2818.38 l 1993.72 2803.83 l 2007.56 2788.93 l 2021.64 2773.65 l 2034.84 2759.23 l 2048.22 2744.48 l 2061.77 2729.4 l 2075.49 2714 l 2088.86 2698.81 l 2102.37 2683.31 l 2115.99 2667.5 l 2129.71 2651.38 l 2144.19 2634.15 l 2158.76 2616.57 l 2173.39 2598.67 l 2188.05 2580.45 l 2205.08 2558.94 l 2222.09 2537.04 l 2239.05 2514.76 l 2255.92 2492.14 l 2268.75 2474.6 l 2281.47 2456.88 l 2294.07 2439.01 l 2306.51 2421.01 l 2317.78 2404.37 l 2328.88 2387.64 l 2339.78 2370.85 l 2350.47 2354 l 2360.92 2337.13 l 2371.12 2320.24 l 2381.03 2303.35 l 2390.64 2286.48 l S /DeviceRGB {} CS [1 0 0] SC 2516.05 2266.9 m 2526.48 2252.42 l 2536.74 2237.98 l 2546.81 2223.59 l 2556.69 2209.25 l 2567.58 2193.17 l 2578.21 2177.19 l 2588.55 2161.34 l 2598.61 2145.61 l 2609.07 2128.9 l 2619.18 2112.38 l 2628.94 2096.05 l 2638.35 2079.94 l 2646.73 2065.25 l 2654.8 2050.76 l 2662.58 2036.48 l 2670.05 2022.41 l 2676.89 2009.21 l 2683.48 1996.21 l 2689.79 1983.42 l 2695.85 1970.85 l 2701.68 1958.45 l 2707.26 1946.28 l 2712.6 1934.33 l 2717.7 1922.61 l 2722.72 1910.76 l 2727.5 1899.16 l 2732.06 1887.8 l 2736.4 1876.68 l 2740.75 1865.19 l 2744.89 1853.96 l 2748.8 1843 l 2752.51 1832.3 l 2756.37 1820.83 l 2760 1809.68 l 2763.41 1798.82 l 2766.62 1788.26 l 2769.9 1777.11 l 2772.97 1766.3 l 2775.84 1755.82 l 2778.52 1745.65 l 2781.11 1735.49 l 2783.52 1725.64 l 2785.77 1716.12 l 2787.87 1706.89 l 2789.93 1697.55 l 2791.84 1688.51 l 2793.61 1679.79 l 2795.26 1671.35 l 2797.03 1661.96 l 2798.66 1652.93 l 2800.16 1644.25 l 2801.54 1635.91 l 2802.7 1628.66 l 2803.77 1621.65 l 2804.77 1614.89 l 2805.69 1608.36 l 2806.56 1602.05 l 2807.37 1595.95 l 2808.12 1590.06 l 2808.82 1584.36 l 2809.48 1578.77 l 2810.09 1573.37 l 2810.67 1568.15 l 2811.21 1563.11 l 2811.72 1558.12 l 2812.19 1553.29 l 2812.64 1548.64 l 2813.05 1544.14 l 2813.45 1539.66 l 2813.82 1535.33 l 2814.16 1531.16 l 2814.48 1527.13 l 2814.79 1523.09 l 2815.08 1519.2 l 2815.35 1515.44 l 2815.6 1511.81 l 2815.84 1508.14 l 2816.07 1504.6 l 2816.28 1501.19 l 2816.47 1497.9 l 2816.66 1494.69 l 2816.83 1491.6 l 2816.99 1488.61 l 2817.13 1485.74 l 2817.27 1482.92 l 2817.4 1480.2 l 2817.52 1477.58 l 2817.63 1475.05 l 2817.74 1472.56 l 2817.83 1470.16 l 2817.93 1467.85 l 2818.01 1465.62 l 2818.09 1463.42 l 2818.17 1461.3 l 2818.24 1459.25 l 2818.3 1457.28 l 2818.36 1455.33 l 2818.42 1453.45 l 2818.47 1451.64 l 2818.52 1449.89 l 2818.57 1448.16 l 2818.61 1446.5 l 2818.65 1444.89 l 2818.69 1443.35 l 2818.73 1441.81 l 2818.76 1440.33 l 2818.79 1438.9 l 2818.82 1437.53 l 2818.85 1436.14 l 2818.87 1434.81 l 2818.9 1433.53 l 2818.92 1432.3 l 2818.94 1431.08 l 2818.96 1429.9 l 2818.98 1428.78 l 2818.99 1427.7 l 2819.01 1426.68 l 2819.02 1425.71 l 2819.03 1424.77 l 2819.04 1423.87 l 2819.06 1423 l 2819.07 1422.17 l 2819.07 1421.37 l 2819.08 1420.6 l 2819.09 1419.86 l 2819.1 1419.15 l 2819.11 1418.46 l 2819.11 1417.8 l 2819.12 1417.16 l 2819.12 1416.54 l 2819.13 1415.95 l 2819.13 1415.38 l 2819.14 1414.83 l 2819.14 1413.79 l 2819.15 1413.29 l 2819.15 1412.36 l 2819.16 1411.92 l 2819.16 1410.3 l 2819.17 1409.93 l 2819.17 1408.27 l 2819.18 1407.97 l 2819.18 1404.88 l 2819.19 1404.69 l 2819.19 1400.76 l S /DeviceRGB {} CS [0 0.5019 0] SC 3539.09 3116.57 m 3548 3117.34 l 3556.87 3118.13 l 3565.69 3118.92 l 3574.48 3119.73 l 3584.33 3120.64 l 3594.13 3121.57 l 3603.88 3122.52 l 3613.56 3123.47 l 3623.88 3124.5 l 3634.13 3125.55 l 3644.31 3126.61 l 3654.42 3127.68 l 3663.71 3128.69 l 3672.94 3129.7 l 3682.11 3130.73 l 3691.21 3131.76 l 3699.85 3132.76 l 3708.44 3133.77 l 3716.96 3134.79 l 3725.43 3135.82 l 3733.86 3136.86 l 3742.24 3137.91 l 3750.56 3138.97 l 3758.81 3140.04 l 3767.26 3141.15 l 3775.65 3142.27 l 3783.97 3143.4 l 3792.22 3144.54 l 3800.89 3145.76 l 3809.48 3146.99 l 3817.99 3148.23 l 3826.42 3149.48 l 3835.6 3150.86 l 3844.68 3152.26 l 3853.66 3153.66 l 3862.55 3155.08 l 3872.1 3156.64 l 3881.53 3158.21 l 3890.85 3159.79 l 3900.04 3161.39 l 3909.43 3163.05 l 3918.68 3164.73 l 3927.81 3166.42 l 3936.81 3168.12 l 3946.14 3169.93 l 3955.33 3171.75 l 3964.37 3173.59 l 3973.26 3175.44 l 3983.11 3177.54 l 3992.78 3179.66 l 4002.25 3181.79 l 4011.53 3183.94 l 4019.85 3185.93 l 4028.02 3187.92 l 4036.01 3189.93 l 4043.85 3191.95 l 4051.53 3193.99 l 4059.05 3196.04 l 4066.39 3198.1 l 4073.57 3200.18 l 4080.7 3202.3 l 4087.65 3204.43 l 4094.42 3206.57 l 4101.02 3208.72 l 4107.59 3210.93 l 4113.98 3213.16 l 4120.17 3215.4 l 4126.18 3217.64 l 4132.17 3219.97 l 4137.96 3222.3 l 4143.55 3224.64 l 4148.93 3226.99 l 4154.3 3229.44 l 4159.44 3231.9 l 4164.36 3234.37 l 4169.06 3236.84 l 4173.75 3239.44 l 4178.2 3242.05 l 4182.39 3244.66 l 4186.34 3247.29 l 4190.09 3249.95 l 4193.58 3252.61 l 4196.82 3255.28 l 4199.81 3257.96 l 4202.59 3260.68 l 4205.1 3263.41 l 4207.35 3266.14 l 4209.34 3268.87 l 4211.1 3271.66 l 4212.59 3274.45 l 4213.8 3277.25 l 4214.74 3280.04 l 4215.42 3282.91 l 4215.82 3285.77 l 4215.93 3288.63 l 4215.76 3291.49 l 4215.28 3294.42 l 4214.51 3297.35 l 4213.44 3300.27 l 4212.08 3303.19 l 4210.36 3306.19 l 4208.33 3309.19 l 4205.99 3312.18 l 4203.34 3315.16 l 4200.26 3318.24 l 4196.86 3321.32 l 4193.12 3324.38 l 4189.06 3327.43 l 4184.43 3330.63 l 4179.44 3333.82 l 4174.09 3336.99 l 4168.38 3340.15 l 4162.17 3343.37 l 4155.6 3346.57 l 4148.66 3349.75 l 4141.36 3352.91 l 4133.86 3355.99 l 4126.02 3359.05 l 4117.84 3362.08 l 4109.32 3365.1 l 4100.48 3368.09 l 4091.31 3371.05 l 4081.81 3374 l 4071.98 3376.92 l 4061.79 3379.82 l 4051.28 3382.7 l 4040.45 3385.56 l 4029.3 3388.38 l 4017.76 3391.2 l 4005.91 3393.99 l 3993.75 3396.75 l 3981.29 3399.48 l 3968.4 3402.21 l 3955.21 3404.9 l 3941.72 3407.56 l 3927.94 3410.19 l 3913.7 3412.81 l 3899.17 3415.4 l 3884.35 3417.95 l 3869.24 3420.46 l 3853.64 3422.97 l 3837.76 3425.44 l 3821.6 3427.87 l 3805.17 3430.26 l 3788.18 3432.65 l 3770.92 3434.99 l 3753.4 3437.3 l 3735.62 3439.55 l 3717.2 3441.81 l 3698.53 3444.02 l 3679.6 3446.19 l 3660.42 3448.3 l 3640.47 3450.42 l 3620.26 3452.49 l 3599.82 3454.51 l 3579.13 3456.47 l 3557.36 3458.46 l 3535.34 3460.39 l 3513.09 3462.26 l 3490.62 3464.07 l 3466.69 3465.91 l 3442.54 3467.68 l 3418.16 3469.38 l 3393.56 3471.02 l 3368.83 3472.58 l 3343.91 3474.08 l 3318.79 3475.5 l 3293.5 3476.85 l 3268.32 3478.12 l 3242.97 3479.32 l 3217.48 3480.45 l 3191.86 3481.51 l 3166.62 3482.48 l 3141.26 3483.38 l 3115.8 3484.21 l 3090.23 3484.98 l 3064.9 3485.66 l 3039.49 3486.29 l 3014 3486.84 l 2988.46 3487.32 l 2962.95 3487.74 l 2937.4 3488.09 l 2911.81 3488.37 l 2886.19 3488.59 l 2860.5 3488.74 l 2834.8 3488.82 l 2809.09 3488.83 l 2783.39 3488.77 l 2757.44 3488.65 l 2731.51 3488.45 l 2705.61 3488.19 l 2679.74 3487.86 l 2653.87 3487.46 l 2628.05 3486.99 l 2602.29 3486.45 l 2576.6 3485.84 l 2550.72 3485.16 l 2524.92 3484.4 l 2499.22 3483.58 l 2473.63 3482.69 l 2447.57 3481.7 l 2421.64 3480.64 l 2395.85 3479.51 l 2370.21 3478.31 l 2343.74 3476.99 l 2317.45 3475.59 l 2291.35 3474.12 l 2265.46 3472.57 l 2240.86 3471.01 l 2216.46 3469.39 l 2192.28 3467.7 l 2168.31 3465.94 l 2144.88 3464.14 l 2121.68 3462.27 l 2098.72 3460.35 l 2076.01 3458.35 l 2053.67 3456.31 l 2031.6 3454.2 l 2009.8 3452.04 l 1988.28 3449.81 l 1967.06 3447.53 l 1946.13 3445.19 l 1925.5 3442.79 l 1905.19 3440.33 l 1885.13 3437.81 l 1865.39 3435.23 l 1845.99 3432.59 l 1826.94 3429.91 l 1808.1 3427.15 l 1789.63 3424.33 l 1771.53 3421.47 l 1753.8 3418.55 l 1736.27 3415.54 l 1719.13 3412.49 l 1702.4 3409.39 l 1686.09 3406.24 l 1669.92 3402.98 l 1654.2 3399.68 l 1638.92 3396.33 l 1624.11 3392.93 l 1609.35 3389.39 l 1595.08 3385.8 l 1581.33 3382.17 l 1568.08 3378.49 l 1554.64 3374.56 l 1541.8 3370.58 l 1529.55 3366.56 l 1517.91 3362.5 l 1506.71 3358.34 l 1496.16 3354.13 l 1486.26 3349.89 l 1477 3345.62 l 1468.95 3341.6 l 1461.48 3337.54 l 1454.59 3333.47 l 1448.3 3329.37 l 1442.76 3325.36 l 1437.78 3321.34 l 1433.37 3317.31 l 1429.53 3313.25 l 1426.33 3309.26 l 1423.68 3305.25 l 1421.58 3301.23 l 1420.06 3297.2 l 1419.1 3293.21 l 1418.7 3289.22 l 1418.85 3285.22 l 1419.56 3281.22 l 1420.82 3277.23 l 1422.65 3273.24 l 1425.02 3269.25 l 1427.96 3265.27 l 1431.4 3261.34 l 1435.39 3257.42 l 1439.92 3253.51 l 1444.99 3249.61 l 1450.55 3245.76 l 1456.64 3241.93 l 1463.25 3238.1 l 1470.4 3234.3 l 1478.03 3230.53 l 1486.18 3226.78 l 1494.84 3223.06 l 1504.02 3219.35 l 1513.7 3215.68 l 1523.89 3212.02 l 1534.58 3208.4 l 1545.78 3204.8 l 1557.52 3201.22 l 1569.77 3197.67 l 1582.51 3194.15 l 1595.74 3190.67 l 1609.68 3187.17 l 1624.12 3183.71 l 1639.06 3180.28 l 1654.48 3176.9 l 1670.25 3173.59 l 1686.5 3170.32 l 1703.2 3167.1 l 1720.37 3163.92 l 1737.33 3160.91 l 1754.71 3157.94 l 1772.5 3155.02 l 1790.69 3152.15 l 1808.83 3149.39 l 1827.35 3146.68 l 1846.23 3144.01 l 1865.47 3141.4 l 1884.69 3138.89 l 1904.24 3136.43 l 1924.11 3134.02 l 1944.31 3131.66 l 1964.46 3129.4 l 1984.92 3127.18 l 2005.66 3125.02 l 2026.68 3122.92 l 2047.65 3120.9 l 2068.87 3118.93 l 2090.35 3117.02 l 2112.07 3115.16 l 2133.71 3113.39 l 2155.58 3111.67 l 2177.66 3110 l 2199.96 3108.4 l 2222.18 3106.86 l 2244.59 3105.39 l 2267.19 3103.97 l 2289.96 3102.6 l 2312.76 3101.31 l 2335.72 3100.07 l 2358.84 3098.88 l 2382.1 3097.76 l 2405.23 3096.71 l 2428.49 3095.71 l 2451.87 3094.77 l 2475.36 3093.89 l 2498.68 3093.08 l 2522.1 3092.32 l 2545.61 3091.62 l 2569.2 3090.98 l 2593.2 3090.4 l 2617.26 3089.87 l 2641.39 3089.4 l 2665.58 3088.99 l 2688.54 3088.66 l 2711.54 3088.38 l 2734.57 3088.16 l 2757.62 3087.99 l 2781.25 3087.87 l 2804.89 3087.81 l 2828.54 3087.81 l 2852.18 3087.87 l 2874.57 3087.97 l 2896.95 3088.13 l 2919.31 3088.34 l 2941.64 3088.6 l 2961.9 3088.88 l 2982.14 3089.2 l 3002.33 3089.57 l 3022.49 3089.97 l 3040.01 3090.36 l 3057.49 3090.78 l 3074.93 3091.23 l 3092.32 3091.72 l 3107.93 3092.18 l 3123.49 3092.67 l 3139.02 3093.18 l 3154.5 3093.72 l 3168.9 3094.24 l 3183.25 3094.79 l 3197.57 3095.36 l 3211.84 3095.95 l 3224.72 3096.5 l 3237.57 3097.07 l 3250.38 3097.66 l 3263.14 3098.26 l 3275.32 3098.86 l 3287.47 3099.47 l 3299.57 3100.1 l 3311.63 3100.74 l 3324.04 3101.43 l 3336.41 3102.12 l 3348.72 3102.84 l 3360.99 3103.57 l 3375.71 3104.48 l 3390.34 3105.4 l 3404.9 3106.36 l 3419.38 3107.33 l 3430.25 3108.08 l 3441.06 3108.85 l 3451.83 3109.62 l 3462.55 3110.42 l 3472.27 3111.15 l 3481.95 3111.89 l 3491.58 3112.64 l 3501.17 3113.41 l 3510.72 3114.18 l 3520.22 3114.96 l 3529.68 3115.76 l 3539.09 3116.57 l S /DeviceRGB {} CS [0 0 1] SC 3539.09 3116.56 m 3555.31 3117.99 l 3571.39 3119.44 l 3587.32 3120.92 l 3603.11 3122.44 l 3620.74 3124.18 l 3638.18 3125.97 l 3655.42 3127.79 l 3672.46 3129.65 l 3690.48 3131.68 l 3708.27 3133.75 l 3725.81 3135.86 l 3743.09 3138.01 l 3758.85 3140.04 l 3774.39 3142.1 l 3789.7 3144.19 l 3804.78 3146.31 l 3818.97 3148.37 l 3832.95 3150.46 l 3846.71 3152.57 l 3860.24 3154.71 l 3873.6 3156.89 l 3886.74 3159.09 l 3899.64 3161.31 l 3912.31 3163.57 l 3925.14 3165.92 l 3937.72 3168.29 l 3950.04 3170.7 l 3962.11 3173.12 l 3974.6 3175.72 l 3986.8 3178.34 l 3998.71 3180.98 l 4010.31 3183.66 l 4022.71 3186.62 l 4034.75 3189.61 l 4046.42 3192.63 l 4057.72 3195.67 l 4069.57 3199.01 l 4080.97 3202.38 l 4091.93 3205.77 l 4102.44 3209.19 l 4112.83 3212.75 l 4122.72 3216.34 l 4132.13 3219.95 l 4141.05 3223.58 l 4149.9 3227.43 l 4158.19 3231.3 l 4165.94 3235.18 l 4173.13 3239.09 l 4180.58 3243.52 l 4187.31 3247.96 l 4193.34 3252.43 l 4198.66 3256.9 l 4202.9 3261.01 l 4206.54 3265.13 l 4209.58 3269.25 l 4212.03 3273.38 l 4213.89 3277.52 l 4215.15 3281.66 l 4215.81 3285.8 l 4215.87 3289.93 l 4215.32 3294.14 l 4214.16 3298.34 l 4212.39 3302.53 l 4210.01 3306.7 l 4206.94 3310.98 l 4203.24 3315.24 l 4198.91 3319.48 l 4193.95 3323.7 l 4188.18 3328.04 l 4181.75 3332.35 l 4174.68 3336.63 l 4166.96 3340.89 l 4158.26 3345.28 l 4148.88 3349.63 l 4138.82 3353.95 l 4128.09 3358.23 l 4116.13 3362.68 l 4103.45 3367.08 l 4090.06 3371.43 l 4075.96 3375.73 l 4060.99 3380.03 l 4045.31 3384.27 l 4028.95 3388.45 l 4011.91 3392.57 l 3993.91 3396.7 l 3975.23 3400.76 l 3955.89 3404.74 l 3935.9 3408.66 l 3914.83 3412.58 l 3893.11 3416.43 l 3870.75 3420.19 l 3847.77 3423.87 l 3823.61 3427.55 l 3798.84 3431.13 l 3773.46 3434.63 l 3747.5 3438.03 l 3720.27 3441.42 l 3692.45 3444.7 l 3664.08 3447.88 l 3635.17 3450.95 l 3604.85 3453.99 l 3574 3456.92 l 3542.64 3459.73 l 3510.8 3462.41 l 3477.3 3465.07 l 3443.33 3467.59 l 3408.91 3469.98 l 3374.07 3472.22 l 3336.94 3474.44 l 3299.4 3476.51 l 3261.48 3478.41 l 3223.21 3480.16 l 3183.7 3481.79 l 3143.89 3483.25 l 3103.81 3484.54 l 3063.5 3485.66 l 3023.83 3486.59 l 2984 3487.36 l 2944.04 3487.96 l 2903.98 3488.4 l 2863.88 3488.67 l 2823.74 3488.78 l 2783.6 3488.72 l 2743.48 3488.5 l 2703.25 3488.11 l 2663.1 3487.55 l 2623.07 3486.83 l 2583.2 3485.94 l 2543.22 3484.88 l 2503.46 3483.65 l 2463.96 3482.26 l 2424.73 3480.7 l 2385.45 3478.96 l 2346.53 3477.06 l 2308 3474.99 l 2269.88 3472.75 l 2231.78 3470.33 l 2194.18 3467.74 l 2157.11 3465 l 2120.6 3462.09 l 2084.19 3458.98 l 2048.42 3455.71 l 2013.33 3452.29 l 1978.96 3448.71 l 1944.77 3444.91 l 1911.38 3440.96 l 1878.83 3436.87 l 1847.15 3432.62 l 1815.74 3428.14 l 1785.31 3423.51 l 1755.88 3418.74 l 1727.49 3413.84 l 1699.45 3408.66 l 1672.56 3403.35 l 1646.87 3397.9 l 1622.41 3392.33 l 1598.28 3386.41 l 1575.55 3380.36 l 1554.24 3374.2 l 1534.4 3367.93 l 1515.1 3361.2 l 1497.48 3354.37 l 1481.58 3347.44 l 1467.42 3340.42 l 1455.07 3333.35 l 1444.51 3326.2 l 1435.76 3318.99 l 1428.83 3311.72 l 1423.8 3304.49 l 1420.59 3297.23 l 1419.23 3289.94 l 1419.7 3282.64 l 1421.97 3275.48 l 1426.03 3268.32 l 1431.88 3261.18 l 1439.53 3254.06 l 1448.83 3247.06 l 1459.88 3240.1 l 1472.67 3233.19 l 1487.19 3226.34 l 1503.35 3219.59 l 1521.21 3212.91 l 1540.75 3206.32 l 1561.94 3199.82 l 1584.82 3193.41 l 1609.31 3187.11 l 1635.4 3180.94 l 1663.06 3174.9 l 1692.55 3168.93 l 1723.57 3163.12 l 1756.08 3157.47 l 1790.05 3151.98 l 1825.51 3146.66 l 1862.35 3141.52 l 1900.52 3136.57 l 1939.97 3131.82 l 1981.09 3127.23 l 2023.42 3122.86 l 2066.89 3118.71 l 2111.44 3114.79 l 2158.07 3111.03 l 2205.71 3107.53 l 2254.27 3104.28 l 2303.68 3101.3 l 2355.85 3098.49 l 2408.77 3095.98 l 2462.37 3093.78 l 2516.55 3091.88 l 2568.91 3090.35 l 2621.64 3089.1 l 2674.67 3088.15 l 2727.9 3087.48 l 2780.59 3087.11 l 2833.33 3087.03 l 2886.04 3087.23 l 2938.63 3087.71 l 2990.77 3088.47 l 3042.65 3089.51 l 3094.18 3090.83 l 3145.3 3092.42 l 3195.9 3094.28 l 3245.94 3096.41 l 3295.34 3098.81 l 3344.04 3101.46 l 3392.1 3104.38 l 3439.31 3107.56 l 3485.61 3110.98 l 3530.91 3114.64 l 3575.47 3118.56 l 3618.9 3122.72 l 3661.14 3127.1 l 3702.13 3131.69 l 3742.26 3136.56 l 3781 3141.63 l 3818.29 3146.89 l 3854.1 3152.35 l 3888.94 3158.08 l 3922.14 3163.99 l 3953.66 3170.07 l 3983.44 3176.3 l 4012.25 3182.86 l 4039.16 3189.57 l 4064.12 3196.41 l 4087.1 3203.37 l 4109.23 3210.84 l 4129.09 3218.42 l 4146.67 3226.08 l 4161.93 3233.82 l 4175.06 3241.74 l 4185.78 3249.71 l 4194.09 3257.71 l 4200 3265.73 l 4203.35 3273.22 l 4204.6 3280.71 l 4203.77 3288.17 l 4200.87 3295.6 l 4196.08 3302.77 l 4189.38 3309.88 l 4180.77 3316.93 l 4170.28 3323.9 l 4158.18 3330.66 l 4144.32 3337.34 l 4128.72 3343.91 l 4111.42 3350.37 l 4092.66 3356.64 l 4072.31 3362.79 l 4050.38 3368.8 l 4026.92 3374.67 l 4002.03 3380.38 l 3975.7 3385.93 l 3947.96 3391.31 l 3918.86 3396.53 l 3888.84 3401.5 l 3857.58 3406.29 l 3825.12 3410.89 l 3791.51 3415.3 l 3757.14 3419.47 l 3721.72 3423.44 l 3685.32 3427.21 l 3647.96 3430.76 l 3609.92 3434.08 l 3571.04 3437.18 l 3531.37 3440.06 l 3490.96 3442.71 l 3449.93 3445.12 l 3408.25 3447.3 l 3365.99 3449.25 l 3323.2 3450.94 l 3279.76 3452.4 l 3235.89 3453.61 l 3191.64 3454.56 l 3147.07 3455.25 l 3101.53 3455.69 l 3055.77 3455.86 l 3009.86 3455.75 l 2963.84 3455.36 l 2918.18 3454.71 l 2872.53 3453.78 l 2826.95 3452.56 l 2781.51 3451.07 l 2737.92 3449.37 l 2694.56 3447.41 l 2651.48 3445.18 l 2608.74 3442.68 l 2567.38 3439.99 l 2526.43 3437.04 l 2485.94 3433.84 l 2445.98 3430.38 l 2407.32 3426.73 l 2369.25 3422.84 l 2331.81 3418.71 l 2295.05 3414.32 l 2259.61 3409.76 l 2224.92 3404.97 l 2191 3399.93 l 2157.91 3394.65 l 2126.18 3389.22 l 2095.32 3383.56 l 2065.38 3377.66 l 2036.38 3371.52 l 2008.77 3365.24 l 1982.15 3358.73 l 1956.55 3352 l 1932.01 3345.03 l 1908.85 3337.92 l 1886.78 3330.58 l 1865.83 3323.02 l 1846.02 3315.22 l 1827.51 3307.25 l 1810.19 3299.04 l 1794.08 3290.6 l 1779.2 3281.93 l 1765.72 3273.13 l 1753.5 3264.08 l 1742.53 3254.8 l 1732.85 3245.28 l 1724.55 3235.63 l 1717.52 3225.73 l 1711.79 3215.57 l 1707.35 3205.16 l 1704.18 3194.33 l 1702.35 3183.22 l 1701.87 3171.82 l 1702.74 3160.11 l 1704.81 3148.73 l 1708.08 3137.05 l 1712.56 3125.07 l 1718.22 3112.77 l 1725.25 3099.83 l 1733.51 3086.51 l 1742.99 3072.81 l 1753.65 3058.7 l 1764.85 3044.93 l 1777.07 3030.76 l 1790.31 3016.15 l 1804.54 3001.09 l 1818.3 2986.98 l 1832.84 2972.45 l 1848.14 2957.48 l 1864.16 2942.05 l 1878.69 2928.21 l 1893.74 2913.98 l 1909.29 2899.34 l 1925.32 2884.28 l 1940.13 2870.36 l 1955.31 2856.06 l 1970.83 2841.38 l 1986.69 2826.31 l 2001.77 2811.87 l 2017.11 2797.07 l 2032.71 2781.88 l 2048.54 2766.31 l 2063.09 2751.86 l 2077.81 2737.08 l 2092.7 2721.96 l 2107.75 2706.51 l 2122.3 2691.38 l 2136.97 2675.94 l 2151.76 2660.17 l 2166.65 2644.09 l 2182.13 2627.15 l 2197.7 2609.86 l 2213.33 2592.25 l 2229.02 2574.32 l 2247.97 2552.3 l 2266.94 2529.84 l 2285.89 2506.97 l 2304.78 2483.72 l 2318.95 2465.96 l 2333.05 2448.02 l 2347.04 2429.91 l 2360.91 2411.66 l 2373.42 2394.92 l 2385.78 2378.1 l 2397.98 2361.21 l 2410 2344.26 l 2421.82 2327.28 l 2433.41 2310.29 l 2444.77 2293.29 l 2455.87 2276.3 l S /DeviceGray {} CS [0] SC 2516.11 2266.9 m 2526.57 2252.39 l 2536.85 2237.91 l 2546.95 2223.48 l 2556.84 2209.11 l 2567.76 2192.98 l 2578.41 2176.96 l 2588.78 2161.05 l 2598.85 2145.28 l 2609.33 2128.55 l 2619.45 2111.99 l 2629.22 2095.64 l 2638.64 2079.51 l 2647.02 2064.78 l 2655.11 2050.26 l 2662.89 2035.95 l 2670.36 2021.86 l 2677.22 2008.62 l 2683.81 1995.58 l 2690.14 1982.76 l 2696.2 1970.16 l 2702.03 1957.73 l 2707.61 1945.54 l 2712.95 1933.57 l 2718.05 1921.83 l 2723.07 1909.96 l 2727.85 1898.33 l 2732.41 1886.95 l 2736.75 1875.81 l 2741.11 1864.28 l 2745.24 1853.02 l 2749.16 1842.03 l 2752.87 1831.3 l 2756.71 1819.82 l 2760.34 1808.64 l 2763.74 1797.77 l 2766.95 1787.2 l 2770.22 1776.05 l 2773.27 1765.24 l 2776.13 1754.75 l 2778.8 1744.59 l 2781.38 1734.41 l 2783.79 1724.56 l 2786.03 1715.03 l 2788.12 1705.8 l 2790.18 1696.41 l 2792.08 1687.33 l 2793.86 1678.56 l 2795.51 1670.1 l 2797.23 1660.88 l 2798.82 1652.02 l 2800.29 1643.5 l 2801.64 1635.29 l 2802.79 1628.06 l 2803.86 1621.07 l 2804.85 1614.32 l 2805.77 1607.81 l 2806.64 1601.5 l 2807.44 1595.41 l 2808.18 1589.53 l 2808.88 1583.84 l 2809.54 1578.25 l 2810.15 1572.86 l 2810.73 1567.65 l 2811.26 1562.61 l 2811.77 1557.62 l 2812.24 1552.81 l 2812.68 1548.16 l 2813.1 1543.66 l 2813.49 1539.19 l 2813.86 1534.87 l 2814.2 1530.7 l 2814.52 1526.68 l 2814.83 1522.65 l 2815.12 1518.76 l 2815.38 1515 l 2815.63 1511.38 l 2815.87 1507.72 l 2816.1 1504.19 l 2816.3 1500.79 l 2816.5 1497.51 l 2816.68 1494.31 l 2816.85 1491.22 l 2817 1488.25 l 2817.15 1485.38 l 2817.29 1482.57 l 2817.42 1479.85 l 2817.53 1477.24 l 2817.65 1474.72 l 2817.75 1472.24 l 2817.85 1469.84 l 2817.94 1467.54 l 2818.02 1465.31 l 2818.1 1463.11 l 2818.18 1461 l 2818.25 1458.96 l 2818.31 1456.99 l 2818.37 1455.04 l 2818.43 1453.17 l 2818.48 1451.36 l 2818.53 1449.62 l 2818.58 1447.9 l 2818.62 1446.24 l 2818.66 1444.64 l 2818.7 1443.09 l 2818.73 1441.56 l 2818.77 1440.08 l 2818.8 1438.65 l 2818.82 1437.28 l 2818.85 1435.9 l 2818.88 1434.56 l 2818.9 1433.29 l 2818.92 1432.06 l 2818.94 1430.85 l 2818.96 1429.69 l 2818.98 1428.57 l 2819 1427.5 l 2819.01 1426.5 l 2819.02 1425.53 l 2819.04 1424.6 l 2819.05 1423.71 l 2819.06 1422.85 l 2819.07 1422.02 l 2819.08 1421.23 l 2819.08 1420.46 l 2819.09 1419.73 l 2819.1 1419.02 l 2819.11 1418.33 l 2819.11 1417.68 l 2819.12 1417.04 l 2819.12 1416.43 l 2819.13 1415.84 l 2819.13 1415.28 l 2819.14 1414.73 l 2819.14 1413.69 l 2819.15 1413.2 l 2819.15 1412.27 l 2819.16 1411.83 l 2819.16 1410.6 l 2819.17 1410.22 l 2819.17 1408.21 l 2819.18 1407.91 l 2819.18 1404.85 l 2819.19 1404.66 l 2819.19 1400.76 l S /DeviceRGB {} CS [1 0 0] SC 3546.18 3115.69 m 3555.21 3116.47 l 3564.19 3117.27 l 3573.13 3118.08 l 3582.03 3118.89 l 3592.03 3119.82 l 3601.97 3120.77 l 3611.85 3121.72 l 3621.68 3122.69 l 3632.11 3123.74 l 3642.48 3124.8 l 3652.78 3125.87 l 3663.01 3126.96 l 3672.39 3127.97 l 3681.71 3129 l 3690.97 3130.03 l 3700.16 3131.08 l 3708.89 3132.09 l 3717.57 3133.11 l 3726.19 3134.14 l 3734.75 3135.18 l 3743.28 3136.24 l 3751.76 3137.3 l 3760.17 3138.38 l 3768.53 3139.46 l 3777.08 3140.59 l 3785.57 3141.72 l 3794 3142.87 l 3802.35 3144.03 l 3811.11 3145.26 l 3819.8 3146.51 l 3828.41 3147.76 l 3836.94 3149.03 l 3846.25 3150.43 l 3855.47 3151.85 l 3864.58 3153.28 l 3873.6 3154.73 l 3883.27 3156.31 l 3892.83 3157.9 l 3902.28 3159.51 l 3911.6 3161.13 l 3921.07 3162.81 l 3930.41 3164.51 l 3939.63 3166.22 l 3948.71 3167.95 l 3958.15 3169.78 l 3967.44 3171.63 l 3976.58 3173.49 l 3985.57 3175.37 l 3995.34 3177.46 l 4004.92 3179.57 l 4014.31 3181.69 l 4023.52 3183.83 l 4031.91 3185.83 l 4040.15 3187.85 l 4048.21 3189.88 l 4056.11 3191.92 l 4063.86 3193.98 l 4071.44 3196.05 l 4078.85 3198.14 l 4086.09 3200.23 l 4093.28 3202.37 l 4100.28 3204.53 l 4107.11 3206.69 l 4113.76 3208.86 l 4120.39 3211.1 l 4126.83 3213.35 l 4133.07 3215.61 l 4139.13 3217.88 l 4145.17 3220.23 l 4151 3222.59 l 4156.63 3224.96 l 4162.04 3227.33 l 4167.45 3229.81 l 4172.63 3232.29 l 4177.58 3234.78 l 4182.31 3237.28 l 4187.03 3239.91 l 4191.49 3242.54 l 4195.71 3245.18 l 4199.68 3247.83 l 4203.44 3250.52 l 4206.95 3253.21 l 4210.21 3255.91 l 4213.21 3258.61 l 4215.99 3261.36 l 4218.51 3264.12 l 4220.76 3266.88 l 4222.74 3269.64 l 4224.5 3272.46 l 4225.98 3275.28 l 4227.18 3278.11 l 4228.11 3280.93 l 4228.77 3283.82 l 4229.15 3286.71 l 4229.23 3289.6 l 4229.03 3292.49 l 4228.53 3295.45 l 4227.72 3298.41 l 4226.61 3301.37 l 4225.21 3304.32 l 4223.44 3307.35 l 4221.36 3310.38 l 4218.97 3313.4 l 4216.26 3316.41 l 4213.12 3319.53 l 4209.64 3322.64 l 4205.83 3325.73 l 4201.68 3328.82 l 4196.92 3332.08 l 4191.79 3335.33 l 4186.29 3338.57 l 4180.43 3341.79 l 4174.15 3345.01 l 4167.5 3348.22 l 4160.49 3351.42 l 4153.12 3354.59 l 4145.52 3357.69 l 4137.58 3360.76 l 4129.31 3363.82 l 4120.69 3366.85 l 4111.74 3369.86 l 4102.46 3372.85 l 4092.85 3375.82 l 4082.91 3378.76 l 4072.6 3381.68 l 4061.97 3384.59 l 4051.02 3387.46 l 4039.75 3390.31 l 4028.08 3393.15 l 4016.1 3395.96 l 4003.8 3398.74 l 3991.2 3401.49 l 3978.17 3404.24 l 3964.84 3406.95 l 3951.2 3409.63 l 3937.27 3412.28 l 3922.88 3414.92 l 3908.19 3417.53 l 3893.21 3420.1 l 3877.95 3422.63 l 3862.17 3425.16 l 3846.12 3427.65 l 3829.78 3430.1 l 3813.17 3432.51 l 3795.99 3434.92 l 3778.54 3437.28 l 3760.83 3439.6 l 3742.85 3441.88 l 3724.21 3444.16 l 3705.32 3446.39 l 3686.17 3448.57 l 3666.76 3450.7 l 3646.55 3452.84 l 3626.09 3454.93 l 3605.38 3456.97 l 3584.43 3458.95 l 3562.28 3460.96 l 3539.89 3462.92 l 3517.25 3464.81 l 3494.39 3466.64 l 3470.59 3468.46 l 3446.56 3470.22 l 3422.3 3471.91 l 3397.84 3473.53 l 3373.09 3475.09 l 3348.13 3476.58 l 3323 3478 l 3297.68 3479.36 l 3272.32 3480.63 l 3246.8 3481.84 l 3221.13 3482.98 l 3195.32 3484.04 l 3169.91 3485.02 l 3144.38 3485.93 l 3118.74 3486.76 l 3093.01 3487.53 l 3067.48 3488.23 l 3041.87 3488.86 l 3016.19 3489.41 l 2990.45 3489.9 l 2964.73 3490.33 l 2938.96 3490.68 l 2913.15 3490.97 l 2887.32 3491.18 l 2861.39 3491.33 l 2835.45 3491.42 l 2809.51 3491.43 l 2783.56 3491.38 l 2757.25 3491.25 l 2730.96 3491.06 l 2704.7 3490.79 l 2678.48 3490.45 l 2652.33 3490.05 l 2626.23 3489.57 l 2600.2 3489.03 l 2574.24 3488.41 l 2548.02 3487.72 l 2521.9 3486.96 l 2495.88 3486.12 l 2469.96 3485.22 l 2443.42 3484.21 l 2417.02 3483.13 l 2390.76 3481.98 l 2364.66 3480.76 l 2338.53 3479.45 l 2312.58 3478.07 l 2286.81 3476.61 l 2261.24 3475.08 l 2236.55 3473.53 l 2212.05 3471.9 l 2187.77 3470.21 l 2163.71 3468.45 l 2140.12 3466.64 l 2116.77 3464.77 l 2093.65 3462.84 l 2070.79 3460.84 l 2048.27 3458.79 l 2026.01 3456.67 l 2004.03 3454.5 l 1982.33 3452.26 l 1960.91 3449.97 l 1939.78 3447.61 l 1918.96 3445.2 l 1898.45 3442.72 l 1878.18 3440.19 l 1858.23 3437.59 l 1838.63 3434.94 l 1819.37 3432.23 l 1800.31 3429.45 l 1781.62 3426.62 l 1763.3 3423.73 l 1745.37 3420.79 l 1727.6 3417.76 l 1710.24 3414.68 l 1693.29 3411.55 l 1676.76 3408.37 l 1660.36 3405.08 l 1644.4 3401.74 l 1628.9 3398.35 l 1613.87 3394.92 l 1598.85 3391.33 l 1584.34 3387.69 l 1570.35 3384.01 l 1556.88 3380.29 l 1542.93 3376.22 l 1529.62 3372.1 l 1516.94 3367.94 l 1504.91 3363.73 l 1493.85 3359.61 l 1483.41 3355.45 l 1473.6 3351.25 l 1464.43 3347.02 l 1456.33 3342.99 l 1448.81 3338.93 l 1441.87 3334.84 l 1435.52 3330.73 l 1429.91 3326.71 l 1424.86 3322.67 l 1420.39 3318.61 l 1416.48 3314.53 l 1413.2 3310.51 l 1410.49 3306.47 l 1408.33 3302.43 l 1406.74 3298.37 l 1405.72 3294.35 l 1405.26 3290.32 l 1405.37 3286.29 l 1406.03 3282.26 l 1407.25 3278.23 l 1409.03 3274.2 l 1411.38 3270.18 l 1414.28 3266.16 l 1417.71 3262.19 l 1421.69 3258.23 l 1426.22 3254.27 l 1431.3 3250.33 l 1436.87 3246.43 l 1442.99 3242.55 l 1449.64 3238.68 l 1456.83 3234.82 l 1464.52 3231 l 1472.74 3227.2 l 1481.49 3223.42 l 1490.77 3219.66 l 1500.57 3215.92 l 1510.9 3212.21 l 1521.75 3208.53 l 1533.11 3204.87 l 1545.11 3201.2 l 1557.63 3197.57 l 1570.66 3193.98 l 1584.2 3190.41 l 1598.73 3186.77 l 1613.79 3183.17 l 1629.38 3179.61 l 1645.5 3176.1 l 1661.17 3172.83 l 1677.29 3169.6 l 1693.86 3166.41 l 1710.87 3163.28 l 1727.86 3160.26 l 1745.26 3157.3 l 1763.06 3154.38 l 1781.27 3151.51 l 1799.48 3148.74 l 1818.07 3146.02 l 1837.02 3143.35 l 1856.33 3140.73 l 1875.65 3138.21 l 1895.3 3135.73 l 1915.28 3133.31 l 1935.58 3130.94 l 1955.87 3128.66 l 1976.45 3126.43 l 1997.33 3124.25 l 2018.48 3122.13 l 2039.6 3120.09 l 2060.98 3118.11 l 2082.61 3116.18 l 2104.49 3114.31 l 2126.3 3112.52 l 2148.34 3110.79 l 2170.61 3109.1 l 2193.08 3107.48 l 2215.49 3105.93 l 2238.1 3104.44 l 2260.89 3103.01 l 2283.86 3101.63 l 2306.86 3100.32 l 2330.03 3099.06 l 2353.35 3097.87 l 2376.83 3096.73 l 2400.17 3095.66 l 2423.65 3094.66 l 2447.25 3093.71 l 2470.96 3092.81 l 2494.47 3091.99 l 2518.08 3091.23 l 2541.77 3090.52 l 2565.56 3089.87 l 2589.55 3089.28 l 2613.61 3088.75 l 2637.74 3088.27 l 2661.93 3087.86 l 2686.03 3087.51 l 2710.17 3087.22 l 2734.34 3086.98 l 2758.54 3086.81 l 2781.04 3086.7 l 2803.55 3086.64 l 2826.06 3086.64 l 2848.57 3086.68 l 2870.6 3086.78 l 2892.62 3086.92 l 2914.62 3087.11 l 2936.6 3087.36 l 2956.9 3087.62 l 2977.17 3087.93 l 2997.41 3088.29 l 3017.6 3088.68 l 3035.52 3089.06 l 3053.4 3089.48 l 3071.24 3089.93 l 3089.03 3090.42 l 3104.76 3090.87 l 3120.45 3091.35 l 3136.1 3091.86 l 3151.7 3092.39 l 3166.72 3092.93 l 3181.68 3093.49 l 3196.6 3094.07 l 3211.48 3094.68 l 3224.69 3095.24 l 3237.86 3095.82 l 3250.98 3096.42 l 3264.07 3097.03 l 3276.4 3097.63 l 3288.7 3098.25 l 3300.95 3098.88 l 3313.16 3099.52 l 3325.55 3100.2 l 3337.89 3100.89 l 3350.19 3101.6 l 3362.43 3102.33 l 3378.15 3103.29 l 3393.78 3104.27 l 3409.32 3105.28 l 3424.77 3106.32 l 3435.78 3107.08 l 3446.75 3107.86 l 3457.68 3108.65 l 3468.55 3109.45 l 3478.41 3110.19 l 3488.22 3110.94 l 3498 3111.71 l 3507.72 3112.48 l 3517.41 3113.27 l 3527.04 3114.06 l 3536.63 3114.87 l 3546.18 3115.69 l S /DeviceRGB {} CS [0 0.5019 0] SC 3546.18 3115.68 m 3562.69 3117.13 l 3579.05 3118.61 l 3595.26 3120.13 l 3611.33 3121.67 l 3629.29 3123.45 l 3647.06 3125.27 l 3664.61 3127.13 l 3681.96 3129.02 l 3700.27 3131.09 l 3718.33 3133.2 l 3736.14 3135.35 l 3753.69 3137.54 l 3769.66 3139.6 l 3785.4 3141.7 l 3800.91 3143.82 l 3816.18 3145.98 l 3830.57 3148.08 l 3844.74 3150.2 l 3858.68 3152.35 l 3872.4 3154.53 l 3885.95 3156.75 l 3899.27 3158.99 l 3912.35 3161.26 l 3925.2 3163.56 l 3938.2 3165.95 l 3950.95 3168.38 l 3963.44 3170.83 l 3975.66 3173.3 l 3988.3 3175.94 l 4000.64 3178.62 l 4012.68 3181.31 l 4024.42 3184.04 l 4036.99 3187.07 l 4049.18 3190.13 l 4061 3193.21 l 4072.43 3196.32 l 4084.4 3199.74 l 4095.92 3203.17 l 4106.97 3206.64 l 4117.56 3210.14 l 4127.97 3213.76 l 4137.89 3217.41 l 4147.3 3221.08 l 4156.21 3224.78 l 4165.06 3228.7 l 4173.35 3232.65 l 4181.06 3236.61 l 4188.21 3240.59 l 4195.45 3245.02 l 4201.98 3249.46 l 4207.82 3253.91 l 4212.95 3258.38 l 4217.1 3262.55 l 4220.63 3266.73 l 4223.56 3270.91 l 4225.88 3275.1 l 4227.59 3279.3 l 4228.7 3283.5 l 4229.19 3287.7 l 4229.08 3291.9 l 4228.34 3296.16 l 4226.98 3300.42 l 4224.99 3304.67 l 4222.39 3308.91 l 4219.07 3313.24 l 4215.11 3317.56 l 4210.51 3321.86 l 4205.27 3326.13 l 4199.21 3330.53 l 4192.47 3334.89 l 4185.07 3339.23 l 4177.02 3343.54 l 4167.96 3347.98 l 4158.22 3352.39 l 4147.78 3356.76 l 4136.66 3361.09 l 4124.29 3365.58 l 4111.18 3370.03 l 4097.36 3374.42 l 4082.82 3378.76 l 4067.37 3383.1 l 4051.21 3387.39 l 4034.36 3391.61 l 4016.82 3395.77 l 3998.3 3399.93 l 3979.1 3404.02 l 3959.23 3408.04 l 3938.7 3411.99 l 3917.06 3415.94 l 3894.77 3419.81 l 3871.84 3423.59 l 3848.28 3427.29 l 3823.52 3430.99 l 3798.14 3434.59 l 3772.15 3438.1 l 3745.57 3441.51 l 3717.69 3444.91 l 3689.23 3448.2 l 3660.2 3451.38 l 3630.64 3454.44 l 3599.63 3457.49 l 3568.09 3460.41 l 3536.04 3463.21 l 3503.5 3465.89 l 3469.27 3468.53 l 3434.56 3471.03 l 3399.4 3473.39 l 3363.82 3475.62 l 3325.61 3477.82 l 3286.99 3479.87 l 3247.99 3481.75 l 3208.64 3483.46 l 3168.65 3485.02 l 3128.37 3486.42 l 3087.84 3487.64 l 3047.09 3488.69 l 3006.87 3489.55 l 2966.49 3490.25 l 2926 3490.78 l 2885.43 3491.15 l 2844.8 3491.34 l 2804.15 3491.37 l 2763.52 3491.23 l 2722.92 3490.92 l 2682.21 3490.45 l 2641.6 3489.8 l 2601.13 3488.99 l 2560.84 3488 l 2520.44 3486.85 l 2480.28 3485.52 l 2440.4 3484.02 l 2400.82 3482.36 l 2361.2 3480.51 l 2321.95 3478.49 l 2283.11 3476.31 l 2244.72 3473.97 l 2206.36 3471.42 l 2168.52 3468.72 l 2131.24 3465.85 l 2094.55 3462.82 l 2057.96 3459.58 l 2022.05 3456.18 l 1986.85 3452.62 l 1952.4 3448.91 l 1918.14 3444.98 l 1884.72 3440.89 l 1852.17 3436.65 l 1820.53 3432.26 l 1789.17 3427.63 l 1758.83 3422.86 l 1729.53 3417.94 l 1701.31 3412.88 l 1673.45 3407.54 l 1646.79 3402.07 l 1621.38 3396.46 l 1597.23 3390.73 l 1573.39 3384.61 l 1551.01 3378.37 l 1530.13 3372.01 l 1510.76 3365.54 l 1492.43 3358.77 l 1475.77 3351.89 l 1460.83 3344.92 l 1447.63 3337.87 l 1436.15 3330.71 l 1426.48 3323.49 l 1418.62 3316.21 l 1412.62 3308.88 l 1408.48 3301.54 l 1406.21 3294.18 l 1405.8 3286.8 l 1407.28 3279.4 l 1410.55 3272.16 l 1415.64 3264.92 l 1422.55 3257.71 l 1431.28 3250.52 l 1441.69 3243.46 l 1453.88 3236.44 l 1467.82 3229.47 l 1483.51 3222.57 l 1500.89 3215.77 l 1519.98 3209.05 l 1540.77 3202.42 l 1563.23 3195.89 l 1587.41 3189.46 l 1613.22 3183.15 l 1640.65 3176.96 l 1669.66 3170.92 l 1700.66 3164.93 l 1733.22 3159.11 l 1767.3 3153.45 l 1802.85 3147.97 l 1839.78 3142.68 l 1878.09 3137.59 l 1917.73 3132.69 l 1958.65 3128.01 l 2001.34 3123.48 l 2045.21 3119.18 l 2090.23 3115.12 l 2136.3 3111.3 l 2184.76 3107.62 l 2234.2 3104.22 l 2284.55 3101.09 l 2335.74 3098.25 l 2388.06 3095.67 l 2441.05 3093.38 l 2494.65 3091.39 l 2548.76 3089.7 l 2601.85 3088.35 l 2655.26 3087.29 l 2708.91 3086.53 l 2762.72 3086.05 l 2816.05 3085.87 l 2869.38 3085.98 l 2922.62 3086.38 l 2975.7 3087.07 l 3028.32 3088.03 l 3080.63 3089.28 l 3132.53 3090.81 l 3183.96 3092.61 l 3234.86 3094.69 l 3285.13 3097.04 l 3334.7 3099.65 l 3383.5 3102.53 l 3431.65 3105.68 l 3478.88 3109.08 l 3525.12 3112.72 l 3570.31 3116.61 l 3614.72 3120.77 l 3657.93 3125.15 l 3699.89 3129.77 l 3740.52 3134.59 l 3780.27 3139.69 l 3818.54 3144.99 l 3855.31 3150.49 l 3890.5 3156.18 l 3924.71 3162.15 l 3957.2 3168.3 l 3987.92 3174.6 l 4016.85 3181.06 l 4044.76 3187.87 l 4070.68 3194.82 l 4094.57 3201.9 l 4116.4 3209.08 l 4137.63 3216.95 l 4156.41 3224.91 l 4172.72 3232.96 l 4186.54 3241.08 l 4197.57 3249.01 l 4206.24 3256.97 l 4212.55 3264.96 l 4216.5 3272.94 l 4218.07 3280.5 l 4217.55 3288.03 l 4214.94 3295.53 l 4210.27 3302.99 l 4203.74 3310.2 l 4195.29 3317.34 l 4184.94 3324.41 l 4172.71 3331.39 l 4158.88 3338.17 l 4143.28 3344.85 l 4125.96 3351.41 l 4106.93 3357.86 l 4086.45 3364.11 l 4064.38 3370.24 l 4040.74 3376.21 l 4015.59 3382.04 l 3989 3387.7 l 3960.98 3393.19 l 3931.57 3398.51 l 3900.82 3403.65 l 3869.12 3408.55 l 3836.2 3413.26 l 3802.09 3417.78 l 3766.85 3422.09 l 3730.85 3426.16 l 3693.83 3430.02 l 3655.85 3433.66 l 3616.94 3437.09 l 3577.32 3440.28 l 3536.88 3443.24 l 3495.69 3445.97 l 3453.79 3448.46 l 3411.18 3450.72 l 3367.98 3452.73 l 3324.23 3454.49 l 3279.98 3456 l 3234.84 3457.26 l 3189.32 3458.27 l 3143.46 3459 l 3097.32 3459.46 l 3049.42 3459.66 l 3001.35 3459.56 l 2953.18 3459.16 l 2904.97 3458.47 l 2859.58 3457.53 l 2814.27 3456.33 l 2769.09 3454.86 l 2724.12 3453.12 l 2680.57 3451.16 l 2637.3 3448.94 l 2594.38 3446.46 l 2551.85 3443.72 l 2510.61 3440.78 l 2469.85 3437.59 l 2429.61 3434.14 l 2389.93 3430.44 l 2351.55 3426.55 l 2313.81 3422.43 l 2276.75 3418.05 l 2240.43 3413.43 l 2205.44 3408.64 l 2171.24 3403.62 l 2137.88 3398.36 l 2105.39 3392.86 l 2074.28 3387.21 l 2044.09 3381.32 l 2014.87 3375.21 l 1986.64 3368.86 l 1959.83 3362.38 l 1934.05 3355.67 l 1909.35 3348.73 l 1885.76 3341.57 l 1863.56 3334.27 l 1842.5 3326.75 l 1822.61 3319.01 l 1803.92 3311.04 l 1786.55 3302.9 l 1770.41 3294.53 l 1755.53 3285.94 l 1741.91 3277.12 l 1729.73 3268.17 l 1718.83 3258.99 l 1709.23 3249.59 l 1700.94 3239.94 l 1694.06 3230.19 l 1688.49 3220.21 l 1684.23 3209.97 l 1681.29 3199.49 l 1679.67 3188.69 l 1679.39 3177.62 l 1680.46 3166.28 l 1682.86 3154.65 l 1686.58 3142.78 l 1691.62 3130.61 l 1697.96 3118.11 l 1705.6 3105.29 l 1713.85 3093.05 l 1723.19 3080.5 l 1733.61 3067.61 l 1745.1 3054.37 l 1757.35 3041.04 l 1770.58 3027.34 l 1784.77 3013.24 l 1799.9 2998.72 l 1814.7 2984.9 l 1830.26 2970.67 l 1846.55 2956.02 l 1863.55 2940.92 l 1879.23 2927.11 l 1895.44 2912.91 l 1912.15 2898.3 l 1929.35 2883.27 l 1944.98 2869.57 l 1960.96 2855.52 l 1977.28 2841.08 l 1993.93 2826.26 l 2010.28 2811.57 l 2026.91 2796.5 l 2043.8 2781.02 l 2060.94 2765.14 l 2076.41 2750.63 l 2092.06 2735.78 l 2107.88 2720.58 l 2123.86 2705.04 l 2139.11 2690 l 2154.48 2674.64 l 2169.97 2658.97 l 2185.57 2642.96 l 2201.55 2626.33 l 2217.62 2609.37 l 2233.77 2592.09 l 2249.98 2574.48 l 2270.94 2551.32 l 2291.94 2527.66 l 2312.95 2503.53 l 2333.92 2478.97 l 2348.9 2461.11 l 2363.81 2443.07 l 2378.64 2424.86 l 2393.37 2406.49 l 2406.68 2389.65 l 2419.86 2372.71 l 2432.9 2355.7 l 2445.78 2338.63 l 2458.48 2321.52 l 2470.99 2304.4 l 2483.28 2287.27 l 2495.34 2270.16 l S /DeviceRGB {} CS [0 0 1] SC 2516.18 2266.9 m 2526.67 2252.34 l 2536.98 2237.82 l 2547.1 2223.34 l 2557.03 2208.93 l 2567.99 2192.73 l 2578.68 2176.63 l 2589.09 2160.65 l 2599.2 2144.81 l 2609.68 2128.05 l 2619.81 2111.46 l 2629.59 2095.08 l 2639.01 2078.92 l 2647.39 2064.2 l 2655.46 2049.69 l 2663.22 2035.38 l 2670.69 2021.3 l 2677.54 2008.04 l 2684.13 1994.99 l 2690.45 1982.16 l 2696.52 1969.55 l 2702.35 1957.11 l 2707.93 1944.89 l 2713.26 1932.9 l 2718.36 1921.15 l 2723.38 1909.25 l 2728.17 1897.6 l 2732.72 1886.2 l 2737.05 1875.04 l 2741.41 1863.5 l 2745.54 1852.23 l 2749.45 1841.23 l 2753.15 1830.5 l 2757 1818.97 l 2760.63 1807.75 l 2764.04 1796.85 l 2767.24 1786.24 l 2770.51 1775.06 l 2773.56 1764.22 l 2776.41 1753.71 l 2779.08 1743.53 l 2781.64 1733.38 l 2784.04 1723.54 l 2786.27 1714.03 l 2788.35 1704.82 l 2790.39 1695.42 l 2792.29 1686.35 l 2794.06 1677.58 l 2795.7 1669.11 l 2797.39 1660.08 l 2798.94 1651.39 l 2800.37 1643.03 l 2801.7 1634.97 l 2802.84 1627.74 l 2803.91 1620.77 l 2804.9 1614.03 l 2805.82 1607.52 l 2806.68 1601.22 l 2807.48 1595.14 l 2808.22 1589.26 l 2808.91 1583.58 l 2809.57 1578 l 2810.18 1572.61 l 2810.75 1567.4 l 2811.29 1562.37 l 2811.79 1557.39 l 2812.27 1552.58 l 2812.71 1547.93 l 2813.12 1543.44 l 2813.51 1538.97 l 2813.88 1534.66 l 2814.22 1530.5 l 2814.54 1526.47 l 2814.84 1522.45 l 2815.13 1518.56 l 2815.4 1514.81 l 2815.64 1511.2 l 2815.88 1507.54 l 2816.11 1504.02 l 2816.31 1500.62 l 2816.51 1497.35 l 2816.69 1494.15 l 2816.86 1491.07 l 2817.01 1488.1 l 2817.16 1485.23 l 2817.3 1482.42 l 2817.42 1479.71 l 2817.54 1477.1 l 2817.65 1474.58 l 2817.76 1472.1 l 2817.85 1469.71 l 2817.94 1467.41 l 2818.03 1465.19 l 2818.11 1462.99 l 2818.18 1460.88 l 2818.25 1458.84 l 2818.31 1456.88 l 2818.38 1454.93 l 2818.43 1453.06 l 2818.48 1451.26 l 2818.53 1449.52 l 2818.58 1447.79 l 2818.62 1446.13 l 2818.66 1444.53 l 2818.7 1442.99 l 2818.74 1441.46 l 2818.77 1439.98 l 2818.8 1438.56 l 2818.83 1437.19 l 2818.85 1435.79 l 2818.88 1434.45 l 2818.9 1433.16 l 2818.93 1431.92 l 2818.95 1430.73 l 2818.96 1429.58 l 2818.98 1428.47 l 2819 1427.41 l 2819.01 1426.41 l 2819.02 1425.45 l 2819.04 1424.53 l 2819.05 1423.64 l 2819.06 1422.78 l 2819.07 1421.96 l 2819.08 1421.17 l 2819.09 1420.41 l 2819.09 1419.67 l 2819.1 1418.97 l 2819.11 1418.29 l 2819.11 1417.63 l 2819.12 1417 l 2819.12 1416.39 l 2819.13 1415.8 l 2819.13 1415.24 l 2819.14 1414.69 l 2819.14 1413.66 l 2819.15 1413.17 l 2819.15 1412.24 l 2819.16 1411.8 l 2819.16 1410.58 l 2819.17 1410.2 l 2819.17 1408.19 l 2819.18 1407.89 l 2819.18 1404.84 l 2819.19 1404.66 l 2819.19 1400.76 l S /DeviceGray {} CS [0] SC 3550.91 3115.11 m 3560 3115.9 l 3569.05 3116.7 l 3578.05 3117.51 l 3587.01 3118.33 l 3597.08 3119.27 l 3607.1 3120.22 l 3617.06 3121.19 l 3626.96 3122.16 l 3637.47 3123.22 l 3647.91 3124.29 l 3658.29 3125.37 l 3668.59 3126.46 l 3678.03 3127.48 l 3687.42 3128.52 l 3696.74 3129.56 l 3705.99 3130.61 l 3714.79 3131.63 l 3723.53 3132.66 l 3732.21 3133.7 l 3740.84 3134.75 l 3749.43 3135.81 l 3757.96 3136.88 l 3766.42 3137.96 l 3774.83 3139.05 l 3783.44 3140.19 l 3791.99 3141.34 l 3800.47 3142.49 l 3808.88 3143.66 l 3817.7 3144.9 l 3826.46 3146.15 l 3835.13 3147.42 l 3843.72 3148.69 l 3853.1 3150.11 l 3862.38 3151.54 l 3871.56 3152.99 l 3880.64 3154.44 l 3890.39 3156.03 l 3900.02 3157.64 l 3909.53 3159.26 l 3918.91 3160.9 l 3928.44 3162.59 l 3937.85 3164.3 l 3947.12 3166.03 l 3956.26 3167.76 l 3965.77 3169.61 l 3975.13 3171.48 l 3984.34 3173.35 l 3993.39 3175.25 l 4003.19 3177.35 l 4012.8 3179.46 l 4022.22 3181.59 l 4031.46 3183.74 l 4039.9 3185.76 l 4048.18 3187.79 l 4056.29 3189.83 l 4064.23 3191.89 l 4072.02 3193.96 l 4079.64 3196.05 l 4087.09 3198.14 l 4094.37 3200.25 l 4101.6 3202.41 l 4108.65 3204.58 l 4115.51 3206.75 l 4122.2 3208.94 l 4128.86 3211.2 l 4135.33 3213.46 l 4141.61 3215.74 l 4147.69 3218.02 l 4153.76 3220.38 l 4159.62 3222.76 l 4165.27 3225.14 l 4170.72 3227.53 l 4176.15 3230.02 l 4181.35 3232.52 l 4186.33 3235.03 l 4191.08 3237.55 l 4195.82 3240.19 l 4200.3 3242.84 l 4204.53 3245.49 l 4208.51 3248.16 l 4212.3 3250.86 l 4215.82 3253.57 l 4219.08 3256.29 l 4222.09 3259.01 l 4224.88 3261.78 l 4227.4 3264.55 l 4229.66 3267.32 l 4231.65 3270.1 l 4233.41 3272.94 l 4234.89 3275.78 l 4236.09 3278.62 l 4237.01 3281.47 l 4237.67 3284.38 l 4238.03 3287.28 l 4238.11 3290.19 l 4237.9 3293.1 l 4237.38 3296.08 l 4236.56 3299.06 l 4235.43 3302.03 l 4234 3305 l 4232.22 3308.05 l 4230.11 3311.1 l 4227.69 3314.14 l 4224.96 3317.17 l 4221.78 3320.31 l 4218.27 3323.43 l 4214.42 3326.55 l 4210.24 3329.66 l 4205.42 3332.95 l 4200.23 3336.23 l 4194.66 3339.5 l 4188.72 3342.74 l 4182.39 3345.99 l 4175.69 3349.21 l 4168.63 3352.42 l 4161.2 3355.61 l 4153.56 3358.72 l 4145.56 3361.81 l 4137.23 3364.88 l 4128.55 3367.93 l 4119.54 3370.96 l 4110.2 3373.96 l 4100.52 3376.94 l 4090.52 3379.9 l 4080.14 3382.84 l 4069.44 3385.76 l 4058.42 3388.65 l 4047.08 3391.51 l 4035.33 3394.36 l 4023.28 3397.19 l 4010.91 3399.98 l 3998.23 3402.75 l 3985.12 3405.51 l 3971.7 3408.24 l 3957.98 3410.93 l 3943.97 3413.59 l 3929.48 3416.25 l 3914.71 3418.87 l 3899.63 3421.45 l 3884.28 3423.99 l 3868.41 3426.54 l 3852.25 3429.04 l 3835.82 3431.5 l 3819.11 3433.93 l 3801.82 3436.35 l 3784.27 3438.73 l 3766.44 3441.06 l 3748.35 3443.35 l 3729.6 3445.64 l 3710.58 3447.88 l 3691.31 3450.08 l 3671.78 3452.22 l 3651.43 3454.38 l 3630.82 3456.48 l 3609.97 3458.53 l 3588.87 3460.52 l 3566.53 3462.55 l 3543.93 3464.52 l 3521.1 3466.43 l 3498.03 3468.27 l 3474.16 3470.1 l 3450.07 3471.86 l 3425.76 3473.55 l 3401.23 3475.17 l 3376.39 3476.74 l 3351.36 3478.23 l 3326.14 3479.66 l 3300.75 3481.02 l 3275.28 3482.3 l 3249.65 3483.51 l 3223.87 3484.65 l 3197.95 3485.72 l 3172.41 3486.71 l 3146.76 3487.62 l 3120.99 3488.46 l 3095.13 3489.24 l 3069.47 3489.94 l 3043.73 3490.57 l 3017.92 3491.13 l 2992.04 3491.63 l 2966.18 3492.05 l 2940.28 3492.41 l 2914.33 3492.7 l 2888.36 3492.92 l 2862.28 3493.07 l 2836.19 3493.16 l 2810.09 3493.17 l 2784 3493.12 l 2757.6 3492.99 l 2731.22 3492.8 l 2704.87 3492.54 l 2678.56 3492.2 l 2652.25 3491.8 l 2625.99 3491.32 l 2599.79 3490.78 l 2573.66 3490.16 l 2547.26 3489.47 l 2520.95 3488.7 l 2494.74 3487.86 l 2468.64 3486.95 l 2441.84 3485.94 l 2415.18 3484.85 l 2388.66 3483.69 l 2362.3 3482.46 l 2336.13 3481.15 l 2310.15 3479.77 l 2284.34 3478.31 l 2258.73 3476.79 l 2233.93 3475.23 l 2209.32 3473.6 l 2184.93 3471.9 l 2160.76 3470.14 l 2137.05 3468.33 l 2113.57 3466.45 l 2090.33 3464.51 l 2067.34 3462.51 l 2044.69 3460.45 l 2022.31 3458.33 l 2000.2 3456.14 l 1978.36 3453.9 l 1956.81 3451.6 l 1935.55 3449.23 l 1914.59 3446.81 l 1893.95 3444.33 l 1873.54 3441.78 l 1853.46 3439.17 l 1833.72 3436.51 l 1814.33 3433.8 l 1795.13 3431 l 1776.31 3428.15 l 1757.85 3425.25 l 1739.78 3422.3 l 1721.88 3419.25 l 1704.38 3416.16 l 1687.29 3413.01 l 1670.63 3409.81 l 1654.08 3406.5 l 1637.98 3403.15 l 1622.34 3399.74 l 1607.17 3396.28 l 1592 3392.67 l 1577.33 3389 l 1563.19 3385.29 l 1549.58 3381.54 l 1535.34 3377.39 l 1521.75 3373.2 l 1508.82 3368.96 l 1496.55 3364.67 l 1485.48 3360.54 l 1475.02 3356.38 l 1465.19 3352.18 l 1456 3347.95 l 1447.86 3343.9 l 1440.29 3339.82 l 1433.31 3335.72 l 1426.92 3331.6 l 1421.27 3327.56 l 1416.18 3323.5 l 1411.66 3319.42 l 1407.72 3315.32 l 1404.4 3311.28 l 1401.64 3307.23 l 1399.45 3303.16 l 1397.83 3299.08 l 1396.78 3295.04 l 1396.3 3290.99 l 1396.38 3286.93 l 1397.02 3282.88 l 1398.22 3278.83 l 1399.99 3274.78 l 1402.32 3270.73 l 1405.22 3266.69 l 1408.64 3262.69 l 1412.62 3258.7 l 1417.16 3254.72 l 1422.25 3250.75 l 1427.84 3246.82 l 1433.97 3242.91 l 1440.65 3239.01 l 1447.87 3235.13 l 1455.6 3231.28 l 1463.86 3227.45 l 1472.66 3223.64 l 1481.99 3219.85 l 1491.87 3216.08 l 1502.28 3212.33 l 1513.21 3208.61 l 1524.66 3204.92 l 1536.8 3201.21 l 1549.46 3197.53 l 1562.65 3193.89 l 1576.37 3190.28 l 1590.69 3186.69 l 1605.53 3183.13 l 1620.88 3179.62 l 1636.74 3176.15 l 1652.4 3172.87 l 1668.52 3169.64 l 1685.09 3166.44 l 1702.1 3163.29 l 1719.11 3160.26 l 1736.54 3157.28 l 1754.37 3154.34 l 1772.6 3151.45 l 1790.87 3148.67 l 1809.5 3145.93 l 1828.5 3143.24 l 1847.87 3140.6 l 1867.25 3138.06 l 1886.97 3135.57 l 1907.01 3133.12 l 1927.38 3130.73 l 1947.75 3128.43 l 1968.41 3126.18 l 1989.37 3123.99 l 2010.62 3121.85 l 2031.83 3119.79 l 2053.3 3117.79 l 2075.03 3115.85 l 2097.01 3113.95 l 2118.93 3112.14 l 2141.08 3110.39 l 2163.46 3108.69 l 2186.05 3107.05 l 2208.58 3105.48 l 2231.31 3103.98 l 2254.22 3102.52 l 2277.32 3101.13 l 2300.45 3099.8 l 2323.75 3098.53 l 2347.2 3097.32 l 2370.81 3096.17 l 2394.3 3095.09 l 2417.93 3094.06 l 2441.68 3093.1 l 2465.55 3092.19 l 2489.2 3091.36 l 2512.95 3090.58 l 2536.79 3089.86 l 2560.72 3089.2 l 2584.87 3088.6 l 2609.09 3088.05 l 2633.38 3087.57 l 2657.72 3087.14 l 2682.62 3086.77 l 2707.56 3086.46 l 2732.54 3086.22 l 2757.55 3086.04 l 2780.02 3085.93 l 2802.51 3085.87 l 2825 3085.86 l 2847.49 3085.9 l 2869.48 3085.99 l 2891.46 3086.13 l 2913.41 3086.32 l 2935.35 3086.56 l 2955.8 3086.83 l 2976.23 3087.14 l 2996.61 3087.49 l 3016.96 3087.88 l 3035.09 3088.26 l 3053.17 3088.68 l 3071.21 3089.14 l 3089.21 3089.62 l 3105.04 3090.08 l 3120.82 3090.56 l 3136.56 3091.07 l 3152.26 3091.6 l 3167.11 3092.13 l 3181.92 3092.68 l 3196.69 3093.25 l 3211.41 3093.85 l 3224.8 3094.41 l 3238.14 3095 l 3251.44 3095.6 l 3264.7 3096.22 l 3277.15 3096.82 l 3289.56 3097.44 l 3301.93 3098.07 l 3314.25 3098.72 l 3326.67 3099.4 l 3339.05 3100.09 l 3351.38 3100.79 l 3363.65 3101.52 l 3380.02 3102.51 l 3396.3 3103.54 l 3412.49 3104.59 l 3428.57 3105.67 l 3439.7 3106.44 l 3450.78 3107.22 l 3461.82 3108.02 l 3472.8 3108.83 l 3482.72 3109.57 l 3492.59 3110.33 l 3502.43 3111.1 l 3512.21 3111.88 l 3521.96 3112.67 l 3531.65 3113.47 l 3541.31 3114.28 l 3550.91 3115.11 l S /DeviceRGB {} CS [1 0 0] SC 3550.91 3115.1 m 3567.57 3116.57 l 3584.09 3118.06 l 3600.45 3119.59 l 3616.66 3121.15 l 3634.81 3122.95 l 3652.75 3124.78 l 3670.48 3126.66 l 3688 3128.58 l 3706.48 3130.67 l 3724.7 3132.8 l 3742.67 3134.97 l 3760.38 3137.19 l 3776.49 3139.27 l 3792.37 3141.38 l 3808.01 3143.53 l 3823.41 3145.71 l 3837.93 3147.83 l 3852.22 3149.98 l 3866.29 3152.15 l 3880.13 3154.36 l 3893.78 3156.59 l 3907.2 3158.86 l 3920.38 3161.15 l 3933.31 3163.47 l 3946.42 3165.89 l 3959.26 3168.34 l 3971.84 3170.81 l 3984.15 3173.31 l 3996.89 3175.99 l 4009.33 3178.69 l 4021.45 3181.42 l 4033.27 3184.17 l 4045.93 3187.23 l 4058.21 3190.32 l 4070.1 3193.44 l 4081.61 3196.59 l 4093.65 3200.04 l 4105.23 3203.52 l 4116.34 3207.02 l 4126.98 3210.55 l 4137.43 3214.21 l 4147.38 3217.9 l 4156.82 3221.61 l 4165.74 3225.34 l 4174.62 3229.31 l 4182.92 3233.3 l 4190.64 3237.31 l 4197.78 3241.33 l 4204.98 3245.78 l 4211.46 3250.25 l 4217.25 3254.74 l 4222.32 3259.24 l 4226.42 3263.45 l 4229.9 3267.66 l 4232.77 3271.88 l 4235.02 3276.1 l 4236.66 3280.34 l 4237.68 3284.58 l 4238.09 3288.82 l 4237.88 3293.05 l 4237.04 3297.35 l 4235.57 3301.64 l 4233.47 3305.93 l 4230.74 3310.2 l 4227.3 3314.56 l 4223.2 3318.91 l 4218.45 3323.25 l 4213.06 3327.56 l 4206.84 3331.98 l 4199.93 3336.38 l 4192.36 3340.76 l 4184.12 3345.1 l 4174.87 3349.57 l 4164.92 3354.01 l 4154.28 3358.41 l 4142.95 3362.77 l 4130.35 3367.29 l 4117.01 3371.76 l 4102.95 3376.18 l 4088.17 3380.55 l 4072.46 3384.92 l 4056.04 3389.23 l 4038.92 3393.48 l 4021.1 3397.66 l 4002.3 3401.85 l 3982.81 3405.96 l 3962.65 3410 l 3941.82 3413.96 l 3919.88 3417.93 l 3897.28 3421.82 l 3874.03 3425.62 l 3850.15 3429.34 l 3825.06 3433.05 l 3799.34 3436.66 l 3773.01 3440.18 l 3746.1 3443.6 l 3717.86 3447 l 3689.05 3450.3 l 3659.67 3453.48 l 3629.74 3456.56 l 3598.36 3459.6 l 3566.44 3462.53 l 3534.02 3465.32 l 3501.11 3468 l 3466.47 3470.63 l 3431.35 3473.13 l 3395.79 3475.49 l 3359.8 3477.7 l 3321.06 3479.9 l 3281.91 3481.93 l 3242.37 3483.8 l 3202.49 3485.5 l 3162.14 3487.04 l 3121.51 3488.4 l 3080.62 3489.6 l 3039.52 3490.62 l 2998.96 3491.45 l 2958.26 3492.12 l 2917.44 3492.62 l 2876.54 3492.94 l 2835.6 3493.1 l 2794.64 3493.09 l 2753.7 3492.91 l 2712.81 3492.57 l 2671.8 3492.04 l 2630.9 3491.35 l 2590.16 3490.49 l 2549.6 3489.46 l 2508.94 3488.26 l 2468.53 3486.88 l 2428.4 3485.33 l 2388.6 3483.61 l 2348.75 3481.71 l 2309.29 3479.64 l 2270.25 3477.4 l 2231.68 3474.99 l 2193.13 3472.39 l 2155.12 3469.62 l 2117.68 3466.69 l 2080.85 3463.6 l 2044.13 3460.29 l 2008.11 3456.83 l 1972.8 3453.2 l 1938.26 3449.42 l 1903.93 3445.42 l 1870.45 3441.26 l 1837.86 3436.94 l 1806.19 3432.48 l 1774.82 3427.78 l 1744.47 3422.92 l 1715.2 3417.93 l 1687.02 3412.79 l 1659.21 3407.37 l 1632.62 3401.81 l 1607.3 3396.12 l 1583.28 3390.3 l 1559.55 3384.08 l 1537.3 3377.74 l 1516.58 3371.28 l 1497.42 3364.71 l 1479.44 3357.87 l 1463.15 3350.94 l 1448.58 3343.91 l 1435.77 3336.8 l 1424.69 3329.59 l 1415.43 3322.31 l 1408.01 3314.97 l 1402.44 3307.59 l 1398.76 3300.19 l 1396.96 3292.77 l 1397.04 3285.34 l 1399.01 3277.89 l 1402.8 3270.59 l 1408.42 3263.31 l 1415.88 3256.05 l 1425.17 3248.81 l 1436.15 3241.7 l 1448.92 3234.64 l 1463.47 3227.64 l 1479.78 3220.71 l 1497.79 3213.87 l 1517.53 3207.12 l 1538.97 3200.47 l 1562.1 3193.92 l 1586.97 3187.47 l 1613.49 3181.14 l 1641.62 3174.94 l 1671.35 3168.88 l 1703.01 3162.91 l 1736.22 3157.1 l 1770.95 3151.46 l 1807.14 3146 l 1844.83 3140.72 l 1883.9 3135.64 l 1924.29 3130.76 l 1965.96 3126.1 l 2009.44 3121.6 l 2054.11 3117.33 l 2099.91 3113.3 l 2146.77 3109.52 l 2196.16 3105.89 l 2246.52 3102.53 l 2297.79 3099.45 l 2349.89 3096.66 l 2402.66 3094.17 l 2456.09 3091.97 l 2510.09 3090.07 l 2564.57 3088.48 l 2618.15 3087.21 l 2672.02 3086.25 l 2726.11 3085.57 l 2780.34 3085.19 l 2834.09 3085.11 l 2887.8 3085.32 l 2941.41 3085.82 l 2994.82 3086.61 l 3047.77 3087.68 l 3100.36 3089.03 l 3152.53 3090.67 l 3204.19 3092.59 l 3255.3 3094.78 l 3305.75 3097.24 l 3355.47 3099.98 l 3404.38 3102.97 l 3452.62 3106.24 l 3499.9 3109.76 l 3546.16 3113.52 l 3591.34 3117.53 l 3635.71 3121.81 l 3678.85 3126.32 l 3720.7 3131.06 l 3761.19 3136.01 l 3800.76 3141.23 l 3838.83 3146.66 l 3875.35 3152.28 l 3910.26 3158.08 l 3944.16 3164.18 l 3976.31 3170.45 l 4006.64 3176.88 l 4035.14 3183.46 l 4062.62 3190.4 l 4088.05 3197.48 l 4111.42 3204.68 l 4132.68 3211.99 l 4153.46 3220.07 l 4171.68 3228.25 l 4187.33 3236.51 l 4200.4 3244.84 l 4210.44 3252.81 l 4218.12 3260.82 l 4223.43 3268.84 l 4226.39 3276.86 l 4227.03 3284.46 l 4225.56 3292.03 l 4222 3299.56 l 4216.36 3307.05 l 4208.9 3314.29 l 4199.5 3321.45 l 4188.19 3328.54 l 4175.01 3335.54 l 4160.23 3342.33 l 4143.69 3349.01 l 4125.41 3355.58 l 4105.43 3362.02 l 4084.01 3368.27 l 4061 3374.38 l 4036.42 3380.34 l 4010.33 3386.15 l 3982.82 3391.79 l 3953.88 3397.25 l 3923.55 3402.54 l 3891.88 3407.64 l 3859.27 3412.5 l 3825.45 3417.16 l 3790.44 3421.63 l 3754.32 3425.89 l 3717.44 3429.9 l 3679.56 3433.7 l 3640.72 3437.28 l 3600.97 3440.64 l 3560.5 3443.76 l 3519.24 3446.64 l 3477.23 3449.29 l 3434.54 3451.7 l 3391.11 3453.87 l 3347.1 3455.78 l 3302.56 3457.45 l 3257.55 3458.85 l 3211.5 3460.01 l 3165.09 3460.9 l 3118.37 3461.52 l 3071.41 3461.86 l 3023.95 3461.92 l 2976.36 3461.7 l 2928.71 3461.19 l 2881.06 3460.39 l 2835.47 3459.35 l 2790 3458.04 l 2744.69 3456.46 l 2699.6 3454.61 l 2655.9 3452.55 l 2612.51 3450.22 l 2569.48 3447.63 l 2526.88 3444.78 l 2485.55 3441.73 l 2444.73 3438.43 l 2404.45 3434.88 l 2364.78 3431.07 l 2326.39 3427.09 l 2288.68 3422.85 l 2251.68 3418.37 l 2215.44 3413.65 l 2180.54 3408.76 l 2146.46 3403.63 l 2113.24 3398.27 l 2080.92 3392.67 l 2049.99 3386.92 l 2020.02 3380.94 l 1991.03 3374.73 l 1963.07 3368.29 l 1936.53 3361.72 l 1911.05 3354.92 l 1886.68 3347.9 l 1863.44 3340.65 l 1841.61 3333.27 l 1820.94 3325.67 l 1801.47 3317.85 l 1783.22 3309.8 l 1766.31 3301.59 l 1750.65 3293.16 l 1736.26 3284.5 l 1723.18 3275.62 l 1711.52 3266.61 l 1701.17 3257.38 l 1692.15 3247.92 l 1684.45 3238.23 l 1678.18 3228.44 l 1673.23 3218.42 l 1669.61 3208.16 l 1667.33 3197.65 l 1666.38 3186.83 l 1666.78 3175.75 l 1668.54 3164.39 l 1671.66 3152.76 l 1676.23 3140.58 l 1682.19 3128.09 l 1689.55 3115.26 l 1698.27 3102.08 l 1707.27 3089.94 l 1717.34 3077.48 l 1728.48 3064.71 l 1740.66 3051.58 l 1753.57 3038.4 l 1767.44 3024.85 l 1782.25 3010.91 l 1797.97 2996.57 l 1813.45 2982.79 l 1829.69 2968.61 l 1846.65 2954.01 l 1864.32 2938.98 l 1880.66 2925.17 l 1897.52 2910.97 l 1914.89 2896.36 l 1932.74 2881.32 l 1948.86 2867.7 l 1965.32 2853.72 l 1982.11 2839.37 l 1999.22 2824.62 l 2015.74 2810.26 l 2032.52 2795.52 l 2049.55 2780.4 l 2066.82 2764.88 l 2082.77 2750.37 l 2098.9 2735.51 l 2115.2 2720.31 l 2131.66 2704.74 l 2147.3 2689.74 l 2163.07 2674.42 l 2178.95 2658.78 l 2194.94 2642.81 l 2211.22 2626.32 l 2227.58 2609.5 l 2244.03 2592.36 l 2260.53 2574.89 l 2282.73 2551 l 2304.98 2526.57 l 2327.25 2501.64 l 2349.49 2476.22 l 2364.92 2458.29 l 2380.29 2440.16 l 2395.59 2421.87 l 2410.8 2403.41 l 2424.49 2386.55 l 2438.08 2369.6 l 2451.53 2352.57 l 2464.83 2335.48 l 2477.97 2318.35 l 2490.93 2301.2 l 2503.69 2284.05 l 2516.23 2266.9 l S /DeviceRGB {} CS [0 0.5019 0] SC 2516.23 2266.9 m 2526.72 2252.34 l 2537.03 2237.81 l 2547.16 2223.33 l 2557.08 2208.91 l 2568.06 2192.68 l 2578.76 2176.57 l 2589.17 2160.57 l 2599.29 2144.72 l 2609.78 2127.94 l 2619.91 2111.34 l 2629.69 2094.95 l 2639.12 2078.78 l 2647.49 2064.05 l 2655.56 2049.53 l 2663.33 2035.22 l 2670.79 2021.14 l 2677.65 2007.86 l 2684.24 1994.81 l 2690.57 1981.96 l 2696.63 1969.34 l 2702.46 1956.9 l 2708.03 1944.69 l 2713.36 1932.71 l 2718.46 1920.95 l 2723.48 1909.06 l 2728.26 1897.41 l 2732.81 1886 l 2737.14 1874.85 l 2741.5 1863.3 l 2745.62 1852.02 l 2749.53 1841.02 l 2753.24 1830.27 l 2757.09 1818.74 l 2760.71 1807.51 l 2764.12 1796.6 l 2767.33 1785.99 l 2770.59 1774.8 l 2773.64 1763.96 l 2776.49 1753.45 l 2779.16 1743.26 l 2781.72 1733.11 l 2784.1 1723.28 l 2786.33 1713.77 l 2788.41 1704.57 l 2790.45 1695.16 l 2792.35 1686.08 l 2794.12 1677.31 l 2795.76 1668.84 l 2797.43 1659.84 l 2798.98 1651.18 l 2800.41 1642.84 l 2801.73 1634.81 l 2802.87 1627.59 l 2803.93 1620.62 l 2804.92 1613.89 l 2805.84 1607.39 l 2806.7 1601.09 l 2807.49 1595.01 l 2808.24 1589.14 l 2808.93 1583.46 l 2809.59 1577.88 l 2810.2 1572.5 l 2810.77 1567.29 l 2811.3 1562.27 l 2811.8 1557.29 l 2812.28 1552.48 l 2812.72 1547.84 l 2813.13 1543.35 l 2813.52 1538.89 l 2813.89 1534.58 l 2814.23 1530.41 l 2814.54 1526.4 l 2814.85 1522.37 l 2815.14 1518.49 l 2815.4 1514.74 l 2815.65 1511.13 l 2815.89 1507.48 l 2816.11 1503.96 l 2816.32 1500.57 l 2816.51 1497.3 l 2816.69 1494.1 l 2816.86 1491.02 l 2817.02 1488.05 l 2817.16 1485.18 l 2817.3 1482.38 l 2817.43 1479.67 l 2817.54 1477.06 l 2817.65 1474.54 l 2817.76 1472.06 l 2817.86 1469.68 l 2817.95 1467.37 l 2818.03 1465.15 l 2818.11 1462.96 l 2818.18 1460.85 l 2818.25 1458.81 l 2818.32 1456.85 l 2818.38 1454.9 l 2818.43 1453.03 l 2818.48 1451.23 l 2818.53 1449.49 l 2818.58 1447.77 l 2818.62 1446.11 l 2818.66 1444.51 l 2818.7 1442.97 l 2818.74 1441.43 l 2818.77 1439.96 l 2818.8 1438.53 l 2818.83 1437.16 l 2818.85 1435.76 l 2818.88 1434.42 l 2818.9 1433.13 l 2818.93 1431.89 l 2818.95 1430.7 l 2818.96 1429.55 l 2818.98 1428.45 l 2819 1427.39 l 2819.01 1426.39 l 2819.02 1425.43 l 2819.04 1424.51 l 2819.05 1423.62 l 2819.06 1422.76 l 2819.07 1421.94 l 2819.08 1421.15 l 2819.09 1420.39 l 2819.09 1419.66 l 2819.1 1418.95 l 2819.11 1418.28 l 2819.11 1417.62 l 2819.12 1416.99 l 2819.12 1416.38 l 2819.13 1415.8 l 2819.13 1415.23 l 2819.14 1414.69 l 2819.14 1413.65 l 2819.15 1413.17 l 2819.15 1412.24 l 2819.16 1411.8 l 2819.16 1410.58 l 2819.17 1410.2 l 2819.17 1408.18 l 2819.18 1407.89 l 2819.18 1404.83 l 2819.19 1404.66 l 2819.19 1400.76 l S 5 w /DeviceGray {} CS [0] SC 3634.38 3148.3 m 3688.38 3241.84 l S 3671.31 3108.42 m 3617.31 3014.88 l S 2628.95 2146.74 m 2705.32 2223.11 l S 3726.47 3115.06 m 3827.35 3000.03 l S 3858.33 3139.11 m 4068.78 3017.61 l S 2662.85 1985.19 m 2510.18 1995.19 l S 3796.87 3119.06 m 3753.94 2834.28 l S 3982.56 3149.92 m 4067.45 2874.71 l S 2764.49 1877.78 m 2896.99 1954.28 l S 3915.78 3182.89 m 4104.78 3510.25 l S 4129.62 3191.94 m 4295.67 3084.1 l S 2749.41 1753.71 m 2641.41 1753.71 l S 3996.2 3203.43 m 3898.37 3568.55 l S 4231.74 3249.31 m 4383.44 3269.28 l S 2823.51 1652.85 m 2927.83 1624.9 l S q 720 3690 m 720 3690 l 720 3690 l 720 3690 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -958.92 4431.48] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [0.997 -0.0772 0.0772 0.997 221.883 39.0402] Tm 0 0 Td /F9_0 11.9552 Tf (x) 5.9776 Tj -1.8762 TJm (g) 6.6471 Tj 3.9388 TJm (a) 6.6471 Tj 3.9368 TJm (m) 9.9587 Tj -0.1127 TJm (m) 9.9587 Tj -0.1127 TJm (a) 6.6471 Tj 3.9388 TJm (,) 3.3235 Tj -294.149 TJm (x) 5.9776 Tj -1.8762 TJm (-) 3.9811 Tj 1.7635 TJm (,) 3.3235 Tj -274.064 TJm (x) 5.9776 Tj -1.8762 TJm (+) 6.9818 Tj 1.825 TJm [1 0 0 1 112.934 57.141] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm 36.5559 -2.3262 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 45.7957 -2.3262 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 51.6758 -2.3262 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 54.9156 -2.3262 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2637 TJm 73.3551 -4.668 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 82.595 -4.668 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2637 TJm 88.475 -4.668 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 91.7149 -4.668 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 115.0501 -6.9891 Td (0) 5.858 Tj -2.2627 TJm 120.9302 -6.9891 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 124.17 -6.9891 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 152.343 -9.3621 Td (0) 5.858 Tj -2.2627 TJm 158.2231 -9.3621 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 161.4629 -9.3621 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 189.8879 -11.7512 Td (0) 5.858 Tj -2.2627 TJm 195.768 -11.7512 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 199.0078 -11.7512 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm 227.6871 -14.1559 Td (0) 5.858 Tj -2.2627 TJm 233.5672 -14.1559 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 236.8071 -14.1559 Td /F12_0 11.9552 Tf (3) 5.858 Tj -2.2627 TJm [0.6333 0.7739 -0.7739 0.6333 444.459 45.2398] Tm 0 0 Td /F9_0 11.9552 Tf (y) 5.9776 Tj -1.8756 TJm (g) 6.6471 Tj 3.9362 TJm (a) 6.6471 Tj 3.9358 TJm (m) 9.9587 Tj -0.1111 TJm (m) 9.9587 Tj -0.1111 TJm (a) 6.6471 Tj 3.9358 TJm (,) 3.3235 Tj -294.145 TJm (y) 5.9776 Tj -1.8756 TJm (-) 3.9811 Tj 1.7615 TJm (,) 3.3235 Tj -274.043 TJm (y) 5.9776 Tj -1.8756 TJm (+) 6.9818 Tj 1.8249 TJm [1 0 0 1 409.17 52.8988] Tm 0 0 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 9.2398 0 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 15.1199 0 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 18.3598 0 Td /F12_0 11.9552 Tf (3) 5.858 Tj -2.2627 TJm 8.3282 8.5062 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 17.568 8.5062 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 23.4481 8.5062 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 26.6879 8.5062 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm 16.457 16.8082 Td /F10_0 11.9552 Tf (\000) 9.3011 Tj 4.8889 TJm 25.6969 16.8082 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 31.5769 16.8082 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 34.8168 16.8082 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 29.0441 24.9512 Td (0) 5.858 Tj -2.2627 TJm 34.9242 24.9512 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 38.164 24.9512 Td /F12_0 11.9552 Tf (0) 5.858 Tj -2.2627 TJm 36.7972 32.8691 Td (0) 5.858 Tj -2.2627 TJm 42.6773 32.8691 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 45.9172 32.8691 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 44.3711 40.6051 Td (0) 5.858 Tj -2.2627 TJm 50.2512 40.6051 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 53.491 40.6051 Td /F12_0 11.9552 Tf (2) 5.858 Tj -2.2627 TJm 51.773 48.1641 Td (0) 5.858 Tj -2.2627 TJm 57.6531 48.1641 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9721 TJm 60.8929 48.1641 Td /F12_0 11.9552 Tf (3) 5.858 Tj -2.2627 TJm [0.0139 0.9999 -0.9999 0.0139 504.305 216.946] Tm 0 0 Td /F9_0 11.9552 Tf (p) 6.6471 Tj 3.9376 TJm (h) 6.6471 Tj 3.9397 TJm (i) 2.6541 Tj 1.1743 TJm (g) 6.6471 Tj 3.9376 TJm (a) 6.6471 Tj 3.9376 TJm (m) 9.9587 Tj -0.1123 TJm (m) 9.9587 Tj -0.1123 TJm (a) 6.6471 Tj 3.9376 TJm (,) 3.3235 Tj -294.12 TJm (p) 6.6471 Tj 3.9376 TJm (h) 6.6471 Tj 3.9397 TJm (i) 2.6541 Tj 1.1743 TJm (-) 3.9811 Tj 1.7625 TJm (,) 3.3235 Tj -294.145 TJm (p) 6.6471 Tj 3.9376 TJm (h) 6.6471 Tj 3.9397 TJm (i) 2.6541 Tj 1.1743 TJm (+) 6.9818 Tj 1.8258 TJm [1 0 0 1 477.747 164.807] Tm 0 0 Td /F12_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 0.7012 36.9738 Td (2) 5.858 Tj -2.2627 TJm 1.4063 74.209 Td (3) 5.858 Tj -2.2627 TJm 2.116 111.7078 Td (4) 5.858 Tj -2.2627 TJm 2.8313 149.4738 Td (5) 5.858 Tj -2.2627 TJm -108.0088 161.175 Td /F9_0 11.9552 Tf (8) 6.6471 Tj 3.9372 TJm -123.5627 126.6289 Td (8) 6.6471 Tj 3.9372 TJm -205.9416 59.016 Td (8) 6.6471 Tj 3.9372 TJm -93.8246 125.35 Td (9) 6.6471 Tj 3.9372 TJm -69.3105 127.5602 Td (9) 6.6471 Tj 3.9372 TJm -235.1715 30.7032 Td (9) 6.6471 Tj 3.9372 TJm -109.2675 108.3481 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -77.1183 112.4508 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -186.4882 31.761 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm -66.3683 187.777 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -46.6694 134.104 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -228.6995 6.305 Td (1) 6.6471 Tj 3.9372 TJm (1) 6.6471 Tj 3.9372 TJm -95.0225 193.786 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -37.6182 158.0969 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm -183.2242 -7.0421 Td (1) 6.6471 Tj 3.9372 TJm (2) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font ODEMPY+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/include/cusp1.eps0000640000175000017500000011135313570013207014202 0ustar sksk%!PS-Adobe-3.0 EPSF-3.0 %%BoundingBox: 29 162 579 604 %%HiResBoundingBox: 29.564991 162.404988 578.564991 603.404988 % Produced by xpdf/pdftops 3.02 %%LanguageLevel: 2 %%DocumentSuppliedResources: (atend) %%DocumentMedia: plain 612 792 0 () () %%EndComments %%BeginProlog save countdictstack mark newpath /showpage {} def /setpagedevice {pop} def %%EndProlog %%Page 1 1 %%BeginDefaults %%PageMedia: plain %%EndDefaults %%BeginProlog %%BeginResource: procset xpdf 3.02 0 %%Copyright: Copyright 1996-2007 Glyph & Cog, LLC /xpdf 75 dict def xpdf begin % PDF special state /pdfDictSize 15 def /pdfSetup { 3 1 roll 2 array astore /setpagedevice where { pop 3 dict begin /PageSize exch def /ImagingBBox null def /Policies 1 dict dup begin /PageSize 3 def end def { /Duplex true def } if currentdict end setpagedevice } { pop pop } ifelse } def /pdfStartPage { pdfDictSize dict begin /pdfFillCS [] def /pdfFillXform {} def /pdfStrokeCS [] def /pdfStrokeXform {} def /pdfFill [0] def /pdfStroke [0] def /pdfFillOP false def /pdfStrokeOP false def /pdfLastFill false def /pdfLastStroke false def /pdfTextMat [1 0 0 1 0 0] def /pdfFontSize 0 def /pdfCharSpacing 0 def /pdfTextRender 0 def /pdfTextRise 0 def /pdfWordSpacing 0 def /pdfHorizScaling 1 def /pdfTextClipPath [] def } def /pdfEndPage { end } def % PDF color state /cs { /pdfFillXform exch def dup /pdfFillCS exch def setcolorspace } def /CS { /pdfStrokeXform exch def dup /pdfStrokeCS exch def setcolorspace } def /sc { pdfLastFill not { pdfFillCS setcolorspace } if dup /pdfFill exch def aload pop pdfFillXform setcolor /pdfLastFill true def /pdfLastStroke false def } def /SC { pdfLastStroke not { pdfStrokeCS setcolorspace } if dup /pdfStroke exch def aload pop pdfStrokeXform setcolor /pdfLastStroke true def /pdfLastFill false def } def /op { /pdfFillOP exch def pdfLastFill { pdfFillOP setoverprint } if } def /OP { /pdfStrokeOP exch def pdfLastStroke { pdfStrokeOP setoverprint } if } def /fCol { pdfLastFill not { pdfFillCS setcolorspace pdfFill aload pop pdfFillXform setcolor pdfFillOP setoverprint /pdfLastFill true def /pdfLastStroke false def } if } def /sCol { pdfLastStroke not { pdfStrokeCS setcolorspace pdfStroke aload pop pdfStrokeXform setcolor pdfStrokeOP setoverprint /pdfLastStroke true def /pdfLastFill false def } if } def % build a font /pdfMakeFont { 4 3 roll findfont 4 2 roll matrix scale makefont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /Encoding exch def currentdict end definefont pop } def /pdfMakeFont16 { exch findfont dup length dict begin { 1 index /FID ne { def } { pop pop } ifelse } forall /WMode exch def currentdict end definefont pop } def % graphics state operators /q { gsave pdfDictSize dict begin } def /Q { end grestore /pdfLastFill where { pop pdfLastFill { pdfFillOP setoverprint } { pdfStrokeOP setoverprint } ifelse } if } def /cm { concat } def /d { setdash } def /i { setflat } def /j { setlinejoin } def /J { setlinecap } def /M { setmiterlimit } def /w { setlinewidth } def % path segment operators /m { moveto } def /l { lineto } def /c { curveto } def /re { 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto neg 0 rlineto closepath } def /h { closepath } def % path painting operators /S { sCol stroke } def /Sf { fCol stroke } def /f { fCol fill } def /f* { fCol eofill } def % clipping operators /W { clip newpath } def /W* { eoclip newpath } def /Ws { strokepath clip newpath } def % text state operators /Tc { /pdfCharSpacing exch def } def /Tf { dup /pdfFontSize exch def dup pdfHorizScaling mul exch matrix scale pdfTextMat matrix concatmatrix dup 4 0 put dup 5 0 put exch findfont exch makefont setfont } def /Tr { /pdfTextRender exch def } def /Ts { /pdfTextRise exch def } def /Tw { /pdfWordSpacing exch def } def /Tz { /pdfHorizScaling exch def } def % text positioning operators /Td { pdfTextMat transform moveto } def /Tm { /pdfTextMat exch def } def % text string operators /cshow where { pop /cshow2 { dup { pop pop 1 string dup 0 3 index put 3 index exec } exch cshow pop pop } def }{ /cshow2 { currentfont /FontType get 0 eq { 0 2 2 index length 1 sub { 2 copy get exch 1 add 2 index exch get 2 copy exch 256 mul add 2 string dup 0 6 5 roll put dup 1 5 4 roll put 3 index exec } for } { dup { 1 string dup 0 3 index put 3 index exec } forall } ifelse pop pop } def } ifelse /awcp { exch { false charpath 5 index 5 index rmoveto 6 index eq { 7 index 7 index rmoveto } if } exch cshow2 6 {pop} repeat } def /Tj { fCol 1 index stringwidth pdfTextMat idtransform pop sub 1 index length dup 0 ne { div } { pop pop 0 } ifelse pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16 { fCol 2 index stringwidth pdfTextMat idtransform pop sub exch div pdfWordSpacing pdfHorizScaling mul 0 pdfTextMat dtransform 32 4 3 roll pdfCharSpacing pdfHorizScaling mul add 0 pdfTextMat dtransform 6 5 roll Tj1 } def /Tj16V { fCol 2 index stringwidth pdfTextMat idtransform exch pop sub exch div 0 pdfWordSpacing pdfTextMat dtransform 32 4 3 roll pdfCharSpacing add 0 exch pdfTextMat dtransform 6 5 roll Tj1 } def /Tj1 { 0 pdfTextRise pdfTextMat dtransform rmoveto currentpoint 8 2 roll pdfTextRender 1 and 0 eq { 6 copy awidthshow } if pdfTextRender 3 and dup 1 eq exch 2 eq or { 7 index 7 index moveto 6 copy currentfont /FontType get 3 eq { fCol } { sCol } ifelse false awcp currentpoint stroke moveto } if pdfTextRender 4 and 0 ne { 8 6 roll moveto false awcp /pdfTextClipPath [ pdfTextClipPath aload pop {/moveto cvx} {/lineto cvx} {/curveto cvx} {/closepath cvx} pathforall ] def currentpoint newpath moveto } { 8 {pop} repeat } ifelse 0 pdfTextRise neg pdfTextMat dtransform rmoveto } def /TJm { pdfFontSize 0.001 mul mul neg 0 pdfTextMat dtransform rmoveto } def /TJmV { pdfFontSize 0.001 mul mul neg 0 exch pdfTextMat dtransform rmoveto } def /Tclip { pdfTextClipPath cvx exec clip newpath /pdfTextClipPath [] def } def % Level 2 image operators /pdfImBuf 100 string def /pdfIm { image { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pdfImM { fCol imagemask { currentfile pdfImBuf readline not { pop exit } if (%-EOD-) eq { exit } if } loop } def /pr { 2 index 2 index 3 2 roll putinterval 4 add } def /pdfImClip { gsave 0 2 4 index length 1 sub { dup 4 index exch 2 copy get 5 index div put 1 add 3 index exch 2 copy get 3 index div put } for pop pop rectclip } def /pdfImClipEnd { grestore } def % shading operators /colordelta { false 0 1 3 index length 1 sub { dup 4 index exch get 3 index 3 2 roll get sub abs 0.004 gt { pop true } if } for exch pop exch pop } def /funcCol { func n array astore } def /funcSH { dup 0 eq { true } { dup 6 eq { false } { 4 index 4 index funcCol dup 6 index 4 index funcCol dup 3 1 roll colordelta 3 1 roll 5 index 5 index funcCol dup 3 1 roll colordelta 3 1 roll 6 index 8 index funcCol dup 3 1 roll colordelta 3 1 roll colordelta or or or } ifelse } ifelse { 1 add 4 index 3 index add 0.5 mul exch 4 index 3 index add 0.5 mul exch 6 index 6 index 4 index 4 index 4 index funcSH 2 index 6 index 6 index 4 index 4 index funcSH 6 index 2 index 4 index 6 index 4 index funcSH 5 3 roll 3 2 roll funcSH pop pop } { pop 3 index 2 index add 0.5 mul 3 index 2 index add 0.5 mul funcCol sc dup 4 index exch mat transform m 3 index 3 index mat transform l 1 index 3 index mat transform l mat transform l pop pop h f* } ifelse } def /axialCol { dup 0 lt { pop t0 } { dup 1 gt { pop t1 } { dt mul t0 add } ifelse } ifelse func n array astore } def /axialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index axialCol 2 index axialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index axialSH exch 3 2 roll axialSH } { pop 2 copy add 0.5 mul axialCol sc exch dup dx mul x0 add exch dy mul y0 add 3 2 roll dup dx mul x0 add exch dy mul y0 add dx abs dy abs ge { 2 copy yMin sub dy mul dx div add yMin m yMax sub dy mul dx div add yMax l 2 copy yMax sub dy mul dx div add yMax l yMin sub dy mul dx div add yMin l h f* } { exch 2 copy xMin sub dx mul dy div add xMin exch m xMax sub dx mul dy div add xMax exch l exch 2 copy xMax sub dx mul dy div add xMax exch l xMin sub dx mul dy div add xMin exch l h f* } ifelse } ifelse } def /radialCol { dup t0 lt { pop t0 } { dup t1 gt { pop t1 } if } ifelse func n array astore } def /radialSH { dup 0 eq { true } { dup 8 eq { false } { 2 index dt mul t0 add radialCol 2 index dt mul t0 add radialCol colordelta } ifelse } ifelse { 1 add 3 1 roll 2 copy add 0.5 mul dup 4 3 roll exch 4 index radialSH exch 3 2 roll radialSH } { pop 2 copy add 0.5 mul dt mul t0 add radialCol sc encl { exch dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 0 360 arc h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add 360 0 arcn h f } { 2 copy dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arcn dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arcn h dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a1 a2 arc dup dx mul x0 add exch dup dy mul y0 add exch dr mul r0 add a2 a1 arc h f } ifelse } ifelse } def end %%EndResource %%EndProlog %%BeginSetup xpdf begin %%BeginResource: font GJCTBM+CMMI12 %!FontType1-1.0: GJCTBM+CMMI12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /GJCTBM+CMMI12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 184 97] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C1D559F732F6DBE4BD53A4D3AC30 EA780A1EAB6D5293D8749AA04212931AA44D0C4FB6DE46CBCC0252D2F62B661A 2C731BF8C30E2F4DEB71C531D4B1BC221FFEAB935034D72CEBAAB9F87F1C9F11 CE8673C785BC3DC78C587D2181AB003339A7DD77375C6FA8406193C84D9F5D93 1D90A73CFE31C2F509B1E53DF2D9CD8748369A2E3470794B515ED5AE36496F46 6F56A164FADF9E4A59A772D8A737B2A26187CE6CBA5E037A21D254415CF7027D 1FE85AC20245BDE72D768A19EC749B3CFB9DBEAD8772E9942E635C0A139BF2A1 96A5D16B21ECA9349060745CA916E51252684C9C5490DA348CC6235C5396C0D9 47A471F9DB40F69CE846E11B3133D350644D9EE1D6D408CDC477561B52C83FA2 DF6A9471F5DAEF88719CF0D7157784B5B768DE8BBAFB3E4C1F67042C7DBEE606 08D59317CAAE727455712BA4B758AA111CD9F4C51576C825001402ABD4B2D1DE E14DA5F89383F24919E94F169D42D021220949E510E833DE6B9B40195F 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F14_0 /GJCTBM+CMMI12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/period/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont /F13_0 /Helvetica 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /quoteleft/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/exclamdown/cent/sterling/fraction/yen/florin/section /currency/quotesingle/quotedblleft/guillemotleft/guilsinglleft/guilsinglright/fi/fl /.notdef/endash/dagger/daggerdbl/periodcentered/.notdef/paragraph/bullet /quotesinglbase/quotedblbase/quotedblright/guillemotright/ellipsis/perthousand/.notdef/questiondown /.notdef/grave/acute/circumflex/tilde/macron/breve/dotaccent /dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron /emdash/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/AE/.notdef/ordfeminine/.notdef/.notdef/.notdef/.notdef /Lslash/Oslash/OE/ordmasculine/.notdef/.notdef/.notdef/.notdef /.notdef/ae/.notdef/.notdef/.notdef/dotlessi/.notdef/.notdef /lslash/oslash/oe/germandbls/.notdef/.notdef/.notdef/.notdef] pdfMakeFont %%BeginResource: font IKMFZJ+CMR12 %!FontType1-1.0: IKMFZJ+CMR12 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMR12) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch false def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /IKMFZJ+CMR12 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 -21 448 665] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 53 /five put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 F95CB8F8CCC9D94D5DC34E9811120A9E9E71C6DDD3132B5CC9D46DECE24A719A FDDB1841D3E6A93CC2618BCCD8F4074DF63BC9DFABFEBC774BFB261B9FFFBAB5 CA354CA4AD04DCCD068B7F42CFEE5E7845066E00C19B7FBD7FE477F3341AF22A D7128B56461C1E29D0C41E3890A960E121DDE50682D898BA8FF42C8516211467 45E9290F155A4FA87DA8EC2EB4DE8B15A4D291C94C6E6ABA56B12E096AC0AFD3 92C86C0F4A678F64ED3AC38A59BD523BB58984EE0EA32CCC592339093B951094 0ACE0736A0E458CB04BB1E8F95CA378E22BEB2CB9369393C443A696C2FAF1424 24F18142436D008A5881B806D326FEFC8F53142F27F06E7F4C8104CD016443B9 56245B23742F278A3B7289B91E1329500B64808EA8DCE83FA2FD81E04E716151 34FD4D04A61FA8E33B7750DA9926EDEF5739CBF8CE2B215BD800BAEBDAE4F7E7 5AC1DDEC921F72E64E0E74B6C58D38D6AD2ABBA7D7F1DA4AC010BC5005D71A97 DE4042548BCC1A9B8A79C10DC2322366ACBB003025933A4A3E950F87DA5BCEDD 657C6AF445E6B4B64491FC861EB3F44BCB01DD3A17682EAEB1B4FA067828B389 9CF3260B02CE2E917A322E07EFA7042A5C0B8CB34B1B47FFD248CD5486EF8BA5 85B740B4B177E063E0D260C579F3630B267E3C2656AFD4E20BE96DCA0041367E FE473D913ACEA5F0D07D22AE0B6E245AFC887FE8298C74A76D8FFFE0CFABC5AF 0E742861F3A8203F9F6C83E908A7327FA7E846CFBABC1508FB8718A9B0FE2B69 1395051C49393919C8B80A8EBA169E88015444E722E10B68AAC25B53C5593C17 752D2B0563CC1272D84B715FDF2EE9E1588377D20F08EF36B0759E9B1C8D6405 331EB54D08C63602E0A13854CF39665DC6AE9B0A77CDC1F2C127C1E2E0BD0C31 3E866CE51E4041FBD0E6BDEC16E8267B34F119766D0761FC3A543E060A718188 A892DBA001BB05CE7BF4ECFEFF7A097F4880C49BD10D1FBE03FE3F7C425B16F3 DEB2A22B9AFF0CFA97D1D514C77532A7C82B4A6B8BB300E5A6BFE1B3C73B28AB D302A2E3F1DA73BDB13CBC6FE88E3A6A420376AA72F2EEA43B1FDC1FF6E69117 8675C332586CB1DAFC4EB054B3B14555EC9CF3D2AE74AA23A3B64A9FA77D5446 13EF1463DB3DE12C017EAD90DDD5D1E42994621EDBC29D04A7E765552766B19C 19DF2033C47FC4B0DC08F25AA558F1C7146608AAC39FE30ED9F4771EA8CDAF2F CFB148EDA5139F375123616E8A8165E09F58E5A3D5B2EA6B8893FB3C2C2D45F7 EF2282017E40FAD289E80CB2F5A12C3172D571233273876D7F0D9472AA258562 D7F2EEDC32134F6DFBDD2E258C305DFD83398F86BBC9F345F1CB3961ACC121B1 22DB97182ABB0689826D38A33E0A8FF68CB426926D3F2CE9E79EA371E8DE2EC0 0FEBC431ED8223E4C2FB0EE09DA1ACDEB92FEE76199E419CDDC7B7AA73C9F443 80B7FB8D9491CAD614FC270A21F866EC2C09CA3CF3D986ED9EF7B828A2F9DAD0 C20BAE5DCFCA7FD3D51ED2BAC33113669DD6CF856895BB05022F829E72B85967 4415F4C5898FD201F043F7F5280BFC6CD96EFFAC6B5A188B439121384A1BE588 86EA19188D75D72696F8F7D46AC5641CABFB123405AA586257CB51BE23B672D6 843F5530A515B2B0AA09735DC77BB877E08B8DB968BF536957945DDD19B82628 22D3FDF874096FE41D08AE1DAAA577047022FFC406E39B 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F11_0 /IKMFZJ+CMR12 1 1 [ /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont %%BeginResource: font YGZXPE+CMSY10 %!FontType1-1.0: YGZXPE+CMSY10 12 dict begin /FontInfo 10 dict dup begin /Notice (Copyright (C) 1997 American Mathematical Society. All Rights Reserved) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /isFixedPitch true def /ItalicAngle 0 def /UnderlinePosition 0 def /UnderlineThickness 0 def end readonly def /FontName /YGZXPE+CMSY10 def /PaintType 0 def /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0] readonly def /FontBBox [0 0 694 270] readonly def /StrokeWidth 0 def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 0 /minus put readonly def currentdict end currentfile eexec 5AA4F71255501637F1A431BAB555283D093E1B588B45B0281559110D21315C62 BD638C6B34BA54AA75227715D9947EBCD51A104CAEA657499E94138F5645BF68 368BB1B1EC8E4776F067FFF2CE9B89FB7E63A7DB304498C1036D399C47A4CB79 BD517EDB02BEB90195FD7DDAF3E839BCE2DB156D9337DBB2305A465B3E0FFB97 1985C79DC71C47E26F9F0F042B2CDEE97B679358059256FB93D662D43C7ECB5B 1A564DFCECB963478373C69F52172F071E0AA6082A3E10D9E1CE2851CFA210EE 7BD5FCB1AAE15E89D1FB339D587D218B89C18A32F47C7451A80CB1FC07CF5EF6 FA6B0AF33A12E2346D6DCEEF2846DBB4C3B4BCEC20A2ADE6F3FB98A1C4F03BD7 30BCC82C82119BAAB273C4D9A0BCE9C565936BC8FB8D75BDDA5985D9D58CE3F1 6F226A42551CB5CF8C3986255A3EAC9703645A3C097DE03F29FFF1A22BF45468 B798805FAC5776D350511A40CC8DE219A736E6E8A66A4B616AFA1F0EEB7DB723 70901FB5327361279471F975A63C09522C01BB99A217FB407740431F54B34321 C3783B9A8ECFB44441CEB41D526DD0C841F1CBF8F03CE28BD25D48AB57F8534D 88F33026E328A8BD06AFAB1E41F0AAE6463826E260D7F79F91890A770EE340AE 149F6F8422591C78415F84973E7FF12502F6F5A475DEEFBB80A52642FDA7618A 89C8501150B9EE82DACCC26FF406FCC4ED49FEA7F164B0E2DAC8200E702B9E47 558AEC30D5A5640E7779B5B88E399454895CA637D4199DFA43B81581BCC4373B AA1836ED0A35D109A6B52953E03050C5F4B078970BA10FE3F7A892CDC7900672 2EAF9D2A06F4 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark %%EndResource /F9_0 /YGZXPE+CMSY10 1 1 [ /minus/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle /parenleft/parenright/asterisk/plus/comma/hyphen/period/slash /zero/one/two/three/four/five/six/seven /eight/nine/colon/semicolon/less/equal/greater/question /at/A/B/C/D/E/F/G /H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W /X/Y/Z/bracketleft/backslash/bracketright/asciicircum/underscore /grave/a/b/c/d/e/f/g /h/i/j/k/l/m/n/o /p/q/r/s/t/u/v/w /x/y/z/braceleft/bar/braceright/asciitilde/bullet /Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis/dagger/daggerdbl /circumflex/perthousand/Scaron/guilsinglleft/OE/bullet/Zcaron/bullet /bullet/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash/emdash /tilde/trademark/scaron/guilsinglright/oe/bullet/zcaron/Ydieresis /space/exclamdown/cent/sterling/currency/yen/brokenbar/section /dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen/registered/macron /degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph/periodcentered /cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters/questiondown /Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply /Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls /agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla /egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide /oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis] pdfMakeFont 612 792 false pdfSetup %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageOrientation: Portrait pdfStartPage 0 0 612 792 re W %%EndPageSetup [] 0 d 1 i 0 j 0 J 10 M 1 w /DeviceGray {} cs [0] sc /DeviceGray {} CS [0] SC false op false OP {} settransfer 0 0 612 792 re W q q [0.1 0 0 0.1 0 0] cm q 315.602 1754.4 5489.998 4410 re W /DeviceGray {} cs [1] sc 315.602 1754.4 5490 4410 re f 10 w 2 J /DeviceGray {} CS [1] SC 315.602 1754.4 5489.998 4410 re S 1035.6 2114.4 4410 3690 re f /DeviceGray {} CS [0] SC 1035.6 2114.4 4410 3690 re S Q q 1035.6 2114.4 4410 3690 re W 5 w 2 J /DeviceGray {} CS [0] SC 3221.51 3940.31 m 3145.14 3863.94 l S 3549.58 3419.8 m 3653.9 3391.85 l S 3314.55 3121.11 m 3238.18 3197.48 l S 2230.74 2686.57 m 2258.69 2790.89 l S 1710.61 2570.92 m 1682.65 2675.24 l S 3263.98 3972.9 m 3396.48 4049.4 l S 2931.62 4499 m 2827.3 4526.95 l S 3166.65 4797.69 m 3243.02 4721.32 l S 4250.46 5232.23 m 4222.51 5127.91 l S 4786.99 5387.46 m 4880.52 5441.46 l S 20 w 3240.6 3959.4 m 3250.99 3946.35 l 3258.78 3936.56 l 3270.46 3921.86 l 3287.93 3899.75 l 3313.96 3866.38 l 3352.4 3815.59 l 3389.67 3763.46 l 3425.16 3709.39 l 3457.95 3652.7 l 3486.64 3592.61 l 3509.03 3528.44 l 3521.86 3460.26 l 3523.5 3426.79 l 3515.98 3357.37 l 3494.38 3292.78 l 3462.22 3235.52 l 3423.2 3185.44 l 3379.83 3141.34 l 3333.64 3102.02 l 3285.53 3066.5 l 3236.06 3034.06 l 3185.59 3004.15 l 3134.37 2976.33 l 3082.55 2950.29 l 3030.26 2925.79 l 2977.6 2902.6 l 2924.61 2880.58 l 2871.36 2859.58 l 2817.89 2839.5 l 2764.23 2820.25 l 2710.4 2801.73 l 2656.42 2783.9 l 2602.32 2766.68 l 2548.11 2750.02 l 2493.79 2733.89 l 2439.39 2718.23 l 2367.63 2698.3 l 2295.74 2679.07 l 2223.75 2660.49 l 2151.66 2642.5 l 2079.48 2625.07 l 2007.23 2608.14 l 1934.91 2591.68 l 1862.53 2575.66 l 1790.09 2560.05 l 1717.59 2544.84 l S /DeviceRGB {} CS [1 0 0] SC 3240.6 3959.4 m 3230.21 3972.45 l 3222.42 3982.24 l 3210.74 3996.94 l 3193.27 4019.05 l 3167.24 4052.42 l 3128.8 4103.21 l 3091.53 4155.34 l 3056.04 4209.41 l 3023.25 4266.1 l 2994.56 4326.19 l 2972.17 4390.36 l 2959.34 4458.54 l 2957.7 4492.01 l 2965.22 4561.43 l 2986.82 4626.02 l 3018.98 4683.28 l 3058 4733.36 l 3101.37 4777.46 l 3147.56 4816.78 l 3195.67 4852.3 l 3245.14 4884.74 l 3295.61 4914.65 l 3346.83 4942.47 l 3398.65 4968.51 l 3450.94 4993.01 l 3503.6 5016.2 l 3556.59 5038.22 l 3609.84 5059.22 l 3663.31 5079.3 l 3716.97 5098.55 l 3770.8 5117.07 l 3824.78 5134.9 l 3878.88 5152.12 l 3933.09 5168.78 l 3987.41 5184.91 l 4041.81 5200.57 l 4113.57 5220.5 l 4185.46 5239.73 l 4257.45 5258.31 l 4329.54 5276.3 l 4401.72 5293.73 l 4473.97 5310.66 l 4546.29 5327.12 l 4618.67 5343.14 l 4691.11 5358.74 l 4763.61 5373.96 l S [10 30] 0 d 5 w 0 J /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1035.6 2154.4 l S 1035.6 5804.4 m 1035.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1770.6 2114.4 m 1770.6 2154.4 l S 1770.6 5804.4 m 1770.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 2505.6 2114.4 m 2505.6 2154.4 l S 2505.6 5804.4 m 2505.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3240.6 2114.4 m 3240.6 2154.4 l S 3240.6 5804.4 m 3240.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 3975.6 2114.4 m 3975.6 2154.4 l S 3975.6 5804.4 m 3975.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 4710.6 2114.4 m 4710.6 2154.4 l S 4710.6 5804.4 m 4710.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 5445.6 2114.4 m 5445.6 2154.4 l S 5445.6 5804.4 m 5445.6 5764.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 5445.6 2114.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2114.4 m 1075.6 2114.4 l S 5445.6 2114.4 m 5405.6 2114.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 2575.65 m 5445.6 2575.65 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 2575.65 m 1075.6 2575.65 l S 5445.6 2575.65 m 5405.6 2575.65 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3036.9 m 5445.6 3036.9 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3036.9 m 1075.6 3036.9 l S 5445.6 3036.9 m 5405.6 3036.9 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3498.15 m 5445.6 3498.15 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3498.15 m 1075.6 3498.15 l S 5445.6 3498.15 m 5405.6 3498.15 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 3959.4 m 5445.6 3959.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 3959.4 m 1075.6 3959.4 l S 5445.6 3959.4 m 5405.6 3959.4 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4420.65 m 5445.6 4420.65 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4420.65 m 1075.6 4420.65 l S 5445.6 4420.65 m 5405.6 4420.65 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 4881.9 m 5445.6 4881.9 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 4881.9 m 1075.6 4881.9 l S 5445.6 4881.9 m 5405.6 4881.9 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5343.15 m 5445.6 5343.15 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5343.15 m 1075.6 5343.15 l S 5445.6 5343.15 m 5405.6 5343.15 l S Q q 1035.6 2114.4 4410 3690 re W [10 30] 0 d 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 5445.6 5804.4 l S Q q 315.602 1754.4 5489.998 4410 re W 5 w /DeviceGray {} CS [0] SC 1035.6 5804.4 m 1075.6 5804.4 l S 5445.6 5804.4 m 5405.6 5804.4 l S 10 w 2 J 1035.6 2114.4 4410 3690 re S Q q 720 7200 m 720 7200 l 720 7200 l 720 7200 l h W /DeviceCMYK {} CS [0 0 0 1] SC /DeviceCMYK {} cs [0 0 0 1] sc q [960 0 0 -4.8 -644.52 5350.68] cm << /ImageType 1 /Width 1 /Height 1 /ImageMatrix [1 0 0 -1 0 1] /BitsPerComponent 1 /Decode [0 1] /DataSource currentfile /ASCII85Decode filter /RunLengthDecode filter >> pdfImM !!!~> %-EOD- Q Q /DeviceRGB {} CS [0 0 0] SC /DeviceRGB {} cs [0 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 95.0602 197.4] Tm 0 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 9.2398 0 Td /F11_0 11.9552 Tf (3) 5.858 Tj -2.2637 TJm 73.5 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm 82.7399 0 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2637 TJm 147.0001 0 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8909 TJm 156.2399 0 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2627 TJm 225.0001 0.0402 Td (0) 5.858 Tj -5658.39 TJm (1) 5.858 Tj -5658.39 TJm (2) 5.858 Tj -5658.4 TJm (3) 5.858 Tj -2.2627 TJm 220.0001 -14.72 Td /F13_0 11.9552 Tf (m) 9.9587 Tj 9.937 TJm (u) 6.6471 Tj 3.9372 TJm -21.4999 9.4999 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -12.26 9.4999 Td /F11_0 11.9552 Tf (2) 5.858 Tj -2.2632 TJm -6.38 9.4999 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.1401 9.4999 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -21.4999 55.6249 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -12.2601 55.6249 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -6.38 55.6249 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.1402 55.6249 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -21.5 101.7499 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -12.2601 101.7499 Td /F11_0 11.9552 Tf (1) 5.858 Tj -2.2632 TJm -6.38 101.7499 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.1402 101.7499 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -21.5 147.8749 Td /F9_0 11.9552 Tf (\000) 9.3011 Tj 4.8899 TJm -12.2602 147.8749 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -6.3801 147.8749 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.1402 147.8749 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.5 193.5401 Td (0) 5.858 Tj -2.2632 TJm -6.6199 193.5401 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3801 193.5401 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.5 239.6647 Td (0) 5.858 Tj -2.2632 TJm -6.6199 239.6647 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3801 239.6647 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.5 285.7897 Td (1) 5.858 Tj -2.2632 TJm -6.6199 285.7897 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3801 285.7897 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm -12.5 331.9147 Td (1) 5.858 Tj -2.2632 TJm -6.6199 331.9147 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3801 331.9147 Td /F11_0 11.9552 Tf (5) 5.858 Tj -2.2632 TJm -12.5 378.0397 Td (2) 5.858 Tj -2.2632 TJm -6.6199 378.0397 Td /F14_0 11.9552 Tf (:) 3.2518 Tj 0.9715 TJm -3.3801 378.0397 Td /F11_0 11.9552 Tf (0) 5.858 Tj -2.2632 TJm [0 1 -1 0 68.5602 391.94] Tm 0 0 Td /F13_0 11.9552 Tf (x) 5.9776 Tj -1.8747 TJm [1 0 0 1 304.241 375.121] Tm 0 0 Td /F13_0 11.9552 Tf (1) 6.6471 Tj 3.9372 TJm 62.8879 -41.402 Td (2) 6.6471 Tj 3.9372 TJm 9.3039 -53.8602 Td (3) 6.6471 Tj 3.9372 TJm -82.4059 -94.293 Td (4) 6.6471 Tj 3.9372 TJm -140.9422 -105.6192 Td (5) 6.6471 Tj 3.9372 TJm 36.9658 30.9588 Td (6) 6.6471 Tj 3.9372 TJm -32.2502 73.0397 Td (7) 6.6471 Tj 3.9372 TJm 21.3338 85.9776 Td (8) 6.6471 Tj 3.9372 TJm 113.0436 126.171 Td (9) 6.6471 Tj 3.9372 TJm 185.3698 170.1647 Td (1) 6.6471 Tj 3.9372 TJm (0) 6.6471 Tj 3.9372 TJm Q /DeviceRGB {} CS [1 0 0] SC /DeviceRGB {} cs [1 0 0] sc q [10 0 0 10 0 0] cm [1 0 0 1 0 0] Tm 0 0 Td [1 0 0 1 347.85 337.179] Tm 0 0 Td /F13_0 11.9552 Tf (L) 6.6471 Tj 3.9372 TJm -56.5801 106.522 Td (L) 6.6471 Tj 3.9372 TJm Q Q Q showpage %%PageTrailer pdfEndPage %%Trailer cleartomark countdictstack exch sub { end } repeat restore %%DocumentSuppliedResources: %%+ font GJCTBM+CMMI12 %%+ font IKMFZJ+CMR12 %%+ font YGZXPE+CMSY10 %%EOF auto/07p/doc/macros.tex0000640000175000017500000000172613570013207013023 0ustar sksk\newcommand{\autoversion}{0.9.6} \newcommand{\ds}{\displaystyle} \newcommand{\beq}{\begin{equation}} \newcommand{\eeq}{\end{equation}} \def\norm#1{\parallel#1\parallel} \def\abs#1{\mid#1\mid} \def\eps{\epsilon} \def\R{{\rm R}} \def\Rn{{\rm R}^n} \newcommand{\AUTO}{{\cal AUTO}\xspace} \newcommand{\AUTOc}{\AUTO 2000\xspace} \newcommand{\AUTOold}{\AUTO 97\xspace} \newcommand{\AUTOolder}{\AUTO 94\xspace} \newcommand{\python}{{\cal Python}\xspace} \newcommand{\emp}{\emph} % A font for AUTO parameters %\newcommand{\parf}[1]{\filef{#1}} \newcommand{\parf}[1]{\texttt{#1}} % A font for UNIX commands %\newcommand{\commandf}[1]{{\it #1}} \newcommand{\commandf}[1]{\texttt{#1}} % A font for environment variables %\newcommand{\envf}[1]{\filef{#1}} \newcommand{\envf}[1]{\textit{#1}} % A font for function names %\newcommand{\funcf}[1]{\filef{#1}} \newcommand{\funcf}[1]{\textbf{#1}} % A font for filenames %\newcommand{\filef}[1]{{\tt #1}} \newcommand{\filef}[1]{\textsf{#1}} auto/07p/doc/README0000640000175000017500000000035313570013207011670 0ustar skskThis directory contains auto.tex: the AUTO user manual TeX file. Type ``make'' to create auto.ps, the PostScript form of the manual. The file auto.ps is used by the GUI and by the @mn command for the display of the on-line manual. auto/07p/Makefile.in0000750000175000017500000000307013570013207012311 0ustar sksk#===> Makefile # # Makefile originally written by Xianjun WANG in March 1994. # # Redone by Randy C. Paffenroth 1999 for use with a configure script and python # front end. SHELL=/bin/sh @SET_MAKE@ # all: src cmds util @GUI@ @PLAUT@ @PLAUT04@ @TEK2PS@ cmd: src cmds util @PLAUT@ src: .FORCE cd ./src;$(MAKE) cmds: .FORCE # work around case insensitive filesystems cd ./cmds; for cmd in @H @LB @R @RD; do \ if test ! -r $$cmd; then \ cp -p @$$cmd $$cmd; \ fi \ done util: .FORCE cd ./util;$(MAKE) gui: .FORCE cd ./gui;$(MAKE) plaut: .FORCE cd ./plaut;$(MAKE) plaut04: .FORCE cd ./plaut04;$(MAKE) tek2ps: .FORCE cd ./tek2ps;$(MAKE) # clean: cd ./gui;$(MAKE) clean cd ./plaut;$(MAKE) clean cd ./plaut04;$(MAKE) clean cd ./tek2ps;$(MAKE) clean cd ./doc;$(MAKE) clean # superclean: clean cd ./cmds; if diff @R @@R > /dev/null; then rm @H @LB @R @RD; fi cd ./plaut04;$(MAKE) superclean rm -rf config.cache config.log config.status autom4te*.cache cd ./bin; rm -f AUTO97 plaut autlab 86to97 94to97 double triple \ keeplp keepbp keepsp keepuz deletelp deleteuz \ listlabels reduce relabel plaut04 r3bplaut04 cd ./src; $(MAKE) superclean cd ./util; $(MAKE) superclean cd ./doc; $(MAKE) superclean cd ./include; rm -f stamp-h1 rm -f python/*.pyc python/graphics/*.pyc rm -f test/*.pyc test/*_log07p* test/verification/*.html rm -f Makefile cmds/Makefile gui/Makefile plaut/Makefile src/Makefile \ tek2ps/Makefile gui/auto.makefile include/config.h cmds/cmds.make \ cmds/compat.sh util/Makefile @echo "Super cleaning ... done" .FORCE: auto/07p/aclocal.m40000640000175000017500000000251413570013207012104 0ustar sksk# Copyright 2006 Steven G. Johnson AC_DEFUN([AX_OPENMP], [ AC_PREREQ(2.59) dnl for _AC_LANG_PREFIX AC_CACHE_CHECK([for OpenMP flag of _AC_LANG compiler], ax_cv_[]_AC_LANG_ABBREV[]_openmp, [save[]_AC_LANG_PREFIX[]FLAGS=$[]_AC_LANG_PREFIX[]FLAGS ax_cv_[]_AC_LANG_ABBREV[]_openmp=unknown # Flags to try: -fopenmp (gcc), -openmp (icc), -mp (SGI & PGI), # -xopenmp (Sun), -omp (Tru64), -qsmp=omp (AIX), none ax_openmp_flags="-fopenmp -openmp -mp -xopenmp -omp -qsmp=omp none" if test "x$OPENMP_[]_AC_LANG_PREFIX[]FLAGS" != x; then ax_openmp_flags="$OPENMP_[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flags" fi for ax_openmp_flag in $ax_openmp_flags; do case $ax_openmp_flag in none) []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[] ;; *) []_AC_LANG_PREFIX[]FLAGS="$save[]_AC_LANG_PREFIX[]FLAGS $ax_openmp_flag" ;; esac AC_TRY_LINK_FUNC(omp_set_num_threads, [ax_cv_[]_AC_LANG_ABBREV[]_openmp=$ax_openmp_flag; break]) done []_AC_LANG_PREFIX[]FLAGS=$save[]_AC_LANG_PREFIX[]FLAGS ]) if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" = "xunknown"; then m4_default([$2],:) else if test "x$ax_cv_[]_AC_LANG_ABBREV[]_openmp" != "xnone"; then OPENMP_[]_AC_LANG_PREFIX[]FLAGS=$ax_cv_[]_AC_LANG_ABBREV[]_openmp fi m4_default([$1], [AC_DEFINE(HAVE_OPENMP,1,[Define if OpenMP is enabled])]) fi ])dnl AX_OPENMP auto/07p/src/0000750000175000017500000000000013570013207011030 5ustar skskauto/07p/src/nompi.f900000640000175000017500000000563713570013207012506 0ustar sksk! dummy file, used in case MPI is not available. module autompi use auto_constants, only: autoparameters implicit none private public :: mpiini, mpiiap, mpiwfi, mpireduce, mpibcksub, mpisbv, mpicbv, mpibcast public :: mpibcasti, mpibcast1i, mpibcast1l, mpibcastap, mpireducemax, mpireducemin public :: mpigat, mpiscat, mpiend, mpitim, mpiiam, mpikwt, partition public :: mpigats contains subroutine mpiini() end subroutine mpiini integer function mpiiam() mpiiam = 0 end function mpiiam integer function mpikwt() mpikwt = 1 end function mpikwt subroutine mpiiap(ap) type(autoparameters) :: ap end subroutine mpiiap logical function mpiwfi() mpiwfi = .false. end function mpiwfi subroutine partition(n,kwt,m) integer n,kwt,m(kwt) m(1) = n end subroutine partition subroutine mpireduce(a1,a2,bb,cc,c2,dd,faa,fcfc,ntst,nov,ncb,nrc,ifst,nllv,& lo,hi,level) integer, intent(in) :: ntst,nov,ncb,nrc,ifst,nllv,lo,hi,level double precision, intent(inout) :: a1(nov,nov,*),a2(nov,nov,*),bb(ncb,nov,*) double precision, intent(inout) :: cc(nov,nrc,*),c2(nov,nrc,*) double precision, intent(inout) :: dd(ncb,nrc,*),faa(nov,*) double precision, intent(inout) :: fcfc(nrc,*) end subroutine mpireduce subroutine mpibcksub(sol,fc,ntst,nov,ncb,lo,hi,level) integer, intent(in) :: ntst,nov,ncb,lo,hi,level double precision, intent(inout) :: sol(nov,*),fc(*) end subroutine mpibcksub subroutine mpisbv(solvbv) logical, intent(in) :: solvbv end subroutine mpisbv subroutine mpicbv(npar,par,rds,ss) integer, intent(in) :: npar double precision :: par(npar) double precision :: rds,ss end subroutine mpicbv subroutine mpibcast(buf,len) integer, intent(in) :: len double precision, intent(inout) :: buf(len) end subroutine mpibcast subroutine mpibcasti(buf,len) integer, intent(in) :: len integer, intent(inout) :: buf(len) end subroutine mpibcasti subroutine mpibcast1i(buf) integer, intent(inout) :: buf end subroutine mpibcast1i subroutine mpibcast1l(buf) logical, intent(inout) :: buf end subroutine mpibcast1l subroutine mpibcastap(ap) type(autoparameters), intent(inout) :: ap end subroutine mpibcastap subroutine mpiscat(buf,ndx,n,add) integer, intent(in) :: ndx,n,add double precision, intent(inout) :: buf(ndx,*) end subroutine mpiscat subroutine mpigat(buf,ndx,n) integer, intent(in) :: ndx,n double precision, intent(inout) :: buf(ndx,*) end subroutine mpigat subroutine mpigats(buf,ndx,n,linelen) integer, intent(in) :: ndx,n,linelen character(linelen), intent(inout) :: buf(*) end subroutine mpigats subroutine mpireducemax(buf,n) integer, intent(in) :: n double precision, intent(inout) :: buf(n) end subroutine mpireducemax subroutine mpireducemin(buf,n) integer, intent(in) :: n double precision, intent(inout) :: buf(n) end subroutine mpireducemin subroutine mpiend() end subroutine mpiend subroutine mpitim(tim) double precision tim end subroutine mpitim end module autompi auto/07p/src/ae.f900000640000175000017500000007142713570013207011751 0ustar sksk! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Algebraic Problems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! MODULE AE USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC :: AUTOAE CONTAINS ! ---------- ------ SUBROUTINE AUTOAE(AP,ICP,ICU,FUNI,STPNAEI,FNCI) ! This is the entry subroutine for algebraic systems. USE AUTOMPI TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ICU(*) include 'interfaces.h' IF(MPIIAM()>0)THEN RETURN ENDIF IF(MPIKWT()>1)THEN WRITE(9,"(A)")' NOTE: MPI is not used for algebraic problems' ENDIF CALL CNRLAE(AP,ICP,ICU,FUNI,STPNAEI,FNCI) END SUBROUTINE AUTOAE ! ---------- ------ SUBROUTINE CNRLAE(AP,ICP,ICU,FUNI,STPNAEI,FNCI) USE IO USE MESH USE SUPPORT, ONLY: AA=>P0V, P1V, EVV, FNCS, STOPPED, INIT2, INIT3, & INITSTOPCNTS, PVLI, LBITP USE AUTO_CONSTANTS, ONLY: NPARX ! Controls the bifurcation analysis of algebraic problems include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ICU(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: & PAR(:),VUZ(:),THU(:),THL(:), & U(:),UDOT(:),STUD(:,:),STU(:,:),TEST(:) INTEGER, ALLOCATABLE :: IUZ(:) LOGICAL IPOS INTEGER NDIM,IPS,IRS,ILP,IADS,ISP,ISW,NUZR,MXBF,NBIFS,NBFCS,ITPST INTEGER ITNW,ITP,I,ITEST,NINS,NBIF,NBFC,NODIR,NIT,NTOT,NTOP INTEGER NDM,IFOUND,ISTEPPED DOUBLE PRECISION DS,DSMAX,RDS,DSTEST,TMP LOGICAL ISTOP,STEPPED INTEGER STOPCNTS(-9:14) CHARACTER(4) ATYPE,ATYPEDUM CALL INIT2(AP,ICP,ICU) NDIM=AP%NDIM NDM=AP%NDM IPS=AP%IPS IRS=AP%IRS ILP=AP%ILP IADS=AP%IADS ISP=AP%ISP ISW=AP%ISW NUZR=AP%NUZR MXBF=AP%MXBF NBIFS=ABS(MXBF) IF(MXBF>0)THEN NBFCS=2*NBIFS ELSE NBFCS=NBIFS ENDIF ITPST=AP%ITPST DS=AP%DS ! allocate a minimum of NPARX so we can detect overflows ! past NPAR gracefully ! set thu to 1 higher than NDIM for (u,par) representation ALLOCATE(PAR(MAX(AP%NPAR,NPARX)),THL(AP%NFPR),THU(NDIM+1)) ALLOCATE(IUZ(NUZR),VUZ(NUZR)) CALL INIT3(AP,ICP,PAR,THL,THU,IUZ,VUZ) THU(AP%NDIM+1)=THL(1) ALLOCATE(AA(NDIM+1,NDIM+1),U(NDIM+1),UDOT(NDIM+1)) ALLOCATE(STUD(NBIFS,NDIM+1),STU(NBIFS,NDIM+1),TEST(AP%NTEST),EVV(NDM)) ALLOCATE(P1V(NDIM+1,NDIM+1)) NINS=0 AP%NINS=NINS RDS=DS NBIF=0 IPOS=.TRUE. DO I=1,NDIM U(I)=0.d0 UDOT(I)=0.d0 ENDDO ! init P1 to identity matrix so that GETMDMX in support.f90 makes sense P1V(:,:)=0.d0 DO I=1,NDIM+1 P1V(I,I)=1.d0 ENDDO ! Generate the starting point NODIR=1 CALL STPNAEI(AP,PAR,ICP,U,UDOT,NODIR) CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) ! Determine a suitable starting label and branch number CALL NEWLAB(AP) ! Write constants CALL STHD(AP,ICP) DO NBFC=0,NBFCS !bifurcation switch loop DO I=1,AP%NTEST TEST(I)=0.d0 ENDDO NTOT=0 AP%NTOT=NTOT CALL INITSTOPCNTS(ISP,ILP,ITPST,STOPCNTS) ISTOP=.FALSE. NIT=1 IF(IRS.EQ.0) THEN ITP=9+10*ITPST ELSE ITP=0 ENDIF AP%ITP=ITP U(NDIM+1)=PAR(ICP(1)) ! Starting procedure (to get direction vector) : IF(NODIR==1.AND.ISW>=0)THEN CALL STPRAE(AP,PAR,ICP,FUNI,U,UDOT,THU,0,AA) ELSEIF(IRS/=0.AND.ISW<0)THEN CALL STPRAE(AP,PAR,ICP,FUNI,U,UDOT,THU,1,AA) ELSEIF(ABS(IPS)==1.OR.IPS==11)THEN CALL STPRAE(AP,PAR,ICP,FUNI,U,UDOT,THU,-1,AA) ENDIF IF(ABS(IPS)==1.OR.IPS==11)THEN ! Get stability TMP=FNCI(AP,ICP,U,NDIM,PAR,6,ATYPEDUM) ENDIF ! Store plotting data for first point on the bifurcating branch ! or for the starting point CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) CALL STPLAE(AP,PAR,ICP,ICU,U,UDOT,NIT,ISTOP) IF(.NOT.ISTOP)THEN ! Provide initial approximation to the second point on the branch and ! determine the second point on the bifurcating or original branch CALL STEPAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT,ISW<0) IF(NIT>0)CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) IF(ISW<0.OR.NIT==0)THEN IF(ABS(IPS)==1.OR.IPS==11)THEN ! Get stability TMP=FNCI(AP,ICP,U,NDIM,PAR,6,ATYPEDUM) ENDIF ! Store plotting data for second point : CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) CALL STPLAE(AP,PAR,ICP,ICU,U,UDOT,NIT,ISTOP) ENDIF ENDIF DO WHILE(.NOT.ISTOP) ! branch computation loop ITP=0 AP%ITP=ITP NINS=AP%NINS ! Find the next solution point on the branch CALL STEPAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT) ISTOP=NIT==0 IF(.NOT.ISTOP)THEN CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) ENDIF DSTEST=RDS IFOUND=0 IF(ISTOP)THEN ISTEPPED=AP%NTEST+1 ELSE ISTEPPED=0 DO ITEST=1,AP%NTEST ! Check for special points CALL LCSPAE(AP,DSTEST,PAR,ICP,ITEST,FUNI,FNCI,AA,& U,UDOT,TEST(ITEST),THU,IUZ,VUZ,NIT,ATYPE,STEPPED) IF(STEPPED)ISTEPPED=ITEST IF(LEN_TRIM(ATYPE)>0)THEN IFOUND=ITEST AP%ITP=LBITP(ATYPE,.FALSE.) AP%ITP=AP%ITP+SIGN(10,AP%ITP)*ITPST ENDIF ENDDO ENDIF DO ITEST=1,ISTEPPED-1 ! evaluate the test functions for the next step TEST(ITEST)=FNCS(AP,ICP,U,PAR,ATYPEDUM,IUZ,VUZ,ITEST,FNCI) ENDDO ITP=AP%ITP IF(ITP/=0)THEN IF(STOPPED(IUZ,IFOUND,NUZR,ITP,STOPCNTS))THEN ISTOP=.TRUE. ! *Stop at the first found bifurcation ENDIF IF(MOD(ITP,10)==1)THEN ! Check for branch point, and if so store data : CALL STBIF(NDIM,NBIF,NBIFS,STUD,STU,U,UDOT) ENDIF IF(MOD(ITP,10)/=-4)THEN ! for plotter: use stability of previous point ! for bifurcation points AP%NINS=NINS ENDIF ENDIF ! Store plotting data on unit 7 : NTOT=AP%NTOT CALL PVLI(AP,ICP,U,NDIM,PAR,FNCI) CALL STPLAE(AP,PAR,ICP,ICU,U,UDOT,NIT,ISTOP) ! Adapt the stepsize along the branch IF(IADS.NE.0 .AND. MOD(NTOT,IADS).EQ.0 & .AND. ( MOD(ITP,10).EQ.0 .OR. MOD(ITP,10).EQ.4) )THEN ITNW=AP%ITNW NTOP=MOD(NTOT-1,9999)+1 DSMAX=AP%DSMAX CALL ADPTDS(NIT,ITNW,AP%IBR,NTOP,AP%IID,DSMAX,RDS) AP%RDS=RDS ENDIF ENDDO !from branch computation loop IF(NBIF==0.OR.NBFC>=NBFCS)EXIT ! Initialize computation of the next bifurcating branch. CALL SWPNT(AP,DS,PAR,ICP,RDS,NBIF,NBIFS,STUD,STU,U,UDOT,IPOS) IF(IPOS)THEN NBIF=NBIF-1 ENDIF IF(.NOT.IPOS .OR. MXBF.LT.0 )AP%IBR=AP%IBR+1 ! IRS and ISW are for internal use: don't store in AP! IRS=1 ISW=-1 ENDDO !from bifurcation switch loop DEALLOCATE(PAR,THL,THU,IUZ,VUZ,EVV,AA,P1V,U,UDOT,STUD,STU,TEST) END SUBROUTINE CNRLAE ! ---------- ------ SUBROUTINE STPRAE(AP,PAR,ICP,FUNI,U,UDOT,THU,IPERP,AA) USE SUPPORT ! Finds the second point on the initial solution branch. include 'interfaces.h' TYPE(AUTOPARAMETERS) AP INTEGER ICP(*),IPERP DOUBLE PRECISION U(AP%NDIM+1),UDOT(AP%NDIM+1),THU(*),PAR(*) DOUBLE PRECISION AA(AP%NDIM+1,AP%NDIM+1) ! Local DOUBLE PRECISION, ALLOCATABLE :: AAA(:,:),F(:),UOLD(:),DFDU(:,:),DFDP(:,:) INTEGER NDIM,IID,NPAR,I,J DOUBLE PRECISION SS NDIM=AP%NDIM IID=AP%IID NPAR=AP%NPAR ALLOCATE(F(NDIM),UOLD(NDIM+1),DFDU(NDIM,NDIM),DFDP(NDIM,NPAR)) UOLD(:)=U(:) DFDU(:,:)=0.d0 DFDP(:,:)=0.d0 ! Determine the direction of the branch at the starting point CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) IF(IPERP==1)THEN AA(:NDIM,:NDIM)=DFDU(:,:) AA(:NDIM,NDIM+1)=DFDP(:,ICP(1)) AA(NDIM+1,:)=UDOT(:) IF(IID.GE.3)CALL WRJAC(NDIM+1,NDIM+1,AA,F) CALL NLVC(NDIM+1,NDIM+1,1,AA,UDOT) ELSEIF(IPERP==0)THEN ALLOCATE(AAA(NDIM,NDIM+1)) AAA(:,1:NDIM)=DFDU(:,:) AAA(:,NDIM+1)=DFDP(:,ICP(1)) IF(IID.GE.3)CALL WRJAC(NDIM,NDIM+1,AAA,F) CALL NLVC(NDIM,NDIM+1,1,AAA,UDOT) DEALLOCATE(AAA) ENDIF ! Scale and make sure that PAR(ICP(1))-dot is positive. ! If PAR(ICP(1))-dot is close to zero, then make sure ! that the first away-from-zero coordinate is positive. SS=0.d0 DO I=1,NDIM+1 SS=SS+THU(I)*UDOT(I)**2 ENDDO UDOT(:)=UDOT(:)/SQRT(SS) IF(ABS(UDOT(NDIM+1))/(1.d0+ABS(U(NDIM+1)))>AP%EPSL)THEN IF(UDOT(NDIM+1)<0.d0)THEN UDOT(:)=-UDOT(:) ENDIF ELSE DO I=1,NDIM IF(IAP%EPSU)THEN IF(UDOT(J)<0.d0)THEN UDOT(:)=-UDOT(:) ENDIF EXIT ENDIF ENDDO ENDIF ! Get the Jacobian for stability computation. AA(:NDIM,:NDIM)=DFDU(:,:) AA(:NDIM,NDIM+1)=DFDP(:,ICP(1)) AA(NDIM+1,:)=UDOT(:) DEALLOCATE(F,DFDU,DFDP) END SUBROUTINE STPRAE ! ---------- ------ SUBROUTINE STEPAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT,SW) ! This is the subroutine for computing solution branches. It solves ! the equations for finding the next point on the branch at distance RDS ! from the current point. RDS is adapted if there is no convergence. ! It also controls the computation of the second point on a bifurcating branch. ! This point is required to lie in a hyper-plane at distance DS from the ! branch point. This hyper-plane is parallel to the tangent of the ! known branch at the branch point. USE MESH include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NIT DOUBLE PRECISION, INTENT(IN) :: THU(*) DOUBLE PRECISION, INTENT(OUT) :: AA(AP%NDIM+1,AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: U(*),UDOT(*),PAR(*),RDS LOGICAL, OPTIONAL, INTENT(IN) :: SW ! Local INTEGER IADS,IID,ITNW,IBR,NTOT,NTOP LOGICAL BSW DOUBLE PRECISION DSMIN,DSMAX CHARACTER (LEN=7) FIXEDMINIMUM IADS=AP%IADS IID=AP%IID ITNW=AP%ITNW IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 DSMIN=AP%DSMIN DSMAX=AP%DSMAX BSW=.FALSE. IF(PRESENT(SW))BSW=SW DO CALL SOLVAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT,BSW) IF(NIT>0)RETURN ! Maximum number of iterations has been reached. IF(IADS.EQ.0)EXIT ! Reduce stepsize and try again. CALL ADPTDS(ITNW,ITNW,IBR,NTOP,IID,DSMAX,RDS) AP%RDS=RDS IF(ABS(RDS).LT.DSMIN)EXIT IF(IID.GE.2)THEN WRITE(9,"(I4,I6,A)")IBR,NTOP,' NOTE:Retrying step' ENDIF ENDDO ! Minimum stepsize reached. IF(IADS==0)THEN FIXEDMINIMUM='fixed' ELSE FIXEDMINIMUM='minimum' ENDIF IF(IID>0)THEN IF(BSW)THEN WRITE(9,"(I4,I6,A,A,A)")& IBR,NTOP,' NOTE:No convergence when switching branches with ',& FIXEDMINIMUM,' step size' ELSE WRITE(9,"(I4,I6,A,A,A)")& IBR,NTOP,' NOTE:No convergence with ',FIXEDMINIMUM,' step size' ENDIF ENDIF END SUBROUTINE STEPAE ! ---------- ------ SUBROUTINE SOLVAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT,BSW) ! This subroutine contains the main predictor-corrector loop ! Input: U, UDOT, PAR : extended solution ! RDS: step-size ! AP AP ICP, THU, FUNI: constants & function interface ! BSW: if true, switch branches, else do normal continuation ! Output: NIT: number of iterations taken to converge ! after successful convergence (NIT>0): ! AP%DET contains the determinant ! AA contains the extended Jacobian matrix ! U, UDOT, PAR are updated ! else (NIT==0): ! U, UDOT, PAR are not updated USE IO USE SUPPORT include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NIT LOGICAL, INTENT(IN) :: BSW DOUBLE PRECISION, INTENT(IN) :: RDS,THU(*) DOUBLE PRECISION, INTENT(OUT) :: AA(AP%NDIM+1,AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: U(AP%NDIM+1),UDOT(AP%NDIM+1),PAR(*) ! Local INTEGER NDIM,IID,ITNW,IBR,NTOT,NTOP,NIT1,NPAR,I,K,NDM LOGICAL CONVERGED DOUBLE PRECISION, ALLOCATABLE :: RHS(:),DU(:), & DFDU(:,:),DFDP(:,:),UOLD(:) DOUBLE PRECISION EPSL,EPSU,SS,UMX,DUMX,RDRLM,RDUMX,DELREF,ADU,AU,DET CHARACTER (LEN=*), PARAMETER :: O9 = & "(' Branch ',I2,' N=',I5,1X,'IT=',I2,1X,'PAR(',I2,')=', & &ES11.3,1X,'U=',7ES11.3)" NDIM=AP%NDIM IID=AP%IID ITNW=AP%ITNW NDM=AP%NDM IBR=AP%IBR NPAR=AP%NPAR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 EPSL=AP%EPSL EPSU=AP%EPSU ALLOCATE(RHS(NDIM+1),DU(NDIM+1),DFDU(NDIM,NDIM),DFDP(NDIM,NPAR)) DFDU(:,:)=0.d0 DFDP(:,:)=0.d0 ALLOCATE(UOLD(NDIM+1)) UOLD(:)=U(:) U(:)=UOLD(:)+RDS*UDOT(:) ! Write additional output on unit 9 if requested : IF(IID.GE.2)THEN CALL WRBAR("=",47) IF(BSW)THEN WRITE(9,O9)IBR,NTOP,0,ICP(1), & U(NDIM+1),(U(I),I=1,MIN(NDIM,6)) ELSE WRITE(9,100) WRITE(9,101)IBR,NTOP+1,0,U(NDIM+1),RNRMV(NDM,U) 100 FORMAT(/,' BR PT IT PAR',11X,'L2-NORM') 101 FORMAT(I4,I6,I4,5X,2ES14.5) ENDIF ENDIF ! Call user-supplied FUNC to evaluate the right hand side of the ! differential equation and its derivatives : CONVERGED=.FALSE. DELREF=0 DO NIT1=1,ITNW NIT=NIT1 PAR(ICP(1))=U(NDIM+1) CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,2,RHS,DFDU,DFDP) ! Set up the Jacobian matrix and the right hand side : DO I=1,NDIM AA(I,NDIM+1)=DFDP(I,ICP(1)) RHS(I)=-RHS(I) DO K=1,NDIM AA(I,K)=DFDU(I,K) ENDDO ENDDO SS=0.d0 IF(BSW)THEN ! Branch switch DO K=1,NDIM+1 AA(NDIM+1,K)=THU(K)*UDOT(K) SS=SS+THU(K)*(U(K)-UOLD(K)-RDS*UDOT(K))*UDOT(K) ENDDO RHS(NDIM+1)=-SS ELSE DO K=1,NDIM+1 AA(NDIM+1,K)=2.d0*THU(K)*(U(K)-UOLD(K))/RDS SS=SS+THU(K)*(U(K)-UOLD(K))**2 ENDDO RHS(NDIM+1)=RDS-SS/RDS ENDIF ! Use Gauss elimination with pivoting to solve the linearized system : IF(IID.GE.5)CALL WRJAC(NDIM+1,NDIM+1,AA,RHS) CALL GEL(NDIM+1,AA,1,DU,RHS,DET) AP%DET=DET ! Add the Newton increments : DO I=1,NDIM+1 U(I)=U(I)+DU(I) ENDDO DUMX=0.d0 UMX=0.d0 DO I=1,NDIM ADU=ABS(DU(I)) AU=ABS(U(I)) IF(AU>UMX)UMX=AU IF(ADU>DUMX)DUMX=ADU ENDDO IF(IID.GE.2)THEN IF(BSW)THEN WRITE(9,O9)IBR,NTOP,NIT,ICP(1),U(NDIM+1),(U(I),I=1,MIN(NDIM,6)) ELSE WRITE(9,101)IBR,NTOP+1,NIT,U(NDIM+1),RNRMV(NDM,U) ENDIF ENDIF ! Check whether relative error has reached user-supplied tolerance : RDRLM=ABS(DU(NDIM+1))/(1.d0+ABS(U(NDIM+1))) RDUMX=DUMX/(1.d0+UMX) IF(RDRLM.LE.EPSL.AND.RDUMX.LE.EPSU)THEN ! Recompute Jacobian for test functions PAR(ICP(1))=U(NDIM+1) CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,2,RHS,DFDU,DFDP) DO I=1,NDIM AA(I,NDIM+1)=DFDP(I,ICP(1)) DO K=1,NDIM AA(I,K)=DFDU(I,K) ENDDO ENDDO DO K=1,NDIM+1 AA(NDIM+1,K)=UDOT(K) ENDDO IF(IID.GE.2)WRITE(9,*) ! This subroutine determines an initial approximation to the next ! solution on a branch by extrapolating from the two preceding points. UDOT(:)=(U(:)-UOLD(:))/RDS CONVERGED=.TRUE. EXIT ENDIF IF(.NOT.BSW)THEN IF(NIT.EQ.1)THEN DELREF=20*MAX(RDRLM,RDUMX) ELSE IF(MAX(RDRLM,RDUMX).GT.DELREF)EXIT ENDIF ENDIF ENDDO IF(.NOT.CONVERGED)THEN DO I=1,NDIM+1 U(I)=UOLD(I) ENDDO PAR(ICP(1))=U(NDIM+1) NIT=0 ENDIF DEALLOCATE(RHS,DU,DFDU,DFDP,UOLD) END SUBROUTINE SOLVAE ! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Detection of Singular Points !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ! ---------- ------ SUBROUTINE LCSPAE(AP,DSTEST,PAR,ICP,ITEST,FUNI,FNCI,AA, & U,UDOT,Q,THU,IUZ,VUZ,NIT,ATYPE,STEPPED) USE SUPPORT DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 ! This subroutine uses the secant method to accurately locate special ! points (branch points, folds, Hopf bifurcations, user zeroes). ! These are characterized as zeroes of the function FNCS. ! This subroutine calls CONT and STEPAE with varying stepsize RDS. ! The special point is assumed to have been found with sufficient ! accuracy if the ratio between RDS and the user supplied value of ! DS is less than the user-supplied toler EPSS. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),IUZ(*),ITEST INTEGER, INTENT(INOUT) :: NIT DOUBLE PRECISION, INTENT(IN) :: THU(*),VUZ(*) DOUBLE PRECISION, INTENT(INOUT) :: DSTEST,Q DOUBLE PRECISION, INTENT(INOUT) :: AA(AP%NDIM+1,AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*),U(AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: UDOT(AP%NDIM+1) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE LOGICAL, INTENT(OUT) :: STEPPED INTEGER I,IID,ITMX,IBR,ITLCSP,NTOT,NITS DOUBLE PRECISION DS,DSMAX,EPSS,Q0,Q1,DQ,S0,S1,RDS,RRDS DOUBLE PRECISION DETS,DSTESTS DOUBLE PRECISION, ALLOCATABLE :: US(:),UDOTS(:),AAS(:,:) CHARACTER(4) ATYPEDUM IID=AP%IID ITMX=AP%ITMX IBR=AP%IBR NTOT=AP%NTOT DS=AP%DS DSMAX=AP%DSMAX EPSS=AP%EPSS STEPPED=.FALSE. ! Check whether FNCS has changed sign. Q0=Q Q1=FNCS(AP,ICP,U,PAR,ATYPE,IUZ,VUZ,ITEST,FNCI) ! disable detected potential bifurcations without stability changes I=LEN_TRIM(ATYPE) IF(I>0)THEN IF(ATYPE(I:I)=='0')ATYPE='' ENDIF IF(AP%ITP/=0.AND.ABS((1.d0+HMACH)*Q1*DSTEST) < & EPSS*(1+SQRT(ABS(DS*DSMAX)))*ABS(Q0-Q1))THEN ! there could be multiple test functions going through zero ! at a point, for instance CP/LP and BP/CP. ! In general, use "first come, first served", but ! bifurcations override UZ, and CP overrides LP. IF((MOD(AP%ITP,10)==-4.AND.LEN_TRIM(ATYPE)>0.AND.TRIM(ATYPE)/='UZ').OR. & (AP%ITP==22.AND.TRIM(ATYPE)=='CP'))THEN Q=0.d0 IF(IID>0)WRITE(9,102)RDS RETURN ENDIF Q1=0.d0 ENDIF ! do not test via Q0*Q1 to avoid overflow. IF((Q0>=0.AND.Q1>=0) .OR. (Q0<=0.AND.Q1<=0) .OR. LEN_TRIM(ATYPE)==0)THEN ATYPE='' Q=Q1 RETURN ENDIF ! Use the secant method for the first step: S0=0.d0 S1=DSTEST DQ=Q0-Q1 RDS=Q1/DQ*(S1-S0) RDS=(1.d0+HMACH)*RDS ! Return if relative tolerance has been met : RRDS=ABS(RDS)/(1+SQRT(ABS(DS*DSMAX))) IF(RRDS.LT.EPSS)THEN Q=0.d0 IF(IID>0)WRITE(9,102)RDS RETURN ENDIF ALLOCATE(US(AP%NDIM+1),UDOTS(AP%NDIM+1),AAS(AP%NDIM+1,AP%NDIM+1)) ! save state to restore in case of non-convergence or ! "possible special point" US(:)=U(:) UDOTS(:)=UDOT(:) AAS(:,:)=AA(:,:) DETS=AP%DET DSTESTS=DSTEST NITS=NIT DO ITLCSP=0,ITMX ! If requested write additional output on unit 9 : IF(IID.GE.2)THEN WRITE(9,101)ITLCSP,RDS ENDIF CALL STEPAE(AP,PAR,ICP,FUNI,RDS,AA,U,UDOT,THU,NIT) IF(NIT==0)EXIT STEPPED=.TRUE. CALL PVLI(AP,ICP,U,AP%NDIM,PAR,FNCI) Q=FNCS(AP,ICP,U,PAR,ATYPE,IUZ,VUZ,ITEST,FNCI) ! ignore stability changes I=LEN_TRIM(ATYPE) IF(ATYPE(I:I)=='0')ATYPE=ATYPE(1:I-1) ! Use Mueller's method with bracketing for subsequent steps DSTEST=S1+RDS CALL MUELLER(Q0,Q1,Q,S0,S1,DSTEST,RDS) RDS=(1.d0+HMACH)*RDS ! Return if relative tolerance has been met : RRDS=ABS(RDS)/(1+SQRT(ABS(DS*DSMAX))) IF(RRDS.LT.EPSS)THEN Q=0.d0 IF(IID>0)WRITE(9,102)RDS DEALLOCATE(US,UDOTS,AAS) STEPPED=.TRUE. RETURN ENDIF ENDDO IF(IID>0)WRITE(9,103)IBR,MOD(NTOT-1,9999)+1 ATYPE='' ! set back to previous (converged) state U(:)=US(:) UDOT(:)=UDOTS(:) AA(:,:)=AAS(:,:) DO I=1,AP%NFPR PAR(ICP(I))=U(AP%NDIM+2-I) ENDDO AP%DET=DETS NIT=NITS DSTEST=DSTESTS CALL PVLI(AP,ICP,U,AP%NDIM,PAR,FNCI) Q=FNCS(AP,ICP,U,PAR,ATYPEDUM,IUZ,VUZ,ITEST,FNCI) DEALLOCATE(US,UDOTS,AAS) 101 FORMAT(' ==> Location of special point : Iteration ',I3, & ' Step size = ',ES13.5) 102 FORMAT(' ==> Location of special point : ', & ' Convergence. Step size = ',ES13.5) 103 FORMAT(I4,I6,' NOTE:Possible special point') END SUBROUTINE LCSPAE ! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Branch Switching for Algebraic Problems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ! ---------- ----- SUBROUTINE STBIF(NDIM,NBIF,NBIFS,STUD,STU,U,UDOT) USE SUPPORT ! Stores branching data in the following arrays : ! STU ( the solution vector U | PAR(ICP(1)) ) ! STUD ( U-dot | PAR(ICP(1))-dot ) ! Here the vector ( U-dot, PAR(ICP(1))-dot ) is the direction vector of ! known branch at this point. INTEGER, INTENT(IN) :: NDIM,NBIFS INTEGER, INTENT(INOUT) :: NBIF DOUBLE PRECISION, INTENT(OUT) :: STUD(NBIFS,NDIM+1),STU(NBIFS,NDIM+1) DOUBLE PRECISION, INTENT(IN) :: U(NDIM+1),UDOT(NDIM+1) ! Keep track of the number of branch points stored. IF(NBIF==NBIFS)RETURN NBIF=NBIF+1 STU(NBIF,:)=U(:) STUD(NBIF,:)=UDOT(:) END SUBROUTINE STBIF ! ---------- ----- SUBROUTINE SWPNT(AP,DS,PAR,ICP,RDS,NBIF,NBIFS,STUD,STU,U,UDOT,IPOS) ! This subroutine retrieves the branching data U, U-dot, PAR(ICP(1)), ! PAR(ICP(1))-dot. If this initialization corresponds to the computation ! of the bifurcating branch in opposite direction, then only the sign of ! the stepsize ( DS ) along the branch is reversed. TYPE(AUTOPARAMETERS) AP INTEGER ICP(*) INTEGER, INTENT(IN) :: NBIF,NBIFS DOUBLE PRECISION, INTENT(IN) :: DS DOUBLE PRECISION, INTENT(OUT) :: RDS DOUBLE PRECISION PAR(*),U(*),UDOT(*),STUD(NBIFS,*),STU(NBIFS,*) LOGICAL IPOS INTEGER NDIM,ISW,MXBF,I,I1 NDIM=AP%NDIM ISW=AP%ISW MXBF=AP%MXBF RDS=DS IF(.NOT.IPOS)RDS=-DS DO I=1,NDIM+1 U(I)=STU(1,I) UDOT(I)=STUD(1,I) ENDDO PAR(ICP(1))=U(NDIM+1) IF(ABS(ISW).EQ.2)PAR(ICP(2))=U(NDIM) IF(MXBF.GE.0)THEN IPOS=.NOT.IPOS ENDIF IF(.NOT.IPOS)RETURN DO I=1,NBIF-1 DO I1=1,NDIM+1 STU(I,I1)=STU(I+1,I1) STUD(I,I1)=STUD(I+1,I1) ENDDO ENDDO END SUBROUTINE SWPNT ! ---------- ------ SUBROUTINE STPLAE(AP,PAR,ICP,ICU,U,UDOT,NIT,ISTOP) USE IO USE SUPPORT ! Stores the bifurcation diagram on unit 7 (Algebraic Problems). ! Every line written contains, in order, the following: ! ! IBR : The label of the branch. ! NTOT : The index of the point on the branch. ! (Points are numbered consecutively along a branch). ! If IPS=1, 11, or -1, then the sign of NTOT indicates stability : ! - = stable , + = unstable, unknown, or not relevant. ! ITP : An integer indicating the type of point : ! ! 1 (BP) : Branch point. ! 2 (LP) : Fold. ! 3 (HB) : Hopf bifurcation point. ! 4 ( ) : Output point (Every NPR steps along branch). ! -4 (UZ) : Output point (Zero of user function). ! 9 (EP) : End point of branch, normal termination. ! -9 (MX) : End point of branch, abnormal termination. ! ! LAB : The label of a special point. ! PAR(ICP(1)): The principal parameter. ! A : The L2-norm of the solution vector, or other measure of ! the solution (see the user-supplied parameter IPLT). ! U : The first few components of the solution vector. ! PAR(ICP(*)): Further free parameters (if any). ! TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ICU(*),NIT DOUBLE PRECISION, INTENT(IN) :: U(*),UDOT(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) LOGICAL, INTENT(INOUT) :: ISTOP INTEGER NDIM,IPS,ISW,IPLT,NMX,NPR,NDM,ITP,ITPST,IBR INTEGER NTOT,NTOTS,IAB,LABW,NINS DOUBLE PRECISION RL0,RL1,A0,A1,AMP NDIM=AP%NDIM IPS=AP%IPS ISW=AP%ISW IPLT=AP%IPLT NMX=AP%NMX NPR=AP%NPR NDM=AP%NDM ITP=AP%ITP ITPST=AP%ITPST IBR=AP%IBR RL0=AP%RL0 RL1=AP%RL1 A0=AP%A0 A1=AP%A1 NTOT=AP%NTOT NTOT=NTOT+1 AP%NTOT=NTOT ! ITP is set to 4 every NPR steps along a branch, and the entire ! solution is written on unit 8. IF(NPR.NE.0)THEN IF(MOD(NTOT,NPR).EQ.0 .AND. MOD(ITP,10).EQ.0)ITP=4+10*ITPST AP%ITP=ITP ENDIF ! CHECK WHETHER LIMITS OF THE BIFURCATION DIAGRAM HAVE BEEN REACHED : IAB=ABS(IPLT) IF(IAB.LE.NDIM .AND. IAB.GT.0)THEN AMP=U(IAB) ELSE IF(IPLT.GT.NDIM.AND.IPLT.LE.2*NDIM)THEN AMP=U(IPLT-NDIM) ELSE IF(IPLT.GT.2*NDIM.AND.IPLT.LE.3*NDIM)THEN AMP=U(IPLT-2*NDIM) ELSE AMP=RNRMV(NDM,U) ENDIF IF(NIT==0)THEN ! Maximum number of iterations reached somewhere. ISTOP=.TRUE. ITP=-9-10*ITPST AP%ITP=ITP ELSEIF(U(NDIM+1).LT.RL0.OR.U(NDIM+1).GT.RL1 & .OR. AMP.LT.A0.OR.AMP.GT.A1 & .OR. NTOT.EQ.NMX) THEN ISTOP=.TRUE. ITP=9+10*ITPST AP%ITP=ITP ENDIF LABW=0 IF(MOD(ITP,10).NE.0)THEN LABW=AP%LAB ENDIF ! Determine stability and print output on units 6 and 7. NTOTS=NTOT NINS=AP%NINS IF((ABS(IPS)==1.OR.IPS==11) .AND. ABS(ISW)<=1)THEN IF(NINS.EQ.NDIM)NTOTS=-NTOT ENDIF CALL WRLINE(AP,PAR,ICU,IBR,NTOTS,LABW,AMP,U) ! Write restart information for multi-parameter analysis : IF(LABW.NE.0)THEN CALL WRTSP8(AP,PAR,ICP,LABW,U,UDOT) AP%LAB=AP%LAB+1 ENDIF ! END SUBROUTINE STPLAE ! ---------- ------ SUBROUTINE WRTSP8(AP,PAR,ICP,LAB,U,UDOT) USE COMPAT USE SUPPORT, ONLY: DIRECTION USE AUTO_CONSTANTS, ONLY: IPS, NDIMU => NDIM ! Write restart information on singular points, plotting points, etc., ! on unit 8. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),LAB DOUBLE PRECISION, INTENT(IN) :: U(*),UDOT(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER NDIM,ISW,ITP,IBR,NFPR,NPAR,NTOT,NROWPR,MTOT,NAR,NTPL,I,K INTEGER NPARI,NTST DOUBLE PRECISION T LOGICAL DIR NDIM=AP%NDIM ISW=AP%ISW NPARI=AP%NPARI ITP=AP%ITP IBR=AP%IBR NFPR=AP%NFPR NPAR=AP%NPAR NTOT=AP%NTOT NTPL=1 NAR=NDIM+1 ! skip direction info based on IIS and ITP DIR=DIRECTION(AP%IIS,ITP) NROWPR=NDIM/7 + 1 + (NPAR+6)/7 NTST=0 IF(DIR)THEN NROWPR=NROWPR + (NFPR+19)/20 + (NFPR+6)/7 + (NDIM+6)/7 NTST=1 ENDIF PAR(ICP(1))=U(NDIM+1) T=0.d0 MTOT=MOD(NTOT-1,9999)+1 WRITE(8,101)IBR,MTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,0,NPAR,& NPARI,NDIMU,IPS,0 WRITE(8,102)T,(U(I),I=1,NDIM) IF(DIR)THEN ! Write the free parameter indices: WRITE(8,103)(ICP(I),I=1,NFPR) ! Write the direction of the branch: WRITE(8,102)UDOT(NDIM+1),(UDOT(NDIM-NFPR+I),I=2,NFPR) WRITE(8,102)(UDOT(K),K=1,NDIM) ENDIF ! Write the parameter values. WRITE(8,102)(PAR(I),I=1,NPAR) 101 FORMAT(6I6,I8,I6,I8,7I5) 102 FORMAT(4X,7ES19.10E3) 103 FORMAT(20I5) CALL AUTOFLUSH(8) END SUBROUTINE WRTSP8 ! ---------- ------ SUBROUTINE WRJAC(M,N,AA,RHS) INTEGER, INTENT(IN) :: M,N DOUBLE PRECISION, INTENT(IN) :: AA(M,N),RHS(M) INTEGER I,J WRITE(9,"(A)")' Residual vector :' WRITE(9,"(1X,12E10.3)")RHS(:),(0d0,I=M+1,N) WRITE(9,"(A)")' Jacobian matrix :' DO I=1,M WRITE(9,"(1X,12E10.3)")(AA(I,J),J=1,N) ENDDO DO I=M+1,N WRITE(9,"(1X,12E10.3)")(0d0,J=1,N) ENDDO END SUBROUTINE WRJAC END MODULE AE auto/07p/src/mesh.f900000640000175000017500000005137113570013207012314 0ustar sksk! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Mesh and Weight Generation !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! MODULE MESH IMPLICIT NONE PRIVATE PUBLIC :: MSH,GENWTS,WINT,ADPTDS,ADAPT,ADAPT2,INTWTS,SCALEB,SCALEBP PUBLIC :: RNRMSQ,RNRMSQP,RINTG,RNRM2,RMXUPS,RMNUPS,RMXUPST,RMNUPST PUBLIC :: MXUPSP,RMXUPSP,RMNUPSP CONTAINS ! ---------- --- SUBROUTINE MSH(NTST,TM) ! Generates a uniform mesh on [0,1]. INTEGER, INTENT(IN) :: NTST DOUBLE PRECISION, INTENT(OUT) :: TM(0:NTST) INTEGER J DO J=0,NTST TM(J)=DBLE(J)/NTST ENDDO END SUBROUTINE MSH ! ---------- ------ SUBROUTINE GENWTS(NCOL,WT,WP) ! Generates weights of the collocation method. The user selected ! number of collocation points (ncol) must be one of { 2,...,7 }. ! ! The following weights are generated : ! ! WT : for the function value, ! WP : for the first derivative, INTEGER, INTENT(IN) :: NCOL DOUBLE PRECISION, INTENT(OUT) :: WT(0:NCOL,NCOL),WP(0:NCOL,NCOL) ! Local INTEGER IB,IC,K,L,DENOM DOUBLE PRECISION ZM(NCOL),P,SUM ! Generate the collocation points : CALL CPNTS(NCOL,ZM) ! Generate weights : DO IB=0,NCOL DENOM=1 DO K=0,NCOL IF(K/=IB)DENOM=DENOM*(IB-K) ENDDO DO IC=1,NCOL ! Weights for the function values : P=1.d0 DO K=0,NCOL IF(K/=IB)P=P*( ZM(IC)*NCOL-K ) ENDDO WT(IB,IC)=P/DENOM ! Weights for derivatives : SUM=0.d0 DO L=0,NCOL IF(L/=IB)THEN P=1.d0 DO K=0,NCOL IF(K/=IB.AND.K/=L)P=P*( ZM(IC)*NCOL-K ) ENDDO SUM=SUM+P*NCOL ENDIF ENDDO WP(IB,IC)=SUM/DENOM ENDDO ENDDO END SUBROUTINE GENWTS ! ---------- ----- SUBROUTINE CPNTS(NCOL,ZM) ! Generates the collocation points with respect to [0,1]. INTEGER, INTENT(IN) :: NCOL DOUBLE PRECISION, INTENT(OUT) :: ZM(NCOL) DOUBLE PRECISION, PARAMETER :: & C51 = .5d0*0.90617984593866399280d0, & C52 = .5d0*0.53846931010568309104d0, & C61 = .5d0*0.93246951420315202781d0, & C62 = .5d0*0.66120938646626451366d0, & C63 = .5d0*0.23861918608319690863d0, & C71 = .5d0*0.949107991234275852452d0, & C72 = .5d0*0.74153118559939443986d0, & C73 = .5d0*0.40584515137739716690d0, & R = 6.0d0/7.0d0 DOUBLE PRECISION C21,C31,C4,C41,C42 SELECT CASE(NCOL) CASE(2) C21 = .5d0/SQRT(3.0d0) ZM(1) = .5d0-C21 ZM(2) = .5d0+C21 CASE(3) C31 = .5d0*SQRT(0.6d0) ZM(1) = .5d0-C31 ZM(2) = .5d0 ZM(3) = .5d0+C31 CASE(4) C4 = .5d0*SQRT(R**2-12.0d0/35.0d0) C41 = .5d0*SQRT(3.0d0/7.0d0+C4) C42 = .5d0*SQRT(3.0d0/7.0d0-C4) ZM(1) = .5d0-C41 ZM(2) = .5d0-C42 ZM(3) = .5d0+C42 ZM(4) = .5d0+C41 CASE(5) ZM(:) = (/ .5d0-C51, .5d0-C52, .5d0, .5d0+C52, .5d0+C51 /) CASE(6) ZM(:) = (/ .5d0-C61, .5d0-C62, .5d0-C63, & .5d0+C63, .5d0+C62, .5d0+C61 /) CASE(7) ZM(:) = (/ .5d0-C71, .5d0-C72, .5d0-C73, .5d0, & .5d0+C73, .5d0+C72, .5d0+C71 /) END SELECT END SUBROUTINE CPNTS ! ---------- ------ SUBROUTINE CNTDIF(N,D) ! Generates the coefficients of the central difference formula for ! Nth derivative at uniformly spaced points ! 0 = x < x < ... < x = 1. ! 0 1 N INTEGER, INTENT(IN) :: N INTEGER, INTENT(OUT) :: D(0:N) INTEGER I,K D(0)=1 IF(N.EQ.0)RETURN DO I=1,N D(I)=0 DO K=I,1,-1 D(K)=D(K-1)-D(K) ENDDO D(0)=-D(0) ENDDO END SUBROUTINE CNTDIF ! ---------- ---- SUBROUTINE WINT(NCOL,WI) ! Generates the weights for the integration formula based on polynomial ! interpolation at NCOL+1 equally spaced points in [0,1]. INTEGER, INTENT(IN) :: NCOL DOUBLE PRECISION, INTENT(OUT) :: WI(0:NCOL) DOUBLE PRECISION C SELECT CASE(NCOL) CASE(2) C=1.d0/6.0d0 WI(0)=C WI(1)=4.0d0*C WI(2)=C CASE(3) C=1.d0/8.0d0 WI(0)=C WI(1)=3.0d0*C WI(2)=WI(1) WI(3)=C CASE(4) C=1.d0/90.0d0 WI(0)=7.0d0*C WI(1)=32.0d0*C WI(2)=12.0d0*C WI(3)=WI(1) WI(4)=WI(0) CASE(5) WI(0)=19.0d0/288.0d0 WI(1)=25.0d0/96.0d0 WI(2)=25.0d0/144.0d0 WI(3)=WI(2) WI(4)=WI(1) WI(5)=WI(0) CASE(6) WI(0)=41.0d0/840.0d0 WI(1)=9.0d0/35.0d0 WI(2)=9.0d0/280.0d0 WI(3)=34.0d0/105.0d0 WI(4)=WI(2) WI(5)=WI(1) WI(6)=WI(0) CASE(7) WI(0)=751.0d0/17280.0d0 WI(1)=3577.0d0/17280.0d0 WI(2)=49.0d0/640.0d0 WI(3)=2989.0d0/17280.0d0 WI(4)=WI(3) WI(5)=WI(2) WI(6)=WI(1) WI(7)=WI(0) END SELECT END SUBROUTINE WINT !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Stepsize and Mesh Adaption !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE ADPTDS(NIT,ITNW,IBR,NTOP,IID,DSMAX,RDS) INTEGER, INTENT(IN) :: NIT,ITNW,IBR,NTOP,IID DOUBLE PRECISION, INTENT(IN) :: DSMAX DOUBLE PRECISION, INTENT(INOUT) :: RDS ! Local DOUBLE PRECISION ARDS ! The stepsize along the branch of solutions is adapted depending on the ! number of Newton iterations in the previous step (called if IADS > 0). SELECT CASE(NIT) CASE(0:1) RDS= 2.d0*RDS CASE(2) RDS= 1.5*RDS CASE(3:) IF(NIT<=ITNW/2)THEN RDS= 1.1*RDS ELSE IF(NIT>=ITNW)THEN RDS=.5d0*RDS ENDIF END SELECT ARDS= ABS(RDS) IF(ARDS>DSMAX)RDS=RDS*DSMAX/ARDS IF(IID>0)THEN WRITE(9,"(/,I4,I6,8X,A,I3)")ABS(IBR),NTOP,' Iterations : ',NIT WRITE(9,"(I4,I6,8X,A,ES13.5)")ABS(IBR),NTOP,' Next Step : ',RDS ENDIF END SUBROUTINE ADPTDS ! ---------- ----- SUBROUTINE ADAPT(NTST,NTSTNA,NCOL,NDIM,TM,DTM,UPS,VPS,IPER) USE AUTOMPI ! Adapts the distribution of the mesh points so that the increase of the ! monotone function EQDF becomes approximately equidistributed over the ! intervals. The functions UPS and VPS are interpolated on new mesh. INTEGER, INTENT(IN) :: NTST,NTSTNA,NCOL,NDIM ! For periodic boundary conditions extrapolate by periodicity. LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(INOUT) :: UPS(NDIM,0:NTSTNA*NCOL), & VPS(NDIM,0:NTSTNA*NCOL),TM(0:NTSTNA),DTM(NTSTNA) ! Local INTEGER :: IAM DOUBLE PRECISION, ALLOCATABLE :: TINT(:),UINT(:,:),VINT(:,:) ! Generate the new mesh : IAM=MPIIAM() IF(IAM==0)THEN ALLOCATE(TINT(0:NTST),UINT(NDIM,0:NTST*NCOL),VINT(NDIM,0:NTST*NCOL)) CALL NEWMSH(NDIM,NDIM,UPS,NTST,NCOL,TM,DTM,NTST,TINT,IPER) CALL MPISCAT(TINT,1,NTST,1) ! Replace UPS/VPS by their interpolants on the new mesh : CALL INTERP(NDIM,NTST,NCOL,TM,UPS,VPS,NDIM,NTST,NCOL,TINT, & UINT,VINT) CALL MPISCAT(UINT,NDIM*NCOL,NTST,NDIM) CALL MPISCAT(VINT,NDIM*NCOL,NTST,NDIM) UPS(:,:)=UINT(:,:) VPS(:,:)=VINT(:,:) ! Replace old mesh : DTM(:)=TINT(1:NTST)-TINT(0:NTST-1) TM(:)=TINT(:) DEALLOCATE(TINT,UINT) ELSE CALL MPISCAT(TM,1,NTST,1) DTM(:)=TM(1:NTSTNA)-TM(0:NTSTNA-1) CALL MPISCAT(UPS,NDIM*NCOL,NTST,NDIM) CALL MPISCAT(VPS,NDIM*NCOL,NTST,NDIM) ENDIF END SUBROUTINE ADAPT ! ---------- ------ SUBROUTINE ADAPT2(NOLD,NCOLD,NDOLD,NNEW,NCNEW,NDIM, & TMR,UPSR,VPSR,TM,UPS,VPS,IPER) ! Adapts the distribution of the mesh points so that the increase of the ! monotone function EQDF becomes approximately equidistributed over the ! intervals. The functions UPS and VPS are interpolated on new mesh. INTEGER, INTENT(IN) :: NOLD,NCOLD,NDOLD,NNEW,NCNEW,NDIM LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(IN) :: UPSR(NDOLD,0:*),VPSR(NDOLD,0:*),TMR(0:NOLD) DOUBLE PRECISION, INTENT(OUT) :: UPS(NDIM,0:*),VPS(NDIM,0:*),TM(0:*) ! Local INTEGER J,NDM DOUBLE PRECISION, ALLOCATABLE :: DTM(:) NDM=MIN(NDOLD,NDIM) IF(NOLD==NNEW.AND.NCOLD==NCNEW)THEN ! Just copy DO J=0,NCNEW*NNEW UPS(1:NDM,J)=UPSR(1:NDM,J) VPS(1:NDM,J)=VPSR(1:NDM,J) ENDDO TM(0:NNEW)=TMR(0:NNEW) RETURN ENDIF ! Generate the new mesh : ALLOCATE(DTM(NOLD)) DTM(:)=TMR(1:NOLD)-TMR(0:NOLD-1) CALL NEWMSH(NDM,NDOLD,UPSR,NOLD,NCOLD,TMR,DTM,NNEW,TM,IPER) DEALLOCATE(DTM) ! Replace UPS/VPS by their interpolants on the new mesh : CALL INTERP(NDIM,NOLD,NCOLD,TMR,UPSR,VPSR,NDOLD,NNEW,NCNEW, & TM,UPS,VPS) END SUBROUTINE ADAPT2 ! ---------- ------ SUBROUTINE INTERP(NDIM,N,NC,TM,UPS,VPS,NDOLD,N1,NC1,TM1,UPS1,VPS1) ! Finds interpolant (TM(.) , UPS(.) ) on new mesh TM1. INTEGER, INTENT(IN) :: NDIM,N,NC,N1,NC1,NDOLD DOUBLE PRECISION, INTENT(IN) :: UPS(NDOLD,0:N*NC),VPS(NDOLD,0:N*NC) DOUBLE PRECISION, INTENT(IN) :: TM(0:N),TM1(0:N1) DOUBLE PRECISION, INTENT(OUT) :: UPS1(NDIM,0:N1*NC1),VPS1(NDIM,0:N1*NC1) ! Local INTEGER I,J,J1,K,NDM DOUBLE PRECISION W(0:NC),Z,D,DT J=1 NDM=MIN(NDIM,NDOLD) DO J1=0,N1-1 DT=TM1(J1+1)-TM1(J1) DO I=0,NC1-1 Z=TM1(J1)+I*DT/NC1 DO IF(J>N)EXIT IF(TM(J)>Z)EXIT J=J+1 ENDDO J=J-1 D=TM(J+1)-TM(J) CALL INTWTS(NC,NC*(Z-TM(J))/D,W) DO K=1,NDM UPS1(K,J1*NC1+I)=DOT_PRODUCT(W(:),UPS(K,J*NC:J*NC+NC)) VPS1(K,J1*NC1+I)=DOT_PRODUCT(W(:),VPS(K,J*NC:J*NC+NC)) ENDDO ENDDO ENDDO DO I=1,NDM UPS1(I,N1*NC1)=UPS(I,N*NC) VPS1(I,N1*NC1)=VPS(I,N*NC) ENDDO END SUBROUTINE INTERP ! ---------- ------ SUBROUTINE NEWMSH(NDIM,NDOLD,UPS,NOLD,NCOLD,TMOLD,DTMOLD,NNEW,TMNEW,IPER) ! Redistributes the mesh according to the function EQDF. INTEGER, INTENT(IN) :: NDIM,NDOLD,NOLD,NCOLD,NNEW LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(IN) :: UPS(NDOLD,0:*),TMOLD(0:NOLD),DTMOLD(NOLD) DOUBLE PRECISION, INTENT(OUT) :: TMNEW(0:NNEW) ! Local INTEGER J,J1 DOUBLE PRECISION DAL,UNEQ DOUBLE PRECISION, ALLOCATABLE :: EQF(:),DEQF(:) ALLOCATE(EQF(0:NOLD),DEQF(NOLD)) ! Put the values of the monotonely increasing function EQDF in EQF. CALL EQDF(NOLD,NDIM,NCOLD,DTMOLD,UPS,NDOLD,EQF,DEQF,IPER) ! Uniformly divide the range of EQDF : DAL=EQF(NOLD)/NNEW ! Generate the new mesh in TMNEW : ! Assign TMNEW(0) and TMNEW(NNEW) explicitly because of loss of precision ! problems when the corresponding EQF values are very close TMNEW(0)=TMOLD(0) J=1 DO J1=1,NNEW-1 ! EQF is an ascending array with values in [0,EQF(NOLD)]. Get the ! value of the index of the TM-interval in which EQF(i) lies. UNEQ=J1*DAL DO IF(J>NOLD)EXIT IF(EQF(J)>UNEQ)EXIT J=J+1 ENDDO J=J-1 TMNEW(J1)=TMOLD(J)+(UNEQ-EQF(J))/DEQF(J+1) ENDDO TMNEW(NNEW)=TMOLD(NOLD) DEALLOCATE(EQF,DEQF) END SUBROUTINE NEWMSH ! ---------- ------ SUBROUTINE INTWTS(N,DT1DT,WTS) ! Generates weights for Lagrange interpolation. INTEGER, INTENT(IN) :: N DOUBLE PRECISION, INTENT(IN) :: DT1DT DOUBLE PRECISION, INTENT(OUT) :: WTS(0:N) INTEGER IB,K,DENOM DOUBLE PRECISION P DENOM=1 DO K=2,N DENOM=DENOM*K ENDDO DO IB=0,N P=1.d0 DO K=0,N IF(K/=IB)THEN P=P*( K-DT1DT ) ENDIF ENDDO WTS(IB)=P/DENOM IF(IB1)THEN E=E+ABS( 2*( ND-HD(I) )/(DTM(J-1)+DTM(J)) )**PWR ENDIF IF(ABS(ND)>HMACH)SMALL=.FALSE. HD(I)=ND ENDDO IF(J>1)THEN EQF(J-1)=EQF(J-2)+DTM(J-1)*E DEQF(J-1)=E ENDIF ENDDO E=0.d0 IF(IPER)THEN ! *Extend by periodicity : J=1 DTAV=(DTM(NTST)+DTM(1))/2 ELSE ! *Extend by extrapolation : J=NTST-1 DTAV=DTM(NTST) ENDIF SC=(NCOL/DTM(J))**NCOL DO I=1,NDIM ND=SC*DOT_PRODUCT(WH(:),UPS(I,(J-1)*NCOL:J*NCOL)) E=E+ABS( (ND-HD(I))/DTAV )**PWR IF(ABS(ND)>HMACH)SMALL=.FALSE. ENDDO EQF(NTST)=EQF(NTST-1)+DTM(NTST)*E DEQF(NTST)=E ! Take care of "small derivative" case. IF(SMALL)THEN EQF(0)=0 DO I=1,NTST EQF(I)=I DEQF(I)=1.0d0/DTM(I) ENDDO ENDIF DEALLOCATE(HD) END SUBROUTINE EQDF ! ------ --------- -------- ----- DOUBLE PRECISION FUNCTION RNRMSQ(NTST,NCOL,NDIM,NDIM1,UPS,DTM,THU) ! Finds the norm-squared of UPS (first NDIM1 components are included only). INTEGER, INTENT(IN) :: NTST,NCOL,NDIM,NDIM1 DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NCOL*NTST) DOUBLE PRECISION, INTENT(IN) :: DTM(*),THU(*) ! Local INTEGER I,J,K,KC DOUBLE PRECISION S,SJ,SK,WI(0:NCOL) ! Weights for the integration formulae : CALL WINT(NCOL,WI) S=0.d0 K=0 DO J=1,NTST SJ=0.d0 DO KC=0,NCOL SK=0.d0 DO I=1,NDIM1 SK=SK+THU(I)*UPS(I,K+KC)**2 ENDDO SJ=SJ+SK*WI(KC) ENDDO K=K+NCOL S=S+DTM(J)*SJ ENDDO RNRMSQ=S END FUNCTION RNRMSQ ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION RNRMSQP(NTST,NCOL,NDIM,NDIM1,UPS,DTM,THU,NA) USE AUTOMPI ! Finds the norm-squared of UPS (first NDIM1 components are included only). ! Parallelized using MPI without MPI_Reduce so addition order is consistent. INTEGER, INTENT(IN) :: NTST,NCOL,NDIM,NDIM1,NA DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NCOL*NTST) DOUBLE PRECISION, INTENT(IN) :: DTM(*),THU(*) ! Local INTEGER I,J,K,KC DOUBLE PRECISION S,SJ,SK,WI(0:NCOL) DOUBLE PRECISION, ALLOCATABLE :: SS(:) ! Weights for the integration formulae : IF(MPIKWT()==1)THEN RNRMSQP=RNRMSQ(NTST,NCOL,NDIM,NDIM1,UPS,DTM,THU) RETURN ENDIF CALL WINT(NCOL,WI) ALLOCATE(SS(NTST)) K=0 DO J=1,NA SJ=0.d0 DO KC=0,NCOL SK=0.d0 DO I=1,NDIM1 SK=SK+THU(I)*UPS(I,K+KC)**2 ENDDO SJ=SJ+SK*WI(KC) ENDDO K=K+NCOL SS(J)=DTM(J)*SJ ENDDO CALL MPIGAT(SS,1,NTST) S=0.d0 IF(MPIIAM()==0)THEN DO J=1,NTST S=S+SS(J) ENDDO ENDIF DEALLOCATE(SS) RNRMSQP=S END FUNCTION RNRMSQP ! ------ --------- -------- ----- DOUBLE PRECISION FUNCTION RINTG(NTST,NCOL,NDIM,IC,UPS,DTM) ! Computes the integral of the IC'th component of UPS. INTEGER, INTENT(IN) :: IC,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL),DTM(NTST) ! Local DOUBLE PRECISION WI(0:NCOL) INTEGER J,K DOUBLE PRECISION S ! Weights for the integration formulae : CALL WINT(NCOL,WI) S=0.d0 K=0 DO J=1,NTST S=S+DTM(J)*DOT_PRODUCT(WI,UPS(IC,K:K+NCOL)) K=K+NCOL ENDDO RINTG=S END FUNCTION RINTG ! ------ --------- -------- ----- DOUBLE PRECISION FUNCTION RNRM2(NTST,NCOL,NDIM,IC,UPS,DTM) ! Computes the L2-norm of the IC'th component of UPS. INTEGER, INTENT(IN) :: IC,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL),DTM(NTST) ! Local DOUBLE PRECISION WI(0:NCOL) INTEGER J,K DOUBLE PRECISION S ! Weights for the integration formulae : CALL WINT(NCOL,WI) S=0.d0 K=0 DO J=1,NTST S=S+DTM(J)*DOT_PRODUCT(WI,UPS(IC,K:K+NCOL)**2) K=K+NCOL ENDDO RNRM2=SQRT(S) END FUNCTION RNRM2 ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION RMXUPS(NTST,NCOL,NDIM,I,UPS) ! Computes the maximum of the I'th component of UPS. INTEGER, INTENT(IN) :: I,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL) RMXUPS=MAXVAL(UPS(I,:)) END FUNCTION RMXUPS ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION RMXUPSP(NA,NCOL,NDIM,I,UPS) USE AUTOMPI ! Computes the maximum of the I'th component of UPS (using MPI). INTEGER, INTENT(IN) :: I,NDIM,NCOL,NA DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NA*NCOL) DOUBLE PRECISION BUF(1) BUF(1)=MAXVAL(UPS(I,:)) CALL MPIREDUCEMAX(BUF,1) RMXUPSP=BUF(1) END FUNCTION RMXUPSP ! ---------- ------ SUBROUTINE MXUPSP(NA,NCOL,NDIM,NDM,UPS,UMX) USE AUTOMPI ! Computes the maximum of all components of UPS (using MPI). INTEGER, INTENT(IN) :: NDIM,NDM,NCOL,NA DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NA*NCOL) DOUBLE PRECISION, INTENT(OUT) :: UMX(NDIM) INTEGER I DO I=1,NDM UMX(I)=MAXVAL(UPS(I,:)) ENDDO CALL MPIREDUCEMAX(UMX,NDM) END SUBROUTINE MXUPSP ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION RMXUPST(NTST,NCOL,NDIM,I,UPS,DTM) ! Computes the t value for the maximum of the I'th component of UPS. INTEGER, INTENT(IN) :: I,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL),DTM(NTST) INTEGER LOC(1),J,L,M LOC=MAXLOC(UPS(I,:)) L=LOC(1)-1 J=L/NCOL RMXUPST=SUM(DTM(1:J)) M=MOD(L,NCOL) IF(M>0)THEN RMXUPST=RMXUPST+DTM(J+1)*M/NCOL ENDIF END FUNCTION RMXUPST ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION RMNUPS(NTST,NCOL,NDIM,I,UPS) ! Computes the minimum of the I'th component of UPS. INTEGER, INTENT(IN) :: I,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL) RMNUPS=MINVAL(UPS(I,:)) END FUNCTION RMNUPS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION RMNUPSP(NA,NCOL,NDIM,I,UPS) USE AUTOMPI ! Computes the minimum of the I'th component of UPS (using MPI). INTEGER, INTENT(IN) :: I,NDIM,NCOL,NA DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NA*NCOL) DOUBLE PRECISION BUF(1) BUF(1)=MINVAL(UPS(I,:)) CALL MPIREDUCEMIN(BUF,1) RMNUPSP=BUF(1) END FUNCTION RMNUPSP ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION RMNUPST(NTST,NCOL,NDIM,I,UPS,DTM) ! Computes the t value for the minimum of the I'th component of UPS. INTEGER, INTENT(IN) :: I,NDIM,NCOL,NTST DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTST*NCOL),DTM(NTST) INTEGER LOC(1),J,L,M LOC=MINLOC(UPS(I,:)) L=LOC(1)-1 J=L/NCOL RMNUPST=SUM(DTM(1:J)) M=MOD(L,NCOL) IF(M>0)THEN RMNUPST=RMNUPST+DTM(J+1)*M/NCOL ENDIF END FUNCTION RMNUPST ! ---------- ------ SUBROUTINE SCALEB(NTST,NCOL,NDIM,NFPR,DVPS,RLD,DTM,THL,THU) ! Scales the vector (DVPS,RLD) so its norm becomes 1. INTEGER, INTENT(IN) :: NTST,NCOL,NDIM,NFPR DOUBLE PRECISION, INTENT(IN) :: DTM(*),THL(NFPR),THU(*) DOUBLE PRECISION, INTENT(INOUT) :: DVPS(NDIM,0:NCOL*NTST),RLD(NFPR) DOUBLE PRECISION SS SS=SQRT(RNRMSQ(NTST,NCOL,NDIM,NDIM,DVPS,DTM,THU)+ & DOT_PRODUCT(THL(:),RLD(:)**2)) DVPS(:,:)=DVPS(:,:)/SS RLD(:)=RLD(:)/SS END SUBROUTINE SCALEB ! ---------- ------- SUBROUTINE SCALEBP(NTST,NCOL,NDIM,NFPR,DVPS,RLD,DTM,THL,THU,NA,NPAR,PAR,RDS) USE AUTOMPI ! Scales the vector (DVPS,RLD) so its norm becomes 1. ! Parallelized using MPI INTEGER, INTENT(IN) :: NTST,NCOL,NDIM,NFPR,NA,NPAR DOUBLE PRECISION, INTENT(IN) :: DTM(*),THL(NFPR),THU(*) DOUBLE PRECISION, INTENT(INOUT) :: DVPS(NDIM,0:NCOL*NTST),RLD(NFPR) DOUBLE PRECISION, INTENT(INOUT) :: PAR(NPAR),RDS DOUBLE PRECISION SS SS=RNRMSQP(NTST,NCOL,NDIM,NDIM,DVPS,DTM,THU,NA) IF(MPIIAM()==0)THEN SS=SQRT(SS+DOT_PRODUCT(THL(:),RLD(:)**2)) ENDIF CALL MPICBV(NPAR,PAR,RDS,SS) DVPS(:,0:NCOL*NA)=DVPS(:,0:NCOL*NA)/SS IF(MPIIAM()==0.AND.NTST>NA)THEN DVPS(:,NCOL*NTST)=DVPS(:,NCOL*NTST)/SS ENDIF RLD(:)=RLD(:)/SS END SUBROUTINE SCALEBP END MODULE MESH auto/07p/src/mpi.f900000640000175000017500000003050213570013207012136 0ustar sksk! This file contains all MPI specific functions in AUTO, both the ! master and workers side. ! ! External subroutines called from the main part of AUTO: ! ! mpiini: inits MPI, and the worker receives some constants ! mpiiap: the master sends constants so that the workers can determine ! the funi and icni functions to use ! mpiwfi: main workers' loop, called by AUTOBV with funi and icni known ! contains the client side of CONPAR and SETUBV ! mpisbv: sends solvbv input from master to workers ! mpireduce: MPI communication for REDUCE ! mpibcksub: MPI communication for BCKSUB ! mpibcast: front-end to MPI_Bcast ! mpigat: front-end to MPI_Gatherv ! mpiend: master tells workers to stop module autompi use auto_constants, only: autoparameters, niap, nrap !$ use omp_lib implicit none private public :: mpiini, mpiiap, mpiwfi, mpireduce, mpibcksub, mpisbv, mpicbv, mpibcast public :: mpibcasti, mpibcast1i, mpibcast1l, mpibcastap, mpireducemax, mpireducemin public :: mpigat, mpiscat, mpiend, mpitim, mpiiam, mpikwt, partition public :: mpigats integer, parameter :: AUTO_MPI_KILL_MESSAGE = 0, AUTO_MPI_SOLVBV_MESSAGE = 1 integer, parameter :: AUTO_MPI_INIT_MESSAGE = 2 include 'mpif.h' contains subroutine mpiini() integer ierr,iam,namelen,provided character(len=MPI_MAX_PROCESSOR_NAME) processor_name integer :: message_type provided = MPI_THREAD_SINGLE !$ if (omp_get_max_threads() > 1) then !$ call MPI_Init_thread(MPI_THREAD_FUNNELED,provided,ierr) !$ endif if (provided == MPI_THREAD_SINGLE) then ! if MPI lib doesn't officially support threads try anyway ! since we only call MPI when no other threads are active call MPI_Init(ierr) endif call MPI_Comm_rank(MPI_COMM_WORLD,iam,ierr) call MPI_Get_processor_name(processor_name,namelen,ierr) ! print *,'Process ',iam,' on ',processor_name if(iam/=0)then call MPI_Bcast(message_type,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) if(message_type /= AUTO_MPI_INIT_MESSAGE)then print *,'Fatal: no init message, message received: ', message_type call MPI_Finalize(ierr) stop endif endif end subroutine mpiini integer function mpiiam() integer ierr call MPI_Comm_rank(MPI_COMM_WORLD,mpiiam,ierr) end function mpiiam integer function mpikwt() integer ierr call MPI_Comm_size(MPI_COMM_WORLD,mpikwt,ierr) end function mpikwt subroutine mpiiap(ap) type(autoparameters) :: ap integer ierr ! Send message to get worker into init mode call MPI_Bcast(AUTO_MPI_INIT_MESSAGE,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) call mpibcastap(ap) end subroutine mpiiap logical function mpiwfi() integer :: message_type, ierr mpiwfi = .false. call MPI_Bcast(message_type,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) select case(message_type) case(AUTO_MPI_KILL_MESSAGE) ! The kill message call MPI_Finalize(ierr) stop case(AUTO_MPI_INIT_MESSAGE) ! do nothing case(AUTO_MPI_SOLVBV_MESSAGE) ! The solvbv message mpiwfi = .true. case default print *,'Unknown message recieved: ', message_type end select end function mpiwfi !--------- --------- subroutine partition(n,kwt,m) ! ! Linear distribution of NTST over all nodes integer n,kwt,m(kwt) integer i do i=1,kwt m(i) = (i*n+kwt-1)/kwt - ((i-1)*n+kwt-1)/kwt enddo end subroutine partition subroutine mpireduce(a1,a2,bb,cc,c2,dd,faa,fcfc,ntst,nov,ncb,nrc,ifst,nllv,& lo,hi,level) integer, intent(in) :: ntst,nov,ncb,nrc,ifst,nllv,lo,hi,level double precision, intent(inout) :: a1(nov,nov,*),a2(nov,nov,*),bb(ncb,nov,*) double precision, intent(inout) :: cc(nov,nrc,*),c2(nov,nrc,*) double precision, intent(inout) :: dd(ncb,nrc,*),faa(nov,*) double precision, intent(inout) :: fcfc(nrc,*) integer :: iam,kwt,mid,nlo,nmid1,hi1,mid1,base,na iam=mpiiam() kwt=mpikwt() mid=(lo+hi)/2 nlo=(lo-1)*kwt/ntst nmid1=mid*kwt/ntst base=(iam*ntst+kwt-1)/kwt na=((iam+1)*ntst+kwt-1)/kwt-base mid1=mid-base if(mid1>na)then mid1=na+level+1 endif hi1=hi-base if(hi1>na)then hi1=na+level endif if(nmid1==iam.and.nloiam.and.nlo==iam)then if(nllv.eq.0)then call mpirecv(faa(1,hi1),nov,nmid1) call mpirecv(fcfc(1,hi1),nrc,nmid1) else faa(:,hi1)=0 fcfc(:,hi1)=0 endif if(ifst.eq.1)then ! receive hi call mpirecv(a1(1,1,mid1+1),nov*nov,nmid1) call mpirecv(a2(1,1,hi1),nov*nov,nmid1) call mpirecv(bb(1,1,hi1),nov*ncb,nmid1) call mpirecv(cc(1,1,mid1+1),nov*nrc,nmid1) call mpirecv(c2(1,1,hi1),nov*nrc,nmid1) call mpirecv(dd(1,1,hi1),ncb*nrc,nmid1) endif endif end subroutine mpireduce subroutine mpibcksub(sol,fc,ntst,nov,ncb,lo,hi,level) integer, intent(in) :: ntst,nov,ncb,lo,hi,level double precision, intent(inout) :: sol(nov,*),fc(*) integer :: iam,kwt,mid,nlo,nmid1,hi1,mid1,base,na iam=mpiiam() kwt=mpikwt() mid=(lo+hi)/2 nlo=(lo-1)*kwt/ntst nmid1=mid*kwt/ntst base=(iam*ntst+kwt-1)/kwt na=((iam+1)*ntst+kwt-1)/kwt-base mid1=mid-base if(mid1>na)then mid1=na+level+1 endif hi1=hi-base if(hi1>na)then hi1=na+level endif if(nmid1==iam.and.nloiam.and.nlo==iam)then call mpisend(sol(1,mid1+1),nov,nmid1) call mpisend(sol(1,hi1+1),nov,nmid1) call mpisend(fc,nov+ncb,nmid1) endif end subroutine mpibcksub subroutine mpirecv(a,isize,isrc) integer, intent(in) :: isize, isrc double precision, intent(out) :: a(isize) integer ierr integer status(MPI_STATUS_SIZE) call MPI_Recv(a,isize,MPI_DOUBLE_PRECISION,isrc, & MPI_ANY_TAG, MPI_COMM_WORLD, status, ierr) end subroutine mpirecv subroutine mpisend(a,isize,idest) integer, intent(in) :: isize, idest double precision, intent(in) :: a(isize) integer ierr call MPI_Send(a,isize,MPI_DOUBLE_PRECISION,idest, & 0, MPI_COMM_WORLD, ierr) end subroutine mpisend subroutine mpisbv(solvbv) logical, intent(in) :: solvbv integer :: ierr integer :: message ! Send message to get worker into solvbv/init cnrlbv mode if(solvbv)then message=AUTO_MPI_SOLVBV_MESSAGE else message=AUTO_MPI_INIT_MESSAGE endif call MPI_Bcast(message,1,MPI_INTEGER,0, & MPI_COMM_WORLD,ierr) end subroutine mpisbv subroutine mpicbv(npar,par,rds,ss) integer, intent(in) :: npar double precision :: par(npar) double precision :: rds,ss integer :: iam,bufsize double precision, allocatable :: buffer(:) iam=mpiiam() bufsize = npar+2 allocate(buffer(bufsize)) if(iam==0)then buffer(1:npar)=par(:) buffer(npar+1)=rds buffer(npar+2)=ss endif call mpibcast(buffer,bufsize) if(iam>0)then par(1:npar)=buffer(1:npar) rds=buffer(npar+1) ss=buffer(npar+2) endif deallocate(buffer) ! Worker runs here end subroutine mpicbv subroutine mpibcast(buf,len) integer, intent(in) :: len double precision, intent(inout) :: buf(len) integer :: ierr call MPI_Bcast(buf,len,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr) end subroutine mpibcast subroutine mpibcasti(buf,len) integer, intent(in) :: len integer, intent(inout) :: buf(len) integer :: ierr call MPI_Bcast(buf,len,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) end subroutine mpibcasti subroutine mpibcast1i(buf) integer, intent(inout) :: buf integer :: ierr call MPI_Bcast(buf,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) end subroutine mpibcast1i subroutine mpibcast1l(buf) logical, intent(inout) :: buf integer :: ierr call MPI_Bcast(buf,1,MPI_LOGICAL,0,MPI_COMM_WORLD,ierr) end subroutine mpibcast1l subroutine mpibcastap(ap) type(autoparameters), intent(inout) :: ap integer :: ierr call MPI_Bcast(ap%ndim,NIAP,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) call MPI_Bcast(ap%ds,NRAP,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr) end subroutine mpibcastap subroutine mpicounts(np,kwt,ndx,add,counts,displacements) integer, intent(in) :: np(kwt), kwt, ndx, add integer, intent(out) :: counts(kwt), displacements(kwt) integer i, loop_start loop_start = 0 do i=1,kwt counts(i) = ndx*np(i)+add displacements(i) = ndx*loop_start loop_start = loop_start + np(i) enddo end subroutine mpicounts subroutine mpiscat(buf,ndx,n,add) integer, intent(in) :: ndx,n,add double precision, intent(inout) :: buf(*) integer, allocatable :: counts(:), displacements(:), np(:) integer ierr, iam, kwt, na0 call MPI_Comm_size(MPI_COMM_WORLD,kwt,ierr) allocate(np(kwt)) call partition(n,kwt,np) call MPI_Comm_rank(MPI_COMM_WORLD,iam,ierr) if(iam==0)then allocate(counts(kwt),displacements(kwt)) call mpicounts(np,kwt,ndx,add,counts,displacements) call MPI_Scatterv(buf,counts,displacements,MPI_DOUBLE_PRECISION, & MPI_IN_PLACE,0,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr) deallocate(counts,displacements) else na0=np(iam+1)*ndx+add call MPI_Scatterv(buf,counts,displacements,MPI_DOUBLE_PRECISION, & buf,na0,MPI_DOUBLE_PRECISION,0,MPI_COMM_WORLD,ierr) endif deallocate(np) end subroutine mpiscat subroutine mpigat(buf,ndx,n) integer, intent(in) :: ndx,n double precision, intent(inout) :: buf(ndx,*) integer, allocatable :: counts(:), displacements(:), np(:) integer ierr, iam, kwt, na0 call MPI_Comm_size(MPI_COMM_WORLD,kwt,ierr) allocate(np(kwt)) call partition(n,kwt,np) call MPI_Comm_rank(MPI_COMM_WORLD,iam,ierr) if(iam==0)then allocate(counts(kwt),displacements(kwt)) call mpicounts(np,kwt,ndx,0,counts,displacements) call MPI_Gatherv(MPI_IN_PLACE,0,MPI_DOUBLE_PRECISION, & buf,counts,displacements,MPI_DOUBLE_PRECISION, & 0,MPI_COMM_WORLD,ierr) deallocate(counts,displacements) else na0=np(iam+1)*ndx call MPI_Gatherv(buf,na0,MPI_DOUBLE_PRECISION, & buf,counts,displacements,MPI_DOUBLE_PRECISION, & 0,MPI_COMM_WORLD,ierr) endif deallocate(np) end subroutine mpigat subroutine mpigats(buf,ndx,n,linelen) ! gather line strings from each worker for output to fort.8/s.* integer, intent(in) :: ndx,n,linelen character(linelen), intent(inout) :: buf(*) integer, allocatable :: counts(:), displacements(:), np(:) integer ierr, iam, kwt, na0, line call MPI_Comm_size(MPI_COMM_WORLD,kwt,ierr) allocate(np(kwt)) call partition(n,kwt,np) call MPI_Comm_rank(MPI_COMM_WORLD,iam,ierr) call MPI_Type_contiguous(linelen,MPI_CHARACTER,line,ierr) call MPI_Type_commit(line,ierr) if(iam==0)then allocate(counts(kwt),displacements(kwt)) call mpicounts(np,kwt,ndx,0,counts,displacements) call MPI_Gatherv(MPI_IN_PLACE,0,line,buf,counts,displacements, & line,0,MPI_COMM_WORLD,ierr) deallocate(counts,displacements) else na0=np(iam+1)*ndx call MPI_Gatherv(buf,na0,line,buf,counts,displacements, & line,0,MPI_COMM_WORLD,ierr) endif call MPI_Type_free(line,ierr) deallocate(np) end subroutine mpigats subroutine mpireducemax(buf,n) integer, intent(in) :: n double precision, intent(inout) :: buf(n) integer ierr if (mpiiam()==0)then call MPI_Reduce(MPI_IN_PLACE, buf, n, MPI_DOUBLE_PRECISION, & MPI_MAX, 0, MPI_COMM_WORLD, ierr) else call MPI_Reduce(buf, buf, n, MPI_DOUBLE_PRECISION, & MPI_MAX, 0, MPI_COMM_WORLD, ierr) endif end subroutine mpireducemax subroutine mpireducemin(buf,n) integer, intent(in) :: n double precision, intent(inout) :: buf(n) integer ierr if (mpiiam()==0)then call MPI_Reduce(MPI_IN_PLACE, buf, n, MPI_DOUBLE_PRECISION, & MPI_MIN, 0, MPI_COMM_WORLD, ierr) else call MPI_Reduce(buf, buf, n, MPI_DOUBLE_PRECISION, & MPI_MIN, 0, MPI_COMM_WORLD, ierr) endif end subroutine mpireducemin subroutine mpiend() integer ierr call MPI_Bcast(AUTO_MPI_KILL_MESSAGE,1,MPI_INTEGER,0,MPI_COMM_WORLD,ierr) call MPI_Finalize(ierr) end subroutine mpiend subroutine mpitim(tim) double precision tim tim = MPI_Wtime() end subroutine mpitim end module autompi auto/07p/src/io.f900000640000175000017500000012665613570013207012000 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Output (Algebraic Problems) !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE IO USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC :: READC, FINDLB, READLB, READBV, WRLINE, WRBAR, STHD, NEWLAB, & GETNDIM3, GETNTST3, GETNCOL3, GETNFPR3, GETIPS3 TYPE SOLUTION INTEGER :: IBR, NTOT, ITP, LAB, NFPR, ISW, NTPL, NAR, NROWPR, NTST, NCOL,& NPAR, NPARI, NDM, IPS, IPRIV DOUBLE PRECISION, DIMENSION(:,:), POINTER :: UPS, UDOTPS DOUBLE PRECISION, DIMENSION(:), POINTER :: TM DOUBLE PRECISION, DIMENSION(:), POINTER :: RLDOT, PAR INTEGER, DIMENSION(:), POINTER :: ICP TYPE(SOLUTION), POINTER :: NEXT END TYPE SOLUTION TYPE(SOLUTION), POINTER :: ROOTSOL, CURSOL INTEGER, SAVE :: MBR=0, MLAB=0 CONTAINS ! ------------- -------- ------- CHARACTER(13) FUNCTION getname(is, ind) USE AUTO_CONSTANTS, ONLY: INDEXSTR TYPE(INDEXSTR), INTENT(IN) :: is(:) INTEGER, INTENT(IN) :: ind INTEGER i getname = '' DO i = 1, SIZE(is) IF (is(i)%index == ind) THEN getname = is(i)%str RETURN ENDIF ENDDO END FUNCTION getname ! ---------- ----- SUBROUTINE READC(UNITC,EOF,LINE,NPOS,STR,KEYEND,POS,LISTLEN,IERR) ! Reads the file of continuation constants USE AUTO_CONSTANTS INTEGER, INTENT(IN) :: UNITC LOGICAL, INTENT(OUT) :: EOF INTEGER, INTENT(INOUT) :: LINE CHARACTER(*), INTENT(INOUT) :: STR INTEGER, INTENT(INOUT) :: NPOS INTEGER, INTENT(OUT) :: KEYEND, POS, LISTLEN, IERR INTEGER I,J,IC,N INTEGER NICP DOUBLE PRECISION RC CHARACTER(LEN=1) :: C,PREV INTEGER LISTLEN2,ios TYPE INDEXSTRL CHARACTER(13) INDEX CHARACTER(2048) STRL END TYPE INDEXSTRL TYPE(INDEXSTRL),ALLOCATABLE :: IVUZRS(:) CHARACTER(LEN=*), PARAMETER :: ICONSTANTS(24) = (/ & "NDIM", "IPS ", "ILP ", "NTST", "NCOL", "IAD ", "IADS", "ISP ", & "ISW ", "IPLT", "NBC ", "NINT", "NMX ", "NPR ", "MXBF", "IID ", & "ITMX", "ITNW", "NWTN", "JAC ", "NPAR", "IBR ", "LAB ", "IIS " /) CHARACTER(LEN=*), PARAMETER :: RCONSTANTS(10) = (/ & "DS ", "DSMIN", "DSMAX", "RL0 ", "RL1 ", "A0 ", "A1 ", & "EPSL ", "EPSU ", "EPSS " /) EOF=.FALSE. POS=0 KEYEND=0 LISTLEN=0 IERR=0 IF(NPOS==1)THEN LINE=LINE+1 N=READINTEGER(UNITC,STR(1:1),IERR) IF(IERR/=0)THEN IF(IERR==4)THEN IERR=0 EOF=.TRUE. ELSEIF(IERR==-1)THEN CALL READOLDC(UNITC,N,EOF,LINE,IERR) ENDIF RETURN ENDIF NEWCFILE=.TRUE. CALL READLINE(UNITC,STR,2,EOF) IF(EOF)RETURN ELSE STR=STR(NPOS:) ENDIF STR=ADJUSTL(STR) IF(LEN_TRIM(STR)==0)RETURN ! comment on line IF(STR(1:1)=='#'.OR.STR(1:1)=='!')THEN NPOS=1 RETURN ENDIF ! look for = after keyword KEYEND=SCAN(STR,'= ')-1 IF(KEYEND==-1)GOTO 3 POS=SCAN(STR,'=')+1 STR(POS:)=ADJUSTL(STR(POS:)) CALL SCANVALUE(UNITC,STR(POS:),NPOS,LISTLEN) IF(NPOS/=1)THEN NPOS=NPOS+POS-1 ENDIF DO I=1,SIZE(ICONSTANTS) IF(STR(1:KEYEND)==TRIM(ICONSTANTS(I)))THEN READ(STR(POS:),*,ERR=3)IC SELECT CASE(I) CASE(1) NDIM=IC CASE(2) IPS=IC CASE(3) ILP=IC CASE(4) NTST=IC CASE(5) NCOL=IC CASE(6) IAD=IC CASE(7) IADS=IC CASE(8) ISP=IC CASE(9) ISW=IC CASE(10) IPLT=IC CASE(11) NBC=IC CASE(12) NINT=IC CASE(13) NMX=IC CASE(14) NPR=IC CASE(15) MXBF=IC CASE(16) IID=IC CASE(17) ITMX=IC CASE(18) ITNW=IC CASE(19) NWTN=IC CASE(20) JAC=IC CASE(21) NPAR=IC CASE(22) IBR=IC CASE(23) LAB=IC CASE(24) IIS=IC END SELECT RETURN ENDIF ENDDO DO I=1,SIZE(RCONSTANTS) IF(STR(1:KEYEND)==TRIM(RCONSTANTS(I)))THEN READ(STR(POS:),*,ERR=3)RC SELECT CASE(I) CASE(1) DS=RC CASE(2) DSMIN=RC CASE(3) DSMAX=RC CASE(4) RL0=RC CASE(5) RL1=RC CASE(6) A0=RC CASE(7) A1=RC CASE(8) EPSL=RC CASE(9) EPSU=RC CASE(10) EPSS=RC END SELECT RETURN ENDIF ENDDO SELECT CASE(STR(1:KEYEND)) CASE('IRS') READ(STR(POS:),*,ERR=3)SIRS READ(SIRS,*,IOSTAT=ios)IRS IF(ios/=0)IRS=1 CASE('ICP') NICP=LISTLEN DEALLOCATE(ICU) ALLOCATE(ICU(NICP)) READ(STR(POS:),*,ERR=3)ICU CASE('UZR','UZSTOP') ALLOCATE(IVUZRS(LISTLEN)) READ(STR(POS:),*,ERR=3)IVUZRS IF(STR(1:KEYEND)=='UZSTOP')THEN DO I=1,SIZE(IVUZSTOP) DEALLOCATE(IVUZSTOP(I)%VAR) ENDDO DEALLOCATE(IVUZSTOP) ALLOCATE(IVUZSTOP(LISTLEN)) ELSE DO I=1,SIZE(IVUZR) DEALLOCATE(IVUZR(I)%VAR) ENDDO DEALLOCATE(IVUZR) ALLOCATE(IVUZR(LISTLEN)) ENDIF DO I=1,LISTLEN PREV=' ' LISTLEN2=0 DO J=1,LEN_TRIM(IVUZRS(I)%STRL) C=IVUZRS(I)%STRL(J:J) IF(C/=' '.AND.C/=','.AND.(PREV==' '.OR.PREV==','))THEN LISTLEN2=LISTLEN2+1 ENDIF PREV=C ENDDO IF(STR(1:KEYEND)=='UZSTOP')THEN ALLOCATE(IVUZSTOP(I)%VAR(LISTLEN2)) IVUZSTOP(I)%INDEX=IVUZRS(I)%INDEX READ(IVUZRS(I)%STRL,*,ERR=3)IVUZSTOP(I)%VAR ELSE ALLOCATE(IVUZR(I)%VAR(LISTLEN2)) IVUZR(I)%INDEX=IVUZRS(I)%INDEX READ(IVUZRS(I)%STRL,*,ERR=3)IVUZR(I)%VAR ENDIF ENDDO DEALLOCATE(IVUZRS) CASE('THL') IF(ALLOCATED(IVTHL))DEALLOCATE(IVTHL) ALLOCATE(IVTHL(LISTLEN)) READ(STR(POS:),*,ERR=3)IVTHL CASE('THU') DEALLOCATE(IVTHU) ALLOCATE(IVTHU(LISTLEN)) READ(STR(POS:),*,ERR=3)IVTHU CASE('SP') IF(ALLOCATED(SP))DEALLOCATE(SP) ALLOCATE(SP(LISTLEN)) READ(STR(POS:),*,ERR=3)SP CASE('STOP') IF(ALLOCATED(STOPS))DEALLOCATE(STOPS) ALLOCATE(STOPS(LISTLEN)) READ(STR(POS:),*,ERR=3)STOPS CASE('PAR') IF(ALLOCATED(PARVALS))DEALLOCATE(PARVALS) ALLOCATE(PARVALS(LISTLEN)) READ(STR(POS:),*,ERR=3)PARVALS CASE('U') IF(ALLOCATED(UVALS))DEALLOCATE(UVALS) ALLOCATE(UVALS(LISTLEN)) READ(STR(POS:),*,ERR=3)UVALS CASE('parnames') IF(ALLOCATED(parnames))DEALLOCATE(parnames) ALLOCATE(parnames(LISTLEN)) READ(STR(POS:),*,ERR=3)parnames CASE('unames') IF(ALLOCATED(unames))DEALLOCATE(unames) ALLOCATE(unames(LISTLEN)) READ(STR(POS:),*,ERR=3)unames CASE('s') READ(STR(POS:),*)SFILE IF(TRIM(SFILE)=='/')THEN ! special case from Python interface: s='/' is followed on ! the next lines by the solution EOF=.TRUE. RETURN ENDIF CASE('dat') READ(STR(POS:),*)DATFILE CASE('sv') READ(STR(POS:),*)SVFILE CASE('e') READ(STR(POS:),*)EFILE CASE('TY') READ(STR(POS:),*,ERR=3)TY CASE DEFAULT IERR=1 END SELECT RETURN 3 IERR=3 END SUBROUTINE READC ! ---------- -------- SUBROUTINE READLINE(UNITC,STR,NPOS,EOF) ! reads a line from unit unitc into str(npos:), replacing tabs with spaces ! in str(:) where appropriate INTEGER, INTENT(IN) :: UNITC, NPOS CHARACTER(*), INTENT(INOUT) :: STR LOGICAL, INTENT(OUT) :: EOF CHARACTER(LEN=1) :: C,QUOTE LOGICAL :: QUOTEESC INTEGER :: ios, I EOF=.FALSE. READ(UNITC,'(A)',IOSTAT=ios) STR(NPOS:) IF(ios/=0)THEN EOF=.TRUE. RETURN ENDIF QUOTE=' ' QUOTEESC=.FALSE. DO I=1,LEN_TRIM(STR) C=STR(I:I) IF(QUOTE==' ')THEN ! replace a tab with spaces if not in a string IF(IACHAR(C)==9)THEN STR(I:I)=' ' ELSEIF(C=="'".OR.C=='"')THEN QUOTE=STR(I:I) ENDIF ELSEIF(C==QUOTE)THEN ! ignore "" and '' IF(STR(I+1:I+1)==C.OR.QUOTEESC)THEN QUOTEESC=.NOT.QUOTEESC ELSE QUOTE=' ' ENDIF ENDIF ENDDO END SUBROUTINE READLINE ! ---------- --------- SUBROUTINE SCANVALUE(UNITC,STR,NPOS,LISTLEN) IMPLICIT NONE ! Scans STR(:) for a value ! NPOS points to the next keyword on the same line, ! or is set to 1 if there is none ! LISTLEN gives the number of items in lists delimited by [] or {} ! [] characters are removed INTEGER, INTENT(IN) :: UNITC CHARACTER(*), INTENT(INOUT) :: STR INTEGER, INTENT(OUT) :: NPOS,LISTLEN INTEGER I,LEVEL,LENSTR CHARACTER(1) C,PREV,QUOTE LOGICAL QUOTEESC,ISDICT,EOF LISTLEN=1 LEVEL=0 QUOTE=' ' QUOTEESC=.FALSE. PREV=' ' NPOS=1 ISDICT=.FALSE. LENSTR=LEN_TRIM(STR) I=1 DO IF(I>LENSTR)THEN IF(LEVEL==0)EXIT LENSTR=LEN_TRIM(STR) CALL READLINE(UNITC,STR(LENSTR+1:),1,EOF) IF(EOF)EXIT LENSTR=LEN_TRIM(STR) ENDIF NPOS=I C=STR(I:I) IF(QUOTE==' ')THEN SELECT CASE(C) CASE(',',' ') IF(LEVEL==0)EXIT IF(PREV==':'.OR.PREV=='['.OR.PREV=='{')C=PREV !eat ',' and ' ' after ':', '[', or '{' CASE(':') STR(I:I)=',' CASE(']','}') IF(C=='}') ISDICT=.FALSE. STR(I:I)=' ' IF(LEVEL==1.AND.(PREV=='['.OR.PREV=='{'))LISTLEN=0 LEVEL=LEVEL-1 IF(C==']'.AND.ISDICT) STR(I:I)="'" CASE DEFAULT IF((PREV==','.OR.PREV==' ').AND.LEVEL==1)THEN LISTLEN=LISTLEN+1 ENDIF SELECT CASE(C) CASE('[','{') STR(I:I)=' ' LEVEL=LEVEL+1 IF(C=='{')THEN ISDICT=.TRUE. ELSEIF(ISDICT)THEN STR(I:I)="'" ENDIF CASE('"',"'") QUOTE=C END SELECT END SELECT ELSEIF(C==QUOTE)THEN ! ignore "" and '' IF(STR(I+1:I+1)==C.OR.QUOTEESC)THEN QUOTEESC=.NOT.QUOTEESC ELSE QUOTE=' ' ENDIF ENDIF PREV=C I=I+1 ENDDO I=VERIFY(STR(NPOS:)," ,") IF(I==0)THEN NPOS=1 ELSE NPOS=NPOS+I-1 IF(NPOS>=LEN_TRIM(STR))NPOS=1 ENDIF END SUBROUTINE SCANVALUE ! ------- -------- ----------- INTEGER FUNCTION READINTEGER(UNITC,C,IERR) ! read arbitrary positive integer from unit 2 without advancing ! input, to work around advance='no' restriction for list-directed ! input. ! on output: C contains the last-read character ! ierr:-1: no problems and number read ! 0: no number read ! 3: error reading ! 4: eof INTEGER, INTENT(IN) :: UNITC CHARACTER(1), INTENT(OUT) :: C INTEGER, INTENT(OUT) :: IERR INTEGER N READINTEGER = 0 N = 0 IERR = 0 DO READ(UNITC,'(A1)',ERR=3,END=4,EOR=5,ADVANCE='NO')C IF(IERR==0.AND.(IACHAR(C)==9.OR.C==' '))CYCLE IF(LLT(C, '0').OR.LGT(C, '9'))EXIT IERR = -1 N = N*10 + IACHAR(C) - IACHAR('0') ENDDO READINTEGER = N RETURN 3 IERR = 3 RETURN 4 IERR = 4 5 RETURN END FUNCTION READINTEGER ! ---------- -------- SUBROUTINE READOLDC(UNITC,N,EOF,LINE,IERR) ! Reads the continuation constants in the old format USE AUTO_CONSTANTS INTEGER I INTEGER NUZR,NICP INTEGER LISTLEN,ios CHARACTER(1) C INTEGER, INTENT(IN) :: UNITC, N LOGICAL, INTENT(INOUT) :: EOF INTEGER, INTENT(INOUT) :: LINE INTEGER, INTENT(OUT) :: IERR NDIM=N READ(UNITC,*,ERR=3,END=4) IPS,SIRS,ILP READ(SIRS,*,IOSTAT=ios)IRS IF(ios/=0)IRS=1 LINE=LINE+1 LISTLEN=READINTEGER(UNITC,C,IERR) IF(IERR==0.OR.IERR==3)GOTO 3 IF(IERR==4)GOTO 4 DEALLOCATE(ICU) NICP=LISTLEN IF(LISTLEN==0)NICP=1 ALLOCATE(ICU(NICP)) ICU(1)='1' READ(UNITC,*,ERR=3,END=4) (ICU(I),I=1,LISTLEN) LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) NMX,RL0,RL1,A0,A1 LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) EPSL,EPSU,EPSS LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) DS,DSMIN,DSMAX,IADS LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) LISTLEN !allocate: no THL vs. non-allocated:default THL (in SUB. INIT1) IF(ALLOCATED(IVTHL))DEALLOCATE(IVTHL) ALLOCATE(IVTHL(LISTLEN)) IF(LISTLEN>0)THEN DO I=1,LISTLEN LINE=LINE+1 READ(UNITC,*,ERR=3,END=4)IVTHL(I) ENDDO ENDIF LINE=LINE+1 READ(UNITC,*,ERR=3,END=4) LISTLEN IF(LISTLEN>0)THEN DEALLOCATE(IVTHU) ALLOCATE(IVTHU(LISTLEN)) DO I=1,LISTLEN LINE=LINE+1 READ(UNITC,*,ERR=3,END=4)IVTHU(I) ENDDO ENDIF LINE=LINE+1 READ(UNITC,*,ERR=3,END=4)NUZR IF(NUZR>0)THEN DO I=1,SIZE(IVUZR) DEALLOCATE(IVUZR(I)%VAR) ENDDO DEALLOCATE(IVUZR) ALLOCATE(IVUZR(NUZR)) DO I=1,NUZR LINE=LINE+1 ALLOCATE(IVUZR(I)%VAR(1)) READ(UNITC,*,ERR=3,END=4)IVUZR(I)%INDEX,IVUZR(I)%VAR(1) ENDDO ENDIF IERR=-1 RETURN 3 IERR=3 RETURN 4 WRITE(6,"(A,I2,A)") & " Error in fort.2 or c. file: ends prematurely on line ", LINE,"." EOF=.TRUE. END SUBROUTINE READOLDC ! ---------- ---- SUBROUTINE STHD(AP,ICP) USE COMPAT USE SUPPORT, ONLY: LBTYPE USE AUTO_CONSTANTS, ONLY : IVTHL, IVTHU, IVUZR, IVUZSTOP, unames, parnames,& NDIM, IRS, ILP, ISP, ISW, NBC, NINT, NMX, DS, DSMIN, DSMAX, ICU,& EFILE, SVFILE, SFILE, DATFILE, HCONST, NPAR, UVALS, PARVALS, SP, & STOPS, IBR, LAB, TY ! Write the values of the user defined parameters on unit 7. ! This identifying information is preceded by a ' 0' on each line. ! The first line in the file contains the (generally) user-supplied ! limits of the bifurcation diagram, viz. RL0,RL1,A0 and A1. ! These are often convenient for an initial plot of the diagram. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) CHARACTER (LEN=*), PARAMETER :: D3 = "(' 0',3(A8,ES11.4))" CHARACTER (LEN=*), PARAMETER :: I4 = "(' 0',4(A8,I4))" CHARACTER (LEN=*), PARAMETER :: I5 = "(' 0',2(A7,I5),3(A8,I4))" CHARACTER (LEN=*), PARAMETER :: I6 = "(' 0',5(A8,I4))" INTEGER NDIMA,IPS,IRSA,ILPA,NTST,NCOL,IAD,IADS,ISPA,ISWA,IPLT,NBCA,NINTA INTEGER NMXA,NUZR,NPR,MXBF,IIS,IID,ITMX,ITNW,NWTN,JAC,NFPR,I,NPARA INTEGER ITPST,LSV,LDAT,LE,LS,INDX,io DOUBLE PRECISION DSA,DSMINA,DSMAXA,RL0,RL1,A0,A1,EPSL,EPSU,EPSS CHARACTER(LEN=11) :: SDS, SDSA, SDSMAX, SDSMAXA, SDSMIN, SDSMINA CHARACTER(LEN=12) :: INDSTR CHARACTER(LEN=13) :: name INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV NDIMA=AP%NDIM IPS=AP%IPS IRSA=AP%IRS ILPA=AP%ILP NTST=AP%NTST NCOL=AP%NCOL IAD=AP%IAD IADS=AP%IADS ISPA=AP%ISP ISWA=AP%ISW IPLT=AP%IPLT NBCA=AP%NBC NINTA=AP%NINT NMXA=AP%NMX NUZR=AP%NUZR NPR=AP%NPR MXBF=AP%MXBF IIS=AP%IIS IID=AP%IID ITMX=AP%ITMX ITNW=AP%ITNW NWTN=AP%NWTN JAC=AP%JAC ITPST=AP%ITPST NFPR=AP%NFPR NPARA=AP%NPAR DSA=AP%DS DSMINA=AP%DSMIN DSMAXA=AP%DSMAX RL0=AP%RL0 RL1=AP%RL1 A0=AP%A0 A1=AP%A1 EPSL=AP%EPSL EPSU=AP%EPSU EPSS=AP%EPSS WRITE(7,"(I4,' ',4ES12.4)")0,RL0,RL1,A0,A1 WRITE(7,D3)'EPSL=',EPSL,'EPSU =',EPSU, 'EPSS =',EPSS WRITE(7,D3)'DS =',DSA, 'DSMIN=',DSMINA,'DSMAX=',DSMAXA WRITE(7,I4)'NDIM=',NDIMA,'IPS =',IPS, 'IRS =',IRSA, 'ILP =',ILPA WRITE(7,I4)'NTST=',NTST,'NCOL=',NCOL,'IAD =',IAD, 'ISP =',ISPA WRITE(7,I4)'ISW =',ISWA, 'IPLT=',IPLT,'NBC =',NBCA, 'NINT=',NINTA WRITE(7,I5)' NMX=',NMXA, 'NPR=', NPR, 'MXBF=',MXBF,'IID =',IID, 'IADS=',IADS WRITE(7,I6)'ITMX=',ITMX,'ITNW=',ITNW,'NWTN=',NWTN,'JAC =',JAC,' NUZR=',NUZR IF(IBR>0.OR.LAB>0.OR.LEN_TRIM(TY)>0.OR.IIS<3)THEN WRITE(7,"(' 0')",ADVANCE="NO") IF(IIS<3)THEN WRITE(7,"(A8,I4)",ADVANCE="NO")"IIS =",IIS ENDIF IF(IBR>0)THEN WRITE(7,"(A8,I4)",ADVANCE="NO")"IBR =",IBR ENDIF IF(LAB>0)THEN WRITE(7,"(A8,I4)",ADVANCE="NO")"LAB =",LAB ENDIF IF(LEN_TRIM(TY)>0)THEN WRITE(7,"(A9,A,A)",ADVANCE="NO")"TY = '",TRIM(TY),"'" ENDIF WRITE(7,*) ENDIF WRITE(7,"(A,I4,A)",ADVANCE="NO")" 0 NPAR=",NPARA CALL WRITELIST(" THL = ",IVTHL) CALL WRITELIST(" THU = ",IVTHU) WRITE(7,*) IF(SIZE(IVUZR)>0)THEN CALL WRITEUZRLIST(" 0 UZR = ",IVUZR) WRITE(7,*) ENDIF IF(SIZE(IVUZSTOP)>0)THEN CALL WRITEUZRLIST(" 0 UZSTOP = ",IVUZSTOP) WRITE(7,*) ENDIF IF(IPS==9)THEN !homcont constants WRITE(7,"(' 0 ',2(A,I4),2(A8,I2),(A8,I4))") & 'NUNSTAB=',NUNSTAB,' NSTAB=',NSTAB,& 'IEQUIB=',HCONST%IEQUIB,'ITWIST=',HCONST%ITWIST,& 'ISTART=',ISTART IF(SIZE(HCONST%IREV)>0.OR.SIZE(HCONST%IFIXED)>0.OR.& SIZE(HCONST%IPSI)>0)THEN WRITE(7,"(' 0 ')",ADVANCE='NO') CALL WRITEINTLIST(" IREV=",HCONST%IREV) CALL WRITEINTLIST(" IFIXED=",HCONST%IFIXED) CALL WRITEINTLIST(" IPSI=",HCONST%IPSI) WRITE(7,*) ENDIF ENDIF LE=LEN_TRIM(EFILE) LSV=LEN_TRIM(SVFILE) LS=LEN_TRIM(SFILE) LDAT=LEN_TRIM(DATFILE) IF(LE>0.OR.LSV>0.OR.LS>0.OR.LDAT>0)THEN WRITE(7,"(' 0 ')",ADVANCE="NO") IF(LE>0)THEN WRITE(7,"(A,A,A)",ADVANCE="NO")" e = '",TRIM(EFILE),"'" ENDIF IF(LS>0)THEN WRITE(7,"(A,A,A)",ADVANCE="NO")" s = '",TRIM(SFILE),"'" ENDIF IF(LDAT>0)THEN WRITE(7,"(A,A,A)",ADVANCE="NO")" dat = '",TRIM(DATFILE),"'" ENDIF IF(LSV>0)THEN WRITE(7,"(A,A,A)",ADVANCE="NO")" sv = '",TRIM(SVFILE),"'" ENDIF WRITE(7,*) ENDIF IF(SIZE(parnames)>0)THEN CALL WRITESTRLIST(" 0 parnames = ",parnames) WRITE(7,*) ENDIF IF(SIZE(unames)>0)THEN CALL WRITESTRLIST(" 0 unames = ",unames) WRITE(7,*) ENDIF IF(SIZE(PARVALS)>0)THEN CALL WRITELIST(" 0 PAR = ",PARVALS) WRITE(7,*) ENDIF IF(SIZE(UVALS)>0)THEN CALL WRITELIST(" 0 U = ",UVALS) WRITE(7,*) ENDIF IF(SIZE(SP)>0)THEN WRITE(7,"(A,A,A)", ADVANCE="NO")" 0 SP=['",TRIM(SP(1)),"'" DO I=2,SIZE(SP) WRITE(7,"(A,A,A)", ADVANCE="NO")", '",TRIM(SP(I)),"'" ENDDO WRITE(7,"(A)")']' ENDIF IF(SIZE(STOPS)>0)THEN WRITE(7,"(A,A,A)", ADVANCE="NO")" 0 STOP=['",TRIM(STOPS(1)),"'" DO I=2,SIZE(STOPS) WRITE(7,"(A,A,A)", ADVANCE="NO")", '",TRIM(STOPS(I)),"'" ENDDO WRITE(7,"(A)")']' ENDIF WRITE(SDS, "(ES11.4)")DS WRITE(SDSA, "(ES11.4)")DSA WRITE(SDSMIN, "(ES11.4)")DSMIN WRITE(SDSMINA,"(ES11.4)")DSMINA WRITE(SDSMAX, "(ES11.4)")DSMAX WRITE(SDSMAXA,"(ES11.4)")DSMAXA IF(SDS/=SDSA.OR.SDSMIN/=SDSMINA.OR.SDSMAX/=SDSMAXA.OR. & NDIM/=NDIMA.OR.IRS/=IRSA.OR.ILP/=ILPA.OR.NPAR/=NPARA.OR. & NMX/=NMXA.OR.ISP/=ISPA.OR.ISW/=ISWA.OR.NBC/=NBCA.OR.NINT/=NINTA)THEN WRITE(7,"(' 0 User-specified constants, where different from above:')") IF(SDS/=SDSA.OR.SDSMIN/=SDSMINA.OR.SDSMAX/=SDSMAXA)THEN WRITE(7,"(' 0')", ADVANCE="NO") IF(SDS/=SDSA)THEN WRITE(7, "(A8,A)", ADVANCE="NO")'DS =',SDS ENDIF IF(SDSMIN/=SDSMINA)THEN WRITE(7, "(A8,A)", ADVANCE="NO")'DSMIN=',SDSMIN ENDIF IF(SDSMAX/=SDSMAXA)THEN WRITE(7, "(A8,A)", ADVANCE="NO")'DSMAX=',SDSMAX ENDIF WRITE(7,*) ENDIF IF(NDIM/=NDIMA.OR.IRS/=IRSA.OR.ILP/=ILPA.OR.NPAR/=NPARA)THEN WRITE(7,"(' 0')", ADVANCE="NO") IF(NDIM/=NDIMA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'NDIM=',NDIM ENDIF IF(IRS/=IRSA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'IRS =',IRS ENDIF IF(ILP/=ILPA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'ILP =',ILP ENDIF IF(NPAR/=NPARA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'NPAR=',NPAR ENDIF WRITE(7,*) ENDIF IF(NMX/=NMXA.OR.ISP/=ISPA.OR.ISW/=ISWA.OR.NBC/=NBCA.OR.NINT/=NINTA)THEN WRITE(7,"(' 0')", ADVANCE="NO") IF(NMX/=NMXA)THEN WRITE(7, "(A7,I5)", ADVANCE="NO")'NMX=',NMX ENDIF IF(ISP/=ISPA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'ISP =',ISP ENDIF IF(ISW/=ISWA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'ISW =',ISW ENDIF IF(NBC/=NBCA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'NBC =',NBC ENDIF IF(NINT/=NINTA)THEN WRITE(7, "(A8,I4)", ADVANCE="NO")'NINT=',NINT ENDIF WRITE(7,*) ENDIF ENDIF IF(IPS==9.AND.(NUNSTAB/=HCONST%NUNSTAB.OR.NSTAB/=HCONST%NSTAB.OR. & ISTART/=HCONST%ISTART))THEN !homcont constants WRITE(7,"(' 0 ')", ADVANCE="NO") IF(NUNSTAB/=HCONST%NUNSTAB)THEN WRITE(7,"(A,I4)", ADVANCE="NO")'NUNSTAB=',HCONST%NUNSTAB ENDIF IF(NSTAB/=HCONST%NSTAB)THEN WRITE(7,"(A,I4)", ADVANCE="NO")' NSTAB=',HCONST%NSTAB ENDIF IF(ISTART/=HCONST%ISTART)THEN WRITE(7,"(A8,I4)", ADVANCE="NO")'ISTART=',HCONST%ISTART ENDIF WRITE(7,*) ENDIF WRITE(7,"(' 0 User-specified parameter')",ADVANCE="NO") IF(SIZE(ICU).EQ.1)THEN WRITE(7,"(': ')",ADVANCE="NO") ELSE WRITE(7,"('s: ')",ADVANCE="NO") ENDIF DO I=1,SIZE(ICU) READ(ICU(I),*,IOSTAT=io)INDX IF(io==0)THEN WRITE(7,"(3X,A)",ADVANCE="NO")TRIM(ICU(I)) ELSE WRITE(7,"(A,A,A)",ADVANCE="NO")" '",TRIM(ICU(I)),"'" ENDIF ENDDO WRITE(7,"(/' 0 Active continuation parameter')",ADVANCE="NO") IF(NFPR.EQ.1)THEN WRITE(7,"(': ')",ADVANCE="NO") ELSE WRITE(7,"('s: ')",ADVANCE="NO") ENDIF DO I=1,NFPR name = getname(parnames, ICP(I)) IF (LEN_TRIM(name)>0) THEN WRITE(7,"(A,A,A)",ADVANCE="NO")" '",TRIM(name),"'" ELSE WRITE(INDSTR,"(I12)")ICP(I) WRITE(7,"(3X,A)",ADVANCE="NO")TRIM(ADJUSTL(INDSTR)) ENDIF ENDDO WRITE(7,*) IF(ITPST /= 0)THEN WRITE(7,"(' 0 Branch type: ',I2,A,A,A)")& ITPST," TY = '",LBTYPE(ITPST),"'" ENDIF CALL AUTOFLUSH(7) CONTAINS SUBROUTINE WRITELIST(NAME,IVLIST) USE AUTO_CONSTANTS, ONLY: INDEXVAR CHARACTER(LEN=*), INTENT(IN) :: NAME TYPE(INDEXVAR), INTENT(IN) :: IVLIST(:) LOGICAL FIRST CHARACTER(LEN=15) :: INDSTR INTEGER INDX,io CHARACTER(LEN=19) :: VARSTR WRITE(7,"(A,A)", ADVANCE="NO")NAME,'{' FIRST=.TRUE. DO I=1,SIZE(IVLIST) IF(.NOT.FIRST)WRITE(7,"(A)", ADVANCE="NO")", " READ(IVLIST(I)%INDEX,*,IOSTAT=io)INDX IF(io==0)THEN INDSTR=IVLIST(I)%INDEX ELSE INDSTR="'"//TRIM(IVLIST(I)%INDEX)//"'" ENDIF IF(INT(IVLIST(I)%VAR)==IVLIST(I)%VAR)THEN WRITE(VARSTR,'(I19)')INT(IVLIST(I)%VAR) ELSE WRITE(VARSTR,'(ES19.10E3)')IVLIST(I)%VAR ENDIF WRITE(7,"(A,A,A)", ADVANCE="NO")TRIM(INDSTR),& ": ",TRIM(ADJUSTL(VARSTR)) FIRST=.FALSE. ENDDO WRITE(7,"(A)", ADVANCE="NO")'}' END SUBROUTINE WRITELIST SUBROUTINE WRITEUZRLIST(NAME,IVLIST) USE AUTO_CONSTANTS, ONLY: INDEXMVAR CHARACTER(LEN=*), INTENT(IN) :: NAME TYPE(INDEXMVAR), INTENT(IN) :: IVLIST(:) LOGICAL FIRST CHARACTER(LEN=15) :: INDSTR INTEGER INDX,I,J,io CHARACTER(LEN=19) :: VARSTR DOUBLE PRECISION V WRITE(7,"(A,A)", ADVANCE="NO")NAME,'{' FIRST=.TRUE. DO I=1,SIZE(IVLIST) IF(.NOT.FIRST)WRITE(7,"(A)", ADVANCE="NO")", " READ(IVLIST(I)%INDEX,*,IOSTAT=io)INDX IF(io==0)THEN INDSTR=IVLIST(I)%INDEX ELSE INDSTR="'"//TRIM(IVLIST(I)%INDEX)//"'" ENDIF WRITE(7,"(A,A)", ADVANCE="NO")TRIM(INDSTR),": " IF(SIZE(IVLIST(I)%VAR)>1)WRITE(7,"(A)", ADVANCE="NO")'[' DO J=1,SIZE(IVLIST(I)%VAR) IF(J>1)WRITE(7,"(A)", ADVANCE="NO")", " V=IVLIST(I)%VAR(J) IF(INT(V)==V)THEN WRITE(VARSTR,'(I19)')INT(V) ELSE WRITE(VARSTR,'(ES19.10E3)')V ENDIF WRITE(7,"(A)", ADVANCE="NO")TRIM(ADJUSTL(VARSTR)) ENDDO IF(SIZE(IVLIST(I)%VAR)>1)WRITE(7,"(A)", ADVANCE="NO")']' FIRST=.FALSE. ENDDO WRITE(7,"(A)", ADVANCE="NO")'}' END SUBROUTINE WRITEUZRLIST SUBROUTINE WRITESTRLIST(NAME,ISLIST) USE AUTO_CONSTANTS, ONLY: INDEXSTR CHARACTER(LEN=*), INTENT(IN) :: NAME TYPE(INDEXSTR), INTENT(IN) :: ISLIST(:) LOGICAL FIRST CHARACTER(LEN=15) :: INDSTR WRITE(7,"(A,A)", ADVANCE="NO")NAME,'{' FIRST=.TRUE. DO I=1,SIZE(ISLIST) IF(.NOT.FIRST)WRITE(7,"(A)", ADVANCE="NO")", " WRITE(INDSTR,'(I15)')ISLIST(I)%INDEX WRITE(7,"(A,A,A,A)", ADVANCE="NO")TRIM(ADJUSTL(INDSTR)), & ": '",TRIM(ISLIST(I)%STR),"'" FIRST=.FALSE. ENDDO WRITE(7,"(A)", ADVANCE="NO")'}' END SUBROUTINE WRITESTRLIST SUBROUTINE WRITEINTLIST(NAME,ILIST) USE AUTO_CONSTANTS, ONLY: INDEXVAR CHARACTER(LEN=*), INTENT(IN) :: NAME INTEGER, INTENT(IN) :: ILIST(:) LOGICAL FIRST CHARACTER(LEN=12) :: INDSTR IF (SIZE(ILIST) == 0) RETURN WRITE(7,"(A,A)", ADVANCE="NO")NAME,'[' FIRST=.TRUE. DO I=1,SIZE(ILIST) IF(.NOT.FIRST)WRITE(7,"(A)", ADVANCE="NO")", " WRITE(INDSTR,'(I12)')ILIST(I) WRITE(7,"(A)", ADVANCE="NO")TRIM(ADJUSTL(INDSTR)) FIRST=.FALSE. ENDDO WRITE(7,"(A)", ADVANCE="NO")']' END SUBROUTINE WRITEINTLIST END SUBROUTINE STHD ! ---------- ------ SUBROUTINE HEADNG(AP,ICP,IUNIT,N1,N2) USE COMPAT USE AUTO_CONSTANTS, ONLY : unames, parnames ! Prints headings above columns on unit 6, 7, and 9. ! N1 = number of parameters to print (maximum: 7 for screen output) ! N2 = number of (max) variables to print (maximum: max(0,7-N1,7)) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),IUNIT,N1,N2 ! Local INTEGER I,J,IPS,IPLT,NDM CHARACTER(LEN=13) name IPS=AP%IPS IPLT=AP%IPLT NDM=AP%NDM IF(IUNIT.EQ.7)THEN WRITE(7,"(I4/I4,A)",ADVANCE="NO")0,0,' PT TY LAB ' ELSE WRITE(IUNIT,"(/A)",ADVANCE="NO")' BR PT TY LAB ' ENDIF DO J=1,N1+N2+1 IF(J==1.OR.J>N2+2)THEN I=1 IF(J>1)I=J-N2-1 name = getname(parnames, ICP(I)) IF(LEN_TRIM(name)>0)THEN CALL WRITECOL(-1,name) ELSEIF(ICP(I)==11.AND.IPS>0.AND.IPS/=4.AND.IPS/=7)THEN CALL WRITECOL(5,'PERIOD') ELSEIF(ICP(I)==10.AND.(IPS==5.OR.IPS==15))THEN CALL WRITECOL(6,'FOPT') ELSEIF(ICP(I)==14.AND.(IPS==14.OR.IPS==16))THEN CALL WRITECOL(6,'TIME') ELSE CALL WRITECOL(4,'PAR',ICP(I)) ENDIF ELSEIF(J==2.AND.(IPLT==0.OR.IPLT<-NDM.OR.IPLT>3*NDM))THEN CALL WRITECOL(4,'L2-NORM') ELSEIF(J==2)THEN name = getname(unames, MOD(ABS(IPLT)-1,NDM)+1) IF(LEN_TRIM(name)>0)THEN IF(IPLT>NDM.AND.IPLT<=2*NDM) THEN CALL WRITECOL(-1, 'INTEGRAL ' // name) ELSE IF(IPLT>2*NDM.AND.IPLT<=3*NDM) THEN CALL WRITECOL(-1, 'L2-NORM '// name) ELSE IF(ABS(IPLT)<=NDM) THEN IF(IPS<=1.OR.IPS==5.OR.IPS==11)THEN CALL WRITECOL(2, name) ELSE IF(IPLT>0)THEN CALL WRITECOL(-1, 'MAX ' // name) ELSE CALL WRITECOL(-1, 'MIN ' // name) ENDIF ENDIF ELSE IF(IPLT>NDM.AND.IPLT<=2*NDM) THEN CALL WRITECOL(2,'INTEGRAL U',IPLT-NDM) ELSE IF(IPLT>2*NDM.AND.IPLT<=3*NDM) THEN CALL WRITECOL(2,'L2-NORM U',IPLT-2*NDM) ELSE IF(IPLT/=0.AND.ABS(IPLT)<=NDM) THEN IF(IPS<=1.OR.IPS==5.OR.IPS==11)THEN CALL WRITECOL(6,'U',ABS(IPLT)) ELSE IF(IPLT>0)THEN CALL WRITECOL(4,'MAX U',IPLT) ELSE CALL WRITECOL(4,'MIN U',-IPLT) ENDIF ENDIF ENDIF ELSE !J>2 with N2>0 name = getname(unames, J-2) IF(LEN_TRIM(name)>0)THEN IF(IPS<=1.OR.IPS==5.OR.IPS==11)THEN CALL WRITECOL(-1,name) ELSE CALL WRITECOL(-1,'MAX '//name) ENDIF ELSEIF(IPS<=1.OR.IPS==5.OR.IPS==11)THEN CALL WRITECOL(6,'U',J-2) ELSE CALL WRITECOL(4,'MAX U',J-2) ENDIF ENDIF ENDDO WRITE(IUNIT,"()") CALL AUTOFLUSH(IUNIT) CONTAINS SUBROUTINE WRITECOL(II,S,N) INTEGER, INTENT(IN) :: II CHARACTER(*), INTENT(IN) :: S INTEGER, INTENT(IN), OPTIONAL :: N ! Local CHARACTER(10) SN CHARACTER(19) COL INTEGER I COL=' ' I=II IF(I==-1)THEN ! centre into the column I=MAX(7-(LEN_TRIM(S)-1)/2,2) ENDIF IF(PRESENT(N))THEN WRITE(SN,"(I10)")N WRITE(COL(I:),"(A,A,A,A)") S,'(',TRIM(ADJUSTL(SN)),')' ELSE WRITE(COL(I:),"(A)") TRIM(S) ENDIF IF(IUNIT.EQ.7)THEN WRITE(IUNIT,"(A19)",ADVANCE="NO")COL ELSE WRITE(IUNIT,"(A14)",ADVANCE="NO")COL ENDIF END SUBROUTINE WRITECOL END SUBROUTINE HEADNG ! ---------- ------ SUBROUTINE WRLINE(AP,PAR,ICU,IBR,NTOT,LAB,VAXIS,U) USE COMPAT USE SUPPORT, ONLY: LBTYPE ! Write one line of output on unit 6 and 7. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICU(*),IBR,NTOT,LAB DOUBLE PRECISION, INTENT(IN) :: PAR(*),U(*),VAXIS ! Local CHARACTER(3) ATYPE CHARACTER(33) :: F69 ! (I4,I6,2X,A2,I5,**********ES14.5) CHARACTER(33) :: F7 ! (I4,I6,I4,I5,**********ES19.10E3) INTEGER MTOT,NDM,ITP,NICP,N1,N2,I NDM=AP%NDM ITP=AP%ITP NICP=AP%NICP N1=NICP N2=NDM IF(N1.GT.7)THEN N1=7 N2=0 ELSEIF(N1+N2.GT.7)THEN N2=7-N1 ENDIF ! Write a heading above the first line. IF(ABS(NTOT).EQ.1)CALL HEADNG(AP,ICU,6,N1,N2) IF(ABS(NTOT).EQ.1)CALL HEADNG(AP,ICU,7,NICP,N2) IF(AP%IID>0)CALL HEADNG(AP,ICU,9,N1,N2) ATYPE=ADJUSTR(LBTYPE(ITP)) IF(NTOT>0)THEN MTOT=MOD(NTOT-1,9999)+1 ELSE MTOT=-MOD(-NTOT-1,9999)-1 ENDIF WRITE(F69,"(A,I10,A)") '(I4,I6,1X,A3,I5,',N1+N2+1,'ES14.5)' WRITE(F7,"(A,I10,A)") '(I4,I6,I4,I5,',NICP+N2+1,'ES19.10E3)' IF(MOD(ITP,10).NE.0)THEN WRITE(6,F69)ABS(IBR),ABS(MTOT),ATYPE,LAB,PAR(ICU(1)),VAXIS, & (U(I),I=1,N2),(PAR(ICU(I)),I=2,N1) CALL AUTOFLUSH(6) ENDIF WRITE(7,F7)IBR,MTOT,ITP,LAB,PAR(ICU(1)),VAXIS, & (U(I),I=1,N2),(PAR(ICU(I)),I=2,NICP) CALL AUTOFLUSH(7) IF(AP%IID>0)WRITE(9,F69)IBR,MTOT,ATYPE,LAB,PAR(ICU(1)),VAXIS, & (U(I),I=1,N2),(PAR(ICU(I)),I=2,N1) END SUBROUTINE WRLINE ! ---------- ----- SUBROUTINE WRBAR(C,N) CHARACTER(1), INTENT(IN) :: C INTEGER, INTENT(IN) :: N INTEGER I WRITE(9,101)(C,I=1,N) 101 FORMAT(80A1) END SUBROUTINE WRBAR ! ---------- ------ SUBROUTINE NEWLAB(AP) ! Determine a suitable label when restarting. USE AUTO_CONSTANTS, ONLY: IBR TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER IPS,IRS,ISW,ITP IPS=AP%IPS IRS=AP%IRS ISW=AP%ISW ITP=AP%ITP IF(AP%LAB.EQ.0)AP%LAB=MLAB+1 IF(IBR.NE.0)RETURN IF(ISW.LT.0.OR.IRS.EQ.0)THEN AP%IBR=MBR+1 ELSEIF( (ABS(ITP).LT.10.AND.ABS(ISW).EQ.2) & .OR. ((IPS.EQ.2.OR.IPS.EQ.12).AND.ITP.EQ.3) & .OR. (IPS.EQ.4.AND.ISW.EQ.2.AND.ABS(ITP).LT.10) & .OR. (IPS.EQ.5.AND.MOD(ITP,10).EQ.2) )THEN AP%IBR=IRS ENDIF END SUBROUTINE NEWLAB ! ------- -------- -------- INTEGER FUNCTION GETNDIM3() GETNDIM3 = CURSOL%NAR-1 END FUNCTION GETNDIM3 ! ------- -------- -------- INTEGER FUNCTION GETNTST3() GETNTST3 = CURSOL%NTST END FUNCTION GETNTST3 ! ------- -------- -------- INTEGER FUNCTION GETNCOL3() GETNCOL3 = CURSOL%NCOL END FUNCTION GETNCOL3 ! ------- -------- -------- INTEGER FUNCTION GETNFPR3() GETNFPR3 = CURSOL%NFPR END FUNCTION GETNFPR3 ! ------- -------- -------- INTEGER FUNCTION GETIPS3() GETIPS3 = CURSOL%IPS END FUNCTION GETIPS3 ! ---------- ------ SUBROUTINE FINDLB(AP,UNITC,IRS,NFPR,NPAR,FOUND) USE AUTO_CONSTANTS, ONLY: SIRS, SFILE USE SUPPORT, ONLY: LBTYPE, AUTOSTOP TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: UNITC INTEGER, INTENT(INOUT) :: IRS INTEGER, INTENT(OUT) :: NFPR,NPAR LOGICAL, INTENT(OUT) :: FOUND LOGICAL EOF3 INTEGER IBR,NTOT,ITP,LAB,NFPRR,ISWR,NTPL,NAR,NROWPR,NTST,NCOL,NPARR INTEGER NPARI,NDM,IPS,IPRIV INTEGER ISW,ITPST,I,J,ios,number,UNIT CHARACTER(3) :: ATYPE CHARACTER(100) :: HEADER ! Locates restart point with label IRS and determines type. ! If the label can not be located on unit 3 then FOUND will be .FALSE. ! If IRS is negative, then just pick the abs(IRS)th solution. FOUND=.FALSE. NFPR=0 NPAR=0 ISW=AP%ISW UNIT=3 ios=0 IF(LEN_TRIM(SFILE)==0)THEN OPEN(UNIT,FILE='fort.3',STATUS='old',ACCESS='sequential',IOSTAT=ios) ELSEIF(TRIM(SFILE)=='/')THEN SFILE='' UNIT=UNITC ELSE OPEN(UNIT,FILE='s.'//SFILE,STATUS='old',ACCESS='sequential',IOSTAT=ios) ENDIF IF(ios/=0)THEN WRITE(6,'(A,A)')'The solution file (fort.3 or s. file) ',& 'could not be found.' CALL AUTOSTOP() ENDIF I=0 J=SCAN(SIRS,"-0123456789") number=0 IF(J>2)THEN ATYPE=SIRS(1:J-1) READ(SIRS(J:),'(I11)',IOSTAT=ios)number IF(ios/=0)THEN number=0 ENDIF ENDIF DO I=I+1 READ(UNIT,'(A)',END=2)HEADER IF(LEN_TRIM(HEADER) <= 73)THEN READ(HEADER,*)IBR,NTOT,ITP,LAB,NFPRR,ISWR,NTPL,NAR,NROWPR,NTST, & NCOL,NPARR NPARI=0 NDM=0 IPS=0 IPRIV=0 ELSE READ(HEADER,*)IBR,NTOT,ITP,LAB,NFPRR,ISWR,NTPL,NAR,NROWPR,NTST, & NCOL,NPARR,NPARI,NDM,IPS,IPRIV ENDIF IF(IBR>MBR)MBR=IBR IF(LAB>MLAB)MLAB=LAB IF(number>0.AND.ATYPE==LBTYPE(ITP))THEN number=number-1 IF(number==0)IRS=LAB ENDIF IF((LAB==IRS.OR.IRS==-I).AND..NOT.FOUND.AND.number==0)THEN IRS=LAB NFPR=NFPRR NPAR=NPARR FOUND=.TRUE. IF(AP%ITP==0)AP%ITP=ITP IF(AP%IBR==0)AP%IBR=IBR IF(ABS(ISW).GE.2)THEN IF(ABS(ITP).LT.10)THEN ITPST=ABS(ITP) ELSE ITPST=ABS(ITP/10) ENDIF ELSE ITPST=0 ENDIF AP%ITPST=ITPST CALL READSOL(UNIT,IBR,NTOT,ITP,LAB,NFPR,ISWR,NTPL,NAR,NROWPR,NTST,& NCOL,NPAR,NPARI,NDM,IPS,IPRIV) ! strip internal parameters from returned NPAR so they can ! be thrown away when possible NPAR=NPAR-NPARI ELSE CALL SKIPS(UNIT,NROWPR,EOF3) IF(EOF3)GOTO 2 ENDIF ENDDO 2 CONTINUE CLOSE(UNIT) END SUBROUTINE FINDLB ! ---------- ------- SUBROUTINE READSOL(UNIT,IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,& NPAR,NPARI,NDM,IPS,IPRIV) INTEGER, INTENT(IN) :: UNIT,IBR,NTOT,ITP,LAB,NFPR INTEGER, INTENT(IN) :: ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR INTEGER, INTENT(IN) :: NPARI,NDM,IPS,IPRIV ! Local INTEGER J, NTNC, NROWPRSMALL NULLIFY(ROOTSOL) NTNC=NTPL-1 CALL NEWSOL(IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR,& NPARI,NDM,IPS,IPRIV) DO J=0,NTNC READ(UNIT,*)CURSOL%TM(J),CURSOL%UPS(:,J) ENDDO NROWPRSMALL=((NAR-1)/7+1)*NTPL + (NPAR+6)/7 IF(NTST>0.AND.NROWPR>NROWPRSMALL)THEN READ(UNIT,*)CURSOL%ICP(:) READ(UNIT,*)CURSOL%RLDOT(:) ! Read U-dot (derivative with respect to arclength). READ(UNIT,*)CURSOL%UDOTPS(:,:) ENDIF ! Read the parameter values. READ(UNIT,*)CURSOL%PAR(:) END SUBROUTINE READSOL ! ---------- ------ SUBROUTINE NEWSOL(IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR,& NPARI,NDM,IPS,IPRIV) INTEGER, INTENT(IN) :: IBR,NTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,& NTST,NCOL,NPAR,NPARI,NDM,IPS,IPRIV TYPE(SOLUTION), POINTER :: SOL INTEGER NDIM,NTNC ALLOCATE(SOL) SOL%IBR = IBR SOL%NTOT = NTOT SOL%ITP = ITP SOL%LAB = LAB SOL%NFPR = NFPR SOL%ISW = ISW SOL%NTPL = NTPL SOL%NAR = NAR SOL%NROWPR = NROWPR SOL%NTST = NTST SOL%NCOL = NCOL SOL%NPAR = NPAR SOL%NPARI = NPARI SOL%NDM = NDM SOL%IPS = IPS SOL%IPRIV = IPRIV NDIM=NAR-1 NTNC=NTPL-1 ALLOCATE(SOL%UPS(NDIM,0:NTNC),SOL%TM(0:NTNC),SOL%PAR(NPAR)) IF(NTST>0)THEN ALLOCATE(SOL%UDOTPS(NDIM,0:NTNC),SOL%ICP(NFPR),SOL%RLDOT(NFPR)) ELSE NULLIFY(SOL%UDOTPS,SOL%ICP,SOL%RLDOT) ENDIF NULLIFY(SOL%NEXT) IF(ASSOCIATED(ROOTSOL))THEN CURSOL%NEXT => SOL ELSE ROOTSOL => SOL ENDIF CURSOL => SOL END SUBROUTINE NEWSOL ! ---------- ------ SUBROUTINE READLB(AP,ICPRS,U,UDOT,PAR) USE AUTO_CONSTANTS, ONLY: UVALS, PARVALS, unames, parnames USE SUPPORT, ONLY: NAMEIDX TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(OUT) :: ICPRS(*) DOUBLE PRECISION, INTENT(OUT) :: U(*),UDOT(*),PAR(*) DOUBLE PRECISION, ALLOCATABLE :: UX(:),P(:) INTEGER I,NFPR,NPARR,NPAR,NDIM,NDM,NDMRD NPAR=AP%NPAR NDM=AP%NDM IF(AP%IPS==11)NDM=NDM/2 ! Reads the restart data for algebraic problems. NFPR=CURSOL%NFPR NPARR=CURSOL%NPAR NDIM=MIN(CURSOL%NAR-1,AP%NDIM) U(1:NDIM)=CURSOL%UPS(1:NDIM,0) IF(CURSOL%NTST>0)THEN ICPRS(1:NFPR)=CURSOL%ICP(1:NFPR) UDOT(NDIM+1)=CURSOL%RLDOT(1) UDOT(NDIM-NFPR+2:NDIM)=CURSOL%RLDOT(2:NFPR) UDOT(1:NDIM)=CURSOL%UDOTPS(1:NDIM,0) ENDIF PAR(1:NPARR)=CURSOL%PAR(1:NPARR) ! override parameter/point values with values from constants file DO I=1,SIZE(UVALS) U(NAMEIDX(UVALS(I)%INDEX,unames))=UVALS(I)%VAR ENDDO DO I=1,SIZE(PARVALS) PAR(NAMEIDX(PARVALS(I)%INDEX,parnames))=PARVALS(I)%VAR ENDDO NDMRD=CURSOL%NDM IF(NDMRD==0)THEN ! old-style solution file: try to get NDM: this works for ! equilibria/maps/timeint problems (not parabolic/optimization) NDMRD=CURSOL%NAR-1 IF(ABS(CURSOL%ISW)==2)THEN IF(CURSOL%ITP/10==3)THEN NDMRD=NDMRD/3 ! HB (old method) ELSE NDMRD=(NDMRD-1)/2 ! PD/BP/LP/TR ENDIF ENDIF ENDIF IF(NDM>NDMRD)THEN ! system is extended; call STPNT for extension ALLOCATE(UX(NDM),P(NPAR)) P(:)=PAR(:NPAR) UX(1:NDMRD)=U(1:NDMRD) UX(NDMRD+1:NDM)=0.d0 CALL STPNT(NDM,UX,P,0d0) U(NDMRD+1:NDM)=UX(NDMRD+1:NDM) DEALLOCATE(UX,P) ENDIF END SUBROUTINE READLB ! ---------- ------ SUBROUTINE READBV(AP,PAR,ICPRS,NTSRS,NCOLRS,NDIMRD,RLDOTRS,UPS, & UDOTPS,TM,ITPRS,NDIM) USE AUTO_CONSTANTS, ONLY: PARVALS, parnames USE SUPPORT, ONLY: NAMEIDX INTEGER, INTENT(IN) :: NDIM TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(OUT) :: ICPRS(*),NTSRS,NCOLRS,NDIMRD,ITPRS DOUBLE PRECISION, INTENT(OUT) :: RLDOTRS(*),UPS(NDIM,0:*),UDOTPS(NDIM,0:*) DOUBLE PRECISION, INTENT(OUT) :: TM(0:*),PAR(*) ! Local INTEGER I,J,N,NFPR,NFPRS,NPARR,NPARIR,NPAR,NPARI,NDM,NDMRD DOUBLE PRECISION, ALLOCATABLE :: U(:),P(:) NPARI=AP%NPARI NFPR=AP%NFPR NPAR=AP%NPAR NDM=AP%NDM IF(AP%IPS==12)NDM=NDM/2 ITPRS=CURSOL%ITP NFPRS=CURSOL%NFPR NTSRS=CURSOL%NTST NCOLRS=CURSOL%NCOL NPARR=CURSOL%NPAR NPARIR=CURSOL%NPARI NDIMRD=MIN(NDIM,CURSOL%NAR-1) DO J=0,NTSRS*NCOLRS IF(MOD(J,NCOLRS)==0)THEN TM(J/NCOLRS)=CURSOL%TM(J) ENDIF UPS(1:NDIMRD,J)=CURSOL%UPS(1:NDIMRD,J) ENDDO ICPRS(1:MIN(NFPR,NFPRS))=CURSOL%ICP(1:MIN(NFPR,NFPRS)) RLDOTRS(1:MIN(NFPR,NFPRS))=CURSOL%RLDOT(1:MIN(NFPR,NFPRS)) ! Read U-dot (derivative with respect to arclength). DO J=0,NTSRS*NCOLRS UDOTPS(1:NDIMRD,J)=CURSOL%UDOTPS(1:NDIMRD,J) ENDDO ! Read the internal parameter values IF(NPARI>0)THEN IF(NPARIR>0)THEN N=MIN(NPARIR,NPARI) PAR(NPAR-NPARI+1:NPAR-NPARI+N)= & CURSOL%PAR(NPARR-NPARIR+1:NPARR-NPARIR+N) ELSEIF(CURSOL%NDM==0)THEN ! old style solution file, copy from PAR(12:) N=MIN(NPARR-11,NPARI) IF(N>0)THEN PAR(NPAR-NPARI+1:NPAR-NPARI+N)=CURSOL%PAR(12:11+N) ENDIF ENDIF ENDIF ! Read the other parameter values. PAR(1:NPARR-NPARIR)=CURSOL%PAR(1:NPARR-NPARIR) ! override parameter values with values from constants file DO I=1,SIZE(PARVALS) PAR(NAMEIDX(PARVALS(I)%INDEX,parnames))=PARVALS(I)%VAR ENDDO NDMRD=CURSOL%NDM IF(NDMRD==0)THEN ! old-style solution file: try to get NDM: this works for ! periodic/general BVP problems (not HomCont/parabolic/optimization) NDMRD=CURSOL%NAR-1 IF(ABS(CURSOL%ISW)==2)THEN IF(CURSOL%ITP/10==8)THEN NDMRD=NDMRD/3 ! TR ELSEIF(CURSOL%ITP/10==6.AND.CURSOL%ISW==-2)THEN NDMRD=NDMRD/4 ! BP start ELSE NDMRD=NDMRD/2 ! PD/BP/LP ENDIF ENDIF ENDIF IF(NDM>NDMRD)THEN ! system is extended; call STPNT for extension ALLOCATE(U(NDM),P(NPAR)) P(:)=PAR(:NPAR) U(NDMRD+1:NDM)=0.d0 DO J=0,NTSRS*NCOLRS U(1:NDMRD)=UPS(1:NDMRD,J) CALL STPNT(NDM,U,P,CURSOL%TM(J)) UPS(NDMRD+1:NDM,J)=U(NDMRD+1:NDM) ENDDO DEALLOCATE(U,P) ENDIF END SUBROUTINE READBV ! ---------- ----- SUBROUTINE SKIPS(UNIT,NSKIP,EOF3) ! Skips the specified number of lines on the solution file unit INTEGER, INTENT(IN) :: UNIT,NSKIP LOGICAL, INTENT(OUT) :: EOF3 CHARACTER(12) FMT INTEGER I EOF3=.TRUE. IF(NSKIP<=1)THEN DO I=1,NSKIP READ(UNIT,'(A)',END=2) ENDDO ELSE WRITE(FMT,'(A,I9,A)')'(',NSKIP-1,'/)' READ(UNIT,FMT,END=2) ENDIF EOF3=.FALSE. 2 RETURN END SUBROUTINE SKIPS END MODULE IO auto/07p/src/unix.f900000640000175000017500000000152013570013207012332 0ustar skskmodule compat implicit none public :: autoflush, autim, autargc, autgetarg contains ! This file calls Unix extensions (see f2003.f90 for the new Standard forms) subroutine autoflush(i) integer, intent(in) :: i call flush(i) end subroutine autoflush !----------------------------------------------------------------------- ! Timing AUTO !----------------------------------------------------------------------- ! ------ --------- -------- double precision function autim() real t(2),etime autim = etime(t) end function autim integer function autargc() integer iargc autargc = iargc() end function autargc subroutine autgetarg(number,value) integer, intent(in) :: number character(len=*), intent(out) :: value call getarg(number,value) end subroutine autgetarg end module compat auto/07p/src/main.f900000640000175000017500000002701713570013207012304 0ustar sksk! ------- ---- PROGRAM AUTO USE AUTOMPI USE IO USE SUPPORT, ONLY:AP=>AV, NAMEIDX, AUTOSTOP USE AUTO_CONSTANTS,ONLY: ICU,parnames,AUTOPARAMETERS !$ USE OMP_LIB USE COMPAT IMPLICIT NONE LOGICAL EOF,KEYS ! Local DOUBLE PRECISION TIME0,TIME1,TOTTIM INTEGER I,LINE,ios,UNITC INTEGER,ALLOCATABLE :: IICU(:) LOGICAL FIRST ! Initialization : CALL MPIINI() IF(MPIIAM()/=0)THEN CALL MPIWORKER(AP) ! never returns ENDIF FIRST=.TRUE. UNITC=2 OPEN(UNITC,FILE='fort.2',STATUS='old',ACCESS='sequential',IOSTAT=ios) IF(ios/=0)THEN UNITC=5 ENDIF KEYS=.FALSE. LINE=0 DO IF(MPIKWT()>1)THEN CALL MPITIM(TIME0) ELSE TIME0=AUTIM() !$ TIME0=omp_get_wtime() ENDIF CALL INIT(AP,UNITC,EOF,KEYS,LINE) IF(EOF)EXIT CALL FINDLB_OR_STOP(AP,UNITC) CALL MPIIAP(AP) ALLOCATE(IICU(SIZE(ICU))) DO I=1,SIZE(ICU) IICU(I)=NAMEIDX(ICU(I),parnames) ENDDO CALL AUTOI(AP,IICU) DEALLOCATE(IICU) !----------------------------------------------------------------------- IF(MPIKWT()>1)THEN CALL MPITIM(TIME1) ELSE TIME1=AUTIM() !$ TIME1=omp_get_wtime() ENDIF TOTTIM=TIME1-TIME0 IF(AP%IID>0)THEN CALL WRBAR("=",47) WRITE(9,301)TOTTIM ENDIF WRITE(6,301)TOTTIM CALL CLEANUP() IF(KEYS)EXIT ENDDO CALL AUTOSTOP() 301 FORMAT(/,' Total Time ',E12.3) CONTAINS ! ---------- --------- SUBROUTINE MPIWORKER(AP) USE AUTOMPI IMPLICIT NONE TYPE(AUTOPARAMETERS) AP INTEGER, ALLOCATABLE :: ICU(:) DO WHILE(.TRUE.) CALL MPIBCASTAP(AP) ALLOCATE(ICU(AP%NICP)) CALL AUTOI(AP,ICU) DEALLOCATE(ICU) ! autoi eventually calls autobv with the subroutines based on ! ap, which eventually calls solvbv; ! a return means another init message IF(MPIWFI())CYCLE ENDDO END SUBROUTINE MPIWORKER ! ---------- -------------- SUBROUTINE FINDLB_OR_STOP(AP,UNITC) ! Find restart label and determine type of restart point. ! or stop otherwise USE AUTO_CONSTANTS, ONLY: SIRS IMPLICIT NONE TYPE(AUTOPARAMETERS) AP INTEGER, INTENT(IN) :: UNITC INTEGER NFPR,NPARR,IRS LOGICAL FOUND IRS=AP%IRS FOUND=.FALSE. IF(IRS/=0) THEN CALL FINDLB(AP,UNITC,IRS,NFPR,NPARR,FOUND) AP%IRS=IRS AP%NFPR=NFPR IF(.NOT.FOUND) THEN WRITE(6,"(' Restart label ',A,' not found')")TRIM(SIRS) CALL AUTOSTOP() ENDIF AP%NPAR=MAX(NPARR,AP%NPAR) ENDIF END SUBROUTINE FINDLB_OR_STOP ! ---------- ----- SUBROUTINE AUTOI(AP,ICU) USE TOOLBOXAE USE TOOLBOXBV USE EQUILIBRIUM USE MAPS USE OPTIMIZATION USE PARABOLIC USE PERIODIC USE HOMCONT USE TIMEINT USE AUTO_CONSTANTS, ONLY: NBC,NINT,NDIM IMPLICIT NONE TYPE(AUTOPARAMETERS) AP INTEGER ICU(AP%NICP) INTEGER IPS,ISW,NNICP,NPAR INTEGER, ALLOCATABLE :: ICP(:) IPS=AP%IPS ISW=AP%ISW ! transfer ICU array on MPI so the AUTO** subroutines can do their ! work normally on the workers. CALL MPIBCASTI(ICU,AP%NICP) NNICP=MAX(5*(NBC+NINT-NDIM+1)+NDIM+NINT+3,5*SIZE(ICU)+NDIM+3) ALLOCATE(ICP(NNICP)) ICP(:SIZE(ICU))=ICU(:) ICP(SIZE(ICU)+1:)=0 NPAR=AP%NPAR NPAR=MAX(MAXVAL(ABS(ICU)),NPAR) AP%NPAR=NPAR CALL INIT1(AP) SELECT CASE(IPS) CASE(0) ! general algebraic equations (no Hopf, eigenvalues, stability) CALL AUTOAEP(AP,ICP,ICU) CASE(1) ! equilibria CALL AUTOEQ(AP,ICP,ICU) CASE(-1) ! fixed points in maps CALL AUTODS(AP,ICP,ICU) CASE(2,4,7) ! periodic solutions and general BVPs IF(IPS==2.OR.(IPS==7.AND.ABS(ISW)<=1))THEN CALL AUTOPS(AP,ICP,ICU) ELSE CALL AUTOBVP(AP,ICP,ICU) ENDIF CASE(-2) ! time integration CALL AUTOTI(AP,ICP,ICU) CASE(11,12,14,16,17) ! parabolic PDEs CALL AUTOPE(AP,ICP,ICU) CASE(5,15) ! optimization CALL AUTOOP(AP,ICP,ICU) CASE(9) ! Homoclinic bifurcation analysis. CALL AUTOHO(AP,ICP,ICU) END SELECT IF(AP%NTOT==0.AND.MPIIAM()==0)THEN ! ** Error in INIT. WRITE(6,500) CALL AUTOSTOP() ENDIF ! Error Message. 500 FORMAT(' Initialization Error') DEALLOCATE(ICP) END SUBROUTINE AUTOI !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Initialization !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE INIT(AP,UNITC,EOF,KEYS,LINE) USE AUTO_CONSTANTS USE HOMCONT, ONLY : INSTRHO IMPLICIT NONE TYPE(AUTOPARAMETERS), INTENT(OUT) :: AP INTEGER, INTENT(IN) :: UNITC LOGICAL, INTENT(OUT) :: EOF LOGICAL, INTENT(INOUT) :: KEYS INTEGER, INTENT(INOUT) :: LINE INTEGER NPOS, IERR, KEYEND, POS, LISTLEN CHARACTER(LEN=2048) :: STR ! set default values NDIM = 2 IPS = 1 ILP = 1 NTST = 20 NCOL = 4 IAD = 3 IADS = 1 ISP = 2 ISW = 1 IPLT = 0 NBC = 0 NINT = 0 NMX = 0 NPR = 0 MXBF = 10 IIS = 3 IID = 2 ITMX = 9 ITNW = 5 NWTN = 3 JAC = 0 NPAR = NPARX IBR = 0 LAB = 0 DS = 0.01d0 DSMIN = 0.005d0 DSMAX = 0.1d0 RL0 = -HUGE(1d0)*0.99995d0 !avoid rounding up in sthd RL1 = HUGE(1d0)*0.99995d0 A0 = -HUGE(1d0)*0.99995d0 A1 = HUGE(1d0)*0.99995d0 EPSL = 1d-7 EPSU = 1d-7 EPSS = 1d-5 TY='' EFILE='' SFILE='' SVFILE='' DATFILE='' ALLOCATE(ICU(1),IVUZR(0),IVUZSTOP(0),IVTHU(0),parnames(0),unames(0),SP(0)) ALLOCATE(STOPS(0),UVALS(0),PARVALS(0)) ICU(1)='1' NPOS=1 DO CALL READC(UNITC,EOF,LINE,NPOS,STR,KEYEND,POS,LISTLEN,IERR) ! IERR=-1: old-style constants file detected and read ! IERR= 0: no problems ! IERR= 1: unknown AUTO constant: check with HomCont ! IERR= 3: bad value IF(EOF.OR.IERR==-1)EXIT KEYS=.TRUE. IF(IERR==1)THEN CALL INSTRHO(STR(1:KEYEND),STR(POS:),LISTLEN,IERR) ENDIF IF(IERR==1)THEN WRITE(6,'(A,A,A,I2)')"Unknown AUTO constant ", & STR(1:KEYEND)," on line ",LINE CALL AUTOSTOP() ELSEIF(IERR==3)THEN WRITE(6,"(A,I2,A)") & " Error in fort.2 or c. file: bad value on line ", LINE,"." CALL AUTOSTOP() ENDIF ENDDO IF(EOF.AND.IERR/=-1.AND..NOT.KEYS)THEN RETURN ENDIF AP%NDIM=NDIM AP%IPS=IPS AP%IRS=IRS AP%ILP=ILP AP%NTST=NTST AP%NCOL=NCOL AP%IAD=IAD AP%IADS=IADS AP%ISP=ISP AP%ISW=ISW AP%IPLT=IPLT AP%NBC=NBC AP%NINT=NINT AP%NMX=NMX AP%NUZR=0 DO I=1,SIZE(IVUZR) AP%NUZR=AP%NUZR+SIZE(IVUZR(I)%VAR) ENDDO DO I=1,SIZE(IVUZSTOP) AP%NUZR=AP%NUZR+SIZE(IVUZSTOP(I)%VAR) ENDDO AP%NPR=NPR AP%MXBF=MXBF AP%IIS=IIS AP%IID=IID AP%ITMX=ITMX AP%ITNW=ITNW AP%NWTN=NWTN AP%JAC=JAC AP%NPAR=NPAR AP%IBR=IBR AP%LAB=LAB AP%NICP=SIZE(ICU) AP%NTEST=2 ! LP/BP test functions active by default AP%NDM=NDIM AP%NPARI=0 AP%ITP=0 AP%ITPST=0 AP%NFPR=1 AP%NTOT=0 AP%NINS=0 AP%DS=DS AP%DSMIN=ABS(DSMIN) AP%DSMAX=ABS(DSMAX) AP%RDS=DS AP%RL0=RL0 AP%RL1=RL1 AP%A0=A0 AP%A1=A1 AP%EPSL=EPSL AP%EPSU=EPSU AP%EPSS=EPSS AP%DET=0.d0 AP%FLDF=0.d0 AP%HBFF=0.d0 AP%BIFF=0.d0 AP%SPBF=0.d0 EOF=.FALSE. END SUBROUTINE INIT ! ---------- ------- SUBROUTINE CLEANUP() ! Deallocate some globally allocated arrays. USE AUTO_CONSTANTS, ONLY : IVTHU,IVUZR,IVUZSTOP,IVTHL,ICU,parnames, & unames,SP,STOPS,PARVALS,UVALS IMPLICIT NONE DO I=1,SIZE(IVUZR) DEALLOCATE(IVUZR(I)%VAR) ENDDO DO I=1,SIZE(IVUZSTOP) DEALLOCATE(IVUZSTOP(I)%VAR) ENDDO DEALLOCATE(IVTHU,IVUZR,IVUZSTOP,IVTHL,ICU,parnames,unames,SP,STOPS, & PARVALS,UVALS) END SUBROUTINE CLEANUP !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! The leading subroutines of AUTO !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ----- SUBROUTINE INIT1(AP) USE AUTO_CONSTANTS, ONLY:IVTHL,TY USE SUPPORT, ONLY: LBTYPE DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 ! General initialization. Redefinition of constants. ! The following constants are redefined, ie. they are different than in ! fort.2 or c.*: ! DS: if DS is set to 0 it'll be set to 0.1 ! DS: if DSMIN is set to 0 it'll be set to 1.0d-4 * |DS| ! DSMIN is divided by 1+HMACH ! DS and DSMAX are multiplied by 1+HMACH ! NDIM: set to the dimension of the extended system ! ILP: set to 0 dependent on problem type ! ISP: set to 0 dependent on problem type ! ISW: set to 1 if equal to 0, to -|ISW| for starts of ext systems ! NBC: set by problem type ! NINT: set by problem type ! NMX: set to 5 for starts of extended systems TYPE(AUTOPARAMETERS) AP ! Local DOUBLE PRECISION DS,DSMIN,FC DS=AP%DS DSMIN=AP%DSMIN IF(AP%ISW.EQ.0)AP%ISW=1 ! Check and perturb pseudo arclength stepsize and steplimits. ! (Perturbed to avoid exact computation of certain singular points). IF(DS.EQ.0.d0)DS=0.1 IF(DSMIN.EQ.0.d0)DSMIN=1.0D-4*ABS(DS) FC=1.d0+HMACH AP%DS=FC*DS AP%DSMIN=DSMIN/FC AP%DSMAX=FC*AP%DSMAX AP%NPARI=0 IF(.NOT.ALLOCATED(IVTHL))THEN ! set default for *THL IF(AP%IPS==2.OR.AP%IPS==12)THEN ALLOCATE(IVTHL(1)) IVTHL(1)%INDEX='11' IVTHL(1)%VAR=0d0 ELSE ALLOCATE(IVTHL(0)) ENDIF ENDIF !translate TY constant to typecode in AP%ITP IF(LEN_TRIM(TY)>=2)THEN DO I=-9,9 IF(LBTYPE(I)==TY(1:2))THEN AP%ITP=I EXIT ENDIF ENDDO IF(TY(1:2)=='GH')THEN AP%ITP=-32 ENDIF IF(.NOT.(AP%IPS<=1.OR.AP%IPS==5.OR.AP%IPS==11))THEN IF(AP%ITP==1)THEN AP%ITP=6 ELSEIF(AP%ITP==2)THEN AP%ITP=5 ENDIF ENDIF ENDIF RETURN END SUBROUTINE INIT1 END PROGRAM AUTO !----------------------------------------------------------------------- !----------------------------------------------------------------------- auto/07p/src/Makefile.in0000640000175000017500000000570113570013207013101 0ustar sksk# ===> Makefile # # Makefile Xianjun WANG 3/1994 # # used to compile AUTO libraries # # CC=@CC@ FC=@FC@ CFLAGS=@CFLAGS@ FFLAGS=@FFLAGS@ OPT=@OPT_FLAG@ OBJ= ../lib/main.o ../lib/blas.o ../lib/lapack.o RM=rm -f # all: lib compile ../lib/libauto_c.a move # lib: @mkdir -p ../lib # compile: $(OBJ) # ../lib/main.o: main.f90 ../lib/homcont.o ../lib/maps.o ../lib/optimization.o ../lib/parabolic.o ../lib/timeint.o $(FC) $(FFLAGS) $(OPT) -c main.f90 -o $@ # ../lib/solvebv.o: solvebv.f90 ../lib/support.o $(FC) $(FFLAGS) $(OPT) -c solvebv.f90 -o $@ # ../lib/interfaces.o: interfaces.f90 ../lib/support.o $(FC) $(FFLAGS) $(OPT) -c interfaces.f90 -o $@ # ../lib/toolboxae.o: toolboxae.f90 ../lib/interfaces.o ../lib/ae.o $(FC) $(FFLAGS) $(OPT) -c toolboxae.f90 -o $@ # ../lib/toolboxbv.o: toolboxbv.f90 ../lib/interfaces.o ../lib/bvp.o $(FC) $(FFLAGS) $(OPT) -c toolboxbv.f90 -o $@ # ../lib/floquet.o: floquet.f90 ../lib/support.o $(FC) $(FFLAGS) $(OPT) -c floquet.f90 -o $@ # ../lib/homcont.o: homcont.f90 ../lib/toolboxbv.o $(FC) $(FFLAGS) $(OPT) -c homcont.f90 -o $@ # ../lib/equilibrium.o: equilibrium.f90 ../lib/toolboxae.o $(FC) $(FFLAGS) $(OPT) -c equilibrium.f90 -o $@ # ../lib/maps.o: maps.f90 ../lib/equilibrium.o $(FC) $(FFLAGS) $(OPT) -c maps.f90 -o $@ # ../lib/optimization.o: optimization.f90 ../lib/periodic.o ../lib/toolboxae.o $(FC) $(FFLAGS) $(OPT) -c optimization.f90 -o $@ # ../lib/parabolic.o: parabolic.f90 ../lib/equilibrium.o ../lib/periodic.o $(FC) $(FFLAGS) $(OPT) -c parabolic.f90 -o $@ # ../lib/periodic.o: periodic.f90 ../lib/toolboxbv.o ../lib/floquet.o $(FC) $(FFLAGS) $(OPT) -c periodic.f90 -o $@ # ../lib/timeint.o: timeint.f90 ../lib/toolboxae.o $(FC) $(FFLAGS) $(OPT) -c timeint.f90 -o $@ # ../lib/ae.o: ae.f90 ../lib/io.o ../lib/interfaces.o $(FC) $(FFLAGS) $(OPT) -c ae.f90 -o $@ # ../lib/bvp.o: bvp.f90 ../lib/solvebv.o ../lib/io.o ../lib/interfaces.o $(FC) $(FFLAGS) $(OPT) -c bvp.f90 -o $@ # ../lib/support.o: support.f90 ../lib/mpi.o ../lib/mesh.o $(FC) $(FFLAGS) $(OPT) -c support.f90 -o $@ # ../lib/io.o: io.f90 ../lib/support.o ../lib/compat.o $(FC) $(FFLAGS) $(OPT) -c io.f90 -o $@ # ../lib/mesh.o: mesh.f90 $(FC) $(FFLAGS) $(OPT) -c mesh.f90 -o $@ # ../lib/auto_constants.o: auto_constants.f90 ../include/auto.h $(FC) $(FFLAGS) $(OPT) -I../include -c auto_constants.f90 -o $@ # ../lib/libauto_c.a: user_c.c ../include/auto_f2c.h ../include/config.h rm -f $@ $(CC) -I../include $(CFLAGS) $(OPT) -c user_c.c -o user_c.o ar cr $@ user_c.o rm -f user_c.o # ../lib/lapack.o: lapack.f $(FC) $(FFLAGS) $(OPT) -c lapack.f -o $@ # ../lib/blas.o: blas.f $(FC) $(FFLAGS) $(OPT) -c blas.f -o $@ # ../lib/compat.o: @COMPAT@.f90 $(FC) $(FFLAGS) $(OPT) -c @COMPAT@.f90 -o $@ # ../lib/mpi.o: @MPIFILE@ ../lib/auto_constants.o $(FC) $(FFLAGS) $(OPT) -c @MPIFILE@ -o $@ # move: $(OBJ) @$(RM) auto.h # superclean: cd ../lib && rm -f *.o *.a rm -f *.mod *.o rmdir ../lib 2> /dev/null; true # # DO NOT ADD ANYTHING AFTER THIS LINE # auto/07p/src/parabolic.f900000640000175000017500000003376313570013207013321 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Parabolic PDEs !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE PARABOLIC USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE INTERFACES USE EQUILIBRIUM USE PERIODIC USE AE USE TOOLBOXAE USE BVP USE TOOLBOXBV USE SUPPORT IMPLICIT NONE PRIVATE PUBLIC :: AUTOPE CONTAINS !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Travelling Wave Solutions to Parabolic PDEs !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE AUTOPE(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) INTEGER IPS, ISW, ITP, NDM, NDIM IPS = AP%IPS ISW = AP%ISW ITP = AP%ITP NDIM = AP%NDIM ! Redefinition for waves NDIM = 2*NDIM AP%NDIM = NDIM IF(IPS==11.OR.IPS==12)THEN NDM=NDIM AP%NDM=NDM ELSEIF(IPS==14.OR.IPS==16.OR.IPS==17)THEN ! **Evolution calculations for Parabolic Systems ! **Stationary calculations for Parabolic Systems AP%NBC=NDIM AP%NINT=0 AP%NFPR=1 IF(IPS/=17)THEN AP%ILP=0 AP%ISP=0 ICP(1)=14 ENDIF ENDIF SELECT CASE(IPS) CASE(11) ! ** Waves : Spatially homogeneous solutions CALL INITEQ(AP) IF(ABS(ISW)==1 ) THEN CALL AUTOAE(AP,ICP,ICU,FNWS,STPNAE,FNCSWS) ELSEIF(ABS(ISW)==2)THEN IF(ITP==2.OR.ITP==7.OR.ABS(ITP)/10==2.OR.ABS(ITP)/10==7) THEN ! ** Fold/PD continuation. CALL AUTOAE(AP,ICP,ICU,FNWL,STPNWL,FNCSWS) ELSEIF(ITP==3.OR.ITP==8.OR.ABS(ITP)/10==3.OR.ABS(ITP)/10==8)THEN ! ** Hopf/Neimark-Sacker bifurcation continuation. CALL AUTOAE(AP,ICP,ICU,FNHW,STPNHW,FNCSWS) ENDIF ENDIF CASE(12) ! ** Wave train solutions to parabolic systems. CALL INITPS(AP,ICP) IF(ABS(ISW)<=1) THEN CALL AUTOBV(AP,ICP,ICU,FNWP,BCPS,ICPS,STPNPS,FNCSPS) ELSE IF(ABS(ISW)==2) THEN IF(ITP==5) THEN ! ** Fold continuation (start). CALL AUTOBV(AP,ICP,ICU,FNWPL,BCPL,ICPL,STPNPL,FNCSPS) ELSE IF(ABS(ITP)/10==5) THEN ! ** Fold continuation (restart). CALL AUTOBV(AP,ICP,ICU,FNWPL,BCPL,ICPL,STPNBV,FNCSPS) ENDIF ENDIF CASE(14) ! ** Evolution calculations for parabolic systems. ! (Periodic boundary conditions.) CALL AUTOBV(AP,ICP,ICU,FNPE,BCPS,ICPE,STPNBV,FNCSPE) CASE(16) ! ** Evolution calculations for parabolic systems. ! (User supplied boundary conditions.) CALL AUTOBV(AP,ICP,ICU,FNPE,BCNI,ICPE,STPNBV,FNCSPE) CASE(17) ! ** Continuation of stationary states of parabolic systems. ! (User supplied boundary conditions.) CALL AUTOBV(AP,ICP,ICU,FNSP,BCNI,ICPE,STPNBV,FNCSBV) END SELECT END SUBROUTINE AUTOPE ! ---------- ---- SUBROUTINE FNWS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Sets up equations for the continuation of spatially homogeneous ! solutions to parabolic systems, for the purpose of finding ! bifurcations to travelling wave solutions. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local INTEGER NDM,I,J DOUBLE PRECISION C ! Generate the function. NDM=AP%NDM/2 CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) C=PAR(10) DO I=1,NDM F(NDM+I)=-( C*U(NDM+I) + F(I) )/PAR(14+I) F(I)=U(NDM+I) ENDDO IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) DO I=1,NDM DO J=1,NDM DFDU(I+NDM,J) =-DFDU(I,J)/PAR(14+I) DFDU(I,J) =0.d0 DFDU(I,J+NDM) =0.d0 DFDU(I+NDM,J+NDM)=0.d0 ENDDO DFDU(I,I+NDM) =1 DFDU(I+NDM,I+NDM)=-C/PAR(14+I) ENDDO IF(IJAC.EQ.1)RETURN CALL EXPANDJAC(DFDP,AP%NPAR,NDM,NDIM) DO I=1,NDM IF(ICP(1)/=10)THEN DFDP(I+NDM,ICP(1))=-DFDP(I,ICP(1))/PAR(14+I) DFDP(I,ICP(1)) =0.d0 ENDIF IF(AP%NFPR>1.AND.ICP(2)/=10)THEN DFDP(I+NDM,ICP(2))=-DFDP(I,ICP(2))/PAR(14+I) DFDP(I,ICP(2)) =0.d0 ENDIF ENDDO ! Derivative with respect to the wave speed. DO I=1,NDM DFDP(I,10) =0.d0 DFDP(I+NDM,10)=-U(NDM+I)/PAR(14+I) ENDDO ! Derivatives with respect to the diffusion coefficients. DO J=1,NDM DO I=1,NDM DFDP(I,14+J) =0.d0 DFDP(I+NDM,14+J)=0.d0 ENDDO DFDP(J+NDM,14+J)=-F(J+NDM)/PAR(14+J) ENDDO END SUBROUTINE FNWS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSWS(AP,ICP,U,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=FNCSEQF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FNWS) END FUNCTION FNCSWS ! ---------- ---- SUBROUTINE FNWL(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-par continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNLPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNWS) END SUBROUTINE FNWL ! ---------- ------- SUBROUTINE STPNWL(AP,PAR,ICP,U,UDOT,NODIR) USE IO USE SUPPORT ! Generates starting data for the continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNLPF(AP,PAR,ICP,U,UDOT,NODIR,FNWS) END SUBROUTINE STPNWL ! ---------- ---- SUBROUTINE FNHW(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-parameter continuation of Hopf ! bifurcation points in waves. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNHBF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNWS,FFHBX) END SUBROUTINE FNHW ! ---------- ------ SUBROUTINE STPNHW(AP,PAR,ICP,U,UDOT,NODIR) USE SUPPORT, ONLY: PI ! Generates starting data for the 2-parameter continuation of ! Hopf bifurcation point (ODE/wave/map). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNHBF(AP,PAR,ICP,U,UDOT,NODIR,FNWS,FFHBX) END SUBROUTINE STPNHW ! ---------- ---- SUBROUTINE FNWP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Equations for the continuation of traveling waves. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) INTEGER J DOUBLE PRECISION PERIOD ! Generate the function and Jacobian. CALL FNWS(AP,NDIM,U,UOLD,ICP,PAR,ABS(IJAC),F,DFDU,DFDP) PERIOD=PAR(11) IF(IJAC==2.OR.IJAC==-1)THEN DO J=1,AP%NFPR IF(ICP(J)==11)THEN ! **Variable wave length DFDP(:,11)=F(:) ELSEIF(IJAC==2.AND.ICP(J)<=AP%NPAR-AP%NPARI)THEN DFDP(:,ICP(J))=PERIOD*DFDP(:,ICP(J)) ENDIF ENDDO ENDIF F(:)=PERIOD*F(:) IF(IJAC.EQ.0)RETURN DFDU(:,:NDIM)=PERIOD*DFDU(:,:NDIM) END SUBROUTINE FNWP ! ---------- ----- SUBROUTINE FNWPL(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates starting data for the continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNPLF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNWP) END SUBROUTINE FNWPL !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Parabolic PDEs : Stationary States !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNSP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for taking one time step (Implicit Euler). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local INTEGER NDM,NPAR,I,J DOUBLE PRECISION PERIOD NDM=AP%NDM NPAR=AP%NPAR ! Generate the function and Jacobian. CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJAC,F(NDM+1),DFDU,DFDP) PERIOD=PAR(11) DO I=1,NDM F(I) = PERIOD*U(NDM+I) F(NDM+I)=-PERIOD*F(NDM+I)/PAR(14+I) ENDDO IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) DO I=1,NDM DO J=1,NDM DFDU(I+NDM,J) =-PERIOD*DFDU(I,J)/PAR(14+I) DFDU(I,J) =0.d0 DFDU(I,J+NDM) =0.d0 DFDU(I+NDM,J+NDM)=0.d0 ENDDO DFDU(I,I+NDM) =PERIOD ENDDO IF(IJAC.EQ.1)RETURN CALL EXPANDJAC(DFDP,AP%NPAR,NDM,NDIM) DO I=1,NDM IF(ICP(1).EQ.11)THEN DFDP(I,ICP(1)) = F(I)/PERIOD DFDP(NDM+I,ICP(1))= F(NDM+I)/PERIOD ELSEIF(ICP(1).EQ.14+I)THEN DFDP(I,ICP(1)) = 0.d0 DFDP(NDM+I,ICP(1))=-F(NDM+I)/PAR(14+I) ELSEIF(ICP(1).NE.11 .AND. & .NOT. (ICP(1).GT.14 .AND. ICP(1).LE.14+NDM) )THEN DFDP(I+NDM,ICP(1))=-PERIOD*DFDP(I,ICP(1))/PAR(14+I) DFDP(I,ICP(1)) =0.d0 ENDIF ENDDO END SUBROUTINE FNSP !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Time Evolution of Parabolic PDEs !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNPE(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for taking one time step (Implicit Euler). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local INTEGER NDM,IIJAC,I,J DOUBLE PRECISION T,DT,PERIOD,RLOLD NDM=AP%NDM ! Generate the function and Jacobian. IIJAC=IJAC IF(IJAC.GT.1)IIJAC=1 CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IIJAC,F(NDM+1),DFDU,DFDP) PERIOD=PAR(11) T=PAR(ICP(1)) RLOLD=PAR(12) IF(T==RLOLD)THEN ! Two reasons: ! 1. at the start, then UOLD==U, so we can set DT to 1, ! because it is irrelevant. ! 2. from STUPBV, to calculate UPOLDP, which is not needed ! because NINT is forced to 0. DT=1.d0 ELSE DT=T-RLOLD ENDIF DO I=1,NDM F(I)=PERIOD*U(NDM+I) F(NDM+I)=PERIOD*( (U(I)-UOLD(I))/DT - F(NDM+I) )/PAR(14+I) ENDDO IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) DO I=1,NDM DO J=1,NDM DFDU(I+NDM,J) =-PERIOD*DFDU(I,J)/PAR(14+I) DFDU(I,J) =0.d0 DFDU(I,J+NDM) =0.d0 DFDU(I+NDM,J+NDM)=0.d0 ENDDO DFDU(I,I+NDM) =PERIOD DFDU(I+NDM,I) =DFDU(I+NDM,I) + PERIOD/(DT*PAR(14+I)) ENDDO IF(IJAC.EQ.1)RETURN DO I=1,NDM DFDP(I,ICP(1)) =0.d0 DFDP(I+NDM,ICP(1))=-PERIOD*(U(I)-UOLD(I))/(DT**2*PAR(14+I)) ENDDO END SUBROUTINE FNPE ! ---------- ---- SUBROUTINE ICPE(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Dummy integral condition subroutine for parabolic systems. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) F(:)=0d0 END SUBROUTINE ICPE ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSPE(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE BVP TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE ! save old time PAR(12)=PAR(ICP(1)) Q=FNCSBV(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) END FUNCTION FNCSPE END MODULE PARABOLIC auto/07p/src/periodic.f900000640000175000017500000016536613570013207013170 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Periodic Solutions and Fixed Period Orbits !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE PERIODIC USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE INTERFACES USE TOOLBOXBV USE BVP USE SUPPORT IMPLICIT NONE PRIVATE PUBLIC :: AUTOPS,INITPS PUBLIC :: BCPS,ICPS,STPNPS,FNCSPS ! Periodic solutions PUBLIC :: FNPLF,BCPL,ICPL,STPNPL ! Fold cont of periodic sol DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ------ SUBROUTINE INITPS(AP,ICP) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(*) INTEGER IPS, ITP, ISW, NICP, NDIM, NBC, NINT, NPAR, NPARI IPS = AP%IPS ITP = AP%ITP ISW = AP%ISW NICP = AP%NICP NDIM = AP%NDIM NBC = AP%NBC NINT = AP%NINT NPAR = AP%NPAR NPARI = AP%NPARI IF(ABS(ISW)<=1)THEN IF(IPS/=7)THEN ! ** Periodic Solutions NBC=NDIM NINT=1 ! **ISW=1 when starting from a HB IF(ITP==3.OR.(ABS(ITP)/10)==3)ISW=1 IF(NICP==1)THEN ! **Variable period ICP(2)=11 ENDIF ENDIF ELSE IF(ABS(ITP)/10==5 .OR. ITP==5)THEN NDIM=2*NDIM NBC=NDIM NINT=3 NPARI=2 IF(ICP(3)==11 .OR. NICP==2)THEN ! ** Variable period IF( ITP/=5 )ICP(3)=ICP(2) ICP(2)=11 ENDIF IF( ITP==5 )THEN ! ** Fold continuation (Periodic solutions); start ISW=-2 ICP(3)=NPAR+2 ENDIF ICP(4)=NPAR+1 ELSEIF(ITP==6.OR.ABS(ITP)/10==6)THEN ! ** BP cont (Periodic solutions); start/restart (by F. Dercole) IF(ABS(ISW)==2)THEN ! ** Non-generic case IF(ICP(3)==11 .OR. NICP==2)THEN ! ** Variable period ICP(3)=ICP(2) ICP(2)=11 ! T ENDIF ICP(4)=NPAR+3 ! b NPARI=3 ELSE ! ** Generic case IF(ICP(4)==11 .OR. NICP==3)THEN ! ** Variable period ICP(4)=ICP(3) ICP(3)=ICP(2) ICP(2)=11 ! T ENDIF NPARI=2 ENDIF ICP(5)=NPAR+1 ! phi^*_3 NDIM=2*NDIM NINT=4 IF(ITP==6)THEN ! start NDIM=2*NDIM NINT=10 ICP(3)=NPAR+2 ! a ICP(4)=NPAR+3 ! b ICP(6)=NPAR+4 ! q1 ICP(7)=NPAR+5 ! q2/beta1 ICP(8)=NPAR+6 ! r1 ICP(9)=NPAR+7 ! r2/beta2 ICP(10)=NPAR+8 ! c1 ICP(11)=NPAR+9 ! c2 ISW=-ABS(ISW) NPARI=9 ENDIF NBC=NDIM ELSEIF(ITP==7.OR.ABS(ITP)/10==7)THEN ! ** Continuation of period doubling bifurcations; start/restart NDIM=2*NDIM NBC=NDIM NINT=2 IF(ITP==7)THEN ! start IF(ICP(3)==11 .OR. NICP==2)THEN ! ** Variable period ICP(2)=11 ENDIF ICP(3)=NPAR+1 ISW=-2 ELSEIF(NICP==2)THEN ! ** restart with variable period ICP(3)=11 ENDIF NPARI=1 ELSE IF(ITP==8.OR.ABS(ITP)/10==8)THEN ! ** Continuation of torus bifurcations; start/restart NDIM=3*NDIM NBC=NDIM NINT=3 IF(ITP==8)THEN ! start ICP(2)=11 ICP(3)=12 ICP(4)=NPAR+1 ISW=-2 ELSEIF(NICP<4)THEN ! **restart if not specified by user ICP(3)=11 ICP(4)=12 ENDIF NPARI=1 ENDIF ENDIF AP%NDIM=NDIM AP%NBC=NBC AP%NINT=NINT AP%NFPR=NBC+NINT-NDIM+1 AP%NPARI=NPARI AP%ISW=ISW AP%NTEST=3 END SUBROUTINE INITPS ! ---------- ------ SUBROUTINE AUTOPS(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) INTEGER IPS, ISW, ITP CALL INITPS(AP,ICP) IPS = AP%IPS ISW = AP%ISW ITP = AP%ITP IF(ABS(ISW)<=1)THEN IF(IPS==2)THEN ! ** Periodic solutions CALL AUTOBV(AP,ICP,ICU,FNPS,BCPS,ICPS,STPNPS,FNCSPS) ELSE ! Boundary value problems with Floquet multipliers. (IPS=7) CALL AUTOBV(AP,ICP,ICU,FUNI,BCNI,ICNI,STPNPS,FNCSPS) ENDIF ELSE ! here IPS=2 IF(ABS(ISW)==2)THEN IF(ITP==5) THEN ! ** Fold continuation (Periodic solutions, start). CALL AUTOBV(AP,ICP,ICU,FNPL,BCPL,ICPL,STPNPL,FNCSPS) ELSE IF((ABS(ITP)/10)==5)THEN ! ** Fold continuation (Periodic solutions, restart). CALL AUTOBV(AP,ICP,ICU,FNPL,BCPL,ICPL,STPNBV,FNCSPS) ELSE IF(ITP==7) THEN ! ** Continuation of period doubling bifurcations (start). CALL AUTOBV(AP,ICP,ICU,FNPD,BCPD,ICPD,STPNPD,FNCSPS) ELSE IF(ABS(ITP)/10==7)THEN ! ** Continuation of period doubling bifurcations (restart). CALL AUTOBV(AP,ICP,ICU,FNPD,BCPD,ICPD,STPNBV,FNCSPS) ELSE IF(ITP==8)THEN ! ** Continuation of torus bifurcations (start). CALL AUTOBV(AP,ICP,ICU,FNTR,BCTR,ICTR,STPNTR,FNCSPS) ELSE IF(ABS(ITP)/10==8)THEN ! ** Continuation of torus bifurcations (restart). CALL AUTOBV(AP,ICP,ICU,FNTR,BCTR,ICTR,STPNBV,FNCSPS) ENDIF ENDIF IF(ITP==6.OR.(ABS(ITP)/10)==6) THEN ! ** BP cont (Periodic sol., start and restart) (by F. Dercole). CALL AUTOBV(AP,ICP,ICU,FNPBP,BCPBP,ICPBP,STPNPBP,FNCSPS) ENDIF ENDIF END SUBROUTINE AUTOPS ! ---------- ---- SUBROUTINE FNPS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the continuation of periodic orbits. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local INTEGER J DOUBLE PRECISION PERIOD ! Generate the function. CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,ABS(IJAC),F,DFDU,DFDP) PERIOD=PAR(11) IF(IJAC==2.OR.IJAC==-1)THEN DO J=1,AP%NFPR IF(ICP(J)==11)THEN ! **Variable period continuation DFDP(:,11)=F(:) ELSEIF(IJAC==2.AND.ICP(J)<=AP%NPAR-AP%NPARI)THEN DFDP(:,ICP(J))=PERIOD*DFDP(:,ICP(J)) ENDIF ENDDO ENDIF F(:)=PERIOD*F(:) IF(IJAC.EQ.0)RETURN ! **Generate the Jacobian. DFDU(:,:)=PERIOD*DFDU(:,:) END SUBROUTINE FNPS ! ---------- ---- SUBROUTINE BCPS(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) USE BVP, ONLY: IRTN, NRTN USE SUPPORT, ONLY : PI TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER NFPR,I,J NFPR=AP%NFPR DO I=1,NBC F(I)=U0(I)-U1(I) ENDDO ! Rotations IF(IRTN.NE.0)THEN DO I=1,NBC/2 IF(NRTN(I).NE.0)F(I)=F(I) + PI(2.d0)*NRTN(I) ENDDO ENDIF IF(IJAC.EQ.0)RETURN DO I=1,NBC DO J=1,2*NDIM DBC(I,J)=0.d0 ENDDO DBC(I,I)=1.D0 DBC(I,NDIM+I)=-1.d0 DO J=1,NFPR DBC(I,2*NDIM+ICP(J))=0.d0 ENDDO ENDDO END SUBROUTINE BCPS ! ---------- ---- SUBROUTINE ICPS(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER NPAR,NN,I F(1)=0.d0 DO I=1,NDIM F(1)=F(1)+(U(I)-UOLD(I))*UPOLD(I) ENDDO IF(IJAC.EQ.0)RETURN NPAR=AP%NPAR NN=NDIM+NPAR DO I=1,NN DINT(1,I)=0.d0 ENDDO DO I=1,NDIM DINT(1,I)=UPOLD(I) ENDDO END SUBROUTINE ICPS ! ---------- ----- SUBROUTINE PDBLE(NDIM,NTST,NCOL,UPS,UDOTPS,TM,PAR) ! Preprocesses restart data for switching branches at a period doubling INTEGER, INTENT(IN) :: NDIM,NCOL INTEGER, INTENT(INOUT) :: NTST DOUBLE PRECISION,INTENT(INOUT) :: TM(0:*),UPS(NDIM,0:*),& UDOTPS(NDIM,0:*),PAR(*) INTEGER NTC,I,J PAR(11)=2.d0*PAR(11) DO I=0,NTST-1 TM(I)=.5d0*TM(I) TM(NTST+I)=.5d0+TM(I) ENDDO TM(2*NTST)=1 NTC=NTST*NCOL DO J=0,NTC UPS(:,NTC+J)= UPS(:,NTC)+ UPS(:,J)- UPS(:,0) UDOTPS(:,NTC+J)=UDOTPS(:,NTC)+UDOTPS(:,J)-UDOTPS(:,0) ENDDO NTST=2*NTST END SUBROUTINE PDBLE ! ---------- ------ SUBROUTINE STPNPS(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE MESH ! Generates starting data for the continuation of a branch of periodic ! solutions. ! If IPS is not equal to 2 then the user must have supplied ! BCND, ICND, and period-scaled F in FUNC, and the user period-scaling of F ! must be taken into account. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER NDIM,IRS,ISW,ITP,NDIMRD,NTSR2 NDIM=AP%NDIM IRS=AP%IRS ISW=AP%ISW ITP=AP%ITP IF(IRS==0)THEN CALL STPNBV(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) RETURN ENDIF IF(ISW==-1.AND.ITP==7) THEN ! period doubling NTSR2=NTSR*2 ELSE NTSR2=NTSR ENDIF ALLOCATE(UPSR(NDIM,0:NCOLRS*NTSR2), & UDOTPSR(NDIM,0:NCOLRS*NTSR2),TMR(0:NTSR2)) CALL STPNBV1(AP,PAR,ICP,NDIM,NTSR,NDIMRD,NCOLRS, & RLDOT,UPSR,UDOTPSR,TMR,NODIR) IF(ISW==-1.AND.ITP==7) THEN ! Special case : Preprocess restart data in case of branch switching ! at a period doubling bifurcation. CALL PDBLE(NDIM,NTSR,NCOLRS,UPSR,UDOTPSR,TMR,PAR) ENDIF CALL ADAPT2(NTSR,NCOLRS,NDIM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.TRUE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNPS !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Folds for Periodic Solution !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNPL(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNPLF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNPS) END SUBROUTINE FNPL ! ---------- ----- SUBROUTINE FNPLF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),DFP(:,:),FF1(:),FF2(:) INTEGER NDM,NFPR,NPAR,I,J DOUBLE PRECISION UMX,UU,EP,P NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ! Generate the function. CALL FFPL(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP,FUNI) IF(IJAC.EQ.0)RETURN ! Generate the Jacobian. CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) DFDU(1:NDM,NDM+1:NDIM)=0d0 DFDU(NDM+1:NDIM,NDM+1:NDIM)=DFDU(1:NDM,1:NDM) IF(IJAC==2)THEN IF(ICP(2)==11)THEN DFDP(NDM+1:NDIM,11)= & (F(NDM+1:NDIM)-PAR(NPAR-1)*DFDP(1:NDM,11))/PAR(11) ENDIF DFDP(1:NDM,NPAR-1)=0d0 DFDP(NDM+1:NDIM,NPAR-1)=DFDP(1:NDM,ICP(2)) IF(ICP(3)==NPAR)THEN DFDP(1:NDM,NPAR)=0d0 ENDIF ENDIF UMX=0.d0 DO I=1,NDM IF(ABS(U(I))>UMX)UMX=ABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(DFU(NDM,NDM),DFP(NDM,NPAR),FF1(NDIM),FF2(NDIM)) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFPL(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DFP,FUNI) U(I)=UU+EP CALL FFPL(AP,U,UOLD,ICP,PAR,0,FF2,NDM,DFU,DFP,FUNI) U(I)=UU DO J=NDM+1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF (IJAC.EQ.1)THEN DEALLOCATE(DFU,DFP,FF1) RETURN ENDIF DO I=1,NFPR-1 IF(ICP(I)==11)CYCLE P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFPL(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DFP,FUNI) DO J=NDM+1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(DFU,DFP,FF1) END SUBROUTINE FNPLF ! ---------- ---- SUBROUTINE FFPL(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP,FUNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(2*NDM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) include 'interfaces.h' INTEGER IJC,I,J,NPAR IJC=IJAC IF(IJC==0)IJC=-1 IF(ICP(2)/=11)IJC=2 CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJC,F,DFDU,DFDP) NPAR=AP%NPAR DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(I,J)*U(NDM+J) ENDDO F(NDM+I)=F(NDM+I)+PAR(NPAR-1)*DFDP(I,ICP(2)) ENDDO END SUBROUTINE FFPL ! ---------- ---- SUBROUTINE BCPL(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! Boundary conditions for continuing folds (Periodic solutions) USE BVP, ONLY: IRTN, NRTN USE SUPPORT, ONLY : PI TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER NDM,NPAR,NN,I,J DO I=1,NDIM F(I)=U0(I)-U1(I) ENDDO ! Rotations IF(IRTN.NE.0)THEN NDM=AP%NDM DO I=1,NDM IF(NRTN(I).NE.0)F(I)=F(I) + PI(2.d0)*NRTN(I) ENDDO ENDIF IF(IJAC.EQ.0)RETURN NPAR=AP%NPAR NN=2*NDIM+NPAR DO I=1,NBC DO J=1,NN DBC(I,J)=0.d0 ENDDO ENDDO DO I=1,NDIM DBC(I,I)=1 DBC(I,NDIM+I)=-1 ENDDO END SUBROUTINE BCPL ! ---------- ---- SUBROUTINE ICPL(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Integral conditions for continuing folds (Periodic solutions) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER NDM,NPAR,NN,I,J NDM=AP%NDM NPAR=AP%NPAR F(1)=0.d0 F(2)=0.d0 F(3)=PAR(NPAR-1)**2 - PAR(NPAR) DO I=1,NDM F(1)=F(1)+(U(I)-UOLD(I))*UPOLD(I) F(2)=F(2)+U(NDM+I)*UPOLD(I) F(3)=F(3)+U(NDM+I)*U(NDM+I) ENDDO IF(IJAC.EQ.0)RETURN NN=NDIM+NPAR DO I=1,NINT DO J=1,NN DINT(I,J)=0.d0 ENDDO ENDDO DO I=1,NDM DINT(1,I)=UPOLD(I) DINT(2,NDM+I)=UPOLD(I) DINT(3,NDM+I)=2.d0*U(NDM+I) ENDDO DINT(3,NDIM+NPAR-1)=2.d0*PAR(NPAR-1) DINT(3,NDIM+NPAR)=-1.d0 END SUBROUTINE ICPL ! ---------- ------ SUBROUTINE STPNPL(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE IO USE MESH ! Generates starting data for the 2-parameter continuation of folds ! on a branch of periodic solutions. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local INTEGER ICPRS(4),NDIM,NDM,ITPRS,NDIMRD,NPAR DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) NDIM=AP%NDIM NDM=AP%NDM NPAR=AP%NPAR ALLOCATE(UPSR(NDM,0:NCOLRS*NTSR),UDOTPSR(NDM,0:NCOLRS*NTSR), & TMR(0:NTSR)) CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOT,UPSR, & UDOTPSR,TMR,ITPRS,NDM) ! Complement starting data PAR(NPAR-1)=0.d0 PAR(NPAR)=0.d0 NODIR=0 CALL ADAPT2(NTSR,NCOLRS,NDM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNPL !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for BP cont (Periodic Solutions) (by F. Dercole) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ----- SUBROUTINE FNPBP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:),DFP(:),FF1(:),FF2(:) INTEGER NDM,NFPR,NPAR,I,J,ISW,IP,NPARU DOUBLE PRECISION UMX,EP,P,UU ISW=AP%ISW NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR IF(NDIM==NDM)THEN CALL FNPS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) RETURN ENDIF ! Generate the function. CALL FFPBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,IJAC,F,NDM,DFDU,DFDP) IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) DFDU(1:NDM,NDM+1:NDIM)=0 NPARU=NPAR-AP%NPARI IF(ISW==2.OR.ISW<0)THEN ! ** Non-generic and/or start, derivatives of -b phi_1^* in (18) DO I=1,NDM DFDU(I,NDM+I)=-PAR(NPARU+3) ! b ENDDO ENDIF DO I=1,NDM ! d(13a)/d phi_1^* = -f_x(x,p)^T DFDU(NDM+1:2*NDM,NDM+I)=-DFDU(I,1:NDM) ENDDO IF(ISW<0)THEN ! start DFDU(NDM+1:2*NDM,2*NDM+1:4*NDM)=0 DO I=1,NDM ! d(15a)/dv = c1, d(15a)/dw = c2 DFDU(NDM+I,2*NDM+I)=PAR(NPARU+8) DFDU(NDM+I,3*NDM+I)=PAR(NPARU+9) ENDDO DFDU(2*NDM+1:4*NDM,1:2*NDM)=0 ! d(9a)/dv = d(9b)/dw = f_x(x,p) DFDU(2*NDM+1:3*NDM,2*NDM+1:3*NDM)=DFDU(1:NDM,1:NDM) DFDU(2*NDM+1:3*NDM,3*NDM+1:4*NDM)=0 DFDU(3*NDM+1:4*NDM,2*NDM+1:3*NDM)=0 DFDU(3*NDM+1:4*NDM,3*NDM+1:4*NDM)=DFDU(1:NDM,1:NDM) ENDIF ALLOCATE(DFU(NDM*NDM),DFP(NDM*NPAR)) ALLOCATE(FF1(NDIM),FF2(NDIM)) ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFPBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,0,FF1,NDM,DFU,DFP) U(I)=UU+EP CALL FFPBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,0,FF2,NDM,DFU,DFP) U(I)=UU DO J=NDM+1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF (IJAC.EQ.1)THEN DEALLOCATE(DFU,DFP,FF1) RETURN ENDIF DO I=1,NFPR ! note: restart uses only PAR(NPARU+1) and perhaps PAR(NPARU+3) IP=ICP(I) IF(IP==11)THEN DFDP(NDM+1:2*NDM,11)=F(NDM+1:2*NDM)/PAR(11) IF(ISW<0)THEN DFDP(2*NDM+1:3*NDM,11)=& (F(2*NDM+1:3*NDM)-DFDP(1:NDM,11)*PAR(NPARU+5))/PAR(11) DFDP(3*NDM+1:4*NDM,11)=& (F(3*NDM+1:4*NDM)-DFDP(1:NDM,11)*PAR(NPARU+7))/PAR(11) ENDIF ELSEIF(IP<=NPARU)THEN P=PAR(IP) PAR(IP)=P+EP CALL FFPBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,0,FF1,NDM,DFU,DFP) PAR(IP)=P DO J=NDM+1,NDIM DFDP(J,IP)=(FF1(J)-F(J))/EP ENDDO ENDIF ENDDO DEALLOCATE(DFU,DFP,FF1) IP=NPARU+1 ! phi^*_3 DFDP(1:NDM,IP)=0 DFDP(NDM+1:2*NDM,IP)=UOLD(NDIM+NFPR+1:NDIM+NFPR+NDM) ! =UPOLD(1:NDM)=h_x DFDP(2*NDM+1:NDIM,IP)=0 DFDP(:,NPARU+2)=0 ! a IF(ISW<0) THEN ! start DO J=2,3 DO I=1,2 ! derivatives to q1, q2, r1, r2 IP=NPARU+2*J+I-1 DFDP(1:2*NDM,IP)=0 ! d(9a)/dq = d(9b)/dr = f_p(x,p) DFDP(J*NDM+1:(J+1)*NDM,IP)=DFDP(1:NDM,ICP(I)) DFDP((5-J)*NDM+1:(6-J)*NDM,IP)=0 ENDDO ! derivatives to c1, c2 IP=NPARU+6+J DFDP(1:NDM,IP)=0 DFDP(NDM+1:2*NDM,IP)=U(J*NDM+1:(J+1)*NDM) DFDP(2*NDM+1:4*NDM,IP)=0 ENDDO ENDIF IF(ISW<0.OR.ISW==2)THEN ! non-generic and/or start IP=NPARU+3 ! b DFDP(1:NDM,IP)=-U(NDM+1:2*NDM) DFDP(NDM+1:NDIM,IP)=0 ENDIF END SUBROUTINE FNPBP ! ---------- ----- SUBROUTINE FFPBP(AP,NDIM,U,UOLD,UPOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC,NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UPOLD(NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) ! Local INTEGER ISW,I,J,NPARU,IJC ISW=AP%ISW IF(ISW<0) THEN IJC=MAX(IJAC,2) ELSE IJC=MAX(IJAC,1) ENDIF CALL FNPS(AP,NDM,U,UOLD,ICP,PAR,IJC,F,DFDU,DFDP) NPARU=AP%NPAR-AP%NPARI ! (13a) \dot phi_1^* = -f_x(x,p)^T phi_1^* + h_x(x,p)^T phi_3^* ! where h_x=DINT DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)-DFDU(J,I)*U(NDM+J) ENDDO F(NDM+I)=F(NDM+I)+UPOLD(I)*PAR(NPARU+1) ENDDO IF(ISW<0) THEN ! ** start ! (9a) \dot v = f_x(x,p)v + f_p(x,p)q ! (9b) \dot w = f_x(x,p)w + f_p(x,p)r ! (15a) \dot phi_1^* = -f_x(x,p)^T phi_1^*+h_x(x,p)^T phi_3^*+c1 v+c2 w DO I=1,NDM F(2*NDM+I)=0.d0 F(3*NDM+I)=0.d0 DO J=1,NDM F(2*NDM+I)=F(2*NDM+I)+DFDU(I,J)*U(2*NDM+J) F(3*NDM+I)=F(3*NDM+I)+DFDU(I,J)*U(3*NDM+J) ENDDO F(NDM+I)=F(NDM+I)+PAR(NPARU+8)*U(2*NDM+I)+PAR(NPARU+9)*U(3*NDM+I) DO J=1,2 F(2*NDM+I)=F(2*NDM+I)+DFDP(I,ICP(J))*PAR(NPARU+3+J) F(3*NDM+I)=F(3*NDM+I)+DFDP(I,ICP(J))*PAR(NPARU+5+J) ENDDO ENDDO ENDIF IF((ISW.EQ.2).OR.(ISW.LT.0)) THEN ! ** Non-generic and/or start ! (18) \dot x = f(x,p) - b phi_1^* DO I=1,NDM F(I)=F(I)-PAR(NPARU+3)*U(NDM+I) ENDDO ENDIF END SUBROUTINE FFPBP ! ---------- ----- SUBROUTINE BCPBP(AP,NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! Boundary conditions for continuing BP (Periodic solutions) USE BVP, ONLY: IRTN, NRTN USE SUPPORT, ONLY : PI TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER ISW,NDM,NPAR,NN,I,J,NPARU ISW=AP%ISW NDM=AP%NDM NPAR=AP%NPAR IF(NDIM==NDM)THEN CALL BCPS(AP,NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) RETURN ENDIF DO I=1,NDIM FB(I)=U0(I)-U1(I) ENDDO NPARU=NPAR-AP%NPARI IF((ISW.EQ.2).OR.(ISW.LT.0)) THEN ! ** Non-generic and/or start DO I=1,NDM FB(I)=FB(I)+PAR(NPARU+3)*U0(NDM+I) ENDDO ENDIF ! Rotations IF(IRTN.NE.0)THEN DO I=1,NDM IF(NRTN(I).NE.0)FB(I)=FB(I)+PI(2.d0)*NRTN(I) ENDDO ENDIF IF(IJAC.EQ.0)RETURN NN=2*NDIM+NPAR DO I=1,NBC DO J=1,NN DBC(I,J)=0.d0 ENDDO ENDDO DO I=1,NDIM DBC(I,I)=1 DBC(I,NDIM+I)=-1 ENDDO IF((ISW.EQ.2).OR.(ISW.LT.0)) THEN ! ** Non-generic and/or start DO I=1,NDM DBC(I,NDM+I)=PAR(NPARU+3) ENDDO ENDIF IF(IJAC.EQ.1)RETURN IF((ISW.EQ.2).OR.(ISW.LT.0)) THEN ! ** Non-generic and/or start DO I=1,NDM DBC(I,2*NDIM+NPARU+3)=U0(NDM+I) ENDDO ENDIF END SUBROUTINE BCPBP ! ---------- ----- SUBROUTINE ICPBP(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! Integral conditions for continuing BP (Periodic solutions) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: F(:),DFU(:,:),DFP(:,:),DFP0(:,:),DFP1(:,:) INTEGER NFPR,NDM,NPAR,NPARU,ISW,I,J,K DOUBLE PRECISION UMX,EP,P,UU ISW=AP%ISW NDM=AP%NDM NPAR=AP%NPAR NFPR=AP%NFPR NPARU=NPAR-AP%NPARI IF(NDIM==NDM)THEN CALL ICPS(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) RETURN ENDIF ! Generate the function. ALLOCATE(F(NDM),DFU(NDM,NDM),DFP(NDM,NPAR)) CALL FNPS(AP,NDM,U,UOLD,ICP,PAR,2,F,DFU,DFP) ! (5) int_0^1 h(x,p) dt = 0 ! (13c) int_0^1 ||phi_1^*||^2 dt + ||phi_3^*||^2 - a = 0 ! (phi_2^*=0 because of periodic BCs) FI(1)=0.d0 FI(NINT)=PAR(NPARU+1)**2-PAR(NPARU+2) DO I=1,NDM FI(1)=FI(1)+(U(I)-UOLD(I))*UPOLD(I) FI(NINT)=FI(NINT)+U(NDM+I)**2 ENDDO IF((ISW.EQ.2).OR.(ISW.LT.0)) THEN ! ** Non-generic and/or start ! (18) int_0^1 h(x,p) dt + b phi_3^* = 0 FI(1)=FI(1)+PAR(NPARU+3)*PAR(NPARU+1) ENDIF ! (13b) int_0^1 -f_p(x,p)^T phi_1^* dt = 0 (h_p=0) DO I=1,2 FI(1+I)=0.d0 DO J=1,NDM FI(1+I)=FI(1+I)-DFP(J,ICP(I))*U(NDM+J) ENDDO ENDDO IF(ISW<0) THEN ! ** start ! (15b) int_0^1 -f(x,p)^T phi_1^* dt + c_1 q + c_2 r = 0 DO I=1,2 FI(1+I)=FI(1+I)+PAR(NPARU+8)*PAR(NPARU+3+I)+& PAR(NPARU+9)*PAR(NPARU+5+I) ENDDO ! (9a) int_0^1 h_x(x,p)v dt = 0 ! (9b) int_0^1 h_x(x,p)w dt = 0 ! (10a) int_0^1 dt + - 1 = 0 ! (10b) int_0^1 dt + - 1 = 0 ! (11a) int_0^1 dt + = 0 ! (11b) int_0^1 dt + = 0 FI(4)=0.d0 FI(5)=0.d0 FI(6)=PAR(NPARU+4)*UOLD(NDIM+6)+PAR(NPARU+5)*UOLD(NDIM+7)-1.d0 FI(7)=PAR(NPARU+6)*UOLD(NDIM+8)+PAR(NPARU+7)*UOLD(NDIM+9)-1.d0 FI(8)=PAR(NPARU+4)*UOLD(NDIM+8)+PAR(NPARU+5)*UOLD(NDIM+9) FI(9)=PAR(NPARU+6)*UOLD(NDIM+6)+PAR(NPARU+7)*UOLD(NDIM+7) DO I=1,NDM FI(4)=FI(4)+U(2*NDM+I)*UPOLD(I) FI(5)=FI(5)+U(3*NDM+I)*UPOLD(I) FI(6)=FI(6)+U(2*NDM+I)*UOLD(2*NDM+I) FI(7)=FI(7)+U(3*NDM+I)*UOLD(3*NDM+I) FI(8)=FI(8)+U(2*NDM+I)*UOLD(3*NDM+I) FI(9)=FI(9)+U(3*NDM+I)*UOLD(2*NDM+I) ENDDO ENDIF IF(IJAC.EQ.0)THEN DEALLOCATE(F,DFU,DFP) RETURN ENDIF ! Generate the Jacobian. ! derivatives for (5) int_0^1 h(x,p) dt = 0 DINT(1,1:NDM)=UPOLD(1:NDM) DINT(1,NDM+1:NDIM)=0 ! derivatives for (13c) int_0^1 ||phi_1^*||^2 dt + ||phi_3^*||^2 - a = 0 DINT(NINT,1:NDM)=0d0 DINT(NINT,NDM+1:2*NDM)=2*U(NDM+1:2*NDM) DINT(NINT,2*NDM+1:NDIM)=0 ! derivatives for (13b) int_0^1 -f_p(x,p)^T phi_1^* dt = 0 DO I=1,2 ! DINT(1+I,1:NDM) determined by finite differences DINT(1+I,NDM+1:2*NDM)=-DFP(1:NDM,ICP(I)) DINT(1+I,2*NDM+1:NDIM)=0 ENDDO IF(ISW<0)THEN ! Derivatives for (9a)-(11b) (see below) DINT(4:9,1:NDIM)=0 DINT(4,2*NDM+1:3*NDM)=UPOLD(1:NDM) DINT(5,3*NDM+1:4*NDM)=UPOLD(1:NDM) DINT(6,2*NDM+1:3*NDM)=UOLD(2*NDM+1:3*NDM) DINT(7,3*NDM+1:4*NDM)=UOLD(3*NDM+1:4*NDM) DINT(8,2*NDM+1:3*NDM)=UOLD(3*NDM+1:4*NDM) DINT(9,3*NDM+1:4*NDM)=UOLD(2*NDM+1:3*NDM) ENDIF UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(DFP0(NDM,2),DFP1(NDM,2)) IF(IJAC/=1)THEN DFP0(:,1)=DFP(:,ICP(1)) DFP0(:,2)=DFP(:,ICP(2)) ENDIF DO I=1,NDM ! derivatives for (13b) int_0^1 -f_p(x,p)^T phi_1^* dt = 0 (h_p=0) UU=U(I) U(I)=UU-EP CALL FNPS(AP,NDM,U,UOLD,ICP,PAR,2,F,DFU,DFP) DFP1(:,1)=DFP(:,ICP(1)) DFP1(:,2)=DFP(:,ICP(2)) U(I)=UU+EP CALL FNPS(AP,NDM,U,UOLD,ICP,PAR,2,F,DFU,DFP) U(I)=UU DO J=1,2 DINT(J+1,I)=0 DO K=1,NDM DINT(J+1,I)=DINT(J+1,I)-U(NDM+K)*(DFP(K,ICP(J))-DFP1(K,J))/(2*EP) ENDDO ENDDO ENDDO DEALLOCATE(DFP1) IF(IJAC.EQ.1)THEN DEALLOCATE(F,DFU,DFP,DFP0) RETURN ENDIF DINT(1:NINT,NDIM+NPARU+1:NDIM+NPAR)=0d0 IF(ISW==2.OR.ISW<0)THEN ! ** Non-generic and/or start DINT(1,NDIM+NPARU+3)=PAR(NPARU+1) ! d(18)/db DINT(1,NDIM+NPARU+1)=PAR(NPARU+3) ! d(18)/dphi_3^* ENDIF ! derivatives for (13c) int_0^1 ||phi_1^*||^2 dt + ||phi_3^*||^2 - a = 0 DINT(NINT,NDIM+NPARU+1)=2*PAR(NPARU+1) DINT(NINT,NDIM+NPARU+2)=-1 IF(ISW<0) THEN ! ** start ! derivatives for (15b) int_0^1 -f(x,p)^T phi_1^* dt + c_1 q + c_2 r = 0 DO I=1,2 DINT(1+I,NDIM+NPARU+3+I)=PAR(NPARU+8) DINT(1+I,NDIM+NPARU+8)=PAR(NPARU+3+I) DINT(1+I,NDIM+NPARU+5+I)=PAR(NPARU+9) DINT(1+I,NDIM+NPARU+9)=PAR(NPARU+5+I) ENDDO ! derivatives for (10a)-(11b) DINT(6,NDIM+NPARU+4)=UOLD(NDIM+6) DINT(6,NDIM+NPARU+5)=UOLD(NDIM+7) DINT(7,NDIM+NPARU+6)=UOLD(NDIM+8) DINT(7,NDIM+NPARU+7)=UOLD(NDIM+9) DINT(8,NDIM+NPARU+4)=UOLD(NDIM+8) DINT(8,NDIM+NPARU+5)=UOLD(NDIM+9) DINT(9,NDIM+NPARU+6)=UOLD(NDIM+6) DINT(9,NDIM+NPARU+7)=UOLD(NDIM+7) ENDIF DO I=1,NFPR IF(ICP(I)>=NPARU)CYCLE ! derivatives for (13b) int_0^1 -f_p(x,p)^T phi_1^* dt = 0 (h_p=0) P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FNPS(AP,NDM,U,UOLD,ICP,PAR,2,F,DFU,DFP) DO J=1,2 DINT(J+1,NDIM+ICP(I))=0d0 DO K=1,NDM DINT(J+1,NDIM+ICP(I))=DINT(J+1,NDIM+ICP(I))-U(NDM+K)* & (DFP(K,ICP(J))-DFP0(K,J))/EP ENDDO ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(F,DFU,DFP,DFP0) END SUBROUTINE ICPBP ! ---------- ------- SUBROUTINE STPNPBP(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE IO USE MESH ! Generates starting data for the 2-parameter continuation of BP ! on a branch of periodic solutions. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local INTEGER ICPRS(11) DOUBLE PRECISION RLDOTRS(11),RVDOT(2) DOUBLE PRECISION, ALLOCATABLE :: UPST(:,:),UDOTPST(:,:) DOUBLE PRECISION, ALLOCATABLE :: VDOTPST(:,:) DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER NDIM,ISW,NDM,NFPR,ITPRS,NDIMRD,NPAR TYPE(AUTOPARAMETERS) AP2 NDIM=AP%NDIM ISW=AP%ISW NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR IF(ISW>0) THEN ! ** restart CALL STPNBV(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) RETURN ENDIF ALLOCATE(UPSR(NDIM,0:NCOLRS*NTSR),UDOTPSR(NDIM,0:NCOLRS*NTSR), & TMR(0:NTSR)) ! Start ! ** allocation ALLOCATE(UPST(NDM,0:NTSR*NCOLRS),UDOTPST(NDM,0:NTSR*NCOLRS)) ALLOCATE(VDOTPST(NDM,0:NTSR*NCOLRS)) ! ** read the std branch CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOTRS,UPST, & UDOTPST,TMR,ITPRS,NDM) ! Compute the second null vector ! ** redefine IAP AP2=AP AP2%NDIM=NDM AP2%NTST=NTSR AP2%NCOL=NCOLRS AP2%NBC=NDM AP2%NINT=1 AP2%NFPR=2 CALL STSDRBV(AP2,PAR,ICPRS,FNPBP,BCPBP,ICPBP, & RLDOTRS,UPST,UDOTPST,TMR,VDOTPST,RVDOT) ! ** init UPS,PAR UPSR(1:NDM,:)=UPST(:,:) UPSR(NDM+1:2*NDM,:)=0.d0 UPSR(2*NDM+1:3*NDM,:)=UDOTPST(:,:) UPSR(3*NDM+1:4*NDM,:)=VDOTPST(:,:) UDOTPSR(:,:)=0.d0 ! ** init phi^*_3,a,b,q,r,c1,c2 PAR(NPAR-9+1:NPAR-9+3)=0.d0 PAR(NPAR-9+4:NPAR-9+5)=RLDOTRS(1:2) PAR(NPAR-9+6:NPAR-9+7)=RVDOT(1:2) PAR(NPAR-9+8:NPAR-9+9)=0.d0 RLDOT(1:3)=0.d0 RLDOT(4)=1.d0 RLDOT(5:11)=0.d0 DEALLOCATE(UPST,UDOTPST,VDOTPST) NODIR=0 CALL ADAPT2(NTSR,NCOLRS,NDIM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNPBP !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Period Doubling Bifurcations !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNPD(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE ::DFU(:,:),FF1(:),FF2(:) INTEGER NDM,NFPR,I,J,NPAR DOUBLE PRECISION UMX,EP,P,UU,DUMDP(1) NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ! Generate the function. CALL FFPD(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP) IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DFDU(1:NDM,1:NDM)=PAR(11)*DFDU(1:NDM,1:NDM) DFDU(1:NDM,NDM+1:2*NDM)=0 DFDU(NDM+1:2*NDM,NDM+1:2*NDM)=DFDU(1:NDM,1:NDM) ALLOCATE(DFU(NDM,NDM),FF1(NDIM),FF2(NDIM)) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFPD(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP) U(I)=UU+EP CALL FFPD(AP,U,UOLD,ICP,PAR,0,FF2,NDM,DFU,DUMDP) U(I)=UU DO J=NDM+1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF DO I=1,NFPR IF(ICP(I)==NPAR)THEN DFDP(:,ICP(I))=0 ELSEIF(ICP(I)==11)THEN DFDP(1:NDIM,11)=F(1:NDIM)/PAR(11) ELSE DFDP(1:NDM,ICP(I))=PAR(11)*DFDP(1:NDM,ICP(I)) P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFPD(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP) DO J=NDM+1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDIF ENDDO DEALLOCATE(FF1,DFU) END SUBROUTINE FNPD ! ---------- ---- SUBROUTINE FFPD(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(2*NDM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) ! Local INTEGER I,J DOUBLE PRECISION PERIOD PERIOD=PAR(11) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,MAX(IJAC,1),F,DFDU,DFDP) DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(I,J)*U(NDM+J) ENDDO F(I)=PERIOD*F(I) F(NDM+I)=PERIOD*F(NDM+I) ENDDO END SUBROUTINE FFPD ! ---------- ---- SUBROUTINE BCPD(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) USE BVP, ONLY: IRTN, NRTN USE SUPPORT, ONLY : PI ! Generate boundary conditions for the 2-parameter continuation ! of period doubling bifurcations. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER NDM,NPAR,NN,I,J NDM=AP%NDM DO I=1,NDM F(I)=U0(I)-U1(I) F(NDM+I)=U0(NDM+I)+U1(NDM+I) ENDDO ! Rotations IF(IRTN.NE.0)THEN DO I=1,NDM IF(NRTN(I).NE.0)F(I)=F(I) + PI(2.d0)*NRTN(I) ENDDO ENDIF IF(IJAC.EQ.0)RETURN NPAR=AP%NPAR NN=2*NDIM+NPAR DO I=1,NBC DO J=1,NN DBC(I,J)=0.d0 ENDDO ENDDO DO I=1,NDIM DBC(I,I)=1 IF(I.LE.NDM) THEN DBC(I,NDIM+I)=-1 ELSE DBC(I,NDIM+I)=1 ENDIF ENDDO END SUBROUTINE BCPD ! ---------- ---- SUBROUTINE ICPD(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER NDM,NPAR,NN,I,J NDM=AP%NDM NPAR=AP%NPAR F(1)=0.d0 F(2)=-PAR(NPAR) DO I=1,NDM F(1)=F(1)+(U(I)-UOLD(I))*UPOLD(I) F(2)=F(2)+U(NDM+I)*U(NDM+I) ENDDO IF(IJAC.EQ.0)RETURN NN=NDIM+NPAR DO I=1,NINT DO J=1,NN DINT(I,J)=0.d0 ENDDO ENDDO DO I=1,NDM DINT(1,I)=UPOLD(I) DINT(2,NDM+I)=2.d0*U(NDM+I) ENDDO DINT(2,NDIM+NPAR)=-1.d0 END SUBROUTINE ICPD ! ---------- ------ SUBROUTINE STPNPD(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE IO USE MESH ! Generates starting data for the 2-parameter continuation of ! period-doubling bifurcations on a branch of periodic solutions. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER ICPRS(4),NDIM,NDM,NDIMRD,ITPRS,NPAR NDIM=AP%NDIM NDM=AP%NDM NPAR=AP%NPAR ALLOCATE(UPSR(NDM,0:NCOLRS*NTSR),UDOTPSR(NDM,0:NCOLRS*NTSR), & TMR(0:NTSR)) CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOT,UPSR, & UDOTPSR,TMR,ITPRS,NDM) ! Complement starting data PAR(NPAR)=0.d0 NODIR=0 CALL ADAPT2(NTSR,NCOLRS,NDM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNPD !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Torus Bifurcations !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNTR(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-parameter continuation of ! torus bifurcations. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE ::DFU(:,:),FF1(:),FF2(:) INTEGER NDM,NFPR,NPAR,I,J DOUBLE PRECISION EP,UMX,P,UU,DUMDP(1) NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ! Generate the function. CALL FFTR(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP) IF(IJAC.EQ.0)RETURN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DFDU(1:NDM,1:NDM)=PAR(11)*DFDU(1:NDM,1:NDM) DFDU(1:NDM,NDM+1:3*NDM)=0 DFDU(NDM+1:2*NDM,NDM+1:2*NDM)=DFDU(1:NDM,1:NDM) DFDU(NDM+1:2*NDM,2*NDM+1:3*NDM)=0 DFDU(2*NDM+1:3*NDM,NDM+1:2*NDM)=0 DFDU(2*NDM+1:3*NDM,2*NDM+1:3*NDM)=DFDU(1:NDM,1:NDM) ALLOCATE(FF1(NDIM),FF2(NDIM),DFU(NDM,NDM)) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFTR(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP) U(I)=UU+EP CALL FFTR(AP,U,UOLD,ICP,PAR,0,FF2,NDM,DFU,DUMDP) U(I)=UU DO J=NDM+1,3*NDM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF DO I=1,NFPR IF(ICP(I)==12.OR.ICP(I)==NPAR)THEN DFDP(:,ICP(I))=0 ELSEIF(ICP(I)==11)THEN DFDP(1:NDIM,11)=F(1:NDIM)/PAR(11) ELSE DFDP(1:NDM,ICP(I))=PAR(11)*DFDP(1:NDM,ICP(I)) P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFTR(AP,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP) DO J=NDM+1,3*NDM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDIF ENDDO DEALLOCATE(FF1,DFU) END SUBROUTINE FNTR ! ---------- ---- SUBROUTINE FFTR(AP,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(*),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDM*3) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,*),DFDP(NDM,*) ! Local INTEGER NDM2,I,J DOUBLE PRECISION PERIOD PERIOD=PAR(11) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,MAX(IJAC,1),F,DFDU,DFDP) NDM2=2*NDM DO I=1,NDM F(NDM+I)=0.d0 F(NDM2+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(I,J)*U(NDM+J) F(NDM2+I)=F(NDM2+I)+DFDU(I,J)*U(NDM2+J) ENDDO F(NDM+I)=PERIOD*F(NDM+I) F(NDM2+I)=PERIOD*F(NDM2+I) F(I)=PERIOD*F(I) ENDDO END SUBROUTINE FFTR ! ---------- ---- SUBROUTINE BCTR(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) USE BVP, ONLY: IRTN, NRTN USE SUPPORT, ONLY : PI TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) INTEGER NDM,NDM2,NN,NPAR,I,J DOUBLE PRECISION THETA,SS,CS NDM=AP%NDM NPAR=AP%NPAR NDM2=2*NDM THETA=PAR(12) SS=SIN(THETA) CS=COS(THETA) DO I=1,NDM F(I)=U0(I)-U1(I) F(NDM+I)= U1(NDM+I) -CS*U0(NDM+I) +SS*U0(NDM2+I) F(NDM2+I)=U1(NDM2+I)-CS*U0(NDM2+I)-SS*U0(NDM+I) ENDDO ! Rotations IF(IRTN.NE.0)THEN DO I=1,NDM IF(NRTN(I).NE.0)F(I)=F(I) + PI(2.d0)*NRTN(I) ENDDO ENDIF IF(IJAC.EQ.0)RETURN NN=2*NDIM+NPAR DO I=1,NBC DO J=1,NN DBC(I,J)=0.d0 ENDDO ENDDO DO I=1,NDM DBC(I,I)=1 DBC(I,NDIM+I)=-1 DBC(NDM+I,NDM+I)=-CS DBC(NDM+I,NDM2+I)=SS DBC(NDM+I,NDIM+NDM+I)=1 DBC(NDM+I,2*NDIM+12)=CS*U0(NDM2+I)+SS*U0(NDM+I) DBC(NDM2+I,NDM+I)=-SS DBC(NDM2+I,NDM2+I)=-CS DBC(NDM2+I,NDIM+NDM2+I)=1 DBC(NDM2+I,2*NDIM+12)=SS*U0(NDM2+I)-CS*U0(NDM+I) ENDDO END SUBROUTINE BCTR ! ---------- ---- SUBROUTINE ICTR(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER NDM,NDM2,NN,NPAR,I,J NDM=AP%NDM NPAR=AP%NPAR NDM2=2*NDM F(1)=0.d0 F(2)=0.d0 F(3)=-PAR(NPAR) DO I=1,NDM F(1)=F(1)+(U(I)-UOLD(I))*UPOLD(I) F(2)=F(2)+U(NDM+I)*UOLD(NDM2+I)-U(NDM2+I)*UOLD(NDM+I) F(3)=F(3)+U(NDM+I)*U(NDM+I) +U(NDM2+I)*U(NDM2+I) ENDDO IF(IJAC.EQ.0)RETURN NN=NDIM+NPAR DO I=1,NINT DO J=1,NN DINT(I,J)=0.d0 ENDDO ENDDO DO I=1,NDM DINT(1,I)=UPOLD(I) DINT(2,NDM+I)=UOLD(NDM2+I) DINT(2,NDM2+I)=-UOLD(NDM+I) DINT(3,NDM+I)=2*U(NDM+I) DINT(3,NDM2+I)=2*U(NDM2+I) ENDDO DINT(3,NDIM+NPAR)=-1 END SUBROUTINE ICTR ! ---------- ------ SUBROUTINE STPNTR(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE IO USE MESH USE AUTO_CONSTANTS, ONLY: TY ! Generates starting data for the 2-parameter continuation of torus ! bifurcations. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local DOUBLE PRECISION T,DT,THETA INTEGER ICPRS(4),NDIM,NDM,NPAR,NDIMRD,ITPRS,I,J,K DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) NDIM=AP%NDIM NDM=AP%NDM NPAR=AP%NPAR ALLOCATE(UPSR(NDIM,0:NCOLRS*NTSR),UDOTPSR(NDIM,0:NCOLRS*NTSR), & TMR(0:NTSR)) CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOT,UPSR, & UDOTPSR,TMR,ITPRS,NDIM) T=0.d0 DT=0.d0 IF(LEN_TRIM(TY)>2)THEN READ(TY(3:),'(I5)')I PAR(12)=PAR(I) ENDIF THETA=PAR(12) DO I=0,NTSR*NCOLRS IF(MOD(I,NCOLRS)==0)THEN J=I/NCOLRS T=TMR(J) IF(JP0V, P1=>P1V, EV=>EVV TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=FNCSBV(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) IF(ITEST==3)THEN Q=FNSPBV(AP,PAR,ATYPE,P0,P1,EV) ENDIF END FUNCTION FNCSPS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNSPBV(AP,PAR,ATYPE,P0,P1,EV) USE FLOQUET USE SUPPORT, ONLY: PI, LBTYPE, CHECKSP, NULLVC ! This function returns a quantity that changes sign when a complex ! pair of eigenvalues of the linearized Poincare map moves in or out ! of the unit circle or when a real eigenvalues passes through -1. TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: P0(AP%NDIM,*),P1(AP%NDIM,*) COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: EV(*) ! Local COMPLEX(KIND(1.0D0)) ZINS,ZTMP INTEGER ISP,ISW,IID,IBR,NTOT,NTOP,I,J,L,LOC,NINS,NINS1,NDIM,NDM,ITMP,SKIP DOUBLE PRECISION D,AMIN,AZM1,AZINS,tol,V,THETA DOUBLE PRECISION, ALLOCATABLE :: Q0(:,:),Q1(:,:),U(:) INTEGER, ALLOCATABLE :: IC(:),IR(:),IRPIV(:) NDIM=AP%NDIM NDM=AP%NDM ISP=AP%ISP ISW=AP%ISW IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 ! Initialize. FNSPBV=0.d0 AP%SPBF=FNSPBV D=0.d0 ATYPE='' IF(ISP==0)RETURN IF(IID.GE.4)THEN CALL EVECS(NDIM,P0,P1,.FALSE.) ENDIF IF(NDIM>NDM)THEN ! on loci we can take the eigenvalues of the lower right hand ! block; however, the rows of P0 and P1 are a linear combination wrt ! those corresponding to the original coordinates ! (Q 0) ! (* Q) (for PD and LP continuations) ! or ! (Q 0) ! (* -Q^T) (for BP continuations) ! or ! (Q 0 0) ! (* Q 0) (for TR continuations) ! (* 0 Q) ! any combination of rows from the right hand block that is invertible ! suffices though, ! so we swap rows according to the echelon form obtained from NULLVC ALLOCATE(Q1(NDIM,NDM),IC(NDM),IRPIV(NDM),U(NDM)) Q1(:,:)=P1(:,NDIM-NDM+1:NDIM) CALL NULLVC(NDIM,NDM,0,Q1,U,IC,IRPIV) DEALLOCATE(Q1,IC,U) ALLOCATE(Q0(NDM,NDM),Q1(NDM,NDM),IR(NDIM)) ! swap rows in IR according to IRPIV DO I=1,NDIM IR(I)=I ENDDO DO I=1,NDM J=IRPIV(I) IF(J/=I)THEN ITMP=IR(J) IR(J)=IR(I) IR(I)=ITMP ENDIF ENDDO IF(AP%ITPST==6)THEN ! BP cont: took negative of transpose (adjoint variational ! equation) in flow: swap P0/P1 ! EVECS then needs the left eigenvector DO I=1,NDM Q0(I,:)=P1(IR(I),NDIM-NDM+1:NDIM) Q1(I,:)=P0(IR(I),NDIM-NDM+1:NDIM) ENDDO ELSE DO I=1,NDM Q0(I,:)=P0(IR(I),NDIM-NDM+1:NDIM) Q1(I,:)=P1(IR(I),NDIM-NDM+1:NDIM) ENDDO ENDIF IF(IID.GE.4)THEN CALL EVECS(NDM,Q0,Q1,AP%ITPST==6) ENDIF ! Compute the Floquet multipliers CALL FLOWKM(NDM, Q0, Q1, IID, EV) DEALLOCATE(Q0,Q1,IR,IRPIV) ELSE IF(IID.GE.4)THEN CALL EVECS(NDIM,P0,P1,.FALSE.) ENDIF ! Compute the Floquet multipliers CALL FLOWKM(NDM, P0, P1, IID, EV) ENDIF ! The algorithm in FLOWKM causes the first multiplier to be closest to z=1. L=1 IF(AP%ITPST==5.OR.AP%ITPST==7)THEN ! Find the remaining multiplier closest to z=1/-1 on PD/LP curves ! to be able to detect 1:1 and 1:2 resonances. L=2 IF(AP%ITPST==7)THEN ! For PD: Find the multiplier closest to z=-1. V=-1.d0 ELSE ! For LP: Find the multiplier closest to z=-1. V=1.d0 ENDIF AMIN=HUGE(1.d0) LOC=2 DO J=2,NDM IF(EV(J)==CMPLX( HUGE(1.0D0), HUGE(1.0D0), KIND(1.0D0) ))CYCLE AZM1= ABS( EV(J) - V ) IF(AZM10)THEN ! complex number: shift by two to insert the pair SKIP=1 ENDIF DO WHILE(J>L+1) ZTMP=EV(J-1) IF(AIMAG(ZTMP)<=0)THEN ! ignore a+bi for comparison (preceeded by a-bi, counting down) IF(ABS(ABS(ZTMP) - 1.d0)<=AZINS)EXIT ENDIF EV(J+SKIP)=ZTMP J=J-1 ENDDO EV(J+SKIP)=CMPLX( REAL(ZINS), -AIMAG(ZINS) ) ! overwritten for real numbers EV(J)=ZINS ENDDO ENDIF ATYPE=TPSPBV(NDM,AP%EPSS,AP%ITPST,PAR,AP%NPAR,EV,THETA) IF(.NOT.CHECKSP(ATYPE,AP%IPS,AP%ILP,ISP)) ATYPE='' IF(ATYPE=='TR') PAR(12)=THETA !try to find TR bif ! Print error message if the Floquet multiplier at z=1 is inaccurate. ! (ISP is set to negative and detection of bifurations is discontinued) AMIN= ABS( EV(1) - 1.d0 ) IF(AMIN>5.0D-2 .AND. LEN_TRIM(ATYPE)>0) THEN NINS=0 AP%NINS=NINS ISP=-ISP AP%ISP=ISP IF(IID>0)THEN IF(IID.GE.2)WRITE(9,101)ABS(IBR),NTOP+1 DO I=1,NDM WRITE(9,105)ABS(IBR),NTOP+1,I,EV(I) ENDDO WRITE(9,104)ABS(IBR),NTOP+1,NINS ENDIF RETURN ENDIF ! Restart automatic detection if the Floquet multiplier at z=1 is ! sufficiently accurate again. IF(ISP.LT.0)THEN IF(AMIN.LT.1.0E-2)THEN IF(IID>0)WRITE(9,102)ABS(IBR),NTOP+1 ISP=-ISP AP%ISP=ISP ELSE IF(IID>0)THEN DO I=1,NDM WRITE(9,105)ABS(IBR),NTOP+1,I,EV(I),ABS(EV(I)) ENDDO ENDIF RETURN ENDIF ENDIF ! Count the number of Floquet multipliers inside the unit circle. ! ! Set tolerance for deciding if a multiplier is outside |z=1|. ! Use, for example, tol=1d-3 for conservative systems. tol=1.d-5 NINS1=1 IF(NDM>1) THEN DO I=2,NDM IF(EV(I)==CMPLX( HUGE(1.0D0), HUGE(1.0D0), KIND(1.0D0) ))CYCLE IF( ABS(EV(I)).LE.(1.d0+tol))NINS1=NINS1+1 ENDDO IF(LEN_TRIM(ATYPE)>0)THEN IF(ISW.EQ.2)THEN IF(AP%ITPST==8)THEN ! check the angle for resonances on Torus bifurcations THETA=PAR(12) D=THETA*(THETA-PI(.5d0))*(THETA-PI(2d0/3))*(THETA-PI(1d0)) ELSEIF(NDM>2)THEN IF(ABS(AIMAG(EV(3)))0.AND. & ABS( EV(2)-1.d0 )<5.0d-2).OR. & ((AP%ITPST==7.AND.REAL(EV(3))<0.AND. & ABS( EV(2)+1.d0 )<5.0d-2))))THEN ! On LP curve: look for 1:1 resonance ! On PD curve: look for 1:2 resonance D= ABS(EV(3)) - 1.d0 ENDIF ENDIF ELSE IF(AIMAG(EV(2))/=0.d0 .OR. REAL(EV(2))<0.d0)THEN ! *Ignore if second multiplier is real positive D= ABS(EV(2)) - 1.d0 ENDIF ENDIF ENDIF ENDIF IF( LEN_TRIM(ATYPE)>0 .AND. IID>=2 ) WRITE(9,103)ABS(IBR),NTOP+1,D FNSPBV=D AP%SPBF=FNSPBV NINS=AP%NINS IF(LEN_TRIM(ATYPE)>0)THEN IF(NINS1==NINS.AND.AP%ITPST/=8)ATYPE=TRIM(ATYPE)//'0' ENDIF NINS=NINS1 AP%NINS=NINS IF(IID>0)THEN ! Print the Floquet multipliers. WRITE(9,104)ABS(IBR),NTOP+1,NINS DO I=1,NDM IF(EV(I)==CMPLX( HUGE(1.0D0), HUGE(1.0D0), KIND(1.0D0) ))THEN WRITE(9,105)ABS(IBR),NTOP+1,I,EV(I),REAL(EV(I)) ELSE WRITE(9,105)ABS(IBR),NTOP+1,I,EV(I),ABS(EV(I)) ENDIF ENDDO ENDIF 101 FORMAT(I4,I6,' NOTE:Multiplier inaccurate') 102 FORMAT(I4,I6,' NOTE:Multiplier accurate again') 103 FORMAT(I4,I6,9X,'SPB Function ',ES14.5) 104 FORMAT(I4,I6,9X,'Multipliers: Stable:',I4) 105 FORMAT(I4,I6,9X,'Multiplier',I3,1X,2ES14.5, & ' Abs. Val.',ES14.5) END FUNCTION FNSPBV ! ------------ -------- ------ CHARACTER(2) FUNCTION TPSPBV(NDM,EPSS,ITPST,PAR,NPAR,EV,THETA) ! Determines type of secondary periodic bifurcation. USE SUPPORT, ONLY: PI INTEGER, INTENT(IN) :: NDM,ITPST,NPAR DOUBLE PRECISION, INTENT(IN) :: EPSS DOUBLE PRECISION, INTENT(INOUT) :: PAR(NPAR) DOUBLE PRECISION, INTENT(OUT) :: THETA COMPLEX(KIND(1.0D0)), INTENT(IN) :: EV(NDM) INTEGER LOC,LOC1,I DOUBLE PRECISION AMIN,AZM1,D,AD THETA=0 IF(NDM<=2)THEN ! None of these bifurcations occur for flat systems. TPSPBV='' RETURN ENDIF IF(ITPST==5)THEN ! 1:1 resonance TPSPBV='R1' RETURN ELSEIF(ITPST==7)THEN ! 1:2 resonance TPSPBV='R2' RETURN ELSEIF(ITPST==8)THEN TPSPBV='' SELECT CASE(NINT(PAR(12)*6/PI(1d0))) CASE(0) ! 1:1 res TPSPBV='R1' CASE(3) ! 1:4 res TPSPBV='R4' CASE(4) ! 1:3 res TPSPBV='R3' CASE(6) ! 1:2 res TPSPBV='R2' END SELECT RETURN ENDIF ! Find the eigenvalue closest to z=1. LOC=1 AMIN=HUGE(1.d0) DO I=1,NDM AZM1= ABS( EV(I) - 1.d0 ) IF(AZM1.LE.AMIN)THEN AMIN=AZM1 LOC=I ENDIF ENDDO ! Find the eigenvalue closest to the unit circle ! (excluding the eigenvalue at z=1). LOC1=1 AMIN=HUGE(1.d0) DO I=1,NDM IF(I.NE.LOC)THEN D= ABS(EV(I)) - 1.d0 AD=ABS(D) IF(AD.LE.AMIN)THEN AMIN=AD LOC1=I ENDIF ENDIF ENDDO IF(ABS(AIMAG(EV(LOC1))).GT.SQRT(EPSS))THEN ! ** torus bifurcation TPSPBV='TR' THETA=ABS(ATAN2(AIMAG(EV(LOC1)),REAL(EV(LOC1)))) ELSE IF(REAL(EV(LOC1)).LT.-.5d0)THEN ! ** period doubling TPSPBV='PD' ELSE ! ** something else... TPSPBV='' ENDIF END FUNCTION TPSPBV ! ---------- ----- SUBROUTINE EVECS(NDIM,P0,P1,TRANS) USE SUPPORT INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: P0(NDIM,*),P1(NDIM,*) LOGICAL, INTENT(IN) :: TRANS ! Local DOUBLE PRECISION, ALLOCATABLE :: Q0(:,:),Q1(:,:),P(:,:),Z(:,:),WR(:),WI(:) DOUBLE PRECISION, ALLOCATABLE :: WORK(:) INTEGER I,J,IERR,LWORK DOUBLE PRECISION DET,WORKINFO(1) CHARACTER(1) JOBVL,JOBVR ALLOCATE(Q0(NDIM,NDIM), Q1(NDIM,NDIM), P(NDIM,NDIM)) ALLOCATE(Z(NDIM,NDIM), WR(NDIM), WI(NDIM)) DO I=1,NDIM DO J=1,NDIM Q0(I,J)=-P0(I,J) Q1(I,J)= P1(I,J) ENDDO ENDDO CALL GEL(NDIM,Q1,NDIM,P,Q0,DET) IF(TRANS)THEN JOBVL='V' JOBVR='N' ELSE JOBVL='N' JOBVR='V' ENDIF CALL DGEEV(JOBVL,JOBVR,NDIM,P,NDIM,WR,WI,Z,NDIM,Z,NDIM,WORKINFO,-1,IERR) LWORK=NINT(WORKINFO(1)) ALLOCATE(WORK(LWORK)) CALL DGEEV(JOBVL,JOBVR,NDIM,P,NDIM,WR,WI,Z,NDIM,Z,NDIM,WORK,LWORK,IERR) DEALLOCATE(WORK) WRITE(9,100) WRITE(9,101) DO I=1,NDIM WRITE(9,102)WR(I),WI(I),(Z(I,J),J=1,NDIM) ENDDO WRITE(9,101) 100 FORMAT(" Multipliers + eigenvectors obtained from - P1^-1 P0 :") 101 FORMAT(" ") 102 FORMAT(2ES14.5," | ",8ES14.5) DEALLOCATE(Q0,Q1,P,Z,WR,WI) END SUBROUTINE EVECS END MODULE PERIODIC auto/07p/src/toolboxbv.f900000640000175000017500000012047513570013207013400 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of general BVPs ! (incl. BPs and Folds) !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE TOOLBOXBV USE AUTO_CONSTANTS, ONLY : AUTOPARAMETERS USE INTERFACES USE BVP USE SUPPORT IMPLICIT NONE PRIVATE PUBLIC :: INITBVP,AUTOBVP,STPNBV,STPNBV1,FNCSBV,FNBLF,BCBLF,ICBLF,STPNBL DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ------- SUBROUTINE INITBVP(AP,ICP) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER I, ISW, ITP, NDIM, NBC, NINT, NFPR, NXP, NPAR ISW = AP%ISW ITP = AP%ITP NDIM = AP%NDIM NBC = AP%NBC NINT = AP%NINT NPAR = AP%NPAR ! Two-Parameter Continuation for IPS=4 or IPS=7. IF(ABS(ISW)==2.AND.(ITP==5.OR.(ABS(ITP)/10)==5))THEN ! ** Continuation of folds (BVP; start/restart) NDIM=2*NDIM NBC=2*NBC NINT=2*NINT+1 NFPR=NBC+NINT-NDIM+1 DO I=2,NFPR/2 ICP(NFPR/2+I)=NPAR+I-1 ENDDO ! PAR(NPAR+NFPR/2) contains a norm AP%NPARI=NFPR/2 IF(ITP==5)THEN ! ** Continuation of folds (BVP; start) ICP(NFPR/2+1)=NPAR+NFPR/2 AP%ISW=-2 ENDIF ENDIF IF(ABS(ISW)>=2.AND.(ITP==6.OR.ABS(ITP)/10==6)) THEN ! ** BP cont (BVP, start and restart) (by F. Dercole). NXP=NBC+NINT-NDIM+1 DO I=1,NXP+NDIM-1 ICP(NXP+I+2)=NPAR+I ! psi^*_2,psi^*_3 ENDDO DO I=1,NXP ICP(2*NXP+NDIM+I+1)=NPAR+NXP+NDIM+I ! d ENDDO IF(ITP==6)THEN ! ** BP cont (BVP; start) ICP(NXP+1)=NPAR+NXP+NDIM ! a ICP(NXP+2)=NPAR+2*NXP+NDIM+1 ! b DO I=1,NXP ICP(3*NXP+NDIM+I+1)=NPAR+2*NXP+NDIM+1+I ! q ICP(4*NXP+NDIM+I+1)=NPAR+3*NXP+NDIM+1+I ! r ENDDO ICP(5*NXP+NDIM+2)=NPAR+4*NXP+NDIM+2 ! c1 ICP(5*NXP+NDIM+3)=NPAR+4*NXP+NDIM+3 ! c2 AP%NPARI=4*NXP+NDIM+3 AP%ISW=-ABS(ISW) NDIM=4*NDIM NBC=3*NBC+NDIM/2+NXP NINT=3*NINT+NXP+5 ELSE ! ** BP cont (BVP; restart 1 or 2) AP%NPARI=2*NXP+NDIM IF(ABS(ISW)==2)THEN ! ** Non-generic case ICP(NXP+2)=NPAR+2*NXP+NDIM+1 ! b AP%NPARI=AP%NPARI+1 ENDIF NDIM=2*NDIM NBC=NBC+NDIM+NXP NINT=NINT+NXP+1 ENDIF ENDIF AP%NDIM = NDIM AP%NBC = NBC AP%NINT = NINT AP%NFPR = NBC+NINT-NDIM+1 END SUBROUTINE INITBVP ! ---------- ------- SUBROUTINE AUTOBVP(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) INTEGER ISW, ITP CALL INITBVP(AP,ICP) ISW = AP%ISW ITP = AP%ITP IF(ABS(ISW)<=1)THEN ! ** Boundary value problems (here IPS=4) CALL AUTOBV(AP,ICP,ICU,FUNI,BCNI,ICNI,STPNBV,FNCSBV) ELSE ! Two-Parameter Continuation for IPS=4 or IPS=7. IF(ABS(ISW)==2)THEN IF(ITP==5)THEN ! ** Continuation of folds (BVP, start). CALL AUTOBV(AP,ICP,ICU,FNBL,BCBL,ICBL,STPNBL,FNCSBV) ELSE IF(ABS(ITP)/10==5) THEN ! ** Continuation of folds (BVP, restart). CALL AUTOBV(AP,ICP,ICU,FNBL,BCBL,ICBL,STPNBV,FNCSBV) ENDIF ENDIF IF((ITP==6.OR.(ABS(ITP)/10)==6)) THEN ! ** BP cont (BVP, start and restart) (by F. Dercole). CALL AUTOBV(AP,ICP,ICU,FNBBP,BCBBP,ICBBP,STPNBBP,FNCSBV) ENDIF ENDIF END SUBROUTINE AUTOBVP ! ---------- ------ SUBROUTINE STPNBV(AP,PAR,ICP,NTSR,NCOLRS,RLDOT, & UPS,UDOTPS,TM,NODIR) USE MESH TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR),TM(0:*) DOUBLE PRECISION, INTENT(OUT) :: UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*) INTEGER NDIM,IPS,ISW,NTST,NCOL,NDIMRD,NTSRS DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) NDIM=AP%NDIM IPS=AP%IPS ISW=AP%ISW NTST=AP%NTST NCOL=AP%NCOL IF(AP%IRS==0)THEN CALL STPNUB(AP,PAR,RLDOT,UPS,UDOTPS,TM,NODIR) RETURN ENDIF ALLOCATE(UPSR(NDIM,0:NCOLRS*NTSR),UDOTPSR(NDIM,0:NCOLRS*NTSR), & TMR(0:NTSR)) CALL STPNBV1(AP,PAR,ICP,NDIM,NTSRS,NDIMRD,NCOLRS,RLDOT, & UPSR,UDOTPSR,TMR,NODIR) CALL ADAPT2(NTSR,NCOLRS,NDIM,NTST,NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,(IPS==2.OR.IPS==12) .AND. ABS(ISW)<=1) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNBV ! ---------- ------- SUBROUTINE STPNBV1(AP,PAR,ICP,NDIM,NTSRS,NDIMRD,NCOLRS,RLDOT, & UPS,UDOTPS,TM,NODIR) USE IO ! This subroutine locates and retrieves the information required to ! restart computation at the point with label IRS. ! This information is expected on unit 3. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM INTEGER, INTENT(OUT) :: NTSRS,NCOLRS,NDIMRD,NODIR DOUBLE PRECISION, INTENT(OUT) :: UPS(*),UDOTPS(*),TM(*) DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR) ! Local INTEGER NFPR,NFPRS,ITPRS,NDIMRS,I INTEGER, ALLOCATABLE :: ICPRS(:) NFPR=AP%NFPR ALLOCATE(ICPRS(NFPR)) ICPRS(:)=0 CALL READBV(AP,PAR,ICPRS,NTSRS,NCOLRS,NDIMRD,RLDOT,UPS, & UDOTPS,TM,ITPRS,NDIM) ! Take care of the case where the free parameters have been changed at ! the restart point. NODIR=0 NFPRS=GETNFPR3() NDIMRS=GETNDIM3() IF(NFPRS.NE.NFPR.OR.NDIM.NE.NDIMRS)THEN NODIR=1 ELSE DO I=1,NFPR IF(ICPRS(I).NE.ICP(I)) THEN NODIR=1 EXIT ENDIF ENDDO ENDIF DEALLOCATE(ICPRS) END SUBROUTINE STPNBV1 ! ---------- ------ SUBROUTINE STPNUB(AP,PAR,RLDOT,UPS,UDOTPS,TM,NODIR) USE MESH USE AUTO_CONSTANTS, ONLY : DATFILE, UVALS, PARVALS, unames, parnames USE SUPPORT, ONLY: NAMEIDX, AUTOSTOP ! Generates a starting point for the continuation of a branch of ! of solutions to general boundary value problems by calling the user ! supplied subroutine STPNT where an analytical solution is given. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR) DOUBLE PRECISION, INTENT(OUT) :: TM(0:*),UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*) INTEGER NDIM,IPS,NTST,NCOL,ISW,NTSR,ios,I,J DOUBLE PRECISION TEMP,PERIOD DOUBLE PRECISION, ALLOCATABLE :: TMR(:),UPSR(:,:),UDOTPSR(:,:),U(:) NDIM=AP%NDIM IPS=AP%IPS NTST=AP%NTST NCOL=AP%NCOL ISW=AP%ISW ! Generate the (initially uniform) mesh. CALL MSH(NTST,TM) IF(DATFILE/='')THEN OPEN(3,FILE=TRIM(DATFILE),STATUS='old',ACCESS='sequential',& IOSTAT=ios) IF(ios/=0)THEN OPEN(3,FILE=TRIM(DATFILE)//'.dat',STATUS='old',& ACCESS='sequential',IOSTAT=ios) ENDIF IF(ios/=0)THEN WRITE(6,"(A,A,A)")'Datafile ',TRIM(DATFILE),' not found.' CALL AUTOSTOP() ENDIF NTSR=-1 DO READ(3,*,END=2)TEMP,(TEMP,I=1,NDIM) NTSR=NTSR+1 ENDDO 2 CONTINUE ALLOCATE(TMR(0:NTSR),UPSR(NDIM,0:NTSR),UDOTPSR(NDIM,0:NTSR),U(NDIM)) REWIND 3 DO J=0,NTSR READ(3,*)TMR(J),UPSR(:,J) ENDDO CLOSE(3) UDOTPSR(:,:)=0.d0 PERIOD=TMR(NTSR)-TMR(0) DO I=NTSR,0,-1 TMR(I)=(TMR(I)-TMR(0))/PERIOD ENDDO CALL ADAPT2(NTSR,1,NDIM,NTST,NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,(IPS==2.OR.IPS==12).AND.ABS(ISW)<=1) IF(AP%NPAR>10)THEN PAR(11)=PERIOD ENDIF CALL STPNT(NDIM,U,PAR,0d0) RLDOT(:)=0.d0 DEALLOCATE(TMR,UPSR,UDOTPSR,U) ELSE DO J=0,NTST*NCOL UPS(:,J)=0.d0 CALL STPNT(NDIM,UPS(1,J),PAR,DBLE(J)/(NTST*NCOL)) ENDDO ENDIF ! override parameter values with values from constants file DO I=1,SIZE(UVALS) UPS(NAMEIDX(UVALS(I)%INDEX,unames),0:NTST*NCOL)=UVALS(I)%VAR ENDDO DO I=1,SIZE(PARVALS) PAR(NAMEIDX(PARVALS(I)%INDEX,parnames))=PARVALS(I)%VAR ENDDO NODIR=1 END SUBROUTINE STPNUB ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSBV(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE AUTO_CONSTANTS, ONLY : NPARX USE SUPPORT, ONLY: P1=>P1V TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=0.d0 ATYPE='' SELECT CASE(ITEST) CASE(0) CALL PVLSI(AP,UPS,NDIM,PAR) CASE(1) Q=FNLPBV(AP,ATYPE) CASE(2) Q=FNBPBV(AP,ATYPE,P1) END SELECT END FUNCTION FNCSBV ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNLPBV(AP,ATYPE) USE MESH USE SOLVEBV USE SUPPORT, ONLY: CHECKSP ! RETURNS A QUANTITY THAT CHANGES SIGN AT A LIMIT POINT (BVP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE INTEGER IID,IBR,NTOT,NTOP ATYPE='' FNLPBV=0d0 IF(.NOT.CHECKSP('LP',AP%IPS,AP%ILP,AP%ISP))RETURN IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 FNLPBV=AP%FLDF IF(IID.GE.2)THEN WRITE(9,101)ABS(IBR),NTOP+1,FNLPBV ENDIF ! Set the quantity to be returned. ATYPE='LP' 101 FORMAT(I4,I6,9X,'Fold Function ',ES14.5) END FUNCTION FNLPBV ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNBPBV(AP,ATYPE,P1) USE SUPPORT TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: P1(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: PP(:) INTEGER IID,I,IBR,NTOP,NTOT,NDIM DOUBLE PRECISION U(1),F(1),DET ATYPE='' FNBPBV=0d0 AP%BIFF=FNBPBV IF(.NOT.CHECKSP('BP',AP%IPS,AP%ILP,AP%ISP))RETURN NDIM=AP%NDIM IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 ! Compute the determinant of P1. ALLOCATE(PP(NDIM**2)) DO I=1,NDIM**2 PP(I)=P1(I) ENDDO CALL GEL(NDIM,PP,0,U,F,DET) DEALLOCATE(PP) ! AP%DET contains the determinant of the reduced system. ! Set the determinant of the normalized reduced system. IF(ABS(AP%DET)/HUGE(DET).LT.ABS(DET))THEN FNBPBV=AP%DET/DET ATYPE='BP' ENDIF AP%BIFF=FNBPBV IF(IID.GE.2)WRITE(9,101)ABS(IBR),NTOP+1,FNBPBV 101 FORMAT(I4,I6,9X,'BP Function ',ES14.5) END FUNCTION FNBPBV !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Folds for BVP. !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNBL(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNBLF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) END SUBROUTINE FNBL ! ---------- ----- SUBROUTINE FNBLF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) ! Generates the equations for the 2-parameter continuation ! of folds (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),DFP(:,:),FF1(:),FF2(:) INTEGER NDM,NFPR,NFPX,NPAR,I,J DOUBLE PRECISION UU,UMX,EP,P NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ! Generate the function. CALL FFBL(AP,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,FUNI) IF(IJAC==0)RETURN ! Generate the Jacobian. CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) DFDU(1:NDM,NDM+1:NDIM)=0d0 DFDU(NDM+1:NDIM,NDM+1:NDIM)=DFDU(1:NDM,1:NDM) IF(IJAC==2)THEN NFPX=NFPR/2-1 DO I=1,NFPR-NFPX DFDP(1:NDM,ICP(I))=DFDP(1:NDM,ICP(I)) ENDDO DO I=1,NFPX DFDP(1:NDM,ICP(NFPR-NFPX+I))=0d0 DFDP(NDM+1:NDIM,ICP(NFPR-NFPX+I))=DFDP(1:NDM,ICP(I+1)) ENDDO ENDIF UMX=0.d0 DO I=1,NDIM IF(DABS(U(I))>UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(FF1(NDIM),FF2(NDIM),DFU(NDM,NDM),DFP(NDM,NPAR)) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFBL(AP,U,UOLD,ICP,PAR,FF1,NDM,DFU,DFP,FUNI) U(I)=UU+EP CALL FFBL(AP,U,UOLD,ICP,PAR,FF2,NDM,DFU,DFP,FUNI) U(I)=UU DO J=NDM+1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF (IJAC==1)THEN DEALLOCATE(DFU,DFP,FF1) RETURN ENDIF NFPX=NFPR/2-1 DO I=1,NFPR-NFPX P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFBL(AP,U,UOLD,ICP,PAR,FF1,NDM,DFU,DFP,FUNI) DO J=1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(DFU,DFP,FF1) END SUBROUTINE FNBLF ! ---------- ---- SUBROUTINE FFBL(AP,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,FUNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(2*NDM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) include 'interfaces.h' INTEGER NFPR,NFPX,I,J NFPR=AP%NFPR CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) NFPX=NFPR/2-1 DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(I,J)*U(NDM+J) ENDDO DO J=1,NFPX F(NDM+I)=F(NDM+I) + DFDP(I,ICP(1+J))*PAR(ICP(NFPR-NFPX+J)) ENDDO ENDDO END SUBROUTINE FFBL ! ---------- ---- SUBROUTINE BCBL(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! Generates the boundary conditions for the 2-parameter continuation ! of folds (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) CALL BCBLF(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC,BCNI) END SUBROUTINE BCBL ! ---------- ----- SUBROUTINE BCBLF(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC,BCNI) ! Generates the boundary conditions for the 2-parameter continuation ! of folds (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: FF1(:),FF2(:),DFU(:,:) INTEGER NDM,NBC0,NFPR,NPAR,I,J DOUBLE PRECISION UMX,EP,P,UU NDM=AP%NDM NBC0=NBC/2 NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(DFU(NBC0,2*NDM+NPAR)) ! Generate the function. CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,F,DFU,BCNI) IF(IJAC==0)THEN DEALLOCATE(DFU) RETURN ENDIF ALLOCATE(FF1(NBC),FF2(NBC)) ! Derivatives with respect to U0. UMX=0.d0 DO I=1,NDIM IF(DABS(U0(I))>UMX)UMX=DABS(U0(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U0(I) U0(I)=UU-EP CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,FF1,DFU,BCNI) U0(I)=UU+EP CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,FF2,DFU,BCNI) U0(I)=UU DO J=1,NBC DBC(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO ! Derivatives with respect to U1. UMX=0.d0 DO I=1,NDIM IF(DABS(U1(I))>UMX)UMX=DABS(U1(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U1(I) U1(I)=UU-EP CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,FF1,DFU,BCNI) U1(I)=UU+EP CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,FF2,DFU,BCNI) U1(I)=UU DO J=1,NBC DBC(J,NDIM+I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF1) IF(IJAC==1)THEN DEALLOCATE(FF2,DFU) RETURN ENDIF DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,FF2,DFU,BCNI) DO J=1,NBC DBC(J,2*NDIM+ICP(I))=(FF2(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(DFU,FF2) END SUBROUTINE BCBLF ! ---------- ---- SUBROUTINE FBBL(AP,NDIM,PAR,ICP,NBC0,U0,U1,F,DBC,BCNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC0 DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC0+AP%NDM+AP%NFPR/2-1) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC0,*) include 'interfaces.h' INTEGER NDM,NFPR,NFPX,I,J NDM=AP%NDM NFPR=AP%NFPR NFPX=NFPR/2-1 CALL BCNI(AP,NDM,PAR,ICP,NBC0,U0,U1,F,2,DBC) DO I=1,NBC0 F(NBC0+I)=0.d0 DO J=1,NDM F(NBC0+I)=F(NBC0+I)+DBC(I,J)*U0(NDM+J) F(NBC0+I)=F(NBC0+I)+DBC(I,NDM+J)*U1(NDM+J) ENDDO DO J=1,NFPX F(NBC0+I)=F(NBC0+I) + DBC(I,NDIM+ICP(1+J))*PAR(ICP(NFPR-NFPX+J)) ENDDO ENDDO END SUBROUTINE FBBL ! ---------- ---- SUBROUTINE ICBL(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Generates integral conditions for the 2-parameter continuation of ! folds (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) CALL ICBLF(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT,ICNI) END SUBROUTINE ICBL ! ---------- ----- SUBROUTINE ICBLF(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT,ICNI) ! Generates integral conditions for the 2-parameter continuation of ! folds (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: FF1(:),FF2(:),DFU(:,:) INTEGER NDM,NNT0,NFPR,NPAR,I,J,NFPX DOUBLE PRECISION UMX,EP,P,UU NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ! Note that PAR(NPAR) is used to keep the norm of the null vector F(NINT)=-PAR(NPAR) DO I=1,NDM F(NINT)=F(NINT)+U(NDM+I)*U(NDM+I) ENDDO IF(IJAC/=0)THEN DINT(NINT,NDM+1:NDIM)=2*U(NDM+1:NDIM) IF(IJAC/=1.AND.ICP(NFPR/2+1)==NPAR)THEN DINT(NINT,NDIM+NPAR)=-1 ENDIF ENDIF IF(NINT==1)RETURN NNT0=(NINT-1)/2 NFPX=NFPR/2-1 ALLOCATE(DFU(NNT0,NDM+NPAR)) ! Generate the function. CALL FIBL(AP,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,F,DFU,ICNI) DO I=1,NFPX F(NINT)=F(NINT)+PAR(ICP(NFPR-NFPX+I))**2 ENDDO IF(IJAC==0)THEN DEALLOCATE(DFU) RETURN ENDIF ! Generate the Jacobian. DINT(1:NNT0,1:NDM)=DFU(1:NNT0,1:NDM) DINT(NNT0+1:NINT-1,NDM+1:NDIM)=DFU(1:NNT0,1:NDM) IF(IJAC/=1)THEN DO I=1,NFPR DINT(1:NNT0,NDIM+ICP(I))=DFU(1:NNT0,NDM+ICP(I)) IF(I>=NFPR-NFPX+1)THEN DINT(NNT0+1:NINT-1,NDIM+ICP(I))=DFU(1:NNT0,NDM+ICP(I-NFPX-1)) DINT(NINT,NDIM+ICP(I))=2*PAR(ICP(I)) ENDIF ENDDO ENDIF UMX=0.d0 DO I=1,NDIM IF(DABS(U(I))>UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(FF1(NINT),FF2(NINT)) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FIBL(AP,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF1,DFU,ICNI) U(I)=UU+EP CALL FIBL(AP,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF2,DFU,ICNI) U(I)=UU DO J=NNT0+1,NINT-1 DINT(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC==1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF DO I=1,NFPR-NFPX P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FIBL(AP,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF1,DFU,ICNI) DO J=NNT0+1,NINT-1 DINT(J,NDIM+ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(FF1,DFU) END SUBROUTINE ICBLF ! ---------- ---- SUBROUTINE FIBL(AP,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,F,DINT,ICNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NINT,NNT0 DOUBLE PRECISION, INTENT(IN) :: UOLD(*),UDOT(*),UPOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(*),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NNT0,*) include 'interfaces.h' INTEGER NDM,NFPR,NFPX,I,J NDM=AP%NDM NFPR=AP%NFPR NFPX=NFPR/2-1 CALL ICNI(AP,NDM,PAR,ICP,NNT0,U,UOLD,UDOT,UPOLD,F,2,DINT) DO I=1,NNT0 F(NNT0+I)=0.d0 DO J=1,NDM F(NNT0+I)=F(NNT0+I)+DINT(I,J)*U(NDM+J) ENDDO DO J=1,NFPX F(NNT0+I)=F(NNT0+I) + DINT(I,NDM+ICP(1+J))*PAR(ICP(NFPR-NFPX+J)) ENDDO ENDDO END SUBROUTINE FIBL ! ---------- ------ SUBROUTINE STPNBL(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE IO USE MESH ! Generates starting data for the 2-parameter continuation of folds. ! (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local INTEGER, ALLOCATABLE :: ICPRS(:) DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER NDIM,NDM,NFPR,NDIMRD,ITPRS,I,NPAR NDIM=AP%NDIM NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(ICPRS(NFPR)) ALLOCATE(UPSR(NDM,0:NCOLRS*NTSR),UDOTPSR(NDM,0:NCOLRS*NTSR),TMR(0:NTSR)) CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOT,UPSR, & UDOTPSR,TMR,ITPRS,NDM) DEALLOCATE(ICPRS) DO I=NFPR/2+1,NFPR PAR(ICP(I))=0.d0 ENDDO NODIR=0 CALL ADAPT2(NTSR,NCOLRS,NDM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNBL !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for BP cont (BVPs) (by F. Dercole) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ----- SUBROUTINE FNBBP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-parameter continuation ! of BP (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),DFP(:,:),FF1(:),FF2(:) INTEGER NDM,NFPR,NPAR,I,J DOUBLE PRECISION UMX,EP,P,UU NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR IF(NDIM==NDM)THEN CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) RETURN ENDIF ! Generate the function. CALL FFBBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,F,NDM,DFDU,DFDP) IF(IJAC==0)RETURN ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I))>UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(FF1(NDIM),FF2(NDIM),DFU(NDM,NDM),DFP(NDM,NPAR)) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FFBBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,FF1,NDM,DFU,DFP) U(I)=UU+EP CALL FFBBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,FF2,NDM,DFU,DFP) U(I)=UU DO J=1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF (IJAC==1)THEN DEALLOCATE(DFU,DFP,FF1) RETURN ENDIF DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFBBP(AP,NDIM,U,UOLD,UOLD(NDIM+NFPR+1),ICP,PAR,FF1,NDM,DFU,DFP) DO J=1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(DFU,DFP,FF1) END SUBROUTINE FNBBP ! ---------- ----- SUBROUTINE FFBBP(AP,NDIM,U,UOLD,UPOLD,ICP,PAR,F,NDM,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UPOLD(NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: FI(:),DINT(:,:) DOUBLE PRECISION DUM(1) INTEGER ISW,NBC,NINT,NBC0,NNT0,NFPX,I,J,NPARU ISW=AP%ISW NBC=AP%NBC NINT=AP%NINT NPARU=AP%NPAR-AP%NPARI ! real - internal IF(ISW<0) THEN ! ** start NBC0=(4*NBC-NINT-5*NDM+2)/15 NNT0=(-NBC+4*NINT+5*NDM-23)/15 ELSE IF(ISW==2) THEN ! ** Non-generic case NBC0=(2*NBC-NINT-3*NDM)/3 NNT0=(-NBC+2*NINT+3*NDM-3)/3 ELSE ! ** generic case NBC0=(2*NBC-NINT-3*NDM)/3 NNT0=(-NBC+2*NINT+3*NDM-3)/3 ENDIF NFPX=NBC0+NNT0-NDM+1 CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) IF((ISW==2).OR.(ISW<0)) THEN ! ** Non-generic and/or start DO I=1,NDM F(I)=F(I)-PAR(NPARU+2*NFPX+NDM+1)*U(NDM+I) ENDDO ENDIF DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)-DFDU(J,I)*U(NDM+J) ENDDO ENDDO IF(NNT0>0) THEN ALLOCATE(FI(NNT0),DINT(NNT0,NDM)) CALL ICNI(AP,NDM,PAR,ICP,NNT0,U,UOLD,DUM,UPOLD,FI,1,DINT) DO I=1,NDM DO J=1,NNT0 F(NDM+I)=F(NDM+I)+DINT(J,I)*PAR(NPARU+NBC0+J) ENDDO ENDDO DEALLOCATE(FI,DINT) ENDIF IF(ISW<0) THEN ! ** start DO I=1,NDM F(NDM+I)=F(NDM+I)+PAR(NPARU+4*NFPX+NDM+2)*U(2*NDM+I)+ & PAR(NPARU+4*NFPX+NDM+3)*U(3*NDM+I) F(2*NDM+I)=0.d0 F(3*NDM+I)=0.d0 DO J=1,NDM F(2*NDM+I)=F(2*NDM+I)+DFDU(I,J)*U(2*NDM+J) F(3*NDM+I)=F(3*NDM+I)+DFDU(I,J)*U(3*NDM+J) ENDDO DO J=1,NFPX F(2*NDM+I)=F(2*NDM+I)+DFDP(I,ICP(J))*PAR(NPARU+2*NFPX+NDM+1+J) F(3*NDM+I)=F(3*NDM+I)+DFDP(I,ICP(J))*PAR(NPARU+3*NFPX+NDM+1+J) ENDDO ENDDO ENDIF END SUBROUTINE FFBBP ! ---------- ----- SUBROUTINE BCBBP(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! Generates the boundary conditions for the 2-parameter continuation ! of BP (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: FF1(:),FF2(:),DFU(:,:) INTEGER ISW,NINT,NDM,NFPR,NPAR,NBC0,I,J DOUBLE PRECISION UMX,EP,P,UU ISW=AP%ISW NINT=AP%NINT NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR IF(NDIM==NDM)THEN CALL BCNI(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) RETURN ENDIF IF(ISW<0) THEN ! ** start NBC0=(4*NBC-NINT-5*NDM+2)/15 ELSE IF(ISW==2) THEN ! ** Non-generic case NBC0=(2*NBC-NINT-3*NDM)/3 ELSE ! ** generic case NBC0=(2*NBC-NINT-3*NDM)/3 ENDIF ! Generate the function. ALLOCATE(DFU(NBC0,2*NDM+NPAR)) CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,F,DFU) IF(IJAC==0)THEN DEALLOCATE(DFU) RETURN ENDIF ALLOCATE(FF1(NBC),FF2(NBC)) ! Derivatives with respect to U0. UMX=0.d0 DO I=1,NDIM IF(DABS(U0(I))>UMX)UMX=DABS(U0(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U0(I) U0(I)=UU-EP CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FF1,DFU) U0(I)=UU+EP CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FF2,DFU) U0(I)=UU DO J=1,NBC DBC(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO ! Derivatives with respect to U1. UMX=0.d0 DO I=1,NDIM IF(DABS(U1(I))>UMX)UMX=DABS(U1(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U1(I) U1(I)=UU-EP CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FF1,DFU) U1(I)=UU+EP CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FF2,DFU) U1(I)=UU DO J=1,NBC DBC(J,NDIM+I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC==1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FF1,DFU) DO J=1,NBC DBC(J,2*NDIM+ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(FF1,DFU) RETURN END SUBROUTINE BCBBP ! ---------- ----- SUBROUTINE FBBBP(AP,NDIM,PAR,ICP,NBC,NBC0,U0,U1,FB,DBC) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,NBC0 DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC0,*) INTEGER ISW,NINT,NDM,NNT0,NFPX,I,J,NPARU,IBC ISW=AP%ISW NINT=AP%NINT NDM=AP%NDM NPARU=AP%NPAR-AP%NPARI IF(ISW<0) THEN ! ** start NNT0=(-NBC+4*NINT+5*NDM-23)/15 ELSE IF(ISW==2) THEN ! ** Non-generic case NNT0=(-NBC+2*NINT+3*NDM-3)/3 ELSE ! ** generic case NNT0=(-NBC+2*NINT+3*NDM-3)/3 ENDIF NFPX=NBC0+NNT0-NDM+1 CALL BCNI(AP,NDM,PAR,ICP,NBC0,U0,U1,FB,2,DBC) IF((ISW==2).OR.(ISW<0)) THEN ! ** Non-generic and/or start DO I=1,NBC0 FB(I)=FB(I)+PAR(NPARU+2*NFPX+NDM+1)*PAR(NPARU+I) ENDDO ENDIF DO I=1,NDM FB(NBC0+I)=-U0(NDM+I) FB(NBC0+NDM+I)=U1(NDM+I) DO J=1,NBC0 FB(NBC0+I)=FB(NBC0+I)+DBC(J,I)*PAR(NPARU+J) FB(NBC0+NDM+I)=FB(NBC0+NDM+I)+DBC(J,NDM+I)*PAR(NPARU+J) ENDDO ENDDO DO I=1,NFPX FB(NBC0+2*NDM+I)=PAR(NPARU+NFPX+NDM+I) DO J=1,NBC0 FB(NBC0+2*NDM+I)=FB(NBC0+2*NDM+I)+ & DBC(J,2*NDM+ICP(I))*PAR(NPARU+J) ENDDO ENDDO IF(ISW<0) THEN ! ** start IBC=NBC0+2*NDM+NFPX DO I=1,NBC0 FB(IBC+I)=0.d0 FB(IBC+NBC0+I)=0.d0 DO J=1,NDM FB(IBC+I)=FB(IBC+I)+DBC(I,J)*U0(2*NDM+J) FB(IBC+I)=FB(IBC+I)+DBC(I,NDM+J)*U1(2*NDM+J) FB(IBC+NBC0+I)=FB(IBC+NBC0+I)+DBC(I,J)*U0(3*NDM+J) FB(IBC+NBC0+I)=FB(IBC+NBC0+I)+DBC(I,NDM+J)*U1(3*NDM+J) ENDDO DO J=1,NFPX FB(IBC+I)=FB(IBC+I)+DBC(I,2*NDM+ICP(J))*PAR(NPARU+2*NFPX+NDM+1+J) FB(IBC+NBC0+I)=FB(IBC+NBC0+I)+ & DBC(I,2*NDM+ICP(J))*PAR(NPARU+3*NFPX+NDM+1+J) ENDDO ENDDO ENDIF END SUBROUTINE FBBBP ! ---------- ----- SUBROUTINE ICBBP(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Generates integral conditions for the 2-parameter continuation ! of BP (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: FF1(:),FF2(:),DFU(:) INTEGER ISW,NBC,NDM,NFPR,NPAR,NNT0,I,J DOUBLE PRECISION UMX,EP,P,UU ISW=AP%ISW NBC=AP%NBC NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR IF(NDIM==NDM)THEN CALL ICNI(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) RETURN ENDIF IF(ISW<0) THEN ! ** start NNT0=(-NBC+4*NINT+5*NDM-23)/15 ELSE IF(ISW==2) THEN ! ** Non-generic case NNT0=(-NBC+2*NINT+3*NDM-3)/3 ELSE ! ** generic case NNT0=(-NBC+2*NINT+3*NDM-3)/3 ENDIF ! Generate the function. IF(NNT0>0) THEN ALLOCATE(DFU(NNT0*(NDM+NPAR))) ELSE ALLOCATE(DFU(1)) ENDIF CALL FIBBP(AP,NDIM,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,F,DFU) IF(IJAC==0)THEN DEALLOCATE(DFU) RETURN ENDIF ALLOCATE(FF1(NINT),FF2(NINT)) ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I))>UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FIBBP(AP,NDIM,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF1,DFU) U(I)=UU+EP CALL FIBBP(AP,NDIM,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF2,DFU) U(I)=UU DO J=1,NINT DINT(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC==1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FIBBP(AP,NDIM,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FF1,DFU) DO J=1,NINT DINT(J,NDIM+ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(FF1,DFU) END SUBROUTINE ICBBP ! ---------- ----- SUBROUTINE FIBBP(AP,NDIM,PAR,ICP,NINT,NNT0,U,UOLD,UDOT,UPOLD,FI,DINT) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,NNT0 DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NNT0,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: F(:),DFU(:,:),DFP(:,:) INTEGER ISW,NBC,NDM,NBC0,NFPX,NPAR,I,J,K,NPARU ISW=AP%ISW NBC=AP%NBC NDM=AP%NDM NPAR=AP%NPAR NPARU=NPAR-AP%NPARI IF(ISW<0) THEN ! ** start NBC0=(4*NBC-NINT-5*NDM+2)/15 ELSE IF(ISW==2) THEN ! ** Non-generic case NBC0=(2*NBC-NINT-3*NDM)/3 ELSE ! ** generic case NBC0=(2*NBC-NINT-3*NDM)/3 ENDIF NFPX=NBC0+NNT0-NDM+1 ALLOCATE(F(NDM),DFU(NDM,NDM),DFP(NDM,NPAR)) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFU,DFP) IF(NNT0>0) THEN CALL ICNI(AP,NDM,PAR,ICP,NNT0,U,UOLD,UDOT,UPOLD,FI,2,DINT) IF((ISW==2).OR.(ISW<0)) THEN ! ** Non-generic and/or start ! (18) int_0^1 h(x,p) dt + b phi_3^* = 0 DO I=1,NNT0 FI(I)=FI(I)+PAR(NPARU+2*NFPX+NDM+1)*PAR(NPARU+NBC0+I) ENDDO ENDIF ENDIF ! (13b) -d + int_0^1 (-f_p(x,p)^T phi_1^* + h_p(x,p)^T phi_3^*) dt = 0 DO I=1,NFPX FI(NNT0+I)=-PAR(NPARU+NFPX+NDM+I) DO J=1,NDM FI(NNT0+I)=FI(NNT0+I)-DFP(J,ICP(I))*U(NDM+J) ENDDO DO J=1,NNT0 FI(NNT0+I)=FI(NNT0+I)+DINT(J,NDM+ICP(I))*PAR(NPARU+NBC0+J) ENDDO ENDDO ! ** start IF(ISW<0) THEN ! (15b) int_0^1 -f(x,p)^T phi_1^* dt + c_1 q + c_2 r = 0 DO I=1,NFPX FI(NNT0+I)=FI(NNT0+I)+ & PAR(NPARU+4*NFPX+NDM+2)*PAR(NPARU+2*NFPX+NDM+1+I)+ & PAR(NPARU+4*NFPX+NDM+3)*PAR(NPARU+3*NFPX+NDM+1+I) ENDDO ! (9a) int_0^1 (h_x(x,p)v + h_p(x,p)q) dt = 0 ! (9b) int_0^1 (h_x(x,p)w + h_p(x,p)r) dt = 0 DO K=2,3 DO I=1,NNT0 FI(NFPX+K*NNT0+I)=0.d0 DO J=1,NDM FI(NFPX+K*NNT0+I)=FI(NFPX+K*NNT0+I)+DINT(I,J)*U(K*NDM+J) ENDDO DO J=1,NFPX FI(NFPX+K*NNT0+I)=FI(NFPX+K*NNT0+I)+DINT(I,NDM+ICP(J))* & PAR(NPARU+K*NFPX+NDM+1+J) ENDDO ENDDO ENDDO ! (10a) int_0^1 dt + - 1 = 0 ! (10b) int_0^1 dt + - 1 = 0 ! (11a) int_0^1 dt + = 0 ! (11b) int_0^1 dt + = 0 FI(NFPX+4*NNT0+1)=-1.d0 FI(NFPX+4*NNT0+2)=-1.d0 FI(NFPX+4*NNT0+3)=0.d0 FI(NFPX+4*NNT0+4)=0.d0 DO I=1,NDM FI(NFPX+4*NNT0+1)=FI(NFPX+4*NNT0+1)+U(2*NDM+I)*UOLD(2*NDM+I) FI(NFPX+4*NNT0+2)=FI(NFPX+4*NNT0+2)+U(3*NDM+I)*UOLD(3*NDM+I) FI(NFPX+4*NNT0+3)=FI(NFPX+4*NNT0+3)+U(2*NDM+I)*UOLD(3*NDM+I) FI(NFPX+4*NNT0+4)=FI(NFPX+4*NNT0+4)+U(3*NDM+I)*UOLD(2*NDM+I) ENDDO DO I=1,NFPX FI(NFPX+4*NNT0+1)=FI(NFPX+4*NNT0+1)+PAR(NPARU+2*NFPX+NDM+1+I)* & UOLD(NDIM+3*NFPX+NDM+1+I) FI(NFPX+4*NNT0+2)=FI(NFPX+4*NNT0+2)+PAR(NPARU+3*NFPX+NDM+1+I)* & UOLD(NDIM+4*NFPX+NDM+1+I) FI(NFPX+4*NNT0+3)=FI(NFPX+4*NNT0+3)+PAR(NPARU+2*NFPX+NDM+1+I)* & UOLD(NDIM+4*NFPX+NDM+1+I) FI(NFPX+4*NNT0+4)=FI(NFPX+4*NNT0+4)+PAR(NPARU+3*NFPX+NDM+1+I)* & UOLD(NDIM+3*NFPX+NDM+1+I) ENDDO DEALLOCATE(F,DFU,DFP) ENDIF ! (13c) -a + int_0^1 ||phi_1^*||^2 dt + ||phi_2^*||^2 + ||phi_3^*||^2 = 0 FI(NINT)=-PAR(NPARU+NFPX+NDM) DO I=1,NDM FI(NINT)=FI(NINT)+U(NDM+I)**2 ENDDO DO I=1,NBC0+NNT0 FI(NINT)=FI(NINT)+PAR(NPARU+I)**2 ENDDO END SUBROUTINE FIBBP ! ---------- ------- SUBROUTINE STPNBBP(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP, ONLY: STSDRBV USE IO USE MESH ! Generates starting data for the 2-parameter continuation ! of BP (BVP). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local INTEGER, ALLOCATABLE :: ICPRS(:) DOUBLE PRECISION, ALLOCATABLE :: RVDOT(:) DOUBLE PRECISION, ALLOCATABLE :: RLDOTRS(:) DOUBLE PRECISION, ALLOCATABLE :: UPST(:,:),UDOTPST(:,:) DOUBLE PRECISION, ALLOCATABLE :: VDOTPST(:,:) DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER NDIM,ISW,NBC,NINT,NFPR INTEGER ITPRS,NDM,NBC0,NNT0,NFPX,NDIMRD,NPARU TYPE(AUTOPARAMETERS) AP2 NDIM=AP%NDIM ISW=AP%ISW NBC=AP%NBC NINT=AP%NINT NDM=AP%NDM NFPR=AP%NFPR NPARU=AP%NPAR-AP%NPARI IF(ISW>0) THEN ! ** restart CALL STPNBV(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) RETURN ENDIF ALLOCATE(UPSR(NDIM,0:NCOLRS*NTSR), & UDOTPSR(NDIM,0:NCOLRS*NTSR),TMR(0:NTSR)) ! ** start NBC0=(4*NBC-NINT-5*NDM+2)/15 NNT0=(-NBC+4*NINT+5*NDM-23)/15 NFPX=NBC0+NNT0-NDM+1 ALLOCATE(ICPRS(NFPR),RLDOTRS(NFPR)) ! Start ! ** allocation ALLOCATE(UPST(NDM,0:NTSR*NCOLRS),UDOTPST(NDM,0:NTSR*NCOLRS)) ALLOCATE(VDOTPST(NDM,0:NTSR*NCOLRS),RVDOT(NFPX)) ! ** read the std branch CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOTRS,UPST, & UDOTPST,TMR,ITPRS,NDM) ! Compute the second null vector ! ** redefine AP AP2=AP AP2%NDIM=NDM AP2%NTST=NTSR AP2%NCOL=NCOLRS AP2%NBC=NBC0 AP2%NINT=NNT0 AP2%NFPR=NFPX CALL STSDRBV(AP2,PAR,ICPRS,FNBBP,BCBBP,ICBBP, & RLDOTRS,UPST,UDOTPST,TMR,VDOTPST,RVDOT) ! ** init UPS,PAR UPSR(1:NDM,:)=UPST(:,:) UPSR(NDM+1:2*NDM,:)=0.d0 UPSR(2*NDM+1:3*NDM,:)=UDOTPST(:,:) UPSR(3*NDM+1:4*NDM,:)=VDOTPST(:,:) UDOTPSR(:,:)=0.d0 ! ** init a,d,b PAR(NPARU+1:NPARU+2*NFPX+NDM+1)=0 ! ** init q,r PAR(NPARU+2*NFPX+NDM+2:NPARU+3*NFPX+NDM+1)=RLDOTRS(1:NFPX) PAR(NPARU+3*NFPX+NDM+2:NPARU+4*NFPX+NDM+1)=RVDOT(1:NFPX) ! ** init c1,c2 PAR(NPARU+4*NFPX+NDM+2:NPARU+4*NFPX+NDM+3)=0 RLDOT(1:NFPX+1)=0 RLDOT(NFPX+2)=1 ! b RLDOT(NFPX+3:5*NFPX+NDM+3)=0 DEALLOCATE(UPST,UDOTPST,VDOTPST,RVDOT) NODIR=0 DEALLOCATE(ICPRS,RLDOTRS) CALL ADAPT2(NTSR,NCOLRS,NDIM,AP%NTST,AP%NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNBBP END MODULE TOOLBOXBV auto/07p/src/support.f900000640000175000017500000006444713570013207013104 0ustar sksk! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! General Support Routines !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE SUPPORT USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC :: MUELLER, EIG, PI, GESC, GELI, GEL, NLVC, NULLVC, NRMLZ, RNRMV PUBLIC :: LBTYPE, LBITP, CHECKSP, INITSTOPCNTS, STOPPED, FNCS, INIT2, INIT3 PUBLIC :: NAMEIDX, PVLI, DIRECTION, AUTOSTOP, EXPANDJAC PUBLIC :: DTV,AV,P0V,P1V,EVV DOUBLE PRECISION, ALLOCATABLE, SAVE :: DTV(:),P0V(:,:),P1V(:,:) TYPE(AUTOPARAMETERS), SAVE :: AV COMPLEX(KIND(1.0D0)), ALLOCATABLE, SAVE :: EVV(:) CHARACTER(LEN=3), PARAMETER :: ATYPES(-9:14) = & (/ 'MX ','R4 ','R3 ','R2 ','R1 ','UZ ','ZH ','CP ','BT ',' ', & 'BP ','LP ','HB ',' ','LP ','BP ','PD ','TR ','EP ', & 'GH ','LPD','LTR','PTR','TTR' /) CONTAINS ! ---------- ------- SUBROUTINE MUELLER(Q0,Q1,Q,S0,S1,S,RDS) ! Mueller's method with bracketing DOUBLE PRECISION, INTENT(IN) :: Q,S DOUBLE PRECISION, INTENT(INOUT) :: Q0,Q1,S0,S1 DOUBLE PRECISION, INTENT(OUT) :: RDS DOUBLE PRECISION H0,H1,D,A,B,R,DQ H0=S0-S H1=S1-S D=H0*H1*(H1-H0) A=( H1**2*(Q0-Q) - H0**2*(Q1-Q) ) / D B=(-H1*(Q0-Q) + H0*(Q1-Q) ) / D IF(A**2>4*B*Q)THEN R=SQRT(A**2-4*B*Q) IF(A<0)THEN R=-R ENDIF ELSE R=0 ENDIF RDS=-2*Q / (A+R) DQ=Q1*Q IF(DQ<0.d0)THEN Q0=Q1 S0=S1 ENDIF Q1=Q S1=S END SUBROUTINE MUELLER ! ---------- --- SUBROUTINE EIG(AP,NDIM,M1A,A,EV) ! This subroutine uses the LAPACK subroutine DGEEV to compute the ! eigenvalues of the general real matrix A. ! NDIM is the dimension of A. ! M1A is the first dimension of A as in the DIMENSION statement. ! The eigenvalues are to be returned in the complex vector EV. USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM, M1A DOUBLE PRECISION, INTENT(INOUT) :: A(M1A,NDIM) COMPLEX(KIND(1.0D0)), INTENT(OUT) :: EV(NDIM) ! Local INTEGER IID,IBR,NTOT,NTOP,IER,MATZ,I,IV1(1) DOUBLE PRECISION, ALLOCATABLE :: WR(:),WI(:),Z(:,:) DOUBLE PRECISION FV1(1) ALLOCATE(WR(NDIM),WI(NDIM),Z(M1A,NDIM)) IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 IER=0 IF(IID>=4)THEN MATZ=1 ELSE MATZ=0 ENDIF CALL RG(M1A,NDIM,A,WR,WI,MATZ,Z,IV1,FV1,IER) IF(IER/=0)WRITE(9,'(I4,I6,A)') IBR,NTOP,& 'NOTE:Error return from EISPACK routine RG' IF(MATZ/=0)THEN WRITE(9,'(A)')' Eigenvalues:' DO I=1,NDIM WRITE(9,'(4X,7ES19.10E3)')WR(I),WI(I) ENDDO WRITE(9,'(A)')' Eigenvectors (by row):' DO I=1,NDIM WRITE(9,'(4X,7ES19.10E3)')Z(:NDIM,I) ENDDO ENDIF DO I=1,NDIM EV(I) = CMPLX(WR(I),WI(I),KIND(1.0D0)) ENDDO DEALLOCATE(WR,WI,Z) END SUBROUTINE EIG ! ---------- ------ SUBROUTINE NULLVC(m,n,k,A,u,icpiv,irpiv) ! Finds a null-vector of a singular matrix A. ! The null space of A is assumed to be K-dimensional. ! ! Parameters : ! ! m : number of equations, ! k : dimension of nullspace, ! A : m * n matrix of coefficients, ! u : on exit U contains the null vector, ! ic : integer array of dimension at least N. ! INTEGER, INTENT(IN) :: m,n,k DOUBLE PRECISION, INTENT(INOUT) :: A(m,n) INTEGER, INTENT(OUT) :: icpiv(n), irpiv(n) DOUBLE PRECISION, INTENT(OUT) :: U(n) INTEGER i,j,jj,l,ipiv,jpiv DOUBLE PRECISION p,piv,rm,sm,tmp,amax ! Elimination. amax = 0 DO JJ=1,N-K IPIV=JJ JPIV=JJ PIV=0.d0 DO i=jj,m DO j=jj,n p=ABS(A(i,j)) IF(p>piv)THEN piv=p ipiv=i jpiv=j ENDIF ENDDO ENDDO IF(JJ==1)THEN ! now piv is ||A||_max amax = piv ENDIF IF(piv<=amax/HUGE(piv))THEN WRITE(9,"(8x,A,I3,A,ES11.4E3,A,ES11.4E3,A,ES11.4E3,A/A)") & ' NOTE:Pivot ',jj,' = ',piv,' <= ||A||_max/',HUGE(piv),' = ', & amax/HUGE(piv),' in NLVC : ',& ' A null space may be multi-dimensional' ! to avoid overflow in most cases piv = MAX(amax/HUGE(piv),TINY(piv)) A(ipiv,jpiv) = piv ENDIF irpiv(jj)=ipiv IF(jj/=ipiv)THEN DO i=1,n tmp=A(jj,i) A(jj,i)=A(ipiv,i) A(ipiv,i)=tmp ENDDO ENDIF icpiv(jj)=jpiv IF(jj/=jpiv)THEN DO i=1,m tmp=A(i,jj) A(i,jj)=A(i,jpiv) A(i,jpiv)=tmp ENDDO ENDIF piv=A(jj,jj) DO l=jj+1,m rm=A(l,jj)/piv IF(rm/=0.d0)THEN DO i=jj+1,n A(l,i)=A(l,i)-rm*A(jj,i) ENDDO ENDIF ENDDO ENDDO ! Backsubstitution : DO i=n,n-k+1,-1 u(i)=1.d0 ENDDO DO i=n-k,1,-1 sm=0.d0 DO j=i+1,n sm=sm+A(i,j)*u(j) ENDDO u(i)=-sm/A(i,i) ENDDO ! undo column swapping on u DO i=n-k,1,-1 jpiv=icpiv(i) IF(jpiv/=i)THEN tmp=u(i) u(i)=u(jpiv) u(jpiv)=tmp ENDIF ENDDO END SUBROUTINE NULLVC ! ---------- ---- SUBROUTINE NLVC(m,n,k,A,U) ! Finds a null-vector of a singular matrix A. ! The null space of A is assumed to be k-dimensional. ! ! Parameters : ! ! M : number of equations, ! K : dimension of nullspace, ! A : M * N matrix of coefficients, ! U : on exit U contains the null vector, ! INTEGER, INTENT(IN) :: m,n,k DOUBLE PRECISION, INTENT(INOUT) :: A(m,n) DOUBLE PRECISION, INTENT(OUT) :: U(n) INTEGER, ALLOCATABLE :: icpiv(:),irpiv(:) ALLOCATE(icpiv(n),irpiv(n)) CALL NULLVC(m,n,k,A,U,icpiv,irpiv) DEALLOCATE(icpiv,irpiv) END SUBROUTINE NLVC ! ------ --------- -------- ----- DOUBLE PRECISION FUNCTION RNRMV(N,V) INTEGER, INTENT(IN) :: N DOUBLE PRECISION, INTENT(IN) :: V(N) INTEGER I ! Returns the L2-norm of the vector V. RNRMV = 0.d0 DO I=1,N RNRMV=RNRMV+V(I)**2 ENDDO RNRMV=SQRT(RNRMV) END FUNCTION RNRMV ! ---------- ----- SUBROUTINE NRMLZ(NDIM,V) INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: V(NDIM) INTEGER I DOUBLE PRECISION SS ! Scale the vector V so that its discrete L2-norm becomes 1. SS=0.d0 DO I=1,NDIM SS=SS+V(I)*V(I) ENDDO V(:)=V(:)/SQRT(SS) END SUBROUTINE NRMLZ ! ------ --------- -------- DOUBLE PRECISION FUNCTION PI(R) DOUBLE PRECISION, INTENT(IN) :: R PI=R*4.0d0*ATAN(1.d0) END FUNCTION PI ! ---------- --------- SUBROUTINE EXPANDJAC(JAC,M,N1,N2) ! The Jacobian JAC(N1,M) is unpacked to JAC(N2,M) where N2 > N1 INTEGER, INTENT(IN) :: M, N1, N2 DOUBLE PRECISION, INTENT(INOUT) :: JAC(M*N2) INTEGER I, J DO I=M-1,1,-1 DO J=N1,1,-1 JAC(I*N2+J)=JAC(I*N1+J) ENDDO ENDDO END SUBROUTINE EXPANDJAC ! ---------- ---- SUBROUTINE GELI(N,M1A,A,NRHS,NDX,U,M1F,F,ICPIV,DET,SCALE) ! Solves the linear system A U = F by Gauss elimination ! with complete pivoting. Optionally returns a scaled determinant. ! ! Parameters : ! ! N : number of equations, ! M1A : first dimension of A from DIMENSION statement, ! A : N * N matrix of coefficients, ! NRHS: 0 if no right hand sides (determinant only), ! >0 if there are NRHS right hand sides, ! NDX : first dimension of U from DIMENSION statement, ! U : on exit U contains the solution vector(s), ! M1F : first dimension of F from DIMENSION statement, ! F : right hand side vector(s), ! ICPIV: integer vector of dimension at least N. ! ! The input matrix A is overwritten. INTEGER, INTENT(IN) :: N,M1A,NRHS,NDX,M1F DOUBLE PRECISION, INTENT(INOUT) :: A(M1A,N),F(M1F,NRHS) DOUBLE PRECISION, INTENT(OUT) :: U(NDX,NRHS),DET INTEGER, INTENT(OUT) :: ICPIV(N) LOGICAL, INTENT(IN) :: SCALE INTEGER I,J,L,JJ,IRH,IPIV,JPIV DOUBLE PRECISION P,PIV,AP,RM,SM,amax,TMP ! Elimination. DET=1.d0 amax = ABS(A(1,1)) DO JJ=1,N-1 IPIV=JJ JPIV=JJ PIV=0.d0 DO I=JJ,N DO J=JJ,N P=ABS(A(I,J)) IF(P.GT.PIV)THEN PIV=P IPIV=I JPIV=J ENDIF ENDDO ENDDO AP=A(IPIV,JPIV) IF(SCALE)THEN DET=DET*LOG10(10+ABS(AP)) * atan(AP) ELSE DET=DET*AP ENDIF IF(IPIV.NE.JJ)DET=-DET IF(JPIV.NE.JJ)DET=-DET IF(JJ==1)THEN ! now PIV is ||A||_max amax = PIV ENDIF IF(PIV<=amax/HUGE(PIV))THEN WRITE(9,"(8x,A,I3,A,ES11.4E3,A,ES11.4E3,A,ES11.4E3,A)")& ' NOTE:Pivot ',JJ,' = ',PIV,' <= ||A||_max/',HUGE(PIV),' = ', & amax/HUGE(PIV),' in GE' ! to avoid overflow in most cases A(IPIV,JPIV) = MAX(amax/HUGE(PIV),TINY(PIV)) ENDIF IF(IPIV/=JJ)THEN ! swap rows DO I=1,N TMP=A(JJ,I) A(JJ,I)=A(IPIV,I) A(IPIV,I)=TMP ENDDO DO IRH=1,NRHS TMP=F(JJ,IRH) F(JJ,IRH)=F(IPIV,IRH) F(IPIV,IRH)=TMP ENDDO ENDIF ICPIV(JJ)=JPIV IF(JPIV/=JJ)THEN ! swap columns DO J=1,N TMP=A(J,JJ) A(J,JJ)=A(J,JPIV) A(J,JPIV)=TMP ENDDO ENDIF DO L=JJ+1,N RM=A(L,JJ)/A(JJ,JJ) IF(RM.NE.0.d0)THEN DO I=JJ+1,N A(L,I)=A(L,I)-RM*A(JJ,I) ENDDO DO IRH=1,NRHS F(L,IRH)=F(L,IRH)-RM*F(JJ,IRH) ENDDO ENDIF ENDDO ENDDO AP=A(N,N) IF(ABS(AP)<=amax/HUGE(AP))THEN WRITE(9,"(8x,A,I3,A,ES11.4E3,A,ES11.4E3,A,ES11.4E3,A)")& ' NOTE:Pivot ',N,' = ',ABS(AP),' <= ||A||_max/',HUGE(AP),' = ', & amax/HUGE(AP),' in GE' ! to avoid overflow in most cases A(N,N) = MAX(amax/HUGE(AP),TINY(AP)) ENDIF IF(SCALE)THEN DET=DET*LOG10(10+ABS(AP)) * atan(AP) ELSE DET=DET*AP ENDIF ! Backsubstitution : DO IRH=1,NRHS U(N,IRH)=F(N,IRH)/A(N,N) DO I=N-1,1,-1 SM=0.d0 DO J=I+1,N SM=SM+A(I,J)*U(J,IRH) ENDDO U(I,IRH)=(F(I,IRH)-SM)/A(I,I) ENDDO ENDDO ! undo column swapping on U DO I=N-1,1,-1 JPIV=ICPIV(I) IF(JPIV/=I)THEN DO IRH=1,NRHS TMP=U(I,IRH) U(I,IRH)=U(JPIV,IRH) U(JPIV,IRH)=TMP ENDDO ENDIF ENDDO END SUBROUTINE GELI ! ---------- --- SUBROUTINE GEL(N,A,NRHS,U,F,DET) INTEGER, INTENT(IN) :: N,NRHS DOUBLE PRECISION, INTENT(INOUT) :: A(N,N),F(N,NRHS) DOUBLE PRECISION, INTENT(OUT) :: U(N,NRHS),DET INTEGER, ALLOCATABLE :: ICPIV(:) ALLOCATE(ICPIV(N)) CALL GELI(N,N,A,NRHS,N,U,N,F,ICPIV,DET,.FALSE.) DEALLOCATE(ICPIV) END SUBROUTINE GEL ! ---------- ---- SUBROUTINE GESC(N,A,NRHS,U,F,DET) INTEGER, INTENT(IN) :: N,NRHS DOUBLE PRECISION, INTENT(INOUT) :: A(N,N),F(N,NRHS) DOUBLE PRECISION, INTENT(OUT) :: U(N,NRHS),DET INTEGER, ALLOCATABLE :: ICPIV(:) ALLOCATE(ICPIV(N)) CALL GELI(N,N,A,NRHS,N,U,N,F,ICPIV,DET,.TRUE.) DEALLOCATE(ICPIV) END SUBROUTINE GESC ! ------------ -------- ------ CHARACTER(3) FUNCTION LBTYPE(ITP) ! returns the string label type corresponding to numerical type ITP INTEGER, INTENT(IN) :: ITP SELECT CASE(ITP) CASE(-32) LBTYPE='GH' CASE(23,83) LBTYPE='LTR' CASE(77,87) LBTYPE='PTR' CASE(28,78) LBTYPE='LPD' CASE(88) LBTYPE='TTR' CASE DEFAULT LBTYPE=ATYPES(MOD(ITP,10)) END SELECT END FUNCTION LBTYPE ! ------- -------- ----- INTEGER FUNCTION LBITP(ATYPE,BVP) RESULT(ITP) ! returns the basic numeric type corresponding to string label ATYPE CHARACTER(LEN=*), INTENT(IN) :: ATYPE LOGICAL, INTENT(IN) :: BVP INTEGER NTY ITP=0 SELECT CASE(TRIM(ATYPE)) CASE('GH') ITP=-2 CASE('LTR') ITP=3 CASE('PTR') ITP=7 CASE('LPD','TTR') ITP=8 CASE DEFAULT DO NTY=-9,9 IF(ATYPE==ATYPES(NTY).AND..NOT.(BVP.AND.(NTY==1.OR.NTY==2))) THEN ITP=NTY RETURN ENDIF ENDDO END SELECT END FUNCTION LBITP ! ------- -------- ------- LOGICAL FUNCTION CHECKSP(ATYPE,IPS,ILP,ISP) USE AUTO_CONSTANTS, ONLY : SP CHARACTER(LEN=*), INTENT(IN) :: ATYPE INTEGER, INTENT(IN) :: IPS,ILP,ISP ! determine if the given TY label needs to be checked INTEGER I,J,M CHECKSP = .FALSE. SELECT CASE(TRIM(ATYPE)) CASE('UZ') CHECKSP = .TRUE. CASE('HB','BT','ZH','GH','CP') CHECKSP = (IPS==-1.OR.IPS==1.OR.IPS==11).AND.ISP/=0.AND.ISP/=3 CASE('LP') CHECKSP = ILP/=0 CASE('BP') IF(IPS<2.OR.IPS==5.OR.IPS==11)THEN CHECKSP = ISP/=0 ! AE ELSE CHECKSP = ABS(ISP)>=2.AND.ABS(ISP)/=4 ! BVP ENDIF CASE('PD','TR','R1','R2','R3','R4','LPD','LTR','PTR','TTR') IF(IPS==-1)THEN ! maps CHECKSP = ISP/=0.AND.IPS/=3 ELSE ! cycles CHECKSP = (ISP==2.OR.ISP==4) .AND. (IPS==2.OR.IPS==7.OR.IPS==12) ENDIF END SELECT DO I=1,SIZE(SP) J=SCAN(SP(I)(3:),"-0123456789")+2 IF(J==2)THEN J=LEN_TRIM(SP(I))+1 ENDIF IF (SP(I)(1:J-1)==TRIM(ATYPE)) THEN CHECKSP=.TRUE. IF (LEN_TRIM(SP(I))>J-1)THEN READ(SP(I)(J:),*)M IF(M==0)THEN CHECKSP=.FALSE. ENDIF ENDIF EXIT ENDIF ENDDO END FUNCTION CHECKSP ! ---------- ------------ SUBROUTINE INITSTOPCNTS(ISP,ILP,ITPST,COUNTS) USE AUTO_CONSTANTS, ONLY : STOPS, SP INTEGER, INTENT(IN) :: ISP,ILP,ITPST INTEGER, INTENT(OUT) :: COUNTS(-9:14) ! initialize the COUNTS array that determines when we need to stop ! at a special point INTEGER NTY,I,J COUNTS(:) = 0 ! initialize from IPS, ISP, ILP, ITPST IF(ISP<0)THEN COUNTS(-8:-5) = 1 ! R4,R3,R2,R1 COUNTS(-3:-1) = 1 ! ZH,Cusp,BT COUNTS(1) = 1 ! BP (AE) COUNTS(3) = 1 ! HB (AE) COUNTS(6:8) = 1 ! BP(BVP),PD,TR COUNTS(10:14) = 1 ! GH,LPD,LTR,PTR,TTR ENDIF IF(ILP<0)THEN COUNTS(2) = 1 ! LP (AE) COUNTS(5) = 1 ! LP (BVP) ENDIF IF(ITPST==3)THEN !BT on Hopf bif must always stop it COUNTS(-1) = 1 ENDIF ! look both at SP and STOP: SP is for backwards compatibility ! but STOP is preferred DO I=1,SIZE(SP) J=SCAN(SP(I)(3:),"-0123456789")+2 IF (J>2) THEN DO NTY=-9,14 IF(SP(I)(1:J-1)==TRIM(ATYPES(NTY))) THEN READ(SP(I)(J:),*)COUNTS(NTY) ENDIF ENDDO ENDIF ENDDO DO I=1,SIZE(STOPS) J=SCAN(STOPS(I)(3:),"-0123456789")+2 IF (J>2) THEN DO NTY=-9,14 IF(STOPS(I)(1:J-1)==TRIM(ATYPES(NTY))) THEN READ(STOPS(I)(J:),*)COUNTS(NTY) ENDIF ENDDO ENDIF ENDDO END SUBROUTINE INITSTOPCNTS ! ------- -------- ------- LOGICAL FUNCTION STOPPED(IUZ,ITEST,NUZR,ITP,COUNTS) INTEGER, INTENT(IN) :: IUZ(*),ITEST,NUZR,ITP INTEGER, INTENT(INOUT) :: COUNTS(-9:10) ! determine if the given TY label has been reached n times so ! we need to stop INTEGER NTY IF(ITEST<=NUZR)THEN IF(IUZ(ITEST)<0)THEN STOPPED=.TRUE. RETURN ENDIF ENDIF SELECT CASE(ITP) CASE(-32) NTY=10 ! 'GH' CASE(28,78) NTY=11 ! 'LPD' CASE(23,83) NTY=12 ! 'LTR' CASE(77,87) NTY=13 ! 'PTR' CASE(88) NTY=14 ! 'TTR' CASE DEFAULT NTY=MOD(ITP,10) END SELECT STOPPED = .FALSE. IF (COUNTS(NTY) > 0) THEN IF (COUNTS(NTY)==1) THEN STOPPED=.TRUE. ENDIF COUNTS(NTY) = COUNTS(NTY) - 1 ENDIF END FUNCTION STOPPED ! ------- -------- --------- LOGICAL FUNCTION DIRECTION(IIS, ITP) ! include direction info in solution files depending on IIS and ! the type of the point INTEGER, INTENT(IN) :: IIS, ITP INTEGER ITP0 ITP0=MOD(ITP,10) DIRECTION=.TRUE. SELECT CASE(IIS) CASE(0) ! never DIRECTION=.FALSE. CASE(1) ! only for BP/LP(BVP)/PD/TR DIRECTION=ITP0==1.OR.(ITP0>=5.AND.ITP0<=8) CASE(2) ! for all points except regular (every NPR step) DIRECTION=ITP0/=4 END SELECT END FUNCTION DIRECTION ! FNCS and FNUZ are the same for AE and BVP ! ------ --------- -------- ---- DOUBLE PRECISION FUNCTION FNCS(AP,ICP,UPS,PAR,ATYPE,IUZ,VUZ,ITEST,FNCI) include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: UPS(*) INTEGER, INTENT(IN) :: IUZ(*),ICP(*),ITEST DOUBLE PRECISION, INTENT(IN) :: VUZ(*) INTEGER NUZR NUZR=AP%NUZR IF(ITEST<=NUZR)THEN FNCS=FNUZ(AP,PAR,ATYPE,IUZ,VUZ,ITEST) ELSE FNCS=FNCI(AP,ICP,UPS,AP%NDIM,PAR,ITEST-NUZR,ATYPE) ENDIF END FUNCTION FNCS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNUZ(AP,PAR,ATYPE,IUZ,VUZ,IUZR) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE INTEGER, INTENT(IN) :: IUZ(*),IUZR DOUBLE PRECISION, INTENT(IN) :: VUZ(*) INTEGER IID,IBR,NTOT,NTOP ATYPE='' FNUZ=0.d0 IF(.NOT.CHECKSP('UZ',AP%IPS,AP%ILP,AP%ISP))RETURN IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 FNUZ=PAR(ABS(IUZ(IUZR)))-VUZ(IUZR) ATYPE='UZ' IF(IID.GE.3)WRITE(9,101)ABS(IBR),NTOP+1,IUZR,FNUZ 101 FORMAT(I4,I6,9X,'User Func.',I3,1X,ES14.5) END FUNCTION FNUZ ! ---------- ---- SUBROUTINE PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION Q CHARACTER(4) ATYPEDUM Q=FNCI(AP,ICP,UPS,NDIM,PAR,0,ATYPEDUM) END SUBROUTINE PVLI ! ------- -------- ------- INTEGER FUNCTION NAMEIDX(NAME,NAMES) USE AUTO_CONSTANTS, ONLY: INDEXSTR CHARACTER(13), INTENT(IN) :: NAME TYPE(INDEXSTR), INTENT(IN) :: NAMES(:) CHARACTER(13) PNAME INTEGER I,SIGN,ios ! map a symbolic parameter name or an ascii integer to an index SIGN=1 IF(NAME(1:1)=='-')THEN PNAME=NAME(2:) SIGN=-1 ELSE PNAME=NAME ENDIF DO I=1,SIZE(NAMES) IF(NAMES(I)%STR==PNAME)THEN NAMEIDX=NAMES(I)%INDEX*SIGN RETURN ENDIF ENDDO IF(TRIM(PNAME)=='PERIOD')THEN NAMEIDX=SIGN*11 ELSE READ(NAME,*,IOSTAT=ios)NAMEIDX IF(ios/=0)THEN WRITE(6,"(A,A,A)")"Name '",TRIM(NAME),"' not found." CALL AUTOSTOP() ENDIF ENDIF END FUNCTION NAMEIDX ! ---------- ----- SUBROUTINE INIT2(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*), ICU(*) INTEGER I,IPS,NICP,NFPR,NPAR,NPARI ! check output (user-specified) parameters NICP=AP%NICP DO I=1,NICP IF(ICU(I)<=0)THEN WRITE(6,'(A,I5,A,I5)') & "Invalid parameter index ",ICU(I), & " specified in ICP index ",I CALL AUTOSTOP() ENDIF ENDDO ! check active continuation parameters NFPR=AP%NFPR DO I=NICP+1,NFPR IF(ICP(I)==0)THEN WRITE(6,'(A/A,I5,A,I5,A)') & "Insufficient number of parameters in ICP.", & "You specified ",NICP," but need at least ", & NFPR-I+1+NICP, " continuation parameters." CALL AUTOSTOP() ENDIF ENDDO NPARI=AP%NPARI NPAR=AP%NPAR NPAR=MAX(MAXVAL(ICP(:NFPR)),NPAR+NPARI) IPS=AP%IPS IF(ABS(IPS)==1.OR.IPS==2.OR.IPS>=7)THEN !HB period and period for periodic orbits stored in PAR(11) NPAR=MAX(11,NPAR) IF(CHECKSP('TR',IPS,AP%ILP,AP%ISP))THEN ! the torus angle is stored in PAR(12) NPAR=MAX(12,NPAR) ENDIF ENDIF AP%NPAR=NPAR AP%NTEST=AP%NTEST+AP%NUZR END SUBROUTINE INIT2 ! ---------- ----- SUBROUTINE INIT3(AP,ICP,PAR,THL,THU,IUZ,VUZ) USE AUTO_CONSTANTS, ONLY: IVTHL,IVTHU,IVUZR,IVUZSTOP,unames,parnames,SVFILE TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(:), THL(*), THU(*), VUZ(*) INTEGER, INTENT(INOUT) :: IUZ(*) INTEGER I,J,K,IND CHARACTER(258) :: SOLFILE, BIFFILE, DIAFILE PAR(:)=0.d0 ! redefine thl to be nfpr indexed DO I=1,AP%NFPR THL(I)=1.0D0 DO J=1,SIZE(IVTHL) IF(ICP(I)==NAMEIDX(IVTHL(J)%INDEX,parnames))THEN THL(I)=IVTHL(J)%VAR ENDIF ENDDO ENDDO DO I=1,AP%NDIM THU(I)=1.d0 ENDDO DO I=1,SIZE(IVTHU) THU(NAMEIDX(IVTHU(I)%INDEX,unames))=IVTHU(I)%VAR ENDDO ! set IUZ/VUZ K=0 DO I=1,SIZE(IVUZR) IND=NAMEIDX(IVUZR(I)%INDEX,parnames) DO J=1,SIZE(IVUZR(I)%VAR) K=K+1 IUZ(K)=IND VUZ(K)=IVUZR(I)%VAR(J) ENDDO ENDDO DO I=1,SIZE(IVUZSTOP) IND=NAMEIDX(IVUZSTOP(I)%INDEX,parnames) DO J=1,SIZE(IVUZSTOP(I)%VAR) K=K+1 IUZ(K)=-IND VUZ(K)=IVUZSTOP(I)%VAR(J) ENDDO ENDDO ! only now open the output files IF(AP%NTOT==0)THEN IF(SVFILE/='')THEN BIFFILE='b.'//SVFILE SOLFILE='s.'//SVFILE DIAFILE='d.'//SVFILE ELSE BIFFILE='fort.7' SOLFILE='fort.8' DIAFILE='fort.9' ENDIF OPEN(7,FILE=BIFFILE,STATUS='unknown',ACCESS='sequential') OPEN(8,FILE=SOLFILE,STATUS='unknown',ACCESS='sequential') OPEN(9,FILE=DIAFILE,STATUS='unknown',ACCESS='sequential') ENDIF END SUBROUTINE INIT3 SUBROUTINE AUTOSTOP() USE AUTOMPI, ONLY: MPIEND CALL MPIEND() STOP END SUBROUTINE AUTOSTOP END MODULE SUPPORT ! The following functions and subroutines are called from ! various demos so cannot be inside the module ! ---------- -- SUBROUTINE GE(IAM,N,M1A,A,NRHS,NDX,U,M1F,F,IR,IC,DET) USE SUPPORT IMPLICIT NONE INTEGER, INTENT(IN) :: IAM,N,M1A,NRHS,NDX,M1F,IR(N) DOUBLE PRECISION, INTENT(INOUT) :: A(M1A,N),F(M1F,NRHS) DOUBLE PRECISION, INTENT(OUT) :: U(NDX,NRHS),DET INTEGER, INTENT(OUT) :: IC(N) CALL GELI(N,M1A,A,NRHS,NDX,U,M1F,F,IC,DET,.FALSE.) END SUBROUTINE GE ! ------ --------- -------- ---- DOUBLE PRECISION FUNCTION GETP(CODE,IC,UPS) USE MESH USE SUPPORT USE AUTOMPI, ONLY: MPIIAM IMPLICIT NONE CHARACTER(3), INTENT(IN) :: CODE INTEGER, INTENT(IN) :: IC DOUBLE PRECISION, INTENT(IN) :: UPS(AV%NDIM*AV%NCOL,*) INTEGER NDIM,IPS,NTST,NCOL,NBC,NINT DOUBLE PRECISION WI(0:AV%NCOL) NDIM=AV%NDIM IPS=AV%IPS NTST=AV%NTST NCOL=AV%NCOL NBC=AV%NBC NINT=AV%NINT GETP=0 IF(MPIIAM()>0)THEN RETURN ENDIF IF( IPS<=1 .OR. IPS==5 .OR. IPS==11)THEN SELECT CASE(CODE) CASE('NRM','nrm') GETP=ABS(UPS(IC,1)) CASE('INT','int','MAX','max','MIN','min','BV1','bv1') GETP=UPS(IC,1) CASE('HBF','hbf') GETP=AV%HBFF CASE('BIF','bif') GETP=AV%DET CASE('SPB','spb','MXT','mxt','MNT','mnt','DTM','dtm','WIN','win') GETP=0. END SELECT ELSE SELECT CASE(CODE) CASE('NRM','nrm') GETP=RNRM2(NTST,NCOL,NDIM,IC,UPS,DTV) CASE('INT','int') GETP=RINTG(NTST,NCOL,NDIM,IC,UPS,DTV) CASE('MAX','max') GETP=RMXUPS(NTST,NCOL,NDIM,IC,UPS) CASE('MIN','min') GETP=RMNUPS(NTST,NCOL,NDIM,IC,UPS) CASE('MXT','mxt') GETP=RMXUPST(NTST,NCOL,NDIM,IC,UPS,DTV) CASE('MNT','mnt') GETP=RMNUPST(NTST,NCOL,NDIM,IC,UPS,DTV) CASE('DTM','dtm') GETP=DTV(IC) CASE('WIN','win') CALL WINT(NCOL,WI) GETP=WI(IC) CASE('BV1','bv1') GETP=UPS(IC,AV%NTST+1) CASE('HBF','hbf') GETP=0.d0 CASE('BIF','bif') GETP=AV%BIFF CASE('SPB','spb') GETP=AV%SPBF END SELECT ENDIF SELECT CASE(CODE) CASE('BV0','bv0') GETP=UPS(IC,1) CASE('STP','stp') GETP=AV%RDS CASE('FLD','fld') GETP=AV%FLDF CASE('STA','sta') GETP=AV%NINS CASE('EIG','eig') IF(MOD(IC,2)==1)THEN GETP=REAL(EVV((IC+1)/2)) ELSE GETP=AIMAG(EVV(IC/2)) ENDIF CASE('NDI','ndi','NDX','ndx') GETP=NDIM CASE('NTS','nts') GETP=NTST CASE('NCO','nco') GETP=NCOL CASE('NBC','nbc') GETP=NBC CASE('NIN','nin') GETP=NINT END SELECT END FUNCTION GETP ! ---------- ------- SUBROUTINE GETMDMX(NDIM1,P0,P1,NMM) USE SUPPORT IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM1 DOUBLE PRECISION, INTENT(OUT) :: P0(NDIM1,NDIM1),P1(NDIM1,NDIM1) LOGICAL, INTENT(OUT) :: NMM INTEGER NDIM,IPS,ISP,NTOT NDIM=AV%NDIM IPS=AV%IPS ISP=AV%ISP NTOT=AV%NTOT NMM=.FALSE. IF(NDIM==NDIM1.AND.NTOT>0.AND.ABS(ISP)>0.AND. & (IPS==2.OR.IPS==7.OR.IPS==12))THEN P0=P0V P1=P1V NMM=.TRUE. ENDIF END SUBROUTINE GETMDMX ! ! because some demos call RG here is a wrapper around DGEEV ! SUBROUTINE RG(M1A,NDIM,A,WR,WI,MATZ,Z,IV1,FV1,IER) IMPLICIT NONE INTEGER, INTENT(IN) :: M1A,NDIM,MATZ,IV1(NDIM) DOUBLE PRECISION, INTENT(IN) :: FV1(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: A(M1A,NDIM) DOUBLE PRECISION, INTENT(OUT) :: WR(NDIM),WI(NDIM),Z(M1A,NDIM) INTEGER, INTENT(OUT) :: IER CHARACTER(1) JOBVR INTEGER LWORK DOUBLE PRECISION WORKINFO(1) DOUBLE PRECISION, ALLOCATABLE :: WORK(:) IF(MATZ==1)THEN JOBVR='V' ELSE JOBVR='N' ENDIF CALL DGEEV('N',JOBVR,NDIM,A,M1A,WR,WI,Z,M1A,Z,M1A,WORKINFO,-1,IER) LWORK=NINT(WORKINFO(1)) ALLOCATE(WORK(LWORK)) CALL DGEEV('N',JOBVR,NDIM,A,M1A,WR,WI,Z,M1A,Z,M1A,WORK,LWORK,IER) DEALLOCATE(WORK) END SUBROUTINE RG auto/07p/src/equilibrium.f900000640000175000017500000005571113570013207013711 0ustar skskMODULE EQUILIBRIUM USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE AE USE TOOLBOXAE USE INTERFACES IMPLICIT NONE PRIVATE PUBLIC :: AUTOEQ,INITEQ,FNCSEQF PUBLIC :: FNHBF,STPNHBF,FFHBX,STABEQ,PRINTEIG ! Hopf bifs DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ------ SUBROUTINE INITEQ(AP) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP SELECT CASE(AP%ITPST) CASE(3) ! Hopf AP%NDIM=2*AP%NDIM+2 AP%NFPR=2 CASE DEFAULT CALL INITAE(AP) END SELECT AP%NTEST=6 END SUBROUTINE INITEQ ! ---------- ------ SUBROUTINE AUTOEQ(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) CALL INITEQ(AP) SELECT CASE(AP%ITPST) CASE(0) ! Algebraic systems. CALL AUTOAE(AP,ICP,ICU,FUNI,STPNAE,FNCSEQ) CASE(1) ! ** BP cont (algebraic problems) (by F. Dercole). CALL AUTOAE(AP,ICP,ICU,FNBP,STPNBP,FNCSEQ) CASE(2) ! ** Fold continuation (algebraic problems). CALL AUTOAE(AP,ICP,ICU,FNLP,STPNLP,FNCSEQ) CASE(3) ! Hopf bifurcation continuation (ODEs). CALL AUTOAE(AP,ICP,ICU,FNHB,STPNHB,FNCSEQ) END SELECT END SUBROUTINE AUTOEQ !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Hopf Bifurcation Points !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNHB(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-parameter continuation of Hopf ! bifurcation points in ODE/map. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNHBF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI,FFHBX) END SUBROUTINE FNHB ! ---------- ----- SUBROUTINE FNHBF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI,FUNIX) ! Generates the equations for the 2-parameter continuation of Hopf ! bifurcation points in ODE/wave/map. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),DFP(:,:),FF1(:),FF2(:) INTEGER NDM,NPAR,I,II,J,IJC DOUBLE PRECISION UU,UMX,EP,P NDM=AP%NDM NPAR=AP%NPAR IF(NDIM==NDM)THEN ! reduced function for Generalized-Hopf detection CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,0,F,DFDU,DFDP) RETURN ENDIF ! Generate the function. ALLOCATE(DFU(NDM,2*NDM+2),DFP(NDM,NPAR)) IF(IJAC==0)THEN IJC=IJAC ELSE IJC=2 ENDIF CALL FFHB(AP,NDIM,U,UOLD,ICP,PAR,IJC,F,NDM,DFU,DFP,FUNI,FUNIX) IF(IJAC.EQ.0)THEN DEALLOCATE(DFU,DFP) RETURN ENDIF ! Generate the Jacobian. ALLOCATE(FF1(NDIM),FF2(NDIM)) UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DFDU(1:NDM,1:NDM)=DFU(:,:) DFDU(1:NDM,NDM+1:NDIM-1)=0d0 DFDU(1:NDM,NDIM)=DFP(:,ICP(2)) DFDU(NDM+1:2*NDM,NDM+1:NDIM-1)=DFU(1:NDM,NDM+1:2*NDM+1) DFDU(NDIM-1,1:NDM)=0d0 DFDU(NDIM-1,NDM+1:2*NDM)=2*U(NDM+1:2*NDM) DFDU(NDIM-1,NDIM-1:NDIM)=0d0 DFDU(NDIM,NDM+1:2*NDM)=DFU(1:NDM,2*NDM+2) IF(IJAC/=1)THEN DFDP(1:NDM,ICP(1))=DFP(:,ICP(1)) ENDIF DO II=1,NDM+1 I=II IF(II>NDM)I=NDIM UU=U(I) U(I)=UU-EP CALL FFHB(AP,NDIM,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DFP,FUNI,FUNIX) U(I)=UU+EP CALL FFHB(AP,NDIM,U,UOLD,ICP,PAR,0,FF2,NDM,DFU,DFP,FUNI,FUNIX) U(I)=UU DO J=NDM+1,NDIM IF(J/=NDIM-1)THEN DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDIF ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(FF1,DFP,DFU) RETURN ENDIF P=PAR(ICP(1)) PAR(ICP(1))=P+EP CALL FFHB(AP,NDIM,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DFP,FUNI,FUNIX) DO J=NDM+1,NDIM IF(J/=NDIM-1)THEN DFDP(J,ICP(1))=(FF1(J)-F(J))/EP ENDIF ENDDO DFDP(NDIM-1,ICP(1))=0d0 PAR(ICP(1))=P DEALLOCATE(FF1,DFP,DFU) END SUBROUTINE FNHBF ! ---------- ---- SUBROUTINE FFHB(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP,FUNI,FUNIX) ! See Kuznetsov, 3rd ed., (10.80) and (10.83) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NDM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,2*NDM+2) DOUBLE PRECISION, INTENT(INOUT) :: DFDP(NDM,*) include 'interfaces.h' PAR(ICP(2))=U(NDIM) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,MAX(IJAC,1),F,DFDU,DFDP) CALL FUNIX(AP,U,PAR,DFDU,DFDU(1,NDM+1)) CALL DGEMV('n',NDM,NDM,1.0d0,DFDU(1,NDM+1),NDM,U(NDM+1),1,0d0,F(NDM+1),1) F(NDIM-1)=-1+DOT_PRODUCT(U(NDM+1:2*NDM),U(NDM+1:2*NDM)) ! This expression ! ! approximates the previously used phase condition ! - ! disregarding the factor T/(2*pi). ! where \eta=U(NDM+1:NDM*2), \eta_0=UOLD(NDM+1:NDM*2), and ! \xi=-T/(2*pi)*DFDU \eta CALL DGEMV('t',NDM,NDM,1d0,DFDU,NDM,UOLD(NDM+1),1,0d0,DFDU(1,2*NDM+2),1) CALL DGEMV('n',NDM,NDM,-1d0,DFDU,NDM,UOLD(NDM+1),1,1d0,DFDU(1,2*NDM+2),1) F(NDIM)=DOT_PRODUCT(DFDU(:,2*NDM+2),U(NDM+1:2*NDM)) END SUBROUTINE FFHB ! ---------- ----- SUBROUTINE FFHBX(AP,U,PAR,DFDU,DFDV) USE SUPPORT, ONLY: PI USE AUTO_CONSTANTS, ONLY: TY TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(INOUT) :: U(AP%NDM*2+2),PAR(*) DOUBLE PRECISION, INTENT(IN) :: DFDU(AP%NDM,AP%NDM) DOUBLE PRECISION, INTENT(OUT) :: DFDV(AP%NDM,AP%NDM+1) INTEGER I,NDM DOUBLE PRECISION PERIOD,KAPPA NDM=AP%NDM IF(AP%ITP==3)THEN ! initialization IF(LEN_TRIM(TY)>2)THEN READ(TY(3:),'(I5)')I PAR(11)=PAR(I) ENDIF PERIOD=PAR(11) KAPPA=(PI(2.d0)/PERIOD)**2 U(2*NDM+1)=KAPPA ENDIF ! construct matrix for extended Hopf system ! Kuznetsov, 3rd ed., (10.80) ! A^2+kappa I and the derivative to kappa, where A=DFDU CALL DGEMM('n','n',NDM,NDM,NDM,1.d0,DFDU,NDM,DFDU,NDM,0.d0,DFDV,NDM) KAPPA=U(NDM*2+1) DO I=1,NDM DFDV(I,I)=DFDV(I,I)+KAPPA ENDDO DFDV(1:NDM,NDM+1)=U(NDM+1:2*NDM) END SUBROUTINE FFHBX ! ---------- ------ SUBROUTINE STPNHB(AP,PAR,ICP,U,UDOT,NODIR) USE SUPPORT ! Generates starting data for the 2-parameter continuation of ! Hopf bifurcation point (ODEs). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNHBF(AP,PAR,ICP,U,UDOT,NODIR,FUNI,FFHBX) END SUBROUTINE STPNHB ! ---------- ------- SUBROUTINE STPNHBF(AP,PAR,ICP,U,UDOT,NODIR,FUNI,FUNIX) USE IO USE SUPPORT USE TOOLBOXAE, ONLY: STPNAE ! Generates starting data for the 2-parameter continuation of ! Hopf bifurcation point (ODE/wave/map). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),V(:),F(:),UOLD(:) INTEGER :: ICPRS(2),NDIM,NDM,I DOUBLE PRECISION DFP(1) NDIM=AP%NDIM NDM=AP%NDM IF(ABS(AP%ITP)/10>0)THEN ! restart CALL STPNAE(AP,PAR,ICP,U,UDOT,NODIR) U(NDIM)=PAR(ICP(2)) RETURN ENDIF CALL READLB(AP,ICPRS,U,UDOT,PAR) ALLOCATE(DFU(NDM,2*NDM+2),F(NDM),V(NDM),UOLD(NDM)) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,1,F,DFU,DFP) ! store matrix/derivatives for extended Hopf system in the ! bottom of DFDU CALL FUNIX(AP,U,PAR,DFU,DFU(1,NDM+1)) CALL NLVC(NDM,NDM,2,DFU(1,NDM+1),V) CALL NRMLZ(NDM,V) DO I=1,NDM U(NDM+I)=V(I) ENDDO U(NDIM)=PAR(ICP(2)) DEALLOCATE(DFU,F,V) NODIR=1 END SUBROUTINE STPNHBF ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSEQ(AP,ICP,U,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=FNCSEQF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) END FUNCTION FNCSEQ ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION FNCSEQF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) & RESULT(Q) USE SUPPORT, ONLY: AA=>P0V, PI USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION KAPPA Q=0.d0 ATYPE='' SELECT CASE(ITEST) CASE(0) IF(AP%ITPST==3)THEN ! Monitor period via PAR(11) on Hopf bifurcations KAPPA=U(NDIM-1) IF(KAPPA>0)THEN PAR(11)=PI(2.d0)/SQRT(KAPPA) ENDIF ENDIF Q=FNCSAEF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) CASE(1:3) Q=FNCSAEF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) CASE(4) ! Check for Bogdanov-Takens bifurcation Q=FNBTEQ(AP,ATYPE,U,AA) CASE(5) ! Check for generalized Hopf (Bautin) Q=FNGHEQ(AP,PAR,ICP,ATYPE,FUNI,U,AA) CASE(6) ! Check for Hopf or Zero-Hopf Q=FNHBEQ(AP,PAR,ATYPE,AA) END SELECT END FUNCTION FNCSEQF ! ---------- -------- SUBROUTINE PRINTEIG(AP) USE SUPPORT, ONLY : EVV TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER i,NTOP IF(AP%IID>0)THEN NTOP=MOD(AP%NTOT-1,9999)+1 WRITE(9,102)ABS(AP%IBR),NTOP+1,AP%NINS DO i=1,AP%NDM WRITE(9,103)ABS(AP%IBR),NTOP+1,I,EVV(i) ENDDO ENDIF 102 FORMAT(/,I4,I6,9X,'Eigenvalues : Stable:',I4) 103 FORMAT(I4,I6,9X,'Eigenvalue',I3,":",2ES14.5) END SUBROUTINE PRINTEIG ! ---------- ------ SUBROUTINE STABEQ(AP,AA,EV,NINS,LOC,N) ! determine stability given eigenvalues ! the eigenvalues are sorted by real part ! on output, NINS contains the number of negative (within tolerance) ! eigenvalues, and LOC the position of the eigenvalue nth-closest ! to 0 (the (n-1)th closest are assumed to be close to 0 already) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: EV(:) DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) INTEGER, INTENT(OUT) :: NINS, LOC INTEGER, INTENT(IN) :: N ! Local INTEGER NDM,I,j,k,k1,ITPST,LOCS(N) DOUBLE PRECISION a,AR,AREV,tol,trace COMPLEX(KIND(1.0D0)) ZTMP NDM=AP%NDM ITPST=AP%ITPST ! Set tolerance for deciding if an eigenvalue is in the positive ! half-plane. Use, for example, tol=1d-3 for conservative systems. ! Try to guess whether the system is probably conservative or definitely not: ! the dimension is even and the trace 0 if it is conservative. ! In that case we use a tolerance to avoid detecting spurious ! Hopf bifurcations. tol=0.d0 IF(MOD(NDM,2)==0)THEN trace=0.d0 DO I=1,NDM trace=trace+AA(i,i) ENDDO a=0.d0 DO i=1,NDM DO j=1,NDM IF(ABS(AA(i,j))>a)THEN a=ABS(AA(i,j)) ENDIF ENDDO ENDDO IF(ABS(trace)=ABS(AIMAG(EV(LOC))))THEN LOC=J ENDIF ELSEIF(REAL(EV(J))>=REAL(EV(LOC)))THEN LOC=J ENDIF ENDDO IF(LOC>I) THEN ZTMP=EV(LOC) EV(LOC)=EV(I) EV(I)=ZTMP ENDIF ENDDO ! Compute the nth smallest real part in magnitude. LOCS(:)=0 DO J=1,N AREV=HUGE(AREV) DO I=1,NDM K1=0 DO K=1,N-1 IF(I==LOCS(K))THEN K1=K EXIT ENDIF ENDDO IF(K1==0.AND.(AIMAG(EV(I)).NE.0.d0.OR.ITPST/=0))THEN AR=ABS(REAL(EV(I))) IF(AR.LE.AREV)THEN AREV=AR LOCS(J)=I ENDIF ENDIF ENDDO ENDDO LOC=LOCS(N) ! Count the number of eigenvalues with negative real part. NINS=0 DO I=1,NDM IF(REAL(EV(I)).LE.tol)THEN NINS=NINS+1 ELSE DO J=1,N-1 IF(I==LOCS(J))THEN NINS=NINS+1 ENDIF ENDDO ENDIF ENDDO END SUBROUTINE STABEQ ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNHBEQ(AP,PAR,ATYPE,AA) USE SUPPORT, ONLY: PI, EVV, EIG, CHECKSP, LBTYPE TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) ! Local COMPLEX(KIND(1.0D0)), ALLOCATABLE :: EV(:) DOUBLE PRECISION, ALLOCATABLE :: AAA(:,:) INTEGER NDM,ISP,IID,IBR,NTOT,NTOP,NINS,LOC,ITPST DOUBLE PRECISION RIMHB,REV NDM=AP%NDM ISP=AP%ISP IID=AP%IID IBR=AP%IBR ITPST=AP%ITPST NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 ALLOCATE(EV(NDM)) ! INITIALIZE FNHBEQ=0d0 ATYPE='' ! Compute the eigenvalues of the Jacobian ALLOCATE(AAA(NDM,NDM)) AAA(:,:)=AA(1:NDM,1:NDM) CALL EIG(AP,NDM,NDM,AAA,EV) DEALLOCATE(AAA) IF(ITPST==3)THEN ! HB CALL STABEQ(AP,AA,EV,NINS,LOC,3) ELSEIF(ITPST==2)THEN CALL STABEQ(AP,AA,EV,NINS,LOC,2) ELSE CALL STABEQ(AP,AA,EV,NINS,LOC,1) ENDIF EVV(:)=EV(:) ! do not detect special bifs on BP curves or if BT already detected IF(ITPST==1.OR.MOD(AP%ITP,10)==-1)GOTO 100 REV=0.d0 IF(LOC>0)THEN REV=REAL(EV(LOC)) IF(ITPST==0)THEN ! plain Hopf bif, not Zero-Hopf RIMHB=ABS(AIMAG(EV(LOC))) IF(RIMHB>0)PAR(11)=PI(2.d0)/RIMHB ENDIF ENDIF IF(ITPST==0)THEN ATYPE='HB' ELSEIF(ITPST==2.OR.ITPST==3)THEN ATYPE='ZH' ! Check for Zero-Hopf ENDIF IF(.NOT.CHECKSP(ATYPE,AP%IPS,AP%ILP,ISP))THEN ATYPE='' ELSE FNHBEQ=REV IF(IID>=2)WRITE(9,101)ABS(IBR),NTOP+1,FNHBEQ ENDIF AP%HBFF=FNHBEQ IF(LEN_TRIM(ATYPE)>0)THEN IF(ITPST==3)THEN ! detect zero on Zero-Hopf IF(NINS==AP%NINS)ATYPE(3:3)='0' ELSE ! detect plain Hopf or Hopf on LP IF(ABS(NINS-AP%NINS)<2)ATYPE(3:3)='0' ENDIF ENDIF 100 AP%NINS=NINS CALL PRINTEIG(AP) DEALLOCATE(EV) 101 FORMAT(I4,I6,9X,'Hopf Function:',ES14.5) END FUNCTION FNHBEQ ! ---------- ------- SUBROUTINE RNULLVC(AP,AA,V) ! get null vector for the transposed Jacobian for BT/CP detection USE SUPPORT, ONLY: NLVC, NRMLZ TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: V(AP%NDM) DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:) DOUBLE PRECISION, ALLOCATABLE, SAVE :: VOLD(:) INTEGER NDM,I NDM=AP%NDM IF(.NOT.ALLOCATED(VOLD))THEN ALLOCATE(VOLD(NDM)) VOLD(:)=0 ENDIF ALLOCATE(DFU(NDM,NDM)) DO I=1,NDM DFU(1:NDM,I)=AA(NDM+I,NDM+1:2*NDM) ENDDO CALL NLVC(NDM,NDM,1,DFU,V) CALL NRMLZ(NDM,V) IF(DOT_PRODUCT(V,VOLD)<0)THEN V(:)=-V(:) ENDIF VOLD(:)=V(:) DEALLOCATE(DFU) END SUBROUTINE RNULLVC ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNBTEQ(AP,ATYPE,U,AA) USE SUPPORT, ONLY: CHECKSP TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: U(AP%NDIM), AA(AP%NDIM+1,AP%NDIM+1) ! Local INTEGER NTOP FNBTEQ = 0 ATYPE='' IF(.NOT.CHECKSP('BT',AP%IPS,AP%ILP,AP%ISP))THEN RETURN ENDIF IF(AP%ITPST==2)THEN ! BT on Fold curve FNBTEQ=FNBTAE(AP,U,AA) ELSEIF(AP%ITPST==3)THEN ! BT on Hopf curve FNBTEQ = U(AP%NDIM-1) ELSE RETURN ENDIF ATYPE='BT' NTOP=MOD(AP%NTOT-1,9999)+1 IF(AP%IID.GE.2)WRITE(9,101)ABS(AP%IBR),NTOP+1,FNBTEQ 101 FORMAT(I4,I6,9X,'BT Function:',ES14.5) END FUNCTION FNBTEQ ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNGHEQ(AP,PAR,ICP,ATYPE,FUNI,U,AA) ! Evaluate first Lyapunov coefficient for Bautin (GH) bifurcations ! and to determine if the Hopf is subcritical or supercritical. USE SUPPORT, ONLY: NRMLZ, NLVC, GEL, CHECKSP include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: U(AP%NDIM),AA(AP%NDIM+1,AP%NDIM+1) INTEGER, INTENT(IN) :: ICP(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: pR(:),qR(:),pI(:),qI(:),sR(:),sI(:),r(:) DOUBLE PRECISION, ALLOCATABLE :: a(:),b(:),c(:),abc(:),tmp(:) DOUBLE PRECISION, ALLOCATABLE :: f1(:),f2(:),x(:),SMAT(:,:),A1(:,:) DOUBLE PRECISION alpha,beta,DUM(1),h,omega,DET,phi DOUBLE PRECISION delta1,delta2,delta3,delta4,Delta DOUBLE PRECISION gamma1,gamma2,gamma3,gamma4,Gamma DOUBLE PRECISION sigma1,sigma2,Sigma INTEGER n,i,NTOP FNGHEQ = 0 ATYPE = '' IF(AP%ISW/=2.OR.AP%ITPST/=3.OR..NOT.CHECKSP('GH',AP%IPS,AP%ILP,AP%ISP))THEN RETURN ENDIF ! do not try to compute first Lyapunov coefficient if BT already detected IF(MOD(AP%ITP,10)==-1)RETURN IF((U(AP%NDIM-1))<=0)RETURN omega = SQRT(U(AP%NDIM-1)) n = AP%NDM ALLOCATE(pI(n),pR(n),qR(n),qI(n),sR(n),sI(n),f1(n),f2(n),x(n),r(n)) ALLOCATE(a(n),b(n),c(n),abc(2*n),tmp(2*n),SMAT(2*n,2*n),A1(n,n)) h = 0.d0 DO i = 1,n IF(ABS(U(i))>h) h = ABS(U(i)) ENDDO h = (EPSILON(h)**(1d0/3))*(1+h) ! Following Kuznetsov, Elements of Applied Bif. Theory, 3rd Ed., 10.2 ! Step 1 qR = U(n+1:2*n) ! qI=-AA.qR/omega CALL DGEMV('N',n,n,-1/omega,AA,AP%NDIM+1,qR,1,0d0,qI,1) ! normalize so that =0 phi = ATAN2(-2*DOT_PRODUCT(qR,qI),1-DOT_PRODUCT(qI,qI))/2 alpha = COS(phi) beta = SIN(phi) tmp(:n) = alpha*qR-beta*qI tmp(n+1:) = alpha*qI+beta*qR ! normalize so that +=1 CALL NRMLZ(2*n,tmp) qR = tmp(:n) qI = tmp(n+1:) ! compute pR,pI SMAT(:,:) = 0.d0 DO i = 1,n SMAT(I,n+i) = -OMEGA SMAT(n+I,I) = OMEGA ENDDO DO i = 1,n SMAT(1:n,i) = AA(i,1:n) ENDDO SMAT(n+1:2*n,n+1:2*n) = SMAT(1:n,1:n) CALL NLVC(2*n,2*n,2,SMAT,tmp) pR = tmp(:n) pI = tmp(n+1:) ! normalize so that -=0 alpha = DOT_PRODUCT(pR,qR)+DOT_PRODUCT(pI,qI) beta = DOT_PRODUCT(pI,qR)-DOT_PRODUCT(pR,qI) tmp(:n) = alpha*pR+beta*pI tmp(n+1:) = alpha*pI-beta*pR ! normalize so that +=1 tmp(:) = tmp(:)/(DOT_PRODUCT(tmp(:n),qR(:))+DOT_PRODUCT(tmp(n+1:),qI(:))) pR = tmp(:n) pI = tmp(n+1:) ! Step 2 a = DERIV2a(qR) b = DERIV2a(qI) c = DERIV2b(qR, qI) c = c/4 ! Step 3 A1(:,:) = AA(1:n,1:n) f1(:) = a+b CALL GEL(n,A1,1,r,f1,DET) SMAT(:,:) = 0d0 DO i = 1,n SMAT(i,n+i) = -2*omega SMAT(n+i,i) = 2*omega ENDDO SMAT(1:n,1:n) = -AA(1:n,1:n) SMAT(n+1:2*n,n+1:2*n) = SMAT(1:n,1:n) abc(:n) = a-b abc(n+1:) = 2*c CALL GEL(2*n,SMAT,1,tmp,abc,DET) sR = tmp(:n) sI = tmp(n+1:) ! Step 4 sigma1 = DERIV2c(pR, qR, r)/4 sigma2 = DERIV2c(pI, qI, r)/4 Sigma = sigma1+sigma2 ! Step 5 delta1 = DERIV2c(pR, qR, sR)/4 delta2 = DERIV2c(pR, qI, sI)/4 delta3 = DERIV2c(pI, qR, sI)/4 delta4 = DERIV2c(pI, qI, sR)/4 Delta = delta1+delta2+delta3-delta4 ! Step 6 ! adjust h for third order derivatives h = h * EPSILON(h)**(-1d0/12) gamma1 = DERIV3(pR, qR) gamma2 = DERIV3(pI, qI) sR = pR + pI sI = qR + qI gamma3 = DERIV3(sR, sI) sR = pR - pI sI = qR - qI gamma4 = DERIV3(sR, sI) Gamma = ((gamma1+gamma2)*2)/3 + (gamma3+gamma4)/6 ! Step 7 FNGHEQ = (Gamma-2*Sigma+Delta)/(2*omega) DEALLOCATE(pI,pR,qR,qI,sR,sI,f1,f2,x,r,a,b,c,abc,tmp,SMAT,A1) ATYPE='GH' IF(AP%IID>=2)THEN NTOP=MOD(AP%NTOT-1,9999)+1 WRITE(9,"(I4,I6,9X,A,ES14.5)",ADVANCE="no")& ABS(AP%IBR),NTOP+1,'GH Function:',FNGHEQ IF(FNGHEQ>0)THEN WRITE(9,'(A)')' (subcritical)' ELSEIF(FNGHEQ<0)THEN WRITE(9,'(A)')' (supercritical)' ELSE WRITE(9,*) ENDIF ENDIF CONTAINS FUNCTION FN(x) RESULT(f) DOUBLE PRECISION, INTENT(INOUT) :: x(n) DOUBLE PRECISION f(size(x)) CALL FUNI(AP,n,x,x,ICP,PAR,0,f,dum,dum) END FUNCTION FN FUNCTION DERIV2a(p) RESULT(d) DOUBLE PRECISION, INTENT(IN) :: p(n) DOUBLE PRECISION d(size(p)) x(:) = U(:n) + h*p f1 = FN(x) x(:) = U(:n) - h*p f2 = FN(x) d = (f1+f2)/h**2 END FUNCTION DERIV2a FUNCTION DERIV2b(p, q) RESULT(d) DOUBLE PRECISION, INTENT(IN) :: p(n), q(n) DOUBLE PRECISION d(size(p)) x(:) = U(:n) + h*(p+q) f1 = FN(x) x(:) = U(:n) + h*(p-q) f2 = FN(x) d = f1-f2 x(:) = U(:n) - h*(p+q) f1 = FN(x) x(:) = U(:n) - h*(p-q) f2 = FN(x) d = (d + f1-f2)/h**2 END FUNCTION DERIV2b FUNCTION DERIV2c(p, q, r) RESULT(d) DOUBLE PRECISION, INTENT(IN) :: p(n), q(n), r(n) DOUBLE PRECISION d x(:) = U(:n) + h*(q+r) f1 = FN(x) x(:) = U(:n) + h*(q-r) f2 = FN(x) d = DOT_PRODUCT(p, f1-f2) x(:) = U(:n) - h*(q+r) f1 = FN(x) x(:) = U(:n) - h*(q-r) f2 = FN(x) d = (d + DOT_PRODUCT(p, f1-f2))/h**2 END FUNCTION DERIV2c FUNCTION DERIV3(p, q) RESULT(d) DOUBLE PRECISION, INTENT(IN) :: p(n), q(n) DOUBLE PRECISION d x(:) = U(:n) + 3*h*q f1 = FN(x) d = DOT_PRODUCT(p,f1) x(:) = U(:n) + h*q f1 = FN(x) d = d - 3*DOT_PRODUCT(p, f1) x(:) = U(:n) - h*q f1 = FN(x) d = d + 3*DOT_PRODUCT(p, f1) x(:) = U(:n) - 3*h*q f1 = FN(x) d = (d-DOT_PRODUCT(p, f1))/(8*h**3) END FUNCTION DERIV3 END FUNCTION FNGHEQ END MODULE EQUILIBRIUM auto/07p/src/homcont.f900000640000175000017500000017751713570013207013042 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for Homoclinic Bifurcation Analysis ! (A. R. Champneys, Yu. A. Kuznetsov, B. Sandstede, ! B. E. Oldeman, E. J. Doedel) !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE HOMCONT USE AUTO_CONSTANTS, ONLY : AUTOPARAMETERS,HCONST,NPARX,NEWCFILE USE BVP USE TOOLBOXBV IMPLICIT NONE PRIVATE PUBLIC :: AUTOHO,INSTRHO ! This common block is also used by demos: don't remove it!! ! Also, don't use the common variables in FNHO and ICHO because ! the MPI code does not transfer them. INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV INTEGER, ALLOCATABLE, TARGET :: IREV(:),IFIXED(:),IPSI(:) LOGICAL, SAVE :: INITCNST=.FALSE. DOUBLE PRECISION, SAVE :: COMPZERO DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ------ SUBROUTINE AUTOHO(AP,ICP,ICU) USE AUTOMPI, ONLY : MPIIAM,MPIBCASTI,MPIBCASTAP TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) ! Redefine AUTO constants for homoclinic orbits ! (only on the first node for MPI) IF(MPIIAM()==0)THEN CALL INHO(AP,ICP) ENDIF CALL MPIBCASTAP(AP) CALL MPIBCASTI(ICP,AP%NFPR) CALL INITBVP(AP,ICP) IF(ABS(AP%ISW)==2.AND.(AP%ITP==5.OR.(ABS(AP%ITP)/10)==5))THEN IF(AP%ITP==5) THEN ! ** Fold continuation (start). CALL AUTOBV(AP,ICP,ICU,FNHOL,BCHOL,ICHOL,STPNHO,FNCSHO) ELSE ! ** Fold continuation (restart). CALL AUTOBV(AP,ICP,ICU,FNHOL,BCHOL,ICHOL,STPNHO,FNCSHO) ENDIF ELSE CALL AUTOBV(AP,ICP,ICU,FNHO,BCHO,ICHO,STPNHO,FNCSHO) ENDIF END SUBROUTINE AUTOHO ! ---------- ---- SUBROUTINE FNHO(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for homoclinic bifurcation analysis TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),DFP(:,:),FF1(:) INTEGER NDM,NFPR,I,J,IT,IEQMAX DOUBLE PRECISION UMX,EP,P,UU NDM=AP%NDM NFPR=AP%NFPR ! Generate the function. IF(NDIM==NDM)THEN ! *Evaluate the R.-H. sides CALL FFHO(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,11) RETURN ENDIF ALLOCATE(DFU(NDM,NDM),DFP(NDM,AP%NPAR)) IF(AP%NPARI>0)THEN ! Homoclinic branch switching DO J=0,NDIM-NDM,NDM IF(IJAC==2)THEN DO I=1,NFPR DFP(:,ICP(I))=0d0 ENDDO ENDIF IF(J==0)THEN IT=10 ELSEIF(J==NDIM-NDM)THEN IT=11 ELSE IT=19+(J/NDM)*2 ENDIF CALL FFHO(AP,NDM,U(J+1),UOLD(J+1),ICP,PAR,IJAC,F(J+1),DFU,DFP,IT) IF(IJAC/=0)THEN DFDU(J+1:J+NDM,J+1:J+NDM)=DFU(:,:) ENDIF IF(IJAC==2)THEN DO I=1,NFPR DFDP(J+1:J+NDM,ICP(I))=DFP(:,ICP(I)) ENDDO ENDIF ENDDO DEALLOCATE(DFU,DFP) RETURN ENDIF ! Generate the function + adjoint variational equation for ITWIST=1 IF(IJAC/=0)THEN ! Generate dF/du for F = - (Df(u))^T U + PAR(10)*f(u) UMX=0.d0 DO I=1,NDIM IF(DABS(U(I))>UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDM UU=U(I) U(I)=UU-EP CALL FFHO(AP,NDIM,U,UOLD,ICP,PAR,1,DFDU(1,I),DFU,DFP,11) U(I)=UU+EP CALL FFHO(AP,NDIM,U,UOLD,ICP,PAR,1,F,DFU,DFP,11) U(I)=UU DO J=NDM+1,NDIM DFDU(J,I)=(F(J)-DFDU(J,I))/(2*EP) ENDDO ENDDO ENDIF IF(IJAC==2)THEN DO I=1,NFPR DFP(:,ICP(I))=0d0 ENDDO ENDIF CALL FFHO(AP,NDIM,U,UOLD,ICP,PAR,MAX(IJAC,1),F,DFU,DFP,11) IF(IJAC==0)THEN DEALLOCATE(DFU,DFP) RETURN ENDIF DFDU(1:NDM,1:NDM)=DFU(:,:) DFDU(1:NDM,NDM+1:NDIM)=0d0 ! *Adjoint variational equations for normal vector ! *Set dF/dU for F = - (Df(u))^T U + PAR(10)*f(u) DO J=1,NDM DO I=1,NDM DFDU(NDM+J,NDM+I)=-DFU(I,J) ENDDO ENDDO IF(IJAC==1)THEN DEALLOCATE(DFU,DFP) RETURN ENDIF ALLOCATE(FF1(NDIM)) DO I=1,NFPR DFDP(1:NDM,ICP(I))=DFP(:,ICP(I)) ENDDO IF(IEQUIB<0)THEN ! heteroclinic equilibrium parameters IEQMAX=11+NDM*2 ELSE ! homoclinic equilibrium parameters IEQMAX=11+NDM ENDIF DO I=1,NFPR IF(ICP(I)==10)THEN DFDP(NDM+1:NDIM,10)=F(:NDM) ELSEIF(ICP(I)==11)THEN DFDP(NDM+1:NDIM,11)=(F(NDM+1:NDIM)+PAR(10)*F(1:NDM))/PAR(11) ENDIF IF(ICP(I)>=10.AND.ICP(I)<=IEQMAX)CYCLE P=PAR(ICP(I)) EP=HMACH*( 1 +ABS(P) ) PAR(ICP(I))=P+EP CALL FFHO(AP,NDIM,U,UOLD,ICP,PAR,1,FF1,DFU,DFP,11) DO J=NDM+1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(FF1,DFU,DFP) END SUBROUTINE FNHO ! ---------- ---- SUBROUTINE FFHO(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,IT) USE INTERFACES, ONLY:FUNI,FUNC TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC,IT DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(AP%NDM,AP%NDM) DOUBLE PRECISION, INTENT(INOUT) :: DFDP(AP%NDM,*) ! Local INTEGER I,J,NDM DOUBLE PRECISION DUM1,T NDM=AP%NDM ! Generate the function. CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) T=PAR(IT) IF(AP%NPARI==0)THEN IF(NDIM>NDM)THEN ! *Adjoint variational equations for normal vector ! *Set F = - (Df)^T u DO J=1,NDM DUM1=0.0D0 DO I=1,NDM DUM1=DUM1+DFDU(I,J)*U(NDM+I) ENDDO F(NDM+J) = -DUM1 ENDDO ! *Set F = F + PAR(10) * f DO J=1,NDM F(NDM+J) = F(NDM+J) + PAR(10) * F(J) ENDDO ENDIF ENDIF ! Scale by truncation interval T IF(IJAC/=0)THEN DFDU(:,:)=T*DFDU(:,:) IF(IJAC==2)THEN ! **Derivative to truncation interval DO J=1,AP%NFPR IF(ICP(J)==IT)THEN DFDP(:,IT)=F(:) ELSE DFDP(:,ICP(J))=T*DFDP(:,ICP(J)) ENDIF ENDDO ENDIF ENDIF F(:)=T*F(:) END SUBROUTINE FFHO ! ---------- ---- SUBROUTINE BCHO(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! Generates the boundary conditions for homoclinic bifurcation analysis TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: UU(:),FF1(:),FF2(:) INTEGER NFPR,I,J DOUBLE PRECISION UMX,EP,P NFPR=AP%NFPR ! Generate the function. CALL FBHO(AP,NDIM,PAR,ICP,NBC,.TRUE.,U0,U1,F) IF(IJAC==0)RETURN ALLOCATE(UU(NDIM),FF1(NBC),FF2(NBC)) ! Derivatives with respect to U0. UMX=0.d0 DO I=1,NDIM IF(DABS(U0(I))>UMX)UMX=DABS(U0(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU(I)=U0(I) ENDDO DO I=1,NDIM UU(I)=U0(I)-EP CALL FBHO(AP,NDIM,PAR,ICP,NBC,.FALSE.,UU,U1,FF1) UU(I)=U0(I)+EP CALL FBHO(AP,NDIM,PAR,ICP,NBC,.FALSE.,UU,U1,FF2) UU(I)=U0(I) DO J=1,NBC DBC(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO ! Derivatives with respect to U1. UMX=0.d0 DO I=1,NDIM IF(DABS(U1(I))>UMX)UMX=DABS(U1(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU(I)=U1(I) ENDDO DO I=1,NDIM UU(I)=U1(I)-EP CALL FBHO(AP,NDIM,PAR,ICP,NBC,.FALSE.,U0,UU,FF1) UU(I)=U1(I)+EP CALL FBHO(AP,NDIM,PAR,ICP,NBC,.FALSE.,U0,UU,FF2) UU(I)=U1(I) DO J=1,NBC DBC(J,NDIM+I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FBHO(AP,NDIM,PAR,ICP,NBC,.FALSE.,U0,U1,FF2) DO J=1,NBC DBC(J,2*NDIM+ICP(I))=(FF2(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(FF1,FF2,UU) END SUBROUTINE BCHO ! ---------- ---- SUBROUTINE FBHO(AP,NDIM,PAR,ICP,NBC,CSAVE,U0,U1,FB) USE SUPPORT, ONLY: PI USE BVP, ONLY: NRTN, IRTN USE INTERFACES, ONLY: FUNC,BCND,PVLS USE SUPPORT, ONLY: AUTOSTOP ! Generates the boundary conditions for homoclinic orbits. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NBC DOUBLE PRECISION, INTENT(INOUT) :: PAR(*),U0(NDIM),U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) LOGICAL, INTENT(IN) :: CSAVE ! Local DOUBLE PRECISION, ALLOCATABLE :: VR(:,:,:),VT(:,:,:) DOUBLE PRECISION, ALLOCATABLE :: BOUND(:,:),RR(:,:),RI(:,:) DOUBLE PRECISION, ALLOCATABLE :: XEQUIB1(:),XEQUIB2(:) DOUBLE PRECISION, ALLOCATABLE, SAVE :: UMAX(:) LOGICAL INEIG INTEGER NDM,NPAR,NBCN,JB,I,J,K,IP,KP DOUBLE PRECISION DUM,DUM1(1),DUM2(1) NDM=AP%NDM NPAR=AP%NPAR ALLOCATE(VR(NDM,NDM,2),VT(NDM,NDM,2),BOUND(NDM,NDM)) ALLOCATE(RR(NDM,2),RI(NDM,2),XEQUIB1(NDM),XEQUIB2(NDM)) ! *Initialization DO I=1,NBC FB(I) = 0.0D0 ENDDO JB = 1 IF ((IEQUIB==0).OR.(IEQUIB==-1)) THEN CALL PVLS(NDM,U0,PAR) ENDIF ! write(9,*) 'Xequib:' DO I=1,NDM XEQUIB1(I)=PAR(11+I) ! write(9,*) I,XEQUIB1(I) ENDDO ! ** Rotations */ IF(IRTN/=0)THEN DO I=1,NDM XEQUIB2(I)=XEQUIB1(I) IF(NRTN(I)/=0)THEN IF(ISTART<0)THEN NRTN(I)=-ISTART*NRTN(I) ENDIF XEQUIB2(I)=XEQUIB2(I)+PI(2.d0)*NRTN(I) ENDIF ENDDO ELSEIF(IEQUIB.GE.0) THEN DO I=1,NDM XEQUIB2(I)=PAR(11+I) ENDDO ELSE DO I=1,NDM XEQUIB2(I)=PAR(NDM+11+I) ENDDO ENDIF ! **Regular Continuation** IF(ISTART/=3) THEN ! *Projection boundary conditions for the homoclinic orbit ! *NSTAB boundary conditions at t=0 CALL PRJCTN(AP,BOUND,CSAVE,XEQUIB1,ICP,PAR,-1,1,1,NDM) DO I=1,NSTAB DO K=1,NDM FB(JB)=FB(JB)+(U0(K)-XEQUIB1(K))*BOUND(K,I) ENDDO JB = JB+1 ENDDO ! *NUNSTAB boundary conditions at t=1 IF(AP%NREV==0) THEN CALL PRJCTN(AP,BOUND,CSAVE,XEQUIB2,ICP,PAR,1,2,1,NDM) DO I=1,NUNSTAB DO K=1,NDM IF (ISTART.GE.0) THEN FB(JB)=FB(JB)+(U1(K)-XEQUIB2(K))*BOUND(K,I) ELSE FB(JB)=FB(JB)+(U1(NDIM-NDM+K)-XEQUIB2(K))*BOUND(K,I) IF (ITWIST==0) THEN ! allow jump at end. FB(JB)=FB(JB)+PAR(22) ENDIF ENDIF ENDDO JB = JB+1 ENDDO ELSE ! *NUNSTAB symmetric boundary conditions at t=1 if NREV=1 DO I=1,NDIM IF(IREV(I)>0) THEN FB(JB)=U1(I) JB=JB+1 ENDIF ENDDO ENDIF INEIG=.FALSE. ! *NFIXED extra boundary conditions for the fixed conditions IF (NFIXED>0) THEN CALL EIGHO(AP,2,RR(1,1),RI(1,1),VR(1,1,1),XEQUIB1,ICP,PAR,NDM) IF(IEQUIB<0) THEN CALL EIGHO(AP,2,RR(1,2),RI(1,2),VR(1,1,2),XEQUIB2,ICP,PAR,NDM) ENDIF DO I=1,NFIXED IF((IFIXED(I)>10).AND..NOT.INEIG) THEN CALL EIGHO(AP,1,RR(1,1),RI(1,1),VT(1,1,1),XEQUIB1,ICP,PAR,NDM) INEIG=.TRUE. IF(IEQUIB<0) THEN CALL EIGHO(AP,1,RR(1,2),RI(1,2),VT(1,1,2), & XEQUIB2,ICP,PAR,NDM) ENDIF ENDIF FB(JB)=PSIHO(NDM,IFIXED(I),RR,RI,VR,VT,ICP,PAR,U0,U1) JB = JB+1 ENDDO ENDIF ! *extra boundary condition in the case of a saddle-node homoclinic IF (IEQUIB==2) THEN IF(.NOT.INEIG) THEN CALL EIGHO(AP,1,RR(1,1),RI(1,1),VT(1,1,1),XEQUIB1,ICP,PAR,NDM) INEIG=.TRUE. ENDIF FB(JB)=RR(NSTAB+1,1) JB=JB+1 ENDIF ! *NDM initial conditions for the equilibrium if IEQUIB=1,2,-2 IF ((IEQUIB/=0).AND.(IEQUIB/=-1)) THEN CALL FUNC(NDM,XEQUIB1,ICP,PAR,0,FB(JB),DUM1,DUM2) JB=JB+NDM ! *NDM extra initial conditions for the equilibrium if IEQUIB=-2 IF (IEQUIB==-2) THEN CALL FUNC(NDM,XEQUIB2,ICP,PAR,0,FB(JB),DUM1,DUM2) JB=JB+NDM ENDIF ENDIF ! *boundary conditions for normal vector IF ((ISTART.GE.0).AND.(ITWIST==1)) THEN ! *-orthogonal to the unstable directions of A at t=0 CALL PRJCTN(AP,BOUND,CSAVE,XEQUIB1,ICP,PAR,1,1,2,NDM) DO I=1,NUNSTAB DUM=0.0 DO K=1,NDM DUM=DUM+U0(NDM+K)*BOUND(K,I) ENDDO FB(JB)=DUM JB = JB+1 ENDDO ! *-orthogonal to the stable directions of A at t=1 CALL PRJCTN(AP,BOUND,CSAVE,XEQUIB2,ICP,PAR,-1,2,2,NDM) DO I=1,NSTAB DUM=0.0 DO K=1,NDM DUM=DUM+U1(NDM+K)*BOUND(K,I) ENDDO FB(JB)=DUM JB = JB+1 ENDDO ! Branch switching to n-homoclinic orbits. ELSEIF(ISTART<0) THEN ! More boundary conditions: continuity+gaps DO K=0,NDIM/NDM-2 DO I=1,NDM FB(JB)=U0(NDM*(K+1)+I)-U1(NDM*K+I) IF (ITWIST==1) THEN ! Lin(-Sandstede): PAR(20,22,...) contain the gap sizes, ! PAR(NPAR-2*NDM+1...NPAR-NDM) contains the adjoint unit ! vector at the gaps. FB(JB)=FB(JB)-PAR(20+2*K)*PAR(NPAR-2*NDM+I) ENDIF JB = JB+1 ENDDO ENDDO ! Poincare sections: =0 ! PAR(NPAR-NDM+1...NPAR) contains the derivatives of the ! point x_0 in the original ! homoclinic orbit that is furthest from the equilibrium. ! x_0=umax is initialized at each run to an end point, and so ! is always in the Poincare section IF (.NOT.ALLOCATED(UMAX)) THEN ALLOCATE(UMAX(NDIM)) DO I=1,NDIM UMAX(I) = U1(I) ENDDO ENDIF DO K=0,NDIM/NDM-2 DO I=1,NDM FB(JB)=FB(JB)+(U1(K*NDM+I)-UMAX(K*NDM+I))*PAR(NPAR-NDM+I) ENDDO JB = JB + 1 ENDDO ENDIF ELSE ! **Starting Solutions using Homotopy** IP=12 IF(IEQUIB.GE.0) THEN IP=IP+NDM ELSE IP=IP+2*NDM ENDIF KP=IP ! *Explicit boundary conditions for homoclinic orbit at t=0 CALL EIGHO(AP,2,RR,RI,VR,XEQUIB1,ICP,PAR,NDM) JB=NDM+1 IF(NUNSTAB>1) THEN FB(JB)=0.0 KP=IP+NUNSTAB DO J=1,NUNSTAB DO I=1,NDM FB(I)=FB(I)+U0(I)-XEQUIB1(I)-PAR(IP+J)*VR(NDM-NUNSTAB+J,I,1) ENDDO FB(JB)=FB(JB)+PAR(IP+J)**2 ENDDO FB(JB)=FB(JB)-PAR(IP)**2 JB=JB+1 ELSE KP=IP+1 DO I=1,NDM FB(I)=U0(I)-XEQUIB1(I)-PAR(IP)*VR(NDM-NUNSTAB+1,I,1) ENDDO ENDIF ! *Projection boundary conditions for the homoclinic orbit at t=1 CALL EIGHO(AP,1,RR,RI,VT,XEQUIB2,ICP,PAR,NDM) DO I=NDM-NUNSTAB+1,NDM DUM=0.0D0 DO J=1,NDM DUM=DUM+(U1(J)-XEQUIB2(J))*VT(I,J,1) ENDDO KP=KP+1 FB(JB)=DUM-PAR(KP) JB=JB+1 ENDDO ! *NDM initial conditions for the equilibrium if IEQUIB=1,2,-2 IF ((IEQUIB/=0).AND.(IEQUIB/=-1)) THEN CALL FUNC(NDM,XEQUIB1,ICP,PAR,0,FB(JB),DUM1,DUM2) JB=JB+NDM ! *NDM extra initial conditions for the equilibrium if IEQUIB=-2 IF (IEQUIB==-2) THEN CALL FUNC(NDM,XEQUIB2,ICP,PAR,0,FB(JB),DUM1,DUM2) JB=JB+NDM ENDIF ENDIF ENDIF NBCN=NBC-JB+1 ! write(9,*) NBCN,NBC ! *user defined extra boundary conditions IF (NBCN>0) THEN CALL BCND(NDIM,PAR,ICP,NBCN,U0,U1,FB(JB),0,DUM2) ELSEIF (NBCN<0) THEN PRINT*,'Evil BUG!: Negative number of boundary conditions left' CALL AUTOSTOP() END IF DEALLOCATE(VR,VT,BOUND,RR,RI,XEQUIB1,XEQUIB2) END SUBROUTINE FBHO ! ---------- ---- SUBROUTINE ICHO(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Generates integral conditions for homoclinic bifurcation analysis USE INTERFACES TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER NDM,NPAR,I,JB DOUBLE PRECISION, ALLOCATABLE :: DNT(:,:) DOUBLE PRECISION DUM,DUM1(1) NDM=AP%NDM NPAR=AP%NPAR JB=0 ! Integral phase condition for homoclinic orbit IF(AP%NREV==0.AND.(AP%NPARI==0.OR.NDIM==NDM)) THEN DUM=0.d0 DO I=1,NDM DUM=DUM+UPOLD(I)*(U(I)-UOLD(I)) ENDDO JB=JB+1 F(JB)=DUM IF(IJAC/=0)THEN DINT(JB,1:NDM)=UPOLD(1:NDM) DINT(JB,NDM+1:NDIM+NPAR)=0.d0 ENDIF ! Integral phase condition for adjoint equation IF (NDIM>NDM) THEN DUM=0.d0 DO I=1,NDM DUM=DUM+UOLD(NDM+I)*(U(NDM+I)-UOLD(NDM+I)) ENDDO JB=JB+1 F(JB)=DUM IF(IJAC/=0)THEN DINT(JB,1:NDM)=0.d0 DINT(JB,NDM+1:2*NDM)=UOLD(NDM+1:2*NDM) DINT(JB,2*NDM+1:NDIM+NPAR)=0.d0 ENDIF ENDIF ENDIF ! User-defined integral constraints IF (JB0)THEN ALLOCATE(IREV(NDM)) LINE=LINE+1 READ(12,*,ERR=1,END=2)(IREV(I),I=1,NDM) ELSE ALLOCATE(IREV(0)) ENDIF LINE=LINE+1 READ(12,*,ERR=1,END=2)NFIXED IF(ALLOCATED(IFIXED))DEALLOCATE(IFIXED) ALLOCATE(IFIXED(NFIXED)) IF (NFIXED>0)THEN LINE=LINE+1 READ(12,*,ERR=1,END=2)(IFIXED(I),I=1,NFIXED) ENDIF LINE=LINE+1 READ(12,*,ERR=1,END=2)NPSI IF(ALLOCATED(IPSI))DEALLOCATE(IPSI) ALLOCATE(IPSI(NPSI)) IF (NPSI>0)THEN LINE=LINE+1 READ(12,*,ERR=1,END=2)(IPSI(I),I=1,NPSI) ENDIF CLOSE(UNIT=12,STATUS='KEEP') ENDIF NFREE=2+NFIXED-NREV+NINT+NBC IF (ISTART<0) THEN ! n-homoclinic branch switching NFREE=NFREE-ISTART-1 NDIM=NDM*(-ISTART+1) ! make sure there is enough room for the Lin vector etc. NPARI=2*NDM AP%NPARI=NPARI ! Free parameter (artificial parameter for psi) ! nondegeneracy parameter of the adjoint ELSE IF (NPSI>0) THEN NPAR=AP%NPAR NPAR=MAX(20+MAXVAL(IPSI),NPAR) AP%NPAR=NPAR ENDIF IF (ITWIST==1) THEN NFREE = NFREE + 1 ICP(NFREE) = 10 NDIM=NDM*2 ENDIF ENDIF ! Extra free parameters for equilibrium if iequib=1,2,-2 IF ((IEQUIB/=0).AND.(IEQUIB/=-1)) THEN DO I=1,NDM ICP(NFREE+I)=11+I ENDDO ENDIF IF (IEQUIB==-2) THEN DO I=1,NDM ICP(NFREE+NDM+I)=11+NDM+I ENDDO ENDIF HCONST%NUNSTAB=NUNSTAB HCONST%NSTAB=NSTAB HCONST%IEQUIB=IEQUIB HCONST%ITWIST=ITWIST HCONST%ISTART=ISTART HCONST%IREV=>IREV HCONST%IFIXED=>IFIXED HCONST%IPSI=>IPSI IF (ISTART==5) THEN ISTART=1 IF(IRS/=0)THEN IPS3=GETIPS3() IF(IPS3/=9.AND.IPS3/=0)THEN ISTART=4 ENDIF ENDIF ENDIF IF(NSTAB==-1.OR.NUNSTAB==-1)THEN IF (IEQUIB==2) THEN NBCPROJ=NDM-1 ELSE NBCPROJ=NDM ENDIF ELSE NBCPROJ=NSTAB+NUNSTAB ENDIF IF(NSTAB==-1.AND.NUNSTAB/=-1)THEN NSTAB=NBCPROJ-NUNSTAB ELSEIF(NUNSTAB==-1.AND.NSTAB/=-1)THEN NUNSTAB=NBCPROJ-NSTAB ENDIF IF (ISTART/=3) THEN ! *regular continuation IF (ISTART.GE.0) THEN NINT=NINT+ITWIST+1-NREV ENDIF IF (ISW==2.AND.AP%ITP/=5.AND.ABS(AP%ITP)/10/=5)THEN ICORR = 2 ELSE ICORR = 1 ENDIF NBC=NBC+NBCPROJ+NDIM-NDM+IEQUIB*NDM+NFREE-NINT-ICORR IF (IEQUIB==2) THEN NBC=NBC-NDM+1 ENDIF IF (IEQUIB<0) THEN NBC=NBC-(3*IEQUIB+2)*NDM ENDIF ELSE ! *starting solutions using homotopy IF (ABS(NUNSTAB)==1) THEN NBC=NDM*(1+IEQUIB)+1 ELSE NBC=NDM*(1+IEQUIB)+NUNSTAB+1 ENDIF IF (IEQUIB==2.AND.AP%IID>0) THEN WRITE(9,*)'WARNING: IEQUIB=2 NOT ALLOWED WITH ISTART=3' ENDIF IF (IEQUIB<0) THEN NBC=NBC-NDM*(3*IEQUIB+2) ENDIF NINT=0 ENDIF ! write new constants into AP AP%NDIM=NDIM AP%NBC=NBC AP%NINT=NINT AP%NDM=NDM AP%NREV=NREV AP%NFPR=NBC+NINT-NDIM+1 RETURN 1 WRITE(6,"(A,I2,A)") & " Error in fort.12 or h. file: bad integer on line ",LINE,"." GOTO 3 2 WRITE(6,"(A,I2,A)") & " Error in fort.12 or h. file: ends prematurely on line ",LINE,"." 3 CLOSE(UNIT=12,STATUS='KEEP') CALL AUTOSTOP() END SUBROUTINE INHO ! ---------- ------ SUBROUTINE INTPHO(NDM,NCOLRS,TM,DTM,UPS,UDOTPS,T,DT,N,NDIM,J,J1) USE MESH, ONLY: INTWTS INTEGER, INTENT(IN) :: NDM,NCOLRS,N,NDIM,J,J1 DOUBLE PRECISION, INTENT(IN) :: TM,DTM,T,DT DOUBLE PRECISION, INTENT(INOUT) :: UPS(NDIM,0:*),UDOTPS(NDIM,0:*) ! Local INTEGER I,JJ,K DOUBLE PRECISION W(0:NCOLRS) ! Finds interpolant (TM(.) , UPS(.), UDOTPS(.) ) on the new mesh ! at times TM,TM+DTM using the old mesh at times T,T+DT. ! Used by TRANHO to initiate branch switching to n-homoclinic orbits. DO I=0,NCOLRS-1 CALL INTWTS(NCOLRS,(NCOLRS*(T-TM)+DT*I)/DTM,W) JJ=J1+I DO K=1,NDM UPS(N+K,JJ)=DOT_PRODUCT(W(:),UPS(N+K,J:J+NCOLRS)) UDOTPS(N+K,JJ)=DOT_PRODUCT(W(:),UDOTPS(N+K,J:J+NCOLRS)) ENDDO ENDDO END SUBROUTINE INTPHO ! ---------- ------ SUBROUTINE TRANHO(NTSR,NCOLRS,NDM,NDIM,TM,UPS,UDOTPS,PAR,ICP,NPAR) ! Transform the data representation of the homoclinic orbit into ! an object suitable for homoclinic branch switching: ! dim|1...............NDM|NDM+1......NDIM-NDM|NDIM-NDM+1......NDIM| ! | | | | ! t=0|start of hom. orbit|maximum from equil.| maximum from equil.| ! | : | : | : | ! | : |end of hom. orbit | : | ! | : |start of hom. orbit| : | ! | : | : | : | ! t=1|maximum from equil.|maximum from equil.| end of hom. orbit | ! Called by PREHO USE BVP, ONLY: NRTN,IRTN USE SUPPORT, ONLY: PI USE INTERFACES, ONLY: FUNC INTEGER, INTENT(IN) :: NCOLRS,NDM,NDIM,ICP(*),NPAR INTEGER, INTENT(INOUT) :: NTSR DOUBLE PRECISION, INTENT(INOUT) :: TM(0:*), UPS(NDIM,0:*), & UDOTPS(NDIM,0:*), PAR(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: TTM(:) INTEGER J2(3),I2L(1),I,I2,J,JJ,JMAX,K,K2,L,LL,LLL,IADDPH,NTNC DOUBLE PRECISION A(3),B(3),T(3),TT(3),DUM1(1),DUM2(1) DOUBLE PRECISION D1,DNORM,DTM,P,PHDIFF,TMMAX,UPSI,UPSMAX ALLOCATE(TTM(0:NTSR*2-1)) ! First find maximum from the equilibrium UPSMAX=0 JMAX=0 DO J=0,NTSR UPSI=0 DO I=1,NDM UPSI=UPSI+(UPS(I,J*NCOLRS)-PAR(11+I))**2 ENDDO IF (UPSI>UPSMAX) THEN UPSMAX=UPSI JMAX=J ENDIF ENDDO IF(IRTN/=0)THEN ! Just use the point in the middle UPSMAX = 0 DO I=1,NDM IF(NRTN(I)/=0)EXIT ENDDO DO J=0,NTSR D1=ABS(UPS(I,J*NCOLRS)-PAR(I+11)) UPSI=ABS(UPS(I,J*NCOLRS)-(PAR(I+11)+PI(2.d0)*NRTN(I))) IF(D1UPSMAX)THEN UPSMAX=UPSI JMAX=J ENDIF ENDDO ENDIF TMMAX=TM(JMAX) CALL FUNC(NDM,UPS(1,JMAX*NCOLRS),ICP,PAR,0,PAR(NPAR-NDM+1),DUM1,DUM2) ! PAR(NPAR-NDM+1...NPAR) contains the point furthest from ! the equilibrium. ! PAR(10)=the time for the unstable manifold tail. ! PAR(11)=the time for the stable manifold tail. ! PAR(20,22,...) contain the gap sizes. ! PAR(21,23,...) contain the times between Poincare sections PAR(10)=PAR(11)*TMMAX PAR(20)=0D0 DO K=1,NDIM/NDM-2 PAR(19+2*K)=PAR(11) PAR(20+2*K)=0D0 ENDDO PAR(11)=PAR(11)*(1D0-TMMAX) ! Remember adjoint at maximum for applying Lin's method ! PAR(NPAR-2*NDM+1...NPAR-NDM) will contain the adjoint unit ! vector at the gaps. IF (ITWIST==1) THEN DNORM=0.D0 DO I=1,NDM PAR(NPAR-2*NDM+I)=UPS(NDM+I,JMAX*NCOLRS) DNORM=DNORM+UPS(NDM+I,JMAX*NCOLRS)**2 ENDDO DNORM=SQRT(DNORM) DO I=1,NDM PAR(NPAR-2*NDM+I)=PAR(NPAR-2*NDM+I)/DNORM ENDDO ENDIF ! Prepare the new NDIM*NCOLRS dimensional UPS matrix ! Move everything to the end in "middle part format" ! so that we can subsequently overwrite the beginning. PHDIFF=0 IADDPH=1 DO L=2*NTSR-1,NTSR-1,-1 J=L-(2*NTSR-1)+JMAX ! move J=0...JMAX to ! L=2*NTSR-1-JMAX...2*NTSR-1 ! move J=JMAX...NTSR-1 to ! L=NTSR-1...2*NTSR-2-JMAX IF (J<0) THEN J=J+NTSR IADDPH=0 ENDIF TTM(L)=TM(J)-TMMAX IF (TTM(L)<0) TTM(L)=TTM(L)+1D0 DO K=0,NCOLRS-1 JJ=J*NCOLRS+K LL=L*NCOLRS+K DO I=1,NDM IF(IRTN/=0)THEN PHDIFF=0 IF(IADDPH/=0)PHDIFF=PI(2.d0)*NRTN(MOD(I-1,NDM)+1) ENDIF UPS(I+NDM,LL)=UPS(I,JJ)+PHDIFF UDOTPS(I+NDM,LL)=UDOTPS(I,JJ)+PHDIFF UPS(I,LL)=UPS(I,JJ) UDOTPS(I,LL)=UDOTPS(I,JJ) IF (L<2*NTSR-JMAX) THEN ! move J=JMAX...NTSR to ! L+JMAX=NTSR-1+JMAX...2*NTSR-1 IF(IRTN/=0)THEN PHDIFF=PI(2.d0)*NRTN(MOD(I-1,NDM)+1)*(-ISTART-1) ENDIF LLL=LL+JMAX*NCOLRS IF(L==2*NTSR-JMAX-1)THEN UPS(I+NDIM-NDM,LLL)=UPS(I,NTSR*NCOLRS)+PHDIFF UDOTPS(I+NDIM-NDM,LLL)=UDOTPS(I,NTSR*NCOLRS)+PHDIFF ELSE UPS(I+NDIM-NDM,LLL)=UPS(I,JJ)+PHDIFF UDOTPS(I+NDIM-NDM,LLL)=UDOTPS(I,JJ)+PHDIFF ENDIF ENDIF ENDDO ENDDO ENDDO TTM(2*NTSR-1)=1D0 ! create matching mesh ! merge TM(1..JMAX)/TMMAX, TM(JMAX..NTSR)-TMMAX, ! TM(1..JMAX)+1D0-TMMAX, ! (TM(JMAX..NTSR)-TMMAX)/(1D0-TMMAX) J2(1) = 2*NTSR-JMAX J2(2) = NTSR J2(3) = NTSR A(1) = TMMAX-1D0 A(2) = 0D0 A(3) = 0D0 B(1) = TMMAX B(2) = 1D0 B(3) = 1D0-TMMAX NTSR=NTSR*2-2 DO I=1,3 T(I) = (TTM(J2(I))+A(I))/B(I) TT(I) = (TTM(J2(I)-1)+A(I))/B(I) ENDDO DO J=0,NTSR-1 I2L=MINLOC(T) I2=I2L(1) TM(J+1)=T(I2) JJ=J*NCOLRS DTM=TM(J+1)-TM(J) ! Replace UPS and UDOTPS by its interpolant on the new mesh : CALL INTPHO(NDM,NCOLRS,TT(1),T(1)-TT(1),UPS,UDOTPS, & TM(J),DTM,0,NDIM,(J2(1)-1)*NCOLRS,JJ) ! Remesh middle part : CALL INTPHO(NDM,NCOLRS,TT(2),T(2)-TT(2),UPS,UDOTPS, & TM(J),DTM,NDM,NDIM,(J2(2)-1)*NCOLRS,JJ) ! Remesh last part : CALL INTPHO(NDM,NCOLRS,TT(3),T(3)-TT(3),UPS,UDOTPS, & TM(J),DTM,NDIM-NDM,NDIM,(J2(3)+JMAX-1)*NCOLRS,JJ) ! Copy middle parts, this applies only for 1->n switching ! where n>=3 and NDIM=(n+1)*NDM: (NDIM/NDM)-3 times. DO K2=NDM,NDIM-3*NDM,NDM DO K=0,NCOLRS-1 DO I=NDM+1,2*NDM IF(IRTN/=0)THEN PHDIFF=PI(2.d0)*NRTN(MOD(I-1,NDM)+1)*(K2/NDM) ENDIF UPS(I+K2,JJ+K)=UPS(I,JJ+K)+PHDIFF UDOTPS(I+K2,JJ+K)=UDOTPS(I,JJ+K)+PHDIFF ENDDO ENDDO ENDDO J2(I2)=J2(I2)+1 TT(I2)=T(I2) IF(J2*NDM) THEN ! Use the usual representation again for normal continuation. CALL CPBKHO(NTSR,NCOLRS,NAR,NDM,TM,UPS,UDOTPS,PAR) ENDIF ! Look for rotations IF(IEQUIB.GE.0)THEN CALL SETRTN(NDM,NTSR*NCOLRS,NDIM,UPS) ENDIF IF (ISTART<0 .AND. .NOT.(NAR0) THEN ALLOCATE(F(NDM)) UPSMIN=HUGE(1.d0) JMIN=0 DO J=0,NTSR*NCOLRS CALL FUNC(NDM,UPS(1,J),ICP,PAR,0,F,DUM1,DUM2) UPSI=0 DO I=1,NDM UPSI=UPSI+F(I)*F(I) ENDDO IF (UPSICOMPZERO)THEN J1=J+1 IF(J1==NTSR+1)J1=0 EXIT ENDIF J=J-1 ENDDO J=JMIN+1 DO WHILE(J/=J1) IF(J==NTSR+1)J=0 UPSI=0 DO I=1,NDM UPSI=UPSI+(UPS(I,J*NCOLRS)-PAR(I+11))**2 ENDDO IF(UPSI>COMPZERO)THEN J2=J-1 IF(J2==-1)J2=NTSR EXIT ENDIF J=J+1 ENDDO T=(TM(J2)+TM(J1))/2 IF(J1>J2)THEN T=(TM(J2)+TM(J1)+1)/2 IF(T>=1)T=T-1 IF(TM(J1)<=T)THEN J2=NTSR ELSE J1=0 ENDIF ENDIF DO WHILE((TM(J1)<=T).AND.(J1=NTSR*NCOLRS) J=J-NTSR*NCOLRS IF (J==IST) J=NTSR*NCOLRS IF(MOD(I,NCOLRS)==0)THEN IT=I/NCOLRS TM(IT)=TM(J/NCOLRS)-TMMIN IF (TM(IT)<0) TM(IT)=TM(IT)+1.0D0 ENDIF UPS(:,I)=UPS(:,J) UDOTPS(:,I)=UDOTPS(:,J) ENDDO ! Last equal to first TM(NTSR)=1.0D0 UPS(:,NCOLRS*NTSR)=UPS(:,0) UDOTPS(:,NCOLRS*NTSR)=UDOTPS(:,0) ! Rotations IF(IRTN/=0)THEN JR=-1 ntsrloop: DO J=0,NTSR*NCOLRS,NCOLRS DO I=1,NDM IF(NRTN(I)/=0) THEN IF(ABS((UPS(I,J+NCOLRS)-UPS(I,J))/NRTN(I))>ABS(PI(1d0)))& THEN JR=J+NCOLRS EXIT ntsrloop ENDIF ENDIF ENDDO ENDDO ntsrloop IF(JR/=-1)THEN DO I=1,NDIM IF (NRTN(I)/=0) THEN DO J=JR,NTSR*NCOLRS UPS(I,J)=UPS(I,J)+PI(2.d0)*NRTN(I) ENDDO ENDIF ENDDO ENDIF ENDIF ENDIF ENDIF ! If ISTART<0 we perform homoclinic branch switching and need ! to change the representation of the homoclinic orbit in UPS and ! UDOTPS. IF (ISTART<0 .AND. NAR0)THEN ! Special case : Preprocess restart data in case of homoclinic ! continuation NTSTCU=2*NTSR*NCOLRS NDIMU=NDIM ! Autodetect special case when homoclinic branch switching is ! completed and the orbit's representation has to be ! changed. NDIM3=GETNDIM3() IF(NDIM3>(NDM*2).AND.NDIM3>NDIM)THEN NTSTCU=NTSR*(NDIM3/NDM)*NCOLRS NDIMU=NDIM3 ENDIF ALLOCATE(UPSR(NDIMU,0:NTSTCU),UDOTPSR(NDIMU,0:NTSTCU),TMR(0:NTSTCU)) CALL STPNBV1(AP,PAR,ICP,NDIMU,NTSR,NDIMRD,NCOLRS,RLDOT, & UPSR,UDOTPSR,TMR,NODIR) CALL PREHO(AP,PAR,ICP,NTSR,NDIMRD,NCOLRS,UPSR,UDOTPSR,TMR) CALL ADAPT2(NTSR,NCOLRS,NDIMU,NTST,NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) ELSE ! Generate the (initially uniform) mesh. CALL STPNBV(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) ! Initialize solution and additional parameters IF(IEQUIB.GE.0)THEN CALL SETRTN(NDM,NTSR*NCOLRS,NDIM,UPS) ENDIF ENDIF ALLOCATE(RR(NDM),RI(NDM),VR(NDM,NDM),VT(NDM,NDM)) CALL PVLS(NDM,UPS,PAR) CALL EIGHO(AP,1,RR,RI,VT,PAR(12),ICP,PAR,NDM) CALL GETSTAB(NUNSTAB,RR,1) CALL EIGHO(AP,2,RR,RI,VR,PAR(12),ICP,PAR,NDM) CALL GETSTAB(NSTAB,RR,-1) IF (IRS>0.OR.ISTART/=3)THEN DEALLOCATE(RR,RI,VR,VT) RETURN ENDIF ! Set up artificial parameters at the left-hand end point of orbit IP=12 IF(IEQUIB.GE.0) THEN IP=IP+NDM ELSE IP=IP+2*NDM ENDIF KP=IP ! Parameters xi_1=eps_0, xi_i=0, i=2,NSTAB PAR(IP+1)=PAR(IP) DO I=2,NUNSTAB PAR(IP+I)=0.0 ENDDO IP=IP+NUNSTAB ! Starting guess for homoclinic orbit in real principal unstable direction DO J=0,NTST*NCOL T=PAR(11)*J/(NTST*NCOL) DO K=1,NDIM UPS(K,J)=PAR(11+K)+VR(NSTAB+1,K)*PAR(KP)*EXP(RR(NSTAB+1)*T) ENDDO IF(AP%IID>0)THEN write(9,111)(ups(k,j),k=1,ndim) ENDIF 111 format('stpho : ',e20.10) ENDDO ! Artificial parameters at the right-hand end point of the orbit ! omega_i= DO I=1,NUNSTAB PAR(IP+I)=0.0 DO J=1,NDM IF(IEQUIB.GE.0) THEN P=0 ELSE P=PAR(11+J)-PAR(11+NDM+J) ENDIF PAR(IP+I)=PAR(IP+I)+(P+VR(NSTAB+1,J)*PAR(KP)* & EXP(RR(NSTAB+1)*PAR(11)))*VT(NSTAB+I,J) ENDDO ENDDO IP=IP+NUNSTAB DEALLOCATE(RR,RI,VR,VT) END SUBROUTINE STPNHO ! ------ --------- -------- DOUBLE PRECISION FUNCTION FNCSHO(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE TOOLBOXBV, ONLY: FNCSBV USE AUTOMPI, ONLY : MPIIAM TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE ! Local DOUBLE PRECISION, ALLOCATABLE :: PU0(:),PU1(:),RR(:,:),RI(:,:) DOUBLE PRECISION, ALLOCATABLE :: V(:,:,:),VT(:,:,:) INTEGER IID,NDM,NTST,NCOL,I,J LOGICAL INEIG DOUBLE PRECISION ORIENT FNCSHO=FNCSBV(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) IF(ITEST>0)RETURN IF(MPIIAM()>0)RETURN ALLOCATE(PU0(NDIM),PU1(NDIM)) ALLOCATE(RR(NDIM,2),RI(NDIM,2),V(NDIM,NDIM,2),VT(NDIM,NDIM,2)) IID=AP%IID NDM=AP%NDM NTST=AP%NTST NCOL=AP%NCOL ! *Compute eigenvalues INEIG=.FALSE. CALL EIGHO(AP,2,RR(1,1),RI(1,1),V(1,1,1),PAR(12),ICP,PAR,NDM) IF(IEQUIB<0)THEN CALL EIGHO(AP,2,RR(1,2),RI(1,2),V(1,1,2),PAR(12+NDM),ICP,PAR,NDM) ENDIF IF(IID.GE.3)THEN WRITE(9,*) 'EIGENVALUES' DO J=1,NDM WRITE(9,101) RR(J,1),RI(J,1) ENDDO IF(IEQUIB<0)THEN WRITE(9,*) 'EIGENVALUES of RHS equilibrium' DO J=1,NDM WRITE(9,101) RR(J,2),RI(J,2) ENDDO ENDIF ENDIF IF (((ITWIST==1).AND.(ISTART.GE.0)).OR.NPSI>0) THEN DO I=1,NDIM PU0(I)=UPS(I) PU1(I)=UPS(I+NTST*NCOL*NDIM) ENDDO ENDIF IF ((ITWIST==1).AND.(ISTART.GE.0)) THEN CALL EIGHO(AP,1,RR(1,1),RI(1,1),VT(1,1,1),PAR(12),ICP,PAR,NDM) IF(IEQUIB<0)THEN CALL EIGHO(AP,1,RR(1,2),RI(1,2),VT(1,1,2),PAR(12+NDM),ICP,PAR,NDM) ENDIF INEIG=.TRUE. ORIENT = PSIHO(NDM,0,RR,RI,V,VT,ICP,PAR,PU0,PU1) IF(IID.GE.3)THEN IF (ORIENT<0.0D0) THEN WRITE(9,102) ORIENT ELSE WRITE(9,103) ORIENT ENDIF ENDIF ENDIF DO I=1,NPSI IF((IPSI(I)>10).AND..NOT.INEIG) THEN CALL EIGHO(AP,1,RR(1,1),RI(1,1),VT(1,1,1),PAR(12),ICP,PAR,NDM) IF(IEQUIB<0)THEN CALL EIGHO(AP,1,RR(1,2),RI(1,2),VT(1,1,2),PAR(12+NDM),ICP,PAR,NDM) ENDIF INEIG=.TRUE. ENDIF PAR(20+IPSI(I))=PSIHO(NDM,IPSI(I),RR,RI,V,VT,ICP,PAR,PU0,PU1) IF(IID.GE.3)WRITE(9,104)IPSI(I),PAR(20+IPSI(I)) ENDDO DEALLOCATE(PU0,PU1,RR,RI,V,VT) 101 FORMAT(1X,'(',F12.7,',',1X,F12.7,')') 102 FORMAT(1X,'Non-orientable',' (',E20.10,')') 103 FORMAT(1X,'orientable',' (',E20.10,')') 104 FORMAT(1X,'PSI(',I2,')=',E20.10) END FUNCTION FNCSHO ! ------ --------- -------- ----- DOUBLE PRECISION FUNCTION PSIHO(NDM,IS,RR,RI,V,VT,ICP,PAR,PU0,PU1) ! The conditions for degenerate homoclinic orbits are given by PSI(IS)=0. ! RR and RI contain the real and imaginary parts of eigenvalues which are ! ordered with respect to their real parts (smallest first). ! The (generalised) real eigenvectors are stored as the ROWS of V. ! The (generalised) real left eigenvectors are in the ROWS of VT. ! In the block ENDPTS are stored the co-ordinates of the left (PU0) ! and right (PU1) endpoints of the solution (+ vector if that is computed) USE INTERFACES, ONLY: FUNC INTEGER, INTENT(IN) :: ICP(*),NDM,IS DOUBLE PRECISION, INTENT(IN) :: PAR(*),RR(NDM,*),RI(NDM,*), & V(NDM,NDM,*),VT(NDM,NDM,*),PU0(*),PU1(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: F0(:),F1(:) INTEGER I,J DOUBLE PRECISION DROOT,DUM1(1),DUM2(1),F0NORM,F1NORM,S1,S2 DOUBLE PRECISION U0NORM,U1NORM,VNORM1,VNORM2 ALLOCATE(F0(NDM),F1(NDM)) CALL FUNC(NDM,PU0,ICP,PAR,0,F0,DUM1,DUM2) CALL FUNC(NDM,PU1,ICP,PAR,0,F1,DUM1,DUM2) PSIHO=0.0D0 ! Compute orientation IF (IS==0) THEN S1 = 0.0D0 S2 = 0.0D0 F0NORM = 0.0D0 F1NORM = 0.0D0 U0NORM = 0.0D0 U1NORM = 0.0D0 DO J=1,NDM S1 = S1 + F1(J)*PU0(NDM+J) S2 = S2 + F0(J)*PU1(NDM+J) F0NORM=F0NORM+F0(J)**2 F1NORM=F1NORM+F1(J)**2 U0NORM=U0NORM+PU0(J+NDM)**2 U1NORM=U1NORM+PU1(J+NDM)**2 ENDDO DROOT=DSQRT(F0NORM*F1NORM*U0NORM*U1NORM) IF(DROOT/=0.d0)THEN PSIHO= - S1*S2/DROOT ELSE PSIHO=0.d0 ENDIF RETURN ENDIF IF(IS/=11)DEALLOCATE(F1) IF(IS/=12)DEALLOCATE(F0) SELECT CASE(IS) CASE(1) ! Resonant eigenvalues (neutral saddle) PSIHO=RR(NSTAB,1)+RR(NSTAB+1,1)+RI(NSTAB,1)+RI(NSTAB+1,1) CASE(2) ! Double real leading eigenvalues (stable) ! (saddle, saddle-focus transition) IF (ABS(RI(NSTAB,1))>COMPZERO) THEN PSIHO=-(RI(NSTAB,1)-RI(NSTAB-1,1))**2 ELSE PSIHO=(RR(NSTAB,1)-RR(NSTAB-1,1))**2 ENDIF CASE(3) ! Double real positive eigenvalues (unstable) ! (saddle, saddle-focus transition) IF (ABS(RI(NSTAB+1,1))>COMPZERO) THEN PSIHO=-(RI(NSTAB+1,1)-RI(NSTAB+2,1))**2 ELSE PSIHO=(RR(NSTAB+1,1)-RR(NSTAB+2,1))**2 ENDIF CASE(4) ! Neutral saddle, saddle-focus or bi-focus (includes 1, above, also) PSIHO=RR(NSTAB,1)+RR(NSTAB+1,1) CASE(5) ! Neutrally-divergent saddle-focus (stable eigenvalues complex) PSIHO=RR(NSTAB,1)+RR(NSTAB+1,1)+RR(NSTAB-1,1) CASE(6) ! Neutrally-divergent saddle-focus (unstable eigenvalues complex) PSIHO=RR(NSTAB,1)+RR(NSTAB+1,1)+RR(NSTAB+2,1) CASE(7) ! Three leading eigenvalues (stable) VNORM1 = 0D0 VNORM2 = 0D0 DO I=1,NDM VNORM1 = VNORM1 + ABS(V(NSTAB,I,1)) VNORM2 = VNORM2 + ABS(V(NSTAB-2,I,1)) ENDDO IF (VNORM1>VNORM2) THEN PSIHO=RR(NSTAB,1)-RR(NSTAB-2,1) ELSE PSIHO=RR(NSTAB-2,1)-RR(NSTAB,1) ENDIF CASE(8) ! Three leading eigenvalues (unstable) VNORM1 = 0D0 VNORM2 = 0D0 DO I=1,NDM VNORM1 = VNORM1 + ABS(V(NSTAB+1,I,1)) VNORM2 = VNORM2 + ABS(V(NSTAB+3,I,1)) ENDDO IF (VNORM1>VNORM2) THEN PSIHO=RR(NSTAB+1,1)-RR(NSTAB+3,1) ELSE PSIHO=RR(NSTAB+3,1)-RR(NSTAB+1,1) ENDIF CASE(9) ! Local bifurcation (zero eigenvalue or Hopf): NSTAB decreases ! (nb. the problem becomes ill-posed after a zero of 9 or 10) PSIHO=RR(NSTAB,1) CASE(10) ! Local bifurcation (zero eigenvalue or Hopf): NSTAB increases PSIHO=RR(NSTAB+1,1) CASE(11) ! Orbit flip (with respect to leading stable direction) ! e.g. 1D unstable manifold DO J=1,NDM PSIHO= PSIHO + F1(J)*VT(NSTAB,J,1) ENDDO PSIHO= PSIHO * EXP(-PAR(11)*RR(NSTAB,1)/2.0D0) DEALLOCATE(F1) CASE(12) ! Orbit flip (with respect to leading unstable direction) ! e.g. 1D stable manifold DO J=1,NDM PSIHO= PSIHO + F0(J)*VT(NSTAB+1,J,1) ENDDO PSIHO= PSIHO * EXP(PAR(11)*RR(NSTAB+1,1)/2.0D0) DEALLOCATE(F0) CASE(13) ! Inclination flip (critically twisted) with respect to stable manifold ! e.g. 1D unstable manifold DO I=1,NDM PSIHO= PSIHO + PU0(NDM+I)*V(NSTAB,I,1) ENDDO PSIHO= PSIHO * EXP(-PAR(11)*RR(NSTAB,1)/2.0D0) CASE(14) ! Inclination flip (critically twisted) with respect to unstable manifold ! e.g. 1D stable manifold DO I=1,NDM PSIHO= PSIHO + PU1(NDM+I)*V(NSTAB+1,I,1) ENDDO PSIHO= PSIHO * EXP(PAR(11)*RR(NSTAB+1,1)/2.0D0) CASE(15) ! Non-central homoclinic to saddle-node (in stable manifold) DO I=1,NDM PSIHO=PSIHO+(PAR(11+I)-PU1(I))*V(NSTAB+1,I,1) ENDDO CASE(16) ! Non-central homoclinic to saddle-node (in unstable manifold) DO I=1,NDM PSIHO=PSIHO+(PAR(11+I)-PU0(I))*V(NSTAB+1,I,1) ENDDO END SELECT END FUNCTION PSIHO ! ---------- ------- SUBROUTINE GETSTAB(N,RR,STAB) ! Determine number of stable (STAB==-1) or unstable (STAB==1) ! eigenvalues in RR INTEGER, INTENT(INOUT) :: N DOUBLE PRECISION, INTENT(IN) :: RR(:) INTEGER, INTENT(IN) :: STAB INTEGER I,IAMIN IF(N/=-1)RETURN IAMIN=0 IF(IEQUIB==2)THEN !exclude eigenvalue closest to zero for saddle-node homs IAMIN=1 DO I=1,SIZE(RR) IF(ABS(RR(I))0)THEN N=N+1 ENDIF ENDDO END SUBROUTINE GETSTAB ! ---------- ----- SUBROUTINE EIGHO(AP,ITRANS,RR,RI,VRET,XEQUIB,ICP,PAR,NDM) ! Uses LAPACK routine DGEEV to calculate the eigenvalues/eigenvectors ! of the linearization matrix a (obtained from DFHO) and orders them ! according to their real parts. Simple continuity with respect ! previous call with same value of ITRANS. ! input variables ! ITRANS = 1 use transpose of A (left eigenvectors) ! = 2 otherwise (right eigenvectors) ! output variables ! RR,RI real and imaginary parts of eigenvalues, ordered w.r.t ! real parts (largest first) ! VRET the rows of which are real parts of corresponding ! eigenvectors USE INTERFACES, ONLY:FUNI TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),ITRANS,NDM DOUBLE PRECISION, INTENT(INOUT) :: PAR(*),XEQUIB(*) DOUBLE PRECISION, INTENT(OUT) :: RR(NDM),RI(NDM),VRET(NDM,NDM) ! Local LOGICAL, SAVE :: IEIGC(2) = (/.FALSE.,.FALSE./) CHARACTER(1) JOBVL,JOBVR DOUBLE PRECISION, ALLOCATABLE :: DFDU(:,:),DFDP(:,:),ZZ(:,:) DOUBLE PRECISION, ALLOCATABLE :: F(:),WORK(:) DOUBLE PRECISION, SAVE, ALLOCATABLE :: VRPREV(:,:,:) INTEGER NPAR,IFAIL,LWORK,I,J,K,L,M DOUBLE PRECISION TMP,WORKINFO(1) INTEGER, EXTERNAL :: IDAMAX NPAR=AP%NPAR ALLOCATE(DFDU(NDM,NDM),DFDP(NDM,NPAR),ZZ(NDM,NDM),F(NDM)) IFAIL=0 CALL FUNI(AP,NDM,XEQUIB,XEQUIB,ICP,PAR,1,F,DFDU,DFDP) IF(PAR(11)<0)THEN ! reverse time: reverse eigenvalues/vectors DFDU(:,:)=-DFDU(:,:) ENDIF IF (ITRANS==1) THEN JOBVL='V' JOBVR='N' ELSE JOBVL='N' JOBVR='V' ENDIF ! LAPACK call for eigenvalues and eigenvectors CALL DGEEV(JOBVL,JOBVR,NDM,DFDU,NDM,RR,RI,ZZ,NDM,ZZ,NDM,WORKINFO,-1,IFAIL) LWORK=NINT(WORKINFO(1)) ALLOCATE(WORK(LWORK)) CALL DGEEV(JOBVL,JOBVR,NDM,DFDU,NDM,RR,RI,ZZ,NDM,ZZ,NDM,WORK,LWORK,IFAIL) DEALLOCATE(WORK) IF (IFAIL/=0.AND.AP%IID>0) THEN WRITE(9,*) 'LAPACK EIGENVALUE ROUTINE FAILED !' ENDIF J=1 DO WHILE(JI)THEN TMP=RR(I) RR(I)=RR(J) RR(J)=TMP TMP=RI(I) RI(I)=RI(J) RI(J)=TMP DO K=1,NDM TMP=ZZ(K,I) ZZ(K,I)=ZZ(K,J) ZZ(K,J)=TMP ENDDO ENDIF ENDDO ! Choose sign of real part of eigenvectors to be ! commensurate with that of the corresponding eigenvector ! from the previous call with the same value of ITRANS IF (.NOT.IEIGC(ITRANS)) THEN IF(.NOT.ALLOCATED(VRPREV))ALLOCATE(VRPREV(NDM,NDM,2)) ! normalize eigenvector so that the largest (in absolute value) ! component is positive DO I=1,NDM M=IDAMAX(NDM,ZZ(1,I),1) IF(ZZ(M,I)<0)THEN ZZ(:,I)=-ZZ(:,I) ENDIF ENDDO IEIGC(ITRANS)=.TRUE. ELSE DO I=1,NDM IF (DOT_PRODUCT(ZZ(:,I),VRPREV(:,I,ITRANS))<0.0D0) THEN ZZ(:,I)=-ZZ(:,I) ENDIF ENDDO ENDIF VRPREV(:,:,ITRANS)=ZZ(:,:) ! Send back the transpose of the matrix of real parts of eigenvectors DO I=1,NDM VRET(I,:)=ZZ(:,I) ENDDO DEALLOCATE(F,DFDU,DFDP,ZZ) END SUBROUTINE EIGHO ! ------- -------- ------ LOGICAL FUNCTION SELPOS(ER, EI) DOUBLE PRECISION, INTENT(IN) :: ER,EI SELPOS = ER>0 END FUNCTION SELPOS ! ------- -------- ------ LOGICAL FUNCTION SELNEG(ER, EI) DOUBLE PRECISION, INTENT(IN) :: ER,EI SELNEG = ER<0 END FUNCTION SELNEG ! ---------- ------ SUBROUTINE PRJCTN(AP,BOUND,CSAVE,XEQUIB,ICP,PAR,IMFD,IS,ITRANS,NDM) ! Compute NUNSTAB (or NSTAB) projection boundary condition functions ! onto to the UNSTABLE (or STABLE) manifold of the appropriate equilibrium ! IMFD = -1 stable eigenspace ! = 1 unstable eigenspace ! ITRANS = 1 use transpose of A ! = 2 otherwise ! IS = I (1 or 2) implies use the ith equilibrium in XEQUIB ! Use the normalization in Beyn 1990 (4.4) to ensure continuity ! w.r.t parameters. ! For the purposes of this routine the "previous point on the ! branch" is at the values of PAR at which the routine was last ! called with the same values of IS and ITRANS. USE INTERFACES, ONLY:FUNI USE SUPPORT, ONLY: GEL TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),IMFD,IS,ITRANS,NDM DOUBLE PRECISION, INTENT(INOUT) :: PAR(*),XEQUIB(*) DOUBLE PRECISION, INTENT(OUT) :: BOUND(NDM,*) LOGICAL, INTENT(IN) :: CSAVE ! Local LOGICAL , SAVE :: IFLAG(2,2) = & RESHAPE((/.TRUE.,.TRUE.,.TRUE.,.TRUE./),(/2,2/)) LOGICAL, ALLOCATABLE :: BWORK(:) DOUBLE PRECISION DDUM(1) DOUBLE PRECISION, ALLOCATABLE :: ER(:),EI(:),D(:,:),CPREV(:,:,:,:) DOUBLE PRECISION, ALLOCATABLE :: DUM1(:,:),DUM2(:,:),FDUM(:) DOUBLE PRECISION, ALLOCATABLE :: WORK(:),A(:,:),V(:,:) INTEGER MCOND,IFAIL,LWORK,ISDIM,I,J INTEGER LOC(1),IWORK(1) DOUBLE PRECISION TMP,DET,S,SEP SAVE CPREV ALLOCATE(A(NDM,NDM),FDUM(NDM)) CALL FUNI(AP,NDM,XEQUIB,XEQUIB,ICP,PAR,1,FDUM,A,DDUM) IF(PAR(11)<0)THEN ! reverse time: reverse eigenvalues/vectors A(:,:)=-A(:,:) ENDIF DEALLOCATE(FDUM) ! Compute transpose of A if ITRANS=1 IF (ITRANS==1) THEN DO I=1,NDM DO J=1,I-1 TMP=A(I,J) A(I,J)=A(J,I) A(J,I)=TMP ENDDO ENDDO ENDIF IF (IMFD==1) THEN MCOND = NUNSTAB ELSE MCOND = NSTAB ENDIF ! Call LAPACK routine for the Schur decomposition of A ALLOCATE(ER(NDM),EI(NDM),BWORK(NDM)) CALL DGEES('V', 'S', SELNEG, NDM, A, NDM, ISDIM, ER, & EI, BOUND, NDM, DDUM, -1, BWORK, IFAIL) LWORK = NINT(DDUM(1)) ALLOCATE(WORK(LWORK)) IF(IMFD==-1)THEN CALL DGEES('V', 'S', SELNEG, NDM, A, NDM, ISDIM, ER, & EI, BOUND, NDM, WORK, LWORK, BWORK, IFAIL) ELSE CALL DGEES('V', 'S', SELPOS, NDM, A, NDM, ISDIM, ER, & EI, BOUND, NDM, WORK, LWORK, BWORK, IFAIL) ENDIF IF (IFAIL==0.AND.ISDIM/=MCOND) THEN BWORK=.TRUE. ! Get orthonormal basis for the nstab lowest eigenvalues ! or nunstab highest eigenvalues (real part), ! which do not necessarily all have to be negative/positive DO I=1,MCOND IF (IMFD==-1) THEN LOC=MINLOC(ER,BWORK) ELSE LOC=MAXLOC(ER,BWORK) ENDIF BWORK(LOC(1))=.FALSE. ENDDO BWORK=.NOT.BWORK CALL DTRSEN('N', 'V', BWORK, NDM, A, NDM, BOUND, NDM, ER, EI, & ISDIM, S, SEP, WORK, LWORK, IWORK, 1, IFAIL) IF (IFAIL/=0.AND.AP%IID>0) THEN WRITE(9,*)'LAPACK SCHUR DECOMPOSITION ROUTINE FAILED !' ENDIF ENDIF DEALLOCATE(A,ER,EI,WORK,BWORK) ! Set previous matrix to be the present one if this is the first call IF (IFLAG(IS,ITRANS)) THEN IF (.NOT.ALLOCATED(CPREV))ALLOCATE(CPREV(NDM,NDM,2,2)) CPREV(1:NDM,1:MCOND,IS,ITRANS)=BOUND(1:NDM,1:MCOND) IFLAG(IS,ITRANS)=.FALSE. RETURN ENDIF ! Calculate the BEYN matrix D and hence BOUND ! This amounts to solving (CPREV^T * V) * D = CPREV^T * CPREV ! and then calculating BOUND = V * D IF(MCOND==0)RETURN ALLOCATE(D(MCOND,MCOND),DUM1(MCOND,MCOND),DUM2(MCOND,MCOND)) ! DUM1 = CPREV^T * BOUND CALL DGEMM('T','N',MCOND,MCOND,NDM,1.d0,CPREV(1,1,IS,ITRANS), & NDM,BOUND,NDM,0.d0,DUM1,MCOND) ! DUM2 = CPREV^T * CPREV CALL DGEMM('T','N',MCOND,MCOND,NDM,1.d0,CPREV(1,1,IS,ITRANS), & NDM,CPREV(1,1,IS,ITRANS),NDM,0.d0,DUM2,MCOND) ! D = DUM1^-1 * DUM2 CALL GEL(MCOND,DUM1,MCOND,D,DUM2,DET) ! BOUND = BOUND * D ALLOCATE(V(NDM,MCOND)) CALL DGEMM('N','N',NDM,MCOND,MCOND,1d0,BOUND,NDM,D,MCOND,0d0,V,NDM) BOUND(1:NDM,1:MCOND)=V(1:NDM,1:MCOND) DEALLOCATE(V,D,DUM1,DUM2) IF(CSAVE)THEN CPREV(1:NDM,1:MCOND,IS,ITRANS)=BOUND(1:NDM,1:MCOND) ENDIF END SUBROUTINE PRJCTN !----------------------------------------------------------------------- !----------------------------------------------------------------------- END MODULE HOMCONT BLOCK DATA INTEGER ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV COMMON /BLHOM/ ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV DATA ITWIST,ISTART,IEQUIB,NFIXED,NPSI,NUNSTAB,NSTAB,NREV & /0,5,1,0,0,-1,-1,0/ END BLOCK DATA auto/07p/src/compat.f900000640000175000017500000000156513570013207012643 0ustar skskmodule compat implicit none public :: autoflush, autim, autargc, autgetarg contains ! This file calls no extensions (see f2003.f90 for the new Standard forms) ! You can edit it to adjust these routines to the compiler that is used. subroutine autoflush(i) integer, intent(in) :: i !call flush(i) end subroutine autoflush !----------------------------------------------------------------------- ! Timing AUTO !----------------------------------------------------------------------- ! ------ --------- -------- double precision function autim() !call cpu_time(etime) !autim = etime autim = -1 end function autim integer function autargc() autargc = 0 end function autargc subroutine autgetarg(number,value) integer, intent(in) :: number character(len=*), intent(out) :: value end subroutine autgetarg end module compat auto/07p/src/floquet.f900000640000175000017500000004650413570013207013041 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Floquet Multiplier Computation (Tom Fairgrieve, U. of Toronto) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! References: ! T. F. Fairgrieve, PhD Thesis, University of Toronto, 1994. ! ! T. F. Fairgrieve, A. D. Jepson, O.K. Floquet multipliers, ! SIAM J. Numer. Anal. 28. No. 5, 1991, 1446-1462. ! ! Please inform Tom Fairgrieve (tff@na.utoronto.ca) of any ! modifications to or errors in these routines. ! Mailing Address: T.F. Fairgrieve, Department of Computer Science, ! University of Toronto, Toronto, Ontario, CANADA M5S 1A4C !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Routines included in this file: ! ! subroutine flowkm : new routine to compute floquet multipliers ! subroutine dhhpr : compute a Householder matrix ! subroutine dhhap : appy a Householder matrix !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Required library routines (included in the file eispack.f) : ! ! subroutine qzhes : QZ reduction to Hessenberg form (EISPACK) ! subroutine qzit : QZ reduction to quasi-upper triangular form (EISPACK) ! subroutine qzval : QZ calculation of eigenvalues (EISPACK) ! function epslon : machine constant routine (EISPACK) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! function dnrm2 : compute l2-norm of a vector (BLAS-1) ! function ddot : dot product of two vectors (BLAS-1) ! subroutine dscal : scale a vector by a constant (BLAS-1) ! function idamax : find index of element with max abs value (BLAS-1) ! subroutine daxpy : constant times a vector plus a vector (BLAS-1) ! subroutine drot : apply a plane rotation (BLAS-1) ! subroutine dswap : swap two vectors (BLAS-1) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! subroutine xerbla : BLAS error handling routine (BLAS-2) ! function lsame : compare character strings (BLAS-2) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! subroutine dgemm : matrix-matrix multiply (BLAS-3) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! subroutines ezsvd, ndrotg, ndsvd, prse, sig22, sigmin, sndrtg : ! Demmel-Kahan svd routines !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE FLOQUET IMPLICIT NONE PRIVATE PUBLIC :: FLOWKM CONTAINS SUBROUTINE FLOWKM (NDIM, P0, P1, IID, EV) ! Subroutine to compute Floquet multipliers via the "deflated circuit ! pencil" method. This routine is called by the AUTO routine FNSPBV ! Parameter declarations: INTEGER, INTENT(IN) :: NDIM, IID DOUBLE PRECISION, INTENT(IN) :: P0(NDIM, NDIM), P1(NDIM, NDIM) COMPLEX(KIND(1.0D0)), INTENT(OUT) :: EV(NDIM) ! Local declarations: ! Maximum order of problem. **** (To avoid changing too many AUTO'86 ! routines, I need to declare some local array storage here ) INTEGER LEFT, RIGHT PARAMETER (LEFT = 1, RIGHT = 2) INTEGER I, J, NDIMM1 DOUBLE PRECISION X(:),BETA,V(:),C0(:,:),C1(:,:),RWORK(:,:), & NRMC0X, NRMC1X, CONST LOGICAL INFEV ! storage for SVD computations INTEGER SVDINF, SVDLWRK DOUBLE PRECISION SVDS(:), SVDE(:), SVDWRK(:), SVDV(:,:) ALLOCATABLE C0,C1,RWORK,X,V,SVDS,SVDE,SVDWRK,SVDV ! compute right singular vectors only CHARACTER(1), PARAMETER :: SVDJOBA = 'G', SVDJOBU = 'N', SVDJOBV = 'V' ! storage for generalized eigenvalue computations INTEGER QZIERR DOUBLE PRECISION QZZ(1, 1), QZEPS1, QZALFR(:), QZALFI(:), QZBETA(:) ALLOCATABLE QZALFR,QZALFI,QZBETA LOGICAL QZMATZ ! don't want to accumulate the transforms --- vectors not needed PARAMETER (QZMATZ = .FALSE.) PARAMETER (QZEPS1 = 0.0D0) ! BLAS routines DOUBLE PRECISION DNRM2 EXTERNAL DNRM2, DGEMM ! routines from LAPACK EXTERNAL DGESVJ, DGGEV ! builtin F77 functions INTRINSIC MAX, ABS, CMPLX SVDLWRK = MAX(6,2*NDIM) ALLOCATE(C0(NDIM,NDIM),C1(NDIM,NDIM),RWORK(NDIM,NDIM)) ALLOCATE(SVDE(NDIM),SVDS(NDIM+1),SVDV(NDIM,NDIM),V(NDIM),X(NDIM)) ALLOCATE(QZALFI(NDIM),QZBETA(NDIM),QZALFR(NDIM),SVDWRK(SVDLWRK)) ! Change sign of P1 so that we get the sign of the multipliers right. C0=P0 C1=-P1 ! Print the undeflated circuit pencil (C0, C1). IF(IID>4) THEN WRITE(9,101) WRITE(9,102) DO I=1,NDIM WRITE(9,104)(C0(I,J),J=1,NDIM) ENDDO WRITE(9,103) DO I=1,NDIM WRITE(9,104)(C1(I,J),J=1,NDIM) ENDDO END IF ! PART I: ! ======= ! Deflate the Floquet multiplier at +1.0 so that the deflated ! circuit pencil is not defective at periodic branch turning points. ! The matrix (C0 - C1) should be (nearly) singular. Find an approximation ! to the right null vector (call it X). This will be our approximation ! to the eigenvector corresponding to the fixed multiplier at +1.0. ! ! There are many ways to get this approximation. We could use ! 1) p'(0) = f(p(0)) ! 2) AUTO'86 routine NLVC applied to C0-C1 ! 3) the right singular vector corresponding to the smallest ! singular value of C0-C1 ! I've chosen option 3) because it should introduce as little roundoff ! error as possible. Although it is more expensive, this is insignificant ! relative to the rest of the AUTO computations. Also, the SVD does give a ! version of the Householder matrix which we would have to compute ! anyways. But note that it gives V = ( X perp | X ) and not (X | Xperp), ! which the Householder routine would give. This will permute the deflated ! circuit pencil, so that the part to be deflated is in the last column, ! not it the first column, as was shown in the paper. RWORK = C0 - C1 CALL DGESVJ( SVDJOBA, SVDJOBU, SVDJOBV, NDIM, NDIM, RWORK, NDIM, & SVDS, 0, SVDV, NDIM, SVDWRK, SVDLWRK, SVDINF ) IF (SVDINF /= 0) WRITE (9, 901) SVDINF ! Apply a Householder matrix (call it H1) based on the null vector ! to (C0, C1) from the right. H1 = SVDV = ( Xperp | X ), where X ! is the null vector. CALL DGEMM ( 'n', 'n', NDIM, NDIM, NDIM, 1.0d0, C0, NDIM, & SVDV, NDIM, 0.0d0, RWORK, NDIM ) C0 = RWORK CALL DGEMM ( 'n', 'n', NDIM, NDIM, NDIM, 1.0d0, C1, NDIM, & SVDV, NDIM, 0.0d0, RWORK, NDIM ) C1 = RWORK ! Apply a Householder matrix (call it H2) based on ! (C0*X/||C0*X|| + C1*X/||C1*X||) / 2 ! to (C0*H1, C1*H1) from the left. NRMC0X = DNRM2( NDIM, C0(1,NDIM), 1) NRMC1X = DNRM2( NDIM, C1(1,NDIM), 1) DO I = 1, NDIM X(I) = ((C0(I,NDIM)/NRMC0X)+(C1(I,NDIM)/NRMC1X)) / 2.0D0 ENDDO CALL DHHPR ( 1, NDIM, NDIM, X, 1, BETA, V ) CALL DHHAP ( 1, NDIM, NDIM, NDIM, BETA, V, LEFT, C0, NDIM) CALL DHHAP ( 1, NDIM, NDIM, NDIM, BETA, V, LEFT, C1, NDIM) ! Rescale so that (H2^T)*C0*(H1)(1,NDIM) ~= (H2^T)*C1*(H1)(1,NDIM) ~= 1.0 CONST = MAX(ABS(C0(1,NDIM)), ABS(C1(1,NDIM))) DO J = 1, NDIM DO I = 1, NDIM C0(I,J) = C0(I,J) / CONST C1(I,J) = C1(I,J) / CONST ENDDO ENDDO ! Finished the deflation process! Print the deflated circuit pencil. IF(IID>4) THEN WRITE(9,105) WRITE(9,106) DO I=1,NDIM WRITE(9,104)(C0(I,J),J=1,NDIM) ENDDO WRITE(9,107) DO I=1,NDIM WRITE(9,104)(C1(I,J),J=1,NDIM) ENDDO END IF ! At this point we have ! (C0Bar, C1Bar) ! ::= (H2^T)*(C0, C1)*(H1). ! (( B0^T | Beta0 ) ( B1^T | Beta1 )) 1 ! = (( ----------------- ), ( ----------------- )) ! (( C0BarDef | Delta0 ) ( C1BarDef | Delta1 )) NDIM-1 ! NDIM-1 1 NDIM-1 1 ! and approximations to the Floquet multipliers are ! (Beta0/Beta1) union the eigenvalues of the deflated pencil ! (C0BarDef, C1BarDef). ! PART II: ! ======== ! Compute the eigenvalues of the deflated circuit pencil ! (C0BarDef, C1BarDef) ! by using the QZ routines from EISPACK. NDIMM1 = NDIM - 1 ! compute the eigenvalues for the generalized eigenvalue problem CALL DGGEV('N', 'N', NDIMM1, C0(2,1), NDIM, C1(2,1), NDIM, QZALFR, & QZALFI, QZBETA, QZZ, 1, QZZ, 1, SVDWRK, -1, QZIERR) SVDLWRK = NINT(SVDWRK(1)) DEALLOCATE(SVDWRK) ALLOCATE(SVDWRK(SVDLWRK)) CALL DGGEV('N', 'N', NDIMM1, C0(2,1), NDIM, C1(2,1), NDIM, QZALFR, & QZALFI, QZBETA, QZZ, 1, QZZ, 1, SVDWRK, SVDLWRK, QZIERR) IF (QZIERR /= 0) WRITE (9, 902) QZIERR ! Pack the eigenvalues into complex form. EV(1) = CMPLX( C0(1,NDIM) / C1(1,NDIM), 0.0D0, KIND(1.0D0) ) INFEV = .FALSE. DO J = 1, NDIMM1 IF (QZBETA(J) /= 0.0D0) THEN EV(J+1) = CMPLX( QZALFR(J)/QZBETA(J), QZALFI(J)/QZBETA(J), & KIND(1.0D0) ) ELSE EV(J+1) = CMPLX( HUGE(1.0D0), HUGE(1.0D0), KIND(1.0D0) ) INFEV = .TRUE. END IF ENDDO IF (INFEV) WRITE (9, 903) ! Done! DEALLOCATE(C0,C1,RWORK,X,V,SVDS,SVDE,SVDWRK,SVDV,QZALFR,QZALFI,QZBETA) ! Format statements 101 FORMAT(' Undeflated circuit pencil (C0, C1) ') 102 FORMAT(' C0 : ') 103 FORMAT(' C1 : ') 104 FORMAT(1X,6E23.16) 105 FORMAT(' Deflated circuit pencil (H2^T)*(C0, C1)*(H1) ') 106 FORMAT(' (H2^T)*C0*(H1) : ') 107 FORMAT(' (H2^T)*C1*(H1) : ') 901 FORMAT(' NOTE : Warning from subroutine FLOWKM : ', & /,' SVD routine returned SVDINF = ', I4, & /,' Floquet multiplier calculations may be wrong') 902 FORMAT(' NOTE : Warning from subroutine FLOWKM : ', & /,' QZ routine returned QZIERR = ', I4, & /,' Floquet multiplier calculations may be wrong ') 903 FORMAT(' NOTE : Warning from subroutine FLOWKM : ', & /,' Infinite Floquet multiplier represented by ', & /,' CMPLX( HUGE(1.0D0), HUGE(1.0D0) )') END SUBROUTINE FLOWKM ! ************************** ! * Householder routines * ! ************************** ! Subroutines for performing Householder plane rotations. ! DHHPR: for computing Householder transformations and ! DHHAP: for applying them. ! Ref: Golub and van Loan, Matrix Calcualtions, ! First Edition, Pages 38-43 SUBROUTINE DHHPR ( K, J, N, X, INCX, BETA, V ) USE SUPPORT, ONLY: AUTOSTOP ! .. Scalar Arguments .. INTEGER, INTENT(IN) :: J, K, N, INCX DOUBLE PRECISION, INTENT(OUT) :: BETA ! .. Array Arguments .. DOUBLE PRECISION, INTENT(IN) :: X( * ) DOUBLE PRECISION, INTENT(INOUT) :: V( * ) ! .. ! Purpose ! ======= ! DHHPR computes a Householder Plane Rotation (G&vL Alg. 3.3-1) ! defined by v and beta. ! (I - beta v vt) * x is such that x_i = 0 for i=k+1 to j. ! Parameters ! ========== ! K - INTEGER. ! On entry, K specifies that the K+1st entry of X ! be the first to be zeroed. ! K must be at least one. ! Unchanged on exit. ! J - INTEGER. ! On entry, J specifies the last entry of X to be zeroed. ! J must be >= K and <= N. ! Unchanged on exit. ! N - INTEGER. ! On entry, N specifies the (logical) length of X. ! Unchanged on exit. ! X - DOUBLE PRECISION array of DIMENSION at least ! ( 1 + ( N - 1 )*abs( INCX ) ). ! On entry, X specifies the vector to be (partially) zeroed. ! Unchanged on exit. ! INCX - INTEGER. ! On entry, INCX specifies the increment for the elements of ! X. INCX must be > zero. If X represents part of a matrix, ! then use INCX = 1 if a column vector is being zeroed and ! INCX = NDIM if a row vector is being zeroed. ! Unchanged on exit. ! BETA - DOUBLE PRECISION. ! BETA specifies the scalar beta. (see pg. 40 of G and v.L.) ! V - DOUBLE PRECISION array of DIMENSION at least n. ! Is updated to be the appropriate Householder vector for ! the given problem. (Note: space for the implicit zeroes is ! assumed to be present. Will save on time for index translation.) ! -- Written by Tom Fairgrieve, ! Department of Computer Science, ! University of Toronto, ! Toronto, Ontario CANADA M5S 1A4 ! .. Local Scalars .. DOUBLE PRECISION ALPHA, M INTEGER I, L, JMKP1, IEND, ISTART ! .. External Functions from BLAS .. INTEGER IDAMAX DOUBLE PRECISION DNRM2 EXTERNAL IDAMAX, DNRM2 ! .. External Subroutines from BLAS .. EXTERNAL DSCAL ! .. Intrinsic Functions .. INTRINSIC ABS, SIGN ! .. Executable Statements .. ! Test the input parameters. IF ((K < 1) .OR. (K > J)) THEN WRITE (9,*) 'Domain error for K in DHHPR' CALL AUTOSTOP() END IF IF (J > N) THEN WRITE (9,*) 'Domain error for J in DHHPR' CALL AUTOSTOP() END IF IF (INCX < 1) THEN WRITE (9,*) 'Domain error for INCX in DHHPR' CALL AUTOSTOP() END IF ! Number of potential non-zero elements in V. JMKP1 = J - K + 1 ! Find M := max{ |x_k|, ... , |x_j| } M = ABS( X( IDAMAX( JMKP1, X(K), INCX ) ) ) ! alpha := 0 ! For i = k to j ! v_i = x_i / m ! alpha := alpha + v_i^2 (i.e. alpha = vtv) ! End For ! alpha := sqrt( alpha ) ! Copy X(K)/M, ... , X(J)/M to V(K), ... , V(J) IF (INCX == 1) THEN DO I = K, J V(I) = X(I)/M ENDDO ELSE IEND = JMKP1*INCX ISTART = (K-1)*INCX + 1 L = K DO I = ISTART, IEND, INCX V(L) = X(I)/M L = L + 1 ENDDO END IF ! Compute alpha ALPHA = DNRM2(JMKP1, V(K), 1) ! beta := 1/(alpha(alpha + |V_k|)) BETA = 1.0D0 / (ALPHA*(ALPHA+ABS(V(K)))) ! v_k := v_k + sign(v_k)*alpha V(K) = V(K) + SIGN(1.0D0,V(K))*ALPHA ! Done ! ! End of DHHPR. END SUBROUTINE DHHPR SUBROUTINE DHHAP ( K, J, N, Q, BETA, V, JOB, A, LDA ) USE SUPPORT, ONLY: AUTOSTOP ! .. Scalar Arguments .. INTEGER, INTENT(IN) :: J, K, N, Q, JOB, LDA DOUBLE PRECISION, INTENT(IN) :: BETA ! .. Array Arguments .. DOUBLE PRECISION, INTENT(IN) :: V( * ) DOUBLE PRECISION, INTENT(INOUT) :: A( LDA, * ) ! .. ! Purpose ! ======= ! DHHAP applies a Householder Plane Rotation defined by v and beta ! to the matrix A. If JOB = 1 then A := (I - beta*v*vt)A and if ! JOB = 2 then A := A(I - beta*v*vt). (See Golub and van Loan ! Alg. 3.3-2.) ! Parameters ! ========== ! K - INTEGER. ! On entry, K specifies that the V(K) may be the first ! non-zero entry of V. ! K must be at least one. ! Unchanged on exit. ! J - INTEGER. ! On entry, J specifies the last non-zero entry of V. ! J must be >= K and <= N. ! Unchanged on exit. ! N - INTEGER. ! On entry, N specifies the row dimension of A. ! Unchanged on exit. ! Q - INTEGER. ! On entry, Q specifies the column dimension of A. ! Unchanged on exit. ! BETA - DOUBLE PRECISION. ! BETA specifies the scalar beta. (see pg. 40 of G and v.L.) ! Unchanged on exit. ! V - DOUBLE PRECISION array of DIMENSION at least n. ! Householder vector v. ! Unchanged on exit. ! JOB - INTEGER. ! On entry, JOB specifies the order of the Householder application. ! If JOB = 1 then A := (I - beta*v*vt)A and if JOB = 2 then ! A := A(I - beta*v*vt) ! Unchanged on exit. ! A - DOUBLE PRECISION array of DIMENSION at least ! ( LDA, Q ). ! On entry, A specifies the matrix to be transformed. ! On exit, A specifies the transformed matrix. ! LDA - INTEGER. ! On entry, LDA specifies the declared leading dimension of A. ! Unchanged on exit. ! -- Written by Tom Fairgrieve, ! Department of Computer Science, ! University of Toronto, ! Toronto, Ontario CANADA M5S 1A4 ! .. Local Scalars .. DOUBLE PRECISION S INTEGER JMKP1, ROW, COL ! .. External Functions from BLAS .. DOUBLE PRECISION DDOT EXTERNAL DDOT ! .. Executable Statements .. ! Test the input parameters. IF ((JOB /= 1) .AND. (JOB /= 2)) THEN WRITE (9,*) 'Domain error for JOB in DHHAP' CALL AUTOSTOP() END IF IF ((K < 1) .OR. (K > J)) THEN WRITE (9,*) 'Domain error for K in DHHAP' CALL AUTOSTOP() END IF IF (JOB == 1) THEN IF (J > N) THEN WRITE (9,*) 'Domain error for J in DHHAP' CALL AUTOSTOP() END IF ELSE IF (J > Q) THEN WRITE (9,*) 'Domain error for J in DHHAP' CALL AUTOSTOP() END IF END IF ! Minimum {row,col} dimension of update. JMKP1 = J - K + 1 ! If (JOB = 1) then ! For p = 1, ... , q ! s := beta*(v_k*a_k,p + ... + v_j*a_j,p) ! For i = k, ..., j ! a_i,p := a_i,p - s*v_i ! End For ! End For ! Else % JOB=2 ! For p = 1, ... , n ! s := beta*(v_k*a_p,k + ... + v_j*a_p,j) ! For i = k, ..., j ! a_p,i := a_p,i - s*v_i ! End For ! End For ! End If IF (JOB == 1) THEN DO COL = 1, Q S = BETA * DDOT(JMKP1, V(K), 1, A(K, COL), 1) DO ROW = K, J A(ROW,COL) = A(ROW,COL) - S*V(ROW) ENDDO ENDDO ELSE DO ROW = 1, N S = BETA * DDOT(JMKP1, V(K), 1, A(ROW, K), LDA) DO COL = K, J A(ROW,COL) = A(ROW,COL) - S*V(COL) ENDDO ENDDO END IF ! Done ! ! End of DHHAP. END SUBROUTINE DHHAP !----------------------------------------------------------------------- !----------------------------------------------------------------------- END MODULE FLOQUET auto/07p/src/maps.f900000640000175000017500000003205213570013207012313 0ustar skskMODULE MAPS USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE AE USE TOOLBOXAE USE EQUILIBRIUM USE INTERFACES IMPLICIT NONE PRIVATE PUBLIC :: AUTODS CONTAINS !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for Discrete Dynamical Systems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE INITDS(AP) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP CALL INITEQ(AP) ! ** Continuation of singular points SELECT CASE(AP%ITPST) CASE(7) ! ** PD continuation AP%NFPR=2 AP%NDIM=2*AP%NDIM+1 CASE(8) ! Neimark-Sacker AP%NFPR=2 AP%NDIM=2*AP%NDIM+2 END SELECT END SUBROUTINE INITDS ! ---------- ------ SUBROUTINE AUTODS(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) CALL INITDS(AP) SELECT CASE(AP%ITPST) CASE(0) ! ** Discrete dynamical systems : fixed points. CALL AUTOAE(AP,ICP,ICU,FNDS,STPNDS,FNCSDS) CASE(1) ! BP continuation (maps) CALL AUTOAE(AP,ICP,ICU,FNBPDS,STPNBPDS,FNCSDS) CASE(2,7) ! ** PD or fold continuation (maps) CALL AUTOAE(AP,ICP,ICU,FNLPDS,STPNLPDS,FNCSDS) CASE(8) ! Neimark-Sacker bifurcation continuation (maps) CALL AUTOAE(AP,ICP,ICU,FNNS,STPNNS,FNCSDS) END SELECT END SUBROUTINE AUTODS ! ---------- ---- SUBROUTINE FNDS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generate the equations for continuing fixed points. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) INTEGER I, J, ITDS, NPAR, NFPR DOUBLE PRECISION, ALLOCATABLE :: FN(:),DFDU1(:,:),DFDP1(:,:) DOUBLE PRECISION, ALLOCATABLE :: DFDU2(:,:) ITDS=NINT(PAR(11)) CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) IF(ITDS>=2)THEN NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(FN(NDIM),DFDU1(NDIM,NDIM),DFDP1(NDIM,NPAR), & DFDU2(NDIM,NDIM)) DO I=2,ITDS ! with iterations use the chain rule FN(:)=F(:) CALL FUNI(AP,NDIM,FN,UOLD,ICP,PAR,IJAC,F,DFDU1,DFDP1) IF(IJAC>0)THEN ! DFDU=DFDU1*DFDU CALL DGEMM('n','n',NDIM,NDIM,NDIM,1.d0,DFDU1, & NDIM,DFDU,NDIM,0.d0,DFDU2,NDIM) DFDU(:,:NDIM)=DFDU2(:,:) IF(IJAC>1)THEN ! DFDP=DFDU1*DFDP+DFDP1 DO J=1,NFPR CALL DGEMV('n',NDIM,NDIM,1.d0,DFDU1,NDIM, & DFDP(1,ICP(J)),1,1d0,DFDP1(1,ICP(J)),1) DFDP(:,ICP(J))=DFDP1(:,ICP(J)) ENDDO ENDIF ENDIF ENDDO DEALLOCATE(FN,DFDU1,DFDU2,DFDP1) ENDIF F(:)=F(:)-U(:) IF(IJAC.EQ.0)RETURN DO I=1,NDIM DFDU(I,I)=DFDU(I,I)-1 ENDDO END SUBROUTINE FNDS ! ---------- -------- SUBROUTINE STPNDS(AP,PAR,ICP,U,UDOT,NODIR) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNAE(AP,PAR,ICP,U,UDOT,NODIR) IF(PAR(11)==0d0)THEN PAR(11)=1d0 ENDIF IF(AP%ISW==-1)THEN IF(AP%ITP==7) THEN ! period doubling PAR(11)=PAR(11)*2 ELSEIF(AP%ITP==8.OR.(MOD(AP%ITP,10)==8))THEN ! this could work if the torus has a resonance PAR(11)=PAR(11)*(2d0/PAR(12)) ENDIF ENDIF END SUBROUTINE STPNDS ! ---------- ------ SUBROUTINE FNLPDS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-par continuation of folds (maps) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNLPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNDS) END SUBROUTINE FNLPDS ! ---------- -------- SUBROUTINE STPNLPDS(AP,PAR,ICP,U,UDOT,NODIR) ! Generates starting data for the 2-parameter continuation of ! Neimark-Sacker bifurcation point (map). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNLPF(AP,PAR,ICP,U,UDOT,NODIR,FNDS) END SUBROUTINE STPNLPDS ! ---------- ------ SUBROUTINE FNBPDS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-par continuation of folds (maps) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNBPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNDS) END SUBROUTINE FNBPDS ! ---------- -------- SUBROUTINE STPNBPDS(AP,PAR,ICP,U,UDOT,NODIR) ! Generates starting data for the 2-parameter continuation of ! Neimark-Sacker bifurcation point (map). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNBPF(AP,PAR,ICP,U,UDOT,NODIR,FNDS) END SUBROUTINE STPNBPDS ! ---------- ---- SUBROUTINE FNNS(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-parameter continuation of Neimark- ! Sacker bifurcation points in maps. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNHBF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FNDS,FFNSX) END SUBROUTINE FNNS ! ---------- ----- SUBROUTINE FFNSX(AP,U,PAR,DFDU,DFDV) USE SUPPORT, ONLY: PI USE AUTO_CONSTANTS, ONLY: TY TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(INOUT) :: U(AP%NDM*2+2), PAR(*) DOUBLE PRECISION, INTENT(IN) :: DFDU(AP%NDM,AP%NDM) DOUBLE PRECISION, INTENT(OUT) :: DFDV(AP%NDM,AP%NDM+1) INTEGER I,NDM DOUBLE PRECISION THTA,F NDM=AP%NDM IF(AP%ITP==8)THEN ! initialization IF(LEN_TRIM(TY)>2)THEN READ(TY(3:),'(I5)')I PAR(12)=PAR(I) ENDIF THTA=PAR(12) U(2*NDM+1)=THTA ENDIF ! construct matrix for extended Neimark-Sacker system ! Kuznetsov, 3rd ed., (10.83) ! A^2-2cA+I, and the derivative to theta: 2sA ! where A=DFDU+I, c=cos(theta), and s=sin(theta), so if B=DFDU: ! (B+I)^2-2c(B+I)+I=B^2+2(1-c)B+2(1-c)I, 2s(B+I)v=2sBv+2sv CALL DGEMM('n','n',NDM,NDM,NDM,1.d0,DFDU,NDM,DFDU,NDM,0.d0,DFDV,NDM) THTA=U(NDM*2+1) F=2*(1-COS(THTA)) DFDV(:,:)=DFDV(:,:)+F*DFDU(:,:) DO I=1,NDM DFDV(I,I)=DFDV(I,I)+F ENDDO F=2*SIN(THTA) CALL DGEMV('n',NDM,NDM,F,DFDU,NDM,U(NDM+1),1,0,DFDV(1,NDM+1),1) DFDV(:,NDM+1)=DFDV(:,NDM+1)+F*U(NDM+1:2*NDM) END SUBROUTINE FFNSX ! ---------- ------ SUBROUTINE STPNNS(AP,PAR,ICP,U,UDOT,NODIR) USE SUPPORT, ONLY: PI ! Generates starting data for the 2-parameter continuation of ! Neimark-Sacker bifurcation point (map). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNHBF(AP,PAR,ICP,U,UDOT,NODIR,FNDS,FFNSX) END SUBROUTINE STPNNS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSDS(AP,ICP,U,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE SUPPORT, ONLY: AA=>P0V TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE SELECT CASE(ITEST) CASE(4) Q=FNRNDS(AP,ATYPE,U,AA) CASE(6) Q=FNHBDS(AP,PAR,ATYPE,AA) CASE DEFAULT Q=FNCSEQF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FNDS) END SELECT END FUNCTION FNCSDS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNRNDS(AP,ATYPE,U,AA) USE SUPPORT, ONLY: CHECKSP, PI, LBTYPE TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: U(AP%NDIM), AA(AP%NDIM+1,AP%NDIM+1) ! Local INTEGER NTOP,ITPST DOUBLE PRECISION THETA FNRNDS = 0 ATYPE='' ITPST=AP%ITPST IF(ITPST==2.OR.ITPST==7)THEN ! Rn on Fold/PD curve IF(AP%ITPST==2)THEN IF(.NOT.CHECKSP('R1',AP%IPS,AP%ILP,AP%ISP))RETURN ATYPE='R1' ELSE IF(.NOT.CHECKSP('R2',AP%IPS,AP%ILP,AP%ISP))RETURN ATYPE='R2' ENDIF FNRNDS=FNBTAE(AP,U,AA) ELSEIF(ITPST==8)THEN ! check the angle for resonances on Torus bifurcations THETA=U(AP%NDIM-1) SELECT CASE(NINT(THETA*6/PI(1d0))) CASE(3) ! 1:4 res ATYPE='R4' CASE(4) ! 1:3 res ATYPE='R3' CASE(6) ! 1:2 res ATYPE='R2' CASE DEFAULT ! 1:1 res ATYPE='R1' END SELECT IF(.NOT.CHECKSP(ATYPE,AP%IPS,AP%ILP,AP%ISP))ATYPE='' FNRNDS=THETA*(THETA-PI(.5d0))*(THETA-PI(2d0/3))*(THETA-PI(1d0)) ELSE RETURN ENDIF NTOP=MOD(AP%NTOT-1,9999)+1 IF(LEN_TRIM(ATYPE)>0.AND.AP%IID>=2)WRITE(9,101)ABS(AP%IBR),NTOP+1,FNRNDS 101 FORMAT(I4,I6,9X,'Rn Function:',ES14.5) END FUNCTION FNRNDS ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNHBDS(AP,PAR,ATYPE,AA) USE SUPPORT, ONLY: PI, EVV, EIG, CHECKSP, LBTYPE DOUBLE PRECISION, PARAMETER :: RLARGE=1.0d+30 TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) ! Local COMPLEX(KIND(1.0D0)), ALLOCATABLE :: EV(:) DOUBLE PRECISION, ALLOCATABLE :: AAA(:,:) INTEGER NDM,ISP,IID,IBR,NTOT,NTOP,NINS,I,LOC,ITPST DOUBLE PRECISION RIMHB,REV NDM=AP%NDM ISP=AP%ISP IID=AP%IID IBR=AP%IBR ITPST=AP%ITPST NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 ATYPE='' FNHBDS=0d0 ALLOCATE(EV(NDM)) ! Compute the eigenvalues of the Jacobian ALLOCATE(AAA(NDM,NDM)) AAA(:,:)=AA(1:NDM,1:NDM) CALL EIG(AP,NDM,NDM,AAA,EV) DEALLOCATE(AAA) EV(:)=EV(:)+1d0 DO I=1,NDM IF(EV(I)==CMPLX(0d0,0d0,KIND(1d0)))THEN EV(I)=CMPLX(-RLARGE,0.d0,KIND(1.0D0)) ELSE EV(I)=LOG(EV(I)) ENDIF ENDDO IF(ITPST==8)THEN ! TR CALL STABEQ(AP,AA,EV,NINS,LOC,3) ELSEIF(ITPST==2.OR.ITPST==7)THEN ! LP/PD CALL STABEQ(AP,AA,EV,NINS,LOC,2) ELSE CALL STABEQ(AP,AA,EV,NINS,LOC,1) ENDIF EVV(:)=EXP(EV(:)) ! Check if not continuing a BP and not Rn already IF(ITPST==1.OR.MOD(AP%ITP,10)<-4)GOTO 100 REV=0.d0 IF(LOC>0)THEN REV=REAL(EV(LOC)) RIMHB=ABS(AIMAG(EV(LOC))) ATYPE=TPSPAE(AP%EPSS,ITPST,RIMHB) IF(TRIM(ATYPE)=='TR')PAR(12)=RIMHB ENDIF IF(.NOT.CHECKSP(ATYPE,AP%IPS,AP%ILP,ISP))THEN ATYPE='' ELSE FNHBDS=REV IF(IID>=2)WRITE(9,101)ABS(IBR),NTOP+1,FNHBDS ENDIF AP%HBFF=FNHBDS IF(LEN_TRIM(ATYPE)>0)THEN IF(NINS==AP%NINS)ATYPE=TRIM(ATYPE)//'0' ENDIF 100 AP%NINS=NINS CALL PRINTEIG(AP) DEALLOCATE(EV) 101 FORMAT(I4,I6,9X,'Hopf Function:',ES14.5) END FUNCTION FNHBDS ! ------------ -------- ------ CHARACTER(3) FUNCTION TPSPAE(EPSS,ITPST,RIMHB) RESULT(ATYPE) ! Determines type of secondary bifurcation of maps. USE SUPPORT, ONLY: PI INTEGER, INTENT(IN) :: ITPST DOUBLE PRECISION, INTENT(IN) :: EPSS, RIMHB ATYPE='' IF(ABS(RIMHB-PI(1d0)) <= SQRT(EPSS))THEN ! ** period doubling (flip) IF(ITPST==0)THEN ! plain flip ATYPE='PD' ELSEIF(ITPST==8)THEN ! torus + flip ATYPE='PTR' ELSEIF(ITPST==2)THEN ! fold+flip ATYPE='LPD' ENDIF ELSEIF(RIMHB > SQRT(EPSS))THEN ! ** torus (Neimark-Sacker) bifurcation IF(ITPST==0)THEN ! plain torus ATYPE='TR' ELSEIF(ITPST==8)THEN ! torus+torus ATYPE='TTR' ELSEIF(ITPST==2)THEN ! fold+torus ATYPE='LTR' ELSEIF(ITPST==7)THEN ! flip+torus ATYPE='PTR' ENDIF ELSE ! ** something else... (close to fold -- normal folds are detected ! in FNLPAE!) IF(ITPST==7)THEN ! flip+fold ATYPE='LPD' ELSEIF(ITPST==8)THEN ! torus+fold ATYPE='LTR' ENDIF ENDIF END FUNCTION TPSPAE END MODULE MAPS auto/07p/src/bvp.f900000640000175000017500000014610613570013207012150 0ustar sksk! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! General Boundary Value Problems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! MODULE BVP USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC :: AUTOBV,SETRTN,IRTN,NRTN,STSDRBV INTEGER, ALLOCATABLE :: NRTN(:) INTEGER IRTN CONTAINS ! ---------- ------ SUBROUTINE AUTOBV(AP,ICP,ICU,FUNI,BCNI,ICNI,STPNBVI,FNCI) ! THIS IS THE ENTRY ROUTINE FOR GENERAL BOUNDARY VALUE PROBLEMS. TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ICU(*) include 'interfaces.h' CALL CNRLBV(AP,ICP,ICU,FUNI,BCNI,ICNI,STPNBVI,FNCI) END SUBROUTINE AUTOBV ! ---------- ----------------- subroutine mpi_setubv_worker(funi,icni,bcni) use autompi use solvebv integer iam,kwt include 'interfaces.h' integer :: ndim, na, ncol, ntst, nfpr, npar type(autoparameters) ap double precision, allocatable :: ups(:,:), udotps(:,:), rldot(:) double precision, allocatable :: dups(:,:), drl(:), par(:), tm(:) integer, allocatable :: icp(:),np(:) call mpibcastap(ap) iam=mpiiam() kwt=mpikwt() ndim=ap%ndim ntst=ap%ntst ncol=ap%ncol nfpr=ap%nfpr npar=ap%npar allocate(np(kwt)) call partition(ntst,kwt,np) na=np(iam+1) deallocate(np) allocate(icp(nfpr),rldot(nfpr),par(npar),tm(0:na)) allocate(ups(ndim,0:na*ncol),udotps(ndim,0:na*ncol)) allocate(dups(ndim,0:na*ncol),drl(nfpr)) ap%iid=0 call stsdrbv(ap,par,icp,funi,bcni,icni, & rldot,ups,udotps,tm,dups,drl) ! free input arrays deallocate(ups,udotps,tm,dups,drl,par,rldot,icp) end subroutine mpi_setubv_worker ! ---------- ------ SUBROUTINE CNRLBV(AP,ICP,ICU,FUNI,BCNI,ICNI,STPNBVI,FNCI) USE IO USE MESH USE SUPPORT, ONLY: DTM=>DTV, P0=>P0V, P1=>P1V, EV=>EVV, CHECKSP, STOPPED, & INITSTOPCNTS, INIT2, INIT3, FNCS, PVLI, LBITP USE AUTO_CONSTANTS, ONLY: NPARX USE AUTOMPI ! Controls the computation of solution branches. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ICU(*) ! Local INTEGER, ALLOCATABLE :: IUZ(:),NP(:) DOUBLE PRECISION, ALLOCATABLE :: PAR(:),VUZ(:),THU(:),THL(:) DOUBLE PRECISION, ALLOCATABLE :: RLCUR(:),RLOLD(:),RLDOT(:) DOUBLE PRECISION, ALLOCATABLE :: UPS(:,:),UOLDPS(:,:),UPOLDP(:,:) DOUBLE PRECISION, ALLOCATABLE :: UDOTPS(:,:),TM(:),TEST(:) INTEGER NDIM,IPS,IRS,ILP,NTST,NCOL,IAD,IADS,ISP,ISW,NUZR,ITP,ITPST,NFPR INTEGER IBR,IPERP,ISTOP,ITNW,ITEST,I,NITPS,NODIR,NTOP,NTOT,NPAR,NINS INTEGER IFOUND,ISTEPPED,IAM,KWT,NA,NTSTNA,IID INTEGER STOPCNTS(-9:14) DOUBLE PRECISION DS,DSMAX,DSOLD,DSTEST,RDS,SP1 LOGICAL STEPPED CHARACTER(4) ATYPE,ATYPEDUM ! INITIALIZE COMPUTATION OF BRANCH IAM=MPIIAM() IF(IAM==0)THEN IF(AP%ISW==-2.OR.AP%ISW==-3)THEN AP%ILP=0 AP%ISP=0 AP%NMX=5 WRITE(6,"(/,A,A)")' Generating starting data :', & ' Restart at EP label below :' ENDIF CALL INIT2(AP,ICP,ICU) ENDIF CALL MPIBCASTAP(AP) NDIM=AP%NDIM IPS=AP%IPS IRS=AP%IRS ILP=AP%ILP NTST=AP%NTST NCOL=AP%NCOL IAD=AP%IAD IADS=AP%IADS ISP=AP%ISP ISW=AP%ISW NUZR=AP%NUZR ITP=AP%ITP ITPST=AP%ITPST NFPR=AP%NFPR NPAR=AP%NPAR ! allocate a minimum of NPARX so we can detect overflows ! past NPAR gracefully ALLOCATE(PAR(MAX(NPAR,NPARX)),THL(NFPR),THU(NDIM),IUZ(NUZR),VUZ(NUZR)) IF(IAM==0)CALL INIT3(AP,ICP,PAR,THL,THU,IUZ,VUZ) CALL MPIBCAST(THU,NDIM) KWT=MPIKWT() ALLOCATE(NP(KWT)) CALL PARTITION(NTST,KWT,NP) NA=NP(IAM+1) DEALLOCATE(NP) IID=AP%IID IF(IAM==0)THEN NTSTNA=NTST ELSE NTSTNA=NA ENDIF ALLOCATE(RLCUR(NFPR),RLDOT(NFPR),RLOLD(NFPR)) ALLOCATE(UPS(NDIM,0:NTSTNA*NCOL),UOLDPS(NDIM,0:NTSTNA*NCOL)) ALLOCATE(UPOLDP(NDIM,0:NA*NCOL),UDOTPS(NDIM,0:NTSTNA*NCOL)) ALLOCATE(TM(0:NTSTNA),DTM(NTSTNA)) ALLOCATE(P0(NDIM,NDIM),P1(NDIM,NDIM),TEST(AP%NTEST),EV(AP%NDM)) DS=AP%DS RDS=DS DSOLD=RDS IF(IAM==0)CALL INITSTOPCNTS(ISP,ILP,ITPST,STOPCNTS) IF(ISP.LT.0)THEN ISP=-ISP AP%ISP=ISP ENDIF DO I=1,AP%NTEST TEST(I)=0.d0 ENDDO NITPS=0 NTOT=0 AP%NTOT=NTOT ISTOP=0 DO I=1,NFPR RLCUR(I)=0.d0 RLOLD(I)=0.d0 RLDOT(I)=0.d0 ENDDO UPS(:,:)=0.d0 UOLDPS(:,:)=0.d0 UPOLDP(:,:)=0.d0 UDOTPS(:,:)=0.d0 NODIR=0 IF(IAM==0)THEN CALL RSPTBV(AP,PAR,ICP,STPNBVI,FNCI,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,NODIR) ELSE ! RSPTBV calls STPNBVI which sometimes calls SOLVBV so we need ! to check if parallel work needs to be done DO WHILE(MPIWFI()) CALL MPI_SETUBV_WORKER(FUNI,ICNI,BCNI) ENDDO PAR(:)=0.d0 ENDIF ! call PVLS here the first time so the parameters can be initialized ! some demos use PVLS to set some global storage, so ! for MPI it needs to be called at init time only, ! though PAR is thrown away for IAM>0 CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) CALL STUDPBV(AP,PAR,ICP,FUNI,RLCUR,RLOLD, & NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,TM,NODIR,THU,NTSTNA,NA) IF(IAM==0)THEN ! don't set global rotations here for homoclinics, but in autlib5.f IF(IPS.NE.9)CALL SETRTN(AP%NDM,NTST*NCOL,NDIM,UPS) ELSE DTM(:)=TM(1:NA)-TM(0:NA-1) ENDIF CALL MPIBCAST1I(NODIR) IPERP=2 IF(NODIR.EQ.1 .AND. ISW.GT.0)THEN ! no direction given or valid; no branch switch IPERP=0 ELSEIF(IRS.NE.0 .AND. ISW.LT.0)THEN ! branch switch IPERP=1 ELSEIF(ITP==3 .OR. ABS(ITP/10)==3) THEN ! Hopf bifurcation IPERP=3 ELSEIF( ISP/=0 .AND. (IPS==2.OR.IPS==7.OR.IPS==12)) THEN ! periodic orbit with detection of special points: compute FMs IPERP=-1 ENDIF IF(IPERP/=0.AND.IPERP/=3)THEN CALL MPISCAT(UDOTPS,NDIM*NCOL,NTST,NDIM) CALL MPIBCAST(RLDOT,AP%NFPR) ENDIF IF(IPERP<2)THEN CALL STDRBV(AP,PAR,ICP,FUNI,BCNI,ICNI,RLCUR,RLOLD,RLDOT,NDIM, & UPS,UOLDPS,UDOTPS,UPOLDP,DTM,IPERP,P0,P1,THL,THU,NA) IF(IAM==0 .AND. ISP/=0 .AND. (IPS==2.OR.IPS==7.OR.IPS==12) )THEN ! determine and print Floquet multipliers and stability SP1 = FNCI(AP,ICP,UPS,NDIM,PAR,3,ATYPEDUM) ENDIF ENDIF ! Store plotting data for restart point : IF(IAM==0)CALL STHD(AP,ICP) IF(IRS.EQ.0) THEN ITP=9+10*ITPST ELSE ITP=0 ENDIF AP%ITP=ITP IF(IAM==0)CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) CALL MPIBCAST(PAR,NPAR) CALL MPIBCAST1I(ISTOP) CALL STPLBV(AP,PAR,ICP,ICU,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,THU,ISTOP,NA) DO WHILE(ISTOP==0) ITP=0 AP%ITP=ITP NINS=AP%NINS CALL STEPBV(AP,DSOLD,PAR,ICP,FUNI,BCNI,ICNI,RDS, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,THL,THU,NITPS,ISTOP,NTSTNA) IFOUND=0 DSTEST=DSOLD IF(ISTOP/=0)THEN ISTEPPED=AP%NTEST+1 ELSE ISTEPPED=0 IF(IAM==0)THEN CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) IF(IID.GE.2)WRITE(9,*) ENDIF DO ITEST=1,AP%NTEST ! Check for special points CALL LCSPBV(AP,DSOLD,DSTEST,PAR,ICP,ITEST,FUNI,BCNI,ICNI,FNCI, & TEST(ITEST),RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS, & UPOLDP,TM,DTM,P0,P1,EV,THL,THU,IUZ,VUZ,NITPS,ATYPE,STEPPED, & NTSTNA) IF(STEPPED)ISTEPPED=ITEST IF(LEN_TRIM(ATYPE)>0)THEN IFOUND=ITEST AP%ITP=LBITP(ATYPE,.TRUE.) AP%ITP=AP%ITP+SIGN(10,AP%ITP)*ITPST ENDIF ENDDO ENDIF IF(IAM==0)THEN DO ITEST=1,ISTEPPED-1 ! evaluate the test functions for the next step TEST(ITEST)=FNCS(AP,ICP,UPS,PAR,ATYPEDUM,IUZ,VUZ,ITEST,FNCI) ENDDO ENDIF ITP=AP%ITP IF(ITP/=0)THEN IF(STOPPED(IUZ,IFOUND,NUZR,ITP,STOPCNTS))THEN ISTOP=-1 ! *Stop at the first found bifurcation ENDIF IF(MOD(ITP,10)/=-4)THEN ! for plotter: use stability of previous point ! for bifurcation points AP%NINS=NINS ENDIF ENDIF ! Store plotting data. CALL MPIBCAST1I(ISTOP) IF(IAM==0)CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) CALL STPLBV(AP,PAR,ICP,ICU,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,THU,ISTOP,NA) IF(ISTOP/=0)EXIT NTOT=AP%NTOT ! Adapt the mesh to the solution. IF(IAD.NE.0)THEN IF(MOD(NTOT,IAD).EQ.0)THEN CALL ADAPT(NTST,NTSTNA,NCOL,NDIM,TM,DTM,UPS,UOLDPS, & ((IPS==2.OR.IPS==12) .AND. ABS(ISW)<=1)) ENDIF ENDIF ! Adapt the stepsize along the branch. IF(IADS.NE.0)THEN IF(MOD(NTOT,IADS).EQ.0)THEN ITNW=AP%ITNW IBR=AP%IBR NTOP=MOD(NTOT-1,9999)+1 DSMAX=AP%DSMAX CALL ADPTDS(NITPS,ITNW,IBR,NTOP,IID,DSMAX,RDS) AP%RDS=RDS ENDIF ENDIF ! Update UOLDPS, UDOTPS, UPOLDP, RLOLD, and RLDOT. CALL CONTBV(AP,DSOLD,PAR,ICP,FUNI,RLCUR,RLOLD,RLDOT, & NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,THL,THU,RDS) ENDDO DEALLOCATE(PAR,THL,THU,IUZ,VUZ) DEALLOCATE(EV,UPS,UOLDPS,UPOLDP,UDOTPS,TM,DTM,P0,P1) DEALLOCATE(TEST,RLCUR,RLOLD,RLDOT) END SUBROUTINE CNRLBV ! ---------- ------ SUBROUTINE CONTBV(AP,DSOLD,PAR,ICP,FUNI,RLCUR,RLOLD,RLDOT, & NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,THL,THU,RDS) USE MESH USE AUTOMPI ! Computes new rate of change (UDOTPS,RLDOT) and time derivative (UPOLDP) ! arrays depending on (UOLDPS,RLOLD) and (UPS,RLCUR), and then replaces ! (UOLDPS,RLOLD) with the current solution in (UPS,RLCUR). ! The stepsize used in the preceding step has been stored in DSOLD. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(IN) :: DSOLD INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(INOUT) :: PAR(*), UPS(NDIM,0:*), UOLDPS(NDIM,0:*) DOUBLE PRECISION, INTENT(OUT) :: UDOTPS(NDIM,0:*), UPOLDP(NDIM,0:*) DOUBLE PRECISION, INTENT(IN) :: RLCUR(AP%NFPR), DTM(*), THL(AP%NFPR), THU(*) DOUBLE PRECISION, INTENT(INOUT) :: RLOLD(AP%NFPR), RDS DOUBLE PRECISION, INTENT(OUT) :: RLDOT(AP%NFPR) INTEGER NTST,NCOL,IAM,KWT,NA INTEGER, ALLOCATABLE :: NP(:) NTST=AP%NTST NCOL=AP%NCOL IAM=MPIIAM() KWT=MPIKWT() ALLOCATE(NP(KWT)) CALL PARTITION(NTST,KWT,NP) NA=NP(IAM+1) DEALLOCATE(NP) ! Compute rate of change (along branch) of PAR(ICP(1)) and U : UDOTPS(:,0:NCOL*NA)=(UPS(:,0:NCOL*NA)-UOLDPS(:,0:NCOL*NA))/DSOLD IF(IAM==0.AND.NTST>NA)THEN UDOTPS(:,NCOL*NTST)=(UPS(:,NCOL*NTST)-UOLDPS(:,NCOL*NTST))/DSOLD ENDIF RLDOT(:)=(RLCUR(:)-RLOLD(:))/DSOLD ! Rescale, to set the norm of (UDOTPS,RLDOT) equal to 1. CALL SCALEBP(NTST,NCOL,NDIM,AP%NFPR,UDOTPS,RLDOT,DTM,THL,THU,NA, & AP%NPAR,PAR,RDS) ! Store time-derivative. !$OMP PARALLEL CALL STUPBV(AP,PAR,ICP,FUNI,NDIM,UPS,UPOLDP,NA) !$OMP END PARALLEL RLOLD(:)=RLCUR(:) IF(IAM==0)THEN UOLDPS(:,0:NCOL*NTST)=UPS(:,0:NCOL*NTST) ELSE UOLDPS(:,0:NCOL*NA)=UPS(:,0:NCOL*NA) ENDIF END SUBROUTINE CONTBV ! ---------- ------ SUBROUTINE STUPBV(AP,PAR,ICP,FUNI,NDIM,UPS,UPOLDP,NTSTNA) ! Stores U-prime (derivative with respect to T) in UPOLDP. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NTSTNA DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:*), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: UPOLDP(NDIM,0:*) ! Local INTEGER NCOL,NPAR,J DOUBLE PRECISION, ALLOCATABLE :: U(:),DFDU(:,:),DFDP(:,:),PRM(:) NCOL=AP%NCOL NPAR=AP%NPAR ALLOCATE(U(3*NDIM+AP%NFPR),DFDU(NDIM,NDIM),DFDP(NDIM,NPAR),PRM(NPAR)) PRM(:)=PAR(:NPAR) DFDU(:,:)=0.d0 DFDP(:,:)=0.d0 !$OMP DO DO J=0,NTSTNA*NCOL U(:NDIM)=UPS(:,J) U(NDIM+1:2*NDIM)=UPS(:,J) ! UOLD U(2*NDIM+1:)=0 ! set RLOLD/UPOLD input to 0 CALL FUNI(AP,NDIM,U,U(NDIM+1),ICP,PRM,0,UPOLDP(1,J),& DFDU,DFDP) ENDDO !$OMP END DO NOWAIT DEALLOCATE(U,DFDU,DFDP,PRM) END SUBROUTINE STUPBV ! ---------- ------ SUBROUTINE STEPBV(AP,DSOLD,PAR,ICP,FUNI,BCNI,ICNI,RDS, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,THL,THU,NITPS,ISTOP,NTSTNA) USE MESH USE AUTOMPI ! Controls the solution of the nonlinear equations (by Newton's method) ! for the next solution (PAR(ICP(*)) , U) on a branch of solutions. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*), NDIM, NTSTNA INTEGER, INTENT(OUT) :: ISTOP, NITPS DOUBLE PRECISION, INTENT(OUT) :: UPS(NDIM,0:*), RLCUR(AP%NFPR) DOUBLE PRECISION, INTENT(IN) :: UOLDPS(NDIM,0:*), RLOLD(AP%NFPR) DOUBLE PRECISION, INTENT(IN) :: UDOTPS(NDIM,0:*), RLDOT(AP%NFPR), UPOLDP(NDIM,0:*) DOUBLE PRECISION, INTENT(IN) :: TM(*), DTM(*), THL(*), THU(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*), RDS DOUBLE PRECISION, INTENT(OUT) :: DSOLD, P0(*),P1(*) INTEGER NCOL,IADS,IID,ITNW,NFPR,IBR,NTOT,NTOP,I,IAM DOUBLE PRECISION DSMIN,DSMAX LOGICAL CONVERGED NCOL=AP%NCOL IADS=AP%IADS IID=AP%IID ITNW=AP%ITNW NFPR=AP%NFPR IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 DSMIN=AP%DSMIN IAM=MPIIAM() IF(IAM>0)IID=0 ISTOP=0 DO DSOLD=RDS ! Perform Newton iterations CALL NEWTONBV(AP,PAR,ICP,FUNI,BCNI,ICNI,RDS, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,THL,THU,NITPS,CONVERGED) IF(CONVERGED)THEN ! Global concatenation of the solution from each node. CALL MPIGAT(UPS,NDIM*NCOL,AP%NTST) RETURN ENDIF ! Maximum number of iterations reached. IF(IADS.EQ.0)THEN IF(IID>0)WRITE(9,101)IBR,NTOP ISTOP=1 EXIT ENDIF ! Reduce stepsize and try again. DSMAX=AP%DSMAX NITPS=ITNW CALL ADPTDS(NITPS,ITNW,IBR,NTOP,IID,DSMAX,RDS) AP%RDS=RDS IF(IAM==0.AND.ABS(RDS).LT.DSMIN)THEN ! Minimum stepsize reached. IF(IID>0)WRITE(9,103)IBR,NTOP ISTOP=1 ENDIF CALL MPIBCAST1I(ISTOP) IF(ISTOP==1)EXIT IF(IID.GE.2)WRITE(9,102)IBR,NTOP ENDDO ! Minimum stepsize reached. DO I=1,NFPR RLCUR(I)=RLOLD(I) PAR(ICP(I))=RLCUR(I) ENDDO UPS(:,0:NCOL*NTSTNA)=UOLDPS(:,0:NCOL*NTSTNA) 101 FORMAT(I4,I6,' NOTE:No convergence with fixed step size') 102 FORMAT(I4,I6,' NOTE:Retrying step') 103 FORMAT(I4,I6,' NOTE:No convergence using minimum step size') END SUBROUTINE STEPBV ! ---------- -------- SUBROUTINE NEWTONBV(AP,PAR,ICP,FUNI,BCNI,ICNI,RDS, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,THL,THU,NITPS,CONVERGED) ! This subroutine contains the main predictor-corrector loop USE MESH, ONLY: RNRMSQP USE SOLVEBV, ONLY: SOLVBV USE SUPPORT, ONLY: CHECKSP, PVLI USE AUTOMPI, ONLY: MPIIAM, MPIKWT, MPIBCAST1I, PARTITION, MPIGAT, MPIREDUCEMAX include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*), NDIM INTEGER, INTENT(OUT) :: NITPS DOUBLE PRECISION, INTENT(OUT) :: UPS(NDIM,0:*), RLCUR(AP%NFPR) DOUBLE PRECISION, INTENT(IN) :: UOLDPS(NDIM,0:*), RLOLD(AP%NFPR) DOUBLE PRECISION, INTENT(IN) :: UDOTPS(NDIM,0:*), RLDOT(AP%NFPR), UPOLDP(NDIM,0:*) DOUBLE PRECISION, INTENT(IN) :: TM(*), DTM(*), THL(AP%NFPR), THU(*), RDS DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, INTENT(OUT) :: P0(*),P1(*) LOGICAL, INTENT(OUT) :: CONVERGED INTEGER NTST,NCOL,IID,ITNW,NWTN,NFPR,IFST,NLLV,I,J,NIT1,IPS,ILP,ISP INTEGER IAM, KWT, NA, NTSTNA, STATE INTEGER, PARAMETER :: NEWTON_CYCLE=0, NEWTON_EXIT=1 INTEGER, PARAMETER :: NEWTON_CONVERGED=2, NEWTON_CONVERGED_FLDF=3 INTEGER, ALLOCATABLE :: NP(:) DOUBLE PRECISION EPSL,EPSU,DELREF,DELMAX,ADRL,ADU,AU,DET,SS DOUBLE PRECISION DUMX,RDRL,RDUMX,UMX,RDSZ,UMXDUMX(2) DOUBLE PRECISION, ALLOCATABLE :: DUPS(:,:),DRL(:),P0T(:),P1T(:) LOGICAL DONE IPS=AP%IPS ILP=AP%ILP NTST=AP%NTST NCOL=AP%NCOL ISP=AP%ISP IID=AP%IID ITNW=AP%ITNW NWTN=AP%NWTN NFPR=AP%NFPR EPSL=AP%EPSL EPSU=AP%EPSU IAM=MPIIAM() KWT=MPIKWT() ALLOCATE(NP(KWT)) CALL PARTITION(NTST,KWT,NP) NA=NP(IAM+1) DEALLOCATE(NP) IF(IAM==0)THEN NTSTNA=NTST ELSE NTSTNA=NA ENDIF ! Extrapolate to get the approximation to the next solution point. RLCUR(:)=RLOLD(:)+RDS*RLDOT(:) UPS(:,0:NCOL*NA)=UOLDPS(:,0:NCOL*NA)+RDS*UDOTPS(:,0:NCOL*NA) IF(IAM==0.AND.NTST>NA)THEN UPS(:,NCOL*NTST)=UOLDPS(:,NCOL*NTST)+RDS*UDOTPS(:,NCOL*NTST) ENDIF ! Write additional output on unit 9 if requested. NITPS=0 CALL WRTBV9(AP,RLCUR,NDIM,UPS,TM,DTM,THU,NITPS,NA) ! Generate the Jacobian matrix and the right hand side. ALLOCATE(DUPS(NDIM,0:NTSTNA*NCOL),DRL(NFPR)) CONVERGED=.FALSE. STATE=NEWTON_CYCLE DELREF=0 DO NIT1=1,ITNW NITPS=NIT1 NLLV=0 IFST=0 IF(NITPS.LE.NWTN)IFST=1 CALL SOLVBV(IFST,AP,DET,PAR,ICP,FUNI,BCNI,ICNI,RDS,NLLV, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,DUPS,DRL, & P0,P1,THL,THU) AP%DET=DET ! Add Newton increments. DO I=1,NFPR RLCUR(I)=RLCUR(I)+DRL(I) PAR(ICP(I))=RLCUR(I) ENDDO DUMX=0.d0 UMX=0.d0 DO J=0,NA*NCOL DO I=1,NDIM ADU=ABS(DUPS(I,J)) IF(ADU.GT.DUMX)DUMX=ADU AU=ABS(UPS(I,J)) IF(AU.GT.UMX)UMX=AU UPS(I,J)=UPS(I,J)+DUPS(I,J) ENDDO ENDDO UMXDUMX(1)=UMX UMXDUMX(2)=DUMX IF(IAM==0.AND.NTSTNA>NA)THEN UPS(:,NTST*NCOL)=UPS(:,NTST*NCOL)+DUPS(:,NTST*NCOL) ENDIF CALL WRTBV9(AP,RLCUR,NDIM,UPS,TM,DTM,THU,NITPS,NA) CALL MPIREDUCEMAX(UMXDUMX, 2) IF(IAM==0)THEN UMX=UMXDUMX(1) DUMX=UMXDUMX(2) ! Check whether user-supplied error tolerances have been met : DONE=.TRUE. RDRL=0.d0 DO I=1,NFPR ADRL=ABS(DRL(I))/(1.d0+ABS(RLCUR(I))) IF(ADRL.GT.EPSL)DONE=.FALSE. IF(ADRL.GT.RDRL)RDRL=ADRL ENDDO RDUMX=DUMX/(1.d0+UMX) IF(DONE.AND.RDUMX.LT.EPSU)THEN STATE=NEWTON_CONVERGED IF(CHECKSP('LP',IPS,ILP,ISP))THEN STATE=NEWTON_CONVERGED_FLDF ENDIF ELSEIF(NITPS.EQ.1)THEN DELREF=20*DMAX1(RDRL,RDUMX) ELSE DELMAX=DMAX1(RDRL,RDUMX) IF(DELMAX.GT.DELREF)THEN STATE=NEWTON_EXIT ENDIF ENDIF ENDIF CALL MPIBCAST1I(STATE) IF(STATE==NEWTON_EXIT)EXIT IF(STATE==NEWTON_CONVERGED_FLDF)THEN ! Find the direction vector (for test functions) ALLOCATE(P0T(NDIM*NDIM),P1T(NDIM*NDIM)) NLLV=-1 IFST=0 RDSZ=0.d0 CALL SOLVBV(IFST,AP,DET,PAR,ICP,FUNI,BCNI,ICNI,RDSZ,NLLV, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,DUPS,& DRL,P0T,P1T,THL,THU) ! Scale the direction vector. SS=RNRMSQP(NTST,NCOL,NDIM,NDIM,DUPS,DTM,THU,NA) IF(IAM==0)THEN SS=SQRT(SS+DOT_PRODUCT(THL(:),DRL(:)**2)) AP%FLDF=DRL(1)/SS ENDIF STATE=NEWTON_CONVERGED DEALLOCATE(P0T,P1T) ENDIF IF(STATE==NEWTON_CONVERGED)THEN CONVERGED=.TRUE. EXIT ENDIF ENDDO DEALLOCATE(DUPS,DRL) END SUBROUTINE NEWTONBV !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Restart of Solution Branches ( Differential Equations ) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE RSPTBV(AP,PAR,ICP,STPNBVI,FNCI,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,NODIR) USE IO USE MESH USE SUPPORT, ONLY: PVLI USE AUTO_CONSTANTS, ONLY: TY USE AUTOMPI ! Restarts computation of a branch of solutions at point labelled IRS. ! The output written on unit 8 by a previous run is now expected as ! input on unit 3. The label IRS, where computation is to resume, must ! be specified in the user-supplied subroutine INIT. ! If IRS=0 then the starting point must be provided analytically in the ! user-supplied subroutine STPNT. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER ICP(*),NDIM,NODIR DOUBLE PRECISION UPS(NDIM,0:*),UDOTPS(NDIM,0:*),TM(0:*),DTM(*),PAR(*) DOUBLE PRECISION RLDOT(AP%NFPR) DOUBLE PRECISION, ALLOCATABLE :: U(:),UDOT(:) INTEGER :: ICPRS(2),IRS,NTST,NCOL,ITP,NFPR,NCOLRS,NTSRS,I,J IRS=AP%IRS NTST=AP%NTST NCOL=AP%NCOL ITP=AP%ITP NFPR=AP%NFPR ! Get restart data : IF(IRS>0)THEN NTSRS=GETNTST3() NCOLRS=GETNCOL3() ELSE NTSRS=NTST NCOLRS=NCOL ENDIF IF(NCOLRS*NTSRS==0)THEN ALLOCATE(U(NDIM),UDOT(NDIM+1)) CALL READLB(AP,ICPRS,U,UDOT,PAR) ! Generate the (initially uniform) mesh. CALL MSH(NTST,TM) DO J=0,NTST*NCOL UPS(:,J)=U(:) ENDDO IF(ITP==3 .OR. ABS(ITP/10)==3) THEN IF(LEN_TRIM(TY)>2)THEN READ(TY(3:),'(I5)')I PAR(11)=PAR(I) ENDIF ! Hopf bifurcation NODIR=-1 ELSE ! else we just use the uniform mesh with no direction given NODIR=1 ENDIF DEALLOCATE(U,UDOT) ELSE CALL STPNBVI(AP,PAR,ICP,NTSRS,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) ENDIF CALL MPISBV(.FALSE.) ! Determine a suitable starting label and branch number. CALL NEWLAB(AP) DTM(1:NTST)=TM(1:NTST)-TM(0:NTST-1) END SUBROUTINE RSPTBV ! ---------- ------- SUBROUTINE STUDPBV(AP,PAR,ICP,FUNI,RLCUR,RLOLD, & NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,TM,NODIR,THU,NTSTNA,NA) USE AUTOMPI ! Compute UOLDPS, RLOLD, RLCUR, UPOLDP ! Also compute UDOTPS for Hopf bifurcations include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NTSTNA,NA INTEGER, INTENT(INOUT) :: NODIR DOUBLE PRECISION, INTENT(INOUT) :: UPS(NDIM,0:*),UDOTPS(NDIM,0:*),PAR(*) DOUBLE PRECISION, INTENT(INOUT) :: TM(0:*) DOUBLE PRECISION, INTENT(OUT) :: UPOLDP(NDIM,0:*),UOLDPS(NDIM,0:*) DOUBLE PRECISION, INTENT(OUT) :: RLCUR(AP%NFPR),RLOLD(AP%NFPR) DOUBLE PRECISION, INTENT(IN) :: THU(*) INTEGER :: NTST,NCOL,I NTST=AP%NTST NCOL=AP%NCOL CALL MPISCAT(UPS,NDIM*NCOL,NTST,NDIM) CALL MPISCAT(TM,1,NTST,1) CALL MPIBCAST(PAR,AP%NPAR) CALL MPIBCAST1I(NODIR) ! Set UOLDPS, RLOLD. DO I=1,AP%NFPR RLCUR(I)=PAR(ICP(I)) RLOLD(I)=RLCUR(I) ENDDO UOLDPS(:,0:NCOL*NTSTNA)=UPS(:,0:NCOL*NTSTNA) ! Store U-prime (derivative with respect to time or space variable). IF(NODIR.EQ.-1)THEN ! ** Restart from a Hopf bifurcation. NODIR=0 CALL STHOPF(AP,UPS,PAR,ICP,NTST,NCOL, & NDIM,UDOTPS,UPOLDP,THU,FUNI) AP%ISW=1 ELSE ! ** Restart from orbit. !$OMP PARALLEL CALL STUPBV(AP,PAR,ICP,FUNI,NDIM,UPS,UPOLDP,NA) !$OMP END PARALLEL ENDIF END SUBROUTINE STUDPBV ! ---------- ------ SUBROUTINE STHOPF(AP,U,PAR,ICP,NTST,NCOL, & NDIM,UDOTPS,UPOLDP,THU,FUNI) USE IO USE MESH USE SUPPORT USE AUTOMPI ! Generates starting data for a periodic orbit from a Hopf ! bifurcation point (for waves or periodic orbits) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER ICP(*),NDIM,NTST,NCOL DOUBLE PRECISION U(NDIM),PAR(*),THU(*) DOUBLE PRECISION UDOTPS(NDIM,0:*),UPOLDP(NDIM,0:*) include 'interfaces.h' ! Local INTEGER I,J,IAM,KWT,OFFSET,NTSTNA,NA INTEGER, ALLOCATABLE :: NP(:) DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),SMAT(:,:),RNLLV(:),F(:) DOUBLE PRECISION, ALLOCATABLE :: DTM(:),UOLD(:) DOUBLE PRECISION DUMDFP(1) DOUBLE PRECISION PERIOD,TPI,RIMHB,T,C,S,SS(1) ALLOCATE(DFU(NDIM,NDIM),F(NDIM),RNLLV(2*NDIM),SMAT(2*NDIM,2*NDIM)) ALLOCATE(UOLD(NDIM)) IAM=MPIIAM() KWT=MPIKWT() ALLOCATE(NP(KWT)) CALL PARTITION(NTST,KWT,NP) OFFSET=0 DO I=1,IAM OFFSET=OFFSET+NP(I) ENDDO OFFSET=OFFSET*NCOL NA=NP(IAM+1) DEALLOCATE(NP) IF(IAM==0)THEN NTSTNA=NTST ELSE NTSTNA=NA ENDIF PERIOD=PAR(11) TPI=PI(2.d0) RIMHB=TPI/PERIOD SMAT(:,:)=0.d0 DO I=1,NDIM SMAT(I,I)=-RIMHB SMAT(NDIM+I,NDIM+I)=RIMHB ENDDO UOLD(:)=U(:) CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,1,F,DFU,DUMDFP) ! Note that the period-scaling in FUNC is taken into account: SMAT(1:NDIM,NDIM+1:2*NDIM)=DFU(:,:)/PAR(11) SMAT(NDIM+1:2*NDIM,1:NDIM)=DFU(:,:)/PAR(11) CALL NLVC(2*NDIM,2*NDIM,2,SMAT,RNLLV) CALL NRMLZ(2*NDIM,RNLLV) DO J=0,NTSTNA*NCOL T=(J+OFFSET)*TPI/(NTST*NCOL) S=SIN(T) C=COS(T) UDOTPS(:,J)=S*RNLLV(1:NDIM)+C*RNLLV(NDIM+1:2*NDIM) IF(J<=NA*NCOL)THEN UPOLDP(:,J)=C*RNLLV(1:NDIM)-S*RNLLV(NDIM+1:2*NDIM) ENDIF ENDDO ALLOCATE(DTM(NA)) DTM(:)=1.d0/NTST SS(1)=SQRT(RNRMSQP(NTST,NCOL,NDIM,NDIM,UDOTPS,DTM,THU,NA)) DEALLOCATE(DTM) CALL MPIBCAST(SS,1) UDOTPS(:,0:NA*NCOL)=UDOTPS(:,0:NA*NCOL)/SS(1) IF(IAM==0.AND.NTST>NA)THEN UDOTPS(:,NTST*NCOL)=UDOTPS(:,NTST*NCOL)/SS(1) ENDIF DEALLOCATE(DFU,F,RNLLV,SMAT,UOLD) END SUBROUTINE STHOPF ! ---------- ------ SUBROUTINE SETRTN(NDM,NTNC,NDIM,UPS) USE SUPPORT ! Initialization for rotations INTEGER, INTENT(IN) :: NDM, NTNC, NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NTNC) INTEGER I ALLOCATE(NRTN(NDM)) IRTN=0 DO I=1,NDM NRTN(I)=NINT( (UPS(I,NTNC)-UPS(I,0)) / PI(2.d0) ) IF(NRTN(I).NE.0)THEN IRTN=1 ENDIF ENDDO IF(IRTN.EQ.0)DEALLOCATE(NRTN) END SUBROUTINE SETRTN ! ---------- ------ SUBROUTINE STDRBV(AP,PAR,ICP,FUNI,BCNI,ICNI,RLCUR,RLOLD, & RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,IPERP, & P0,P1,THL,THU,NA) USE MESH USE SOLVEBV USE AUTOMPI ! Generates a direction vector (UDOTPS,RLDOT) that is needed to start ! the computation of a branch when no direction vector is given. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER ICP(*),NDIM,IPERP,NA DOUBLE PRECISION UDOTPS(NDIM,0:*),DTM(*) DOUBLE PRECISION PAR(*),RLCUR(AP%NFPR),RLOLD(AP%NFPR),RLDOT(AP%NFPR) DOUBLE PRECISION THL(AP%NFPR),THU(*),UPS(NDIM,0:AP%NTST*AP%NCOL) DOUBLE PRECISION UOLDPS(*),UPOLDP(*),P0(*),P1(*) INTEGER NTST,NCOL,IID,NFPR,NLLV,IFST,I,IAM,NTSTNA DOUBLE PRECISION RDSZ,DET,SS,SS1(1) DOUBLE PRECISION, ALLOCATABLE :: DUPS(:,:),DRL(:) ! Generate the Jacobian matrix with zero direction vector. ! (Then the last row of the Jacobian will be zero) ! in case the starting direction is to be determined. IAM=MPIIAM() NTST=AP%NTST NCOL=AP%NCOL IID=AP%IID NTSTNA=AP%NTST IF(IAM>0)THEN IID=0 NTSTNA=NA ENDIF NFPR=AP%NFPR IF(IPERP.EQ.0)THEN UDOTPS(:,0:NCOL*NA)=0.d0 IF(IAM==0.AND.NTST>NA)THEN UDOTPS(:,NCOL*NTST)=0.d0 ENDIF RLDOT(:)=0.d0 ENDIF RDSZ=0.d0 NLLV=1 IFST=1 ALLOCATE(DUPS(NDIM,0:NCOL*NTSTNA),DRL(NFPR)) CALL SOLVBV(IFST,AP,DET,PAR,ICP,FUNI,BCNI,ICNI,RDSZ,NLLV, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,DUPS,DRL, & P0,P1,THL,THU) IF(IPERP==-1)THEN DEALLOCATE(DUPS,DRL) RETURN ENDIF ! Compute the starting direction. DO I=1,NFPR RLDOT(I)=DRL(I) PAR(ICP(I))=RLCUR(I) ENDDO UDOTPS(:,0:NCOL*NA)=DUPS(:,0:NCOL*NA) IF(IAM==0.AND.NTST>NA)THEN UDOTPS(:,NCOL*NTST)=DUPS(:,NCOL*NTST) ENDIF DEALLOCATE(DUPS,DRL) ! Scale the starting direction. I=0 SS=RNRMSQP(NTST,NCOL,NDIM,NDIM,UDOTPS,DTM,THU,NA) IF(IAM==0)THEN SS=SQRT(SS+DOT_PRODUCT(THL(:),RLDOT(:)**2)) ! Make sure that RLDOT(1) is positive (unless practically zero: then look ! at other variables). DO I=1,NFPR IF(ABS(RLDOT(I)/SS)/(1.d0+ABS(RLCUR(I)))>AP%EPSL)THEN IF(RLDOT(I)<0.d0)THEN SS=-SS ENDIF EXIT ENDIF ENDDO IF(I>NFPR)THEN DO I=1,NDIM IF(ABS(UDOTPS(I,NTST*NCOL)/SS)/(1.d0+ABS(UPS(I,NTST*NCOL)))> & AP%EPSU)THEN IF(UDOTPS(I,NTST*NCOL)<0.d0)THEN SS=-SS ENDIF EXIT ENDIF ENDDO ENDIF ENDIF SS1(1)=SS CALL MPIBCAST(SS1,1) SS=SS1(1) RLDOT(:)=RLDOT(:)/SS UDOTPS(:,0:NCOL*NA)=UDOTPS(:,0:NCOL*NA)/SS IF(IAM==0.AND.NTST>NA)THEN UDOTPS(:,NCOL*NTST)=UDOTPS(:,NCOL*NTST)/SS ENDIF IF(IID.GE.2)THEN WRITE(9,101) DO I=1,NFPR WRITE(9,102)ICP(I),RLDOT(I) ENDDO ENDIF 101 FORMAT(/,' Starting direction of the free parameter(s) : ') 102 FORMAT(' PAR(',I3,') :',E20.12) END SUBROUTINE STDRBV ! ---------- ------- SUBROUTINE STSDRBV(AP,PAR,ICP,FUNI,BCNI,ICNI, & RLDOT,UPS,UDOTPS,TM,DUPS,DRL) USE MESH USE SOLVEBV USE AUTOMPI ! Call SOLVEBV from starting data to obtain second null vector ! This is used by BPCONT in periodic.f90 and toolboxbv.f90 include 'interfaces.h' TYPE(AUTOPARAMETERS) :: AP INTEGER ICP(*) DOUBLE PRECISION PAR(*),RLDOT(AP%NFPR),DRL(AP%NFPR) DOUBLE PRECISION UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*) DOUBLE PRECISION TM(0:*),DUPS(AP%NDIM,0:*) ! Local DOUBLE PRECISION, ALLOCATABLE :: RLOLD(:),RLCUR(:) DOUBLE PRECISION, ALLOCATABLE :: UOLDPS(:,:),UPOLDP(:,:) DOUBLE PRECISION, ALLOCATABLE :: THU(:),THL(:),DTM(:) DOUBLE PRECISION, ALLOCATABLE :: P0(:,:),P1(:,:) INTEGER, ALLOCATABLE :: NP(:) INTEGER IAM,KWT,NDIM,NFPR,NCOL,NTST,NA,NTSTNA,I,IFST,NLLV DOUBLE PRECISION DET,RDS NDIM=AP%NDIM NFPR=AP%NFPR NCOL=AP%NCOL NTST=AP%NTST IAM=MPIIAM() KWT=MPIKWT() ALLOCATE(NP(KWT)) CALL PARTITION(NTST,KWT,NP) NA=NP(IAM+1) DEALLOCATE(NP) IF(IAM==0)THEN NTSTNA=NTST CALL MPISBV(.TRUE.) CALL MPIBCASTAP(AP) ELSE NTSTNA=NA ENDIF CALL MPIBCAST(PAR,AP%NPAR) CALL MPIBCASTI(ICP,NFPR) CALL MPIBCAST(RLDOT,NFPR) CALL MPISCAT(UPS,NDIM*NCOL,NTST,NDIM) CALL MPISCAT(UDOTPS,NDIM*NCOL,NTST,NDIM) CALL MPISCAT(TM,1,NTST,1) ALLOCATE(THU(NDIM),THL(NFPR)) ALLOCATE(P0(NDIM,NDIM),P1(NDIM,NDIM)) ALLOCATE(UPOLDP(NDIM,0:NA*NCOL),UOLDPS(NDIM,0:NTSTNA*NCOL)) ALLOCATE(DTM(NTSTNA),RLCUR(NFPR),RLOLD(NFPR)) DTM(1:NTSTNA)=TM(1:NTSTNA)-TM(0:NTSTNA-1) DO I=1,NFPR RLCUR(I)=PAR(ICP(I)) RLOLD(I)=RLCUR(I) ENDDO UOLDPS(:,0:NTSTNA*NCOL)=UPS(:,0:NTSTNA*NCOL) ! ** compute UPOLDP !$OMP PARALLEL CALL STUPBV(AP,PAR,ICP,FUNI,NDIM,UPS,UPOLDP,NA) !$OMP END PARALLEL ! ** unit weights THL(1:NFPR)=1.d0 THU(1:NDIM)=1.d0 ! ** call SOLVBV RDS=0.d0 NLLV=1 IFST=1 CALL SOLVBV(IFST,AP,DET,PAR,ICP,FUNI,BCNI,ICNI,RDS, & NLLV,RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM, & DUPS,DRL,P0,P1,THL,THU) ! ** Global concatenation of the solution from each node. CALL MPIGAT(DUPS,NDIM*NCOL,NTST) IF(IAM==0)THEN ! ** normalization CALL SCALEB(NTST,NCOL,NDIM,NFPR,UDOTPS,RLDOT,DTM,THL,THU) CALL SCALEB(NTST,NCOL,NDIM,NFPR,DUPS,DRL,DTM,THL,THU) ENDIF DEALLOCATE(THU,THL,P0,P1,UPOLDP,UOLDPS,DTM,RLCUR,RLOLD) END SUBROUTINE STSDRBV !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Detection and Location of Branch Points in Boundary Value Problems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE LCSPBV(AP,DSOLD,DSTEST,PAR,ICP,ITEST,FUNI,BCNI,ICNI,FNCI,Q, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,EV,THL,THU,IUZ,VUZ,NITPS,ATYPE,STEPPED,NTSTNA) USE SUPPORT USE AUTOMPI DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 ! This subroutine uses the Secant method to accurately locate folds ! branch points, and zero(es) of user parameter values. ! Such points are located as points on a solution branch where the ! function FNCS changes sign. ! It involves calling the basic solution subroutines CONTBV and STEP ! with decreasing values of RDS (stepsize along branch). ! The point is assumed to have been found with sufficient accuracy if ! the ratio between RDS and the user supplied value of DS is less than ! the user-supplied tolerance EPSS. ! This subroutine is called from CNRLB, which controls the computation ! of branches of solutions to general boundary value problems. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),ITEST,IUZ(*),NDIM,NTSTNA INTEGER, INTENT(INOUT) :: NITPS COMPLEX(KIND(1.0D0)), INTENT(INOUT) :: EV(AP%NDM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*), UPS(NDIM,0:AP%NCOL*NTSTNA) DOUBLE PRECISION, INTENT(INOUT) :: UOLDPS(NDIM,0:AP%NCOL*NTSTNA) DOUBLE PRECISION, INTENT(INOUT) :: UDOTPS(NDIM,0:AP%NCOL*NTSTNA) DOUBLE PRECISION, INTENT(INOUT) :: UPOLDP(NDIM,0:AP%NCOL*NTSTNA) DOUBLE PRECISION, INTENT(IN) :: TM(*),DTM(*),THL(*),THU(*),VUZ(*) DOUBLE PRECISION, INTENT(INOUT) :: DSOLD,DSTEST,Q DOUBLE PRECISION, INTENT(INOUT) :: RLCUR(AP%NFPR),RLOLD(AP%NFPR) DOUBLE PRECISION, INTENT(INOUT) :: RLDOT(AP%NFPR) DOUBLE PRECISION, INTENT(INOUT) :: P0(NDIM,NDIM),P1(NDIM,NDIM) CHARACTER(LEN=*), INTENT(OUT) :: ATYPE LOGICAL, INTENT(OUT) :: STEPPED INTEGER I,IAM,IID,ITMX,IBR,NTOT,NTOP,NITSP1,ISTOP,NCOL,NFPR,NITPSS LOGICAL SEARCH DOUBLE PRECISION DS,DSMAX,EPSS,Q0,Q1,DQ,RDS,RRDS,S0,S1 DOUBLE PRECISION DETS,FLDFS,DSOLDS,DSTESTS CHARACTER(4) :: ATYPEDUM DOUBLE PRECISION, ALLOCATABLE :: RLOLDS(:),UOLDPSS(:,:),P0S(:,:),P1S(:,:) DOUBLE PRECISION, ALLOCATABLE :: RLCURS(:),UPSS(:,:) DOUBLE PRECISION, ALLOCATABLE :: RLDOTS(:),UDOTPSS(:,:) COMPLEX(KIND(1.0D0)), ALLOCATABLE :: EVS(:) IAM=MPIIAM() IID=AP%IID ITMX=AP%ITMX IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 NCOL=AP%NCOL NFPR=AP%NFPR DS=AP%DS DSMAX=AP%DSMAX EPSS=AP%EPSS SEARCH=.FALSE. STEPPED=.FALSE. ATYPE='' IF(IAM==0)THEN ! Check for zero. Q0=Q Q1=FNCS(AP,ICP,UPS,PAR,ATYPE,IUZ,VUZ,ITEST,FNCI) ! disable detected potential bifurcations without stability changes I=LEN_TRIM(ATYPE) IF(I>0)THEN IF(ATYPE(I:I)=='0')ATYPE='' ENDIF IF(AP%ITP/=0.AND.ABS((1.d0+HMACH)*Q1*DSTEST) < & EPSS*(1+SQRT(ABS(DS*DSMAX)))*ABS(Q0-Q1))THEN ! there could be multiple test functions going through zero ! at a point. In general, use "first come, first served", but ! In general, use "first come, first served", but ! bifurcations override UZ. IF(MOD(AP%ITP,10)==-4.AND.LEN_TRIM(ATYPE)>0.AND.TRIM(ATYPE)/='UZ')THEN CALL MPIBCAST1L(SEARCH) Q=0.d0 IF(IID>0)WRITE(9,102)RDS RETURN ENDIF Q1=0.d0 ENDIF ! do not test via Q0*Q1 to avoid overflow. IF((Q0>=0.AND.Q1>=0) .OR. (Q0<=0.AND.Q1<=0) .OR. LEN_TRIM(ATYPE)==0)THEN CALL MPIBCAST1L(SEARCH) ATYPE='' Q=Q1 RETURN ENDIF ! Use the secant method for the first step: S0=0.d0 S1=DSTEST DQ=Q0-Q1 RDS=Q1/DQ*(S1-S0) RDS=(1.d0+HMACH)*RDS ! Return if tolerance has been met : RRDS=ABS(RDS)/(1+SQRT(ABS(DS*DSMAX))) IF(RRDS.LT.EPSS) THEN CALL MPIBCAST1L(SEARCH) Q=0.d0 IF(IID>0)WRITE(9,102)RDS RETURN ENDIF SEARCH=.TRUE. ENDIF CALL MPIBCAST1L(SEARCH) IF (.NOT.SEARCH) THEN RETURN ENDIF ALLOCATE(UOLDPSS(NDIM,0:NTSTNA*NCOL),RLOLDS(NFPR)) ALLOCATE(UDOTPSS(NDIM,0:NTSTNA*NCOL),RLDOTS(NFPR)) ALLOCATE(UPSS(NDIM,0:NTSTNA*NCOL),RLCURS(NFPR)) ALLOCATE(P0S(NDIM,NDIM),P1S(NDIM,NDIM),EVS(AP%NDM)) ! save state to restore in case of non-convergence or ! "possible special point" UPSS(:,:)=UPS(:,:) UDOTPSS(:,:)=UDOTPS(:,:) UOLDPSS(:,:)=UOLDPS(:,:) RLCURS(:)=RLCUR(:) RLDOTS(:)=RLDOT(:) RLOLDS(:)=RLOLD(:) P0S(:,:)=P0(:,:) P1S(:,:)=P1(:,:) EVS(:)=EV(:) DETS=AP%DET FLDFS=AP%FLDF DSOLDS=DSOLD NITPSS=NITPS DSTESTS=DSTEST DO NITSP1=0,ITMX IF(IAM==0)THEN ! If requested write additional output on unit 9 : IF(IID.GE.2)THEN WRITE(9,101)NITSP1,RDS ENDIF ENDIF CALL CONTBV(AP,DSOLD,PAR,ICP,FUNI,RLCUR,RLOLD,RLDOT, & NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM,THL,THU,RDS) CALL STEPBV(AP,DSOLD,PAR,ICP,FUNI,BCNI,ICNI,RDS, & RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP, & TM,DTM,P0,P1,THL,THU,NITPS,ISTOP,NTSTNA) IF(ISTOP.NE.0)EXIT IF(IAM/=0)THEN CALL MPIBCAST1L(STEPPED) IF(STEPPED)THEN DEALLOCATE(UPSS,RLCURS,UOLDPSS,RLOLDS,UDOTPSS,RLDOTS,P0S,P1S) RETURN ENDIF CYCLE ENDIF ! Check for zero. CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) IF(IID.GE.2)WRITE(9,*) Q=FNCS(AP,ICP,UPS,PAR,ATYPE,IUZ,VUZ,ITEST,FNCI) ! ignore stability changes I=LEN_TRIM(ATYPE) IF(ATYPE(I:I)=='0')ATYPE=ATYPE(1:I-1) ! Use Mueller's method with bracketing for subsequent steps DSTEST=S1+RDS CALL MUELLER(Q0,Q1,Q,S0,S1,DSTEST,RDS) RDS=(1.d0+HMACH)*RDS ! Return if tolerance has been met : RRDS=ABS(RDS)/(1+SQRT(ABS(DS*DSMAX))) IF(RRDS.LT.EPSS) THEN STEPPED=.TRUE. CALL MPIBCAST1L(STEPPED) Q=0.d0 IF(IID>0)WRITE(9,102)RDS DEALLOCATE(UPSS,RLCURS,UOLDPSS,RLOLDS,UDOTPSS,RLDOTS,P0S,P1S) RETURN ENDIF CALL MPIBCAST1L(STEPPED) ENDDO IF(IAM==0.AND.IID>0)WRITE(9,103)IBR,NTOP+1 ATYPE='' ! set back to previous (converged) state UPS(:,:)=UPSS(:,:) UDOTPS(:,:)=UDOTPSS(:,:) UOLDPS(:,:)=UOLDPSS(:,:) RLCUR(:)=RLCURS(:) DO I=1,NFPR PAR(ICP(I))=RLCUR(I) ENDDO RLDOT(:)=RLDOTS(:) RLOLD(:)=RLOLDS(:) P0(:,:)=P0S(:,:) P1(:,:)=P1S(:,:) EV(:)=EVS(:) AP%DET=DETS AP%FLDF=FLDFS DSOLD=DSOLDS DSTEST=DSTESTS NITPS=NITPSS IF(IAM==0)THEN CALL PVLI(AP,ICP,UPS,NDIM,PAR,FNCI) Q=FNCS(AP,ICP,UPS,PAR,ATYPEDUM,IUZ,VUZ,ITEST,FNCI) ENDIF DEALLOCATE(UPSS,RLCURS,UOLDPSS,RLOLDS,UDOTPSS,RLDOTS,P0S,P1S) 101 FORMAT(' ==> Location of special point : Iteration ',I3, & ' Step size = ',ES13.5) 102 FORMAT(' ==> Location of special point : ', & ' Convergence. Step size = ',ES13.5) 103 FORMAT(I4,I6,' NOTE:Possible special point') END SUBROUTINE LCSPBV !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Output (Boundary Value Problems) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ------ SUBROUTINE STPLBV(AP,PAR,ICP,ICU,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,THU,ISTOP,NA) USE IO USE MESH USE AUTOMPI ! Writes the bifurcation diagram on unit 7 (Differential Equations) ! (Also controls the writing of complete solutions on unit 8). ! Every line written contains, in order, the following: ! ! IBR : The label of the branch. ! NTOT : The index of the point on the branch. ! (Points are numbered consecutively along a branch). ! If IPS=2 or 3, then the sign of NTOT indicates stability : ! - = stable , + = unstable, or unknown. ! ITP : An integer indicating the type of point : ! ! 4 ( ) : Output point (Every NPR steps along branch). ! -4 (UZ) : Output point (Zero of user function). ! 5 (LP) : Fold (fold). ! 6 (BP) : Branch point. ! 7 (PD) : Period doubling bifurcation. ! 8 (TR) : Bifurcation to an invariant torus. ! 9 (EP) : End point of branch, normal termination. ! -9 (MX) : End point of branch, abnormal termination. ! ! LAB : The label of a special point. ! PAR(ICP(1)): The principal parameter. ! A : The L2-norm of the solution vector, or other measure of ! the solution (see the user-supplied parameter IPLT). ! MAX U(*) : The maxima of the first few solution components. ! PAR(ICP(*)): Further free parameters (if any). TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER ICP(*),ICU(*),NDIM,ISTOP,NA DOUBLE PRECISION PAR(*),TM(*),DTM(*),UPS(*),THU(*) DOUBLE PRECISION RLDOT(AP%NFPR),UDOTPS(*) ! Local DOUBLE PRECISION UMX(7) INTEGER IPS,NTST,NCOL,ISW,IPLT,NMX,NPR,NDM,ITP,ITPST,IBR,IAB,IBRS INTEGER LABW,NINS,NTOT,NTOTS,IAM DOUBLE PRECISION RL0,RL1,A0,A1,AMP IAM=MPIIAM() IPS=AP%IPS NTST=AP%NTST NCOL=AP%NCOL ISW=AP%ISW IPLT=AP%IPLT NMX=AP%NMX NPR=AP%NPR NDM=AP%NDM ITP=AP%ITP ITPST=AP%ITPST IBR=AP%IBR RL0=AP%RL0 RL1=AP%RL1 A0=AP%A0 A1=AP%A1 NTOT=AP%NTOT NTOT=NTOT+1 AP%NTOT=NTOT ! ITP is set to 4 every NPR steps along a branch of solns and the entire ! solution is written on unit 8. IF(NPR.NE.0)THEN IF(MOD(NTOT,NPR).EQ.0 .AND. MOD(ITP,10).EQ.0)ITP=4+10*ITPST AP%ITP=ITP ENDIF ! Compute maxima of solution components. CALL MXUPSP(NA,NCOL,NDIM,MIN(NDM,7),UPS,UMX) ! Check whether limits of the bifurcation diagram have been reached : IAB=ABS(IPLT) IF(IAB.EQ.0.OR.IAB.GT.3*NDM) & AMP=SQRT(RNRMSQP(NTST,NCOL,NDIM,NDM,UPS,DTM,THU,NA)) IF(IPLT.GT.0.AND.IAB.LE.NDM)THEN IF(IAB.LE.7)THEN AMP=UMX(IAB) ELSE AMP=RMXUPSP(NA,NCOL,NDIM,IAB,UPS) ENDIF ENDIF IF(IPLT.GT.NDM.AND.IAB.LE.2*NDM.AND.IAM==0) & AMP=RINTG(NTST,NCOL,NDIM,IAB-NDM,UPS,DTM) IF(IPLT.GT.2*NDM.AND.IAB.LE.3*NDM.AND.IAM==0) & AMP=RNRM2(NTST,NCOL,NDIM,IAB-2*NDM,UPS,DTM) IF(IPLT.LT.0.AND.IAB.LE.NDM)AMP=RMNUPSP(NA,NCOL,NDIM,IAB,UPS) IF(ISTOP.EQ.1)THEN ! ** Maximum number of iterations reached somewhere. ITP=-9-10*ITPST ELSE IF(PAR(ICP(1)).LT.RL0.OR.PAR(ICP(1)).GT.RL1 & .OR. AMP.LT.A0.OR.AMP.GT.A1 .OR. NTOT.EQ.NMX)THEN ITP=9+10*ITPST+1000 ENDIF CALL MPIBCAST1I(ITP) ! to distinguish between EP for 1st point and EP for end point IF(ITP>1000)THEN ITP=ITP-1000 ISTOP=1 ENDIF ENDIF AP%ITP=ITP ! All special points receive label: LABW=0 IF(MOD(ITP,10).NE.0) THEN LABW=AP%LAB ENDIF ! Branch number is negative for periodic solutions IF(IPS.EQ.2.OR.IPS.EQ.12)THEN IBRS=-IBR ELSE IBRS=IBR ENDIF ! Determine stability, and write output on units 7 and 8. NTOTS=NTOT IF(ABS(ISW).LE.1 .AND. (IPS.EQ.2.OR.IPS.EQ.7.OR.IPS.EQ.12))THEN NINS=AP%NINS IF(NINS.EQ.NDIM)NTOTS=-NTOT ENDIF IF(IAM==0)CALL WRLINE(AP,PAR,ICU,IBRS,NTOTS,LABW,AMP,UMX) ! Write plotting and restart data on unit 8. IF(MOD(ITP,10).NE.0)THEN CALL WRTBV8(AP,PAR,ICP,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,NA) AP%LAB=AP%LAB+1 ENDIF END SUBROUTINE STPLBV ! ---------- ------ SUBROUTINE WRTBV8(AP,PAR,ICP,RLDOT,NDIM,UPS,UDOTPS,TM,DTM,NA) USE COMPAT USE SUPPORT, ONLY: DIRECTION USE AUTO_CONSTANTS, ONLY: IPS, NDIMU => NDIM USE AUTOMPI ! Writes plotting and restart data on unit 8, viz.: ! (1) data identifying the corresponding point on unit 7, ! (2) the complete solution, ! (3) the direction of the branch. ! ! Specifically the following is written: ! ! IBR : The index of the branch. ! NTOT : The index of the point. ! ITP : The type of point (see STPLBV above). ! LAB : The label of the point. ! NFPR : The number of free parameters used in the computation. ! ISW : The value of ISW used in the computation. ! NTPL : The number of points in the time interval [0,1] for which ! solution values are written. ! NAR : The number of values written per point. ! (NAR=NDIM+1, since T and U(i), i=1,..,NDIM are written). ! NROWPR: The number of lines printed following the identifying line ! and before the next data set or the end of the file. ! (Used for quickly skipping a data set when searching). ! NTST : The number of time intervals used in the discretization. ! NCOL : The number of collocation points used. ! NPAR : The dimension of the array PAR. ! NPARI : Number of internal parameters, at the end of the array PAR. ! NDIMU : The user-specified dimension. ! IPS : The problem type. ! IPRIV : Private field for use by toolboxes. ! ! Following the above described identifying line there are NTPL lines ! containing : ! T , U-1(T) , U-2(T) , ... , U-NDIM(T), ! where NDIM is the dimension of the system of differential equations. ! ! Following this is a line containing the indices of the free parameters ! ICP(I),I=1,NFPR, ! ! followed by a line containing the values ! RL-dot(i) , i=1,NFPR, ! ! and following this are NTPL lines each containing ! U-dot-1(T), U-dot-2(T), ... , U-dot-NDIM(T). ! ! Finally the parameter values PAR(i) , i=1,NPAR, are written. ! ! Above, RL-dot(.) and U-dot(.) specify the direction of the branch. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER ICP(*),NDIM,NA DOUBLE PRECISION UPS(NDIM,0:*),UDOTPS(NDIM,0:*),TM(0:*),DTM(*) DOUBLE PRECISION PAR(*),RLDOT(AP%NFPR) INTEGER NTST,NCOL,ISW,ITP,NFPR,IBR,NPAR,NTOT,LAB,NTPL,NAR,NROWPR INTEGER NROW,MTOT,I,J,K,NPARI,IAM DOUBLE PRECISION T LOGICAL DIR CHARACTER(137), ALLOCATABLE :: S(:) !xxx==================================================================== !xxx Test problem: compute the error ! err(x,t)=x - 2*DATAN(1.d0)*PAR(2)*DSIN(4*DATAN(1.d0)*t) !xxx==================================================================== IAM=MPIIAM() NTST=AP%NTST NCOL=AP%NCOL ISW=AP%ISW NPARI=AP%NPARI ITP=AP%ITP NFPR=AP%NFPR IBR=AP%IBR NPAR=AP%NPAR NTOT=AP%NTOT LAB=AP%LAB ! Write information identifying the solution : ! skip direction info based on IIS and ITP DIR=DIRECTION(AP%IIS,ITP) NTPL=NCOL*NTST+1 NAR=NDIM+1 NROWPR=(NDIM/7+1)*NTPL + (NPAR+6)/7 IF(DIR)THEN NROWPR=NROWPR + (NFPR+19)/20 + (NFPR+6)/7 + ((NDIM+6)/7)*NTPL ENDIF MTOT=MOD(NTOT-1,9999)+1 IF(IAM==0)WRITE(8,101)IBR,MTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR,NTST,NCOL,NPAR, & NPARI,NDIMU,IPS,0 ! Write the entire solution on unit 8 : !xxx==================================================================== !xxx Test problem !xxx eg=0.d0 !xxx em=0.d0 !xxx==================================================================== NROW=NDIM/7+1 ! each worker writes to a line string, the lines are then gathered ALLOCATE(S(0:NTST*NCOL*NROW-1)) !$OMP PARALLEL DO PRIVATE(T,J,K) DO J=0,NA*NCOL-1 T=TM(J/NCOL)+MOD(J,NCOL)*DTM(J/NCOL+1)/NCOL WRITE(S(J*NROW),102)T,UPS(:MIN(NDIM,6),J) DO K=1,NROW-1 WRITE(S(J*NROW+K),102)UPS(K*7:MIN(NDIM,K*7+6),J) ENDDO !xxx==================================================================== !xxx Test problem !xxx er = err(ups(1,j),T) !xxx if(dabs(er).gt.eg)eg=dabs(er) !xxx if(i.eq.1 .and. dabs(er).gt.em)em=dabs(er) !xxx==================================================================== ENDDO !$OMP END PARALLEL DO CALL MPIGATS(S,NCOL*NROW,NTST,4+7*19) IF(IAM==0)THEN DO J=0,NTST*NCOL*NROW-1 WRITE(8,'(A)')TRIM(S(J)) ENDDO WRITE(8,102)1.0d0,UPS(:,NTST*NCOL) ENDIF !xxx==================================================================== !xxx Test problem ! Write global error and mesh error !xxx write(10,100)ncol,ntst,eg,em !xxx 100 FORMAT(4X,I2,I4,7ES11.3) !xxx==================================================================== IF(DIR)THEN ! Write the direction of the branch: NROW=(NDIM+6)/7 !$OMP PARALLEL DO PRIVATE(T,J,K) DO J=0,NA*NCOL-1 DO K=0,NROW-1 WRITE(S(J*NROW+K),102)UDOTPS(K*7+1:MIN(NDIM,K*7+7),J) ENDDO ENDDO !$OMP END PARALLEL DO CALL MPIGATS(S,NCOL*NROW,NTST,4+7*19) ENDIF IF(IAM/=0)THEN DEALLOCATE(S) RETURN ENDIF IF(DIR)THEN ! Write the free parameter indices: WRITE(8,103)(ICP(I),I=1,NFPR) ! Write the direction of the branch: WRITE(8,102)(RLDOT(I),I=1,NFPR) DO J=0,NTST*NCOL*NROW-1 WRITE(8,'(A)')TRIM(S(J)) ENDDO WRITE(8,102)UDOTPS(:,NTST*NCOL) ENDIF DEALLOCATE(S) ! Write the parameter values. WRITE(8,102)(PAR(I),I=1,NPAR) 101 FORMAT(6I6,I8,I6,I8,7I5) 102 FORMAT(4X,7ES19.10E3) 103 FORMAT(20I5) CALL AUTOFLUSH(8) END SUBROUTINE WRTBV8 ! ---------- ------ SUBROUTINE WRTBV9(AP,RLCUR,NDIM,UPS,TM,DTM,THU,NITPS,NA) USE IO USE MESH USE AUTOMPI ! Writes additional output on unit 9. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,NITPS,NA DOUBLE PRECISION, INTENT(IN) :: RLCUR(AP%NFPR),DTM(*),UPS(NDIM,0:*) DOUBLE PRECISION, INTENT(IN) :: TM(0:*),THU(*) INTEGER NTST,NCOL,IPLT,IID,NDM,IBR,NTOT,J,K,MTOT,NROW DOUBLE PRECISION T,AMP CHARACTER(1+7*14), ALLOCATABLE :: S(:) IID=AP%IID IF(IID<2)RETURN NTST=AP%NTST NCOL=AP%NCOL IPLT=AP%IPLT NDM=AP%NDM IBR=AP%IBR NTOT=AP%NTOT IF(IPLT>0.AND.IPLT<=NDIM)THEN AMP=RMXUPSP(NA,NCOL,NDIM,IPLT,UPS) ELSEIF(IPLT<0.AND.IPLT>=-NDIM)THEN AMP=RMNUPSP(NA,NCOL,NDIM,-IPLT,UPS) ELSE AMP=SQRT(RNRMSQP(NTST,NCOL,NDIM,NDM,UPS,DTM,THU,NA)) ENDIF IF(MPIIAM()==0)THEN IF(NITPS.EQ.0)CALL WRBAR("=",47) IF(NITPS.EQ.0 .OR. IID.GE.3)THEN WRITE(9,102) ENDIF MTOT=MOD(NTOT-1,9999)+1 WRITE(9,103)IBR,MTOT+1,NITPS,RLCUR(1),AMP 102 FORMAT(/,' BR PT IT PAR',11X,'L2-NORM') 103 FORMAT(I4,I6,I4,5X,6ES14.5) ENDIF IF(IID<5)RETURN ! each worker writes to a line string, the lines are then gathered NROW=NDIM/7+1 ALLOCATE(S(0:NTST*NCOL*NROW-1)) DO J=0,NA*NCOL-1 T=TM(J/NCOL)+MOD(J,NCOL)*DTM(J/NCOL+1)/NCOL WRITE(S(J*NROW),105)T,UPS(:MIN(NDIM,6),J) DO K=1,NROW-1 WRITE(S(J*NROW+K),105)UPS(K*7:MIN(NDIM,K*7+6),J) ENDDO ENDDO CALL MPIGATS(S,NCOL*NROW,NTST,1+7*14) IF(MPIIAM()==0)THEN WRITE(9,104) DO J=0,NTST*NCOL*NROW-1 WRITE(9,'(A)')TRIM(S(J)) ENDDO WRITE(9,105)1.0d0,UPS(:,NTST*NCOL) 104 FORMAT(' UPS :') 105 FORMAT(1X,7ES14.5) ENDIF DEALLOCATE(S) END SUBROUTINE WRTBV9 END MODULE BVP auto/07p/src/interfaces.h0000640000175000017500000000612113570013207013325 0ustar sksk! interfaces to use instead of EXTERNAL for type checking INTERFACE SUBROUTINE FUNI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) END SUBROUTINE FUNI SUBROUTINE FUNIX(AP,U,PAR,DFDU,DFDV) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(INOUT) :: U(AP%NDM*2+2),PAR(*) DOUBLE PRECISION, INTENT(IN) :: DFDU(AP%NDM,AP%NDM) DOUBLE PRECISION, INTENT(OUT) :: DFDV(AP%NDM,AP%NDM+1) END SUBROUTINE FUNIX SUBROUTINE BCNI(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) END SUBROUTINE BCNI SUBROUTINE ICNI(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJ,D) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJ DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM) DOUBLE PRECISION, INTENT(IN) :: UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: D(NINT,*) END SUBROUTINE ICNI SUBROUTINE STPNBVI(AP,PAR,ICP,NTSR,NCOLRS,RLD,UPS,UDOPS,TM,ND) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: ND DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLD(AP%NFPR) DOUBLE PRECISION, INTENT(OUT) :: UPS(AP%NDIM,0:*) DOUBLE PRECISION, INTENT(OUT) :: UDOPS(AP%NDIM,0:*),TM(0:*) END SUBROUTINE STPNBVI SUBROUTINE STPNAEI(AP,PAR,ICP,U,UDOT,NODIR) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) END SUBROUTINE STPNAEI DOUBLE PRECISION FUNCTION FNCI(AP,ICP,UPS,NDIM,PAR,ITEST,ATYPE) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE END FUNCTION FNCI END INTERFACE auto/07p/src/@b0000750000175000017500000000002613570013207011275 0ustar sksk cp *.f *.f90 ../SAV auto/07p/src/solvebv.f900000640000175000017500000015161613570013207013043 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Setting up of the Jacobian and right hand side !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE SOLVEBV USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC ::SOLVBV INTERFACE INTEGER FUNCTION IDAMAX(N,DX,INCX) INTEGER, INTENT(IN) :: N,INCX DOUBLE PRECISION, INTENT(IN) :: DX(*) END FUNCTION IDAMAX END INTERFACE CONTAINS ! ---------- ------ SUBROUTINE SOLVBV(IFST,AP,DET,PAR,ICP,FUNI,BCNI,ICNI,RDS, & NLLV,RLCUR,RLOLD,RLDOT,NDIM,UPS,UOLDPS,UDOTPS,UPOLDP,DTM, & DUPS,DRL,P0,P1,THL,THU) !$ USE OMP_LIB USE AUTOMPI USE SUPPORT, ONLY: AUTOSTOP ! Sets up and solves the linear equations for one Newton/Chord iteration include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER IFST,NLLV,ICP(*),NDIM DOUBLE PRECISION, INTENT(OUT) :: DET DOUBLE PRECISION PAR(*),RDS DOUBLE PRECISION RLOLD(AP%NFPR),RLCUR(AP%NFPR),RLDOT(AP%NFPR) DOUBLE PRECISION UPS(NDIM,0:*),UDOTPS(NDIM,0:*),UOLDPS(NDIM,0:*) DOUBLE PRECISION UPOLDP(NDIM,0:*),DUPS(NDIM,0:*),DTM(*) DOUBLE PRECISION DRL(AP%NFPR) DOUBLE PRECISION, INTENT(OUT) :: P0(*),P1(*) DOUBLE PRECISION THL(*),THU(*) ! Local DOUBLE PRECISION, ALLOCATABLE, SAVE :: & A(:,:,:),B(:,:,:),C(:,:,:),D(:,:),A1(:,:,:),A2(:,:,:), & S1(:,:,:),S2(:,:,:),BB(:,:,:),CC(:,:,:),C2(:,:,:), & CDBC(:,:),DD(:,:,:) INTEGER, ALLOCATABLE, SAVE :: & ICF(:,:),IRF(:,:),IPR(:,:),IPC(:,:) DOUBLE PRECISION, ALLOCATABLE :: & FCFC(:,:),FAA(:,:),SOL(:,:),FC(:) INTEGER, ALLOCATABLE :: NP(:) INTEGER IAM,KWT,NTST,NCOL,NBC,NINT,IID,NFPR,NPAR INTEGER NRC,NFC,NROW,NCLM INTEGER NA,IT,NT,MNT,I,NA2 INTEGER ISHAPE(8) ! Most of the required memory is allocated below ! This is an interesting section of code. The main point ! is that setubv and conpar only get called when ifst ! is 1. This is a optimization since you can solve ! the system using the previously factored jacobian. ! One thing to watch out for is that two seperate calls ! of solvbv_ talk to each other through these arrays, ! so it is only safe to get rid of them when ifst is ! 1 (since their entries will then be recreated in conpar ! and setubv). IAM=MPIIAM() KWT=MPIKWT() NDIM=AP%NDIM NTST=AP%NTST NCOL=AP%NCOL NBC=AP%NBC NINT=AP%NINT IID=AP%IID NFPR=AP%NFPR NPAR=AP%NPAR NRC=NINT+1 NFC=NRC+NBC NROW=NDIM*NCOL NCLM=NROW+NDIM ALLOCATE(NP(KWT)) IF(KWT.GT.NTST)THEN PRINT*,'NTST is less than the number of nodes' CALL AUTOSTOP() ELSE CALL PARTITION(NTST,KWT,NP) ENDIF ! NTST is the global one, NA is the local one. ! The value of NTST may be different in different nodes. NA=NP(IAM+1) IF(KWT>1)THEN ! used "ghost" entries past NA+1 are stored close, in order ! of the furthest distance, for example for node 0, ! NA+2 stores the entries at NTST+1 (from node KWT-1) ! NA+3 stores the entries at (NTST+1)/2+1 (from node (KWT+1)/2-1) ! and so on, following the left recursion level in BCKSUB NA2=NA+CEILING(LOG(DBLE(NTST+1))/LOG(2.d0)) ELSE NA2=NTST ENDIF ALLOCATE(FC(NFC)) MNT = 1 !$ MNT = OMP_GET_MAX_THREADS() IF(MNT.GT.NA)THEN MNT=NA !$ CALL OMP_SET_NUM_THREADS(NA) ENDIF IF(IFST.EQ.1)THEN IF(ALLOCATED(A))THEN ! !a sufficient check to see if array dimensions have changed: ISHAPE(1:3)=SHAPE(A) ISHAPE(4:6)=SHAPE(CC) ISHAPE(7:8)=SHAPE(CDBC) IF(ISHAPE(1)/=NCLM.OR.ISHAPE(2)/=NROW.OR.ISHAPE(3)/=NA & .OR.ISHAPE(4)/=NDIM.OR.ISHAPE(5)/=NRC.OR.ISHAPE(6)/=NA2 & .OR.ISHAPE(7)/=2*NDIM+NFPR.OR.ISHAPE(8)/=NBC)THEN ! Free floating point arrays DEALLOCATE(A,B,C,D,A1,A2,S1,S2,BB,CC,C2,CDBC,DD) ! Free integer arrays DEALLOCATE(ICF,IRF,IPR,IPC) ENDIF ENDIF IF(.NOT.ALLOCATED(A))THEN ALLOCATE(A(NCLM,NROW,NA),B(NFPR,NROW,NA)) ALLOCATE(C(NCLM,NRC,NA),D(NFPR,NRC)) ALLOCATE(A1(NDIM,NDIM,NA2),A2(NDIM,NDIM,NA2)) ALLOCATE(S1(NDIM,NDIM,NA2-1),S2(NDIM,NDIM,NA2-1)) ALLOCATE(BB(NFPR,NDIM,NA2),CC(NDIM,NRC,NA2)) ALLOCATE(C2(NDIM,NRC,NA2),CDBC(2*NDIM+NFPR,NBC)) ALLOCATE(DD(NFPR,NRC,NA2)) ALLOCATE(ICF(NCLM,NA),IRF(NROW,NA),IPR(NDIM,NA2-1)) ALLOCATE(IPC(NDIM,NA2-1)) ENDIF ENDIF DO I=1,NFPR PAR(ICP(I))=RLCUR(I) ENDDO IF(IAM.EQ.0)THEN CALL SUBVBC(NDIM,NTST*NCOL,NBC,NFPR,BCNI, & AP,PAR,NPAR,ICP,CDBC,FC,UPS,IFST) CALL SETFCDD(IFST,D,FC(NBC+1),NFPR,NINT) CALL SUBVPSA(NFPR,RDS,D(1,NRC),FC(NFC),RLCUR,RLOLD,RLDOT,THL,IFST) ENDIF ! The matrices D and FC are unused in all nodes except the first. ALLOCATE(FCFC(NRC,NA2),FAA(NDIM,NA2),SOL(NDIM,NA2+1)) !$OMP PARALLEL DEFAULT(SHARED) PRIVATE(I,IT,NT) IT = 0 !$ IT = OMP_GET_THREAD_NUM() NT = 1 !$ NT = OMP_GET_NUM_THREADS() IF(NLLV>=0.OR.IFST==1) & CALL SETUBV(NDIM,NA,NCOL,NINT,NFPR,NRC,NROW,NCLM, & FUNI,ICNI,AP,PAR,NPAR,ICP,A,B,C,DD,DUPS, & FCFC,UPS,UOLDPS,RLOLD,UDOTPS,UPOLDP,DTM,THU, & IFST,IAM,IT,NT,IRF,ICF,IID,NLLV) I = (IT*NA+NT-1)/NT+1 CALL BRBD(A(1,1,I),B(1,1,I),C(1,1,I),D,DD,DUPS(1,(I-1)*NCOL),FAA,FC,& FCFC,P0,P1,IFST,IID,NLLV,DET,NDIM,NTST,NA,NBC,NROW,NCLM, & NFPR,NFC,A1,A2,BB,CC,C2,CDBC, & SOL,S1,S2,IPR,IPC,IRF(1,I),ICF(1,I),IAM,KWT,IT,NT) !$OMP END PARALLEL DEALLOCATE(FCFC,FAA) DUPS(:,NA*NCOL)=SOL(:,NA+1) IF(IAM==0.AND.NTST>NA)THEN DUPS(:,NTST*NCOL)=FC(1:NDIM) ENDIF DRL(:)=FC(NDIM+1:) DEALLOCATE(NP,FC,SOL) END SUBROUTINE SOLVBV ! ---------- ------- SUBROUTINE SETFCDD(IFST,DD,FC,NCB,NRC) INTEGER, INTENT(IN) :: IFST,NCB,NRC DOUBLE PRECISION FC(*),DD(NCB,*) INTEGER I,J DO I=1,NRC IF(IFST.EQ.1)THEN DO J=1,NCB DD(J,I)=0.0D0 ENDDO ENDIF FC(I)=0.0D0 ENDDO END SUBROUTINE SETFCDD ! ---------- --------- SUBROUTINE SUBVBC(NDIM,NTNC,NBC,NCB,BCNI, & AP,PAR,NPAR,ICP,CDBC,FC,UPS,IFST) ! This subroutine handles a non-parallel part of SETUBV, that is, ! * the boundary conditions (not much to parallelize here and ! HomCont relies on non-parallel execution): the array CDBC ! and parts of FC. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER NDIM,NTNC,NBC,NCB,ICP(*),IFST,NPAR DOUBLE PRECISION CDBC(2*NDIM+NCB,NBC) DOUBLE PRECISION UPS(NDIM,0:NTNC),FC(*),PAR(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: UBC0(:),UBC1(:),FBC(:),DBC(:,:) INTEGER I,K ALLOCATE(UBC0(NDIM),UBC1(NDIM),FBC(NBC),DBC(NBC,2*NDIM+NPAR)) DBC(:,:)=0.d0 ! Boundary conditions : IF(NBC.GT.0)THEN DO I=1,NDIM UBC0(I)=UPS(I,0) UBC1(I)=UPS(I,NTNC) ENDDO CALL BCNI(AP,NDIM,PAR,ICP,NBC,UBC0,UBC1,FBC,IFST*2,DBC) DO I=1,NBC FC(I)=-FBC(I) IF(IFST.EQ.1)THEN DO K=1,NDIM CDBC(K,I)=DBC(I,K) CDBC(NDIM+K,I)=DBC(I,NDIM+K) ENDDO DO K=1,NCB CDBC(2*NDIM+K,I)=DBC(I,2*NDIM+ICP(K)) ENDDO ENDIF ENDDO ENDIF DEALLOCATE(UBC0,UBC1,FBC,DBC) END SUBROUTINE SUBVBC ! ---------- ------- SUBROUTINE SUBVPSA(NCB,RDS,DDPA,FCPA,RLCUR,RLOLD,RLDOT,THL,IFST) USE MESH ! This subroutine handles a non-parallel part of SETUBV, that is, ! * creating the parameter dependent pseudo-arclength parts of FC and D: ! (the bottom element FCPA and row DDPA) INTEGER, INTENT(IN) :: NCB,IFST DOUBLE PRECISION, INTENT(IN) :: RDS,THL(NCB) DOUBLE PRECISION, INTENT(IN) :: RLCUR(NCB),RLOLD(NCB),RLDOT(NCB) DOUBLE PRECISION, INTENT(OUT) :: DDPA(NCB),FCPA ! Local INTEGER I DOUBLE PRECISION RLSUM ! Pseudo-arclength equation : RLSUM=0.d0 DO I=1,NCB IF(IFST.EQ.1)THEN DDPA(I)=THL(I)*RLDOT(I) ENDIF RLSUM=RLSUM+THL(I)*(RLCUR(I)-RLOLD(I))*RLDOT(I) ENDDO FCPA=RDS-RLSUM END SUBROUTINE SUBVPSA ! ---------- ------ SUBROUTINE SETUBV(NDIM,NA,NCOL,NINT,NCB,NRC,NRA,NCA,FUNI, & ICNI,AP,PAR,NPAR,ICP,AA,BB,CC,DD,FA,FCFC, & UPS,UOLDPS,RLOLD,UDOTPS,UPOLDP,DTM,THU,IFST,IAM,IT,NT,IRF,ICF,IDB,NLLV) USE MESH INTEGER NDIM,NA,NCOL,NINT,NCB,NRC,NRA,NCA,IFST,IAM,IT,NT,NPAR TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER ICP(*),IRF(NRA,*),ICF(NCA,*),IDB,NLLV DOUBLE PRECISION AA(NCA,NRA,*),BB(NCB,NRA,*),CC(NCA,NRC,*) DOUBLE PRECISION DD(NCB,NRC,*),FA(NRA,*),FCFC(NRC,*) DOUBLE PRECISION UPS(NDIM,0:*),UOLDPS(NDIM,0:*),RLOLD(NCB),UDOTPS(NDIM,0:*) DOUBLE PRECISION UPOLDP(NDIM,0:*),DTM(*),PAR(*),THU(*) include 'interfaces.h' ! Local DOUBLE PRECISION WI(0:NCOL),WP(0:NCOL,NCOL),WT(0:NCOL,NCOL) INTEGER I,N,II CALL WINT(NCOL,WI) CALL GENWTS(NCOL,WT,WP) I = (IT*NA+NT-1)/NT+1 N = ((IT+1)*NA+NT-1)/NT+1-I II = (I-1)*NCOL CALL SUBVPA(NDIM,N,NCOL,NINT,NCB,NRC,NRA,NCA,FUNI,ICNI, & AP,PAR,NPAR,ICP,AA(1,1,I),BB(1,1,I),CC(1,1,I), & DD(1,1,I),FA(1,I),FCFC(1,I),UPS(1,II),UOLDPS(1,II), & RLOLD,UDOTPS(1,II),UPOLDP(1,II),DTM(I),THU,WI,WP,WT, & IRF(1,I),ICF(1,I),IFST,NLLV) CONTAINS ! ---------- --------- SUBROUTINE SUBVPA(NDIM,N,NCOL,NINT,NCB,NRC,NRA,NCA,FUNI, & ICNI,AP,PAR,NPAR,ICP,AA,BB,CC,DD,FA,FC, & UPS,UOLDPS,RLOLD,UDOTPS,UPOLDP,DTM,THU,WI,WP,WT,IRF,ICF,IFST,NLLV) ! This is the per-CPU parallelized part of SETUBV include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER NDIM,N,NCOL,NINT,NCB,NRC,NRA,NCA,ICP(*),NPAR DOUBLE PRECISION AA(NCA,NRA,*),BB(NCB,NRA,*),CC(NCA,NRC,*) DOUBLE PRECISION DD(NCB,NRC,*),UPS(NDIM,0:*),UOLDPS(NDIM,0:*),RLOLD(NCB) DOUBLE PRECISION UDOTPS(NDIM,0:*),UPOLDP(NDIM,0:*),FA(NRA,*),FC(NRC,*) DOUBLE PRECISION DTM(*),PAR(*),THU(*) DOUBLE PRECISION WI(0:*),WP(0:NCOL,*),WT(0:NCOL,*) INTEGER IRF(NRA,*),ICF(NCA,*),IFST,NLLV ! Local DOUBLE PRECISION, ALLOCATABLE, DIMENSION(:) :: DFDU,DFDP,U, & F,FICD,DICD,UID,UIP,PRM DOUBLE PRECISION WPLOC(0:NCOL) INTEGER I,J,JJ,K,IC,IC1,J1,K1,IB INTEGER, ALLOCATABLE :: IAMAX(:) ALLOCATE(DFDU(NDIM*NDIM),DFDP(NDIM*NPAR),U(3*NDIM+NCB)) ALLOCATE(F(NDIM),FICD(NINT)) ALLOCATE(DICD(NINT*(NDIM+NPAR))) ALLOCATE(UID(NDIM),UIP(NDIM),PRM(NPAR),IAMAX(NRA)) ! Initialize to zero. DFDU(:)=0.d0 DFDP(:)=0.d0 DICD(:)=0.d0 DO I=1,NPAR PRM(I)=PAR(I) ENDDO ! In U store: U, UOLD, RLOLD, UPOLDP U(:)=0.d0 U(2*NDIM+1:2*NDIM+NCB)=RLOLD(:) DO J=1,N ! Generate AA , BB and FA : DO IC=1,NCOL IC1=(IC-1)*NDIM+1 JJ=(J-1)*NCOL DO IB=0,NCOL WPLOC(IB)=WP(IB,IC)/DTM(J) ENDDO CALL SBVFUN(NDIM,NCOL,NCB,NCA,FUNI,AP,PRM,ICP, & AA(1,IC1,J),BB(1,IC1,J),FA(IC1,J),UPS(1,JJ), & UOLDPS(1,JJ),UPOLDP(1,JJ),WPLOC,WT(0,IC),DFDU,DFDP, & U,U(NDIM+1),F,IFST,NLLV) IF(IFST.EQ.1)THEN DO K=0,NDIM-1 IAMAX(IC1+K)=NDIM+IDAMAX(NRA-NDIM,AA(NDIM+1,IC1+K,J),1) ENDDO ENDIF ENDDO ! ! Generate CC, DD and FC : IF(IFST.EQ.1)DD(:,:,J)=0d0 IF(NLLV.EQ.0)FC(:,J)=0d0 DO K=0,NCOL J1=(J-1)*NCOL+K K1=K*NDIM+1 ! ! Integral constraints+pseudo-arclength equation : ! CALL SBVICN(NDIM,NINT,NCB,NCA,ICNI,AP,PRM,ICP, & CC(K1,1,J),DD(1,1,J),FC(1,J),UPS(1,J1),UOLDPS(1,J1), & UDOTPS(1,J1),UPOLDP(1,J1),DTM(J),THU,WI(K),FICD,DICD,& U,U(NDIM+1),UID,UIP,IFST,NLLV) ENDDO ! debug: do condensation of parameters later after printing IF(IDB>4.AND.IAM==0)CYCLE ! Condensation of parameters: IF(IFST.EQ.1)THEN CALL CONPAR(NDIM,NRA,NCA,AA(1,1,J),NCB,BB(1,1,J),NRC, & CC(1,1,J),DD(1,1,J),FA(1,J),FC(1,J),IRF(1,J),ICF(1,J),& IAMAX,NLLV) ELSEIF(NLLV==0)THEN CALL CONRHS(NDIM,NRA,NCA,AA(1,1,J),NRC, & CC(1,1,J),FA(1,J),FC(1,J),IRF(1,J)) ENDIF ENDDO ! DEALLOCATE(DFDU,DFDP,U,F,FICD,DICD) DEALLOCATE(UID,UIP,PRM,IAMAX) END SUBROUTINE SUBVPA ! ---------- --------- SUBROUTINE SBVFUN(NDIM,NCOL,NCB,NCA,FUNI,AP,PAR,ICP, & AA,BB,FA,UPS,UOLDPS,UPOLDP,WPLOC,WT,DFDU,DFDP,U,UOLD,F,IFST,NLLV) ! Does one call to FUNI and stores the result in AA, BB, and FA. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,NCOL,NCB,NCA,ICP(*) INTEGER, INTENT(IN) :: IFST,NLLV DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: WT(0:NCOL),WPLOC(0:NCOL) DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:NCOL) DOUBLE PRECISION, INTENT(IN) :: UOLDPS(NDIM,0:NCOL),UPOLDP(NDIM,0:NCOL) DOUBLE PRECISION, INTENT(OUT) :: AA(NCA,*),BB(NCB,*),FA(*),U(*) DOUBLE PRECISION, INTENT(INOUT) :: UOLD(*),DFDU(NDIM,*),DFDP(NDIM,*) DOUBLE PRECISION, INTENT(OUT) :: F(*) ! Local DOUBLE PRECISION WTTMP INTEGER I,IB,IB1,J,K DO K=1,NDIM U(K)=DOT_PRODUCT(WT(:),UPS(K,:)) UOLD(K)=DOT_PRODUCT(WT(:),UOLDPS(K,:)) UOLD(NDIM+NCB+K)=DOT_PRODUCT(WT(:),UPOLDP(K,:)) ENDDO CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,IFST*2,F,DFDU,DFDP) IF(IFST.EQ.1)THEN DO I=1,NDIM ! use U instead of DFDU in inner loop to better utilize the CPU cache DO J=1,NDIM U(J)=DFDU(I,J) ENDDO DO IB=0,NCOL WTTMP=-WT(IB) IB1=IB*NDIM DO K=1,NDIM AA(IB1+K,I)=WTTMP*U(K) ENDDO AA(IB1+I,I)=AA(IB1+I,I)+WPLOC(IB) ENDDO ENDDO DO I=1,NDIM DO K=1,NCB BB(K,I)=-DFDP(I,ICP(K)) ENDDO ENDDO ENDIF IF(NLLV.EQ.0)THEN DO I=1,NDIM FA(I)=F(I)-DOT_PRODUCT(WPLOC(:),UPS(I,:)) ENDDO ENDIF END SUBROUTINE SBVFUN ! ---------- ------ SUBROUTINE SBVICN(NDIM,NINT,NCB,NCA,ICNI,AP,PAR,ICP,CC,DD,FC, & UPS,UOLDPS,UDOTPS,UPOLDP,DTM,THU,WI,FICD,DICD,UIC,UIO,UID,UIP, & IFST,NLLV) ! Does one call to ICNI (integral constraints) and stores the ! result in CC, DD and FC; and stores the pseudo-arclength ! result too. include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,NINT,NCB,NCA,ICP(*),IFST,NLLV DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: UPS(*),UDOTPS(*) DOUBLE PRECISION, INTENT(IN) :: UOLDPS(*),UPOLDP(*),DTM,WI,THU(*) DOUBLE PRECISION, INTENT(OUT) :: CC(NCA,*),FICD(*),DICD(NINT,*) DOUBLE PRECISION, INTENT(OUT) :: UIC(*),UID(*),UIP(*) DOUBLE PRECISION, INTENT(INOUT) :: UIO(*),DD(NCB,*),FC(*) ! Local INTEGER I,M DOUBLE PRECISION DFCDU IF(NINT.GT.0)THEN DO I=1,NDIM UIC(I)=UPS(I) UIO(I)=UOLDPS(I) UID(I)=UDOTPS(I) UIP(I)=UPOLDP(I) ENDDO CALL ICNI(AP,NDIM,PAR,ICP,NINT,UIC,UIO,UID,UIP,FICD,IFST*2,DICD) DO M=1,NINT IF(IFST.EQ.1)THEN DO I=1,NDIM CC(I,M)=DTM*WI*DICD(M,I) ENDDO DO I=1,NCB DD(I,M)=DD(I,M)+DTM*WI*DICD(M,NDIM+ICP(I)) ENDDO ENDIF IF(NLLV.EQ.0)THEN FC(M)=FC(M)-DTM*WI*FICD(M) ENDIF ENDDO ENDIF ! ! Pseudo-arclength equation : ! DO I=1,NDIM DFCDU=DTM*THU(I)*WI*UDOTPS(I) IF(IFST.EQ.1)THEN CC(I,NINT+1)=DFCDU ENDIF IF(NLLV.EQ.0)THEN FC(NINT+1)=FC(NINT+1)-DFCDU*(UPS(I)-UOLDPS(I)) ENDIF ENDDO END SUBROUTINE SBVICN END SUBROUTINE SETUBV ! ---------- ---- SUBROUTINE BRBD(A,B,C,D,DD,FA,FAA,FC,FCFC,P0,P1,IFST, & IDB,NLLV,DET,NOV,NTST,NA,NBC,NRA,NCA, & NCB,NFC,A1,A2,BB,CC,C2,CDBC, & SOL,S1,S2,IPR,IPC,IRF,ICF,IAM,KWT,IT,NT) ! Solves linear systems with matrix profile: ! ----------------------------------------------- ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! !XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX !XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ! XXXXXXXXXX!XX! ! ----------------------------------------------- ! !XX XX!XX! ! !XX XX!XX! ! !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!XX! ! !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!XX! ! !XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX!XX! ! ----------------------------------------------- ! partioned as ! --------- ------ ------ ! ! ! ! ! ! ! ! ! ! A !B! ! XA ! ! FA ! ! ! ! ! . ! ! = ! ! . ! !-----!-! !----! !----! ! ! CDBC ! ! ! ! ! ! !-----!-! ! XC ! ! FC ! ! ! C !D! ! ! ! ! ! !-----!-! !----! !----! ! Input parameters : ! NA number of blocks in A, ! NRA number of rows in each block of A, ! NCA number of columns in each block of A, ! A the matrix in the schematic representation above, ! NCB number of columns in each block of B, ! (note that B is also three dimensional), ! B the matrix in the schema above, ! NRC the number of rows of the two dimensional matrix C, ! C the matrix C in the schema above, ! D the matrix D above, ! NFC the number of rows of the two dimensional matrices C+CDBC, XC and FC ! C the matrix C in the schema above, ! CDBC the matrix CDBC above, ! NBC the number of rows of the two dimensional matrix CDBC ! FA part of the right hand side vector, ! (note that FA is also two dimensional), ! FC part of the right hand side vector. ! IFST = 1 on first call, ! = 0 on subsequent calls with the same right hand side. ! IDB = 0..2 no debug output, ! = 3 output of the residuals of the reduced system on unit 9, ! = 4 output of the reduced Jacobian matrix and solution vector ! on unit 9, ! = 5 output of most matrices on unit 9 (see PRINT1), ! IPR, IPC, ICF: Integer arrays ! NLLV : If NLLV>0 then a null vector will be returned. ! If NLLV = -1 then the system will be solved with zero right ! hand side, except for the last equation, for which the right ! hand side entry will be set to 1 (i.e., the last entry of FC ! will be set to 1, otherwise FA and FC are zero). ! If the linear system is the same as in the preceding call ! then IFST=0 may be used even if NLLV is nonzero. ! Returned values : ! FA Part of solution vector corresponding to XA in the diagram. ! FC Part of solution vector corresponding to XC in the diagram. ! Notes: The number of columns of overlap for every two consecutive ! blocks should be equal to the number NOV (NDIM). ! Parts of the reduction are done in SUBVPA. ! Arguments INTEGER, INTENT(IN) :: IFST,IDB,NLLV,NOV,NTST,NA,NBC,NRA INTEGER, INTENT(IN) :: NCA,NCB,NFC,IAM,KWT,IT,NT DOUBLE PRECISION, INTENT(OUT) :: DET DOUBLE PRECISION A(NCA,NRA,*),B(NCB,NRA,*),C(NCA,NFC-NBC,*) DOUBLE PRECISION D(NCB,*),DD(NCB,NFC-NBC,*) DOUBLE PRECISION FA(NRA,*),FAA(NOV,*),FC(*),FCFC(NFC-NBC,*) DOUBLE PRECISION, INTENT(OUT) :: P0(*),P1(*) DOUBLE PRECISION A1(NOV,NOV,*),A2(NOV,NOV,*) DOUBLE PRECISION BB(NCB,NOV,*),CC(NOV,NFC-NBC,*),C2(NOV,NFC-NBC,*) DOUBLE PRECISION CDBC(*),SOL(NOV,*),S1(*),S2(*) INTEGER IPR(*),IPC(*),IRF(NRA,*),ICF(NCA,*) ! Local INTEGER I,J,K,II,N,NRC,NTSTNA INTEGER, ALLOCATABLE :: IAMAX(:) DOUBLE PRECISION, ALLOCATABLE :: FCC(:),E(:,:),X(:) NRC=NFC-NBC I = (IT*NA+NT-1)/NT+1 N = ((IT+1)*NA+NT-1)/NT+1-I IF(IDB.GT.4.and.IAM.EQ.0)THEN !$OMP BARRIER !$OMP MASTER CALL PRINT1(NA,NRA,NCA,NCB,NFC,NBC,A,B,C,CDBC,D,DD, & FA,FC,FCFC,IFST,NLLV) !$OMP END MASTER !$OMP BARRIER IF(IFST.EQ.1.OR.NLLV>=0)THEN ALLOCATE(IAMAX(NRA)) DO J=1,N IF(IFST.EQ.1)THEN DO K=1,NRA IAMAX(K)= NOV+IDAMAX(NRA-NOV,A(NOV+1,K,J),1) ENDDO CALL CONPAR(NOV,NRA,NCA,A(1,1,J),NCB,B(1,1,J),NRC, & C(1,1,J),DD(1,1,I+J-1),FA(1,J),FCFC(1,I+J-1), & IRF(1,J),ICF(1,J),IAMAX,NLLV) ELSEIF(NLLV==0)THEN CALL CONRHS(NOV,NRA,NCA,A(1,1,J),NRC, & C(1,1,J),FA(1,J),FCFC(1,I+J-1),IRF(1,J)) ENDIF ENDDO DEALLOCATE(IAMAX) ENDIF ENDIF IF(IFST.EQ.1)THEN CALL COPYCP(N,NOV,NRA,NCA,A,NCB,B,NRC,C,A1(1,1,I),A2(1,1,I), & BB(1,1,I),CC(1,1,I),C2(1,1,I)) ENDIF IF(NLLV.NE.0)THEN FA(:,:N)=0d0 IF(IT.EQ.0)THEN FC(:NFC)=0d0 ENDIF ENDIF CALL CPYRHS(N,NOV,NRA,FAA(1,I),FA) CALL REDUCE(A1,A2,BB,CC,C2,DD,FAA,FCFC, & NTST,NOV,NCB,NRC,S1,S2,IPC,IPR,IFST,NLLV,IT,NT,IAM,KWT) ! Solve the system generated by REDUCE ! by Gauss elimination with complete pivoting. ! REDUCE already has a barrier. !$OMP MASTER IF(IAM.EQ.0)THEN ! This is where we sum into the global copy of the d array IF(KWT>1)THEN NTSTNA=NA+1 ELSE NTSTNA=NTST ENDIF DO J=1,NRC IF(IFST.EQ.1)THEN DO K=1,NCB D(K,J)=D(K,J)+DD(K,J,NTSTNA) ENDDO ENDIF IF(NLLV.EQ.0)THEN FC(NBC+J)=FC(NBC+J)+FCFC(J,NTSTNA) ENDIF ENDDO ALLOCATE(FCC(NOV+NFC),E(NOV+NFC,NOV+NFC)) CALL DIMRGE(E,CC,C2,CDBC,D,FC, & NTSTNA,NFC,NBC,NOV,NCB,IDB,NLLV,FCC,P0,P1,DET,A1,A2,FAA,BB) DO II=1,NOV SOL(II,1)=FCC(II) ENDDO DEALLOCATE(FCC,E) ENDIF !$OMP END MASTER ! Backsubstitution in the reduction process. CALL BCKSUB(S1,A2,S2,BB,FAA,SOL,FC,NTST,NOV,NCB,IPC,IT,NT,IAM,KWT) ! Backsubstitution in the condensation of parameters process. ALLOCATE(X(NOV+1:NRA)) CALL INFPAR(A,B,FA,SOL(1,I),FC,N,NOV,NRA,NCA,NCB,ICF,X) DEALLOCATE(X) END SUBROUTINE BRBD ! ---------- ------ SUBROUTINE CONPAR(NOV,NRA,NCA,A,NCB,B,NRC,C,D,FA,FC,IRF,ICF,IAMAX,NLLV) ! Arguments INTEGER, INTENT(IN) :: NOV,NRA,NCA,NCB,NRC,NLLV INTEGER, INTENT(OUT) :: ICF(NCA),IRF(NRA) DOUBLE PRECISION, INTENT(INOUT) :: A(NCA,NRA),B(NCB,NRA) DOUBLE PRECISION, INTENT(INOUT) :: C(NCA,NRC),D(NCB,NRC) DOUBLE PRECISION, INTENT(INOUT) :: FA(NRA),FC(NRC) INTEGER, INTENT(INOUT) :: IAMAX(NRA) ! Local INTEGER IC,IRP,IR,IPIV,JPIV,L DOUBLE PRECISION PIV,TPIV,RM,TMP ! Note that the summation of the adjacent overlapped part of C ! is delayed until REDUCE, in order to merge it with other communications. ! This is a per-CPU, per-element process function for ! Condensation of parameters (Elimination of local variables). DO IC=NOV+1,NCA-NOV IRP=IC-NOV ! **Search for pivot (Complete pivoting) PIV = ABS(A(IAMAX(IRP),IRP)) IPIV = IRP DO IR=IRP+1,NRA TPIV = ABS(A(IAMAX(IR),IR)) IF(PIV.LT.TPIV)THEN PIV = TPIV IPIV = IR ENDIF ENDDO ! **Move indices IRF(IRP)=IPIV JPIV=IAMAX(IPIV) IF(IRP.NE.IPIV)THEN ! **Physically swap rows DO L=1,NCA TMP=A(L,IPIV) A(L,IPIV)=A(L,IRP) A(L,IRP)=TMP ENDDO DO L=1,NCB TMP=B(L,IPIV) B(L,IPIV)=B(L,IRP) B(L,IRP)=TMP ENDDO TMP=FA(IPIV) FA(IPIV)=FA(IRP) FA(IRP)=TMP IAMAX(IPIV)=IAMAX(IRP) ENDIF ICF(IC)=JPIV IF(IC.NE.JPIV)THEN ! **Physically swap columns DO IR=1,IRP-1 TMP=A(JPIV,IR) A(JPIV,IR)=A(IC,IR) A(IC,IR)=TMP ENDDO ENDIF ! **End of pivoting; elimination starts here PIV=A(JPIV,IRP) A(JPIV,IRP)=A(IC,IRP) A(IC,IRP)=PIV DO IR=IRP+1,NRA ! **Swap columns of A physically RM=A(JPIV,IR)/PIV A(JPIV,IR)=A(IC,IR) A(IC,IR)=RM IF(RM.NE.0.0)THEN CALL IMSBRA(NOV,NCA,NRA,A(1,IR),A(1,IRP),IC+1,IAMAX(IR),RM) DO L=1,NCB B(L,IR)=B(L,IR)-RM*B(L,IRP) ENDDO IF(NLLV.EQ.0)THEN FA(IR)=FA(IR)-RM*FA(IRP) ENDIF ELSEIF(IAMAX(IR).EQ.JPIV)THEN IAMAX(IR)=IC+IDAMAX(NRA-IC,A(IC+1,IR),1) ELSEIF(IAMAX(IR).EQ.IC)THEN IAMAX(IR)=JPIV ENDIF ENDDO DO IR=1,NRC ! **Swap columns of C physically RM=C(JPIV,IR)/PIV C(JPIV,IR)=C(IC,IR) C(IC,IR)=RM IF(RM.NE.0.0)THEN CALL SUBRAC(NOV,NCA,C(1,IR),A(1,IRP),IC+1,RM) DO L=1,NCB D(L,IR)=D(L,IR)-RM*B(L,IRP) ENDDO IF(NLLV.EQ.0)THEN FC(IR)=FC(IR)-RM*FA(IRP) ENDIF ENDIF ENDDO ENDDO CONTAINS ! ---------- ------ SUBROUTINE IMSBRA(NOV,NCA,NRA,A,AP,ICP1,IAMAX,RM) ! Arguments DOUBLE PRECISION, INTENT(IN) :: AP(*),RM DOUBLE PRECISION, INTENT(INOUT) :: A(*) INTEGER, INTENT(IN) :: NOV,NRA,NCA,ICP1 INTEGER, INTENT(OUT) :: IAMAX ! Local INTEGER L DOUBLE PRECISION PPIV,TPIV,V DO L=1,NOV A(L)=A(L)-RM*AP(L) ENDDO PPIV=0d0 IAMAX=ICP1 DO L=ICP1,NRA V=A(L)-RM*AP(L) ! Also recalculate absolute maximum for current row A(L)=V TPIV=DABS(V) IF(PPIV.LT.TPIV)THEN PPIV=TPIV IAMAX=L ENDIF ENDDO DO L=NCA-NOV+1,NCA A(L)=A(L)-RM*AP(L) ENDDO END SUBROUTINE IMSBRA ! ---------- ------ SUBROUTINE SUBRAC(NOV,NCA,C,AP,ICP1,RM) ! Arguments DOUBLE PRECISION, INTENT(IN) :: AP(*),RM DOUBLE PRECISION, INTENT(INOUT) :: C(*) INTEGER, INTENT(IN) :: NOV,NCA,ICP1 ! Local INTEGER L DO L=1,NOV C(L)=C(L)-RM*AP(L) ENDDO DO L=ICP1,NCA C(L)=C(L)-RM*AP(L) ENDDO END SUBROUTINE SUBRAC END SUBROUTINE CONPAR ! ---------- ------ SUBROUTINE CONRHS(NOV,NRA,NCA,A,NRC,C,FA,FC,IRF) ! Arguments INTEGER NOV,NRA,NCA INTEGER NRC,IRF(NRA) DOUBLE PRECISION A(NCA,NRA),C(NCA,NRC) DOUBLE PRECISION FA(NRA),FC(*) ! Local INTEGER IC,IR,IPIV,IRP DOUBLE PRECISION RM,TMP ! Condensation of right hand side (one element). DO IR=1,NRA-NOV IPIV=IRF(IR) IF(IR.NE.IPIV)THEN ! **Physically swap rows TMP=FA(IPIV) FA(IPIV)=FA(IR) FA(IR)=TMP ENDIF ENDDO DO IC=NOV+1,NCA-NOV IRP=IC-NOV RM=FA(IRP) IF(RM.NE.0.0)THEN DO IR=IRP+1,NRA FA(IR)=FA(IR)-RM*A(IC,IR) ENDDO DO IR=1,NRC FC(IR)=FC(IR)-RM*C(IC,IR) ENDDO ENDIF ENDDO END SUBROUTINE CONRHS ! ---------- ------ SUBROUTINE COPYCP(NA,NOV,NRA,NCA,A,NCB,B,NRC,C,A1,A2,BB,CC,C2) ! Arguments INTEGER, INTENT(IN) :: NA,NOV,NRA,NCA INTEGER, INTENT(IN) :: NCB,NRC DOUBLE PRECISION, INTENT(IN) :: A(NCA,NRA,*),B(NCB,NRA,*),C(NCA,NRC,*) DOUBLE PRECISION, INTENT(OUT) :: A1(NOV,NOV,*),A2(NOV,NOV,*) DOUBLE PRECISION, INTENT(OUT) :: BB(NCB,NOV,*),CC(NOV,NRC,*),C2(NOV,NRC,*) ! DOUBLE PRECISION FA(NRA,*),FAA(NOV,*) ! Local INTEGER I,IR,IR1,IC,IC1 ! Copies the condensed sytem generated by CONPAR into workspace. DO I=1,NA DO IR=1,NOV IR1=NRA-NOV+IR DO IC=1,NOV IC1=NCA-NOV+IC A1(IC,IR,I)=A(IC,IR1,I) A2(IC,IR,I)=A(IC1,IR1,I) ENDDO DO IC=1,NCB BB(IC,IR,I)=B(IC,IR1,I) ENDDO ENDDO DO IR=1,NRC DO IC=1,NOV CC(IC,IR,I)=C(IC,IR,I) C2(IC,IR,I)=C(NRA+IC,IR,I) ENDDO ENDDO ENDDO END SUBROUTINE COPYCP ! ---------- ------ SUBROUTINE CPYRHS(NA,NOV,NRA,FAA,FA) USE AUTOMPI ! Arguments INTEGER NA,NOV,NRA DOUBLE PRECISION FA(NRA,*),FAA(NOV,*) ! Local INTEGER I,IR ! **Copy the RHS DO I=1,NA DO IR=1,NOV FAA(IR,I)=FA(NRA-NOV+IR,I) ENDDO ENDDO END SUBROUTINE CPYRHS ! ---------- ------ SUBROUTINE REDUCE(A1,A2,BB,CC,C2,DD,FAA,FCFC, & NTST,NOV,NCB,NRC,S1,S2,IPC,IPR,IFST,NLLV,IT,NT,IAM,KWT) USE AUTOMPI ! Arguments INTEGER, INTENT(IN) :: NTST,NOV,NCB,NRC,IFST,NLLV,IT,NT,IAM,KWT INTEGER, INTENT(INOUT) :: IPC(NOV,*),IPR(NOV,*) DOUBLE PRECISION, INTENT(INOUT) :: A1(NOV,NOV,*),A2(NOV,NOV,*) DOUBLE PRECISION, INTENT(INOUT) :: BB(NCB,NOV,*) DOUBLE PRECISION, INTENT(OUT) :: S1(NOV,NOV,*),S2(NOV,NOV,*) DOUBLE PRECISION, INTENT(INOUT) :: CC(NOV,NRC,*),C2(NOV,NRC,*) DOUBLE PRECISION, INTENT(INOUT) :: DD(NCB,NRC,*),FAA(NOV,*),FCFC(NRC,*) ! Local INTEGER IAMAX,PLO,PHI,NA,MPLO,MPHI LOGICAL DOMPI ALLOCATABLE IAMAX(:) ALLOCATE(IAMAX(2*NOV)) MPLO = (IAM*NTST+KWT-1)/KWT+1 MPHI = ((IAM+1)*NTST+KWT-1)/KWT NA = MPHI-MPLO+1 PLO = MPLO+(IT*NA+NT-1)/NT PHI = MPLO+((IT+1)*NA+NT-1)/NT-1 DOMPI = KWT>1.AND.NT==1 ! Reduce non-overlapping pieces CALL REDUCER(1,NTST,1) !$OMP BARRIER !$OMP MASTER ! Reduce overlapping pieces IF(NT>1)THEN DOMPI = KWT>1 PLO = MPLO PHI = MPHI CALL REDUCER(1,NTST,1) ENDIF !$OMP END MASTER DEALLOCATE(IAMAX) CONTAINS ! --------- ---------- ------- RECURSIVE SUBROUTINE REDUCER(LO,HI,LEVEL) ! Arguments INTEGER, INTENT(IN) :: LO,HI,LEVEL ! Local INTEGER IR,IC,I0,I1,I2,MID IF(HIPHI)RETURN ! This is a check for the master reduction so it will stop as soon ! as there is no more overlap (already handled by nodes). IF(NT>1.AND.PHI-PLO==NA-1.AND.LO>=PLO)THEN IF((LO-PLO)*NT/NA==(HI-PLO)*NT/NA)RETURN ENDIF ! Use nested dissection for reduction; this is naturally a recursive ! procedure. MID=(LO+HI)/2 IF(LO1.AND.PHI-PLOPHI)RETURN ENDIF IF(LONA)THEN I2=NA+LEVEL IF(I1>NA)THEN I1=NA+LEVEL+1 ENDIF ENDIF IF(NLLV==0)THEN DO IR=1,NRC FCFC(IR,I2)=FCFC(IR,I2)+FCFC(IR,I1) ENDDO ENDIF IF(IFST.EQ.1)THEN DO IR=1,NOV DO IC=1,NOV S1(IC,IR,I1)=A1(IC,IR,I0) ENDDO ENDDO DO IR=1,NRC DO IC=1,NOV CC(IC,IR,I1+1)=CC(IC,IR,I1+1)+C2(IC,IR,I1) ENDDO DO IC=1,NCB DD(IC,IR,I2)=DD(IC,IR,I2)+DD(IC,IR,I1) ENDDO ENDDO CALL REDBLK(S1(1,1,I1),A2(1,1,I1), S2(1,1,I1),BB(1,1,I1),FAA(1,I1), & A1(1,1,I0),A1(1,1,I1+1),A2(1,1,I2),BB(1,1,I2),FAA(1,I2), & CC(1,1,I0),CC(1,1,I1+1),C2(1,1,I2),DD(1,1,I2),FCFC(1,I2),& IPC(1,I1),IPR(1,I1),IAMAX,NOV,NCB,NRC) ELSEIF(NLLV==0)THEN CALL REDRHSBLK(A2(1,1,I1),FAA(1,I1), & A1(1,1,I1+1),FAA(1,I2), & CC(1,1,I1+1),FCFC(1,I2),NOV,NRC,IPR(1,I1)) ENDIF END SUBROUTINE REDUCER ! ---------- ------ SUBROUTINE REDBLK(S11,A21,S21,BB1,FAA1, & A11,A12,A22,BB2,FAA2, & CC1,CC2,CC3,DD,FC, & IPC,IPR,IAMAX,NOV,NCB,NRC) ! Arguments INTEGER, INTENT(IN) :: NOV,NCB,NRC INTEGER, INTENT(OUT) :: IPC(NOV),IPR(NOV),IAMAX(NOV*2) DOUBLE PRECISION, INTENT(INOUT) :: S11(NOV,NOV),A21(NOV,NOV) DOUBLE PRECISION, INTENT(OUT) :: S21(NOV,NOV),A11(NOV,NOV) DOUBLE PRECISION, INTENT(INOUT) :: A12(NOV,NOV),A22(NOV,NOV) DOUBLE PRECISION, INTENT(INOUT) :: CC1(NOV,NRC),CC2(NOV,NRC),CC3(NOV,NRC) DOUBLE PRECISION, INTENT(INOUT) :: BB1(NCB,NOV),BB2(NCB,NOV),DD(NCB,NRC) DOUBLE PRECISION, INTENT(INOUT) :: FAA1(NOV),FAA2(NOV),FC(*) ! Local INTEGER K1,K2,IR,IC,IPIV1,IPIV2,JPIV,JPIV1,JPIV2,ITMP DOUBLE PRECISION PIV1,PIV2,TPIV,TMP DO K1=1,NOV DO K2=1,NOV S21(K2,K1) = 0.0D0 A11(K2,K1) = 0.0D0 ENDDO ENDDO DO K1=1,NOV IAMAX(K1)=IDAMAX(NOV,A21(1,K1),1) ENDDO DO K1=1,NOV IAMAX(NOV+K1)=IDAMAX(NOV,A12(1,K1),1) ENDDO DO IC=1,NOV ! Complete pivoting; rows are swapped physically, columns also PIV1 = 0.d0 IPIV1 = IC DO K1=IC,NOV TPIV=DABS(A21(IAMAX(K1),K1)) IF(PIV1.LT.TPIV)THEN PIV1 = TPIV IPIV1 = K1 ENDIF ENDDO JPIV1=IAMAX(IPIV1) PIV2 = 0.d0 IPIV2 = 1 DO K1=1,NOV TPIV=DABS(A12(IAMAX(NOV+K1),K1)) IF(PIV2.LT.TPIV)THEN PIV2 = TPIV IPIV2 = K1 ENDIF ENDDO JPIV2=IAMAX(NOV+IPIV2) ! rows and columns are swapped physically IF(PIV1.GE.PIV2)THEN JPIV = JPIV1 IPR(IC) = IPIV1 IF(IC.NE.IPIV1) & CALL REDSWP(IC,NOV,NCB, & S11(1,IC),S11(1,IPIV1),A21(1,IC),A21(1,IPIV1), & S21(1,IC),S21(1,IPIV1),BB1(1,IC),BB1(1,IPIV1), & FAA1(IC),FAA1(IPIV1)) ELSE JPIV = JPIV2 IPR(IC) = NOV+IPIV2 CALL REDSWP(IC,NOV,NCB, & S11(1,IC),A11(1,IPIV2),A21(1,IC),A12(1,IPIV2), & S21(1,IC),A22(1,IPIV2),BB1(1,IC),BB2(1,IPIV2), & FAA1(IC),FAA2(IPIV2)) ENDIF IAMAX(IPR(IC)) = IAMAX(IC) IPC(IC) = JPIV IF(JPIV.NE.IC)THEN DO IR=1,NOV TMP = A12(IC,IR) A12(IC,IR) = A12(JPIV,IR) A12(JPIV,IR) = TMP TMP = A21(IC,IR) A21(IC,IR) = A21(JPIV,IR) A21(JPIV,IR) = TMP ENDDO ENDIF ! End of pivoting; Elimination starts here DO IR=IC+1,NOV CALL REDELIM(IC,NOV,NCB,IAMAX(IR),JPIV, & A21(1,IR),A21(1,IC),S11(1,IR),S11(1,IC), & S21(1,IR),S21(1,IC),BB1(1,IR),BB1(1,IC), & FAA1(IR),FAA1(IC)) ENDDO DO IR=1,NOV CALL REDELIM(IC,NOV,NCB,IAMAX(NOV+IR),JPIV, & A12(1,IR),A21(1,IC),A11(1,IR),S11(1,IC), & A22(1,IR),S21(1,IC),BB2(1,IR),BB1(1,IC), & FAA2(IR),FAA1(IC)) ENDDO DO IR=1,NRC TMP = CC2(IC,IR) CC2(IC,IR) = CC2(JPIV,IR) CC2(JPIV,IR) = TMP ITMP=0 CALL REDELIM(IC,NOV,NCB,ITMP,JPIV, & CC2(1,IR),A21(1,IC),CC1(1,IR),S11(1,IC), & CC3(1,IR),S21(1,IC),DD(1,IR),BB1(1,IC), & FC(IR),FAA1(IC)) ENDDO ENDDO END SUBROUTINE REDBLK ! ---------- ------ SUBROUTINE REDSWP(IC,NOV,NCB,S11,A11,A12,A21,S21,A22,BB1,BB2,F1,F2) INTEGER, INTENT(IN) :: IC,NOV,NCB DOUBLE PRECISION, INTENT(INOUT) :: S11(NOV),A11(NOV),A12(NOV),A21(NOV) DOUBLE PRECISION, INTENT(INOUT) :: S21(NOV),A22(NOV),BB1(NCB),BB2(NCB) DOUBLE PRECISION, INTENT(INOUT) :: F1,F2 INTEGER L DOUBLE PRECISION TMP ! Swapping DO L=1,NOV TMP = S11(L) S11(L) = A11(L) A11(L) = TMP IF(L.GE.IC)THEN TMP = A21(L) A21(L) = A12(L) A12(L) = TMP ENDIF TMP = S21(L) S21(L) = A22(L) A22(L) = TMP ENDDO DO L=1,NCB TMP = BB1(L) BB1(L) = BB2(L) BB2(L) = TMP ENDDO IF(NLLV==0)THEN TMP = F1 F1 = F2 F2 = TMP ENDIF END SUBROUTINE REDSWP ! ---------- ------- SUBROUTINE REDELIM(IC,NOV,NCB,IAMAX,JPIV,A12,A21,A11,S11,A22,S21,& BB2,BB1,F2,F1) INTEGER, INTENT(IN) :: IC,NOV,NCB,JPIV INTEGER, INTENT(INOUT) :: IAMAX DOUBLE PRECISION, INTENT(INOUT) :: A12(NOV),A11(NOV),A22(NOV),BB2(NCB),F2 DOUBLE PRECISION, INTENT(IN) :: A21(NOV),S11(NOV),S21(NOV),BB1(NCB),F1 INTEGER L DOUBLE PRECISION RM,V,PPIV,TPIV RM = A12(IC)/A21(IC) A12(IC) = RM IF(RM.NE.0.0)THEN IF(IAMAX.EQ.0)THEN DO L=IC+1,NOV A12(L)=A12(L)-RM*A21(L) ENDDO ELSE PPIV=0d0 IAMAX=IC+1 DO L=IC+1,NOV V=A12(L)-RM*A21(L) ! Also recalculate absolute maximum for current row A12(L)=V TPIV=DABS(V) IF(PPIV.LT.TPIV)THEN PPIV=TPIV IAMAX=L ENDIF ENDDO ENDIF DO L=1,NOV A11(L) = A11(L)-RM*S11(L) A22(L) = A22(L)-RM*S21(L) ENDDO DO L=1,NCB BB2(L) = BB2(L)-RM*BB1(L) ENDDO IF(NLLV==0)THEN F2 = F2-RM*F1 ENDIF ELSEIF(IAMAX.EQ.JPIV)THEN ! recalculate absolute maximum for current row IF(IC0)THEN CALL NLVC(NCR,NCR,NLLV,E,FCC) DET=0.d0 ELSE IF(NLLV<0)THEN DO I=1,NCR-1 XE(I)=0.D0 ENDDO XE(NCR)=1.D0 ENDIF CALL GEL(NCR,E,1,FCC,XE,DET) ENDIF IF(IDB.GE.4)THEN WRITE(9,103) WRITE(9,100)(FCC(I),I=1,NCR) ENDIF 100 FORMAT(1X,10E11.3) 101 FORMAT(/,1X,'Residuals of reduced system:') 102 FORMAT(/,1X,'Reduced Jacobian matrix:') 103 FORMAT(/,1X,'Solution vector:') DO I=1,NFC FC(I)=FCC(NOV+I) ENDDO DEALLOCATE(XE) END SUBROUTINE DIMRGE ! ---------- ------ SUBROUTINE BCKSUB(S1,A2,S2,BB,FAA,SOL,FC,NTST,NOV,NCB,IPC,IT,NT,IAM,KWT) USE AUTOMPI ! Arguments INTEGER, INTENT(IN) :: NTST,NOV,NCB,IPC(NOV,*),IT,NT,IAM,KWT DOUBLE PRECISION, INTENT(IN) :: S1(NOV,NOV,*),S2(NOV,NOV,*) DOUBLE PRECISION, INTENT(IN) :: A2(NOV,NOV,*),BB(NCB,NOV,*) DOUBLE PRECISION, INTENT(IN) :: FAA(NOV,*) DOUBLE PRECISION, INTENT(INOUT) :: FC(*) DOUBLE PRECISION, INTENT(OUT) :: SOL(NOV,*) ! Local INTEGER I,PLO,PHI,NA,MPLO,MPHI,NTSTNA LOGICAL DOMPI MPLO = (IAM*NTST+KWT-1)/KWT+1 MPHI = ((IAM+1)*NTST+KWT-1)/KWT NA = MPHI-MPLO+1 !$OMP MASTER ! do global backsubsitution until there is no overlap left IF(IAM==0)THEN IF(NTST==NA)THEN NTSTNA=NTST ELSE NTSTNA=NA+1 ENDIF DO I=1,NOV SOL(I,NTSTNA+1) = FC(I) ENDDO ENDIF IF(NT>1)THEN PLO = MPLO PHI = MPHI DOMPI = KWT>1 CALL BCKSUBR(1,NTST,1) ENDIF !$OMP END MASTER !$OMP BARRIER PLO = MPLO+(IT*NA+NT-1)/NT PHI = MPLO+((IT+1)*NA+NT-1)/NT-1 DOMPI = KWT>1.AND.NT==1 CALL BCKSUBR(1,NTST,1) CONTAINS ! Back substitution within the interval [MPLO,MPHI]; LO is in [PLO,PHI] ! --------- ---------- ------- RECURSIVE SUBROUTINE BCKSUBR(LO,HI,LEVEL) ! Arguments INTEGER, INTENT(IN) :: LO,HI,LEVEL ! Local INTEGER MID,I,I0,I1 IF(LO>=HI.OR.HIPHI)RETURN ! This is a check for the master reduction so it will stop as soon ! as there is no more overlap (already handled by nodes). IF(NT>1.AND.PHI-PLO==NA-1.AND.LO>=PLO)THEN IF((LO-PLO)*NT/NA==(HI-PLO)*NT/NA)RETURN ENDIF MID=(LO+HI)/2 I=MID-MPLO+1 I0=LO-MPLO+1 I1=HI-MPLO+1 IF((PHI-PLO==NA-1.OR.HI<=PHI).AND.LO>=PLO)THEN IF(DOMPI.AND.I1>NA)THEN I1=NA+LEVEL IF(I>NA)THEN I=NA+LEVEL+1 ENDIF ENDIF CALL BCKSUB1(S1(1,1,I),A2(1,1,I),S2(1,1,I),BB(1,1,I), & FAA(1,I),SOL(1,I0),SOL(1,I+1),SOL(1,I1+1),FC(NOV+1), & NOV,NCB,IPC(1,I)) ENDIF IF(DOMPI)THEN CALL MPIBCKSUB(SOL,FC,NTST,NOV,NCB,LO,HI,LEVEL) ENDIF ! For MPI and ghost elements there are two possibilities: ! 1. HI and MID are both beyond the end. In that case the ! (MID+1,HI) recursion applies to a different process, ! so the level can be the same. ! The (LO,MID) recursion increases the level so the new ! HI ghost refers to the old MID ghost. ! 2. Only HI is beyond the end. In that case the ! (MID+1,HI) recursion is in the same process and should ! not increase the level, because the new HI ghost is the ! same as the old HI ghost, and the old MID ghost does not ! exist. ! The (LO,MID) recursion is local so does not need ghost ! elements. CALL BCKSUBR(MID+1,HI,LEVEL) CALL BCKSUBR(LO,MID,LEVEL+1) END SUBROUTINE BCKSUBR ! ---------- ------- SUBROUTINE BCKSUB1(S1,A2,S2,BB,FAA,FCC,SOL1,SOL2,FC,NOV,NCB,IPC) ! Arguments INTEGER, INTENT(IN) :: NOV,NCB,IPC(NOV) DOUBLE PRECISION, INTENT(IN) :: S1(NOV,NOV),S2(NOV,NOV) DOUBLE PRECISION, INTENT(IN) :: A2(NOV,NOV),BB(NCB,NOV) DOUBLE PRECISION, INTENT(IN) :: SOL2(NOV),FAA(NOV),FC(*),FCC(*) DOUBLE PRECISION, INTENT(OUT) :: SOL1(NOV) ! Local INTEGER K,L DOUBLE PRECISION SM,TMP ! Backsubstitution process for 1 block row DO K=NOV,1,-1 SM=FAA(K) DO L=1,NOV SM=SM-FCC(L)*S1(L,K) SM=SM-SOL2(L)*S2(L,K) ENDDO DO L=1,NCB SM=SM-FC(L)*BB(L,K) ENDDO DO L=K+1,NOV SM=SM-SOL1(L)*A2(L,K) ENDDO SOL1(K)=SM/A2(K,K) ENDDO ! Revert column pivoting on SOL1 DO K=NOV,1,-1 TMP=SOL1(K) SOL1(K)=SOL1(IPC(K)) SOL1(IPC(K))=TMP ENDDO END SUBROUTINE BCKSUB1 END SUBROUTINE BCKSUB ! ---------- ------ SUBROUTINE INFPAR(A,B,FA,SOL,FC,NA,NOV,NRA,NCA,NCB,ICF,X) ! Arguments INTEGER, INTENT(IN) :: NA,NOV,NRA,NCA,NCB,ICF(NCA,*) DOUBLE PRECISION, INTENT(IN) :: A(NCA,NRA,*),B(NCB,NRA,*),FC(*) DOUBLE PRECISION, INTENT(IN) :: SOL(NOV,*) DOUBLE PRECISION, INTENT(OUT) :: X(NOV+1:NRA),FA(NRA,*) ! Local INTEGER I,J,IR DOUBLE PRECISION SM,TMP ! Determine the local varables by backsubstitition. ! Backsubstitution in the condensation of parameters; no communication. DO I=1,NA DO IR=NRA-NOV,1,-1 SM=FA(IR,I) DO J=1,NOV SM=SM-A(J,IR,I)*SOL(J,I) SM=SM-A(NRA+J,IR,I)*SOL(J,I+1) ENDDO DO J=1,NCB SM=SM-B(J,IR,I)*FC(NOV+J) ENDDO DO J=IR+1,NRA-NOV SM=SM-A(J+NOV,IR,I)*X(J+NOV) ENDDO X(NOV+IR)=SM/A(NOV+IR,IR,I) ENDDO ! **Copy SOL into FA DO J=1,NOV FA(J,I)=SOL(J,I) ENDDO ! **Undo pivots and copy X into FA DO J=NRA,NOV+1,-1 TMP=X(ICF(J,I)) X(ICF(J,I))=X(J) X(J)=TMP ENDDO DO J=NOV+1,NRA FA(J,I)=X(J) ENDDO ENDDO END SUBROUTINE INFPAR ! ---------- ------ SUBROUTINE PRINT1(NA,NRA,NCA,NCB,NFC,NBC,A,B,C,CDBC,D,DD,FA, & FC,FCFC,IFST,NLLV) INTEGER, INTENT(IN) :: NA,NRA,NCA,NCB,NFC,NBC,IFST,NLLV DOUBLE PRECISION A(NCA,NRA,*),B(NCB,NRA,*),C(NCA,NFC-NBC,*) DOUBLE PRECISION CDBC(2*(NCA-NRA)+NCB,NBC),D(NCB,*),DD(NCB,NFC-NBC,*) DOUBLE PRECISION FA(NRA,*),FC(*),FCFC(NFC-NBC,*) INTEGER I,IR,IC DOUBLE PRECISION, ALLOCATABLE :: D1(:) DOUBLE PRECISION FC1 WRITE(9,101) DO I=1,NA WRITE(9,102)I DO IR=1,NRA IF(NLLV==0)THEN WRITE(9,103)(A(IC,IR,I),IC=1,NCA),(B(IC,IR,I),IC=1,NCB),FA(IR,I) ELSE WRITE(9,103)(A(IC,IR,I),IC=1,NCA),(B(IC,IR,I),IC=1,NCB),0d0 ENDIF ENDDO ENDDO WRITE(9,104) DO I=1,NA WRITE(9,102)I DO IR=1,NFC IF(IR.GT.NBC)THEN WRITE(9,103)(C(IC,IR-NBC,I),IC=1,NCA) ELSEIF(I.EQ.1)THEN WRITE(9,103)(CDBC(IC,IR),IC=1,NCA-NRA) ELSEIF(I.EQ.NA)THEN WRITE(9,103)(CDBC(NCA-NRA+IC,IR),IC=1,NCA-NRA) ENDIF ENDDO ENDDO WRITE(9,105) DO IR=1,NBC WRITE(9,103)(CDBC(2*(NCA-NRA)+IC,IR),IC=1,NCB),FC(IR) ENDDO ALLOCATE(D1(NCB)) DO IR=1,NFC-NBC DO IC=1,NCB D1(IC)=D(IC,IR) IF(IFST==1)THEN DO I=1,NA D1(IC)=D1(IC)+DD(IC,IR,I) ENDDO ENDIF ENDDO IF(NLLV==0)THEN FC1=FC(NBC+IR) DO I=1,NA FC1=FC1+FCFC(IR,I) ENDDO ELSE FC1=0 ENDIF WRITE(9,103)(D1(IC),IC=1,NCB),FC1 ENDDO DEALLOCATE(D1) 101 FORMAT(' AA , BB , FA (Full dimension) :') 102 FORMAT(' I=',I3) 103 FORMAT(1X,12E10.3) 104 FORMAT(' CC (Full dimension) :') 105 FORMAT(' DD , FC') END SUBROUTINE PRINT1 END MODULE SOLVEBV auto/07p/src/timeint.f900000640000175000017500000000324413570013207013025 0ustar sksk! !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for Time Integration of ODEs !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE TIMEINT USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE AE USE TOOLBOXAE USE INTERFACES IMPLICIT NONE PRIVATE PUBLIC :: AUTOTI CONTAINS ! ---------- ------ SUBROUTINE AUTOTI(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) ! ** Time integration (IPS==-2) AP%NFPR=1 AP%ISP=0 AP%ILP=0 ICP(1)=14 CALL AUTOAE(AP,ICP,ICU,FNTI,STPNAE,FNCSAE) END SUBROUTINE AUTOTI ! ---------- ---- SUBROUTINE FNTI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generate the equations for time integration. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) INTEGER I,J DOUBLE PRECISION TOLD,DT CALL FUNI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) TOLD=UOLD(NDIM+1) DT=PAR(ICP(1))-TOLD DO I=1,NDIM DFDP(I,ICP(1))=F(I) F(I)= DT*F(I) - U(I) + UOLD(I) ENDDO IF(IJAC.EQ.0)RETURN DO I=1,NDIM DO J=1,NDIM DFDU(I,J)= DT*DFDU(I,J) ENDDO DFDU(I,I)= DFDU(I,I) - 1.d0 ENDDO END SUBROUTINE FNTI END MODULE TIMEINT auto/07p/src/toolboxae.f900000640000175000017500000005173113570013207013354 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of general algebraic equations ! (incl. BPs and Folds) !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE TOOLBOXAE USE AUTO_CONSTANTS, ONLY : AUTOPARAMETERS USE AE USE INTERFACES USE SUPPORT IMPLICIT NONE PRIVATE PUBLIC :: AUTOAEP,INITAE,STPNAE,FNCSAE,FNCSAEF,FNBTAE PUBLIC :: FNLP,FNLPF,STPNLP,STPNLPF ! Folds (Algebraic Problems) PUBLIC :: FNBP,FNBPF,STPNBP,STPNBPF ! Branch points DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ------ SUBROUTINE INITAE(AP) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER NDIM, NFPR NDIM = AP%NDIM NFPR = 1 SELECT CASE(AP%ITPST) CASE(1) ! ** BP cont (Algebraic Problems) (by F. Dercole) NDIM=2*NDIM+2 NFPR=ABS(AP%ISW) CASE(2) ! ** Fold NDIM=2*NDIM+1 NFPR=2 END SELECT AP%NDIM = NDIM AP%NFPR = NFPR END SUBROUTINE INITAE ! ---------- ------- SUBROUTINE AUTOAEP(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) CALL INITAE(AP) SELECT CASE(AP%ITPST) CASE(0) ! Algebraic systems. CALL AUTOAE(AP,ICP,ICU,FUNI,STPNAE,FNCSAE) CASE(1) ! ** BP cont (algebraic problems) (by F. Dercole). CALL AUTOAE(AP,ICP,ICU,FNBP,STPNBP,FNCSAE) CASE(2) ! ** Fold continuation (algebraic problems). CALL AUTOAE(AP,ICP,ICU,FNLP,STPNLP,FNCSAE) END SELECT END SUBROUTINE AUTOAEP ! ---------- ------ SUBROUTINE STPNUS(AP,PAR,U,UDOT,NODIR) ! Gets the starting data from user supplied STPNT USE AUTO_CONSTANTS, ONLY : UVALS, PARVALS, unames, parnames USE SUPPORT, ONLY: NAMEIDX TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: U(*),UDOT(*),PAR(*) INTEGER NDIM,I DOUBLE PRECISION T NDIM=AP%NDIM T=0.d0 U(:NDIM)=0.d0 CALL STPNT(NDIM,U,PAR,T) ! override parameter/point values with values from constants file DO I=1,SIZE(UVALS) U(NAMEIDX(UVALS(I)%INDEX,unames))=UVALS(I)%VAR ENDDO DO I=1,SIZE(PARVALS) PAR(NAMEIDX(PARVALS(I)%INDEX,parnames))=PARVALS(I)%VAR ENDDO UDOT(1)=0 NODIR=1 END SUBROUTINE STPNUS ! ---------- ------ SUBROUTINE STPNAE(AP,PAR,ICP,U,UDOT,NODIR) USE IO ! Gets the starting data from unit 3 TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: U(*),UDOT(*),PAR(*) INTEGER NFPR,NFPRS,I INTEGER,ALLOCATABLE :: ICPRS(:) IF(AP%IRS==0)THEN CALL STPNUS(AP,PAR,U,UDOT,NODIR) RETURN ENDIF NFPRS=GETNFPR3() ALLOCATE(ICPRS(NFPRS)) ICPRS(:)=0 CALL READLB(AP,ICPRS,U,UDOT,PAR) ! Take care of the case where the free parameters have been changed at ! the restart point. NODIR=0 NFPR=AP%NFPR IF(NFPRS/=NFPR)THEN NODIR=1 ELSE DO I=1,NFPR IF(ICPRS(I)/=ICP(I)) THEN NODIR=1 EXIT ENDIF ENDDO ENDIF DEALLOCATE(ICPRS) END SUBROUTINE STPNAE !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Continuation of Folds (Algebraic Problems) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNLP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-par continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNLPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) END SUBROUTINE FNLP ! ---------- ----- SUBROUTINE FNLPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) ! Generates the equations for the 2-par continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),FF1(:),FF2(:) INTEGER NDM,NPAR,I,II,J,IJC DOUBLE PRECISION UMX,EP,P,UU,DUMDP(1) NDM=AP%NDM NPAR=AP%NPAR IF(NDIM==NDM)THEN ! reduced function for Cusp detection CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,0,F,DFDU,DFDP) RETURN ENDIF ! Generate the function. IF(IJAC==0)THEN IJC=IJAC ELSE IJC=2 ENDIF CALL FFLP(AP,NDIM,U,UOLD,ICP,PAR,IJC,F,NDM,DFDU,DFDP,FUNI) IF(IJAC.EQ.0)RETURN ! Generate the Jacobian. UMX=0.d0 DO I=1,NDM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,AP%NPAR,NDM,NDIM) DFDU(1:NDM,NDM+1:2*NDM)=0d0 DFDU(1:NDM,NDIM)=DFDP(:,ICP(2)) DFDU(NDM+1:2*NDM,NDM+1:2*NDM)=DFDU(1:NDM,1:NDM) IF(AP%ITPST==7)THEN ! PD bif for maps DO I=1,NDM DFDU(NDM+I,NDM+I)=DFDU(NDM+I,NDM+I)+2 ENDDO ENDIF DFDU(NDIM,1:NDM)=0d0 DFDU(NDIM,NDM+1:2*NDM)=2*U(NDM+1:NDM*2) DFDU(NDIM,NDIM)=0d0 ALLOCATE(DFU(NDM,NDM),FF1(NDIM),FF2(NDIM)) DO II=1,NDM+1 I=II IF(I>NDM)I=NDIM UU=U(I) U(I)=UU-EP CALL FFLP(AP,NDIM,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP,FUNI) U(I)=UU+EP CALL FFLP(AP,NDIM,U,UOLD,ICP,PAR,0,FF2,NDM,DFU,DUMDP,FUNI) U(I)=UU DO J=NDM+1,2*NDM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(FF1,DFU) RETURN ENDIF P=PAR(ICP(1)) PAR(ICP(1))=P+EP CALL FFLP(AP,NDIM,U,UOLD,ICP,PAR,0,FF1,NDM,DFU,DUMDP,FUNI) DO J=NDM+1,2*NDM DFDP(J,ICP(1))=(FF1(J)-F(J))/EP ENDDO DFDP(NDIM,ICP(1))=0d0 PAR(ICP(1))=P DEALLOCATE(FF1,DFU) END SUBROUTINE FNLPF ! ---------- ---- SUBROUTINE FFLP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,NDM,DFDU,DFDP,FUNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NDM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) include 'interfaces.h' INTEGER IJC,I,J PAR(ICP(2))=U(NDIM) IJC=MAX(IJAC,1) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJC,F,DFDU,DFDP) DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(I,J)*U(NDM+J) ENDDO ENDDO IF(AP%ITPST==7)THEN ! PD bif for maps DO I=1,NDM F(NDM+I)=F(NDM+I)+2*U(NDM+I) ENDDO ENDIF F(NDIM)=-1 DO I=1,NDM F(NDIM)=F(NDIM)+U(NDM+I)*U(NDM+I) ENDDO END SUBROUTINE FFLP ! ---------- ------- SUBROUTINE STPNLP(AP,PAR,ICP,U,UDOT,NODIR) ! Generates starting data for the continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNLPF(AP,PAR,ICP,U,UDOT,NODIR,FUNI) END SUBROUTINE STPNLP ! ---------- ------- SUBROUTINE STPNLPF(AP,PAR,ICP,U,UDOT,NODIR,FUNI) USE IO USE SUPPORT ! Generates starting data for the continuation of folds. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:),V(:),F(:) DOUBLE PRECISION DUMDFP(1) INTEGER ICPRS(2),NDIM,NDM,I NDIM=AP%NDIM NDM=AP%NDM IF(ABS(AP%ITP)/10>0)THEN ! restart CALL STPNAE(AP,PAR,ICP,U,UDOT,NODIR) U(NDIM)=PAR(ICP(2)) RETURN ENDIF CALL READLB(AP,ICPRS,U,UDOT,PAR) ALLOCATE(DFU(NDM,NDM),V(NDM),F(NDM)) CALL FUNI(AP,NDM,U,U,ICP,PAR,1,F,DFU,DUMDFP) IF(AP%ITPST==7)THEN ! PD bif for maps DO I=1,NDM DFU(I,I)=DFU(I,I)+2 ENDDO ENDIF CALL NLVC(NDM,NDM,1,DFU,V) CALL NRMLZ(NDM,V) DO I=1,NDM U(NDM+I)=V(I) ENDDO DEALLOCATE(DFU,V,F) U(NDIM)=PAR(ICP(2)) NODIR=1 END SUBROUTINE STPNLPF !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for BP cont (Algebraic Problems) (by F. Dercole) !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNBP(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for the 2-par continuation of BP. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) CALL FNBPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) END SUBROUTINE FNBP ! ---------- ----- SUBROUTINE FNBPF(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP,FUNI) ! Generates the equations for the 2-par continuation of BP. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:),DFP(:),FF1(:),FF2(:) INTEGER NDM,NPAR,I,II,J DOUBLE PRECISION UMX,EP,P,UU NDM=AP%NDM NPAR=AP%NPAR ! Generate the function. CALL FFBP(AP,NDIM,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,FUNI) IF(IJAC.EQ.0)RETURN ! Generate the Jacobian. ! derivatives for F(x,p)=0 (5) CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,AP%NPAR,NDM,NDIM) DFDU(1:NDM,NDM+1:2*NDM)=0d0 DFDU(1:NDM,NDIM-1)=DFDP(1:NDM,ICP(2)) IF(AP%ISW==2) THEN ! ** Non-generic case, derivatives of b phi^* in (18) DO I=1,NDM DFDU(I,NDM+I)=U(NDIM) ! b DFDU(I,NDIM)=U(NDM+I) ! phi^* ENDDO DFDU(NDM+1:2*NDM,NDIM)=0 ! d(13a)/db DFDU(NDIM-1,NDIM)=0 ! d(13b)/db ELSE DFDU(1:NDM,NDIM)=DFDP(1:NDM,ICP(3)) ! (5) ENDIF DO I=1,NDM DFDU(NDM+I,NDM+1:2*NDM)=DFDU(1:NDM,I) ! F_x(x,p)^T (13a) ENDDO DFDU(NDIM-1,NDM+1:2*NDM)=DFDP(1:NDM,ICP(1)) ! F_p(x,p)^T (13b) ! derivatives for (13c) DFDU(NDIM,1:NDM)=0d0 DFDU(NDIM,NDM+1:2*NDM)=2*U(NDM+1:NDM*2) DFDU(NDIM,NDIM-1:NDIM)=0 UMX=0.d0 DO I=1,NDIM IF(ABS(U(I))>UMX)UMX=ABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(FF1(NDIM),FF2(NDIM),DFU(NDM*NDM),DFP(NDM*NPAR)) DO II=1,NDM+2 I=II IF(I>NDM)I=II+NDM IF(I==NDIM.AND.AP%ISW==2)EXIT ! Non-generic UU=U(I) U(I)=UU-EP CALL FFBP(AP,NDIM,U,UOLD,ICP,PAR,FF1,NDM,DFU,DFP,FUNI) U(I)=UU+EP CALL FFBP(AP,NDIM,U,UOLD,ICP,PAR,FF2,NDM,DFU,DFP,FUNI) U(I)=UU DO J=NDM+1,NDIM-1 DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(FF1,DFU,DFP) RETURN ENDIF P=PAR(ICP(1)) PAR(ICP(1))=P+EP CALL FFBP(AP,NDIM,U,UOLD,ICP,PAR,FF1,NDM,DFU,DFP,FUNI) DO J=NDM+1,NDIM-1 DFDP(J,ICP(1))=(FF1(J)-F(J))/EP ENDDO DFDP(NDIM,ICP(1))=0 PAR(ICP(1))=P DEALLOCATE(FF1,DFU,DFP) END SUBROUTINE FNBPF ! ---------- ---- SUBROUTINE FFBP(AP,NDIM,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,FUNI) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) include 'interfaces.h' INTEGER ISW,I,J ISW=AP%ISW IF(ISW.EQ.3) THEN ! ** Generic case PAR(ICP(3))=U(NDIM) ENDIF PAR(ICP(2))=U(NDIM-1) ! (5) F(x,p) = 0 CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) IF(ISW.EQ.2) THEN ! ** Non-generic case (18) F(x,p) + b phi^* = 0 DO I=1,NDM F(I)=F(I)+U(NDIM)*U(NDM+I) ENDDO ENDIF ! (13a) F_x(x,p)^T phi^* = 0 DO I=1,NDM F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(J,I)*U(NDM+J) ENDDO ENDDO ! (13b) F_p(x,p)^T phi^* = 0 F(NDIM-1)=0.d0 DO I=1,NDM F(NDIM-1)=F(NDIM-1)+DFDP(I,ICP(1))*U(NDM+I) ENDDO ! (13c) - 1 = 0 F(NDIM)=-1 DO I=1,NDM F(NDIM)=F(NDIM)+U(NDM+I)*U(NDM+I) ENDDO END SUBROUTINE FFBP ! ---------- ------ SUBROUTINE STPNBP(AP,PAR,ICP,U,UDOT,NODIR) ! Generates starting data for the continuation of BP. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) CALL STPNBPF(AP,PAR,ICP,U,UDOT,NODIR,FUNI) END SUBROUTINE STPNBP ! ---------- ------- SUBROUTINE STPNBPF(AP,PAR,ICP,U,UDOT,NODIR,FUNI) USE IO USE SUPPORT ! Generates starting data for the continuation of BP. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) include 'interfaces.h' ! Local DOUBLE PRECISION, ALLOCATABLE ::DFU(:,:),DFP(:,:),A(:,:),V(:),F(:) INTEGER :: ICPRS(3),NDIM,ISW,NDM,NPAR,I,J NDIM=AP%NDIM ISW=AP%ISW NDM=AP%NDM NPAR=AP%NPAR IF(ABS(AP%ITP)/10>0)THEN ! restart CALL STPNAE(AP,PAR,ICP,U,UDOT,NODIR) U(NDIM-1)=PAR(ICP(2)) IF(ISW==3) THEN U(NDIM)=PAR(ICP(3)) ! Generic case ELSE U(NDIM)=0.d0 ! Non-generic case ENDIF RETURN ENDIF CALL READLB(AP,ICPRS,U,UDOT,PAR) ALLOCATE(DFU(NDM,NDM),DFP(NDM,NPAR),A(NDM,NDM+1)) ALLOCATE(V(NDM+1),F(NDM)) CALL FUNI(AP,NDM,U,U,ICP,PAR,2,F,DFU,DFP) A(:,1:NDM)=DFU(:,:) A(:,NDM+1)=DFP(:,ICP(1)) CALL NLVC(NDM,NDM+1,2,A,V) DEALLOCATE(A) ALLOCATE(A(NDM+1,NDM+1)) DO I=1,NDM DO J=1,NDM A(I,J)=DFU(J,I) ENDDO A(NDM+1,I)=DFP(I,ICP(1)) ENDDO DO I=1,NDM+1 A(I,NDM+1)=V(I) ENDDO CALL NLVC(NDM+1,NDM+1,1,A,V) CALL NRMLZ(NDM,V) DO I=1,NDM U(NDM+I)=V(I) ENDDO DEALLOCATE(DFU,DFP,A,V,F) U(NDIM-1)=PAR(ICP(2)) IF(ISW.EQ.3) THEN ! ** Generic case U(NDIM)=PAR(ICP(3)) ELSE ! ** Non-generic case U(NDIM)=0.d0 ENDIF NODIR=1 END SUBROUTINE STPNBPF ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCSAE(AP,ICP,U,NDIM,PAR,ITEST,ATYPE) RESULT(Q) USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=FNCSAEF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) END FUNCTION FNCSAE ! ------ --------- -------- ------- DOUBLE PRECISION FUNCTION FNCSAEF(AP,ICP,U,NDIM,PAR,ITEST,ATYPE,FUNI) & RESULT(Q) USE SUPPORT, ONLY: AA=>P0V, PI USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM DOUBLE PRECISION, INTENT(IN) :: U(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER, INTENT(IN) :: ITEST CHARACTER(LEN=*), INTENT(OUT) :: ATYPE Q=0.d0 ATYPE='' SELECT CASE(ITEST) CASE(0) CALL PVLSI(AP,U,NDIM,PAR) CASE(1) ! Check for fold Q=FNLPAE(AP,ATYPE,AA) CASE(2) ! Check for branch point Q=FNBPAE(AP,ATYPE) CASE(3) ! Check for cusp on fold Q=FNCPAE(AP,PAR,ICP,ATYPE,FUNI,U,AA) END SELECT END FUNCTION FNCSAEF ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNBPAE(AP,ATYPE) USE SUPPORT, ONLY: CHECKSP TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE INTEGER IID,IBR,NTOT,NTOP DOUBLE PRECISION DET ATYPE='' FNBPAE=0d0 IF(.NOT.CHECKSP('BP',AP%IPS,AP%ILP,AP%ISP))RETURN IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 DET=AP%DET FNBPAE=DET ATYPE='BP' ! If requested write additional output on unit 9 : IF(IID.GE.2)WRITE(9,101)IBR,NTOP+1,FNBPAE 101 FORMAT(I4,I6,9X,'BP Function:',ES14.5) END FUNCTION FNBPAE ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNLPAE(AP,ATYPE,AA) USE SUPPORT TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) ! Local DOUBLE PRECISION, ALLOCATABLE :: UD(:),AAA(:,:),RHS(:) INTEGER NDIM,IID,IBR,NTOT,NTOP DOUBLE PRECISION DET ATYPE='' FNLPAE=0d0 IF(.NOT.CHECKSP('LP',AP%IPS,AP%ILP,AP%ISP))RETURN NDIM=AP%NDIM IID=AP%IID IBR=AP%IBR NTOT=AP%NTOT NTOP=MOD(NTOT-1,9999)+1 ALLOCATE(AAA(NDIM+1,NDIM+1),RHS(NDIM+1)) AAA(:,:)=AA(:,:) RHS(1:NDIM)=0.d0 RHS(NDIM+1)=1.d0 ALLOCATE(UD(NDIM+1)) CALL GEL(NDIM+1,AAA,1,UD,RHS,DET) ! don't store DET here: it is for a different matrix than ! used with pseudo arclength continuation and sometimes has ! a different sign CALL NRMLZ(NDIM+1,UD) FNLPAE=UD(NDIM+1) DEALLOCATE(UD,AAA,RHS) AP%FLDF=FNLPAE ATYPE='LP' ! If requested write additional output on unit 9 : IF(IID.GE.2)WRITE(9,101)ABS(IBR),NTOP+1,FNLPAE 101 FORMAT(I4,I6,9X,'Fold Function:',ES14.5) END FUNCTION FNLPAE ! ---------- ------- SUBROUTINE RNULLVC(AP,AA,V) ! get null vector for the transposed Jacobian for BT/CP detection USE SUPPORT, ONLY: NLVC, NRMLZ TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(IN) :: AA(AP%NDIM+1,AP%NDIM+1) DOUBLE PRECISION, INTENT(INOUT) :: V(AP%NDM) DOUBLE PRECISION, ALLOCATABLE :: DFU(:,:) DOUBLE PRECISION, ALLOCATABLE, SAVE :: VOLD(:) INTEGER NDM,I NDM=AP%NDM IF(.NOT.ALLOCATED(VOLD))THEN ALLOCATE(VOLD(NDM)) VOLD(:)=0 ENDIF ALLOCATE(DFU(NDM,NDM)) DO I=1,NDM DFU(1:NDM,I)=AA(NDM+I,NDM+1:2*NDM) ENDDO CALL NLVC(NDM,NDM,1,DFU,V) CALL NRMLZ(NDM,V) IF(DOT_PRODUCT(V,VOLD)<0)THEN V(:)=-V(:) ENDIF VOLD(:)=V(:) DEALLOCATE(DFU) END SUBROUTINE RNULLVC ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNBTAE(AP,U,AA) ! evaluate Bogdanov-Takens/1:1/1:2-resonance test function ! this function is used by equilibrium.f90 and maps.f90. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP DOUBLE PRECISION, INTENT(IN) :: U(AP%NDIM), AA(AP%NDIM+1,AP%NDIM+1) ! Local INTEGER NDM DOUBLE PRECISION, ALLOCATABLE :: V(:) FNBTAE = 0 NDM=AP%NDM ! take the inner product with the null vector for the Jacobian ALLOCATE(V(NDM)) CALL RNULLVC(AP,AA,V) FNBTAE = DOT_PRODUCT(U(NDM+1:2*NDM),V(1:NDM)) DEALLOCATE(V) END FUNCTION FNBTAE ! ------ --------- -------- ------ DOUBLE PRECISION FUNCTION FNCPAE(AP,PAR,ICP,ATYPE,FUNI,U,AA) USE SUPPORT, ONLY: CHECKSP include 'interfaces.h' TYPE(AUTOPARAMETERS), INTENT(IN) :: AP CHARACTER(LEN=*), INTENT(OUT) :: ATYPE DOUBLE PRECISION, INTENT(IN) :: U(AP%NDIM),AA(AP%NDM) INTEGER, INTENT(IN) :: ICP(*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: F(:),UU(:),V(:) DOUBLE PRECISION DUM(1),H INTEGER NDM,NTOP,I FNCPAE = 0 ATYPE='' IF(AP%ISW/=2.OR.AP%ITPST/=2.OR..NOT.CHECKSP('CP',AP%IPS,AP%ILP,AP%ISP))THEN RETURN ENDIF NDM=AP%NDM ALLOCATE(UU(NDM),F(NDM),V(NDM)) CALL RNULLVC(AP,AA,V) ! Evaluate cusp function: H=0.d0 DO I=1,NDM IF(ABS(U(I))>H)H=ABS(U(I)) ENDDO H=(EPSILON(H)**(1d0/3))*(1+H) UU(:)=U(:NDM)+U(NDM+1:2*NDM)*H CALL FUNI(AP,NDM,UU,UU,ICP,PAR,0,F,DUM,DUM) FNCPAE=DOT_PRODUCT(V(:),F(:)) UU(:)=U(:NDM)-U(NDM+1:2*NDM)*H CALL FUNI(AP,NDM,UU,UU,ICP,PAR,0,F,DUM,DUM) FNCPAE=(FNCPAE+DOT_PRODUCT(V(:),F(:)))/H**2 DEALLOCATE(UU,F,V) ATYPE='CP' NTOP=MOD(AP%NTOT-1,9999)+1 IF(AP%IID.GE.2)WRITE(9,101)ABS(AP%IBR),NTOP+1,FNCPAE 101 FORMAT(I4,I6,9X,'Cusp Function:',ES14.5) END FUNCTION FNCPAE END MODULE TOOLBOXAE auto/07p/src/blas.f0000640000175000017500000020217013570013207012123 0ustar skskC C----------------------------------------------------------------------- C----------------------------------------------------------------------- C BLAS-1 routines needed in the computation of Floquet multipliers C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DASUM(N,DX,INCX) * .. Scalar Arguments .. INTEGER INCX,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*) * .. * * Purpose * ======= * * DASUM takes the sum of the absolute values. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 3/93 to return if incx .le. 0. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DTEMP INTEGER I,M,MP1,NINCX * .. * .. Intrinsic Functions .. INTRINSIC DABS,MOD * .. DASUM = 0.0d0 DTEMP = 0.0d0 IF (N.LE.0 .OR. INCX.LE.0) RETURN IF (INCX.EQ.1) THEN * code for increment equal to 1 * * * clean-up loop * M = MOD(N,6) IF (M.NE.0) THEN DO I = 1,M DTEMP = DTEMP + DABS(DX(I)) END DO IF (N.LT.6) THEN DASUM = DTEMP RETURN END IF END IF MP1 = M + 1 DO I = MP1,N,6 DTEMP = DTEMP + DABS(DX(I)) + DABS(DX(I+1)) + $ DABS(DX(I+2)) + DABS(DX(I+3)) + $ DABS(DX(I+4)) + DABS(DX(I+5)) END DO ELSE * * code for increment not equal to 1 * NINCX = N*INCX DO I = 1,NINCX,INCX DTEMP = DTEMP + DABS(DX(I)) END DO END IF DASUM = DTEMP RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DCOPY(N,DX,INCX,DY,INCY) * .. Scalar Arguments .. INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*),DY(*) * .. * * Purpose * ======= * * DCOPY copies a vector, x, to a vector, y. * uses unrolled loops for increments equal to one. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. INTEGER I,IX,IY,M,MP1 * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. IF (N.LE.0) RETURN IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN * * code for both increments equal to 1 * * * clean-up loop * M = MOD(N,7) IF (M.NE.0) THEN DO I = 1,M DY(I) = DX(I) END DO IF (N.LT.7) RETURN END IF MP1 = M + 1 DO I = MP1,N,7 DY(I) = DX(I) DY(I+1) = DX(I+1) DY(I+2) = DX(I+2) DY(I+3) = DX(I+3) DY(I+4) = DX(I+4) DY(I+5) = DX(I+5) DY(I+6) = DX(I+6) END DO ELSE * * code for unequal increments or equal increments * not equal to 1 * IX = 1 IY = 1 IF (INCX.LT.0) IX = (-N+1)*INCX + 1 IF (INCY.LT.0) IY = (-N+1)*INCY + 1 DO I = 1,N DY(IY) = DX(IX) IX = IX + INCX IY = IY + INCY END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DNRM2(N,X,INCX) * .. Scalar Arguments .. INTEGER INCX,N * .. * .. Array Arguments .. DOUBLE PRECISION X(*) * .. * * Purpose * ======= * * DNRM2 returns the euclidean norm of a vector via the function * name, so that * * DNRM2 := sqrt( x'*x ) * * Further Details * =============== * * -- This version written on 25-October-1982. * Modified on 14-October-1993 to inline the call to DLASSQ. * Sven Hammarling, Nag Ltd. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE,ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) * .. * .. Local Scalars .. DOUBLE PRECISION ABSXI,NORM,SCALE,SSQ INTEGER IX * .. * .. Intrinsic Functions .. INTRINSIC ABS,SQRT * .. IF (N.LT.1 .OR. INCX.LT.1) THEN NORM = ZERO ELSE IF (N.EQ.1) THEN NORM = ABS(X(1)) ELSE SCALE = ZERO SSQ = ONE * The following loop is equivalent to this call to the LAPACK * auxiliary routine: * CALL DLASSQ( N, X, INCX, SCALE, SSQ ) * DO 10 IX = 1,1 + (N-1)*INCX,INCX IF (X(IX).NE.ZERO) THEN ABSXI = ABS(X(IX)) IF (SCALE.LT.ABSXI) THEN SSQ = ONE + SSQ* (SCALE/ABSXI)**2 SCALE = ABSXI ELSE SSQ = SSQ + (ABSXI/SCALE)**2 END IF END IF 10 CONTINUE NORM = SCALE*SQRT(SSQ) END IF * DNRM2 = NORM RETURN * * End of DNRM2. * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DDOT(N,DX,INCX,DY,INCY) * .. Scalar Arguments .. INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*),DY(*) * .. * * Purpose * ======= * * DDOT forms the dot product of two vectors. * uses unrolled loops for increments equal to one. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DTEMP INTEGER I,IX,IY,M,MP1 * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. DDOT = 0.0d0 DTEMP = 0.0d0 IF (N.LE.0) RETURN IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN * * code for both increments equal to 1 * * * clean-up loop * M = MOD(N,5) IF (M.NE.0) THEN DO I = 1,M DTEMP = DTEMP + DX(I)*DY(I) END DO IF (N.LT.5) THEN DDOT=DTEMP RETURN END IF END IF MP1 = M + 1 DO I = MP1,N,5 DTEMP = DTEMP + DX(I)*DY(I) + DX(I+1)*DY(I+1) + $ DX(I+2)*DY(I+2) + DX(I+3)*DY(I+3) + DX(I+4)*DY(I+4) END DO ELSE * * code for unequal increments or equal increments * not equal to 1 * IX = 1 IY = 1 IF (INCX.LT.0) IX = (-N+1)*INCX + 1 IF (INCY.LT.0) IY = (-N+1)*INCY + 1 DO I = 1,N DTEMP = DTEMP + DX(IX)*DY(IY) IX = IX + INCX IY = IY + INCY END DO END IF DDOT = DTEMP RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DROTM(N,DX,INCX,DY,INCY,DPARAM) * .. Scalar Arguments .. INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DPARAM(5),DX(*),DY(*) * .. * * Purpose * ======= * * APPLY THE MODIFIED GIVENS TRANSFORMATION, H, TO THE 2 BY N MATRIX * * (DX**T) , WHERE **T INDICATES TRANSPOSE. THE ELEMENTS OF DX ARE IN * (DY**T) * * DX(LX+I*INCX), I = 0 TO N-1, WHERE LX = 1 IF INCX .GE. 0, ELSE * LX = (-INCX)*N, AND SIMILARLY FOR SY USING LY AND INCY. * WITH DPARAM(1)=DFLAG, H HAS ONE OF THE FOLLOWING FORMS.. * * DFLAG=-1.D0 DFLAG=0.D0 DFLAG=1.D0 DFLAG=-2.D0 * * (DH11 DH12) (1.D0 DH12) (DH11 1.D0) (1.D0 0.D0) * H=( ) ( ) ( ) ( ) * (DH21 DH22), (DH21 1.D0), (-1.D0 DH22), (0.D0 1.D0). * SEE DROTMG FOR A DESCRIPTION OF DATA STORAGE IN DPARAM. * * Arguments * ========= * * N (input) INTEGER * number of elements in input vector(s) * * DX (input/output) DOUBLE PRECISION array, dimension N * double precision vector with N elements * * INCX (input) INTEGER * storage spacing between elements of DX * * DY (input/output) DOUBLE PRECISION array, dimension N * double precision vector with N elements * * INCY (input) INTEGER * storage spacing between elements of DY * * DPARAM (input/output) DOUBLE PRECISION array, dimension 5 * DPARAM(1)=DFLAG * DPARAM(2)=DH11 * DPARAM(3)=DH21 * DPARAM(4)=DH12 * DPARAM(5)=DH22 * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DFLAG,DH11,DH12,DH21,DH22,TWO,W,Z,ZERO INTEGER I,KX,KY,NSTEPS * .. * .. Data statements .. DATA ZERO,TWO/0.D0,2.D0/ * .. * DFLAG = DPARAM(1) IF (N.LE.0 .OR. (DFLAG+TWO.EQ.ZERO)) RETURN IF (INCX.EQ.INCY.AND.INCX.GT.0) THEN * NSTEPS = N*INCX IF (DFLAG.LT.ZERO) THEN DH11 = DPARAM(2) DH12 = DPARAM(4) DH21 = DPARAM(3) DH22 = DPARAM(5) DO I = 1,NSTEPS,INCX W = DX(I) Z = DY(I) DX(I) = W*DH11 + Z*DH12 DY(I) = W*DH21 + Z*DH22 END DO ELSE IF (DFLAG.EQ.ZERO) THEN DH12 = DPARAM(4) DH21 = DPARAM(3) DO I = 1,NSTEPS,INCX W = DX(I) Z = DY(I) DX(I) = W + Z*DH12 DY(I) = W*DH21 + Z END DO ELSE DH11 = DPARAM(2) DH22 = DPARAM(5) DO I = 1,NSTEPS,INCX W = DX(I) Z = DY(I) DX(I) = W*DH11 + Z DY(I) = -W + DH22*Z END DO END IF ELSE KX = 1 KY = 1 IF (INCX.LT.0) KX = 1 + (1-N)*INCX IF (INCY.LT.0) KY = 1 + (1-N)*INCY * IF (DFLAG.LT.ZERO) THEN DH11 = DPARAM(2) DH12 = DPARAM(4) DH21 = DPARAM(3) DH22 = DPARAM(5) DO I = 1,N W = DX(KX) Z = DY(KY) DX(KX) = W*DH11 + Z*DH12 DY(KY) = W*DH21 + Z*DH22 KX = KX + INCX KY = KY + INCY END DO ELSE IF (DFLAG.EQ.ZERO) THEN DH12 = DPARAM(4) DH21 = DPARAM(3) DO I = 1,N W = DX(KX) Z = DY(KY) DX(KX) = W + Z*DH12 DY(KY) = W*DH21 + Z KX = KX + INCX KY = KY + INCY END DO ELSE DH11 = DPARAM(2) DH22 = DPARAM(5) DO I = 1,N W = DX(KX) Z = DY(KY) DX(KX) = W*DH11 + Z DY(KY) = -W + DH22*Z KX = KX + INCX KY = KY + INCY END DO END IF END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DSCAL(N,DA,DX,INCX) * .. Scalar Arguments .. DOUBLE PRECISION DA INTEGER INCX,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*) * .. * * Purpose * ======= * * DSCAL scales a vector by a constant. * uses unrolled loops for increment equal to one. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 3/93 to return if incx .le. 0. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. INTEGER I,M,MP1,NINCX * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. IF (N.LE.0 .OR. INCX.LE.0) RETURN IF (INCX.EQ.1) THEN * * code for increment equal to 1 * * * clean-up loop * M = MOD(N,5) IF (M.NE.0) THEN DO I = 1,M DX(I) = DA*DX(I) END DO IF (N.LT.5) RETURN END IF MP1 = M + 1 DO I = MP1,N,5 DX(I) = DA*DX(I) DX(I+1) = DA*DX(I+1) DX(I+2) = DA*DX(I+2) DX(I+3) = DA*DX(I+3) DX(I+4) = DA*DX(I+4) END DO ELSE * * code for increment not equal to 1 * NINCX = N*INCX DO I = 1,NINCX,INCX DX(I) = DA*DX(I) END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- INTEGER FUNCTION IDAMAX(N,DX,INCX) * .. Scalar Arguments .. INTEGER INCX,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*) * .. * * Purpose * ======= * * IDAMAX finds the index of element having max. absolute value. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 3/93 to return if incx .le. 0. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DMAX INTEGER I,IX * .. * .. Intrinsic Functions .. INTRINSIC DABS * .. IDAMAX = 0 IF (N.LT.1 .OR. INCX.LE.0) RETURN IDAMAX = 1 IF (N.EQ.1) RETURN IF (INCX.EQ.1) THEN * * code for increment equal to 1 * DMAX = DABS(DX(1)) DO I = 2,N IF (DABS(DX(I)).GT.DMAX) THEN IDAMAX = I DMAX = DABS(DX(I)) END IF END DO ELSE * * code for increment not equal to 1 * IX = 1 DMAX = DABS(DX(1)) IX = IX + INCX DO I = 2,N IF (DABS(DX(IX)).GT.DMAX) THEN IDAMAX = I DMAX = DABS(DX(IX)) END IF IX = IX + INCX END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DAXPY(N,DA,DX,INCX,DY,INCY) * .. Scalar Arguments .. DOUBLE PRECISION DA INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*),DY(*) * .. * * Purpose * ======= * * DAXPY constant times a vector plus a vector. * uses unrolled loops for increments equal to one. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. INTEGER I,IX,IY,M,MP1 * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. IF (N.LE.0) RETURN IF (DA.EQ.0.0d0) RETURN IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN * * code for both increments equal to 1 * * * clean-up loop * M = MOD(N,4) IF (M.NE.0) THEN DO I = 1,M DY(I) = DY(I) + DA*DX(I) END DO END IF IF (N.LT.4) RETURN MP1 = M + 1 DO I = MP1,N,4 DY(I) = DY(I) + DA*DX(I) DY(I+1) = DY(I+1) + DA*DX(I+1) DY(I+2) = DY(I+2) + DA*DX(I+2) DY(I+3) = DY(I+3) + DA*DX(I+3) END DO ELSE * * code for unequal increments or equal increments * not equal to 1 * IX = 1 IY = 1 IF (INCX.LT.0) IX = (-N+1)*INCX + 1 IF (INCY.LT.0) IY = (-N+1)*INCY + 1 DO I = 1,N DY(IY) = DY(IY) + DA*DX(IX) IX = IX + INCX IY = IY + INCY END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DROT(N,DX,INCX,DY,INCY,C,S) * .. Scalar Arguments .. DOUBLE PRECISION C,S INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*),DY(*) * .. * * Purpose * ======= * * DROT applies a plane rotation. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DTEMP INTEGER I,IX,IY * .. IF (N.LE.0) RETURN IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN * * code for both increments equal to 1 * DO I = 1,N DTEMP = C*DX(I) + S*DY(I) DY(I) = C*DY(I) - S*DX(I) DX(I) = DTEMP END DO ELSE * * code for unequal increments or equal increments not equal * to 1 * IX = 1 IY = 1 IF (INCX.LT.0) IX = (-N+1)*INCX + 1 IF (INCY.LT.0) IY = (-N+1)*INCY + 1 DO I = 1,N DTEMP = C*DX(IX) + S*DY(IY) DY(IY) = C*DY(IY) - S*DX(IX) DX(IX) = DTEMP IX = IX + INCX IY = IY + INCY END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DSWAP(N,DX,INCX,DY,INCY) * .. Scalar Arguments .. INTEGER INCX,INCY,N * .. * .. Array Arguments .. DOUBLE PRECISION DX(*),DY(*) * .. * * Purpose * ======= * * interchanges two vectors. * uses unrolled loops for increments equal one. * * Further Details * =============== * * jack dongarra, linpack, 3/11/78. * modified 12/3/93, array(1) declarations changed to array(*) * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION DTEMP INTEGER I,IX,IY,M,MP1 * .. * .. Intrinsic Functions .. INTRINSIC MOD * .. IF (N.LE.0) RETURN IF (INCX.EQ.1 .AND. INCY.EQ.1) THEN * * code for both increments equal to 1 * * * clean-up loop * M = MOD(N,3) IF (M.NE.0) THEN DO I = 1,M DTEMP = DX(I) DX(I) = DY(I) DY(I) = DTEMP END DO IF (N.LT.3) RETURN END IF MP1 = M + 1 DO I = MP1,N,3 DTEMP = DX(I) DX(I) = DY(I) DY(I) = DTEMP DTEMP = DX(I+1) DX(I+1) = DY(I+1) DY(I+1) = DTEMP DTEMP = DX(I+2) DX(I+2) = DY(I+2) DY(I+2) = DTEMP END DO ELSE * * code for unequal increments or equal increments not equal * to 1 * IX = 1 IY = 1 IF (INCX.LT.0) IX = (-N+1)*INCX + 1 IF (INCY.LT.0) IY = (-N+1)*INCY + 1 DO I = 1,N DTEMP = DX(IX) DX(IX) = DY(IY) DY(IY) = DTEMP IX = IX + INCX IY = IY + INCY END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- C BLAS-2 routines needed in the computation of Floquet multipliers C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE XERBLA( SRNAME, INFO ) * * -- LAPACK auxiliary routine (preliminary version) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER*(*) SRNAME INTEGER INFO * .. * * Purpose * ======= * * XERBLA is an error handler for the LAPACK routines. * It is called by an LAPACK routine if an input parameter has an * invalid value. A message is printed and execution stops. * * Installers may consider modifying the STOP statement in order to * call system-specific exception-handling facilities. * * Arguments * ========= * * SRNAME (input) CHARACTER*(*) * The name of the routine which called XERBLA. * * INFO (input) INTEGER * The position of the invalid parameter in the parameter list * of the calling routine. * * ===================================================================== * * .. Intrinsic Functions .. INTRINSIC LEN_TRIM * .. * .. Executable Statements .. * WRITE( *, FMT = 9999 )SRNAME( 1:LEN_TRIM( SRNAME ) ), INFO * STOP * 9999 FORMAT( ' ** On entry to ', A, ' parameter number ', I2, ' had ', $ 'an illegal value' ) * * End of XERBLA * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- LOGICAL FUNCTION LSAME(CA,CB) * * -- LAPACK auxiliary routine (version 3.1) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER CA,CB * .. * * Purpose * ======= * * LSAME returns .TRUE. if CA is the same letter as CB regardless of * case. * * Arguments * ========= * * CA (input) CHARACTER*1 * * CB (input) CHARACTER*1 * CA and CB specify the single characters to be compared. * * ===================================================================== * * .. Intrinsic Functions .. INTRINSIC ICHAR * .. * .. Local Scalars .. INTEGER INTA,INTB,ZCODE * .. * * Test if the characters are equal * LSAME = CA .EQ. CB IF (LSAME) RETURN * * Now test for equivalence if both characters are alphabetic. * ZCODE = ICHAR('Z') * * Use 'Z' rather than 'A' so that ASCII can be detected on Prime * machines, on which ICHAR returns a value with bit 8 set. * ICHAR('A') on Prime machines returns 193 which is the same as * ICHAR('A') on an EBCDIC machine. * INTA = ICHAR(CA) INTB = ICHAR(CB) * IF (ZCODE.EQ.90 .OR. ZCODE.EQ.122) THEN * * ASCII is assumed - ZCODE is the ASCII code of either lower or * upper case 'Z'. * IF (INTA.GE.97 .AND. INTA.LE.122) INTA = INTA - 32 IF (INTB.GE.97 .AND. INTB.LE.122) INTB = INTB - 32 * ELSE IF (ZCODE.EQ.233 .OR. ZCODE.EQ.169) THEN * * EBCDIC is assumed - ZCODE is the EBCDIC code of either lower or * upper case 'Z'. * IF (INTA.GE.129 .AND. INTA.LE.137 .OR. + INTA.GE.145 .AND. INTA.LE.153 .OR. + INTA.GE.162 .AND. INTA.LE.169) INTA = INTA + 64 IF (INTB.GE.129 .AND. INTB.LE.137 .OR. + INTB.GE.145 .AND. INTB.LE.153 .OR. + INTB.GE.162 .AND. INTB.LE.169) INTB = INTB + 64 * ELSE IF (ZCODE.EQ.218 .OR. ZCODE.EQ.250) THEN * * ASCII is assumed, on Prime machines - ZCODE is the ASCII code * plus 128 of either lower or upper case 'Z'. * IF (INTA.GE.225 .AND. INTA.LE.250) INTA = INTA - 32 IF (INTB.GE.225 .AND. INTB.LE.250) INTB = INTB - 32 END IF LSAME = INTA .EQ. INTB * * RETURN * * End of LSAME * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEMV(TRANS,M,N,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA,BETA INTEGER INCX,INCY,LDA,M,N CHARACTER TRANS * .. * .. Array Arguments .. DOUBLE PRECISION A(LDA,*),X(*),Y(*) * .. * * Purpose * ======= * * DGEMV performs one of the matrix-vector operations * * y := alpha*A*x + beta*y, or y := alpha*A**T*x + beta*y, * * where alpha and beta are scalars, x and y are vectors and A is an * m by n matrix. * * Arguments * ========== * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' y := alpha*A*x + beta*y. * * TRANS = 'T' or 't' y := alpha*A**T*x + beta*y. * * TRANS = 'C' or 'c' y := alpha*A**T*x + beta*y. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix A. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry, the leading m by n part of the array A must * contain the matrix of coefficients. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, m ). * Unchanged on exit. * * X - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( n - 1 )*abs( INCX ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( m - 1 )*abs( INCX ) ) otherwise. * Before entry, the incremented array X must contain the * vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then Y need not be set on input. * Unchanged on exit. * * Y - DOUBLE PRECISION array of DIMENSION at least * ( 1 + ( m - 1 )*abs( INCY ) ) when TRANS = 'N' or 'n' * and at least * ( 1 + ( n - 1 )*abs( INCY ) ) otherwise. * Before entry with BETA non-zero, the incremented array Y * must contain the vector y. On exit, Y is overwritten by the * updated vector y. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * Further Details * =============== * * Level 2 Blas routine. * The vector and matrix arguments are not referenced when N = 0, or M = 0 * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE,ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) * .. * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I,INFO,IX,IY,J,JX,JY,KX,KY,LENX,LENY * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * * Test the input parameters. * INFO = 0 IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + .NOT.LSAME(TRANS,'C')) THEN INFO = 1 ELSE IF (M.LT.0) THEN INFO = 2 ELSE IF (N.LT.0) THEN INFO = 3 ELSE IF (LDA.LT.MAX(1,M)) THEN INFO = 6 ELSE IF (INCX.EQ.0) THEN INFO = 8 ELSE IF (INCY.EQ.0) THEN INFO = 11 END IF IF (INFO.NE.0) THEN CALL XERBLA('DGEMV ',INFO) RETURN END IF * * Quick return if possible. * IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + ((ALPHA.EQ.ZERO).AND. (BETA.EQ.ONE))) RETURN * * Set LENX and LENY, the lengths of the vectors x and y, and set * up the start points in X and Y. * IF (LSAME(TRANS,'N')) THEN LENX = N LENY = M ELSE LENX = M LENY = N END IF IF (INCX.GT.0) THEN KX = 1 ELSE KX = 1 - (LENX-1)*INCX END IF IF (INCY.GT.0) THEN KY = 1 ELSE KY = 1 - (LENY-1)*INCY END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * * First form y := beta*y. * IF (BETA.NE.ONE) THEN IF (INCY.EQ.1) THEN IF (BETA.EQ.ZERO) THEN DO 10 I = 1,LENY Y(I) = ZERO 10 CONTINUE ELSE DO 20 I = 1,LENY Y(I) = BETA*Y(I) 20 CONTINUE END IF ELSE IY = KY IF (BETA.EQ.ZERO) THEN DO 30 I = 1,LENY Y(IY) = ZERO IY = IY + INCY 30 CONTINUE ELSE DO 40 I = 1,LENY Y(IY) = BETA*Y(IY) IY = IY + INCY 40 CONTINUE END IF END IF END IF IF (ALPHA.EQ.ZERO) RETURN IF (LSAME(TRANS,'N')) THEN * * Form y := alpha*A*x + y. * JX = KX IF (INCY.EQ.1) THEN DO 60 J = 1,N IF (X(JX).NE.ZERO) THEN TEMP = ALPHA*X(JX) DO 50 I = 1,M Y(I) = Y(I) + TEMP*A(I,J) 50 CONTINUE END IF JX = JX + INCX 60 CONTINUE ELSE DO 80 J = 1,N IF (X(JX).NE.ZERO) THEN TEMP = ALPHA*X(JX) IY = KY DO 70 I = 1,M Y(IY) = Y(IY) + TEMP*A(I,J) IY = IY + INCY 70 CONTINUE END IF JX = JX + INCX 80 CONTINUE END IF ELSE * * Form y := alpha*A**T*x + y. * JY = KY IF (INCX.EQ.1) THEN DO 100 J = 1,N TEMP = ZERO DO 90 I = 1,M TEMP = TEMP + A(I,J)*X(I) 90 CONTINUE Y(JY) = Y(JY) + ALPHA*TEMP JY = JY + INCY 100 CONTINUE ELSE DO 120 J = 1,N TEMP = ZERO IX = KX DO 110 I = 1,M TEMP = TEMP + A(I,J)*X(IX) IX = IX + INCX 110 CONTINUE Y(JY) = Y(JY) + ALPHA*TEMP JY = JY + INCY 120 CONTINUE END IF END IF * RETURN * * End of DGEMV . * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTRMV(UPLO,TRANS,DIAG,N,A,LDA,X,INCX) * .. Scalar Arguments .. INTEGER INCX,LDA,N CHARACTER DIAG,TRANS,UPLO * .. * .. Array Arguments .. DOUBLE PRECISION A(LDA,*),X(*) * .. * * Purpose * ======= * * DTRMV performs one of the matrix-vector operations * * x := A*x, or x := A**T*x, * * where x is an n element vector and A is an n by n unit, or non-unit, * upper or lower triangular matrix. * * Arguments * ========== * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANS - CHARACTER*1. * On entry, TRANS specifies the operation to be performed as * follows: * * TRANS = 'N' or 'n' x := A*x. * * TRANS = 'T' or 't' x := A**T*x. * * TRANS = 'C' or 'c' x := A**T*x. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit * triangular as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the order of the matrix A. * N must be at least zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry with UPLO = 'U' or 'u', the leading n by n * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading n by n * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, n ). * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the n * element vector x. On exit, X is overwritten with the * tranformed vector x. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * Further Details * =============== * * Level 2 Blas routine. * The vector and matrix arguments are not referenced when N = 0, or M = 0 * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER (ZERO=0.0D+0) * .. * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I,INFO,IX,J,JX,KX LOGICAL NOUNIT * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * * Test the input parameters. * INFO = 0 IF (.NOT.LSAME(UPLO,'U') .AND. .NOT.LSAME(UPLO,'L')) THEN INFO = 1 ELSE IF (.NOT.LSAME(TRANS,'N') .AND. .NOT.LSAME(TRANS,'T') .AND. + .NOT.LSAME(TRANS,'C')) THEN INFO = 2 ELSE IF (.NOT.LSAME(DIAG,'U') .AND. .NOT.LSAME(DIAG,'N')) THEN INFO = 3 ELSE IF (N.LT.0) THEN INFO = 4 ELSE IF (LDA.LT.MAX(1,N)) THEN INFO = 6 ELSE IF (INCX.EQ.0) THEN INFO = 8 END IF IF (INFO.NE.0) THEN CALL XERBLA('DTRMV ',INFO) RETURN END IF * * Quick return if possible. * IF (N.EQ.0) RETURN * NOUNIT = LSAME(DIAG,'N') * * Set up the start point in X if the increment is not unity. This * will be ( N - 1 )*INCX too small for descending loops. * IF (INCX.LE.0) THEN KX = 1 - (N-1)*INCX ELSE IF (INCX.NE.1) THEN KX = 1 END IF * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF (LSAME(TRANS,'N')) THEN * * Form x := A*x. * IF (LSAME(UPLO,'U')) THEN IF (INCX.EQ.1) THEN DO 20 J = 1,N IF (X(J).NE.ZERO) THEN TEMP = X(J) DO 10 I = 1,J - 1 X(I) = X(I) + TEMP*A(I,J) 10 CONTINUE IF (NOUNIT) X(J) = X(J)*A(J,J) END IF 20 CONTINUE ELSE JX = KX DO 40 J = 1,N IF (X(JX).NE.ZERO) THEN TEMP = X(JX) IX = KX DO 30 I = 1,J - 1 X(IX) = X(IX) + TEMP*A(I,J) IX = IX + INCX 30 CONTINUE IF (NOUNIT) X(JX) = X(JX)*A(J,J) END IF JX = JX + INCX 40 CONTINUE END IF ELSE IF (INCX.EQ.1) THEN DO 60 J = N,1,-1 IF (X(J).NE.ZERO) THEN TEMP = X(J) DO 50 I = N,J + 1,-1 X(I) = X(I) + TEMP*A(I,J) 50 CONTINUE IF (NOUNIT) X(J) = X(J)*A(J,J) END IF 60 CONTINUE ELSE KX = KX + (N-1)*INCX JX = KX DO 80 J = N,1,-1 IF (X(JX).NE.ZERO) THEN TEMP = X(JX) IX = KX DO 70 I = N,J + 1,-1 X(IX) = X(IX) + TEMP*A(I,J) IX = IX - INCX 70 CONTINUE IF (NOUNIT) X(JX) = X(JX)*A(J,J) END IF JX = JX - INCX 80 CONTINUE END IF END IF ELSE * * Form x := A**T*x. * IF (LSAME(UPLO,'U')) THEN IF (INCX.EQ.1) THEN DO 100 J = N,1,-1 TEMP = X(J) IF (NOUNIT) TEMP = TEMP*A(J,J) DO 90 I = J - 1,1,-1 TEMP = TEMP + A(I,J)*X(I) 90 CONTINUE X(J) = TEMP 100 CONTINUE ELSE JX = KX + (N-1)*INCX DO 120 J = N,1,-1 TEMP = X(JX) IX = JX IF (NOUNIT) TEMP = TEMP*A(J,J) DO 110 I = J - 1,1,-1 IX = IX - INCX TEMP = TEMP + A(I,J)*X(IX) 110 CONTINUE X(JX) = TEMP JX = JX - INCX 120 CONTINUE END IF ELSE IF (INCX.EQ.1) THEN DO 140 J = 1,N TEMP = X(J) IF (NOUNIT) TEMP = TEMP*A(J,J) DO 130 I = J + 1,N TEMP = TEMP + A(I,J)*X(I) 130 CONTINUE X(J) = TEMP 140 CONTINUE ELSE JX = KX DO 160 J = 1,N TEMP = X(JX) IX = JX IF (NOUNIT) TEMP = TEMP*A(J,J) DO 150 I = J + 1,N IX = IX + INCX TEMP = TEMP + A(I,J)*X(IX) 150 CONTINUE X(JX) = TEMP JX = JX + INCX 160 CONTINUE END IF END IF END IF * RETURN * * End of DTRMV . * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGER(M,N,ALPHA,X,INCX,Y,INCY,A,LDA) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER INCX,INCY,LDA,M,N * .. * .. Array Arguments .. DOUBLE PRECISION A(LDA,*),X(*),Y(*) * .. * * Purpose * ======= * * DGER performs the rank 1 operation * * A := alpha*x*y**T + A, * * where alpha is a scalar, x is an m element vector, y is an n element * vector and A is an m by n matrix. * * Arguments * ========== * * M - INTEGER. * On entry, M specifies the number of rows of the matrix A. * M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix A. * N must be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * X - DOUBLE PRECISION array of dimension at least * ( 1 + ( m - 1 )*abs( INCX ) ). * Before entry, the incremented array X must contain the m * element vector x. * Unchanged on exit. * * INCX - INTEGER. * On entry, INCX specifies the increment for the elements of * X. INCX must not be zero. * Unchanged on exit. * * Y - DOUBLE PRECISION array of dimension at least * ( 1 + ( n - 1 )*abs( INCY ) ). * Before entry, the incremented array Y must contain the n * element vector y. * Unchanged on exit. * * INCY - INTEGER. * On entry, INCY specifies the increment for the elements of * Y. INCY must not be zero. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, n ). * Before entry, the leading m by n part of the array A must * contain the matrix of coefficients. On exit, A is * overwritten by the updated matrix. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. LDA must be at least * max( 1, m ). * Unchanged on exit. * * Further Details * =============== * * Level 2 Blas routine. * * -- Written on 22-October-1986. * Jack Dongarra, Argonne National Lab. * Jeremy Du Croz, Nag Central Office. * Sven Hammarling, Nag Central Office. * Richard Hanson, Sandia National Labs. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER (ZERO=0.0D+0) * .. * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I,INFO,IX,J,JY,KX * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * * Test the input parameters. * INFO = 0 IF (M.LT.0) THEN INFO = 1 ELSE IF (N.LT.0) THEN INFO = 2 ELSE IF (INCX.EQ.0) THEN INFO = 5 ELSE IF (INCY.EQ.0) THEN INFO = 7 ELSE IF (LDA.LT.MAX(1,M)) THEN INFO = 9 END IF IF (INFO.NE.0) THEN CALL XERBLA('DGER ',INFO) RETURN END IF * * Quick return if possible. * IF ((M.EQ.0) .OR. (N.EQ.0) .OR. (ALPHA.EQ.ZERO)) RETURN * * Start the operations. In this version the elements of A are * accessed sequentially with one pass through A. * IF (INCY.GT.0) THEN JY = 1 ELSE JY = 1 - (N-1)*INCY END IF IF (INCX.EQ.1) THEN DO 20 J = 1,N IF (Y(JY).NE.ZERO) THEN TEMP = ALPHA*Y(JY) DO 10 I = 1,M A(I,J) = A(I,J) + X(I)*TEMP 10 CONTINUE END IF JY = JY + INCY 20 CONTINUE ELSE IF (INCX.GT.0) THEN KX = 1 ELSE KX = 1 - (M-1)*INCX END IF DO 40 J = 1,N IF (Y(JY).NE.ZERO) THEN TEMP = ALPHA*Y(JY) IX = KX DO 30 I = 1,M A(I,J) = A(I,J) + X(IX)*TEMP IX = IX + INCX 30 CONTINUE END IF JY = JY + INCY 40 CONTINUE END IF * RETURN * * End of DGER . * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- C BLAS-3 routines needed in the computation of Floquet multipliers C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEMM(TRANSA,TRANSB,M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA,BETA INTEGER K,LDA,LDB,LDC,M,N CHARACTER TRANSA,TRANSB * .. * .. Array Arguments .. DOUBLE PRECISION A(LDA,*),B(LDB,*),C(LDC,*) * .. * * Purpose * ======= * * DGEMM performs one of the matrix-matrix operations * * C := alpha*op( A )*op( B ) + beta*C, * * where op( X ) is one of * * op( X ) = X or op( X ) = X**T, * * alpha and beta are scalars, and A, B and C are matrices, with op( A ) * an m by k matrix, op( B ) a k by n matrix and C an m by n matrix. * * Arguments * ========== * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n', op( A ) = A. * * TRANSA = 'T' or 't', op( A ) = A**T. * * TRANSA = 'C' or 'c', op( A ) = A**T. * * Unchanged on exit. * * TRANSB - CHARACTER*1. * On entry, TRANSB specifies the form of op( B ) to be used in * the matrix multiplication as follows: * * TRANSB = 'N' or 'n', op( B ) = B. * * TRANSB = 'T' or 't', op( B ) = B**T. * * TRANSB = 'C' or 'c', op( B ) = B**T. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of the matrix * op( A ) and of the matrix C. M must be at least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of the matrix * op( B ) and the number of columns of the matrix C. N must be * at least zero. * Unchanged on exit. * * K - INTEGER. * On entry, K specifies the number of columns of the matrix * op( A ) and the number of rows of the matrix op( B ). K must * be at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, ka ), where ka is * k when TRANSA = 'N' or 'n', and is m otherwise. * Before entry with TRANSA = 'N' or 'n', the leading m by k * part of the array A must contain the matrix A, otherwise * the leading k by m part of the array A must contain the * matrix A. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When TRANSA = 'N' or 'n' then * LDA must be at least max( 1, m ), otherwise LDA must be at * least max( 1, k ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, kb ), where kb is * n when TRANSB = 'N' or 'n', and is k otherwise. * Before entry with TRANSB = 'N' or 'n', the leading k by n * part of the array B must contain the matrix B, otherwise * the leading n by k part of the array B must contain the * matrix B. * Unchanged on exit. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. When TRANSB = 'N' or 'n' then * LDB must be at least max( 1, k ), otherwise LDB must be at * least max( 1, n ). * Unchanged on exit. * * BETA - DOUBLE PRECISION. * On entry, BETA specifies the scalar beta. When BETA is * supplied as zero then C need not be set on input. * Unchanged on exit. * * C - DOUBLE PRECISION array of DIMENSION ( LDC, n ). * Before entry, the leading m by n part of the array C must * contain the matrix C, except when beta is zero, in which * case C need not be set on entry. * On exit, the array C is overwritten by the m by n matrix * ( alpha*op( A )*op( B ) + beta*C ). * * LDC - INTEGER. * On entry, LDC specifies the first dimension of C as declared * in the calling (sub) program. LDC must be at least * max( 1, m ). * Unchanged on exit. * * Further Details * =============== * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * ===================================================================== * * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I,INFO,J,L,NCOLA,NROWA,NROWB LOGICAL NOTA,NOTB * .. * .. Parameters .. DOUBLE PRECISION ONE,ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) * .. * * Set NOTA and NOTB as true if A and B respectively are not * transposed and set NROWA, NCOLA and NROWB as the number of rows * and columns of A and the number of rows of B respectively. * NOTA = LSAME(TRANSA,'N') NOTB = LSAME(TRANSB,'N') IF (NOTA) THEN NROWA = M NCOLA = K ELSE NROWA = K NCOLA = M END IF IF (NOTB) THEN NROWB = K ELSE NROWB = N END IF * * Test the input parameters. * INFO = 0 IF ((.NOT.NOTA) .AND. (.NOT.LSAME(TRANSA,'C')) .AND. + (.NOT.LSAME(TRANSA,'T'))) THEN INFO = 1 ELSE IF ((.NOT.NOTB) .AND. (.NOT.LSAME(TRANSB,'C')) .AND. + (.NOT.LSAME(TRANSB,'T'))) THEN INFO = 2 ELSE IF (M.LT.0) THEN INFO = 3 ELSE IF (N.LT.0) THEN INFO = 4 ELSE IF (K.LT.0) THEN INFO = 5 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN INFO = 8 ELSE IF (LDB.LT.MAX(1,NROWB)) THEN INFO = 10 ELSE IF (LDC.LT.MAX(1,M)) THEN INFO = 13 END IF IF (INFO.NE.0) THEN CALL XERBLA('DGEMM ',INFO) RETURN END IF * * Quick return if possible. * IF ((M.EQ.0) .OR. (N.EQ.0) .OR. + (((ALPHA.EQ.ZERO).OR. (K.EQ.0)).AND. (BETA.EQ.ONE))) RETURN * * And if alpha.eq.zero. * IF (ALPHA.EQ.ZERO) THEN IF (BETA.EQ.ZERO) THEN DO 20 J = 1,N DO 10 I = 1,M C(I,J) = ZERO 10 CONTINUE 20 CONTINUE ELSE DO 40 J = 1,N DO 30 I = 1,M C(I,J) = BETA*C(I,J) 30 CONTINUE 40 CONTINUE END IF RETURN END IF * * Start the operations. * IF (NOTB) THEN IF (NOTA) THEN * * Form C := alpha*A*B + beta*C. * DO 90 J = 1,N IF (BETA.EQ.ZERO) THEN DO 50 I = 1,M C(I,J) = ZERO 50 CONTINUE ELSE IF (BETA.NE.ONE) THEN DO 60 I = 1,M C(I,J) = BETA*C(I,J) 60 CONTINUE END IF DO 80 L = 1,K IF (B(L,J).NE.ZERO) THEN TEMP = ALPHA*B(L,J) DO 70 I = 1,M C(I,J) = C(I,J) + TEMP*A(I,L) 70 CONTINUE END IF 80 CONTINUE 90 CONTINUE ELSE * * Form C := alpha*A**T*B + beta*C * DO 120 J = 1,N DO 110 I = 1,M TEMP = ZERO DO 100 L = 1,K TEMP = TEMP + A(L,I)*B(L,J) 100 CONTINUE IF (BETA.EQ.ZERO) THEN C(I,J) = ALPHA*TEMP ELSE C(I,J) = ALPHA*TEMP + BETA*C(I,J) END IF 110 CONTINUE 120 CONTINUE END IF ELSE IF (NOTA) THEN * * Form C := alpha*A*B**T + beta*C * DO 170 J = 1,N IF (BETA.EQ.ZERO) THEN DO 130 I = 1,M C(I,J) = ZERO 130 CONTINUE ELSE IF (BETA.NE.ONE) THEN DO 140 I = 1,M C(I,J) = BETA*C(I,J) 140 CONTINUE END IF DO 160 L = 1,K IF (B(J,L).NE.ZERO) THEN TEMP = ALPHA*B(J,L) DO 150 I = 1,M C(I,J) = C(I,J) + TEMP*A(I,L) 150 CONTINUE END IF 160 CONTINUE 170 CONTINUE ELSE * * Form C := alpha*A**T*B**T + beta*C * DO 200 J = 1,N DO 190 I = 1,M TEMP = ZERO DO 180 L = 1,K TEMP = TEMP + A(L,I)*B(J,L) 180 CONTINUE IF (BETA.EQ.ZERO) THEN C(I,J) = ALPHA*TEMP ELSE C(I,J) = ALPHA*TEMP + BETA*C(I,J) END IF 190 CONTINUE 200 CONTINUE END IF END IF * RETURN * * End of DGEMM . * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTRMM(SIDE,UPLO,TRANSA,DIAG,M,N,ALPHA,A,LDA,B,LDB) * .. Scalar Arguments .. DOUBLE PRECISION ALPHA INTEGER LDA,LDB,M,N CHARACTER DIAG,SIDE,TRANSA,UPLO * .. * .. Array Arguments .. DOUBLE PRECISION A(LDA,*),B(LDB,*) * .. * * Purpose * ======= * * DTRMM performs one of the matrix-matrix operations * * B := alpha*op( A )*B, or B := alpha*B*op( A ), * * where alpha is a scalar, B is an m by n matrix, A is a unit, or * non-unit, upper or lower triangular matrix and op( A ) is one of * * op( A ) = A or op( A ) = A**T. * * Arguments * ========== * * SIDE - CHARACTER*1. * On entry, SIDE specifies whether op( A ) multiplies B from * the left or right as follows: * * SIDE = 'L' or 'l' B := alpha*op( A )*B. * * SIDE = 'R' or 'r' B := alpha*B*op( A ). * * Unchanged on exit. * * UPLO - CHARACTER*1. * On entry, UPLO specifies whether the matrix A is an upper or * lower triangular matrix as follows: * * UPLO = 'U' or 'u' A is an upper triangular matrix. * * UPLO = 'L' or 'l' A is a lower triangular matrix. * * Unchanged on exit. * * TRANSA - CHARACTER*1. * On entry, TRANSA specifies the form of op( A ) to be used in * the matrix multiplication as follows: * * TRANSA = 'N' or 'n' op( A ) = A. * * TRANSA = 'T' or 't' op( A ) = A**T. * * TRANSA = 'C' or 'c' op( A ) = A**T. * * Unchanged on exit. * * DIAG - CHARACTER*1. * On entry, DIAG specifies whether or not A is unit triangular * as follows: * * DIAG = 'U' or 'u' A is assumed to be unit triangular. * * DIAG = 'N' or 'n' A is not assumed to be unit * triangular. * * Unchanged on exit. * * M - INTEGER. * On entry, M specifies the number of rows of B. M must be at * least zero. * Unchanged on exit. * * N - INTEGER. * On entry, N specifies the number of columns of B. N must be * at least zero. * Unchanged on exit. * * ALPHA - DOUBLE PRECISION. * On entry, ALPHA specifies the scalar alpha. When alpha is * zero then A is not referenced and B need not be set before * entry. * Unchanged on exit. * * A - DOUBLE PRECISION array of DIMENSION ( LDA, k ), where k is m * when SIDE = 'L' or 'l' and is n when SIDE = 'R' or 'r'. * Before entry with UPLO = 'U' or 'u', the leading k by k * upper triangular part of the array A must contain the upper * triangular matrix and the strictly lower triangular part of * A is not referenced. * Before entry with UPLO = 'L' or 'l', the leading k by k * lower triangular part of the array A must contain the lower * triangular matrix and the strictly upper triangular part of * A is not referenced. * Note that when DIAG = 'U' or 'u', the diagonal elements of * A are not referenced either, but are assumed to be unity. * Unchanged on exit. * * LDA - INTEGER. * On entry, LDA specifies the first dimension of A as declared * in the calling (sub) program. When SIDE = 'L' or 'l' then * LDA must be at least max( 1, m ), when SIDE = 'R' or 'r' * then LDA must be at least max( 1, n ). * Unchanged on exit. * * B - DOUBLE PRECISION array of DIMENSION ( LDB, n ). * Before entry, the leading m by n part of the array B must * contain the matrix B, and on exit is overwritten by the * transformed matrix. * * LDB - INTEGER. * On entry, LDB specifies the first dimension of B as declared * in the calling (sub) program. LDB must be at least * max( 1, m ). * Unchanged on exit. * * Further Details * =============== * * Level 3 Blas routine. * * -- Written on 8-February-1989. * Jack Dongarra, Argonne National Laboratory. * Iain Duff, AERE Harwell. * Jeremy Du Croz, Numerical Algorithms Group Ltd. * Sven Hammarling, Numerical Algorithms Group Ltd. * * ===================================================================== * * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Local Scalars .. DOUBLE PRECISION TEMP INTEGER I,INFO,J,K,NROWA LOGICAL LSIDE,NOUNIT,UPPER * .. * .. Parameters .. DOUBLE PRECISION ONE,ZERO PARAMETER (ONE=1.0D+0,ZERO=0.0D+0) * .. * * Test the input parameters. * LSIDE = LSAME(SIDE,'L') IF (LSIDE) THEN NROWA = M ELSE NROWA = N END IF NOUNIT = LSAME(DIAG,'N') UPPER = LSAME(UPLO,'U') * INFO = 0 IF ((.NOT.LSIDE) .AND. (.NOT.LSAME(SIDE,'R'))) THEN INFO = 1 ELSE IF ((.NOT.UPPER) .AND. (.NOT.LSAME(UPLO,'L'))) THEN INFO = 2 ELSE IF ((.NOT.LSAME(TRANSA,'N')) .AND. + (.NOT.LSAME(TRANSA,'T')) .AND. + (.NOT.LSAME(TRANSA,'C'))) THEN INFO = 3 ELSE IF ((.NOT.LSAME(DIAG,'U')) .AND. (.NOT.LSAME(DIAG,'N'))) THEN INFO = 4 ELSE IF (M.LT.0) THEN INFO = 5 ELSE IF (N.LT.0) THEN INFO = 6 ELSE IF (LDA.LT.MAX(1,NROWA)) THEN INFO = 9 ELSE IF (LDB.LT.MAX(1,M)) THEN INFO = 11 END IF IF (INFO.NE.0) THEN CALL XERBLA('DTRMM ',INFO) RETURN END IF * * Quick return if possible. * IF (M.EQ.0 .OR. N.EQ.0) RETURN * * And when alpha.eq.zero. * IF (ALPHA.EQ.ZERO) THEN DO 20 J = 1,N DO 10 I = 1,M B(I,J) = ZERO 10 CONTINUE 20 CONTINUE RETURN END IF * * Start the operations. * IF (LSIDE) THEN IF (LSAME(TRANSA,'N')) THEN * * Form B := alpha*A*B. * IF (UPPER) THEN DO 50 J = 1,N DO 40 K = 1,M IF (B(K,J).NE.ZERO) THEN TEMP = ALPHA*B(K,J) DO 30 I = 1,K - 1 B(I,J) = B(I,J) + TEMP*A(I,K) 30 CONTINUE IF (NOUNIT) TEMP = TEMP*A(K,K) B(K,J) = TEMP END IF 40 CONTINUE 50 CONTINUE ELSE DO 80 J = 1,N DO 70 K = M,1,-1 IF (B(K,J).NE.ZERO) THEN TEMP = ALPHA*B(K,J) B(K,J) = TEMP IF (NOUNIT) B(K,J) = B(K,J)*A(K,K) DO 60 I = K + 1,M B(I,J) = B(I,J) + TEMP*A(I,K) 60 CONTINUE END IF 70 CONTINUE 80 CONTINUE END IF ELSE * * Form B := alpha*A**T*B. * IF (UPPER) THEN DO 110 J = 1,N DO 100 I = M,1,-1 TEMP = B(I,J) IF (NOUNIT) TEMP = TEMP*A(I,I) DO 90 K = 1,I - 1 TEMP = TEMP + A(K,I)*B(K,J) 90 CONTINUE B(I,J) = ALPHA*TEMP 100 CONTINUE 110 CONTINUE ELSE DO 140 J = 1,N DO 130 I = 1,M TEMP = B(I,J) IF (NOUNIT) TEMP = TEMP*A(I,I) DO 120 K = I + 1,M TEMP = TEMP + A(K,I)*B(K,J) 120 CONTINUE B(I,J) = ALPHA*TEMP 130 CONTINUE 140 CONTINUE END IF END IF ELSE IF (LSAME(TRANSA,'N')) THEN * * Form B := alpha*B*A. * IF (UPPER) THEN DO 180 J = N,1,-1 TEMP = ALPHA IF (NOUNIT) TEMP = TEMP*A(J,J) DO 150 I = 1,M B(I,J) = TEMP*B(I,J) 150 CONTINUE DO 170 K = 1,J - 1 IF (A(K,J).NE.ZERO) THEN TEMP = ALPHA*A(K,J) DO 160 I = 1,M B(I,J) = B(I,J) + TEMP*B(I,K) 160 CONTINUE END IF 170 CONTINUE 180 CONTINUE ELSE DO 220 J = 1,N TEMP = ALPHA IF (NOUNIT) TEMP = TEMP*A(J,J) DO 190 I = 1,M B(I,J) = TEMP*B(I,J) 190 CONTINUE DO 210 K = J + 1,N IF (A(K,J).NE.ZERO) THEN TEMP = ALPHA*A(K,J) DO 200 I = 1,M B(I,J) = B(I,J) + TEMP*B(I,K) 200 CONTINUE END IF 210 CONTINUE 220 CONTINUE END IF ELSE * * Form B := alpha*B*A**T. * IF (UPPER) THEN DO 260 K = 1,N DO 240 J = 1,K - 1 IF (A(J,K).NE.ZERO) THEN TEMP = ALPHA*A(J,K) DO 230 I = 1,M B(I,J) = B(I,J) + TEMP*B(I,K) 230 CONTINUE END IF 240 CONTINUE TEMP = ALPHA IF (NOUNIT) TEMP = TEMP*A(K,K) IF (TEMP.NE.ONE) THEN DO 250 I = 1,M B(I,K) = TEMP*B(I,K) 250 CONTINUE END IF 260 CONTINUE ELSE DO 300 K = N,1,-1 DO 280 J = K + 1,N IF (A(J,K).NE.ZERO) THEN TEMP = ALPHA*A(J,K) DO 270 I = 1,M B(I,J) = B(I,J) + TEMP*B(I,K) 270 CONTINUE END IF 280 CONTINUE TEMP = ALPHA IF (NOUNIT) TEMP = TEMP*A(K,K) IF (TEMP.NE.ONE) THEN DO 290 I = 1,M B(I,K) = TEMP*B(I,K) 290 CONTINUE END IF 300 CONTINUE END IF END IF END IF * RETURN * * End of DTRMM . * END auto/07p/src/lapack.f0000640000175000017500000312522613570013207012446 0ustar sksk* * This file contains the LAPACK 3.2.2 routines * * DGEEV (Eigenvalues & eigenvectors, used by several) * DGESVJ (Singular value decomposition, used by floquet.f90) * DGGEV (Generalized eigenvalues & eigenvectors, used by floquet.f90) * DGEES (Schur decomposition, used by HomCont, homcont.f90) * + DTRSEN (Order Schur decomposition, used by HomCont, homcont.f90) * and all their dependencies * * DLAMCH was rewritten to use Fortran-90 intrinsics, to avoid * over-optimization. * * DGESVJ was changed to not divide by zero for zero columns. * * 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 listed * in this license in the documentation and/or other materials * provided with the distribution. * * - Neither the name of the copyright holders 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. * INTEGER FUNCTION ILAENV( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) * * -- LAPACK auxiliary routine (version 3.2.1) -- * * -- April 2009 -- * * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * .. Scalar Arguments .. CHARACTER*( * ) NAME, OPTS INTEGER ISPEC, N1, N2, N3, N4 * .. * * Purpose * ======= * * ILAENV is called from the LAPACK routines to choose problem-dependent * parameters for the local environment. See ISPEC for a description of * the parameters. * * ILAENV returns an INTEGER * if ILAENV >= 0: ILAENV returns the value of the parameter specified by ISPEC * if ILAENV < 0: if ILAENV = -k, the k-th argument had an illegal value. * * This version provides a set of parameters which should give good, * but not optimal, performance on many of the currently available * computers. Users are encouraged to modify this subroutine to set * the tuning parameters for their particular machine using the option * and problem size information in the arguments. * * This routine will not function correctly if it is converted to all * lower case. Converting it to all upper case is allowed. * * Arguments * ========= * * ISPEC (input) INTEGER * Specifies the parameter to be returned as the value of * ILAENV. * = 1: the optimal blocksize; if this value is 1, an unblocked * algorithm will give the best performance. * = 2: the minimum block size for which the block routine * should be used; if the usable block size is less than * this value, an unblocked routine should be used. * = 3: the crossover point (in a block routine, for N less * than this value, an unblocked routine should be used) * = 4: the number of shifts, used in the nonsymmetric * eigenvalue routines (DEPRECATED) * = 5: the minimum column dimension for blocking to be used; * rectangular blocks must have dimension at least k by m, * where k is given by ILAENV(2,...) and m by ILAENV(5,...) * = 6: the crossover point for the SVD (when reducing an m by n * matrix to bidiagonal form, if max(m,n)/min(m,n) exceeds * this value, a QR factorization is used first to reduce * the matrix to a triangular form.) * = 7: the number of processors * = 8: the crossover point for the multishift QR method * for nonsymmetric eigenvalue problems (DEPRECATED) * = 9: maximum size of the subproblems at the bottom of the * computation tree in the divide-and-conquer algorithm * (used by xGELSD and xGESDD) * =10: ieee NaN arithmetic can be trusted not to trap * =11: infinity arithmetic can be trusted not to trap * 12 <= ISPEC <= 16: * xHSEQR or one of its subroutines, * see IPARMQ for detailed explanation * * NAME (input) CHARACTER*(*) * The name of the calling subroutine, in either upper case or * lower case. * * OPTS (input) CHARACTER*(*) * The character options to the subroutine NAME, concatenated * into a single character string. For example, UPLO = 'U', * TRANS = 'T', and DIAG = 'N' for a triangular routine would * be specified as OPTS = 'UTN'. * * N1 (input) INTEGER * N2 (input) INTEGER * N3 (input) INTEGER * N4 (input) INTEGER * Problem dimensions for the subroutine NAME; these may not all * be required. * * Further Details * =============== * * The following conventions have been used when calling ILAENV from the * LAPACK routines: * 1) OPTS is a concatenation of all of the character options to * subroutine NAME, in the same order that they appear in the * argument list for NAME, even if they are not used in determining * the value of the parameter specified by ISPEC. * 2) The problem dimensions N1, N2, N3, N4 are specified in the order * that they appear in the argument list for NAME. N1 is used * first, N2 second, and so on, and unused problem dimensions are * passed a value of -1. * 3) The parameter value returned by ILAENV is checked for validity in * the calling subroutine. For example, ILAENV is used to retrieve * the optimal blocksize for STRTRI as follows: * * NB = ILAENV( 1, 'STRTRI', UPLO // DIAG, N, -1, -1, -1 ) * IF( NB.LE.1 ) NB = MAX( 1, N ) * * ===================================================================== * * .. Local Scalars .. INTEGER I, IC, IZ, NB, NBMIN, NX LOGICAL CNAME, SNAME CHARACTER C1*1, C2*2, C4*2, C3*3, SUBNAM*6 * .. * .. Intrinsic Functions .. INTRINSIC CHAR, ICHAR, INT, MIN, REAL * .. * .. External Functions .. INTEGER IEEECK, IPARMQ EXTERNAL IEEECK, IPARMQ * .. * .. Executable Statements .. * GO TO ( 10, 10, 10, 80, 90, 100, 110, 120, $ 130, 140, 150, 160, 160, 160, 160, 160 )ISPEC * * Invalid value for ISPEC * ILAENV = -1 RETURN * 10 CONTINUE * * Convert NAME to upper case if the first character is lower case. * ILAENV = 1 SUBNAM = NAME IC = ICHAR( SUBNAM( 1: 1 ) ) IZ = ICHAR( 'Z' ) IF( IZ.EQ.90 .OR. IZ.EQ.122 ) THEN * * ASCII character set * IF( IC.GE.97 .AND. IC.LE.122 ) THEN SUBNAM( 1: 1 ) = CHAR( IC-32 ) DO 20 I = 2, 6 IC = ICHAR( SUBNAM( I: I ) ) IF( IC.GE.97 .AND. IC.LE.122 ) $ SUBNAM( I: I ) = CHAR( IC-32 ) 20 CONTINUE END IF * ELSE IF( IZ.EQ.233 .OR. IZ.EQ.169 ) THEN * * EBCDIC character set * IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) ) THEN SUBNAM( 1: 1 ) = CHAR( IC+64 ) DO 30 I = 2, 6 IC = ICHAR( SUBNAM( I: I ) ) IF( ( IC.GE.129 .AND. IC.LE.137 ) .OR. $ ( IC.GE.145 .AND. IC.LE.153 ) .OR. $ ( IC.GE.162 .AND. IC.LE.169 ) )SUBNAM( I: $ I ) = CHAR( IC+64 ) 30 CONTINUE END IF * ELSE IF( IZ.EQ.218 .OR. IZ.EQ.250 ) THEN * * Prime machines: ASCII+128 * IF( IC.GE.225 .AND. IC.LE.250 ) THEN SUBNAM( 1: 1 ) = CHAR( IC-32 ) DO 40 I = 2, 6 IC = ICHAR( SUBNAM( I: I ) ) IF( IC.GE.225 .AND. IC.LE.250 ) $ SUBNAM( I: I ) = CHAR( IC-32 ) 40 CONTINUE END IF END IF * C1 = SUBNAM( 1: 1 ) SNAME = C1.EQ.'S' .OR. C1.EQ.'D' CNAME = C1.EQ.'C' .OR. C1.EQ.'Z' IF( .NOT.( CNAME .OR. SNAME ) ) $ RETURN C2 = SUBNAM( 2: 3 ) C3 = SUBNAM( 4: 6 ) C4 = C3( 2: 3 ) * GO TO ( 50, 60, 70 )ISPEC * 50 CONTINUE * * ISPEC = 1: block size * * In these examples, separate code is provided for setting NB for * real and complex. We assume that NB will take the same value in * single or double precision. * NB = 1 * IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. $ C3.EQ.'QLF' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NB = 32 ELSE NB = 32 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'PO' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NB = 32 ELSE IF( SNAME .AND. C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRF' ) THEN NB = 64 ELSE IF( C3.EQ.'TRD' ) THEN NB = 32 ELSE IF( C3.EQ.'GST' ) THEN NB = 64 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NB = 32 END IF ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NB = 32 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NB = 32 END IF ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NB = 32 END IF END IF ELSE IF( C2.EQ.'GB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N4.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'PB' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF ELSE IF( N2.LE.64 ) THEN NB = 1 ELSE NB = 32 END IF END IF END IF ELSE IF( C2.EQ.'TR' ) THEN IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( C2.EQ.'LA' ) THEN IF( C3.EQ.'UUM' ) THEN IF( SNAME ) THEN NB = 64 ELSE NB = 64 END IF END IF ELSE IF( SNAME .AND. C2.EQ.'ST' ) THEN IF( C3.EQ.'EBZ' ) THEN NB = 1 END IF END IF ILAENV = NB RETURN * 60 CONTINUE * * ISPEC = 2: minimum block size * NBMIN = 2 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. $ 'QLF' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF ELSE IF( C3.EQ.'TRI' ) THEN IF( SNAME ) THEN NBMIN = 2 ELSE NBMIN = 2 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( C3.EQ.'TRF' ) THEN IF( SNAME ) THEN NBMIN = 8 ELSE NBMIN = 8 END IF ELSE IF( SNAME .AND. C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NBMIN = 2 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NBMIN = 2 END IF ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NBMIN = 2 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NBMIN = 2 END IF ELSE IF( C3( 1: 1 ).EQ.'M' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NBMIN = 2 END IF END IF END IF ILAENV = NBMIN RETURN * 70 CONTINUE * * ISPEC = 3: crossover point * NX = 0 IF( C2.EQ.'GE' ) THEN IF( C3.EQ.'QRF' .OR. C3.EQ.'RQF' .OR. C3.EQ.'LQF' .OR. C3.EQ. $ 'QLF' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'HRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF ELSE IF( C3.EQ.'BRD' ) THEN IF( SNAME ) THEN NX = 128 ELSE NX = 128 END IF END IF ELSE IF( C2.EQ.'SY' ) THEN IF( SNAME .AND. C3.EQ.'TRD' ) THEN NX = 32 END IF ELSE IF( CNAME .AND. C2.EQ.'HE' ) THEN IF( C3.EQ.'TRD' ) THEN NX = 32 END IF ELSE IF( SNAME .AND. C2.EQ.'OR' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NX = 128 END IF END IF ELSE IF( CNAME .AND. C2.EQ.'UN' ) THEN IF( C3( 1: 1 ).EQ.'G' ) THEN IF( C4.EQ.'QR' .OR. C4.EQ.'RQ' .OR. C4.EQ.'LQ' .OR. C4.EQ. $ 'QL' .OR. C4.EQ.'HR' .OR. C4.EQ.'TR' .OR. C4.EQ.'BR' ) $ THEN NX = 128 END IF END IF END IF ILAENV = NX RETURN * 80 CONTINUE * * ISPEC = 4: number of shifts (used by xHSEQR) * ILAENV = 6 RETURN * 90 CONTINUE * * ISPEC = 5: minimum column dimension (not used) * ILAENV = 2 RETURN * 100 CONTINUE * * ISPEC = 6: crossover point for SVD (used by xGELSS and xGESVD) * ILAENV = INT( REAL( MIN( N1, N2 ) )*1.6E0 ) RETURN * 110 CONTINUE * * ISPEC = 7: number of processors (not used) * ILAENV = 1 RETURN * 120 CONTINUE * * ISPEC = 8: crossover point for multishift (used by xHSEQR) * ILAENV = 50 RETURN * 130 CONTINUE * * ISPEC = 9: maximum size of the subproblems at the bottom of the * computation tree in the divide-and-conquer algorithm * (used by xGELSD and xGESDD) * ILAENV = 25 RETURN * 140 CONTINUE * * ISPEC = 10: ieee NaN arithmetic can be trusted not to trap * * ILAENV = 0 ILAENV = 1 IF( ILAENV.EQ.1 ) THEN ILAENV = IEEECK( 1, 0.0, 1.0 ) END IF RETURN * 150 CONTINUE * * ISPEC = 11: infinity arithmetic can be trusted not to trap * * ILAENV = 0 ILAENV = 1 IF( ILAENV.EQ.1 ) THEN ILAENV = IEEECK( 0, 0.0, 1.0 ) END IF RETURN * 160 CONTINUE * * 12 <= ISPEC <= 16: xHSEQR or one of its subroutines. * ILAENV = IPARMQ( ISPEC, NAME, OPTS, N1, N2, N3, N4 ) RETURN * * End of ILAENV * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * NOTE (Bart Oldeman): routine changed to use Fortran90 intrinsics * IMPLICIT NONE * .. Scalar Arguments .. CHARACTER CMACH * .. * * Purpose * ======= * * DLAMCH determines double precision machine parameters. * * Arguments * ========= * * CMACH (input) CHARACTER*1 * Specifies the value to be returned by DLAMCH: * = 'E' or 'e', DLAMCH := eps * = 'S' or 's , DLAMCH := sfmin * = 'B' or 'b', DLAMCH := base * = 'P' or 'p', DLAMCH := eps*base * = 'N' or 'n', DLAMCH := t * = 'R' or 'r', DLAMCH := rnd * = 'M' or 'm', DLAMCH := emin * = 'U' or 'u', DLAMCH := rmin * = 'L' or 'l', DLAMCH := emax * = 'O' or 'o', DLAMCH := rmax * * where * * eps = relative machine precision * sfmin = safe minimum, such that 1/sfmin does not overflow * base = base of the machine * prec = eps*base * t = number of (base) digits in the mantissa * rnd = 1.0 when rounding occurs in addition, 0.0 otherwise * emin = minimum exponent before (gradual) underflow * rmin = underflow threshold - base**(emin-1) * emax = largest exponent before overflow * rmax = overflow threshold - (base**emax)*(1-eps) * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. LOGICAL FIRST DOUBLE PRECISION EPS, EPS2, PREC, RMACH, RND, SFMIN, SMALL, RMAX * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Save statement .. SAVE FIRST, EPS, SFMIN, RND, PREC * .. * .. Data statements .. DATA FIRST / .TRUE. / * .. * .. Executable Statements .. * IF( FIRST ) THEN * * Determine whether rounding or chopping occurs, by adding a * bit less than epsilon/2 and a bit more than epsilon/2 to 1. * EPS2 = EPSILON(ONE) / 2 ! use FRACTION to avoid extended precision bits IF( FRACTION( ONE + (EPS2 - EPS2 / 50) ).EQ.FRACTION(ONE) .AND. $ FRACTION( ONE + (EPS2 + EPS2 / 50) ).NE.FRACTION(ONE)) THEN RND = ONE EPS = EPSILON(ONE) / 2 ELSE RND = ZERO EPS = EPSILON(ONE) END IF PREC = EPS*RADIX(ONE) RMAX = HUGE(ONE) SMALL = ONE / RMAX IF( SMALL.GE.TINY(ONE) ) THEN * * Use SMALL plus a bit, to avoid the possibility of rounding * causing overflow when computing 1/sfmin. * SFMIN = SMALL*( ONE+EPS ) ELSE SFMIN = TINY(ONE) END IF END IF * IF( LSAME( CMACH, 'E' ) ) THEN RMACH = EPS ELSE IF( LSAME( CMACH, 'S' ) ) THEN RMACH = SFMIN ELSE IF( LSAME( CMACH, 'B' ) ) THEN RMACH = RADIX(ONE) ELSE IF( LSAME( CMACH, 'P' ) ) THEN RMACH = PREC ELSE IF( LSAME( CMACH, 'N' ) ) THEN RMACH = DIGITS(ONE) ELSE IF( LSAME( CMACH, 'R' ) ) THEN RMACH = RND ELSE IF( LSAME( CMACH, 'M' ) ) THEN RMACH = MINEXPONENT(ONE) ELSE IF( LSAME( CMACH, 'U' ) ) THEN RMACH = TINY(ONE) ELSE IF( LSAME( CMACH, 'L' ) ) THEN RMACH = MAXEXPONENT(ONE) ELSE IF( LSAME( CMACH, 'O' ) ) THEN RMACH = HUGE(ONE) END IF * DLAMCH = RMACH FIRST = .FALSE. RETURN * * End of DLAMCH * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEEV( JOBVL, JOBVR, N, A, LDA, WR, WI, VL, LDVL, VR, $ LDVR, WORK, LWORK, INFO ) * * -- LAPACK driver routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBVL, JOBVR INTEGER INFO, LDA, LDVL, LDVR, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), VL( LDVL, * ), VR( LDVR, * ), $ WI( * ), WORK( * ), WR( * ) * .. * * Purpose * ======= * * DGEEV computes for an N-by-N real nonsymmetric matrix A, the * eigenvalues and, optionally, the left and/or right eigenvectors. * * The right eigenvector v(j) of A satisfies * A * v(j) = lambda(j) * v(j) * where lambda(j) is its eigenvalue. * The left eigenvector u(j) of A satisfies * u(j)**H * A = lambda(j) * u(j)**H * where u(j)**H denotes the conjugate transpose of u(j). * * The computed eigenvectors are normalized to have Euclidean norm * equal to 1 and largest component real. * * Arguments * ========= * * JOBVL (input) CHARACTER*1 * = 'N': left eigenvectors of A are not computed; * = 'V': left eigenvectors of A are computed. * * JOBVR (input) CHARACTER*1 * = 'N': right eigenvectors of A are not computed; * = 'V': right eigenvectors of A are computed. * * N (input) INTEGER * The order of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the N-by-N matrix A. * On exit, A has been overwritten. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * WR (output) DOUBLE PRECISION array, dimension (N) * WI (output) DOUBLE PRECISION array, dimension (N) * WR and WI contain the real and imaginary parts, * respectively, of the computed eigenvalues. Complex * conjugate pairs of eigenvalues appear consecutively * with the eigenvalue having the positive imaginary part * first. * * VL (output) DOUBLE PRECISION array, dimension (LDVL,N) * If JOBVL = 'V', the left eigenvectors u(j) are stored one * after another in the columns of VL, in the same order * as their eigenvalues. * If JOBVL = 'N', VL is not referenced. * If the j-th eigenvalue is real, then u(j) = VL(:,j), * the j-th column of VL. * If the j-th and (j+1)-st eigenvalues form a complex * conjugate pair, then u(j) = VL(:,j) + i*VL(:,j+1) and * u(j+1) = VL(:,j) - i*VL(:,j+1). * * LDVL (input) INTEGER * The leading dimension of the array VL. LDVL >= 1; if * JOBVL = 'V', LDVL >= N. * * VR (output) DOUBLE PRECISION array, dimension (LDVR,N) * If JOBVR = 'V', the right eigenvectors v(j) are stored one * after another in the columns of VR, in the same order * as their eigenvalues. * If JOBVR = 'N', VR is not referenced. * If the j-th eigenvalue is real, then v(j) = VR(:,j), * the j-th column of VR. * If the j-th and (j+1)-st eigenvalues form a complex * conjugate pair, then v(j) = VR(:,j) + i*VR(:,j+1) and * v(j+1) = VR(:,j) - i*VR(:,j+1). * * LDVR (input) INTEGER * The leading dimension of the array VR. LDVR >= 1; if * JOBVR = 'V', LDVR >= N. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,3*N), and * if JOBVL = 'V' or JOBVR = 'V', LWORK >= 4*N. For good * performance, LWORK must generally be larger. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * > 0: if INFO = i, the QR algorithm failed to compute all the * eigenvalues, and no eigenvectors have been computed; * elements i+1:N of WR and WI contain eigenvalues which * have converged. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) * .. * .. Local Scalars .. LOGICAL LQUERY, SCALEA, WANTVL, WANTVR CHARACTER SIDE INTEGER HSWORK, I, IBAL, IERR, IHI, ILO, ITAU, IWRK, K, $ MAXWRK, MINWRK, NOUT DOUBLE PRECISION ANRM, BIGNUM, CS, CSCALE, EPS, R, SCL, SMLNUM, $ SN * .. * .. Local Arrays .. LOGICAL SELECT( 1 ) DOUBLE PRECISION DUM( 1 ) * .. * .. External Subroutines .. EXTERNAL DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLABAD, DLACPY, $ DLARTG, DLASCL, DORGHR, DROT, DSCAL, DTREVC, $ XERBLA * .. * .. External Functions .. LOGICAL LSAME INTEGER IDAMAX, ILAENV DOUBLE PRECISION DLAMCH, DLANGE, DLAPY2, DNRM2 EXTERNAL LSAME, IDAMAX, ILAENV, DLAMCH, DLANGE, DLAPY2, $ DNRM2 * .. * .. Intrinsic Functions .. INTRINSIC MAX, SQRT * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 LQUERY = ( LWORK.EQ.-1 ) WANTVL = LSAME( JOBVL, 'V' ) WANTVR = LSAME( JOBVR, 'V' ) IF( ( .NOT.WANTVL ) .AND. ( .NOT.LSAME( JOBVL, 'N' ) ) ) THEN INFO = -1 ELSE IF( ( .NOT.WANTVR ) .AND. ( .NOT.LSAME( JOBVR, 'N' ) ) ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LDVL.LT.1 .OR. ( WANTVL .AND. LDVL.LT.N ) ) THEN INFO = -9 ELSE IF( LDVR.LT.1 .OR. ( WANTVR .AND. LDVR.LT.N ) ) THEN INFO = -11 END IF * * Compute workspace * (Note: Comments in the code beginning "Workspace:" describe the * minimal amount of workspace needed at that point in the code, * as well as the preferred amount for good performance. * NB refers to the optimal block size for the immediately * following subroutine, as returned by ILAENV. * HSWORK refers to the workspace preferred by DHSEQR, as * calculated below. HSWORK is computed assuming ILO=1 and IHI=N, * the worst case.) * IF( INFO.EQ.0 ) THEN IF( N.EQ.0 ) THEN MINWRK = 1 MAXWRK = 1 ELSE MAXWRK = 2*N + N*ILAENV( 1, 'DGEHRD', ' ', N, 1, N, 0 ) IF( WANTVL ) THEN MINWRK = 4*N MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1, $ 'DORGHR', ' ', N, 1, N, -1 ) ) CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VL, LDVL, $ WORK, -1, INFO ) HSWORK = WORK( 1 ) MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) MAXWRK = MAX( MAXWRK, 4*N ) ELSE IF( WANTVR ) THEN MINWRK = 4*N MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1, $ 'DORGHR', ' ', N, 1, N, -1 ) ) CALL DHSEQR( 'S', 'V', N, 1, N, A, LDA, WR, WI, VR, LDVR, $ WORK, -1, INFO ) HSWORK = WORK( 1 ) MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) MAXWRK = MAX( MAXWRK, 4*N ) ELSE MINWRK = 3*N CALL DHSEQR( 'E', 'N', N, 1, N, A, LDA, WR, WI, VR, LDVR, $ WORK, -1, INFO ) HSWORK = WORK( 1 ) MAXWRK = MAX( MAXWRK, N + 1, N + HSWORK ) END IF MAXWRK = MAX( MAXWRK, MINWRK ) END IF WORK( 1 ) = MAXWRK * IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN INFO = -13 END IF END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEEV ', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN * * Get machine constants * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) BIGNUM = ONE / SMLNUM CALL DLABAD( SMLNUM, BIGNUM ) SMLNUM = SQRT( SMLNUM ) / EPS BIGNUM = ONE / SMLNUM * * Scale A if max element outside range [SMLNUM,BIGNUM] * ANRM = DLANGE( 'M', N, N, A, LDA, DUM ) SCALEA = .FALSE. IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN SCALEA = .TRUE. CSCALE = SMLNUM ELSE IF( ANRM.GT.BIGNUM ) THEN SCALEA = .TRUE. CSCALE = BIGNUM END IF IF( SCALEA ) $ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR ) * * Balance the matrix * (Workspace: need N) * IBAL = 1 CALL DGEBAL( 'B', N, A, LDA, ILO, IHI, WORK( IBAL ), IERR ) * * Reduce to upper Hessenberg form * (Workspace: need 3*N, prefer 2*N+N*NB) * ITAU = IBAL + N IWRK = ITAU + N CALL DGEHRD( N, ILO, IHI, A, LDA, WORK( ITAU ), WORK( IWRK ), $ LWORK-IWRK+1, IERR ) * IF( WANTVL ) THEN * * Want left eigenvectors * Copy Householder vectors to VL * SIDE = 'L' CALL DLACPY( 'L', N, N, A, LDA, VL, LDVL ) * * Generate orthogonal matrix in VL * (Workspace: need 3*N-1, prefer 2*N+(N-1)*NB) * CALL DORGHR( N, ILO, IHI, VL, LDVL, WORK( ITAU ), WORK( IWRK ), $ LWORK-IWRK+1, IERR ) * * Perform QR iteration, accumulating Schur vectors in VL * (Workspace: need N+1, prefer N+HSWORK (see comments) ) * IWRK = ITAU CALL DHSEQR( 'S', 'V', N, ILO, IHI, A, LDA, WR, WI, VL, LDVL, $ WORK( IWRK ), LWORK-IWRK+1, INFO ) * IF( WANTVR ) THEN * * Want left and right eigenvectors * Copy Schur vectors to VR * SIDE = 'B' CALL DLACPY( 'F', N, N, VL, LDVL, VR, LDVR ) END IF * ELSE IF( WANTVR ) THEN * * Want right eigenvectors * Copy Householder vectors to VR * SIDE = 'R' CALL DLACPY( 'L', N, N, A, LDA, VR, LDVR ) * * Generate orthogonal matrix in VR * (Workspace: need 3*N-1, prefer 2*N+(N-1)*NB) * CALL DORGHR( N, ILO, IHI, VR, LDVR, WORK( ITAU ), WORK( IWRK ), $ LWORK-IWRK+1, IERR ) * * Perform QR iteration, accumulating Schur vectors in VR * (Workspace: need N+1, prefer N+HSWORK (see comments) ) * IWRK = ITAU CALL DHSEQR( 'S', 'V', N, ILO, IHI, A, LDA, WR, WI, VR, LDVR, $ WORK( IWRK ), LWORK-IWRK+1, INFO ) * ELSE * * Compute eigenvalues only * (Workspace: need N+1, prefer N+HSWORK (see comments) ) * IWRK = ITAU CALL DHSEQR( 'E', 'N', N, ILO, IHI, A, LDA, WR, WI, VR, LDVR, $ WORK( IWRK ), LWORK-IWRK+1, INFO ) END IF * * If INFO > 0 from DHSEQR, then quit * IF( INFO.GT.0 ) $ GO TO 50 * IF( WANTVL .OR. WANTVR ) THEN * * Compute left and/or right eigenvectors * (Workspace: need 4*N) * CALL DTREVC( SIDE, 'B', SELECT, N, A, LDA, VL, LDVL, VR, LDVR, $ N, NOUT, WORK( IWRK ), IERR ) END IF * IF( WANTVL ) THEN * * Undo balancing of left eigenvectors * (Workspace: need N) * CALL DGEBAK( 'B', 'L', N, ILO, IHI, WORK( IBAL ), N, VL, LDVL, $ IERR ) * * Normalize left eigenvectors and make largest component real * DO 20 I = 1, N IF( WI( I ).EQ.ZERO ) THEN SCL = ONE / DNRM2( N, VL( 1, I ), 1 ) CALL DSCAL( N, SCL, VL( 1, I ), 1 ) ELSE IF( WI( I ).GT.ZERO ) THEN SCL = ONE / DLAPY2( DNRM2( N, VL( 1, I ), 1 ), $ DNRM2( N, VL( 1, I+1 ), 1 ) ) CALL DSCAL( N, SCL, VL( 1, I ), 1 ) CALL DSCAL( N, SCL, VL( 1, I+1 ), 1 ) DO 10 K = 1, N WORK( IWRK+K-1 ) = VL( K, I )**2 + VL( K, I+1 )**2 10 CONTINUE K = IDAMAX( N, WORK( IWRK ), 1 ) CALL DLARTG( VL( K, I ), VL( K, I+1 ), CS, SN, R ) CALL DROT( N, VL( 1, I ), 1, VL( 1, I+1 ), 1, CS, SN ) VL( K, I+1 ) = ZERO END IF 20 CONTINUE END IF * IF( WANTVR ) THEN * * Undo balancing of right eigenvectors * (Workspace: need N) * CALL DGEBAK( 'B', 'R', N, ILO, IHI, WORK( IBAL ), N, VR, LDVR, $ IERR ) * * Normalize right eigenvectors and make largest component real * DO 40 I = 1, N IF( WI( I ).EQ.ZERO ) THEN SCL = ONE / DNRM2( N, VR( 1, I ), 1 ) CALL DSCAL( N, SCL, VR( 1, I ), 1 ) ELSE IF( WI( I ).GT.ZERO ) THEN SCL = ONE / DLAPY2( DNRM2( N, VR( 1, I ), 1 ), $ DNRM2( N, VR( 1, I+1 ), 1 ) ) CALL DSCAL( N, SCL, VR( 1, I ), 1 ) CALL DSCAL( N, SCL, VR( 1, I+1 ), 1 ) DO 30 K = 1, N WORK( IWRK+K-1 ) = VR( K, I )**2 + VR( K, I+1 )**2 30 CONTINUE K = IDAMAX( N, WORK( IWRK ), 1 ) CALL DLARTG( VR( K, I ), VR( K, I+1 ), CS, SN, R ) CALL DROT( N, VR( 1, I ), 1, VR( 1, I+1 ), 1, CS, SN ) VR( K, I+1 ) = ZERO END IF 40 CONTINUE END IF * * Undo scaling if necessary * 50 CONTINUE IF( SCALEA ) THEN CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WR( INFO+1 ), $ MAX( N-INFO, 1 ), IERR ) CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-INFO, 1, WI( INFO+1 ), $ MAX( N-INFO, 1 ), IERR ) IF( INFO.GT.0 ) THEN CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WR, N, $ IERR ) CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WI, N, $ IERR ) END IF END IF * WORK( 1 ) = MAXWRK RETURN * * End of DGEEV * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGGEV( JOBVL, JOBVR, N, A, LDA, B, LDB, ALPHAR, ALPHAI, $ BETA, VL, LDVL, VR, LDVR, WORK, LWORK, INFO ) * * -- LAPACK driver routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBVL, JOBVR INTEGER INFO, LDA, LDB, LDVL, LDVR, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), ALPHAI( * ), ALPHAR( * ), $ B( LDB, * ), BETA( * ), VL( LDVL, * ), $ VR( LDVR, * ), WORK( * ) * .. * * Purpose * ======= * * DGGEV computes for a pair of N-by-N real nonsymmetric matrices (A,B) * the generalized eigenvalues, and optionally, the left and/or right * generalized eigenvectors. * * A generalized eigenvalue for a pair of matrices (A,B) is a scalar * lambda or a ratio alpha/beta = lambda, such that A - lambda*B is * singular. It is usually represented as the pair (alpha,beta), as * there is a reasonable interpretation for beta=0, and even for both * being zero. * * The right eigenvector v(j) corresponding to the eigenvalue lambda(j) * of (A,B) satisfies * * A * v(j) = lambda(j) * B * v(j). * * The left eigenvector u(j) corresponding to the eigenvalue lambda(j) * of (A,B) satisfies * * u(j)**H * A = lambda(j) * u(j)**H * B . * * where u(j)**H is the conjugate-transpose of u(j). * * * Arguments * ========= * * JOBVL (input) CHARACTER*1 * = 'N': do not compute the left generalized eigenvectors; * = 'V': compute the left generalized eigenvectors. * * JOBVR (input) CHARACTER*1 * = 'N': do not compute the right generalized eigenvectors; * = 'V': compute the right generalized eigenvectors. * * N (input) INTEGER * The order of the matrices A, B, VL, and VR. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA, N) * On entry, the matrix A in the pair (A,B). * On exit, A has been overwritten. * * LDA (input) INTEGER * The leading dimension of A. LDA >= max(1,N). * * B (input/output) DOUBLE PRECISION array, dimension (LDB, N) * On entry, the matrix B in the pair (A,B). * On exit, B has been overwritten. * * LDB (input) INTEGER * The leading dimension of B. LDB >= max(1,N). * * ALPHAR (output) DOUBLE PRECISION array, dimension (N) * ALPHAI (output) DOUBLE PRECISION array, dimension (N) * BETA (output) DOUBLE PRECISION array, dimension (N) * On exit, (ALPHAR(j) + ALPHAI(j)*i)/BETA(j), j=1,...,N, will * be the generalized eigenvalues. If ALPHAI(j) is zero, then * the j-th eigenvalue is real; if positive, then the j-th and * (j+1)-st eigenvalues are a complex conjugate pair, with * ALPHAI(j+1) negative. * * Note: the quotients ALPHAR(j)/BETA(j) and ALPHAI(j)/BETA(j) * may easily over- or underflow, and BETA(j) may even be zero. * Thus, the user should avoid naively computing the ratio * alpha/beta. However, ALPHAR and ALPHAI will be always less * than and usually comparable with norm(A) in magnitude, and * BETA always less than and usually comparable with norm(B). * * VL (output) DOUBLE PRECISION array, dimension (LDVL,N) * If JOBVL = 'V', the left eigenvectors u(j) are stored one * after another in the columns of VL, in the same order as * their eigenvalues. If the j-th eigenvalue is real, then * u(j) = VL(:,j), the j-th column of VL. If the j-th and * (j+1)-th eigenvalues form a complex conjugate pair, then * u(j) = VL(:,j)+i*VL(:,j+1) and u(j+1) = VL(:,j)-i*VL(:,j+1). * Each eigenvector is scaled so the largest component has * abs(real part)+abs(imag. part)=1. * Not referenced if JOBVL = 'N'. * * LDVL (input) INTEGER * The leading dimension of the matrix VL. LDVL >= 1, and * if JOBVL = 'V', LDVL >= N. * * VR (output) DOUBLE PRECISION array, dimension (LDVR,N) * If JOBVR = 'V', the right eigenvectors v(j) are stored one * after another in the columns of VR, in the same order as * their eigenvalues. If the j-th eigenvalue is real, then * v(j) = VR(:,j), the j-th column of VR. If the j-th and * (j+1)-th eigenvalues form a complex conjugate pair, then * v(j) = VR(:,j)+i*VR(:,j+1) and v(j+1) = VR(:,j)-i*VR(:,j+1). * Each eigenvector is scaled so the largest component has * abs(real part)+abs(imag. part)=1. * Not referenced if JOBVR = 'N'. * * LDVR (input) INTEGER * The leading dimension of the matrix VR. LDVR >= 1, and * if JOBVR = 'V', LDVR >= N. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,8*N). * For good performance, LWORK must generally be larger. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * = 1,...,N: * The QZ iteration failed. No eigenvectors have been * calculated, but ALPHAR(j), ALPHAI(j), and BETA(j) * should be correct for j=INFO+1,...,N. * > N: =N+1: other than QZ iteration failed in DHGEQZ. * =N+2: error return from DTGEVC. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL ILASCL, ILBSCL, ILV, ILVL, ILVR, LQUERY CHARACTER CHTEMP INTEGER ICOLS, IERR, IHI, IJOBVL, IJOBVR, ILEFT, ILO, $ IN, IRIGHT, IROWS, ITAU, IWRK, JC, JR, MAXWRK, $ MINWRK DOUBLE PRECISION ANRM, ANRMTO, BIGNUM, BNRM, BNRMTO, EPS, $ SMLNUM, TEMP * .. * .. Local Arrays .. LOGICAL LDUMMA( 1 ) * .. * .. External Subroutines .. EXTERNAL DGEQRF, DGGBAK, DGGBAL, DGGHRD, DHGEQZ, DLABAD, $ DLACPY,DLASCL, DLASET, DORGQR, DORMQR, DTGEVC, $ XERBLA * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV DOUBLE PRECISION DLAMCH, DLANGE EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, SQRT * .. * .. Executable Statements .. * * Decode the input arguments * IF( LSAME( JOBVL, 'N' ) ) THEN IJOBVL = 1 ILVL = .FALSE. ELSE IF( LSAME( JOBVL, 'V' ) ) THEN IJOBVL = 2 ILVL = .TRUE. ELSE IJOBVL = -1 ILVL = .FALSE. END IF * IF( LSAME( JOBVR, 'N' ) ) THEN IJOBVR = 1 ILVR = .FALSE. ELSE IF( LSAME( JOBVR, 'V' ) ) THEN IJOBVR = 2 ILVR = .TRUE. ELSE IJOBVR = -1 ILVR = .FALSE. END IF ILV = ILVL .OR. ILVR * * Test the input arguments * INFO = 0 LQUERY = ( LWORK.EQ.-1 ) IF( IJOBVL.LE.0 ) THEN INFO = -1 ELSE IF( IJOBVR.LE.0 ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -7 ELSE IF( LDVL.LT.1 .OR. ( ILVL .AND. LDVL.LT.N ) ) THEN INFO = -12 ELSE IF( LDVR.LT.1 .OR. ( ILVR .AND. LDVR.LT.N ) ) THEN INFO = -14 END IF * * Compute workspace * (Note: Comments in the code beginning "Workspace:" describe the * minimal amount of workspace needed at that point in the code, * as well as the preferred amount for good performance. * NB refers to the optimal block size for the immediately * following subroutine, as returned by ILAENV. The workspace is * computed assuming ILO = 1 and IHI = N, the worst case.) * IF( INFO.EQ.0 ) THEN MINWRK = MAX( 1, 8*N ) MAXWRK = MAX( 1, N*( 7 + $ ILAENV( 1, 'DGEQRF', ' ', N, 1, N, 0 ) ) ) MAXWRK = MAX( MAXWRK, N*( 7 + $ ILAENV( 1, 'DORMQR', ' ', N, 1, N, 0 ) ) ) IF( ILVL ) THEN MAXWRK = MAX( MAXWRK, N*( 7 + $ ILAENV( 1, 'DORGQR', ' ', N, 1, N, -1 ) ) ) END IF WORK( 1 ) = MAXWRK * IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) $ INFO = -16 END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGGEV ', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN * * Get machine constants * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) BIGNUM = ONE / SMLNUM CALL DLABAD( SMLNUM, BIGNUM ) SMLNUM = SQRT( SMLNUM ) / EPS BIGNUM = ONE / SMLNUM * * Scale A if max element outside range [SMLNUM,BIGNUM] * ANRM = DLANGE( 'M', N, N, A, LDA, WORK ) ILASCL = .FALSE. IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN ANRMTO = SMLNUM ILASCL = .TRUE. ELSE IF( ANRM.GT.BIGNUM ) THEN ANRMTO = BIGNUM ILASCL = .TRUE. END IF IF( ILASCL ) $ CALL DLASCL( 'G', 0, 0, ANRM, ANRMTO, N, N, A, LDA, IERR ) * * Scale B if max element outside range [SMLNUM,BIGNUM] * BNRM = DLANGE( 'M', N, N, B, LDB, WORK ) ILBSCL = .FALSE. IF( BNRM.GT.ZERO .AND. BNRM.LT.SMLNUM ) THEN BNRMTO = SMLNUM ILBSCL = .TRUE. ELSE IF( BNRM.GT.BIGNUM ) THEN BNRMTO = BIGNUM ILBSCL = .TRUE. END IF IF( ILBSCL ) $ CALL DLASCL( 'G', 0, 0, BNRM, BNRMTO, N, N, B, LDB, IERR ) * * Permute the matrices A, B to isolate eigenvalues if possible * (Workspace: need 6*N) * ILEFT = 1 IRIGHT = N + 1 IWRK = IRIGHT + N CALL DGGBAL( 'P', N, A, LDA, B, LDB, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), WORK( IWRK ), IERR ) * * Reduce B to triangular form (QR decomposition of B) * (Workspace: need N, prefer N*NB) * IROWS = IHI + 1 - ILO IF( ILV ) THEN ICOLS = N + 1 - ILO ELSE ICOLS = IROWS END IF ITAU = IWRK IWRK = ITAU + IROWS CALL DGEQRF( IROWS, ICOLS, B( ILO, ILO ), LDB, WORK( ITAU ), $ WORK( IWRK ), LWORK+1-IWRK, IERR ) * * Apply the orthogonal transformation to matrix A * (Workspace: need N, prefer N*NB) * CALL DORMQR( 'L', 'T', IROWS, ICOLS, IROWS, B( ILO, ILO ), LDB, $ WORK( ITAU ), A( ILO, ILO ), LDA, WORK( IWRK ), $ LWORK+1-IWRK, IERR ) * * Initialize VL * (Workspace: need N, prefer N*NB) * IF( ILVL ) THEN CALL DLASET( 'Full', N, N, ZERO, ONE, VL, LDVL ) IF( IROWS.GT.1 ) THEN CALL DLACPY( 'L', IROWS-1, IROWS-1, B( ILO+1, ILO ), LDB, $ VL( ILO+1, ILO ), LDVL ) END IF CALL DORGQR( IROWS, IROWS, IROWS, VL( ILO, ILO ), LDVL, $ WORK( ITAU ), WORK( IWRK ), LWORK+1-IWRK, IERR ) END IF * * Initialize VR * IF( ILVR ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, VR, LDVR ) * * Reduce to generalized Hessenberg form * (Workspace: none needed) * IF( ILV ) THEN * * Eigenvectors requested -- work on whole matrix. * CALL DGGHRD( JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, VL, $ LDVL, VR, LDVR, IERR ) ELSE CALL DGGHRD( 'N', 'N', IROWS, 1, IROWS, A( ILO, ILO ), LDA, $ B( ILO, ILO ), LDB, VL, LDVL, VR, LDVR, IERR ) END IF * * Perform QZ algorithm (Compute eigenvalues, and optionally, the * Schur forms and Schur vectors) * (Workspace: need N) * IWRK = ITAU IF( ILV ) THEN CHTEMP = 'S' ELSE CHTEMP = 'E' END IF CALL DHGEQZ( CHTEMP, JOBVL, JOBVR, N, ILO, IHI, A, LDA, B, LDB, $ ALPHAR, ALPHAI, BETA, VL, LDVL, VR, LDVR, $ WORK( IWRK ), LWORK+1-IWRK, IERR ) IF( IERR.NE.0 ) THEN IF( IERR.GT.0 .AND. IERR.LE.N ) THEN INFO = IERR ELSE IF( IERR.GT.N .AND. IERR.LE.2*N ) THEN INFO = IERR - N ELSE INFO = N + 1 END IF GO TO 110 END IF * * Compute Eigenvectors * (Workspace: need 6*N) * IF( ILV ) THEN IF( ILVL ) THEN IF( ILVR ) THEN CHTEMP = 'B' ELSE CHTEMP = 'L' END IF ELSE CHTEMP = 'R' END IF CALL DTGEVC( CHTEMP, 'B', LDUMMA, N, A, LDA, B, LDB, VL, LDVL, $ VR, LDVR, N, IN, WORK( IWRK ), IERR ) IF( IERR.NE.0 ) THEN INFO = N + 2 GO TO 110 END IF * * Undo balancing on VL and VR and normalization * (Workspace: none needed) * IF( ILVL ) THEN CALL DGGBAK( 'P', 'L', N, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), N, VL, LDVL, IERR ) DO 50 JC = 1, N IF( ALPHAI( JC ).LT.ZERO ) $ GO TO 50 TEMP = ZERO IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 10 JR = 1, N TEMP = MAX( TEMP, ABS( VL( JR, JC ) ) ) 10 CONTINUE ELSE DO 20 JR = 1, N TEMP = MAX( TEMP, ABS( VL( JR, JC ) )+ $ ABS( VL( JR, JC+1 ) ) ) 20 CONTINUE END IF IF( TEMP.LT.SMLNUM ) $ GO TO 50 TEMP = ONE / TEMP IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 30 JR = 1, N VL( JR, JC ) = VL( JR, JC )*TEMP 30 CONTINUE ELSE DO 40 JR = 1, N VL( JR, JC ) = VL( JR, JC )*TEMP VL( JR, JC+1 ) = VL( JR, JC+1 )*TEMP 40 CONTINUE END IF 50 CONTINUE END IF IF( ILVR ) THEN CALL DGGBAK( 'P', 'R', N, ILO, IHI, WORK( ILEFT ), $ WORK( IRIGHT ), N, VR, LDVR, IERR ) DO 100 JC = 1, N IF( ALPHAI( JC ).LT.ZERO ) $ GO TO 100 TEMP = ZERO IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 60 JR = 1, N TEMP = MAX( TEMP, ABS( VR( JR, JC ) ) ) 60 CONTINUE ELSE DO 70 JR = 1, N TEMP = MAX( TEMP, ABS( VR( JR, JC ) )+ $ ABS( VR( JR, JC+1 ) ) ) 70 CONTINUE END IF IF( TEMP.LT.SMLNUM ) $ GO TO 100 TEMP = ONE / TEMP IF( ALPHAI( JC ).EQ.ZERO ) THEN DO 80 JR = 1, N VR( JR, JC ) = VR( JR, JC )*TEMP 80 CONTINUE ELSE DO 90 JR = 1, N VR( JR, JC ) = VR( JR, JC )*TEMP VR( JR, JC+1 ) = VR( JR, JC+1 )*TEMP 90 CONTINUE END IF 100 CONTINUE END IF * * End of eigenvector calculation * END IF * * Undo scaling if necessary * IF( ILASCL ) THEN CALL DLASCL( 'G', 0, 0, ANRMTO, ANRM, N, 1, ALPHAR, N, IERR ) CALL DLASCL( 'G', 0, 0, ANRMTO, ANRM, N, 1, ALPHAI, N, IERR ) END IF * IF( ILBSCL ) THEN CALL DLASCL( 'G', 0, 0, BNRMTO, BNRM, N, 1, BETA, N, IERR ) END IF * 110 CONTINUE * WORK( 1 ) = MAXWRK * RETURN * * End of DGGEV * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEES( JOBVS, SORT, SELECT, N, A, LDA, SDIM, WR, WI, $ VS, LDVS, WORK, LWORK, BWORK, INFO ) * * -- LAPACK driver routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOBVS, SORT INTEGER INFO, LDA, LDVS, LWORK, N, SDIM * .. * .. Array Arguments .. LOGICAL BWORK( * ) DOUBLE PRECISION A( LDA, * ), VS( LDVS, * ), WI( * ), WORK( * ), $ WR( * ) * .. * .. Function Arguments .. LOGICAL SELECT EXTERNAL SELECT * .. * * Purpose * ======= * * DGEES computes for an N-by-N real nonsymmetric matrix A, the * eigenvalues, the real Schur form T, and, optionally, the matrix of * Schur vectors Z. This gives the Schur factorization A = Z*T*(Z**T). * * Optionally, it also orders the eigenvalues on the diagonal of the * real Schur form so that selected eigenvalues are at the top left. * The leading columns of Z then form an orthonormal basis for the * invariant subspace corresponding to the selected eigenvalues. * * A matrix is in real Schur form if it is upper quasi-triangular with * 1-by-1 and 2-by-2 blocks. 2-by-2 blocks will be standardized in the * form * [ a b ] * [ c a ] * * where b*c < 0. The eigenvalues of such a block are a +- sqrt(bc). * * Arguments * ========= * * JOBVS (input) CHARACTER*1 * = 'N': Schur vectors are not computed; * = 'V': Schur vectors are computed. * * SORT (input) CHARACTER*1 * Specifies whether or not to order the eigenvalues on the * diagonal of the Schur form. * = 'N': Eigenvalues are not ordered; * = 'S': Eigenvalues are ordered (see SELECT). * * SELECT (external procedure) LOGICAL FUNCTION of two DOUBLE PRECISION arguments * SELECT must be declared EXTERNAL in the calling subroutine. * If SORT = 'S', SELECT is used to select eigenvalues to sort * to the top left of the Schur form. * If SORT = 'N', SELECT is not referenced. * An eigenvalue WR(j)+sqrt(-1)*WI(j) is selected if * SELECT(WR(j),WI(j)) is true; i.e., if either one of a complex * conjugate pair of eigenvalues is selected, then both complex * eigenvalues are selected. * Note that a selected complex eigenvalue may no longer * satisfy SELECT(WR(j),WI(j)) = .TRUE. after ordering, since * ordering may change the value of complex eigenvalues * (especially if the eigenvalue is ill-conditioned); in this * case INFO is set to N+2 (see INFO below). * * N (input) INTEGER * The order of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the N-by-N matrix A. * On exit, A has been overwritten by its real Schur form T. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * SDIM (output) INTEGER * If SORT = 'N', SDIM = 0. * If SORT = 'S', SDIM = number of eigenvalues (after sorting) * for which SELECT is true. (Complex conjugate * pairs for which SELECT is true for either * eigenvalue count as 2.) * * WR (output) DOUBLE PRECISION array, dimension (N) * WI (output) DOUBLE PRECISION array, dimension (N) * WR and WI contain the real and imaginary parts, * respectively, of the computed eigenvalues in the same order * that they appear on the diagonal of the output Schur form T. * Complex conjugate pairs of eigenvalues will appear * consecutively with the eigenvalue having the positive * imaginary part first. * * VS (output) DOUBLE PRECISION array, dimension (LDVS,N) * If JOBVS = 'V', VS contains the orthogonal matrix Z of Schur * vectors. * If JOBVS = 'N', VS is not referenced. * * LDVS (input) INTEGER * The leading dimension of the array VS. LDVS >= 1; if * JOBVS = 'V', LDVS >= N. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) contains the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,3*N). * For good performance, LWORK must generally be larger. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * BWORK (workspace) LOGICAL array, dimension (N) * Not referenced if SORT = 'N'. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * > 0: if INFO = i, and i is * <= N: the QR algorithm failed to compute all the * eigenvalues; elements 1:ILO-1 and i+1:N of WR and WI * contain those eigenvalues which have converged; if * JOBVS = 'V', VS contains the matrix which reduces A * to its partially converged Schur form. * = N+1: the eigenvalues could not be reordered because some * eigenvalues were too close to separate (the problem * is very ill-conditioned); * = N+2: after reordering, roundoff changed values of some * complex eigenvalues so that leading eigenvalues in * the Schur form no longer satisfy SELECT=.TRUE. This * could also be caused by underflow due to scaling. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) * .. * .. Local Scalars .. LOGICAL CURSL, LASTSL, LQUERY, LST2SL, SCALEA, WANTST, $ WANTVS INTEGER HSWORK, I, I1, I2, IBAL, ICOND, IERR, IEVAL, $ IHI, ILO, INXT, IP, ITAU, IWRK, MAXWRK, MINWRK DOUBLE PRECISION ANRM, BIGNUM, CSCALE, EPS, S, SEP, SMLNUM * .. * .. Local Arrays .. INTEGER IDUM( 1 ) DOUBLE PRECISION DUM( 1 ) * .. * .. External Subroutines .. EXTERNAL DCOPY, DGEBAK, DGEBAL, DGEHRD, DHSEQR, DLACPY, $ DLABAD, DLASCL, DORGHR, DSWAP, DTRSEN, XERBLA * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV DOUBLE PRECISION DLAMCH, DLANGE EXTERNAL LSAME, ILAENV, DLAMCH, DLANGE * .. * .. Intrinsic Functions .. INTRINSIC MAX, SQRT * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 LQUERY = ( LWORK.EQ.-1 ) WANTVS = LSAME( JOBVS, 'V' ) WANTST = LSAME( SORT, 'S' ) IF( ( .NOT.WANTVS ) .AND. ( .NOT.LSAME( JOBVS, 'N' ) ) ) THEN INFO = -1 ELSE IF( ( .NOT.WANTST ) .AND. ( .NOT.LSAME( SORT, 'N' ) ) ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -6 ELSE IF( LDVS.LT.1 .OR. ( WANTVS .AND. LDVS.LT.N ) ) THEN INFO = -11 END IF * * Compute workspace * (Note: Comments in the code beginning "Workspace:" describe the * minimal amount of workspace needed at that point in the code, * as well as the preferred amount for good performance. * NB refers to the optimal block size for the immediately * following subroutine, as returned by ILAENV. * HSWORK refers to the workspace preferred by DHSEQR, as * calculated below. HSWORK is computed assuming ILO=1 and IHI=N, * the worst case.) * IF( INFO.EQ.0 ) THEN IF( N.EQ.0 ) THEN MINWRK = 1 MAXWRK = 1 ELSE MAXWRK = 2*N + N*ILAENV( 1, 'DGEHRD', ' ', N, 1, N, 0 ) MINWRK = 3*N * CALL DHSEQR( 'S', JOBVS, N, 1, N, A, LDA, WR, WI, VS, LDVS, $ WORK, -1, IEVAL ) HSWORK = WORK( 1 ) * IF( .NOT.WANTVS ) THEN MAXWRK = MAX( MAXWRK, N + HSWORK ) ELSE MAXWRK = MAX( MAXWRK, 2*N + ( N - 1 )*ILAENV( 1, $ 'DORGHR', ' ', N, 1, N, -1 ) ) MAXWRK = MAX( MAXWRK, N + HSWORK ) END IF END IF WORK( 1 ) = MAXWRK * IF( LWORK.LT.MINWRK .AND. .NOT.LQUERY ) THEN INFO = -13 END IF END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEES ', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) THEN SDIM = 0 RETURN END IF * * Get machine constants * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) BIGNUM = ONE / SMLNUM CALL DLABAD( SMLNUM, BIGNUM ) SMLNUM = SQRT( SMLNUM ) / EPS BIGNUM = ONE / SMLNUM * * Scale A if max element outside range [SMLNUM,BIGNUM] * ANRM = DLANGE( 'M', N, N, A, LDA, DUM ) SCALEA = .FALSE. IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN SCALEA = .TRUE. CSCALE = SMLNUM ELSE IF( ANRM.GT.BIGNUM ) THEN SCALEA = .TRUE. CSCALE = BIGNUM END IF IF( SCALEA ) $ CALL DLASCL( 'G', 0, 0, ANRM, CSCALE, N, N, A, LDA, IERR ) * * Permute the matrix to make it more nearly triangular * (Workspace: need N) * IBAL = 1 CALL DGEBAL( 'P', N, A, LDA, ILO, IHI, WORK( IBAL ), IERR ) * * Reduce to upper Hessenberg form * (Workspace: need 3*N, prefer 2*N+N*NB) * ITAU = N + IBAL IWRK = N + ITAU CALL DGEHRD( N, ILO, IHI, A, LDA, WORK( ITAU ), WORK( IWRK ), $ LWORK-IWRK+1, IERR ) * IF( WANTVS ) THEN * * Copy Householder vectors to VS * CALL DLACPY( 'L', N, N, A, LDA, VS, LDVS ) * * Generate orthogonal matrix in VS * (Workspace: need 3*N-1, prefer 2*N+(N-1)*NB) * CALL DORGHR( N, ILO, IHI, VS, LDVS, WORK( ITAU ), WORK( IWRK ), $ LWORK-IWRK+1, IERR ) END IF * SDIM = 0 * * Perform QR iteration, accumulating Schur vectors in VS if desired * (Workspace: need N+1, prefer N+HSWORK (see comments) ) * IWRK = ITAU CALL DHSEQR( 'S', JOBVS, N, ILO, IHI, A, LDA, WR, WI, VS, LDVS, $ WORK( IWRK ), LWORK-IWRK+1, IEVAL ) IF( IEVAL.GT.0 ) $ INFO = IEVAL * * Sort eigenvalues if desired * IF( WANTST .AND. INFO.EQ.0 ) THEN IF( SCALEA ) THEN CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N, 1, WR, N, IERR ) CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N, 1, WI, N, IERR ) END IF DO 10 I = 1, N BWORK( I ) = SELECT( WR( I ), WI( I ) ) 10 CONTINUE * * Reorder eigenvalues and transform Schur vectors * (Workspace: none needed) * CALL DTRSEN( 'N', JOBVS, BWORK, N, A, LDA, VS, LDVS, WR, WI, $ SDIM, S, SEP, WORK( IWRK ), LWORK-IWRK+1, IDUM, 1, $ ICOND ) IF( ICOND.GT.0 ) $ INFO = N + ICOND END IF * IF( WANTVS ) THEN * * Undo balancing * (Workspace: need N) * CALL DGEBAK( 'P', 'R', N, ILO, IHI, WORK( IBAL ), N, VS, LDVS, $ IERR ) END IF * IF( SCALEA ) THEN * * Undo scaling for the Schur form of A * CALL DLASCL( 'H', 0, 0, CSCALE, ANRM, N, N, A, LDA, IERR ) CALL DCOPY( N, A, LDA+1, WR, 1 ) IF( CSCALE.EQ.SMLNUM ) THEN * * If scaling back towards underflow, adjust WI if an * offdiagonal element of a 2-by-2 block in the Schur form * underflows. * IF( IEVAL.GT.0 ) THEN I1 = IEVAL + 1 I2 = IHI - 1 CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, ILO-1, 1, WI, $ MAX( ILO-1, 1 ), IERR ) ELSE IF( WANTST ) THEN I1 = 1 I2 = N - 1 ELSE I1 = ILO I2 = IHI - 1 END IF INXT = I1 - 1 DO 20 I = I1, I2 IF( I.LT.INXT ) $ GO TO 20 IF( WI( I ).EQ.ZERO ) THEN INXT = I + 1 ELSE IF( A( I+1, I ).EQ.ZERO ) THEN WI( I ) = ZERO WI( I+1 ) = ZERO ELSE IF( A( I+1, I ).NE.ZERO .AND. A( I, I+1 ).EQ. $ ZERO ) THEN WI( I ) = ZERO WI( I+1 ) = ZERO IF( I.GT.1 ) $ CALL DSWAP( I-1, A( 1, I ), 1, A( 1, I+1 ), 1 ) IF( N.GT.I+1 ) $ CALL DSWAP( N-I-1, A( I, I+2 ), LDA, $ A( I+1, I+2 ), LDA ) IF( WANTVS ) THEN CALL DSWAP( N, VS( 1, I ), 1, VS( 1, I+1 ), 1 ) END IF A( I, I+1 ) = A( I+1, I ) A( I+1, I ) = ZERO END IF INXT = I + 2 END IF 20 CONTINUE END IF * * Undo scaling for the imaginary part of the eigenvalues * CALL DLASCL( 'G', 0, 0, CSCALE, ANRM, N-IEVAL, 1, $ WI( IEVAL+1 ), MAX( N-IEVAL, 1 ), IERR ) END IF * IF( WANTST .AND. INFO.EQ.0 ) THEN * * Check if reordering successful * LASTSL = .TRUE. LST2SL = .TRUE. SDIM = 0 IP = 0 DO 30 I = 1, N CURSL = SELECT( WR( I ), WI( I ) ) IF( WI( I ).EQ.ZERO ) THEN IF( CURSL ) $ SDIM = SDIM + 1 IP = 0 IF( CURSL .AND. .NOT.LASTSL ) $ INFO = N + 2 ELSE IF( IP.EQ.1 ) THEN * * Last eigenvalue of conjugate pair * CURSL = CURSL .OR. LASTSL LASTSL = CURSL IF( CURSL ) $ SDIM = SDIM + 2 IP = -1 IF( CURSL .AND. .NOT.LST2SL ) $ INFO = N + 2 ELSE * * First eigenvalue of conjugate pair * IP = 1 END IF END IF LST2SL = LASTSL LASTSL = CURSL 30 CONTINUE END IF * WORK( 1 ) = MAXWRK RETURN * * End of DGEES * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGESVJ( JOBA, JOBU, JOBV, M, N, A, LDA, SVA, MV, V, + LDV, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2.2) -- * * -- Contributed by Zlatko Drmac of the University of Zagreb and -- * -- Kresimir Veselic of the Fernuniversitaet Hagen -- * -- June 2010 -- * * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * This routine is also part of SIGMA (version 1.23, October 23. 2008.) * SIGMA is a library of algorithms for highly accurate algorithms for * computation of SVD, PSVD, QSVD, (H,K)-SVD, and for solution of the * eigenvalue problems Hx = lambda M x, H M x = lambda x with H, M > 0. * IMPLICIT NONE * .. * .. Scalar Arguments .. INTEGER INFO, LDA, LDV, LWORK, M, MV, N CHARACTER*1 JOBA, JOBU, JOBV * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), SVA( N ), V( LDV, * ), + WORK( LWORK ) * .. * * Purpose * ======= * * DGESVJ computes the singular value decomposition (SVD) of a real * M-by-N matrix A, where M >= N. The SVD of A is written as * [++] [xx] [x0] [xx] * A = U * SIGMA * V^t, [++] = [xx] * [ox] * [xx] * [++] [xx] * where SIGMA is an N-by-N diagonal matrix, U is an M-by-N orthonormal * matrix, and V is an N-by-N orthogonal matrix. The diagonal elements * of SIGMA are the singular values of A. The columns of U and V are the * left and the right singular vectors of A, respectively. * * Further Details * ~~~~~~~~~~~~~~~ * The orthogonal N-by-N matrix V is obtained as a product of Jacobi plane * rotations. The rotations are implemented as fast scaled rotations of * Anda and Park [1]. In the case of underflow of the Jacobi angle, a * modified Jacobi transformation of Drmac [4] is used. Pivot strategy uses * column interchanges of de Rijk [2]. The relative accuracy of the computed * singular values and the accuracy of the computed singular vectors (in * angle metric) is as guaranteed by the theory of Demmel and Veselic [3]. * The condition number that determines the accuracy in the full rank case * is essentially min_{D=diag} kappa(A*D), where kappa(.) is the * spectral condition number. The best performance of this Jacobi SVD * procedure is achieved if used in an accelerated version of Drmac and * Veselic [5,6], and it is the kernel routine in the SIGMA library [7]. * Some tunning parameters (marked with [TP]) are available for the * implementer. * The computational range for the nonzero singular values is the machine * number interval ( UNDERFLOW , OVERFLOW ). In extreme cases, even * denormalized singular values can be computed with the corresponding * gradual loss of accurate digits. * * Contributors * ~~~~~~~~~~~~ * Zlatko Drmac (Zagreb, Croatia) and Kresimir Veselic (Hagen, Germany) * * References * ~~~~~~~~~~ * [1] A. A. Anda and H. Park: Fast plane rotations with dynamic scaling. * SIAM J. matrix Anal. Appl., Vol. 15 (1994), pp. 162-174. * [2] P. P. M. De Rijk: A one-sided Jacobi algorithm for computing the * singular value decomposition on a vector computer. * SIAM J. Sci. Stat. Comp., Vol. 10 (1998), pp. 359-371. * [3] J. Demmel and K. Veselic: Jacobi method is more accurate than QR. * [4] Z. Drmac: Implementation of Jacobi rotations for accurate singular * value computation in floating point arithmetic. * SIAM J. Sci. Comp., Vol. 18 (1997), pp. 1200-1222. * [5] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm I. * SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1322-1342. * LAPACK Working note 169. * [6] Z. Drmac and K. Veselic: New fast and accurate Jacobi SVD algorithm II. * SIAM J. Matrix Anal. Appl. Vol. 35, No. 2 (2008), pp. 1343-1362. * LAPACK Working note 170. * [7] Z. Drmac: SIGMA - mathematical software library for accurate SVD, PSV, * QSVD, (H,K)-SVD computations. * Department of Mathematics, University of Zagreb, 2008. * * Bugs, Examples and Comments * ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Please report all bugs and send interesting test examples and comments to * drmac@math.hr. Thank you. * * Arguments * ========= * * JOBA (input) CHARACTER* 1 * Specifies the structure of A. * = 'L': The input matrix A is lower triangular; * = 'U': The input matrix A is upper triangular; * = 'G': The input matrix A is general M-by-N matrix, M >= N. * * JOBU (input) CHARACTER*1 * Specifies whether to compute the left singular vectors * (columns of U): * = 'U': The left singular vectors corresponding to the nonzero * singular values are computed and returned in the leading * columns of A. See more details in the description of A. * The default numerical orthogonality threshold is set to * approximately TOL=CTOL*EPS, CTOL=DSQRT(M), EPS=DLAMCH('E'). * = 'C': Analogous to JOBU='U', except that user can control the * level of numerical orthogonality of the computed left * singular vectors. TOL can be set to TOL = CTOL*EPS, where * CTOL is given on input in the array WORK. * No CTOL smaller than ONE is allowed. CTOL greater * than 1 / EPS is meaningless. The option 'C' * can be used if M*EPS is satisfactory orthogonality * of the computed left singular vectors, so CTOL=M could * save few sweeps of Jacobi rotations. * See the descriptions of A and WORK(1). * = 'N': The matrix U is not computed. However, see the * description of A. * * JOBV (input) CHARACTER*1 * Specifies whether to compute the right singular vectors, that * is, the matrix V: * = 'V' : the matrix V is computed and returned in the array V * = 'A' : the Jacobi rotations are applied to the MV-by-N * array V. In other words, the right singular vector * matrix V is not computed explicitly, instead it is * applied to an MV-by-N matrix initially stored in the * first MV rows of V. * = 'N' : the matrix V is not computed and the array V is not * referenced * * M (input) INTEGER * The number of rows of the input matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the input matrix A. * M >= N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the M-by-N matrix A. * On exit : * If JOBU .EQ. 'U' .OR. JOBU .EQ. 'C' : * If INFO .EQ. 0 : * RANKA orthonormal columns of U are returned in the * leading RANKA columns of the array A. Here RANKA <= N * is the number of computed singular values of A that are * above the underflow threshold DLAMCH('S'). The singular * vectors corresponding to underflowed or zero singular * values are not computed. The value of RANKA is returned * in the array WORK as RANKA=NINT(WORK(2)). Also see the * descriptions of SVA and WORK. The computed columns of U * are mutually numerically orthogonal up to approximately * TOL=DSQRT(M)*EPS (default); or TOL=CTOL*EPS (JOBU.EQ.'C'), * see the description of JOBU. * If INFO .GT. 0 : * the procedure DGESVJ did not converge in the given number * of iterations (sweeps). In that case, the computed * columns of U may not be orthogonal up to TOL. The output * U (stored in A), SIGMA (given by the computed singular * values in SVA(1:N)) and V is still a decomposition of the * input matrix A in the sense that the residual * ||A-SCALE*U*SIGMA*V^T||_2 / ||A||_2 is small. * * If JOBU .EQ. 'N' : * If INFO .EQ. 0 : * Note that the left singular vectors are 'for free' in the * one-sided Jacobi SVD algorithm. However, if only the * singular values are needed, the level of numerical * orthogonality of U is not an issue and iterations are * stopped when the columns of the iterated matrix are * numerically orthogonal up to approximately M*EPS. Thus, * on exit, A contains the columns of U scaled with the * corresponding singular values. * If INFO .GT. 0 : * the procedure DGESVJ did not converge in the given number * of iterations (sweeps). * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * SVA (workspace/output) DOUBLE PRECISION array, dimension (N) * On exit : * If INFO .EQ. 0 : * depending on the value SCALE = WORK(1), we have: * If SCALE .EQ. ONE : * SVA(1:N) contains the computed singular values of A. * During the computation SVA contains the Euclidean column * norms of the iterated matrices in the array A. * If SCALE .NE. ONE : * The singular values of A are SCALE*SVA(1:N), and this * factored representation is due to the fact that some of the * singular values of A might underflow or overflow. * If INFO .GT. 0 : * the procedure DGESVJ did not converge in the given number of * iterations (sweeps) and SCALE*SVA(1:N) may not be accurate. * * MV (input) INTEGER * If JOBV .EQ. 'A', then the product of Jacobi rotations in DGESVJ * is applied to the first MV rows of V. See the description of JOBV. * * V (input/output) DOUBLE PRECISION array, dimension (LDV,N) * If JOBV = 'V', then V contains on exit the N-by-N matrix of * the right singular vectors; * If JOBV = 'A', then V contains the product of the computed right * singular vector matrix and the initial matrix in * the array V. * If JOBV = 'N', then V is not referenced. * * LDV (input) INTEGER * The leading dimension of the array V, LDV .GE. 1. * If JOBV .EQ. 'V', then LDV .GE. max(1,N). * If JOBV .EQ. 'A', then LDV .GE. max(1,MV) . * * WORK (input/workspace/output) DOUBLE PRECISION array, dimension max(4,M+N). * On entry : * If JOBU .EQ. 'C' : * WORK(1) = CTOL, where CTOL defines the threshold for convergence. * The process stops if all columns of A are mutually * orthogonal up to CTOL*EPS, EPS=DLAMCH('E'). * It is required that CTOL >= ONE, i.e. it is not * allowed to force the routine to obtain orthogonality * below EPSILON. * On exit : * WORK(1) = SCALE is the scaling factor such that SCALE*SVA(1:N) * are the computed singular values of A. * (See description of SVA().) * WORK(2) = NINT(WORK(2)) is the number of the computed nonzero * singular values. * WORK(3) = NINT(WORK(3)) is the number of the computed singular * values that are larger than the underflow threshold. * WORK(4) = NINT(WORK(4)) is the number of sweeps of Jacobi * rotations needed for numerical convergence. * WORK(5) = max_{i.NE.j} |COS(A(:,i),A(:,j))| in the last sweep. * This is useful information in cases when DGESVJ did * not converge, as it can be used to estimate whether * the output is stil useful and for post festum analysis. * WORK(6) = the largest absolute value over all sines of the * Jacobi rotation angles in the last sweep. It can be * useful for a post festum analysis. * * LWORK (input) INTEGER * length of WORK, WORK >= MAX(6,M+N) * * INFO (output) INTEGER * = 0 : successful exit. * < 0 : if INFO = -i, then the i-th argument had an illegal value * > 0 : DGESVJ did not converge in the maximal allowed number (30) * of sweeps. The output may still be useful. See the * description of WORK. * * ===================================================================== * * .. Local Parameters .. DOUBLE PRECISION ZERO, HALF, ONE, TWO PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0, + TWO = 2.0D0 ) INTEGER NSWEEP PARAMETER ( NSWEEP = 30 ) * .. * .. Local Scalars .. DOUBLE PRECISION AAPP, AAPP0, AAPQ, AAQQ, APOAQ, AQOAP, BIG, + BIGTHETA, CS, CTOL, EPSILON, LARGE, MXAAPQ, + MXSINJ, ROOTBIG, ROOTEPS, ROOTSFMIN, ROOTTOL, + SCALE, SFMIN, SMALL, SN, T, TEMP1, THETA, + THSIGN, TOL INTEGER BLSKIP, EMPTSW, i, ibr, IERR, igl, IJBLSK, ir1, + ISWROT, jbc, jgl, KBL, LKAHEAD, MVL, N2, N34, + N4, NBL, NOTROT, p, PSKIPPED, q, ROWSKIP, + SWBAND LOGICAL APPLV, GOSCALE, LOWER, LSVEC, NOSCALE, ROTOK, + RSVEC, UCTOL, UPPER * .. * .. Local Arrays .. DOUBLE PRECISION FASTR( 5 ) * .. * .. Intrinsic Functions .. INTRINSIC DABS, DMAX1, DMIN1, DBLE, MIN0, DSIGN, DSQRT * .. * .. External Functions .. * .. * from BLAS DOUBLE PRECISION DDOT, DNRM2 EXTERNAL DDOT, DNRM2 INTEGER IDAMAX EXTERNAL IDAMAX * from LAPACK DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. * .. * from BLAS EXTERNAL DAXPY, DCOPY, DROTM, DSCAL, DSWAP * from LAPACK EXTERNAL DLASCL, DLASET, DLASSQ, XERBLA * EXTERNAL DGSVJ0, DGSVJ1 * .. * .. Executable Statements .. * * Test the input arguments * LSVEC = LSAME( JOBU, 'U' ) UCTOL = LSAME( JOBU, 'C' ) RSVEC = LSAME( JOBV, 'V' ) APPLV = LSAME( JOBV, 'A' ) UPPER = LSAME( JOBA, 'U' ) LOWER = LSAME( JOBA, 'L' ) * IF( .NOT.( UPPER .OR. LOWER .OR. LSAME( JOBA, 'G' ) ) ) THEN INFO = -1 ELSE IF( .NOT.( LSVEC .OR. UCTOL .OR. LSAME( JOBU, 'N' ) ) ) THEN INFO = -2 ELSE IF( .NOT.( RSVEC .OR. APPLV .OR. LSAME( JOBV, 'N' ) ) ) THEN INFO = -3 ELSE IF( M.LT.0 ) THEN INFO = -4 ELSE IF( ( N.LT.0 ) .OR. ( N.GT.M ) ) THEN INFO = -5 ELSE IF( LDA.LT.M ) THEN INFO = -7 ELSE IF( MV.LT.0 ) THEN INFO = -9 ELSE IF( ( RSVEC .AND. ( LDV.LT.N ) ) .OR. + ( APPLV .AND. ( LDV.LT.MV ) ) ) THEN INFO = -11 ELSE IF( UCTOL .AND. ( WORK( 1 ).LE.ONE ) ) THEN INFO = -12 ELSE IF( LWORK.LT.MAX0( M+N, 6 ) ) THEN INFO = -13 ELSE INFO = 0 END IF * * #:( IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGESVJ', -INFO ) RETURN END IF * * #:) Quick return for void matrix * IF( ( M.EQ.0 ) .OR. ( N.EQ.0 ) )RETURN * * Set numerical parameters * The stopping criterion for Jacobi rotations is * * max_{i<>j}|A(:,i)^T * A(:,j)|/(||A(:,i)||*||A(:,j)||) < CTOL*EPS * * where EPS is the round-off and CTOL is defined as follows: * IF( UCTOL ) THEN * ... user controlled CTOL = WORK( 1 ) ELSE * ... default IF( LSVEC .OR. RSVEC .OR. APPLV ) THEN CTOL = DSQRT( DBLE( M ) ) ELSE CTOL = DBLE( M ) END IF END IF * ... and the machine dependent parameters are *[!] (Make sure that DLAMCH() works properly on the target machine.) * EPSILON = DLAMCH( 'Epsilon' ) ROOTEPS = DSQRT( EPSILON ) SFMIN = DLAMCH( 'SafeMinimum' ) ROOTSFMIN = DSQRT( SFMIN ) SMALL = SFMIN / EPSILON BIG = DLAMCH( 'Overflow' ) * BIG = ONE / SFMIN ROOTBIG = ONE / ROOTSFMIN LARGE = BIG / DSQRT( DBLE( M*N ) ) BIGTHETA = ONE / ROOTEPS * TOL = CTOL*EPSILON ROOTTOL = DSQRT( TOL ) * IF( DBLE( M )*EPSILON.GE.ONE ) THEN INFO = -5 CALL XERBLA( 'DGESVJ', -INFO ) RETURN END IF * * Initialize the right singular vector matrix. * IF( RSVEC ) THEN MVL = N CALL DLASET( 'A', MVL, N, ZERO, ONE, V, LDV ) ELSE IF( APPLV ) THEN MVL = MV END IF RSVEC = RSVEC .OR. APPLV * * Initialize SVA( 1:N ) = ( ||A e_i||_2, i = 1:N ) *(!) If necessary, scale A to protect the largest singular value * from overflow. It is possible that saving the largest singular * value destroys the information about the small ones. * This initial scaling is almost minimal in the sense that the * goal is to make sure that no column norm overflows, and that * DSQRT(N)*max_i SVA(i) does not overflow. If INFinite entries * in A are detected, the procedure returns with INFO=-6. * SCALE = ONE / DSQRT( DBLE( M )*DBLE( N ) ) NOSCALE = .TRUE. GOSCALE = .TRUE. * IF( LOWER ) THEN * the input matrix is M-by-N lower triangular (trapezoidal) DO 1874 p = 1, N AAPP = ZERO AAQQ = ZERO CALL DLASSQ( M-p+1, A( p, p ), 1, AAPP, AAQQ ) IF( AAPP.GT.BIG ) THEN INFO = -6 CALL XERBLA( 'DGESVJ', -INFO ) RETURN END IF AAQQ = DSQRT( AAQQ ) IF( ( AAQQ.NE.ZERO ) .AND. NOSCALE ) THEN IF( AAPP.GE.( BIG / AAQQ ) ) THEN NOSCALE = .FALSE. END IF END IF IF( NOSCALE ) THEN SVA( p ) = AAPP*AAQQ ELSE SVA( p ) = AAPP*( AAQQ*SCALE ) IF( GOSCALE ) THEN GOSCALE = .FALSE. DO 1873 q = 1, p - 1 SVA( q ) = SVA( q )*SCALE 1873 CONTINUE END IF END IF 1874 CONTINUE ELSE IF( UPPER ) THEN * the input matrix is M-by-N upper triangular (trapezoidal) DO 2874 p = 1, N AAPP = ZERO AAQQ = ZERO CALL DLASSQ( p, A( 1, p ), 1, AAPP, AAQQ ) IF( AAPP.GT.BIG ) THEN INFO = -6 CALL XERBLA( 'DGESVJ', -INFO ) RETURN END IF AAQQ = DSQRT( AAQQ ) IF( ( AAQQ.NE.ZERO ) .AND. NOSCALE ) THEN IF( AAPP.GE.( BIG / AAQQ ) ) THEN NOSCALE = .FALSE. END IF END IF IF( NOSCALE ) THEN SVA( p ) = AAPP*AAQQ ELSE SVA( p ) = AAPP*( AAQQ*SCALE ) IF( GOSCALE ) THEN GOSCALE = .FALSE. DO 2873 q = 1, p - 1 SVA( q ) = SVA( q )*SCALE 2873 CONTINUE END IF END IF 2874 CONTINUE ELSE * the input matrix is M-by-N general dense DO 3874 p = 1, N AAPP = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, p ), 1, AAPP, AAQQ ) IF( AAPP.GT.BIG ) THEN INFO = -6 CALL XERBLA( 'DGESVJ', -INFO ) RETURN END IF AAQQ = DSQRT( AAQQ ) IF( ( AAQQ.NE.ZERO ) .AND. NOSCALE ) THEN IF( AAPP.GE.( BIG / AAQQ ) ) THEN NOSCALE = .FALSE. END IF END IF IF( NOSCALE ) THEN SVA( p ) = AAPP*AAQQ ELSE SVA( p ) = AAPP*( AAQQ*SCALE ) IF( GOSCALE ) THEN GOSCALE = .FALSE. DO 3873 q = 1, p - 1 SVA( q ) = SVA( q )*SCALE 3873 CONTINUE END IF END IF 3874 CONTINUE END IF * IF( NOSCALE )SCALE = ONE * * Move the smaller part of the spectrum from the underflow threshold *(!) Start by determining the position of the nonzero entries of the * array SVA() relative to ( SFMIN, BIG ). * AAPP = ZERO AAQQ = BIG DO 4781 p = 1, N IF( SVA( p ).NE.ZERO )AAQQ = DMIN1( AAQQ, SVA( p ) ) AAPP = DMAX1( AAPP, SVA( p ) ) 4781 CONTINUE * * #:) Quick return for zero matrix * IF( AAPP.EQ.ZERO ) THEN IF( LSVEC )CALL DLASET( 'G', M, N, ZERO, ONE, A, LDA ) WORK( 1 ) = ONE WORK( 2 ) = ZERO WORK( 3 ) = ZERO WORK( 4 ) = ZERO WORK( 5 ) = ZERO WORK( 6 ) = ZERO RETURN END IF * * #:) Quick return for one-column matrix * IF( N.EQ.1 ) THEN IF( LSVEC )CALL DLASCL( 'G', 0, 0, SVA( 1 ), SCALE, M, 1, + A( 1, 1 ), LDA, IERR ) WORK( 1 ) = ONE / SCALE IF( SVA( 1 ).GE.SFMIN ) THEN WORK( 2 ) = ONE ELSE WORK( 2 ) = ZERO END IF WORK( 3 ) = ZERO WORK( 4 ) = ZERO WORK( 5 ) = ZERO WORK( 6 ) = ZERO RETURN END IF * * Protect small singular values from underflow, and try to * avoid underflows/overflows in computing Jacobi rotations. * SN = DSQRT( SFMIN / EPSILON ) TEMP1 = DSQRT( BIG / DBLE( N ) ) IF( ( AAPP.LE.SN ) .OR. ( AAQQ.GE.TEMP1 ) .OR. + ( ( SN.LE.AAQQ ) .AND. ( AAPP.LE.TEMP1 ) ) ) THEN TEMP1 = DMIN1( BIG, TEMP1 / AAPP ) * AAQQ = AAQQ*TEMP1 * AAPP = AAPP*TEMP1 ELSE IF( ( AAQQ.LE.SN ) .AND. ( AAPP.LE.TEMP1 ) ) THEN TEMP1 = DMIN1( SN / AAQQ, BIG / ( AAPP*DSQRT( DBLE( N ) ) ) ) * AAQQ = AAQQ*TEMP1 * AAPP = AAPP*TEMP1 ELSE IF( ( AAQQ.GE.SN ) .AND. ( AAPP.GE.TEMP1 ) ) THEN TEMP1 = DMAX1( SN / AAQQ, TEMP1 / AAPP ) * AAQQ = AAQQ*TEMP1 * AAPP = AAPP*TEMP1 ELSE IF( ( AAQQ.LE.SN ) .AND. ( AAPP.GE.TEMP1 ) ) THEN TEMP1 = DMIN1( SN / AAQQ, BIG / ( DSQRT( DBLE( N ) )*AAPP ) ) * AAQQ = AAQQ*TEMP1 * AAPP = AAPP*TEMP1 ELSE TEMP1 = ONE END IF * * Scale, if necessary * IF( TEMP1.NE.ONE ) THEN CALL DLASCL( 'G', 0, 0, ONE, TEMP1, N, 1, SVA, N, IERR ) END IF SCALE = TEMP1*SCALE IF( SCALE.NE.ONE ) THEN CALL DLASCL( JOBA, 0, 0, ONE, SCALE, M, N, A, LDA, IERR ) SCALE = ONE / SCALE END IF * * Row-cyclic Jacobi SVD algorithm with column pivoting * EMPTSW = ( N*( N-1 ) ) / 2 NOTROT = 0 FASTR( 1 ) = ZERO * * A is represented in factored form A = A * diag(WORK), where diag(WORK) * is initialized to identity. WORK is updated during fast scaled * rotations. * DO 1868 q = 1, N WORK( q ) = ONE 1868 CONTINUE * * SWBAND = 3 *[TP] SWBAND is a tuning parameter [TP]. It is meaningful and effective * if DGESVJ is used as a computational routine in the preconditioned * Jacobi SVD algorithm DGESVJ. For sweeps i=1:SWBAND the procedure * works on pivots inside a band-like region around the diagonal. * The boundaries are determined dynamically, based on the number of * pivots above a threshold. * KBL = MIN0( 8, N ) *[TP] KBL is a tuning parameter that defines the tile size in the * tiling of the p-q loops of pivot pairs. In general, an optimal * value of KBL depends on the matrix dimensions and on the * parameters of the computer's memory. * NBL = N / KBL IF( ( NBL*KBL ).NE.N )NBL = NBL + 1 * BLSKIP = KBL**2 *[TP] BLKSKIP is a tuning parameter that depends on SWBAND and KBL. * ROWSKIP = MIN0( 5, KBL ) *[TP] ROWSKIP is a tuning parameter. * LKAHEAD = 1 *[TP] LKAHEAD is a tuning parameter. * * Quasi block transformations, using the lower (upper) triangular * structure of the input matrix. The quasi-block-cycling usually * invokes cubic convergence. Big part of this cycle is done inside * canonical subspaces of dimensions less than M. * IF( ( LOWER .OR. UPPER ) .AND. ( N.GT.MAX0( 64, 4*KBL ) ) ) THEN *[TP] The number of partition levels and the actual partition are * tuning parameters. N4 = N / 4 N2 = N / 2 N34 = 3*N4 IF( APPLV ) THEN q = 0 ELSE q = 1 END IF * IF( LOWER ) THEN * * This works very well on lower triangular matrices, in particular * in the framework of the preconditioned Jacobi SVD (xGEJSV). * The idea is simple: * [+ 0 0 0] Note that Jacobi transformations of [0 0] * [+ + 0 0] [0 0] * [+ + x 0] actually work on [x 0] [x 0] * [+ + x x] [x x]. [x x] * CALL DGSVJ0( JOBV, M-N34, N-N34, A( N34+1, N34+1 ), LDA, + WORK( N34+1 ), SVA( N34+1 ), MVL, + V( N34*q+1, N34+1 ), LDV, EPSILON, SFMIN, TOL, + 2, WORK( N+1 ), LWORK-N, IERR ) * CALL DGSVJ0( JOBV, M-N2, N34-N2, A( N2+1, N2+1 ), LDA, + WORK( N2+1 ), SVA( N2+1 ), MVL, + V( N2*q+1, N2+1 ), LDV, EPSILON, SFMIN, TOL, 2, + WORK( N+1 ), LWORK-N, IERR ) * CALL DGSVJ1( JOBV, M-N2, N-N2, N4, A( N2+1, N2+1 ), LDA, + WORK( N2+1 ), SVA( N2+1 ), MVL, + V( N2*q+1, N2+1 ), LDV, EPSILON, SFMIN, TOL, 1, + WORK( N+1 ), LWORK-N, IERR ) * CALL DGSVJ0( JOBV, M-N4, N2-N4, A( N4+1, N4+1 ), LDA, + WORK( N4+1 ), SVA( N4+1 ), MVL, + V( N4*q+1, N4+1 ), LDV, EPSILON, SFMIN, TOL, 1, + WORK( N+1 ), LWORK-N, IERR ) * CALL DGSVJ0( JOBV, M, N4, A, LDA, WORK, SVA, MVL, V, LDV, + EPSILON, SFMIN, TOL, 1, WORK( N+1 ), LWORK-N, + IERR ) * CALL DGSVJ1( JOBV, M, N2, N4, A, LDA, WORK, SVA, MVL, V, + LDV, EPSILON, SFMIN, TOL, 1, WORK( N+1 ), + LWORK-N, IERR ) * * ELSE IF( UPPER ) THEN * * CALL DGSVJ0( JOBV, N4, N4, A, LDA, WORK, SVA, MVL, V, LDV, + EPSILON, SFMIN, TOL, 2, WORK( N+1 ), LWORK-N, + IERR ) * CALL DGSVJ0( JOBV, N2, N4, A( 1, N4+1 ), LDA, WORK( N4+1 ), + SVA( N4+1 ), MVL, V( N4*q+1, N4+1 ), LDV, + EPSILON, SFMIN, TOL, 1, WORK( N+1 ), LWORK-N, + IERR ) * CALL DGSVJ1( JOBV, N2, N2, N4, A, LDA, WORK, SVA, MVL, V, + LDV, EPSILON, SFMIN, TOL, 1, WORK( N+1 ), + LWORK-N, IERR ) * CALL DGSVJ0( JOBV, N2+N4, N4, A( 1, N2+1 ), LDA, + WORK( N2+1 ), SVA( N2+1 ), MVL, + V( N2*q+1, N2+1 ), LDV, EPSILON, SFMIN, TOL, 1, + WORK( N+1 ), LWORK-N, IERR ) END IF * END IF * * .. Row-cyclic pivot strategy with de Rijk's pivoting .. * DO 1993 i = 1, NSWEEP * * .. go go go ... * MXAAPQ = ZERO MXSINJ = ZERO ISWROT = 0 * NOTROT = 0 PSKIPPED = 0 * * Each sweep is unrolled using KBL-by-KBL tiles over the pivot pairs * 1 <= p < q <= N. This is the first step toward a blocked implementation * of the rotations. New implementation, based on block transformations, * is under development. * DO 2000 ibr = 1, NBL * igl = ( ibr-1 )*KBL + 1 * DO 1002 ir1 = 0, MIN0( LKAHEAD, NBL-ibr ) * igl = igl + ir1*KBL * DO 2001 p = igl, MIN0( igl+KBL-1, N-1 ) * * .. de Rijk's pivoting * q = IDAMAX( N-p+1, SVA( p ), 1 ) + p - 1 IF( p.NE.q ) THEN CALL DSWAP( M, A( 1, p ), 1, A( 1, q ), 1 ) IF( RSVEC )CALL DSWAP( MVL, V( 1, p ), 1, + V( 1, q ), 1 ) TEMP1 = SVA( p ) SVA( p ) = SVA( q ) SVA( q ) = TEMP1 TEMP1 = WORK( p ) WORK( p ) = WORK( q ) WORK( q ) = TEMP1 END IF * IF( ir1.EQ.0 ) THEN * * Column norms are periodically updated by explicit * norm computation. * Caveat: * Unfortunately, some BLAS implementations compute DNRM2(M,A(1,p),1) * as DSQRT(DDOT(M,A(1,p),1,A(1,p),1)), which may cause the result to * overflow for ||A(:,p)||_2 > DSQRT(overflow_threshold), and to * underflow for ||A(:,p)||_2 < DSQRT(underflow_threshold). * Hence, DNRM2 cannot be trusted, not even in the case when * the true norm is far from the under(over)flow boundaries. * If properly implemented DNRM2 is available, the IF-THEN-ELSE * below should read "AAPP = DNRM2( M, A(1,p), 1 ) * WORK(p)". * IF( ( SVA( p ).LT.ROOTBIG ) .AND. + ( SVA( p ).GT.ROOTSFMIN ) ) THEN SVA( p ) = DNRM2( M, A( 1, p ), 1 )*WORK( p ) ELSE TEMP1 = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, TEMP1, AAPP ) SVA( p ) = TEMP1*DSQRT( AAPP )*WORK( p ) END IF AAPP = SVA( p ) ELSE AAPP = SVA( p ) END IF * IF( AAPP.GT.ZERO ) THEN * PSKIPPED = 0 * DO 2002 q = p + 1, MIN0( igl+KBL-1, N ) * AAQQ = SVA( q ) * IF( AAQQ.GT.ZERO ) THEN * AAPP0 = AAPP IF( AAQQ.GE.ONE ) THEN ROTOK = ( SMALL*AAPP ).LE.AAQQ IF( AAPP.LT.( BIG / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*WORK( p )*WORK( q ) / + AAQQ ) / AAPP ELSE CALL DCOPY( M, A( 1, p ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAPP, + WORK( p ), M, 1, + WORK( N+1 ), LDA, IERR ) AAPQ = DDOT( M, WORK( N+1 ), 1, + A( 1, q ), 1 )*WORK( q ) / AAQQ END IF ELSE ROTOK = AAPP.LE.( AAQQ / SMALL ) IF( AAPP.GT.( SMALL / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*WORK( p )*WORK( q ) / + AAQQ ) / AAPP ELSE CALL DCOPY( M, A( 1, q ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, + WORK( q ), M, 1, + WORK( N+1 ), LDA, IERR ) AAPQ = DDOT( M, WORK( N+1 ), 1, + A( 1, p ), 1 )*WORK( p ) / AAPP END IF END IF * MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) ) * * TO rotate or NOT to rotate, THAT is the question ... * IF( DABS( AAPQ ).GT.TOL ) THEN * * .. rotate *[RTD] ROTATED = ROTATED + ONE * IF( ir1.EQ.0 ) THEN NOTROT = 0 PSKIPPED = 0 ISWROT = ISWROT + 1 END IF * IF( ROTOK ) THEN * AQOAP = AAQQ / AAPP APOAQ = AAPP / AAQQ THETA = -HALF*DABS( AQOAP-APOAQ ) / + AAPQ * IF( DABS( THETA ).GT.BIGTHETA ) THEN * T = HALF / THETA FASTR( 3 ) = T*WORK( p ) / WORK( q ) FASTR( 4 ) = -T*WORK( q ) / + WORK( p ) CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, + V( 1, q ), 1, + FASTR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( ONE-T*AQOAP* + AAPQ ) MXSINJ = DMAX1( MXSINJ, DABS( T ) ) * ELSE * * .. choose correct signum for THETA and rotate * THSIGN = -DSIGN( ONE, AAPQ ) T = ONE / ( THETA+THSIGN* + DSQRT( ONE+THETA*THETA ) ) CS = DSQRT( ONE / ( ONE+T*T ) ) SN = T*CS * MXSINJ = DMAX1( MXSINJ, DABS( SN ) ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( DMAX1( ZERO, + ONE-T*AQOAP*AAPQ ) ) * APOAQ = WORK( p ) / WORK( q ) AQOAP = WORK( q ) / WORK( p ) IF( WORK( p ).GE.ONE ) THEN IF( WORK( q ).GE.ONE ) THEN FASTR( 3 ) = T*APOAQ FASTR( 4 ) = -T*AQOAP WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q )*CS CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, + FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, V( 1, q ), + 1, FASTR ) ELSE CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF END IF ELSE IF( WORK( q ).GE.ONE ) THEN CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) WORK( p ) = WORK( p ) / CS WORK( q ) = WORK( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, T*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF ELSE IF( WORK( p ).GE.WORK( q ) ) + THEN CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, + -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF ELSE CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, + -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) WORK( p ) = WORK( p ) / CS WORK( q ) = WORK( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, + T*APOAQ, V( 1, p ), + 1, V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF END IF END IF END IF END IF * ELSE * .. have to use modified Gram-Schmidt like transformation CALL DCOPY( M, A( 1, p ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, M, + 1, WORK( N+1 ), LDA, + IERR ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, M, + 1, A( 1, q ), LDA, IERR ) TEMP1 = -AAPQ*WORK( p ) / WORK( q ) CALL DAXPY( M, TEMP1, WORK( N+1 ), 1, + A( 1, q ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAQQ, M, + 1, A( 1, q ), LDA, IERR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) END IF * END IF ROTOK THEN ... ELSE * * In the case of cancellation in updating SVA(q), SVA(p) * recompute SVA(q), SVA(p). * IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS ) + THEN IF( ( AAQQ.LT.ROOTBIG ) .AND. + ( AAQQ.GT.ROOTSFMIN ) ) THEN SVA( q ) = DNRM2( M, A( 1, q ), 1 )* + WORK( q ) ELSE T = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, q ), 1, T, + AAQQ ) SVA( q ) = T*DSQRT( AAQQ )*WORK( q ) END IF END IF IF( ( AAPP / AAPP0 ).LE.ROOTEPS ) THEN IF( ( AAPP.LT.ROOTBIG ) .AND. + ( AAPP.GT.ROOTSFMIN ) ) THEN AAPP = DNRM2( M, A( 1, p ), 1 )* + WORK( p ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, T, + AAPP ) AAPP = T*DSQRT( AAPP )*WORK( p ) END IF SVA( p ) = AAPP END IF * ELSE * A(:,p) and A(:,q) already numerically orthogonal IF( ir1.EQ.0 )NOTROT = NOTROT + 1 *[RTD] SKIPPED = SKIPPED + 1 PSKIPPED = PSKIPPED + 1 END IF ELSE * A(:,q) is zero column IF( ir1.EQ.0 )NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 END IF * IF( ( i.LE.SWBAND ) .AND. + ( PSKIPPED.GT.ROWSKIP ) ) THEN IF( ir1.EQ.0 )AAPP = -AAPP NOTROT = 0 GO TO 2103 END IF * 2002 CONTINUE * END q-LOOP * 2103 CONTINUE * bailed out of q-loop * SVA( p ) = AAPP * ELSE SVA( p ) = AAPP IF( ( ir1.EQ.0 ) .AND. ( AAPP.EQ.ZERO ) ) + NOTROT = NOTROT + MIN0( igl+KBL-1, N ) - p END IF * 2001 CONTINUE * end of the p-loop * end of doing the block ( ibr, ibr ) 1002 CONTINUE * end of ir1-loop * * ... go to the off diagonal blocks * igl = ( ibr-1 )*KBL + 1 * DO 2010 jbc = ibr + 1, NBL * jgl = ( jbc-1 )*KBL + 1 * * doing the block at ( ibr, jbc ) * IJBLSK = 0 DO 2100 p = igl, MIN0( igl+KBL-1, N ) * AAPP = SVA( p ) IF( AAPP.GT.ZERO ) THEN * PSKIPPED = 0 * DO 2200 q = jgl, MIN0( jgl+KBL-1, N ) * AAQQ = SVA( q ) IF( AAQQ.GT.ZERO ) THEN AAPP0 = AAPP * * .. M x 2 Jacobi SVD .. * * Safe Gram matrix computation * IF( AAQQ.GE.ONE ) THEN IF( AAPP.GE.AAQQ ) THEN ROTOK = ( SMALL*AAPP ).LE.AAQQ ELSE ROTOK = ( SMALL*AAQQ ).LE.AAPP END IF IF( AAPP.LT.( BIG / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*WORK( p )*WORK( q ) / + AAQQ ) / AAPP ELSE CALL DCOPY( M, A( 1, p ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAPP, + WORK( p ), M, 1, + WORK( N+1 ), LDA, IERR ) AAPQ = DDOT( M, WORK( N+1 ), 1, + A( 1, q ), 1 )*WORK( q ) / AAQQ END IF ELSE IF( AAPP.GE.AAQQ ) THEN ROTOK = AAPP.LE.( AAQQ / SMALL ) ELSE ROTOK = AAQQ.LE.( AAPP / SMALL ) END IF IF( AAPP.GT.( SMALL / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*WORK( p )*WORK( q ) / + AAQQ ) / AAPP ELSE CALL DCOPY( M, A( 1, q ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, + WORK( q ), M, 1, + WORK( N+1 ), LDA, IERR ) AAPQ = DDOT( M, WORK( N+1 ), 1, + A( 1, p ), 1 )*WORK( p ) / AAPP END IF END IF * MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) ) * * TO rotate or NOT to rotate, THAT is the question ... * IF( DABS( AAPQ ).GT.TOL ) THEN NOTROT = 0 *[RTD] ROTATED = ROTATED + 1 PSKIPPED = 0 ISWROT = ISWROT + 1 * IF( ROTOK ) THEN * AQOAP = AAQQ / AAPP APOAQ = AAPP / AAQQ THETA = -HALF*DABS( AQOAP-APOAQ ) / + AAPQ IF( AAQQ.GT.AAPP0 )THETA = -THETA * IF( DABS( THETA ).GT.BIGTHETA ) THEN T = HALF / THETA FASTR( 3 ) = T*WORK( p ) / WORK( q ) FASTR( 4 ) = -T*WORK( q ) / + WORK( p ) CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, + V( 1, q ), 1, + FASTR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( DMAX1( ZERO, + ONE-T*AQOAP*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, DABS( T ) ) ELSE * * .. choose correct signum for THETA and rotate * THSIGN = -DSIGN( ONE, AAPQ ) IF( AAQQ.GT.AAPP0 )THSIGN = -THSIGN T = ONE / ( THETA+THSIGN* + DSQRT( ONE+THETA*THETA ) ) CS = DSQRT( ONE / ( ONE+T*T ) ) SN = T*CS MXSINJ = DMAX1( MXSINJ, DABS( SN ) ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( ONE-T*AQOAP* + AAPQ ) * APOAQ = WORK( p ) / WORK( q ) AQOAP = WORK( q ) / WORK( p ) IF( WORK( p ).GE.ONE ) THEN * IF( WORK( q ).GE.ONE ) THEN FASTR( 3 ) = T*APOAQ FASTR( 4 ) = -T*AQOAP WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q )*CS CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, + FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, V( 1, q ), + 1, FASTR ) ELSE CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q ) / CS END IF ELSE IF( WORK( q ).GE.ONE ) THEN CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, T*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF WORK( p ) = WORK( p ) / CS WORK( q ) = WORK( q )*CS ELSE IF( WORK( p ).GE.WORK( q ) ) + THEN CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) WORK( p ) = WORK( p )*CS WORK( q ) = WORK( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, + -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF ELSE CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, + -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) WORK( p ) = WORK( p ) / CS WORK( q ) = WORK( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, + T*APOAQ, V( 1, p ), + 1, V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF END IF END IF END IF END IF * ELSE IF( AAPP.GT.AAQQ ) THEN CALL DCOPY( M, A( 1, p ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, WORK( N+1 ), LDA, + IERR ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, A( 1, q ), LDA, + IERR ) TEMP1 = -AAPQ*WORK( p ) / WORK( q ) CALL DAXPY( M, TEMP1, WORK( N+1 ), + 1, A( 1, q ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAQQ, + M, 1, A( 1, q ), LDA, + IERR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) ELSE CALL DCOPY( M, A( 1, q ), 1, + WORK( N+1 ), 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, WORK( N+1 ), LDA, + IERR ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, A( 1, p ), LDA, + IERR ) TEMP1 = -AAPQ*WORK( q ) / WORK( p ) CALL DAXPY( M, TEMP1, WORK( N+1 ), + 1, A( 1, p ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAPP, + M, 1, A( 1, p ), LDA, + IERR ) SVA( p ) = AAPP*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) END IF END IF * END IF ROTOK THEN ... ELSE * * In the case of cancellation in updating SVA(q) * .. recompute SVA(q) IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS ) + THEN IF( ( AAQQ.LT.ROOTBIG ) .AND. + ( AAQQ.GT.ROOTSFMIN ) ) THEN SVA( q ) = DNRM2( M, A( 1, q ), 1 )* + WORK( q ) ELSE T = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, q ), 1, T, + AAQQ ) SVA( q ) = T*DSQRT( AAQQ )*WORK( q ) END IF END IF IF( ( AAPP / AAPP0 )**2.LE.ROOTEPS ) THEN IF( ( AAPP.LT.ROOTBIG ) .AND. + ( AAPP.GT.ROOTSFMIN ) ) THEN AAPP = DNRM2( M, A( 1, p ), 1 )* + WORK( p ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, T, + AAPP ) AAPP = T*DSQRT( AAPP )*WORK( p ) END IF SVA( p ) = AAPP END IF * end of OK rotation ELSE NOTROT = NOTROT + 1 *[RTD] SKIPPED = SKIPPED + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF ELSE NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF * IF( ( i.LE.SWBAND ) .AND. ( IJBLSK.GE.BLSKIP ) ) + THEN SVA( p ) = AAPP NOTROT = 0 GO TO 2011 END IF IF( ( i.LE.SWBAND ) .AND. + ( PSKIPPED.GT.ROWSKIP ) ) THEN AAPP = -AAPP NOTROT = 0 GO TO 2203 END IF * 2200 CONTINUE * end of the q-loop 2203 CONTINUE * SVA( p ) = AAPP * ELSE * IF( AAPP.EQ.ZERO )NOTROT = NOTROT + + MIN0( jgl+KBL-1, N ) - jgl + 1 IF( AAPP.LT.ZERO )NOTROT = 0 * END IF * 2100 CONTINUE * end of the p-loop 2010 CONTINUE * end of the jbc-loop 2011 CONTINUE *2011 bailed out of the jbc-loop DO 2012 p = igl, MIN0( igl+KBL-1, N ) SVA( p ) = DABS( SVA( p ) ) 2012 CONTINUE *** 2000 CONTINUE *2000 :: end of the ibr-loop * * .. update SVA(N) IF( ( SVA( N ).LT.ROOTBIG ) .AND. ( SVA( N ).GT.ROOTSFMIN ) ) + THEN SVA( N ) = DNRM2( M, A( 1, N ), 1 )*WORK( N ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, N ), 1, T, AAPP ) SVA( N ) = T*DSQRT( AAPP )*WORK( N ) END IF * * Additional steering devices * IF( ( i.LT.SWBAND ) .AND. ( ( MXAAPQ.LE.ROOTTOL ) .OR. + ( ISWROT.LE.N ) ) )SWBAND = i * IF( ( i.GT.SWBAND+1 ) .AND. ( MXAAPQ.LT.DSQRT( DBLE( N ) )* + TOL ) .AND. ( DBLE( N )*MXAAPQ*MXSINJ.LT.TOL ) ) THEN GO TO 1994 END IF * IF( NOTROT.GE.EMPTSW )GO TO 1994 * 1993 CONTINUE * end i=1:NSWEEP loop * * #:( Reaching this point means that the procedure has not converged. INFO = NSWEEP - 1 GO TO 1995 * 1994 CONTINUE * #:) Reaching this point means numerical convergence after the i-th * sweep. * INFO = 0 * #:) INFO = 0 confirms successful iterations. 1995 CONTINUE * * Sort the singular values and find how many are above * the underflow threshold. * N2 = 0 N4 = 0 DO 5991 p = 1, N - 1 q = IDAMAX( N-p+1, SVA( p ), 1 ) + p - 1 IF( p.NE.q ) THEN TEMP1 = SVA( p ) SVA( p ) = SVA( q ) SVA( q ) = TEMP1 TEMP1 = WORK( p ) WORK( p ) = WORK( q ) WORK( q ) = TEMP1 CALL DSWAP( M, A( 1, p ), 1, A( 1, q ), 1 ) IF( RSVEC )CALL DSWAP( MVL, V( 1, p ), 1, V( 1, q ), 1 ) END IF IF( SVA( p ).NE.ZERO ) THEN N4 = N4 + 1 IF( SVA( p )*SCALE.GT.SFMIN )N2 = N2 + 1 END IF 5991 CONTINUE IF( SVA( N ).NE.ZERO ) THEN N4 = N4 + 1 IF( SVA( N )*SCALE.GT.SFMIN )N2 = N2 + 1 END IF * * Normalize the left singular vectors. * IF( LSVEC .OR. UCTOL ) THEN DO 1998 p = 1, N2 CALL DSCAL( M, WORK( p ) / SVA( p ), A( 1, p ), 1 ) 1998 CONTINUE END IF * * Scale the product of Jacobi rotations (assemble the fast rotations). * IF( RSVEC ) THEN IF( APPLV ) THEN DO 2398 p = 1, N CALL DSCAL( MVL, WORK( p ), V( 1, p ), 1 ) 2398 CONTINUE ELSE DO 2399 p = 1, N TEMP1 = ONE / DNRM2( MVL, V( 1, p ), 1 ) CALL DSCAL( MVL, TEMP1, V( 1, p ), 1 ) 2399 CONTINUE END IF END IF * * Undo scaling, if necessary (and possible). IF( ( ( SCALE.GT.ONE ) .AND. ( SVA( 1 ).LT.( BIG / + SCALE ) ) ) .OR. ( ( SCALE.LT.ONE ) .AND. ( SVA( N2 ).GT. + ( SFMIN / SCALE ) ) ) ) THEN DO 2400 p = 1, N SVA( p ) = SCALE*SVA( p ) 2400 CONTINUE SCALE = ONE END IF * WORK( 1 ) = SCALE * The singular values of A are SCALE*SVA(1:N). If SCALE.NE.ONE * then some of the singular values may overflow or underflow and * the spectrum is given in this factored representation. * WORK( 2 ) = DBLE( N4 ) * N4 is the number of computed nonzero singular values of A. * WORK( 3 ) = DBLE( N2 ) * N2 is the number of singular values of A greater than SFMIN. * If N2 0. * IMPLICIT NONE * .. Scalar Arguments .. INTEGER INFO, LDA, LDV, LWORK, M, MV, N, NSWEEP DOUBLE PRECISION EPS, SFMIN, TOL CHARACTER*1 JOBV * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), SVA( N ), D( N ), V( LDV, * ), + WORK( LWORK ) * .. * * Purpose * ======= * * DGSVJ0 is called from DGESVJ as a pre-processor and that is its main * purpose. It applies Jacobi rotations in the same way as DGESVJ does, but * it does not check convergence (stopping criterion). Few tuning * parameters (marked by [TP]) are available for the implementer. * * Further Details * ~~~~~~~~~~~~~~~ * DGSVJ0 is used just to enable SGESVJ to call a simplified version of * itself to work on a submatrix of the original matrix. * * Contributors * ~~~~~~~~~~~~ * Zlatko Drmac (Zagreb, Croatia) and Kresimir Veselic (Hagen, Germany) * * Bugs, Examples and Comments * ~~~~~~~~~~~~~~~~~~~~~~~~~~~ * Please report all bugs and send interesting test examples and comments to * drmac@math.hr. Thank you. * * Arguments * ========= * * JOBV (input) CHARACTER*1 * Specifies whether the output from this procedure is used * to compute the matrix V: * = 'V': the product of the Jacobi rotations is accumulated * by postmulyiplying the N-by-N array V. * (See the description of V.) * = 'A': the product of the Jacobi rotations is accumulated * by postmulyiplying the MV-by-N array V. * (See the descriptions of MV and V.) * = 'N': the Jacobi rotations are not accumulated. * * M (input) INTEGER * The number of rows of the input matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the input matrix A. * M >= N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, M-by-N matrix A, such that A*diag(D) represents * the input matrix. * On exit, * A_onexit * D_onexit represents the input matrix A*diag(D) * post-multiplied by a sequence of Jacobi rotations, where the * rotation threshold and the total number of sweeps are given in * TOL and NSWEEP, respectively. * (See the descriptions of D, TOL and NSWEEP.) * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * D (input/workspace/output) DOUBLE PRECISION array, dimension (N) * The array D accumulates the scaling factors from the fast scaled * Jacobi rotations. * On entry, A*diag(D) represents the input matrix. * On exit, A_onexit*diag(D_onexit) represents the input matrix * post-multiplied by a sequence of Jacobi rotations, where the * rotation threshold and the total number of sweeps are given in * TOL and NSWEEP, respectively. * (See the descriptions of A, TOL and NSWEEP.) * * SVA (input/workspace/output) DOUBLE PRECISION array, dimension (N) * On entry, SVA contains the Euclidean norms of the columns of * the matrix A*diag(D). * On exit, SVA contains the Euclidean norms of the columns of * the matrix onexit*diag(D_onexit). * * MV (input) INTEGER * If JOBV .EQ. 'A', then MV rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV = 'N', then MV is not referenced. * * V (input/output) DOUBLE PRECISION array, dimension (LDV,N) * If JOBV .EQ. 'V' then N rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV .EQ. 'A' then MV rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV = 'N', then V is not referenced. * * LDV (input) INTEGER * The leading dimension of the array V, LDV >= 1. * If JOBV = 'V', LDV .GE. N. * If JOBV = 'A', LDV .GE. MV. * * EPS (input) DOUBLE PRECISION * EPS = DLAMCH('Epsilon') * * SFMIN (input) DOUBLE PRECISION * SFMIN = DLAMCH('Safe Minimum') * * TOL (input) DOUBLE PRECISION * TOL is the threshold for Jacobi rotations. For a pair * A(:,p), A(:,q) of pivot columns, the Jacobi rotation is * applied only if DABS(COS(angle(A(:,p),A(:,q)))) .GT. TOL. * * NSWEEP (input) INTEGER * NSWEEP is the number of sweeps of Jacobi rotations to be * performed. * * WORK (workspace) DOUBLE PRECISION array, dimension (LWORK) * * LWORK (input) INTEGER * LWORK is the dimension of WORK. LWORK .GE. M. * * INFO (output) INTEGER * = 0 : successful exit. * < 0 : if INFO = -i, then the i-th argument had an illegal value * * ===================================================================== * * .. Local Parameters .. DOUBLE PRECISION ZERO, HALF, ONE, TWO PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0, + TWO = 2.0D0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AAPP, AAPP0, AAPQ, AAQQ, APOAQ, AQOAP, BIG, + BIGTHETA, CS, MXAAPQ, MXSINJ, ROOTBIG, ROOTEPS, + ROOTSFMIN, ROOTTOL, SMALL, SN, T, TEMP1, THETA, + THSIGN INTEGER BLSKIP, EMPTSW, i, ibr, IERR, igl, IJBLSK, ir1, + ISWROT, jbc, jgl, KBL, LKAHEAD, MVL, NBL, + NOTROT, p, PSKIPPED, q, ROWSKIP, SWBAND LOGICAL APPLV, ROTOK, RSVEC * .. * .. Local Arrays .. DOUBLE PRECISION FASTR( 5 ) * .. * .. Intrinsic Functions .. INTRINSIC DABS, DMAX1, DBLE, MIN0, DSIGN, DSQRT * .. * .. External Functions .. DOUBLE PRECISION DDOT, DNRM2 INTEGER IDAMAX LOGICAL LSAME EXTERNAL IDAMAX, LSAME, DDOT, DNRM2 * .. * .. External Subroutines .. EXTERNAL DAXPY, DCOPY, DLASCL, DLASSQ, DROTM, DSWAP * .. * .. Executable Statements .. * APPLV = LSAME( JOBV, 'A' ) RSVEC = LSAME( JOBV, 'V' ) IF( .NOT.( RSVEC .OR. APPLV .OR. LSAME( JOBV, 'N' ) ) ) THEN INFO = -1 ELSE IF( M.LT.0 ) THEN INFO = -2 ELSE IF( ( N.LT.0 ) .OR. ( N.GT.M ) ) THEN INFO = -3 ELSE IF( LDA.LT.M ) THEN INFO = -5 ELSE IF( MV.LT.0 ) THEN INFO = -8 ELSE IF( LDV.LT.M ) THEN INFO = -10 ELSE IF( TOL.LE.EPS ) THEN INFO = -13 ELSE IF( NSWEEP.LT.0 ) THEN INFO = -14 ELSE IF( LWORK.LT.M ) THEN INFO = -16 ELSE INFO = 0 END IF * * #:( IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGSVJ0', -INFO ) RETURN END IF * IF( RSVEC ) THEN MVL = N ELSE IF( APPLV ) THEN MVL = MV END IF RSVEC = RSVEC .OR. APPLV ROOTEPS = DSQRT( EPS ) ROOTSFMIN = DSQRT( SFMIN ) SMALL = SFMIN / EPS BIG = ONE / SFMIN ROOTBIG = ONE / ROOTSFMIN BIGTHETA = ONE / ROOTEPS ROOTTOL = DSQRT( TOL ) * * * -#- Row-cyclic Jacobi SVD algorithm with column pivoting -#- * EMPTSW = ( N*( N-1 ) ) / 2 NOTROT = 0 FASTR( 1 ) = ZERO * * -#- Row-cyclic pivot strategy with de Rijk's pivoting -#- * SWBAND = 0 *[TP] SWBAND is a tuning parameter. It is meaningful and effective * if SGESVJ is used as a computational routine in the preconditioned * Jacobi SVD algorithm SGESVJ. For sweeps i=1:SWBAND the procedure * ...... KBL = MIN0( 8, N ) *[TP] KBL is a tuning parameter that defines the tile size in the * tiling of the p-q loops of pivot pairs. In general, an optimal * value of KBL depends on the matrix dimensions and on the * parameters of the computer's memory. * NBL = N / KBL IF( ( NBL*KBL ).NE.N )NBL = NBL + 1 BLSKIP = ( KBL**2 ) + 1 *[TP] BLKSKIP is a tuning parameter that depends on SWBAND and KBL. ROWSKIP = MIN0( 5, KBL ) *[TP] ROWSKIP is a tuning parameter. LKAHEAD = 1 *[TP] LKAHEAD is a tuning parameter. SWBAND = 0 PSKIPPED = 0 * DO 1993 i = 1, NSWEEP * .. go go go ... * MXAAPQ = ZERO MXSINJ = ZERO ISWROT = 0 * NOTROT = 0 PSKIPPED = 0 * DO 2000 ibr = 1, NBL igl = ( ibr-1 )*KBL + 1 * DO 1002 ir1 = 0, MIN0( LKAHEAD, NBL-ibr ) * igl = igl + ir1*KBL * DO 2001 p = igl, MIN0( igl+KBL-1, N-1 ) * .. de Rijk's pivoting q = IDAMAX( N-p+1, SVA( p ), 1 ) + p - 1 IF( p.NE.q ) THEN CALL DSWAP( M, A( 1, p ), 1, A( 1, q ), 1 ) IF( RSVEC )CALL DSWAP( MVL, V( 1, p ), 1, + V( 1, q ), 1 ) TEMP1 = SVA( p ) SVA( p ) = SVA( q ) SVA( q ) = TEMP1 TEMP1 = D( p ) D( p ) = D( q ) D( q ) = TEMP1 END IF * IF( ir1.EQ.0 ) THEN * * Column norms are periodically updated by explicit * norm computation. * Caveat: * Some BLAS implementations compute DNRM2(M,A(1,p),1) * as DSQRT(DDOT(M,A(1,p),1,A(1,p),1)), which may result in * overflow for ||A(:,p)||_2 > DSQRT(overflow_threshold), and * undeflow for ||A(:,p)||_2 < DSQRT(underflow_threshold). * Hence, DNRM2 cannot be trusted, not even in the case when * the true norm is far from the under(over)flow boundaries. * If properly implemented DNRM2 is available, the IF-THEN-ELSE * below should read "AAPP = DNRM2( M, A(1,p), 1 ) * D(p)". * IF( ( SVA( p ).LT.ROOTBIG ) .AND. + ( SVA( p ).GT.ROOTSFMIN ) ) THEN SVA( p ) = DNRM2( M, A( 1, p ), 1 )*D( p ) ELSE TEMP1 = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, TEMP1, AAPP ) SVA( p ) = TEMP1*DSQRT( AAPP )*D( p ) END IF AAPP = SVA( p ) ELSE AAPP = SVA( p ) END IF * IF( AAPP.GT.ZERO ) THEN * PSKIPPED = 0 * DO 2002 q = p + 1, MIN0( igl+KBL-1, N ) * AAQQ = SVA( q ) IF( AAQQ.GT.ZERO ) THEN * AAPP0 = AAPP IF( AAQQ.GE.ONE ) THEN ROTOK = ( SMALL*AAPP ).LE.AAQQ IF( AAPP.LT.( BIG / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, p ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAPP, D( p ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, q ), + 1 )*D( q ) / AAQQ END IF ELSE ROTOK = AAPP.LE.( AAQQ / SMALL ) IF( AAPP.GT.( SMALL / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, q ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, D( q ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, p ), + 1 )*D( p ) / AAPP END IF END IF * MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) ) * * TO rotate or NOT to rotate, THAT is the question ... * IF( DABS( AAPQ ).GT.TOL ) THEN * * .. rotate * ROTATED = ROTATED + ONE * IF( ir1.EQ.0 ) THEN NOTROT = 0 PSKIPPED = 0 ISWROT = ISWROT + 1 END IF * IF( ROTOK ) THEN * AQOAP = AAQQ / AAPP APOAQ = AAPP / AAQQ THETA = -HALF*DABS( AQOAP-APOAQ ) / + AAPQ * IF( DABS( THETA ).GT.BIGTHETA ) THEN * T = HALF / THETA FASTR( 3 ) = T*D( p ) / D( q ) FASTR( 4 ) = -T*D( q ) / D( p ) CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, + V( 1, q ), 1, + FASTR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( ONE-T*AQOAP* + AAPQ ) MXSINJ = DMAX1( MXSINJ, DABS( T ) ) * ELSE * * .. choose correct signum for THETA and rotate * THSIGN = -DSIGN( ONE, AAPQ ) T = ONE / ( THETA+THSIGN* + DSQRT( ONE+THETA*THETA ) ) CS = DSQRT( ONE / ( ONE+T*T ) ) SN = T*CS * MXSINJ = DMAX1( MXSINJ, DABS( SN ) ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( DMAX1( ZERO, + ONE-T*AQOAP*AAPQ ) ) * APOAQ = D( p ) / D( q ) AQOAP = D( q ) / D( p ) IF( D( p ).GE.ONE ) THEN IF( D( q ).GE.ONE ) THEN FASTR( 3 ) = T*APOAQ FASTR( 4 ) = -T*AQOAP D( p ) = D( p )*CS D( q ) = D( q )*CS CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, + FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, V( 1, q ), + 1, FASTR ) ELSE CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) D( p ) = D( p )*CS D( q ) = D( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF END IF ELSE IF( D( q ).GE.ONE ) THEN CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) D( p ) = D( p ) / CS D( q ) = D( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, T*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF ELSE IF( D( p ).GE.D( q ) ) THEN CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) D( p ) = D( p )*CS D( q ) = D( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, + -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF ELSE CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, + -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) D( p ) = D( p ) / CS D( q ) = D( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, + T*APOAQ, V( 1, p ), + 1, V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF END IF END IF END IF END IF * ELSE * .. have to use modified Gram-Schmidt like transformation CALL DCOPY( M, A( 1, p ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, M, + 1, WORK, LDA, IERR ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, M, + 1, A( 1, q ), LDA, IERR ) TEMP1 = -AAPQ*D( p ) / D( q ) CALL DAXPY( M, TEMP1, WORK, 1, + A( 1, q ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAQQ, M, + 1, A( 1, q ), LDA, IERR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) END IF * END IF ROTOK THEN ... ELSE * * In the case of cancellation in updating SVA(q), SVA(p) * recompute SVA(q), SVA(p). IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS ) + THEN IF( ( AAQQ.LT.ROOTBIG ) .AND. + ( AAQQ.GT.ROOTSFMIN ) ) THEN SVA( q ) = DNRM2( M, A( 1, q ), 1 )* + D( q ) ELSE T = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, q ), 1, T, + AAQQ ) SVA( q ) = T*DSQRT( AAQQ )*D( q ) END IF END IF IF( ( AAPP / AAPP0 ).LE.ROOTEPS ) THEN IF( ( AAPP.LT.ROOTBIG ) .AND. + ( AAPP.GT.ROOTSFMIN ) ) THEN AAPP = DNRM2( M, A( 1, p ), 1 )* + D( p ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, T, + AAPP ) AAPP = T*DSQRT( AAPP )*D( p ) END IF SVA( p ) = AAPP END IF * ELSE * A(:,p) and A(:,q) already numerically orthogonal IF( ir1.EQ.0 )NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 END IF ELSE * A(:,q) is zero column IF( ir1.EQ.0 )NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 END IF * IF( ( i.LE.SWBAND ) .AND. + ( PSKIPPED.GT.ROWSKIP ) ) THEN IF( ir1.EQ.0 )AAPP = -AAPP NOTROT = 0 GO TO 2103 END IF * 2002 CONTINUE * END q-LOOP * 2103 CONTINUE * bailed out of q-loop SVA( p ) = AAPP ELSE SVA( p ) = AAPP IF( ( ir1.EQ.0 ) .AND. ( AAPP.EQ.ZERO ) ) + NOTROT = NOTROT + MIN0( igl+KBL-1, N ) - p END IF * 2001 CONTINUE * end of the p-loop * end of doing the block ( ibr, ibr ) 1002 CONTINUE * end of ir1-loop * *........................................................ * ... go to the off diagonal blocks * igl = ( ibr-1 )*KBL + 1 * DO 2010 jbc = ibr + 1, NBL * jgl = ( jbc-1 )*KBL + 1 * * doing the block at ( ibr, jbc ) * IJBLSK = 0 DO 2100 p = igl, MIN0( igl+KBL-1, N ) * AAPP = SVA( p ) * IF( AAPP.GT.ZERO ) THEN * PSKIPPED = 0 * DO 2200 q = jgl, MIN0( jgl+KBL-1, N ) * AAQQ = SVA( q ) * IF( AAQQ.GT.ZERO ) THEN AAPP0 = AAPP * * -#- M x 2 Jacobi SVD -#- * * -#- Safe Gram matrix computation -#- * IF( AAQQ.GE.ONE ) THEN IF( AAPP.GE.AAQQ ) THEN ROTOK = ( SMALL*AAPP ).LE.AAQQ ELSE ROTOK = ( SMALL*AAQQ ).LE.AAPP END IF IF( AAPP.LT.( BIG / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, p ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAPP, D( p ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, q ), + 1 )*D( q ) / AAQQ END IF ELSE IF( AAPP.GE.AAQQ ) THEN ROTOK = AAPP.LE.( AAQQ / SMALL ) ELSE ROTOK = AAQQ.LE.( AAPP / SMALL ) END IF IF( AAPP.GT.( SMALL / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, q ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, D( q ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, p ), + 1 )*D( p ) / AAPP END IF END IF * MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) ) * * TO rotate or NOT to rotate, THAT is the question ... * IF( DABS( AAPQ ).GT.TOL ) THEN NOTROT = 0 * ROTATED = ROTATED + 1 PSKIPPED = 0 ISWROT = ISWROT + 1 * IF( ROTOK ) THEN * AQOAP = AAQQ / AAPP APOAQ = AAPP / AAQQ THETA = -HALF*DABS( AQOAP-APOAQ ) / + AAPQ IF( AAQQ.GT.AAPP0 )THETA = -THETA * IF( DABS( THETA ).GT.BIGTHETA ) THEN T = HALF / THETA FASTR( 3 ) = T*D( p ) / D( q ) FASTR( 4 ) = -T*D( q ) / D( p ) CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, + V( 1, q ), 1, + FASTR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( DMAX1( ZERO, + ONE-T*AQOAP*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, DABS( T ) ) ELSE * * .. choose correct signum for THETA and rotate * THSIGN = -DSIGN( ONE, AAPQ ) IF( AAQQ.GT.AAPP0 )THSIGN = -THSIGN T = ONE / ( THETA+THSIGN* + DSQRT( ONE+THETA*THETA ) ) CS = DSQRT( ONE / ( ONE+T*T ) ) SN = T*CS MXSINJ = DMAX1( MXSINJ, DABS( SN ) ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( ONE-T*AQOAP* + AAPQ ) * APOAQ = D( p ) / D( q ) AQOAP = D( q ) / D( p ) IF( D( p ).GE.ONE ) THEN * IF( D( q ).GE.ONE ) THEN FASTR( 3 ) = T*APOAQ FASTR( 4 ) = -T*AQOAP D( p ) = D( p )*CS D( q ) = D( q )*CS CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, + FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, V( 1, q ), + 1, FASTR ) ELSE CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF D( p ) = D( p )*CS D( q ) = D( q ) / CS END IF ELSE IF( D( q ).GE.ONE ) THEN CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, T*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF D( p ) = D( p ) / CS D( q ) = D( q )*CS ELSE IF( D( p ).GE.D( q ) ) THEN CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) D( p ) = D( p )*CS D( q ) = D( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, + -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF ELSE CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, + -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) D( p ) = D( p ) / CS D( q ) = D( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, + T*APOAQ, V( 1, p ), + 1, V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF END IF END IF END IF END IF * ELSE IF( AAPP.GT.AAQQ ) THEN CALL DCOPY( M, A( 1, p ), 1, WORK, + 1 ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, WORK, LDA, IERR ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, A( 1, q ), LDA, + IERR ) TEMP1 = -AAPQ*D( p ) / D( q ) CALL DAXPY( M, TEMP1, WORK, 1, + A( 1, q ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAQQ, + M, 1, A( 1, q ), LDA, + IERR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) ELSE CALL DCOPY( M, A( 1, q ), 1, WORK, + 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, WORK, LDA, IERR ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, A( 1, p ), LDA, + IERR ) TEMP1 = -AAPQ*D( q ) / D( p ) CALL DAXPY( M, TEMP1, WORK, 1, + A( 1, p ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAPP, + M, 1, A( 1, p ), LDA, + IERR ) SVA( p ) = AAPP*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) END IF END IF * END IF ROTOK THEN ... ELSE * * In the case of cancellation in updating SVA(q) * .. recompute SVA(q) IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS ) + THEN IF( ( AAQQ.LT.ROOTBIG ) .AND. + ( AAQQ.GT.ROOTSFMIN ) ) THEN SVA( q ) = DNRM2( M, A( 1, q ), 1 )* + D( q ) ELSE T = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, q ), 1, T, + AAQQ ) SVA( q ) = T*DSQRT( AAQQ )*D( q ) END IF END IF IF( ( AAPP / AAPP0 )**2.LE.ROOTEPS ) THEN IF( ( AAPP.LT.ROOTBIG ) .AND. + ( AAPP.GT.ROOTSFMIN ) ) THEN AAPP = DNRM2( M, A( 1, p ), 1 )* + D( p ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, T, + AAPP ) AAPP = T*DSQRT( AAPP )*D( p ) END IF SVA( p ) = AAPP END IF * end of OK rotation ELSE NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF ELSE NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF * IF( ( i.LE.SWBAND ) .AND. ( IJBLSK.GE.BLSKIP ) ) + THEN SVA( p ) = AAPP NOTROT = 0 GO TO 2011 END IF IF( ( i.LE.SWBAND ) .AND. + ( PSKIPPED.GT.ROWSKIP ) ) THEN AAPP = -AAPP NOTROT = 0 GO TO 2203 END IF * 2200 CONTINUE * end of the q-loop 2203 CONTINUE * SVA( p ) = AAPP * ELSE IF( AAPP.EQ.ZERO )NOTROT = NOTROT + + MIN0( jgl+KBL-1, N ) - jgl + 1 IF( AAPP.LT.ZERO )NOTROT = 0 END IF 2100 CONTINUE * end of the p-loop 2010 CONTINUE * end of the jbc-loop 2011 CONTINUE *2011 bailed out of the jbc-loop DO 2012 p = igl, MIN0( igl+KBL-1, N ) SVA( p ) = DABS( SVA( p ) ) 2012 CONTINUE * 2000 CONTINUE *2000 :: end of the ibr-loop * * .. update SVA(N) IF( ( SVA( N ).LT.ROOTBIG ) .AND. ( SVA( N ).GT.ROOTSFMIN ) ) + THEN SVA( N ) = DNRM2( M, A( 1, N ), 1 )*D( N ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, N ), 1, T, AAPP ) SVA( N ) = T*DSQRT( AAPP )*D( N ) END IF * * Additional steering devices * IF( ( i.LT.SWBAND ) .AND. ( ( MXAAPQ.LE.ROOTTOL ) .OR. + ( ISWROT.LE.N ) ) )SWBAND = i * IF( ( i.GT.SWBAND+1 ) .AND. ( MXAAPQ.LT.DBLE( N )*TOL ) .AND. + ( DBLE( N )*MXAAPQ*MXSINJ.LT.TOL ) ) THEN GO TO 1994 END IF * IF( NOTROT.GE.EMPTSW )GO TO 1994 1993 CONTINUE * end i=1:NSWEEP loop * #:) Reaching this point means that the procedure has comleted the given * number of iterations. INFO = NSWEEP - 1 GO TO 1995 1994 CONTINUE * #:) Reaching this point means that during the i-th sweep all pivots were * below the given tolerance, causing early exit. * INFO = 0 * #:) INFO = 0 confirms successful iterations. 1995 CONTINUE * * Sort the vector D. DO 5991 p = 1, N - 1 q = IDAMAX( N-p+1, SVA( p ), 1 ) + p - 1 IF( p.NE.q ) THEN TEMP1 = SVA( p ) SVA( p ) = SVA( q ) SVA( q ) = TEMP1 TEMP1 = D( p ) D( p ) = D( q ) D( q ) = TEMP1 CALL DSWAP( M, A( 1, p ), 1, A( 1, q ), 1 ) IF( RSVEC )CALL DSWAP( MVL, V( 1, p ), 1, V( 1, q ), 1 ) END IF 5991 CONTINUE * RETURN * .. * .. END OF DGSVJ0 * .. END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGSVJ1( JOBV, M, N, N1, A, LDA, D, SVA, MV, V, LDV, + EPS, SFMIN, TOL, NSWEEP, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2.2) -- * * -- Contributed by Zlatko Drmac of the University of Zagreb and -- * -- Kresimir Veselic of the Fernuniversitaet Hagen -- * -- June 2010 -- * * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * This routine is also part of SIGMA (version 1.23, October 23. 2008.) * SIGMA is a library of algorithms for highly accurate algorithms for * computation of SVD, PSVD, QSVD, (H,K)-SVD, and for solution of the * eigenvalue problems Hx = lambda M x, H M x = lambda x with H, M > 0. * IMPLICIT NONE * .. * .. Scalar Arguments .. DOUBLE PRECISION EPS, SFMIN, TOL INTEGER INFO, LDA, LDV, LWORK, M, MV, N, N1, NSWEEP CHARACTER*1 JOBV * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), D( N ), SVA( N ), V( LDV, * ), + WORK( LWORK ) * .. * * Purpose * ======= * * DGSVJ1 is called from SGESVJ as a pre-processor and that is its main * purpose. It applies Jacobi rotations in the same way as SGESVJ does, but * it targets only particular pivots and it does not check convergence * (stopping criterion). Few tunning parameters (marked by [TP]) are * available for the implementer. * * Further Details * ~~~~~~~~~~~~~~~ * DGSVJ1 applies few sweeps of Jacobi rotations in the column space of * the input M-by-N matrix A. The pivot pairs are taken from the (1,2) * off-diagonal block in the corresponding N-by-N Gram matrix A^T * A. The * block-entries (tiles) of the (1,2) off-diagonal block are marked by the * [x]'s in the following scheme: * * | * * * [x] [x] [x]| * | * * * [x] [x] [x]| Row-cycling in the nblr-by-nblc [x] blocks. * | * * * [x] [x] [x]| Row-cyclic pivoting inside each [x] block. * |[x] [x] [x] * * * | * |[x] [x] [x] * * * | * |[x] [x] [x] * * * | * * In terms of the columns of A, the first N1 columns are rotated 'against' * the remaining N-N1 columns, trying to increase the angle between the * corresponding subspaces. The off-diagonal block is N1-by(N-N1) and it is * tiled using quadratic tiles of side KBL. Here, KBL is a tunning parmeter. * The number of sweeps is given in NSWEEP and the orthogonality threshold * is given in TOL. * * Contributors * ~~~~~~~~~~~~ * Zlatko Drmac (Zagreb, Croatia) and Kresimir Veselic (Hagen, Germany) * * Arguments * ========= * * JOBV (input) CHARACTER*1 * Specifies whether the output from this procedure is used * to compute the matrix V: * = 'V': the product of the Jacobi rotations is accumulated * by postmulyiplying the N-by-N array V. * (See the description of V.) * = 'A': the product of the Jacobi rotations is accumulated * by postmulyiplying the MV-by-N array V. * (See the descriptions of MV and V.) * = 'N': the Jacobi rotations are not accumulated. * * M (input) INTEGER * The number of rows of the input matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the input matrix A. * M >= N >= 0. * * N1 (input) INTEGER * N1 specifies the 2 x 2 block partition, the first N1 columns are * rotated 'against' the remaining N-N1 columns of A. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, M-by-N matrix A, such that A*diag(D) represents * the input matrix. * On exit, * A_onexit * D_onexit represents the input matrix A*diag(D) * post-multiplied by a sequence of Jacobi rotations, where the * rotation threshold and the total number of sweeps are given in * TOL and NSWEEP, respectively. * (See the descriptions of N1, D, TOL and NSWEEP.) * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * D (input/workspace/output) DOUBLE PRECISION array, dimension (N) * The array D accumulates the scaling factors from the fast scaled * Jacobi rotations. * On entry, A*diag(D) represents the input matrix. * On exit, A_onexit*diag(D_onexit) represents the input matrix * post-multiplied by a sequence of Jacobi rotations, where the * rotation threshold and the total number of sweeps are given in * TOL and NSWEEP, respectively. * (See the descriptions of N1, A, TOL and NSWEEP.) * * SVA (input/workspace/output) DOUBLE PRECISION array, dimension (N) * On entry, SVA contains the Euclidean norms of the columns of * the matrix A*diag(D). * On exit, SVA contains the Euclidean norms of the columns of * the matrix onexit*diag(D_onexit). * * MV (input) INTEGER * If JOBV .EQ. 'A', then MV rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV = 'N', then MV is not referenced. * * V (input/output) DOUBLE PRECISION array, dimension (LDV,N) * If JOBV .EQ. 'V' then N rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV .EQ. 'A' then MV rows of V are post-multipled by a * sequence of Jacobi rotations. * If JOBV = 'N', then V is not referenced. * * LDV (input) INTEGER * The leading dimension of the array V, LDV >= 1. * If JOBV = 'V', LDV .GE. N. * If JOBV = 'A', LDV .GE. MV. * * EPS (input) DOUBLE PRECISION * EPS = DLAMCH('Epsilon') * * SFMIN (input) DOUBLE PRECISION * SFMIN = DLAMCH('Safe Minimum') * * TOL (input) DOUBLE PRECISION * TOL is the threshold for Jacobi rotations. For a pair * A(:,p), A(:,q) of pivot columns, the Jacobi rotation is * applied only if DABS(COS(angle(A(:,p),A(:,q)))) .GT. TOL. * * NSWEEP (input) INTEGER * NSWEEP is the number of sweeps of Jacobi rotations to be * performed. * * WORK (workspace) DOUBLE PRECISION array, dimension (LWORK) * * LWORK (input) INTEGER * LWORK is the dimension of WORK. LWORK .GE. M. * * INFO (output) INTEGER * = 0 : successful exit. * < 0 : if INFO = -i, then the i-th argument had an illegal value * * ===================================================================== * * .. Local Parameters .. DOUBLE PRECISION ZERO, HALF, ONE, TWO PARAMETER ( ZERO = 0.0D0, HALF = 0.5D0, ONE = 1.0D0, + TWO = 2.0D0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AAPP, AAPP0, AAPQ, AAQQ, APOAQ, AQOAP, BIG, + BIGTHETA, CS, LARGE, MXAAPQ, MXSINJ, ROOTBIG, + ROOTEPS, ROOTSFMIN, ROOTTOL, SMALL, SN, T, + TEMP1, THETA, THSIGN INTEGER BLSKIP, EMPTSW, i, ibr, igl, IERR, IJBLSK, + ISWROT, jbc, jgl, KBL, MVL, NOTROT, nblc, nblr, + p, PSKIPPED, q, ROWSKIP, SWBAND LOGICAL APPLV, ROTOK, RSVEC * .. * .. Local Arrays .. DOUBLE PRECISION FASTR( 5 ) * .. * .. Intrinsic Functions .. INTRINSIC DABS, DMAX1, DBLE, MIN0, DSIGN, DSQRT * .. * .. External Functions .. DOUBLE PRECISION DDOT, DNRM2 INTEGER IDAMAX LOGICAL LSAME EXTERNAL IDAMAX, LSAME, DDOT, DNRM2 * .. * .. External Subroutines .. EXTERNAL DAXPY, DCOPY, DLASCL, DLASSQ, DROTM, DSWAP * .. * .. Executable Statements .. * * Test the input parameters. * APPLV = LSAME( JOBV, 'A' ) RSVEC = LSAME( JOBV, 'V' ) IF( .NOT.( RSVEC .OR. APPLV .OR. LSAME( JOBV, 'N' ) ) ) THEN INFO = -1 ELSE IF( M.LT.0 ) THEN INFO = -2 ELSE IF( ( N.LT.0 ) .OR. ( N.GT.M ) ) THEN INFO = -3 ELSE IF( N1.LT.0 ) THEN INFO = -4 ELSE IF( LDA.LT.M ) THEN INFO = -6 ELSE IF( MV.LT.0 ) THEN INFO = -9 ELSE IF( LDV.LT.M ) THEN INFO = -11 ELSE IF( TOL.LE.EPS ) THEN INFO = -14 ELSE IF( NSWEEP.LT.0 ) THEN INFO = -15 ELSE IF( LWORK.LT.M ) THEN INFO = -17 ELSE INFO = 0 END IF * * #:( IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGSVJ1', -INFO ) RETURN END IF * IF( RSVEC ) THEN MVL = N ELSE IF( APPLV ) THEN MVL = MV END IF RSVEC = RSVEC .OR. APPLV ROOTEPS = DSQRT( EPS ) ROOTSFMIN = DSQRT( SFMIN ) SMALL = SFMIN / EPS BIG = ONE / SFMIN ROOTBIG = ONE / ROOTSFMIN LARGE = BIG / DSQRT( DBLE( M*N ) ) BIGTHETA = ONE / ROOTEPS ROOTTOL = DSQRT( TOL ) * * .. Initialize the right singular vector matrix .. * * RSVEC = LSAME( JOBV, 'Y' ) * EMPTSW = N1*( N-N1 ) NOTROT = 0 FASTR( 1 ) = ZERO * * .. Row-cyclic pivot strategy with de Rijk's pivoting .. * KBL = MIN0( 8, N ) NBLR = N1 / KBL IF( ( NBLR*KBL ).NE.N1 )NBLR = NBLR + 1 * .. the tiling is nblr-by-nblc [tiles] NBLC = ( N-N1 ) / KBL IF( ( NBLC*KBL ).NE.( N-N1 ) )NBLC = NBLC + 1 BLSKIP = ( KBL**2 ) + 1 *[TP] BLKSKIP is a tuning parameter that depends on SWBAND and KBL. ROWSKIP = MIN0( 5, KBL ) *[TP] ROWSKIP is a tuning parameter. SWBAND = 0 *[TP] SWBAND is a tuning parameter. It is meaningful and effective * if SGESVJ is used as a computational routine in the preconditioned * Jacobi SVD algorithm SGESVJ. * * * | * * * [x] [x] [x]| * | * * * [x] [x] [x]| Row-cycling in the nblr-by-nblc [x] blocks. * | * * * [x] [x] [x]| Row-cyclic pivoting inside each [x] block. * |[x] [x] [x] * * * | * |[x] [x] [x] * * * | * |[x] [x] [x] * * * | * * DO 1993 i = 1, NSWEEP * .. go go go ... * MXAAPQ = ZERO MXSINJ = ZERO ISWROT = 0 * NOTROT = 0 PSKIPPED = 0 * DO 2000 ibr = 1, NBLR igl = ( ibr-1 )*KBL + 1 * * *........................................................ * ... go to the off diagonal blocks igl = ( ibr-1 )*KBL + 1 DO 2010 jbc = 1, NBLC jgl = N1 + ( jbc-1 )*KBL + 1 * doing the block at ( ibr, jbc ) IJBLSK = 0 DO 2100 p = igl, MIN0( igl+KBL-1, N1 ) AAPP = SVA( p ) IF( AAPP.GT.ZERO ) THEN PSKIPPED = 0 DO 2200 q = jgl, MIN0( jgl+KBL-1, N ) * AAQQ = SVA( q ) IF( AAQQ.GT.ZERO ) THEN AAPP0 = AAPP * * .. M x 2 Jacobi SVD .. * * .. Safe Gram matrix computation .. * IF( AAQQ.GE.ONE ) THEN IF( AAPP.GE.AAQQ ) THEN ROTOK = ( SMALL*AAPP ).LE.AAQQ ELSE ROTOK = ( SMALL*AAQQ ).LE.AAPP END IF IF( AAPP.LT.( BIG / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, p ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAPP, D( p ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, q ), + 1 )*D( q ) / AAQQ END IF ELSE IF( AAPP.GE.AAQQ ) THEN ROTOK = AAPP.LE.( AAQQ / SMALL ) ELSE ROTOK = AAQQ.LE.( AAPP / SMALL ) END IF IF( AAPP.GT.( SMALL / AAQQ ) ) THEN AAPQ = ( DDOT( M, A( 1, p ), 1, A( 1, + q ), 1 )*D( p )*D( q ) / AAQQ ) + / AAPP ELSE CALL DCOPY( M, A( 1, q ), 1, WORK, 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, D( q ), + M, 1, WORK, LDA, IERR ) AAPQ = DDOT( M, WORK, 1, A( 1, p ), + 1 )*D( p ) / AAPP END IF END IF MXAAPQ = DMAX1( MXAAPQ, DABS( AAPQ ) ) * TO rotate or NOT to rotate, THAT is the question ... * IF( DABS( AAPQ ).GT.TOL ) THEN NOTROT = 0 * ROTATED = ROTATED + 1 PSKIPPED = 0 ISWROT = ISWROT + 1 * IF( ROTOK ) THEN * AQOAP = AAQQ / AAPP APOAQ = AAPP / AAQQ THETA = -HALF*DABS( AQOAP-APOAQ ) / + AAPQ IF( AAQQ.GT.AAPP0 )THETA = -THETA IF( DABS( THETA ).GT.BIGTHETA ) THEN T = HALF / THETA FASTR( 3 ) = T*D( p ) / D( q ) FASTR( 4 ) = -T*D( q ) / D( p ) CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, + V( 1, q ), 1, + FASTR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( DMAX1( ZERO, + ONE-T*AQOAP*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, DABS( T ) ) ELSE * * .. choose correct signum for THETA and rotate * THSIGN = -DSIGN( ONE, AAPQ ) IF( AAQQ.GT.AAPP0 )THSIGN = -THSIGN T = ONE / ( THETA+THSIGN* + DSQRT( ONE+THETA*THETA ) ) CS = DSQRT( ONE / ( ONE+T*T ) ) SN = T*CS MXSINJ = DMAX1( MXSINJ, DABS( SN ) ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE+T*APOAQ*AAPQ ) ) AAPP = AAPP*DSQRT( ONE-T*AQOAP* + AAPQ ) APOAQ = D( p ) / D( q ) AQOAP = D( q ) / D( p ) IF( D( p ).GE.ONE ) THEN * IF( D( q ).GE.ONE ) THEN FASTR( 3 ) = T*APOAQ FASTR( 4 ) = -T*AQOAP D( p ) = D( p )*CS D( q ) = D( q )*CS CALL DROTM( M, A( 1, p ), 1, + A( 1, q ), 1, + FASTR ) IF( RSVEC )CALL DROTM( MVL, + V( 1, p ), 1, V( 1, q ), + 1, FASTR ) ELSE CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF D( p ) = D( p )*CS D( q ) = D( q ) / CS END IF ELSE IF( D( q ).GE.ONE ) THEN CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) IF( RSVEC ) THEN CALL DAXPY( MVL, T*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF D( p ) = D( p ) / CS D( q ) = D( q )*CS ELSE IF( D( p ).GE.D( q ) ) THEN CALL DAXPY( M, -T*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) CALL DAXPY( M, CS*SN*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) D( p ) = D( p )*CS D( q ) = D( q ) / CS IF( RSVEC ) THEN CALL DAXPY( MVL, + -T*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) CALL DAXPY( MVL, + CS*SN*APOAQ, + V( 1, p ), 1, + V( 1, q ), 1 ) END IF ELSE CALL DAXPY( M, T*APOAQ, + A( 1, p ), 1, + A( 1, q ), 1 ) CALL DAXPY( M, + -CS*SN*AQOAP, + A( 1, q ), 1, + A( 1, p ), 1 ) D( p ) = D( p ) / CS D( q ) = D( q )*CS IF( RSVEC ) THEN CALL DAXPY( MVL, + T*APOAQ, V( 1, p ), + 1, V( 1, q ), 1 ) CALL DAXPY( MVL, + -CS*SN*AQOAP, + V( 1, q ), 1, + V( 1, p ), 1 ) END IF END IF END IF END IF END IF ELSE IF( AAPP.GT.AAQQ ) THEN CALL DCOPY( M, A( 1, p ), 1, WORK, + 1 ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, WORK, LDA, IERR ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, A( 1, q ), LDA, + IERR ) TEMP1 = -AAPQ*D( p ) / D( q ) CALL DAXPY( M, TEMP1, WORK, 1, + A( 1, q ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAQQ, + M, 1, A( 1, q ), LDA, + IERR ) SVA( q ) = AAQQ*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) ELSE CALL DCOPY( M, A( 1, q ), 1, WORK, + 1 ) CALL DLASCL( 'G', 0, 0, AAQQ, ONE, + M, 1, WORK, LDA, IERR ) CALL DLASCL( 'G', 0, 0, AAPP, ONE, + M, 1, A( 1, p ), LDA, + IERR ) TEMP1 = -AAPQ*D( q ) / D( p ) CALL DAXPY( M, TEMP1, WORK, 1, + A( 1, p ), 1 ) CALL DLASCL( 'G', 0, 0, ONE, AAPP, + M, 1, A( 1, p ), LDA, + IERR ) SVA( p ) = AAPP*DSQRT( DMAX1( ZERO, + ONE-AAPQ*AAPQ ) ) MXSINJ = DMAX1( MXSINJ, SFMIN ) END IF END IF * END IF ROTOK THEN ... ELSE * * In the case of cancellation in updating SVA(q) * .. recompute SVA(q) IF( ( SVA( q ) / AAQQ )**2.LE.ROOTEPS ) + THEN IF( ( AAQQ.LT.ROOTBIG ) .AND. + ( AAQQ.GT.ROOTSFMIN ) ) THEN SVA( q ) = DNRM2( M, A( 1, q ), 1 )* + D( q ) ELSE T = ZERO AAQQ = ZERO CALL DLASSQ( M, A( 1, q ), 1, T, + AAQQ ) SVA( q ) = T*DSQRT( AAQQ )*D( q ) END IF END IF IF( ( AAPP / AAPP0 )**2.LE.ROOTEPS ) THEN IF( ( AAPP.LT.ROOTBIG ) .AND. + ( AAPP.GT.ROOTSFMIN ) ) THEN AAPP = DNRM2( M, A( 1, p ), 1 )* + D( p ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, p ), 1, T, + AAPP ) AAPP = T*DSQRT( AAPP )*D( p ) END IF SVA( p ) = AAPP END IF * end of OK rotation ELSE NOTROT = NOTROT + 1 * SKIPPED = SKIPPED + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF ELSE NOTROT = NOTROT + 1 PSKIPPED = PSKIPPED + 1 IJBLSK = IJBLSK + 1 END IF * IF ( NOTROT .GE. EMPTSW ) GO TO 2011 IF( ( i.LE.SWBAND ) .AND. ( IJBLSK.GE.BLSKIP ) ) + THEN SVA( p ) = AAPP NOTROT = 0 GO TO 2011 END IF IF( ( i.LE.SWBAND ) .AND. + ( PSKIPPED.GT.ROWSKIP ) ) THEN AAPP = -AAPP NOTROT = 0 GO TO 2203 END IF * 2200 CONTINUE * end of the q-loop 2203 CONTINUE SVA( p ) = AAPP * ELSE IF( AAPP.EQ.ZERO )NOTROT = NOTROT + + MIN0( jgl+KBL-1, N ) - jgl + 1 IF( AAPP.LT.ZERO )NOTROT = 0 *** IF ( NOTROT .GE. EMPTSW ) GO TO 2011 END IF 2100 CONTINUE * end of the p-loop 2010 CONTINUE * end of the jbc-loop 2011 CONTINUE *2011 bailed out of the jbc-loop DO 2012 p = igl, MIN0( igl+KBL-1, N ) SVA( p ) = DABS( SVA( p ) ) 2012 CONTINUE *** IF ( NOTROT .GE. EMPTSW ) GO TO 1994 2000 CONTINUE *2000 :: end of the ibr-loop * * .. update SVA(N) IF( ( SVA( N ).LT.ROOTBIG ) .AND. ( SVA( N ).GT.ROOTSFMIN ) ) + THEN SVA( N ) = DNRM2( M, A( 1, N ), 1 )*D( N ) ELSE T = ZERO AAPP = ZERO CALL DLASSQ( M, A( 1, N ), 1, T, AAPP ) SVA( N ) = T*DSQRT( AAPP )*D( N ) END IF * * Additional steering devices * IF( ( i.LT.SWBAND ) .AND. ( ( MXAAPQ.LE.ROOTTOL ) .OR. + ( ISWROT.LE.N ) ) )SWBAND = i IF( ( i.GT.SWBAND+1 ) .AND. ( MXAAPQ.LT.DBLE( N )*TOL ) .AND. + ( DBLE( N )*MXAAPQ*MXSINJ.LT.TOL ) ) THEN GO TO 1994 END IF * IF( NOTROT.GE.EMPTSW )GO TO 1994 1993 CONTINUE * end i=1:NSWEEP loop * #:) Reaching this point means that the procedure has completed the given * number of sweeps. INFO = NSWEEP - 1 GO TO 1995 1994 CONTINUE * #:) Reaching this point means that during the i-th sweep all pivots were * below the given threshold, causing early exit. INFO = 0 * #:) INFO = 0 confirms successful iterations. 1995 CONTINUE * * Sort the vector D * DO 5991 p = 1, N - 1 q = IDAMAX( N-p+1, SVA( p ), 1 ) + p - 1 IF( p.NE.q ) THEN TEMP1 = SVA( p ) SVA( p ) = SVA( q ) SVA( q ) = TEMP1 TEMP1 = D( p ) D( p ) = D( q ) D( q ) = TEMP1 CALL DSWAP( M, A( 1, p ), 1, A( 1, q ), 1 ) IF( RSVEC )CALL DSWAP( MVL, V( 1, p ), 1, V( 1, q ), 1 ) END IF 5991 CONTINUE * RETURN * .. * .. END OF DGSVJ1 * .. END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGGBAK( JOB, SIDE, N, ILO, IHI, LSCALE, RSCALE, M, V, $ LDV, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOB, SIDE INTEGER IHI, ILO, INFO, LDV, M, N * .. * .. Array Arguments .. DOUBLE PRECISION LSCALE( * ), RSCALE( * ), V( LDV, * ) * .. * * Purpose * ======= * * DGGBAK forms the right or left eigenvectors of a real generalized * eigenvalue problem A*x = lambda*B*x, by backward transformation on * the computed eigenvectors of the balanced pair of matrices output by * DGGBAL. * * Arguments * ========= * * JOB (input) CHARACTER*1 * Specifies the type of backward transformation required: * = 'N': do nothing, return immediately; * = 'P': do backward transformation for permutation only; * = 'S': do backward transformation for scaling only; * = 'B': do backward transformations for both permutation and * scaling. * JOB must be the same as the argument JOB supplied to DGGBAL. * * SIDE (input) CHARACTER*1 * = 'R': V contains right eigenvectors; * = 'L': V contains left eigenvectors. * * N (input) INTEGER * The number of rows of the matrix V. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * The integers ILO and IHI determined by DGGBAL. * 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. * * LSCALE (input) DOUBLE PRECISION array, dimension (N) * Details of the permutations and/or scaling factors applied * to the left side of A and B, as returned by DGGBAL. * * RSCALE (input) DOUBLE PRECISION array, dimension (N) * Details of the permutations and/or scaling factors applied * to the right side of A and B, as returned by DGGBAL. * * M (input) INTEGER * The number of columns of the matrix V. M >= 0. * * V (input/output) DOUBLE PRECISION array, dimension (LDV,M) * On entry, the matrix of right or left eigenvectors to be * transformed, as returned by DTGEVC. * On exit, V is overwritten by the transformed eigenvectors. * * LDV (input) INTEGER * The leading dimension of the matrix V. LDV >= max(1,N). * * INFO (output) INTEGER * = 0: successful exit. * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * See R.C. Ward, Balancing the generalized eigenvalue problem, * SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. * * ===================================================================== * * .. Local Scalars .. LOGICAL LEFTV, RIGHTV INTEGER I, K * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DSCAL, DSWAP, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input parameters * RIGHTV = LSAME( SIDE, 'R' ) LEFTV = LSAME( SIDE, 'L' ) * INFO = 0 IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN INFO = -1 ELSE IF( .NOT.RIGHTV .AND. .NOT.LEFTV ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( ILO.LT.1 ) THEN INFO = -4 ELSE IF( N.EQ.0 .AND. IHI.EQ.0 .AND. ILO.NE.1 ) THEN INFO = -4 ELSE IF( N.GT.0 .AND. ( IHI.LT.ILO .OR. IHI.GT.MAX( 1, N ) ) ) $ THEN INFO = -5 ELSE IF( N.EQ.0 .AND. ILO.EQ.1 .AND. IHI.NE.0 ) THEN INFO = -5 ELSE IF( M.LT.0 ) THEN INFO = -8 ELSE IF( LDV.LT.MAX( 1, N ) ) THEN INFO = -10 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGGBAK', -INFO ) RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN IF( M.EQ.0 ) $ RETURN IF( LSAME( JOB, 'N' ) ) $ RETURN * IF( ILO.EQ.IHI ) $ GO TO 30 * * Backward balance * IF( LSAME( JOB, 'S' ) .OR. LSAME( JOB, 'B' ) ) THEN * * Backward transformation on right eigenvectors * IF( RIGHTV ) THEN DO 10 I = ILO, IHI CALL DSCAL( M, RSCALE( I ), V( I, 1 ), LDV ) 10 CONTINUE END IF * * Backward transformation on left eigenvectors * IF( LEFTV ) THEN DO 20 I = ILO, IHI CALL DSCAL( M, LSCALE( I ), V( I, 1 ), LDV ) 20 CONTINUE END IF END IF * * Backward permutation * 30 CONTINUE IF( LSAME( JOB, 'P' ) .OR. LSAME( JOB, 'B' ) ) THEN * * Backward permutation on right eigenvectors * IF( RIGHTV ) THEN IF( ILO.EQ.1 ) $ GO TO 50 * DO 40 I = ILO - 1, 1, -1 K = RSCALE( I ) IF( K.EQ.I ) $ GO TO 40 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 40 CONTINUE * 50 CONTINUE IF( IHI.EQ.N ) $ GO TO 70 DO 60 I = IHI + 1, N K = RSCALE( I ) IF( K.EQ.I ) $ GO TO 60 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 60 CONTINUE END IF * * Backward permutation on left eigenvectors * 70 CONTINUE IF( LEFTV ) THEN IF( ILO.EQ.1 ) $ GO TO 90 DO 80 I = ILO - 1, 1, -1 K = LSCALE( I ) IF( K.EQ.I ) $ GO TO 80 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 80 CONTINUE * 90 CONTINUE IF( IHI.EQ.N ) $ GO TO 110 DO 100 I = IHI + 1, N K = LSCALE( I ) IF( K.EQ.I ) $ GO TO 100 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 100 CONTINUE END IF END IF * 110 CONTINUE * RETURN * * End of DGGBAK * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEQRF( M, N, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER INFO, LDA, LWORK, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DGEQRF computes a QR factorization of a real M-by-N matrix A: * A = Q * R. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the M-by-N matrix A. * On exit, the elements on and above the diagonal of the array * contain the min(M,N)-by-N upper trapezoidal matrix R (R is * upper triangular if m >= n); the elements below the diagonal, * with the array TAU, represent the orthogonal matrix Q as a * product of min(m,n) elementary reflectors (see Further * Details). * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * TAU (output) DOUBLE PRECISION array, dimension (min(M,N)) * The scalar factors of the elementary reflectors (see Further * Details). * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,N). * For optimum performance LWORK >= N*NB, where NB is * the optimal blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * Further Details * =============== * * The matrix Q is represented as a product of elementary reflectors * * Q = H(1) H(2) . . . H(k), where k = min(m,n). * * Each H(i) has the form * * H(i) = I - tau * v * v' * * where tau is a real scalar, and v is a real vector with * v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), * and tau in TAU(i). * * ===================================================================== * * .. Local Scalars .. LOGICAL LQUERY INTEGER I, IB, IINFO, IWS, K, LDWORK, LWKOPT, NB, $ NBMIN, NX * .. * .. External Subroutines .. EXTERNAL DGEQR2, DLARFB, DLARFT, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 NB = ILAENV( 1, 'DGEQRF', ' ', M, N, -1, -1 ) LWKOPT = N*NB WORK( 1 ) = LWKOPT LQUERY = ( LWORK.EQ.-1 ) IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN INFO = -7 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEQRF', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * K = MIN( M, N ) IF( K.EQ.0 ) THEN WORK( 1 ) = 1 RETURN END IF * NBMIN = 2 NX = 0 IWS = N IF( NB.GT.1 .AND. NB.LT.K ) THEN * * Determine when to cross over from blocked to unblocked code. * NX = MAX( 0, ILAENV( 3, 'DGEQRF', ' ', M, N, -1, -1 ) ) IF( NX.LT.K ) THEN * * Determine if workspace is large enough for blocked code. * LDWORK = N IWS = LDWORK*NB IF( LWORK.LT.IWS ) THEN * * Not enough workspace to use optimal NB: reduce NB and * determine the minimum value of NB. * NB = LWORK / LDWORK NBMIN = MAX( 2, ILAENV( 2, 'DGEQRF', ' ', M, N, -1, $ -1 ) ) END IF END IF END IF * IF( NB.GE.NBMIN .AND. NB.LT.K .AND. NX.LT.K ) THEN * * Use blocked code initially * DO 10 I = 1, K - NX, NB IB = MIN( K-I+1, NB ) * * Compute the QR factorization of the current block * A(i:m,i:i+ib-1) * CALL DGEQR2( M-I+1, IB, A( I, I ), LDA, TAU( I ), WORK, $ IINFO ) IF( I+IB.LE.N ) THEN * * Form the triangular factor of the block reflector * H = H(i) H(i+1) . . . H(i+ib-1) * CALL DLARFT( 'Forward', 'Columnwise', M-I+1, IB, $ A( I, I ), LDA, TAU( I ), WORK, LDWORK ) * * Apply H' to A(i:m,i+ib:n) from the left * CALL DLARFB( 'Left', 'Transpose', 'Forward', $ 'Columnwise', M-I+1, N-I-IB+1, IB, $ A( I, I ), LDA, WORK, LDWORK, A( I, I+IB ), $ LDA, WORK( IB+1 ), LDWORK ) END IF 10 CONTINUE ELSE I = 1 END IF * * Use unblocked code to factor the last or only block. * IF( I.LE.K ) $ CALL DGEQR2( M-I+1, N-I+1, A( I, I ), LDA, TAU( I ), WORK, $ IINFO ) * WORK( 1 ) = IWS RETURN * * End of DGEQRF * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGGHRD( COMPQ, COMPZ, N, ILO, IHI, A, LDA, B, LDB, Q, $ LDQ, Z, LDZ, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER COMPQ, COMPZ INTEGER IHI, ILO, INFO, LDA, LDB, LDQ, LDZ, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), Q( LDQ, * ), $ Z( LDZ, * ) * .. * * Purpose * ======= * * DGGHRD reduces a pair of real matrices (A,B) to generalized upper * Hessenberg form using orthogonal transformations, where A is a * general matrix and B is upper triangular. The form of the * generalized eigenvalue problem is * A*x = lambda*B*x, * and B is typically made upper triangular by computing its QR * factorization and moving the orthogonal matrix Q to the left side * of the equation. * * This subroutine simultaneously reduces A to a Hessenberg matrix H: * Q**T*A*Z = H * and transforms B to another upper triangular matrix T: * Q**T*B*Z = T * in order to reduce the problem to its standard form * H*y = lambda*T*y * where y = Z**T*x. * * The orthogonal matrices Q and Z are determined as products of Givens * rotations. They may either be formed explicitly, or they may be * postmultiplied into input matrices Q1 and Z1, so that * * Q1 * A * Z1**T = (Q1*Q) * H * (Z1*Z)**T * * Q1 * B * Z1**T = (Q1*Q) * T * (Z1*Z)**T * * If Q1 is the orthogonal matrix from the QR factorization of B in the * original equation A*x = lambda*B*x, then DGGHRD reduces the original * problem to generalized Hessenberg form. * * Arguments * ========= * * COMPQ (input) CHARACTER*1 * = 'N': do not compute Q; * = 'I': Q is initialized to the unit matrix, and the * orthogonal matrix Q is returned; * = 'V': Q must contain an orthogonal matrix Q1 on entry, * and the product Q1*Q is returned. * * COMPZ (input) CHARACTER*1 * = 'N': do not compute Z; * = 'I': Z is initialized to the unit matrix, and the * orthogonal matrix Z is returned; * = 'V': Z must contain an orthogonal matrix Z1 on entry, * and the product Z1*Z is returned. * * N (input) INTEGER * The order of the matrices A and B. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * ILO and IHI mark the rows and columns of A which are to be * reduced. It is assumed that A is already upper triangular * in rows and columns 1:ILO-1 and IHI+1:N. ILO and IHI are * normally set by a previous call to SGGBAL; otherwise they * should be set to 1 and N respectively. * 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA, N) * On entry, the N-by-N general matrix to be reduced. * On exit, the upper triangle and the first subdiagonal of A * are overwritten with the upper Hessenberg matrix H, and the * rest is set to zero. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * B (input/output) DOUBLE PRECISION array, dimension (LDB, N) * On entry, the N-by-N upper triangular matrix B. * On exit, the upper triangular matrix T = Q**T B Z. The * elements below the diagonal are set to zero. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,N). * * Q (input/output) DOUBLE PRECISION array, dimension (LDQ, N) * On entry, if COMPQ = 'V', the orthogonal matrix Q1, * typically from the QR factorization of B. * On exit, if COMPQ='I', the orthogonal matrix Q, and if * COMPQ = 'V', the product Q1*Q. * Not referenced if COMPQ='N'. * * LDQ (input) INTEGER * The leading dimension of the array Q. * LDQ >= N if COMPQ='V' or 'I'; LDQ >= 1 otherwise. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ, N) * On entry, if COMPZ = 'V', the orthogonal matrix Z1. * On exit, if COMPZ='I', the orthogonal matrix Z, and if * COMPZ = 'V', the product Z1*Z. * Not referenced if COMPZ='N'. * * LDZ (input) INTEGER * The leading dimension of the array Z. * LDZ >= N if COMPZ='V' or 'I'; LDZ >= 1 otherwise. * * INFO (output) INTEGER * = 0: successful exit. * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * This routine reduces A to Hessenberg and B to triangular form by * an unblocked reduction, as described in _Matrix_Computations_, * by Golub and Van Loan (Johns Hopkins Press.) * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. LOGICAL ILQ, ILZ INTEGER ICOMPQ, ICOMPZ, JCOL, JROW DOUBLE PRECISION C, S, TEMP * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DLARTG, DLASET, DROT, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Decode COMPQ * IF( LSAME( COMPQ, 'N' ) ) THEN ILQ = .FALSE. ICOMPQ = 1 ELSE IF( LSAME( COMPQ, 'V' ) ) THEN ILQ = .TRUE. ICOMPQ = 2 ELSE IF( LSAME( COMPQ, 'I' ) ) THEN ILQ = .TRUE. ICOMPQ = 3 ELSE ICOMPQ = 0 END IF * * Decode COMPZ * IF( LSAME( COMPZ, 'N' ) ) THEN ILZ = .FALSE. ICOMPZ = 1 ELSE IF( LSAME( COMPZ, 'V' ) ) THEN ILZ = .TRUE. ICOMPZ = 2 ELSE IF( LSAME( COMPZ, 'I' ) ) THEN ILZ = .TRUE. ICOMPZ = 3 ELSE ICOMPZ = 0 END IF * * Test the input parameters. * INFO = 0 IF( ICOMPQ.LE.0 ) THEN INFO = -1 ELSE IF( ICOMPZ.LE.0 ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( ILO.LT.1 ) THEN INFO = -4 ELSE IF( IHI.GT.N .OR. IHI.LT.ILO-1 ) THEN INFO = -5 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -7 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -9 ELSE IF( ( ILQ .AND. LDQ.LT.N ) .OR. LDQ.LT.1 ) THEN INFO = -11 ELSE IF( ( ILZ .AND. LDZ.LT.N ) .OR. LDZ.LT.1 ) THEN INFO = -13 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGGHRD', -INFO ) RETURN END IF * * Initialize Q and Z if desired. * IF( ICOMPQ.EQ.3 ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, Q, LDQ ) IF( ICOMPZ.EQ.3 ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, Z, LDZ ) * * Quick return if possible * IF( N.LE.1 ) $ RETURN * * Zero out lower triangle of B * DO 20 JCOL = 1, N - 1 DO 10 JROW = JCOL + 1, N B( JROW, JCOL ) = ZERO 10 CONTINUE 20 CONTINUE * * Reduce A and B * DO 40 JCOL = ILO, IHI - 2 * DO 30 JROW = IHI, JCOL + 2, -1 * * Step 1: rotate rows JROW-1, JROW to kill A(JROW,JCOL) * TEMP = A( JROW-1, JCOL ) CALL DLARTG( TEMP, A( JROW, JCOL ), C, S, $ A( JROW-1, JCOL ) ) A( JROW, JCOL ) = ZERO CALL DROT( N-JCOL, A( JROW-1, JCOL+1 ), LDA, $ A( JROW, JCOL+1 ), LDA, C, S ) CALL DROT( N+2-JROW, B( JROW-1, JROW-1 ), LDB, $ B( JROW, JROW-1 ), LDB, C, S ) IF( ILQ ) $ CALL DROT( N, Q( 1, JROW-1 ), 1, Q( 1, JROW ), 1, C, S ) * * Step 2: rotate columns JROW, JROW-1 to kill B(JROW,JROW-1) * TEMP = B( JROW, JROW ) CALL DLARTG( TEMP, B( JROW, JROW-1 ), C, S, $ B( JROW, JROW ) ) B( JROW, JROW-1 ) = ZERO CALL DROT( IHI, A( 1, JROW ), 1, A( 1, JROW-1 ), 1, C, S ) CALL DROT( JROW-1, B( 1, JROW ), 1, B( 1, JROW-1 ), 1, C, $ S ) IF( ILZ ) $ CALL DROT( N, Z( 1, JROW ), 1, Z( 1, JROW-1 ), 1, C, S ) 30 CONTINUE 40 CONTINUE * RETURN * * End of DGGHRD * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGGBAL( JOB, N, A, LDA, B, LDB, ILO, IHI, LSCALE, $ RSCALE, WORK, INFO ) * * -- LAPACK routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. CHARACTER JOB INTEGER IHI, ILO, INFO, LDA, LDB, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), LSCALE( * ), $ RSCALE( * ), WORK( * ) * .. * * Purpose * ======= * * DGGBAL balances a pair of general real matrices (A,B). This * involves, first, permuting A and B by similarity transformations to * isolate eigenvalues in the first 1 to ILO$-$1 and last IHI+1 to N * elements on the diagonal; and second, applying a diagonal similarity * transformation to rows and columns ILO to IHI to make the rows * and columns as close in norm as possible. Both steps are optional. * * Balancing may reduce the 1-norm of the matrices, and improve the * accuracy of the computed eigenvalues and/or eigenvectors in the * generalized eigenvalue problem A*x = lambda*B*x. * * Arguments * ========= * * JOB (input) CHARACTER*1 * Specifies the operations to be performed on A and B: * = 'N': none: simply set ILO = 1, IHI = N, LSCALE(I) = 1.0 * and RSCALE(I) = 1.0 for i = 1,...,N. * = 'P': permute only; * = 'S': scale only; * = 'B': both permute and scale. * * N (input) INTEGER * The order of the matrices A and B. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the input matrix A. * On exit, A is overwritten by the balanced matrix. * If JOB = 'N', A is not referenced. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * B (input/output) DOUBLE PRECISION array, dimension (LDB,N) * On entry, the input matrix B. * On exit, B is overwritten by the balanced matrix. * If JOB = 'N', B is not referenced. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,N). * * ILO (output) INTEGER * IHI (output) INTEGER * ILO and IHI are set to integers such that on exit * A(i,j) = 0 and B(i,j) = 0 if i > j and * j = 1,...,ILO-1 or i = IHI+1,...,N. * If JOB = 'N' or 'S', ILO = 1 and IHI = N. * * LSCALE (output) DOUBLE PRECISION array, dimension (N) * Details of the permutations and scaling factors applied * to the left side of A and B. If P(j) is the index of the * row interchanged with row j, and D(j) * is the scaling factor applied to row j, then * LSCALE(j) = P(j) for J = 1,...,ILO-1 * = D(j) for J = ILO,...,IHI * = P(j) for J = IHI+1,...,N. * The order in which the interchanges are made is N to IHI+1, * then 1 to ILO-1. * * RSCALE (output) DOUBLE PRECISION array, dimension (N) * Details of the permutations and scaling factors applied * to the right side of A and B. If P(j) is the index of the * column interchanged with column j, and D(j) * is the scaling factor applied to column j, then * LSCALE(j) = P(j) for J = 1,...,ILO-1 * = D(j) for J = ILO,...,IHI * = P(j) for J = IHI+1,...,N. * The order in which the interchanges are made is N to IHI+1, * then 1 to ILO-1. * * WORK (workspace) DOUBLE PRECISION array, dimension (lwork) * lwork must be at least max(1,6*N) when JOB = 'S' or 'B', and * at least 1 when JOB = 'N' or 'P'. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * See R.C. WARD, Balancing the generalized eigenvalue problem, * SIAM J. Sci. Stat. Comp. 2 (1981), 141-152. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, HALF, ONE PARAMETER ( ZERO = 0.0D+0, HALF = 0.5D+0, ONE = 1.0D+0 ) DOUBLE PRECISION THREE, SCLFAC PARAMETER ( THREE = 3.0D+0, SCLFAC = 1.0D+1 ) * .. * .. Local Scalars .. INTEGER I, ICAB, IFLOW, IP1, IR, IRAB, IT, J, JC, JP1, $ K, KOUNT, L, LCAB, LM1, LRAB, LSFMAX, LSFMIN, $ M, NR, NRP2 DOUBLE PRECISION ALPHA, BASL, BETA, CAB, CMAX, COEF, COEF2, $ COEF5, COR, EW, EWC, GAMMA, PGAMMA, RAB, SFMAX, $ SFMIN, SUM, T, TA, TB, TC * .. * .. External Functions .. LOGICAL LSAME INTEGER IDAMAX DOUBLE PRECISION DDOT, DLAMCH EXTERNAL LSAME, IDAMAX, DDOT, DLAMCH * .. * .. External Subroutines .. EXTERNAL DAXPY, DSCAL, DSWAP, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, INT, LOG10, MAX, MIN, SIGN * .. * .. Executable Statements .. * * Test the input parameters * INFO = 0 IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -4 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -6 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGGBAL', -INFO ) RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) THEN ILO = 1 IHI = N RETURN END IF * IF( N.EQ.1 ) THEN ILO = 1 IHI = N LSCALE( 1 ) = ONE RSCALE( 1 ) = ONE RETURN END IF * IF( LSAME( JOB, 'N' ) ) THEN ILO = 1 IHI = N DO 10 I = 1, N LSCALE( I ) = ONE RSCALE( I ) = ONE 10 CONTINUE RETURN END IF * K = 1 L = N IF( LSAME( JOB, 'S' ) ) $ GO TO 190 * GO TO 30 * * Permute the matrices A and B to isolate the eigenvalues. * * Find row with one nonzero in columns 1 through L * 20 CONTINUE L = LM1 IF( L.NE.1 ) $ GO TO 30 * RSCALE( 1 ) = ONE LSCALE( 1 ) = ONE GO TO 190 * 30 CONTINUE LM1 = L - 1 DO 80 I = L, 1, -1 DO 40 J = 1, LM1 JP1 = J + 1 IF( A( I, J ).NE.ZERO .OR. B( I, J ).NE.ZERO ) $ GO TO 50 40 CONTINUE J = L GO TO 70 * 50 CONTINUE DO 60 J = JP1, L IF( A( I, J ).NE.ZERO .OR. B( I, J ).NE.ZERO ) $ GO TO 80 60 CONTINUE J = JP1 - 1 * 70 CONTINUE M = L IFLOW = 1 GO TO 160 80 CONTINUE GO TO 100 * * Find column with one nonzero in rows K through N * 90 CONTINUE K = K + 1 * 100 CONTINUE DO 150 J = K, L DO 110 I = K, LM1 IP1 = I + 1 IF( A( I, J ).NE.ZERO .OR. B( I, J ).NE.ZERO ) $ GO TO 120 110 CONTINUE I = L GO TO 140 120 CONTINUE DO 130 I = IP1, L IF( A( I, J ).NE.ZERO .OR. B( I, J ).NE.ZERO ) $ GO TO 150 130 CONTINUE I = IP1 - 1 140 CONTINUE M = K IFLOW = 2 GO TO 160 150 CONTINUE GO TO 190 * * Permute rows M and I * 160 CONTINUE LSCALE( M ) = I IF( I.EQ.M ) $ GO TO 170 CALL DSWAP( N-K+1, A( I, K ), LDA, A( M, K ), LDA ) CALL DSWAP( N-K+1, B( I, K ), LDB, B( M, K ), LDB ) * * Permute columns M and J * 170 CONTINUE RSCALE( M ) = J IF( J.EQ.M ) $ GO TO 180 CALL DSWAP( L, A( 1, J ), 1, A( 1, M ), 1 ) CALL DSWAP( L, B( 1, J ), 1, B( 1, M ), 1 ) * 180 CONTINUE GO TO ( 20, 90 )IFLOW * 190 CONTINUE ILO = K IHI = L * IF( LSAME( JOB, 'P' ) ) THEN DO 195 I = ILO, IHI LSCALE( I ) = ONE RSCALE( I ) = ONE 195 CONTINUE RETURN END IF * IF( ILO.EQ.IHI ) $ RETURN * * Balance the submatrix in rows ILO to IHI. * NR = IHI - ILO + 1 DO 200 I = ILO, IHI RSCALE( I ) = ZERO LSCALE( I ) = ZERO * WORK( I ) = ZERO WORK( I+N ) = ZERO WORK( I+2*N ) = ZERO WORK( I+3*N ) = ZERO WORK( I+4*N ) = ZERO WORK( I+5*N ) = ZERO 200 CONTINUE * * Compute right side vector in resulting linear equations * BASL = LOG10( SCLFAC ) DO 240 I = ILO, IHI DO 230 J = ILO, IHI TB = B( I, J ) TA = A( I, J ) IF( TA.EQ.ZERO ) $ GO TO 210 TA = LOG10( ABS( TA ) ) / BASL 210 CONTINUE IF( TB.EQ.ZERO ) $ GO TO 220 TB = LOG10( ABS( TB ) ) / BASL 220 CONTINUE WORK( I+4*N ) = WORK( I+4*N ) - TA - TB WORK( J+5*N ) = WORK( J+5*N ) - TA - TB 230 CONTINUE 240 CONTINUE * COEF = ONE / DBLE( 2*NR ) COEF2 = COEF*COEF COEF5 = HALF*COEF2 NRP2 = NR + 2 BETA = ZERO IT = 1 * * Start generalized conjugate gradient iteration * 250 CONTINUE * GAMMA = DDOT( NR, WORK( ILO+4*N ), 1, WORK( ILO+4*N ), 1 ) + $ DDOT( NR, WORK( ILO+5*N ), 1, WORK( ILO+5*N ), 1 ) * EW = ZERO EWC = ZERO DO 260 I = ILO, IHI EW = EW + WORK( I+4*N ) EWC = EWC + WORK( I+5*N ) 260 CONTINUE * GAMMA = COEF*GAMMA - COEF2*( EW**2+EWC**2 ) - COEF5*( EW-EWC )**2 IF( GAMMA.EQ.ZERO ) $ GO TO 350 IF( IT.NE.1 ) $ BETA = GAMMA / PGAMMA T = COEF5*( EWC-THREE*EW ) TC = COEF5*( EW-THREE*EWC ) * CALL DSCAL( NR, BETA, WORK( ILO ), 1 ) CALL DSCAL( NR, BETA, WORK( ILO+N ), 1 ) * CALL DAXPY( NR, COEF, WORK( ILO+4*N ), 1, WORK( ILO+N ), 1 ) CALL DAXPY( NR, COEF, WORK( ILO+5*N ), 1, WORK( ILO ), 1 ) * DO 270 I = ILO, IHI WORK( I ) = WORK( I ) + TC WORK( I+N ) = WORK( I+N ) + T 270 CONTINUE * * Apply matrix to vector * DO 300 I = ILO, IHI KOUNT = 0 SUM = ZERO DO 290 J = ILO, IHI IF( A( I, J ).EQ.ZERO ) $ GO TO 280 KOUNT = KOUNT + 1 SUM = SUM + WORK( J ) 280 CONTINUE IF( B( I, J ).EQ.ZERO ) $ GO TO 290 KOUNT = KOUNT + 1 SUM = SUM + WORK( J ) 290 CONTINUE WORK( I+2*N ) = DBLE( KOUNT )*WORK( I+N ) + SUM 300 CONTINUE * DO 330 J = ILO, IHI KOUNT = 0 SUM = ZERO DO 320 I = ILO, IHI IF( A( I, J ).EQ.ZERO ) $ GO TO 310 KOUNT = KOUNT + 1 SUM = SUM + WORK( I+N ) 310 CONTINUE IF( B( I, J ).EQ.ZERO ) $ GO TO 320 KOUNT = KOUNT + 1 SUM = SUM + WORK( I+N ) 320 CONTINUE WORK( J+3*N ) = DBLE( KOUNT )*WORK( J ) + SUM 330 CONTINUE * SUM = DDOT( NR, WORK( ILO+N ), 1, WORK( ILO+2*N ), 1 ) + $ DDOT( NR, WORK( ILO ), 1, WORK( ILO+3*N ), 1 ) ALPHA = GAMMA / SUM * * Determine correction to current iteration * CMAX = ZERO DO 340 I = ILO, IHI COR = ALPHA*WORK( I+N ) IF( ABS( COR ).GT.CMAX ) $ CMAX = ABS( COR ) LSCALE( I ) = LSCALE( I ) + COR COR = ALPHA*WORK( I ) IF( ABS( COR ).GT.CMAX ) $ CMAX = ABS( COR ) RSCALE( I ) = RSCALE( I ) + COR 340 CONTINUE IF( CMAX.LT.HALF ) $ GO TO 350 * CALL DAXPY( NR, -ALPHA, WORK( ILO+2*N ), 1, WORK( ILO+4*N ), 1 ) CALL DAXPY( NR, -ALPHA, WORK( ILO+3*N ), 1, WORK( ILO+5*N ), 1 ) * PGAMMA = GAMMA IT = IT + 1 IF( IT.LE.NRP2 ) $ GO TO 250 * * End generalized conjugate gradient iteration * 350 CONTINUE SFMIN = DLAMCH( 'S' ) SFMAX = ONE / SFMIN LSFMIN = INT( LOG10( SFMIN ) / BASL+ONE ) LSFMAX = INT( LOG10( SFMAX ) / BASL ) DO 360 I = ILO, IHI IRAB = IDAMAX( N-ILO+1, A( I, ILO ), LDA ) RAB = ABS( A( I, IRAB+ILO-1 ) ) IRAB = IDAMAX( N-ILO+1, B( I, ILO ), LDB ) RAB = MAX( RAB, ABS( B( I, IRAB+ILO-1 ) ) ) LRAB = INT( LOG10( RAB+SFMIN ) / BASL+ONE ) IR = LSCALE( I ) + SIGN( HALF, LSCALE( I ) ) IR = MIN( MAX( IR, LSFMIN ), LSFMAX, LSFMAX-LRAB ) LSCALE( I ) = SCLFAC**IR ICAB = IDAMAX( IHI, A( 1, I ), 1 ) CAB = ABS( A( ICAB, I ) ) ICAB = IDAMAX( IHI, B( 1, I ), 1 ) CAB = MAX( CAB, ABS( B( ICAB, I ) ) ) LCAB = INT( LOG10( CAB+SFMIN ) / BASL+ONE ) JC = RSCALE( I ) + SIGN( HALF, RSCALE( I ) ) JC = MIN( MAX( JC, LSFMIN ), LSFMAX, LSFMAX-LCAB ) RSCALE( I ) = SCLFAC**JC 360 CONTINUE * * Row scaling of matrices A and B * DO 370 I = ILO, IHI CALL DSCAL( N-ILO+1, LSCALE( I ), A( I, ILO ), LDA ) CALL DSCAL( N-ILO+1, LSCALE( I ), B( I, ILO ), LDB ) 370 CONTINUE * * Column scaling of matrices A and B * DO 380 J = ILO, IHI CALL DSCAL( IHI, RSCALE( J ), A( 1, J ), 1 ) CALL DSCAL( IHI, RSCALE( J ), B( 1, J ), 1 ) 380 CONTINUE * RETURN * * End of DGGBAL * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DHGEQZ( JOB, COMPQ, COMPZ, N, ILO, IHI, H, LDH, T, LDT, $ ALPHAR, ALPHAI, BETA, Q, LDQ, Z, LDZ, WORK, $ LWORK, INFO ) * * -- LAPACK routine (version 3.2.1) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * -- April 2009 -- * * .. Scalar Arguments .. CHARACTER COMPQ, COMPZ, JOB INTEGER IHI, ILO, INFO, LDH, LDQ, LDT, LDZ, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION ALPHAI( * ), ALPHAR( * ), BETA( * ), $ H( LDH, * ), Q( LDQ, * ), T( LDT, * ), $ WORK( * ), Z( LDZ, * ) * .. * * Purpose * ======= * * DHGEQZ computes the eigenvalues of a real matrix pair (H,T), * where H is an upper Hessenberg matrix and T is upper triangular, * using the double-shift QZ method. * Matrix pairs of this type are produced by the reduction to * generalized upper Hessenberg form of a real matrix pair (A,B): * * A = Q1*H*Z1**T, B = Q1*T*Z1**T, * * as computed by DGGHRD. * * If JOB='S', then the Hessenberg-triangular pair (H,T) is * also reduced to generalized Schur form, * * H = Q*S*Z**T, T = Q*P*Z**T, * * where Q and Z are orthogonal matrices, P is an upper triangular * matrix, and S is a quasi-triangular matrix with 1-by-1 and 2-by-2 * diagonal blocks. * * The 1-by-1 blocks correspond to real eigenvalues of the matrix pair * (H,T) and the 2-by-2 blocks correspond to complex conjugate pairs of * eigenvalues. * * Additionally, the 2-by-2 upper triangular diagonal blocks of P * corresponding to 2-by-2 blocks of S are reduced to positive diagonal * form, i.e., if S(j+1,j) is non-zero, then P(j+1,j) = P(j,j+1) = 0, * P(j,j) > 0, and P(j+1,j+1) > 0. * * Optionally, the orthogonal matrix Q from the generalized Schur * factorization may be postmultiplied into an input matrix Q1, and the * orthogonal matrix Z may be postmultiplied into an input matrix Z1. * If Q1 and Z1 are the orthogonal matrices from DGGHRD that reduced * the matrix pair (A,B) to generalized upper Hessenberg form, then the * output matrices Q1*Q and Z1*Z are the orthogonal factors from the * generalized Schur factorization of (A,B): * * A = (Q1*Q)*S*(Z1*Z)**T, B = (Q1*Q)*P*(Z1*Z)**T. * * To avoid overflow, eigenvalues of the matrix pair (H,T) (equivalently, * of (A,B)) are computed as a pair of values (alpha,beta), where alpha is * complex and beta real. * If beta is nonzero, lambda = alpha / beta is an eigenvalue of the * generalized nonsymmetric eigenvalue problem (GNEP) * A*x = lambda*B*x * and if alpha is nonzero, mu = beta / alpha is an eigenvalue of the * alternate form of the GNEP * mu*A*y = B*y. * Real eigenvalues can be read directly from the generalized Schur * form: * alpha = S(i,i), beta = P(i,i). * * Ref: C.B. Moler & G.W. Stewart, "An Algorithm for Generalized Matrix * Eigenvalue Problems", SIAM J. Numer. Anal., 10(1973), * pp. 241--256. * * Arguments * ========= * * JOB (input) CHARACTER*1 * = 'E': Compute eigenvalues only; * = 'S': Compute eigenvalues and the Schur form. * * COMPQ (input) CHARACTER*1 * = 'N': Left Schur vectors (Q) are not computed; * = 'I': Q is initialized to the unit matrix and the matrix Q * of left Schur vectors of (H,T) is returned; * = 'V': Q must contain an orthogonal matrix Q1 on entry and * the product Q1*Q is returned. * * COMPZ (input) CHARACTER*1 * = 'N': Right Schur vectors (Z) are not computed; * = 'I': Z is initialized to the unit matrix and the matrix Z * of right Schur vectors of (H,T) is returned; * = 'V': Z must contain an orthogonal matrix Z1 on entry and * the product Z1*Z is returned. * * N (input) INTEGER * The order of the matrices H, T, Q, and Z. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * ILO and IHI mark the rows and columns of H which are in * Hessenberg form. It is assumed that A is already upper * triangular in rows and columns 1:ILO-1 and IHI+1:N. * If N > 0, 1 <= ILO <= IHI <= N; if N = 0, ILO=1 and IHI=0. * * H (input/output) DOUBLE PRECISION array, dimension (LDH, N) * On entry, the N-by-N upper Hessenberg matrix H. * On exit, if JOB = 'S', H contains the upper quasi-triangular * matrix S from the generalized Schur factorization; * 2-by-2 diagonal blocks (corresponding to complex conjugate * pairs of eigenvalues) are returned in standard form, with * H(i,i) = H(i+1,i+1) and H(i+1,i)*H(i,i+1) < 0. * If JOB = 'E', the diagonal blocks of H match those of S, but * the rest of H is unspecified. * * LDH (input) INTEGER * The leading dimension of the array H. LDH >= max( 1, N ). * * T (input/output) DOUBLE PRECISION array, dimension (LDT, N) * On entry, the N-by-N upper triangular matrix T. * On exit, if JOB = 'S', T contains the upper triangular * matrix P from the generalized Schur factorization; * 2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks of S * are reduced to positive diagonal form, i.e., if H(j+1,j) is * non-zero, then T(j+1,j) = T(j,j+1) = 0, T(j,j) > 0, and * T(j+1,j+1) > 0. * If JOB = 'E', the diagonal blocks of T match those of P, but * the rest of T is unspecified. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= max( 1, N ). * * ALPHAR (output) DOUBLE PRECISION array, dimension (N) * The real parts of each scalar alpha defining an eigenvalue * of GNEP. * * ALPHAI (output) DOUBLE PRECISION array, dimension (N) * The imaginary parts of each scalar alpha defining an * eigenvalue of GNEP. * If ALPHAI(j) is zero, then the j-th eigenvalue is real; if * positive, then the j-th and (j+1)-st eigenvalues are a * complex conjugate pair, with ALPHAI(j+1) = -ALPHAI(j). * * BETA (output) DOUBLE PRECISION array, dimension (N) * The scalars beta that define the eigenvalues of GNEP. * Together, the quantities alpha = (ALPHAR(j),ALPHAI(j)) and * beta = BETA(j) represent the j-th eigenvalue of the matrix * pair (A,B), in one of the forms lambda = alpha/beta or * mu = beta/alpha. Since either lambda or mu may overflow, * they should not, in general, be computed. * * Q (input/output) DOUBLE PRECISION array, dimension (LDQ, N) * On entry, if COMPZ = 'V', the orthogonal matrix Q1 used in * the reduction of (A,B) to generalized Hessenberg form. * On exit, if COMPZ = 'I', the orthogonal matrix of left Schur * vectors of (H,T), and if COMPZ = 'V', the orthogonal matrix * of left Schur vectors of (A,B). * Not referenced if COMPZ = 'N'. * * LDQ (input) INTEGER * The leading dimension of the array Q. LDQ >= 1. * If COMPQ='V' or 'I', then LDQ >= N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ, N) * On entry, if COMPZ = 'V', the orthogonal matrix Z1 used in * the reduction of (A,B) to generalized Hessenberg form. * On exit, if COMPZ = 'I', the orthogonal matrix of * right Schur vectors of (H,T), and if COMPZ = 'V', the * orthogonal matrix of right Schur vectors of (A,B). * Not referenced if COMPZ = 'N'. * * LDZ (input) INTEGER * The leading dimension of the array Z. LDZ >= 1. * If COMPZ='V' or 'I', then LDZ >= N. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO >= 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,N). * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * = 1,...,N: the QZ iteration did not converge. (H,T) is not * in Schur form, but ALPHAR(i), ALPHAI(i), and * BETA(i), i=INFO+1,...,N should be correct. * = N+1,...,2*N: the shift calculation failed. (H,T) is not * in Schur form, but ALPHAR(i), ALPHAI(i), and * BETA(i), i=INFO-N+1,...,N should be correct. * * Further Details * =============== * * Iteration counters: * * JITER -- counts iterations. * IITER -- counts iterations run since ILAST was last * changed. This is therefore reset only when a 1-by-1 or * 2-by-2 block deflates off the bottom. * * ===================================================================== * * .. Parameters .. * $ SAFETY = 1.0E+0 ) DOUBLE PRECISION HALF, ZERO, ONE, SAFETY PARAMETER ( HALF = 0.5D+0, ZERO = 0.0D+0, ONE = 1.0D+0, $ SAFETY = 1.0D+2 ) * .. * .. Local Scalars .. LOGICAL ILAZR2, ILAZRO, ILPIVT, ILQ, ILSCHR, ILZ, $ LQUERY INTEGER ICOMPQ, ICOMPZ, IFIRST, IFRSTM, IITER, ILAST, $ ILASTM, IN, ISCHUR, ISTART, J, JC, JCH, JITER, $ JR, MAXIT DOUBLE PRECISION A11, A12, A1I, A1R, A21, A22, A2I, A2R, AD11, $ AD11L, AD12, AD12L, AD21, AD21L, AD22, AD22L, $ AD32L, AN, ANORM, ASCALE, ATOL, B11, B1A, B1I, $ B1R, B22, B2A, B2I, B2R, BN, BNORM, BSCALE, $ BTOL, C, C11I, C11R, C12, C21, C22I, C22R, CL, $ CQ, CR, CZ, ESHIFT, S, S1, S1INV, S2, SAFMAX, $ SAFMIN, SCALE, SL, SQI, SQR, SR, SZI, SZR, T1, $ TAU, TEMP, TEMP2, TEMPI, TEMPR, U1, U12, U12L, $ U2, ULP, VS, W11, W12, W21, W22, WABS, WI, WR, $ WR2 * .. * .. Local Arrays .. DOUBLE PRECISION V( 3 ) * .. * .. External Functions .. LOGICAL LSAME DOUBLE PRECISION DLAMCH, DLANHS, DLAPY2, DLAPY3 EXTERNAL LSAME, DLAMCH, DLANHS, DLAPY2, DLAPY3 * .. * .. External Subroutines .. EXTERNAL DLAG2, DLARFG, DLARTG, DLASET, DLASV2, DROT, $ XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, MAX, MIN, SQRT * .. * .. Executable Statements .. * * Decode JOB, COMPQ, COMPZ * IF( LSAME( JOB, 'E' ) ) THEN ILSCHR = .FALSE. ISCHUR = 1 ELSE IF( LSAME( JOB, 'S' ) ) THEN ILSCHR = .TRUE. ISCHUR = 2 ELSE ISCHUR = 0 END IF * IF( LSAME( COMPQ, 'N' ) ) THEN ILQ = .FALSE. ICOMPQ = 1 ELSE IF( LSAME( COMPQ, 'V' ) ) THEN ILQ = .TRUE. ICOMPQ = 2 ELSE IF( LSAME( COMPQ, 'I' ) ) THEN ILQ = .TRUE. ICOMPQ = 3 ELSE ICOMPQ = 0 END IF * IF( LSAME( COMPZ, 'N' ) ) THEN ILZ = .FALSE. ICOMPZ = 1 ELSE IF( LSAME( COMPZ, 'V' ) ) THEN ILZ = .TRUE. ICOMPZ = 2 ELSE IF( LSAME( COMPZ, 'I' ) ) THEN ILZ = .TRUE. ICOMPZ = 3 ELSE ICOMPZ = 0 END IF * * Check Argument Values * INFO = 0 WORK( 1 ) = MAX( 1, N ) LQUERY = ( LWORK.EQ.-1 ) IF( ISCHUR.EQ.0 ) THEN INFO = -1 ELSE IF( ICOMPQ.EQ.0 ) THEN INFO = -2 ELSE IF( ICOMPZ.EQ.0 ) THEN INFO = -3 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( ILO.LT.1 ) THEN INFO = -5 ELSE IF( IHI.GT.N .OR. IHI.LT.ILO-1 ) THEN INFO = -6 ELSE IF( LDH.LT.N ) THEN INFO = -8 ELSE IF( LDT.LT.N ) THEN INFO = -10 ELSE IF( LDQ.LT.1 .OR. ( ILQ .AND. LDQ.LT.N ) ) THEN INFO = -15 ELSE IF( LDZ.LT.1 .OR. ( ILZ .AND. LDZ.LT.N ) ) THEN INFO = -17 ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN INFO = -19 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DHGEQZ', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.LE.0 ) THEN WORK( 1 ) = DBLE( 1 ) RETURN END IF * * Initialize Q and Z * IF( ICOMPQ.EQ.3 ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, Q, LDQ ) IF( ICOMPZ.EQ.3 ) $ CALL DLASET( 'Full', N, N, ZERO, ONE, Z, LDZ ) * * Machine Constants * IN = IHI + 1 - ILO SAFMIN = DLAMCH( 'S' ) SAFMAX = ONE / SAFMIN ULP = DLAMCH( 'E' )*DLAMCH( 'B' ) ANORM = DLANHS( 'F', IN, H( ILO, ILO ), LDH, WORK ) BNORM = DLANHS( 'F', IN, T( ILO, ILO ), LDT, WORK ) ATOL = MAX( SAFMIN, ULP*ANORM ) BTOL = MAX( SAFMIN, ULP*BNORM ) ASCALE = ONE / MAX( SAFMIN, ANORM ) BSCALE = ONE / MAX( SAFMIN, BNORM ) * * Set Eigenvalues IHI+1:N * DO 30 J = IHI + 1, N IF( T( J, J ).LT.ZERO ) THEN IF( ILSCHR ) THEN DO 10 JR = 1, J H( JR, J ) = -H( JR, J ) T( JR, J ) = -T( JR, J ) 10 CONTINUE ELSE H( J, J ) = -H( J, J ) T( J, J ) = -T( J, J ) END IF IF( ILZ ) THEN DO 20 JR = 1, N Z( JR, J ) = -Z( JR, J ) 20 CONTINUE END IF END IF ALPHAR( J ) = H( J, J ) ALPHAI( J ) = ZERO BETA( J ) = T( J, J ) 30 CONTINUE * * If IHI < ILO, skip QZ steps * IF( IHI.LT.ILO ) $ GO TO 380 * * MAIN QZ ITERATION LOOP * * Initialize dynamic indices * * Eigenvalues ILAST+1:N have been found. * Column operations modify rows IFRSTM:whatever. * Row operations modify columns whatever:ILASTM. * * If only eigenvalues are being computed, then * IFRSTM is the row of the last splitting row above row ILAST; * this is always at least ILO. * IITER counts iterations since the last eigenvalue was found, * to tell when to use an extraordinary shift. * MAXIT is the maximum number of QZ sweeps allowed. * ILAST = IHI IF( ILSCHR ) THEN IFRSTM = 1 ILASTM = N ELSE IFRSTM = ILO ILASTM = IHI END IF IITER = 0 ESHIFT = ZERO MAXIT = 30*( IHI-ILO+1 ) * DO 360 JITER = 1, MAXIT * * Split the matrix if possible. * * Two tests: * 1: H(j,j-1)=0 or j=ILO * 2: T(j,j)=0 * IF( ILAST.EQ.ILO ) THEN * * Special case: j=ILAST * GO TO 80 ELSE IF( ABS( H( ILAST, ILAST-1 ) ).LE.ATOL ) THEN H( ILAST, ILAST-1 ) = ZERO GO TO 80 END IF END IF * IF( ABS( T( ILAST, ILAST ) ).LE.BTOL ) THEN T( ILAST, ILAST ) = ZERO GO TO 70 END IF * * General case: j unfl ) * __ * (sA - wB) ( CZ -SZ ) * ( SZ CZ ) * C11R = S1*A11 - WR*B11 C11I = -WI*B11 C12 = S1*A12 C21 = S1*A21 C22R = S1*A22 - WR*B22 C22I = -WI*B22 * IF( ABS( C11R )+ABS( C11I )+ABS( C12 ).GT.ABS( C21 )+ $ ABS( C22R )+ABS( C22I ) ) THEN T1 = DLAPY3( C12, C11R, C11I ) CZ = C12 / T1 SZR = -C11R / T1 SZI = -C11I / T1 ELSE CZ = DLAPY2( C22R, C22I ) IF( CZ.LE.SAFMIN ) THEN CZ = ZERO SZR = ONE SZI = ZERO ELSE TEMPR = C22R / CZ TEMPI = C22I / CZ T1 = DLAPY2( CZ, C21 ) CZ = CZ / T1 SZR = -C21*TEMPR / T1 SZI = C21*TEMPI / T1 END IF END IF * * Compute Givens rotation on left * * ( CQ SQ ) * ( __ ) A or B * ( -SQ CQ ) * AN = ABS( A11 ) + ABS( A12 ) + ABS( A21 ) + ABS( A22 ) BN = ABS( B11 ) + ABS( B22 ) WABS = ABS( WR ) + ABS( WI ) IF( S1*AN.GT.WABS*BN ) THEN CQ = CZ*B11 SQR = SZR*B22 SQI = -SZI*B22 ELSE A1R = CZ*A11 + SZR*A12 A1I = SZI*A12 A2R = CZ*A21 + SZR*A22 A2I = SZI*A22 CQ = DLAPY2( A1R, A1I ) IF( CQ.LE.SAFMIN ) THEN CQ = ZERO SQR = ONE SQI = ZERO ELSE TEMPR = A1R / CQ TEMPI = A1I / CQ SQR = TEMPR*A2R + TEMPI*A2I SQI = TEMPI*A2R - TEMPR*A2I END IF END IF T1 = DLAPY3( CQ, SQR, SQI ) CQ = CQ / T1 SQR = SQR / T1 SQI = SQI / T1 * * Compute diagonal elements of QBZ * TEMPR = SQR*SZR - SQI*SZI TEMPI = SQR*SZI + SQI*SZR B1R = CQ*CZ*B11 + TEMPR*B22 B1I = TEMPI*B22 B1A = DLAPY2( B1R, B1I ) B2R = CQ*CZ*B22 + TEMPR*B11 B2I = -TEMPI*B11 B2A = DLAPY2( B2R, B2I ) * * Normalize so beta > 0, and Im( alpha1 ) > 0 * BETA( ILAST-1 ) = B1A BETA( ILAST ) = B2A ALPHAR( ILAST-1 ) = ( WR*B1A )*S1INV ALPHAI( ILAST-1 ) = ( WI*B1A )*S1INV ALPHAR( ILAST ) = ( WR*B2A )*S1INV ALPHAI( ILAST ) = -( WI*B2A )*S1INV * * Step 3: Go to next block -- exit if finished. * ILAST = IFIRST - 1 IF( ILAST.LT.ILO ) $ GO TO 380 * * Reset counters * IITER = 0 ESHIFT = ZERO IF( .NOT.ILSCHR ) THEN ILASTM = ILAST IF( IFRSTM.GT.ILAST ) $ IFRSTM = ILO END IF GO TO 350 ELSE * * Usual case: 3x3 or larger block, using Francis implicit * double-shift * * 2 * Eigenvalue equation is w - c w + d = 0, * * -1 2 -1 * so compute 1st column of (A B ) - c A B + d * using the formula in QZIT (from EISPACK) * * We assume that the block is at least 3x3 * AD11 = ( ASCALE*H( ILAST-1, ILAST-1 ) ) / $ ( BSCALE*T( ILAST-1, ILAST-1 ) ) AD21 = ( ASCALE*H( ILAST, ILAST-1 ) ) / $ ( BSCALE*T( ILAST-1, ILAST-1 ) ) AD12 = ( ASCALE*H( ILAST-1, ILAST ) ) / $ ( BSCALE*T( ILAST, ILAST ) ) AD22 = ( ASCALE*H( ILAST, ILAST ) ) / $ ( BSCALE*T( ILAST, ILAST ) ) U12 = T( ILAST-1, ILAST ) / T( ILAST, ILAST ) AD11L = ( ASCALE*H( IFIRST, IFIRST ) ) / $ ( BSCALE*T( IFIRST, IFIRST ) ) AD21L = ( ASCALE*H( IFIRST+1, IFIRST ) ) / $ ( BSCALE*T( IFIRST, IFIRST ) ) AD12L = ( ASCALE*H( IFIRST, IFIRST+1 ) ) / $ ( BSCALE*T( IFIRST+1, IFIRST+1 ) ) AD22L = ( ASCALE*H( IFIRST+1, IFIRST+1 ) ) / $ ( BSCALE*T( IFIRST+1, IFIRST+1 ) ) AD32L = ( ASCALE*H( IFIRST+2, IFIRST+1 ) ) / $ ( BSCALE*T( IFIRST+1, IFIRST+1 ) ) U12L = T( IFIRST, IFIRST+1 ) / T( IFIRST+1, IFIRST+1 ) * V( 1 ) = ( AD11-AD11L )*( AD22-AD11L ) - AD12*AD21 + $ AD21*U12*AD11L + ( AD12L-AD11L*U12L )*AD21L V( 2 ) = ( ( AD22L-AD11L )-AD21L*U12L-( AD11-AD11L )- $ ( AD22-AD11L )+AD21*U12 )*AD21L V( 3 ) = AD32L*AD21L * ISTART = IFIRST * CALL DLARFG( 3, V( 1 ), V( 2 ), 1, TAU ) V( 1 ) = ONE * * Sweep * DO 290 J = ISTART, ILAST - 2 * * All but last elements: use 3x3 Householder transforms. * * Zero (j-1)st column of A * IF( J.GT.ISTART ) THEN V( 1 ) = H( J, J-1 ) V( 2 ) = H( J+1, J-1 ) V( 3 ) = H( J+2, J-1 ) * CALL DLARFG( 3, H( J, J-1 ), V( 2 ), 1, TAU ) V( 1 ) = ONE H( J+1, J-1 ) = ZERO H( J+2, J-1 ) = ZERO END IF * DO 230 JC = J, ILASTM TEMP = TAU*( H( J, JC )+V( 2 )*H( J+1, JC )+V( 3 )* $ H( J+2, JC ) ) H( J, JC ) = H( J, JC ) - TEMP H( J+1, JC ) = H( J+1, JC ) - TEMP*V( 2 ) H( J+2, JC ) = H( J+2, JC ) - TEMP*V( 3 ) TEMP2 = TAU*( T( J, JC )+V( 2 )*T( J+1, JC )+V( 3 )* $ T( J+2, JC ) ) T( J, JC ) = T( J, JC ) - TEMP2 T( J+1, JC ) = T( J+1, JC ) - TEMP2*V( 2 ) T( J+2, JC ) = T( J+2, JC ) - TEMP2*V( 3 ) 230 CONTINUE IF( ILQ ) THEN DO 240 JR = 1, N TEMP = TAU*( Q( JR, J )+V( 2 )*Q( JR, J+1 )+V( 3 )* $ Q( JR, J+2 ) ) Q( JR, J ) = Q( JR, J ) - TEMP Q( JR, J+1 ) = Q( JR, J+1 ) - TEMP*V( 2 ) Q( JR, J+2 ) = Q( JR, J+2 ) - TEMP*V( 3 ) 240 CONTINUE END IF * * Zero j-th column of B (see DLAGBC for details) * * Swap rows to pivot * ILPIVT = .FALSE. TEMP = MAX( ABS( T( J+1, J+1 ) ), ABS( T( J+1, J+2 ) ) ) TEMP2 = MAX( ABS( T( J+2, J+1 ) ), ABS( T( J+2, J+2 ) ) ) IF( MAX( TEMP, TEMP2 ).LT.SAFMIN ) THEN SCALE = ZERO U1 = ONE U2 = ZERO GO TO 250 ELSE IF( TEMP.GE.TEMP2 ) THEN W11 = T( J+1, J+1 ) W21 = T( J+2, J+1 ) W12 = T( J+1, J+2 ) W22 = T( J+2, J+2 ) U1 = T( J+1, J ) U2 = T( J+2, J ) ELSE W21 = T( J+1, J+1 ) W11 = T( J+2, J+1 ) W22 = T( J+1, J+2 ) W12 = T( J+2, J+2 ) U2 = T( J+1, J ) U1 = T( J+2, J ) END IF * * Swap columns if nec. * IF( ABS( W12 ).GT.ABS( W11 ) ) THEN ILPIVT = .TRUE. TEMP = W12 TEMP2 = W22 W12 = W11 W22 = W21 W11 = TEMP W21 = TEMP2 END IF * * LU-factor * TEMP = W21 / W11 U2 = U2 - TEMP*U1 W22 = W22 - TEMP*W12 W21 = ZERO * * Compute SCALE * SCALE = ONE IF( ABS( W22 ).LT.SAFMIN ) THEN SCALE = ZERO U2 = ONE U1 = -W12 / W11 GO TO 250 END IF IF( ABS( W22 ).LT.ABS( U2 ) ) $ SCALE = ABS( W22 / U2 ) IF( ABS( W11 ).LT.ABS( U1 ) ) $ SCALE = MIN( SCALE, ABS( W11 / U1 ) ) * * Solve * U2 = ( SCALE*U2 ) / W22 U1 = ( SCALE*U1-W12*U2 ) / W11 * 250 CONTINUE IF( ILPIVT ) THEN TEMP = U2 U2 = U1 U1 = TEMP END IF * * Compute Householder Vector * T1 = SQRT( SCALE**2+U1**2+U2**2 ) TAU = ONE + SCALE / T1 VS = -ONE / ( SCALE+T1 ) V( 1 ) = ONE V( 2 ) = VS*U1 V( 3 ) = VS*U2 * * Apply transformations from the right. * DO 260 JR = IFRSTM, MIN( J+3, ILAST ) TEMP = TAU*( H( JR, J )+V( 2 )*H( JR, J+1 )+V( 3 )* $ H( JR, J+2 ) ) H( JR, J ) = H( JR, J ) - TEMP H( JR, J+1 ) = H( JR, J+1 ) - TEMP*V( 2 ) H( JR, J+2 ) = H( JR, J+2 ) - TEMP*V( 3 ) 260 CONTINUE DO 270 JR = IFRSTM, J + 2 TEMP = TAU*( T( JR, J )+V( 2 )*T( JR, J+1 )+V( 3 )* $ T( JR, J+2 ) ) T( JR, J ) = T( JR, J ) - TEMP T( JR, J+1 ) = T( JR, J+1 ) - TEMP*V( 2 ) T( JR, J+2 ) = T( JR, J+2 ) - TEMP*V( 3 ) 270 CONTINUE IF( ILZ ) THEN DO 280 JR = 1, N TEMP = TAU*( Z( JR, J )+V( 2 )*Z( JR, J+1 )+V( 3 )* $ Z( JR, J+2 ) ) Z( JR, J ) = Z( JR, J ) - TEMP Z( JR, J+1 ) = Z( JR, J+1 ) - TEMP*V( 2 ) Z( JR, J+2 ) = Z( JR, J+2 ) - TEMP*V( 3 ) 280 CONTINUE END IF T( J+1, J ) = ZERO T( J+2, J ) = ZERO 290 CONTINUE * * Last elements: Use Givens rotations * * Rotations from the left * J = ILAST - 1 TEMP = H( J, J-1 ) CALL DLARTG( TEMP, H( J+1, J-1 ), C, S, H( J, J-1 ) ) H( J+1, J-1 ) = ZERO * DO 300 JC = J, ILASTM TEMP = C*H( J, JC ) + S*H( J+1, JC ) H( J+1, JC ) = -S*H( J, JC ) + C*H( J+1, JC ) H( J, JC ) = TEMP TEMP2 = C*T( J, JC ) + S*T( J+1, JC ) T( J+1, JC ) = -S*T( J, JC ) + C*T( J+1, JC ) T( J, JC ) = TEMP2 300 CONTINUE IF( ILQ ) THEN DO 310 JR = 1, N TEMP = C*Q( JR, J ) + S*Q( JR, J+1 ) Q( JR, J+1 ) = -S*Q( JR, J ) + C*Q( JR, J+1 ) Q( JR, J ) = TEMP 310 CONTINUE END IF * * Rotations from the right. * TEMP = T( J+1, J+1 ) CALL DLARTG( TEMP, T( J+1, J ), C, S, T( J+1, J+1 ) ) T( J+1, J ) = ZERO * DO 320 JR = IFRSTM, ILAST TEMP = C*H( JR, J+1 ) + S*H( JR, J ) H( JR, J ) = -S*H( JR, J+1 ) + C*H( JR, J ) H( JR, J+1 ) = TEMP 320 CONTINUE DO 330 JR = IFRSTM, ILAST - 1 TEMP = C*T( JR, J+1 ) + S*T( JR, J ) T( JR, J ) = -S*T( JR, J+1 ) + C*T( JR, J ) T( JR, J+1 ) = TEMP 330 CONTINUE IF( ILZ ) THEN DO 340 JR = 1, N TEMP = C*Z( JR, J+1 ) + S*Z( JR, J ) Z( JR, J ) = -S*Z( JR, J+1 ) + C*Z( JR, J ) Z( JR, J+1 ) = TEMP 340 CONTINUE END IF * * End of Double-Shift code * END IF * GO TO 350 * * End of iteration loop * 350 CONTINUE 360 CONTINUE * * Drop-through = non-convergence * INFO = ILAST GO TO 420 * * Successful completion of all QZ steps * 380 CONTINUE * * Set Eigenvalues 1:ILO-1 * DO 410 J = 1, ILO - 1 IF( T( J, J ).LT.ZERO ) THEN IF( ILSCHR ) THEN DO 390 JR = 1, J H( JR, J ) = -H( JR, J ) T( JR, J ) = -T( JR, J ) 390 CONTINUE ELSE H( J, J ) = -H( J, J ) T( J, J ) = -T( J, J ) END IF IF( ILZ ) THEN DO 400 JR = 1, N Z( JR, J ) = -Z( JR, J ) 400 CONTINUE END IF END IF ALPHAR( J ) = H( J, J ) ALPHAI( J ) = ZERO BETA( J ) = T( J, J ) 410 CONTINUE * * Normal Termination * INFO = 0 * * Exit (other than argument error) -- return optimal workspace size * 420 CONTINUE WORK( 1 ) = DBLE( N ) RETURN * * End of DHGEQZ * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTGEVC( SIDE, HOWMNY, SELECT, N, S, LDS, P, LDP, VL, $ LDVL, VR, LDVR, MM, M, WORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER HOWMNY, SIDE INTEGER INFO, LDP, LDS, LDVL, LDVR, M, MM, N * .. * .. Array Arguments .. LOGICAL SELECT( * ) DOUBLE PRECISION P( LDP, * ), S( LDS, * ), VL( LDVL, * ), $ VR( LDVR, * ), WORK( * ) * .. * * * Purpose * ======= * * DTGEVC computes some or all of the right and/or left eigenvectors of * a pair of real matrices (S,P), where S is a quasi-triangular matrix * and P is upper triangular. Matrix pairs of this type are produced by * the generalized Schur factorization of a matrix pair (A,B): * * A = Q*S*Z**T, B = Q*P*Z**T * * as computed by DGGHRD + DHGEQZ. * * The right eigenvector x and the left eigenvector y of (S,P) * corresponding to an eigenvalue w are defined by: * * S*x = w*P*x, (y**H)*S = w*(y**H)*P, * * where y**H denotes the conjugate tranpose of y. * The eigenvalues are not input to this routine, but are computed * directly from the diagonal blocks of S and P. * * This routine returns the matrices X and/or Y of right and left * eigenvectors of (S,P), or the products Z*X and/or Q*Y, * where Z and Q are input matrices. * If Q and Z are the orthogonal factors from the generalized Schur * factorization of a matrix pair (A,B), then Z*X and Q*Y * are the matrices of right and left eigenvectors of (A,B). * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'R': compute right eigenvectors only; * = 'L': compute left eigenvectors only; * = 'B': compute both right and left eigenvectors. * * HOWMNY (input) CHARACTER*1 * = 'A': compute all right and/or left eigenvectors; * = 'B': compute all right and/or left eigenvectors, * backtransformed by the matrices in VR and/or VL; * = 'S': compute selected right and/or left eigenvectors, * specified by the logical array SELECT. * * SELECT (input) LOGICAL array, dimension (N) * If HOWMNY='S', SELECT specifies the eigenvectors to be * computed. If w(j) is a real eigenvalue, the corresponding * real eigenvector is computed if SELECT(j) is .TRUE.. * If w(j) and w(j+1) are the real and imaginary parts of a * complex eigenvalue, the corresponding complex eigenvector * is computed if either SELECT(j) or SELECT(j+1) is .TRUE., * and on exit SELECT(j) is set to .TRUE. and SELECT(j+1) is * set to .FALSE.. * Not referenced if HOWMNY = 'A' or 'B'. * * N (input) INTEGER * The order of the matrices S and P. N >= 0. * * S (input) DOUBLE PRECISION array, dimension (LDS,N) * The upper quasi-triangular matrix S from a generalized Schur * factorization, as computed by DHGEQZ. * * LDS (input) INTEGER * The leading dimension of array S. LDS >= max(1,N). * * P (input) DOUBLE PRECISION array, dimension (LDP,N) * The upper triangular matrix P from a generalized Schur * factorization, as computed by DHGEQZ. * 2-by-2 diagonal blocks of P corresponding to 2-by-2 blocks * of S must be in positive diagonal form. * * LDP (input) INTEGER * The leading dimension of array P. LDP >= max(1,N). * * VL (input/output) DOUBLE PRECISION array, dimension (LDVL,MM) * On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must * contain an N-by-N matrix Q (usually the orthogonal matrix Q * of left Schur vectors returned by DHGEQZ). * On exit, if SIDE = 'L' or 'B', VL contains: * if HOWMNY = 'A', the matrix Y of left eigenvectors of (S,P); * if HOWMNY = 'B', the matrix Q*Y; * if HOWMNY = 'S', the left eigenvectors of (S,P) specified by * SELECT, stored consecutively in the columns of * VL, in the same order as their eigenvalues. * * A complex eigenvector corresponding to a complex eigenvalue * is stored in two consecutive columns, the first holding the * real part, and the second the imaginary part. * * Not referenced if SIDE = 'R'. * * LDVL (input) INTEGER * The leading dimension of array VL. LDVL >= 1, and if * SIDE = 'L' or 'B', LDVL >= N. * * VR (input/output) DOUBLE PRECISION array, dimension (LDVR,MM) * On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must * contain an N-by-N matrix Z (usually the orthogonal matrix Z * of right Schur vectors returned by DHGEQZ). * * On exit, if SIDE = 'R' or 'B', VR contains: * if HOWMNY = 'A', the matrix X of right eigenvectors of (S,P); * if HOWMNY = 'B' or 'b', the matrix Z*X; * if HOWMNY = 'S' or 's', the right eigenvectors of (S,P) * specified by SELECT, stored consecutively in the * columns of VR, in the same order as their * eigenvalues. * * A complex eigenvector corresponding to a complex eigenvalue * is stored in two consecutive columns, the first holding the * real part and the second the imaginary part. * * Not referenced if SIDE = 'L'. * * LDVR (input) INTEGER * The leading dimension of the array VR. LDVR >= 1, and if * SIDE = 'R' or 'B', LDVR >= N. * * MM (input) INTEGER * The number of columns in the arrays VL and/or VR. MM >= M. * * M (output) INTEGER * The number of columns in the arrays VL and/or VR actually * used to store the eigenvectors. If HOWMNY = 'A' or 'B', M * is set to N. Each selected real eigenvector occupies one * column and each selected complex eigenvector occupies two * columns. * * WORK (workspace) DOUBLE PRECISION array, dimension (6*N) * * INFO (output) INTEGER * = 0: successful exit. * < 0: if INFO = -i, the i-th argument had an illegal value. * > 0: the 2-by-2 block (INFO:INFO+1) does not have a complex * eigenvalue. * * Further Details * =============== * * Allocation of workspace: * ---------- -- --------- * * WORK( j ) = 1-norm of j-th column of A, above the diagonal * WORK( N+j ) = 1-norm of j-th column of B, above the diagonal * WORK( 2*N+1:3*N ) = real part of eigenvector * WORK( 3*N+1:4*N ) = imaginary part of eigenvector * WORK( 4*N+1:5*N ) = real part of back-transformed eigenvector * WORK( 5*N+1:6*N ) = imaginary part of back-transformed eigenvector * * Rowwise vs. columnwise solution methods: * ------- -- ---------- -------- ------- * * Finding a generalized eigenvector consists basically of solving the * singular triangular system * * (A - w B) x = 0 (for right) or: (A - w B)**H y = 0 (for left) * * Consider finding the i-th right eigenvector (assume all eigenvalues * are real). The equation to be solved is: * n i * 0 = sum C(j,k) v(k) = sum C(j,k) v(k) for j = i,. . .,1 * k=j k=j * * where C = (A - w B) (The components v(i+1:n) are 0.) * * The "rowwise" method is: * * (1) v(i) := 1 * for j = i-1,. . .,1: * i * (2) compute s = - sum C(j,k) v(k) and * k=j+1 * * (3) v(j) := s / C(j,j) * * Step 2 is sometimes called the "dot product" step, since it is an * inner product between the j-th row and the portion of the eigenvector * that has been computed so far. * * The "columnwise" method consists basically in doing the sums * for all the rows in parallel. As each v(j) is computed, the * contribution of v(j) times the j-th column of C is added to the * partial sums. Since FORTRAN arrays are stored columnwise, this has * the advantage that at each step, the elements of C that are accessed * are adjacent to one another, whereas with the rowwise method, the * elements accessed at a step are spaced LDS (and LDP) words apart. * * When finding left eigenvectors, the matrix in question is the * transpose of the one in storage, so the rowwise method then * actually accesses columns of A and B at each step, and so is the * preferred method. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE, SAFETY PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, $ SAFETY = 1.0D+2 ) * .. * .. Local Scalars .. LOGICAL COMPL, COMPR, IL2BY2, ILABAD, ILALL, ILBACK, $ ILBBAD, ILCOMP, ILCPLX, LSA, LSB INTEGER I, IBEG, IEIG, IEND, IHWMNY, IINFO, IM, ISIDE, $ J, JA, JC, JE, JR, JW, NA, NW DOUBLE PRECISION ACOEF, ACOEFA, ANORM, ASCALE, BCOEFA, BCOEFI, $ BCOEFR, BIG, BIGNUM, BNORM, BSCALE, CIM2A, $ CIM2B, CIMAGA, CIMAGB, CRE2A, CRE2B, CREALA, $ CREALB, DMIN, SAFMIN, SALFAR, SBETA, SCALE, $ SMALL, TEMP, TEMP2, TEMP2I, TEMP2R, ULP, XMAX, $ XSCALE * .. * .. Local Arrays .. DOUBLE PRECISION BDIAG( 2 ), SUM( 2, 2 ), SUMS( 2, 2 ), $ SUMP( 2, 2 ) * .. * .. External Functions .. LOGICAL LSAME DOUBLE PRECISION DLAMCH EXTERNAL LSAME, DLAMCH * .. * .. External Subroutines .. EXTERNAL DGEMV, DLABAD, DLACPY, DLAG2, DLALN2, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN * .. * .. Executable Statements .. * * Decode and Test the input parameters * IF( LSAME( HOWMNY, 'A' ) ) THEN IHWMNY = 1 ILALL = .TRUE. ILBACK = .FALSE. ELSE IF( LSAME( HOWMNY, 'S' ) ) THEN IHWMNY = 2 ILALL = .FALSE. ILBACK = .FALSE. ELSE IF( LSAME( HOWMNY, 'B' ) ) THEN IHWMNY = 3 ILALL = .TRUE. ILBACK = .TRUE. ELSE IHWMNY = -1 ILALL = .TRUE. END IF * IF( LSAME( SIDE, 'R' ) ) THEN ISIDE = 1 COMPL = .FALSE. COMPR = .TRUE. ELSE IF( LSAME( SIDE, 'L' ) ) THEN ISIDE = 2 COMPL = .TRUE. COMPR = .FALSE. ELSE IF( LSAME( SIDE, 'B' ) ) THEN ISIDE = 3 COMPL = .TRUE. COMPR = .TRUE. ELSE ISIDE = -1 END IF * INFO = 0 IF( ISIDE.LT.0 ) THEN INFO = -1 ELSE IF( IHWMNY.LT.0 ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( LDS.LT.MAX( 1, N ) ) THEN INFO = -6 ELSE IF( LDP.LT.MAX( 1, N ) ) THEN INFO = -8 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTGEVC', -INFO ) RETURN END IF * * Count the number of eigenvectors to be computed * IF( .NOT.ILALL ) THEN IM = 0 ILCPLX = .FALSE. DO 10 J = 1, N IF( ILCPLX ) THEN ILCPLX = .FALSE. GO TO 10 END IF IF( J.LT.N ) THEN IF( S( J+1, J ).NE.ZERO ) $ ILCPLX = .TRUE. END IF IF( ILCPLX ) THEN IF( SELECT( J ) .OR. SELECT( J+1 ) ) $ IM = IM + 2 ELSE IF( SELECT( J ) ) $ IM = IM + 1 END IF 10 CONTINUE ELSE IM = N END IF * * Check 2-by-2 diagonal blocks of A, B * ILABAD = .FALSE. ILBBAD = .FALSE. DO 20 J = 1, N - 1 IF( S( J+1, J ).NE.ZERO ) THEN IF( P( J, J ).EQ.ZERO .OR. P( J+1, J+1 ).EQ.ZERO .OR. $ P( J, J+1 ).NE.ZERO )ILBBAD = .TRUE. IF( J.LT.N-1 ) THEN IF( S( J+2, J+1 ).NE.ZERO ) $ ILABAD = .TRUE. END IF END IF 20 CONTINUE * IF( ILABAD ) THEN INFO = -5 ELSE IF( ILBBAD ) THEN INFO = -7 ELSE IF( COMPL .AND. LDVL.LT.N .OR. LDVL.LT.1 ) THEN INFO = -10 ELSE IF( COMPR .AND. LDVR.LT.N .OR. LDVR.LT.1 ) THEN INFO = -12 ELSE IF( MM.LT.IM ) THEN INFO = -13 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTGEVC', -INFO ) RETURN END IF * * Quick return if possible * M = IM IF( N.EQ.0 ) $ RETURN * * Machine Constants * SAFMIN = DLAMCH( 'Safe minimum' ) BIG = ONE / SAFMIN CALL DLABAD( SAFMIN, BIG ) ULP = DLAMCH( 'Epsilon' )*DLAMCH( 'Base' ) SMALL = SAFMIN*N / ULP BIG = ONE / SMALL BIGNUM = ONE / ( SAFMIN*N ) * * Compute the 1-norm of each column of the strictly upper triangular * part (i.e., excluding all elements belonging to the diagonal * blocks) of A and B to check for possible overflow in the * triangular solver. * ANORM = ABS( S( 1, 1 ) ) IF( N.GT.1 ) $ ANORM = ANORM + ABS( S( 2, 1 ) ) BNORM = ABS( P( 1, 1 ) ) WORK( 1 ) = ZERO WORK( N+1 ) = ZERO * DO 50 J = 2, N TEMP = ZERO TEMP2 = ZERO IF( S( J, J-1 ).EQ.ZERO ) THEN IEND = J - 1 ELSE IEND = J - 2 END IF DO 30 I = 1, IEND TEMP = TEMP + ABS( S( I, J ) ) TEMP2 = TEMP2 + ABS( P( I, J ) ) 30 CONTINUE WORK( J ) = TEMP WORK( N+J ) = TEMP2 DO 40 I = IEND + 1, MIN( J+1, N ) TEMP = TEMP + ABS( S( I, J ) ) TEMP2 = TEMP2 + ABS( P( I, J ) ) 40 CONTINUE ANORM = MAX( ANORM, TEMP ) BNORM = MAX( BNORM, TEMP2 ) 50 CONTINUE * ASCALE = ONE / MAX( ANORM, SAFMIN ) BSCALE = ONE / MAX( BNORM, SAFMIN ) * * Left eigenvectors * IF( COMPL ) THEN IEIG = 0 * * Main loop over eigenvalues * ILCPLX = .FALSE. DO 220 JE = 1, N * * Skip this iteration if (a) HOWMNY='S' and SELECT=.FALSE., or * (b) this would be the second of a complex pair. * Check for complex eigenvalue, so as to be sure of which * entry(-ies) of SELECT to look at. * IF( ILCPLX ) THEN ILCPLX = .FALSE. GO TO 220 END IF NW = 1 IF( JE.LT.N ) THEN IF( S( JE+1, JE ).NE.ZERO ) THEN ILCPLX = .TRUE. NW = 2 END IF END IF IF( ILALL ) THEN ILCOMP = .TRUE. ELSE IF( ILCPLX ) THEN ILCOMP = SELECT( JE ) .OR. SELECT( JE+1 ) ELSE ILCOMP = SELECT( JE ) END IF IF( .NOT.ILCOMP ) $ GO TO 220 * * Decide if (a) singular pencil, (b) real eigenvalue, or * (c) complex eigenvalue. * IF( .NOT.ILCPLX ) THEN IF( ABS( S( JE, JE ) ).LE.SAFMIN .AND. $ ABS( P( JE, JE ) ).LE.SAFMIN ) THEN * * Singular matrix pencil -- return unit eigenvector * IEIG = IEIG + 1 DO 60 JR = 1, N VL( JR, IEIG ) = ZERO 60 CONTINUE VL( IEIG, IEIG ) = ONE GO TO 220 END IF END IF * * Clear vector * DO 70 JR = 1, NW*N WORK( 2*N+JR ) = ZERO 70 CONTINUE * T * Compute coefficients in ( a A - b B ) y = 0 * a is ACOEF * b is BCOEFR + i*BCOEFI * IF( .NOT.ILCPLX ) THEN * * Real eigenvalue * TEMP = ONE / MAX( ABS( S( JE, JE ) )*ASCALE, $ ABS( P( JE, JE ) )*BSCALE, SAFMIN ) SALFAR = ( TEMP*S( JE, JE ) )*ASCALE SBETA = ( TEMP*P( JE, JE ) )*BSCALE ACOEF = SBETA*ASCALE BCOEFR = SALFAR*BSCALE BCOEFI = ZERO * * Scale to avoid underflow * SCALE = ONE LSA = ABS( SBETA ).GE.SAFMIN .AND. ABS( ACOEF ).LT.SMALL LSB = ABS( SALFAR ).GE.SAFMIN .AND. ABS( BCOEFR ).LT. $ SMALL IF( LSA ) $ SCALE = ( SMALL / ABS( SBETA ) )*MIN( ANORM, BIG ) IF( LSB ) $ SCALE = MAX( SCALE, ( SMALL / ABS( SALFAR ) )* $ MIN( BNORM, BIG ) ) IF( LSA .OR. LSB ) THEN SCALE = MIN( SCALE, ONE / $ ( SAFMIN*MAX( ONE, ABS( ACOEF ), $ ABS( BCOEFR ) ) ) ) IF( LSA ) THEN ACOEF = ASCALE*( SCALE*SBETA ) ELSE ACOEF = SCALE*ACOEF END IF IF( LSB ) THEN BCOEFR = BSCALE*( SCALE*SALFAR ) ELSE BCOEFR = SCALE*BCOEFR END IF END IF ACOEFA = ABS( ACOEF ) BCOEFA = ABS( BCOEFR ) * * First component is 1 * WORK( 2*N+JE ) = ONE XMAX = ONE ELSE * * Complex eigenvalue * CALL DLAG2( S( JE, JE ), LDS, P( JE, JE ), LDP, $ SAFMIN*SAFETY, ACOEF, TEMP, BCOEFR, TEMP2, $ BCOEFI ) BCOEFI = -BCOEFI IF( BCOEFI.EQ.ZERO ) THEN INFO = JE RETURN END IF * * Scale to avoid over/underflow * ACOEFA = ABS( ACOEF ) BCOEFA = ABS( BCOEFR ) + ABS( BCOEFI ) SCALE = ONE IF( ACOEFA*ULP.LT.SAFMIN .AND. ACOEFA.GE.SAFMIN ) $ SCALE = ( SAFMIN / ULP ) / ACOEFA IF( BCOEFA*ULP.LT.SAFMIN .AND. BCOEFA.GE.SAFMIN ) $ SCALE = MAX( SCALE, ( SAFMIN / ULP ) / BCOEFA ) IF( SAFMIN*ACOEFA.GT.ASCALE ) $ SCALE = ASCALE / ( SAFMIN*ACOEFA ) IF( SAFMIN*BCOEFA.GT.BSCALE ) $ SCALE = MIN( SCALE, BSCALE / ( SAFMIN*BCOEFA ) ) IF( SCALE.NE.ONE ) THEN ACOEF = SCALE*ACOEF ACOEFA = ABS( ACOEF ) BCOEFR = SCALE*BCOEFR BCOEFI = SCALE*BCOEFI BCOEFA = ABS( BCOEFR ) + ABS( BCOEFI ) END IF * * Compute first two components of eigenvector * TEMP = ACOEF*S( JE+1, JE ) TEMP2R = ACOEF*S( JE, JE ) - BCOEFR*P( JE, JE ) TEMP2I = -BCOEFI*P( JE, JE ) IF( ABS( TEMP ).GT.ABS( TEMP2R )+ABS( TEMP2I ) ) THEN WORK( 2*N+JE ) = ONE WORK( 3*N+JE ) = ZERO WORK( 2*N+JE+1 ) = -TEMP2R / TEMP WORK( 3*N+JE+1 ) = -TEMP2I / TEMP ELSE WORK( 2*N+JE+1 ) = ONE WORK( 3*N+JE+1 ) = ZERO TEMP = ACOEF*S( JE, JE+1 ) WORK( 2*N+JE ) = ( BCOEFR*P( JE+1, JE+1 )-ACOEF* $ S( JE+1, JE+1 ) ) / TEMP WORK( 3*N+JE ) = BCOEFI*P( JE+1, JE+1 ) / TEMP END IF XMAX = MAX( ABS( WORK( 2*N+JE ) )+ABS( WORK( 3*N+JE ) ), $ ABS( WORK( 2*N+JE+1 ) )+ABS( WORK( 3*N+JE+1 ) ) ) END IF * DMIN = MAX( ULP*ACOEFA*ANORM, ULP*BCOEFA*BNORM, SAFMIN ) * * T * Triangular solve of (a A - b B) y = 0 * * T * (rowwise in (a A - b B) , or columnwise in (a A - b B) ) * IL2BY2 = .FALSE. * DO 160 J = JE + NW, N IF( IL2BY2 ) THEN IL2BY2 = .FALSE. GO TO 160 END IF * NA = 1 BDIAG( 1 ) = P( J, J ) IF( J.LT.N ) THEN IF( S( J+1, J ).NE.ZERO ) THEN IL2BY2 = .TRUE. BDIAG( 2 ) = P( J+1, J+1 ) NA = 2 END IF END IF * * Check whether scaling is necessary for dot products * XSCALE = ONE / MAX( ONE, XMAX ) TEMP = MAX( WORK( J ), WORK( N+J ), $ ACOEFA*WORK( J )+BCOEFA*WORK( N+J ) ) IF( IL2BY2 ) $ TEMP = MAX( TEMP, WORK( J+1 ), WORK( N+J+1 ), $ ACOEFA*WORK( J+1 )+BCOEFA*WORK( N+J+1 ) ) IF( TEMP.GT.BIGNUM*XSCALE ) THEN DO 90 JW = 0, NW - 1 DO 80 JR = JE, J - 1 WORK( ( JW+2 )*N+JR ) = XSCALE* $ WORK( ( JW+2 )*N+JR ) 80 CONTINUE 90 CONTINUE XMAX = XMAX*XSCALE END IF * * Compute dot products * * j-1 * SUM = sum conjg( a*S(k,j) - b*P(k,j) )*x(k) * k=je * * To reduce the op count, this is done as * * _ j-1 _ j-1 * a*conjg( sum S(k,j)*x(k) ) - b*conjg( sum P(k,j)*x(k) ) * k=je k=je * * which may cause underflow problems if A or B are close * to underflow. (E.g., less than SMALL.) * * * A series of compiler directives to defeat vectorization * for the next loop * *$PL$ CMCHAR=' ' CDIR$ NEXTSCALAR C$DIR SCALAR CDIR$ NEXT SCALAR CVD$L NOVECTOR CDEC$ NOVECTOR CVD$ NOVECTOR *VDIR NOVECTOR *VOCL LOOP,SCALAR CIBM PREFER SCALAR *$PL$ CMCHAR='*' * DO 120 JW = 1, NW * *$PL$ CMCHAR=' ' CDIR$ NEXTSCALAR C$DIR SCALAR CDIR$ NEXT SCALAR CVD$L NOVECTOR CDEC$ NOVECTOR CVD$ NOVECTOR *VDIR NOVECTOR *VOCL LOOP,SCALAR CIBM PREFER SCALAR *$PL$ CMCHAR='*' * DO 110 JA = 1, NA SUMS( JA, JW ) = ZERO SUMP( JA, JW ) = ZERO * DO 100 JR = JE, J - 1 SUMS( JA, JW ) = SUMS( JA, JW ) + $ S( JR, J+JA-1 )* $ WORK( ( JW+1 )*N+JR ) SUMP( JA, JW ) = SUMP( JA, JW ) + $ P( JR, J+JA-1 )* $ WORK( ( JW+1 )*N+JR ) 100 CONTINUE 110 CONTINUE 120 CONTINUE * *$PL$ CMCHAR=' ' CDIR$ NEXTSCALAR C$DIR SCALAR CDIR$ NEXT SCALAR CVD$L NOVECTOR CDEC$ NOVECTOR CVD$ NOVECTOR *VDIR NOVECTOR *VOCL LOOP,SCALAR CIBM PREFER SCALAR *$PL$ CMCHAR='*' * DO 130 JA = 1, NA IF( ILCPLX ) THEN SUM( JA, 1 ) = -ACOEF*SUMS( JA, 1 ) + $ BCOEFR*SUMP( JA, 1 ) - $ BCOEFI*SUMP( JA, 2 ) SUM( JA, 2 ) = -ACOEF*SUMS( JA, 2 ) + $ BCOEFR*SUMP( JA, 2 ) + $ BCOEFI*SUMP( JA, 1 ) ELSE SUM( JA, 1 ) = -ACOEF*SUMS( JA, 1 ) + $ BCOEFR*SUMP( JA, 1 ) END IF 130 CONTINUE * * T * Solve ( a A - b B ) y = SUM(,) * with scaling and perturbation of the denominator * CALL DLALN2( .TRUE., NA, NW, DMIN, ACOEF, S( J, J ), LDS, $ BDIAG( 1 ), BDIAG( 2 ), SUM, 2, BCOEFR, $ BCOEFI, WORK( 2*N+J ), N, SCALE, TEMP, $ IINFO ) IF( SCALE.LT.ONE ) THEN DO 150 JW = 0, NW - 1 DO 140 JR = JE, J - 1 WORK( ( JW+2 )*N+JR ) = SCALE* $ WORK( ( JW+2 )*N+JR ) 140 CONTINUE 150 CONTINUE XMAX = SCALE*XMAX END IF XMAX = MAX( XMAX, TEMP ) 160 CONTINUE * * Copy eigenvector to VL, back transforming if * HOWMNY='B'. * IEIG = IEIG + 1 IF( ILBACK ) THEN DO 170 JW = 0, NW - 1 CALL DGEMV( 'N', N, N+1-JE, ONE, VL( 1, JE ), LDVL, $ WORK( ( JW+2 )*N+JE ), 1, ZERO, $ WORK( ( JW+4 )*N+1 ), 1 ) 170 CONTINUE CALL DLACPY( ' ', N, NW, WORK( 4*N+1 ), N, VL( 1, JE ), $ LDVL ) IBEG = 1 ELSE CALL DLACPY( ' ', N, NW, WORK( 2*N+1 ), N, VL( 1, IEIG ), $ LDVL ) IBEG = JE END IF * * Scale eigenvector * XMAX = ZERO IF( ILCPLX ) THEN DO 180 J = IBEG, N XMAX = MAX( XMAX, ABS( VL( J, IEIG ) )+ $ ABS( VL( J, IEIG+1 ) ) ) 180 CONTINUE ELSE DO 190 J = IBEG, N XMAX = MAX( XMAX, ABS( VL( J, IEIG ) ) ) 190 CONTINUE END IF * IF( XMAX.GT.SAFMIN ) THEN XSCALE = ONE / XMAX * DO 210 JW = 0, NW - 1 DO 200 JR = IBEG, N VL( JR, IEIG+JW ) = XSCALE*VL( JR, IEIG+JW ) 200 CONTINUE 210 CONTINUE END IF IEIG = IEIG + NW - 1 * 220 CONTINUE END IF * * Right eigenvectors * IF( COMPR ) THEN IEIG = IM + 1 * * Main loop over eigenvalues * ILCPLX = .FALSE. DO 500 JE = N, 1, -1 * * Skip this iteration if (a) HOWMNY='S' and SELECT=.FALSE., or * (b) this would be the second of a complex pair. * Check for complex eigenvalue, so as to be sure of which * entry(-ies) of SELECT to look at -- if complex, SELECT(JE) * or SELECT(JE-1). * If this is a complex pair, the 2-by-2 diagonal block * corresponding to the eigenvalue is in rows/columns JE-1:JE * IF( ILCPLX ) THEN ILCPLX = .FALSE. GO TO 500 END IF NW = 1 IF( JE.GT.1 ) THEN IF( S( JE, JE-1 ).NE.ZERO ) THEN ILCPLX = .TRUE. NW = 2 END IF END IF IF( ILALL ) THEN ILCOMP = .TRUE. ELSE IF( ILCPLX ) THEN ILCOMP = SELECT( JE ) .OR. SELECT( JE-1 ) ELSE ILCOMP = SELECT( JE ) END IF IF( .NOT.ILCOMP ) $ GO TO 500 * * Decide if (a) singular pencil, (b) real eigenvalue, or * (c) complex eigenvalue. * IF( .NOT.ILCPLX ) THEN IF( ABS( S( JE, JE ) ).LE.SAFMIN .AND. $ ABS( P( JE, JE ) ).LE.SAFMIN ) THEN * * Singular matrix pencil -- unit eigenvector * IEIG = IEIG - 1 DO 230 JR = 1, N VR( JR, IEIG ) = ZERO 230 CONTINUE VR( IEIG, IEIG ) = ONE GO TO 500 END IF END IF * * Clear vector * DO 250 JW = 0, NW - 1 DO 240 JR = 1, N WORK( ( JW+2 )*N+JR ) = ZERO 240 CONTINUE 250 CONTINUE * * Compute coefficients in ( a A - b B ) x = 0 * a is ACOEF * b is BCOEFR + i*BCOEFI * IF( .NOT.ILCPLX ) THEN * * Real eigenvalue * TEMP = ONE / MAX( ABS( S( JE, JE ) )*ASCALE, $ ABS( P( JE, JE ) )*BSCALE, SAFMIN ) SALFAR = ( TEMP*S( JE, JE ) )*ASCALE SBETA = ( TEMP*P( JE, JE ) )*BSCALE ACOEF = SBETA*ASCALE BCOEFR = SALFAR*BSCALE BCOEFI = ZERO * * Scale to avoid underflow * SCALE = ONE LSA = ABS( SBETA ).GE.SAFMIN .AND. ABS( ACOEF ).LT.SMALL LSB = ABS( SALFAR ).GE.SAFMIN .AND. ABS( BCOEFR ).LT. $ SMALL IF( LSA ) $ SCALE = ( SMALL / ABS( SBETA ) )*MIN( ANORM, BIG ) IF( LSB ) $ SCALE = MAX( SCALE, ( SMALL / ABS( SALFAR ) )* $ MIN( BNORM, BIG ) ) IF( LSA .OR. LSB ) THEN SCALE = MIN( SCALE, ONE / $ ( SAFMIN*MAX( ONE, ABS( ACOEF ), $ ABS( BCOEFR ) ) ) ) IF( LSA ) THEN ACOEF = ASCALE*( SCALE*SBETA ) ELSE ACOEF = SCALE*ACOEF END IF IF( LSB ) THEN BCOEFR = BSCALE*( SCALE*SALFAR ) ELSE BCOEFR = SCALE*BCOEFR END IF END IF ACOEFA = ABS( ACOEF ) BCOEFA = ABS( BCOEFR ) * * First component is 1 * WORK( 2*N+JE ) = ONE XMAX = ONE * * Compute contribution from column JE of A and B to sum * (See "Further Details", above.) * DO 260 JR = 1, JE - 1 WORK( 2*N+JR ) = BCOEFR*P( JR, JE ) - $ ACOEF*S( JR, JE ) 260 CONTINUE ELSE * * Complex eigenvalue * CALL DLAG2( S( JE-1, JE-1 ), LDS, P( JE-1, JE-1 ), LDP, $ SAFMIN*SAFETY, ACOEF, TEMP, BCOEFR, TEMP2, $ BCOEFI ) IF( BCOEFI.EQ.ZERO ) THEN INFO = JE - 1 RETURN END IF * * Scale to avoid over/underflow * ACOEFA = ABS( ACOEF ) BCOEFA = ABS( BCOEFR ) + ABS( BCOEFI ) SCALE = ONE IF( ACOEFA*ULP.LT.SAFMIN .AND. ACOEFA.GE.SAFMIN ) $ SCALE = ( SAFMIN / ULP ) / ACOEFA IF( BCOEFA*ULP.LT.SAFMIN .AND. BCOEFA.GE.SAFMIN ) $ SCALE = MAX( SCALE, ( SAFMIN / ULP ) / BCOEFA ) IF( SAFMIN*ACOEFA.GT.ASCALE ) $ SCALE = ASCALE / ( SAFMIN*ACOEFA ) IF( SAFMIN*BCOEFA.GT.BSCALE ) $ SCALE = MIN( SCALE, BSCALE / ( SAFMIN*BCOEFA ) ) IF( SCALE.NE.ONE ) THEN ACOEF = SCALE*ACOEF ACOEFA = ABS( ACOEF ) BCOEFR = SCALE*BCOEFR BCOEFI = SCALE*BCOEFI BCOEFA = ABS( BCOEFR ) + ABS( BCOEFI ) END IF * * Compute first two components of eigenvector * and contribution to sums * TEMP = ACOEF*S( JE, JE-1 ) TEMP2R = ACOEF*S( JE, JE ) - BCOEFR*P( JE, JE ) TEMP2I = -BCOEFI*P( JE, JE ) IF( ABS( TEMP ).GE.ABS( TEMP2R )+ABS( TEMP2I ) ) THEN WORK( 2*N+JE ) = ONE WORK( 3*N+JE ) = ZERO WORK( 2*N+JE-1 ) = -TEMP2R / TEMP WORK( 3*N+JE-1 ) = -TEMP2I / TEMP ELSE WORK( 2*N+JE-1 ) = ONE WORK( 3*N+JE-1 ) = ZERO TEMP = ACOEF*S( JE-1, JE ) WORK( 2*N+JE ) = ( BCOEFR*P( JE-1, JE-1 )-ACOEF* $ S( JE-1, JE-1 ) ) / TEMP WORK( 3*N+JE ) = BCOEFI*P( JE-1, JE-1 ) / TEMP END IF * XMAX = MAX( ABS( WORK( 2*N+JE ) )+ABS( WORK( 3*N+JE ) ), $ ABS( WORK( 2*N+JE-1 ) )+ABS( WORK( 3*N+JE-1 ) ) ) * * Compute contribution from columns JE and JE-1 * of A and B to the sums. * CREALA = ACOEF*WORK( 2*N+JE-1 ) CIMAGA = ACOEF*WORK( 3*N+JE-1 ) CREALB = BCOEFR*WORK( 2*N+JE-1 ) - $ BCOEFI*WORK( 3*N+JE-1 ) CIMAGB = BCOEFI*WORK( 2*N+JE-1 ) + $ BCOEFR*WORK( 3*N+JE-1 ) CRE2A = ACOEF*WORK( 2*N+JE ) CIM2A = ACOEF*WORK( 3*N+JE ) CRE2B = BCOEFR*WORK( 2*N+JE ) - BCOEFI*WORK( 3*N+JE ) CIM2B = BCOEFI*WORK( 2*N+JE ) + BCOEFR*WORK( 3*N+JE ) DO 270 JR = 1, JE - 2 WORK( 2*N+JR ) = -CREALA*S( JR, JE-1 ) + $ CREALB*P( JR, JE-1 ) - $ CRE2A*S( JR, JE ) + CRE2B*P( JR, JE ) WORK( 3*N+JR ) = -CIMAGA*S( JR, JE-1 ) + $ CIMAGB*P( JR, JE-1 ) - $ CIM2A*S( JR, JE ) + CIM2B*P( JR, JE ) 270 CONTINUE END IF * DMIN = MAX( ULP*ACOEFA*ANORM, ULP*BCOEFA*BNORM, SAFMIN ) * * Columnwise triangular solve of (a A - b B) x = 0 * IL2BY2 = .FALSE. DO 370 J = JE - NW, 1, -1 * * If a 2-by-2 block, is in position j-1:j, wait until * next iteration to process it (when it will be j:j+1) * IF( .NOT.IL2BY2 .AND. J.GT.1 ) THEN IF( S( J, J-1 ).NE.ZERO ) THEN IL2BY2 = .TRUE. GO TO 370 END IF END IF BDIAG( 1 ) = P( J, J ) IF( IL2BY2 ) THEN NA = 2 BDIAG( 2 ) = P( J+1, J+1 ) ELSE NA = 1 END IF * * Compute x(j) (and x(j+1), if 2-by-2 block) * CALL DLALN2( .FALSE., NA, NW, DMIN, ACOEF, S( J, J ), $ LDS, BDIAG( 1 ), BDIAG( 2 ), WORK( 2*N+J ), $ N, BCOEFR, BCOEFI, SUM, 2, SCALE, TEMP, $ IINFO ) IF( SCALE.LT.ONE ) THEN * DO 290 JW = 0, NW - 1 DO 280 JR = 1, JE WORK( ( JW+2 )*N+JR ) = SCALE* $ WORK( ( JW+2 )*N+JR ) 280 CONTINUE 290 CONTINUE END IF XMAX = MAX( SCALE*XMAX, TEMP ) * DO 310 JW = 1, NW DO 300 JA = 1, NA WORK( ( JW+1 )*N+J+JA-1 ) = SUM( JA, JW ) 300 CONTINUE 310 CONTINUE * * w = w + x(j)*(a S(*,j) - b P(*,j) ) with scaling * IF( J.GT.1 ) THEN * * Check whether scaling is necessary for sum. * XSCALE = ONE / MAX( ONE, XMAX ) TEMP = ACOEFA*WORK( J ) + BCOEFA*WORK( N+J ) IF( IL2BY2 ) $ TEMP = MAX( TEMP, ACOEFA*WORK( J+1 )+BCOEFA* $ WORK( N+J+1 ) ) TEMP = MAX( TEMP, ACOEFA, BCOEFA ) IF( TEMP.GT.BIGNUM*XSCALE ) THEN * DO 330 JW = 0, NW - 1 DO 320 JR = 1, JE WORK( ( JW+2 )*N+JR ) = XSCALE* $ WORK( ( JW+2 )*N+JR ) 320 CONTINUE 330 CONTINUE XMAX = XMAX*XSCALE END IF * * Compute the contributions of the off-diagonals of * column j (and j+1, if 2-by-2 block) of A and B to the * sums. * * DO 360 JA = 1, NA IF( ILCPLX ) THEN CREALA = ACOEF*WORK( 2*N+J+JA-1 ) CIMAGA = ACOEF*WORK( 3*N+J+JA-1 ) CREALB = BCOEFR*WORK( 2*N+J+JA-1 ) - $ BCOEFI*WORK( 3*N+J+JA-1 ) CIMAGB = BCOEFI*WORK( 2*N+J+JA-1 ) + $ BCOEFR*WORK( 3*N+J+JA-1 ) DO 340 JR = 1, J - 1 WORK( 2*N+JR ) = WORK( 2*N+JR ) - $ CREALA*S( JR, J+JA-1 ) + $ CREALB*P( JR, J+JA-1 ) WORK( 3*N+JR ) = WORK( 3*N+JR ) - $ CIMAGA*S( JR, J+JA-1 ) + $ CIMAGB*P( JR, J+JA-1 ) 340 CONTINUE ELSE CREALA = ACOEF*WORK( 2*N+J+JA-1 ) CREALB = BCOEFR*WORK( 2*N+J+JA-1 ) DO 350 JR = 1, J - 1 WORK( 2*N+JR ) = WORK( 2*N+JR ) - $ CREALA*S( JR, J+JA-1 ) + $ CREALB*P( JR, J+JA-1 ) 350 CONTINUE END IF 360 CONTINUE END IF * IL2BY2 = .FALSE. 370 CONTINUE * * Copy eigenvector to VR, back transforming if * HOWMNY='B'. * IEIG = IEIG - NW IF( ILBACK ) THEN * DO 410 JW = 0, NW - 1 DO 380 JR = 1, N WORK( ( JW+4 )*N+JR ) = WORK( ( JW+2 )*N+1 )* $ VR( JR, 1 ) 380 CONTINUE * * A series of compiler directives to defeat * vectorization for the next loop * * DO 400 JC = 2, JE DO 390 JR = 1, N WORK( ( JW+4 )*N+JR ) = WORK( ( JW+4 )*N+JR ) + $ WORK( ( JW+2 )*N+JC )*VR( JR, JC ) 390 CONTINUE 400 CONTINUE 410 CONTINUE * DO 430 JW = 0, NW - 1 DO 420 JR = 1, N VR( JR, IEIG+JW ) = WORK( ( JW+4 )*N+JR ) 420 CONTINUE 430 CONTINUE * IEND = N ELSE DO 450 JW = 0, NW - 1 DO 440 JR = 1, N VR( JR, IEIG+JW ) = WORK( ( JW+2 )*N+JR ) 440 CONTINUE 450 CONTINUE * IEND = JE END IF * * Scale eigenvector * XMAX = ZERO IF( ILCPLX ) THEN DO 460 J = 1, IEND XMAX = MAX( XMAX, ABS( VR( J, IEIG ) )+ $ ABS( VR( J, IEIG+1 ) ) ) 460 CONTINUE ELSE DO 470 J = 1, IEND XMAX = MAX( XMAX, ABS( VR( J, IEIG ) ) ) 470 CONTINUE END IF * IF( XMAX.GT.SAFMIN ) THEN XSCALE = ONE / XMAX DO 490 JW = 0, NW - 1 DO 480 JR = 1, IEND VR( JR, IEIG+JW ) = XSCALE*VR( JR, IEIG+JW ) 480 CONTINUE 490 CONTINUE END IF 500 CONTINUE END IF * RETURN * * End of DTGEVC * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAG2( A, LDA, B, LDB, SAFMIN, SCALE1, SCALE2, WR1, $ WR2, WI ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER LDA, LDB DOUBLE PRECISION SAFMIN, SCALE1, SCALE2, WI, WR1, WR2 * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * Purpose * ======= * * DLAG2 computes the eigenvalues of a 2 x 2 generalized eigenvalue * problem A - w B, with scaling as necessary to avoid over-/underflow. * * The scaling factor "s" results in a modified eigenvalue equation * * s A - w B * * where s is a non-negative scaling factor chosen so that w, w B, * and s A do not overflow and, if possible, do not underflow, either. * * Arguments * ========= * * A (input) DOUBLE PRECISION array, dimension (LDA, 2) * On entry, the 2 x 2 matrix A. It is assumed that its 1-norm * is less than 1/SAFMIN. Entries less than * sqrt(SAFMIN)*norm(A) are subject to being treated as zero. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= 2. * * B (input) DOUBLE PRECISION array, dimension (LDB, 2) * On entry, the 2 x 2 upper triangular matrix B. It is * assumed that the one-norm of B is less than 1/SAFMIN. The * diagonals should be at least sqrt(SAFMIN) times the largest * element of B (in absolute value); if a diagonal is smaller * than that, then +/- sqrt(SAFMIN) will be used instead of * that diagonal. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= 2. * * SAFMIN (input) DOUBLE PRECISION * The smallest positive number s.t. 1/SAFMIN does not * overflow. (This should always be DLAMCH('S') -- it is an * argument in order to avoid having to call DLAMCH frequently.) * * SCALE1 (output) DOUBLE PRECISION * A scaling factor used to avoid over-/underflow in the * eigenvalue equation which defines the first eigenvalue. If * the eigenvalues are complex, then the eigenvalues are * ( WR1 +/- WI i ) / SCALE1 (which may lie outside the * exponent range of the machine), SCALE1=SCALE2, and SCALE1 * will always be positive. If the eigenvalues are real, then * the first (real) eigenvalue is WR1 / SCALE1 , but this may * overflow or underflow, and in fact, SCALE1 may be zero or * less than the underflow threshhold if the exact eigenvalue * is sufficiently large. * * SCALE2 (output) DOUBLE PRECISION * A scaling factor used to avoid over-/underflow in the * eigenvalue equation which defines the second eigenvalue. If * the eigenvalues are complex, then SCALE2=SCALE1. If the * eigenvalues are real, then the second (real) eigenvalue is * WR2 / SCALE2 , but this may overflow or underflow, and in * fact, SCALE2 may be zero or less than the underflow * threshhold if the exact eigenvalue is sufficiently large. * * WR1 (output) DOUBLE PRECISION * If the eigenvalue is real, then WR1 is SCALE1 times the * eigenvalue closest to the (2,2) element of A B**(-1). If the * eigenvalue is complex, then WR1=WR2 is SCALE1 times the real * part of the eigenvalues. * * WR2 (output) DOUBLE PRECISION * If the eigenvalue is real, then WR2 is SCALE2 times the * other eigenvalue. If the eigenvalue is complex, then * WR1=WR2 is SCALE1 times the real part of the eigenvalues. * * WI (output) DOUBLE PRECISION * If the eigenvalue is real, then WI is zero. If the * eigenvalue is complex, then WI is SCALE1 times the imaginary * part of the eigenvalues. WI will always be non-negative. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE, TWO PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0 ) DOUBLE PRECISION HALF PARAMETER ( HALF = ONE / TWO ) DOUBLE PRECISION FUZZY1 PARAMETER ( FUZZY1 = ONE+1.0D-5 ) * .. * .. Local Scalars .. DOUBLE PRECISION A11, A12, A21, A22, ABI22, ANORM, AS11, AS12, $ AS22, ASCALE, B11, B12, B22, BINV11, BINV22, $ BMIN, BNORM, BSCALE, BSIZE, C1, C2, C3, C4, C5, $ DIFF, DISCR, PP, QQ, R, RTMAX, RTMIN, S1, S2, $ SAFMAX, SHIFT, SS, SUM, WABS, WBIG, WDET, $ WSCALE, WSIZE, WSMALL * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN, SIGN, SQRT * .. * .. Executable Statements .. * RTMIN = SQRT( SAFMIN ) RTMAX = ONE / RTMIN SAFMAX = ONE / SAFMIN * * Scale A * ANORM = MAX( ABS( A( 1, 1 ) )+ABS( A( 2, 1 ) ), $ ABS( A( 1, 2 ) )+ABS( A( 2, 2 ) ), SAFMIN ) ASCALE = ONE / ANORM A11 = ASCALE*A( 1, 1 ) A21 = ASCALE*A( 2, 1 ) A12 = ASCALE*A( 1, 2 ) A22 = ASCALE*A( 2, 2 ) * * Perturb B if necessary to insure non-singularity * B11 = B( 1, 1 ) B12 = B( 1, 2 ) B22 = B( 2, 2 ) BMIN = RTMIN*MAX( ABS( B11 ), ABS( B12 ), ABS( B22 ), RTMIN ) IF( ABS( B11 ).LT.BMIN ) $ B11 = SIGN( BMIN, B11 ) IF( ABS( B22 ).LT.BMIN ) $ B22 = SIGN( BMIN, B22 ) * * Scale B * BNORM = MAX( ABS( B11 ), ABS( B12 )+ABS( B22 ), SAFMIN ) BSIZE = MAX( ABS( B11 ), ABS( B22 ) ) BSCALE = ONE / BSIZE B11 = B11*BSCALE B12 = B12*BSCALE B22 = B22*BSCALE * * Compute larger eigenvalue by method described by C. van Loan * * ( AS is A shifted by -SHIFT*B ) * BINV11 = ONE / B11 BINV22 = ONE / B22 S1 = A11*BINV11 S2 = A22*BINV22 IF( ABS( S1 ).LE.ABS( S2 ) ) THEN AS12 = A12 - S1*B12 AS22 = A22 - S1*B22 SS = A21*( BINV11*BINV22 ) ABI22 = AS22*BINV22 - SS*B12 PP = HALF*ABI22 SHIFT = S1 ELSE AS12 = A12 - S2*B12 AS11 = A11 - S2*B11 SS = A21*( BINV11*BINV22 ) ABI22 = -SS*B12 PP = HALF*( AS11*BINV11+ABI22 ) SHIFT = S2 END IF QQ = SS*AS12 IF( ABS( PP*RTMIN ).GE.ONE ) THEN DISCR = ( RTMIN*PP )**2 + QQ*SAFMIN R = SQRT( ABS( DISCR ) )*RTMAX ELSE IF( PP**2+ABS( QQ ).LE.SAFMIN ) THEN DISCR = ( RTMAX*PP )**2 + QQ*SAFMAX R = SQRT( ABS( DISCR ) )*RTMIN ELSE DISCR = PP**2 + QQ R = SQRT( ABS( DISCR ) ) END IF END IF * * Note: the test of R in the following IF is to cover the case when * DISCR is small and negative and is flushed to zero during * the calculation of R. On machines which have a consistent * flush-to-zero threshhold and handle numbers above that * threshhold correctly, it would not be necessary. * IF( DISCR.GE.ZERO .OR. R.EQ.ZERO ) THEN SUM = PP + SIGN( R, PP ) DIFF = PP - SIGN( R, PP ) WBIG = SHIFT + SUM * * Compute smaller eigenvalue * WSMALL = SHIFT + DIFF IF( HALF*ABS( WBIG ).GT.MAX( ABS( WSMALL ), SAFMIN ) ) THEN WDET = ( A11*A22-A12*A21 )*( BINV11*BINV22 ) WSMALL = WDET / WBIG END IF * * Choose (real) eigenvalue closest to 2,2 element of A*B**(-1) * for WR1. * IF( PP.GT.ABI22 ) THEN WR1 = MIN( WBIG, WSMALL ) WR2 = MAX( WBIG, WSMALL ) ELSE WR1 = MAX( WBIG, WSMALL ) WR2 = MIN( WBIG, WSMALL ) END IF WI = ZERO ELSE * * Complex eigenvalues * WR1 = SHIFT + PP WR2 = WR1 WI = R END IF * * Further scaling to avoid underflow and overflow in computing * SCALE1 and overflow in computing w*B. * * This scale factor (WSCALE) is bounded from above using C1 and C2, * and from below using C3 and C4. * C1 implements the condition s A must never overflow. * C2 implements the condition w B must never overflow. * C3, with C2, * implement the condition that s A - w B must never overflow. * C4 implements the condition s should not underflow. * C5 implements the condition max(s,|w|) should be at least 2. * C1 = BSIZE*( SAFMIN*MAX( ONE, ASCALE ) ) C2 = SAFMIN*MAX( ONE, BNORM ) C3 = BSIZE*SAFMIN IF( ASCALE.LE.ONE .AND. BSIZE.LE.ONE ) THEN C4 = MIN( ONE, ( ASCALE / SAFMIN )*BSIZE ) ELSE C4 = ONE END IF IF( ASCALE.LE.ONE .OR. BSIZE.LE.ONE ) THEN C5 = MIN( ONE, ASCALE*BSIZE ) ELSE C5 = ONE END IF * * Scale first eigenvalue * WABS = ABS( WR1 ) + ABS( WI ) WSIZE = MAX( SAFMIN, C1, FUZZY1*( WABS*C2+C3 ), $ MIN( C4, HALF*MAX( WABS, C5 ) ) ) IF( WSIZE.NE.ONE ) THEN WSCALE = ONE / WSIZE IF( WSIZE.GT.ONE ) THEN SCALE1 = ( MAX( ASCALE, BSIZE )*WSCALE )* $ MIN( ASCALE, BSIZE ) ELSE SCALE1 = ( MIN( ASCALE, BSIZE )*WSCALE )* $ MAX( ASCALE, BSIZE ) END IF WR1 = WR1*WSCALE IF( WI.NE.ZERO ) THEN WI = WI*WSCALE WR2 = WR1 SCALE2 = SCALE1 END IF ELSE SCALE1 = ASCALE*BSIZE SCALE2 = SCALE1 END IF * * Scale second eigenvalue (if real) * IF( WI.EQ.ZERO ) THEN WSIZE = MAX( SAFMIN, C1, FUZZY1*( ABS( WR2 )*C2+C3 ), $ MIN( C4, HALF*MAX( ABS( WR2 ), C5 ) ) ) IF( WSIZE.NE.ONE ) THEN WSCALE = ONE / WSIZE IF( WSIZE.GT.ONE ) THEN SCALE2 = ( MAX( ASCALE, BSIZE )*WSCALE )* $ MIN( ASCALE, BSIZE ) ELSE SCALE2 = ( MIN( ASCALE, BSIZE )*WSCALE )* $ MAX( ASCALE, BSIZE ) END IF WR2 = WR2*WSCALE ELSE SCALE2 = ASCALE*BSIZE END IF END IF * * End of DLAG2 * RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DLANHS( NORM, N, A, LDA, WORK ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER NORM INTEGER LDA, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), WORK( * ) * .. * * Purpose * ======= * * DLANHS returns the value of the one norm, or the Frobenius norm, or * the infinity norm, or the element of largest absolute value of a * Hessenberg matrix A. * * Description * =========== * * DLANHS returns the value * * DLANHS = ( max(abs(A(i,j))), NORM = 'M' or 'm' * ( * ( norm1(A), NORM = '1', 'O' or 'o' * ( * ( normI(A), NORM = 'I' or 'i' * ( * ( normF(A), NORM = 'F', 'f', 'E' or 'e' * * where norm1 denotes the one norm of a matrix (maximum column sum), * normI denotes the infinity norm of a matrix (maximum row sum) and * normF denotes the Frobenius norm of a matrix (square root of sum of * squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. * * Arguments * ========= * * NORM (input) CHARACTER*1 * Specifies the value to be returned in DLANHS as described * above. * * N (input) INTEGER * The order of the matrix A. N >= 0. When N = 0, DLANHS is * set to zero. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The n by n upper Hessenberg matrix A; the part of A below the * first sub-diagonal is not referenced. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(N,1). * * WORK (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)), * where LWORK >= N when NORM = 'I'; otherwise, WORK is not * referenced. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I, J DOUBLE PRECISION SCALE, SUM, VALUE * .. * .. External Subroutines .. EXTERNAL DLASSQ * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN, SQRT * .. * .. Executable Statements .. * IF( N.EQ.0 ) THEN VALUE = ZERO ELSE IF( LSAME( NORM, 'M' ) ) THEN * * Find max(abs(A(i,j))). * VALUE = ZERO DO 20 J = 1, N DO 10 I = 1, MIN( N, J+1 ) VALUE = MAX( VALUE, ABS( A( I, J ) ) ) 10 CONTINUE 20 CONTINUE ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN * * Find norm1(A). * VALUE = ZERO DO 40 J = 1, N SUM = ZERO DO 30 I = 1, MIN( N, J+1 ) SUM = SUM + ABS( A( I, J ) ) 30 CONTINUE VALUE = MAX( VALUE, SUM ) 40 CONTINUE ELSE IF( LSAME( NORM, 'I' ) ) THEN * * Find normI(A). * DO 50 I = 1, N WORK( I ) = ZERO 50 CONTINUE DO 70 J = 1, N DO 60 I = 1, MIN( N, J+1 ) WORK( I ) = WORK( I ) + ABS( A( I, J ) ) 60 CONTINUE 70 CONTINUE VALUE = ZERO DO 80 I = 1, N VALUE = MAX( VALUE, WORK( I ) ) 80 CONTINUE ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN * * Find normF(A). * SCALE = ZERO SUM = ONE DO 90 J = 1, N CALL DLASSQ( MIN( N, J+1 ), A( 1, J ), 1, SCALE, SUM ) 90 CONTINUE VALUE = SCALE*SQRT( SUM ) END IF * DLANHS = VALUE RETURN * * End of DLANHS * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLASV2( F, G, H, SSMIN, SSMAX, SNR, CSR, SNL, CSL ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION CSL, CSR, F, G, H, SNL, SNR, SSMAX, SSMIN * .. * * Purpose * ======= * * DLASV2 computes the singular value decomposition of a 2-by-2 * triangular matrix * [ F G ] * [ 0 H ]. * On return, abs(SSMAX) is the larger singular value, abs(SSMIN) is the * smaller singular value, and (CSL,SNL) and (CSR,SNR) are the left and * right singular vectors for abs(SSMAX), giving the decomposition * * [ CSL SNL ] [ F G ] [ CSR -SNR ] = [ SSMAX 0 ] * [-SNL CSL ] [ 0 H ] [ SNR CSR ] [ 0 SSMIN ]. * * Arguments * ========= * * F (input) DOUBLE PRECISION * The (1,1) element of the 2-by-2 matrix. * * G (input) DOUBLE PRECISION * The (1,2) element of the 2-by-2 matrix. * * H (input) DOUBLE PRECISION * The (2,2) element of the 2-by-2 matrix. * * SSMIN (output) DOUBLE PRECISION * abs(SSMIN) is the smaller singular value. * * SSMAX (output) DOUBLE PRECISION * abs(SSMAX) is the larger singular value. * * SNL (output) DOUBLE PRECISION * CSL (output) DOUBLE PRECISION * The vector (CSL, SNL) is a unit left singular vector for the * singular value abs(SSMAX). * * SNR (output) DOUBLE PRECISION * CSR (output) DOUBLE PRECISION * The vector (CSR, SNR) is a unit right singular vector for the * singular value abs(SSMAX). * * Further Details * =============== * * Any input parameter may be aliased with any output parameter. * * Barring over/underflow and assuming a guard digit in subtraction, all * output quantities are correct to within a few units in the last * place (ulps). * * In IEEE arithmetic, the code works correctly if one matrix element is * infinite. * * Overflow will not occur unless the largest singular value itself * overflows or is within a few ulps of overflow. (On machines with * partial overflow, like the Cray, overflow may occur if the largest * singular value is within a factor of 2 of overflow.) * * Underflow is harmless if underflow is gradual. Otherwise, results * may correspond to a matrix modified by perturbations of size near * the underflow threshold. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D0 ) DOUBLE PRECISION HALF PARAMETER ( HALF = 0.5D0 ) DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D0 ) DOUBLE PRECISION TWO PARAMETER ( TWO = 2.0D0 ) DOUBLE PRECISION FOUR PARAMETER ( FOUR = 4.0D0 ) * .. * .. Local Scalars .. LOGICAL GASMAL, SWAP INTEGER PMAX DOUBLE PRECISION A, CLT, CRT, D, FA, FT, GA, GT, HA, HT, L, M, $ MM, R, S, SLT, SRT, T, TEMP, TSIGN, TT * .. * .. Intrinsic Functions .. INTRINSIC ABS, SIGN, SQRT * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. Executable Statements .. * FT = F FA = ABS( FT ) HT = H HA = ABS( H ) * * PMAX points to the maximum absolute element of matrix * PMAX = 1 if F largest in absolute values * PMAX = 2 if G largest in absolute values * PMAX = 3 if H largest in absolute values * PMAX = 1 SWAP = ( HA.GT.FA ) IF( SWAP ) THEN PMAX = 3 TEMP = FT FT = HT HT = TEMP TEMP = FA FA = HA HA = TEMP * * Now FA .ge. HA * END IF GT = G GA = ABS( GT ) IF( GA.EQ.ZERO ) THEN * * Diagonal matrix * SSMIN = HA SSMAX = FA CLT = ONE CRT = ONE SLT = ZERO SRT = ZERO ELSE GASMAL = .TRUE. IF( GA.GT.FA ) THEN PMAX = 2 IF( ( FA / GA ).LT.DLAMCH( 'EPS' ) ) THEN * * Case of very large GA * GASMAL = .FALSE. SSMAX = GA IF( HA.GT.ONE ) THEN SSMIN = FA / ( GA / HA ) ELSE SSMIN = ( FA / GA )*HA END IF CLT = ONE SLT = HT / GT SRT = ONE CRT = FT / GT END IF END IF IF( GASMAL ) THEN * * Normal case * D = FA - HA IF( D.EQ.FA ) THEN * * Copes with infinite F or H * L = ONE ELSE L = D / FA END IF * * Note that 0 .le. L .le. 1 * M = GT / FT * * Note that abs(M) .le. 1/macheps * T = TWO - L * * Note that T .ge. 1 * MM = M*M TT = T*T S = SQRT( TT+MM ) * * Note that 1 .le. S .le. 1 + 1/macheps * IF( L.EQ.ZERO ) THEN R = ABS( M ) ELSE R = SQRT( L*L+MM ) END IF * * Note that 0 .le. R .le. 1 + 1/macheps * A = HALF*( S+R ) * * Note that 1 .le. A .le. 1 + abs(M) * SSMIN = HA / A SSMAX = FA*A IF( MM.EQ.ZERO ) THEN * * Note that M is very tiny * IF( L.EQ.ZERO ) THEN T = SIGN( TWO, FT )*SIGN( ONE, GT ) ELSE T = GT / SIGN( D, FT ) + M / T END IF ELSE T = ( M / ( S+T )+M / ( R+L ) )*( ONE+A ) END IF L = SQRT( T*T+FOUR ) CRT = TWO / L SRT = T / L CLT = ( CRT+SRT*M ) / A SLT = ( HT / FT )*SRT / A END IF END IF IF( SWAP ) THEN CSL = SRT SNL = CRT CSR = SLT SNR = CLT ELSE CSL = CLT SNL = SLT CSR = CRT SNR = SRT END IF * * Correct signs of SSMAX and SSMIN * IF( PMAX.EQ.1 ) $ TSIGN = SIGN( ONE, CSR )*SIGN( ONE, CSL )*SIGN( ONE, F ) IF( PMAX.EQ.2 ) $ TSIGN = SIGN( ONE, SNR )*SIGN( ONE, CSL )*SIGN( ONE, G ) IF( PMAX.EQ.3 ) $ TSIGN = SIGN( ONE, SNR )*SIGN( ONE, SNL )*SIGN( ONE, H ) SSMAX = SIGN( SSMAX, TSIGN ) SSMIN = SIGN( SSMIN, TSIGN*SIGN( ONE, F )*SIGN( ONE, H ) ) RETURN * * End of DLASV2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION X, Y, Z * .. * * Purpose * ======= * * DLAPY3 returns sqrt(x**2+y**2+z**2), taking care not to cause * unnecessary overflow. * * Arguments * ========= * * X (input) DOUBLE PRECISION * Y (input) DOUBLE PRECISION * Z (input) DOUBLE PRECISION * X, Y and Z specify the values x, y and z. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D0 ) * .. * .. Local Scalars .. DOUBLE PRECISION W, XABS, YABS, ZABS * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, SQRT * .. * .. Executable Statements .. * XABS = ABS( X ) YABS = ABS( Y ) ZABS = ABS( Z ) W = MAX( XABS, YABS, ZABS ) IF( W.EQ.ZERO ) THEN * W can be zero for max(0,nan,0) * adding all three entries together will make sure * NaN will not disappear. DLAPY3 = XABS + YABS + ZABS ELSE DLAPY3 = W*SQRT( ( XABS / W )**2+( YABS / W )**2+ $ ( ZABS / W )**2 ) END IF RETURN * * End of DLAPY3 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEQR2( M, N, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. INTEGER INFO, LDA, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DGEQR2 computes a QR factorization of a real m by n matrix A: * A = Q * R. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the m by n matrix A. * On exit, the elements on and above the diagonal of the array * contain the min(m,n) by n upper trapezoidal matrix R (R is * upper triangular if m >= n); the elements below the diagonal, * with the array TAU, represent the orthogonal matrix Q as a * product of elementary reflectors (see Further Details). * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * TAU (output) DOUBLE PRECISION array, dimension (min(M,N)) * The scalar factors of the elementary reflectors (see Further * Details). * * WORK (workspace) DOUBLE PRECISION array, dimension (N) * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * Further Details * =============== * * The matrix Q is represented as a product of elementary reflectors * * Q = H(1) H(2) . . . H(k), where k = min(m,n). * * Each H(i) has the form * * H(i) = I - tau * v * v' * * where tau is a real scalar, and v is a real vector with * v(1:i-1) = 0 and v(i) = 1; v(i+1:m) is stored on exit in A(i+1:m,i), * and tau in TAU(i). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. INTEGER I, K DOUBLE PRECISION AII * .. * .. External Subroutines .. EXTERNAL DLARF, DLARFG, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEQR2', -INFO ) RETURN END IF * K = MIN( M, N ) * DO 10 I = 1, K * * Generate elementary reflector H(i) to annihilate A(i+1:m,i) * CALL DLARFG( M-I+1, A( I, I ), A( MIN( I+1, M ), I ), 1, $ TAU( I ) ) IF( I.LT.N ) THEN * * Apply H(i) to A(i:m,i+1:n) from the left * AII = A( I, I ) A( I, I ) = ONE CALL DLARF( 'Left', M-I+1, N-I, A( I, I ), 1, TAU( I ), $ A( I, I+1 ), LDA, WORK ) A( I, I ) = AII END IF 10 CONTINUE RETURN * * End of DGEQR2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEBAK( JOB, SIDE, N, ILO, IHI, SCALE, M, V, LDV, $ INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER JOB, SIDE INTEGER IHI, ILO, INFO, LDV, M, N * .. * .. Array Arguments .. DOUBLE PRECISION SCALE( * ), V( LDV, * ) * .. * * Purpose * ======= * * DGEBAK forms the right or left eigenvectors of a real general matrix * by backward transformation on the computed eigenvectors of the * balanced matrix output by DGEBAL. * * Arguments * ========= * * JOB (input) CHARACTER*1 * Specifies the type of backward transformation required: * = 'N', do nothing, return immediately; * = 'P', do backward transformation for permutation only; * = 'S', do backward transformation for scaling only; * = 'B', do backward transformations for both permutation and * scaling. * JOB must be the same as the argument JOB supplied to DGEBAL. * * SIDE (input) CHARACTER*1 * = 'R': V contains right eigenvectors; * = 'L': V contains left eigenvectors. * * N (input) INTEGER * The number of rows of the matrix V. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * The integers ILO and IHI determined by DGEBAL. * 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. * * SCALE (input) DOUBLE PRECISION array, dimension (N) * Details of the permutation and scaling factors, as returned * by DGEBAL. * * M (input) INTEGER * The number of columns of the matrix V. M >= 0. * * V (input/output) DOUBLE PRECISION array, dimension (LDV,M) * On entry, the matrix of right or left eigenvectors to be * transformed, as returned by DHSEIN or DTREVC. * On exit, V is overwritten by the transformed eigenvectors. * * LDV (input) INTEGER * The leading dimension of the array V. LDV >= max(1,N). * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL LEFTV, RIGHTV INTEGER I, II, K DOUBLE PRECISION S * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DSCAL, DSWAP, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Decode and Test the input parameters * RIGHTV = LSAME( SIDE, 'R' ) LEFTV = LSAME( SIDE, 'L' ) * INFO = 0 IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN INFO = -1 ELSE IF( .NOT.RIGHTV .AND. .NOT.LEFTV ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN INFO = -4 ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN INFO = -5 ELSE IF( M.LT.0 ) THEN INFO = -7 ELSE IF( LDV.LT.MAX( 1, N ) ) THEN INFO = -9 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEBAK', -INFO ) RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) $ RETURN IF( M.EQ.0 ) $ RETURN IF( LSAME( JOB, 'N' ) ) $ RETURN * IF( ILO.EQ.IHI ) $ GO TO 30 * * Backward balance * IF( LSAME( JOB, 'S' ) .OR. LSAME( JOB, 'B' ) ) THEN * IF( RIGHTV ) THEN DO 10 I = ILO, IHI S = SCALE( I ) CALL DSCAL( M, S, V( I, 1 ), LDV ) 10 CONTINUE END IF * IF( LEFTV ) THEN DO 20 I = ILO, IHI S = ONE / SCALE( I ) CALL DSCAL( M, S, V( I, 1 ), LDV ) 20 CONTINUE END IF * END IF * * Backward permutation * * For I = ILO-1 step -1 until 1, * IHI+1 step 1 until N do -- * 30 CONTINUE IF( LSAME( JOB, 'P' ) .OR. LSAME( JOB, 'B' ) ) THEN IF( RIGHTV ) THEN DO 40 II = 1, N I = II IF( I.GE.ILO .AND. I.LE.IHI ) $ GO TO 40 IF( I.LT.ILO ) $ I = ILO - II K = SCALE( I ) IF( K.EQ.I ) $ GO TO 40 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 40 CONTINUE END IF * IF( LEFTV ) THEN DO 50 II = 1, N I = II IF( I.GE.ILO .AND. I.LE.IHI ) $ GO TO 50 IF( I.LT.ILO ) $ I = ILO - II K = SCALE( I ) IF( K.EQ.I ) $ GO TO 50 CALL DSWAP( M, V( I, 1 ), LDV, V( K, 1 ), LDV ) 50 CONTINUE END IF END IF * RETURN * * End of DGEBAK * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEBAL( JOB, N, A, LDA, ILO, IHI, SCALE, INFO ) * * -- LAPACK routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. CHARACTER JOB INTEGER IHI, ILO, INFO, LDA, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), SCALE( * ) * .. * * Purpose * ======= * * DGEBAL balances a general real matrix A. This involves, first, * permuting A by a similarity transformation to isolate eigenvalues * in the first 1 to ILO-1 and last IHI+1 to N elements on the * diagonal; and second, applying a diagonal similarity transformation * to rows and columns ILO to IHI to make the rows and columns as * close in norm as possible. Both steps are optional. * * Balancing may reduce the 1-norm of the matrix, and improve the * accuracy of the computed eigenvalues and/or eigenvectors. * * Arguments * ========= * * JOB (input) CHARACTER*1 * Specifies the operations to be performed on A: * = 'N': none: simply set ILO = 1, IHI = N, SCALE(I) = 1.0 * for i = 1,...,N; * = 'P': permute only; * = 'S': scale only; * = 'B': both permute and scale. * * N (input) INTEGER * The order of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the input matrix A. * On exit, A is overwritten by the balanced matrix. * If JOB = 'N', A is not referenced. * See Further Details. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * ILO (output) INTEGER * IHI (output) INTEGER * ILO and IHI are set to integers such that on exit * A(i,j) = 0 if i > j and j = 1,...,ILO-1 or I = IHI+1,...,N. * If JOB = 'N' or 'S', ILO = 1 and IHI = N. * * SCALE (output) DOUBLE PRECISION array, dimension (N) * Details of the permutations and scaling factors applied to * A. If P(j) is the index of the row and column interchanged * with row and column j and D(j) is the scaling factor * applied to row and column j, then * SCALE(j) = P(j) for j = 1,...,ILO-1 * = D(j) for j = ILO,...,IHI * = P(j) for j = IHI+1,...,N. * The order in which the interchanges are made is N to IHI+1, * then 1 to ILO-1. * * INFO (output) INTEGER * = 0: successful exit. * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * The permutations consist of row and column interchanges which put * the matrix in the form * * ( T1 X Y ) * P A P = ( 0 B Z ) * ( 0 0 T2 ) * * where T1 and T2 are upper triangular matrices whose eigenvalues lie * along the diagonal. The column indices ILO and IHI mark the starting * and ending columns of the submatrix B. Balancing consists of applying * a diagonal similarity transformation inv(D) * B * D to make the * 1-norms of each row of B and its corresponding column nearly equal. * The output matrix is * * ( T1 X*D Y ) * ( 0 inv(D)*B*D inv(D)*Z ). * ( 0 0 T2 ) * * Information about the permutations P and the diagonal matrix D is * returned in the vector SCALE. * * This subroutine is based on the EISPACK routine BALANC. * * Modified by Tzu-Yi Chen, Computer Science Division, University of * California at Berkeley, USA * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) DOUBLE PRECISION SCLFAC PARAMETER ( SCLFAC = 2.0D+0 ) DOUBLE PRECISION FACTOR PARAMETER ( FACTOR = 0.95D+0 ) * .. * .. Local Scalars .. LOGICAL NOCONV INTEGER I, ICA, IEXC, IRA, J, K, L, M DOUBLE PRECISION C, CA, F, G, R, RA, S, SFMAX1, SFMAX2, SFMIN1, $ SFMIN2 * .. * .. External Functions .. LOGICAL DISNAN, LSAME INTEGER IDAMAX DOUBLE PRECISION DLAMCH EXTERNAL DISNAN, LSAME, IDAMAX, DLAMCH * .. * .. External Subroutines .. EXTERNAL DSCAL, DSWAP, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters * INFO = 0 IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.LSAME( JOB, 'P' ) .AND. $ .NOT.LSAME( JOB, 'S' ) .AND. .NOT.LSAME( JOB, 'B' ) ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -4 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEBAL', -INFO ) RETURN END IF * K = 1 L = N * IF( N.EQ.0 ) $ GO TO 210 * IF( LSAME( JOB, 'N' ) ) THEN DO 10 I = 1, N SCALE( I ) = ONE 10 CONTINUE GO TO 210 END IF * IF( LSAME( JOB, 'S' ) ) $ GO TO 120 * * Permutation to isolate eigenvalues if possible * GO TO 50 * * Row and column exchange. * 20 CONTINUE SCALE( M ) = J IF( J.EQ.M ) $ GO TO 30 * CALL DSWAP( L, A( 1, J ), 1, A( 1, M ), 1 ) CALL DSWAP( N-K+1, A( J, K ), LDA, A( M, K ), LDA ) * 30 CONTINUE GO TO ( 40, 80 )IEXC * * Search for rows isolating an eigenvalue and push them down. * 40 CONTINUE IF( L.EQ.1 ) $ GO TO 210 L = L - 1 * 50 CONTINUE DO 70 J = L, 1, -1 * DO 60 I = 1, L IF( I.EQ.J ) $ GO TO 60 IF( A( J, I ).NE.ZERO ) $ GO TO 70 60 CONTINUE * M = L IEXC = 1 GO TO 20 70 CONTINUE * GO TO 90 * * Search for columns isolating an eigenvalue and push them left. * 80 CONTINUE K = K + 1 * 90 CONTINUE DO 110 J = K, L * DO 100 I = K, L IF( I.EQ.J ) $ GO TO 100 IF( A( I, J ).NE.ZERO ) $ GO TO 110 100 CONTINUE * M = K IEXC = 2 GO TO 20 110 CONTINUE * 120 CONTINUE DO 130 I = K, L SCALE( I ) = ONE 130 CONTINUE * IF( LSAME( JOB, 'P' ) ) $ GO TO 210 * * Balance the submatrix in rows K to L. * * Iterative loop for norm reduction * SFMIN1 = DLAMCH( 'S' ) / DLAMCH( 'P' ) SFMAX1 = ONE / SFMIN1 SFMIN2 = SFMIN1*SCLFAC SFMAX2 = ONE / SFMIN2 140 CONTINUE NOCONV = .FALSE. * DO 200 I = K, L C = ZERO R = ZERO * DO 150 J = K, L IF( J.EQ.I ) $ GO TO 150 C = C + ABS( A( J, I ) ) R = R + ABS( A( I, J ) ) 150 CONTINUE ICA = IDAMAX( L, A( 1, I ), 1 ) CA = ABS( A( ICA, I ) ) IRA = IDAMAX( N-K+1, A( I, K ), LDA ) RA = ABS( A( I, IRA+K-1 ) ) * * Guard against zero C or R due to underflow. * IF( C.EQ.ZERO .OR. R.EQ.ZERO ) $ GO TO 200 G = R / SCLFAC F = ONE S = C + R 160 CONTINUE IF( C.GE.G .OR. MAX( F, C, CA ).GE.SFMAX2 .OR. $ MIN( R, G, RA ).LE.SFMIN2 )GO TO 170 IF( DISNAN( C+F+CA+R+G+RA ) ) THEN * * Exit if NaN to avoid infinite loop * INFO = -3 CALL XERBLA( 'DGEBAL', -INFO ) RETURN END IF F = F*SCLFAC C = C*SCLFAC CA = CA*SCLFAC R = R / SCLFAC G = G / SCLFAC RA = RA / SCLFAC GO TO 160 * 170 CONTINUE G = C / SCLFAC 180 CONTINUE IF( G.LT.R .OR. MAX( R, RA ).GE.SFMAX2 .OR. $ MIN( F, C, G, CA ).LE.SFMIN2 )GO TO 190 F = F / SCLFAC C = C / SCLFAC G = G / SCLFAC CA = CA / SCLFAC R = R*SCLFAC RA = RA*SCLFAC GO TO 180 * * Now balance. * 190 CONTINUE IF( ( C+R ).GE.FACTOR*S ) $ GO TO 200 IF( F.LT.ONE .AND. SCALE( I ).LT.ONE ) THEN IF( F*SCALE( I ).LE.SFMIN1 ) $ GO TO 200 END IF IF( F.GT.ONE .AND. SCALE( I ).GT.ONE ) THEN IF( SCALE( I ).GE.SFMAX1 / F ) $ GO TO 200 END IF G = ONE / F SCALE( I ) = SCALE( I )*F NOCONV = .TRUE. * CALL DSCAL( N-K+1, G, A( I, K ), LDA ) CALL DSCAL( L, F, A( 1, I ), 1 ) * 200 CONTINUE * IF( NOCONV ) $ GO TO 140 * 210 CONTINUE ILO = K IHI = L * RETURN * * End of DGEBAL * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEHD2( N, ILO, IHI, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, ILO, INFO, LDA, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DGEHD2 reduces a real general matrix A to upper Hessenberg form H by * an orthogonal similarity transformation: Q' * A * Q = H . * * Arguments * ========= * * N (input) INTEGER * The order of the matrix A. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that A is already upper triangular in rows * and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally * set by a previous call to DGEBAL; otherwise they should be * set to 1 and N respectively. See Further Details. * 1 <= ILO <= IHI <= max(1,N). * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the n by n general matrix to be reduced. * On exit, the upper triangle and the first subdiagonal of A * are overwritten with the upper Hessenberg matrix H, and the * elements below the first subdiagonal, with the array TAU, * represent the orthogonal matrix Q as a product of elementary * reflectors. See Further Details. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * TAU (output) DOUBLE PRECISION array, dimension (N-1) * The scalar factors of the elementary reflectors (see Further * Details). * * WORK (workspace) DOUBLE PRECISION array, dimension (N) * * INFO (output) INTEGER * = 0: successful exit. * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * The matrix Q is represented as a product of (ihi-ilo) elementary * reflectors * * Q = H(ilo) H(ilo+1) . . . H(ihi-1). * * Each H(i) has the form * * H(i) = I - tau * v * v' * * where tau is a real scalar, and v is a real vector with * v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on * exit in A(i+2:ihi,i), and tau in TAU(i). * * The contents of A are illustrated by the following example, with * n = 7, ilo = 2 and ihi = 6: * * on entry, on exit, * * ( a a a a a a a ) ( a a h h h h a ) * ( a a a a a a ) ( a h h h h a ) * ( a a a a a a ) ( h h h h h h ) * ( a a a a a a ) ( v2 h h h h h ) * ( a a a a a a ) ( v2 v3 h h h h ) * ( a a a a a a ) ( v2 v3 v4 h h h ) * ( a ) ( a ) * * where a denotes an element of the original matrix A, h denotes a * modified element of the upper Hessenberg matrix H, and vi denotes an * element of the vector defining H(i). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. INTEGER I DOUBLE PRECISION AII * .. * .. External Subroutines .. EXTERNAL DLARF, DLARFG, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input parameters * INFO = 0 IF( N.LT.0 ) THEN INFO = -1 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN INFO = -2 ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEHD2', -INFO ) RETURN END IF * DO 10 I = ILO, IHI - 1 * * Compute elementary reflector H(i) to annihilate A(i+2:ihi,i) * CALL DLARFG( IHI-I, A( I+1, I ), A( MIN( I+2, N ), I ), 1, $ TAU( I ) ) AII = A( I+1, I ) A( I+1, I ) = ONE * * Apply H(i) to A(1:ihi,i+1:ihi) from the right * CALL DLARF( 'Right', IHI, IHI-I, A( I+1, I ), 1, TAU( I ), $ A( 1, I+1 ), LDA, WORK ) * * Apply H(i) to A(i+1:ihi,i+1:n) from the left * CALL DLARF( 'Left', IHI-I, N-I, A( I+1, I ), 1, TAU( I ), $ A( I+1, I+1 ), LDA, WORK ) * A( I+1, I ) = AII 10 CONTINUE * RETURN * * End of DGEHD2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DGEHRD( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2.1) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * -- April 2009 -- * * .. Scalar Arguments .. INTEGER IHI, ILO, INFO, LDA, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DGEHRD reduces a real general matrix A to upper Hessenberg form H by * an orthogonal similarity transformation: Q' * A * Q = H . * * Arguments * ========= * * N (input) INTEGER * The order of the matrix A. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that A is already upper triangular in rows * and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally * set by a previous call to DGEBAL; otherwise they should be * set to 1 and N respectively. See Further Details. * 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the N-by-N general matrix to be reduced. * On exit, the upper triangle and the first subdiagonal of A * are overwritten with the upper Hessenberg matrix H, and the * elements below the first subdiagonal, with the array TAU, * represent the orthogonal matrix Q as a product of elementary * reflectors. See Further Details. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * TAU (output) DOUBLE PRECISION array, dimension (N-1) * The scalar factors of the elementary reflectors (see Further * Details). Elements 1:ILO-1 and IHI:N-1 of TAU are set to * zero. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (LWORK) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The length of the array WORK. LWORK >= max(1,N). * For optimum performance LWORK >= N*NB, where NB is the * optimal blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value. * * Further Details * =============== * * The matrix Q is represented as a product of (ihi-ilo) elementary * reflectors * * Q = H(ilo) H(ilo+1) . . . H(ihi-1). * * Each H(i) has the form * * H(i) = I - tau * v * v' * * where tau is a real scalar, and v is a real vector with * v(1:i) = 0, v(i+1) = 1 and v(ihi+1:n) = 0; v(i+2:ihi) is stored on * exit in A(i+2:ihi,i), and tau in TAU(i). * * The contents of A are illustrated by the following example, with * n = 7, ilo = 2 and ihi = 6: * * on entry, on exit, * * ( a a a a a a a ) ( a a h h h h a ) * ( a a a a a a ) ( a h h h h a ) * ( a a a a a a ) ( h h h h h h ) * ( a a a a a a ) ( v2 h h h h h ) * ( a a a a a a ) ( v2 v3 h h h h ) * ( a a a a a a ) ( v2 v3 v4 h h h ) * ( a ) ( a ) * * where a denotes an element of the original matrix A, h denotes a * modified element of the upper Hessenberg matrix H, and vi denotes an * element of the vector defining H(i). * * This file is a slight modification of LAPACK-3.0's DGEHRD * subroutine incorporating improvements proposed by Quintana-Orti and * Van de Geijn (2006). (See DLAHR2.) * * ===================================================================== * * .. Parameters .. INTEGER NBMAX, LDT PARAMETER ( NBMAX = 64, LDT = NBMAX+1 ) DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, $ ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL LQUERY INTEGER I, IB, IINFO, IWS, J, LDWORK, LWKOPT, NB, $ NBMIN, NH, NX DOUBLE PRECISION EI * .. * .. Local Arrays .. DOUBLE PRECISION T( LDT, NBMAX ) * .. * .. External Subroutines .. EXTERNAL DAXPY, DGEHD2, DGEMM, DLAHR2, DLARFB, DTRMM, $ XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Executable Statements .. * * Test the input parameters * INFO = 0 NB = MIN( NBMAX, ILAENV( 1, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) LWKOPT = N*NB WORK( 1 ) = LWKOPT LQUERY = ( LWORK.EQ.-1 ) IF( N.LT.0 ) THEN INFO = -1 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN INFO = -2 ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN INFO = -8 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DGEHRD', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Set elements 1:ILO-1 and IHI:N-1 of TAU to zero * DO 10 I = 1, ILO - 1 TAU( I ) = ZERO 10 CONTINUE DO 20 I = MAX( 1, IHI ), N - 1 TAU( I ) = ZERO 20 CONTINUE * * Quick return if possible * NH = IHI - ILO + 1 IF( NH.LE.1 ) THEN WORK( 1 ) = 1 RETURN END IF * * Determine the block size * NB = MIN( NBMAX, ILAENV( 1, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) NBMIN = 2 IWS = 1 IF( NB.GT.1 .AND. NB.LT.NH ) THEN * * Determine when to cross over from blocked to unblocked code * (last block is always handled by unblocked code) * NX = MAX( NB, ILAENV( 3, 'DGEHRD', ' ', N, ILO, IHI, -1 ) ) IF( NX.LT.NH ) THEN * * Determine if workspace is large enough for blocked code * IWS = N*NB IF( LWORK.LT.IWS ) THEN * * Not enough workspace to use optimal NB: determine the * minimum value of NB, and reduce NB or force use of * unblocked code * NBMIN = MAX( 2, ILAENV( 2, 'DGEHRD', ' ', N, ILO, IHI, $ -1 ) ) IF( LWORK.GE.N*NBMIN ) THEN NB = LWORK / N ELSE NB = 1 END IF END IF END IF END IF LDWORK = N * IF( NB.LT.NBMIN .OR. NB.GE.NH ) THEN * * Use unblocked code below * I = ILO * ELSE * * Use blocked code * DO 40 I = ILO, IHI - 1 - NX, NB IB = MIN( NB, IHI-I ) * * Reduce columns i:i+ib-1 to Hessenberg form, returning the * matrices V and T of the block reflector H = I - V*T*V' * which performs the reduction, and also the matrix Y = A*V*T * CALL DLAHR2( IHI, I, IB, A( 1, I ), LDA, TAU( I ), T, LDT, $ WORK, LDWORK ) * * Apply the block reflector H to A(1:ihi,i+ib:ihi) from the * right, computing A := A - Y * V'. V(i+ib,ib-1) must be set * to 1 * EI = A( I+IB, I+IB-1 ) A( I+IB, I+IB-1 ) = ONE CALL DGEMM( 'No transpose', 'Transpose', $ IHI, IHI-I-IB+1, $ IB, -ONE, WORK, LDWORK, A( I+IB, I ), LDA, ONE, $ A( 1, I+IB ), LDA ) A( I+IB, I+IB-1 ) = EI * * Apply the block reflector H to A(1:i,i+1:i+ib-1) from the * right * CALL DTRMM( 'Right', 'Lower', 'Transpose', $ 'Unit', I, IB-1, $ ONE, A( I+1, I ), LDA, WORK, LDWORK ) DO 30 J = 0, IB-2 CALL DAXPY( I, -ONE, WORK( LDWORK*J+1 ), 1, $ A( 1, I+J+1 ), 1 ) 30 CONTINUE * * Apply the block reflector H to A(i+1:ihi,i+ib:n) from the * left * CALL DLARFB( 'Left', 'Transpose', 'Forward', $ 'Columnwise', $ IHI-I, N-I-IB+1, IB, A( I+1, I ), LDA, T, LDT, $ A( I+1, I+IB ), LDA, WORK, LDWORK ) 40 CONTINUE END IF * * Use unblocked code to reduce the rest of the matrix * CALL DGEHD2( N, I, IHI, A, LDA, TAU, WORK, IINFO ) WORK( 1 ) = IWS * RETURN * * End of DGEHRD * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DHSEQR( JOB, COMPZ, N, ILO, IHI, H, LDH, WR, WI, Z, $ LDZ, WORK, LWORK, INFO ) * * -- LAPACK computational routine (version 3.2.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * June 2010 * * .. Scalar Arguments .. INTEGER IHI, ILO, INFO, LDH, LDZ, LWORK, N CHARACTER COMPZ, JOB * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), $ Z( LDZ, * ) * .. * Purpose * ======= * * DHSEQR computes the eigenvalues of a Hessenberg matrix H * and, optionally, the matrices T and Z from the Schur decomposition * H = Z T Z**T, where T is an upper quasi-triangular matrix (the * Schur form), and Z is the orthogonal matrix of Schur vectors. * * Optionally Z may be postmultiplied into an input orthogonal * matrix Q so that this routine can give the Schur factorization * of a matrix A which has been reduced to the Hessenberg form H * by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. * * Arguments * ========= * * JOB (input) CHARACTER*1 * = 'E': compute eigenvalues only; * = 'S': compute eigenvalues and the Schur form T. * * COMPZ (input) CHARACTER*1 * = 'N': no Schur vectors are computed; * = 'I': Z is initialized to the unit matrix and the matrix Z * of Schur vectors of H is returned; * = 'V': Z must contain an orthogonal matrix Q on entry, and * the product Q*Z is returned. * * N (input) INTEGER * The order of the matrix H. N .GE. 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that H is already upper triangular in rows * and columns 1:ILO-1 and IHI+1:N. ILO and IHI are normally * set by a previous call to DGEBAL, and then passed to DGEHRD * when the matrix output by DGEBAL is reduced to Hessenberg * form. Otherwise ILO and IHI should be set to 1 and N * respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. * If N = 0, then ILO = 1 and IHI = 0. * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On entry, the upper Hessenberg matrix H. * On exit, if INFO = 0 and JOB = 'S', then H contains the * upper quasi-triangular matrix T from the Schur decomposition * (the Schur form); 2-by-2 diagonal blocks (corresponding to * complex conjugate pairs of eigenvalues) are returned in * standard form, with H(i,i) = H(i+1,i+1) and * H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and JOB = 'E', the * contents of H are unspecified on exit. (The output value of * H when INFO.GT.0 is given under the description of INFO * below.) * * Unlike earlier versions of DHSEQR, this subroutine may * explicitly H(i,j) = 0 for i.GT.j and j = 1, 2, ... ILO-1 * or j = IHI+1, IHI+2, ... N. * * LDH (input) INTEGER * The leading dimension of the array H. LDH .GE. max(1,N). * * WR (output) DOUBLE PRECISION array, dimension (N) * WI (output) DOUBLE PRECISION array, dimension (N) * The real and imaginary parts, respectively, of the computed * eigenvalues. If two eigenvalues are computed as a complex * conjugate pair, they are stored in consecutive elements of * WR and WI, say the i-th and (i+1)th, with WI(i) .GT. 0 and * WI(i+1) .LT. 0. If JOB = 'S', the eigenvalues are stored in * the same order as on the diagonal of the Schur form returned * in H, with WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 * diagonal block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and * WI(i+1) = -WI(i). * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,N) * If COMPZ = 'N', Z is not referenced. * If COMPZ = 'I', on entry Z need not be set and on exit, * if INFO = 0, Z contains the orthogonal matrix Z of the Schur * vectors of H. If COMPZ = 'V', on entry Z must contain an * N-by-N matrix Q, which is assumed to be equal to the unit * matrix except for the submatrix Z(ILO:IHI,ILO:IHI). On exit, * if INFO = 0, Z contains Q*Z. * Normally Q is the orthogonal matrix generated by DORGHR * after the call to DGEHRD which formed the Hessenberg matrix * H. (The output value of Z when INFO.GT.0 is given under * the description of INFO below.) * * LDZ (input) INTEGER * The leading dimension of the array Z. if COMPZ = 'I' or * COMPZ = 'V', then LDZ.GE.MAX(1,N). Otherwize, LDZ.GE.1. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (LWORK) * On exit, if INFO = 0, WORK(1) returns an estimate of * the optimal value for LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK .GE. max(1,N) * is sufficient and delivers very good and sometimes * optimal performance. However, LWORK as large as 11*N * may be required for optimal performance. A workspace * query is recommended to determine the optimal workspace * size. * * If LWORK = -1, then DHSEQR does a workspace query. * In this case, DHSEQR checks the input parameters and * estimates the optimal workspace size for the given * values of N, ILO and IHI. The estimate is returned * in WORK(1). No error message related to LWORK is * issued by XERBLA. Neither H nor Z are accessed. * * * INFO (output) INTEGER * = 0: successful exit * .LT. 0: if INFO = -i, the i-th argument had an illegal * value * .GT. 0: if INFO = i, DHSEQR failed to compute all of * the eigenvalues. Elements 1:ilo-1 and i+1:n of WR * and WI contain those eigenvalues which have been * successfully computed. (Failures are rare.) * * If INFO .GT. 0 and JOB = 'E', then on exit, the * remaining unconverged eigenvalues are the eigen- * values of the upper Hessenberg matrix rows and * columns ILO through INFO of the final, output * value of H. * * If INFO .GT. 0 and JOB = 'S', then on exit * * (*) (initial value of H)*U = U*(final value of H) * * where U is an orthogonal matrix. The final * value of H is upper Hessenberg and quasi-triangular * in rows and columns INFO+1 through IHI. * * If INFO .GT. 0 and COMPZ = 'V', then on exit * * (final value of Z) = (initial value of Z)*U * * where U is the orthogonal matrix in (*) (regard- * less of the value of JOB.) * * If INFO .GT. 0 and COMPZ = 'I', then on exit * (final value of Z) = U * where U is the orthogonal matrix in (*) (regard- * less of the value of JOB.) * * If INFO .GT. 0 and COMPZ = 'N', then Z is not * accessed. * * ================================================================ * Default values supplied by * ILAENV(ISPEC,'DHSEQR',JOB(:1)//COMPZ(:1),N,ILO,IHI,LWORK). * It is suggested that these defaults be adjusted in order * to attain best performance in each particular * computational environment. * * ISPEC=12: The DLAHQR vs DLAQR0 crossover point. * Default: 75. (Must be at least 11.) * * ISPEC=13: Recommended deflation window size. * This depends on ILO, IHI and NS. NS is the * number of simultaneous shifts returned * by ILAENV(ISPEC=15). (See ISPEC=15 below.) * The default for (IHI-ILO+1).LE.500 is NS. * The default for (IHI-ILO+1).GT.500 is 3*NS/2. * * ISPEC=14: Nibble crossover point. (See IPARMQ for * details.) Default: 14% of deflation window * size. * * ISPEC=15: Number of simultaneous shifts in a multishift * QR iteration. * * If IHI-ILO+1 is ... * * greater than ...but less ... the * or equal to ... than default is * * 1 30 NS = 2(+) * 30 60 NS = 4(+) * 60 150 NS = 10(+) * 150 590 NS = ** * 590 3000 NS = 64 * 3000 6000 NS = 128 * 6000 infinity NS = 256 * * (+) By default some or all matrices of this order * are passed to the implicit double shift routine * DLAHQR and this parameter is ignored. See * ISPEC=12 above and comments in IPARMQ for * details. * * (**) The asterisks (**) indicate an ad-hoc * function of N increasing from 10 to 64. * * ISPEC=16: Select structured matrix multiply. * If the number of simultaneous shifts (specified * by ISPEC=15) is less than 14, then the default * for ISPEC=16 is 0. Otherwise the default for * ISPEC=16 is 2. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * References: * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 * Performance, SIAM Journal of Matrix Analysis, volume 23, pages * 929--947, 2002. * * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part II: Aggressive Early Deflation, SIAM Journal * of Matrix Analysis, volume 23, pages 948--973, 2002. * * ================================================================ * .. Parameters .. * * ==== Matrices of order NTINY or smaller must be processed by * . DLAHQR because of insufficient subdiagonal scratch space. * . (This is a hard limit.) ==== INTEGER NTINY PARAMETER ( NTINY = 11 ) * * ==== NL allocates some local workspace to help small matrices * . through a rare DLAHQR failure. NL .GT. NTINY = 11 is * . required and NL .LE. NMIN = ILAENV(ISPEC=12,...) is recom- * . mended. (The default value of NMIN is 75.) Using NL = 49 * . allows up to six simultaneous shifts and a 16-by-16 * . deflation window. ==== INTEGER NL PARAMETER ( NL = 49 ) DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Arrays .. DOUBLE PRECISION HL( NL, NL ), WORKL( NL ) * .. * .. Local Scalars .. INTEGER I, KBOT, NMIN LOGICAL INITZ, LQUERY, WANTT, WANTZ * .. * .. External Functions .. INTEGER ILAENV LOGICAL LSAME EXTERNAL ILAENV, LSAME * .. * .. External Subroutines .. EXTERNAL DLACPY, DLAHQR, DLAQR0, DLASET, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC DBLE, MAX, MIN * .. * .. Executable Statements .. * * ==== Decode and check the input parameters. ==== * WANTT = LSAME( JOB, 'S' ) INITZ = LSAME( COMPZ, 'I' ) WANTZ = INITZ .OR. LSAME( COMPZ, 'V' ) WORK( 1 ) = DBLE( MAX( 1, N ) ) LQUERY = LWORK.EQ.-1 * INFO = 0 IF( .NOT.LSAME( JOB, 'E' ) .AND. .NOT.WANTT ) THEN INFO = -1 ELSE IF( .NOT.LSAME( COMPZ, 'N' ) .AND. .NOT.WANTZ ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -3 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN INFO = -4 ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN INFO = -5 ELSE IF( LDH.LT.MAX( 1, N ) ) THEN INFO = -7 ELSE IF( LDZ.LT.1 .OR. ( WANTZ .AND. LDZ.LT.MAX( 1, N ) ) ) THEN INFO = -11 ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN INFO = -13 END IF * IF( INFO.NE.0 ) THEN * * ==== Quick return in case of invalid argument. ==== * CALL XERBLA( 'DHSEQR', -INFO ) RETURN * ELSE IF( N.EQ.0 ) THEN * * ==== Quick return in case N = 0; nothing to do. ==== * RETURN * ELSE IF( LQUERY ) THEN * * ==== Quick return in case of a workspace query ==== * CALL DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, $ IHI, Z, LDZ, WORK, LWORK, INFO ) * ==== Ensure reported workspace size is backward-compatible with * . previous LAPACK versions. ==== WORK( 1 ) = MAX( DBLE( MAX( 1, N ) ), WORK( 1 ) ) RETURN * ELSE * * ==== copy eigenvalues isolated by DGEBAL ==== * DO 10 I = 1, ILO - 1 WR( I ) = H( I, I ) WI( I ) = ZERO 10 CONTINUE DO 20 I = IHI + 1, N WR( I ) = H( I, I ) WI( I ) = ZERO 20 CONTINUE * * ==== Initialize Z, if requested ==== * IF( INITZ ) $ CALL DLASET( 'A', N, N, ZERO, ONE, Z, LDZ ) * * ==== Quick return if possible ==== * IF( ILO.EQ.IHI ) THEN WR( ILO ) = H( ILO, ILO ) WI( ILO ) = ZERO RETURN END IF * * ==== DLAHQR/DLAQR0 crossover point ==== * NMIN = ILAENV( 12, 'DHSEQR', JOB( : 1 ) // COMPZ( : 1 ), N, $ ILO, IHI, LWORK ) NMIN = MAX( NTINY, NMIN ) * * ==== DLAQR0 for big matrices; DLAHQR for small ones ==== * IF( N.GT.NMIN ) THEN CALL DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, $ IHI, Z, LDZ, WORK, LWORK, INFO ) ELSE * * ==== Small matrix ==== * CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, ILO, $ IHI, Z, LDZ, INFO ) * IF( INFO.GT.0 ) THEN * * ==== A rare DLAHQR failure! DLAQR0 sometimes succeeds * . when DLAHQR fails. ==== * KBOT = INFO * IF( N.GE.NL ) THEN * * ==== Larger matrices have enough subdiagonal scratch * . space to call DLAQR0 directly. ==== * CALL DLAQR0( WANTT, WANTZ, N, ILO, KBOT, H, LDH, WR, $ WI, ILO, IHI, Z, LDZ, WORK, LWORK, INFO ) * ELSE * * ==== Tiny matrices don't have enough subdiagonal * . scratch space to benefit from DLAQR0. Hence, * . tiny matrices must be copied into a larger * . array before calling DLAQR0. ==== * CALL DLACPY( 'A', N, N, H, LDH, HL, NL ) HL( N+1, N ) = ZERO CALL DLASET( 'A', NL, NL-N, ZERO, ZERO, HL( 1, N+1 ), $ NL ) CALL DLAQR0( WANTT, WANTZ, NL, ILO, KBOT, HL, NL, WR, $ WI, ILO, IHI, Z, LDZ, WORKL, NL, INFO ) IF( WANTT .OR. INFO.NE.0 ) $ CALL DLACPY( 'A', N, N, HL, NL, H, LDH ) END IF END IF END IF * * ==== Clear out the trash, if necessary. ==== * IF( ( WANTT .OR. INFO.NE.0 ) .AND. N.GT.2 ) $ CALL DLASET( 'L', N-2, N-2, ZERO, ZERO, H( 3, 1 ), LDH ) * * ==== Ensure reported workspace size is backward-compatible with * . previous LAPACK versions. ==== * WORK( 1 ) = MAX( DBLE( MAX( 1, N ) ), WORK( 1 ) ) END IF * * ==== End of DHSEQR ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLABAD( SMALL, LARGE ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION LARGE, SMALL * .. * * Purpose * ======= * * DLABAD takes as input the values computed by DLAMCH for underflow and * overflow, and returns the square root of each of these values if the * log of LARGE is sufficiently large. This subroutine is intended to * identify machines with a large exponent range, such as the Crays, and * redefine the underflow and overflow limits to be the square roots of * the values computed by DLAMCH. This subroutine is needed because * DLAMCH does not compensate for poor arithmetic in the upper half of * the exponent range, as is found on a Cray. * * Arguments * ========= * * SMALL (input/output) DOUBLE PRECISION * On entry, the underflow threshold as computed by DLAMCH. * On exit, if LOG10(LARGE) is sufficiently large, the square * root of SMALL, otherwise unchanged. * * LARGE (input/output) DOUBLE PRECISION * On entry, the overflow threshold as computed by DLAMCH. * On exit, if LOG10(LARGE) is sufficiently large, the square * root of LARGE, otherwise unchanged. * * ===================================================================== * * .. Intrinsic Functions .. INTRINSIC LOG10, SQRT * .. * .. Executable Statements .. * * If it looks like we're on a Cray, take the square root of * SMALL and LARGE to avoid overflow and underflow problems. * IF( LOG10( LARGE ).GT.2000.D0 ) THEN SMALL = SQRT( SMALL ) LARGE = SQRT( LARGE ) END IF * RETURN * * End of DLABAD * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLACN2( N, V, X, ISGN, EST, KASE, ISAVE ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER KASE, N DOUBLE PRECISION EST * .. * .. Array Arguments .. INTEGER ISGN( * ), ISAVE( 3 ) DOUBLE PRECISION V( * ), X( * ) * .. * * Purpose * ======= * * DLACN2 estimates the 1-norm of a square, real matrix A. * Reverse communication is used for evaluating matrix-vector products. * * Arguments * ========= * * N (input) INTEGER * The order of the matrix. N >= 1. * * V (workspace) DOUBLE PRECISION array, dimension (N) * On the final return, V = A*W, where EST = norm(V)/norm(W) * (W is not returned). * * X (input/output) DOUBLE PRECISION array, dimension (N) * On an intermediate return, X should be overwritten by * A * X, if KASE=1, * A' * X, if KASE=2, * and DLACN2 must be re-called with all the other parameters * unchanged. * * ISGN (workspace) INTEGER array, dimension (N) * * EST (input/output) DOUBLE PRECISION * On entry with KASE = 1 or 2 and ISAVE(1) = 3, EST should be * unchanged from the previous call to DLACN2. * On exit, EST is an estimate (a lower bound) for norm(A). * * KASE (input/output) INTEGER * On the initial call to DLACN2, KASE should be 0. * On an intermediate return, KASE will be 1 or 2, indicating * whether X should be overwritten by A * X or A' * X. * On the final return from DLACN2, KASE will again be 0. * * ISAVE (input/output) INTEGER array, dimension (3) * ISAVE is used to save variables between calls to DLACN2 * * Further Details * ======= ======= * * Contributed by Nick Higham, University of Manchester. * Originally named SONEST, dated March 16, 1988. * * Reference: N.J. Higham, "FORTRAN codes for estimating the one-norm of * a real or complex matrix, with applications to condition estimation", * ACM Trans. Math. Soft., vol. 14, no. 4, pp. 381-396, December 1988. * * This is a thread safe version of DLACON, which uses the array ISAVE * in place of a SAVE statement, as follows: * * DLACON DLACN2 * JUMP ISAVE(1) * J ISAVE(2) * ITER ISAVE(3) * * ===================================================================== * * .. Parameters .. INTEGER ITMAX PARAMETER ( ITMAX = 5 ) DOUBLE PRECISION ZERO, ONE, TWO PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0, TWO = 2.0D+0 ) * .. * .. Local Scalars .. INTEGER I, JLAST DOUBLE PRECISION ALTSGN, ESTOLD, TEMP * .. * .. External Functions .. INTEGER IDAMAX DOUBLE PRECISION DASUM EXTERNAL IDAMAX, DASUM * .. * .. External Subroutines .. EXTERNAL DCOPY * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, NINT, SIGN * .. * .. Executable Statements .. * IF( KASE.EQ.0 ) THEN DO 10 I = 1, N X( I ) = ONE / DBLE( N ) 10 CONTINUE KASE = 1 ISAVE( 1 ) = 1 RETURN END IF * GO TO ( 20, 40, 70, 110, 140 )ISAVE( 1 ) * * ................ ENTRY (ISAVE( 1 ) = 1) * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY A*X. * 20 CONTINUE IF( N.EQ.1 ) THEN V( 1 ) = X( 1 ) EST = ABS( V( 1 ) ) * ... QUIT GO TO 150 END IF EST = DASUM( N, X, 1 ) * DO 30 I = 1, N X( I ) = SIGN( ONE, X( I ) ) ISGN( I ) = NINT( X( I ) ) 30 CONTINUE KASE = 2 ISAVE( 1 ) = 2 RETURN * * ................ ENTRY (ISAVE( 1 ) = 2) * FIRST ITERATION. X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. * 40 CONTINUE ISAVE( 2 ) = IDAMAX( N, X, 1 ) ISAVE( 3 ) = 2 * * MAIN LOOP - ITERATIONS 2,3,...,ITMAX. * 50 CONTINUE DO 60 I = 1, N X( I ) = ZERO 60 CONTINUE X( ISAVE( 2 ) ) = ONE KASE = 1 ISAVE( 1 ) = 3 RETURN * * ................ ENTRY (ISAVE( 1 ) = 3) * X HAS BEEN OVERWRITTEN BY A*X. * 70 CONTINUE CALL DCOPY( N, X, 1, V, 1 ) ESTOLD = EST EST = DASUM( N, V, 1 ) DO 80 I = 1, N IF( NINT( SIGN( ONE, X( I ) ) ).NE.ISGN( I ) ) $ GO TO 90 80 CONTINUE * REPEATED SIGN VECTOR DETECTED, HENCE ALGORITHM HAS CONVERGED. GO TO 120 * 90 CONTINUE * TEST FOR CYCLING. IF( EST.LE.ESTOLD ) $ GO TO 120 * DO 100 I = 1, N X( I ) = SIGN( ONE, X( I ) ) ISGN( I ) = NINT( X( I ) ) 100 CONTINUE KASE = 2 ISAVE( 1 ) = 4 RETURN * * ................ ENTRY (ISAVE( 1 ) = 4) * X HAS BEEN OVERWRITTEN BY TRANSPOSE(A)*X. * 110 CONTINUE JLAST = ISAVE( 2 ) ISAVE( 2 ) = IDAMAX( N, X, 1 ) IF( ( X( JLAST ).NE.ABS( X( ISAVE( 2 ) ) ) ) .AND. $ ( ISAVE( 3 ).LT.ITMAX ) ) THEN ISAVE( 3 ) = ISAVE( 3 ) + 1 GO TO 50 END IF * * ITERATION COMPLETE. FINAL STAGE. * 120 CONTINUE ALTSGN = ONE DO 130 I = 1, N X( I ) = ALTSGN*( ONE+DBLE( I-1 ) / DBLE( N-1 ) ) ALTSGN = -ALTSGN 130 CONTINUE KASE = 1 ISAVE( 1 ) = 5 RETURN * * ................ ENTRY (ISAVE( 1 ) = 5) * X HAS BEEN OVERWRITTEN BY A*X. * 140 CONTINUE TEMP = TWO*( DASUM( N, X, 1 ) / DBLE( 3*N ) ) IF( TEMP.GT.EST ) THEN CALL DCOPY( N, X, 1, V, 1 ) EST = TEMP END IF * 150 CONTINUE KASE = 0 RETURN * * End of DLACN2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLACPY( UPLO, M, N, A, LDA, B, LDB ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER UPLO INTEGER LDA, LDB, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ) * .. * * Purpose * ======= * * DLACPY copies all or part of a two-dimensional matrix A to another * matrix B. * * Arguments * ========= * * UPLO (input) CHARACTER*1 * Specifies the part of the matrix A to be copied to B. * = 'U': Upper triangular part * = 'L': Lower triangular part * Otherwise: All of the matrix A * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The m by n matrix A. If UPLO = 'U', only the upper triangle * or trapezoid is accessed; if UPLO = 'L', only the lower * triangle or trapezoid is accessed. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * B (output) DOUBLE PRECISION array, dimension (LDB,N) * On exit, B = A in the locations specified by UPLO. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,M). * * ===================================================================== * * .. Local Scalars .. INTEGER I, J * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Intrinsic Functions .. INTRINSIC MIN * .. * .. Executable Statements .. * IF( LSAME( UPLO, 'U' ) ) THEN DO 20 J = 1, N DO 10 I = 1, MIN( J, M ) B( I, J ) = A( I, J ) 10 CONTINUE 20 CONTINUE ELSE IF( LSAME( UPLO, 'L' ) ) THEN DO 40 J = 1, N DO 30 I = J, M B( I, J ) = A( I, J ) 30 CONTINUE 40 CONTINUE ELSE DO 60 J = 1, N DO 50 I = 1, M B( I, J ) = A( I, J ) 50 CONTINUE 60 CONTINUE END IF RETURN * * End of DLACPY * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLADIV( A, B, C, D, P, Q ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION A, B, C, D, P, Q * .. * * Purpose * ======= * * DLADIV performs complex division in real arithmetic * * a + i*b * p + i*q = --------- * c + i*d * * The algorithm is due to Robert L. Smith and can be found * in D. Knuth, The art of Computer Programming, Vol.2, p.195 * * Arguments * ========= * * A (input) DOUBLE PRECISION * B (input) DOUBLE PRECISION * C (input) DOUBLE PRECISION * D (input) DOUBLE PRECISION * The scalars a, b, c, and d in the above expression. * * P (output) DOUBLE PRECISION * Q (output) DOUBLE PRECISION * The scalars p and q in the above expression. * * ===================================================================== * * .. Local Scalars .. DOUBLE PRECISION E, F * .. * .. Intrinsic Functions .. INTRINSIC ABS * .. * .. Executable Statements .. * IF( ABS( D ).LT.ABS( C ) ) THEN E = D / C F = C + D*E P = ( A+B*E ) / F Q = ( B-A*E ) / F ELSE E = C / D F = D + C*E P = ( B+A*E ) / F Q = ( -A+B*E ) / F END IF * RETURN * * End of DLADIV * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAEXC( WANTQ, N, T, LDT, Q, LDQ, J1, N1, N2, WORK, $ INFO ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. LOGICAL WANTQ INTEGER INFO, J1, LDQ, LDT, N, N1, N2 * .. * .. Array Arguments .. DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) * .. * * Purpose * ======= * * DLAEXC swaps adjacent diagonal blocks T11 and T22 of order 1 or 2 in * an upper quasi-triangular matrix T by an orthogonal similarity * transformation. * * T must be in Schur canonical form, that is, block upper triangular * with 1-by-1 and 2-by-2 diagonal blocks; each 2-by-2 diagonal block * has its diagonal elemnts equal and its off-diagonal elements of * opposite sign. * * Arguments * ========= * * WANTQ (input) LOGICAL * = .TRUE. : accumulate the transformation in the matrix Q; * = .FALSE.: do not accumulate the transformation. * * N (input) INTEGER * The order of the matrix T. N >= 0. * * T (input/output) DOUBLE PRECISION array, dimension (LDT,N) * On entry, the upper quasi-triangular matrix T, in Schur * canonical form. * On exit, the updated matrix T, again in Schur canonical form. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= max(1,N). * * Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N) * On entry, if WANTQ is .TRUE., the orthogonal matrix Q. * On exit, if WANTQ is .TRUE., the updated matrix Q. * If WANTQ is .FALSE., Q is not referenced. * * LDQ (input) INTEGER * The leading dimension of the array Q. * LDQ >= 1; and if WANTQ is .TRUE., LDQ >= N. * * J1 (input) INTEGER * The index of the first row of the first block T11. * * N1 (input) INTEGER * The order of the first block T11. N1 = 0, 1 or 2. * * N2 (input) INTEGER * The order of the second block T22. N2 = 0, 1 or 2. * * WORK (workspace) DOUBLE PRECISION array, dimension (N) * * INFO (output) INTEGER * = 0: successful exit * = 1: the transformed matrix T would be too far from Schur * form; the blocks are not swapped and T and Q are * unchanged. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) DOUBLE PRECISION TEN PARAMETER ( TEN = 1.0D+1 ) INTEGER LDD, LDX PARAMETER ( LDD = 4, LDX = 2 ) * .. * .. Local Scalars .. INTEGER IERR, J2, J3, J4, K, ND DOUBLE PRECISION CS, DNORM, EPS, SCALE, SMLNUM, SN, T11, T22, $ T33, TAU, TAU1, TAU2, TEMP, THRESH, WI1, WI2, $ WR1, WR2, XNORM * .. * .. Local Arrays .. DOUBLE PRECISION D( LDD, 4 ), U( 3 ), U1( 3 ), U2( 3 ), $ X( LDX, 2 ) * .. * .. External Functions .. DOUBLE PRECISION DLAMCH, DLANGE EXTERNAL DLAMCH, DLANGE * .. * .. External Subroutines .. EXTERNAL DLACPY, DLANV2, DLARFG, DLARFX, DLARTG, DLASY2, $ DROT * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX * .. * .. Executable Statements .. * INFO = 0 * * Quick return if possible * IF( N.EQ.0 .OR. N1.EQ.0 .OR. N2.EQ.0 ) $ RETURN IF( J1+N1.GT.N ) $ RETURN * J2 = J1 + 1 J3 = J1 + 2 J4 = J1 + 3 * IF( N1.EQ.1 .AND. N2.EQ.1 ) THEN * * Swap two 1-by-1 blocks. * T11 = T( J1, J1 ) T22 = T( J2, J2 ) * * Determine the transformation to perform the interchange. * CALL DLARTG( T( J1, J2 ), T22-T11, CS, SN, TEMP ) * * Apply transformation to the matrix T. * IF( J3.LE.N ) $ CALL DROT( N-J1-1, T( J1, J3 ), LDT, T( J2, J3 ), LDT, CS, $ SN ) CALL DROT( J1-1, T( 1, J1 ), 1, T( 1, J2 ), 1, CS, SN ) * T( J1, J1 ) = T22 T( J2, J2 ) = T11 * IF( WANTQ ) THEN * * Accumulate transformation in the matrix Q. * CALL DROT( N, Q( 1, J1 ), 1, Q( 1, J2 ), 1, CS, SN ) END IF * ELSE * * Swapping involves at least one 2-by-2 block. * * Copy the diagonal block of order N1+N2 to the local array D * and compute its norm. * ND = N1 + N2 CALL DLACPY( 'Full', ND, ND, T( J1, J1 ), LDT, D, LDD ) DNORM = DLANGE( 'Max', ND, ND, D, LDD, WORK ) * * Compute machine-dependent threshold for test for accepting * swap. * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) / EPS THRESH = MAX( TEN*EPS*DNORM, SMLNUM ) * * Solve T11*X - X*T22 = scale*T12 for X. * CALL DLASY2( .FALSE., .FALSE., -1, N1, N2, D, LDD, $ D( N1+1, N1+1 ), LDD, D( 1, N1+1 ), LDD, SCALE, X, $ LDX, XNORM, IERR ) * * Swap the adjacent diagonal blocks. * K = N1 + N1 + N2 - 3 GO TO ( 10, 20, 30 )K * 10 CONTINUE * * N1 = 1, N2 = 2: generate elementary reflector H so that: * * ( scale, X11, X12 ) H = ( 0, 0, * ) * U( 1 ) = SCALE U( 2 ) = X( 1, 1 ) U( 3 ) = X( 1, 2 ) CALL DLARFG( 3, U( 3 ), U, 1, TAU ) U( 3 ) = ONE T11 = T( J1, J1 ) * * Perform swap provisionally on diagonal block in D. * CALL DLARFX( 'L', 3, 3, U, TAU, D, LDD, WORK ) CALL DLARFX( 'R', 3, 3, U, TAU, D, LDD, WORK ) * * Test whether to reject swap. * IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 3, $ 3 )-T11 ) ).GT.THRESH )GO TO 50 * * Accept swap: apply transformation to the entire matrix T. * CALL DLARFX( 'L', 3, N-J1+1, U, TAU, T( J1, J1 ), LDT, WORK ) CALL DLARFX( 'R', J2, 3, U, TAU, T( 1, J1 ), LDT, WORK ) * T( J3, J1 ) = ZERO T( J3, J2 ) = ZERO T( J3, J3 ) = T11 * IF( WANTQ ) THEN * * Accumulate transformation in the matrix Q. * CALL DLARFX( 'R', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK ) END IF GO TO 40 * 20 CONTINUE * * N1 = 2, N2 = 1: generate elementary reflector H so that: * * H ( -X11 ) = ( * ) * ( -X21 ) = ( 0 ) * ( scale ) = ( 0 ) * U( 1 ) = -X( 1, 1 ) U( 2 ) = -X( 2, 1 ) U( 3 ) = SCALE CALL DLARFG( 3, U( 1 ), U( 2 ), 1, TAU ) U( 1 ) = ONE T33 = T( J3, J3 ) * * Perform swap provisionally on diagonal block in D. * CALL DLARFX( 'L', 3, 3, U, TAU, D, LDD, WORK ) CALL DLARFX( 'R', 3, 3, U, TAU, D, LDD, WORK ) * * Test whether to reject swap. * IF( MAX( ABS( D( 2, 1 ) ), ABS( D( 3, 1 ) ), ABS( D( 1, $ 1 )-T33 ) ).GT.THRESH )GO TO 50 * * Accept swap: apply transformation to the entire matrix T. * CALL DLARFX( 'R', J3, 3, U, TAU, T( 1, J1 ), LDT, WORK ) CALL DLARFX( 'L', 3, N-J1, U, TAU, T( J1, J2 ), LDT, WORK ) * T( J1, J1 ) = T33 T( J2, J1 ) = ZERO T( J3, J1 ) = ZERO * IF( WANTQ ) THEN * * Accumulate transformation in the matrix Q. * CALL DLARFX( 'R', N, 3, U, TAU, Q( 1, J1 ), LDQ, WORK ) END IF GO TO 40 * 30 CONTINUE * * N1 = 2, N2 = 2: generate elementary reflectors H(1) and H(2) so * that: * * H(2) H(1) ( -X11 -X12 ) = ( * * ) * ( -X21 -X22 ) ( 0 * ) * ( scale 0 ) ( 0 0 ) * ( 0 scale ) ( 0 0 ) * U1( 1 ) = -X( 1, 1 ) U1( 2 ) = -X( 2, 1 ) U1( 3 ) = SCALE CALL DLARFG( 3, U1( 1 ), U1( 2 ), 1, TAU1 ) U1( 1 ) = ONE * TEMP = -TAU1*( X( 1, 2 )+U1( 2 )*X( 2, 2 ) ) U2( 1 ) = -TEMP*U1( 2 ) - X( 2, 2 ) U2( 2 ) = -TEMP*U1( 3 ) U2( 3 ) = SCALE CALL DLARFG( 3, U2( 1 ), U2( 2 ), 1, TAU2 ) U2( 1 ) = ONE * * Perform swap provisionally on diagonal block in D. * CALL DLARFX( 'L', 3, 4, U1, TAU1, D, LDD, WORK ) CALL DLARFX( 'R', 4, 3, U1, TAU1, D, LDD, WORK ) CALL DLARFX( 'L', 3, 4, U2, TAU2, D( 2, 1 ), LDD, WORK ) CALL DLARFX( 'R', 4, 3, U2, TAU2, D( 1, 2 ), LDD, WORK ) * * Test whether to reject swap. * IF( MAX( ABS( D( 3, 1 ) ), ABS( D( 3, 2 ) ), ABS( D( 4, 1 ) ), $ ABS( D( 4, 2 ) ) ).GT.THRESH )GO TO 50 * * Accept swap: apply transformation to the entire matrix T. * CALL DLARFX( 'L', 3, N-J1+1, U1, TAU1, T( J1, J1 ), LDT, WORK ) CALL DLARFX( 'R', J4, 3, U1, TAU1, T( 1, J1 ), LDT, WORK ) CALL DLARFX( 'L', 3, N-J1+1, U2, TAU2, T( J2, J1 ), LDT, WORK ) CALL DLARFX( 'R', J4, 3, U2, TAU2, T( 1, J2 ), LDT, WORK ) * T( J3, J1 ) = ZERO T( J3, J2 ) = ZERO T( J4, J1 ) = ZERO T( J4, J2 ) = ZERO * IF( WANTQ ) THEN * * Accumulate transformation in the matrix Q. * CALL DLARFX( 'R', N, 3, U1, TAU1, Q( 1, J1 ), LDQ, WORK ) CALL DLARFX( 'R', N, 3, U2, TAU2, Q( 1, J2 ), LDQ, WORK ) END IF * 40 CONTINUE * IF( N2.EQ.2 ) THEN * * Standardize new 2-by-2 block T11 * CALL DLANV2( T( J1, J1 ), T( J1, J2 ), T( J2, J1 ), $ T( J2, J2 ), WR1, WI1, WR2, WI2, CS, SN ) CALL DROT( N-J1-1, T( J1, J1+2 ), LDT, T( J2, J1+2 ), LDT, $ CS, SN ) CALL DROT( J1-1, T( 1, J1 ), 1, T( 1, J2 ), 1, CS, SN ) IF( WANTQ ) $ CALL DROT( N, Q( 1, J1 ), 1, Q( 1, J2 ), 1, CS, SN ) END IF * IF( N1.EQ.2 ) THEN * * Standardize new 2-by-2 block T22 * J3 = J1 + N2 J4 = J3 + 1 CALL DLANV2( T( J3, J3 ), T( J3, J4 ), T( J4, J3 ), $ T( J4, J4 ), WR1, WI1, WR2, WI2, CS, SN ) IF( J3+2.LE.N ) $ CALL DROT( N-J3-1, T( J3, J3+2 ), LDT, T( J4, J3+2 ), $ LDT, CS, SN ) CALL DROT( J3-1, T( 1, J3 ), 1, T( 1, J4 ), 1, CS, SN ) IF( WANTQ ) $ CALL DROT( N, Q( 1, J3 ), 1, Q( 1, J4 ), 1, CS, SN ) END IF * END IF RETURN * * Exit with INFO = 1 if swap was rejected. * 50 CONTINUE INFO = 1 RETURN * * End of DLAEXC * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, N LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), WI( * ), WR( * ), Z( LDZ, * ) * .. * * Purpose * ======= * * DLAHQR is an auxiliary routine called by DHSEQR to update the * eigenvalues and Schur decomposition already computed by DHSEQR, by * dealing with the Hessenberg submatrix in rows and columns ILO to * IHI. * * Arguments * ========= * * WANTT (input) LOGICAL * = .TRUE. : the full Schur form T is required; * = .FALSE.: only eigenvalues are required. * * WANTZ (input) LOGICAL * = .TRUE. : the matrix of Schur vectors Z is required; * = .FALSE.: Schur vectors are not required. * * N (input) INTEGER * The order of the matrix H. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that H is already upper quasi-triangular in * rows and columns IHI+1:N, and that H(ILO,ILO-1) = 0 (unless * ILO = 1). DLAHQR works primarily with the Hessenberg * submatrix in rows and columns ILO to IHI, but applies * transformations to all of H if WANTT is .TRUE.. * 1 <= ILO <= max(1,IHI); IHI <= N. * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On entry, the upper Hessenberg matrix H. * On exit, if INFO is zero and if WANTT is .TRUE., H is upper * quasi-triangular in rows and columns ILO:IHI, with any * 2-by-2 diagonal blocks in standard form. If INFO is zero * and WANTT is .FALSE., the contents of H are unspecified on * exit. The output state of H if INFO is nonzero is given * below under the description of INFO. * * LDH (input) INTEGER * The leading dimension of the array H. LDH >= max(1,N). * * WR (output) DOUBLE PRECISION array, dimension (N) * WI (output) DOUBLE PRECISION array, dimension (N) * The real and imaginary parts, respectively, of the computed * eigenvalues ILO to IHI are stored in the corresponding * elements of WR and WI. If two eigenvalues are computed as a * complex conjugate pair, they are stored in consecutive * elements of WR and WI, say the i-th and (i+1)th, with * WI(i) > 0 and WI(i+1) < 0. If WANTT is .TRUE., the * eigenvalues are stored in the same order as on the diagonal * of the Schur form returned in H, with WR(i) = H(i,i), and, if * H(i:i+1,i:i+1) is a 2-by-2 diagonal block, * WI(i) = sqrt(H(i+1,i)*H(i,i+1)) and WI(i+1) = -WI(i). * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. * 1 <= ILOZ <= ILO; IHI <= IHIZ <= N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,N) * If WANTZ is .TRUE., on entry Z must contain the current * matrix Z of transformations accumulated by DHSEQR, and on * exit Z has been updated; transformations are applied only to * the submatrix Z(ILOZ:IHIZ,ILO:IHI). * If WANTZ is .FALSE., Z is not referenced. * * LDZ (input) INTEGER * The leading dimension of the array Z. LDZ >= max(1,N). * * INFO (output) INTEGER * = 0: successful exit * .GT. 0: If INFO = i, DLAHQR failed to compute all the * eigenvalues ILO to IHI in a total of 30 iterations * per eigenvalue; elements i+1:ihi of WR and WI * contain those eigenvalues which have been * successfully computed. * * If INFO .GT. 0 and WANTT is .FALSE., then on exit, * the remaining unconverged eigenvalues are the * eigenvalues of the upper Hessenberg matrix rows * and columns ILO thorugh INFO of the final, output * value of H. * * If INFO .GT. 0 and WANTT is .TRUE., then on exit * (*) (initial value of H)*U = U*(final value of H) * where U is an orthognal matrix. The final * value of H is upper Hessenberg and triangular in * rows and columns INFO+1 through IHI. * * If INFO .GT. 0 and WANTZ is .TRUE., then on exit * (final value of Z) = (initial value of Z)*U * where U is the orthogonal matrix in (*) * (regardless of the value of WANTT.) * * Further Details * =============== * * 02-96 Based on modifications by * David Day, Sandia National Laboratory, USA * * 12-04 Further modifications by * Ralph Byers, University of Kansas, USA * This is a modified version of DLAHQR from LAPACK version 3.0. * It is (1) more robust against overflow and underflow and * (2) adopts the more conservative Ahues & Tisseur stopping * criterion (LAWN 122, 1997). * * ========================================================= * * .. Parameters .. INTEGER ITMAX PARAMETER ( ITMAX = 30 ) DOUBLE PRECISION ZERO, ONE, TWO PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0, TWO = 2.0d0 ) DOUBLE PRECISION DAT1, DAT2 PARAMETER ( DAT1 = 3.0d0 / 4.0d0, DAT2 = -0.4375d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, AB, BA, BB, CS, DET, H11, H12, H21, H21S, $ H22, RT1I, RT1R, RT2I, RT2R, RTDISC, S, SAFMAX, $ SAFMIN, SMLNUM, SN, SUM, T1, T2, T3, TR, TST, $ ULP, V2, V3 INTEGER I, I1, I2, ITS, J, K, L, M, NH, NR, NZ * .. * .. Local Arrays .. DOUBLE PRECISION V( 3 ) * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. External Subroutines .. EXTERNAL DCOPY, DLABAD, DLANV2, DLARFG, DROT * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, MAX, MIN, SQRT * .. * .. Executable Statements .. * INFO = 0 * * Quick return if possible * IF( N.EQ.0 ) $ RETURN IF( ILO.EQ.IHI ) THEN WR( ILO ) = H( ILO, ILO ) WI( ILO ) = ZERO RETURN END IF * * ==== clear out the trash ==== DO 10 J = ILO, IHI - 3 H( J+2, J ) = ZERO H( J+3, J ) = ZERO 10 CONTINUE IF( ILO.LE.IHI-2 ) $ H( IHI, IHI-2 ) = ZERO * NH = IHI - ILO + 1 NZ = IHIZ - ILOZ + 1 * * Set machine-dependent constants for the stopping criterion. * SAFMIN = DLAMCH( 'SAFE MINIMUM' ) SAFMAX = ONE / SAFMIN CALL DLABAD( SAFMIN, SAFMAX ) ULP = DLAMCH( 'PRECISION' ) SMLNUM = SAFMIN*( DBLE( NH ) / ULP ) * * I1 and I2 are the indices of the first row and last column of H * to which transformations must be applied. If eigenvalues only are * being computed, I1 and I2 are set inside the main loop. * IF( WANTT ) THEN I1 = 1 I2 = N END IF * * The main loop begins here. I is the loop index and decreases from * IHI to ILO in steps of 1 or 2. Each iteration of the loop works * with the active submatrix in rows and columns L to I. * Eigenvalues I+1 to IHI have already converged. Either L = ILO or * H(L,L-1) is negligible so that the matrix splits. * I = IHI 20 CONTINUE L = ILO IF( I.LT.ILO ) $ GO TO 160 * * Perform QR iterations on rows and columns ILO to I until a * submatrix of order 1 or 2 splits off at the bottom because a * subdiagonal element has become negligible. * DO 140 ITS = 0, ITMAX * * Look for a single small subdiagonal element. * DO 30 K = I, L + 1, -1 IF( ABS( H( K, K-1 ) ).LE.SMLNUM ) $ GO TO 40 TST = ABS( H( K-1, K-1 ) ) + ABS( H( K, K ) ) IF( TST.EQ.ZERO ) THEN IF( K-2.GE.ILO ) $ TST = TST + ABS( H( K-1, K-2 ) ) IF( K+1.LE.IHI ) $ TST = TST + ABS( H( K+1, K ) ) END IF * ==== The following is a conservative small subdiagonal * . deflation criterion due to Ahues & Tisseur (LAWN 122, * . 1997). It has better mathematical foundation and * . improves accuracy in some cases. ==== IF( ABS( H( K, K-1 ) ).LE.ULP*TST ) THEN AB = MAX( ABS( H( K, K-1 ) ), ABS( H( K-1, K ) ) ) BA = MIN( ABS( H( K, K-1 ) ), ABS( H( K-1, K ) ) ) AA = MAX( ABS( H( K, K ) ), $ ABS( H( K-1, K-1 )-H( K, K ) ) ) BB = MIN( ABS( H( K, K ) ), $ ABS( H( K-1, K-1 )-H( K, K ) ) ) S = AA + AB IF( BA*( AB / S ).LE.MAX( SMLNUM, $ ULP*( BB*( AA / S ) ) ) )GO TO 40 END IF 30 CONTINUE 40 CONTINUE L = K IF( L.GT.ILO ) THEN * * H(L,L-1) is negligible * H( L, L-1 ) = ZERO END IF * * Exit from loop if a submatrix of order 1 or 2 has split off. * IF( L.GE.I-1 ) $ GO TO 150 * * Now the active submatrix is in rows and columns L to I. If * eigenvalues only are being computed, only the active submatrix * need be transformed. * IF( .NOT.WANTT ) THEN I1 = L I2 = I END IF * IF( ITS.EQ.10 ) THEN * * Exceptional shift. * S = ABS( H( L+1, L ) ) + ABS( H( L+2, L+1 ) ) H11 = DAT1*S + H( L, L ) H12 = DAT2*S H21 = S H22 = H11 ELSE IF( ITS.EQ.20 ) THEN * * Exceptional shift. * S = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) H11 = DAT1*S + H( I, I ) H12 = DAT2*S H21 = S H22 = H11 ELSE * * Prepare to use Francis' double shift * (i.e. 2nd degree generalized Rayleigh quotient) * H11 = H( I-1, I-1 ) H21 = H( I, I-1 ) H12 = H( I-1, I ) H22 = H( I, I ) END IF S = ABS( H11 ) + ABS( H12 ) + ABS( H21 ) + ABS( H22 ) IF( S.EQ.ZERO ) THEN RT1R = ZERO RT1I = ZERO RT2R = ZERO RT2I = ZERO ELSE H11 = H11 / S H21 = H21 / S H12 = H12 / S H22 = H22 / S TR = ( H11+H22 ) / TWO DET = ( H11-TR )*( H22-TR ) - H12*H21 RTDISC = SQRT( ABS( DET ) ) IF( DET.GE.ZERO ) THEN * * ==== complex conjugate shifts ==== * RT1R = TR*S RT2R = RT1R RT1I = RTDISC*S RT2I = -RT1I ELSE * * ==== real shifts (use only one of them) ==== * RT1R = TR + RTDISC RT2R = TR - RTDISC IF( ABS( RT1R-H22 ).LE.ABS( RT2R-H22 ) ) THEN RT1R = RT1R*S RT2R = RT1R ELSE RT2R = RT2R*S RT1R = RT2R END IF RT1I = ZERO RT2I = ZERO END IF END IF * * Look for two consecutive small subdiagonal elements. * DO 50 M = I - 2, L, -1 * Determine the effect of starting the double-shift QR * iteration at row M, and see if this would make H(M,M-1) * negligible. (The following uses scaling to avoid * overflows and most underflows.) * H21S = H( M+1, M ) S = ABS( H( M, M )-RT2R ) + ABS( RT2I ) + ABS( H21S ) H21S = H( M+1, M ) / S V( 1 ) = H21S*H( M, M+1 ) + ( H( M, M )-RT1R )* $ ( ( H( M, M )-RT2R ) / S ) - RT1I*( RT2I / S ) V( 2 ) = H21S*( H( M, M )+H( M+1, M+1 )-RT1R-RT2R ) V( 3 ) = H21S*H( M+2, M+1 ) S = ABS( V( 1 ) ) + ABS( V( 2 ) ) + ABS( V( 3 ) ) V( 1 ) = V( 1 ) / S V( 2 ) = V( 2 ) / S V( 3 ) = V( 3 ) / S IF( M.EQ.L ) $ GO TO 60 IF( ABS( H( M, M-1 ) )*( ABS( V( 2 ) )+ABS( V( 3 ) ) ).LE. $ ULP*ABS( V( 1 ) )*( ABS( H( M-1, M-1 ) )+ABS( H( M, $ M ) )+ABS( H( M+1, M+1 ) ) ) )GO TO 60 50 CONTINUE 60 CONTINUE * * Double-shift QR step * DO 130 K = M, I - 1 * * The first iteration of this loop determines a reflection G * from the vector V and applies it from left and right to H, * thus creating a nonzero bulge below the subdiagonal. * * Each subsequent iteration determines a reflection G to * restore the Hessenberg form in the (K-1)th column, and thus * chases the bulge one step toward the bottom of the active * submatrix. NR is the order of G. * NR = MIN( 3, I-K+1 ) IF( K.GT.M ) $ CALL DCOPY( NR, H( K, K-1 ), 1, V, 1 ) CALL DLARFG( NR, V( 1 ), V( 2 ), 1, T1 ) IF( K.GT.M ) THEN H( K, K-1 ) = V( 1 ) H( K+1, K-1 ) = ZERO IF( K.LT.I-1 ) $ H( K+2, K-1 ) = ZERO ELSE IF( M.GT.L ) THEN * ==== Use the following instead of * . H( K, K-1 ) = -H( K, K-1 ) to * . avoid a bug when v(2) and v(3) * . underflow. ==== H( K, K-1 ) = H( K, K-1 )*( ONE-T1 ) END IF V2 = V( 2 ) T2 = T1*V2 IF( NR.EQ.3 ) THEN V3 = V( 3 ) T3 = T1*V3 * * Apply G from the left to transform the rows of the matrix * in columns K to I2. * DO 70 J = K, I2 SUM = H( K, J ) + V2*H( K+1, J ) + V3*H( K+2, J ) H( K, J ) = H( K, J ) - SUM*T1 H( K+1, J ) = H( K+1, J ) - SUM*T2 H( K+2, J ) = H( K+2, J ) - SUM*T3 70 CONTINUE * * Apply G from the right to transform the columns of the * matrix in rows I1 to min(K+3,I). * DO 80 J = I1, MIN( K+3, I ) SUM = H( J, K ) + V2*H( J, K+1 ) + V3*H( J, K+2 ) H( J, K ) = H( J, K ) - SUM*T1 H( J, K+1 ) = H( J, K+1 ) - SUM*T2 H( J, K+2 ) = H( J, K+2 ) - SUM*T3 80 CONTINUE * IF( WANTZ ) THEN * * Accumulate transformations in the matrix Z * DO 90 J = ILOZ, IHIZ SUM = Z( J, K ) + V2*Z( J, K+1 ) + V3*Z( J, K+2 ) Z( J, K ) = Z( J, K ) - SUM*T1 Z( J, K+1 ) = Z( J, K+1 ) - SUM*T2 Z( J, K+2 ) = Z( J, K+2 ) - SUM*T3 90 CONTINUE END IF ELSE IF( NR.EQ.2 ) THEN * * Apply G from the left to transform the rows of the matrix * in columns K to I2. * DO 100 J = K, I2 SUM = H( K, J ) + V2*H( K+1, J ) H( K, J ) = H( K, J ) - SUM*T1 H( K+1, J ) = H( K+1, J ) - SUM*T2 100 CONTINUE * * Apply G from the right to transform the columns of the * matrix in rows I1 to min(K+3,I). * DO 110 J = I1, I SUM = H( J, K ) + V2*H( J, K+1 ) H( J, K ) = H( J, K ) - SUM*T1 H( J, K+1 ) = H( J, K+1 ) - SUM*T2 110 CONTINUE * IF( WANTZ ) THEN * * Accumulate transformations in the matrix Z * DO 120 J = ILOZ, IHIZ SUM = Z( J, K ) + V2*Z( J, K+1 ) Z( J, K ) = Z( J, K ) - SUM*T1 Z( J, K+1 ) = Z( J, K+1 ) - SUM*T2 120 CONTINUE END IF END IF 130 CONTINUE * 140 CONTINUE * * Failure to converge in remaining number of iterations * INFO = I RETURN * 150 CONTINUE * IF( L.EQ.I ) THEN * * H(I,I-1) is negligible: one eigenvalue has converged. * WR( I ) = H( I, I ) WI( I ) = ZERO ELSE IF( L.EQ.I-1 ) THEN * * H(I-1,I-2) is negligible: a pair of eigenvalues have converged. * * Transform the 2-by-2 submatrix to standard Schur form, * and compute and store the eigenvalues. * CALL DLANV2( H( I-1, I-1 ), H( I-1, I ), H( I, I-1 ), $ H( I, I ), WR( I-1 ), WI( I-1 ), WR( I ), WI( I ), $ CS, SN ) * IF( WANTT ) THEN * * Apply the transformation to the rest of H. * IF( I2.GT.I ) $ CALL DROT( I2-I, H( I-1, I+1 ), LDH, H( I, I+1 ), LDH, $ CS, SN ) CALL DROT( I-I1-1, H( I1, I-1 ), 1, H( I1, I ), 1, CS, SN ) END IF IF( WANTZ ) THEN * * Apply the transformation to Z. * CALL DROT( NZ, Z( ILOZ, I-1 ), 1, Z( ILOZ, I ), 1, CS, SN ) END IF END IF * * return to start of the main loop with new value of I. * I = L - 1 GO TO 20 * 160 CONTINUE RETURN * * End of DLAHQR * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAHR2( N, K, NB, A, LDA, TAU, T, LDT, Y, LDY ) * * -- LAPACK auxiliary routine (version 3.2.1) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * -- April 2009 -- * * .. Scalar Arguments .. INTEGER K, LDA, LDT, LDY, N, NB * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), T( LDT, NB ), TAU( NB ), $ Y( LDY, NB ) * .. * * Purpose * ======= * * DLAHR2 reduces the first NB columns of A real general n-BY-(n-k+1) * matrix A so that elements below the k-th subdiagonal are zero. The * reduction is performed by an orthogonal similarity transformation * Q' * A * Q. The routine returns the matrices V and T which determine * Q as a block reflector I - V*T*V', and also the matrix Y = A * V * T. * * This is an auxiliary routine called by DGEHRD. * * Arguments * ========= * * N (input) INTEGER * The order of the matrix A. * * K (input) INTEGER * The offset for the reduction. Elements below the k-th * subdiagonal in the first NB columns are reduced to zero. * K < N. * * NB (input) INTEGER * The number of columns to be reduced. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N-K+1) * On entry, the n-by-(n-k+1) general matrix A. * On exit, the elements on and above the k-th subdiagonal in * the first NB columns are overwritten with the corresponding * elements of the reduced matrix; the elements below the k-th * subdiagonal, with the array TAU, represent the matrix Q as a * product of elementary reflectors. The other columns of A are * unchanged. See Further Details. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * TAU (output) DOUBLE PRECISION array, dimension (NB) * The scalar factors of the elementary reflectors. See Further * Details. * * T (output) DOUBLE PRECISION array, dimension (LDT,NB) * The upper triangular matrix T. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= NB. * * Y (output) DOUBLE PRECISION array, dimension (LDY,NB) * The n-by-nb matrix Y. * * LDY (input) INTEGER * The leading dimension of the array Y. LDY >= N. * * Further Details * =============== * * The matrix Q is represented as a product of nb elementary reflectors * * Q = H(1) H(2) . . . H(nb). * * Each H(i) has the form * * H(i) = I - tau * v * v' * * where tau is a real scalar, and v is a real vector with * v(1:i+k-1) = 0, v(i+k) = 1; v(i+k+1:n) is stored on exit in * A(i+k+1:n,i), and tau in TAU(i). * * The elements of the vectors v together form the (n-k+1)-by-nb matrix * V which is needed, with T and Y, to apply the transformation to the * unreduced part of the matrix, using an update of the form: * A := (I - V*T*V') * (A - Y*V'). * * The contents of A on exit are illustrated by the following example * with n = 7, k = 3 and nb = 2: * * ( a a a a a ) * ( a a a a a ) * ( a a a a a ) * ( h h a a a ) * ( v1 h a a a ) * ( v1 v2 a a a ) * ( v1 v2 a a a ) * * where a denotes an element of the original matrix A, h denotes a * modified element of the upper Hessenberg matrix H, and vi denotes an * element of the vector defining H(i). * * This subroutine is a slight modification of LAPACK-3.0's DLAHRD * incorporating improvements proposed by Quintana-Orti and Van de * Gejin. Note that the entries of A(1:K,2:NB) differ from those * returned by the original LAPACK-3.0's DLAHRD routine. (This * subroutine is not backward compatible with LAPACK-3.0's DLAHRD.) * * References * ========== * * Gregorio Quintana-Orti and Robert van de Geijn, "Improving the * performance of reduction to Hessenberg form," ACM Transactions on * Mathematical Software, 32(2):180-194, June 2006. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, $ ONE = 1.0D+0 ) * .. * .. Local Scalars .. INTEGER I DOUBLE PRECISION EI * .. * .. External Subroutines .. EXTERNAL DAXPY, DCOPY, DGEMM, DGEMV, DLACPY, $ DLARFG, DSCAL, DTRMM, DTRMV * .. * .. Intrinsic Functions .. INTRINSIC MIN * .. * .. Executable Statements .. * * Quick return if possible * IF( N.LE.1 ) $ RETURN * DO 10 I = 1, NB IF( I.GT.1 ) THEN * * Update A(K+1:N,I) * * Update I-th column of A - Y * V' * CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, Y(K+1,1), LDY, $ A( K+I-1, 1 ), LDA, ONE, A( K+1, I ), 1 ) * * Apply I - V * T' * V' to this column (call it b) from the * left, using the last column of T as workspace * * Let V = ( V1 ) and b = ( b1 ) (first I-1 rows) * ( V2 ) ( b2 ) * * where V1 is unit lower triangular * * w := V1' * b1 * CALL DCOPY( I-1, A( K+1, I ), 1, T( 1, NB ), 1 ) CALL DTRMV( 'Lower', 'Transpose', 'UNIT', $ I-1, A( K+1, 1 ), $ LDA, T( 1, NB ), 1 ) * * w := w + V2'*b2 * CALL DGEMV( 'Transpose', N-K-I+1, I-1, $ ONE, A( K+I, 1 ), $ LDA, A( K+I, I ), 1, ONE, T( 1, NB ), 1 ) * * w := T'*w * CALL DTRMV( 'Upper', 'Transpose', 'NON-UNIT', $ I-1, T, LDT, $ T( 1, NB ), 1 ) * * b2 := b2 - V2*w * CALL DGEMV( 'NO TRANSPOSE', N-K-I+1, I-1, -ONE, $ A( K+I, 1 ), $ LDA, T( 1, NB ), 1, ONE, A( K+I, I ), 1 ) * * b1 := b1 - V1*w * CALL DTRMV( 'Lower', 'NO TRANSPOSE', $ 'UNIT', I-1, $ A( K+1, 1 ), LDA, T( 1, NB ), 1 ) CALL DAXPY( I-1, -ONE, T( 1, NB ), 1, A( K+1, I ), 1 ) * A( K+I-1, I-1 ) = EI END IF * * Generate the elementary reflector H(I) to annihilate * A(K+I+1:N,I) * CALL DLARFG( N-K-I+1, A( K+I, I ), A( MIN( K+I+1, N ), I ), 1, $ TAU( I ) ) EI = A( K+I, I ) A( K+I, I ) = ONE * * Compute Y(K+1:N,I) * CALL DGEMV( 'NO TRANSPOSE', N-K, N-K-I+1, $ ONE, A( K+1, I+1 ), $ LDA, A( K+I, I ), 1, ZERO, Y( K+1, I ), 1 ) CALL DGEMV( 'Transpose', N-K-I+1, I-1, $ ONE, A( K+I, 1 ), LDA, $ A( K+I, I ), 1, ZERO, T( 1, I ), 1 ) CALL DGEMV( 'NO TRANSPOSE', N-K, I-1, -ONE, $ Y( K+1, 1 ), LDY, $ T( 1, I ), 1, ONE, Y( K+1, I ), 1 ) CALL DSCAL( N-K, TAU( I ), Y( K+1, I ), 1 ) * * Compute T(1:I,I) * CALL DSCAL( I-1, -TAU( I ), T( 1, I ), 1 ) CALL DTRMV( 'Upper', 'No Transpose', 'NON-UNIT', $ I-1, T, LDT, $ T( 1, I ), 1 ) T( I, I ) = TAU( I ) * 10 CONTINUE A( K+NB, NB ) = EI * * Compute Y(1:K,1:NB) * CALL DLACPY( 'ALL', K, NB, A( 1, 2 ), LDA, Y, LDY ) CALL DTRMM( 'RIGHT', 'Lower', 'NO TRANSPOSE', $ 'UNIT', K, NB, $ ONE, A( K+1, 1 ), LDA, Y, LDY ) IF( N.GT.K+NB ) $ CALL DGEMM( 'NO TRANSPOSE', 'NO TRANSPOSE', K, $ NB, N-K-NB, ONE, $ A( 1, 2+NB ), LDA, A( K+1+NB, 1 ), LDA, ONE, Y, $ LDY ) CALL DTRMM( 'RIGHT', 'Upper', 'NO TRANSPOSE', $ 'NON-UNIT', K, NB, $ ONE, T, LDT, Y, LDY ) * RETURN * * End of DLAHR2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLALN2( LTRANS, NA, NW, SMIN, CA, A, LDA, D1, D2, B, $ LDB, WR, WI, X, LDX, SCALE, XNORM, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. LOGICAL LTRANS INTEGER INFO, LDA, LDB, LDX, NA, NW DOUBLE PRECISION CA, D1, D2, SCALE, SMIN, WI, WR, XNORM * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), X( LDX, * ) * .. * * Purpose * ======= * * DLALN2 solves a system of the form (ca A - w D ) X = s B * or (ca A' - w D) X = s B with possible scaling ("s") and * perturbation of A. (A' means A-transpose.) * * A is an NA x NA real matrix, ca is a real scalar, D is an NA x NA * real diagonal matrix, w is a real or complex value, and X and B are * NA x 1 matrices -- real if w is real, complex if w is complex. NA * may be 1 or 2. * * If w is complex, X and B are represented as NA x 2 matrices, * the first column of each being the real part and the second * being the imaginary part. * * "s" is a scaling factor (.LE. 1), computed by DLALN2, which is * so chosen that X can be computed without overflow. X is further * scaled if necessary to assure that norm(ca A - w D)*norm(X) is less * than overflow. * * If both singular values of (ca A - w D) are less than SMIN, * SMIN*identity will be used instead of (ca A - w D). If only one * singular value is less than SMIN, one element of (ca A - w D) will be * perturbed enough to make the smallest singular value roughly SMIN. * If both singular values are at least SMIN, (ca A - w D) will not be * perturbed. In any case, the perturbation will be at most some small * multiple of max( SMIN, ulp*norm(ca A - w D) ). The singular values * are computed by infinity-norm approximations, and thus will only be * correct to a factor of 2 or so. * * Note: all input quantities are assumed to be smaller than overflow * by a reasonable factor. (See BIGNUM.) * * Arguments * ========== * * LTRANS (input) LOGICAL * =.TRUE.: A-transpose will be used. * =.FALSE.: A will be used (not transposed.) * * NA (input) INTEGER * The size of the matrix A. It may (only) be 1 or 2. * * NW (input) INTEGER * 1 if "w" is real, 2 if "w" is complex. It may only be 1 * or 2. * * SMIN (input) DOUBLE PRECISION * The desired lower bound on the singular values of A. This * should be a safe distance away from underflow or overflow, * say, between (underflow/machine precision) and (machine * precision * overflow ). (See BIGNUM and ULP.) * * CA (input) DOUBLE PRECISION * The coefficient c, which A is multiplied by. * * A (input) DOUBLE PRECISION array, dimension (LDA,NA) * The NA x NA matrix A. * * LDA (input) INTEGER * The leading dimension of A. It must be at least NA. * * D1 (input) DOUBLE PRECISION * The 1,1 element in the diagonal matrix D. * * D2 (input) DOUBLE PRECISION * The 2,2 element in the diagonal matrix D. Not used if NW=1. * * B (input) DOUBLE PRECISION array, dimension (LDB,NW) * The NA x NW matrix B (right-hand side). If NW=2 ("w" is * complex), column 1 contains the real part of B and column 2 * contains the imaginary part. * * LDB (input) INTEGER * The leading dimension of B. It must be at least NA. * * WR (input) DOUBLE PRECISION * The real part of the scalar "w". * * WI (input) DOUBLE PRECISION * The imaginary part of the scalar "w". Not used if NW=1. * * X (output) DOUBLE PRECISION array, dimension (LDX,NW) * The NA x NW matrix X (unknowns), as computed by DLALN2. * If NW=2 ("w" is complex), on exit, column 1 will contain * the real part of X and column 2 will contain the imaginary * part. * * LDX (input) INTEGER * The leading dimension of X. It must be at least NA. * * SCALE (output) DOUBLE PRECISION * The scale factor that B must be multiplied by to insure * that overflow does not occur when computing X. Thus, * (ca A - w D) X will be SCALE*B, not B (ignoring * perturbations of A.) It will be at most 1. * * XNORM (output) DOUBLE PRECISION * The infinity-norm of X, when X is regarded as an NA x NW * real matrix. * * INFO (output) INTEGER * An error flag. It will be set to zero if no error occurs, * a negative number if an argument is in error, or a positive * number if ca A - w D had to be perturbed. * The possible values are: * = 0: No error occurred, and (ca A - w D) did not have to be * perturbed. * = 1: (ca A - w D) had to be perturbed to make its smallest * (or only) singular value greater than SMIN. * NOTE: In the interests of speed, this routine does not * check the inputs for errors. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) DOUBLE PRECISION TWO PARAMETER ( TWO = 2.0D0 ) * .. * .. Local Scalars .. INTEGER ICMAX, J DOUBLE PRECISION BBND, BI1, BI2, BIGNUM, BNORM, BR1, BR2, CI21, $ CI22, CMAX, CNORM, CR21, CR22, CSI, CSR, LI21, $ LR21, SMINI, SMLNUM, TEMP, U22ABS, UI11, UI11R, $ UI12, UI12S, UI22, UR11, UR11R, UR12, UR12S, $ UR22, XI1, XI2, XR1, XR2 * .. * .. Local Arrays .. LOGICAL RSWAP( 4 ), ZSWAP( 4 ) INTEGER IPIVOT( 4, 4 ) DOUBLE PRECISION CI( 2, 2 ), CIV( 4 ), CR( 2, 2 ), CRV( 4 ) * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. External Subroutines .. EXTERNAL DLADIV * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX * .. * .. Equivalences .. EQUIVALENCE ( CI( 1, 1 ), CIV( 1 ) ), $ ( CR( 1, 1 ), CRV( 1 ) ) * .. * .. Data statements .. DATA ZSWAP / .FALSE., .FALSE., .TRUE., .TRUE. / DATA RSWAP / .FALSE., .TRUE., .FALSE., .TRUE. / DATA IPIVOT / 1, 2, 3, 4, 2, 1, 4, 3, 3, 4, 1, 2, 4, $ 3, 2, 1 / * .. * .. Executable Statements .. * * Compute BIGNUM * SMLNUM = TWO*DLAMCH( 'Safe minimum' ) BIGNUM = ONE / SMLNUM SMINI = MAX( SMIN, SMLNUM ) * * Don't check for input errors * INFO = 0 * * Standard Initializations * SCALE = ONE * IF( NA.EQ.1 ) THEN * * 1 x 1 (i.e., scalar) system C X = B * IF( NW.EQ.1 ) THEN * * Real 1x1 system. * * C = ca A - w D * CSR = CA*A( 1, 1 ) - WR*D1 CNORM = ABS( CSR ) * * If | C | < SMINI, use C = SMINI * IF( CNORM.LT.SMINI ) THEN CSR = SMINI CNORM = SMINI INFO = 1 END IF * * Check scaling for X = B / C * BNORM = ABS( B( 1, 1 ) ) IF( CNORM.LT.ONE .AND. BNORM.GT.ONE ) THEN IF( BNORM.GT.BIGNUM*CNORM ) $ SCALE = ONE / BNORM END IF * * Compute X * X( 1, 1 ) = ( B( 1, 1 )*SCALE ) / CSR XNORM = ABS( X( 1, 1 ) ) ELSE * * Complex 1x1 system (w is complex) * * C = ca A - w D * CSR = CA*A( 1, 1 ) - WR*D1 CSI = -WI*D1 CNORM = ABS( CSR ) + ABS( CSI ) * * If | C | < SMINI, use C = SMINI * IF( CNORM.LT.SMINI ) THEN CSR = SMINI CSI = ZERO CNORM = SMINI INFO = 1 END IF * * Check scaling for X = B / C * BNORM = ABS( B( 1, 1 ) ) + ABS( B( 1, 2 ) ) IF( CNORM.LT.ONE .AND. BNORM.GT.ONE ) THEN IF( BNORM.GT.BIGNUM*CNORM ) $ SCALE = ONE / BNORM END IF * * Compute X * CALL DLADIV( SCALE*B( 1, 1 ), SCALE*B( 1, 2 ), CSR, CSI, $ X( 1, 1 ), X( 1, 2 ) ) XNORM = ABS( X( 1, 1 ) ) + ABS( X( 1, 2 ) ) END IF * ELSE * * 2x2 System * * Compute the real part of C = ca A - w D (or ca A' - w D ) * CR( 1, 1 ) = CA*A( 1, 1 ) - WR*D1 CR( 2, 2 ) = CA*A( 2, 2 ) - WR*D2 IF( LTRANS ) THEN CR( 1, 2 ) = CA*A( 2, 1 ) CR( 2, 1 ) = CA*A( 1, 2 ) ELSE CR( 2, 1 ) = CA*A( 2, 1 ) CR( 1, 2 ) = CA*A( 1, 2 ) END IF * IF( NW.EQ.1 ) THEN * * Real 2x2 system (w is real) * * Find the largest element in C * CMAX = ZERO ICMAX = 0 * DO 10 J = 1, 4 IF( ABS( CRV( J ) ).GT.CMAX ) THEN CMAX = ABS( CRV( J ) ) ICMAX = J END IF 10 CONTINUE * * If norm(C) < SMINI, use SMINI*identity. * IF( CMAX.LT.SMINI ) THEN BNORM = MAX( ABS( B( 1, 1 ) ), ABS( B( 2, 1 ) ) ) IF( SMINI.LT.ONE .AND. BNORM.GT.ONE ) THEN IF( BNORM.GT.BIGNUM*SMINI ) $ SCALE = ONE / BNORM END IF TEMP = SCALE / SMINI X( 1, 1 ) = TEMP*B( 1, 1 ) X( 2, 1 ) = TEMP*B( 2, 1 ) XNORM = TEMP*BNORM INFO = 1 RETURN END IF * * Gaussian elimination with complete pivoting. * UR11 = CRV( ICMAX ) CR21 = CRV( IPIVOT( 2, ICMAX ) ) UR12 = CRV( IPIVOT( 3, ICMAX ) ) CR22 = CRV( IPIVOT( 4, ICMAX ) ) UR11R = ONE / UR11 LR21 = UR11R*CR21 UR22 = CR22 - UR12*LR21 * * If smaller pivot < SMINI, use SMINI * IF( ABS( UR22 ).LT.SMINI ) THEN UR22 = SMINI INFO = 1 END IF IF( RSWAP( ICMAX ) ) THEN BR1 = B( 2, 1 ) BR2 = B( 1, 1 ) ELSE BR1 = B( 1, 1 ) BR2 = B( 2, 1 ) END IF BR2 = BR2 - LR21*BR1 BBND = MAX( ABS( BR1*( UR22*UR11R ) ), ABS( BR2 ) ) IF( BBND.GT.ONE .AND. ABS( UR22 ).LT.ONE ) THEN IF( BBND.GE.BIGNUM*ABS( UR22 ) ) $ SCALE = ONE / BBND END IF * XR2 = ( BR2*SCALE ) / UR22 XR1 = ( SCALE*BR1 )*UR11R - XR2*( UR11R*UR12 ) IF( ZSWAP( ICMAX ) ) THEN X( 1, 1 ) = XR2 X( 2, 1 ) = XR1 ELSE X( 1, 1 ) = XR1 X( 2, 1 ) = XR2 END IF XNORM = MAX( ABS( XR1 ), ABS( XR2 ) ) * * Further scaling if norm(A) norm(X) > overflow * IF( XNORM.GT.ONE .AND. CMAX.GT.ONE ) THEN IF( XNORM.GT.BIGNUM / CMAX ) THEN TEMP = CMAX / BIGNUM X( 1, 1 ) = TEMP*X( 1, 1 ) X( 2, 1 ) = TEMP*X( 2, 1 ) XNORM = TEMP*XNORM SCALE = TEMP*SCALE END IF END IF ELSE * * Complex 2x2 system (w is complex) * * Find the largest element in C * CI( 1, 1 ) = -WI*D1 CI( 2, 1 ) = ZERO CI( 1, 2 ) = ZERO CI( 2, 2 ) = -WI*D2 CMAX = ZERO ICMAX = 0 * DO 20 J = 1, 4 IF( ABS( CRV( J ) )+ABS( CIV( J ) ).GT.CMAX ) THEN CMAX = ABS( CRV( J ) ) + ABS( CIV( J ) ) ICMAX = J END IF 20 CONTINUE * * If norm(C) < SMINI, use SMINI*identity. * IF( CMAX.LT.SMINI ) THEN BNORM = MAX( ABS( B( 1, 1 ) )+ABS( B( 1, 2 ) ), $ ABS( B( 2, 1 ) )+ABS( B( 2, 2 ) ) ) IF( SMINI.LT.ONE .AND. BNORM.GT.ONE ) THEN IF( BNORM.GT.BIGNUM*SMINI ) $ SCALE = ONE / BNORM END IF TEMP = SCALE / SMINI X( 1, 1 ) = TEMP*B( 1, 1 ) X( 2, 1 ) = TEMP*B( 2, 1 ) X( 1, 2 ) = TEMP*B( 1, 2 ) X( 2, 2 ) = TEMP*B( 2, 2 ) XNORM = TEMP*BNORM INFO = 1 RETURN END IF * * Gaussian elimination with complete pivoting. * UR11 = CRV( ICMAX ) UI11 = CIV( ICMAX ) CR21 = CRV( IPIVOT( 2, ICMAX ) ) CI21 = CIV( IPIVOT( 2, ICMAX ) ) UR12 = CRV( IPIVOT( 3, ICMAX ) ) UI12 = CIV( IPIVOT( 3, ICMAX ) ) CR22 = CRV( IPIVOT( 4, ICMAX ) ) CI22 = CIV( IPIVOT( 4, ICMAX ) ) IF( ICMAX.EQ.1 .OR. ICMAX.EQ.4 ) THEN * * Code when off-diagonals of pivoted C are real * IF( ABS( UR11 ).GT.ABS( UI11 ) ) THEN TEMP = UI11 / UR11 UR11R = ONE / ( UR11*( ONE+TEMP**2 ) ) UI11R = -TEMP*UR11R ELSE TEMP = UR11 / UI11 UI11R = -ONE / ( UI11*( ONE+TEMP**2 ) ) UR11R = -TEMP*UI11R END IF LR21 = CR21*UR11R LI21 = CR21*UI11R UR12S = UR12*UR11R UI12S = UR12*UI11R UR22 = CR22 - UR12*LR21 UI22 = CI22 - UR12*LI21 ELSE * * Code when diagonals of pivoted C are real * UR11R = ONE / UR11 UI11R = ZERO LR21 = CR21*UR11R LI21 = CI21*UR11R UR12S = UR12*UR11R UI12S = UI12*UR11R UR22 = CR22 - UR12*LR21 + UI12*LI21 UI22 = -UR12*LI21 - UI12*LR21 END IF U22ABS = ABS( UR22 ) + ABS( UI22 ) * * If smaller pivot < SMINI, use SMINI * IF( U22ABS.LT.SMINI ) THEN UR22 = SMINI UI22 = ZERO INFO = 1 END IF IF( RSWAP( ICMAX ) ) THEN BR2 = B( 1, 1 ) BR1 = B( 2, 1 ) BI2 = B( 1, 2 ) BI1 = B( 2, 2 ) ELSE BR1 = B( 1, 1 ) BR2 = B( 2, 1 ) BI1 = B( 1, 2 ) BI2 = B( 2, 2 ) END IF BR2 = BR2 - LR21*BR1 + LI21*BI1 BI2 = BI2 - LI21*BR1 - LR21*BI1 BBND = MAX( ( ABS( BR1 )+ABS( BI1 ) )* $ ( U22ABS*( ABS( UR11R )+ABS( UI11R ) ) ), $ ABS( BR2 )+ABS( BI2 ) ) IF( BBND.GT.ONE .AND. U22ABS.LT.ONE ) THEN IF( BBND.GE.BIGNUM*U22ABS ) THEN SCALE = ONE / BBND BR1 = SCALE*BR1 BI1 = SCALE*BI1 BR2 = SCALE*BR2 BI2 = SCALE*BI2 END IF END IF * CALL DLADIV( BR2, BI2, UR22, UI22, XR2, XI2 ) XR1 = UR11R*BR1 - UI11R*BI1 - UR12S*XR2 + UI12S*XI2 XI1 = UI11R*BR1 + UR11R*BI1 - UI12S*XR2 - UR12S*XI2 IF( ZSWAP( ICMAX ) ) THEN X( 1, 1 ) = XR2 X( 2, 1 ) = XR1 X( 1, 2 ) = XI2 X( 2, 2 ) = XI1 ELSE X( 1, 1 ) = XR1 X( 2, 1 ) = XR2 X( 1, 2 ) = XI1 X( 2, 2 ) = XI2 END IF XNORM = MAX( ABS( XR1 )+ABS( XI1 ), ABS( XR2 )+ABS( XI2 ) ) * * Further scaling if norm(A) norm(X) > overflow * IF( XNORM.GT.ONE .AND. CMAX.GT.ONE ) THEN IF( XNORM.GT.BIGNUM / CMAX ) THEN TEMP = CMAX / BIGNUM X( 1, 1 ) = TEMP*X( 1, 1 ) X( 2, 1 ) = TEMP*X( 2, 1 ) X( 1, 2 ) = TEMP*X( 1, 2 ) X( 2, 2 ) = TEMP*X( 2, 2 ) XNORM = TEMP*XNORM SCALE = TEMP*SCALE END IF END IF END IF END IF * RETURN * * End of DLALN2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLANV2( A, B, C, D, RT1R, RT1I, RT2R, RT2I, CS, SN ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. DOUBLE PRECISION A, B, C, CS, D, RT1I, RT1R, RT2I, RT2R, SN * .. * * Purpose * ======= * * DLANV2 computes the Schur factorization of a real 2-by-2 nonsymmetric * matrix in standard form: * * [ A B ] = [ CS -SN ] [ AA BB ] [ CS SN ] * [ C D ] [ SN CS ] [ CC DD ] [-SN CS ] * * where either * 1) CC = 0 so that AA and DD are real eigenvalues of the matrix, or * 2) AA = DD and BB*CC < 0, so that AA + or - sqrt(BB*CC) are complex * conjugate eigenvalues. * * Arguments * ========= * * A (input/output) DOUBLE PRECISION * B (input/output) DOUBLE PRECISION * C (input/output) DOUBLE PRECISION * D (input/output) DOUBLE PRECISION * On entry, the elements of the input matrix. * On exit, they are overwritten by the elements of the * standardised Schur form. * * RT1R (output) DOUBLE PRECISION * RT1I (output) DOUBLE PRECISION * RT2R (output) DOUBLE PRECISION * RT2I (output) DOUBLE PRECISION * The real and imaginary parts of the eigenvalues. If the * eigenvalues are a complex conjugate pair, RT1I > 0. * * CS (output) DOUBLE PRECISION * SN (output) DOUBLE PRECISION * Parameters of the rotation matrix. * * Further Details * =============== * * Modified by V. Sima, Research Institute for Informatics, Bucharest, * Romania, to reduce the risk of cancellation errors, * when computing real eigenvalues, and to ensure, if possible, that * abs(RT1R) >= abs(RT2R). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, HALF, ONE PARAMETER ( ZERO = 0.0D+0, HALF = 0.5D+0, ONE = 1.0D+0 ) DOUBLE PRECISION MULTPL PARAMETER ( MULTPL = 4.0D+0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, BB, BCMAX, BCMIS, CC, CS1, DD, EPS, P, SAB, $ SAC, SCALE, SIGMA, SN1, TAU, TEMP, Z * .. * .. External Functions .. DOUBLE PRECISION DLAMCH, DLAPY2 EXTERNAL DLAMCH, DLAPY2 * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN, SIGN, SQRT * .. * .. Executable Statements .. * EPS = DLAMCH( 'P' ) IF( C.EQ.ZERO ) THEN CS = ONE SN = ZERO GO TO 10 * ELSE IF( B.EQ.ZERO ) THEN * * Swap rows and columns * CS = ZERO SN = ONE TEMP = D D = A A = TEMP B = -C C = ZERO GO TO 10 ELSE IF( ( A-D ).EQ.ZERO .AND. SIGN( ONE, B ).NE.SIGN( ONE, C ) ) $ THEN CS = ONE SN = ZERO GO TO 10 ELSE * TEMP = A - D P = HALF*TEMP BCMAX = MAX( ABS( B ), ABS( C ) ) BCMIS = MIN( ABS( B ), ABS( C ) )*SIGN( ONE, B )*SIGN( ONE, C ) SCALE = MAX( ABS( P ), BCMAX ) Z = ( P / SCALE )*P + ( BCMAX / SCALE )*BCMIS * * If Z is of the order of the machine accuracy, postpone the * decision on the nature of eigenvalues * IF( Z.GE.MULTPL*EPS ) THEN * * Real eigenvalues. Compute A and D. * Z = P + SIGN( SQRT( SCALE )*SQRT( Z ), P ) A = D + Z D = D - ( BCMAX / Z )*BCMIS * * Compute B and the rotation matrix * TAU = DLAPY2( C, Z ) CS = Z / TAU SN = C / TAU B = B - C C = ZERO ELSE * * Complex eigenvalues, or real (almost) equal eigenvalues. * Make diagonal elements equal. * SIGMA = B + C TAU = DLAPY2( SIGMA, TEMP ) CS = SQRT( HALF*( ONE+ABS( SIGMA ) / TAU ) ) SN = -( P / ( TAU*CS ) )*SIGN( ONE, SIGMA ) * * Compute [ AA BB ] = [ A B ] [ CS -SN ] * [ CC DD ] [ C D ] [ SN CS ] * AA = A*CS + B*SN BB = -A*SN + B*CS CC = C*CS + D*SN DD = -C*SN + D*CS * * Compute [ A B ] = [ CS SN ] [ AA BB ] * [ C D ] [-SN CS ] [ CC DD ] * A = AA*CS + CC*SN B = BB*CS + DD*SN C = -AA*SN + CC*CS D = -BB*SN + DD*CS * TEMP = HALF*( A+D ) A = TEMP D = TEMP * IF( C.NE.ZERO ) THEN IF( B.NE.ZERO ) THEN IF( SIGN( ONE, B ).EQ.SIGN( ONE, C ) ) THEN * * Real eigenvalues: reduce to upper triangular form * SAB = SQRT( ABS( B ) ) SAC = SQRT( ABS( C ) ) P = SIGN( SAB*SAC, C ) TAU = ONE / SQRT( ABS( B+C ) ) A = TEMP + P D = TEMP - P B = B - C C = ZERO CS1 = SAB*TAU SN1 = SAC*TAU TEMP = CS*CS1 - SN*SN1 SN = CS*SN1 + SN*CS1 CS = TEMP END IF ELSE B = -C C = ZERO TEMP = CS CS = -SN SN = TEMP END IF END IF END IF * END IF * 10 CONTINUE * * Store eigenvalues in (RT1R,RT1I) and (RT2R,RT2I). * RT1R = A RT2R = D IF( C.EQ.ZERO ) THEN RT1I = ZERO RT2I = ZERO ELSE RT1I = SQRT( ABS( B ) )*SQRT( ABS( C ) ) RT2I = -RT1I END IF RETURN * * End of DLANV2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR0( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), $ Z( LDZ, * ) * .. * * Purpose * ======= * * DLAQR0 computes the eigenvalues of a Hessenberg matrix H * and, optionally, the matrices T and Z from the Schur decomposition * H = Z T Z**T, where T is an upper quasi-triangular matrix (the * Schur form), and Z is the orthogonal matrix of Schur vectors. * * Optionally Z may be postmultiplied into an input orthogonal * matrix Q so that this routine can give the Schur factorization * of a matrix A which has been reduced to the Hessenberg form H * by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. * * Arguments * ========= * * WANTT (input) LOGICAL * = .TRUE. : the full Schur form T is required; * = .FALSE.: only eigenvalues are required. * * WANTZ (input) LOGICAL * = .TRUE. : the matrix of Schur vectors Z is required; * = .FALSE.: Schur vectors are not required. * * N (input) INTEGER * The order of the matrix H. N .GE. 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that H is already upper triangular in rows * and columns 1:ILO-1 and IHI+1:N and, if ILO.GT.1, * H(ILO,ILO-1) is zero. ILO and IHI are normally set by a * previous call to DGEBAL, and then passed to DGEHRD when the * matrix output by DGEBAL is reduced to Hessenberg form. * Otherwise, ILO and IHI should be set to 1 and N, * respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. * If N = 0, then ILO = 1 and IHI = 0. * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On entry, the upper Hessenberg matrix H. * On exit, if INFO = 0 and WANTT is .TRUE., then H contains * the upper quasi-triangular matrix T from the Schur * decomposition (the Schur form); 2-by-2 diagonal blocks * (corresponding to complex conjugate pairs of eigenvalues) * are returned in standard form, with H(i,i) = H(i+1,i+1) * and H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and WANTT is * .FALSE., then the contents of H are unspecified on exit. * (The output value of H when INFO.GT.0 is given under the * description of INFO below.) * * This subroutine may explicitly set H(i,j) = 0 for i.GT.j and * j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N. * * LDH (input) INTEGER * The leading dimension of the array H. LDH .GE. max(1,N). * * WR (output) DOUBLE PRECISION array, dimension (IHI) * WI (output) DOUBLE PRECISION array, dimension (IHI) * The real and imaginary parts, respectively, of the computed * eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) * and WI(ILO:IHI). If two eigenvalues are computed as a * complex conjugate pair, they are stored in consecutive * elements of WR and WI, say the i-th and (i+1)th, with * WI(i) .GT. 0 and WI(i+1) .LT. 0. If WANTT is .TRUE., then * the eigenvalues are stored in the same order as on the * diagonal of the Schur form returned in H, with * WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal * block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and * WI(i+1) = -WI(i). * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. * 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,IHI) * If WANTZ is .FALSE., then Z is not referenced. * If WANTZ is .TRUE., then Z(ILO:IHI,ILOZ:IHIZ) is * replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the * orthogonal Schur factor of H(ILO:IHI,ILO:IHI). * (The output value of Z when INFO.GT.0 is given under * the description of INFO below.) * * LDZ (input) INTEGER * The leading dimension of the array Z. if WANTZ is .TRUE. * then LDZ.GE.MAX(1,IHIZ). Otherwize, LDZ.GE.1. * * WORK (workspace/output) DOUBLE PRECISION array, dimension LWORK * On exit, if LWORK = -1, WORK(1) returns an estimate of * the optimal value for LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK .GE. max(1,N) * is sufficient, but LWORK typically as large as 6*N may * be required for optimal performance. A workspace query * to determine the optimal workspace size is recommended. * * If LWORK = -1, then DLAQR0 does a workspace query. * In this case, DLAQR0 checks the input parameters and * estimates the optimal workspace size for the given * values of N, ILO and IHI. The estimate is returned * in WORK(1). No error message related to LWORK is * issued by XERBLA. Neither H nor Z are accessed. * * * INFO (output) INTEGER * = 0: successful exit * .GT. 0: if INFO = i, DLAQR0 failed to compute all of * the eigenvalues. Elements 1:ilo-1 and i+1:n of WR * and WI contain those eigenvalues which have been * successfully computed. (Failures are rare.) * * If INFO .GT. 0 and WANT is .FALSE., then on exit, * the remaining unconverged eigenvalues are the eigen- * values of the upper Hessenberg matrix rows and * columns ILO through INFO of the final, output * value of H. * * If INFO .GT. 0 and WANTT is .TRUE., then on exit * * (*) (initial value of H)*U = U*(final value of H) * * where U is an orthogonal matrix. The final * value of H is upper Hessenberg and quasi-triangular * in rows and columns INFO+1 through IHI. * * If INFO .GT. 0 and WANTZ is .TRUE., then on exit * * (final value of Z(ILO:IHI,ILOZ:IHIZ) * = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U * * where U is the orthogonal matrix in (*) (regard- * less of the value of WANTT.) * * If INFO .GT. 0 and WANTZ is .FALSE., then Z is not * accessed. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * References: * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 * Performance, SIAM Journal of Matrix Analysis, volume 23, pages * 929--947, 2002. * * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part II: Aggressive Early Deflation, SIAM Journal * of Matrix Analysis, volume 23, pages 948--973, 2002. * * ================================================================ * .. Parameters .. * * ==== Matrices of order NTINY or smaller must be processed by * . DLAHQR because of insufficient subdiagonal scratch space. * . (This is a hard limit.) ==== INTEGER NTINY PARAMETER ( NTINY = 11 ) * * ==== Exceptional deflation windows: try to cure rare * . slow convergence by varying the size of the * . deflation window after KEXNW iterations. ==== INTEGER KEXNW PARAMETER ( KEXNW = 5 ) * * ==== Exceptional shifts: try to cure rare slow convergence * . with ad-hoc exceptional shifts every KEXSH iterations. * . ==== INTEGER KEXSH PARAMETER ( KEXSH = 6 ) * * ==== The constants WILK1 and WILK2 are used to form the * . exceptional shifts. ==== DOUBLE PRECISION WILK1, WILK2 PARAMETER ( WILK1 = 0.75d0, WILK2 = -0.4375d0 ) DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, BB, CC, CS, DD, SN, SS, SWAP INTEGER I, INF, IT, ITMAX, K, KACC22, KBOT, KDU, KS, $ KT, KTOP, KU, KV, KWH, KWTOP, KWV, LD, LS, $ LWKOPT, NDEC, NDFL, NH, NHO, NIBBLE, NMIN, NS, $ NSMAX, NSR, NVE, NW, NWMAX, NWR, NWUPBD LOGICAL SORTED CHARACTER JBCMPZ*2 * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Local Arrays .. DOUBLE PRECISION ZDUM( 1, 1 ) * .. * .. External Subroutines .. EXTERNAL DLACPY, DLAHQR, DLANV2, DLAQR3, DLAQR4, DLAQR5 * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, INT, MAX, MIN, MOD * .. * .. Executable Statements .. INFO = 0 * * ==== Quick return for N = 0: nothing to do. ==== * IF( N.EQ.0 ) THEN WORK( 1 ) = ONE RETURN END IF * IF( N.LE.NTINY ) THEN * * ==== Tiny matrices must use DLAHQR. ==== * LWKOPT = 1 IF( LWORK.NE.-1 ) $ CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, INFO ) ELSE * * ==== Use small bulge multi-shift QR with aggressive early * . deflation on larger-than-tiny matrices. ==== * * ==== Hope for the best. ==== * INFO = 0 * * ==== Set up job flags for ILAENV. ==== * IF( WANTT ) THEN JBCMPZ( 1: 1 ) = 'S' ELSE JBCMPZ( 1: 1 ) = 'E' END IF IF( WANTZ ) THEN JBCMPZ( 2: 2 ) = 'V' ELSE JBCMPZ( 2: 2 ) = 'N' END IF * * ==== NWR = recommended deflation window size. At this * . point, N .GT. NTINY = 11, so there is enough * . subdiagonal workspace for NWR.GE.2 as required. * . (In fact, there is enough subdiagonal space for * . NWR.GE.3.) ==== * NWR = ILAENV( 13, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) NWR = MAX( 2, NWR ) NWR = MIN( IHI-ILO+1, ( N-1 ) / 3, NWR ) * * ==== NSR = recommended number of simultaneous shifts. * . At this point N .GT. NTINY = 11, so there is at * . enough subdiagonal workspace for NSR to be even * . and greater than or equal to two as required. ==== * NSR = ILAENV( 15, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) NSR = MIN( NSR, ( N+6 ) / 9, IHI-ILO ) NSR = MAX( 2, NSR-MOD( NSR, 2 ) ) * * ==== Estimate optimal workspace ==== * * ==== Workspace query call to DLAQR3 ==== * CALL DLAQR3( WANTT, WANTZ, N, ILO, IHI, NWR+1, H, LDH, ILOZ, $ IHIZ, Z, LDZ, LS, LD, WR, WI, H, LDH, N, H, LDH, $ N, H, LDH, WORK, -1 ) * * ==== Optimal workspace = MAX(DLAQR5, DLAQR3) ==== * LWKOPT = MAX( 3*NSR / 2, INT( WORK( 1 ) ) ) * * ==== Quick return in case of workspace query. ==== * IF( LWORK.EQ.-1 ) THEN WORK( 1 ) = DBLE( LWKOPT ) RETURN END IF * * ==== DLAHQR/DLAQR0 crossover point ==== * NMIN = ILAENV( 12, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) NMIN = MAX( NTINY, NMIN ) * * ==== Nibble crossover point ==== * NIBBLE = ILAENV( 14, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) NIBBLE = MAX( 0, NIBBLE ) * * ==== Accumulate reflections during ttswp? Use block * . 2-by-2 structure during matrix-matrix multiply? ==== * KACC22 = ILAENV( 16, 'DLAQR0', JBCMPZ, N, ILO, IHI, LWORK ) KACC22 = MAX( 0, KACC22 ) KACC22 = MIN( 2, KACC22 ) * * ==== NWMAX = the largest possible deflation window for * . which there is sufficient workspace. ==== * NWMAX = MIN( ( N-1 ) / 3, LWORK / 2 ) NW = NWMAX * * ==== NSMAX = the Largest number of simultaneous shifts * . for which there is sufficient workspace. ==== * NSMAX = MIN( ( N+6 ) / 9, 2*LWORK / 3 ) NSMAX = NSMAX - MOD( NSMAX, 2 ) * * ==== NDFL: an iteration count restarted at deflation. ==== * NDFL = 1 * * ==== ITMAX = iteration limit ==== * ITMAX = MAX( 30, 2*KEXSH )*MAX( 10, ( IHI-ILO+1 ) ) * * ==== Last row and column in the active block ==== * KBOT = IHI * * ==== Main Loop ==== * DO 80 IT = 1, ITMAX * * ==== Done when KBOT falls below ILO ==== * IF( KBOT.LT.ILO ) $ GO TO 90 * * ==== Locate active block ==== * DO 10 K = KBOT, ILO + 1, -1 IF( H( K, K-1 ).EQ.ZERO ) $ GO TO 20 10 CONTINUE K = ILO 20 CONTINUE KTOP = K * * ==== Select deflation window size: * . Typical Case: * . If possible and advisable, nibble the entire * . active block. If not, use size MIN(NWR,NWMAX) * . or MIN(NWR+1,NWMAX) depending upon which has * . the smaller corresponding subdiagonal entry * . (a heuristic). * . * . Exceptional Case: * . If there have been no deflations in KEXNW or * . more iterations, then vary the deflation window * . size. At first, because, larger windows are, * . in general, more powerful than smaller ones, * . rapidly increase the window to the maximum possible. * . Then, gradually reduce the window size. ==== * NH = KBOT - KTOP + 1 NWUPBD = MIN( NH, NWMAX ) IF( NDFL.LT.KEXNW ) THEN NW = MIN( NWUPBD, NWR ) ELSE NW = MIN( NWUPBD, 2*NW ) END IF IF( NW.LT.NWMAX ) THEN IF( NW.GE.NH-1 ) THEN NW = NH ELSE KWTOP = KBOT - NW + 1 IF( ABS( H( KWTOP, KWTOP-1 ) ).GT. $ ABS( H( KWTOP-1, KWTOP-2 ) ) )NW = NW + 1 END IF END IF IF( NDFL.LT.KEXNW ) THEN NDEC = -1 ELSE IF( NDEC.GE.0 .OR. NW.GE.NWUPBD ) THEN NDEC = NDEC + 1 IF( NW-NDEC.LT.2 ) $ NDEC = 0 NW = NW - NDEC END IF * * ==== Aggressive early deflation: * . split workspace under the subdiagonal into * . - an nw-by-nw work array V in the lower * . left-hand-corner, * . - an NW-by-at-least-NW-but-more-is-better * . (NW-by-NHO) horizontal work array along * . the bottom edge, * . - an at-least-NW-but-more-is-better (NHV-by-NW) * . vertical work array along the left-hand-edge. * . ==== * KV = N - NW + 1 KT = NW + 1 NHO = ( N-NW-1 ) - KT + 1 KWV = NW + 2 NVE = ( N-NW ) - KWV + 1 * * ==== Aggressive early deflation ==== * CALL DLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, LS, LD, WR, WI, H( KV, 1 ), LDH, $ NHO, H( KV, KT ), LDH, NVE, H( KWV, 1 ), LDH, $ WORK, LWORK ) * * ==== Adjust KBOT accounting for new deflations. ==== * KBOT = KBOT - LD * * ==== KS points to the shifts. ==== * KS = KBOT - LS + 1 * * ==== Skip an expensive QR sweep if there is a (partly * . heuristic) reason to expect that many eigenvalues * . will deflate without it. Here, the QR sweep is * . skipped if many eigenvalues have just been deflated * . or if the remaining active block is small. * IF( ( LD.EQ.0 ) .OR. ( ( 100*LD.LE.NW*NIBBLE ) .AND. ( KBOT- $ KTOP+1.GT.MIN( NMIN, NWMAX ) ) ) ) THEN * * ==== NS = nominal number of simultaneous shifts. * . This may be lowered (slightly) if DLAQR3 * . did not provide that many shifts. ==== * NS = MIN( NSMAX, NSR, MAX( 2, KBOT-KTOP ) ) NS = NS - MOD( NS, 2 ) * * ==== If there have been no deflations * . in a multiple of KEXSH iterations, * . then try exceptional shifts. * . Otherwise use shifts provided by * . DLAQR3 above or from the eigenvalues * . of a trailing principal submatrix. ==== * IF( MOD( NDFL, KEXSH ).EQ.0 ) THEN KS = KBOT - NS + 1 DO 30 I = KBOT, MAX( KS+1, KTOP+2 ), -2 SS = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) AA = WILK1*SS + H( I, I ) BB = SS CC = WILK2*SS DD = AA CALL DLANV2( AA, BB, CC, DD, WR( I-1 ), WI( I-1 ), $ WR( I ), WI( I ), CS, SN ) 30 CONTINUE IF( KS.EQ.KTOP ) THEN WR( KS+1 ) = H( KS+1, KS+1 ) WI( KS+1 ) = ZERO WR( KS ) = WR( KS+1 ) WI( KS ) = WI( KS+1 ) END IF ELSE * * ==== Got NS/2 or fewer shifts? Use DLAQR4 or * . DLAHQR on a trailing principal submatrix to * . get more. (Since NS.LE.NSMAX.LE.(N+6)/9, * . there is enough space below the subdiagonal * . to fit an NS-by-NS scratch array.) ==== * IF( KBOT-KS+1.LE.NS / 2 ) THEN KS = KBOT - NS + 1 KT = N - NS + 1 CALL DLACPY( 'A', NS, NS, H( KS, KS ), LDH, $ H( KT, 1 ), LDH ) IF( NS.GT.NMIN ) THEN CALL DLAQR4( .false., .false., NS, 1, NS, $ H( KT, 1 ), LDH, WR( KS ), $ WI( KS ), 1, 1, ZDUM, 1, WORK, $ LWORK, INF ) ELSE CALL DLAHQR( .false., .false., NS, 1, NS, $ H( KT, 1 ), LDH, WR( KS ), $ WI( KS ), 1, 1, ZDUM, 1, INF ) END IF KS = KS + INF * * ==== In case of a rare QR failure use * . eigenvalues of the trailing 2-by-2 * . principal submatrix. ==== * IF( KS.GE.KBOT ) THEN AA = H( KBOT-1, KBOT-1 ) CC = H( KBOT, KBOT-1 ) BB = H( KBOT-1, KBOT ) DD = H( KBOT, KBOT ) CALL DLANV2( AA, BB, CC, DD, WR( KBOT-1 ), $ WI( KBOT-1 ), WR( KBOT ), $ WI( KBOT ), CS, SN ) KS = KBOT - 1 END IF END IF * IF( KBOT-KS+1.GT.NS ) THEN * * ==== Sort the shifts (Helps a little) * . Bubble sort keeps complex conjugate * . pairs together. ==== * SORTED = .false. DO 50 K = KBOT, KS + 1, -1 IF( SORTED ) $ GO TO 60 SORTED = .true. DO 40 I = KS, K - 1 IF( ABS( WR( I ) )+ABS( WI( I ) ).LT. $ ABS( WR( I+1 ) )+ABS( WI( I+1 ) ) ) THEN SORTED = .false. * SWAP = WR( I ) WR( I ) = WR( I+1 ) WR( I+1 ) = SWAP * SWAP = WI( I ) WI( I ) = WI( I+1 ) WI( I+1 ) = SWAP END IF 40 CONTINUE 50 CONTINUE 60 CONTINUE END IF * * ==== Shuffle shifts into pairs of real shifts * . and pairs of complex conjugate shifts * . assuming complex conjugate shifts are * . already adjacent to one another. (Yes, * . they are.) ==== * DO 70 I = KBOT, KS + 2, -2 IF( WI( I ).NE.-WI( I-1 ) ) THEN * SWAP = WR( I ) WR( I ) = WR( I-1 ) WR( I-1 ) = WR( I-2 ) WR( I-2 ) = SWAP * SWAP = WI( I ) WI( I ) = WI( I-1 ) WI( I-1 ) = WI( I-2 ) WI( I-2 ) = SWAP END IF 70 CONTINUE END IF * * ==== If there are only two shifts and both are * . real, then use only one. ==== * IF( KBOT-KS+1.EQ.2 ) THEN IF( WI( KBOT ).EQ.ZERO ) THEN IF( ABS( WR( KBOT )-H( KBOT, KBOT ) ).LT. $ ABS( WR( KBOT-1 )-H( KBOT, KBOT ) ) ) THEN WR( KBOT-1 ) = WR( KBOT ) ELSE WR( KBOT ) = WR( KBOT-1 ) END IF END IF END IF * * ==== Use up to NS of the the smallest magnatiude * . shifts. If there aren't NS shifts available, * . then use them all, possibly dropping one to * . make the number of shifts even. ==== * NS = MIN( NS, KBOT-KS+1 ) NS = NS - MOD( NS, 2 ) KS = KBOT - NS + 1 * * ==== Small-bulge multi-shift QR sweep: * . split workspace under the subdiagonal into * . - a KDU-by-KDU work array U in the lower * . left-hand-corner, * . - a KDU-by-at-least-KDU-but-more-is-better * . (KDU-by-NHo) horizontal work array WH along * . the bottom edge, * . - and an at-least-KDU-but-more-is-better-by-KDU * . (NVE-by-KDU) vertical work WV arrow along * . the left-hand-edge. ==== * KDU = 3*NS - 3 KU = N - KDU + 1 KWH = KDU + 1 NHO = ( N-KDU+1-4 ) - ( KDU+1 ) + 1 KWV = KDU + 4 NVE = N - KDU - KWV + 1 * * ==== Small-bulge multi-shift QR sweep ==== * CALL DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NS, $ WR( KS ), WI( KS ), H, LDH, ILOZ, IHIZ, Z, $ LDZ, WORK, 3, H( KU, 1 ), LDH, NVE, $ H( KWV, 1 ), LDH, NHO, H( KU, KWH ), LDH ) END IF * * ==== Note progress (or the lack of it). ==== * IF( LD.GT.0 ) THEN NDFL = 1 ELSE NDFL = NDFL + 1 END IF * * ==== End of main loop ==== 80 CONTINUE * * ==== Iteration limit exceeded. Set INFO to show where * . the problem occurred and exit. ==== * INFO = KBOT 90 CONTINUE END IF * * ==== Return the optimal value of LWORK. ==== * WORK( 1 ) = DBLE( LWKOPT ) * * ==== End of DLAQR0 ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR1( N, H, LDH, SR1, SI1, SR2, SI2, V ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION SI1, SI2, SR1, SR2 INTEGER LDH, N * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), V( * ) * .. * * Given a 2-by-2 or 3-by-3 matrix H, DLAQR1 sets v to a * scalar multiple of the first column of the product * * (*) K = (H - (sr1 + i*si1)*I)*(H - (sr2 + i*si2)*I) * * scaling to avoid overflows and most underflows. It * is assumed that either * * 1) sr1 = sr2 and si1 = -si2 * or * 2) si1 = si2 = 0. * * This is useful for starting double implicit shift bulges * in the QR algorithm. * * * N (input) integer * Order of the matrix H. N must be either 2 or 3. * * H (input) DOUBLE PRECISION array of dimension (LDH,N) * The 2-by-2 or 3-by-3 matrix H in (*). * * LDH (input) integer * The leading dimension of H as declared in * the calling procedure. LDH.GE.N * * SR1 (input) DOUBLE PRECISION * SI1 The shifts in (*). * SR2 * SI2 * * V (output) DOUBLE PRECISION array of dimension N * A scalar multiple of the first column of the * matrix K in (*). * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION H21S, H31S, S * .. * .. Intrinsic Functions .. INTRINSIC ABS * .. * .. Executable Statements .. IF( N.EQ.2 ) THEN S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) IF( S.EQ.ZERO ) THEN V( 1 ) = ZERO V( 2 ) = ZERO ELSE H21S = H( 2, 1 ) / S V( 1 ) = H21S*H( 1, 2 ) + ( H( 1, 1 )-SR1 )* $ ( ( H( 1, 1 )-SR2 ) / S ) - SI1*( SI2 / S ) V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) END IF ELSE S = ABS( H( 1, 1 )-SR2 ) + ABS( SI2 ) + ABS( H( 2, 1 ) ) + $ ABS( H( 3, 1 ) ) IF( S.EQ.ZERO ) THEN V( 1 ) = ZERO V( 2 ) = ZERO V( 3 ) = ZERO ELSE H21S = H( 2, 1 ) / S H31S = H( 3, 1 ) / S V( 1 ) = ( H( 1, 1 )-SR1 )*( ( H( 1, 1 )-SR2 ) / S ) - $ SI1*( SI2 / S ) + H( 1, 2 )*H21S + H( 1, 3 )*H31S V( 2 ) = H21S*( H( 1, 1 )+H( 2, 2 )-SR1-SR2 ) + $ H( 2, 3 )*H31S V( 3 ) = H31S*( H( 1, 1 )+H( 3, 3 )-SR1-SR2 ) + $ H21S*H( 3, 2 ) END IF END IF END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, $ LDT, NV, WV, LDWV, WORK, LWORK ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * -- June 2010 -- * * .. Scalar Arguments .. INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, $ LDZ, LWORK, N, ND, NH, NS, NV, NW LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), $ V( LDV, * ), WORK( * ), WV( LDWV, * ), $ Z( LDZ, * ) * .. * * This subroutine is identical to DLAQR3 except that it avoids * recursion by calling DLAHQR instead of DLAQR4. * * * ****************************************************************** * Aggressive early deflation: * * This subroutine accepts as input an upper Hessenberg matrix * H and performs an orthogonal similarity transformation * designed to detect and deflate fully converged eigenvalues from * a trailing principal submatrix. On output H has been over- * written by a new Hessenberg matrix that is a perturbation of * an orthogonal similarity transformation of H. It is to be * hoped that the final version of H has many zero subdiagonal * entries. * * ****************************************************************** * WANTT (input) LOGICAL * If .TRUE., then the Hessenberg matrix H is fully updated * so that the quasi-triangular Schur factor may be * computed (in cooperation with the calling subroutine). * If .FALSE., then only enough of H is updated to preserve * the eigenvalues. * * WANTZ (input) LOGICAL * If .TRUE., then the orthogonal matrix Z is updated so * so that the orthogonal Schur factor may be computed * (in cooperation with the calling subroutine). * If .FALSE., then Z is not referenced. * * N (input) INTEGER * The order of the matrix H and (if WANTZ is .TRUE.) the * order of the orthogonal matrix Z. * * KTOP (input) INTEGER * It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0. * KBOT and KTOP together determine an isolated block * along the diagonal of the Hessenberg matrix. * * KBOT (input) INTEGER * It is assumed without a check that either * KBOT = N or H(KBOT+1,KBOT)=0. KBOT and KTOP together * determine an isolated block along the diagonal of the * Hessenberg matrix. * * NW (input) INTEGER * Deflation window size. 1 .LE. NW .LE. (KBOT-KTOP+1). * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On input the initial N-by-N section of H stores the * Hessenberg matrix undergoing aggressive early deflation. * On output H has been transformed by an orthogonal * similarity transformation, perturbed, and the returned * to Hessenberg form that (it is to be hoped) has some * zero subdiagonal entries. * * LDH (input) integer * Leading dimension of H just as declared in the calling * subroutine. N .LE. LDH * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,N) * IF WANTZ is .TRUE., then on output, the orthogonal * similarity transformation mentioned above has been * accumulated into Z(ILOZ:IHIZ,ILO:IHI) from the right. * If WANTZ is .FALSE., then Z is unreferenced. * * LDZ (input) integer * The leading dimension of Z just as declared in the * calling subroutine. 1 .LE. LDZ. * * NS (output) integer * The number of unconverged (ie approximate) eigenvalues * returned in SR and SI that may be used as shifts by the * calling subroutine. * * ND (output) integer * The number of converged eigenvalues uncovered by this * subroutine. * * SR (output) DOUBLE PRECISION array, dimension (KBOT) * SI (output) DOUBLE PRECISION array, dimension (KBOT) * On output, the real and imaginary parts of approximate * eigenvalues that may be used for shifts are stored in * SR(KBOT-ND-NS+1) through SR(KBOT-ND) and * SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively. * The real and imaginary parts of converged eigenvalues * are stored in SR(KBOT-ND+1) through SR(KBOT) and * SI(KBOT-ND+1) through SI(KBOT), respectively. * * V (workspace) DOUBLE PRECISION array, dimension (LDV,NW) * An NW-by-NW work array. * * LDV (input) integer scalar * The leading dimension of V just as declared in the * calling subroutine. NW .LE. LDV * * NH (input) integer scalar * The number of columns of T. NH.GE.NW. * * T (workspace) DOUBLE PRECISION array, dimension (LDT,NW) * * LDT (input) integer * The leading dimension of T just as declared in the * calling subroutine. NW .LE. LDT * * NV (input) integer * The number of rows of work array WV available for * workspace. NV.GE.NW. * * WV (workspace) DOUBLE PRECISION array, dimension (LDWV,NW) * * LDWV (input) integer * The leading dimension of W just as declared in the * calling subroutine. NW .LE. LDV * * WORK (workspace) DOUBLE PRECISION array, dimension (LWORK) * On exit, WORK(1) is set to an estimate of the optimal value * of LWORK for the given values of N, NW, KTOP and KBOT. * * LWORK (input) integer * The dimension of the work array WORK. LWORK = 2*NW * suffices, but greater efficiency may result from larger * values of LWORK. * * If LWORK = -1, then a workspace query is assumed; DLAQR2 * only estimates the optimal workspace size for the given * values of N, NW, KTOP and KBOT. The estimate is returned * in WORK(1). No error message related to LWORK is issued * by XERBLA. Neither H nor Z are accessed. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, BB, BETA, CC, CS, DD, EVI, EVK, FOO, S, $ SAFMAX, SAFMIN, SMLNUM, SN, TAU, ULP INTEGER I, IFST, ILST, INFO, INFQR, J, JW, K, KCOL, $ KEND, KLN, KROW, KWTOP, LTOP, LWK1, LWK2, $ LWKOPT LOGICAL BULGE, SORTED * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. External Subroutines .. EXTERNAL DCOPY, DGEHRD, DGEMM, DLABAD, DLACPY, DLAHQR, $ DLANV2, DLARF, DLARFG, DLASET, DORMHR, DTREXC * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, INT, MAX, MIN, SQRT * .. * .. Executable Statements .. * * ==== Estimate optimal workspace. ==== * JW = MIN( NW, KBOT-KTOP+1 ) IF( JW.LE.2 ) THEN LWKOPT = 1 ELSE * * ==== Workspace query call to DGEHRD ==== * CALL DGEHRD( JW, 1, JW-1, T, LDT, WORK, WORK, -1, INFO ) LWK1 = INT( WORK( 1 ) ) * * ==== Workspace query call to DORMHR ==== * CALL DORMHR( 'R', 'N', JW, JW, 1, JW-1, T, LDT, WORK, V, LDV, $ WORK, -1, INFO ) LWK2 = INT( WORK( 1 ) ) * * ==== Optimal workspace ==== * LWKOPT = JW + MAX( LWK1, LWK2 ) END IF * * ==== Quick return in case of workspace query. ==== * IF( LWORK.EQ.-1 ) THEN WORK( 1 ) = DBLE( LWKOPT ) RETURN END IF * * ==== Nothing to do ... * ... for an empty active block ... ==== NS = 0 ND = 0 WORK( 1 ) = ONE IF( KTOP.GT.KBOT ) $ RETURN * ... nor for an empty deflation window. ==== IF( NW.LT.1 ) $ RETURN * * ==== Machine constants ==== * SAFMIN = DLAMCH( 'SAFE MINIMUM' ) SAFMAX = ONE / SAFMIN CALL DLABAD( SAFMIN, SAFMAX ) ULP = DLAMCH( 'PRECISION' ) SMLNUM = SAFMIN*( DBLE( N ) / ULP ) * * ==== Setup deflation window ==== * JW = MIN( NW, KBOT-KTOP+1 ) KWTOP = KBOT - JW + 1 IF( KWTOP.EQ.KTOP ) THEN S = ZERO ELSE S = H( KWTOP, KWTOP-1 ) END IF * IF( KBOT.EQ.KWTOP ) THEN * * ==== 1-by-1 deflation window: not much to do ==== * SR( KWTOP ) = H( KWTOP, KWTOP ) SI( KWTOP ) = ZERO NS = 1 ND = 0 IF( ABS( S ).LE.MAX( SMLNUM, ULP*ABS( H( KWTOP, KWTOP ) ) ) ) $ THEN NS = 0 ND = 1 IF( KWTOP.GT.KTOP ) $ H( KWTOP, KWTOP-1 ) = ZERO END IF WORK( 1 ) = ONE RETURN END IF * * ==== Convert to spike-triangular form. (In case of a * . rare QR failure, this routine continues to do * . aggressive early deflation using that part of * . the deflation window that converged using INFQR * . here and there to keep track.) ==== * CALL DLACPY( 'U', JW, JW, H( KWTOP, KWTOP ), LDH, T, LDT ) CALL DCOPY( JW-1, H( KWTOP+1, KWTOP ), LDH+1, T( 2, 1 ), LDT+1 ) * CALL DLASET( 'A', JW, JW, ZERO, ONE, V, LDV ) CALL DLAHQR( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), $ SI( KWTOP ), 1, JW, V, LDV, INFQR ) * * ==== DTREXC needs a clean margin near the diagonal ==== * DO 10 J = 1, JW - 3 T( J+2, J ) = ZERO T( J+3, J ) = ZERO 10 CONTINUE IF( JW.GT.2 ) $ T( JW, JW-2 ) = ZERO * * ==== Deflation detection loop ==== * NS = JW ILST = INFQR + 1 20 CONTINUE IF( ILST.LE.NS ) THEN IF( NS.EQ.1 ) THEN BULGE = .FALSE. ELSE BULGE = T( NS, NS-1 ).NE.ZERO END IF * * ==== Small spike tip test for deflation ==== * IF( .NOT.BULGE ) THEN * * ==== Real eigenvalue ==== * FOO = ABS( T( NS, NS ) ) IF( FOO.EQ.ZERO ) $ FOO = ABS( S ) IF( ABS( S*V( 1, NS ) ).LE.MAX( SMLNUM, ULP*FOO ) ) THEN * * ==== Deflatable ==== * NS = NS - 1 ELSE * * ==== Undeflatable. Move it up out of the way. * . (DTREXC can not fail in this case.) ==== * IFST = NS CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) ILST = ILST + 1 END IF ELSE * * ==== Complex conjugate pair ==== * FOO = ABS( T( NS, NS ) ) + SQRT( ABS( T( NS, NS-1 ) ) )* $ SQRT( ABS( T( NS-1, NS ) ) ) IF( FOO.EQ.ZERO ) $ FOO = ABS( S ) IF( MAX( ABS( S*V( 1, NS ) ), ABS( S*V( 1, NS-1 ) ) ).LE. $ MAX( SMLNUM, ULP*FOO ) ) THEN * * ==== Deflatable ==== * NS = NS - 2 ELSE * * ==== Undeflatable. Move them up out of the way. * . Fortunately, DTREXC does the right thing with * . ILST in case of a rare exchange failure. ==== * IFST = NS CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) ILST = ILST + 2 END IF END IF * * ==== End deflation detection loop ==== * GO TO 20 END IF * * ==== Return to Hessenberg form ==== * IF( NS.EQ.0 ) $ S = ZERO * IF( NS.LT.JW ) THEN * * ==== sorting diagonal blocks of T improves accuracy for * . graded matrices. Bubble sort deals well with * . exchange failures. ==== * SORTED = .false. I = NS + 1 30 CONTINUE IF( SORTED ) $ GO TO 50 SORTED = .true. * KEND = I - 1 I = INFQR + 1 IF( I.EQ.NS ) THEN K = I + 1 ELSE IF( T( I+1, I ).EQ.ZERO ) THEN K = I + 1 ELSE K = I + 2 END IF 40 CONTINUE IF( K.LE.KEND ) THEN IF( K.EQ.I+1 ) THEN EVI = ABS( T( I, I ) ) ELSE EVI = ABS( T( I, I ) ) + SQRT( ABS( T( I+1, I ) ) )* $ SQRT( ABS( T( I, I+1 ) ) ) END IF * IF( K.EQ.KEND ) THEN EVK = ABS( T( K, K ) ) ELSE IF( T( K+1, K ).EQ.ZERO ) THEN EVK = ABS( T( K, K ) ) ELSE EVK = ABS( T( K, K ) ) + SQRT( ABS( T( K+1, K ) ) )* $ SQRT( ABS( T( K, K+1 ) ) ) END IF * IF( EVI.GE.EVK ) THEN I = K ELSE SORTED = .false. IFST = I ILST = K CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) IF( INFO.EQ.0 ) THEN I = ILST ELSE I = K END IF END IF IF( I.EQ.KEND ) THEN K = I + 1 ELSE IF( T( I+1, I ).EQ.ZERO ) THEN K = I + 1 ELSE K = I + 2 END IF GO TO 40 END IF GO TO 30 50 CONTINUE END IF * * ==== Restore shift/eigenvalue array from T ==== * I = JW 60 CONTINUE IF( I.GE.INFQR+1 ) THEN IF( I.EQ.INFQR+1 ) THEN SR( KWTOP+I-1 ) = T( I, I ) SI( KWTOP+I-1 ) = ZERO I = I - 1 ELSE IF( T( I, I-1 ).EQ.ZERO ) THEN SR( KWTOP+I-1 ) = T( I, I ) SI( KWTOP+I-1 ) = ZERO I = I - 1 ELSE AA = T( I-1, I-1 ) CC = T( I, I-1 ) BB = T( I-1, I ) DD = T( I, I ) CALL DLANV2( AA, BB, CC, DD, SR( KWTOP+I-2 ), $ SI( KWTOP+I-2 ), SR( KWTOP+I-1 ), $ SI( KWTOP+I-1 ), CS, SN ) I = I - 2 END IF GO TO 60 END IF * IF( NS.LT.JW .OR. S.EQ.ZERO ) THEN IF( NS.GT.1 .AND. S.NE.ZERO ) THEN * * ==== Reflect spike back into lower triangle ==== * CALL DCOPY( NS, V, LDV, WORK, 1 ) BETA = WORK( 1 ) CALL DLARFG( NS, BETA, WORK( 2 ), 1, TAU ) WORK( 1 ) = ONE * CALL DLASET( 'L', JW-2, JW-2, ZERO, ZERO, T( 3, 1 ), LDT ) * CALL DLARF( 'L', NS, JW, WORK, 1, TAU, T, LDT, $ WORK( JW+1 ) ) CALL DLARF( 'R', NS, NS, WORK, 1, TAU, T, LDT, $ WORK( JW+1 ) ) CALL DLARF( 'R', JW, NS, WORK, 1, TAU, V, LDV, $ WORK( JW+1 ) ) * CALL DGEHRD( JW, 1, NS, T, LDT, WORK, WORK( JW+1 ), $ LWORK-JW, INFO ) END IF * * ==== Copy updated reduced window into place ==== * IF( KWTOP.GT.1 ) $ H( KWTOP, KWTOP-1 ) = S*V( 1, 1 ) CALL DLACPY( 'U', JW, JW, T, LDT, H( KWTOP, KWTOP ), LDH ) CALL DCOPY( JW-1, T( 2, 1 ), LDT+1, H( KWTOP+1, KWTOP ), $ LDH+1 ) * * ==== Accumulate orthogonal matrix in order update * . H and Z, if requested. ==== * IF( NS.GT.1 .AND. S.NE.ZERO ) $ CALL DORMHR( 'R', 'N', JW, NS, 1, NS, T, LDT, WORK, V, LDV, $ WORK( JW+1 ), LWORK-JW, INFO ) * * ==== Update vertical slab in H ==== * IF( WANTT ) THEN LTOP = 1 ELSE LTOP = KTOP END IF DO 70 KROW = LTOP, KWTOP - 1, NV KLN = MIN( NV, KWTOP-KROW ) CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, H( KROW, KWTOP ), $ LDH, V, LDV, ZERO, WV, LDWV ) CALL DLACPY( 'A', KLN, JW, WV, LDWV, H( KROW, KWTOP ), LDH ) 70 CONTINUE * * ==== Update horizontal slab in H ==== * IF( WANTT ) THEN DO 80 KCOL = KBOT + 1, N, NH KLN = MIN( NH, N-KCOL+1 ) CALL DGEMM( 'C', 'N', JW, KLN, JW, ONE, V, LDV, $ H( KWTOP, KCOL ), LDH, ZERO, T, LDT ) CALL DLACPY( 'A', JW, KLN, T, LDT, H( KWTOP, KCOL ), $ LDH ) 80 CONTINUE END IF * * ==== Update vertical slab in Z ==== * IF( WANTZ ) THEN DO 90 KROW = ILOZ, IHIZ, NV KLN = MIN( NV, IHIZ-KROW+1 ) CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, Z( KROW, KWTOP ), $ LDZ, V, LDV, ZERO, WV, LDWV ) CALL DLACPY( 'A', KLN, JW, WV, LDWV, Z( KROW, KWTOP ), $ LDZ ) 90 CONTINUE END IF END IF * * ==== Return the number of deflations ... ==== * ND = JW - NS * * ==== ... and the number of shifts. (Subtracting * . INFQR from the spike length takes care * . of the case of a rare QR failure while * . calculating eigenvalues of the deflation * . window.) ==== * NS = NS - INFQR * * ==== Return optimal workspace. ==== * WORK( 1 ) = DBLE( LWKOPT ) * * ==== End of DLAQR2 ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR3( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, NS, ND, SR, SI, V, LDV, NH, T, $ LDT, NV, WV, LDWV, WORK, LWORK ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * -- June 2010 -- * * .. Scalar Arguments .. INTEGER IHIZ, ILOZ, KBOT, KTOP, LDH, LDT, LDV, LDWV, $ LDZ, LWORK, N, ND, NH, NS, NV, NW LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), T( LDT, * ), $ V( LDV, * ), WORK( * ), WV( LDWV, * ), $ Z( LDZ, * ) * .. * * ****************************************************************** * Aggressive early deflation: * * This subroutine accepts as input an upper Hessenberg matrix * H and performs an orthogonal similarity transformation * designed to detect and deflate fully converged eigenvalues from * a trailing principal submatrix. On output H has been over- * written by a new Hessenberg matrix that is a perturbation of * an orthogonal similarity transformation of H. It is to be * hoped that the final version of H has many zero subdiagonal * entries. * * ****************************************************************** * WANTT (input) LOGICAL * If .TRUE., then the Hessenberg matrix H is fully updated * so that the quasi-triangular Schur factor may be * computed (in cooperation with the calling subroutine). * If .FALSE., then only enough of H is updated to preserve * the eigenvalues. * * WANTZ (input) LOGICAL * If .TRUE., then the orthogonal matrix Z is updated so * so that the orthogonal Schur factor may be computed * (in cooperation with the calling subroutine). * If .FALSE., then Z is not referenced. * * N (input) INTEGER * The order of the matrix H and (if WANTZ is .TRUE.) the * order of the orthogonal matrix Z. * * KTOP (input) INTEGER * It is assumed that either KTOP = 1 or H(KTOP,KTOP-1)=0. * KBOT and KTOP together determine an isolated block * along the diagonal of the Hessenberg matrix. * * KBOT (input) INTEGER * It is assumed without a check that either * KBOT = N or H(KBOT+1,KBOT)=0. KBOT and KTOP together * determine an isolated block along the diagonal of the * Hessenberg matrix. * * NW (input) INTEGER * Deflation window size. 1 .LE. NW .LE. (KBOT-KTOP+1). * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On input the initial N-by-N section of H stores the * Hessenberg matrix undergoing aggressive early deflation. * On output H has been transformed by an orthogonal * similarity transformation, perturbed, and the returned * to Hessenberg form that (it is to be hoped) has some * zero subdiagonal entries. * * LDH (input) integer * Leading dimension of H just as declared in the calling * subroutine. N .LE. LDH * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,N) * IF WANTZ is .TRUE., then on output, the orthogonal * similarity transformation mentioned above has been * accumulated into Z(ILOZ:IHIZ,ILO:IHI) from the right. * If WANTZ is .FALSE., then Z is unreferenced. * * LDZ (input) integer * The leading dimension of Z just as declared in the * calling subroutine. 1 .LE. LDZ. * * NS (output) integer * The number of unconverged (ie approximate) eigenvalues * returned in SR and SI that may be used as shifts by the * calling subroutine. * * ND (output) integer * The number of converged eigenvalues uncovered by this * subroutine. * * SR (output) DOUBLE PRECISION array, dimension (KBOT) * SI (output) DOUBLE PRECISION array, dimension (KBOT) * On output, the real and imaginary parts of approximate * eigenvalues that may be used for shifts are stored in * SR(KBOT-ND-NS+1) through SR(KBOT-ND) and * SI(KBOT-ND-NS+1) through SI(KBOT-ND), respectively. * The real and imaginary parts of converged eigenvalues * are stored in SR(KBOT-ND+1) through SR(KBOT) and * SI(KBOT-ND+1) through SI(KBOT), respectively. * * V (workspace) DOUBLE PRECISION array, dimension (LDV,NW) * An NW-by-NW work array. * * LDV (input) integer scalar * The leading dimension of V just as declared in the * calling subroutine. NW .LE. LDV * * NH (input) integer scalar * The number of columns of T. NH.GE.NW. * * T (workspace) DOUBLE PRECISION array, dimension (LDT,NW) * * LDT (input) integer * The leading dimension of T just as declared in the * calling subroutine. NW .LE. LDT * * NV (input) integer * The number of rows of work array WV available for * workspace. NV.GE.NW. * * WV (workspace) DOUBLE PRECISION array, dimension (LDWV,NW) * * LDWV (input) integer * The leading dimension of W just as declared in the * calling subroutine. NW .LE. LDV * * WORK (workspace) DOUBLE PRECISION array, dimension (LWORK) * On exit, WORK(1) is set to an estimate of the optimal value * of LWORK for the given values of N, NW, KTOP and KBOT. * * LWORK (input) integer * The dimension of the work array WORK. LWORK = 2*NW * suffices, but greater efficiency may result from larger * values of LWORK. * * If LWORK = -1, then a workspace query is assumed; DLAQR3 * only estimates the optimal workspace size for the given * values of N, NW, KTOP and KBOT. The estimate is returned * in WORK(1). No error message related to LWORK is issued * by XERBLA. Neither H nor Z are accessed. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, BB, BETA, CC, CS, DD, EVI, EVK, FOO, S, $ SAFMAX, SAFMIN, SMLNUM, SN, TAU, ULP INTEGER I, IFST, ILST, INFO, INFQR, J, JW, K, KCOL, $ KEND, KLN, KROW, KWTOP, LTOP, LWK1, LWK2, LWK3, $ LWKOPT, NMIN LOGICAL BULGE, SORTED * .. * .. External Functions .. DOUBLE PRECISION DLAMCH INTEGER ILAENV EXTERNAL DLAMCH, ILAENV * .. * .. External Subroutines .. EXTERNAL DCOPY, DGEHRD, DGEMM, DLABAD, DLACPY, DLAHQR, $ DLANV2, DLAQR4, DLARF, DLARFG, DLASET, DORMHR, $ DTREXC * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, INT, MAX, MIN, SQRT * .. * .. Executable Statements .. * * ==== Estimate optimal workspace. ==== * JW = MIN( NW, KBOT-KTOP+1 ) IF( JW.LE.2 ) THEN LWKOPT = 1 ELSE * * ==== Workspace query call to DGEHRD ==== * CALL DGEHRD( JW, 1, JW-1, T, LDT, WORK, WORK, -1, INFO ) LWK1 = INT( WORK( 1 ) ) * * ==== Workspace query call to DORMHR ==== * CALL DORMHR( 'R', 'N', JW, JW, 1, JW-1, T, LDT, WORK, V, LDV, $ WORK, -1, INFO ) LWK2 = INT( WORK( 1 ) ) * * ==== Workspace query call to DLAQR4 ==== * CALL DLAQR4( .true., .true., JW, 1, JW, T, LDT, SR, SI, 1, JW, $ V, LDV, WORK, -1, INFQR ) LWK3 = INT( WORK( 1 ) ) * * ==== Optimal workspace ==== * LWKOPT = MAX( JW+MAX( LWK1, LWK2 ), LWK3 ) END IF * * ==== Quick return in case of workspace query. ==== * IF( LWORK.EQ.-1 ) THEN WORK( 1 ) = DBLE( LWKOPT ) RETURN END IF * * ==== Nothing to do ... * ... for an empty active block ... ==== NS = 0 ND = 0 WORK( 1 ) = ONE IF( KTOP.GT.KBOT ) $ RETURN * ... nor for an empty deflation window. ==== IF( NW.LT.1 ) $ RETURN * * ==== Machine constants ==== * SAFMIN = DLAMCH( 'SAFE MINIMUM' ) SAFMAX = ONE / SAFMIN CALL DLABAD( SAFMIN, SAFMAX ) ULP = DLAMCH( 'PRECISION' ) SMLNUM = SAFMIN*( DBLE( N ) / ULP ) * * ==== Setup deflation window ==== * JW = MIN( NW, KBOT-KTOP+1 ) KWTOP = KBOT - JW + 1 IF( KWTOP.EQ.KTOP ) THEN S = ZERO ELSE S = H( KWTOP, KWTOP-1 ) END IF * IF( KBOT.EQ.KWTOP ) THEN * * ==== 1-by-1 deflation window: not much to do ==== * SR( KWTOP ) = H( KWTOP, KWTOP ) SI( KWTOP ) = ZERO NS = 1 ND = 0 IF( ABS( S ).LE.MAX( SMLNUM, ULP*ABS( H( KWTOP, KWTOP ) ) ) ) $ THEN NS = 0 ND = 1 IF( KWTOP.GT.KTOP ) $ H( KWTOP, KWTOP-1 ) = ZERO END IF WORK( 1 ) = ONE RETURN END IF * * ==== Convert to spike-triangular form. (In case of a * . rare QR failure, this routine continues to do * . aggressive early deflation using that part of * . the deflation window that converged using INFQR * . here and there to keep track.) ==== * CALL DLACPY( 'U', JW, JW, H( KWTOP, KWTOP ), LDH, T, LDT ) CALL DCOPY( JW-1, H( KWTOP+1, KWTOP ), LDH+1, T( 2, 1 ), LDT+1 ) * CALL DLASET( 'A', JW, JW, ZERO, ONE, V, LDV ) NMIN = ILAENV( 12, 'DLAQR3', 'SV', JW, 1, JW, LWORK ) IF( JW.GT.NMIN ) THEN CALL DLAQR4( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), $ SI( KWTOP ), 1, JW, V, LDV, WORK, LWORK, INFQR ) ELSE CALL DLAHQR( .true., .true., JW, 1, JW, T, LDT, SR( KWTOP ), $ SI( KWTOP ), 1, JW, V, LDV, INFQR ) END IF * * ==== DTREXC needs a clean margin near the diagonal ==== * DO 10 J = 1, JW - 3 T( J+2, J ) = ZERO T( J+3, J ) = ZERO 10 CONTINUE IF( JW.GT.2 ) $ T( JW, JW-2 ) = ZERO * * ==== Deflation detection loop ==== * NS = JW ILST = INFQR + 1 20 CONTINUE IF( ILST.LE.NS ) THEN IF( NS.EQ.1 ) THEN BULGE = .FALSE. ELSE BULGE = T( NS, NS-1 ).NE.ZERO END IF * * ==== Small spike tip test for deflation ==== * IF( .NOT.BULGE ) THEN * * ==== Real eigenvalue ==== * FOO = ABS( T( NS, NS ) ) IF( FOO.EQ.ZERO ) $ FOO = ABS( S ) IF( ABS( S*V( 1, NS ) ).LE.MAX( SMLNUM, ULP*FOO ) ) THEN * * ==== Deflatable ==== * NS = NS - 1 ELSE * * ==== Undeflatable. Move it up out of the way. * . (DTREXC can not fail in this case.) ==== * IFST = NS CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) ILST = ILST + 1 END IF ELSE * * ==== Complex conjugate pair ==== * FOO = ABS( T( NS, NS ) ) + SQRT( ABS( T( NS, NS-1 ) ) )* $ SQRT( ABS( T( NS-1, NS ) ) ) IF( FOO.EQ.ZERO ) $ FOO = ABS( S ) IF( MAX( ABS( S*V( 1, NS ) ), ABS( S*V( 1, NS-1 ) ) ).LE. $ MAX( SMLNUM, ULP*FOO ) ) THEN * * ==== Deflatable ==== * NS = NS - 2 ELSE * * ==== Undeflatable. Move them up out of the way. * . Fortunately, DTREXC does the right thing with * . ILST in case of a rare exchange failure. ==== * IFST = NS CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) ILST = ILST + 2 END IF END IF * * ==== End deflation detection loop ==== * GO TO 20 END IF * * ==== Return to Hessenberg form ==== * IF( NS.EQ.0 ) $ S = ZERO * IF( NS.LT.JW ) THEN * * ==== sorting diagonal blocks of T improves accuracy for * . graded matrices. Bubble sort deals well with * . exchange failures. ==== * SORTED = .false. I = NS + 1 30 CONTINUE IF( SORTED ) $ GO TO 50 SORTED = .true. * KEND = I - 1 I = INFQR + 1 IF( I.EQ.NS ) THEN K = I + 1 ELSE IF( T( I+1, I ).EQ.ZERO ) THEN K = I + 1 ELSE K = I + 2 END IF 40 CONTINUE IF( K.LE.KEND ) THEN IF( K.EQ.I+1 ) THEN EVI = ABS( T( I, I ) ) ELSE EVI = ABS( T( I, I ) ) + SQRT( ABS( T( I+1, I ) ) )* $ SQRT( ABS( T( I, I+1 ) ) ) END IF * IF( K.EQ.KEND ) THEN EVK = ABS( T( K, K ) ) ELSE IF( T( K+1, K ).EQ.ZERO ) THEN EVK = ABS( T( K, K ) ) ELSE EVK = ABS( T( K, K ) ) + SQRT( ABS( T( K+1, K ) ) )* $ SQRT( ABS( T( K, K+1 ) ) ) END IF * IF( EVI.GE.EVK ) THEN I = K ELSE SORTED = .false. IFST = I ILST = K CALL DTREXC( 'V', JW, T, LDT, V, LDV, IFST, ILST, WORK, $ INFO ) IF( INFO.EQ.0 ) THEN I = ILST ELSE I = K END IF END IF IF( I.EQ.KEND ) THEN K = I + 1 ELSE IF( T( I+1, I ).EQ.ZERO ) THEN K = I + 1 ELSE K = I + 2 END IF GO TO 40 END IF GO TO 30 50 CONTINUE END IF * * ==== Restore shift/eigenvalue array from T ==== * I = JW 60 CONTINUE IF( I.GE.INFQR+1 ) THEN IF( I.EQ.INFQR+1 ) THEN SR( KWTOP+I-1 ) = T( I, I ) SI( KWTOP+I-1 ) = ZERO I = I - 1 ELSE IF( T( I, I-1 ).EQ.ZERO ) THEN SR( KWTOP+I-1 ) = T( I, I ) SI( KWTOP+I-1 ) = ZERO I = I - 1 ELSE AA = T( I-1, I-1 ) CC = T( I, I-1 ) BB = T( I-1, I ) DD = T( I, I ) CALL DLANV2( AA, BB, CC, DD, SR( KWTOP+I-2 ), $ SI( KWTOP+I-2 ), SR( KWTOP+I-1 ), $ SI( KWTOP+I-1 ), CS, SN ) I = I - 2 END IF GO TO 60 END IF * IF( NS.LT.JW .OR. S.EQ.ZERO ) THEN IF( NS.GT.1 .AND. S.NE.ZERO ) THEN * * ==== Reflect spike back into lower triangle ==== * CALL DCOPY( NS, V, LDV, WORK, 1 ) BETA = WORK( 1 ) CALL DLARFG( NS, BETA, WORK( 2 ), 1, TAU ) WORK( 1 ) = ONE * CALL DLASET( 'L', JW-2, JW-2, ZERO, ZERO, T( 3, 1 ), LDT ) * CALL DLARF( 'L', NS, JW, WORK, 1, TAU, T, LDT, $ WORK( JW+1 ) ) CALL DLARF( 'R', NS, NS, WORK, 1, TAU, T, LDT, $ WORK( JW+1 ) ) CALL DLARF( 'R', JW, NS, WORK, 1, TAU, V, LDV, $ WORK( JW+1 ) ) * CALL DGEHRD( JW, 1, NS, T, LDT, WORK, WORK( JW+1 ), $ LWORK-JW, INFO ) END IF * * ==== Copy updated reduced window into place ==== * IF( KWTOP.GT.1 ) $ H( KWTOP, KWTOP-1 ) = S*V( 1, 1 ) CALL DLACPY( 'U', JW, JW, T, LDT, H( KWTOP, KWTOP ), LDH ) CALL DCOPY( JW-1, T( 2, 1 ), LDT+1, H( KWTOP+1, KWTOP ), $ LDH+1 ) * * ==== Accumulate orthogonal matrix in order update * . H and Z, if requested. ==== * IF( NS.GT.1 .AND. S.NE.ZERO ) $ CALL DORMHR( 'R', 'N', JW, NS, 1, NS, T, LDT, WORK, V, LDV, $ WORK( JW+1 ), LWORK-JW, INFO ) * * ==== Update vertical slab in H ==== * IF( WANTT ) THEN LTOP = 1 ELSE LTOP = KTOP END IF DO 70 KROW = LTOP, KWTOP - 1, NV KLN = MIN( NV, KWTOP-KROW ) CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, H( KROW, KWTOP ), $ LDH, V, LDV, ZERO, WV, LDWV ) CALL DLACPY( 'A', KLN, JW, WV, LDWV, H( KROW, KWTOP ), LDH ) 70 CONTINUE * * ==== Update horizontal slab in H ==== * IF( WANTT ) THEN DO 80 KCOL = KBOT + 1, N, NH KLN = MIN( NH, N-KCOL+1 ) CALL DGEMM( 'C', 'N', JW, KLN, JW, ONE, V, LDV, $ H( KWTOP, KCOL ), LDH, ZERO, T, LDT ) CALL DLACPY( 'A', JW, KLN, T, LDT, H( KWTOP, KCOL ), $ LDH ) 80 CONTINUE END IF * * ==== Update vertical slab in Z ==== * IF( WANTZ ) THEN DO 90 KROW = ILOZ, IHIZ, NV KLN = MIN( NV, IHIZ-KROW+1 ) CALL DGEMM( 'N', 'N', KLN, JW, JW, ONE, Z( KROW, KWTOP ), $ LDZ, V, LDV, ZERO, WV, LDWV ) CALL DLACPY( 'A', KLN, JW, WV, LDWV, Z( KROW, KWTOP ), $ LDZ ) 90 CONTINUE END IF END IF * * ==== Return the number of deflations ... ==== * ND = JW - NS * * ==== ... and the number of shifts. (Subtracting * . INFQR from the spike length takes care * . of the case of a rare QR failure while * . calculating eigenvalues of the deflation * . window.) ==== * NS = NS - INFQR * * ==== Return optimal workspace. ==== * WORK( 1 ) = DBLE( LWKOPT ) * * ==== End of DLAQR3 ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR4( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, WORK, LWORK, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, IHIZ, ILO, ILOZ, INFO, LDH, LDZ, LWORK, N LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), WI( * ), WORK( * ), WR( * ), $ Z( LDZ, * ) * .. * * This subroutine implements one level of recursion for DLAQR0. * It is a complete implementation of the small bulge multi-shift * QR algorithm. It may be called by DLAQR0 and, for large enough * deflation window size, it may be called by DLAQR3. This * subroutine is identical to DLAQR0 except that it calls DLAQR2 * instead of DLAQR3. * * Purpose * ======= * * DLAQR4 computes the eigenvalues of a Hessenberg matrix H * and, optionally, the matrices T and Z from the Schur decomposition * H = Z T Z**T, where T is an upper quasi-triangular matrix (the * Schur form), and Z is the orthogonal matrix of Schur vectors. * * Optionally Z may be postmultiplied into an input orthogonal * matrix Q so that this routine can give the Schur factorization * of a matrix A which has been reduced to the Hessenberg form H * by the orthogonal matrix Q: A = Q*H*Q**T = (QZ)*T*(QZ)**T. * * Arguments * ========= * * WANTT (input) LOGICAL * = .TRUE. : the full Schur form T is required; * = .FALSE.: only eigenvalues are required. * * WANTZ (input) LOGICAL * = .TRUE. : the matrix of Schur vectors Z is required; * = .FALSE.: Schur vectors are not required. * * N (input) INTEGER * The order of the matrix H. N .GE. 0. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that H is already upper triangular in rows * and columns 1:ILO-1 and IHI+1:N and, if ILO.GT.1, * H(ILO,ILO-1) is zero. ILO and IHI are normally set by a * previous call to DGEBAL, and then passed to DGEHRD when the * matrix output by DGEBAL is reduced to Hessenberg form. * Otherwise, ILO and IHI should be set to 1 and N, * respectively. If N.GT.0, then 1.LE.ILO.LE.IHI.LE.N. * If N = 0, then ILO = 1 and IHI = 0. * * H (input/output) DOUBLE PRECISION array, dimension (LDH,N) * On entry, the upper Hessenberg matrix H. * On exit, if INFO = 0 and WANTT is .TRUE., then H contains * the upper quasi-triangular matrix T from the Schur * decomposition (the Schur form); 2-by-2 diagonal blocks * (corresponding to complex conjugate pairs of eigenvalues) * are returned in standard form, with H(i,i) = H(i+1,i+1) * and H(i+1,i)*H(i,i+1).LT.0. If INFO = 0 and WANTT is * .FALSE., then the contents of H are unspecified on exit. * (The output value of H when INFO.GT.0 is given under the * description of INFO below.) * * This subroutine may explicitly set H(i,j) = 0 for i.GT.j and * j = 1, 2, ... ILO-1 or j = IHI+1, IHI+2, ... N. * * LDH (input) INTEGER * The leading dimension of the array H. LDH .GE. max(1,N). * * WR (output) DOUBLE PRECISION array, dimension (IHI) * WI (output) DOUBLE PRECISION array, dimension (IHI) * The real and imaginary parts, respectively, of the computed * eigenvalues of H(ILO:IHI,ILO:IHI) are stored in WR(ILO:IHI) * and WI(ILO:IHI). If two eigenvalues are computed as a * complex conjugate pair, they are stored in consecutive * elements of WR and WI, say the i-th and (i+1)th, with * WI(i) .GT. 0 and WI(i+1) .LT. 0. If WANTT is .TRUE., then * the eigenvalues are stored in the same order as on the * diagonal of the Schur form returned in H, with * WR(i) = H(i,i) and, if H(i:i+1,i:i+1) is a 2-by-2 diagonal * block, WI(i) = sqrt(-H(i+1,i)*H(i,i+1)) and * WI(i+1) = -WI(i). * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. * 1 .LE. ILOZ .LE. ILO; IHI .LE. IHIZ .LE. N. * * Z (input/output) DOUBLE PRECISION array, dimension (LDZ,IHI) * If WANTZ is .FALSE., then Z is not referenced. * If WANTZ is .TRUE., then Z(ILO:IHI,ILOZ:IHIZ) is * replaced by Z(ILO:IHI,ILOZ:IHIZ)*U where U is the * orthogonal Schur factor of H(ILO:IHI,ILO:IHI). * (The output value of Z when INFO.GT.0 is given under * the description of INFO below.) * * LDZ (input) INTEGER * The leading dimension of the array Z. if WANTZ is .TRUE. * then LDZ.GE.MAX(1,IHIZ). Otherwize, LDZ.GE.1. * * WORK (workspace/output) DOUBLE PRECISION array, dimension LWORK * On exit, if LWORK = -1, WORK(1) returns an estimate of * the optimal value for LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK .GE. max(1,N) * is sufficient, but LWORK typically as large as 6*N may * be required for optimal performance. A workspace query * to determine the optimal workspace size is recommended. * * If LWORK = -1, then DLAQR4 does a workspace query. * In this case, DLAQR4 checks the input parameters and * estimates the optimal workspace size for the given * values of N, ILO and IHI. The estimate is returned * in WORK(1). No error message related to LWORK is * issued by XERBLA. Neither H nor Z are accessed. * * * INFO (output) INTEGER * = 0: successful exit * .GT. 0: if INFO = i, DLAQR4 failed to compute all of * the eigenvalues. Elements 1:ilo-1 and i+1:n of WR * and WI contain those eigenvalues which have been * successfully computed. (Failures are rare.) * * If INFO .GT. 0 and WANT is .FALSE., then on exit, * the remaining unconverged eigenvalues are the eigen- * values of the upper Hessenberg matrix rows and * columns ILO through INFO of the final, output * value of H. * * If INFO .GT. 0 and WANTT is .TRUE., then on exit * * (*) (initial value of H)*U = U*(final value of H) * * where U is an orthogonal matrix. The final * value of H is upper Hessenberg and quasi-triangular * in rows and columns INFO+1 through IHI. * * If INFO .GT. 0 and WANTZ is .TRUE., then on exit * * (final value of Z(ILO:IHI,ILOZ:IHIZ) * = (initial value of Z(ILO:IHI,ILOZ:IHIZ)*U * * where U is the orthogonal matrix in (*) (regard- * less of the value of WANTT.) * * If INFO .GT. 0 and WANTZ is .FALSE., then Z is not * accessed. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * References: * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part I: Maintaining Well Focused Shifts, and Level 3 * Performance, SIAM Journal of Matrix Analysis, volume 23, pages * 929--947, 2002. * * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part II: Aggressive Early Deflation, SIAM Journal * of Matrix Analysis, volume 23, pages 948--973, 2002. * * ================================================================ * .. Parameters .. * * ==== Matrices of order NTINY or smaller must be processed by * . DLAHQR because of insufficient subdiagonal scratch space. * . (This is a hard limit.) ==== INTEGER NTINY PARAMETER ( NTINY = 11 ) * * ==== Exceptional deflation windows: try to cure rare * . slow convergence by varying the size of the * . deflation window after KEXNW iterations. ==== INTEGER KEXNW PARAMETER ( KEXNW = 5 ) * * ==== Exceptional shifts: try to cure rare slow convergence * . with ad-hoc exceptional shifts every KEXSH iterations. * . ==== INTEGER KEXSH PARAMETER ( KEXSH = 6 ) * * ==== The constants WILK1 and WILK2 are used to form the * . exceptional shifts. ==== DOUBLE PRECISION WILK1, WILK2 PARAMETER ( WILK1 = 0.75d0, WILK2 = -0.4375d0 ) DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION AA, BB, CC, CS, DD, SN, SS, SWAP INTEGER I, INF, IT, ITMAX, K, KACC22, KBOT, KDU, KS, $ KT, KTOP, KU, KV, KWH, KWTOP, KWV, LD, LS, $ LWKOPT, NDEC, NDFL, NH, NHO, NIBBLE, NMIN, NS, $ NSMAX, NSR, NVE, NW, NWMAX, NWR, NWUPBD LOGICAL SORTED CHARACTER JBCMPZ*2 * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Local Arrays .. DOUBLE PRECISION ZDUM( 1, 1 ) * .. * .. External Subroutines .. EXTERNAL DLACPY, DLAHQR, DLANV2, DLAQR2, DLAQR5 * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, INT, MAX, MIN, MOD * .. * .. Executable Statements .. INFO = 0 * * ==== Quick return for N = 0: nothing to do. ==== * IF( N.EQ.0 ) THEN WORK( 1 ) = ONE RETURN END IF * IF( N.LE.NTINY ) THEN * * ==== Tiny matrices must use DLAHQR. ==== * LWKOPT = 1 IF( LWORK.NE.-1 ) $ CALL DLAHQR( WANTT, WANTZ, N, ILO, IHI, H, LDH, WR, WI, $ ILOZ, IHIZ, Z, LDZ, INFO ) ELSE * * ==== Use small bulge multi-shift QR with aggressive early * . deflation on larger-than-tiny matrices. ==== * * ==== Hope for the best. ==== * INFO = 0 * * ==== Set up job flags for ILAENV. ==== * IF( WANTT ) THEN JBCMPZ( 1: 1 ) = 'S' ELSE JBCMPZ( 1: 1 ) = 'E' END IF IF( WANTZ ) THEN JBCMPZ( 2: 2 ) = 'V' ELSE JBCMPZ( 2: 2 ) = 'N' END IF * * ==== NWR = recommended deflation window size. At this * . point, N .GT. NTINY = 11, so there is enough * . subdiagonal workspace for NWR.GE.2 as required. * . (In fact, there is enough subdiagonal space for * . NWR.GE.3.) ==== * NWR = ILAENV( 13, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) NWR = MAX( 2, NWR ) NWR = MIN( IHI-ILO+1, ( N-1 ) / 3, NWR ) * * ==== NSR = recommended number of simultaneous shifts. * . At this point N .GT. NTINY = 11, so there is at * . enough subdiagonal workspace for NSR to be even * . and greater than or equal to two as required. ==== * NSR = ILAENV( 15, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) NSR = MIN( NSR, ( N+6 ) / 9, IHI-ILO ) NSR = MAX( 2, NSR-MOD( NSR, 2 ) ) * * ==== Estimate optimal workspace ==== * * ==== Workspace query call to DLAQR2 ==== * CALL DLAQR2( WANTT, WANTZ, N, ILO, IHI, NWR+1, H, LDH, ILOZ, $ IHIZ, Z, LDZ, LS, LD, WR, WI, H, LDH, N, H, LDH, $ N, H, LDH, WORK, -1 ) * * ==== Optimal workspace = MAX(DLAQR5, DLAQR2) ==== * LWKOPT = MAX( 3*NSR / 2, INT( WORK( 1 ) ) ) * * ==== Quick return in case of workspace query. ==== * IF( LWORK.EQ.-1 ) THEN WORK( 1 ) = DBLE( LWKOPT ) RETURN END IF * * ==== DLAHQR/DLAQR0 crossover point ==== * NMIN = ILAENV( 12, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) NMIN = MAX( NTINY, NMIN ) * * ==== Nibble crossover point ==== * NIBBLE = ILAENV( 14, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) NIBBLE = MAX( 0, NIBBLE ) * * ==== Accumulate reflections during ttswp? Use block * . 2-by-2 structure during matrix-matrix multiply? ==== * KACC22 = ILAENV( 16, 'DLAQR4', JBCMPZ, N, ILO, IHI, LWORK ) KACC22 = MAX( 0, KACC22 ) KACC22 = MIN( 2, KACC22 ) * * ==== NWMAX = the largest possible deflation window for * . which there is sufficient workspace. ==== * NWMAX = MIN( ( N-1 ) / 3, LWORK / 2 ) NW = NWMAX * * ==== NSMAX = the Largest number of simultaneous shifts * . for which there is sufficient workspace. ==== * NSMAX = MIN( ( N+6 ) / 9, 2*LWORK / 3 ) NSMAX = NSMAX - MOD( NSMAX, 2 ) * * ==== NDFL: an iteration count restarted at deflation. ==== * NDFL = 1 * * ==== ITMAX = iteration limit ==== * ITMAX = MAX( 30, 2*KEXSH )*MAX( 10, ( IHI-ILO+1 ) ) * * ==== Last row and column in the active block ==== * KBOT = IHI * * ==== Main Loop ==== * DO 80 IT = 1, ITMAX * * ==== Done when KBOT falls below ILO ==== * IF( KBOT.LT.ILO ) $ GO TO 90 * * ==== Locate active block ==== * DO 10 K = KBOT, ILO + 1, -1 IF( H( K, K-1 ).EQ.ZERO ) $ GO TO 20 10 CONTINUE K = ILO 20 CONTINUE KTOP = K * * ==== Select deflation window size: * . Typical Case: * . If possible and advisable, nibble the entire * . active block. If not, use size MIN(NWR,NWMAX) * . or MIN(NWR+1,NWMAX) depending upon which has * . the smaller corresponding subdiagonal entry * . (a heuristic). * . * . Exceptional Case: * . If there have been no deflations in KEXNW or * . more iterations, then vary the deflation window * . size. At first, because, larger windows are, * . in general, more powerful than smaller ones, * . rapidly increase the window to the maximum possible. * . Then, gradually reduce the window size. ==== * NH = KBOT - KTOP + 1 NWUPBD = MIN( NH, NWMAX ) IF( NDFL.LT.KEXNW ) THEN NW = MIN( NWUPBD, NWR ) ELSE NW = MIN( NWUPBD, 2*NW ) END IF IF( NW.LT.NWMAX ) THEN IF( NW.GE.NH-1 ) THEN NW = NH ELSE KWTOP = KBOT - NW + 1 IF( ABS( H( KWTOP, KWTOP-1 ) ).GT. $ ABS( H( KWTOP-1, KWTOP-2 ) ) )NW = NW + 1 END IF END IF IF( NDFL.LT.KEXNW ) THEN NDEC = -1 ELSE IF( NDEC.GE.0 .OR. NW.GE.NWUPBD ) THEN NDEC = NDEC + 1 IF( NW-NDEC.LT.2 ) $ NDEC = 0 NW = NW - NDEC END IF * * ==== Aggressive early deflation: * . split workspace under the subdiagonal into * . - an nw-by-nw work array V in the lower * . left-hand-corner, * . - an NW-by-at-least-NW-but-more-is-better * . (NW-by-NHO) horizontal work array along * . the bottom edge, * . - an at-least-NW-but-more-is-better (NHV-by-NW) * . vertical work array along the left-hand-edge. * . ==== * KV = N - NW + 1 KT = NW + 1 NHO = ( N-NW-1 ) - KT + 1 KWV = NW + 2 NVE = ( N-NW ) - KWV + 1 * * ==== Aggressive early deflation ==== * CALL DLAQR2( WANTT, WANTZ, N, KTOP, KBOT, NW, H, LDH, ILOZ, $ IHIZ, Z, LDZ, LS, LD, WR, WI, H( KV, 1 ), LDH, $ NHO, H( KV, KT ), LDH, NVE, H( KWV, 1 ), LDH, $ WORK, LWORK ) * * ==== Adjust KBOT accounting for new deflations. ==== * KBOT = KBOT - LD * * ==== KS points to the shifts. ==== * KS = KBOT - LS + 1 * * ==== Skip an expensive QR sweep if there is a (partly * . heuristic) reason to expect that many eigenvalues * . will deflate without it. Here, the QR sweep is * . skipped if many eigenvalues have just been deflated * . or if the remaining active block is small. * IF( ( LD.EQ.0 ) .OR. ( ( 100*LD.LE.NW*NIBBLE ) .AND. ( KBOT- $ KTOP+1.GT.MIN( NMIN, NWMAX ) ) ) ) THEN * * ==== NS = nominal number of simultaneous shifts. * . This may be lowered (slightly) if DLAQR2 * . did not provide that many shifts. ==== * NS = MIN( NSMAX, NSR, MAX( 2, KBOT-KTOP ) ) NS = NS - MOD( NS, 2 ) * * ==== If there have been no deflations * . in a multiple of KEXSH iterations, * . then try exceptional shifts. * . Otherwise use shifts provided by * . DLAQR2 above or from the eigenvalues * . of a trailing principal submatrix. ==== * IF( MOD( NDFL, KEXSH ).EQ.0 ) THEN KS = KBOT - NS + 1 DO 30 I = KBOT, MAX( KS+1, KTOP+2 ), -2 SS = ABS( H( I, I-1 ) ) + ABS( H( I-1, I-2 ) ) AA = WILK1*SS + H( I, I ) BB = SS CC = WILK2*SS DD = AA CALL DLANV2( AA, BB, CC, DD, WR( I-1 ), WI( I-1 ), $ WR( I ), WI( I ), CS, SN ) 30 CONTINUE IF( KS.EQ.KTOP ) THEN WR( KS+1 ) = H( KS+1, KS+1 ) WI( KS+1 ) = ZERO WR( KS ) = WR( KS+1 ) WI( KS ) = WI( KS+1 ) END IF ELSE * * ==== Got NS/2 or fewer shifts? Use DLAHQR * . on a trailing principal submatrix to * . get more. (Since NS.LE.NSMAX.LE.(N+6)/9, * . there is enough space below the subdiagonal * . to fit an NS-by-NS scratch array.) ==== * IF( KBOT-KS+1.LE.NS / 2 ) THEN KS = KBOT - NS + 1 KT = N - NS + 1 CALL DLACPY( 'A', NS, NS, H( KS, KS ), LDH, $ H( KT, 1 ), LDH ) CALL DLAHQR( .false., .false., NS, 1, NS, $ H( KT, 1 ), LDH, WR( KS ), WI( KS ), $ 1, 1, ZDUM, 1, INF ) KS = KS + INF * * ==== In case of a rare QR failure use * . eigenvalues of the trailing 2-by-2 * . principal submatrix. ==== * IF( KS.GE.KBOT ) THEN AA = H( KBOT-1, KBOT-1 ) CC = H( KBOT, KBOT-1 ) BB = H( KBOT-1, KBOT ) DD = H( KBOT, KBOT ) CALL DLANV2( AA, BB, CC, DD, WR( KBOT-1 ), $ WI( KBOT-1 ), WR( KBOT ), $ WI( KBOT ), CS, SN ) KS = KBOT - 1 END IF END IF * IF( KBOT-KS+1.GT.NS ) THEN * * ==== Sort the shifts (Helps a little) * . Bubble sort keeps complex conjugate * . pairs together. ==== * SORTED = .false. DO 50 K = KBOT, KS + 1, -1 IF( SORTED ) $ GO TO 60 SORTED = .true. DO 40 I = KS, K - 1 IF( ABS( WR( I ) )+ABS( WI( I ) ).LT. $ ABS( WR( I+1 ) )+ABS( WI( I+1 ) ) ) THEN SORTED = .false. * SWAP = WR( I ) WR( I ) = WR( I+1 ) WR( I+1 ) = SWAP * SWAP = WI( I ) WI( I ) = WI( I+1 ) WI( I+1 ) = SWAP END IF 40 CONTINUE 50 CONTINUE 60 CONTINUE END IF * * ==== Shuffle shifts into pairs of real shifts * . and pairs of complex conjugate shifts * . assuming complex conjugate shifts are * . already adjacent to one another. (Yes, * . they are.) ==== * DO 70 I = KBOT, KS + 2, -2 IF( WI( I ).NE.-WI( I-1 ) ) THEN * SWAP = WR( I ) WR( I ) = WR( I-1 ) WR( I-1 ) = WR( I-2 ) WR( I-2 ) = SWAP * SWAP = WI( I ) WI( I ) = WI( I-1 ) WI( I-1 ) = WI( I-2 ) WI( I-2 ) = SWAP END IF 70 CONTINUE END IF * * ==== If there are only two shifts and both are * . real, then use only one. ==== * IF( KBOT-KS+1.EQ.2 ) THEN IF( WI( KBOT ).EQ.ZERO ) THEN IF( ABS( WR( KBOT )-H( KBOT, KBOT ) ).LT. $ ABS( WR( KBOT-1 )-H( KBOT, KBOT ) ) ) THEN WR( KBOT-1 ) = WR( KBOT ) ELSE WR( KBOT ) = WR( KBOT-1 ) END IF END IF END IF * * ==== Use up to NS of the the smallest magnatiude * . shifts. If there aren't NS shifts available, * . then use them all, possibly dropping one to * . make the number of shifts even. ==== * NS = MIN( NS, KBOT-KS+1 ) NS = NS - MOD( NS, 2 ) KS = KBOT - NS + 1 * * ==== Small-bulge multi-shift QR sweep: * . split workspace under the subdiagonal into * . - a KDU-by-KDU work array U in the lower * . left-hand-corner, * . - a KDU-by-at-least-KDU-but-more-is-better * . (KDU-by-NHo) horizontal work array WH along * . the bottom edge, * . - and an at-least-KDU-but-more-is-better-by-KDU * . (NVE-by-KDU) vertical work WV arrow along * . the left-hand-edge. ==== * KDU = 3*NS - 3 KU = N - KDU + 1 KWH = KDU + 1 NHO = ( N-KDU+1-4 ) - ( KDU+1 ) + 1 KWV = KDU + 4 NVE = N - KDU - KWV + 1 * * ==== Small-bulge multi-shift QR sweep ==== * CALL DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NS, $ WR( KS ), WI( KS ), H, LDH, ILOZ, IHIZ, Z, $ LDZ, WORK, 3, H( KU, 1 ), LDH, NVE, $ H( KWV, 1 ), LDH, NHO, H( KU, KWH ), LDH ) END IF * * ==== Note progress (or the lack of it). ==== * IF( LD.GT.0 ) THEN NDFL = 1 ELSE NDFL = NDFL + 1 END IF * * ==== End of main loop ==== 80 CONTINUE * * ==== Iteration limit exceeded. Set INFO to show where * . the problem occurred and exit. ==== * INFO = KBOT 90 CONTINUE END IF * * ==== Return the optimal value of LWORK. ==== * WORK( 1 ) = DBLE( LWKOPT ) * * ==== End of DLAQR4 ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLAQR5( WANTT, WANTZ, KACC22, N, KTOP, KBOT, NSHFTS, $ SR, SI, H, LDH, ILOZ, IHIZ, Z, LDZ, V, LDV, U, $ LDU, NV, WV, LDWV, NH, WH, LDWH ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHIZ, ILOZ, KACC22, KBOT, KTOP, LDH, LDU, LDV, $ LDWH, LDWV, LDZ, N, NH, NSHFTS, NV LOGICAL WANTT, WANTZ * .. * .. Array Arguments .. DOUBLE PRECISION H( LDH, * ), SI( * ), SR( * ), U( LDU, * ), $ V( LDV, * ), WH( LDWH, * ), WV( LDWV, * ), $ Z( LDZ, * ) * .. * * This auxiliary subroutine called by DLAQR0 performs a * single small-bulge multi-shift QR sweep. * * WANTT (input) logical scalar * WANTT = .true. if the quasi-triangular Schur factor * is being computed. WANTT is set to .false. otherwise. * * WANTZ (input) logical scalar * WANTZ = .true. if the orthogonal Schur factor is being * computed. WANTZ is set to .false. otherwise. * * KACC22 (input) integer with value 0, 1, or 2. * Specifies the computation mode of far-from-diagonal * orthogonal updates. * = 0: DLAQR5 does not accumulate reflections and does not * use matrix-matrix multiply to update far-from-diagonal * matrix entries. * = 1: DLAQR5 accumulates reflections and uses matrix-matrix * multiply to update the far-from-diagonal matrix entries. * = 2: DLAQR5 accumulates reflections, uses matrix-matrix * multiply to update the far-from-diagonal matrix entries, * and takes advantage of 2-by-2 block structure during * matrix multiplies. * * N (input) integer scalar * N is the order of the Hessenberg matrix H upon which this * subroutine operates. * * KTOP (input) integer scalar * KBOT (input) integer scalar * These are the first and last rows and columns of an * isolated diagonal block upon which the QR sweep is to be * applied. It is assumed without a check that * either KTOP = 1 or H(KTOP,KTOP-1) = 0 * and * either KBOT = N or H(KBOT+1,KBOT) = 0. * * NSHFTS (input) integer scalar * NSHFTS gives the number of simultaneous shifts. NSHFTS * must be positive and even. * * SR (input/output) DOUBLE PRECISION array of size (NSHFTS) * SI (input/output) DOUBLE PRECISION array of size (NSHFTS) * SR contains the real parts and SI contains the imaginary * parts of the NSHFTS shifts of origin that define the * multi-shift QR sweep. On output SR and SI may be * reordered. * * H (input/output) DOUBLE PRECISION array of size (LDH,N) * On input H contains a Hessenberg matrix. On output a * multi-shift QR sweep with shifts SR(J)+i*SI(J) is applied * to the isolated diagonal block in rows and columns KTOP * through KBOT. * * LDH (input) integer scalar * LDH is the leading dimension of H just as declared in the * calling procedure. LDH.GE.MAX(1,N). * * ILOZ (input) INTEGER * IHIZ (input) INTEGER * Specify the rows of Z to which transformations must be * applied if WANTZ is .TRUE.. 1 .LE. ILOZ .LE. IHIZ .LE. N * * Z (input/output) DOUBLE PRECISION array of size (LDZ,IHI) * If WANTZ = .TRUE., then the QR Sweep orthogonal * similarity transformation is accumulated into * Z(ILOZ:IHIZ,ILO:IHI) from the right. * If WANTZ = .FALSE., then Z is unreferenced. * * LDZ (input) integer scalar * LDA is the leading dimension of Z just as declared in * the calling procedure. LDZ.GE.N. * * V (workspace) DOUBLE PRECISION array of size (LDV,NSHFTS/2) * * LDV (input) integer scalar * LDV is the leading dimension of V as declared in the * calling procedure. LDV.GE.3. * * U (workspace) DOUBLE PRECISION array of size * (LDU,3*NSHFTS-3) * * LDU (input) integer scalar * LDU is the leading dimension of U just as declared in the * in the calling subroutine. LDU.GE.3*NSHFTS-3. * * NH (input) integer scalar * NH is the number of columns in array WH available for * workspace. NH.GE.1. * * WH (workspace) DOUBLE PRECISION array of size (LDWH,NH) * * LDWH (input) integer scalar * Leading dimension of WH just as declared in the * calling procedure. LDWH.GE.3*NSHFTS-3. * * NV (input) integer scalar * NV is the number of rows in WV agailable for workspace. * NV.GE.1. * * WV (workspace) DOUBLE PRECISION array of size * (LDWV,3*NSHFTS-3) * * LDWV (input) integer scalar * LDWV is the leading dimension of WV as declared in the * in the calling subroutine. LDWV.GE.NV. * * ================================================================ * Based on contributions by * Karen Braman and Ralph Byers, Department of Mathematics, * University of Kansas, USA * * ================================================================ * Reference: * * K. Braman, R. Byers and R. Mathias, The Multi-Shift QR * Algorithm Part I: Maintaining Well Focused Shifts, and * Level 3 Performance, SIAM Journal of Matrix Analysis, * volume 23, pages 929--947, 2002. * * ================================================================ * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0d0, ONE = 1.0d0 ) * .. * .. Local Scalars .. DOUBLE PRECISION ALPHA, BETA, H11, H12, H21, H22, REFSUM, $ SAFMAX, SAFMIN, SCL, SMLNUM, SWAP, TST1, TST2, $ ULP INTEGER I, I2, I4, INCOL, J, J2, J4, JBOT, JCOL, JLEN, $ JROW, JTOP, K, K1, KDU, KMS, KNZ, KRCOL, KZS, $ M, M22, MBOT, MEND, MSTART, MTOP, NBMPS, NDCOL, $ NS, NU LOGICAL ACCUM, BLK22, BMP22 * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. Intrinsic Functions .. * INTRINSIC ABS, DBLE, MAX, MIN, MOD * .. * .. Local Arrays .. DOUBLE PRECISION VT( 3 ) * .. * .. External Subroutines .. EXTERNAL DGEMM, DLABAD, DLACPY, DLAQR1, DLARFG, DLASET, $ DTRMM * .. * .. Executable Statements .. * * ==== If there are no shifts, then there is nothing to do. ==== * IF( NSHFTS.LT.2 ) $ RETURN * * ==== If the active block is empty or 1-by-1, then there * . is nothing to do. ==== * IF( KTOP.GE.KBOT ) $ RETURN * * ==== Shuffle shifts into pairs of real shifts and pairs * . of complex conjugate shifts assuming complex * . conjugate shifts are already adjacent to one * . another. ==== * DO 10 I = 1, NSHFTS - 2, 2 IF( SI( I ).NE.-SI( I+1 ) ) THEN * SWAP = SR( I ) SR( I ) = SR( I+1 ) SR( I+1 ) = SR( I+2 ) SR( I+2 ) = SWAP * SWAP = SI( I ) SI( I ) = SI( I+1 ) SI( I+1 ) = SI( I+2 ) SI( I+2 ) = SWAP END IF 10 CONTINUE * * ==== NSHFTS is supposed to be even, but if it is odd, * . then simply reduce it by one. The shuffle above * . ensures that the dropped shift is real and that * . the remaining shifts are paired. ==== * NS = NSHFTS - MOD( NSHFTS, 2 ) * * ==== Machine constants for deflation ==== * SAFMIN = DLAMCH( 'SAFE MINIMUM' ) SAFMAX = ONE / SAFMIN CALL DLABAD( SAFMIN, SAFMAX ) ULP = DLAMCH( 'PRECISION' ) SMLNUM = SAFMIN*( DBLE( N ) / ULP ) * * ==== Use accumulated reflections to update far-from-diagonal * . entries ? ==== * ACCUM = ( KACC22.EQ.1 ) .OR. ( KACC22.EQ.2 ) * * ==== If so, exploit the 2-by-2 block structure? ==== * BLK22 = ( NS.GT.2 ) .AND. ( KACC22.EQ.2 ) * * ==== clear trash ==== * IF( KTOP+2.LE.KBOT ) $ H( KTOP+2, KTOP ) = ZERO * * ==== NBMPS = number of 2-shift bulges in the chain ==== * NBMPS = NS / 2 * * ==== KDU = width of slab ==== * KDU = 6*NBMPS - 3 * * ==== Create and chase chains of NBMPS bulges ==== * DO 220 INCOL = 3*( 1-NBMPS ) + KTOP - 1, KBOT - 2, 3*NBMPS - 2 NDCOL = INCOL + KDU IF( ACCUM ) $ CALL DLASET( 'ALL', KDU, KDU, ZERO, ONE, U, LDU ) * * ==== Near-the-diagonal bulge chase. The following loop * . performs the near-the-diagonal part of a small bulge * . multi-shift QR sweep. Each 6*NBMPS-2 column diagonal * . chunk extends from column INCOL to column NDCOL * . (including both column INCOL and column NDCOL). The * . following loop chases a 3*NBMPS column long chain of * . NBMPS bulges 3*NBMPS-2 columns to the right. (INCOL * . may be less than KTOP and and NDCOL may be greater than * . KBOT indicating phantom columns from which to chase * . bulges before they are actually introduced or to which * . to chase bulges beyond column KBOT.) ==== * DO 150 KRCOL = INCOL, MIN( INCOL+3*NBMPS-3, KBOT-2 ) * * ==== Bulges number MTOP to MBOT are active double implicit * . shift bulges. There may or may not also be small * . 2-by-2 bulge, if there is room. The inactive bulges * . (if any) must wait until the active bulges have moved * . down the diagonal to make room. The phantom matrix * . paradigm described above helps keep track. ==== * MTOP = MAX( 1, ( ( KTOP-1 )-KRCOL+2 ) / 3+1 ) MBOT = MIN( NBMPS, ( KBOT-KRCOL ) / 3 ) M22 = MBOT + 1 BMP22 = ( MBOT.LT.NBMPS ) .AND. ( KRCOL+3*( M22-1 ) ).EQ. $ ( KBOT-2 ) * * ==== Generate reflections to chase the chain right * . one column. (The minimum value of K is KTOP-1.) ==== * DO 20 M = MTOP, MBOT K = KRCOL + 3*( M-1 ) IF( K.EQ.KTOP-1 ) THEN CALL DLAQR1( 3, H( KTOP, KTOP ), LDH, SR( 2*M-1 ), $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), $ V( 1, M ) ) ALPHA = V( 1, M ) CALL DLARFG( 3, ALPHA, V( 2, M ), 1, V( 1, M ) ) ELSE BETA = H( K+1, K ) V( 2, M ) = H( K+2, K ) V( 3, M ) = H( K+3, K ) CALL DLARFG( 3, BETA, V( 2, M ), 1, V( 1, M ) ) * * ==== A Bulge may collapse because of vigilant * . deflation or destructive underflow. In the * . underflow case, try the two-small-subdiagonals * . trick to try to reinflate the bulge. ==== * IF( H( K+3, K ).NE.ZERO .OR. H( K+3, K+1 ).NE. $ ZERO .OR. H( K+3, K+2 ).EQ.ZERO ) THEN * * ==== Typical case: not collapsed (yet). ==== * H( K+1, K ) = BETA H( K+2, K ) = ZERO H( K+3, K ) = ZERO ELSE * * ==== Atypical case: collapsed. Attempt to * . reintroduce ignoring H(K+1,K) and H(K+2,K). * . If the fill resulting from the new * . reflector is too large, then abandon it. * . Otherwise, use the new one. ==== * CALL DLAQR1( 3, H( K+1, K+1 ), LDH, SR( 2*M-1 ), $ SI( 2*M-1 ), SR( 2*M ), SI( 2*M ), $ VT ) ALPHA = VT( 1 ) CALL DLARFG( 3, ALPHA, VT( 2 ), 1, VT( 1 ) ) REFSUM = VT( 1 )*( H( K+1, K )+VT( 2 )* $ H( K+2, K ) ) * IF( ABS( H( K+2, K )-REFSUM*VT( 2 ) )+ $ ABS( REFSUM*VT( 3 ) ).GT.ULP* $ ( ABS( H( K, K ) )+ABS( H( K+1, $ K+1 ) )+ABS( H( K+2, K+2 ) ) ) ) THEN * * ==== Starting a new bulge here would * . create non-negligible fill. Use * . the old one with trepidation. ==== * H( K+1, K ) = BETA H( K+2, K ) = ZERO H( K+3, K ) = ZERO ELSE * * ==== Stating a new bulge here would * . create only negligible fill. * . Replace the old reflector with * . the new one. ==== * H( K+1, K ) = H( K+1, K ) - REFSUM H( K+2, K ) = ZERO H( K+3, K ) = ZERO V( 1, M ) = VT( 1 ) V( 2, M ) = VT( 2 ) V( 3, M ) = VT( 3 ) END IF END IF END IF 20 CONTINUE * * ==== Generate a 2-by-2 reflection, if needed. ==== * K = KRCOL + 3*( M22-1 ) IF( BMP22 ) THEN IF( K.EQ.KTOP-1 ) THEN CALL DLAQR1( 2, H( K+1, K+1 ), LDH, SR( 2*M22-1 ), $ SI( 2*M22-1 ), SR( 2*M22 ), SI( 2*M22 ), $ V( 1, M22 ) ) BETA = V( 1, M22 ) CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) ELSE BETA = H( K+1, K ) V( 2, M22 ) = H( K+2, K ) CALL DLARFG( 2, BETA, V( 2, M22 ), 1, V( 1, M22 ) ) H( K+1, K ) = BETA H( K+2, K ) = ZERO END IF END IF * * ==== Multiply H by reflections from the left ==== * IF( ACCUM ) THEN JBOT = MIN( NDCOL, KBOT ) ELSE IF( WANTT ) THEN JBOT = N ELSE JBOT = KBOT END IF DO 40 J = MAX( KTOP, KRCOL ), JBOT MEND = MIN( MBOT, ( J-KRCOL+2 ) / 3 ) DO 30 M = MTOP, MEND K = KRCOL + 3*( M-1 ) REFSUM = V( 1, M )*( H( K+1, J )+V( 2, M )* $ H( K+2, J )+V( 3, M )*H( K+3, J ) ) H( K+1, J ) = H( K+1, J ) - REFSUM H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M ) H( K+3, J ) = H( K+3, J ) - REFSUM*V( 3, M ) 30 CONTINUE 40 CONTINUE IF( BMP22 ) THEN K = KRCOL + 3*( M22-1 ) DO 50 J = MAX( K+1, KTOP ), JBOT REFSUM = V( 1, M22 )*( H( K+1, J )+V( 2, M22 )* $ H( K+2, J ) ) H( K+1, J ) = H( K+1, J ) - REFSUM H( K+2, J ) = H( K+2, J ) - REFSUM*V( 2, M22 ) 50 CONTINUE END IF * * ==== Multiply H by reflections from the right. * . Delay filling in the last row until the * . vigilant deflation check is complete. ==== * IF( ACCUM ) THEN JTOP = MAX( KTOP, INCOL ) ELSE IF( WANTT ) THEN JTOP = 1 ELSE JTOP = KTOP END IF DO 90 M = MTOP, MBOT IF( V( 1, M ).NE.ZERO ) THEN K = KRCOL + 3*( M-1 ) DO 60 J = JTOP, MIN( KBOT, K+3 ) REFSUM = V( 1, M )*( H( J, K+1 )+V( 2, M )* $ H( J, K+2 )+V( 3, M )*H( J, K+3 ) ) H( J, K+1 ) = H( J, K+1 ) - REFSUM H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M ) H( J, K+3 ) = H( J, K+3 ) - REFSUM*V( 3, M ) 60 CONTINUE * IF( ACCUM ) THEN * * ==== Accumulate U. (If necessary, update Z later * . with with an efficient matrix-matrix * . multiply.) ==== * KMS = K - INCOL DO 70 J = MAX( 1, KTOP-INCOL ), KDU REFSUM = V( 1, M )*( U( J, KMS+1 )+V( 2, M )* $ U( J, KMS+2 )+V( 3, M )*U( J, KMS+3 ) ) U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM U( J, KMS+2 ) = U( J, KMS+2 ) - REFSUM*V( 2, M ) U( J, KMS+3 ) = U( J, KMS+3 ) - REFSUM*V( 3, M ) 70 CONTINUE ELSE IF( WANTZ ) THEN * * ==== U is not accumulated, so update Z * . now by multiplying by reflections * . from the right. ==== * DO 80 J = ILOZ, IHIZ REFSUM = V( 1, M )*( Z( J, K+1 )+V( 2, M )* $ Z( J, K+2 )+V( 3, M )*Z( J, K+3 ) ) Z( J, K+1 ) = Z( J, K+1 ) - REFSUM Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M ) Z( J, K+3 ) = Z( J, K+3 ) - REFSUM*V( 3, M ) 80 CONTINUE END IF END IF 90 CONTINUE * * ==== Special case: 2-by-2 reflection (if needed) ==== * K = KRCOL + 3*( M22-1 ) IF( BMP22 .AND. ( V( 1, M22 ).NE.ZERO ) ) THEN DO 100 J = JTOP, MIN( KBOT, K+3 ) REFSUM = V( 1, M22 )*( H( J, K+1 )+V( 2, M22 )* $ H( J, K+2 ) ) H( J, K+1 ) = H( J, K+1 ) - REFSUM H( J, K+2 ) = H( J, K+2 ) - REFSUM*V( 2, M22 ) 100 CONTINUE * IF( ACCUM ) THEN KMS = K - INCOL DO 110 J = MAX( 1, KTOP-INCOL ), KDU REFSUM = V( 1, M22 )*( U( J, KMS+1 )+V( 2, M22 )* $ U( J, KMS+2 ) ) U( J, KMS+1 ) = U( J, KMS+1 ) - REFSUM U( J, KMS+2 ) = U( J, KMS+2 ) - REFSUM*V( 2, M22 ) 110 CONTINUE ELSE IF( WANTZ ) THEN DO 120 J = ILOZ, IHIZ REFSUM = V( 1, M22 )*( Z( J, K+1 )+V( 2, M22 )* $ Z( J, K+2 ) ) Z( J, K+1 ) = Z( J, K+1 ) - REFSUM Z( J, K+2 ) = Z( J, K+2 ) - REFSUM*V( 2, M22 ) 120 CONTINUE END IF END IF * * ==== Vigilant deflation check ==== * MSTART = MTOP IF( KRCOL+3*( MSTART-1 ).LT.KTOP ) $ MSTART = MSTART + 1 MEND = MBOT IF( BMP22 ) $ MEND = MEND + 1 IF( KRCOL.EQ.KBOT-2 ) $ MEND = MEND + 1 DO 130 M = MSTART, MEND K = MIN( KBOT-1, KRCOL+3*( M-1 ) ) * * ==== The following convergence test requires that * . the tradition small-compared-to-nearby-diagonals * . criterion and the Ahues & Tisseur (LAWN 122, 1997) * . criteria both be satisfied. The latter improves * . accuracy in some examples. Falling back on an * . alternate convergence criterion when TST1 or TST2 * . is zero (as done here) is traditional but probably * . unnecessary. ==== * IF( H( K+1, K ).NE.ZERO ) THEN TST1 = ABS( H( K, K ) ) + ABS( H( K+1, K+1 ) ) IF( TST1.EQ.ZERO ) THEN IF( K.GE.KTOP+1 ) $ TST1 = TST1 + ABS( H( K, K-1 ) ) IF( K.GE.KTOP+2 ) $ TST1 = TST1 + ABS( H( K, K-2 ) ) IF( K.GE.KTOP+3 ) $ TST1 = TST1 + ABS( H( K, K-3 ) ) IF( K.LE.KBOT-2 ) $ TST1 = TST1 + ABS( H( K+2, K+1 ) ) IF( K.LE.KBOT-3 ) $ TST1 = TST1 + ABS( H( K+3, K+1 ) ) IF( K.LE.KBOT-4 ) $ TST1 = TST1 + ABS( H( K+4, K+1 ) ) END IF IF( ABS( H( K+1, K ) ).LE.MAX( SMLNUM, ULP*TST1 ) ) $ THEN H12 = MAX( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) H21 = MIN( ABS( H( K+1, K ) ), ABS( H( K, K+1 ) ) ) H11 = MAX( ABS( H( K+1, K+1 ) ), $ ABS( H( K, K )-H( K+1, K+1 ) ) ) H22 = MIN( ABS( H( K+1, K+1 ) ), $ ABS( H( K, K )-H( K+1, K+1 ) ) ) SCL = H11 + H12 TST2 = H22*( H11 / SCL ) * IF( TST2.EQ.ZERO .OR. H21*( H12 / SCL ).LE. $ MAX( SMLNUM, ULP*TST2 ) )H( K+1, K ) = ZERO END IF END IF 130 CONTINUE * * ==== Fill in the last row of each bulge. ==== * MEND = MIN( NBMPS, ( KBOT-KRCOL-1 ) / 3 ) DO 140 M = MTOP, MEND K = KRCOL + 3*( M-1 ) REFSUM = V( 1, M )*V( 3, M )*H( K+4, K+3 ) H( K+4, K+1 ) = -REFSUM H( K+4, K+2 ) = -REFSUM*V( 2, M ) H( K+4, K+3 ) = H( K+4, K+3 ) - REFSUM*V( 3, M ) 140 CONTINUE * * ==== End of near-the-diagonal bulge chase. ==== * 150 CONTINUE * * ==== Use U (if accumulated) to update far-from-diagonal * . entries in H. If required, use U to update Z as * . well. ==== * IF( ACCUM ) THEN IF( WANTT ) THEN JTOP = 1 JBOT = N ELSE JTOP = KTOP JBOT = KBOT END IF IF( ( .NOT.BLK22 ) .OR. ( INCOL.LT.KTOP ) .OR. $ ( NDCOL.GT.KBOT ) .OR. ( NS.LE.2 ) ) THEN * * ==== Updates not exploiting the 2-by-2 block * . structure of U. K1 and NU keep track of * . the location and size of U in the special * . cases of introducing bulges and chasing * . bulges off the bottom. In these special * . cases and in case the number of shifts * . is NS = 2, there is no 2-by-2 block * . structure to exploit. ==== * K1 = MAX( 1, KTOP-INCOL ) NU = ( KDU-MAX( 0, NDCOL-KBOT ) ) - K1 + 1 * * ==== Horizontal Multiply ==== * DO 160 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH JLEN = MIN( NH, JBOT-JCOL+1 ) CALL DGEMM( 'C', 'N', NU, JLEN, NU, ONE, U( K1, K1 ), $ LDU, H( INCOL+K1, JCOL ), LDH, ZERO, WH, $ LDWH ) CALL DLACPY( 'ALL', NU, JLEN, WH, LDWH, $ H( INCOL+K1, JCOL ), LDH ) 160 CONTINUE * * ==== Vertical multiply ==== * DO 170 JROW = JTOP, MAX( KTOP, INCOL ) - 1, NV JLEN = MIN( NV, MAX( KTOP, INCOL )-JROW ) CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, $ H( JROW, INCOL+K1 ), LDH, U( K1, K1 ), $ LDU, ZERO, WV, LDWV ) CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, $ H( JROW, INCOL+K1 ), LDH ) 170 CONTINUE * * ==== Z multiply (also vertical) ==== * IF( WANTZ ) THEN DO 180 JROW = ILOZ, IHIZ, NV JLEN = MIN( NV, IHIZ-JROW+1 ) CALL DGEMM( 'N', 'N', JLEN, NU, NU, ONE, $ Z( JROW, INCOL+K1 ), LDZ, U( K1, K1 ), $ LDU, ZERO, WV, LDWV ) CALL DLACPY( 'ALL', JLEN, NU, WV, LDWV, $ Z( JROW, INCOL+K1 ), LDZ ) 180 CONTINUE END IF ELSE * * ==== Updates exploiting U's 2-by-2 block structure. * . (I2, I4, J2, J4 are the last rows and columns * . of the blocks.) ==== * I2 = ( KDU+1 ) / 2 I4 = KDU J2 = I4 - I2 J4 = KDU * * ==== KZS and KNZ deal with the band of zeros * . along the diagonal of one of the triangular * . blocks. ==== * KZS = ( J4-J2 ) - ( NS+1 ) KNZ = NS + 1 * * ==== Horizontal multiply ==== * DO 190 JCOL = MIN( NDCOL, KBOT ) + 1, JBOT, NH JLEN = MIN( NH, JBOT-JCOL+1 ) * * ==== Copy bottom of H to top+KZS of scratch ==== * (The first KZS rows get multiplied by zero.) ==== * CALL DLACPY( 'ALL', KNZ, JLEN, H( INCOL+1+J2, JCOL ), $ LDH, WH( KZS+1, 1 ), LDWH ) * * ==== Multiply by U21' ==== * CALL DLASET( 'ALL', KZS, JLEN, ZERO, ZERO, WH, LDWH ) CALL DTRMM( 'L', 'U', 'C', 'N', KNZ, JLEN, ONE, $ U( J2+1, 1+KZS ), LDU, WH( KZS+1, 1 ), $ LDWH ) * * ==== Multiply top of H by U11' ==== * CALL DGEMM( 'C', 'N', I2, JLEN, J2, ONE, U, LDU, $ H( INCOL+1, JCOL ), LDH, ONE, WH, LDWH ) * * ==== Copy top of H to bottom of WH ==== * CALL DLACPY( 'ALL', J2, JLEN, H( INCOL+1, JCOL ), LDH, $ WH( I2+1, 1 ), LDWH ) * * ==== Multiply by U21' ==== * CALL DTRMM( 'L', 'L', 'C', 'N', J2, JLEN, ONE, $ U( 1, I2+1 ), LDU, WH( I2+1, 1 ), LDWH ) * * ==== Multiply by U22 ==== * CALL DGEMM( 'C', 'N', I4-I2, JLEN, J4-J2, ONE, $ U( J2+1, I2+1 ), LDU, $ H( INCOL+1+J2, JCOL ), LDH, ONE, $ WH( I2+1, 1 ), LDWH ) * * ==== Copy it back ==== * CALL DLACPY( 'ALL', KDU, JLEN, WH, LDWH, $ H( INCOL+1, JCOL ), LDH ) 190 CONTINUE * * ==== Vertical multiply ==== * DO 200 JROW = JTOP, MAX( INCOL, KTOP ) - 1, NV JLEN = MIN( NV, MAX( INCOL, KTOP )-JROW ) * * ==== Copy right of H to scratch (the first KZS * . columns get multiplied by zero) ==== * CALL DLACPY( 'ALL', JLEN, KNZ, H( JROW, INCOL+1+J2 ), $ LDH, WV( 1, 1+KZS ), LDWV ) * * ==== Multiply by U21 ==== * CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, LDWV ) CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), $ LDWV ) * * ==== Multiply by U11 ==== * CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, $ H( JROW, INCOL+1 ), LDH, U, LDU, ONE, WV, $ LDWV ) * * ==== Copy left of H to right of scratch ==== * CALL DLACPY( 'ALL', JLEN, J2, H( JROW, INCOL+1 ), LDH, $ WV( 1, 1+I2 ), LDWV ) * * ==== Multiply by U21 ==== * CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), LDWV ) * * ==== Multiply by U22 ==== * CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, $ H( JROW, INCOL+1+J2 ), LDH, $ U( J2+1, I2+1 ), LDU, ONE, WV( 1, 1+I2 ), $ LDWV ) * * ==== Copy it back ==== * CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, $ H( JROW, INCOL+1 ), LDH ) 200 CONTINUE * * ==== Multiply Z (also vertical) ==== * IF( WANTZ ) THEN DO 210 JROW = ILOZ, IHIZ, NV JLEN = MIN( NV, IHIZ-JROW+1 ) * * ==== Copy right of Z to left of scratch (first * . KZS columns get multiplied by zero) ==== * CALL DLACPY( 'ALL', JLEN, KNZ, $ Z( JROW, INCOL+1+J2 ), LDZ, $ WV( 1, 1+KZS ), LDWV ) * * ==== Multiply by U12 ==== * CALL DLASET( 'ALL', JLEN, KZS, ZERO, ZERO, WV, $ LDWV ) CALL DTRMM( 'R', 'U', 'N', 'N', JLEN, KNZ, ONE, $ U( J2+1, 1+KZS ), LDU, WV( 1, 1+KZS ), $ LDWV ) * * ==== Multiply by U11 ==== * CALL DGEMM( 'N', 'N', JLEN, I2, J2, ONE, $ Z( JROW, INCOL+1 ), LDZ, U, LDU, ONE, $ WV, LDWV ) * * ==== Copy left of Z to right of scratch ==== * CALL DLACPY( 'ALL', JLEN, J2, Z( JROW, INCOL+1 ), $ LDZ, WV( 1, 1+I2 ), LDWV ) * * ==== Multiply by U21 ==== * CALL DTRMM( 'R', 'L', 'N', 'N', JLEN, I4-I2, ONE, $ U( 1, I2+1 ), LDU, WV( 1, 1+I2 ), $ LDWV ) * * ==== Multiply by U22 ==== * CALL DGEMM( 'N', 'N', JLEN, I4-I2, J4-J2, ONE, $ Z( JROW, INCOL+1+J2 ), LDZ, $ U( J2+1, I2+1 ), LDU, ONE, $ WV( 1, 1+I2 ), LDWV ) * * ==== Copy the result back to Z ==== * CALL DLACPY( 'ALL', JLEN, KDU, WV, LDWV, $ Z( JROW, INCOL+1 ), LDZ ) 210 CONTINUE END IF END IF END IF 220 CONTINUE * * ==== End of DLAQR5 ==== * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARF( SIDE, M, N, V, INCV, TAU, C, LDC, WORK ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER SIDE INTEGER INCV, LDC, M, N DOUBLE PRECISION TAU * .. * .. Array Arguments .. DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) * .. * * Purpose * ======= * * DLARF applies a real elementary reflector H to a real m by n matrix * C, from either the left or the right. H is represented in the form * * H = I - tau * v * v' * * where tau is a real scalar and v is a real vector. * * If tau = 0, then H is taken to be the unit matrix. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': form H * C * = 'R': form C * H * * M (input) INTEGER * The number of rows of the matrix C. * * N (input) INTEGER * The number of columns of the matrix C. * * V (input) DOUBLE PRECISION array, dimension * (1 + (M-1)*abs(INCV)) if SIDE = 'L' * or (1 + (N-1)*abs(INCV)) if SIDE = 'R' * The vector v in the representation of H. V is not used if * TAU = 0. * * INCV (input) INTEGER * The increment between elements of v. INCV <> 0. * * TAU (input) DOUBLE PRECISION * The value tau in the representation of H. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the m by n matrix C. * On exit, C is overwritten by the matrix H * C if SIDE = 'L', * or C * H if SIDE = 'R'. * * LDC (input) INTEGER * The leading dimension of the array C. LDC >= max(1,M). * * WORK (workspace) DOUBLE PRECISION array, dimension * (N) if SIDE = 'L' * or (M) if SIDE = 'R' * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. LOGICAL APPLYLEFT INTEGER I, LASTV, LASTC * .. * .. External Subroutines .. EXTERNAL DGEMV, DGER * .. * .. External Functions .. LOGICAL LSAME INTEGER ILADLR, ILADLC EXTERNAL LSAME, ILADLR, ILADLC * .. * .. Executable Statements .. * APPLYLEFT = LSAME( SIDE, 'L' ) LASTV = 0 LASTC = 0 IF( TAU.NE.ZERO ) THEN ! Set up variables for scanning V. LASTV begins pointing to the end ! of V. IF( APPLYLEFT ) THEN LASTV = M ELSE LASTV = N END IF IF( INCV.GT.0 ) THEN I = 1 + (LASTV-1) * INCV ELSE I = 1 END IF ! Look for the last non-zero row in V. DO WHILE( LASTV.GT.0 .AND. V( I ).EQ.ZERO ) LASTV = LASTV - 1 I = I - INCV END DO IF( APPLYLEFT ) THEN ! Scan for the last non-zero column in C(1:lastv,:). LASTC = ILADLC(LASTV, N, C, LDC) ELSE ! Scan for the last non-zero row in C(:,1:lastv). LASTC = ILADLR(M, LASTV, C, LDC) END IF END IF ! Note that lastc.eq.0 renders the BLAS operations null; no special ! case is needed at this level. IF( APPLYLEFT ) THEN * * Form H * C * IF( LASTV.GT.0 ) THEN * * w(1:lastc,1) := C(1:lastv,1:lastc)' * v(1:lastv,1) * CALL DGEMV( 'Transpose', LASTV, LASTC, ONE, C, LDC, V, INCV, $ ZERO, WORK, 1 ) * * C(1:lastv,1:lastc) := C(...) - v(1:lastv,1) * w(1:lastc,1)' * CALL DGER( LASTV, LASTC, -TAU, V, INCV, WORK, 1, C, LDC ) END IF ELSE * * Form C * H * IF( LASTV.GT.0 ) THEN * * w(1:lastc,1) := C(1:lastc,1:lastv) * v(1:lastv,1) * CALL DGEMV( 'No transpose', LASTC, LASTV, ONE, C, LDC, $ V, INCV, ZERO, WORK, 1 ) * * C(1:lastc,1:lastv) := C(...) - w(1:lastc,1) * v(1:lastv,1)' * CALL DGER( LASTC, LASTV, -TAU, WORK, 1, V, INCV, C, LDC ) END IF END IF RETURN * * End of DLARF * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARFB( SIDE, TRANS, DIRECT, STOREV, M, N, K, V, LDV, $ T, LDT, C, LDC, WORK, LDWORK ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER DIRECT, SIDE, STOREV, TRANS INTEGER K, LDC, LDT, LDV, LDWORK, M, N * .. * .. Array Arguments .. DOUBLE PRECISION C( LDC, * ), T( LDT, * ), V( LDV, * ), $ WORK( LDWORK, * ) * .. * * Purpose * ======= * * DLARFB applies a real block reflector H or its transpose H' to a * real m by n matrix C, from either the left or the right. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': apply H or H' from the Left * = 'R': apply H or H' from the Right * * TRANS (input) CHARACTER*1 * = 'N': apply H (No transpose) * = 'T': apply H' (Transpose) * * DIRECT (input) CHARACTER*1 * Indicates how H is formed from a product of elementary * reflectors * = 'F': H = H(1) H(2) . . . H(k) (Forward) * = 'B': H = H(k) . . . H(2) H(1) (Backward) * * STOREV (input) CHARACTER*1 * Indicates how the vectors which define the elementary * reflectors are stored: * = 'C': Columnwise * = 'R': Rowwise * * M (input) INTEGER * The number of rows of the matrix C. * * N (input) INTEGER * The number of columns of the matrix C. * * K (input) INTEGER * The order of the matrix T (= the number of elementary * reflectors whose product defines the block reflector). * * V (input) DOUBLE PRECISION array, dimension * (LDV,K) if STOREV = 'C' * (LDV,M) if STOREV = 'R' and SIDE = 'L' * (LDV,N) if STOREV = 'R' and SIDE = 'R' * The matrix V. See further details. * * LDV (input) INTEGER * The leading dimension of the array V. * If STOREV = 'C' and SIDE = 'L', LDV >= max(1,M); * if STOREV = 'C' and SIDE = 'R', LDV >= max(1,N); * if STOREV = 'R', LDV >= K. * * T (input) DOUBLE PRECISION array, dimension (LDT,K) * The triangular k by k matrix T in the representation of the * block reflector. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= K. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the m by n matrix C. * On exit, C is overwritten by H*C or H'*C or C*H or C*H'. * * LDC (input) INTEGER * The leading dimension of the array C. LDA >= max(1,M). * * WORK (workspace) DOUBLE PRECISION array, dimension (LDWORK,K) * * LDWORK (input) INTEGER * The leading dimension of the array WORK. * If SIDE = 'L', LDWORK >= max(1,N); * if SIDE = 'R', LDWORK >= max(1,M). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. CHARACTER TRANST INTEGER I, J, LASTV, LASTC * .. * .. External Functions .. LOGICAL LSAME INTEGER ILADLR, ILADLC EXTERNAL LSAME, ILADLR, ILADLC * .. * .. External Subroutines .. EXTERNAL DCOPY, DGEMM, DTRMM * .. * .. Executable Statements .. * * Quick return if possible * IF( M.LE.0 .OR. N.LE.0 ) $ RETURN * IF( LSAME( TRANS, 'N' ) ) THEN TRANST = 'T' ELSE TRANST = 'N' END IF * IF( LSAME( STOREV, 'C' ) ) THEN * IF( LSAME( DIRECT, 'F' ) ) THEN * * Let V = ( V1 ) (first K rows) * ( V2 ) * where V1 is unit lower triangular. * IF( LSAME( SIDE, 'L' ) ) THEN * * Form H * C or H' * C where C = ( C1 ) * ( C2 ) * LASTV = MAX( K, ILADLR( M, K, V, LDV ) ) LASTC = ILADLC( LASTV, N, C, LDC ) * * W := C' * V = (C1'*V1 + C2'*V2) (stored in WORK) * * W := C1' * DO 10 J = 1, K CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 ) 10 CONTINUE * * W := W * V1 * CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C2'*V2 * CALL DGEMM( 'Transpose', 'No transpose', $ LASTC, K, LASTV-K, $ ONE, C( K+1, 1 ), LDC, V( K+1, 1 ), LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T' or W * T * CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - V * W' * IF( LASTV.GT.K ) THEN * * C2 := C2 - V2 * W' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTV-K, LASTC, K, $ -ONE, V( K+1, 1 ), LDV, WORK, LDWORK, ONE, $ C( K+1, 1 ), LDC ) END IF * * W := W * V1' * CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) * * C1 := C1 - W' * DO 30 J = 1, K DO 20 I = 1, LASTC C( J, I ) = C( J, I ) - WORK( I, J ) 20 CONTINUE 30 CONTINUE * ELSE IF( LSAME( SIDE, 'R' ) ) THEN * * Form C * H or C * H' where C = ( C1 C2 ) * LASTV = MAX( K, ILADLR( N, K, V, LDV ) ) LASTC = ILADLR( M, LASTV, C, LDC ) * * W := C * V = (C1*V1 + C2*V2) (stored in WORK) * * W := C1 * DO 40 J = 1, K CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 ) 40 CONTINUE * * W := W * V1 * CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C2 * V2 * CALL DGEMM( 'No transpose', 'No transpose', $ LASTC, K, LASTV-K, $ ONE, C( 1, K+1 ), LDC, V( K+1, 1 ), LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T or W * T' * CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - W * V' * IF( LASTV.GT.K ) THEN * * C2 := C2 - W * V2' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTC, LASTV-K, K, $ -ONE, WORK, LDWORK, V( K+1, 1 ), LDV, ONE, $ C( 1, K+1 ), LDC ) END IF * * W := W * V1' * CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) * * C1 := C1 - W * DO 60 J = 1, K DO 50 I = 1, LASTC C( I, J ) = C( I, J ) - WORK( I, J ) 50 CONTINUE 60 CONTINUE END IF * ELSE * * Let V = ( V1 ) * ( V2 ) (last K rows) * where V2 is unit upper triangular. * IF( LSAME( SIDE, 'L' ) ) THEN * * Form H * C or H' * C where C = ( C1 ) * ( C2 ) * LASTV = MAX( K, ILADLR( M, K, V, LDV ) ) LASTC = ILADLC( LASTV, N, C, LDC ) * * W := C' * V = (C1'*V1 + C2'*V2) (stored in WORK) * * W := C2' * DO 70 J = 1, K CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC, $ WORK( 1, J ), 1 ) 70 CONTINUE * * W := W * V2 * CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, $ WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C1'*V1 * CALL DGEMM( 'Transpose', 'No transpose', $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T' or W * T * CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - V * W' * IF( LASTV.GT.K ) THEN * * C1 := C1 - V1 * W' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK, $ ONE, C, LDC ) END IF * * W := W * V2' * CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, $ WORK, LDWORK ) * * C2 := C2 - W' * DO 90 J = 1, K DO 80 I = 1, LASTC C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J) 80 CONTINUE 90 CONTINUE * ELSE IF( LSAME( SIDE, 'R' ) ) THEN * * Form C * H or C * H' where C = ( C1 C2 ) * LASTV = MAX( K, ILADLR( N, K, V, LDV ) ) LASTC = ILADLR( M, LASTV, C, LDC ) * * W := C * V = (C1*V1 + C2*V2) (stored in WORK) * * W := C2 * DO 100 J = 1, K CALL DCOPY( LASTC, C( 1, N-K+J ), 1, WORK( 1, J ), 1 ) 100 CONTINUE * * W := W * V2 * CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, $ WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C1 * V1 * CALL DGEMM( 'No transpose', 'No transpose', $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T or W * T' * CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - W * V' * IF( LASTV.GT.K ) THEN * * C1 := C1 - W * V1' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV, $ ONE, C, LDC ) END IF * * W := W * V2' * CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', $ LASTC, K, ONE, V( LASTV-K+1, 1 ), LDV, $ WORK, LDWORK ) * * C2 := C2 - W * DO 120 J = 1, K DO 110 I = 1, LASTC C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J) 110 CONTINUE 120 CONTINUE END IF END IF * ELSE IF( LSAME( STOREV, 'R' ) ) THEN * IF( LSAME( DIRECT, 'F' ) ) THEN * * Let V = ( V1 V2 ) (V1: first K columns) * where V1 is unit upper triangular. * IF( LSAME( SIDE, 'L' ) ) THEN * * Form H * C or H' * C where C = ( C1 ) * ( C2 ) * LASTV = MAX( K, ILADLC( K, M, V, LDV ) ) LASTC = ILADLC( LASTV, N, C, LDC ) * * W := C' * V' = (C1'*V1' + C2'*V2') (stored in WORK) * * W := C1' * DO 130 J = 1, K CALL DCOPY( LASTC, C( J, 1 ), LDC, WORK( 1, J ), 1 ) 130 CONTINUE * * W := W * V1' * CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C2'*V2' * CALL DGEMM( 'Transpose', 'Transpose', $ LASTC, K, LASTV-K, $ ONE, C( K+1, 1 ), LDC, V( 1, K+1 ), LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T' or W * T * CALL DTRMM( 'Right', 'Upper', TRANST, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - V' * W' * IF( LASTV.GT.K ) THEN * * C2 := C2 - V2' * W' * CALL DGEMM( 'Transpose', 'Transpose', $ LASTV-K, LASTC, K, $ -ONE, V( 1, K+1 ), LDV, WORK, LDWORK, $ ONE, C( K+1, 1 ), LDC ) END IF * * W := W * V1 * CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) * * C1 := C1 - W' * DO 150 J = 1, K DO 140 I = 1, LASTC C( J, I ) = C( J, I ) - WORK( I, J ) 140 CONTINUE 150 CONTINUE * ELSE IF( LSAME( SIDE, 'R' ) ) THEN * * Form C * H or C * H' where C = ( C1 C2 ) * LASTV = MAX( K, ILADLC( K, N, V, LDV ) ) LASTC = ILADLR( M, LASTV, C, LDC ) * * W := C * V' = (C1*V1' + C2*V2') (stored in WORK) * * W := C1 * DO 160 J = 1, K CALL DCOPY( LASTC, C( 1, J ), 1, WORK( 1, J ), 1 ) 160 CONTINUE * * W := W * V1' * CALL DTRMM( 'Right', 'Upper', 'Transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C2 * V2' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTC, K, LASTV-K, $ ONE, C( 1, K+1 ), LDC, V( 1, K+1 ), LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T or W * T' * CALL DTRMM( 'Right', 'Upper', TRANS, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - W * V * IF( LASTV.GT.K ) THEN * * C2 := C2 - W * V2 * CALL DGEMM( 'No transpose', 'No transpose', $ LASTC, LASTV-K, K, $ -ONE, WORK, LDWORK, V( 1, K+1 ), LDV, $ ONE, C( 1, K+1 ), LDC ) END IF * * W := W * V1 * CALL DTRMM( 'Right', 'Upper', 'No transpose', 'Unit', $ LASTC, K, ONE, V, LDV, WORK, LDWORK ) * * C1 := C1 - W * DO 180 J = 1, K DO 170 I = 1, LASTC C( I, J ) = C( I, J ) - WORK( I, J ) 170 CONTINUE 180 CONTINUE * END IF * ELSE * * Let V = ( V1 V2 ) (V2: last K columns) * where V2 is unit lower triangular. * IF( LSAME( SIDE, 'L' ) ) THEN * * Form H * C or H' * C where C = ( C1 ) * ( C2 ) * LASTV = MAX( K, ILADLC( K, M, V, LDV ) ) LASTC = ILADLC( LASTV, N, C, LDC ) * * W := C' * V' = (C1'*V1' + C2'*V2') (stored in WORK) * * W := C2' * DO 190 J = 1, K CALL DCOPY( LASTC, C( LASTV-K+J, 1 ), LDC, $ WORK( 1, J ), 1 ) 190 CONTINUE * * W := W * V2' * CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, $ WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C1'*V1' * CALL DGEMM( 'Transpose', 'Transpose', $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T' or W * T * CALL DTRMM( 'Right', 'Lower', TRANST, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - V' * W' * IF( LASTV.GT.K ) THEN * * C1 := C1 - V1' * W' * CALL DGEMM( 'Transpose', 'Transpose', $ LASTV-K, LASTC, K, -ONE, V, LDV, WORK, LDWORK, $ ONE, C, LDC ) END IF * * W := W * V2 * CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, $ WORK, LDWORK ) * * C2 := C2 - W' * DO 210 J = 1, K DO 200 I = 1, LASTC C( LASTV-K+J, I ) = C( LASTV-K+J, I ) - WORK(I, J) 200 CONTINUE 210 CONTINUE * ELSE IF( LSAME( SIDE, 'R' ) ) THEN * * Form C * H or C * H' where C = ( C1 C2 ) * LASTV = MAX( K, ILADLC( K, N, V, LDV ) ) LASTC = ILADLR( M, LASTV, C, LDC ) * * W := C * V' = (C1*V1' + C2*V2') (stored in WORK) * * W := C2 * DO 220 J = 1, K CALL DCOPY( LASTC, C( 1, LASTV-K+J ), 1, $ WORK( 1, J ), 1 ) 220 CONTINUE * * W := W * V2' * CALL DTRMM( 'Right', 'Lower', 'Transpose', 'Unit', $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, $ WORK, LDWORK ) IF( LASTV.GT.K ) THEN * * W := W + C1 * V1' * CALL DGEMM( 'No transpose', 'Transpose', $ LASTC, K, LASTV-K, ONE, C, LDC, V, LDV, $ ONE, WORK, LDWORK ) END IF * * W := W * T or W * T' * CALL DTRMM( 'Right', 'Lower', TRANS, 'Non-unit', $ LASTC, K, ONE, T, LDT, WORK, LDWORK ) * * C := C - W * V * IF( LASTV.GT.K ) THEN * * C1 := C1 - W * V1 * CALL DGEMM( 'No transpose', 'No transpose', $ LASTC, LASTV-K, K, -ONE, WORK, LDWORK, V, LDV, $ ONE, C, LDC ) END IF * * W := W * V2 * CALL DTRMM( 'Right', 'Lower', 'No transpose', 'Unit', $ LASTC, K, ONE, V( 1, LASTV-K+1 ), LDV, $ WORK, LDWORK ) * * C1 := C1 - W * DO 240 J = 1, K DO 230 I = 1, LASTC C( I, LASTV-K+J ) = C( I, LASTV-K+J ) - WORK(I, J) 230 CONTINUE 240 CONTINUE * END IF * END IF END IF * RETURN * * End of DLARFB * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER INCX, N DOUBLE PRECISION ALPHA, TAU * .. * .. Array Arguments .. DOUBLE PRECISION X( * ) * .. * * Purpose * ======= * * DLARFG generates a real elementary reflector H of order n, such * that * * H * ( alpha ) = ( beta ), H' * H = I. * ( x ) ( 0 ) * * where alpha and beta are scalars, and x is an (n-1)-element real * vector. H is represented in the form * * H = I - tau * ( 1 ) * ( 1 v' ) , * ( v ) * * where tau is a real scalar and v is a real (n-1)-element * vector. * * If the elements of x are all zero, then tau = 0 and H is taken to be * the unit matrix. * * Otherwise 1 <= tau <= 2. * * Arguments * ========= * * N (input) INTEGER * The order of the elementary reflector. * * ALPHA (input/output) DOUBLE PRECISION * On entry, the value alpha. * On exit, it is overwritten with the value beta. * * X (input/output) DOUBLE PRECISION array, dimension * (1+(N-2)*abs(INCX)) * On entry, the vector x. * On exit, it is overwritten with the vector v. * * INCX (input) INTEGER * The increment between elements of X. INCX > 0. * * TAU (output) DOUBLE PRECISION * The value tau. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER J, KNT DOUBLE PRECISION BETA, RSAFMN, SAFMIN, XNORM * .. * .. External Functions .. DOUBLE PRECISION DLAMCH, DLAPY2, DNRM2 EXTERNAL DLAMCH, DLAPY2, DNRM2 * .. * .. Intrinsic Functions .. INTRINSIC ABS, SIGN * .. * .. External Subroutines .. EXTERNAL DSCAL * .. * .. Executable Statements .. * IF( N.LE.1 ) THEN TAU = ZERO RETURN END IF * XNORM = DNRM2( N-1, X, INCX ) * IF( XNORM.EQ.ZERO ) THEN * * H = I * TAU = ZERO ELSE * * general case * BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) SAFMIN = DLAMCH( 'S' ) / DLAMCH( 'E' ) KNT = 0 IF( ABS( BETA ).LT.SAFMIN ) THEN * * XNORM, BETA may be inaccurate; scale X and recompute them * RSAFMN = ONE / SAFMIN 10 CONTINUE KNT = KNT + 1 CALL DSCAL( N-1, RSAFMN, X, INCX ) BETA = BETA*RSAFMN ALPHA = ALPHA*RSAFMN IF( ABS( BETA ).LT.SAFMIN ) $ GO TO 10 * * New BETA is at most 1, at least SAFMIN * XNORM = DNRM2( N-1, X, INCX ) BETA = -SIGN( DLAPY2( ALPHA, XNORM ), ALPHA ) END IF TAU = ( BETA-ALPHA ) / BETA CALL DSCAL( N-1, ONE / ( ALPHA-BETA ), X, INCX ) * * If ALPHA is subnormal, it may lose relative accuracy * DO 20 J = 1, KNT BETA = BETA*SAFMIN 20 CONTINUE ALPHA = BETA END IF * RETURN * * End of DLARFG * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARFT( DIRECT, STOREV, N, K, V, LDV, TAU, T, LDT ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER DIRECT, STOREV INTEGER K, LDT, LDV, N * .. * .. Array Arguments .. DOUBLE PRECISION T( LDT, * ), TAU( * ), V( LDV, * ) * .. * * Purpose * ======= * * DLARFT forms the triangular factor T of a real block reflector H * of order n, which is defined as a product of k elementary reflectors. * * If DIRECT = 'F', H = H(1) H(2) . . . H(k) and T is upper triangular; * * If DIRECT = 'B', H = H(k) . . . H(2) H(1) and T is lower triangular. * * If STOREV = 'C', the vector which defines the elementary reflector * H(i) is stored in the i-th column of the array V, and * * H = I - V * T * V' * * If STOREV = 'R', the vector which defines the elementary reflector * H(i) is stored in the i-th row of the array V, and * * H = I - V' * T * V * * Arguments * ========= * * DIRECT (input) CHARACTER*1 * Specifies the order in which the elementary reflectors are * multiplied to form the block reflector: * = 'F': H = H(1) H(2) . . . H(k) (Forward) * = 'B': H = H(k) . . . H(2) H(1) (Backward) * * STOREV (input) CHARACTER*1 * Specifies how the vectors which define the elementary * reflectors are stored (see also Further Details): * = 'C': columnwise * = 'R': rowwise * * N (input) INTEGER * The order of the block reflector H. N >= 0. * * K (input) INTEGER * The order of the triangular factor T (= the number of * elementary reflectors). K >= 1. * * V (input/output) DOUBLE PRECISION array, dimension * (LDV,K) if STOREV = 'C' * (LDV,N) if STOREV = 'R' * The matrix V. See further details. * * LDV (input) INTEGER * The leading dimension of the array V. * If STOREV = 'C', LDV >= max(1,N); if STOREV = 'R', LDV >= K. * * TAU (input) DOUBLE PRECISION array, dimension (K) * TAU(i) must contain the scalar factor of the elementary * reflector H(i). * * T (output) DOUBLE PRECISION array, dimension (LDT,K) * The k by k triangular factor T of the block reflector. * If DIRECT = 'F', T is upper triangular; if DIRECT = 'B', T is * lower triangular. The rest of the array is not used. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= K. * * Further Details * =============== * * The shape of the matrix V and the storage of the vectors which define * the H(i) is best illustrated by the following example with n = 5 and * k = 3. The elements equal to 1 are not stored; the corresponding * array elements are modified but restored on exit. The rest of the * array is not used. * * DIRECT = 'F' and STOREV = 'C': DIRECT = 'F' and STOREV = 'R': * * V = ( 1 ) V = ( 1 v1 v1 v1 v1 ) * ( v1 1 ) ( 1 v2 v2 v2 ) * ( v1 v2 1 ) ( 1 v3 v3 ) * ( v1 v2 v3 ) * ( v1 v2 v3 ) * * DIRECT = 'B' and STOREV = 'C': DIRECT = 'B' and STOREV = 'R': * * V = ( v1 v2 v3 ) V = ( v1 v1 1 ) * ( v1 v2 v3 ) ( v2 v2 v2 1 ) * ( 1 v2 v3 ) ( v3 v3 v3 v3 1 ) * ( 1 v3 ) * ( 1 ) * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I, J, PREVLASTV, LASTV DOUBLE PRECISION VII * .. * .. External Subroutines .. EXTERNAL DGEMV, DTRMV * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Executable Statements .. * * Quick return if possible * IF( N.EQ.0 ) $ RETURN * IF( LSAME( DIRECT, 'F' ) ) THEN PREVLASTV = N DO 20 I = 1, K PREVLASTV = MAX( I, PREVLASTV ) IF( TAU( I ).EQ.ZERO ) THEN * * H(i) = I * DO 10 J = 1, I T( J, I ) = ZERO 10 CONTINUE ELSE * * general case * VII = V( I, I ) V( I, I ) = ONE IF( LSAME( STOREV, 'C' ) ) THEN ! Skip any trailing zeros. DO LASTV = N, I+1, -1 IF( V( LASTV, I ).NE.ZERO ) EXIT END DO J = MIN( LASTV, PREVLASTV ) * * T(1:i-1,i) := - tau(i) * V(i:j,1:i-1)' * V(i:j,i) * CALL DGEMV( 'Transpose', J-I+1, I-1, -TAU( I ), $ V( I, 1 ), LDV, V( I, I ), 1, ZERO, $ T( 1, I ), 1 ) ELSE ! Skip any trailing zeros. DO LASTV = N, I+1, -1 IF( V( I, LASTV ).NE.ZERO ) EXIT END DO J = MIN( LASTV, PREVLASTV ) * * T(1:i-1,i) := - tau(i) * V(1:i-1,i:j) * V(i,i:j)' * CALL DGEMV( 'No transpose', I-1, J-I+1, -TAU( I ), $ V( 1, I ), LDV, V( I, I ), LDV, ZERO, $ T( 1, I ), 1 ) END IF V( I, I ) = VII * * T(1:i-1,i) := T(1:i-1,1:i-1) * T(1:i-1,i) * CALL DTRMV( 'Upper', 'No transpose', 'Non-unit', I-1, T, $ LDT, T( 1, I ), 1 ) T( I, I ) = TAU( I ) IF( I.GT.1 ) THEN PREVLASTV = MAX( PREVLASTV, LASTV ) ELSE PREVLASTV = LASTV END IF END IF 20 CONTINUE ELSE PREVLASTV = 1 DO 40 I = K, 1, -1 IF( TAU( I ).EQ.ZERO ) THEN * * H(i) = I * DO 30 J = I, K T( J, I ) = ZERO 30 CONTINUE ELSE * * general case * IF( I.LT.K ) THEN IF( LSAME( STOREV, 'C' ) ) THEN VII = V( N-K+I, I ) V( N-K+I, I ) = ONE ! Skip any leading zeros. DO LASTV = 1, I-1 IF( V( LASTV, I ).NE.ZERO ) EXIT END DO J = MAX( LASTV, PREVLASTV ) * * T(i+1:k,i) := * - tau(i) * V(j:n-k+i,i+1:k)' * V(j:n-k+i,i) * CALL DGEMV( 'Transpose', N-K+I-J+1, K-I, -TAU( I ), $ V( J, I+1 ), LDV, V( J, I ), 1, ZERO, $ T( I+1, I ), 1 ) V( N-K+I, I ) = VII ELSE VII = V( I, N-K+I ) V( I, N-K+I ) = ONE ! Skip any leading zeros. DO LASTV = 1, I-1 IF( V( I, LASTV ).NE.ZERO ) EXIT END DO J = MAX( LASTV, PREVLASTV ) * * T(i+1:k,i) := * - tau(i) * V(i+1:k,j:n-k+i) * V(i,j:n-k+i)' * CALL DGEMV( 'No transpose', K-I, N-K+I-J+1, $ -TAU( I ), V( I+1, J ), LDV, V( I, J ), LDV, $ ZERO, T( I+1, I ), 1 ) V( I, N-K+I ) = VII END IF * * T(i+1:k,i) := T(i+1:k,i+1:k) * T(i+1:k,i) * CALL DTRMV( 'Lower', 'No transpose', 'Non-unit', K-I, $ T( I+1, I+1 ), LDT, T( I+1, I ), 1 ) IF( I.GT.1 ) THEN PREVLASTV = MIN( PREVLASTV, LASTV ) ELSE PREVLASTV = LASTV END IF END IF T( I, I ) = TAU( I ) END IF 40 CONTINUE END IF RETURN * * End of DLARFT * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARFX( SIDE, M, N, V, TAU, C, LDC, WORK ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER SIDE INTEGER LDC, M, N DOUBLE PRECISION TAU * .. * .. Array Arguments .. DOUBLE PRECISION C( LDC, * ), V( * ), WORK( * ) * .. * * Purpose * ======= * * DLARFX applies a real elementary reflector H to a real m by n * matrix C, from either the left or the right. H is represented in the * form * * H = I - tau * v * v' * * where tau is a real scalar and v is a real vector. * * If tau = 0, then H is taken to be the unit matrix * * This version uses inline code if H has order < 11. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': form H * C * = 'R': form C * H * * M (input) INTEGER * The number of rows of the matrix C. * * N (input) INTEGER * The number of columns of the matrix C. * * V (input) DOUBLE PRECISION array, dimension (M) if SIDE = 'L' * or (N) if SIDE = 'R' * The vector v in the representation of H. * * TAU (input) DOUBLE PRECISION * The value tau in the representation of H. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the m by n matrix C. * On exit, C is overwritten by the matrix H * C if SIDE = 'L', * or C * H if SIDE = 'R'. * * LDC (input) INTEGER * The leading dimension of the array C. LDA >= (1,M). * * WORK (workspace) DOUBLE PRECISION array, dimension * (N) if SIDE = 'L' * or (M) if SIDE = 'R' * WORK is not referenced if H has order < 11. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. INTEGER J DOUBLE PRECISION SUM, T1, T10, T2, T3, T4, T5, T6, T7, T8, T9, $ V1, V10, V2, V3, V4, V5, V6, V7, V8, V9 * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DLARF * .. * .. Executable Statements .. * IF( TAU.EQ.ZERO ) $ RETURN IF( LSAME( SIDE, 'L' ) ) THEN * * Form H * C, where H has order m. * GO TO ( 10, 30, 50, 70, 90, 110, 130, 150, $ 170, 190 )M * * Code for general M * CALL DLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK ) GO TO 410 10 CONTINUE * * Special code for 1 x 1 Householder * T1 = ONE - TAU*V( 1 )*V( 1 ) DO 20 J = 1, N C( 1, J ) = T1*C( 1, J ) 20 CONTINUE GO TO 410 30 CONTINUE * * Special code for 2 x 2 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 DO 40 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 40 CONTINUE GO TO 410 50 CONTINUE * * Special code for 3 x 3 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 DO 60 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 60 CONTINUE GO TO 410 70 CONTINUE * * Special code for 4 x 4 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 DO 80 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 80 CONTINUE GO TO 410 90 CONTINUE * * Special code for 5 x 5 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 DO 100 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 100 CONTINUE GO TO 410 110 CONTINUE * * Special code for 6 x 6 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 DO 120 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 C( 6, J ) = C( 6, J ) - SUM*T6 120 CONTINUE GO TO 410 130 CONTINUE * * Special code for 7 x 7 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 DO 140 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + $ V7*C( 7, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 C( 6, J ) = C( 6, J ) - SUM*T6 C( 7, J ) = C( 7, J ) - SUM*T7 140 CONTINUE GO TO 410 150 CONTINUE * * Special code for 8 x 8 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 DO 160 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + $ V7*C( 7, J ) + V8*C( 8, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 C( 6, J ) = C( 6, J ) - SUM*T6 C( 7, J ) = C( 7, J ) - SUM*T7 C( 8, J ) = C( 8, J ) - SUM*T8 160 CONTINUE GO TO 410 170 CONTINUE * * Special code for 9 x 9 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 V9 = V( 9 ) T9 = TAU*V9 DO 180 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 C( 6, J ) = C( 6, J ) - SUM*T6 C( 7, J ) = C( 7, J ) - SUM*T7 C( 8, J ) = C( 8, J ) - SUM*T8 C( 9, J ) = C( 9, J ) - SUM*T9 180 CONTINUE GO TO 410 190 CONTINUE * * Special code for 10 x 10 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 V9 = V( 9 ) T9 = TAU*V9 V10 = V( 10 ) T10 = TAU*V10 DO 200 J = 1, N SUM = V1*C( 1, J ) + V2*C( 2, J ) + V3*C( 3, J ) + $ V4*C( 4, J ) + V5*C( 5, J ) + V6*C( 6, J ) + $ V7*C( 7, J ) + V8*C( 8, J ) + V9*C( 9, J ) + $ V10*C( 10, J ) C( 1, J ) = C( 1, J ) - SUM*T1 C( 2, J ) = C( 2, J ) - SUM*T2 C( 3, J ) = C( 3, J ) - SUM*T3 C( 4, J ) = C( 4, J ) - SUM*T4 C( 5, J ) = C( 5, J ) - SUM*T5 C( 6, J ) = C( 6, J ) - SUM*T6 C( 7, J ) = C( 7, J ) - SUM*T7 C( 8, J ) = C( 8, J ) - SUM*T8 C( 9, J ) = C( 9, J ) - SUM*T9 C( 10, J ) = C( 10, J ) - SUM*T10 200 CONTINUE GO TO 410 ELSE * * Form C * H, where H has order n. * GO TO ( 210, 230, 250, 270, 290, 310, 330, 350, $ 370, 390 )N * * Code for general N * CALL DLARF( SIDE, M, N, V, 1, TAU, C, LDC, WORK ) GO TO 410 210 CONTINUE * * Special code for 1 x 1 Householder * T1 = ONE - TAU*V( 1 )*V( 1 ) DO 220 J = 1, M C( J, 1 ) = T1*C( J, 1 ) 220 CONTINUE GO TO 410 230 CONTINUE * * Special code for 2 x 2 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 DO 240 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 240 CONTINUE GO TO 410 250 CONTINUE * * Special code for 3 x 3 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 DO 260 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 260 CONTINUE GO TO 410 270 CONTINUE * * Special code for 4 x 4 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 DO 280 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 280 CONTINUE GO TO 410 290 CONTINUE * * Special code for 5 x 5 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 DO 300 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 300 CONTINUE GO TO 410 310 CONTINUE * * Special code for 6 x 6 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 DO 320 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 C( J, 6 ) = C( J, 6 ) - SUM*T6 320 CONTINUE GO TO 410 330 CONTINUE * * Special code for 7 x 7 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 DO 340 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + $ V7*C( J, 7 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 C( J, 6 ) = C( J, 6 ) - SUM*T6 C( J, 7 ) = C( J, 7 ) - SUM*T7 340 CONTINUE GO TO 410 350 CONTINUE * * Special code for 8 x 8 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 DO 360 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + $ V7*C( J, 7 ) + V8*C( J, 8 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 C( J, 6 ) = C( J, 6 ) - SUM*T6 C( J, 7 ) = C( J, 7 ) - SUM*T7 C( J, 8 ) = C( J, 8 ) - SUM*T8 360 CONTINUE GO TO 410 370 CONTINUE * * Special code for 9 x 9 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 V9 = V( 9 ) T9 = TAU*V9 DO 380 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 C( J, 6 ) = C( J, 6 ) - SUM*T6 C( J, 7 ) = C( J, 7 ) - SUM*T7 C( J, 8 ) = C( J, 8 ) - SUM*T8 C( J, 9 ) = C( J, 9 ) - SUM*T9 380 CONTINUE GO TO 410 390 CONTINUE * * Special code for 10 x 10 Householder * V1 = V( 1 ) T1 = TAU*V1 V2 = V( 2 ) T2 = TAU*V2 V3 = V( 3 ) T3 = TAU*V3 V4 = V( 4 ) T4 = TAU*V4 V5 = V( 5 ) T5 = TAU*V5 V6 = V( 6 ) T6 = TAU*V6 V7 = V( 7 ) T7 = TAU*V7 V8 = V( 8 ) T8 = TAU*V8 V9 = V( 9 ) T9 = TAU*V9 V10 = V( 10 ) T10 = TAU*V10 DO 400 J = 1, M SUM = V1*C( J, 1 ) + V2*C( J, 2 ) + V3*C( J, 3 ) + $ V4*C( J, 4 ) + V5*C( J, 5 ) + V6*C( J, 6 ) + $ V7*C( J, 7 ) + V8*C( J, 8 ) + V9*C( J, 9 ) + $ V10*C( J, 10 ) C( J, 1 ) = C( J, 1 ) - SUM*T1 C( J, 2 ) = C( J, 2 ) - SUM*T2 C( J, 3 ) = C( J, 3 ) - SUM*T3 C( J, 4 ) = C( J, 4 ) - SUM*T4 C( J, 5 ) = C( J, 5 ) - SUM*T5 C( J, 6 ) = C( J, 6 ) - SUM*T6 C( J, 7 ) = C( J, 7 ) - SUM*T7 C( J, 8 ) = C( J, 8 ) - SUM*T8 C( J, 9 ) = C( J, 9 ) - SUM*T9 C( J, 10 ) = C( J, 10 ) - SUM*T10 400 CONTINUE GO TO 410 END IF 410 CONTINUE RETURN * * End of DLARFX * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLARTG( F, G, CS, SN, R ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION CS, F, G, R, SN * .. * * Purpose * ======= * * DLARTG generate a plane rotation so that * * [ CS SN ] . [ F ] = [ R ] where CS**2 + SN**2 = 1. * [ -SN CS ] [ G ] [ 0 ] * * This is a slower, more accurate version of the BLAS1 routine DROTG, * with the following other differences: * F and G are unchanged on return. * If G=0, then CS=1 and SN=0. * If F=0 and (G .ne. 0), then CS=0 and SN=1 without doing any * floating point operations (saves work in DBDSQR when * there are zeros on the diagonal). * * If F exceeds G in magnitude, CS will be positive. * * Arguments * ========= * * F (input) DOUBLE PRECISION * The first component of vector to be rotated. * * G (input) DOUBLE PRECISION * The second component of vector to be rotated. * * CS (output) DOUBLE PRECISION * The cosine of the rotation. * * SN (output) DOUBLE PRECISION * The sine of the rotation. * * R (output) DOUBLE PRECISION * The nonzero component of the rotated vector. * * This version has a few statements commented out for thread safety * (machine parameters are computed on each entry). 10 feb 03, SJH. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D0 ) DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D0 ) DOUBLE PRECISION TWO PARAMETER ( TWO = 2.0D0 ) * .. * .. Local Scalars .. * LOGICAL FIRST INTEGER COUNT, I DOUBLE PRECISION EPS, F1, G1, SAFMIN, SAFMN2, SAFMX2, SCALE * .. * .. External Functions .. DOUBLE PRECISION DLAMCH EXTERNAL DLAMCH * .. * .. Intrinsic Functions .. INTRINSIC ABS, INT, LOG, MAX, SQRT * .. * .. Save statement .. * SAVE FIRST, SAFMX2, SAFMIN, SAFMN2 * .. * .. Data statements .. * DATA FIRST / .TRUE. / * .. * .. Executable Statements .. * * IF( FIRST ) THEN SAFMIN = DLAMCH( 'S' ) EPS = DLAMCH( 'E' ) SAFMN2 = DLAMCH( 'B' )**INT( LOG( SAFMIN / EPS ) / $ LOG( DLAMCH( 'B' ) ) / TWO ) SAFMX2 = ONE / SAFMN2 * FIRST = .FALSE. * END IF IF( G.EQ.ZERO ) THEN CS = ONE SN = ZERO R = F ELSE IF( F.EQ.ZERO ) THEN CS = ZERO SN = ONE R = G ELSE F1 = F G1 = G SCALE = MAX( ABS( F1 ), ABS( G1 ) ) IF( SCALE.GE.SAFMX2 ) THEN COUNT = 0 10 CONTINUE COUNT = COUNT + 1 F1 = F1*SAFMN2 G1 = G1*SAFMN2 SCALE = MAX( ABS( F1 ), ABS( G1 ) ) IF( SCALE.GE.SAFMX2 ) $ GO TO 10 R = SQRT( F1**2+G1**2 ) CS = F1 / R SN = G1 / R DO 20 I = 1, COUNT R = R*SAFMX2 20 CONTINUE ELSE IF( SCALE.LE.SAFMN2 ) THEN COUNT = 0 30 CONTINUE COUNT = COUNT + 1 F1 = F1*SAFMX2 G1 = G1*SAFMX2 SCALE = MAX( ABS( F1 ), ABS( G1 ) ) IF( SCALE.LE.SAFMN2 ) $ GO TO 30 R = SQRT( F1**2+G1**2 ) CS = F1 / R SN = G1 / R DO 40 I = 1, COUNT R = R*SAFMN2 40 CONTINUE ELSE R = SQRT( F1**2+G1**2 ) CS = F1 / R SN = G1 / R END IF IF( ABS( F ).GT.ABS( G ) .AND. CS.LT.ZERO ) THEN CS = -CS SN = -SN R = -R END IF END IF RETURN * * End of DLARTG * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLASCL( TYPE, KL, KU, CFROM, CTO, M, N, A, LDA, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER TYPE INTEGER INFO, KL, KU, LDA, M, N DOUBLE PRECISION CFROM, CTO * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * DLASCL multiplies the M by N real matrix A by the real scalar * CTO/CFROM. This is done without over/underflow as long as the final * result CTO*A(I,J)/CFROM does not over/underflow. TYPE specifies that * A may be full, upper triangular, lower triangular, upper Hessenberg, * or banded. * * Arguments * ========= * * TYPE (input) CHARACTER*1 * TYPE indices the storage type of the input matrix. * = 'G': A is a full matrix. * = 'L': A is a lower triangular matrix. * = 'U': A is an upper triangular matrix. * = 'H': A is an upper Hessenberg matrix. * = 'B': A is a symmetric band matrix with lower bandwidth KL * and upper bandwidth KU and with the only the lower * half stored. * = 'Q': A is a symmetric band matrix with lower bandwidth KL * and upper bandwidth KU and with the only the upper * half stored. * = 'Z': A is a band matrix with lower bandwidth KL and upper * bandwidth KU. * * KL (input) INTEGER * The lower bandwidth of A. Referenced only if TYPE = 'B', * 'Q' or 'Z'. * * KU (input) INTEGER * The upper bandwidth of A. Referenced only if TYPE = 'B', * 'Q' or 'Z'. * * CFROM (input) DOUBLE PRECISION * CTO (input) DOUBLE PRECISION * The matrix A is multiplied by CTO/CFROM. A(I,J) is computed * without over/underflow if the final result CTO*A(I,J)/CFROM * can be represented without over/underflow. CFROM must be * nonzero. * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * The matrix to be multiplied by CTO/CFROM. See TYPE for the * storage type. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * INFO (output) INTEGER * 0 - successful exit * <0 - if INFO = -i, the i-th argument had an illegal value. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D0, ONE = 1.0D0 ) * .. * .. Local Scalars .. LOGICAL DONE INTEGER I, ITYPE, J, K1, K2, K3, K4 DOUBLE PRECISION BIGNUM, CFROM1, CFROMC, CTO1, CTOC, MUL, SMLNUM * .. * .. External Functions .. LOGICAL LSAME, DISNAN DOUBLE PRECISION DLAMCH EXTERNAL LSAME, DLAMCH, DISNAN * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN * .. * .. External Subroutines .. EXTERNAL XERBLA * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 * IF( LSAME( TYPE, 'G' ) ) THEN ITYPE = 0 ELSE IF( LSAME( TYPE, 'L' ) ) THEN ITYPE = 1 ELSE IF( LSAME( TYPE, 'U' ) ) THEN ITYPE = 2 ELSE IF( LSAME( TYPE, 'H' ) ) THEN ITYPE = 3 ELSE IF( LSAME( TYPE, 'B' ) ) THEN ITYPE = 4 ELSE IF( LSAME( TYPE, 'Q' ) ) THEN ITYPE = 5 ELSE IF( LSAME( TYPE, 'Z' ) ) THEN ITYPE = 6 ELSE ITYPE = -1 END IF * IF( ITYPE.EQ.-1 ) THEN INFO = -1 ELSE IF( CFROM.EQ.ZERO .OR. DISNAN(CFROM) ) THEN INFO = -4 ELSE IF( DISNAN(CTO) ) THEN INFO = -5 ELSE IF( M.LT.0 ) THEN INFO = -6 ELSE IF( N.LT.0 .OR. ( ITYPE.EQ.4 .AND. N.NE.M ) .OR. $ ( ITYPE.EQ.5 .AND. N.NE.M ) ) THEN INFO = -7 ELSE IF( ITYPE.LE.3 .AND. LDA.LT.MAX( 1, M ) ) THEN INFO = -9 ELSE IF( ITYPE.GE.4 ) THEN IF( KL.LT.0 .OR. KL.GT.MAX( M-1, 0 ) ) THEN INFO = -2 ELSE IF( KU.LT.0 .OR. KU.GT.MAX( N-1, 0 ) .OR. $ ( ( ITYPE.EQ.4 .OR. ITYPE.EQ.5 ) .AND. KL.NE.KU ) ) $ THEN INFO = -3 ELSE IF( ( ITYPE.EQ.4 .AND. LDA.LT.KL+1 ) .OR. $ ( ITYPE.EQ.5 .AND. LDA.LT.KU+1 ) .OR. $ ( ITYPE.EQ.6 .AND. LDA.LT.2*KL+KU+1 ) ) THEN INFO = -9 END IF END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DLASCL', -INFO ) RETURN END IF * * Quick return if possible * IF( N.EQ.0 .OR. M.EQ.0 ) $ RETURN * * Get machine parameters * SMLNUM = DLAMCH( 'S' ) BIGNUM = ONE / SMLNUM * CFROMC = CFROM CTOC = CTO * 10 CONTINUE CFROM1 = CFROMC*SMLNUM IF( CFROM1.EQ.CFROMC ) THEN ! CFROMC is an inf. Multiply by a correctly signed zero for ! finite CTOC, or a NaN if CTOC is infinite. MUL = CTOC / CFROMC DONE = .TRUE. CTO1 = CTOC ELSE CTO1 = CTOC / BIGNUM IF( CTO1.EQ.CTOC ) THEN ! CTOC is either 0 or an inf. In both cases, CTOC itself ! serves as the correct multiplication factor. MUL = CTOC DONE = .TRUE. CFROMC = ONE ELSE IF( ABS( CFROM1 ).GT.ABS( CTOC ) .AND. CTOC.NE.ZERO ) THEN MUL = SMLNUM DONE = .FALSE. CFROMC = CFROM1 ELSE IF( ABS( CTO1 ).GT.ABS( CFROMC ) ) THEN MUL = BIGNUM DONE = .FALSE. CTOC = CTO1 ELSE MUL = CTOC / CFROMC DONE = .TRUE. END IF END IF * IF( ITYPE.EQ.0 ) THEN * * Full matrix * DO 30 J = 1, N DO 20 I = 1, M A( I, J ) = A( I, J )*MUL 20 CONTINUE 30 CONTINUE * ELSE IF( ITYPE.EQ.1 ) THEN * * Lower triangular matrix * DO 50 J = 1, N DO 40 I = J, M A( I, J ) = A( I, J )*MUL 40 CONTINUE 50 CONTINUE * ELSE IF( ITYPE.EQ.2 ) THEN * * Upper triangular matrix * DO 70 J = 1, N DO 60 I = 1, MIN( J, M ) A( I, J ) = A( I, J )*MUL 60 CONTINUE 70 CONTINUE * ELSE IF( ITYPE.EQ.3 ) THEN * * Upper Hessenberg matrix * DO 90 J = 1, N DO 80 I = 1, MIN( J+1, M ) A( I, J ) = A( I, J )*MUL 80 CONTINUE 90 CONTINUE * ELSE IF( ITYPE.EQ.4 ) THEN * * Lower half of a symmetric band matrix * K3 = KL + 1 K4 = N + 1 DO 110 J = 1, N DO 100 I = 1, MIN( K3, K4-J ) A( I, J ) = A( I, J )*MUL 100 CONTINUE 110 CONTINUE * ELSE IF( ITYPE.EQ.5 ) THEN * * Upper half of a symmetric band matrix * K1 = KU + 2 K3 = KU + 1 DO 130 J = 1, N DO 120 I = MAX( K1-J, 1 ), K3 A( I, J ) = A( I, J )*MUL 120 CONTINUE 130 CONTINUE * ELSE IF( ITYPE.EQ.6 ) THEN * * Band matrix * K1 = KL + KU + 2 K2 = KL + 1 K3 = 2*KL + KU + 1 K4 = KL + KU + 1 + M DO 150 J = 1, N DO 140 I = MAX( K1-J, K2 ), MIN( K3, K4-J ) A( I, J ) = A( I, J )*MUL 140 CONTINUE 150 CONTINUE * END IF * IF( .NOT.DONE ) $ GO TO 10 * RETURN * * End of DLASCL * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- LOGICAL FUNCTION DISNAN( DIN ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. DOUBLE PRECISION DIN * .. * * Purpose * ======= * * DISNAN returns .TRUE. if its argument is NaN, and .FALSE. * otherwise. To be replaced by the Fortran 2003 intrinsic in the * future. * * Arguments * ========= * * DIN (input) DOUBLE PRECISION * Input to test for NaN. * * ===================================================================== * * .. External Functions .. LOGICAL DLAISNAN EXTERNAL DLAISNAN * .. * .. Executable Statements .. DISNAN = DLAISNAN(DIN,DIN) RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- LOGICAL FUNCTION DLAISNAN( DIN1, DIN2 ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. DOUBLE PRECISION DIN1, DIN2 * .. * * Purpose * ======= * * This routine is not for general use. It exists solely to avoid * over-optimization in DISNAN. * * DLAISNAN checks for NaNs by comparing its two arguments for * inequality. NaN is the only floating-point value where NaN != NaN * returns .TRUE. To check for NaNs, pass the same variable as both * arguments. * * A compiler must assume that the two arguments are * not the same variable, and the test will not be optimized away. * Interprocedural or whole-program optimization may delete this * test. The ISNAN functions will be replaced by the correct * Fortran 03 intrinsic once the intrinsic is widely available. * * Arguments * ========= * * DIN1 (input) DOUBLE PRECISION * * DIN2 (input) DOUBLE PRECISION * Two numbers to compare for inequality. * * ===================================================================== * * .. Executable Statements .. DLAISNAN = (DIN1.NE.DIN2) RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLASET( UPLO, M, N, ALPHA, BETA, A, LDA ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER UPLO INTEGER LDA, M, N DOUBLE PRECISION ALPHA, BETA * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * DLASET initializes an m-by-n matrix A to BETA on the diagonal and * ALPHA on the offdiagonals. * * Arguments * ========= * * UPLO (input) CHARACTER*1 * Specifies the part of the matrix A to be set. * = 'U': Upper triangular part is set; the strictly lower * triangular part of A is not changed. * = 'L': Lower triangular part is set; the strictly upper * triangular part of A is not changed. * Otherwise: All of the matrix A is set. * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. * * ALPHA (input) DOUBLE PRECISION * The constant to which the offdiagonal elements are to be set. * * BETA (input) DOUBLE PRECISION * The constant to which the diagonal elements are to be set. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On exit, the leading m-by-n submatrix of A is set as follows: * * if UPLO = 'U', A(i,j) = ALPHA, 1<=i<=j-1, 1<=j<=n, * if UPLO = 'L', A(i,j) = ALPHA, j+1<=i<=m, 1<=j<=n, * otherwise, A(i,j) = ALPHA, 1<=i<=m, 1<=j<=n, i.ne.j, * * and, for all UPLO, A(i,i) = BETA, 1<=i<=min(m,n). * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * ===================================================================== * * .. Local Scalars .. INTEGER I, J * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Intrinsic Functions .. INTRINSIC MIN * .. * .. Executable Statements .. * IF( LSAME( UPLO, 'U' ) ) THEN * * Set the strictly upper triangular or trapezoidal part of the * array to ALPHA. * DO 20 J = 2, N DO 10 I = 1, MIN( J-1, M ) A( I, J ) = ALPHA 10 CONTINUE 20 CONTINUE * ELSE IF( LSAME( UPLO, 'L' ) ) THEN * * Set the strictly lower triangular or trapezoidal part of the * array to ALPHA. * DO 40 J = 1, MIN( M, N ) DO 30 I = J + 1, M A( I, J ) = ALPHA 30 CONTINUE 40 CONTINUE * ELSE * * Set the leading m-by-n submatrix to ALPHA. * DO 60 J = 1, N DO 50 I = 1, M A( I, J ) = ALPHA 50 CONTINUE 60 CONTINUE END IF * * Set the first min(M,N) diagonal elements to BETA. * DO 70 I = 1, MIN( M, N ) A( I, I ) = BETA 70 CONTINUE * RETURN * * End of DLASET * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLASSQ( N, X, INCX, SCALE, SUMSQ ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER INCX, N DOUBLE PRECISION SCALE, SUMSQ * .. * .. Array Arguments .. DOUBLE PRECISION X( * ) * .. * * Purpose * ======= * * DLASSQ returns the values scl and smsq such that * * ( scl**2 )*smsq = x( 1 )**2 +...+ x( n )**2 + ( scale**2 )*sumsq, * * where x( i ) = X( 1 + ( i - 1 )*INCX ). The value of sumsq is * assumed to be non-negative and scl returns the value * * scl = max( scale, abs( x( i ) ) ). * * scale and sumsq must be supplied in SCALE and SUMSQ and * scl and smsq are overwritten on SCALE and SUMSQ respectively. * * The routine makes only one pass through the vector x. * * Arguments * ========= * * N (input) INTEGER * The number of elements to be used from the vector X. * * X (input) DOUBLE PRECISION array, dimension (N) * The vector for which a scaled sum of squares is computed. * x( i ) = X( 1 + ( i - 1 )*INCX ), 1 <= i <= n. * * INCX (input) INTEGER * The increment between successive values of the vector X. * INCX > 0. * * SCALE (input/output) DOUBLE PRECISION * On entry, the value scale in the equation above. * On exit, SCALE is overwritten with scl , the scaling factor * for the sum of squares. * * SUMSQ (input/output) DOUBLE PRECISION * On entry, the value sumsq in the equation above. * On exit, SUMSQ is overwritten with smsq , the basic sum of * squares from which scl has been factored out. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER IX DOUBLE PRECISION ABSXI * .. * .. Intrinsic Functions .. INTRINSIC ABS * .. * .. Executable Statements .. * IF( N.GT.0 ) THEN DO 10 IX = 1, 1 + ( N-1 )*INCX, INCX IF( X( IX ).NE.ZERO ) THEN ABSXI = ABS( X( IX ) ) IF( SCALE.LT.ABSXI ) THEN SUMSQ = 1 + SUMSQ*( SCALE / ABSXI )**2 SCALE = ABSXI ELSE SUMSQ = SUMSQ + ( ABSXI / SCALE )**2 END IF END IF 10 CONTINUE END IF RETURN * * End of DLASSQ * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DLASY2( LTRANL, LTRANR, ISGN, N1, N2, TL, LDTL, TR, $ LDTR, B, LDB, SCALE, X, LDX, XNORM, INFO ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. LOGICAL LTRANL, LTRANR INTEGER INFO, ISGN, LDB, LDTL, LDTR, LDX, N1, N2 DOUBLE PRECISION SCALE, XNORM * .. * .. Array Arguments .. DOUBLE PRECISION B( LDB, * ), TL( LDTL, * ), TR( LDTR, * ), $ X( LDX, * ) * .. * * Purpose * ======= * * DLASY2 solves for the N1 by N2 matrix X, 1 <= N1,N2 <= 2, in * * op(TL)*X + ISGN*X*op(TR) = SCALE*B, * * where TL is N1 by N1, TR is N2 by N2, B is N1 by N2, and ISGN = 1 or * -1. op(T) = T or T', where T' denotes the transpose of T. * * Arguments * ========= * * LTRANL (input) LOGICAL * On entry, LTRANL specifies the op(TL): * = .FALSE., op(TL) = TL, * = .TRUE., op(TL) = TL'. * * LTRANR (input) LOGICAL * On entry, LTRANR specifies the op(TR): * = .FALSE., op(TR) = TR, * = .TRUE., op(TR) = TR'. * * ISGN (input) INTEGER * On entry, ISGN specifies the sign of the equation * as described before. ISGN may only be 1 or -1. * * N1 (input) INTEGER * On entry, N1 specifies the order of matrix TL. * N1 may only be 0, 1 or 2. * * N2 (input) INTEGER * On entry, N2 specifies the order of matrix TR. * N2 may only be 0, 1 or 2. * * TL (input) DOUBLE PRECISION array, dimension (LDTL,2) * On entry, TL contains an N1 by N1 matrix. * * LDTL (input) INTEGER * The leading dimension of the matrix TL. LDTL >= max(1,N1). * * TR (input) DOUBLE PRECISION array, dimension (LDTR,2) * On entry, TR contains an N2 by N2 matrix. * * LDTR (input) INTEGER * The leading dimension of the matrix TR. LDTR >= max(1,N2). * * B (input) DOUBLE PRECISION array, dimension (LDB,2) * On entry, the N1 by N2 matrix B contains the right-hand * side of the equation. * * LDB (input) INTEGER * The leading dimension of the matrix B. LDB >= max(1,N1). * * SCALE (output) DOUBLE PRECISION * On exit, SCALE contains the scale factor. SCALE is chosen * less than or equal to 1 to prevent the solution overflowing. * * X (output) DOUBLE PRECISION array, dimension (LDX,2) * On exit, X contains the N1 by N2 solution. * * LDX (input) INTEGER * The leading dimension of the matrix X. LDX >= max(1,N1). * * XNORM (output) DOUBLE PRECISION * On exit, XNORM is the infinity-norm of the solution. * * INFO (output) INTEGER * On exit, INFO is set to * 0: successful exit. * 1: TL and TR have too close eigenvalues, so TL or * TR is perturbed to get a nonsingular equation. * NOTE: In the interests of speed, this routine does not * check the inputs for errors. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) DOUBLE PRECISION TWO, HALF, EIGHT PARAMETER ( TWO = 2.0D+0, HALF = 0.5D+0, EIGHT = 8.0D+0 ) * .. * .. Local Scalars .. LOGICAL BSWAP, XSWAP INTEGER I, IP, IPIV, IPSV, J, JP, JPSV, K DOUBLE PRECISION BET, EPS, GAM, L21, SGN, SMIN, SMLNUM, TAU1, $ TEMP, U11, U12, U22, XMAX * .. * .. Local Arrays .. LOGICAL BSWPIV( 4 ), XSWPIV( 4 ) INTEGER JPIV( 4 ), LOCL21( 4 ), LOCU12( 4 ), $ LOCU22( 4 ) DOUBLE PRECISION BTMP( 4 ), T16( 4, 4 ), TMP( 4 ), X2( 2 ) * .. * .. External Functions .. INTEGER IDAMAX DOUBLE PRECISION DLAMCH EXTERNAL IDAMAX, DLAMCH * .. * .. External Subroutines .. EXTERNAL DCOPY, DSWAP * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX * .. * .. Data statements .. DATA LOCU12 / 3, 4, 1, 2 / , LOCL21 / 2, 1, 4, 3 / , $ LOCU22 / 4, 3, 2, 1 / DATA XSWPIV / .FALSE., .FALSE., .TRUE., .TRUE. / DATA BSWPIV / .FALSE., .TRUE., .FALSE., .TRUE. / * .. * .. Executable Statements .. * * Do not check the input parameters for errors * INFO = 0 * * Quick return if possible * IF( N1.EQ.0 .OR. N2.EQ.0 ) $ RETURN * * Set constants to control overflow * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) / EPS SGN = ISGN * K = N1 + N1 + N2 - 2 GO TO ( 10, 20, 30, 50 )K * * 1 by 1: TL11*X + SGN*X*TR11 = B11 * 10 CONTINUE TAU1 = TL( 1, 1 ) + SGN*TR( 1, 1 ) BET = ABS( TAU1 ) IF( BET.LE.SMLNUM ) THEN TAU1 = SMLNUM BET = SMLNUM INFO = 1 END IF * SCALE = ONE GAM = ABS( B( 1, 1 ) ) IF( SMLNUM*GAM.GT.BET ) $ SCALE = ONE / GAM * X( 1, 1 ) = ( B( 1, 1 )*SCALE ) / TAU1 XNORM = ABS( X( 1, 1 ) ) RETURN * * 1 by 2: * TL11*[X11 X12] + ISGN*[X11 X12]*op[TR11 TR12] = [B11 B12] * [TR21 TR22] * 20 CONTINUE * SMIN = MAX( EPS*MAX( ABS( TL( 1, 1 ) ), ABS( TR( 1, 1 ) ), $ ABS( TR( 1, 2 ) ), ABS( TR( 2, 1 ) ), ABS( TR( 2, 2 ) ) ), $ SMLNUM ) TMP( 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) TMP( 4 ) = TL( 1, 1 ) + SGN*TR( 2, 2 ) IF( LTRANR ) THEN TMP( 2 ) = SGN*TR( 2, 1 ) TMP( 3 ) = SGN*TR( 1, 2 ) ELSE TMP( 2 ) = SGN*TR( 1, 2 ) TMP( 3 ) = SGN*TR( 2, 1 ) END IF BTMP( 1 ) = B( 1, 1 ) BTMP( 2 ) = B( 1, 2 ) GO TO 40 * * 2 by 1: * op[TL11 TL12]*[X11] + ISGN* [X11]*TR11 = [B11] * [TL21 TL22] [X21] [X21] [B21] * 30 CONTINUE SMIN = MAX( EPS*MAX( ABS( TR( 1, 1 ) ), ABS( TL( 1, 1 ) ), $ ABS( TL( 1, 2 ) ), ABS( TL( 2, 1 ) ), ABS( TL( 2, 2 ) ) ), $ SMLNUM ) TMP( 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) TMP( 4 ) = TL( 2, 2 ) + SGN*TR( 1, 1 ) IF( LTRANL ) THEN TMP( 2 ) = TL( 1, 2 ) TMP( 3 ) = TL( 2, 1 ) ELSE TMP( 2 ) = TL( 2, 1 ) TMP( 3 ) = TL( 1, 2 ) END IF BTMP( 1 ) = B( 1, 1 ) BTMP( 2 ) = B( 2, 1 ) 40 CONTINUE * * Solve 2 by 2 system using complete pivoting. * Set pivots less than SMIN to SMIN. * IPIV = IDAMAX( 4, TMP, 1 ) U11 = TMP( IPIV ) IF( ABS( U11 ).LE.SMIN ) THEN INFO = 1 U11 = SMIN END IF U12 = TMP( LOCU12( IPIV ) ) L21 = TMP( LOCL21( IPIV ) ) / U11 U22 = TMP( LOCU22( IPIV ) ) - U12*L21 XSWAP = XSWPIV( IPIV ) BSWAP = BSWPIV( IPIV ) IF( ABS( U22 ).LE.SMIN ) THEN INFO = 1 U22 = SMIN END IF IF( BSWAP ) THEN TEMP = BTMP( 2 ) BTMP( 2 ) = BTMP( 1 ) - L21*TEMP BTMP( 1 ) = TEMP ELSE BTMP( 2 ) = BTMP( 2 ) - L21*BTMP( 1 ) END IF SCALE = ONE IF( ( TWO*SMLNUM )*ABS( BTMP( 2 ) ).GT.ABS( U22 ) .OR. $ ( TWO*SMLNUM )*ABS( BTMP( 1 ) ).GT.ABS( U11 ) ) THEN SCALE = HALF / MAX( ABS( BTMP( 1 ) ), ABS( BTMP( 2 ) ) ) BTMP( 1 ) = BTMP( 1 )*SCALE BTMP( 2 ) = BTMP( 2 )*SCALE END IF X2( 2 ) = BTMP( 2 ) / U22 X2( 1 ) = BTMP( 1 ) / U11 - ( U12 / U11 )*X2( 2 ) IF( XSWAP ) THEN TEMP = X2( 2 ) X2( 2 ) = X2( 1 ) X2( 1 ) = TEMP END IF X( 1, 1 ) = X2( 1 ) IF( N1.EQ.1 ) THEN X( 1, 2 ) = X2( 2 ) XNORM = ABS( X( 1, 1 ) ) + ABS( X( 1, 2 ) ) ELSE X( 2, 1 ) = X2( 2 ) XNORM = MAX( ABS( X( 1, 1 ) ), ABS( X( 2, 1 ) ) ) END IF RETURN * * 2 by 2: * op[TL11 TL12]*[X11 X12] +ISGN* [X11 X12]*op[TR11 TR12] = [B11 B12] * [TL21 TL22] [X21 X22] [X21 X22] [TR21 TR22] [B21 B22] * * Solve equivalent 4 by 4 system using complete pivoting. * Set pivots less than SMIN to SMIN. * 50 CONTINUE SMIN = MAX( ABS( TR( 1, 1 ) ), ABS( TR( 1, 2 ) ), $ ABS( TR( 2, 1 ) ), ABS( TR( 2, 2 ) ) ) SMIN = MAX( SMIN, ABS( TL( 1, 1 ) ), ABS( TL( 1, 2 ) ), $ ABS( TL( 2, 1 ) ), ABS( TL( 2, 2 ) ) ) SMIN = MAX( EPS*SMIN, SMLNUM ) BTMP( 1 ) = ZERO CALL DCOPY( 16, BTMP, 0, T16, 1 ) T16( 1, 1 ) = TL( 1, 1 ) + SGN*TR( 1, 1 ) T16( 2, 2 ) = TL( 2, 2 ) + SGN*TR( 1, 1 ) T16( 3, 3 ) = TL( 1, 1 ) + SGN*TR( 2, 2 ) T16( 4, 4 ) = TL( 2, 2 ) + SGN*TR( 2, 2 ) IF( LTRANL ) THEN T16( 1, 2 ) = TL( 2, 1 ) T16( 2, 1 ) = TL( 1, 2 ) T16( 3, 4 ) = TL( 2, 1 ) T16( 4, 3 ) = TL( 1, 2 ) ELSE T16( 1, 2 ) = TL( 1, 2 ) T16( 2, 1 ) = TL( 2, 1 ) T16( 3, 4 ) = TL( 1, 2 ) T16( 4, 3 ) = TL( 2, 1 ) END IF IF( LTRANR ) THEN T16( 1, 3 ) = SGN*TR( 1, 2 ) T16( 2, 4 ) = SGN*TR( 1, 2 ) T16( 3, 1 ) = SGN*TR( 2, 1 ) T16( 4, 2 ) = SGN*TR( 2, 1 ) ELSE T16( 1, 3 ) = SGN*TR( 2, 1 ) T16( 2, 4 ) = SGN*TR( 2, 1 ) T16( 3, 1 ) = SGN*TR( 1, 2 ) T16( 4, 2 ) = SGN*TR( 1, 2 ) END IF BTMP( 1 ) = B( 1, 1 ) BTMP( 2 ) = B( 2, 1 ) BTMP( 3 ) = B( 1, 2 ) BTMP( 4 ) = B( 2, 2 ) * * Perform elimination * DO 100 I = 1, 3 XMAX = ZERO DO 70 IP = I, 4 DO 60 JP = I, 4 IF( ABS( T16( IP, JP ) ).GE.XMAX ) THEN XMAX = ABS( T16( IP, JP ) ) IPSV = IP JPSV = JP END IF 60 CONTINUE 70 CONTINUE IF( IPSV.NE.I ) THEN CALL DSWAP( 4, T16( IPSV, 1 ), 4, T16( I, 1 ), 4 ) TEMP = BTMP( I ) BTMP( I ) = BTMP( IPSV ) BTMP( IPSV ) = TEMP END IF IF( JPSV.NE.I ) $ CALL DSWAP( 4, T16( 1, JPSV ), 1, T16( 1, I ), 1 ) JPIV( I ) = JPSV IF( ABS( T16( I, I ) ).LT.SMIN ) THEN INFO = 1 T16( I, I ) = SMIN END IF DO 90 J = I + 1, 4 T16( J, I ) = T16( J, I ) / T16( I, I ) BTMP( J ) = BTMP( J ) - T16( J, I )*BTMP( I ) DO 80 K = I + 1, 4 T16( J, K ) = T16( J, K ) - T16( J, I )*T16( I, K ) 80 CONTINUE 90 CONTINUE 100 CONTINUE IF( ABS( T16( 4, 4 ) ).LT.SMIN ) $ T16( 4, 4 ) = SMIN SCALE = ONE IF( ( EIGHT*SMLNUM )*ABS( BTMP( 1 ) ).GT.ABS( T16( 1, 1 ) ) .OR. $ ( EIGHT*SMLNUM )*ABS( BTMP( 2 ) ).GT.ABS( T16( 2, 2 ) ) .OR. $ ( EIGHT*SMLNUM )*ABS( BTMP( 3 ) ).GT.ABS( T16( 3, 3 ) ) .OR. $ ( EIGHT*SMLNUM )*ABS( BTMP( 4 ) ).GT.ABS( T16( 4, 4 ) ) ) THEN SCALE = ( ONE / EIGHT ) / MAX( ABS( BTMP( 1 ) ), $ ABS( BTMP( 2 ) ), ABS( BTMP( 3 ) ), ABS( BTMP( 4 ) ) ) BTMP( 1 ) = BTMP( 1 )*SCALE BTMP( 2 ) = BTMP( 2 )*SCALE BTMP( 3 ) = BTMP( 3 )*SCALE BTMP( 4 ) = BTMP( 4 )*SCALE END IF DO 120 I = 1, 4 K = 5 - I TEMP = ONE / T16( K, K ) TMP( K ) = BTMP( K )*TEMP DO 110 J = K + 1, 4 TMP( K ) = TMP( K ) - ( TEMP*T16( K, J ) )*TMP( J ) 110 CONTINUE 120 CONTINUE DO 130 I = 1, 3 IF( JPIV( 4-I ).NE.4-I ) THEN TEMP = TMP( 4-I ) TMP( 4-I ) = TMP( JPIV( 4-I ) ) TMP( JPIV( 4-I ) ) = TEMP END IF 130 CONTINUE X( 1, 1 ) = TMP( 1 ) X( 2, 1 ) = TMP( 2 ) X( 1, 2 ) = TMP( 3 ) X( 2, 2 ) = TMP( 4 ) XNORM = MAX( ABS( TMP( 1 ) )+ABS( TMP( 3 ) ), $ ABS( TMP( 2 ) )+ABS( TMP( 4 ) ) ) RETURN * * End of DLASY2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORG2R( M, N, K, A, LDA, TAU, WORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER INFO, K, LDA, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORG2R generates an m by n real matrix Q with orthonormal columns, * which is defined as the first n columns of a product of k elementary * reflectors of order m * * Q = H(1) H(2) . . . H(k) * * as returned by DGEQRF. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix Q. M >= 0. * * N (input) INTEGER * The number of columns of the matrix Q. M >= N >= 0. * * K (input) INTEGER * The number of elementary reflectors whose product defines the * matrix Q. N >= K >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the i-th column must contain the vector which * defines the elementary reflector H(i), for i = 1,2,...,k, as * returned by DGEQRF in the first k columns of its array * argument A. * On exit, the m-by-n matrix Q. * * LDA (input) INTEGER * The first dimension of the array A. LDA >= max(1,M). * * TAU (input) DOUBLE PRECISION array, dimension (K) * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEQRF. * * WORK (workspace) DOUBLE PRECISION array, dimension (N) * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument has an illegal value * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I, J, L * .. * .. External Subroutines .. EXTERNAL DLARF, DSCAL, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 .OR. N.GT.M ) THEN INFO = -2 ELSE IF( K.LT.0 .OR. K.GT.N ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -5 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORG2R', -INFO ) RETURN END IF * * Quick return if possible * IF( N.LE.0 ) $ RETURN * * Initialise columns k+1:n to columns of the unit matrix * DO 20 J = K + 1, N DO 10 L = 1, M A( L, J ) = ZERO 10 CONTINUE A( J, J ) = ONE 20 CONTINUE * DO 40 I = K, 1, -1 * * Apply H(i) to A(i:m,i:n) from the left * IF( I.LT.N ) THEN A( I, I ) = ONE CALL DLARF( 'Left', M-I+1, N-I, A( I, I ), 1, TAU( I ), $ A( I, I+1 ), LDA, WORK ) END IF IF( I.LT.M ) $ CALL DSCAL( M-I, -TAU( I ), A( I+1, I ), 1 ) A( I, I ) = ONE - TAU( I ) * * Set A(1:i-1,i) to zero * DO 30 L = 1, I - 1 A( L, I ) = ZERO 30 CONTINUE 40 CONTINUE RETURN * * End of DORG2R * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORGHR( N, ILO, IHI, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, ILO, INFO, LDA, LWORK, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORGHR generates a real orthogonal matrix Q which is defined as the * product of IHI-ILO elementary reflectors of order N, as returned by * DGEHRD: * * Q = H(ilo) H(ilo+1) . . . H(ihi-1). * * Arguments * ========= * * N (input) INTEGER * The order of the matrix Q. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * ILO and IHI must have the same values as in the previous call * of DGEHRD. Q is equal to the unit matrix except in the * submatrix Q(ilo+1:ihi,ilo+1:ihi). * 1 <= ILO <= IHI <= N, if N > 0; ILO=1 and IHI=0, if N=0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the vectors which define the elementary reflectors, * as returned by DGEHRD. * On exit, the N-by-N orthogonal matrix Q. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,N). * * TAU (input) DOUBLE PRECISION array, dimension (N-1) * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEHRD. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= IHI-ILO. * For optimum performance LWORK >= (IHI-ILO)*NB, where NB is * the optimal blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL LQUERY INTEGER I, IINFO, J, LWKOPT, NB, NH * .. * .. External Subroutines .. EXTERNAL DORGQR, XERBLA * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 NH = IHI - ILO LQUERY = ( LWORK.EQ.-1 ) IF( N.LT.0 ) THEN INFO = -1 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, N ) ) THEN INFO = -2 ELSE IF( IHI.LT.MIN( ILO, N ) .OR. IHI.GT.N ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, N ) ) THEN INFO = -5 ELSE IF( LWORK.LT.MAX( 1, NH ) .AND. .NOT.LQUERY ) THEN INFO = -8 END IF * IF( INFO.EQ.0 ) THEN NB = ILAENV( 1, 'DORGQR', ' ', NH, NH, NH, -1 ) LWKOPT = MAX( 1, NH )*NB WORK( 1 ) = LWKOPT END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORGHR', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.EQ.0 ) THEN WORK( 1 ) = 1 RETURN END IF * * Shift the vectors which define the elementary reflectors one * column to the right, and set the first ilo and the last n-ihi * rows and columns to those of the unit matrix * DO 40 J = IHI, ILO + 1, -1 DO 10 I = 1, J - 1 A( I, J ) = ZERO 10 CONTINUE DO 20 I = J + 1, IHI A( I, J ) = A( I, J-1 ) 20 CONTINUE DO 30 I = IHI + 1, N A( I, J ) = ZERO 30 CONTINUE 40 CONTINUE DO 60 J = 1, ILO DO 50 I = 1, N A( I, J ) = ZERO 50 CONTINUE A( J, J ) = ONE 60 CONTINUE DO 80 J = IHI + 1, N DO 70 I = 1, N A( I, J ) = ZERO 70 CONTINUE A( J, J ) = ONE 80 CONTINUE * IF( NH.GT.0 ) THEN * * Generate Q(ilo+1:ihi,ilo+1:ihi) * CALL DORGQR( NH, NH, NH, A( ILO+1, ILO+1 ), LDA, TAU( ILO ), $ WORK, LWORK, IINFO ) END IF WORK( 1 ) = LWKOPT RETURN * * End of DORGHR * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORGQR( M, N, K, A, LDA, TAU, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER INFO, K, LDA, LWORK, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORGQR generates an M-by-N real matrix Q with orthonormal columns, * which is defined as the first N columns of a product of K elementary * reflectors of order M * * Q = H(1) H(2) . . . H(k) * * as returned by DGEQRF. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix Q. M >= 0. * * N (input) INTEGER * The number of columns of the matrix Q. M >= N >= 0. * * K (input) INTEGER * The number of elementary reflectors whose product defines the * matrix Q. N >= K >= 0. * * A (input/output) DOUBLE PRECISION array, dimension (LDA,N) * On entry, the i-th column must contain the vector which * defines the elementary reflector H(i), for i = 1,2,...,k, as * returned by DGEQRF in the first k columns of its array * argument A. * On exit, the M-by-N matrix Q. * * LDA (input) INTEGER * The first dimension of the array A. LDA >= max(1,M). * * TAU (input) DOUBLE PRECISION array, dimension (K) * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEQRF. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. LWORK >= max(1,N). * For optimum performance LWORK >= N*NB, where NB is the * optimal blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument has an illegal value * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. * .. Local Scalars .. LOGICAL LQUERY INTEGER I, IB, IINFO, IWS, J, KI, KK, L, LDWORK, $ LWKOPT, NB, NBMIN, NX * .. * .. External Subroutines .. EXTERNAL DLARFB, DLARFT, DORG2R, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. External Functions .. INTEGER ILAENV EXTERNAL ILAENV * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 NB = ILAENV( 1, 'DORGQR', ' ', M, N, K, -1 ) LWKOPT = MAX( 1, N )*NB WORK( 1 ) = LWKOPT LQUERY = ( LWORK.EQ.-1 ) IF( M.LT.0 ) THEN INFO = -1 ELSE IF( N.LT.0 .OR. N.GT.M ) THEN INFO = -2 ELSE IF( K.LT.0 .OR. K.GT.N ) THEN INFO = -3 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -5 ELSE IF( LWORK.LT.MAX( 1, N ) .AND. .NOT.LQUERY ) THEN INFO = -8 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORGQR', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( N.LE.0 ) THEN WORK( 1 ) = 1 RETURN END IF * NBMIN = 2 NX = 0 IWS = N IF( NB.GT.1 .AND. NB.LT.K ) THEN * * Determine when to cross over from blocked to unblocked code. * NX = MAX( 0, ILAENV( 3, 'DORGQR', ' ', M, N, K, -1 ) ) IF( NX.LT.K ) THEN * * Determine if workspace is large enough for blocked code. * LDWORK = N IWS = LDWORK*NB IF( LWORK.LT.IWS ) THEN * * Not enough workspace to use optimal NB: reduce NB and * determine the minimum value of NB. * NB = LWORK / LDWORK NBMIN = MAX( 2, ILAENV( 2, 'DORGQR', ' ', M, N, K, -1 ) ) END IF END IF END IF * IF( NB.GE.NBMIN .AND. NB.LT.K .AND. NX.LT.K ) THEN * * Use blocked code after the last block. * The first kk columns are handled by the block method. * KI = ( ( K-NX-1 ) / NB )*NB KK = MIN( K, KI+NB ) * * Set A(1:kk,kk+1:n) to zero. * DO 20 J = KK + 1, N DO 10 I = 1, KK A( I, J ) = ZERO 10 CONTINUE 20 CONTINUE ELSE KK = 0 END IF * * Use unblocked code for the last or only block. * IF( KK.LT.N ) $ CALL DORG2R( M-KK, N-KK, K-KK, A( KK+1, KK+1 ), LDA, $ TAU( KK+1 ), WORK, IINFO ) * IF( KK.GT.0 ) THEN * * Use blocked code * DO 50 I = KI + 1, 1, -NB IB = MIN( NB, K-I+1 ) IF( I+IB.LE.N ) THEN * * Form the triangular factor of the block reflector * H = H(i) H(i+1) . . . H(i+ib-1) * CALL DLARFT( 'Forward', 'Columnwise', M-I+1, IB, $ A( I, I ), LDA, TAU( I ), WORK, LDWORK ) * * Apply H to A(i:m,i+ib:n) from the left * CALL DLARFB( 'Left', 'No transpose', 'Forward', $ 'Columnwise', M-I+1, N-I-IB+1, IB, $ A( I, I ), LDA, WORK, LDWORK, A( I, I+IB ), $ LDA, WORK( IB+1 ), LDWORK ) END IF * * Apply H to rows i:m of current block * CALL DORG2R( M-I+1, IB, IB, A( I, I ), LDA, TAU( I ), WORK, $ IINFO ) * * Set rows 1:i-1 of current block to zero * DO 40 J = I, I + IB - 1 DO 30 L = 1, I - 1 A( L, J ) = ZERO 30 CONTINUE 40 CONTINUE 50 CONTINUE END IF * WORK( 1 ) = IWS RETURN * * End of DORGQR * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTREVC( SIDE, HOWMNY, SELECT, N, T, LDT, VL, LDVL, VR, $ LDVR, MM, M, WORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER HOWMNY, SIDE INTEGER INFO, LDT, LDVL, LDVR, M, MM, N * .. * .. Array Arguments .. LOGICAL SELECT( * ) DOUBLE PRECISION T( LDT, * ), VL( LDVL, * ), VR( LDVR, * ), $ WORK( * ) * .. * * Purpose * ======= * * DTREVC computes some or all of the right and/or left eigenvectors of * a real upper quasi-triangular matrix T. * Matrices of this type are produced by the Schur factorization of * a real general matrix: A = Q*T*Q**T, as computed by DHSEQR. * * The right eigenvector x and the left eigenvector y of T corresponding * to an eigenvalue w are defined by: * * T*x = w*x, (y**H)*T = w*(y**H) * * where y**H denotes the conjugate transpose of y. * The eigenvalues are not input to this routine, but are read directly * from the diagonal blocks of T. * * This routine returns the matrices X and/or Y of right and left * eigenvectors of T, or the products Q*X and/or Q*Y, where Q is an * input matrix. If Q is the orthogonal factor that reduces a matrix * A to Schur form T, then Q*X and Q*Y are the matrices of right and * left eigenvectors of A. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'R': compute right eigenvectors only; * = 'L': compute left eigenvectors only; * = 'B': compute both right and left eigenvectors. * * HOWMNY (input) CHARACTER*1 * = 'A': compute all right and/or left eigenvectors; * = 'B': compute all right and/or left eigenvectors, * backtransformed by the matrices in VR and/or VL; * = 'S': compute selected right and/or left eigenvectors, * as indicated by the logical array SELECT. * * SELECT (input/output) LOGICAL array, dimension (N) * If HOWMNY = 'S', SELECT specifies the eigenvectors to be * computed. * If w(j) is a real eigenvalue, the corresponding real * eigenvector is computed if SELECT(j) is .TRUE.. * If w(j) and w(j+1) are the real and imaginary parts of a * complex eigenvalue, the corresponding complex eigenvector is * computed if either SELECT(j) or SELECT(j+1) is .TRUE., and * on exit SELECT(j) is set to .TRUE. and SELECT(j+1) is set to * .FALSE.. * Not referenced if HOWMNY = 'A' or 'B'. * * N (input) INTEGER * The order of the matrix T. N >= 0. * * T (input) DOUBLE PRECISION array, dimension (LDT,N) * The upper quasi-triangular matrix T in Schur canonical form. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= max(1,N). * * VL (input/output) DOUBLE PRECISION array, dimension (LDVL,MM) * On entry, if SIDE = 'L' or 'B' and HOWMNY = 'B', VL must * contain an N-by-N matrix Q (usually the orthogonal matrix Q * of Schur vectors returned by DHSEQR). * On exit, if SIDE = 'L' or 'B', VL contains: * if HOWMNY = 'A', the matrix Y of left eigenvectors of T; * if HOWMNY = 'B', the matrix Q*Y; * if HOWMNY = 'S', the left eigenvectors of T specified by * SELECT, stored consecutively in the columns * of VL, in the same order as their * eigenvalues. * A complex eigenvector corresponding to a complex eigenvalue * is stored in two consecutive columns, the first holding the * real part, and the second the imaginary part. * Not referenced if SIDE = 'R'. * * LDVL (input) INTEGER * The leading dimension of the array VL. LDVL >= 1, and if * SIDE = 'L' or 'B', LDVL >= N. * * VR (input/output) DOUBLE PRECISION array, dimension (LDVR,MM) * On entry, if SIDE = 'R' or 'B' and HOWMNY = 'B', VR must * contain an N-by-N matrix Q (usually the orthogonal matrix Q * of Schur vectors returned by DHSEQR). * On exit, if SIDE = 'R' or 'B', VR contains: * if HOWMNY = 'A', the matrix X of right eigenvectors of T; * if HOWMNY = 'B', the matrix Q*X; * if HOWMNY = 'S', the right eigenvectors of T specified by * SELECT, stored consecutively in the columns * of VR, in the same order as their * eigenvalues. * A complex eigenvector corresponding to a complex eigenvalue * is stored in two consecutive columns, the first holding the * real part and the second the imaginary part. * Not referenced if SIDE = 'L'. * * LDVR (input) INTEGER * The leading dimension of the array VR. LDVR >= 1, and if * SIDE = 'R' or 'B', LDVR >= N. * * MM (input) INTEGER * The number of columns in the arrays VL and/or VR. MM >= M. * * M (output) INTEGER * The number of columns in the arrays VL and/or VR actually * used to store the eigenvectors. * If HOWMNY = 'A' or 'B', M is set to N. * Each selected real eigenvector occupies one column and each * selected complex eigenvector occupies two columns. * * WORK (workspace) DOUBLE PRECISION array, dimension (3*N) * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * Further Details * =============== * * The algorithm used in this program is basically backward (forward) * substitution, with scaling to make the the code robust against * possible overflow. * * Each eigenvector is normalized so that the element of largest * magnitude has magnitude 1; here the magnitude of a complex number * (x,y) is taken to be |x| + |y|. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL ALLV, BOTHV, LEFTV, OVER, PAIR, RIGHTV, SOMEV INTEGER I, IERR, II, IP, IS, J, J1, J2, JNXT, K, KI, N2 DOUBLE PRECISION BETA, BIGNUM, EMAX, OVFL, REC, REMAX, SCALE, $ SMIN, SMLNUM, ULP, UNFL, VCRIT, VMAX, WI, WR, $ XNORM * .. * .. External Functions .. LOGICAL LSAME INTEGER IDAMAX DOUBLE PRECISION DDOT, DLAMCH EXTERNAL LSAME, IDAMAX, DDOT, DLAMCH * .. * .. External Subroutines .. EXTERNAL DAXPY, DCOPY, DGEMV, DLALN2, DSCAL, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, SQRT * .. * .. Local Arrays .. DOUBLE PRECISION X( 2, 2 ) * .. * .. Executable Statements .. * * Decode and test the input parameters * BOTHV = LSAME( SIDE, 'B' ) RIGHTV = LSAME( SIDE, 'R' ) .OR. BOTHV LEFTV = LSAME( SIDE, 'L' ) .OR. BOTHV * ALLV = LSAME( HOWMNY, 'A' ) OVER = LSAME( HOWMNY, 'B' ) SOMEV = LSAME( HOWMNY, 'S' ) * INFO = 0 IF( .NOT.RIGHTV .AND. .NOT.LEFTV ) THEN INFO = -1 ELSE IF( .NOT.ALLV .AND. .NOT.OVER .AND. .NOT.SOMEV ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( LDT.LT.MAX( 1, N ) ) THEN INFO = -6 ELSE IF( LDVL.LT.1 .OR. ( LEFTV .AND. LDVL.LT.N ) ) THEN INFO = -8 ELSE IF( LDVR.LT.1 .OR. ( RIGHTV .AND. LDVR.LT.N ) ) THEN INFO = -10 ELSE * * Set M to the number of columns required to store the selected * eigenvectors, standardize the array SELECT if necessary, and * test MM. * IF( SOMEV ) THEN M = 0 PAIR = .FALSE. DO 10 J = 1, N IF( PAIR ) THEN PAIR = .FALSE. SELECT( J ) = .FALSE. ELSE IF( J.LT.N ) THEN IF( T( J+1, J ).EQ.ZERO ) THEN IF( SELECT( J ) ) $ M = M + 1 ELSE PAIR = .TRUE. IF( SELECT( J ) .OR. SELECT( J+1 ) ) THEN SELECT( J ) = .TRUE. M = M + 2 END IF END IF ELSE IF( SELECT( N ) ) $ M = M + 1 END IF END IF 10 CONTINUE ELSE M = N END IF * IF( MM.LT.M ) THEN INFO = -11 END IF END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTREVC', -INFO ) RETURN END IF * * Quick return if possible. * IF( N.EQ.0 ) $ RETURN * * Set the constants to control overflow. * UNFL = DLAMCH( 'Safe minimum' ) OVFL = ONE / UNFL CALL DLABAD( UNFL, OVFL ) ULP = DLAMCH( 'Precision' ) SMLNUM = UNFL*( N / ULP ) BIGNUM = ( ONE-ULP ) / SMLNUM * * Compute 1-norm of each column of strictly upper triangular * part of T to control overflow in triangular solver. * WORK( 1 ) = ZERO DO 30 J = 2, N WORK( J ) = ZERO DO 20 I = 1, J - 1 WORK( J ) = WORK( J ) + ABS( T( I, J ) ) 20 CONTINUE 30 CONTINUE * * Index IP is used to specify the real or complex eigenvalue: * IP = 0, real eigenvalue, * 1, first of conjugate complex pair: (wr,wi) * -1, second of conjugate complex pair: (wr,wi) * N2 = 2*N * IF( RIGHTV ) THEN * * Compute right eigenvectors. * IP = 0 IS = M DO 140 KI = N, 1, -1 * IF( IP.EQ.1 ) $ GO TO 130 IF( KI.EQ.1 ) $ GO TO 40 IF( T( KI, KI-1 ).EQ.ZERO ) $ GO TO 40 IP = -1 * 40 CONTINUE IF( SOMEV ) THEN IF( IP.EQ.0 ) THEN IF( .NOT.SELECT( KI ) ) $ GO TO 130 ELSE IF( .NOT.SELECT( KI-1 ) ) $ GO TO 130 END IF END IF * * Compute the KI-th eigenvalue (WR,WI). * WR = T( KI, KI ) WI = ZERO IF( IP.NE.0 ) $ WI = SQRT( ABS( T( KI, KI-1 ) ) )* $ SQRT( ABS( T( KI-1, KI ) ) ) SMIN = MAX( ULP*( ABS( WR )+ABS( WI ) ), SMLNUM ) * IF( IP.EQ.0 ) THEN * * Real right eigenvector * WORK( KI+N ) = ONE * * Form right-hand side * DO 50 K = 1, KI - 1 WORK( K+N ) = -T( K, KI ) 50 CONTINUE * * Solve the upper quasi-triangular system: * (T(1:KI-1,1:KI-1) - WR)*X = SCALE*WORK. * JNXT = KI - 1 DO 60 J = KI - 1, 1, -1 IF( J.GT.JNXT ) $ GO TO 60 J1 = J J2 = J JNXT = J - 1 IF( J.GT.1 ) THEN IF( T( J, J-1 ).NE.ZERO ) THEN J1 = J - 1 JNXT = J - 2 END IF END IF * IF( J1.EQ.J2 ) THEN * * 1-by-1 diagonal block * CALL DLALN2( .FALSE., 1, 1, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, $ ZERO, X, 2, SCALE, XNORM, IERR ) * * Scale X(1,1) to avoid overflow when updating * the right-hand side. * IF( XNORM.GT.ONE ) THEN IF( WORK( J ).GT.BIGNUM / XNORM ) THEN X( 1, 1 ) = X( 1, 1 ) / XNORM SCALE = SCALE / XNORM END IF END IF * * Scale if necessary * IF( SCALE.NE.ONE ) $ CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) WORK( J+N ) = X( 1, 1 ) * * Update right-hand side * CALL DAXPY( J-1, -X( 1, 1 ), T( 1, J ), 1, $ WORK( 1+N ), 1 ) * ELSE * * 2-by-2 diagonal block * CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, $ T( J-1, J-1 ), LDT, ONE, ONE, $ WORK( J-1+N ), N, WR, ZERO, X, 2, $ SCALE, XNORM, IERR ) * * Scale X(1,1) and X(2,1) to avoid overflow when * updating the right-hand side. * IF( XNORM.GT.ONE ) THEN BETA = MAX( WORK( J-1 ), WORK( J ) ) IF( BETA.GT.BIGNUM / XNORM ) THEN X( 1, 1 ) = X( 1, 1 ) / XNORM X( 2, 1 ) = X( 2, 1 ) / XNORM SCALE = SCALE / XNORM END IF END IF * * Scale if necessary * IF( SCALE.NE.ONE ) $ CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) WORK( J-1+N ) = X( 1, 1 ) WORK( J+N ) = X( 2, 1 ) * * Update right-hand side * CALL DAXPY( J-2, -X( 1, 1 ), T( 1, J-1 ), 1, $ WORK( 1+N ), 1 ) CALL DAXPY( J-2, -X( 2, 1 ), T( 1, J ), 1, $ WORK( 1+N ), 1 ) END IF 60 CONTINUE * * Copy the vector x or Q*x to VR and normalize. * IF( .NOT.OVER ) THEN CALL DCOPY( KI, WORK( 1+N ), 1, VR( 1, IS ), 1 ) * II = IDAMAX( KI, VR( 1, IS ), 1 ) REMAX = ONE / ABS( VR( II, IS ) ) CALL DSCAL( KI, REMAX, VR( 1, IS ), 1 ) * DO 70 K = KI + 1, N VR( K, IS ) = ZERO 70 CONTINUE ELSE IF( KI.GT.1 ) $ CALL DGEMV( 'N', N, KI-1, ONE, VR, LDVR, $ WORK( 1+N ), 1, WORK( KI+N ), $ VR( 1, KI ), 1 ) * II = IDAMAX( N, VR( 1, KI ), 1 ) REMAX = ONE / ABS( VR( II, KI ) ) CALL DSCAL( N, REMAX, VR( 1, KI ), 1 ) END IF * ELSE * * Complex right eigenvector. * * Initial solve * [ (T(KI-1,KI-1) T(KI-1,KI) ) - (WR + I* WI)]*X = 0. * [ (T(KI,KI-1) T(KI,KI) ) ] * IF( ABS( T( KI-1, KI ) ).GE.ABS( T( KI, KI-1 ) ) ) THEN WORK( KI-1+N ) = ONE WORK( KI+N2 ) = WI / T( KI-1, KI ) ELSE WORK( KI-1+N ) = -WI / T( KI, KI-1 ) WORK( KI+N2 ) = ONE END IF WORK( KI+N ) = ZERO WORK( KI-1+N2 ) = ZERO * * Form right-hand side * DO 80 K = 1, KI - 2 WORK( K+N ) = -WORK( KI-1+N )*T( K, KI-1 ) WORK( K+N2 ) = -WORK( KI+N2 )*T( K, KI ) 80 CONTINUE * * Solve upper quasi-triangular system: * (T(1:KI-2,1:KI-2) - (WR+i*WI))*X = SCALE*(WORK+i*WORK2) * JNXT = KI - 2 DO 90 J = KI - 2, 1, -1 IF( J.GT.JNXT ) $ GO TO 90 J1 = J J2 = J JNXT = J - 1 IF( J.GT.1 ) THEN IF( T( J, J-1 ).NE.ZERO ) THEN J1 = J - 1 JNXT = J - 2 END IF END IF * IF( J1.EQ.J2 ) THEN * * 1-by-1 diagonal block * CALL DLALN2( .FALSE., 1, 2, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, WI, $ X, 2, SCALE, XNORM, IERR ) * * Scale X(1,1) and X(1,2) to avoid overflow when * updating the right-hand side. * IF( XNORM.GT.ONE ) THEN IF( WORK( J ).GT.BIGNUM / XNORM ) THEN X( 1, 1 ) = X( 1, 1 ) / XNORM X( 1, 2 ) = X( 1, 2 ) / XNORM SCALE = SCALE / XNORM END IF END IF * * Scale if necessary * IF( SCALE.NE.ONE ) THEN CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) CALL DSCAL( KI, SCALE, WORK( 1+N2 ), 1 ) END IF WORK( J+N ) = X( 1, 1 ) WORK( J+N2 ) = X( 1, 2 ) * * Update the right-hand side * CALL DAXPY( J-1, -X( 1, 1 ), T( 1, J ), 1, $ WORK( 1+N ), 1 ) CALL DAXPY( J-1, -X( 1, 2 ), T( 1, J ), 1, $ WORK( 1+N2 ), 1 ) * ELSE * * 2-by-2 diagonal block * CALL DLALN2( .FALSE., 2, 2, SMIN, ONE, $ T( J-1, J-1 ), LDT, ONE, ONE, $ WORK( J-1+N ), N, WR, WI, X, 2, SCALE, $ XNORM, IERR ) * * Scale X to avoid overflow when updating * the right-hand side. * IF( XNORM.GT.ONE ) THEN BETA = MAX( WORK( J-1 ), WORK( J ) ) IF( BETA.GT.BIGNUM / XNORM ) THEN REC = ONE / XNORM X( 1, 1 ) = X( 1, 1 )*REC X( 1, 2 ) = X( 1, 2 )*REC X( 2, 1 ) = X( 2, 1 )*REC X( 2, 2 ) = X( 2, 2 )*REC SCALE = SCALE*REC END IF END IF * * Scale if necessary * IF( SCALE.NE.ONE ) THEN CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 ) CALL DSCAL( KI, SCALE, WORK( 1+N2 ), 1 ) END IF WORK( J-1+N ) = X( 1, 1 ) WORK( J+N ) = X( 2, 1 ) WORK( J-1+N2 ) = X( 1, 2 ) WORK( J+N2 ) = X( 2, 2 ) * * Update the right-hand side * CALL DAXPY( J-2, -X( 1, 1 ), T( 1, J-1 ), 1, $ WORK( 1+N ), 1 ) CALL DAXPY( J-2, -X( 2, 1 ), T( 1, J ), 1, $ WORK( 1+N ), 1 ) CALL DAXPY( J-2, -X( 1, 2 ), T( 1, J-1 ), 1, $ WORK( 1+N2 ), 1 ) CALL DAXPY( J-2, -X( 2, 2 ), T( 1, J ), 1, $ WORK( 1+N2 ), 1 ) END IF 90 CONTINUE * * Copy the vector x or Q*x to VR and normalize. * IF( .NOT.OVER ) THEN CALL DCOPY( KI, WORK( 1+N ), 1, VR( 1, IS-1 ), 1 ) CALL DCOPY( KI, WORK( 1+N2 ), 1, VR( 1, IS ), 1 ) * EMAX = ZERO DO 100 K = 1, KI EMAX = MAX( EMAX, ABS( VR( K, IS-1 ) )+ $ ABS( VR( K, IS ) ) ) 100 CONTINUE * REMAX = ONE / EMAX CALL DSCAL( KI, REMAX, VR( 1, IS-1 ), 1 ) CALL DSCAL( KI, REMAX, VR( 1, IS ), 1 ) * DO 110 K = KI + 1, N VR( K, IS-1 ) = ZERO VR( K, IS ) = ZERO 110 CONTINUE * ELSE * IF( KI.GT.2 ) THEN CALL DGEMV( 'N', N, KI-2, ONE, VR, LDVR, $ WORK( 1+N ), 1, WORK( KI-1+N ), $ VR( 1, KI-1 ), 1 ) CALL DGEMV( 'N', N, KI-2, ONE, VR, LDVR, $ WORK( 1+N2 ), 1, WORK( KI+N2 ), $ VR( 1, KI ), 1 ) ELSE CALL DSCAL( N, WORK( KI-1+N ), VR( 1, KI-1 ), 1 ) CALL DSCAL( N, WORK( KI+N2 ), VR( 1, KI ), 1 ) END IF * EMAX = ZERO DO 120 K = 1, N EMAX = MAX( EMAX, ABS( VR( K, KI-1 ) )+ $ ABS( VR( K, KI ) ) ) 120 CONTINUE REMAX = ONE / EMAX CALL DSCAL( N, REMAX, VR( 1, KI-1 ), 1 ) CALL DSCAL( N, REMAX, VR( 1, KI ), 1 ) END IF END IF * IS = IS - 1 IF( IP.NE.0 ) $ IS = IS - 1 130 CONTINUE IF( IP.EQ.1 ) $ IP = 0 IF( IP.EQ.-1 ) $ IP = 1 140 CONTINUE END IF * IF( LEFTV ) THEN * * Compute left eigenvectors. * IP = 0 IS = 1 DO 260 KI = 1, N * IF( IP.EQ.-1 ) $ GO TO 250 IF( KI.EQ.N ) $ GO TO 150 IF( T( KI+1, KI ).EQ.ZERO ) $ GO TO 150 IP = 1 * 150 CONTINUE IF( SOMEV ) THEN IF( .NOT.SELECT( KI ) ) $ GO TO 250 END IF * * Compute the KI-th eigenvalue (WR,WI). * WR = T( KI, KI ) WI = ZERO IF( IP.NE.0 ) $ WI = SQRT( ABS( T( KI, KI+1 ) ) )* $ SQRT( ABS( T( KI+1, KI ) ) ) SMIN = MAX( ULP*( ABS( WR )+ABS( WI ) ), SMLNUM ) * IF( IP.EQ.0 ) THEN * * Real left eigenvector. * WORK( KI+N ) = ONE * * Form right-hand side * DO 160 K = KI + 1, N WORK( K+N ) = -T( KI, K ) 160 CONTINUE * * Solve the quasi-triangular system: * (T(KI+1:N,KI+1:N) - WR)'*X = SCALE*WORK * VMAX = ONE VCRIT = BIGNUM * JNXT = KI + 1 DO 170 J = KI + 1, N IF( J.LT.JNXT ) $ GO TO 170 J1 = J J2 = J JNXT = J + 1 IF( J.LT.N ) THEN IF( T( J+1, J ).NE.ZERO ) THEN J2 = J + 1 JNXT = J + 2 END IF END IF * IF( J1.EQ.J2 ) THEN * * 1-by-1 diagonal block * * Scale if necessary to avoid overflow when forming * the right-hand side. * IF( WORK( J ).GT.VCRIT ) THEN REC = ONE / VMAX CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) VMAX = ONE VCRIT = BIGNUM END IF * WORK( J+N ) = WORK( J+N ) - $ DDOT( J-KI-1, T( KI+1, J ), 1, $ WORK( KI+1+N ), 1 ) * * Solve (T(J,J)-WR)'*X = WORK * CALL DLALN2( .FALSE., 1, 1, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, $ ZERO, X, 2, SCALE, XNORM, IERR ) * * Scale if necessary * IF( SCALE.NE.ONE ) $ CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) WORK( J+N ) = X( 1, 1 ) VMAX = MAX( ABS( WORK( J+N ) ), VMAX ) VCRIT = BIGNUM / VMAX * ELSE * * 2-by-2 diagonal block * * Scale if necessary to avoid overflow when forming * the right-hand side. * BETA = MAX( WORK( J ), WORK( J+1 ) ) IF( BETA.GT.VCRIT ) THEN REC = ONE / VMAX CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) VMAX = ONE VCRIT = BIGNUM END IF * WORK( J+N ) = WORK( J+N ) - $ DDOT( J-KI-1, T( KI+1, J ), 1, $ WORK( KI+1+N ), 1 ) * WORK( J+1+N ) = WORK( J+1+N ) - $ DDOT( J-KI-1, T( KI+1, J+1 ), 1, $ WORK( KI+1+N ), 1 ) * * Solve * [T(J,J)-WR T(J,J+1) ]'* X = SCALE*( WORK1 ) * [T(J+1,J) T(J+1,J+1)-WR] ( WORK2 ) * CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, $ ZERO, X, 2, SCALE, XNORM, IERR ) * * Scale if necessary * IF( SCALE.NE.ONE ) $ CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) WORK( J+N ) = X( 1, 1 ) WORK( J+1+N ) = X( 2, 1 ) * VMAX = MAX( ABS( WORK( J+N ) ), $ ABS( WORK( J+1+N ) ), VMAX ) VCRIT = BIGNUM / VMAX * END IF 170 CONTINUE * * Copy the vector x or Q*x to VL and normalize. * IF( .NOT.OVER ) THEN CALL DCOPY( N-KI+1, WORK( KI+N ), 1, VL( KI, IS ), 1 ) * II = IDAMAX( N-KI+1, VL( KI, IS ), 1 ) + KI - 1 REMAX = ONE / ABS( VL( II, IS ) ) CALL DSCAL( N-KI+1, REMAX, VL( KI, IS ), 1 ) * DO 180 K = 1, KI - 1 VL( K, IS ) = ZERO 180 CONTINUE * ELSE * IF( KI.LT.N ) $ CALL DGEMV( 'N', N, N-KI, ONE, VL( 1, KI+1 ), LDVL, $ WORK( KI+1+N ), 1, WORK( KI+N ), $ VL( 1, KI ), 1 ) * II = IDAMAX( N, VL( 1, KI ), 1 ) REMAX = ONE / ABS( VL( II, KI ) ) CALL DSCAL( N, REMAX, VL( 1, KI ), 1 ) * END IF * ELSE * * Complex left eigenvector. * * Initial solve: * ((T(KI,KI) T(KI,KI+1) )' - (WR - I* WI))*X = 0. * ((T(KI+1,KI) T(KI+1,KI+1)) ) * IF( ABS( T( KI, KI+1 ) ).GE.ABS( T( KI+1, KI ) ) ) THEN WORK( KI+N ) = WI / T( KI, KI+1 ) WORK( KI+1+N2 ) = ONE ELSE WORK( KI+N ) = ONE WORK( KI+1+N2 ) = -WI / T( KI+1, KI ) END IF WORK( KI+1+N ) = ZERO WORK( KI+N2 ) = ZERO * * Form right-hand side * DO 190 K = KI + 2, N WORK( K+N ) = -WORK( KI+N )*T( KI, K ) WORK( K+N2 ) = -WORK( KI+1+N2 )*T( KI+1, K ) 190 CONTINUE * * Solve complex quasi-triangular system: * ( T(KI+2,N:KI+2,N) - (WR-i*WI) )*X = WORK1+i*WORK2 * VMAX = ONE VCRIT = BIGNUM * JNXT = KI + 2 DO 200 J = KI + 2, N IF( J.LT.JNXT ) $ GO TO 200 J1 = J J2 = J JNXT = J + 1 IF( J.LT.N ) THEN IF( T( J+1, J ).NE.ZERO ) THEN J2 = J + 1 JNXT = J + 2 END IF END IF * IF( J1.EQ.J2 ) THEN * * 1-by-1 diagonal block * * Scale if necessary to avoid overflow when * forming the right-hand side elements. * IF( WORK( J ).GT.VCRIT ) THEN REC = ONE / VMAX CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) CALL DSCAL( N-KI+1, REC, WORK( KI+N2 ), 1 ) VMAX = ONE VCRIT = BIGNUM END IF * WORK( J+N ) = WORK( J+N ) - $ DDOT( J-KI-2, T( KI+2, J ), 1, $ WORK( KI+2+N ), 1 ) WORK( J+N2 ) = WORK( J+N2 ) - $ DDOT( J-KI-2, T( KI+2, J ), 1, $ WORK( KI+2+N2 ), 1 ) * * Solve (T(J,J)-(WR-i*WI))*(X11+i*X12)= WK+I*WK2 * CALL DLALN2( .FALSE., 1, 2, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, $ -WI, X, 2, SCALE, XNORM, IERR ) * * Scale if necessary * IF( SCALE.NE.ONE ) THEN CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) CALL DSCAL( N-KI+1, SCALE, WORK( KI+N2 ), 1 ) END IF WORK( J+N ) = X( 1, 1 ) WORK( J+N2 ) = X( 1, 2 ) VMAX = MAX( ABS( WORK( J+N ) ), $ ABS( WORK( J+N2 ) ), VMAX ) VCRIT = BIGNUM / VMAX * ELSE * * 2-by-2 diagonal block * * Scale if necessary to avoid overflow when forming * the right-hand side elements. * BETA = MAX( WORK( J ), WORK( J+1 ) ) IF( BETA.GT.VCRIT ) THEN REC = ONE / VMAX CALL DSCAL( N-KI+1, REC, WORK( KI+N ), 1 ) CALL DSCAL( N-KI+1, REC, WORK( KI+N2 ), 1 ) VMAX = ONE VCRIT = BIGNUM END IF * WORK( J+N ) = WORK( J+N ) - $ DDOT( J-KI-2, T( KI+2, J ), 1, $ WORK( KI+2+N ), 1 ) * WORK( J+N2 ) = WORK( J+N2 ) - $ DDOT( J-KI-2, T( KI+2, J ), 1, $ WORK( KI+2+N2 ), 1 ) * WORK( J+1+N ) = WORK( J+1+N ) - $ DDOT( J-KI-2, T( KI+2, J+1 ), 1, $ WORK( KI+2+N ), 1 ) * WORK( J+1+N2 ) = WORK( J+1+N2 ) - $ DDOT( J-KI-2, T( KI+2, J+1 ), 1, $ WORK( KI+2+N2 ), 1 ) * * Solve 2-by-2 complex linear equation * ([T(j,j) T(j,j+1) ]'-(wr-i*wi)*I)*X = SCALE*B * ([T(j+1,j) T(j+1,j+1)] ) * CALL DLALN2( .TRUE., 2, 2, SMIN, ONE, T( J, J ), $ LDT, ONE, ONE, WORK( J+N ), N, WR, $ -WI, X, 2, SCALE, XNORM, IERR ) * * Scale if necessary * IF( SCALE.NE.ONE ) THEN CALL DSCAL( N-KI+1, SCALE, WORK( KI+N ), 1 ) CALL DSCAL( N-KI+1, SCALE, WORK( KI+N2 ), 1 ) END IF WORK( J+N ) = X( 1, 1 ) WORK( J+N2 ) = X( 1, 2 ) WORK( J+1+N ) = X( 2, 1 ) WORK( J+1+N2 ) = X( 2, 2 ) VMAX = MAX( ABS( X( 1, 1 ) ), ABS( X( 1, 2 ) ), $ ABS( X( 2, 1 ) ), ABS( X( 2, 2 ) ), VMAX ) VCRIT = BIGNUM / VMAX * END IF 200 CONTINUE * * Copy the vector x or Q*x to VL and normalize. * IF( .NOT.OVER ) THEN CALL DCOPY( N-KI+1, WORK( KI+N ), 1, VL( KI, IS ), 1 ) CALL DCOPY( N-KI+1, WORK( KI+N2 ), 1, VL( KI, IS+1 ), $ 1 ) * EMAX = ZERO DO 220 K = KI, N EMAX = MAX( EMAX, ABS( VL( K, IS ) )+ $ ABS( VL( K, IS+1 ) ) ) 220 CONTINUE REMAX = ONE / EMAX CALL DSCAL( N-KI+1, REMAX, VL( KI, IS ), 1 ) CALL DSCAL( N-KI+1, REMAX, VL( KI, IS+1 ), 1 ) * DO 230 K = 1, KI - 1 VL( K, IS ) = ZERO VL( K, IS+1 ) = ZERO 230 CONTINUE ELSE IF( KI.LT.N-1 ) THEN CALL DGEMV( 'N', N, N-KI-1, ONE, VL( 1, KI+2 ), $ LDVL, WORK( KI+2+N ), 1, WORK( KI+N ), $ VL( 1, KI ), 1 ) CALL DGEMV( 'N', N, N-KI-1, ONE, VL( 1, KI+2 ), $ LDVL, WORK( KI+2+N2 ), 1, $ WORK( KI+1+N2 ), VL( 1, KI+1 ), 1 ) ELSE CALL DSCAL( N, WORK( KI+N ), VL( 1, KI ), 1 ) CALL DSCAL( N, WORK( KI+1+N2 ), VL( 1, KI+1 ), 1 ) END IF * EMAX = ZERO DO 240 K = 1, N EMAX = MAX( EMAX, ABS( VL( K, KI ) )+ $ ABS( VL( K, KI+1 ) ) ) 240 CONTINUE REMAX = ONE / EMAX CALL DSCAL( N, REMAX, VL( 1, KI ), 1 ) CALL DSCAL( N, REMAX, VL( 1, KI+1 ), 1 ) * END IF * END IF * IS = IS + 1 IF( IP.NE.0 ) $ IS = IS + 1 250 CONTINUE IF( IP.EQ.-1 ) $ IP = 0 IF( IP.EQ.1 ) $ IP = -1 * 260 CONTINUE * END IF * RETURN * * End of DTREVC * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTREXC( COMPQ, N, T, LDT, Q, LDQ, IFST, ILST, WORK, $ INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER COMPQ INTEGER IFST, ILST, INFO, LDQ, LDT, N * .. * .. Array Arguments .. DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WORK( * ) * .. * * Purpose * ======= * * DTREXC reorders the real Schur factorization of a real matrix * A = Q*T*Q**T, so that the diagonal block of T with row index IFST is * moved to row ILST. * * The real Schur form T is reordered by an orthogonal similarity * transformation Z**T*T*Z, and optionally the matrix Q of Schur vectors * is updated by postmultiplying it with Z. * * T must be in Schur canonical form (as returned by DHSEQR), that is, * block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each * 2-by-2 diagonal block has its diagonal elements equal and its * off-diagonal elements of opposite sign. * * Arguments * ========= * * COMPQ (input) CHARACTER*1 * = 'V': update the matrix Q of Schur vectors; * = 'N': do not update Q. * * N (input) INTEGER * The order of the matrix T. N >= 0. * * T (input/output) DOUBLE PRECISION array, dimension (LDT,N) * On entry, the upper quasi-triangular matrix T, in Schur * Schur canonical form. * On exit, the reordered upper quasi-triangular matrix, again * in Schur canonical form. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= max(1,N). * * Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N) * On entry, if COMPQ = 'V', the matrix Q of Schur vectors. * On exit, if COMPQ = 'V', Q has been postmultiplied by the * orthogonal transformation matrix Z which reorders T. * If COMPQ = 'N', Q is not referenced. * * LDQ (input) INTEGER * The leading dimension of the array Q. LDQ >= max(1,N). * * IFST (input/output) INTEGER * ILST (input/output) INTEGER * Specify the reordering of the diagonal blocks of T. * The block with row index IFST is moved to row ILST, by a * sequence of transpositions between adjacent blocks. * On exit, if IFST pointed on entry to the second row of a * 2-by-2 block, it is changed to point to the first row; ILST * always points to the first row of the block in its final * position (which may differ from its input value by +1 or -1). * 1 <= IFST <= N; 1 <= ILST <= N. * * WORK (workspace) DOUBLE PRECISION array, dimension (N) * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * = 1: two adjacent blocks were too close to swap (the problem * is very ill-conditioned); T may have been partially * reordered, and ILST points to the first row of the * current position of the block being moved. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. * .. Local Scalars .. LOGICAL WANTQ INTEGER HERE, NBF, NBL, NBNEXT * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DLAEXC, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Decode and test the input arguments. * INFO = 0 WANTQ = LSAME( COMPQ, 'V' ) IF( .NOT.WANTQ .AND. .NOT.LSAME( COMPQ, 'N' ) ) THEN INFO = -1 ELSE IF( N.LT.0 ) THEN INFO = -2 ELSE IF( LDT.LT.MAX( 1, N ) ) THEN INFO = -4 ELSE IF( LDQ.LT.1 .OR. ( WANTQ .AND. LDQ.LT.MAX( 1, N ) ) ) THEN INFO = -6 ELSE IF( IFST.LT.1 .OR. IFST.GT.N ) THEN INFO = -7 ELSE IF( ILST.LT.1 .OR. ILST.GT.N ) THEN INFO = -8 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTREXC', -INFO ) RETURN END IF * * Quick return if possible * IF( N.LE.1 ) $ RETURN * * Determine the first row of specified block * and find out it is 1 by 1 or 2 by 2. * IF( IFST.GT.1 ) THEN IF( T( IFST, IFST-1 ).NE.ZERO ) $ IFST = IFST - 1 END IF NBF = 1 IF( IFST.LT.N ) THEN IF( T( IFST+1, IFST ).NE.ZERO ) $ NBF = 2 END IF * * Determine the first row of the final block * and find out it is 1 by 1 or 2 by 2. * IF( ILST.GT.1 ) THEN IF( T( ILST, ILST-1 ).NE.ZERO ) $ ILST = ILST - 1 END IF NBL = 1 IF( ILST.LT.N ) THEN IF( T( ILST+1, ILST ).NE.ZERO ) $ NBL = 2 END IF * IF( IFST.EQ.ILST ) $ RETURN * IF( IFST.LT.ILST ) THEN * * Update ILST * IF( NBF.EQ.2 .AND. NBL.EQ.1 ) $ ILST = ILST - 1 IF( NBF.EQ.1 .AND. NBL.EQ.2 ) $ ILST = ILST + 1 * HERE = IFST * 10 CONTINUE * * Swap block with next one below * IF( NBF.EQ.1 .OR. NBF.EQ.2 ) THEN * * Current block either 1 by 1 or 2 by 2 * NBNEXT = 1 IF( HERE+NBF+1.LE.N ) THEN IF( T( HERE+NBF+1, HERE+NBF ).NE.ZERO ) $ NBNEXT = 2 END IF CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, NBF, NBNEXT, $ WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF HERE = HERE + NBNEXT * * Test if 2 by 2 block breaks into two 1 by 1 blocks * IF( NBF.EQ.2 ) THEN IF( T( HERE+1, HERE ).EQ.ZERO ) $ NBF = 3 END IF * ELSE * * Current block consists of two 1 by 1 blocks each of which * must be swapped individually * NBNEXT = 1 IF( HERE+3.LE.N ) THEN IF( T( HERE+3, HERE+2 ).NE.ZERO ) $ NBNEXT = 2 END IF CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE+1, 1, NBNEXT, $ WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF IF( NBNEXT.EQ.1 ) THEN * * Swap two 1 by 1 blocks, no problems possible * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, NBNEXT, $ WORK, INFO ) HERE = HERE + 1 ELSE * * Recompute NBNEXT in case 2 by 2 split * IF( T( HERE+2, HERE+1 ).EQ.ZERO ) $ NBNEXT = 1 IF( NBNEXT.EQ.2 ) THEN * * 2 by 2 Block did not split * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, $ NBNEXT, WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF HERE = HERE + 2 ELSE * * 2 by 2 Block did split * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, 1, $ WORK, INFO ) CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE+1, 1, 1, $ WORK, INFO ) HERE = HERE + 2 END IF END IF END IF IF( HERE.LT.ILST ) $ GO TO 10 * ELSE * HERE = IFST 20 CONTINUE * * Swap block with next one above * IF( NBF.EQ.1 .OR. NBF.EQ.2 ) THEN * * Current block either 1 by 1 or 2 by 2 * NBNEXT = 1 IF( HERE.GE.3 ) THEN IF( T( HERE-1, HERE-2 ).NE.ZERO ) $ NBNEXT = 2 END IF CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-NBNEXT, NBNEXT, $ NBF, WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF HERE = HERE - NBNEXT * * Test if 2 by 2 block breaks into two 1 by 1 blocks * IF( NBF.EQ.2 ) THEN IF( T( HERE+1, HERE ).EQ.ZERO ) $ NBF = 3 END IF * ELSE * * Current block consists of two 1 by 1 blocks each of which * must be swapped individually * NBNEXT = 1 IF( HERE.GE.3 ) THEN IF( T( HERE-1, HERE-2 ).NE.ZERO ) $ NBNEXT = 2 END IF CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-NBNEXT, NBNEXT, $ 1, WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF IF( NBNEXT.EQ.1 ) THEN * * Swap two 1 by 1 blocks, no problems possible * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, NBNEXT, 1, $ WORK, INFO ) HERE = HERE - 1 ELSE * * Recompute NBNEXT in case 2 by 2 split * IF( T( HERE, HERE-1 ).EQ.ZERO ) $ NBNEXT = 1 IF( NBNEXT.EQ.2 ) THEN * * 2 by 2 Block did not split * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-1, 2, 1, $ WORK, INFO ) IF( INFO.NE.0 ) THEN ILST = HERE RETURN END IF HERE = HERE - 2 ELSE * * 2 by 2 Block did split * CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE, 1, 1, $ WORK, INFO ) CALL DLAEXC( WANTQ, N, T, LDT, Q, LDQ, HERE-1, 1, 1, $ WORK, INFO ) HERE = HERE - 2 END IF END IF END IF IF( HERE.GT.ILST ) $ GO TO 20 END IF ILST = HERE * RETURN * * End of DTREXC * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTRSEN( JOB, COMPQ, SELECT, N, T, LDT, Q, LDQ, WR, WI, $ M, S, SEP, WORK, LWORK, IWORK, LIWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER COMPQ, JOB INTEGER INFO, LDQ, LDT, LIWORK, LWORK, M, N DOUBLE PRECISION S, SEP * .. * .. Array Arguments .. LOGICAL SELECT( * ) INTEGER IWORK( * ) DOUBLE PRECISION Q( LDQ, * ), T( LDT, * ), WI( * ), WORK( * ), $ WR( * ) * .. * * Purpose * ======= * * DTRSEN reorders the real Schur factorization of a real matrix * A = Q*T*Q**T, so that a selected cluster of eigenvalues appears in * the leading diagonal blocks of the upper quasi-triangular matrix T, * and the leading columns of Q form an orthonormal basis of the * corresponding right invariant subspace. * * Optionally the routine computes the reciprocal condition numbers of * the cluster of eigenvalues and/or the invariant subspace. * * T must be in Schur canonical form (as returned by DHSEQR), that is, * block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; each * 2-by-2 diagonal block has its diagonal elemnts equal and its * off-diagonal elements of opposite sign. * * Arguments * ========= * * JOB (input) CHARACTER*1 * Specifies whether condition numbers are required for the * cluster of eigenvalues (S) or the invariant subspace (SEP): * = 'N': none; * = 'E': for eigenvalues only (S); * = 'V': for invariant subspace only (SEP); * = 'B': for both eigenvalues and invariant subspace (S and * SEP). * * COMPQ (input) CHARACTER*1 * = 'V': update the matrix Q of Schur vectors; * = 'N': do not update Q. * * SELECT (input) LOGICAL array, dimension (N) * SELECT specifies the eigenvalues in the selected cluster. To * select a real eigenvalue w(j), SELECT(j) must be set to * .TRUE.. To select a complex conjugate pair of eigenvalues * w(j) and w(j+1), corresponding to a 2-by-2 diagonal block, * either SELECT(j) or SELECT(j+1) or both must be set to * .TRUE.; a complex conjugate pair of eigenvalues must be * either both included in the cluster or both excluded. * * N (input) INTEGER * The order of the matrix T. N >= 0. * * T (input/output) DOUBLE PRECISION array, dimension (LDT,N) * On entry, the upper quasi-triangular matrix T, in Schur * canonical form. * On exit, T is overwritten by the reordered matrix T, again in * Schur canonical form, with the selected eigenvalues in the * leading diagonal blocks. * * LDT (input) INTEGER * The leading dimension of the array T. LDT >= max(1,N). * * Q (input/output) DOUBLE PRECISION array, dimension (LDQ,N) * On entry, if COMPQ = 'V', the matrix Q of Schur vectors. * On exit, if COMPQ = 'V', Q has been postmultiplied by the * orthogonal transformation matrix which reorders T; the * leading M columns of Q form an orthonormal basis for the * specified invariant subspace. * If COMPQ = 'N', Q is not referenced. * * LDQ (input) INTEGER * The leading dimension of the array Q. * LDQ >= 1; and if COMPQ = 'V', LDQ >= N. * * WR (output) DOUBLE PRECISION array, dimension (N) * WI (output) DOUBLE PRECISION array, dimension (N) * The real and imaginary parts, respectively, of the reordered * eigenvalues of T. The eigenvalues are stored in the same * order as on the diagonal of T, with WR(i) = T(i,i) and, if * T(i:i+1,i:i+1) is a 2-by-2 diagonal block, WI(i) > 0 and * WI(i+1) = -WI(i). Note that if a complex eigenvalue is * sufficiently ill-conditioned, then its value may differ * significantly from its value before reordering. * * M (output) INTEGER * The dimension of the specified invariant subspace. * 0 < = M <= N. * * S (output) DOUBLE PRECISION * If JOB = 'E' or 'B', S is a lower bound on the reciprocal * condition number for the selected cluster of eigenvalues. * S cannot underestimate the true reciprocal condition number * by more than a factor of sqrt(N). If M = 0 or N, S = 1. * If JOB = 'N' or 'V', S is not referenced. * * SEP (output) DOUBLE PRECISION * If JOB = 'V' or 'B', SEP is the estimated reciprocal * condition number of the specified invariant subspace. If * M = 0 or N, SEP = norm(T). * If JOB = 'N' or 'E', SEP is not referenced. * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. * If JOB = 'N', LWORK >= max(1,N); * if JOB = 'E', LWORK >= max(1,M*(N-M)); * if JOB = 'V' or 'B', LWORK >= max(1,2*M*(N-M)). * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * IWORK (workspace) INTEGER array, dimension (MAX(1,LIWORK)) * On exit, if INFO = 0, IWORK(1) returns the optimal LIWORK. * * LIWORK (input) INTEGER * The dimension of the array IWORK. * If JOB = 'N' or 'E', LIWORK >= 1; * if JOB = 'V' or 'B', LIWORK >= max(1,M*(N-M)). * * If LIWORK = -1, then a workspace query is assumed; the * routine only calculates the optimal size of the IWORK array, * returns this value as the first entry of the IWORK array, and * no error message related to LIWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * = 1: reordering of T failed because some eigenvalues are too * close to separate (the problem is very ill-conditioned); * T may have been partially reordered, and WR and WI * contain the eigenvalues in the same order as in T; S and * SEP (if requested) are set to zero. * * Further Details * =============== * * DTRSEN first collects the selected eigenvalues by computing an * orthogonal transformation Z to move them to the top left corner of T. * In other words, the selected eigenvalues are the eigenvalues of T11 * in: * * Z'*T*Z = ( T11 T12 ) n1 * ( 0 T22 ) n2 * n1 n2 * * where N = n1+n2 and Z' means the transpose of Z. The first n1 columns * of Z span the specified invariant subspace of T. * * If T has been obtained from the real Schur factorization of a matrix * A = Q*T*Q', then the reordered real Schur factorization of A is given * by A = (Q*Z)*(Z'*T*Z)*(Q*Z)', and the first n1 columns of Q*Z span * the corresponding invariant subspace of A. * * The reciprocal condition number of the average of the eigenvalues of * T11 may be returned in S. S lies between 0 (very badly conditioned) * and 1 (very well conditioned). It is computed as follows. First we * compute R so that * * P = ( I R ) n1 * ( 0 0 ) n2 * n1 n2 * * is the projector on the invariant subspace associated with T11. * R is the solution of the Sylvester equation: * * T11*R - R*T22 = T12. * * Let F-norm(M) denote the Frobenius-norm of M and 2-norm(M) denote * the two-norm of M. Then S is computed as the lower bound * * (1 + F-norm(R)**2)**(-1/2) * * on the reciprocal of 2-norm(P), the true reciprocal condition number. * S cannot underestimate 1 / 2-norm(P) by more than a factor of * sqrt(N). * * An approximate error bound for the computed average of the * eigenvalues of T11 is * * EPS * norm(T) / S * * where EPS is the machine precision. * * The reciprocal condition number of the right invariant subspace * spanned by the first n1 columns of Z (or of Q*Z) is returned in SEP. * SEP is defined as the separation of T11 and T22: * * sep( T11, T22 ) = sigma-min( C ) * * where sigma-min(C) is the smallest singular value of the * n1*n2-by-n1*n2 matrix * * C = kprod( I(n2), T11 ) - kprod( transpose(T22), I(n1) ) * * I(m) is an m by m identity matrix, and kprod denotes the Kronecker * product. We estimate sigma-min(C) by the reciprocal of an estimate of * the 1-norm of inverse(C). The true reciprocal 1-norm of inverse(C) * cannot differ from sigma-min(C) by more than a factor of sqrt(n1*n2). * * When SEP is small, small changes in T can cause large changes in * the invariant subspace. An approximate bound on the maximum angular * error in the computed right invariant subspace is * * EPS * norm(T) / SEP * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL LQUERY, PAIR, SWAP, WANTBH, WANTQ, WANTS, $ WANTSP INTEGER IERR, K, KASE, KK, KS, LIWMIN, LWMIN, N1, N2, $ NN DOUBLE PRECISION EST, RNORM, SCALE * .. * .. Local Arrays .. INTEGER ISAVE( 3 ) * .. * .. External Functions .. LOGICAL LSAME DOUBLE PRECISION DLANGE EXTERNAL LSAME, DLANGE * .. * .. External Subroutines .. EXTERNAL DLACN2, DLACPY, DTREXC, DTRSYL, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, SQRT * .. * .. Executable Statements .. * * Decode and test the input parameters * WANTBH = LSAME( JOB, 'B' ) WANTS = LSAME( JOB, 'E' ) .OR. WANTBH WANTSP = LSAME( JOB, 'V' ) .OR. WANTBH WANTQ = LSAME( COMPQ, 'V' ) * INFO = 0 LQUERY = ( LWORK.EQ.-1 ) IF( .NOT.LSAME( JOB, 'N' ) .AND. .NOT.WANTS .AND. .NOT.WANTSP ) $ THEN INFO = -1 ELSE IF( .NOT.LSAME( COMPQ, 'N' ) .AND. .NOT.WANTQ ) THEN INFO = -2 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( LDT.LT.MAX( 1, N ) ) THEN INFO = -6 ELSE IF( LDQ.LT.1 .OR. ( WANTQ .AND. LDQ.LT.N ) ) THEN INFO = -8 ELSE * * Set M to the dimension of the specified invariant subspace, * and test LWORK and LIWORK. * M = 0 PAIR = .FALSE. DO 10 K = 1, N IF( PAIR ) THEN PAIR = .FALSE. ELSE IF( K.LT.N ) THEN IF( T( K+1, K ).EQ.ZERO ) THEN IF( SELECT( K ) ) $ M = M + 1 ELSE PAIR = .TRUE. IF( SELECT( K ) .OR. SELECT( K+1 ) ) $ M = M + 2 END IF ELSE IF( SELECT( N ) ) $ M = M + 1 END IF END IF 10 CONTINUE * N1 = M N2 = N - M NN = N1*N2 * IF( WANTSP ) THEN LWMIN = MAX( 1, 2*NN ) LIWMIN = MAX( 1, NN ) ELSE IF( LSAME( JOB, 'N' ) ) THEN LWMIN = MAX( 1, N ) LIWMIN = 1 ELSE IF( LSAME( JOB, 'E' ) ) THEN LWMIN = MAX( 1, NN ) LIWMIN = 1 END IF * IF( LWORK.LT.LWMIN .AND. .NOT.LQUERY ) THEN INFO = -15 ELSE IF( LIWORK.LT.LIWMIN .AND. .NOT.LQUERY ) THEN INFO = -17 END IF END IF * IF( INFO.EQ.0 ) THEN WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTRSEN', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible. * IF( M.EQ.N .OR. M.EQ.0 ) THEN IF( WANTS ) $ S = ONE IF( WANTSP ) $ SEP = DLANGE( '1', N, N, T, LDT, WORK ) GO TO 40 END IF * * Collect the selected blocks at the top-left corner of T. * KS = 0 PAIR = .FALSE. DO 20 K = 1, N IF( PAIR ) THEN PAIR = .FALSE. ELSE SWAP = SELECT( K ) IF( K.LT.N ) THEN IF( T( K+1, K ).NE.ZERO ) THEN PAIR = .TRUE. SWAP = SWAP .OR. SELECT( K+1 ) END IF END IF IF( SWAP ) THEN KS = KS + 1 * * Swap the K-th block to position KS. * IERR = 0 KK = K IF( K.NE.KS ) $ CALL DTREXC( COMPQ, N, T, LDT, Q, LDQ, KK, KS, WORK, $ IERR ) IF( IERR.EQ.1 .OR. IERR.EQ.2 ) THEN * * Blocks too close to swap: exit. * INFO = 1 IF( WANTS ) $ S = ZERO IF( WANTSP ) $ SEP = ZERO GO TO 40 END IF IF( PAIR ) $ KS = KS + 1 END IF END IF 20 CONTINUE * IF( WANTS ) THEN * * Solve Sylvester equation for R: * * T11*R - R*T22 = scale*T12 * CALL DLACPY( 'F', N1, N2, T( 1, N1+1 ), LDT, WORK, N1 ) CALL DTRSYL( 'N', 'N', -1, N1, N2, T, LDT, T( N1+1, N1+1 ), $ LDT, WORK, N1, SCALE, IERR ) * * Estimate the reciprocal of the condition number of the cluster * of eigenvalues. * RNORM = DLANGE( 'F', N1, N2, WORK, N1, WORK ) IF( RNORM.EQ.ZERO ) THEN S = ONE ELSE S = SCALE / ( SQRT( SCALE*SCALE / RNORM+RNORM )* $ SQRT( RNORM ) ) END IF END IF * IF( WANTSP ) THEN * * Estimate sep(T11,T22). * EST = ZERO KASE = 0 30 CONTINUE CALL DLACN2( NN, WORK( NN+1 ), WORK, IWORK, EST, KASE, ISAVE ) IF( KASE.NE.0 ) THEN IF( KASE.EQ.1 ) THEN * * Solve T11*R - R*T22 = scale*X. * CALL DTRSYL( 'N', 'N', -1, N1, N2, T, LDT, $ T( N1+1, N1+1 ), LDT, WORK, N1, SCALE, $ IERR ) ELSE * * Solve T11'*R - R*T22' = scale*X. * CALL DTRSYL( 'T', 'T', -1, N1, N2, T, LDT, $ T( N1+1, N1+1 ), LDT, WORK, N1, SCALE, $ IERR ) END IF GO TO 30 END IF * SEP = SCALE / EST END IF * 40 CONTINUE * * Store the output eigenvalues in WR and WI. * DO 50 K = 1, N WR( K ) = T( K, K ) WI( K ) = ZERO 50 CONTINUE DO 60 K = 1, N - 1 IF( T( K+1, K ).NE.ZERO ) THEN WI( K ) = SQRT( ABS( T( K, K+1 ) ) )* $ SQRT( ABS( T( K+1, K ) ) ) WI( K+1 ) = -WI( K ) END IF 60 CONTINUE * WORK( 1 ) = LWMIN IWORK( 1 ) = LIWMIN * RETURN * * End of DTRSEN * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DTRSYL( TRANA, TRANB, ISGN, M, N, A, LDA, B, LDB, C, $ LDC, SCALE, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER TRANA, TRANB INTEGER INFO, ISGN, LDA, LDB, LDC, M, N DOUBLE PRECISION SCALE * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), B( LDB, * ), C( LDC, * ) * .. * * Purpose * ======= * * DTRSYL solves the real Sylvester matrix equation: * * op(A)*X + X*op(B) = scale*C or * op(A)*X - X*op(B) = scale*C, * * where op(A) = A or A**T, and A and B are both upper quasi- * triangular. A is M-by-M and B is N-by-N; the right hand side C and * the solution X are M-by-N; and scale is an output scale factor, set * <= 1 to avoid overflow in X. * * A and B must be in Schur canonical form (as returned by DHSEQR), that * is, block upper triangular with 1-by-1 and 2-by-2 diagonal blocks; * each 2-by-2 diagonal block has its diagonal elements equal and its * off-diagonal elements of opposite sign. * * Arguments * ========= * * TRANA (input) CHARACTER*1 * Specifies the option op(A): * = 'N': op(A) = A (No transpose) * = 'T': op(A) = A**T (Transpose) * = 'C': op(A) = A**H (Conjugate transpose = Transpose) * * TRANB (input) CHARACTER*1 * Specifies the option op(B): * = 'N': op(B) = B (No transpose) * = 'T': op(B) = B**T (Transpose) * = 'C': op(B) = B**H (Conjugate transpose = Transpose) * * ISGN (input) INTEGER * Specifies the sign in the equation: * = +1: solve op(A)*X + X*op(B) = scale*C * = -1: solve op(A)*X - X*op(B) = scale*C * * M (input) INTEGER * The order of the matrix A, and the number of rows in the * matrices X and C. M >= 0. * * N (input) INTEGER * The order of the matrix B, and the number of columns in the * matrices X and C. N >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,M) * The upper quasi-triangular matrix A, in Schur canonical form. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * B (input) DOUBLE PRECISION array, dimension (LDB,N) * The upper quasi-triangular matrix B, in Schur canonical form. * * LDB (input) INTEGER * The leading dimension of the array B. LDB >= max(1,N). * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the M-by-N right hand side matrix C. * On exit, C is overwritten by the solution matrix X. * * LDC (input) INTEGER * The leading dimension of the array C. LDC >= max(1,M) * * SCALE (output) DOUBLE PRECISION * The scale factor, scale, set <= 1 to avoid overflow in X. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * = 1: A and B have common or very close eigenvalues; perturbed * values were used to solve the equation (but the matrices * A and B are unchanged). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO, ONE PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL NOTRNA, NOTRNB INTEGER IERR, J, K, K1, K2, KNEXT, L, L1, L2, LNEXT DOUBLE PRECISION A11, BIGNUM, DA11, DB, EPS, SCALOC, SGN, SMIN, $ SMLNUM, SUML, SUMR, XNORM * .. * .. Local Arrays .. DOUBLE PRECISION DUM( 1 ), VEC( 2, 2 ), X( 2, 2 ) * .. * .. External Functions .. LOGICAL LSAME DOUBLE PRECISION DDOT, DLAMCH, DLANGE EXTERNAL LSAME, DDOT, DLAMCH, DLANGE * .. * .. External Subroutines .. EXTERNAL DLABAD, DLALN2, DLASY2, DSCAL, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC ABS, DBLE, MAX, MIN * .. * .. Executable Statements .. * * Decode and Test input parameters * NOTRNA = LSAME( TRANA, 'N' ) NOTRNB = LSAME( TRANB, 'N' ) * INFO = 0 IF( .NOT.NOTRNA .AND. .NOT.LSAME( TRANA, 'T' ) .AND. .NOT. $ LSAME( TRANA, 'C' ) ) THEN INFO = -1 ELSE IF( .NOT.NOTRNB .AND. .NOT.LSAME( TRANB, 'T' ) .AND. .NOT. $ LSAME( TRANB, 'C' ) ) THEN INFO = -2 ELSE IF( ISGN.NE.1 .AND. ISGN.NE.-1 ) THEN INFO = -3 ELSE IF( M.LT.0 ) THEN INFO = -4 ELSE IF( N.LT.0 ) THEN INFO = -5 ELSE IF( LDA.LT.MAX( 1, M ) ) THEN INFO = -7 ELSE IF( LDB.LT.MAX( 1, N ) ) THEN INFO = -9 ELSE IF( LDC.LT.MAX( 1, M ) ) THEN INFO = -11 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DTRSYL', -INFO ) RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 ) $ RETURN * * Set constants to control overflow * EPS = DLAMCH( 'P' ) SMLNUM = DLAMCH( 'S' ) BIGNUM = ONE / SMLNUM CALL DLABAD( SMLNUM, BIGNUM ) SMLNUM = SMLNUM*DBLE( M*N ) / EPS BIGNUM = ONE / SMLNUM * SMIN = MAX( SMLNUM, EPS*DLANGE( 'M', M, M, A, LDA, DUM ), $ EPS*DLANGE( 'M', N, N, B, LDB, DUM ) ) * SCALE = ONE SGN = ISGN * IF( NOTRNA .AND. NOTRNB ) THEN * * Solve A*X + ISGN*X*B = scale*C. * * The (K,L)th block of X is determined starting from * bottom-left corner column by column by * * A(K,K)*X(K,L) + ISGN*X(K,L)*B(L,L) = C(K,L) - R(K,L) * * Where * M L-1 * R(K,L) = SUM [A(K,I)*X(I,L)] + ISGN*SUM [X(K,J)*B(J,L)]. * I=K+1 J=1 * * Start column loop (index = L) * L1 (L2) : column index of the first (first) row of X(K,L). * LNEXT = 1 DO 60 L = 1, N IF( L.LT.LNEXT ) $ GO TO 60 IF( L.EQ.N ) THEN L1 = L L2 = L ELSE IF( B( L+1, L ).NE.ZERO ) THEN L1 = L L2 = L + 1 LNEXT = L + 2 ELSE L1 = L L2 = L LNEXT = L + 1 END IF END IF * * Start row loop (index = K) * K1 (K2): row index of the first (last) row of X(K,L). * KNEXT = M DO 50 K = M, 1, -1 IF( K.GT.KNEXT ) $ GO TO 50 IF( K.EQ.1 ) THEN K1 = K K2 = K ELSE IF( A( K, K-1 ).NE.ZERO ) THEN K1 = K - 1 K2 = K KNEXT = K - 2 ELSE K1 = K K2 = K KNEXT = K - 1 END IF END IF * IF( L1.EQ.L2 .AND. K1.EQ.K2 ) THEN SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) SCALOC = ONE * A11 = A( K1, K1 ) + SGN*B( L1, L1 ) DA11 = ABS( A11 ) IF( DA11.LE.SMIN ) THEN A11 = SMIN DA11 = SMIN INFO = 1 END IF DB = ABS( VEC( 1, 1 ) ) IF( DA11.LT.ONE .AND. DB.GT.ONE ) THEN IF( DB.GT.BIGNUM*DA11 ) $ SCALOC = ONE / DB END IF X( 1, 1 ) = ( VEC( 1, 1 )*SCALOC ) / A11 * IF( SCALOC.NE.ONE ) THEN DO 10 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 10 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) * ELSE IF( L1.EQ.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, A( K1, K1 ), $ LDA, ONE, ONE, VEC, 2, -SGN*B( L1, L1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 20 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 20 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K2, L1 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.EQ.K2 ) THEN * SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = SGN*( C( K1, L1 )-( SUML+SGN*SUMR ) ) * SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L2 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 2, 1 ) = SGN*( C( K1, L2 )-( SUML+SGN*SUMR ) ) * CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, B( L1, L1 ), $ LDB, ONE, ONE, VEC, 2, -SGN*A( K1, K1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 30 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 30 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L2 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 1, 2 ) = C( K1, L2 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L2 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 2, 2 ) = C( K2, L2 ) - ( SUML+SGN*SUMR ) * CALL DLASY2( .FALSE., .FALSE., ISGN, 2, 2, $ A( K1, K1 ), LDA, B( L1, L1 ), LDB, VEC, $ 2, SCALOC, X, 2, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 40 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 40 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 1, 2 ) C( K2, L1 ) = X( 2, 1 ) C( K2, L2 ) = X( 2, 2 ) END IF * 50 CONTINUE * 60 CONTINUE * ELSE IF( .NOT.NOTRNA .AND. NOTRNB ) THEN * * Solve A' *X + ISGN*X*B = scale*C. * * The (K,L)th block of X is determined starting from * upper-left corner column by column by * * A(K,K)'*X(K,L) + ISGN*X(K,L)*B(L,L) = C(K,L) - R(K,L) * * Where * K-1 L-1 * R(K,L) = SUM [A(I,K)'*X(I,L)] +ISGN*SUM [X(K,J)*B(J,L)] * I=1 J=1 * * Start column loop (index = L) * L1 (L2): column index of the first (last) row of X(K,L) * LNEXT = 1 DO 120 L = 1, N IF( L.LT.LNEXT ) $ GO TO 120 IF( L.EQ.N ) THEN L1 = L L2 = L ELSE IF( B( L+1, L ).NE.ZERO ) THEN L1 = L L2 = L + 1 LNEXT = L + 2 ELSE L1 = L L2 = L LNEXT = L + 1 END IF END IF * * Start row loop (index = K) * K1 (K2): row index of the first (last) row of X(K,L) * KNEXT = 1 DO 110 K = 1, M IF( K.LT.KNEXT ) $ GO TO 110 IF( K.EQ.M ) THEN K1 = K K2 = K ELSE IF( A( K+1, K ).NE.ZERO ) THEN K1 = K K2 = K + 1 KNEXT = K + 2 ELSE K1 = K K2 = K KNEXT = K + 1 END IF END IF * IF( L1.EQ.L2 .AND. K1.EQ.K2 ) THEN SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) SCALOC = ONE * A11 = A( K1, K1 ) + SGN*B( L1, L1 ) DA11 = ABS( A11 ) IF( DA11.LE.SMIN ) THEN A11 = SMIN DA11 = SMIN INFO = 1 END IF DB = ABS( VEC( 1, 1 ) ) IF( DA11.LT.ONE .AND. DB.GT.ONE ) THEN IF( DB.GT.BIGNUM*DA11 ) $ SCALOC = ONE / DB END IF X( 1, 1 ) = ( VEC( 1, 1 )*SCALOC ) / A11 * IF( SCALOC.NE.ONE ) THEN DO 70 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 70 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) * ELSE IF( L1.EQ.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, A( K1, K1 ), $ LDA, ONE, ONE, VEC, 2, -SGN*B( L1, L1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 80 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 80 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K2, L1 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.EQ.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = SGN*( C( K1, L1 )-( SUML+SGN*SUMR ) ) * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 2, 1 ) = SGN*( C( K1, L2 )-( SUML+SGN*SUMR ) ) * CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, B( L1, L1 ), $ LDB, ONE, ONE, VEC, 2, -SGN*A( K1, K1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 90 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 90 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( L1-1, C( K1, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 1, 2 ) = C( K1, L2 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L1 ), 1 ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( L1-1, C( K2, 1 ), LDC, B( 1, L2 ), 1 ) VEC( 2, 2 ) = C( K2, L2 ) - ( SUML+SGN*SUMR ) * CALL DLASY2( .TRUE., .FALSE., ISGN, 2, 2, A( K1, K1 ), $ LDA, B( L1, L1 ), LDB, VEC, 2, SCALOC, X, $ 2, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 100 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 100 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 1, 2 ) C( K2, L1 ) = X( 2, 1 ) C( K2, L2 ) = X( 2, 2 ) END IF * 110 CONTINUE 120 CONTINUE * ELSE IF( .NOT.NOTRNA .AND. .NOT.NOTRNB ) THEN * * Solve A'*X + ISGN*X*B' = scale*C. * * The (K,L)th block of X is determined starting from * top-right corner column by column by * * A(K,K)'*X(K,L) + ISGN*X(K,L)*B(L,L)' = C(K,L) - R(K,L) * * Where * K-1 N * R(K,L) = SUM [A(I,K)'*X(I,L)] + ISGN*SUM [X(K,J)*B(L,J)']. * I=1 J=L+1 * * Start column loop (index = L) * L1 (L2): column index of the first (last) row of X(K,L) * LNEXT = N DO 180 L = N, 1, -1 IF( L.GT.LNEXT ) $ GO TO 180 IF( L.EQ.1 ) THEN L1 = L L2 = L ELSE IF( B( L, L-1 ).NE.ZERO ) THEN L1 = L - 1 L2 = L LNEXT = L - 2 ELSE L1 = L L2 = L LNEXT = L - 1 END IF END IF * * Start row loop (index = K) * K1 (K2): row index of the first (last) row of X(K,L) * KNEXT = 1 DO 170 K = 1, M IF( K.LT.KNEXT ) $ GO TO 170 IF( K.EQ.M ) THEN K1 = K K2 = K ELSE IF( A( K+1, K ).NE.ZERO ) THEN K1 = K K2 = K + 1 KNEXT = K + 2 ELSE K1 = K K2 = K KNEXT = K + 1 END IF END IF * IF( L1.EQ.L2 .AND. K1.EQ.K2 ) THEN SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L1, C( K1, MIN( L1+1, N ) ), LDC, $ B( L1, MIN( L1+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) SCALOC = ONE * A11 = A( K1, K1 ) + SGN*B( L1, L1 ) DA11 = ABS( A11 ) IF( DA11.LE.SMIN ) THEN A11 = SMIN DA11 = SMIN INFO = 1 END IF DB = ABS( VEC( 1, 1 ) ) IF( DA11.LT.ONE .AND. DB.GT.ONE ) THEN IF( DB.GT.BIGNUM*DA11 ) $ SCALOC = ONE / DB END IF X( 1, 1 ) = ( VEC( 1, 1 )*SCALOC ) / A11 * IF( SCALOC.NE.ONE ) THEN DO 130 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 130 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) * ELSE IF( L1.EQ.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * CALL DLALN2( .TRUE., 2, 1, SMIN, ONE, A( K1, K1 ), $ LDA, ONE, ONE, VEC, 2, -SGN*B( L1, L1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 140 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 140 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K2, L1 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.EQ.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = SGN*( C( K1, L1 )-( SUML+SGN*SUMR ) ) * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = SGN*( C( K1, L2 )-( SUML+SGN*SUMR ) ) * CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, B( L1, L1 ), $ LDB, ONE, ONE, VEC, 2, -SGN*A( K1, K1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 150 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 150 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K1 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 1, 2 ) = C( K1, L2 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L1 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( K1-1, A( 1, K2 ), 1, C( 1, L2 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 2, 2 ) = C( K2, L2 ) - ( SUML+SGN*SUMR ) * CALL DLASY2( .TRUE., .TRUE., ISGN, 2, 2, A( K1, K1 ), $ LDA, B( L1, L1 ), LDB, VEC, 2, SCALOC, X, $ 2, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 160 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 160 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 1, 2 ) C( K2, L1 ) = X( 2, 1 ) C( K2, L2 ) = X( 2, 2 ) END IF * 170 CONTINUE 180 CONTINUE * ELSE IF( NOTRNA .AND. .NOT.NOTRNB ) THEN * * Solve A*X + ISGN*X*B' = scale*C. * * The (K,L)th block of X is determined starting from * bottom-right corner column by column by * * A(K,K)*X(K,L) + ISGN*X(K,L)*B(L,L)' = C(K,L) - R(K,L) * * Where * M N * R(K,L) = SUM [A(K,I)*X(I,L)] + ISGN*SUM [X(K,J)*B(L,J)']. * I=K+1 J=L+1 * * Start column loop (index = L) * L1 (L2): column index of the first (last) row of X(K,L) * LNEXT = N DO 240 L = N, 1, -1 IF( L.GT.LNEXT ) $ GO TO 240 IF( L.EQ.1 ) THEN L1 = L L2 = L ELSE IF( B( L, L-1 ).NE.ZERO ) THEN L1 = L - 1 L2 = L LNEXT = L - 2 ELSE L1 = L L2 = L LNEXT = L - 1 END IF END IF * * Start row loop (index = K) * K1 (K2): row index of the first (last) row of X(K,L) * KNEXT = M DO 230 K = M, 1, -1 IF( K.GT.KNEXT ) $ GO TO 230 IF( K.EQ.1 ) THEN K1 = K K2 = K ELSE IF( A( K, K-1 ).NE.ZERO ) THEN K1 = K - 1 K2 = K KNEXT = K - 2 ELSE K1 = K K2 = K KNEXT = K - 1 END IF END IF * IF( L1.EQ.L2 .AND. K1.EQ.K2 ) THEN SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L1 ), 1 ) SUMR = DDOT( N-L1, C( K1, MIN( L1+1, N ) ), LDC, $ B( L1, MIN( L1+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) SCALOC = ONE * A11 = A( K1, K1 ) + SGN*B( L1, L1 ) DA11 = ABS( A11 ) IF( DA11.LE.SMIN ) THEN A11 = SMIN DA11 = SMIN INFO = 1 END IF DB = ABS( VEC( 1, 1 ) ) IF( DA11.LT.ONE .AND. DB.GT.ONE ) THEN IF( DB.GT.BIGNUM*DA11 ) $ SCALOC = ONE / DB END IF X( 1, 1 ) = ( VEC( 1, 1 )*SCALOC ) / A11 * IF( SCALOC.NE.ONE ) THEN DO 190 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 190 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) * ELSE IF( L1.EQ.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, A( K1, K1 ), $ LDA, ONE, ONE, VEC, 2, -SGN*B( L1, L1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 200 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 200 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K2, L1 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.EQ.K2 ) THEN * SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = SGN*( C( K1, L1 )-( SUML+SGN*SUMR ) ) * SUML = DDOT( M-K1, A( K1, MIN( K1+1, M ) ), LDA, $ C( MIN( K1+1, M ), L2 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = SGN*( C( K1, L2 )-( SUML+SGN*SUMR ) ) * CALL DLALN2( .FALSE., 2, 1, SMIN, ONE, B( L1, L1 ), $ LDB, ONE, ONE, VEC, 2, -SGN*A( K1, K1 ), $ ZERO, X, 2, SCALOC, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 210 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 210 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 2, 1 ) * ELSE IF( L1.NE.L2 .AND. K1.NE.K2 ) THEN * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 1, 1 ) = C( K1, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K1, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L2 ), 1 ) SUMR = DDOT( N-L2, C( K1, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 1, 2 ) = C( K1, L2 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L1 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L1, MIN( L2+1, N ) ), LDB ) VEC( 2, 1 ) = C( K2, L1 ) - ( SUML+SGN*SUMR ) * SUML = DDOT( M-K2, A( K2, MIN( K2+1, M ) ), LDA, $ C( MIN( K2+1, M ), L2 ), 1 ) SUMR = DDOT( N-L2, C( K2, MIN( L2+1, N ) ), LDC, $ B( L2, MIN( L2+1, N ) ), LDB ) VEC( 2, 2 ) = C( K2, L2 ) - ( SUML+SGN*SUMR ) * CALL DLASY2( .FALSE., .TRUE., ISGN, 2, 2, A( K1, K1 ), $ LDA, B( L1, L1 ), LDB, VEC, 2, SCALOC, X, $ 2, XNORM, IERR ) IF( IERR.NE.0 ) $ INFO = 1 * IF( SCALOC.NE.ONE ) THEN DO 220 J = 1, N CALL DSCAL( M, SCALOC, C( 1, J ), 1 ) 220 CONTINUE SCALE = SCALE*SCALOC END IF C( K1, L1 ) = X( 1, 1 ) C( K1, L2 ) = X( 1, 2 ) C( K2, L1 ) = X( 2, 1 ) C( K2, L2 ) = X( 2, 2 ) END IF * 230 CONTINUE 240 CONTINUE * END IF * RETURN * * End of DTRSYL * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DLANGE( NORM, M, N, A, LDA, WORK ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER NORM INTEGER LDA, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), WORK( * ) * .. * * Purpose * ======= * * DLANGE returns the value of the one norm, or the Frobenius norm, or * the infinity norm, or the element of largest absolute value of a * real matrix A. * * Description * =========== * * DLANGE returns the value * * DLANGE = ( max(abs(A(i,j))), NORM = 'M' or 'm' * ( * ( norm1(A), NORM = '1', 'O' or 'o' * ( * ( normI(A), NORM = 'I' or 'i' * ( * ( normF(A), NORM = 'F', 'f', 'E' or 'e' * * where norm1 denotes the one norm of a matrix (maximum column sum), * normI denotes the infinity norm of a matrix (maximum row sum) and * normF denotes the Frobenius norm of a matrix (square root of sum of * squares). Note that max(abs(A(i,j))) is not a consistent matrix norm. * * Arguments * ========= * * NORM (input) CHARACTER*1 * Specifies the value to be returned in DLANGE as described * above. * * M (input) INTEGER * The number of rows of the matrix A. M >= 0. When M = 0, * DLANGE is set to zero. * * N (input) INTEGER * The number of columns of the matrix A. N >= 0. When N = 0, * DLANGE is set to zero. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The m by n matrix A. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(M,1). * * WORK (workspace) DOUBLE PRECISION array, dimension (MAX(1,LWORK)), * where LWORK >= M when NORM = 'I'; otherwise, WORK is not * referenced. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE, ZERO PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I, J DOUBLE PRECISION SCALE, SUM, VALUE * .. * .. External Subroutines .. EXTERNAL DLASSQ * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN, SQRT * .. * .. Executable Statements .. * IF( MIN( M, N ).EQ.0 ) THEN VALUE = ZERO ELSE IF( LSAME( NORM, 'M' ) ) THEN * * Find max(abs(A(i,j))). * VALUE = ZERO DO 20 J = 1, N DO 10 I = 1, M VALUE = MAX( VALUE, ABS( A( I, J ) ) ) 10 CONTINUE 20 CONTINUE ELSE IF( ( LSAME( NORM, 'O' ) ) .OR. ( NORM.EQ.'1' ) ) THEN * * Find norm1(A). * VALUE = ZERO DO 40 J = 1, N SUM = ZERO DO 30 I = 1, M SUM = SUM + ABS( A( I, J ) ) 30 CONTINUE VALUE = MAX( VALUE, SUM ) 40 CONTINUE ELSE IF( LSAME( NORM, 'I' ) ) THEN * * Find normI(A). * DO 50 I = 1, M WORK( I ) = ZERO 50 CONTINUE DO 70 J = 1, N DO 60 I = 1, M WORK( I ) = WORK( I ) + ABS( A( I, J ) ) 60 CONTINUE 70 CONTINUE VALUE = ZERO DO 80 I = 1, M VALUE = MAX( VALUE, WORK( I ) ) 80 CONTINUE ELSE IF( ( LSAME( NORM, 'F' ) ) .OR. ( LSAME( NORM, 'E' ) ) ) THEN * * Find normF(A). * SCALE = ZERO SUM = ONE DO 90 J = 1, N CALL DLASSQ( M, A( 1, J ), 1, SCALE, SUM ) 90 CONTINUE VALUE = SCALE*SQRT( SUM ) END IF * DLANGE = VALUE RETURN * * End of DLANGE * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION DLAPY2( X, Y ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. DOUBLE PRECISION X, Y * .. * * Purpose * ======= * * DLAPY2 returns sqrt(x**2+y**2), taking care not to cause unnecessary * overflow. * * Arguments * ========= * * X (input) DOUBLE PRECISION * Y (input) DOUBLE PRECISION * X and Y specify the values x and y. * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D0 ) DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D0 ) * .. * .. Local Scalars .. DOUBLE PRECISION W, XABS, YABS, Z * .. * .. Intrinsic Functions .. INTRINSIC ABS, MAX, MIN, SQRT * .. * .. Executable Statements .. * XABS = ABS( X ) YABS = ABS( Y ) W = MAX( XABS, YABS ) Z = MIN( XABS, YABS ) IF( Z.EQ.ZERO ) THEN DLAPY2 = W ELSE DLAPY2 = W*SQRT( ONE+( Z / W )**2 ) END IF RETURN * * End of DLAPY2 * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- INTEGER FUNCTION ILADLR( M, N, A, LDA ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2.2) -- * * -- June 2010 -- * * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * .. Scalar Arguments .. INTEGER M, N, LDA * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * ILADLR scans A for its last non-zero row. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. * * N (input) INTEGER * The number of columns of the matrix A. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The m by n matrix A. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I, J * .. * .. Executable Statements .. * * Quick test for the common case where one corner is non-zero. IF( M.EQ.0 ) THEN ILADLR = M ELSE IF( A(M, 1).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN ILADLR = M ELSE * Scan up each column tracking the last zero row seen. ILADLR = 0 DO J = 1, N DO I = M, 1, -1 IF( A(I, J).NE.ZERO ) EXIT END DO ILADLR = MAX( ILADLR, I ) END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- INTEGER FUNCTION ILADLC( M, N, A, LDA ) IMPLICIT NONE * * -- LAPACK auxiliary routine (version 3.2.2) -- * * -- June 2010 -- * * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * * .. Scalar Arguments .. INTEGER M, N, LDA * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ) * .. * * Purpose * ======= * * ILADLC scans A for its last non-zero column. * * Arguments * ========= * * M (input) INTEGER * The number of rows of the matrix A. * * N (input) INTEGER * The number of columns of the matrix A. * * A (input) DOUBLE PRECISION array, dimension (LDA,N) * The m by n matrix A. * * LDA (input) INTEGER * The leading dimension of the array A. LDA >= max(1,M). * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ZERO PARAMETER ( ZERO = 0.0D+0 ) * .. * .. Local Scalars .. INTEGER I * .. * .. Executable Statements .. * * Quick test for the common case where one corner is non-zero. IF( N.EQ.0 ) THEN ILADLC = N ELSE IF( A(1, N).NE.ZERO .OR. A(M, N).NE.ZERO ) THEN ILADLC = N ELSE * Now scan each column from the end, returning with the first non-zero. DO ILADLC = N, 1, -1 DO I = 1, M IF( A(I, ILADLC).NE.ZERO ) RETURN END DO END DO END IF RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORMHR( SIDE, TRANS, M, N, ILO, IHI, A, LDA, TAU, C, $ LDC, WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER SIDE, TRANS INTEGER IHI, ILO, INFO, LDA, LDC, LWORK, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORMHR overwrites the general real M-by-N matrix C with * * SIDE = 'L' SIDE = 'R' * TRANS = 'N': Q * C C * Q * TRANS = 'T': Q**T * C C * Q**T * * where Q is a real orthogonal matrix of order nq, with nq = m if * SIDE = 'L' and nq = n if SIDE = 'R'. Q is defined as the product of * IHI-ILO elementary reflectors, as returned by DGEHRD: * * Q = H(ilo) H(ilo+1) . . . H(ihi-1). * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': apply Q or Q**T from the Left; * = 'R': apply Q or Q**T from the Right. * * TRANS (input) CHARACTER*1 * = 'N': No transpose, apply Q; * = 'T': Transpose, apply Q**T. * * M (input) INTEGER * The number of rows of the matrix C. M >= 0. * * N (input) INTEGER * The number of columns of the matrix C. N >= 0. * * ILO (input) INTEGER * IHI (input) INTEGER * ILO and IHI must have the same values as in the previous call * of DGEHRD. Q is equal to the unit matrix except in the * submatrix Q(ilo+1:ihi,ilo+1:ihi). * If SIDE = 'L', then 1 <= ILO <= IHI <= M, if M > 0, and * ILO = 1 and IHI = 0, if M = 0; * if SIDE = 'R', then 1 <= ILO <= IHI <= N, if N > 0, and * ILO = 1 and IHI = 0, if N = 0. * * A (input) DOUBLE PRECISION array, dimension * (LDA,M) if SIDE = 'L' * (LDA,N) if SIDE = 'R' * The vectors which define the elementary reflectors, as * returned by DGEHRD. * * LDA (input) INTEGER * The leading dimension of the array A. * LDA >= max(1,M) if SIDE = 'L'; LDA >= max(1,N) if SIDE = 'R'. * * TAU (input) DOUBLE PRECISION array, dimension * (M-1) if SIDE = 'L' * (N-1) if SIDE = 'R' * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEHRD. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the M-by-N matrix C. * On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. * * LDC (input) INTEGER * The leading dimension of the array C. LDC >= max(1,M). * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. * If SIDE = 'L', LWORK >= max(1,N); * if SIDE = 'R', LWORK >= max(1,M). * For optimum performance LWORK >= N*NB if SIDE = 'L', and * LWORK >= M*NB if SIDE = 'R', where NB is the optimal * blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * ===================================================================== * * .. Local Scalars .. LOGICAL LEFT, LQUERY INTEGER I1, I2, IINFO, LWKOPT, MI, NB, NH, NI, NQ, NW * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV EXTERNAL LSAME, ILAENV * .. * .. External Subroutines .. EXTERNAL DORMQR, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 NH = IHI - ILO LEFT = LSAME( SIDE, 'L' ) LQUERY = ( LWORK.EQ.-1 ) * * NQ is the order of Q and NW is the minimum dimension of WORK * IF( LEFT ) THEN NQ = M NW = N ELSE NQ = N NW = M END IF IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN INFO = -1 ELSE IF( .NOT.LSAME( TRANS, 'N' ) .AND. .NOT.LSAME( TRANS, 'T' ) ) $ THEN INFO = -2 ELSE IF( M.LT.0 ) THEN INFO = -3 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( ILO.LT.1 .OR. ILO.GT.MAX( 1, NQ ) ) THEN INFO = -5 ELSE IF( IHI.LT.MIN( ILO, NQ ) .OR. IHI.GT.NQ ) THEN INFO = -6 ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN INFO = -8 ELSE IF( LDC.LT.MAX( 1, M ) ) THEN INFO = -11 ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN INFO = -13 END IF * IF( INFO.EQ.0 ) THEN IF( LEFT ) THEN NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, NH, N, NH, -1 ) ELSE NB = ILAENV( 1, 'DORMQR', SIDE // TRANS, M, NH, NH, -1 ) END IF LWKOPT = MAX( 1, NW )*NB WORK( 1 ) = LWKOPT END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORMHR', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 .OR. NH.EQ.0 ) THEN WORK( 1 ) = 1 RETURN END IF * IF( LEFT ) THEN MI = NH NI = N I1 = ILO + 1 I2 = 1 ELSE MI = M NI = NH I1 = 1 I2 = ILO + 1 END IF * CALL DORMQR( SIDE, TRANS, MI, NI, NH, A( ILO+1, ILO ), LDA, $ TAU( ILO ), C( I1, I2 ), LDC, WORK, LWORK, IINFO ) * WORK( 1 ) = LWKOPT RETURN * * End of DORMHR * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORMQR( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, LWORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER SIDE, TRANS INTEGER INFO, K, LDA, LDC, LWORK, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORMQR overwrites the general real M-by-N matrix C with * * SIDE = 'L' SIDE = 'R' * TRANS = 'N': Q * C C * Q * TRANS = 'T': Q**T * C C * Q**T * * where Q is a real orthogonal matrix defined as the product of k * elementary reflectors * * Q = H(1) H(2) . . . H(k) * * as returned by DGEQRF. Q is of order M if SIDE = 'L' and of order N * if SIDE = 'R'. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': apply Q or Q**T from the Left; * = 'R': apply Q or Q**T from the Right. * * TRANS (input) CHARACTER*1 * = 'N': No transpose, apply Q; * = 'T': Transpose, apply Q**T. * * M (input) INTEGER * The number of rows of the matrix C. M >= 0. * * N (input) INTEGER * The number of columns of the matrix C. N >= 0. * * K (input) INTEGER * The number of elementary reflectors whose product defines * the matrix Q. * If SIDE = 'L', M >= K >= 0; * if SIDE = 'R', N >= K >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,K) * The i-th column must contain the vector which defines the * elementary reflector H(i), for i = 1,2,...,k, as returned by * DGEQRF in the first k columns of its array argument A. * A is modified by the routine but restored on exit. * * LDA (input) INTEGER * The leading dimension of the array A. * If SIDE = 'L', LDA >= max(1,M); * if SIDE = 'R', LDA >= max(1,N). * * TAU (input) DOUBLE PRECISION array, dimension (K) * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEQRF. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the M-by-N matrix C. * On exit, C is overwritten by Q*C or Q**T*C or C*Q**T or C*Q. * * LDC (input) INTEGER * The leading dimension of the array C. LDC >= max(1,M). * * WORK (workspace/output) DOUBLE PRECISION array, dimension (MAX(1,LWORK)) * On exit, if INFO = 0, WORK(1) returns the optimal LWORK. * * LWORK (input) INTEGER * The dimension of the array WORK. * If SIDE = 'L', LWORK >= max(1,N); * if SIDE = 'R', LWORK >= max(1,M). * For optimum performance LWORK >= N*NB if SIDE = 'L', and * LWORK >= M*NB if SIDE = 'R', where NB is the optimal * blocksize. * * If LWORK = -1, then a workspace query is assumed; the routine * only calculates the optimal size of the WORK array, returns * this value as the first entry of the WORK array, and no error * message related to LWORK is issued by XERBLA. * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * ===================================================================== * * .. Parameters .. INTEGER NBMAX, LDT PARAMETER ( NBMAX = 64, LDT = NBMAX+1 ) * .. * .. Local Scalars .. LOGICAL LEFT, LQUERY, NOTRAN INTEGER I, I1, I2, I3, IB, IC, IINFO, IWS, JC, LDWORK, $ LWKOPT, MI, NB, NBMIN, NI, NQ, NW * .. * .. Local Arrays .. DOUBLE PRECISION T( LDT, NBMAX ) * .. * .. External Functions .. LOGICAL LSAME INTEGER ILAENV EXTERNAL LSAME, ILAENV * .. * .. External Subroutines .. EXTERNAL DLARFB, DLARFT, DORM2R, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX, MIN * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 LEFT = LSAME( SIDE, 'L' ) NOTRAN = LSAME( TRANS, 'N' ) LQUERY = ( LWORK.EQ.-1 ) * * NQ is the order of Q and NW is the minimum dimension of WORK * IF( LEFT ) THEN NQ = M NW = N ELSE NQ = N NW = M END IF IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN INFO = -1 ELSE IF( .NOT.NOTRAN .AND. .NOT.LSAME( TRANS, 'T' ) ) THEN INFO = -2 ELSE IF( M.LT.0 ) THEN INFO = -3 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( K.LT.0 .OR. K.GT.NQ ) THEN INFO = -5 ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN INFO = -7 ELSE IF( LDC.LT.MAX( 1, M ) ) THEN INFO = -10 ELSE IF( LWORK.LT.MAX( 1, NW ) .AND. .NOT.LQUERY ) THEN INFO = -12 END IF * IF( INFO.EQ.0 ) THEN * * Determine the block size. NB may be at most NBMAX, where NBMAX * is used to define the local array T. * NB = MIN( NBMAX, ILAENV( 1, 'DORMQR', SIDE // TRANS, M, N, K, $ -1 ) ) LWKOPT = MAX( 1, NW )*NB WORK( 1 ) = LWKOPT END IF * IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORMQR', -INFO ) RETURN ELSE IF( LQUERY ) THEN RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 .OR. K.EQ.0 ) THEN WORK( 1 ) = 1 RETURN END IF * NBMIN = 2 LDWORK = NW IF( NB.GT.1 .AND. NB.LT.K ) THEN IWS = NW*NB IF( LWORK.LT.IWS ) THEN NB = LWORK / LDWORK NBMIN = MAX( 2, ILAENV( 2, 'DORMQR', SIDE // TRANS, M, N, K, $ -1 ) ) END IF ELSE IWS = NW END IF * IF( NB.LT.NBMIN .OR. NB.GE.K ) THEN * * Use unblocked code * CALL DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, WORK, $ IINFO ) ELSE * * Use blocked code * IF( ( LEFT .AND. .NOT.NOTRAN ) .OR. $ ( .NOT.LEFT .AND. NOTRAN ) ) THEN I1 = 1 I2 = K I3 = NB ELSE I1 = ( ( K-1 ) / NB )*NB + 1 I2 = 1 I3 = -NB END IF * IF( LEFT ) THEN NI = N JC = 1 ELSE MI = M IC = 1 END IF * DO 10 I = I1, I2, I3 IB = MIN( NB, K-I+1 ) * * Form the triangular factor of the block reflector * H = H(i) H(i+1) . . . H(i+ib-1) * CALL DLARFT( 'Forward', 'Columnwise', NQ-I+1, IB, A( I, I ), $ LDA, TAU( I ), T, LDT ) IF( LEFT ) THEN * * H or H' is applied to C(i:m,1:n) * MI = M - I + 1 IC = I ELSE * * H or H' is applied to C(1:m,i:n) * NI = N - I + 1 JC = I END IF * * Apply H or H' * CALL DLARFB( SIDE, TRANS, 'Forward', 'Columnwise', MI, NI, $ IB, A( I, I ), LDA, T, LDT, C( IC, JC ), LDC, $ WORK, LDWORK ) 10 CONTINUE END IF WORK( 1 ) = LWKOPT RETURN * * End of DORMQR * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- SUBROUTINE DORM2R( SIDE, TRANS, M, N, K, A, LDA, TAU, C, LDC, $ WORK, INFO ) * * -- LAPACK routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. CHARACTER SIDE, TRANS INTEGER INFO, K, LDA, LDC, M, N * .. * .. Array Arguments .. DOUBLE PRECISION A( LDA, * ), C( LDC, * ), TAU( * ), WORK( * ) * .. * * Purpose * ======= * * DORM2R overwrites the general real m by n matrix C with * * Q * C if SIDE = 'L' and TRANS = 'N', or * * Q'* C if SIDE = 'L' and TRANS = 'T', or * * C * Q if SIDE = 'R' and TRANS = 'N', or * * C * Q' if SIDE = 'R' and TRANS = 'T', * * where Q is a real orthogonal matrix defined as the product of k * elementary reflectors * * Q = H(1) H(2) . . . H(k) * * as returned by DGEQRF. Q is of order m if SIDE = 'L' and of order n * if SIDE = 'R'. * * Arguments * ========= * * SIDE (input) CHARACTER*1 * = 'L': apply Q or Q' from the Left * = 'R': apply Q or Q' from the Right * * TRANS (input) CHARACTER*1 * = 'N': apply Q (No transpose) * = 'T': apply Q' (Transpose) * * M (input) INTEGER * The number of rows of the matrix C. M >= 0. * * N (input) INTEGER * The number of columns of the matrix C. N >= 0. * * K (input) INTEGER * The number of elementary reflectors whose product defines * the matrix Q. * If SIDE = 'L', M >= K >= 0; * if SIDE = 'R', N >= K >= 0. * * A (input) DOUBLE PRECISION array, dimension (LDA,K) * The i-th column must contain the vector which defines the * elementary reflector H(i), for i = 1,2,...,k, as returned by * DGEQRF in the first k columns of its array argument A. * A is modified by the routine but restored on exit. * * LDA (input) INTEGER * The leading dimension of the array A. * If SIDE = 'L', LDA >= max(1,M); * if SIDE = 'R', LDA >= max(1,N). * * TAU (input) DOUBLE PRECISION array, dimension (K) * TAU(i) must contain the scalar factor of the elementary * reflector H(i), as returned by DGEQRF. * * C (input/output) DOUBLE PRECISION array, dimension (LDC,N) * On entry, the m by n matrix C. * On exit, C is overwritten by Q*C or Q'*C or C*Q' or C*Q. * * LDC (input) INTEGER * The leading dimension of the array C. LDC >= max(1,M). * * WORK (workspace) DOUBLE PRECISION array, dimension * (N) if SIDE = 'L', * (M) if SIDE = 'R' * * INFO (output) INTEGER * = 0: successful exit * < 0: if INFO = -i, the i-th argument had an illegal value * * ===================================================================== * * .. Parameters .. DOUBLE PRECISION ONE PARAMETER ( ONE = 1.0D+0 ) * .. * .. Local Scalars .. LOGICAL LEFT, NOTRAN INTEGER I, I1, I2, I3, IC, JC, MI, NI, NQ DOUBLE PRECISION AII * .. * .. External Functions .. LOGICAL LSAME EXTERNAL LSAME * .. * .. External Subroutines .. EXTERNAL DLARF, XERBLA * .. * .. Intrinsic Functions .. INTRINSIC MAX * .. * .. Executable Statements .. * * Test the input arguments * INFO = 0 LEFT = LSAME( SIDE, 'L' ) NOTRAN = LSAME( TRANS, 'N' ) * * NQ is the order of Q * IF( LEFT ) THEN NQ = M ELSE NQ = N END IF IF( .NOT.LEFT .AND. .NOT.LSAME( SIDE, 'R' ) ) THEN INFO = -1 ELSE IF( .NOT.NOTRAN .AND. .NOT.LSAME( TRANS, 'T' ) ) THEN INFO = -2 ELSE IF( M.LT.0 ) THEN INFO = -3 ELSE IF( N.LT.0 ) THEN INFO = -4 ELSE IF( K.LT.0 .OR. K.GT.NQ ) THEN INFO = -5 ELSE IF( LDA.LT.MAX( 1, NQ ) ) THEN INFO = -7 ELSE IF( LDC.LT.MAX( 1, M ) ) THEN INFO = -10 END IF IF( INFO.NE.0 ) THEN CALL XERBLA( 'DORM2R', -INFO ) RETURN END IF * * Quick return if possible * IF( M.EQ.0 .OR. N.EQ.0 .OR. K.EQ.0 ) $ RETURN * IF( ( LEFT .AND. .NOT.NOTRAN ) .OR. ( .NOT.LEFT .AND. NOTRAN ) ) $ THEN I1 = 1 I2 = K I3 = 1 ELSE I1 = K I2 = 1 I3 = -1 END IF * IF( LEFT ) THEN NI = N JC = 1 ELSE MI = M IC = 1 END IF * DO 10 I = I1, I2, I3 IF( LEFT ) THEN * * H(i) is applied to C(i:m,1:n) * MI = M - I + 1 IC = I ELSE * * H(i) is applied to C(1:m,i:n) * NI = N - I + 1 JC = I END IF * * Apply H(i) * AII = A( I, I ) A( I, I ) = ONE CALL DLARF( SIDE, MI, NI, A( I, I ), 1, TAU( I ), C( IC, JC ), $ LDC, WORK ) A( I, I ) = AII 10 CONTINUE RETURN * * End of DORM2R * END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- INTEGER FUNCTION IEEECK( ISPEC, ZERO, ONE ) * * -- LAPACK auxiliary routine (version 3.2.2) -- * -- LAPACK is a software package provided by Univ. of Tennessee, -- * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- * June 2010 * * .. Scalar Arguments .. INTEGER ISPEC REAL ONE, ZERO * .. * * Purpose * ======= * * IEEECK is called from the ILAENV to verify that Infinity and * possibly NaN arithmetic is safe (i.e. will not trap). * * Arguments * ========= * * ISPEC (input) INTEGER * Specifies whether to test just for inifinity arithmetic * or whether to test for infinity and NaN arithmetic. * = 0: Verify infinity arithmetic only. * = 1: Verify infinity and NaN arithmetic. * * ZERO (input) REAL * Must contain the value 0.0 * This is passed to prevent the compiler from optimizing * away this code. * * ONE (input) REAL * Must contain the value 1.0 * This is passed to prevent the compiler from optimizing * away this code. * * RETURN VALUE: INTEGER * = 0: Arithmetic failed to produce the correct answers * = 1: Arithmetic produced the correct answers * * .. Local Scalars .. REAL NAN1, NAN2, NAN3, NAN4, NAN5, NAN6, NEGINF, $ NEGZRO, NEWZRO, POSINF * .. * .. Executable Statements .. IEEECK = 1 * POSINF = ONE / ZERO IF( POSINF.LE.ONE ) THEN IEEECK = 0 RETURN END IF * NEGINF = -ONE / ZERO IF( NEGINF.GE.ZERO ) THEN IEEECK = 0 RETURN END IF * NEGZRO = ONE / ( NEGINF+ONE ) IF( NEGZRO.NE.ZERO ) THEN IEEECK = 0 RETURN END IF * NEGINF = ONE / NEGZRO IF( NEGINF.GE.ZERO ) THEN IEEECK = 0 RETURN END IF * NEWZRO = NEGZRO + ZERO IF( NEWZRO.NE.ZERO ) THEN IEEECK = 0 RETURN END IF * POSINF = ONE / NEWZRO IF( POSINF.LE.ONE ) THEN IEEECK = 0 RETURN END IF * NEGINF = NEGINF*POSINF IF( NEGINF.GE.ZERO ) THEN IEEECK = 0 RETURN END IF * POSINF = POSINF*POSINF IF( POSINF.LE.ONE ) THEN IEEECK = 0 RETURN END IF * * * * * Return if we were only asked to check infinity arithmetic * IF( ISPEC.EQ.0 ) $ RETURN * NAN1 = POSINF + NEGINF * NAN2 = POSINF / NEGINF * NAN3 = POSINF / POSINF * NAN4 = POSINF*ZERO * NAN5 = NEGINF*NEGZRO * NAN6 = NAN5*ZERO * IF( NAN1.EQ.NAN1 ) THEN IEEECK = 0 RETURN END IF * IF( NAN2.EQ.NAN2 ) THEN IEEECK = 0 RETURN END IF * IF( NAN3.EQ.NAN3 ) THEN IEEECK = 0 RETURN END IF * IF( NAN4.EQ.NAN4 ) THEN IEEECK = 0 RETURN END IF * IF( NAN5.EQ.NAN5 ) THEN IEEECK = 0 RETURN END IF * IF( NAN6.EQ.NAN6 ) THEN IEEECK = 0 RETURN END IF * RETURN END C C----------------------------------------------------------------------- C----------------------------------------------------------------------- INTEGER FUNCTION IPARMQ( ISPEC, NAME, OPTS, N, ILO, IHI, LWORK ) * * -- LAPACK auxiliary routine (version 3.2) -- * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. * November 2006 * * .. Scalar Arguments .. INTEGER IHI, ILO, ISPEC, LWORK, N CHARACTER NAME*( * ), OPTS*( * ) * * Purpose * ======= * * This program sets problem and machine dependent parameters * useful for xHSEQR and its subroutines. It is called whenever * ILAENV is called with 12 <= ISPEC <= 16 * * Arguments * ========= * * ISPEC (input) integer scalar * ISPEC specifies which tunable parameter IPARMQ should * return. * * ISPEC=12: (INMIN) Matrices of order nmin or less * are sent directly to xLAHQR, the implicit * double shift QR algorithm. NMIN must be * at least 11. * * ISPEC=13: (INWIN) Size of the deflation window. * This is best set greater than or equal to * the number of simultaneous shifts NS. * Larger matrices benefit from larger deflation * windows. * * ISPEC=14: (INIBL) Determines when to stop nibbling and * invest in an (expensive) multi-shift QR sweep. * If the aggressive early deflation subroutine * finds LD converged eigenvalues from an order * NW deflation window and LD.GT.(NW*NIBBLE)/100, * then the next QR sweep is skipped and early * deflation is applied immediately to the * remaining active diagonal block. Setting * IPARMQ(ISPEC=14) = 0 causes TTQRE to skip a * multi-shift QR sweep whenever early deflation * finds a converged eigenvalue. Setting * IPARMQ(ISPEC=14) greater than or equal to 100 * prevents TTQRE from skipping a multi-shift * QR sweep. * * ISPEC=15: (NSHFTS) The number of simultaneous shifts in * a multi-shift QR iteration. * * ISPEC=16: (IACC22) IPARMQ is set to 0, 1 or 2 with the * following meanings. * 0: During the multi-shift QR sweep, * xLAQR5 does not accumulate reflections and * does not use matrix-matrix multiply to * update the far-from-diagonal matrix * entries. * 1: During the multi-shift QR sweep, * xLAQR5 and/or xLAQRaccumulates reflections and uses * matrix-matrix multiply to update the * far-from-diagonal matrix entries. * 2: During the multi-shift QR sweep. * xLAQR5 accumulates reflections and takes * advantage of 2-by-2 block structure during * matrix-matrix multiplies. * (If xTRMM is slower than xGEMM, then * IPARMQ(ISPEC=16)=1 may be more efficient than * IPARMQ(ISPEC=16)=2 despite the greater level of * arithmetic work implied by the latter choice.) * * NAME (input) character string * Name of the calling subroutine * * OPTS (input) character string * This is a concatenation of the string arguments to * TTQRE. * * N (input) integer scalar * N is the order of the Hessenberg matrix H. * * ILO (input) INTEGER * IHI (input) INTEGER * It is assumed that H is already upper triangular * in rows and columns 1:ILO-1 and IHI+1:N. * * LWORK (input) integer scalar * The amount of workspace available. * * Further Details * =============== * * Little is known about how best to choose these parameters. * It is possible to use different values of the parameters * for each of CHSEQR, DHSEQR, SHSEQR and ZHSEQR. * * It is probably best to choose different parameters for * different matrices and different parameters at different * times during the iteration, but this has not been * implemented --- yet. * * * The best choices of most of the parameters depend * in an ill-understood way on the relative execution * rate of xLAQR3 and xLAQR5 and on the nature of each * particular eigenvalue problem. Experiment may be the * only practical way to determine which choices are most * effective. * * Following is a list of default values supplied by IPARMQ. * These defaults may be adjusted in order to attain better * performance in any particular computational environment. * * IPARMQ(ISPEC=12) The xLAHQR vs xLAQR0 crossover point. * Default: 75. (Must be at least 11.) * * IPARMQ(ISPEC=13) Recommended deflation window size. * This depends on ILO, IHI and NS, the * number of simultaneous shifts returned * by IPARMQ(ISPEC=15). The default for * (IHI-ILO+1).LE.500 is NS. The default * for (IHI-ILO+1).GT.500 is 3*NS/2. * * IPARMQ(ISPEC=14) Nibble crossover point. Default: 14. * * IPARMQ(ISPEC=15) Number of simultaneous shifts, NS. * a multi-shift QR iteration. * * If IHI-ILO+1 is ... * * greater than ...but less ... the * or equal to ... than default is * * 0 30 NS = 2+ * 30 60 NS = 4+ * 60 150 NS = 10 * 150 590 NS = ** * 590 3000 NS = 64 * 3000 6000 NS = 128 * 6000 infinity NS = 256 * * (+) By default matrices of this order are * passed to the implicit double shift routine * xLAHQR. See IPARMQ(ISPEC=12) above. These * values of NS are used only in case of a rare * xLAHQR failure. * * (**) The asterisks (**) indicate an ad-hoc * function increasing from 10 to 64. * * IPARMQ(ISPEC=16) Select structured matrix multiply. * (See ISPEC=16 above for details.) * Default: 3. * * ================================================================ * .. Parameters .. INTEGER INMIN, INWIN, INIBL, ISHFTS, IACC22 PARAMETER ( INMIN = 12, INWIN = 13, INIBL = 14, $ ISHFTS = 15, IACC22 = 16 ) INTEGER NMIN, K22MIN, KACMIN, NIBBLE, KNWSWP PARAMETER ( NMIN = 75, K22MIN = 14, KACMIN = 14, $ NIBBLE = 14, KNWSWP = 500 ) REAL TWO PARAMETER ( TWO = 2.0 ) * .. * .. Local Scalars .. INTEGER NH, NS * .. * .. Intrinsic Functions .. INTRINSIC LOG, MAX, MOD, NINT, REAL * .. * .. Executable Statements .. IF( ( ISPEC.EQ.ISHFTS ) .OR. ( ISPEC.EQ.INWIN ) .OR. $ ( ISPEC.EQ.IACC22 ) ) THEN * * ==== Set the number simultaneous shifts ==== * NH = IHI - ILO + 1 NS = 2 IF( NH.GE.30 ) $ NS = 4 IF( NH.GE.60 ) $ NS = 10 IF( NH.GE.150 ) $ NS = MAX( 10, NH / NINT( LOG( REAL( NH ) ) / LOG( TWO ) ) ) IF( NH.GE.590 ) $ NS = 64 IF( NH.GE.3000 ) $ NS = 128 IF( NH.GE.6000 ) $ NS = 256 NS = MAX( 2, NS-MOD( NS, 2 ) ) END IF * IF( ISPEC.EQ.INMIN ) THEN * * * ===== Matrices of order smaller than NMIN get sent * . to xLAHQR, the classic double shift algorithm. * . This must be at least 11. ==== * IPARMQ = NMIN * ELSE IF( ISPEC.EQ.INIBL ) THEN * * ==== INIBL: skip a multi-shift qr iteration and * . whenever aggressive early deflation finds * . at least (NIBBLE*(window size)/100) deflations. ==== * IPARMQ = NIBBLE * ELSE IF( ISPEC.EQ.ISHFTS ) THEN * * ==== NSHFTS: The number of simultaneous shifts ===== * IPARMQ = NS * ELSE IF( ISPEC.EQ.INWIN ) THEN * * ==== NW: deflation window size. ==== * IF( NH.LE.KNWSWP ) THEN IPARMQ = NS ELSE IPARMQ = 3*NS / 2 END IF * ELSE IF( ISPEC.EQ.IACC22 ) THEN * * ==== IACC22: Whether to accumulate reflections * . before updating the far-from-diagonal elements * . and whether to use 2-by-2 block structure while * . doing it. A small amount of work could be saved * . by making this choice dependent also upon the * . NH=IHI-ILO+1. * IPARMQ = 0 IF( NS.GE.KACMIN ) $ IPARMQ = 1 IF( NS.GE.K22MIN ) $ IPARMQ = 2 * ELSE * ===== invalid value of ispec ===== IPARMQ = -1 * END IF * * ==== End of IPARMQ ==== * END auto/07p/src/optimization.f900000640000175000017500000004415713570013207014112 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for Optimization !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE OPTIMIZATION USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS USE AE USE BVP USE INTERFACES USE TOOLBOXAE USE TOOLBOXBV USE PERIODIC USE SUPPORT IMPLICIT NONE PRIVATE PUBLIC :: AUTOOP DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 INTERFACE SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FS DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) END SUBROUTINE FOPT END INTERFACE CONTAINS ! ---------- ------ SUBROUTINE AUTOOP(AP,ICP,ICU) TYPE(AUTOPARAMETERS), INTENT(INOUT) :: AP INTEGER, INTENT(INOUT) :: ICP(:) INTEGER, INTENT(IN) :: ICU(:) INTEGER IPS, ISW, ITP, NDIM, NFPR, NFPRPREV, I, IC, JC, NNEG IPS = AP%IPS ISW = AP%ISW ITP = AP%ITP NDIM = AP%NDIM NFPR = AP%NFPR IF(IPS==15.AND.ABS(ISW)==1) THEN ! ** Optimization of periodic solutions. NFPRPREV=NFPR NFPR=0 DO I=1,AP%NICP IF(ICU(I)>0)THEN NFPR=NFPR+1 ICP(NFPR)=ICU(I) ENDIF ENDDO ICP(NFPR+1)=10 ICP(NFPR+2)=13 ICP(NFPR+3)=14 NFPR=NFPR+3 AP%NFPR=NFPR AP%NDIM=2*NDIM AP%NBC=AP%NDIM AP%NINT=NFPR-1 ! overload to define optimality integrals NNEG=0 DO I=1,AP%NICP IC=ICU(I) JC=ABS(IC)-20 IF(IC<0.AND.JC>0.AND.JC<=11)THEN NNEG=NNEG+1 ICP(NFPR+NNEG)=JC ENDIF ENDDO AP%NICP=NFPR-3 IF(NFPRPREV<6)THEN CALL AUTOBV(AP,ICP,ICU,FNPO,BCPS,ICPO,STPNPO,FNCSBV) ELSE CALL AUTOBV(AP,ICP,ICU,FNPO,BCPS,ICPO,STPNBV,FNCSBV) ENDIF ELSE IF(IPS==5) THEN ! ** Algebraic optimization problems. IF(MOD(ITP,10)==2.OR.AP%IRS==0)NFPR=NFPR+1 AP%NFPR=NFPR ICP(1)=10 IF(NFPR==2) THEN AP%NDIM=NDIM+1 IF(AP%IRS>0) THEN CALL AUTOAE(AP,ICP,ICU,FNC1,STPNAE,FNCSAE) ELSE CALL AUTOAE(AP,ICP,ICU,FNC1,STPNC1,FNCSAE) ENDIF ELSE AP%NDIM=2*NDIM+NFPR IF(MOD(ITP,10)/=2) THEN CALL AUTOAE(AP,ICP,ICU,FNC2,STPNAE,FNCSAE) ELSE CALL AUTOAE(AP,ICP,ICU,FNC2,STPNC2,FNCSAE) ENDIF ENDIF ENDIF END SUBROUTINE AUTOOP !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for the Optimization of Algebraic Systems !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNC1(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generate the equations for the continuation scheme used for ! the optimization of algebraic systems (one parameter). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DDU(:),DDP(:) INTEGER JAC,NDM,NFPR,NPAR,I JAC=AP%JAC NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(DDU(NDM),DDP(NPAR)) PAR(ICP(2))=U(NDIM) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Rearrange (Since dimensions in FNC1 and FUNI differ). IF(IJAC.NE.0)THEN CALL EXPANDJAC(DFDU,NDM,NDM,NDIM) CALL EXPANDJAC(DFDP,NPAR,NDM,NDIM) ENDIF CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,IJAC,F(NDIM),DDU,DDP) F(NDIM)=PAR(ICP(1))-F(NDIM) IF(IJAC.NE.0)THEN DO I=1,NDM DFDU(NDIM,I)=-DDU(I) DFDU(I,NDIM)=DFDP(I,ICP(2)) DFDP(I,ICP(1))=0 ENDDO DFDU(NDIM,NDIM)=-DDP(ICP(2)) DFDP(NDIM,ICP(1))=1 ENDIF DEALLOCATE(DDU,DDP) END SUBROUTINE FNC1 ! ---------- ------ SUBROUTINE STPNC1(AP,PAR,ICP,U,UDOT,NODIR) ! Generate starting data for optimization problems (one parameter). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) ! Local INTEGER NDIM,JAC,NDM,NFPR DOUBLE PRECISION DUM(1),T,FOP NDIM=AP%NDIM JAC=AP%JAC NDM=AP%NDM NFPR=AP%NFPR T=0.d0 U(:NDIM)=0.d0 CALL STPNT(NDIM,U,PAR,T) CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,0,FOP,DUM,DUM) PAR(ICP(1))=FOP U(NDIM)=PAR(ICP(2)) NODIR=1 UDOT(:NDIM)=0d0 END SUBROUTINE STPNC1 ! ---------- ---- SUBROUTINE FNC2(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generate the equations for the continuation scheme used for the ! optimization of algebraic systems (more than one parameter). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DDP(:),DFU(:),DFP(:),FF1(:),FF2(:) INTEGER NDM,NPAR,I,J DOUBLE PRECISION UMX,EP,UU NDM=AP%NDM NPAR=AP%NPAR ! Generate the function. ALLOCATE(DDP(NPAR)) CALL FFC2(AP,NDIM,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,DDP) IF(IJAC.EQ.0)THEN DEALLOCATE(DDP) RETURN ENDIF ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) ALLOCATE(DFU(NDM*NDM),DFP(NDM*NPAR),FF1(NDIM),FF2(NDIM)) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FFC2(AP,NDIM,U,UOLD,ICP,PAR,FF1,NDM,DFU,DFP,DDP) U(I)=UU+EP CALL FFC2(AP,NDIM,U,UOLD,ICP,PAR,FF2,NDM,DFU,DFP,DDP) U(I)=UU DO J=1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(DFU,DFP,FF1,FF2,DDP) IF (IJAC.EQ.1)RETURN DO I=1,NDIM DFDP(I,ICP(1))=0.d0 ENDDO DFDP(NDIM,ICP(1))=1.d0 END SUBROUTINE FNC2 ! ---------- ---- SUBROUTINE FFC2(AP,NDIM,U,UOLD,ICP,PAR,F,NDM,DFDU,DFDP,DDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*),DDP(AP%NPAR) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) ! Local INTEGER JAC,NFPR,NPAR,NDM2,ICPM,I,J DOUBLE PRECISION FOP JAC=AP%JAC NFPR=AP%NFPR NPAR=AP%NPAR DO I=2,NFPR PAR(ICP(I))=U(2*NDM+I) ENDDO CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,2,FOP,F(NDM+1),DDP) DO I=1,NDM F(NDM+I)=F(NDM+I)*U(2*NDM+1) DO J=1,NDM F(NDM+I)=F(NDM+I)+DFDU(J,I)*U(NDM+J) ENDDO ENDDO NDM2=2*NDM ICPM=NFPR-2 DO I=1,ICPM F(NDM2+I)=DDP(ICP(I+1))*U(NDM2+1) ENDDO DO I=1,ICPM DO J=1,NDM F(NDM2+I)=F(NDM2+I)+U(NDM+J)*DFDP(J,ICP(I+1)) ENDDO ENDDO F(NDIM-1)=U(NDM2+1)*U(NDM2+1)-1 DO J=1,NDM F(NDIM-1)=F(NDIM-1)+U(NDM+J)*U(NDM+J) ENDDO F(NDIM)=PAR(ICP(1))-FOP END SUBROUTINE FFC2 ! ---------- ------ SUBROUTINE STPNC2(AP,PAR,ICP,U,UDOT,NODIR) USE IO USE SUPPORT ! Generates starting data for the continuation equations for ! optimization of algebraic systems (More than one parameter). TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),U(*),UDOT(*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:),DFP(:),DD(:,:),DU(:),V(:),F(:),DP(:) INTEGER, ALLOCATABLE :: ICPRS(:) INTEGER NDIM,JAC,NDM,NFPR,NPAR,I,J DOUBLE PRECISION FOP NDIM=AP%NDIM JAC=AP%JAC NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(ICPRS(NFPR)) CALL READLB(AP,ICPRS,U,UDOT,PAR) DEALLOCATE(ICPRS) IF(NFPR.EQ.3)THEN ALLOCATE(DFU(NDM*NDM),DFP(NDM*NPAR),F(NDM),V(NDM+1)) ALLOCATE(DD(NDM+1,NDM+1),DU(NDM),DP(NPAR)) CALL FUNI(AP,NDM,U,U,ICP,PAR,2,F,DFU,DFP) CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,2,FOP,DU,DP) ! TRANSPOSE DO I=1,NDM DO J=1,NDM DD(I,J)=DFU((I-1)*NDM+J) ENDDO ENDDO DO I=1,NDM DD(I,NDM+1)=DU(I) DD(NDM+1,I)=DFP((ICP(2)-1)*NDM+I) ENDDO DD(NDM+1,NDM+1)=DP(ICP(2)) CALL NLVC(NDM+1,NDM+1,1,DD,V) CALL NRMLZ(NDM+1,V) DO I=1,NDM+1 U(NDM+I)=V(I) ENDDO PAR(ICP(1))=FOP DEALLOCATE(DFU,DFP,F,V,DD,DU,DP) ENDIF DO I=1,NFPR-1 U(NDIM-NFPR+1+I)=PAR(ICP(I+1)) ENDDO NODIR=1 END SUBROUTINE STPNC2 !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Subroutines for Optimization of Periodic Solutions !----------------------------------------------------------------------- !----------------------------------------------------------------------- ! ---------- ---- SUBROUTINE FNPO(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Generates the equations for periodic optimization problems. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:),FF1(:),FF2(:),UPOLD(:) INTEGER NDM,NFPR,I,J DOUBLE PRECISION UMX,EP,P,PERIOD,UU,DUMDU(1),DUMDP(1) NDM=AP%NDM NFPR=AP%NFPR ! Generate F(UOLD) ALLOCATE(UPOLD(NDIM)) CALL FUNC(NDM,UOLD,ICP,PAR,0,UPOLD,DUMDU,DUMDP) PERIOD=PAR(11) DO I=1,NDM UPOLD(I)=PERIOD*UPOLD(I) ENDDO ! Generate the function. CALL FFPO(AP,U,UOLD,UPOLD,ICP,PAR,F,NDM,DFDU) IF(IJAC.EQ.0)THEN DEALLOCATE(UPOLD) RETURN ENDIF ALLOCATE(DFU(NDIM*NDIM),FF1(NDIM),FF2(NDIM)) ! Generate the Jacobian. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FFPO(AP,U,UOLD,UPOLD,ICP,PAR,FF1,NDM,DFU) U(I)=UU+EP CALL FFPO(AP,U,UOLD,UPOLD,ICP,PAR,FF2,NDM,DFU) U(I)=UU DO J=1,NDIM DFDU(J,I)=(FF2(J)-FF1(J))/(2*EP) ENDDO ENDDO DEALLOCATE(FF2) IF(IJAC.EQ.1)THEN DEALLOCATE(UPOLD,DFU,FF1) RETURN ENDIF DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FFPO(AP,U,UOLD,UPOLD,ICP,PAR,FF1,NDM,DFU) DO J=1,NDIM DFDP(J,ICP(I))=(FF1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(UPOLD,DFU,FF1) END SUBROUTINE FNPO ! ---------- ---- SUBROUTINE FFPO(AP,U,UOLD,UPOLD,ICP,PAR,F,NDM,DFDU) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM DOUBLE PRECISION, INTENT(IN) :: UOLD(*),UPOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(*),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDM*2) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,*) ! Local INTEGER JAC,NFPR,I,J DOUBLE PRECISION DUMDP(1),PERIOD,RKAPPA,GAMMA,DFU,FOP JAC=AP%JAC NFPR=AP%NFPR PERIOD=PAR(11) RKAPPA=PAR(13) GAMMA =PAR(14) CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,1,F(NDM+1),DFDU,DUMDP) CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,1,FOP,F,DUMDP) DO I=1,NDM DFU=F(I) F(I)=F(NDM+I) F(NDM+I)=0.d0 DO J=1,NDM F(NDM+I)=F(NDM+I)-DFDU(J,I)*U(NDM+J) ENDDO F(I)=PERIOD*F(I) F(NDM+I)=PERIOD*F(NDM+I)+ RKAPPA*UPOLD(I) + GAMMA*DFU ENDDO END SUBROUTINE FFPO ! ---------- ---- SUBROUTINE ICPO(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Generates integral conditions for periodic optimization problems. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFU(:),DFP(:),F1(:),F2(:) INTEGER NPAR,NDM,NFPR,I,J DOUBLE PRECISION UMX,EP,P,UU NPAR=AP%NPAR ALLOCATE(DFU(NDIM*NDIM),DFP(NDIM*NPAR)) NDM=AP%NDM NFPR=AP%NFPR ! Generate the function. CALL FIPO(AP,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,NDM,DFU,DFP) IF(IJAC.EQ.0)THEN DEALLOCATE(DFU,DFP) RETURN ENDIF ! Generate the Jacobian. ALLOCATE(F1(NINT),F2(NINT)) UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FIPO(AP,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F1,NDM,DFU,DFP) U(I)=UU+EP CALL FIPO(AP,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F2,NDM,DFU,DFP) U(I)=UU DO J=1,NINT DINT(J,I)=(F2(J)-F1(J))/(2*EP) ENDDO ENDDO DO I=1,NFPR P=PAR(ICP(I)) PAR(ICP(I))=P+EP CALL FIPO(AP,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F1,NDM,DFU,DFP) DO J=1,NINT DINT(J,NDIM+ICP(I))=(F1(J)-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO DEALLOCATE(F1,F2,DFU,DFP) END SUBROUTINE ICPO ! ---------- ---- SUBROUTINE FIPO(AP,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,NDM,DFDU,DFDP) TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDM,NINT DOUBLE PRECISION, INTENT(IN)::UOLD(2*NDM),UDOT(2*NDM),UPOLD(2*NDM) DOUBLE PRECISION, INTENT(INOUT) :: U(2*NDM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDM,NDM),DFDP(NDM,*) ! Local DOUBLE PRECISION, ALLOCATABLE :: DFP(:),F(:) INTEGER JAC,NFPR,NPAR,INDX,I,J,L DOUBLE PRECISION FOP JAC=AP%JAC NFPR=AP%NFPR NPAR=AP%NPAR FI(1)=0.d0 DO I=1,NDM FI(1)=FI(1)+(U(I)-UOLD(I))*UPOLD(I) ENDDO ALLOCATE(F(NDM),DFP(NPAR)) DO I=1,NPAR DFP(I)=0.d0 ENDDO CALL FOPI(JAC,NFPR,NDM,U,ICP,PAR,2,FOP,F,DFP) FI(2)=PAR(10)-FOP FI(3)=PAR(13)**2+PAR(14)**2-PAR(12) DO I=1,NDM FI(3)=FI(3)+U(NDM+I)**2 ENDDO DO I=1,NDM DO J=1,NPAR DFDP(I,J)=0.d0 ENDDO ENDDO CALL FUNI(AP,NDM,U,UOLD,ICP,PAR,2,F,DFDU,DFDP) DO L=4,NINT INDX=ICP(NFPR+L-3) IF(INDX.EQ.11)THEN FI(L)=-PAR(14)*DFP(INDX) - PAR(20+INDX) DO I=1,NDM FI(L)=FI(L)+F(I)*U(NDM+I) ENDDO ELSE FI(L)=-PAR(14)*DFP(INDX) - PAR(20+INDX) DO I=1,NDM FI(L)=FI(L)+PAR(11)*DFDP(I,INDX)*U(NDM+I) ENDDO ENDIF ENDDO DEALLOCATE(DFP,F) END SUBROUTINE FIPO ! ---------- ------ SUBROUTINE STPNPO(AP,PAR,ICP,NTSR,NCOLRS,RLDOT,UPS,UDOTPS,TM,NODIR) USE BVP USE IO USE MESH ! Generates starting data for optimization of periodic solutions. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*) INTEGER, INTENT(INOUT) :: NTSR,NCOLRS INTEGER, INTENT(OUT) :: NODIR DOUBLE PRECISION, INTENT(OUT) :: PAR(*),RLDOT(AP%NFPR), & UPS(AP%NDIM,0:*),UDOTPS(AP%NDIM,0:*),TM(0:*) ! Local INTEGER, ALLOCATABLE :: ICPRS(:) DOUBLE PRECISION, ALLOCATABLE :: U(:),TEMP(:),DTMTEMP(:) DOUBLE PRECISION, ALLOCATABLE :: UPSR(:,:),UDOTPSR(:,:),TMR(:) INTEGER NDIM,NTST,NCOL,NDM,NFPR,NPAR,NDIMRD,ITPRS,I,J,K DOUBLE PRECISION FS,DUMU(1),DUMP(1) NDIM=AP%NDIM NTST=AP%NTST NCOL=AP%NCOL NDM=AP%NDM NFPR=AP%NFPR NPAR=AP%NPAR ALLOCATE(ICPRS(NFPR)) ALLOCATE(UPSR(NDM,0:NCOLRS*NTSR),UDOTPSR(NDM,0:NCOLRS*NTSR), & TMR(0:NTSR)) CALL READBV(AP,PAR,ICPRS,NTSR,NCOLRS,NDIMRD,RLDOT,UPSR, & UDOTPSR,TMR,ITPRS,NDM) DEALLOCATE(ICPRS) ALLOCATE(U(NDM),TEMP(0:NTSR*NCOLRS),DTMTEMP(NTSR)) DO J=1,NTSR DTMTEMP(J)=TMR(J)-TMR(J-1) ENDDO ! Compute the starting value of the objective functional DO J=0,NTSR*NCOLRS DO K=1,NDM U(K)=UPSR(K,J) ENDDO CALL FOPT(NDM,U,ICP,PAR,0,FS,DUMU,DUMP) TEMP(J)=FS ENDDO PAR(10)=RINTG(NTSR,NCOLRS,1,1,TEMP,DTMTEMP) DEALLOCATE(U,TEMP,DTMTEMP) ! Complement starting data DO I=12,NPAR PAR(I)=0.d0 ENDDO NODIR=1 CALL ADAPT2(NTSR,NCOLRS,NDM,NTST,NCOL,NDIM, & TMR,UPSR,UDOTPSR,TM,UPS,UDOTPS,.FALSE.) DEALLOCATE(TMR,UPSR,UDOTPSR) END SUBROUTINE STPNPO ! ---------- ---- SUBROUTINE FOPI(JAC,NFPR,NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! Interface subroutine to user supplied FOPT. INTEGER, INTENT(IN) :: JAC,NFPR,NDIM,ICP(*),IJAC DOUBLE PRECISION, INTENT(INOUT) :: U(*),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) ! Local INTEGER IJC,I DOUBLE PRECISION UU,UMX,EP,P,F1,F2 ! Generate the objective function. IF(JAC.EQ.0)THEN IJC=0 ELSE IJC=IJAC ENDIF CALL FOPT(NDIM,U,ICP,PAR,IJC,F,DFDU,DFDP) IF(JAC.EQ.1 .OR. IJAC.EQ.0)RETURN ! Generate the Jacobian by differencing. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FOPT(NDIM,U,ICP,PAR,0,F1,DFDU,DFDP) U(I)=UU+EP CALL FOPT(NDIM,U,ICP,PAR,0,F2,DFDU,DFDP) U(I)=UU DFDU(I)=(F2-F1)/(2*EP) ENDDO IF(IJAC.EQ.1)RETURN DO I=1,NFPR P=PAR(ICP(I)) EP=HMACH*( 1 +ABS(P) ) PAR(ICP(I))=P+EP CALL FOPT(NDIM,U,ICP,PAR,0,F1,DFDU,DFDP) DFDP(ICP(I))=(F1-F)/EP PAR(ICP(I))=P ENDDO END SUBROUTINE FOPI END MODULE OPTIMIZATION auto/07p/src/fcon.f0000640000175000017500000002644513570013207012140 0ustar skskC ------- ------ PROGRAM AUTCON C C This program converts a data file into a labeled AUTO solution C C IMPLICIT NONE include 'fcon.h' C INTEGER NDIM,NOLD,NTST,NCOL,ISW,IPS,NPAR,I,J,ios DOUBLE PRECISION TEMP,T,PERIOD DOUBLE PRECISION, ALLOCATABLE :: U(:),TM(:),UPS(:,:) DOUBLE PRECISION, ALLOCATABLE :: TMR(:),UPSR(:,:),PAR(:) C OPEN(2,FILE='fort.2',STATUS='old',ACCESS='sequential',IOSTAT=ios) IF(ios/=0)THEN WRITE(6,'(A,A)')'The constants file (fort.2 or c. file) ', * 'could not be found.' STOP ENDIF OPEN(3,FILE='fort.3',STATUS='unknown',ACCESS='sequential') OPEN(8,FILE='fort.8',STATUS='unknown',ACCESS='sequential') C CALL INIT(NDIM,IPS,NTST,NCOL,ISW,NPAR) ALLOCATE(U(NDIM),PAR(NPAR)) PAR(:)=0d0 C NOLD=0 DO NOLD=NOLD+1 READ(3,*,END=2)TEMP,(TEMP,I=1,NDIM) ENDDO C 2 NOLD=NOLD-2 ALLOCATE(TM(0:NTST),TMR(0:NOLD)) ALLOCATE(UPSR(NDIM,0:NOLD),UPS(NDIM,0:NTST*NCOL)) C REWIND 3 DO J=0,NOLD READ(3,*)TMR(J),UPSR(1:NDIM,J) ENDDO C PERIOD=TMR(NOLD)-TMR(0) DO I=NOLD,0,-1 TMR(I)=(TMR(I)-TMR(0))/PERIOD ENDDO CALL ADAPT(NOLD,NDIM,NTST,NCOL,NDIM,TMR,UPSR,TM,UPS, & ((IPS.EQ.2.OR.IPS.EQ.12) .AND. ABS(ISW).LE.1)) C PAR(11)=PERIOD CALL STPNT(NDIM,U,PAR,T) CALL WRTBV8(NDIM,NTST,NCOL,ISW,PAR,UPS,TM,NPAR) C DEALLOCATE(U,TM,TMR,UPS,UPSR) C STOP CONTAINS C ---------- ---- SUBROUTINE INIT(NDIM,IPS,NTST,NCOL,ISW,NPAR) C IMPLICIT NONE INTEGER, INTENT(OUT) :: NDIM,IPS,NTST,NCOL,ISW,NPAR CHARACTER(LEN=2048) :: STR C C Reads the file of continuation constants C INTEGER KEYEND,POS,NPOS INTEGER LINE C C Defaults C NDIM=2 IPS=1 NTST=20 NCOL=4 ISW=1 NPAR=NPARX LINE=0 NPOS=1 scanloop: DO IF(NPOS==1)THEN LINE=LINE+1 READ(2,'(A)',END=1) STR ELSE STR=STR(NPOS:) ENDIF STR=ADJUSTL(STR) IF(LEN_TRIM(STR)==0)CYCLE DO I=1,LEN_TRIM(STR) ! comment on line IF(STR(I:I)=='#'.OR.STR(I:I)=='!')THEN NPOS=1 CYCLE scanloop ENDIF ! keyword detected IF((LGE(STR(I:I),'A').AND.LLE(STR(I:I),'Z')).OR. & (LGE(STR(I:I),'a').AND.LLE(STR(I:I),'z')))THEN STR=STR(I:) EXIT ELSE EXIT scanloop ENDIF IF(I==LEN_TRIM(STR))THEN NPOS=1 CYCLE scanloop ENDIF ENDDO ! look for = after keyword KEYEND=SCAN(STR,'= ')-1 IF(KEYEND==-1)THEN LINE=LINE-1 EXIT scanloop ENDIF POS=SCAN(STR,'=')+1 STR(POS:)=ADJUSTL(STR(POS:)) NPOS=SCANVALUE(STR(POS:)) IF(NPOS/=1)THEN NPOS=NPOS+POS-1 ENDIF SELECT CASE(STR(1:KEYEND)) CASE('NDIM') READ(STR(POS:),*,ERR=3)NDIM CASE('IPS') READ(STR(POS:),*,ERR=3)IPS CASE('NTST') READ(STR(POS:),*,ERR=3)NTST CASE('NCOL') READ(STR(POS:),*,ERR=3)NCOL CASE('ISW') READ(STR(POS:),*,ERR=3)ISW CASE('NPAR') READ(STR(POS:),*,ERR=3)NPAR ! ignore all others END SELECT ENDDO scanloop BACKSPACE 2 READ(2,*,ERR=3,END=4) NDIM,IPS LINE=LINE+1 READ(2,*,ERR=3,END=4) LINE=LINE+1 READ(2,*,ERR=3,END=4) NTST,NCOL,ISW,ISW,ISW 1 CONTINUE RETURN 3 WRITE(6,"(A,I2,A)") * " Error in fort.2 or c. file: bad value on line ", * LINE,"." STOP 4 WRITE(6,"(A,I2,A)") * " Error in fort.2 or c. file: ends prematurely on line ", * LINE,"." STOP END SUBROUTINE INIT C ------- -------- --------- INTEGER FUNCTION SCANVALUE(STR) IMPLICIT NONE C C Scans STR(:) for a value C NPOS points to the next keyword on the same line, C or is set to 1 if there is none C CHARACTER(*), INTENT(INOUT) :: STR INTEGER NPOS,I,LEVEL,LENSTR,ios CHARACTER(1) C,PREV,QUOTE LOGICAL QUOTEESC LEVEL=0 QUOTE=' ' QUOTEESC=.FALSE. PREV=' ' NPOS=1 LENSTR=LEN_TRIM(STR) I=1 DO IF(I>LENSTR)THEN IF(LEVEL==0)EXIT LENSTR=LEN_TRIM(STR) READ(2,'(A)',IOSTAT=ios) STR(LENSTR+1:) IF(ios/=0)EXIT LENSTR=LEN_TRIM(STR) ENDIF NPOS=I C=STR(I:I) IF(QUOTE==' ')THEN SELECT CASE(C) CASE(',',' ') IF(LEVEL==0)EXIT IF(PREV==':')C=PREV !eat ',' and ' ' after ':' CASE(':') CASE(']','}') LEVEL=LEVEL-1 CASE DEFAULT SELECT CASE(C) CASE('[','{') LEVEL=LEVEL+1 CASE('"',"'") QUOTE=C END SELECT END SELECT ELSEIF(C==QUOTE)THEN ! ignore "" and '' IF(STR(I+1:I+1)==C.OR.QUOTEESC)THEN QUOTEESC=.NOT.QUOTEESC ELSE QUOTE=' ' ENDIF ENDIF PREV=C I=I+1 ENDDO NPOS=NPOS+VERIFY(STR(NPOS:)," ,")-1 IF(NPOS>=LEN_TRIM(STR))NPOS=1 SCANVALUE=NPOS END FUNCTION SCANVALUE C C ---------- ----- SUBROUTINE ADAPT(NOLD,NDOLD,NNEW,NCNEW,NDIM, & TMR,UPSR,TM,UPS,IPER) C Adapts the distribution of the mesh points so that the increase of the C monotone function EQDF becomes approximately equidistributed over the C intervals. The function UPS is interpolated on new mesh. INTEGER, INTENT(IN) :: NOLD,NDOLD,NNEW,NCNEW,NDIM LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(IN) :: UPSR(NDOLD,0:*), TMR(0:NOLD) DOUBLE PRECISION, INTENT(OUT) :: UPS(NDIM,0:*), TM(0:*) C Generate the new mesh : CALL NEWMSH(NDIM,NDOLD,UPSR,NOLD,TMR,NNEW,TM,IPER) C Replace UPS by its interpolant on the new mesh : CALL INTERP(NDIM,NOLD,TMR,UPSR,NDOLD,NNEW,NCNEW,TM,UPS) END SUBROUTINE ADAPT C ---------- ------ SUBROUTINE INTERP(NDIM,N,TM,UPS,NDOLD,N1,NC1,TM1,UPS1) C Finds interpolant (TM(.) , UPS(.) ) on new mesh TM1. INTEGER, INTENT(IN) :: NDIM,N,N1,NC1,NDOLD DOUBLE PRECISION, INTENT(IN) :: UPS(NDOLD,0:N) DOUBLE PRECISION, INTENT(IN) :: TM(0:N),TM1(0:N1) DOUBLE PRECISION, INTENT(OUT) :: UPS1(NDIM,0:N1*NC1) C Local INTEGER I,J,J1,K DOUBLE PRECISION W0,W1,Z J=1 DO J1=0,N1-1 DO I=0,NC1-1 Z=TM1(J1)+I*( TM1(J1+1)-TM1(J1) )/NC1 DO IF(J>N)EXIT IF(TM(J)>Z)EXIT J=J+1 ENDDO J=J-1 W0=( Z-TM(J+1) )/( TM(J)-TM(J+1) ) W1=( Z-TM(J) )/( TM(J+1)-TM(J) ) DO K=1,NDIM UPS1(K,J1*NC1+I)=W0*UPS(K,J)+W1*UPS(K,J+1) ENDDO ENDDO ENDDO DO I=1,NDIM UPS1(I,N1*NC1)=UPS(I,N) ENDDO END SUBROUTINE INTERP C ---------- ------ SUBROUTINE NEWMSH(NDIM,NDOLD,UPS,NOLD,TMOLD,NNEW,TMNEW,IPER) C Redistributes the mesh according to the function EQDF. INTEGER, INTENT(IN) :: NDIM,NDOLD,NOLD,NNEW LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(IN) :: UPS(NDOLD,0:*),TMOLD(0:NOLD) DOUBLE PRECISION, INTENT(OUT) :: TMNEW(0:NNEW) C Local INTEGER J,J1 DOUBLE PRECISION DAL,UNEQ DOUBLE PRECISION, ALLOCATABLE :: EQF(:),DEQF(:) ALLOCATE(EQF(0:NOLD),DEQF(1:NOLD)) C Put the values of the monotonely increasing function EQDF in EQF. CALL EQDF(NOLD,NDIM,TMOLD,UPS,NDOLD,EQF,DEQF,IPER) C Uniformly divide the range of EQDF : DAL=EQF(NOLD)/NNEW C Generate the new mesh in TMNEW : J=1 DO J1=0,NNEW-1 C EQF is an ascending array with values in [0,1]. Get the C value of the index of the TM-interval in which EQF(i) lies. UNEQ=J1*DAL DO IF(J>NOLD)EXIT IF(EQF(J)>UNEQ)EXIT J=J+1 ENDDO J=J-1 TMNEW(J1)=TMOLD(J)+(UNEQ-EQF(J))/DEQF(J+1) ENDDO C Assign TMNEW(NNEW) explicitly because of loss of precision C problems when EQF(NOLD) and EQF(NOLD-1) are very close TMNEW(NNEW)=TMOLD(NOLD) DEALLOCATE(EQF,DEQF) END SUBROUTINE NEWMSH C ---------- ---- SUBROUTINE EQDF(NTST,NDIM,TM,UPS,NDOLD,EQF,DEQF,IPER) DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 INTEGER, INTENT(IN) :: NTST,NDIM,NDOLD LOGICAL, INTENT(IN) :: IPER DOUBLE PRECISION, INTENT(IN) :: UPS(NDOLD,0:NTST),TM(0:NTST) DOUBLE PRECISION, INTENT(OUT) :: EQF(0:NTST),DEQF(NTST) C Local DOUBLE PRECISION E,DTAV,ND,DT DOUBLE PRECISION, ALLOCATABLE :: HD(:) LOGICAL SMALL INTEGER I,J ALLOCATE(HD(NDIM)) C Compute approximation to NCOL-th and (NCOL+1)-st derivative C and define the equidistribution function : SMALL=.TRUE. EQF(0)=0.d0 DO J=1,NTST E=0.d0 DT=TM(J)-TM(J-1) DO I=1,NDIM ND=(UPS(I,J)-UPS(I,J-1))/DT IF(J>1)THEN E=E+SQRT(ABS( 2*( ND-HD(I) )/(TM(J)-TM(J-2)) )) ENDIF IF(ABS(ND)>HMACH)SMALL=.FALSE. HD(I)=ND ENDDO IF(J>1)THEN EQF(J-1)=EQF(J-2)+(TM(J-1)-TM(J-2))*E DEQF(J-1)=E ENDIF ENDDO E=0.d0 J=NTST-1 DTAV=TM(NTST)-TM(NTST-1) IF(IPER)THEN C *Extend by periodicity : J=1 DTAV=(DTAV+TM(1)-TM(0))/2 ENDIF C *else extend by extrapolation : DO I=1,NDIM ND=(UPS(I,J)-UPS(I,J-1))/(TM(J)-TM(J-1)) E=E+SQRT(ABS( (ND-HD(I))/DTAV )) IF(ABS(ND)>HMACH)SMALL=.FALSE. ENDDO EQF(NTST)=EQF(NTST-1)+(TM(NTST)-TM(NTST-1))*E DEQF(NTST)=E C Take care of "small derivative" case. IF(SMALL)THEN EQF(0)=0 DO I=1,NTST EQF(I)=I DEQF(I)=1.0d0/(TM(I)-TM(I-1)) ENDDO ENDIF DEALLOCATE(HD) END SUBROUTINE EQDF C ---------- ------ SUBROUTINE WRTBV8(NDIM,NTST,NCOL,ISW,PAR,UPS,TM,NPAR) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM,NTST,NCOL,ISW,NPAR DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:*),TM(0:*),PAR(*) INTEGER IBR,ITP,NFPR,NTOT,LAB,NTPL,NAR,NROWPR,MTOT ITP=9 NFPR=1 IBR=1 NTOT=1 LAB=1 C Write information identifying the solution : NTPL=NCOL*NTST+1 NAR=NDIM+1 NROWPR=((NDIM+6)/7)*NTPL + (NPAR+6)/7 MTOT=MOD(NTOT-1,9999)+1 WRITE(8,101)IBR,MTOT,ITP,LAB,NFPR,ISW,NTPL,NAR,NROWPR, & NTST,NCOL,NPAR C Write the entire solution on unit 8 : DO J=0,NTST*NCOL T=TM(J/NCOL)+MOD(J,NCOL)*(TM(J/NCOL+1)-TM(J/NCOL))/NCOL WRITE(8,102)T,UPS(:,J) ENDDO C Write the parameter values. WRITE(8,102)(PAR(I),I=1,NPAR) 101 FORMAT(6I6,I8,I6,I8,3I5) 102 FORMAT(4X,7ES19.10E3) END SUBROUTINE WRTBV8 END PROGRAM AUTCON C DOUBLE PRECISION FUNCTION GETP(CODE,IC,UPS) C Dummy routine (in case GETP is called in the user routine PVLS) GETP=0.0d0 END FUNCTION GETP auto/07p/src/user_c.c0000640000175000017500000000334313570013207012460 0ustar sksk/* wrapper functions for user files written in C */ #define WRAPPER #include "config.h" #include "auto_f2c.h" #ifdef FC_FUNC int FC_FUNC(func,FUNC)(integer *ndim, const doublereal *u, const integer *icp, const doublereal *par, const integer *ijac, doublereal *f, doublereal *dfdu, doublereal *dfdp) { user.func(*ndim, u, icp, par, *ijac, f, dfdu, dfdp); return 0; } int FC_FUNC(stpnt,STPNT)(integer *ndim, doublereal *u, doublereal *par, doublereal *t) { user.stpnt(*ndim, *t, u, par); return 0; } int FC_FUNC(bcnd,BCND)(integer *ndim, const doublereal *par, const integer *icp, integer *nbc, const doublereal *u0, const doublereal *u1, doublereal *fb, integer *ijac, doublereal *dbc) { user.bcnd(*ndim, par, icp, *nbc, u0, u1, *ijac, fb, dbc); return 0; } int FC_FUNC(icnd,ICND)(integer *ndim, const doublereal *par, const integer *icp, integer *nint, const doublereal *u, const doublereal *uold, const doublereal *udot, const doublereal *upold, doublereal *fi, integer *ijac, doublereal *dint) { user.icnd(*ndim, par, icp, *nint, u, uold, udot, upold, *ijac, fi, dint); return 0; } int FC_FUNC(fopt,FOPT)(integer *ndim, const doublereal *u, const integer *icp, const doublereal *par, integer *ijac, doublereal *fs, doublereal *dfdu, doublereal *dfdp) { user.fopt(*ndim, u, icp, par, *ijac, fs, dfdu, dfdp); return 0; } int FC_FUNC(pvls,PVLS)(integer *ndim, const void *u, doublereal *par) { user.pvls(*ndim, u, par); return 0; } doublereal getp(const char *code, integer ic, const doublereal *u) #undef getp { char ncode[4]; memcpy(ncode, code, 3); ncode[3] = 0; return FC_FUNC(getp,GETP)(ncode, &ic, u); } #endif auto/07p/src/f2003.f900000640000175000017500000000160613570013207012106 0ustar skskmodule compat implicit none public :: autoflush, autim contains ! This file calls some F2003/F95 functions that were previously only ! available as Unix extensions. subroutine autoflush(i) ! The Fortran 2003 way: integer, intent(in) :: i flush(i) end subroutine autoflush !----------------------------------------------------------------------- ! Timing AUTO !----------------------------------------------------------------------- ! ------ --------- -------- double precision function autim() real etime call cpu_time(etime) autim = etime end function autim integer function autargc() autargc = command_argument_count() end function autargc subroutine autgetarg(number,value) integer, intent(in) :: number character(len=*), intent(out) :: value call get_command_argument(number,value) end subroutine autgetarg end module compat auto/07p/src/fcon.h0000640000175000017500000000066213570013207012133 0ustar sksk!----------------------------------------------------------------------- ! Note: this file is only here for makefile compatibility. ! Normally, $AUTO_DIR/include/fcon.h is used. !----------------------------------------------------------------------- INTEGER, PARAMETER :: NPARX=36 !----------------------------------------------------------------------- !----------------------------------------------------------------------- auto/07p/src/auto_constants.f900000640000175000017500000000456113570013207014423 0ustar sksk!------ -------------- ! these are the AUTO constants, *exactly* as given in the fort.2 or c. file ! don't use this module from any parallellized function (FUNI and ICNI). MODULE AUTO_CONSTANTS IMPLICIT NONE INTEGER NPARX INCLUDE 'auto.h' INTEGER NDIM,IPS,IRS,ILP CHARACTER(13), ALLOCATABLE :: ICU(:) INTEGER NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT INTEGER NMX DOUBLE PRECISION RL0,RL1,A0,A1 INTEGER NPR,MXBF,IIS,IID,ITMX,ITNW,NWTN,JAC DOUBLE PRECISION EPSL,EPSU,EPSS DOUBLE PRECISION DS,DSMIN,DSMAX INTEGER IADS,NPAR,IBR,LAB TYPE INDEXVAR CHARACTER(13) INDEX DOUBLE PRECISION VAR END TYPE INDEXVAR TYPE(INDEXVAR),ALLOCATABLE :: IVTHL(:),IVTHU(:),UVALS(:),PARVALS(:) TYPE INDEXMVAR CHARACTER(13) INDEX DOUBLE PRECISION, POINTER :: VAR(:) END TYPE INDEXMVAR TYPE(INDEXMVAR),ALLOCATABLE :: IVUZR(:) TYPE(INDEXMVAR),ALLOCATABLE :: IVUZSTOP(:) TYPE INDEXSTR INTEGER INDEX CHARACTER(13) STR END TYPE INDEXSTR TYPE(INDEXSTR), ALLOCATABLE :: unames(:), parnames(:) CHARACTER(13), ALLOCATABLE :: SP(:), STOPS(:) CHARACTER(13) :: SIRS, TY CHARACTER(256) :: EFILE, SFILE, SVFILE, DATFILE ! HomCont comstants: TYPE HCONST_TYPE INTEGER NUNSTAB,NSTAB,IEQUIB,ITWIST,ISTART INTEGER, POINTER :: IREV(:),IFIXED(:),IPSI(:) END TYPE TYPE(HCONST_TYPE)HCONST LOGICAL, SAVE :: NEWCFILE=.FALSE. ! these are the AUTO parameters, as used to be in the IAP and RAP arrays. ! NOTE: for MPI: ! * SEQUENCE is necessary, first comes double precision, then integer ! * DS should be the first double precision variable ! * NDIM should be the first integer variable ! * NIAP and NRAP are used! ! * For alignment, always keep an even number of integer variables. ! (NIAP should be even; make the structure length a multiple of its ! largest element) INTEGER, PARAMETER :: NIAP = 36 INTEGER, PARAMETER :: NRAP = 16 TYPE AUTOPARAMETERS SEQUENCE DOUBLE PRECISION DS, DSMIN, DSMAX, RDS, RL0, RL1, A0, A1 DOUBLE PRECISION EPSL, EPSU, EPSS DOUBLE PRECISION DET, FLDF, HBFF, BIFF, SPBF INTEGER NDIM, IPS, IRS, ILP, NTST, NCOL, IAD, IADS, ISP, ISW INTEGER IPLT, NBC, NINT, NMX, NUZR, NPR, MXBF, IIS, IID, ITMX, ITNW INTEGER NWTN, JAC, NPAR, NREV INTEGER NDM, NPARI, ITP, ITPST, NFPR, IBR, NTOT INTEGER NINS, LAB, NICP, NTEST END TYPE AUTOPARAMETERS END MODULE AUTO_CONSTANTS auto/07p/src/interfaces.f900000640000175000017500000002262113570013207013477 0ustar sksk!----------------------------------------------------------------------- !----------------------------------------------------------------------- ! Routines for Interface with User Supplied Routines ! (To generate Jacobian by differencing, if not supplied analytically) !----------------------------------------------------------------------- !----------------------------------------------------------------------- MODULE INTERFACES USE AUTO_CONSTANTS, ONLY: AUTOPARAMETERS IMPLICIT NONE PRIVATE PUBLIC :: FUNI,BCNI,ICNI,PVLSI ! Interface subroutines PUBLIC :: FUNC,STPNT,BCND,ICND,PVLS ! User subroutines INTERFACE SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) END SUBROUTINE FUNC SUBROUTINE STPNT(NDIM,U,PAR,T) INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T END SUBROUTINE STPNT SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) END SUBROUTINE BCND SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJ,DINT) INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJ DOUBLE PRECISION, INTENT(IN) :: PAR(*),U(NDIM),UOLD(NDIM) DOUBLE PRECISION, INTENT(IN) :: UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) END SUBROUTINE ICND SUBROUTINE PVLS(NDIM,U,PAR) INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) END SUBROUTINE PVLS END INTERFACE DOUBLE PRECISION, PARAMETER :: HMACH=1.0d-7 CONTAINS ! ---------- ---- SUBROUTINE FUNI(AP,NDIM,U,UOLD,ICP,PAR,IJAC,F,DFDU,DFDP) ! Interface subroutine to user supplied FUNC. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(*) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) INTEGER JAC,I,J,NFPR,IJC DOUBLE PRECISION UMX,EP,UU,P JAC=AP%JAC ! Generate the function. ! if the user specified the Jacobian but not the ! parameter derivatives we do not generate the Jacobian here IF(JAC.EQ.0.AND.IJAC.NE.0)THEN ! Generate the Jacobian by differencing. UMX=0.d0 DO I=1,NDIM IF(DABS(U(I)).GT.UMX)UMX=DABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL FUNC(NDIM,U,ICP,PAR,0,F,DFDU,DFDP) U(I)=UU+EP CALL FUNC(NDIM,U,ICP,PAR,0,DFDU(1,I),DFDU,DFDP) U(I)=UU DO J=1,NDIM DFDU(J,I)=(DFDU(J,I)-F(J))/(2*EP) ENDDO ENDDO ENDIF IF(JAC==0.OR.IJAC==0)THEN IJC=0 ELSE IJC=1 IF(JAC==1)THEN IJC=IJAC ENDIF IF(AP%NDIM>NDIM)THEN ! zero initialize allocated matrices for extended systems DFDU(:,:)=0d0 IF(JAC==1.AND.IJAC==2)THEN DO I=1,AP%NFPR DFDP(:,ICP(I))=0d0 ENDDO ENDIF ENDIF ENDIF CALL FUNC(NDIM,U,ICP,PAR,IJC,F,DFDU,DFDP) IF(JAC==1.OR.IJAC/=2)RETURN NFPR=AP%NFPR DO I=1,NFPR P=PAR(ICP(I)) EP=HMACH*( 1 +ABS(P) ) PAR(ICP(I))=P+EP CALL FUNC(NDIM,U,ICP,PAR,0,DFDP(1,ICP(I)),DFDU,DFDP) DO J=1,NDIM DFDP(J,ICP(I))=(DFDP(J,ICP(I))-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO END SUBROUTINE FUNI ! ---------- ---- SUBROUTINE BCNI(AP,NDIM,PAR,ICP,NBC,U0,U1,F,IJAC,DBC) ! Interface subroutine to the user supplied BCND. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM,ICP(*),NBC,IJAC DOUBLE PRECISION, INTENT(INOUT) :: U0(NDIM),U1(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) ! Local DOUBLE PRECISION EP,UMX,UU,P INTEGER IJC,I,J,JAC,NFPR JAC=AP%JAC ! Generate the function. IF(JAC==0 .AND. IJAC/=0)THEN ! Generate the Jacobian by differencing. UMX=0.d0 DO I=1,NDIM IF(ABS(U0(I)).GT.UMX)UMX=ABS(U0(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U0(I) U0(I)=UU-EP CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,F,0,DBC) U0(I)=UU+EP CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,DBC(1,I),0,DBC) U0(I)=UU DO J=1,NBC DBC(J,I)=(DBC(J,I)-F(J))/(2*EP) ENDDO ENDDO UMX=0.d0 DO I=1,NDIM IF(ABS(U1(I)).GT.UMX)UMX=ABS(U1(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U1(I) U1(I)=UU-EP CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,F,0,DBC) U1(I)=UU+EP CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,DBC(1,NDIM+I),0,DBC) U1(I)=UU DO J=1,NBC DBC(J,NDIM+I)=(DBC(J,NDIM+I)-F(J))/(2*EP) ENDDO ENDDO ENDIF IF(JAC==0.OR.IJAC==0)THEN IJC=0 ELSE IJC=1 IF(JAC==1)THEN IJC=IJAC ENDIF IF(AP%NDIM>NDIM.OR.AP%NBC>NBC)THEN ! zero initialize allocated matrices for extended systems IF(JAC==1.AND.IJAC==2)THEN DO I=1,AP%NFPR DBC(:,2*NDIM+ICP(I))=0d0 ENDDO ENDIF DBC(:,:2*NDIM)=0d0 ENDIF ENDIF CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,F,IJC,DBC) IF(JAC==1 .OR. IJAC/=2)RETURN NFPR=AP%NFPR DO I=1,NFPR P=PAR(ICP(I)) EP=HMACH*( 1 +ABS(P)) PAR(ICP(I))=P+EP CALL BCND(NDIM,PAR,ICP,NBC,U0,U1,DBC(1,2*NDIM+ICP(I)),0,DBC) DO J=1,NBC DBC(J,2*NDIM+ICP(I))=(DBC(J,2*NDIM+ICP(I))-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO END SUBROUTINE BCNI ! ---------- ---- SUBROUTINE ICNI(AP,NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJAC,DINT) ! Interface subroutine to user supplied ICND. TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: ICP(*),NDIM,NINT,IJAC DOUBLE PRECISION, INTENT(IN) :: UOLD(NDIM),UDOT(NDIM),UPOLD(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) INTEGER JAC,I,J,NFPR,IJC DOUBLE PRECISION UMX,EP,UU,P JAC=AP%JAC ! Generate the integrand. IF(JAC==0 .AND. IJAC/=0)THEN ! Generate the Jacobian by differencing. UMX=0.d0 DO I=1,NDIM IF(ABS(U(I)).GT.UMX)UMX=ABS(U(I)) ENDDO EP=HMACH*(1+UMX) DO I=1,NDIM UU=U(I) U(I)=UU-EP CALL ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,0,DINT) U(I)=UU+EP CALL ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,DINT(1,I),0,DINT) U(I)=UU DO J=1,NINT DINT(J,I)=(DINT(J,I)-F(J))/(2*EP) ENDDO ENDDO ENDIF IF(JAC==0.OR.IJAC==0)THEN IJC=0 ELSE IJC=1 IF(JAC==1)THEN IJC=IJAC ENDIF IF(AP%NDIM>NDIM.OR.AP%NINT>NINT)THEN ! zero initialize allocated matrices for extended systems IF(JAC==1.AND.IJAC==2)THEN DO I=1,AP%NFPR DINT(:,NDIM+ICP(I))=0d0 ENDDO ENDIF DINT(:,:NDIM)=0d0 ENDIF ENDIF CALL ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,F,IJC,DINT) IF(JAC==1 .OR. IJAC/=2)RETURN NFPR=AP%NFPR DO I=1,NFPR P=PAR(ICP(I)) EP=HMACH*( 1 +ABS(P) ) PAR(ICP(I))=P+EP CALL ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD, & DINT(1,NDIM+ICP(I)),0,DINT) DO J=1,NINT DINT(J,NDIM+ICP(I))=(DINT(J,NDIM+ICP(I))-F(J))/EP ENDDO PAR(ICP(I))=P ENDDO END SUBROUTINE ICNI ! ---------- ----- SUBROUTINE PVLSI(AP,UPS,NDIM,PAR) USE AUTO_CONSTANTS, ONLY : NPARX USE SUPPORT, ONLY: AUTOSTOP TYPE(AUTOPARAMETERS), INTENT(IN) :: AP INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: UPS(NDIM,0:*) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) INTEGER NDM,i NDM=AP%NDM CALL PVLS(NDM,UPS,PAR) DO i=NPARX,AP%NPAR+1,-1 IF(PAR(i)/=0)THEN WRITE(6,"(A,I4)")'NPAR should be at least ',i CALL AUTOSTOP() ENDIF ENDDO END SUBROUTINE PVLSI !----------------------------------------------------------------------- !----------------------------------------------------------------------- END MODULE INTERFACES auto/07p/src/README0000640000175000017500000000141413570013207011711 0ustar skskThis directory contains the following files: README : This file. autlib1.f : Auto library routines (including main program) autlib2.f : Auto library routines (bvp linear equation routines) autlib3.f : Auto library routines (interface routines) autlib4.f : Auto library routines (Floquet routines) autlib5.f : Auto library routines (HomPack) stdat.f : A subroutine for starting orbits from numerical data eispack.f : contains EISPACK routines needed by AUTO autlab.f : A utility program for rewriting AUTO data files 86to97.f : A utility program to convert AUTO86 Data-files 94to97.f : A utility program to convert older AUTO94 Data-files double.f : A utility program for ``doubling'' solutions in q.xxx Makefile : To compile the source files Type "make" to compile. auto/07p/python/0000750000175000017500000000000013570013207011562 5ustar skskauto/07p/python/auto/0000750000175000017500000000000013570013207012532 5ustar skskauto/07p/python/auto/Points.py0000750000175000017500000032575713570013207014406 0ustar sksk#! /usr/bin/env python # Point class used by parseB and parseS # derived from PyDSTool """Point and Pointset enhanced array classes. (Objects of both classes are mutable.) Robert Clewley, February 2006 """ # ---------------------------------------------------------------------------- from __future__ import division from auto import AUTOutil from copy import copy, deepcopy import sys numpyimported = False ndarray = AUTOutil.ArrayType def importnumpy(): global N, numpyimported, fromstring, ndarray, array, rank, take, less global float64, int32, array2string, shape, zeros, ravel, bool8 global _seq_types, _num_equivtype, linalg fromstring = None usingnumpy = True try: import matplotlib nn = matplotlib.__version__.split('.') if int(nn[0]) == 0 and int(nn[1]) < 99: # matplotlib >= 0.99 forces numpy import matplotlib.numerix if matplotlib.numerix.which[0] == 'numeric': usingnumpy = False except ImportError: pass # unless matplotlib uses Numeric (which is incompatible) we can use numpy if usingnumpy: try: import numpy as N from numpy import linalg fromstring, ndarray, float64, int32, bool8, floating, integer, rank = ( N.fromstring, N.ndarray, N.float64, N.int32, N.bool, N.floating, N.integer, N.ndim) global _float_types global _int_types _float_types = (type(1), N.floating) _int_types = (type(1), N.integer) except ImportError: usingnumpy = False if not usingnumpy: N = AUTOutil float64, int32, bool8 = 'd', 'i', 'B' ndarray, rank = N.ArrayType, N.rank array, take, array2string, shape, zeros, less, ravel = ( N.array, N.take, N.array2string, N.shape, N.zeros, N.less, N.ravel) _seq_types = (list, tuple, ndarray) _num_equivtype = {type(1.0): float64, type(1): int32, float64: float64, int32: int32, float: float64, int: int32} numpyimported = True if fromstring is None: class linalg(object): def norm(v, normord): n = 0.0 for x in v: n += x ** normord return n ** (1.0/normord) norm=staticmethod(norm) _float_types = type(1.0) _int_types = type(1) class symbolMapClass(object): """Abstract class for hassle-free symbol re-mappings.""" def __init__(self, symbolMap=None): if isinstance(symbolMap, symbolMapClass): self.lookupDict = copy(symbolMap.lookupDict) elif symbolMap is None: self.lookupDict = {} else: self.lookupDict = copy(symbolMap) def __call__(self, arg): if isinstance(arg, str): return self.__getitem__(arg) elif hasattr(arg, 'coordnames'): # treat as point or pointset -- just transform the coordnames # ensure return type is the same res = copy(arg) try: res.mapNames(self) except AttributeError: raise TypeError("symbolMapClass does not know how to " "process this type of argument") return res elif hasattr(arg, 'iteritems'): # ensure return type is the same res = copy(arg) try: for k, symbol in arg.iteritems(): res[self.__getitem__(k)] = self.__getitem__(symbol) # delete unprocessed entry in res, from copy of arg del res[k] except: raise TypeError("symbolMapClass does not know how to " "process this type of argument") return res else: # assume arg is iterable and mutable (list, array, etc.) # ensure return type is the same try: res = copy(arg) except TypeError: # not copyable, so no need to worry res = arg try: for i, v in enumerate(arg): # overwrite unprocessed entry in res, from copy of arg res[i] = self.__getitem__(v) except: try: return self.__getitem__(res) except: raise TypeError("symbolMapClass does not know how to " "process this type of argument (%s)"%str(type(arg))) else: return res def __eq__(self, other): try: return self.lookupDict == other.lookupDict except AttributeError: return False def __ne__(self, other): return not self.__eq__(other) def __setitem__(self, symbol, mappedsymbol): self.lookupDict[symbol] = mappedsymbol def __getitem__(self, symbol): try: return self.lookupDict[symbol] except (KeyError, TypeError): return symbol def __contains__(self, symbol): return self.lookupDict.__contains__(symbol) def keys(self): return self.lookupDict.keys() def values(self): return self.lookupDict.values() def items(self): return self.lookupDict.items() def iterkeys(self): return self.lookupDict.iterkeys() def itervalues(self): return self.lookupDict.itervalues() def iteritems(self): return self.lookupDict.iteritems() def update(self, amap): try: # perhaps passed a symbolMapClass object self.lookupDict.update(amap.lookupDict) except AttributeError: # was passed a dict self.lookupDict.update(amap) def __len__(self): return len(self.lookupDict) def copy(self): return symbolMapClass(self) def __repr__(self): return "Symbol mapping" __str__ = __repr__ def has_key(self, k): return k in self.lookupDict class auxfnDBclass(object): """Auxiliary function database, for use by parsers.""" def __init__(self): self.auxnames = {} def addAuxFn(self, auxfnName, parserObj): if parserObj not in self.auxnames: self.auxnames[parserObj] = auxfnName else: raise ValueError("Parser object " + parserObj.name + " already " "exists in auxiliary function database") def __repr__(self): return "ModelSpec internal helper class: auxfnDBclass object" __str__ = __repr__ def __call__(self, parserObj=None): if parserObj is None: # return all auxiliary functions known return self.auxnames.values() else: try: return [self.auxnames[parserObj]] except KeyError: return [] def removeAuxFn(self, auxfnName): flagdelete = None for k, v in self.auxnames.items(): if v == auxfnName: flagdelete = k break if flagdelete is not None: del self.auxnames[k] def clear(self, parserObj): if parserObj in self.auxnames: del self.auxnames[parserObj] def clearall(self): self.auxnames = {} class DefaultDict(dict): """Dictionary with a default value for unknown keys. Written by Peter Norvig.""" def __init__(self, default): self.default = default def __getitem__(self, key): if key in self: return self.get(key) return self.setdefault(key, deepcopy(self.default)) def isUniqueSeq(objlist): """Check that list contains items only once""" for obj in objlist: if objlist.count(obj) != 1: return False return True # returns the mapping from the entries in an array or list to their indices def makeArrayIxMap(a): return dict(zip(a, range(len(a)))) # invert an index mapping or other form of mapping def invertMap(themap): """invert an index mapping or other form of mapping. invertMap() returns a dictionary, regardless of whether the argument is a dictionary or a list.""" if isinstance(themap, dict): return dict([(v,k) for (k,v) in themap.items()]) elif isinstance(themap, (list, tuple)): # input domain is the position index return dict(zip(themap, range(len(themap)))) elif isinstance(themap, ndarray): # input domain is the position index return dict(zip(themap.tolist(), range(len(themap)))) else: raise TypeError("Unsupported type for map") # check that a sequence type is in increasing order def isincreasing(theseq, withVal=False): # Note: This version of the function has better speed on the # 'usual' case where this function is used internally by PyDSTool # -- which is where the sequence *is* increasing and the input is # already an array try: v_old = theseq[0] except IndexError: raise ValueError("Problem with sequence passed to " "function `isincreasing` -- is it empty?") v = array(theseq) res = v[1:] > v[:-1] if withVal: if all(res): return True, None, None else: pos = res.tolist().index(False) return False, theseq[pos], theseq[pos+1] else: return all(res) def sortedDictKeys(d, onlykeys=[], reverse=False): """Return sorted list of keys from a dictionary. Adapted from original function by Alex Martelli: added filtering of keys.""" if onlykeys != []: keys = intersect(d.keys(), onlykeys) else: keys = list(d) keys.sort() if reverse: keys.reverse() return keys def compareNumTypes(t1, t2): _num_type2name = {float64: 'float', int32: 'int', type(1.0): 'float', type(1): 'int'} try: for t in t2: if _num_type2name[t1] == _num_type2name[t]: return True return False except TypeError: # t2 not iterable, assume singleton try: return _num_type2name[t1] == _num_type2name[t2] except KeyError: return False except KeyError: return False # find intersection of two lists, sequences, etc. def intersect(a, b): return list(filter(lambda e,b=b : e in b, a)) def remain(a, b): """Find remainder of two lists, sequences, etc., after intersection. Includes repetitions if they occur in the input lists.""" return list(filter(lambda e,b=b : e not in b, a)) __all__ = ['Point', 'Pointset', 'isparameterized', 'pointsToPointset', 'PointInfo', 'makeNonParameterized', 'arrayToPointset', 'VarCaller', 'comparePointCoords'] #---------------------------------------------------------------------------- class VarCaller(object): """Wrapper for Variable type to call Pointset and return array type.""" def __init__(self, pts): if isinstance(pts, (Point, Pointset)): self.pts = pts else: raise TypeError("Invalid type for pts argument") def __call__(self, x): return self.pts(x).toarray() #---------------------------------------------------------------------------- # for internal use point_keys = ['coorddict', 'coordarray', 'coordtype', 'norm', 'labels'] class Point(object): """N-dimensional point class.""" # Contains an ordered list of names for the coordinates (to # suggest how the points belong to a particular space specified # using a particular basis) def __init__(self, kwd=None, **kw): if not numpyimported: importnumpy() if kwd is not None: if kw != {}: raise ValueError("Cannot mix keyword dictionary and keywords") kw = kwd self._parameterized = False self.labels = {} if intersect(kw.keys(), point_keys) == []: # creating Point from dictionary temp_kw = {} temp_kw['coorddict'] = copy(kw) kw = copy(temp_kw) if 'coorddict' in kw: coorddict = {} try: ct = kw['coordtype'] except KeyError: self.coordtype = float64 else: try: self.coordtype = _num_equivtype[ct] except KeyError: raise TypeError('Coordinate type %s not valid for Point'%str(ct)) for c, v in kw['coorddict'].items(): if not isinstance(c, str): c_key = repr(c) else: c_key = c if isinstance(v, list): coorddict[c_key] = array(v, self.coordtype) elif isinstance(v, ndarray): if len(v) == 1: coorddict[c_key] = v[0] else: coorddict[c_key] = array(v) assert compareNumTypes(self.coordtype, type(coorddict[c_key][0])), \ 'type mismatch' elif isinstance(v, _float_types): assert compareNumTypes(self.coordtype, float64), \ 'type mismatch' coorddict[c_key] = array([v], self.coordtype) elif isinstance(v, _int_types): assert compareNumTypes(self.coordtype, (int32, float64)), \ 'type mismatch' coorddict[c_key] = array([v], self.coordtype) ## elif isinstance(v, _complex_types): ## assert compareNumTypes(self.coordtype, complex), 'type mismatch' ## coorddict[c_key] = array([v], self.coordtype) else: raise TypeError("Must pass numeric type or sequence of " "numeric types") self.coordnames = list(coorddict) # only way to order dictionary keys for array is to sort self.coordnames.sort() self.dimension = len(self.coordnames) datalist = [] for c in self.coordnames: assert not isinstance(coorddict[c], (list, tuple)), 'type mismatch' datalist.append(coorddict[c][0]) self.coordarray = array(datalist, self.coordtype) r = rank(self.coordarray) if r == 1: pass elif r == 0: self.coordarray = ravel(self.coordarray) else: raise ValueError("Invalid rank for coordinate array: %i"%r) assert self.dimension == self.coordarray.shape[0], "Invalid coord array" elif 'coordarray' in kw: # 'coordtype' key is optional unless 'array' is actually a list, # when this key specifies the internal Python to use if isinstance(kw['coordarray'], ndarray): # use 'array' constructor to ensure that copy is made of array # in case either original or new array is independently changed. array_temp = array(kw['coordarray']) try: if len(array_temp) == 0: self.coordtype = _num_equivtype[type(1.0)] else: self.coordtype = _num_equivtype[type(array_temp[0])] except KeyError: raise TypeError('Coordinate type %s not valid for Point'%str(ct)) elif isinstance(kw['coordarray'], list): try: self.coordtype = _num_equivtype[kw['coordtype']] except KeyError: raise TypeError('Coordinate type %s not valid for Point'%str(ct)) array_temp = array(kw['coordarray'], self.coordtype) else: raise TypeError('Coordinate type %s not valid for Point'%str(type(kw['coordarray']))) r = rank(array_temp) if r == 1: self.coordarray = array_temp elif r == 0: self.coordarray = ravel(array_temp) else: raise ValueError("Invalid rank for coordinate array: %i"%r) self.dimension = self.coordarray.shape[0] if 'coordnames' in kw: if isinstance(kw['coordnames'], str): coordnames = [kw['coordnames']] else: coordnames = kw['coordnames'] else: coordnames = [str(cix) for cix in range(self.dimension)] if len(coordnames) != self.dimension: print("Point initialization error:") print("Found coord names: %s (dimension = %s)"% (coordnames, len(coordnames))) print("vs. data dimension = %s"%self.dimension) raise ValueError("Mismatch between number of coordnames and " "dimension of data") self.coordnames = kw['coordnames'] else: raise ValueError("Missing coord info in keywords") assert isUniqueSeq(self.coordnames), 'Coordinate names must be unique' self.makeIxMaps() if 'norm' in kw: if kw['norm'] == 0: raise ValueError("Norm order for point cannot be zero") self._normord = kw['norm'] else: self._normord = 2 # extra information (for special bifurcation point data) if 'labels' in kw: self.addlabel(kw['labels']) def addlabel(self, label): if label is None: pass elif isinstance(label, str): self.labels = {label: {}} elif isinstance(label, tuple) and len(label)==2: if isinstance(label[0], str) and isinstance(label[1], dict): self.labels[label[0]] = label[1] elif isinstance(label, dict): self.labels = label else: raise TypeError("Point label must be a string, a pair, or a dict") def removelabel(self): self.labels = {} def makeIxMaps(self): self._name_ix_map = dict(zip(self.coordnames, range(self.dimension))) self._ix_name_map = copy(self.coordnames) def todict(self, aslist=False): """Convert Point to a dictionary of array values (or of list with aslist=True).""" if aslist: return dict(zip(self._ix_name_map, self.coordarray.tolist())) else: return dict(zip(self._ix_name_map, self.coordarray)) def __contains__(self, coord): return coord in self.coordnames def __delitem__(self, k): raise NotImplementedError def get(self, coord, d=None): if coord in self.coordnames: return self.__call__(coord) else: return d def update(self, d): for k, v in d.items(): self.coordarray[self._map_names_to_ixs(k)] = v def items(self): return zip(self._ix_name_map, self.coordarray) def iteritems(self): return iter(zip(self._ix_name_map, self.coordarray)) def values(self): return self.coordarray.tolist() def itervalues(self): return iter(self.coordarray.tolist()) def keys(self): return self._ix_name_map def iterkeys(self): return iter(self._ix_name_map) def has_key(self, k): return k in self.coordnames def _map_names_to_ixs(self, namelist): try: try: # single string return self._name_ix_map[namelist] except TypeError: # list of strings return [self._name_ix_map[n] for n in namelist] except KeyError: e = sys.exc_info()[1] import AUTOExceptions raise AUTOExceptions.AUTORuntimeError("Name not found: "+str(e)) def __len__(self): return self.dimension def _force_coords_to_ixlist(self, x): if x is None: return range(self.dimension) elif x in range(self.dimension): # only used for recursive calls return [x] elif x in self.coordnames: # only used for recursive calls return [self._name_ix_map[x]] elif isinstance(x, _seq_types): if len(x) == 0: return range(self.dimension) else: return [self._force_coords_to_ixlist(el)[0] for el in x] elif isinstance(x, slice): s1, s2, s3 = x.indices(self.dimension) if ((s3 > 0 and s1 >= self.dimension) or (s3 < 0 and s2 >= self.dimension)): raise ValueError("Slice index out of range") return range(s1, s2, s3) elif isinstance(x,int): raise IndexError("Invalid index: %d"%x + \ " -- coord names are: %s"%str(self.coordnames)) else: raise ValueError("Invalid coordinate / index: %s"%str(x) + \ " -- coord names are: %s"%str(self.coordnames)) def __call__(self, coords): if coords in range(self.dimension+1): if coords == self.dimension: # trap for when Point is used as an iterator, i.e. as # for x in pt -- avoids writing an __iter__ method that # will be inherited by Pointset, which already iterates fine raise StopIteration else: return self.coordarray[coords] elif coords in self.coordnames: ix = self._name_ix_map[coords] return self.coordarray[ix] else: ixlist = self._force_coords_to_ixlist(coords) return Point({'coordarray': take(self.coordarray,ixlist), 'coordnames': [self.coordnames[i] for i in ixlist], 'coordtype': self.coordtype, 'norm': self._normord, 'labels': self.labels}) __getitem__ = __call__ # def __iter__(self): # return self.coordarray.__iter__() def __setitem__(self, ixarg, val): """Change coordinate array values.""" ixs = self._force_coords_to_ixlist(ixarg) if len(ixs) == 1: val = [val] try: for i, v in zip(ixs,val): self.coordarray[i] = v except TypeError: raise TypeError("Bad value type for Point") def toarray(self): if self.dimension == 1: return self.coordarray[0] else: return self.coordarray def __add__(self, other): res = self.copy() try: res.coordarray += other.coordarray except AttributeError: res.coordarray += other return res __radd__ = __add__ def __sub__(self, other): res = self.copy() try: res.coordarray -= other.coordarray except AttributeError: res.coordarray -= other return res def __rsub__(self, other): res = self.copy() try: res.coordarray = other.coordarray - res.coordarray except AttributeError: res.coordarray = other - res.coordarray return res def __mul__(self, other): res = self.copy() try: res.coordarray *= other.coordarray except AttributeError: res.coordarray *= other return res __rmul__ = __mul__ def __div__(self, other): res = self.copy() try: res.coordarray /= other.coordarray except AttributeError: res.coordarray /= other return res __truediv__ = __div__ def __rdiv__(self, other): res = self.copy() try: res.coordarray = other.coordarray / res.coordarray except AttributeError: res.coordarray = other / res.coordarray return res __rtruediv__ = __rdiv__ def __pow__(self, other): res = self.copy() res.coordarray **= other return res def __neg__(self): res = self.copy() res.coordarray = - res.coordarray return res def __pos__(self): return self.copy() def __lt__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) < \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray < other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def __gt__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) > \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray > other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def __le__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) <= \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray <= other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def __ge__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) >= \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray >= other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def __eq__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) == \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray == other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def __ne__(self, other): try: assert shape(self) == shape(other) if hasattr(other, 'coordnames'): if self.coordnames != other.coordnames: raise ValueError("Coordinate mismatch") return linalg.norm(self.coordarray, self._normord) != \ linalg.norm(other.coordarray, self._normord) except (AttributeError, TypeError, AssertionError): return self.coordarray != other except ZeroDivisionError: raise ValueError("Norm order for point cannot be zero") def _infostr(self, verbose=0): precision = 8 if verbose == 0: outputStr = "Point with coords:\n" for c in self.coordnames: outputStr += c if c != self.coordnames[-1]: outputStr += "\n" elif verbose > 0: outputStr = '' for c in self.coordnames: v = self.coordarray[self._map_names_to_ixs(c)] if isinstance(v, ndarray): dvstr = str(v[0]) else: # only alternative is a singleton numeric value (not list) dvstr = str(v) outputStr += c+': '+dvstr if c != self.coordnames[-1]: outputStr += "\n" for label, infodict in self.labels.items(): outputStr += "\nLabels: %s (%s)"%(label, str(infodict)) return outputStr def __repr__(self): return self._infostr(verbose=1) __str__ = __repr__ def info(self, verboselevel=1): print(self._infostr(verboselevel)) def __abs__(self): return linalg.norm(self.coordarray, self._normord) def __copy__(self): return Point({'coordarray': copy(self.coordarray), 'coordnames': copy(self.coordnames), 'coordtype': self.coordtype, 'norm': self._normord, 'labels': self.labels}) copy = __copy__ def __getstate__(self): d = copy(self.__dict__) # remove reference to Cfunc type if not numpyimported: importnumpy() _num_type2name = {float64: 'float', int32: 'int', type(1.0): 'float', type(1): 'int'} d['coordtype'] = _num_type2name[self.coordtype] return d def __setstate__(self, state): if not numpyimported: importnumpy() _num_name2type = {'float': float64, 'int': int32} self.__dict__.update(state) # reinstate Cfunc type self.coordtype = _num_name2type[self.coordtype] #---------------------------------------------------------------------------- class Pointset(Point): """1D parameterized or non-parameterized set of discrete points. (If present, the independent variable must be a float64 or an int32)""" def __init__(self, kwd=None, **kw): if not numpyimported: importnumpy() if kwd is not None: if kw != {}: raise ValueError("Cannot mix keyword dictionary and keywords") kw = kwd if intersect(kw.keys(), point_keys) == []: # creating Pointset from dictionary temp_kw = {} temp_kw['coorddict'] = copy(kw) kw = copy(temp_kw) # Deal with independent variable, if present if 'indepvardict' in kw: assert len(kw['indepvardict']) == 1 try: it = kw['indepvartype'] except KeyError: self.indepvartype = float64 else: try: self.indepvartype = _num_equivtype[it] except KeyError: raise TypeError('Independent variable type %s not valid'%str(it)) vals = list(kw['indepvardict'].values())[0] self.indepvarname = list(kw['indepvardict'])[0] if isinstance(vals, _seq_types): self.indepvararray = array(vals, self.indepvartype) else: try: assert self.indepvartype == _num_equivtype[type(vals)] except (AssertionError, KeyError): raise TypeError("Invalid type for independent variable value") else: self.indepvararray = array([vals], self.indepvartype) elif 'indepvararray' in kw: if 'indepvarname' in kw: self.indepvarname = kw['indepvarname'] else: self.indepvarname = 't' vals = kw['indepvararray'] if isinstance(vals, list): try: it = kw['indepvartype'] except: self.indepvartype = float64 else: try: self.indepvartype = _num_equivtype[it] except KeyError: raise TypeError('Independent variable type %s not valid'%str(it)) self.indepvararray = array(vals, self.indepvartype) elif isinstance(vals, ndarray): # call 'array' constructor to ensure copy is made in case # either array is independently changed. if rank(vals) == 0: self.indepvararray = array(ravel(vals)) else: self.indepvararray = array(vals) try: self.indepvartype = _num_equivtype[type(self.indepvararray[0])] except KeyError: raise TypeError('Independent variable type ' '%s not valid'%type(self.indepvararray[0])) else: raise TypeError("Invalid type for independent variable " "array: "+str(type(vals))) else: # non-parameterized case self.indepvarname = None self.indepvartype = None self.indepvararray = None self._parameterized = False if self.indepvarname: # do validation checks assert isinstance(self.indepvarname, str), \ 'independent variable name must be a string' try: self.indepvartype = _num_equivtype[type(self.indepvararray[0])] except KeyError: raise TypeError('Independent variable type ' '%s not valid'%self.indepvararray.dtype) r=rank(self.indepvararray) if r == 1: pass elif r == 0: self.indepvararray = ravel(self.indepvararray) else: raise ValueError("Invalid rank for " "independent variable array %i"%r) # if user gave independent variable array in reverse order, # then we'll reverse this and the coord arrays and the labels # at the end of initialization do_reverse = not isincreasing(self.indepvararray) self._parameterized = True # Deal with coordinate data if 'coorddict' in kw: coorddict = {} try: ct = kw['coordtype'] except KeyError: self.coordtype = float64 else: try: self.coordtype = _num_equivtype[ct] except KeyError: raise TypeError('Coordinate type %s not valid for Point'%str(ct)) for c, v in kw['coorddict'].items(): if isinstance(c, str): c_key = c else: c_key = repr(c) if isinstance(v, list): coorddict[c_key] = array(v, self.coordtype) elif isinstance(v, ndarray): # call 'array' constructor on array to ensure it is a copy # if either array is independently changed. coorddict[c_key] = array(v, self.coordtype) elif isinstance(v, Pointset): coorddict[c_key] = v.toarray() else: try: assert self.coordtype == _num_equivtype[type(v)] except (AssertionError, KeyError): raise TypeError("Must pass arrays, lists, or numeric types") else: coorddict[c_key] = array([v], self.coordtype) self.coordnames = list(coorddict) # only way to order dictionary keys for array is to sort self.coordnames.sort() self.dimension = len(self.coordnames) datalist = [] # loop over coordnames to ensure correct ordering of coordarray if self._parameterized: my_len = len(self.indepvararray) else: my_len = len(coorddict[self.coordnames[0]]) for c in self.coordnames: xs = coorddict[c] if my_len != len(xs): if self._parameterized: raise ValueError('Independent variable array length must match ' 'that of each coordinate array') else: raise ValueError('All coordinate arrays must have same length') datalist.append(xs) self.coordarray = array(datalist, self.coordtype) r = rank(self.coordarray) if r == 2: pass elif r == 1: self.coordarray = array([self.coordarray], self.coordtype) elif r == 0: self.coordarray = array([ravel(self.coordarray)], self.coordtype) else: raise ValueError("Invalid rank for coordinate array: %i"%r) assert self.dimension == self.coordarray.shape[0], "Invalid coord array" elif 'coordarray' in kw: if not isinstance(kw['coordarray'], _seq_types): raise TypeError('Coordinate type %s not valid for Pointset'%str(type(kw['coordarray']))) try: ct = kw['coordtype'] except KeyError: self.coordtype = float64 else: try: self.coordtype = _num_equivtype[ct] except KeyError: raise TypeError('Coordinate type %s not valid'%str(ct)) # calling 'array' constructor creates a copy if original or new # array is altered array_temp = array(kw['coordarray'], self.coordtype) r = rank(array_temp) if r == 2: self.coordarray = array_temp elif r == 1: self.coordarray = array([kw['coordarray']], self.coordtype) elif r == 0: self.coordarray = array([ravel(array_temp)], self.coordtype) else: raise ValueError("Invalid rank for coordinate array %i"%r) self.dimension = self.coordarray.shape[0] if 'coordnames' in kw: if isinstance(kw['coordnames'], str): coordnames = [kw['coordnames']] else: coordnames = kw['coordnames'] else: coordnames = [str(cix) for cix in range(self.dimension)] if len(coordnames) != self.dimension: print("Pointset initialization error:") print("Found Coordnames: %s (dimension = %s)"% (coordnames, len(coordnames))) print("vs. data dimension = %s"%self.dimension) raise ValueError("Mismatch between number of coordnames and " "dimension of data") self.coordnames = coordnames self.coordtype = _num_equivtype[type(self.coordarray[0][0])] else: raise ValueError("Missing coord info in keywords") assert isUniqueSeq(self.coordnames), 'Coordinate names must be unique' self.makeIxMaps() if self._parameterized: assert self.indepvarname not in self.coordnames, \ "Independent variable name appeared in coordinate names" # if len(self.coordarray.shape) > 1: assert self.coordarray.shape[1] == len(self.indepvararray), \ ("Coord array length mismatch with independent variable" " array length") #else: # assert self.coordarray.shape[0] == len(self.indepvararray) # process choice of indep var tolerance if 'checklevel' in kw: checklevel = kw['checklevel'] if checklevel in [0,1]: self.checklevel = checklevel else: raise ValueError("Invalid check level") else: # default to use tolerance in indep val resolution self.checklevel = 1 if 'tolerance' in kw: tol = kw['tolerance'] if tol > 0: self._abseps = tol else: raise ValueError("Tolerance must be a positive real number") else: self._abseps = 1e-10 if 'name' in kw: if isinstance(kw['name'], str): self.name = kw['name'] else: raise TypeError("name argument must be a string") else: self.name = "" if 'norm' in kw: if kw['norm'] == 0: raise ValueError("Norm order for point cannot be zero") self._normord = kw['norm'] else: self._normord = 2 if 'labels' in kw: try: self.labels = PointInfo(kw['labels'].by_index) except AttributeError: self.labels = PointInfo(kw['labels']) else: self.labels = PointInfo() if self._parameterized: if do_reverse: # finish the operation of reversing the reverse-order # input arrays self.indepvararray = self.indepvararray[::-1] self.reverse() if not isincreasing(self.indepvararray): raise ValueError("Independent variable values must be in " "increasing order") def __delitem__(self, k): """Remove point by index or by coordinate.""" if k in self.coordnames: cs = remain(self.coordnames, k) p_result = copy(self[cs]) self.coordnames = cs self.coordarray = p_result.coordarray self.labels = p_result.labels self.indepvararray = p_result.indepvararray self.makeIxMaps() else: # assume integer self.remove(k) def remove(self, ix): """Remove individual Point by its index.""" if ix == 0: try: p_result = copy(self[1:]) except ValueError: # slice index out of range => only 1 point left! raise ValueError("Cannot remove only point in pointset!") else: ix = ix % len(self) p_result = copy(self[:ix]) try: p_result.append(self[ix+1:]) except ValueError: # ix was at end, so nothing left to append pass self.coordarray = p_result.coordarray self.labels = p_result.labels self.indepvararray = p_result.indepvararray self.makeIxMaps() def reverse(self): """Reverse order of points *IN PLACE*.""" self.coordarray = self.coordarray[:,::-1] self.labels.mapIndices(dict(zip(range(0,len(self)),range(len(self)-1,-1,-1)))) def rename(self, coord, newcoord): """Rename a coordinate.""" try: ix = self.coordnames.index(coord) except ValueError: raise ValueError("No such coordinate: %s"%coord) self.coordnames[ix] = newcoord self.makeIxMaps() def makeIxMaps(self): self._name_ix_map = dict(zip(self.coordnames, range(self.dimension))) self._ix_name_map = copy(self.coordnames) if self._parameterized: self._indepvar_ix_map = makeArrayIxMap(self.indepvararray) else: self._indepvar_ix_map = None def addlabel(self, ix, label, info=None): """Add string label to indexed point. info dictionary is optional""" if ix in range(len(self)): self.labels.update(ix, label, info) else: raise ValueError("Index out of range") def removelabel(self, ix): """Remove all labels at indexed point.""" del self.labels[ix] def bylabel(self, s): """Return pointset containing points labelled with the supplied labels. Argument s can be a string or a list of strings.""" if isinstance(s, str): if s == '': raise ValueError("Label must be non-empty") else: ixlist = sortedDictKeys(self.labels[s]) if ixlist != []: return self[ixlist] else: return None elif isinstance(s, list): ixlist = [] for ss in s: if isinstance(ss, str): if ss == '': raise ValueError("Label must be non-empty") ixlist = sortedDictKeys(self.labels[ss]) else: raise TypeError("Invalid label type") if ixlist != []: return self[ixlist] else: return None else: raise TypeError("Invalid label type") def __setitem__(self, ix, p): """Change individual points, accessed by index (no slicing supported). Individual coordinate values of a point can be changed by adding a cross-reference coordinate name or index. If ix is a variable name then the entire row can be changed (again, no slicing supported).""" if isinstance(ix, _int_types): if isinstance(p, Point): if compareNumTypes(self.coordtype, int32) and \ compareNumTypes(p.coordtype, float64): raise ValueError("Cannot update integer pointset with a float") self.coordarray[:,ix] = p.toarray() if len(p.labels) > 0: self.labels.update({ix: p.labels}) elif isinstance(p, dict): vlist = [] for k in self.coordnames: vlist.append(p[k]) self.coordarray[:,ix] = array(vlist, self.coordtype) elif isinstance(p, _seq_types): self.coordarray[:,ix] = array(p, self.coordtype) else: raise TypeError("Invalid index reference") elif isinstance(ix, tuple) and len(ix) == 2: # note that index order must be reversed try: c = self._name_ix_map[ix[1]] except KeyError: c = ix[1] if isinstance(p, _int_types): self.coordarray[c,ix[0]] = p elif isinstance(p, _float_types): if self.coordtype == float64: self.coordarray[c,ix[0]] = p else: raise TypeError("Cannot update an integer pointset with a float") elif isinstance(p, ndarray) and p.shape==(1,): self.coordarray[c,ix[0]] = p[0] elif isinstance(p, list) and len(list) == 1: self.coordarray[c,ix[0]] = p[0] elif isinstance(p, Point) and p.dimension == 1: self.coordarray[c,ix[0]] = p[0] if len(p.labels) > 0: self.labels.update({ix: p.labels}) else: raise TypeError("New value is not a singleton numeric type") elif isinstance(ix, str): if ix == self.indepvarname: if isinstance(p, Pointset): if compareNumTypes(self.indepvartype, int32) and \ compareNumTypes(p.indepvartype, float64): raise ValueError("Cannot update integer independent variable with a float") if len(self) == len(p): self.indepvararray = p.toarray() else: raise ValueError("Size mismatch for new independent variable array") # labels ignored elif isinstance(p, dict): if len(self) == len(p[c]): self.indepvararray = array(p[c], self.indepvartype) else: raise ValueError("Size mismatch for new independent variable array") elif isinstance(p, _seq_types): if len(self) == len(p): self.indepvararray = array(p, self.indepvartype) else: raise ValueError("Size mismatch for new independent variable array") else: raise TypeError("Invalid data") elif ix in self.coordnames: c = self._name_ix_map[ix] if isinstance(p, Pointset): if compareNumTypes(self.coordtype, int32) and \ compareNumTypes(p.coordtype, float64): raise ValueError("Cannot update integer pointset with a float") self.coordarray[c,:] = p.toarray() # labels ignored elif isinstance(p, dict): self.coordarray[c,:] = array(p[c], self.coordtype) elif isinstance(p, _seq_types): self.coordarray[c,:] = array(p, self.coordtype) elif isinstance(p, _real_types): self.coordarray[c,:] = float(p) else: raise TypeError("Invalid data") else: raise TypeError("Invalid variable reference") else: raise TypeError("Invalid Pointset reference") def __getitem__(self, ix): # select points if isinstance(ix, _int_types): # The labels (PointInfo) object doesn't understand -ve indices, # but don't take modulo length otherwise iteration will break if ix < 0: ix = ix + self.coordarray.shape[1] if ix in self.labels: label = self.labels[ix] else: label = {} return Point({'coordarray': self.coordarray[:,ix], 'coordnames': self.coordnames, 'norm': self._normord, 'labels': label}) elif isinstance(ix, tuple): if len(ix) != 2: raise ValueError("Only use 2-tuples in referencing pointset") ref1 = ix[0] ref2 = ix[1] elif isinstance(ix, str): # reference by coord name if self._parameterized: if ix == self.indepvarname: return self.indepvararray else: return self.coordarray[self._map_names_to_ixs(ix),:] else: return self.coordarray[self._map_names_to_ixs(ix),:] elif isinstance(ix, list): if all([x in self.coordnames for x in ix]): ref1 = slice(len(self)) ref2 = ix else: ref1 = ix ref2 = None elif isinstance(ix, (ndarray, slice)): ref1 = ix ref2 = None else: raise IndexError("Illegal index %s"%str(ix)) if isinstance(ref1, (list, ndarray, _int_types)): if isinstance(ref1, _int_types): ref1 = [ref1] try: ca = take(self.coordarray, ref1, axis=1) except ValueError: raise ValueError("Invalid variable names given: "%(str(ref1))) try: ci = take(self.indepvararray, ref1, axis=0) except (IndexError, AttributeError, ValueError): # non-parameterized pointset pass cl = self.labels[ref1] cl_ixs = cl.getIndices() ixmap = invertMap(ref1) new_cl_ixs = [ixmap[i] for i in cl_ixs] elif isinstance(ref1, slice): s1, s2, s3 = ref1.indices(self.coordarray.shape[1]) if (s3 > 0 and s1 >= len(self)) or (s3 < 0 and s2 >= len(self)): raise ValueError("Slice index out of range") ca = take(self.coordarray, range(s1, s2, s3), axis=1) try: ci = take(self.indepvararray, range(s1, s2, s3),axis=0) except (IndexError, AttributeError, ValueError): # non-parameterized pointset pass cl = self.labels[ref1] cl_ixs = cl.getIndices() lowest_ix = s1 if s3 < 0: new_cl_ixs = [lowest_ix-i for i in cl_ixs] else: new_cl_ixs = [i-lowest_ix for i in cl_ixs] else: print("ref1 argument = %s"%ref1) raise TypeError("Type %s is invalid for Pointset indexing"%str(type(ref1))) ixlist = self._force_coords_to_ixlist(ref2) ca = take(ca, ixlist, axis=0) try: cl.mapIndices(dict(zip(cl_ixs, new_cl_ixs))) except AttributeError: pass if self._parameterized: return Pointset({'coordarray': ca, 'coordnames': [self.coordnames[i] for i in ixlist], 'indepvararray': ci, 'indepvarname': self.indepvarname, 'norm': self._normord, 'labels': cl}) else: return Pointset({'coordarray': ca, 'coordnames': [self.coordnames[i] for i in ixlist], 'norm': self._normord, 'labels': cl}) def _resolve_indepvar(self, p): if self.checklevel == 0: return self._indepvar_ix_map[p] else: try: return self._indepvar_ix_map[p] except: ixs = self.findIndex(p) lval = self.indepvararray[ixs[0]] rval = self.indepvararray[ixs[1]] if p - lval < self._abseps: return ixs[0] elif rval - p <= self._abseps: return ixs[1] else: lerr = p - lval rerr = rval - p raise KeyError( \ "%f not found in (%f, %f) @tol=%.16f: mismatches=(%.16f, %.16f)"%(p,lval,rval,self._abseps,lerr,rerr)) def setTol(self, tol): if tol > 0: self._abseps = tol else: raise ValueError("tolerance must be a positive real number") def __call__(self, p, coords=None): if not self._parameterized: raise TypeError("Cannot call a non-parameterized Pointset") if isinstance(p, _seq_types): # assume p is an all-numeric list, so it should be treated as # an independent variable. try: ix = [self._resolve_indepvar(i) for i in p] except KeyError: raise ValueError("Independent variable value not valid: %s"%str(p)) else: # assume p is an integer or float, appropriate to independent var try: ix = self._resolve_indepvar(p) except KeyError: raise ValueError("Independent variable value not valid: " \ + str(p)) if coords is None: if isinstance(ix, _int_types): label = self.labels[ix] try: label.mapIndices({ix: 0}) except AttributeError: # empty pass return Point({'coordarray': self.coordarray[:,ix], 'coordnames': self.coordnames, 'norm': self._normord, 'labels': label}) else: labels = self.labels[ix] cl_ixs = labels.getIndices() ixmap = invertMap(ix) new_cl_ixs = [ixmap[i] for i in cl_ixs] if isinstance(ix, slice): idx = ix.indices(self.coordarray.shape[1]) lowest_ix = idx[0] if idx[2] < 0: new_cl_ixs = [lowest_ix-i for i in cl_ixs] else: new_cl_ixs = [i-lowest_ix for i in cl_ixs] elif isinstance(ix, (list, ndarray)): new_cl_ixs = [ixmap[i] for i in cl_ixs] try: labels.mapIndices(dict(zip(cl_ixs, new_cl_ixs))) except AttributeError: # empty pass return Pointset({'coordarray': take(self.coordarray, ix, axis=1), 'coordnames': self.coordnames, 'indepvarname': self.indepvarname, 'indepvararray': take(self.indepvararray, ix, axis=0), 'norm': self._normord, 'labels': labels}) else: clist = self._force_coords_to_ixlist(coords) if isinstance(ix, _int_types): label = self.labels[ix] try: label.mapIndices({ix: 0}) except AttributeError: # empty pass return Point({'coordarray': take(self.coordarray[:, ix],clist), 'coordnames': [self.coordnames[i] for i in clist], 'norm': self._normord, 'labels': label}) else: labels = self.labels[ix] try: labels.mapIndices(dict(zip(labels, [i-ix[0] for i in labels.getIndices()]))) except AttributeError: # empty pass return Pointset({'coordarray': take(take(self.coordarray,clist, axis=0), ix, axis=1), 'coordnames': [self.coordnames[i] for i in clist], 'indepvarname': self.indepvarname, 'indepvararray': take(self.indepvararray, ix, axis=0), 'norm': self._normord, 'labels': labels}) def __len__(self): return self.coordarray.shape[1] def __contains__(self, other): for i in range(len(self)): if comparePointCoords(self.__getitem__(i), other): return True return False def __lt__(self, other): if isinstance(other, Pointset): if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] < other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p < other for p in self], bool8) else: try: return self.coordarray < other except: raise TypeError("Invalid type for comparison with Pointset") def __gt__(self, other): if isinstance(other, Pointset): if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] > other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p > other for p in self], bool8) else: try: return self.coordarray > other except: raise TypeError("Invalid type for comparison with Pointset") def __le__(self, other): if isinstance(other, Pointset): if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] <= other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p <= other for p in self], bool8) else: try: return self.coordarray <= other except: raise TypeError("Invalid type for comparison with Pointset") def __ge__(self, other): if isinstance(other, Pointset): if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] >= other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p >= other for p in self], bool8) else: try: return self.coordarray >= other except: raise TypeError("Invalid type for comparison with Pointset") def __eq__(self, other): if isinstance(other, Pointset): if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] == other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p == other for p in self], bool8) else: try: return self.coordarray == other except: raise TypeError("Invalid type for comparison with Pointset") def __ne__(self, other): if isinstance(other, Pointset): if len(self) == 0 or len(other) == 0: return True if not all(self.indepvararray == other.indepvararray): raise ValueError("Independent variable arrays are not the same") return array([self[i] != other[i] for i in range(len(self))], bool8) elif isinstance(other, Point): return array([p != other for p in self], bool8) else: try: return self.coordarray != other except: raise TypeError("Invalid type for comparison with Pointset") def insert(self, parg, ix=None): """Insert individual Point or Pointset before the given index. If ix is not given then the source and target Pointsets must be parameterized. In this case the Point or Pointset will be inserted according to the ordering of independent variable values.""" p=copy(parg) if ix is None: if self._parameterized: if isinstance(p, Point) and self.indepvarname in p.coordnames: t = p[self.indepvarname] tix = self.findIndex(t) if isinstance(tix, tuple): self.insert(p, tix[1]) else: # tix was an integer, meaning that t is # already present in Pointset raise ValueError("Point at independent variable " "value %f already present"%t) elif isinstance(p, Pointset) and p._parameterized and \ p.indepvarname == self.indepvarname: # Don't do a straight self.insert call in case the # new indep var values need to be interleaved with # the present ones. # # convert self.indepvararray and self.coordarray into lists (by self.todict()) iva = self.indepvararray.tolist() vd = self.todict(aslist=True) # get list of findIndex results for each of p indepvar vals # add i for each one because each previous one will have been inserted, # increasing the length of self. if len(intersect(self._ix_name_map, p._ix_name_map)) != self.dimension: raise ValueError("Dimension mismatch with inserted Pointset") iva_p = p.indepvararray lenp = len(p) vd_p = p.todict() try: s_ixs = [self.findIndex(iva_p[i])[1]+i for i in range(lenp)] except TypeError: raise ValueError("Independent variable " "values in Pointset already present") p_label_ixs = p.labels.getIndices() s_label_ixs = self.labels.getIndices() sLabelMap = {} pLabelMap = {} for i in range(lenp): s_ix = s_ixs[i] if i in p_label_ixs: pLabelMap[i] = s_ix for s_label_ix in s_label_ixs: if s_label_ix >= s_ix-i: sLabelMap[s_label_ix] = s_label_ix+i+1 # for each one, list-insert new point data for p_ix in range(lenp): s_ix = s_ixs[p_ix] iva.insert(s_ix, iva_p[p_ix]) for k in self._ix_name_map: vd[k].insert(s_ix, vd_p[k][p_ix]) # restore self's arrays self.indepvararray = array(iva) datalist = [] for c in p._ix_name_map: datalist.append(vd[c]) self.coordarray = array(datalist, self.coordtype) # update labels self.labels.mapIndices(sLabelMap) p_labels = copy(p.labels) p_labels.mapIndices(pLabelMap) self.labels.update(p_labels) else: raise TypeError("Inserted Point/Pointset must be " "parameterized and share same independent" "parameter name") else: raise TypeError("Source Pointset must be parameterized") else: if ix > 0: p_result = copy(self[:ix]) p_result.append(p) else: p_result = pointsToPointset(p, self.indepvarname) try: p_result.append(self[ix:]) except ValueError: # ix > greatest index, so no points left to add # (i.e., p was appended to end) pass self.coordarray = p_result.coordarray self.labels = p_result.labels self.indepvararray = p_result.indepvararray self.makeIxMaps() def append(self, parg, t=None, skipMatchingIndepvar=False): """Append individual Point, Pointset or coordinates in place. skipMatchingIndepvar option causes a matching independent variable value at the beginning of p to be skipped (only meaningful for appending parameterized Pointsets). This option is mainly for internal use.""" # test isinstance for Pointset first because it is a sub-class of Point # and so isinstance(p, Point) will also catch Pointsets! p = copy(parg) if isinstance(p, Pointset): assert p._parameterized == self._parameterized, "Parameterization mismatch" # check p dimension and coordnames and type if compareNumTypes(self.coordtype, int32) and \ compareNumTypes(p.coordtype, float64): raise TypeError("Cannot add float64 pointset to an int32 Pointset") pdim = p.dimension if self._parameterized: if t is None: if self.indepvarname in p.coordnames: t = p[self.indepvarname] pdim = pdim - 1 elif self.indepvarname == p.indepvarname: t = p.indepvararray else: raise ValueError("Independent variable missing from Pointset") if t[0] == self.indepvararray[-1] and skipMatchingIndepvar: tval = t[1:] start_ix = 1 else: tval = t start_ix = 0 if len(tval) > 0 and tval[0] <= self.indepvararray[-1]: print("%s <= %s"%(tval[0],self.indepvararray[-1])) raise ValueError("Independent variable value too small to add pointset") added_len = len(tval) else: if t[0] == self.indepvararray[-1] and skipMatchingIndepvar: tval = t[1:] start_ix = 1 else: tval = t[:] # ensures tval is an array (t might be a Pointset) start_ix = 0 if len(tval) > 0 and tval[0] <= self.indepvararray[-1]: raise ValueError("Independent variable value too small to add pointset") added_len = len(tval) else: if t is not None: raise TypeError("t argument cannot be used for non-parameterized pointsets") added_len = p.coordarray.shape[1] start_ix = 0 assert pdim == self.dimension, "Dimension mismatch with Pointset" if pdim < p.dimension: pcoords = copy(p.coordnames) pcoords.remove(p.indepvarname) else: pcoords = p.coordnames if remain(pcoords, self.coordnames) != []: raise ValueError("Coordinate name mismatch with Pointset") old_len = self.coordarray.shape[1] new_len = old_len + added_len old_coords = self.coordarray self.coordarray = zeros((self.dimension, new_len), _num_equivtype[type(self.coordarray[0][0])]) if self._parameterized: old_indepvars = self.indepvararray self.indepvararray = zeros((new_len,), _num_equivtype[type(old_indepvars[0])]) self.indepvararray[:old_len] = old_indepvars tvals = tval[:added_len] self.indepvararray[old_len:] = tvals for tix in range(old_len): self.coordarray[:, tix] = old_coords[:, tix] pdict = p.todict() for ix in range(self.dimension): self.coordarray[ix][old_len:] = pdict[ self._ix_name_map[ix]][start_ix:] p_labels = copy(p.labels) pixs = p.labels.getIndices() p_labels.mapIndices(dict(zip(pixs, [i+old_len for i in pixs]))) self.labels.update(p_labels) elif isinstance(p, Point): # check p dimension and coordnames and type if compareNumTypes(self.coordtype, int32) and \ compareNumTypes(p.coordtype, float64): raise TypeError("Cannot add float64 Point to an int32 Pointset") pdim = p.dimension if self._parameterized: if t is None: if self.indepvarname not in p.coordnames: raise ValueError("Independent variable missing from Point") else: tval = p[self.indepvarname] if tval <= self.indepvararray[-1]: raise ValueError("Independent variable value too small to add Point") pdim = pdim - 1 else: if t <= self.indepvararray[-1]: raise ValueError("Independent variable value too small to add Point") tval = t elif t is not None: raise TypeError("t argument cannot be used for non-parameterized Pointsets") assert pdim == self.dimension, "Dimension mismatch with Point" if pdim < p.dimension: pcoords = copy(p.coordnames) if self._parameterized: pcoords.remove(self.indepvarname) else: pcoords = p.coordnames if remain(pcoords, self.coordnames) != []: raise ValueError("Coordinate name mismatch with Point") new_len = self.coordarray.shape[1]+1 old_coords = self.coordarray self.coordarray = zeros((self.dimension, new_len), _num_equivtype[type(self.coordarray[0][0])]) if self._parameterized: old_indepvars = self.indepvararray self.indepvararray = zeros((new_len,), _num_equivtype[type(self.indepvararray[0])]) self.indepvararray[:new_len-1] = old_indepvars self.indepvararray[new_len-1] = tval for tix in range(new_len-1): self.coordarray[:, tix] = old_coords[:, tix] for ix in range(self.dimension): self.coordarray[ix,new_len-1] = p(self._ix_name_map[ix]) if len(p.labels) > 0: self.labels.update({new_len-1: p.labels}) elif isinstance(p,str) or isinstance(p,list): if isinstance(p,str): p = [p] c = self.coordarray l = len(p) if hasattr(N,'resize'): self.coordarray = N.resize(self.coordarray, (c.shape[0]+l,c.shape[1])) self.coordarray[self.dimension:,:] = 0 else: for i in range(l): c.append(array([0]*len(c[0]))) self.coordnames.extend(p) self.dimension = self.dimension + l else: raise TypeError("append requires Point, Pointset or (list of) string argument") self.makeIxMaps() extend = append # for intuitive compatibility! def toarray(self): if self.dimension==1: return self.coordarray[0] else: return self.coordarray def todict(self, aslist=False): """Convert Pointset to a dictionary of arrays (or of lists with aslist=True).""" if aslist: d = dict(zip(self._ix_name_map, self.coordarray.tolist())) else: d = dict(zip(self._ix_name_map, self.coordarray)) if self._parameterized: d[self.indepvarname] = self.indepvararray return d def _infostr(self, verbose=0): if self.name == '': outputStr = "Pointset " else: outputStr = "Pointset " + self.name if self._parameterized: outputStr += " (parameterized)" else: outputStr += " (non-parameterized)" if verbose > 0: precision = 8 lenv = len(self) if lenv > 8: ixslo = range(0,2) ixshi = range(lenv-2,lenv) outputStr += "\n" if self._parameterized: iv = self.indepvararray if not isinstance(iv, ndarray): iv = array(iv, self.indepvartype) # permits slicing (lists don't) if lenv > 8: alo = array2string(take(iv,ixslo),precision=precision) ahi = array2string(take(iv,ixshi),precision=precision) ivstr = alo[:-1] + ", ..., " + ahi[1:] else: ivstr = array2string(iv,precision=precision) outputStr += "Independent variable:\n" outputStr += self.indepvarname + ': '+ivstr+"\n" outputStr += "Coordinates:\n" for c in self.coordnames: v = self.coordarray[self._map_names_to_ixs(c)] if not isinstance(v, ndarray): # only alternative is a singleton numeric value (not a list) v = array([v], self.coordtype) if lenv > 8: alo = array2string(take(v,ixslo),precision=precision) ahi = array2string(take(v,ixshi),precision=precision) dvstr = alo[:-1] + ", ..., " + ahi[1:] else: dvstr = array2string(v, precision=precision) outputStr += c+': '+dvstr if c != self.coordnames[-1]: outputStr += "\n" outputStr += "\nLabels by index: " + self.labels._infostr(17) return outputStr def __repr__(self): return self._infostr(verbose=1) def __str__(self): return self._infostr(verbose=0) def info(self, verboselevel=1): print(self._infostr(verboselevel)) def __copy__(self): if self._parameterized: return Pointset({'coordarray': copy(self.coordarray), 'coordnames': copy(self.coordnames), 'indepvarname': copy(self.indepvarname), 'indepvararray': copy(self.indepvararray), 'norm': self._normord, 'labels': copy(self.labels) }) else: return Pointset({'coordarray': copy(self.coordarray), 'coordnames': copy(self.coordnames), 'norm': self._normord, 'labels': copy(self.labels)}) copy = __copy__ def __getstate__(self): d = copy(self.__dict__) # remove reference to Cfunc types by converting them to strings if not numpyimported: importnumpy() _num_type2name = {float64: 'float', int32: 'int', type(1.0): 'float', type(1): 'int'} try: d['indepvartype'] = _num_type2name[self.indepvartype] except KeyError: # non-parameterized Pointset pass d['coordtype'] = _num_type2name[self.coordtype] return d def __setstate__(self, state): if not numpyimported: importnumpy() _num_name2type = {'float': float64, 'int': int32} self.__dict__.update(state) # reinstate Cfunc types try: self.indepvartype = _num_name2type[self.indepvartype] except KeyError: # non-parameterized Pointset pass self.coordtype = _num_name2type[self.coordtype] def _match_indepvararray(self, other): """Verifies the matching of independent variable arrays in two pointsets. Does nothing if either object is not a parameterized pointset.""" try: if other._parameterized and self._parameterized: if not all(self.indepvararray == other.indepvararray): print(self.indepvararray) print(other.indepvararray) raise ValueError("Mismatched independent variable arrays") except AttributeError: pass def __add__(self, other): self._match_indepvararray(other) return Point.__add__(self, other) def __radd__(self, other): self._match_indepvararray(other) return Point.__radd__(self, other) def __sub__(self, other): self._match_indepvararray(other) return Point.__sub__(self, other) def __rsub__(self, other): self._match_indepvararray(other) return Point.__rsub__(self, other) def __mul__(self, other): self._match_indepvararray(other) return Point.__mul__(self, other) def __rmul__(self, other): self._match_indepvararray(other) return Point.__rmul__(self, other) def __div__(self, other): self._match_indepvararray(other) return Point.__div__(self, other) def __rdiv__(self, other): self._match_indepvararray(other) return Point.__rdiv__(self, other) def find(self, indepval, end=None): """find returns an integer index for where to place a point having independent variable value in the Pointset, if already exists. Otherwise, a pair indicating the nearest independent variable values present in the Pointset is returned. To ensure an integer is always returned, choose a left or right side to choose from the pair, using end=0 or 1 respectively.""" if not self._parameterized: raise TypeError("Cannot find index from independent variable for " "a non-parameterized Pointset") try: ix = self.indepvararray.tolist().index(indepval) result = ix except ValueError: cond = less(self.indepvararray, indepval).tolist() try: ix = cond.index(0) result = (ix-1, ix) except ValueError: result = (len(self.indepvararray)-1, len(self.indepvararray)) if end is not None: result = result[end] return result # deprecated findIndex = find # ---------------------------------------------------------------------------- class PointInfo(object): """Structure for storing individual point labels and information dictionaries within a Pointset object. This class will not know the size of the Pointset it is associated with, so index upper limits will not be checked in advance. Do not use a PointInfo object as an iterator, as it is 'infinite' in size! (It uses DefaultDicts as its internal storage, which return {} for undefined labels.)""" def __init__(self, ptlabels=None): if ptlabels is None: self.by_label = DefaultDict({}) self.by_index = DefaultDict({}) elif isinstance(ptlabels, PointInfo): self.by_label = ptlabels.by_label self.by_index = ptlabels.by_index elif isinstance(ptlabels, dict): # always expect the dictionary to be based on index self.by_label = DefaultDict({}) self.by_index = DefaultDict({}) for k, v in ptlabels.items(): if not isinstance(k, _int_types): raise TypeError("Initialization dictionary must be keyed " "by integer indices") if isinstance(v, str): self.by_label[v][k] = {} self.by_index[k][v] = {} else: for label, infodict in v.items(): self.by_label[label][k] = infodict self.by_index[k][label] = infodict else: raise TypeError("Invalid labels at initialization of PointInfo") def mapIndices(self, ixMapDict): by_index = {} ixMap = symbolMapClass(ixMapDict) for ix, rest in self.by_index.items(): by_index[ixMap(ix)] = rest self.__init__(by_index) def mapNames(self, themap): """Map labels, using a symbol map of class symbolMapClass.""" self.by_label = mapNames(themap, self.by_label) new_by_index = {} for ix, labdict in self.by_index.items(): new_by_index[ix] = mapNames(themap, labdict) self.by_index = new_by_index def sortByIndex(self): ixkeys = sortedDictKeys(self.by_index) return zip(ixkeys,[self.by_index[ix] for ix in ixkeys]) def sortByLabel(self): labelkeys = sortedDictKeys(self.by_label) return zip(labelkeys,[self.by_label[label] for label in labelkeys]) def getIndices(self): return sortedDictKeys(self.by_index) def getLabels(self): return sortedDictKeys(self.by_label) def __contains__(self, key): return key in self.by_index or key in self.by_label def __getitem__(self, key): # indices already are enforced to be integers, and labels strings, # so this is a safe way to search! # Note: if don't use if-then test then DefaultDict will # create an empty entry for the failed key when .values() is called! if isinstance(key, tuple): raise TypeError("Can only reference PointInfo with a single key") else: if isinstance(key, (slice, list, ndarray)): if isinstance(key, slice): self_ixs = self.getIndices() if len(self_ixs) == 0: max_ixs = 0 else: max_ixs = max(self_ixs) try: s1, s2, s3 = key.indices(max_ixs+1) ixs = range(s1, s2, s3) key = intersect(ixs, self_ixs) except TypeError: key = self_ixs else: if all([isinstance(k, str) for k in key]): keylabels = intersect(key, self.getLabels()) key = [] for l in keylabels: key.extend(self.by_label[l].keys()) elif all([isinstance(k, _int_types) for k in key]): key = intersect(key, self.getIndices()) else: raise TypeError("Invalid key type for PointInfo") return PointInfo(dict(zip(key,[self.by_index[i] for i in key]))) elif key in self.by_index: return self.by_index[key] elif key in self.by_label: return self.by_label[key] else: return {} def __setitem__(self, key1, the_rest): if isinstance(the_rest, tuple) and len(the_rest) == 2: if isinstance(the_rest[0], str): label = the_rest[0] ix = None elif isinstance(the_rest[0], _int_types): ix = the_rest[0] label = None else: raise TypeError("String expected for label") if isinstance(the_rest[1], dict): info = copy(the_rest[1]) else: raise TypeError("Dictionary expected for info") elif isinstance(the_rest, str): label = the_rest ix = None info = {} elif isinstance(the_rest, _int_types): ix = the_rest label = None info = {} elif isinstance(the_rest, list): self.__setitem__(key1, the_rest[0]) for item in the_rest[1:]: if isinstance(item, tuple) and len(item) == 2: self.update(key1, item[0], item[1]) else: self.update(key1, item) return else: raise TypeError("Invalid item to set in PointInfo") if isinstance(key1, _int_types): if label is None: raise TypeError("Label expected") ix = key1 elif isinstance(key1, str): if ix is None: raise TypeError("Index expected") label = key1 if ix < 0: raise IndexError("Index must be non-negative") self.by_label[label].update({ix: info}) self.by_index[ix].update({label: info}) def __len__(self): return len(self.by_index) def remove(self, key1, *key2): """remove one or more items, keyed either by index or label.""" byix = key1 in self.by_index if key2 == (): # remove all labels associated with index, or vice versa if byix: key2 = self.by_index[key1].keys() else: key2 = self.by_label[key1].keys() if byix: for k in list(key2): # have to check k in dict otherwise DefaultDict creates entry! if k in self.by_label: del self.by_index[key1][k] del self.by_label[k][key1] else: raise KeyError("Label not found") if self.by_label[k] == {}: del self.by_label[k] if self.by_index[key1] == {}: del self.by_index[key1] else: for k in key2: # have to check k in dict otherwise DefaultDict creates entry! if k in self.by_index: del self.by_index[k][key1] del self.by_label[key1][k] else: raise KeyError("Index not found") if self.by_index[k] == {}: del self.by_index[k] if self.by_label[key1] == {}: del self.by_label[key1] def update(self, key1, key2=None, info=None): if isinstance(key1, PointInfo): if key2 is None and info is None: for k, v in key1.by_index.items(): for vk, vv in v.items(): self.update(k, vk, vv) else: raise TypeError("Invalid calling sequence to update") elif isinstance(key1, dict): if key2 is None and info is None: for k, v in key1.items(): if isinstance(k, _int_types) and k >= 0: if isinstance(v, str): k2 = v k3 = {} self.update(k, k2, k3) elif isinstance(v, tuple) and len(v)==2: k2 = v[0] k3 = v[1] self.update(k, k2, k3) elif isinstance(v, dict): for k2, k3 in v.items(): self.update(k, k2, k3) else: raise ValueError("Invalid data for update") else: raise TypeError("Invalid index for label") else: raise TypeError("Invalid calling sequence to update") elif isinstance(key1, _int_types): if info is None: info = {} if key1 in self.by_index: if key2 in self.by_index[key1]: self.by_index[key1][key2].update(info) else: self.__setitem__(key1, (key2, info)) else: self.__setitem__(key1, (key2, info)) elif isinstance(key1, str): if info is None: info = {} if key1 in self.by_label: if key2 in self.by_label[key1]: self.by_label[key1][key2].update(info) else: self.__setitem__(key2, (key1, info)) else: self.__setitem__(key2, (key1, info)) else: raise TypeError("Invalid type for update") def __delitem__(self, key): if key in self.by_index: labels = self.by_index[key].keys() del self.by_index[key] for label in labels: del self.by_label[label][key] if self.by_label[label] == {}: del self.by_label[label] elif key in self.by_label: ixs = self.by_label[key].keys() del self.by_label[key] for ix in ixs: del self.by_index[ix][key] if self.by_index[ix] == {}: del self.by_index[ix] else: raise KeyError("Index or label not found") def __eq__(self, other): try: return all(self.by_index.keys() == other.by_index.keys()) and \ all(self.by_label.keys() == other.by_label.keys()) except AttributeError: raise TypeError("Invalid type for comparison to PointInfo") def __ne__(self, other): return not self.__eq__(other) def _infostr(self, tab=0): lenself = len(self) tabstr = " "*tab basestr = ",\n"+tabstr if lenself > 0: entries = self.sortByIndex() if lenself > 8: return basestr.join([_pretty_print_label(i) for i in entries[0:3]]) + ",\n" +\ (tabstr + " .\n")*3 + tabstr +\ basestr.join([_pretty_print_label(i) for i in entries[-3:]]) else: return basestr.join([_pretty_print_label(i) for i in entries]) else: return "Empty" def __repr__(self): return self._infostr() __str__ = __repr__ def _pretty_print_label(d): """Internal utility to pretty print point label info.""" s = " %s: "%repr(d[0]) entry_keys = d[1].keys() ki = 0 kimax = len(entry_keys) for k in entry_keys: keys = d[1][k].keys() if len(keys) == 0: s += "{%s: {}}"%k else: s += "{%s: {keys=%s}}"%(k,",".join(keys)) if ki < kimax-1: s += ', ' ki += 1 return s # ------------------------------------------------ def comparePointCoords(p1, p2, fussy=False): """Compare two Points, Pointsets, or dictionary of point data, coordinate-wise. If p1 or p2 are Pointsets, their independent variable values, if present, are *not* compared. fussy option causes point norm order and coordinate types to be checked too (requires both arguments to be Points or Pointsets).""" try: p1d = dict(p1) p1dk = p1d.keys() p2d = dict(p2) p2dk = p2d.keys() except: raise TypeError("Invalid Points, Pointsets, or dictionaries passed " "to comparePointCoords") test1 = all([ks[0]==ks[1] for ks in zip(p1dk, p2dk)]) test2 = all([vs[0]==vs[1] for vs in \ zip([p1d[k] for k in p1dk], [p2d[k] for k in p2dk])]) if fussy: try: test3 = p1._normord == p2._normord test4 = compareNumTypes(p1.coordtype, p2.coordtype) return test1 and test2 and test3 and test4 except AttributeError: raise TypeError("Invalid Points, Pointsets, or dictionaries passed " "to comparePointCoords with fussy option") else: return test1 and test2 def isparameterized(p): return p._parameterized def makeNonParameterized(p): if isinstance(p, Pointset) and p._isparameterized: return Pointset({'coordarray': copy(p.coordarray), 'coordnames': copy(p.coordnames), 'norm': p._normord, 'labels': copy(p.labels)}) else: raise TypeError("Must provide a parameterized Pointset") def pointsToPointset(pointlist, indepvarname='', indepvararray=None, indepvartype=float, norm=2): """Generate a Pointset from a list of Point objects (or a singleton Point). Include a name for the independent variable if constructing a parameterized pointset. The independent variable should be a coordinate of the Points passed, otherwise it can be passed as the optional third argument.""" if not isinstance(indepvarname, str): raise TypeError("String expected for independent variable name") if isinstance(pointlist, Point): pointlist = [pointlist] coordnames = [] ptype = '' paramd = indepvarname != "" if not paramd and indepvararray is not None: raise ValueError("Must supply independent variable name for " "parameterized Pointset") if paramd and indepvararray is None: iv = [] i = 0 labels = {} for p in pointlist: assert isinstance(p, Point), \ "pointlist argument must only contain Points" if coordnames == []: ptype = p.coordtype pdim = p.dimension coordnames = p.coordnames xcoordnames = copy(coordnames) if paramd and indepvararray is None: assert indepvarname in coordnames, \ "Independent variable name missing" del xcoordnames[xcoordnames.index(indepvarname)] dv = {}.fromkeys(xcoordnames) for c in xcoordnames: dv[c] = [] if p.labels != {}: labels.update({0: p.labels}) i += 1 else: # coerce ints to float types if mixed if compareNumTypes(ptype, int32): if compareNumTypes(p.coordtype, float64): ptype = float64 elif compareNumTypes(p.coordtype, int32): pass else: raise TypeError("Type mismatch in points") elif compareNumTypes(ptype, float64): if not compareNumTypes(p.coordtype, (float64, int32)): raise TypeError("Type mismatch in points") else: raise TypeError("Type mismatch in points") assert pdim == p.dimension, "Dimension mismatch in points" if remain(coordnames,p.coordnames) != []: raise ValueError("Coordinate name mismatch in points") if p.labels != {}: labels.update({i: p.labels}) i += 1 for c in xcoordnames: dv[c].append(p(c)) if paramd and indepvararray is None: iv.append(p(indepvarname)) # submit data as array to maintain coordname ordering present in Points dim = len(xcoordnames) ca = array([dv[c] for c in xcoordnames], ptype) argDict = {'coordarray': ca, 'coordnames': xcoordnames, 'coordtype': ptype, 'labels': labels, 'norm': norm } if paramd: if indepvararray is None: indepvararray = array(iv, ptype) argDict.update({'indepvarname': indepvarname, 'indepvararray': indepvararray, 'indepvartype': indepvartype}) return Pointset(argDict) def arrayToPointset(a, vnames=None, ia=None, iname=""): """Convert an array to a non-parameterized Pointset. The inclusion of an optional independent variable array creates a parameterized Pointset. Coordinate (and independent variable) names are optional: the defaults are the array indices (and 't' for the independent variable).""" if rank(a) > 2: raise ValueError("Cannot convert arrays of rank > 2") if rank(a) == 0: raise ValueError("Cannot convert arrays of rank 0") if vnames is None: vnames = [str(i) for i in range(shape(a)[0])] else: if len(vnames) != shape(a)[0]: raise ValueError("Mismatch between number of coordinate names and" " number of rows in array.\nCoordinates are " "assumed to be the rows of the array") if ia is None: assert iname=="", ("Independent variable name must be none if no " "independent variable array provided") return Pointset({'coordarray': a, 'coordnames': vnames}) else: if iname == "": iname = "t" return Pointset({'coordarray': a, 'coordnames': vnames, 'indepvararray': ia, 'indepvarname': iname}) # ----------------------------- def test_point(): print("\n****** Point class test ******\n") print("x uses Python float type:") xstr = """x = Point({'coorddict': {'x0': [1.123456789], 'x1': [-0.4], 'x2': [4000]}, 'coordtype': float})""" print(xstr) exec(xstr,globals()) # float is equivalent to float64 print("x => %s"%repr(x)) print("x.toarray() = %s"%x.toarray()) print("\nprint x => %s"%x) print("x.dimension => %s , x.coordnames => %s"%(x.dimension,x.coordnames)) print("x.coordtype => %s"%x.coordtype) print("x.coordtype => %s"%x.coordtype) print("x('x1') = %s"%x('x1')) print("x(['x1','x0']) = %s"%x(['x1','x0'])) print("x([0,1]) = %s"%x([0,1])) print("\nChanging x entries is done by x[index] = value:") print("x[1] = -0.45") x[1] = -0.45 print("\nThe index can also be a name, a list of names, or even a dictionary:") print("x[['x0', 'x1']] = [4.11103, -0.56])") x[['x0', 'x1']] = [4.11103, -0.56] print("\ny is a 1D point (with integer type):") # can also specify as array([4]) ystr = """y = Point({'y': 4})""" print(ystr) exec(ystr,globals()) print("print y => %s"%y) print("y(0) = %s"%y(0)) print("type(y(0)) => %s"%type(y(0))) print("y([0]) = %s"%y([0])) print("y.toarray() = %s"%y.toarray()) assert comparePointCoords(x,(x+0)*1,fussy=True) # pass x back return x def test_pointset(): print("\n\n****** Pointset test ******\n") print("v is a 'singleton' pointset, to make sure this doesn't break the interface") vstr = """v = Pointset({'coorddict': {'x0': 0.2, 'x1': -1.2}, 'indepvardict': {'t': 0.01}, 'coordtype': float64, 'indepvartype': float64 })""" print(vstr) exec(vstr,globals()) print("print v => %s"%v) print("\nprint v(0.01) => %s"%v(0.01)) print("and v(0.01) is a Point object\n") print("print v(0.01, 0) => %s"%v(0.01, 0)) print("and v(0.01, 0) is a float\n") print("print v(0.01, 'x0') => %s"%v(0.01, 'x0')) print("\nk tests deprecated syntax for single-point pointset") kstr = """k = Pointset({'coordarray': array(0.1), 'coordnames': 'k0', 'indepvarname': 't', 'indepvararray': array(0.0)})""" print(kstr) exec(kstr,globals()) assert k.dimension == 1 print("print k.toarray() => %s"%k.toarray()) print("print k['t'] => %s"%k['t']) print("print k(0.0) => %s"%k(0.0)) print("print k => %s"%k) print("\nu tests non-parameterized pointset") ustr = """u = Pointset({'coordarray': array([10., 20., 30., 40.])})""" exec(ustr,globals()) print(ustr) print("u.toarray() => %s"%u.toarray()) print("isparameterized(u) => %s"%isparameterized(u)) print("print u => %s"%u) print("\nw tests alternative declaration syntax, and other forms of calling") wstr = """wp = Pointset({'coordarray': array([[4.456, 2.34634, 7.3431, 5.443], [-10.0336, -5.2235, -3.23221, -0.01], [3e5, 3.1e5, 3.3e5, 2.8e5]], float64), 'coordnames': ['x0', 'x1', 'x2'], 'indepvarname': 't', 'indepvararray': array([0.0, 1.0, 2.0, 3.0], float64)})""" print(wstr) exec(wstr,globals()) assert type(wp.coordarray)==type(array([1,2],float64)) print("wp.dimension => %s"%wp.dimension) print("print wp(0.0) => %s"%wp(0.0)) print("type(wp(0.0)) => %s"%type(wp(0.0))) print("print wp(1.0)(0) => %s"%wp(1.0)(0)) print("print wp(2.0, 'x1') => %s"%wp(2.0, 'x1')) print("\nprint wp(2.0, ['x2', 'x1']) => %s"%wp(2.0, ['x2', 'x1'])) print("type(wp(2.0, ['x1', 'x2'])) => %s"%type(wp(2.0, ['x1', 'x2']))) print("print wp[['x1','x0']] => %s"%wp[['x1','x0']]) import sys sys.stdout.write("\nwp.info(1) => ") wp.info(1) print(None) sys.stdout.write("wp(1.0).info(1) => ") wp(1.0).info(1) print(None) print("wp['t'] => %s"%wp['t']) print("\nCall several 't' values at once (explicit values only -- no ellipses):") print("wp([1., 2.]) => %s"%wp([1., 2.])) print("\nExtract a coordinate (only by name) as a regular array:") w_x0 = wp['x0'] print("w_x0 = wp['x0'] => %s"%w_x0) print("\nExtract a point of w as a regular array:") w_at_1 = wp(1.).toarray() print("w_at_1 = wp(1.).toarray() => %s"%w_at_1) print("\nMany forms to access individual values or sub-arrays:") print("wp(1., 'x1') => %s"%wp(1., 'x1')) print("wp(1.)('x1') => %s"%wp(1.)('x1')) print("wp(1., 1) => %s"%wp(1., 1)) print("wp([1.,3.], 1) => %s"%wp([1.,3.], 1)) print("wp([1.,3.])('x1') => %s"%wp([1.,3.])['x1']) print("wp(1.)([0,1]) => %s"%wp(1.)([0,1])) print("but ... wp([1.])(1., [0,1]) => %s"%wp([1.])(1., [0,1])) print("... because wp([1.]) is a Pointset and wp(1.) is a Point") print("This is why wp(1.).toarray() shows a different array shape to wp([1.]).toarray():") print("wp(1.).toarray().shape => %s"%str(wp(1.).toarray().shape)) print("wp([1.]).toarray().shape => %s"%str(wp([1.]).toarray().shape)) print("\nChange a point in w using wp[indepvar_value] = point:") print("Old value at t=1.0: wp(1.0) => %s"%wp(1.0)) print("wp[1] = x") wp[1] = x print("w has now been updated for the meshpoint at t=1.0 =>") print("New value at t=1.0: wp(1.0) => %s"%wp(1.0)) assert type(wp.coordarray)==type(array([1,2],float64)) print("\nWe can test equality between arrays, as usual:") print("w_at_1 != wp(1.).toarray() => %s"%(w_at_1 != wp(1.).toarray())) print("We can also compare with a Pointset object:") print("wp(1.) != w_at_1 => %s"%(wp(1.) != w_at_1)) print("But we can't put an array on the left-hand side if a Point or " \ "Pointset is on the right.") print("\nTo demonstrate appending a Point and Pointset to another Pointset:") vw = Pointset({'coorddict': {'x0': [0.1, 0.15], 'x1': [100., 102], 'x2': [0.2, 0.1]}, 'indepvardict': {'t': [4.5, 5.0]}, 'coordtype': float64, 'indepvartype': float64, 'labels': {1: 'c'} }) print("vw.labels --> %s"%vw.labels) print("wp.append(vw)") wp.append(vw) print("wp.labels --> %s"%wp.labels) assert type(wp.coordarray)==type(array([1,2],float64)) wp.append(Point({'coorddict': {'t': 6.5, 'x0': 2, 'x1': -300, 'x2': -0.9997}})) assert type(wp.coordarray)==type(array([1,2],float64)) print("\nwp.toarray() -->\n%s"%wp.toarray()) print("\nwp(4.5) -->\n%s"%wp(4.5)) print("\nwp[[3,6]] --> %s"%wp[[3,6]]) print("\nwp[3:5] --> %s"%wp[3:5]) print("\nwp[2:] --> %s"%wp[2:]) try: # index out of range wp[10:] except ValueError: pass print("\nwp[wp.findIndex(4.5)] -->\n%s"%wp[wp.findIndex(4.5)]) print("\nwp.labels --> %s"%wp.labels) print("\nLabels test:") wp.labels[3] = ('a', {'bif':'SN'}) print("wp.labels[3] --> %s"%wp.labels[3]) wp_part = wp[3:5] print("wp_part.labels --> %s"%wp_part.labels) assert wp_part.labels[0] == wp.labels[3] wpt = wp(3.) assert wpt.labels == {'a': {'bif':'SN'}} wp_ins = Pointset({'coorddict': {'x0': [-2.1, -4., -5., -4.5], 'x1': [50., 51., 52., 54.], 'x2': [0.01, 0.02, 0.4, 0.9]}, 'indepvardict': {'t': [1.5, 5.2, 9., 10.]}, 'coordtype': float64, 'indepvartype': float64, 'labels': {2: 'b', 3: {'a': {'bif':'H'}}} }) print("\nwp_ins object created to insert into wp:") print(wp_ins) wp.insert(wp_ins) print("\nwp.insert(wp_ins) -->\n%s"%wp) print("\nTo demonstrate building a Pointset from a list of Point objects:") codestr = """pointlist = [] for t in wp['t']: pointlist.append(wp(t)) w_reconstructed = pointsToPointset(pointlist, 't', wp['t'])""" print(codestr) exec(codestr,globals()) print("\nAnd to demonstrate that this yields an identical object:") print("w_reconstructed == w => %s"%(w_reconstructed == wp)) try: w_double = w_reconstructed.append(w_reconstructed) raise RuntimeError("Internal error with Pointset class!") except ValueError: print("(ensure that any independent variable values to append are well-ordered)") print("\nTest of non-parameterized use of pointsToPointset:") wnp = pointsToPointset(pointlist) print("(Adding two additional labels to wnp)") wnp.labels[0]=('b', {}) wnp.addlabel(4, 'c', {'bif': 'H'}) # preferred syntax print(wnp) print("\nwnp[:] -->\n%s"%wnp[:]) print("-- OK!") print("\nCan iterate over points and pointsets:") print("for p in wnp.bylabel('a'):\n print p\n") for p in wnp.bylabel('a'): print(p) # pass some of the objects back return wp, wnp, wpt, wp_part # ----------------------------- if __name__ == '__main__': x = test_point() wp, wnp, wpt, wp_part = test_pointset() print("\n") print("x (point) and wp, wnp (param'd and non-param'd pointsets) are available in the global namespace, " \ "to play with interactively now that this script has run.") auto/07p/python/auto/parseBandS.py0000750000175000017500000001764113570013207015142 0ustar sksk#! /usr/bin/env python # Visualization for Bifurcation Manifolds # Copyright (C) 1997 Randy Paffenroth and John Maddocks # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA from auto import parseB from auto import parseS from auto import parseD from auto import AUTOExceptions class parseBandS: def __init__(self,fort7_filename=None,fort8_filename=None,fort9_filename=None): self.diagnostics = None if isinstance(fort7_filename, list): self.diagram = None self.solution = parseS.parseS(fort7_filename) elif fort8_filename is None and fort7_filename is not None: raise AUTOExceptions.AUTORuntimeError("Must set both both filenames") elif isinstance(fort7_filename, str) or fort7_filename is None: self.diagram = parseB.parseB(fort7_filename) self.solution = parseS.parseS(fort8_filename) if not fort9_filename is None: self.diagnostics = parseD.parseD(fort9_filename) else: self.diagram = fort7_filename self.solution = fort8_filename self.diagnostics = fort9_filename if self.diagnostics is None: self.diagnostics = [] self.dg = self.diagram self.sl = self.solution def __str__(self): return self.diagram.summary() def __repr__(self): return "" def getLabel(self,label): if isinstance(label, int): return self.solution(label) return parseBandS(self.diagram(label),self.solution(label), self.diagnostics) def __add__(self,x): if x == []: x = parseBandS() add = parseBandS(self.diagram + x.diagram, self.solution + x.solution, self.diagnostics + x.diagnostics) add.uniquelyLabel() return add def __radd__(self,x): if x == []: x = parseBandS() add = parseBandS(x.diagram + self.diagram, x.solution + self.solution, x.diagnostics + self.diagnostics) add.uniquelyLabel() return add def __iadd__(self,x): if x != []: self.diagram.__iadd__(x.diagram) self.solution.__iadd__(x.solution) self.diagnostics.__iadd__(x.diagnostics) self.uniquelyLabel() return self def extend(self,x): self.__iadd__(x) def read(self,fort7_input,fort8_input,fort9_input=None): self.diagram.read(fort7_input) self.solution.read(fort8_input) if not fort9_input is None: self.diagnostics.read(fort9_input) def write(self,fort7_output,fort8_output,fort9_output=None): self.diagram.write(fort7_output) self.solution.write(fort8_output) if not fort9_output is None: self.diagnostics.write(fort9_output) def save(self,output_filename): self.writeFilename('b.'+output_filename, 's.'+output_filename, 'd.'+output_filename) return self def readFilename(self,fort7_filename,fort8_filename,fort9_filename=None): self.diagram.readFilename(fort7_filename) self.solution.readFilename(fort8_filename) if not fort9_filename is None: self.diagnostics.readFilename(fort9_filename) def writeFilename(self,fort7_filename,fort8_filename=None,fort9_filename=None): #if only one filename is given, then just save the solutions file if fort8_filename is None: fort8_filename = fort7_filename else: self.diagram.writeFilename(fort7_filename) self.solution.writeFilename(fort8_filename) if not fort9_filename is None: self.diagnostics.writeFilename(fort9_filename) def deleteLabel(self,label=None,keepTY=0,keep=0): self.diagram.deleteLabel(label,keepTY,keep) self.solution.deleteLabel(label,keep) def relabel(self,old_label=None,new_label=None): if old_label is None and new_label is None: self.diagram.uniquelyLabel() self.solution.uniquelyLabel() return self self.diagram.relabel(old_label,new_label) self.solution.relabel(old_label,new_label) def uniquelyLabel(self): self.diagram.uniquelyLabel() self.solution.uniquelyLabel() def getLabels(self): return self.diagram.getLabels() def pointtest7(a,b): if "TY name" not in a: raise AUTOExceptions.AUTORegressionError("No TY name label") if "TY number" not in a: raise AUTOExceptions.AUTORegressionError("No TY number label") if "BR" not in a: raise AUTOExceptions.AUTORegressionError("No BR label") if "data" not in a: raise AUTOExceptions.AUTORegressionError("No data label") if "PT" not in a: raise AUTOExceptions.AUTORegressionError("No PT label") if "LAB" not in a: raise AUTOExceptions.AUTORegressionError("No LAB label") if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def pointtest8(a,b): keys = ['Type number', 'Type name', 'Free Parameters', 'Branch number', 'Parameter NULL vector', 'data', 'NCOL', 'Label', 'ISW', 'NTST', 'Point number', 'Parameters'] scratch=a['Parameters'] scratch=b['Parameters'] for key in keys: if key not in a: raise AUTOExceptions.AUTORegressionError("No %s label"%(key,)) if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def test(): foo = parseBandS() foo.readFilename("test_data/fort.7","test_data/fort.8") if len(foo.diagram) != 150: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest7(foo.diagram.getIndex(0),foo.diagram.getIndex(57)) if len(foo.solution) != 5: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest8(foo.solution.getIndex(0),foo.solution.getIndex(3)) if len(foo.getLabels()) != 5: raise AUTOExceptions.AUTORegressionError("Incorrect number of labels") print("Deleting labels") foo.deleteLabel(range(6,9)) if len(foo.getLabels()) != 2: raise AUTOExceptions.AUTORegressionError("Incorrect number of labels") print("Relabeling") foo.relabel(9,57) for i in range(len(foo.diagram)): if foo.diagram.getIndex(0)["TY number"] != 0: if foo.diagram.getIndex(0)["LAB"] != 57: raise AUTOExceptions.AUTORegressionError("Incorrect label") break if foo.solution.getIndex(0)["Label"] != 57: raise AUTOExceptions.AUTORegressionError("Incorrect label") print("Making labels unique") foo.uniquelyLabel() for i in range(len(foo.diagram)): if foo.diagram.getIndex(0)["TY number"] != 0: if foo.diagram.getIndex(0)["LAB"] != 1: raise AUTOExceptions.AUTORegressionError("Incorrect label") break if foo.solution.getIndex(0)["Label"] != 1: raise AUTOExceptions.AUTORegressionError("Incorrect label") print("parseBandS passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/parseD.py0000750000175000017500000001062113570013207014325 0ustar sksk#! /usr/bin/env python # This a class to parse fort.9 files, i.e. the diagnostics from AUTO # NOTE: This is nowhere near done, and it currently only finds the # reduced jacobians and puts them into a list. import re import sys try: from UserList import UserList except ImportError: # Python 3 from collections import UserList import getopt from auto import AUTOutil from auto import parseB class parseD(UserList): def __init__(self,filename=None): if isinstance(filename, str): UserList.__init__(self) self.readFilename(filename) else: UserList.__init__(self,filename) def __getitem__(self,index): return self.getIndex(index) def __call__(self,label): return self.getLabel(label) def __str__(self): s = [] for d in self.data: s.append(d["Text"]) return "".join(s) def getIndex(self,index): self.__readAll() return self.data[index] def getLabel(self,label): self.__readAll() for x in self.data: if x["Label"] == label: return x def __readAll(self): for item in self.data: solution = item["Text"] item.update({ "Branch number": 0, "Point number": 0, "Label": 0, "Eigenvalues": [], "Multipliers": []}) lines = solution.splitlines() if len(lines) < 3: continue i = 0 for line in lines: sp = line.split() if len(sp) > 0 and sp[0] == 'BR': break i = i + 1 if i + 1 >= len(lines): continue sp = lines[i+1].split() if len(sp) < 2: continue item["Branch number"] = int(sp[0]) item["Point number"] = int(sp[1]) labline = 0 for line in lines: sp = line.split() if labline and len(sp) > 3: if sp[2] != '0': try: item["Label"] = int(sp[2]) except: item["Label"] = int(sp[3]) break if sp[0:4] == ['BR', 'PT', 'TY', 'LAB']: labline = 1 result = re.findall("Eigenvalue\s.*",solution) for eigenvalue_string in result: eigenvalue_string = eigenvalue_string.split() real_part = parseB.AUTOatof(eigenvalue_string[2]) imag_part = parseB.AUTOatof(eigenvalue_string[3]) item["Eigenvalues"].append([real_part,imag_part]) result = re.findall("Multiplier\s.*",solution) for multiplier_string in result: multiplier_string = multiplier_string.split() # "inaccurate" or "accurate" if multiplier_string[1][-1] == "e": continue real_part = parseB.AUTOatof(multiplier_string[2]) imag_part = parseB.AUTOatof(multiplier_string[3]) item["Multipliers"].append([real_part,imag_part]) def read(self,input): data = input.read() divstr = "===============================================\n" data=data.split(divstr) if len(data) == 1: divstr = "--------------------------------------------------------------------------------------------\n" data=data[0].split(divstr) self.data=[] for solution in data: self.data.append({"Text": solution + divstr}) self.data[-1]["Text"] = self.data[-1]["Text"][:-len(divstr)] def readFilename(self,filename): inputfile = AUTOutil.openFilename(filename, "r") self.read(inputfile) def write(self,output): output.write(self.__str__()) def writeFilename(self,filename,append=False): if append: output = open(filename,"a") else: output = open(filename,"w") self.write(output) output.close() def test(): pass if __name__ == "__main__": #Parse command line arguements opts_list,args=getopt.getopt(sys.argv[1:],"i:") opts={} for x in opts_list: opts[x[0]]=x[1] foo = parseD(args[0]) foo.printMatrix(int(opts["-i"]),sys.stdout) auto/07p/python/auto/additionExample.py0000750000175000017500000000111413570013207016213 0ustar skskfrom auto import AUTOCommands class randy(AUTOCommands.commandQueryDiagnostic): def __init__(self,num): self.num = num def __call__(self): for i in range(self.num): print("Randy is a bonehead") def start(name=None): global plotter handle=AUTOCommands.commandPlotter(name)() plotter = handle.data return AUTOCommands.valueString("Created plotter\n") def run(frames): global plotter for i in range(frames): plotter.config(mark_t=i/float(self.frames)) return AUTOCommands.valueString("Running animation") auto/07p/python/auto/setup.sh0000750000175000017500000000036013570013207014230 0ustar skskAUTO_DIR=~/src/auto/2000 PYTHONPATH=$AUTO_DIR/python:$AUTO_DIR/python/graphics:~/src/DataViewer/Python_interface/python_script:$AUTO_DIR/python/lib/Linux_OpenGL:$AUTO_DIR/python/lib/Linux_Mesa:. DV=~/src/DataViewer PATH=$PATH:$AUTO_DIR/bin auto/07p/python/auto/__init__.py0000750000175000017500000000036013570013207014645 0ustar sksk#! /usr/bin/env python # Some ways to run AUTO: # a) python auto # b) import auto # auto.auto() # c) from auto import * if __name__ == "__main__": from auto import AUTOclui AUTOclui.auto() else: from auto.AUTOclui import * auto/07p/python/auto/graphics/0000750000175000017500000000000013570013207014332 5ustar skskauto/07p/python/auto/graphics/optionHandler.py0000750000175000017500000000715613570013207017526 0ustar sksk#! /usr/bin/env python from auto import AUTOutil from auto import AUTOExceptions class OptionHandler: def __init__(self,baseClass=None): self.__options = {} self.__optionDefaults = {} self.__optionAliases = {} self.__optionCallbacks = {} self.__optionRC = {} self.__baseClass = baseClass def __applyOptionAliases(self,key): return self.__optionAliases.get(key,key) def __parseOptions(self,dct): for key in dct: newkey = self.__applyOptionAliases(key) if newkey in self.__options: if self.__options[newkey] != dct[key]: self.__options[newkey] = dct[key] newcb = self.__optionCallbacks[newkey] if newcb is not None: newcb(key,dct[key],self.__options) # Options are of the form data=(default_value,callback=None) def addOptions(self,**kw): for key in kw: self.__optionDefaults[key] = kw[key][0] self.__options[key] = kw[key][0] if (self.__baseClass is not None and key in self.__baseClass.keys(self)): self.__baseClass.config(self,{key:kw[key][0]}) self.__optionCallbacks[key] = kw[key][1] self.__optionRC[key] = 0 def addRCOptions(self,**kw): self.__optionDefaults.update(kw) self.__options.update(kw) for key in kw: self.__optionRC[key] = 1 if (self.__baseClass is not None and key in self.__baseClass.keys(self)): self.__baseClass.config(self, {key: kw[key]}) # Aliases are of the form fg=foreground def addAliases(self,**kw): self.__optionAliases.update(kw) def _isInternalOption(self,key): return self.__applyOptionAliases(key) in self.__options def config(self,cnf=None,**kw): if cnf is None and not kw: dct={} for key in self.__optionAliases: dct[key] = [key,self.__optionAliases[key]] for key in self.__options: dct[key] = OptionHandler.config(self,key) if self.__baseClass is not None: dct.update(self.__baseClass.config(self)) return dct if isinstance(cnf, str): cnf = self.__applyOptionAliases(cnf) if cnf in self.__options: return (cnf,cnf,cnf, self.__optionDefaults[cnf], self.__options[cnf], self.__optionRC[cnf]) if self.__baseClass is None: raise AUTOExceptions.AUTORuntimeError("Option %s not found"%cnf) return self.__baseClass.config(self,cnf) dct = (cnf or {}).copy() dct.update(kw) self.__parseOptions(dct) if self.__baseClass is not None: for k in list(dct): if k not in self.__baseClass.keys(self): del dct[k] self.__baseClass.config(self,**dct) configure = config def cget(self,key): newkey = self.__applyOptionAliases(key) if newkey in self.__options: return self.__options[newkey] else: if self.__baseClass is None: raise AUTOExceptions.AUTORuntimeError("Option %s not found"%key) else: return self.__baseClass.cget(self,key) __getitem__ = cget def simpleOptionDictionary(self): options = self.configure() dct={} for key in options: dct[key] = self.cget(key) return dct auto/07p/python/auto/graphics/windowPlotter.py0000750000175000017500000003630113570013207017573 0ustar sksk#! /usr/bin/env python try: import Tkinter except ImportError: import tkinter as Tkinter # Python 3 from auto.graphics import Pmw from auto import parseC from auto import AUTOutil from auto.graphics import plotter import sys # FIXME: No regression tester (except as part of interactiveBindings) class WindowPlotter(Pmw.MegaToplevel): def __init__(self,grapherClass,parent=None,disabled=False,**kw): optiondefs = [] self.defineoptions(kw,optiondefs) if kw.get('grapher_hide') or disabled: if 'auto.graphics.grapher_mpl' in sys.modules or disabled: kwnew = {} for k in kw: if k.startswith('grapher_'): kwnew[k[8:]] = kw[k] self.grapher = grapherClass(**kwnew) self.savefig = self.grapher.savefig return # without matplotlib, retract the Tk() window parent=Tkinter.Tk() parent.withdraw() print("\nCannot hide the on-screen plot without matplotlib.") Pmw.MegaToplevel.__init__(self, parent) interior = self.interior() self.helpBalloon = self.createcomponent('helpBalloon', (), None, Pmw.Balloon, interior) self.menuBar = self.createcomponent('menuBar', (), None, Pmw.MainMenuBar,interior, hotkeys="true", hull_relief = 'raised', hull_borderwidth = 1, balloon=self.helpBalloon) interior.configure(menu=self.menuBar) self.menuBar.addmenu("File","File operations") self.menuBar.addmenu("Options","View and set options") self.menuBar.addmenu("Help","View help on the plotting widget",name='help') topbox = Tkinter.Frame(interior,relief="raised",borderwidth=2) topbox.pack(side=Tkinter.BOTTOM) self.grapher = self.createcomponent('grapher', (), None, grapherClass,interior) self.menuBar.addmenuitem("File", "command", "Save the plot as postscript...", label = "Save Postscript...", command = self.grapher.generatePostscript ) self.menuBar.addmenuitem("File", "command", "Destroy the plot", label = "Quit", command = self.destroywindow ) self.menuBar.addmenuitem("Options", "command", label="Options...", command=self._setOptionWindow ) box = Tkinter.Frame(topbox) self.grapher.pack(expand=1,fill=Tkinter.BOTH) labelEntry = self.createcomponent('labelEntry', (), None, Pmw.RadioSelect,box, labelpos="w", label_text="Type") labelEntry.add("bifurcation") labelEntry.add("solution") labelEntry.invoke(self.grapher.cget("type")) labelEntry.configure(command = lambda entry: self._modifyOption("type",entry)) labelEntry.grid(row=0,column=0) self.labelEntry = labelEntry typeEntry = self.createcomponent('typeEntry', (), None, Pmw.ComboBox,box, labelpos="w", label_text="Label") typeEntry.grid(row=0,column=1) typeEntry.configure(selectioncommand = lambda entry:self._modifyOption("label",entry)) self.typeEntry = typeEntry box.grid(row=0) box = Tkinter.Frame(topbox) self._extraButtons(box) box.grid(row=1) # Let the appropriate things grow topbox.rowconfigure(1,weight=1) topbox.columnconfigure(0,weight=1) self.initialiseoptions(WindowPlotter) self.savefig = self.grapher.savefig def __labelFunction(self,lst): # The return value of a ScrolledListBox is a list of strings, so we change them # to integers here lst=map(int,lst) # but the _modifyOption method expects a string, so we change the whole thing to a string here self._modifyOption("label",str(lst)) def _setOptionWindow(self): lst = sorted([key for key in self.grapher.configure() if self.grapher._isInternalOption(key)]) self.optionSelctionDialog = Pmw.SelectionDialog(title = 'Options', buttons = ('OK', 'Cancel'), defaultbutton = 'OK', scrolledlist_labelpos = 'n', label_text = 'Setable options', scrolledlist_items = lst, command = self.optionSelectionDialogCommand) def _extraButtons(self,box): pass def optionSelectionDialogCommand(self,button): if button == "OK": self.setOptionDialog(self.optionSelctionDialog.getcurselection()[0]) if button == "Cancel": self.optionSelctionDialog.destroy() def _shortstr(self,x): if isinstance(x,(list,tuple)): return ",".join(map(str,x)) return x def setOptionDialog(self,key): self.diag = Pmw.Dialog(self.interior(), buttons=("Ok","Cancel")) optionLabel = Pmw.EntryField(self.diag.interior(), labelpos="w", label_text="Option Name", entry_state=Tkinter.DISABLED) optionLabel.pack(side="top") valueLabel = Pmw.EntryField(self.diag.interior(), labelpos="w", label_text="Old Value", entry_state=Tkinter.DISABLED) valueLabel.pack(side="top") valueEntry = Pmw.EntryField(self.diag.interior(), labelpos="w", label_text="New Value") valueEntry.pack(side="top") valueEntry.configure(command = lambda: self.__dialogFunction("Ok",key,valueEntry.get())) self.diag.configure(command = lambda button:self.__dialogFunction(button,key,valueEntry.get())) optionLabel.setentry(key) valueLabel.setentry(str(self.grapher.cget(key))) valueEntry.clear() def __dialogFunction(self,button,key,entry): if button == "Ok": self._modifyOption(key,entry) self.diag.destroy() def _modifyOption(self,key,entry): if key[-2:] == "_z" and entry == " 2D Plot ": self.grapher[key] = None return self.grapher[key] = self.grapher.parseoption(key, entry, parseC.parseC()) if key == "type": self.typeUpdateCallback() def typeUpdateCallback(self): pass def checktype(self): # force type change if a bifurcation diagram or solution don't exist ty = self.grapher.cget("type") bd = self.grapher.cget("bifurcation_diagram") sol = self.grapher.cget("solution") if ty == "bifurcation" and (len(bd)==0 or len(bd[0])==0) and len(sol): self.grapher.config(type="solution") self.labelEntry.invoke("solution") elif ty == "solution" and len(sol)==0 and len(bd) and len(bd[0]): self.grapher.config(type="bifurcation") self.labelEntry.invoke("bifurcation") def config(self,cnf=None,**kw): """ Configure settings for a plot. The values for resources are specified as keyword arguments. See the manual and example autorc in $AUTO_DIR/autorc for the list of allowed keyword arguments. """ rval = self.grapher.config(cnf,**kw) if isinstance(cnf, str) or (cnf is None and not kw): return rval self.checktype() if not hasattr(self, "menuBar"): #hidden (no on-screen) graph return dct = (cnf or {}).copy() dct.update(kw) for key,value in dct.items(): if key == "type": self.labelEntry.invoke(value) if key in ["type","label","label_defaults", "bifurcation_diagram_filename", "solution_filename", "bifurcation_column_defaults", "bifurcation_diagram", "bifurcation_x","bifurcation_y","bifurcation_z", "bifurcation_coordnames", "solution_column_defaults", "solution_indepvarname","solution_coordnames", "solution","solution_x","solution_y","solution_z"]: self.typeUpdateCallback() configure = config def cget(self,option): return self.grapher.cget(option) def __getitem__(self,key): try: return self.grapher[key] except: return Pmw.MegaToplevel.__getitem__(self,key) def update(self): self.grapher.update() Pmw.MegaToplevel.update(self) def destroy(self): self.typeEntry.destroy() Pmw.MegaToplevel.destroy(self) def destroywindow(self): self.destroy() class WindowPlotter2D(WindowPlotter): def __init__(self,parent=None,**kw): WindowPlotter.__init__(self,plotter.plotter,parent,**kw) def _extraButtons(self,box): self.xEntry = self.createcomponent('xEntry', (), None, Pmw.ComboBox,box, labelpos="w", label_text="X") self.xEntry.grid(row=0,column=0) self.yEntry = self.createcomponent('yEntry', (), None, Pmw.ComboBox,box, labelpos="w", label_text="Y") self.yEntry.grid(row=0,column=1) if plotter.Axes3D is not None: self.zEntry = self.createcomponent('zEntry', (), None, Pmw.ComboBox,box, labelpos="w", label_text="Z") self.zEntry.grid(row=0,column=2) self.checktype() self.typeUpdateCallback() def destroy(self): self.xEntry.destroy() self.yEntry.destroy() if plotter.Axes3D is not None: self.zEntry.destroy() WindowPlotter.destroy(self) def typeUpdateCallback(self): if self.grapher.cget("type") == "bifurcation": ox = "bifurcation_x" oy = "bifurcation_y" oz = "bifurcation_z" ocd = "bifurcation_column_defaults" o = "bifurcation_diagram" else: ox = "solution_x" oy = "solution_y" oz = "solution_z" ocd = "solution_column_defaults" o = "solution" self.xEntry.configure(selectioncommand = lambda entry: self._modifyOption(ox,entry)) self.yEntry.configure(selectioncommand = lambda entry: self._modifyOption(oy,entry)) if plotter.Axes3D is not None: self.zEntry.configure(selectioncommand = lambda entry: self._modifyOption(oz,entry)) lst = [] if self.grapher.cget(ocd) is not None: lst = list(map(str,self.grapher.cget(ocd))) sol = self.grapher.cget(o) if self.grapher.cget("type") == "solution": indepvarname = None for s in sol: indepvarname = s.indepvarname break if self.grapher.cget(ox[:-1]+"indepvarname"): indepvarname = self.grapher.cget(ox[:-1]+"indepvarname") if indepvarname is not None: lst.append(indepvarname) coordnames = self.grapher._coordnames lst.extend(coordnames) xlist = self.grapher.cget(ox) ylist = self.grapher.cget(oy) zlist = self.grapher.cget(oz) if type(xlist) == type((0,)): xlist = list(xlist) if type(ylist) == type((0,)): ylist = list(ylist) if type(zlist) == type((0,)): zlist = list(zlist) if len(sol) > 0: for xylist in xlist,ylist,zlist: if xylist is None: break for i in range(len(xylist)): if type(xylist[i]) == type(1): if xylist[i] == -1: xylist[i] = indepvarname elif coordnames != []: xylist[i] = coordnames[xylist[i]] else: xylist[i] = str(i) xentry = self._shortstr(xlist) yentry = self._shortstr(ylist) zentry = None if plotter.Axes3D is not None: if zlist is None: zentry = " 2D Plot " else: zentry = self._shortstr(zlist) for entry in xentry, yentry, zentry: if entry is not None and entry != " 2D Plot " and entry not in lst: lst.append(entry) self.xEntry.setentry(xentry) self.xEntry.setlist(lst) self.yEntry.setentry(yentry) self.yEntry.setlist(lst) if plotter.Axes3D is not None: self.zEntry.setentry(zentry) self.zEntry.setlist([" 2D Plot "]+lst) labels = [] if self.grapher.cget("label_defaults") is not None: labels = list(map(str,self.grapher.cget("label_defaults"))) default_labels = self.grapher.cget("solution").getLabels() labels.extend(["%d"%d for d in default_labels]) if len(default_labels) > 1 or len(labels) == 0: labels.append(self._shortstr(default_labels)) if self.grapher.cget("label") == [0]: entry = labels[0] else: entry = self._shortstr(self.grapher.cget("label")) self.typeEntry.setentry(entry) if entry not in labels: labels.append(entry) self.typeEntry.setlist(labels) auto/07p/python/auto/graphics/__init__.py0000640000175000017500000000000013570013207016432 0ustar skskauto/07p/python/auto/graphics/grapher.py0000750000175000017500000011530113570013207016340 0ustar sksk#!/usr/bin/env python try: import Tkinter import tkSimpleDialog import tkFileDialog except ImportError: import tkinter as Tkinter # Python 3 from tkinter import simpledialog as tkSimpleDialog from tkinter import filedialog as tkFileDialog from auto.graphics import Pmw from auto import AUTOutil from auto.graphics import optionHandler import math import sys import string GrapherError="GrapherError" Axes3D=None class BasicGrapher(optionHandler.OptionHandler,Tkinter.Canvas): """Documentation string for Basic Grapher A simple graphing widget By Randy P.""" def __init__(self,parent=None,callback=None,**kw): self.data = [] #Get the data from the arguments and then erase the #ones which are not used by canvas optionDefaults={} optionDefaults["minx"] = (0,callback) optionDefaults["maxx"] = (0,callback) optionDefaults["miny"] = (0,callback) optionDefaults["maxy"] = (0,callback) optionDefaults["minz"] = (0,callback) optionDefaults["maxz"] = (0,callback) optionDefaults["azimuth"] = (None,callback) optionDefaults["elevation"] = (None,callback) optionDefaults["left_margin"] = (80,callback) optionDefaults["right_margin"] = (40,callback) optionDefaults["top_margin"] = (40,callback) optionDefaults["bottom_margin"] = (40,callback) optionDefaults["decorations"] = (True,callback) optionDefaults["xlabel"] = (None,callback) optionDefaults["xlabel_fontsize"] = (None,callback) optionDefaults["ylabel"] = (None,callback) optionDefaults["ylabel_fontsize"] = (None,callback) optionDefaults["zlabel"] = (None,callback) optionDefaults["zlabel_fontsize"] = (None,callback) optionDefaults["xticks"] = (5,callback) optionDefaults["yticks"] = (5,callback) optionDefaults["zticks"] = (5,callback) optionDefaults["grid"] = (True,callback) optionDefaults["tick_label_template"] = ("%.2e",callback) optionDefaults["tick_length"] = (0.2,callback) optionDefaults["odd_tick_length"] = (0.4,callback) optionDefaults["even_tick_length"] = (0.2,callback) # background is handled by the Canvas widget optionDefaults["foreground"] = ("black",callback) optionDefaults["color_list"] = ("black red green blue",callback) optionDefaults["symbol_font"] = ("-misc-fixed-*-*-*-*-*-*-*-*-*-*-*-*",callback) optionDefaults["symbol_color"] = ("red",callback) optionDefaults["smart_label"] = (True,callback) optionDefaults["line_width"] = (2,callback) optionDefaults["realwidth"] = (1,callback) optionDefaults["realheight"] = (1,callback) optionDefaults["use_labels"] = (True,callback) optionDefaults["use_symbols"] = (True,callback) optionDefaults["top_title"] = ("",callback) optionDefaults["top_title_fontsize"] = (None,callback) optionDefaults["dashes"] = ((6.0,6.0),callback) optionDefaults["width"] = (600,callback) optionDefaults["height"] = (480,callback) optionAliases = {} optionAliases["fg"] = "foreground" # __parseOptions uses functions from the Canvas # widget, so we need to initialize it first if kw.get("hide") and 'graphics.grapher_mpl' in sys.modules: optionHandler.OptionHandler.__init__(self) else: try: Tkinter.Canvas.__init__(self,parent) optionHandler.OptionHandler.__init__(self,Tkinter.Canvas) except Tkinter.TclError: optionHandler.OptionHandler.__init__(self) for key in list(kw): if key not in optionDefaults: del kw[key] self.addOptions(**optionDefaults) self.addAliases(**optionAliases) BasicGrapher._configNoDraw(self,**kw) def __len__(self): return len(self.data) def config(self,cnf=None,**kw): rval = self._configNoDraw(cnf,**kw) if isinstance(cnf, str) or (cnf is None and not kw): return rval self.clear() self.draw() configure=config # This version can be used to increase efficiency # for example, if you want to config, but know you # will need to redraw later. def _configNoDraw(self,cnf=None,**kw): # note: reset xticks/yticks if min/max are set without ticks if (cnf is not None or kw) and not isinstance(cnf, str): dct = (cnf or {}).copy() dct.update(kw) for coord in ["x", "y", "z"]: minc = "min" + coord maxc = "max" + coord ticks = coord + "ticks" if (minc in dct or maxc in dct) and ticks not in dct: dct[ticks] = None return optionHandler.OptionHandler.config(self,**dct) return optionHandler.OptionHandler.config(self,cnf,**kw) _configureNoDraw = _configNoDraw def _addData(self,data,newsect=None,color=None,stable=None): for array in data: if len(array[0]) != len(array[1]): raise GrapherError("Array lengths must match") new_array={} new_array["x"]=array[0] new_array["y"]=array[1] if len(array) > 2: new_array["z"]=array[2] new_array["stable"]=stable new_array["newsect"]=newsect new_array["color"]=color if len(array[0]) > 0: new_array["minx"]=min(array[0]) new_array["maxx"]=max(array[0]) if len(array[1]) > 0: new_array["miny"]=min(array[1]) new_array["maxy"]=max(array[1]) if "z" in new_array and len(array[2]) > 0: new_array["minz"]=min(array[2]) new_array["maxz"]=max(array[2]) self.data.append(new_array) def addData(self,data): self._addData(data) self.computeXRange() self.computeYRange() self.computeZRange() self.draw() def addArray(self,array): self._addData((array,)) self.computeXRange() self.computeYRange() self.computeZRange() self.draw() def addDataNoDraw(self,data): self._addData(data) def addArrayNoDraw(self,array,newsect=None,color=None,stable=None): self._addData((array,),newsect,color,stable) def _delAllData(self): self.data=[] # check type for next data try: zcolumn = self.cget(self.cget("type")+"_z") except Tkinter.TclError: #in regression test return if zcolumn is not None: self._configNoDraw({self.cget("type")+"_z":None}) print("\nWithout matplotlib 3D plots are not supported.") print("Plotting only the first two coordinates.") def delAllData(self): self._delAllData() self.clear() def _delData(self,index): del self.data[index] def delData(self,index): self._delData(index) self.clear() self.draw() def _round(self,val,increment): "This function returns the closest integer multiple to increment" quotient = val/increment remainder = quotient-math.floor(quotient) if remainder < 0.5: return math.floor(quotient)*increment else: return (math.floor(quotient)+1)*increment def _computeNiceRanges(self,minimum,maximum): # This bit of code computes "nice" range values. Given a # minimum and manximum it computes a new minimum, maximum, # and number of divisions so that the number of digits in # the the numbers in the value at each tick mark # in minimized therange = maximum - minimum inc = math.pow(10,math.ceil(math.log10(therange) - 1.0)) if therange / inc <= 2: inc = inc / 4 elif therange / inc <= 4: inc = inc / 2 minimumr = self._round(minimum,inc) if minimumr > minimum: minimum = minimumr - inc else: minimum = minimumr maximumr = self._round(maximum,inc) if maximumr < maximum: maximum = maximumr + inc else: maximum = maximumr ; num = int(round(( maximum - minimum ) / inc)) return {"min": minimum, "max": maximum, "divisions": num + 1} def computeRange(self,coordinate,guess_minimum=None,guess_maximum=None): minc = "min"+coordinate maxc = "max"+coordinate if len(self.data) > 0 and minc not in self.data[0]: return if guess_minimum is None and len(self.data) > 0: guess_minimum = min([entry[minc] for entry in self.data]) if guess_maximum is None and len(self.data) > 0: guess_maximum = max([entry[maxc] for entry in self.data]) if guess_minimum != guess_maximum: d = self._computeNiceRanges(guess_minimum,guess_maximum) self._configNoDraw(**{minc:d["min"],maxc:d["max"], coordinate+'ticks':d["divisions"]}) elif guess_maximum != None: self._configNoDraw(**{minc:guess_minimum-1,maxc:guess_maximum+1}) def computeXRange(self,guess_minimum=None,guess_maximum=None): self.computeRange("x",guess_minimum,guess_maximum) def computeYRange(self,guess_minimum=None,guess_maximum=None): self.computeRange("y",guess_minimum,guess_maximum) def computeZRange(self,guess_minimum=None,guess_maximum=None): self.computeRange("z",guess_minimum,guess_maximum) def getXRange(self): return [self.cget("minx"),self.cget("maxx")] def getYRange(self): return [self.cget("miny"),self.cget("maxy")] def getZRange(self): return [self.cget("minz"),self.cget("maxz")] def clear(self): if hasattr(self, "tk"): for x in self.find_all(): self.delete(x) def plot(self): pass def draw(self): color_list = self.cget("color_list").split() minx=self.cget("minx") maxx=self.cget("maxx") miny=self.cget("miny") maxy=self.cget("maxy") top_margin = self.cget("top_margin") bottom_margin = self.cget("bottom_margin") left_margin = self.cget("left_margin") right_margin = self.cget("right_margin") width = int(self.cget("realwidth")) height = int(self.cget("realheight")) if self.cget("decorations"): # border self.create_polygon(left_margin,top_margin, int(width)-right_margin,top_margin, int(width)-right_margin,int(height)-bottom_margin, left_margin,int(height)-bottom_margin,fill="",outline=self.cget("foreground")) # data line_width=self.cget("line_width") adjwidth = width - (left_margin + right_margin) adjheight = height - (top_margin + bottom_margin) xscale = (float(maxx) - minx) / adjwidth yscale = (float(maxy) - miny) / adjheight i=-1 for d in self.data: if d["newsect"] is None or d["newsect"]: i = i+1 if d["color"] is None: color = i else: color = d["color"] fill=color_list[color%len(color_list)] curve="curve:%d"%(i,) n=len(d["x"]) [x,y]=self.__valueToCanvasFast([d["x"][0],d["y"][0]],minx,maxx,miny,maxy, width,height,left_margin,right_margin,top_margin,bottom_margin) # If we only have one point we draw a small circle if n == 1: self.create_oval(x-3,y-3,x+3,y+3, tags=("data_point:%d"%(0,),"curve:%d"%(i,),"data"), fill=fill) else: line = [x, y] xs = d["x"] ys = d["y"] stable = d["stable"] for j in range(1, n): line.append((xs[j]-minx) / xscale + left_margin) line.append((adjheight - (ys[j]-miny) / yscale + top_margin)) if stable is None or stable: self.create_line(line,width=line_width,tags=(curve,"data"),fill=fill) else: self.create_line(line,width=line_width,tags=(curve,"data"),fill=fill,dash=(10,10)) if self.cget("decorations"): # clip stuff outside box self.create_polygon(0,0, int(width),0, int(width),top_margin-1, 0,top_margin-1, fill=self["background"]) self.create_polygon(0,0, 0,int(height), left_margin-1,int(height), left_margin-1,0, fill=self["background"]) self.create_polygon(int(width),int(height), int(width),0, int(width)-right_margin+1,0, int(width)-right_margin+1,int(height), fill=self["background"]) self.create_polygon(int(width),int(height), 0,int(height), 0,int(height)-bottom_margin+1, int(width),int(height)-bottom_margin+1, fill=self["background"]) # tick marks xw=float(width) - (float(left_margin) + float(right_margin)) yw=float(height) - (float(top_margin) + float(bottom_margin)) tick_label_template=self.cget("tick_label_template") tick_length=self.cget("tick_length") odd_tick_length=self.cget("odd_tick_length") even_tick_length=self.cget("even_tick_length") xticks = self.cget("xticks") if xticks is None: xticks = self.config("xticks")[3] else: xticks=int(xticks) tick_start_y=yw+bottom_margin for i in range(xticks): # The odd tick marks should be longer if i%2==0: tick_end_y=yw+bottom_margin*(1+even_tick_length) else: tick_end_y=yw+bottom_margin*(1+odd_tick_length) tick_x=left_margin + float(i)*xw/float(xticks-1) self.create_line(tick_x,tick_start_y,tick_x,tick_end_y,fill=self.cget("foreground")) val = self.canvasToValue((tick_x,tick_start_y)) self.create_text(tick_x,tick_end_y,text=tick_label_template%(val[0],),anchor="n",fill=self.cget("foreground")) if i != 0 and i != xticks - 1 and self.cget("grid") in ["yes",True]: self.create_line(tick_x,tick_start_y,tick_x,tick_start_y-yw, fill=self.cget("foreground"),stipple="gray50") yticks = self.cget("yticks") if yticks is None: yticks = self.config("yticks")[3] else: yticks=int(yticks) tick_start_x=left_margin tick_end_x=left_margin*(1-tick_length) for i in range(yticks): tick_y=bottom_margin + float(i)*yw/float(yticks-1) self.create_line(tick_start_x,tick_y,tick_end_x,tick_y,fill=self.cget("foreground")) val = self.canvasToValue((tick_start_x,tick_y)) self.create_text(tick_end_x,tick_y,text=tick_label_template%(val[1],),anchor="e",fill=self.cget("foreground")) if i != 0 and i != yticks - 1 and self.cget("grid") in ["yes",True]: self.create_line(tick_start_x,tick_y,tick_start_x + xw,tick_y, fill=self.cget("foreground"),stipple="gray50") # Axis labels self.create_text(left_margin*0.3,bottom_margin*0.3, text=self.cget("ylabel"),anchor="nw",fill=self.cget("foreground")) self.create_text(int(width)-left_margin*0.3,int(height)-bottom_margin*0.1, text=self.cget("xlabel"),anchor="se",fill=self.cget("foreground")) # Title self.create_text((left_margin-right_margin+int(width))//2, top_margin*0.1,text=self.cget("top_title"),anchor="n", fill=self.cget("foreground")) def valueToCanvas(self,val): if len(val) != 2: raise GrapherError("Illegal value choosen for coordinate transformation. Must be a tuple with 2 elements.") # make a few constants shorter minx=self.cget("minx") maxx=self.cget("maxx") miny=self.cget("miny") maxy=self.cget("maxy") width = int(self.cget("realwidth")) height = int(self.cget("realheight")) left_margin = self.cget("left_margin") right_margin = self.cget("right_margin") top_margin = self.cget("top_margin") bottom_margin = self.cget("bottom_margin") return self.__valueToCanvasFast(val,minx,maxx,miny,maxy, width,height,left_margin,right_margin,top_margin,bottom_margin) def __valueToCanvasFast(self,val,minx,maxx,miny,maxy, width,height,left_margin,right_margin,top_margin,bottom_margin): x = val[0] y = val[1] width = width - (left_margin + right_margin) height = height - (top_margin + bottom_margin) return [((x-minx)/(maxx-minx))*width + left_margin, height - ((y-miny)/(maxy-miny))*height + top_margin] def transform(self,val): [x,y] = self.valueToCanvas(val) return [x,self.cget("realheight") - y] def transform_seq(self,seqs): minx=self.cget("minx") maxx=self.cget("maxx") miny=self.cget("miny") maxy=self.cget("maxy") width = int(self.cget("realwidth")) height = int(self.cget("realheight")) left_margin = self.cget("left_margin") right_margin = self.cget("right_margin") top_margin = self.cget("top_margin") bottom_margin = self.cget("bottom_margin") valuetocanvasfast = self.__valueToCanvasFast sp2 = 5 #fontsize sp4 = 5 l = [] for i in range(len(seqs[0])): val = [seqs[0][i],seqs[1][i]] [x,y] = valuetocanvasfast(val,minx,maxx,miny,maxy, width,height,left_margin,right_margin,top_margin,bottom_margin) l.append( [(x - left_margin) / sp2,((height - y) - bottom_margin) / sp4]) return l def canvasToValue(self,val): if len(val) != 2: raise GrapherError("Illegal value choosen for coordinate transformation. Must be a tuple with 2 elements.") x = val[0] if x < self.cget("left_margin"): x = self.cget("left_margin") if x > int(self.cget("realwidth")) - self.cget("right_margin"): x = int(self.cget("realwidth")) - self.cget("right_margin") y = val[1] if y < self.cget("top_margin"): y = self.cget("top_margin") if y > int(self.cget("realheight")) - self.cget("bottom_margin"): y = int(self.cget("realheight")) - self.cget("bottom_margin") x = x - self.cget("left_margin") y = y - self.cget("bottom_margin") minx=self.cget("minx") maxx=self.cget("maxx") miny=self.cget("miny") maxy=self.cget("maxy") return [minx + (maxx-minx)*float(x)/(float(self.cget("realwidth"))-(self.cget("left_margin")+self.cget("right_margin"))), maxy - (maxy-miny)*float(y)/(float(self.cget("realheight"))-(self.cget("bottom_margin")+self.cget("top_margin")))] class LabeledGrapher(BasicGrapher): def __init__(self,parent=None,**kw): self.labels=[] BasicGrapher.__init__(self,parent,**kw) def addLabel(self,i,j,input_text,symbol=None): new_label={} new_label["j"]=j xy = [self.data[i]["x"][j], self.data[i]["y"][j]] if "z" in self.data[i]: xy.append(self.data[i]["z"][j]) new_label["xy"]=xy new_label["text"]=input_text new_label["symbol"]=symbol self.labels[i].append(new_label) def _delData(self,i): del self.labels[i] BasicGrapher._delData(self,i) def _delAllData(self): self.labels=[] BasicGrapher._delAllData(self) def _addData(self,data,newsect=None,color=None,stable=None): self.labels.append([]) BasicGrapher._addData(self,data,newsect,color,stable) def plotlabels(self): if self.cget("realwidth") == 1 or self.cget("realheight") == 1: return if not self.cget("use_labels") or len(self.labels) == 0: return trans = self.transform_seq if self.cget("smart_label"): mp = self.inarrs() for d in self.data: self.map_curve(mp,trans([d["x"],d["y"]])) for i, labels in enumerate(self.labels): for label in labels: if len(label["text"]) == 0: continue [x,y] = label["xy"][:2] if (x < self["minx"] or x > self["maxx"] or y < self["miny"] or y > self["maxy"]): continue data = self.transform([x,y]) if not(data is None): [x,y] = data if self.cget("smart_label"): [xoffd1,yoffd1,xoffd2,yoffd2, xofft,yofft,pos] = self.findsp(x,y,mp) else: [xoffd1,yoffd1,xoffd2,yoffd2, xofft,yofft,pos] = self.dumblabel(i,label["j"],x,y) anchor = self.getpos(pos) y = self.cget("realheight") - y self.create_line(x+xoffd1,y-yoffd1,x+xoffd2,y-yoffd2, fill=self.cget("foreground")) self.create_text(x+xofft,y-yofft,text=label["text"], anchor=anchor,fill=self.cget("foreground")) # not-so-smart way of plotting labels def dumblabel(self,i,j,x,y): #Find a neighbor so I can compute the "slope" if j < len(self.data[i]["x"]) - 1: first = j second = j+1 else: first = j-1 second = j realwidth=self.cget("realwidth") realheight=self.cget("realheight") left_margin=self.cget("left_margin") top_margin=self.cget("top_margin") #pick a good direction for the label ys = self.data[i]["y"] if ys[second] > ys[first]: if (x < int(realwidth)-(20+left_margin) and y < int(realheight)-(20+top_margin)): xoffset = 10 yoffset = 10 pos=0 else: xoffset = -10 yoffset = -10 pos=4 else: if x > 20+left_margin and y < int(realheight)-(20+top_margin): xoffset = -10 yoffset = 10 pos=2 else: xoffset = 10 yoffset = -10 pos=6 #self.addtag_overlapping("overlaps",x+xoffset-3, # y+yoffset-3,x+xoffset+3,y+yoffset+3) #if len(self.gettags("overlaps")) != 0: # print self.gettags("overlaps") #self.dtag("overlaps") #print "---------------------------------------------" return [xoffset//10,yoffset//10,xoffset,yoffset,xoffset,yoffset,pos] # smarter way to plot labels: ported from old PLAUT #------------------------------------------------------------------- # Tries to find an empty space to put the # point or branch label from pnts in by searching for three # unchanged entries in mp. The search is outward from the # point to be labelled. If space can't be found the label # will be written out anyway. #------------------------------------------------------------------- def findsp(self,x1,y1,mp): sp1 = self.cget("left_margin") minsx = sp1 maxsx = self.cget("realwidth") - self.cget("right_margin") sp2 = 5 #fontsize sp3 = self.cget("bottom_margin") minsy = sp3 maxsy = self.cget("realheight") - self.cget("top_margin") sp4 = 5 #C--- *x1, y1 ARE SCREEN COORDINATES xi = (x1 - sp1) / sp2 yi = (y1 - sp3) / sp4 pi2 = math.pi * 2.0 start = pi2 / 12.0 npoint = 16 hx = len(mp) - 5 hy = len(mp[0]) - 5 found = False for radius in range(3,71): npoint = npoint + 8 for st in [start + (float(i)/npoint)*pi2 for i in range(npoint)]: xd = int(xi + radius * math.cos(st)) yd = int(yi + radius * math.sin(st)) #------------------------------------------------------- # Organize the search along two sides of # a square of size 2(xd) with pnt xi, yi in its center. #-------------------------------------------------------- if xd <= hx and xd >= 3 and yd <= hy and yd >= 3: found = True for col in mp[xd-2:xd+3]: if max(col[yd-2:yd+3]) == 1: found = False break if found: r1 = (radius + 3) * sp2 ix = x1 + r1 * math.cos(st) iy = y1 + r1 * math.sin(st) if ix>=minsx and ix<=maxsx and iy>=minsy and iy<=maxsy: break found = False if found: break if not found: return [1,1,10,10,11,11,4] #if no empty space for col in mp[xd-2:xd+3]: for i2 in range(yd-1,yd+2): col[i2] = 1 pos = int(st/pi2*8.0 - 0.5) radius = radius * sp2 cosst = math.cos(st) sinst = math.sin(st) d1dist = self.cget("line_width") + 1 xoffd1 = d1dist * cosst yoffd1 = d1dist * sinst xoffd2 = radius * cosst yoffd2 = radius * sinst xofft = (radius + 2) * cosst yofft = (radius + 2) * sinst return [xoffd1,yoffd1,xoffd2,yoffd2,xofft,yofft,pos] def getpos(self,pos): anchor = [ "sw", "s", "se", "e", "ne", "n", "nw", "w", "sw" ] return anchor[pos] #----------------------------------------------------------------------- # Initializes the map array that is # used to label the plotted curves. #----------------------------------------------------------------------- def inarrs(self): sp1 = self.cget("left_margin") sp2 = 5 #fontsize sp3 = self.cget("bottom_margin") sp4 = 5 nx = int(self.cget("realwidth")-sp1-self.cget("right_margin"))//sp2 ny = int(self.cget("realheight")-sp3-self.cget("top_margin"))//sp4 r = ny*[0] return [r[:] for i in range(nx)] #----------------------------------------------------------------------- # Maps the curves in mp array #----------------------------------------------------------------------- def map_curve(self,mp,xys): ixmax = len(mp) iymax = len(mp[0]) [x2,y2] = xys[0] ix2,iy2 = int(x2),int(y2) for xy in xys[1:]: x1,y1 = x2,y2 ix1,iy1 = ix2,iy2 [x2,y2] = xy ix2,iy2 = int(x2),int(y2) if ix1 == ix2 and iy1 == iy2: #optimize common case of short line segments if ix1 >= 0 and ix1 < ixmax and iy1 >= 0 and iy1 < iymax: mp[ix1][iy1] = 1 continue # if we are sure that the line is outside the graph limits we # should skip and save a lot of time if ((ix1 < 0 and ix2 < 0) or (iy1 < 0 and iy2 < 0) or (ix1 >= ixmax and ix2 >= ixmax) or (iy1 >= iymax and iy2 >= iymax)): continue dx = x2 - x1 dy = y2 - y1 index = int(max(abs(dx),abs(dy))) + 1 ilow = 0 ihigh = index if dx != 0: xlim1 = -x1*index/dx xlim2 = (ixmax-x1)*index/dx+1 ilow = max(ilow,min(xlim1,xlim2)) ihigh = min(ihigh,max(xlim1,xlim2)) if dy != 0: ylim1 = -y1*index/dy ylim2 = (iymax-y1)*index/dy+1 ilow = max(ilow,min(ylim1,ylim2)) ihigh = min(ihigh,max(ylim1,ylim2)) for i in range(int(ilow),int(ihigh)): f = float(i)/index ix = int(x1 + f * dx) iy = int(y1 + f * dy) try: mp[ix][iy] = 1 except IndexError: pass def draw(self): self.plotlabels() BasicGrapher.draw(self) self.plotsymbols() def plotsymbols(self): if not self.cget("use_symbols"): return for i, labels in enumerate(self.labels): for label in labels: l = label["symbol"] if l is None: continue data = self.valueToCanvas(label["xy"][:2]) if data is None: continue [x,y] = data if (x < self["minx"] or x > self["maxx"] or y < self["miny"] or y > self["maxy"]): continue c = self.cget("symbol_color") if len(l) <= 3: self.create_text(x,y,font=self.cget("symbol_font"), fill=c,text=l) continue ms = 3 for i, ch in enumerate(l): if ch in string.digits: ms = int(l[i:]) l = l[:i] break if l == "fillcircle": self.create_oval(x-ms,y-ms,x+ms,y+ms,fill=c,outline=c) elif l == "circle": self.create_oval(x-ms,y-ms,x+ms,y+ms,outline=c) elif l == "square": self.create_rectangle(x-ms,y-ms,x+ms,y+ms,outline=c) elif l == "crosssquare": self.create_rectangle(x-ms,y-ms,x+ms,y+ms,outline=c) self.create_line(x-ms,y-ms,x+ms,y+ms,fill=c) self.create_line(x-ms,y+ms,x+ms,y-ms,fill=c) elif l == "fillsquare": self.create_rectangle(x-ms,y-ms,x+ms,y+ms,fill=c,outline=c) # FIXME: No regression tester class InteractiveGrapher(LabeledGrapher): def __init__(self,parent=None,**kw): LabeledGrapher.__init__(self,parent,**kw) def unzoom(self): self.computeXRange() self.computeYRange() self.clear() self.draw() def labelPointWrapper(self,e): #find all objects near the mouse pointer points = self.find_closest(e.x,e.y) #find the first one that has a data_point?? tag point=None curve=None for point in points: #tags associated with the point point_tags = self.gettags(point) for tag in point_tags: tag=tag.split(":") if tag[0] == "data_point": point=int(tag[1]) if tag[0] == "curve": curve=int(tag[1]) if not((point is None) or (curve is None)): label = tkSimpleDialog.askstring("Label","Enter here") self.addLabel(curve,point,label) def printTagWrapper(self,e): theid=self.find("closest",e.x,e.y) print(self.gettags(theid[0])) def printValueWrapper(self,e): self.__printValue((e.x,e.y)) def __printValue(self,val): print(self.canvasToValue(val)) def zoomRubberBand(self,e): self.delete("rubber_band") self.create_polygon(e.x,e.y,e.x,self.zoom_starty, self.zoom_startx,self.zoom_starty, self.zoom_startx,e.y, tags=("rubber_band",),fill="",outline="grey") def zoomWrapperStart(self,e): self.zoom_startx = e.x self.zoom_starty = e.y def zoomWrapperEnd(self,e): tolerance = 5 cx=[self.zoom_startx,e.x] cy=[self.zoom_starty,e.y] cx.sort() cy.sort() if cx[1] - cx[0] > tolerance and cy[1] - cy[0] > tolerance: vx=[0,0] vy=[0,0] # canvas coordinates start at the top left, values coordinates start at bottom left vx[0],vy[0] = self.canvasToValue((cx[0],cy[1])) vx[1],vy[1] = self.canvasToValue((cx[1],cy[0])) self.computeXRange(vx[0],vx[1]) self.computeYRange(vy[0],vy[1]) self.clear() self.draw() # self.config(minx=vx[0],maxx=vx[1],miny=vy[0],maxy=vy[1]) def drawWrapper(self,e): # Note: we should not update self["width"] and self["height"] here, because # those can be 2 or 4 less self._configNoDraw(realwidth=e.width,realheight=e.height) self.configure() self.clear() self.draw() class GUIGrapher(InteractiveGrapher): def __init__(self,parent=None,**kw): InteractiveGrapher.__init__(self,parent,**kw) if not hasattr(self, "tk"): return self.bind("",self.popupMenuWrapper) self.menu=Tkinter.Menu() self.menu.add_radiobutton(label="print value",command=self.printValueBindings) # self.menu.add_radiobutton(label="print tag",command=self.printTagBindings) # self.menu.add_radiobutton(label="label point",command=self.labelPointBindings) self.menu.add_radiobutton(label="zoom",command=self.zoomBindings) self.menu.invoke('zoom') self.menu.add_command(label="Unzoom",command=self.unzoom) self.menu.add_command(label="Postscript",command=self.generatePostscript) self.menu.add_command(label="Configure...",command=self.__interactiveConfigureDialog) self.bind("",self.drawWrapper) def __interactiveConfigureDialog(self): diag = Pmw.Dialog(self,buttons=("Ok","Cancel")) options = sorted([self.configure(key)[0] for key in self.configure() if self._isInternalOption(key)]) self.optionList = Pmw.ScrolledListBox(diag.interior(), items=options, dblclickcommand=self.__updateInteractiveConfigureDialog) self.optionList.pack(side="left") frame = Tkinter.Frame(diag.interior()) frame.pack(side="right") self.optionLabel = Pmw.EntryField(frame, labelpos="w", label_text="Option Name", entry_state=Tkinter.DISABLED) self.optionLabel.pack(side="top") self.valueLabel = Pmw.EntryField(frame, labelpos="w", label_text="Old Value", entry_state=Tkinter.DISABLED) self.valueLabel.pack(side="top") self.valueEntry = Pmw.EntryField(frame, labelpos="w", label_text="New Value", command=self.__modifyOption) self.valueEntry.pack(side="top") def __modifyOption(self): key = self.optionList.getcurselection()[0] if isinstance(self.cget(key), int): self[key] = int(self.valueEntry.get()) elif isinstance(self.cget(key), float): self[key] = float(self.valueEntry.get()) elif isinstance(self.cget(key), str): self[key] = self.valueEntry.get() self.valueLabel.setentry(self.cget(key)) def __updateInteractiveConfigureDialog(self): key = self.optionList.getcurselection()[0] self.optionLabel.setentry(key) self.valueLabel.setentry(self.cget(key)) self.valueEntry.clear() if isinstance(self.cget(key), int): self.valueEntry.configure(validate={"validator":"integer"}) elif isinstance(self.cget(key), float): self.valueEntry.configure(validate={"validator":"real"}) elif isinstance(self.cget(key), str): self.valueEntry.configure(validate={"validator":"alphanumeric"}) def generatePostscript(self,filename=None,pscolormode=None): """ Save the plot as postscript. """ if pscolormode is None: pscolormode=self.cget("ps_colormode") if filename is None: filename = tkFileDialog.asksaveasfilename(defaultextension=".eps",title="Save as Postscript File") self.update() self.postscript(file=filename,colormode=pscolormode) savefig = generatePostscript def printValueBindings(self): self.bind("",self.printValueWrapper) self.unbind("") self.unbind("") def printTagBindings(self): self.bind("",self.printTagWrapper) self.unbind("") self.unbind("") def labelPointBindings(self): self.bind("",self.labelPointWrapper) self.unbind("") self.unbind("") def zoomBindings(self): self.bind("",self.zoomWrapperStart) self.bind("",self.zoomRubberBand) self.bind("",self.zoomWrapperEnd) def popupMenuWrapper(self,e): self.menu.tk_popup(e.x+self.winfo_rootx(),e.y+self.winfo_rooty()) def test(grapher=None): if grapher is None: grapher = GUIGrapher() data = [float(i)*0.1 for i in range(62)] grapher.addArray((data,list(map(math.sin,data)))) grapher.addArray((data,list(map(math.cos,data)))) grapher.addLabel(0,10,"hello") grapher.addLabel(0,30,"world") grapher.pack() grapher.plot() button = Tkinter.Button(text="Quit",command=grapher.quit) button.pack() button.update() print("Press to continue") raw_input() grapher.delAllData() grapher.addArray((data,list(map(math.cos,data)))) grapher.plot() print("Press to continue") raw_input() if __name__=='__main__': test() auto/07p/python/auto/graphics/plotter.py0000750000175000017500000007255713570013207016420 0ustar sksk#! /usr/bin/env python try: from auto.graphics import grapher_mpl as grapher except ImportError: from auto.graphics import grapher print("Using plain TkInter for plotting. You can obtain better quality graphics") print("using matplotlib (http://matplotlib.sf.net).") from auto import parseB from auto import parseS from auto import parseC from auto import AUTOutil import os import gc import sys Axes3D = grapher.Axes3D class plotter(grapher.GUIGrapher): def __init__(self,parent=None,**kw): optionDefaults = {} # The kind of diagram (single solution vs. bifur diagram) optionDefaults["type"] = ("bifurcation",self.__optionCallback) # The X column optionDefaults["bifurcation_x"] = ([0],self.__optionCallback) optionDefaults["solution_x"] = ([-1],self.__optionCallback) # The Y column optionDefaults["bifurcation_y"] = ([1],self.__optionCallback) optionDefaults["solution_y"] = ([0],self.__optionCallback) # The Z column optionDefaults["bifurcation_z"] = (None,self.__optionCallback) optionDefaults["solution_z"] = (None,self.__optionCallback) # The coordinate names optionDefaults["bifurcation_coordnames"] = (None,self.__optionCallback) optionDefaults["solution_indepvarname"] = (None,self.__optionCallback) optionDefaults["solution_coordnames"] = (None,self.__optionCallback) optionDefaults["labelnames"] = (None,self.__optionCallback) # Sets of labels that the user is likely to want to use optionDefaults["label_defaults"] = (None,self.__optionCallback) # Sets of columns that the user is likely to want to use optionDefaults["bifurcation_column_defaults"] = (None,self.__optionCallback) optionDefaults["solution_column_defaults"] = (None,self.__optionCallback) # The index of the solution we wish to draw optionDefaults["index"] = ([0],self.__optionCallback) # The label of the solution we wish to draw optionDefaults["label"] = ([0],self.__optionCallback) # Already parsed data structures optionDefaults["bifurcation_diagram"] = (parseB.parseB(),self.__optionCallback) optionDefaults["solution"] = (parseS.parseS(),self.__optionCallback) optionDefaults["bifurcation_diagram_filename"] = ("",self.__optionCallback) optionDefaults["solution_filename"] = ("",self.__optionCallback) optionDefaults["runner"] = (None,self.__optionCallback) optionDefaults["mark_t"] = (None,self.__optionCallback) optionDefaults["letter_symbols"] = (True,self.__optionCallback) optionDefaults["bifurcation_symbol"] = ("B",self.__optionCallback) optionDefaults["limit_point_symbol"] = ("L",self.__optionCallback) optionDefaults["hopf_symbol"] = ("H",self.__optionCallback) optionDefaults["zero_hopf_symbol"] = ("ZH",self.__optionCallback) optionDefaults["bogdanov_takens_symbol"] = ("BT",self.__optionCallback) optionDefaults["cusp_symbol"] = ("CP",self.__optionCallback) optionDefaults["generalized_hopf_symbol"]= ("GH",self.__optionCallback) optionDefaults["1_1_resonance_symbol"] = ("R1",self.__optionCallback) optionDefaults["1_2_resonance_symbol"] = ("R2",self.__optionCallback) optionDefaults["1_3_resonance_symbol"] = ("R3",self.__optionCallback) optionDefaults["1_4_resonance_symbol"] = ("R4",self.__optionCallback) optionDefaults["fold_flip_symbol"] = ("LPD",self.__optionCallback) optionDefaults["fold_torus_symbol"] = ("LTR",self.__optionCallback) optionDefaults["flip_torus_symbol"] = ("PTR",self.__optionCallback) optionDefaults["torus_torus_symbol"] = ("TTR",self.__optionCallback) optionDefaults["period_doubling_symbol"] = ("D",self.__optionCallback) optionDefaults["torus_symbol"] = ("T",self.__optionCallback) optionDefaults["user_point_symbol"] = ("U",self.__optionCallback) optionDefaults["error_symbol"] = ("X",self.__optionCallback) optionDefaults["ps_colormode"] = ("color",self.__optionCallback) optionDefaults["stability"] = (False,self.__optionCallback) optionDefaults["coloring_method"] = ("curve",self.__optionCallback) parser = AUTOutil.getAUTORC("AUTO_plotter") optionDefaultsRC = {} c = parseC.parseC() for option in parser.options("AUTO_plotter"): try: optionDefaultsRC[option] = self.parseoption( option,parser.get("AUTO_plotter",option),c) except: optionDefaultsRC[option] = self.parseoption( option,parser.get("AUTO_plotter",option,raw=True),c) # Let these override the RC options, if specified. for key in ["hide","xlabel","ylabel","zlabel"]: if key in kw: optionDefaultsRC[key] = kw[key] self.__needsPlot = None grapher.GUIGrapher.__init__(self,parent,**optionDefaultsRC) self.addOptions(**optionDefaults) self.addRCOptions(**optionDefaultsRC) for options in [optionDefaultsRC, kw]: if "letter_symbols" in options: self.__optionCallback("letter_symbols", options["letter_symbols"], options) del options["letter_symbols"] plotter._configNoDraw(self,**optionDefaultsRC) plotter._configNoDraw(self,**kw) self._plotNoDraw() self.__needsPlot = None for coord in 'x', 'y', 'z': if "min"+coord not in kw or "max"+coord not in kw: self.computeRange(coord,kw.get("min"+coord), kw.get("max"+coord)) grapher.GUIGrapher.plot(self) def parselist(self,option,v,c,sep): quote = ' ' i = 0 vlist = [] level = 0 for j, ch in enumerate(v): if ch == '[' and level == 0 and option[-9:] == "_defaults": level += 1 vlist1 = [] i = j+1 continue if level == 1 and quote == ' ' and ch == ']': s = v[i:j] i = j+1 elif j == len(v) - 1: s = v[i:] elif ch in sep and quote == ' ': s = v[i:j] i = j+1 else: if quote == ' ': if ch in ['"',"'"]: quote = ch elif ch == quote: quote = ' ' continue s = s.strip() if len(s) == 0 or s[0] not in ['"',"'"]: try: int(s) except ValueError: s = "'"+s+"'" if level == 1: vlist1.append(s) if ch == ']': level -= 1 vlist1 = c.scanvalue("["+",".join(vlist1)+"]")[0] for i1, l1 in enumerate(vlist1): try: vlist1[i1] = int(l1) except ValueError: pass vlist.append(vlist1) elif option[-9:] != "_defaults": vlist.append(s) if option[-9:] == "_defaults": return vlist v = c.scanvalue("["+",".join(vlist)+"]")[0] for i, l in enumerate(v): try: v[i] = int(l) except ValueError: pass return v def parseoption(self,option,v,c): special = {'None': None, 'True': True, 'False': False, 'Yes': True, 'No': False} i = 0 quoted = False while i < len(v) and v[i] in ['"',"'"]: q = v[i] # look for endquote j = v.find(q,i+1) if j < 0: break # remove quotes quoted = True v = v[:i]+v[i+1:j]+v[j+1:] i = j - 1 # remove comment after last quote i = v.find('#',i+1) if i >= 0: v = v[:i].strip() if quoted: return v w = v.capitalize() if w in special: v = special[w] elif (option[-2:] in ['_x','_y','_z'] or option[-9:] == "_defaults" or option[-11:] == "_coordnames" or option in ["label","index","dashes","labelnames"] or (option[0] == 'd' and len(option) == 2)): # convert to list, quote args if not numbers, # then use the same method as for constant files if ((option[0] == 'd' and len(option) == 2) or option == "labelnames"): brackets = ['{'] sep = [',',':'] else: brackets = ['[','('] sep = [','] if len(v) > 0 and v[0] in brackets: endbracket = {'{':'}','[':']','(':')'}[v[0]] v = v[1:] if len(v) > 0 and v[-1] == endbracket: v = v[:-1] v = self.parselist(option,v,c,sep) if ((option[0] == 'd' and len(option) == 2) or option == "labelnames"): v = dict([(v[i],v[i+1]) for i in range(0,len(v),2)]) if option != "labelnames": # Convert "True"/"False"/"yes"/"no" to True/False for k in v: try: w = v[k].capitalize() if w in special: v[k] = special[w] except AttributeError: pass else: # simple value try: v = int(v) except ValueError: try: v = float(v) except ValueError: pass return v def config(self,cnf=None,**kw): rval = self._configNoDraw(cnf,**kw) if isinstance(cnf, str) or (cnf is None and not kw): return rval if 'auto.graphics.grapher_mpl' not in sys.modules and not hasattr(self, "tk"): # plotting disabled return if self.__needsPlot: self._plotNoDraw() self.__needsPlot = None self.clear() self.computeXRange() self.computeYRange() self.computeZRange() grapher.GUIGrapher.plot(self) else: self.clear() self.draw() self.update() configure=config def _configNoDraw(self,cnf=None,**kw): return grapher.GUIGrapher._configNoDraw(self,cnf,**kw) _configureNoDraw = _configNoDraw def __optionCallback(self,key,value,options): gc.collect() if key == "runner": self.cget("bifurcation_diagram").read(value.getBifurcation_diagram()) self.cget("solution").read(value.getSolution()) elif key == "bifurcation_diagram_filename": try: self.cget("bifurcation_diagram").readFilename(value) except IOError: pass elif key == "solution_filename": try: self.cget("solution").readFilename(value) except IOError: pass if self.cget("label") != [0]: self.__optionCallback("label",self.cget("label"),options) elif key == "solution": if self.cget("label") != [0]: self.__optionCallback("label",self.cget("label"),options) elif key == "label": labels = self.cget("solution").getLabels() if not isinstance(value, (list, tuple)): value = [value] if value in [["all"], ["All"]]: value = labels options["index"] = [j for v in value for j, l in enumerate(labels) if l == v] elif key == "index": labels = self.cget("solution").getLabels() if not isinstance(value, (list, tuple)): value = [value] options["label"] = [labels[v] for v in value] elif key in ["bifurcation_x","bifurcation_y","bifurcation_z", "solution_x","solution_y","solution_z"]: if not isinstance(value, (list, tuple)): value = [value] elif key == "letter_symbols": keys = ["bifurcation_symbol", "limit_point_symbol", "hopf_symbol", "period_doubling_symbol","torus_symbol", "user_point_symbol", "error_symbol", "1_1_resonance_symbol", "1_2_resonance_symbol", "1_3_resonance_symbol", "1_4_resonance_symbol", "bogdanov_takens_symbol", "cusp_symbol", "generalized_hopf_symbol", "zero_hopf_symbol", "fold_flip_symbol", "fold_torus_symbol", "flip_torus_symbol", "torus_torus_symbol"] if value: values = ["B", "L", "H", "D", "T", "U", "X", "R1", "R2", "R3", "R4", "BT", "CP", "GH", "ZH", "LPD", "LTR", "PTR", "TTR"] else: values = ["square", None, "fillsquare", "diamond", "filldiamond", None, None, "filldiamond", "filldiamond", "filldiamond", "filldiamond", "circle", None, "triangle", "doubletriangle", "doubletriangle", "doubletriangle", "doubletriangle", "doubletriangle"] options.update(dict(zip(keys, values))) # We only recreate the data if one of the above options gets set # We can't just recreate the data for any option since: # 1) It is inefficient # 2) The range gets recomputed when we create new data, so # minx, miny, maxx, and maxy all never get used. self.__needsPlot = "yes" def _plotNoDraw(self): self.delAllData() ty = self.cget("type") columns = [self.cget(ty+"_x"),self.cget(ty+"_y"),self.cget(ty+"_z")] for coord in range(3): if (type(columns[coord]) != type([]) and type(columns[coord]) != type(())): columns[coord] = [columns[coord]] names, columns = self.__makeaxistitles(*columns) m = max([len(column) for column in columns]) for coord, column in enumerate(columns): if column is not None and len(column) == 1: columns[coord] = column * m plot = True if ty == "bifurcation": sol = self.cget(ty+"_diagram") else: sol = self.cget(ty) if ty == "bifurcation" and len(sol) and len(sol[0]): self.__plot7(*columns) elif ty == "solution" and len(sol) > 0: self.__plot8(*columns) else: plot = False if plot: label = {} for coord in "x","y","z": label[coord] = self[coord+"label"] if self.config(coord+"label")[3] is None: namescoord = names[{"x": 0, "y": 1, "z": 2}[coord]] if namescoord is None: label["z"] = None else: label[coord] = ", ".join(namescoord) grapher.GUIGrapher._configNoDraw(self,xlabel=label["x"], ylabel=label["y"], zlabel=label["z"]) def plot(self): self._plotNoDraw() self.clear() self.computeXRange() self.computeYRange() self.computeZRange() grapher.GUIGrapher.plot(self) self.draw() def __makeaxistitles(self,xcolumns,ycolumns,zcolumns): # parse coordinate names from bifurcation diagram/solution # then construct the titles from these names ty = self.cget("type") indepvarname = None if ty == "bifurcation": solution = self.cget(ty+"_diagram") # use the "branches" member for parseB objects solution = getattr(solution,"branches",solution) else: solution = self.cget(ty) parsecoordnames = [] # first go by column for s in solution: # check for any "MAX"-style member and replace, e.g., U(1) by # MAX U(1) if ty == "bifurcation": for i in range(min(len(parsecoordnames),len(s.coordnames))): name = s.coordnames[i] namelist = name.split(None,1) if (len(namelist) > 1 and namelist[0] in ["MAX", "MIN", "INTEGRAL", "L2-NORM"] and parsecoordnames[i] == namelist[1].strip()): parsecoordnames[i] = name.strip() elif indepvarname is None: indepvarname = s.indepvarname if len(s.coordnames) > len(parsecoordnames): parsecoordnames.extend([name.strip() for name in s.coordnames[len(parsecoordnames):]]) # then add anything not already there for s in solution: for name in s.coordnames: sname = name.strip() if sname not in parsecoordnames: parsecoordnames.append(sname) # override coordnames with user/autorc provided ones if ty == "solution": if self.cget("solution_indepvarname"): indepvarname = self.cget("solution_indepvarname") elif indepvarname is None: indepvarname = "t" coordnames = self.cget(ty+"_coordnames") or [] coordnames = coordnames[:] # but if that list is too short, extend it if len(coordnames) < len(parsecoordnames): coordnames.extend(parsecoordnames[len(coordnames):]) self._coordnames = coordnames # construct translation dictionary for unames/parnames in autorc labelnames = self.cget("labelnames") or {} labelnames = labelnames.copy() for key in list(labelnames): for prefix in "MIN ", "MAX ", "INTEGRAL ", "L2-NORM ": if prefix+key not in labelnames: labelnames[prefix+key] = prefix+labelnames[key] # construct titles names = [["Error"],["Error"]] lx = len(xcolumns) ly = len(ycolumns) lz = len(zcolumns) if lx == 1: lx = max(ly, lz) if ly == 1: ly = max(lx, lz) if lz == 1: lz = max(lx, ly) if (len(solution) > 0 and lx == ly == lz and (ty == "solution" or len(solution[0]) > 0)): names = [[],[],[]] for j in range(3): columns = [xcolumns,ycolumns,zcolumns][j] for col in columns: if col is None: names[j] = None continue if type(col) == type(1): # numerical column: check limits if indepvarname is not None and col == -1: col = indepvarname else: for s in solution: if col < len(s.coordnames): col = coordnames[col] break if type(col) == type(1): print("The %s-coordinate (set to column %s) " "is out of range"%(["x","y","z"][j],col)) col = "Error" elif col not in coordnames and (indepvarname is None or col != indepvarname): print("Unknown column name: %s"%(col)) col = "Error" names[j].append(labelnames.get(col, col)) # translate xcolumns/ycolumns to use parsed coordnames ucoordnames = self.cget(ty+"_coordnames") or [] cols = [xcolumns,ycolumns,zcolumns] if ucoordnames != []: cols = [] for columns in [xcolumns,ycolumns,zcolumns]: ncol = [] for col in columns: try: indx = ucoordnames.index(col) col = parsecoordnames[indx] except (ValueError, TypeError): pass ncol.append(col) cols.append(ncol) return names,cols def __plot7branch(self,branch,xcolumns,ycolumns,zcolumns): symbollist = [ [[1,6], "bifurcation_symbol"], [[2,5], "limit_point_symbol"], [[3], "hopf_symbol"], [[-1], "bogdanov_takens_symbol"], [[-2], "cusp_symbol"], [[-32], "generalized_hopf_symbol"], [[-3], "zero_hopf_symbol"], [[7], "period_doubling_symbol"], [[8], "torus_symbol"], [[-5], "1_1_resonance_symbol"], [[-6], "1_2_resonance_symbol"], [[-7], "1_3_resonance_symbol"], [[-8], "1_4_resonance_symbol"], [[23,83], "fold_torus_symbol"], [[77,87], "flip_torus_symbol"], [[28,78], "fold_flip_symbol"], [[88], "torus_torus_symbol"], [[-4], "user_point_symbol"]] specialsymbols = [-32,23,83,77,87,28,78,88] dp = self.cget("stability") coordnames = branch.coordnames for j in range(len(xcolumns)): labels = [] for i,l in branch.labels.sortByIndex(): label = None for k in l: v = l[k] if "LAB" in v: label = v break if label is None: continue lab = label["LAB"] TYnumber = label["TY number"] if TYnumber not in specialsymbols: if TYnumber>=0: TYnumber=TYnumber%10 else: TYnumber=-((-TYnumber)%10) text = "" if lab != 0: text = str(lab) symbol = None for item in symbollist: if TYnumber in item[0]: symbol = item[1] if symbol is not None: symbol = self.cget(symbol) elif TYnumber not in [0,4,9]: symbol = self.cget("error_symbol") labels.append([i, text, symbol]) xycols = [] for col in [xcolumns[j],ycolumns[j],zcolumns[j]]: if col is None: break if type(col) != type(1): try: col = coordnames.index(col) except ValueError: # check if we have an item that starts with # MAX, MIN, INTEGRAL, or L2-NORM # in that case also plot U(1) if given MAX U(1) namelist = col.split(None,1) if len(namelist) < 2 or (namelist[0] not in ["MAX", "MIN", "INTEGRAL", "L2-NORM"]): break try: col = coordnames.index(namelist[1]) except ValueError: break try: xy = branch.coordarray[col] except IndexError: break xycols.append(xy) if len(xycols) < 2 or (zcolumns[j] is not None and len(xycols) < 3): continue [x,y] = xycols[:2] if len(xycols) == 3: z = xycols[2] else: z = None if self.cget("coloring_method") == "branch": color = abs(branch.BR)-1 elif self.cget("coloring_method") == "type": color = branch.TY else: color = None if dp: #look at stability: newsect = 1 old = 0 stability = branch.stability() addedlabels = [] for pt in stability: abspt = abs(pt) if abspt > 1 or pt == stability[-1]: if z is None: v = x[old:abspt],y[old:abspt] else: v = x[old:abspt],y[old:abspt],z[old:abspt] self.addArrayNoDraw(v,newsect,color,stable=pt<0) for label in labels: if (old <= label[0] and label[0] < abspt and label not in addedlabels): self.addLabel(len(self)-1, label[0] - old, label[1], label[2]) addedlabels.append(label) old = abspt - 1 newsect = 0 else: if z is None: self.addArrayNoDraw((x,y),1,color) else: self.addArrayNoDraw((x,y,z),1,color) for label in labels: self.addLabel(len(self)-1, *label) def __plot7(self,xcolumns,ycolumns,zcolumns): self.delAllData() solution = self.cget("bifurcation_diagram") branches = getattr(solution,"branches",solution) if len(xcolumns) == len(ycolumns) == len(zcolumns): for branch in branches: self.__plot7branch(branch,xcolumns,ycolumns,zcolumns) def __plot8solution(self,sol,index,xcolumns,ycolumns,zcolumns): indepvarname = sol.indepvarname tm = sol[indepvarname] label = sol["Label"] if self.cget("solution_indepvarname"): indepvarname = self.cget("solution_indepvarname") coordnames = sol.coordnames if self.cget("coloring_method") == "branch": color = sol["BR"]-1 elif self.cget("coloring_method") == "type": color = sol["TY number"] else: color = None for j in range(len(xcolumns)): labels = [] xycols = [] for col in [xcolumns[j],ycolumns[j],zcolumns[j]]: if type(col) != type(1): if indepvarname == col: col = -1 else: try: col = coordnames.index(col) except ValueError: break if col == -1: xy = tm else: try: xy = sol.coordarray[col] except IndexError: break xycols.append(xy) if len(xycols) < 2: continue [x,y] = xycols[:2] z = None if len(xycols) == 3: z = xycols[2] if not(self.cget("mark_t") is None): for i in range(len(tm)): if i != 0 and tm[i-1] <= self.cget("mark_t") < tm[i]: labels.append({"index": i, "text": "", "symbol": "fillcircle"}) if len(tm) <= 15: index = 1 if len(tm) <= 1: index = 0 labels.append({"index": index, "text": str(label), "symbol": ""}) # Call the base class config if len(x) > 0: if z is None: self.addArrayNoDraw((x,y),color=color) else: self.addArrayNoDraw((x,y,z),color=color) for lab in labels: self.addLabel(len(self)-1, lab["index"], lab["text"], lab["symbol"]) index = index + 10 if index > len(tm): index = 14 return index def __plot8(self,xcolumns,ycolumns,zcolumns): self.delAllData() solution = self.cget("solution") if len(xcolumns) == len(ycolumns) == len(zcolumns): index = 9 for ind in self.cget("index"): sol = solution.getIndex(ind) index = self.__plot8solution(sol,index,xcolumns,ycolumns, zcolumns) def test(): from auto import parseB from auto import parseS import sys foo = plotter(bifurcation_diagram_filename="../test_data/fort.7", solution_filename="../test_data/fort.8") foo.plot() foo.pack() foo.update() print("Hit return to continue") raw_input() foo.clear() foo.update() print("Hit return to continue") raw_input() foo.clear() foo.config(type="solution",label=[6]) foo.plot() foo.update() print("Hit return to continue") raw_input() foo.clear() foo.config(index=[3]) foo.plot() foo.update() print("Hit return to continue") raw_input() if __name__ == "__main__": test() auto/07p/python/auto/graphics/Pmw.py0000750000175000017500000121236413570013207015463 0ustar sksk from auto.graphics import PmwColor as Color from auto.graphics import PmwBlt as Blt ### Loader functions: _VERSION = '1.3' def setversion(version): if version != _VERSION: raise ValueError('Dynamic versioning not available') def setalphaversions(*alpha_versions): if alpha_versions != (): raise ValueError('Dynamic versioning not available') def version(alpha = 0): if alpha: return () else: return _VERSION def installedversions(alpha = 0): if alpha: return () else: return (_VERSION,) ###################################################################### ### File: PmwBase.py # Pmw megawidget base classes. # This module provides a foundation for building megawidgets. It # contains the MegaArchetype class which manages component widgets and # configuration options. Also provided are the MegaToplevel and # MegaWidget classes, derived from the MegaArchetype class. The # MegaToplevel class contains a Tkinter Toplevel widget to act as the # container of the megawidget. This is used as the base class of all # megawidgets that are contained in their own top level window, such # as a Dialog window. The MegaWidget class contains a Tkinter Frame # to act as the container of the megawidget. This is used as the base # class of all other megawidgets, such as a ComboBox or ButtonBox. # # Megawidgets are built by creating a class that inherits from either # the MegaToplevel or MegaWidget class. try: long except NameError: long = int import os import sys import traceback try: import Tkinter except ImportError: import tkinter as Tkinter # Python 3 # Special values used in index() methods of several megawidgets. END = ['end'] SELECT = ['select'] DEFAULT = ['default'] # Constant used to indicate that an option can only be set by a call # to the constructor. INITOPT = ['initopt'] _DEFAULT_OPTION_VALUE = ['default_option_value'] _useTkOptionDb = 0 # Symbolic constants for the indexes into an optionInfo list. _OPT_DEFAULT = 0 _OPT_VALUE = 1 _OPT_FUNCTION = 2 # Stacks _busyStack = [] # Stack which tracks nested calls to show/hidebusycursor (called # either directly or from activate()/deactivate()). Each element # is a dictionary containing: # 'newBusyWindows' : List of windows which had busy_hold called # on them during a call to showbusycursor(). # The corresponding call to hidebusycursor() # will call busy_release on these windows. # 'busyFocus' : The blt _Busy window which showbusycursor() # set the focus to. # 'previousFocus' : The focus as it was when showbusycursor() # was called. The corresponding call to # hidebusycursor() will restore this focus if # the focus has not been changed from busyFocus. _grabStack = [] # Stack of grabbed windows. It tracks calls to push/popgrab() # (called either directly or from activate()/deactivate()). The # window on the top of the stack is the window currently with the # grab. Each element is a dictionary containing: # 'grabWindow' : The window grabbed by pushgrab(). The # corresponding call to popgrab() will release # the grab on this window and restore the grab # on the next window in the stack (if there is one). # 'globalMode' : True if the grabWindow was grabbed with a # global grab, false if the grab was local # and 'nograb' if no grab was performed. # 'previousFocus' : The focus as it was when pushgrab() # was called. The corresponding call to # popgrab() will restore this focus. # 'deactivateFunction' : # The function to call (usually grabWindow.deactivate) if # popgrab() is called (usually from a deactivate() method) # on a window which is not at the top of the stack (that is, # does not have the grab or focus). For example, if a modal # dialog is deleted by the window manager or deactivated by # a timer. In this case, all dialogs above and including # this one are deactivated, starting at the top of the # stack. # Note that when dealing with focus windows, the name of the Tk # widget is used, since it may be the '_Busy' window, which has no # python instance associated with it. #============================================================================= # Functions used to forward methods from a class to a component. # Fill in a flattened method resolution dictionary for a class (attributes are # filtered out). Flattening honours the MI method resolution rules # (depth-first search of bases in order). The dictionary has method names # for keys and functions for values. def __methodDict(cls, dict): # the strategy is to traverse the class in the _reverse_ of the normal # order, and overwrite any duplicates. baseList = list(cls.__bases__) baseList.reverse() # do bases in reverse order, so first base overrides last base for super in baseList: __methodDict(super, dict) # do my methods last to override base classes for key, value in cls.__dict__.items(): # ignore class attributes if isinstance(value, type(__methodDict)): dict[key] = value def __methods(cls): # Return all method names for a class. # Return all method names for a class (attributes are filtered # out). Base classes are searched recursively. dict = {} __methodDict(cls, dict) return dict.keys() # Function body to resolve a forwarding given the target method name and the # attribute name. The resulting lambda requires only self, but will forward # any other parameters. __stringBody = ( 'def %(method)s(this, *args, **kw): return ' + 'this.%(attribute)s.%(method)s(*args, **kw)') # Get a unique id __counter = 0 def __unique(): global __counter __counter = __counter + 1 return str(__counter) # Function body to resolve a forwarding given the target method name and the # index of the resolution function. The resulting lambda requires only self, # but will forward any other parameters. The target instance is identified # by invoking the resolution function. __funcBody = ( 'def %(method)s(this, *args, **kw): return ' + 'this.%(forwardFunc)s().%(method)s(*args, **kw)') def forwardmethods(fromClass, toClass, toPart, exclude = ()): # Forward all methods from one class to another. # Forwarders will be created in fromClass to forward method # invocations to toClass. The methods to be forwarded are # identified by flattening the interface of toClass, and excluding # methods identified in the exclude list. Methods already defined # in fromClass, or special methods with one or more leading or # trailing underscores will not be forwarded. # For a given object of class fromClass, the corresponding toClass # object is identified using toPart. This can either be a String # denoting an attribute of fromClass objects, or a function taking # a fromClass object and returning a toClass object. # Example: # class MyClass: # ... # def __init__(self): # ... # self.__target = TargetClass() # ... # def findtarget(self): # return self.__target # forwardmethods(MyClass, TargetClass, '__target', ['dangerous1', 'dangerous2']) # # ...or... # forwardmethods(MyClass, TargetClass, MyClass.findtarget, # ['dangerous1', 'dangerous2']) # In both cases, all TargetClass methods will be forwarded from # MyClass except for dangerous1, dangerous2, special methods like # __str__, and pre-existing methods like findtarget. # Allow an attribute name (String) or a function to determine the instance if not isinstance(toPart, str): # check that it is something like a function if hasattr(toPart, '__call__'): # If a method is passed, use the function within it if hasattr(toPart, 'im_func'): toPart = toPart.im_func # After this is set up, forwarders in this class will use # the forwarding function. The forwarding function name is # guaranteed to be unique, so that it can't be hidden by subclasses forwardName = '__fwdfunc__' + __unique() fromClass.__dict__[forwardName] = toPart # It's not a valid type else: raise TypeError('toPart must be attribute name, function or method') # get the full set of candidate methods dict = {} __methodDict(toClass, dict) # discard special methods for ex in list(dict): if ex[:1] == '_' or ex[-1:] == '_': del dict[ex] # discard dangerous methods supplied by the caller for ex in exclude: if ex in dict: del dict[ex] # discard methods already defined in fromClass for ex in __methods(fromClass): if ex in dict: del dict[ex] for method, func in dict.items(): d = {'method': method, 'func': func} if isinstance(toPart, str): execString = \ __stringBody % {'method' : method, 'attribute' : toPart} else: execString = \ __funcBody % {'forwardFunc' : forwardName, 'method' : method} exec(execString, d) # this creates a method setattr(fromClass, method, d[method]) #============================================================================= def setgeometryanddeiconify(window, geom): # To avoid flashes on X and to position the window correctly on NT # (caused by Tk bugs). if os.name == 'nt' or \ (os.name == 'posix' and sys.platform[:6] == 'cygwin'): # Require overrideredirect trick to stop window frame # appearing momentarily. redirect = window.overrideredirect() if not redirect: window.overrideredirect(1) window.deiconify() if geom is not None: window.geometry(geom) # Call update_idletasks to ensure NT moves the window to the # correct position it is raised. window.update_idletasks() window.tkraise() if not redirect: window.overrideredirect(0) else: if geom is not None: window.geometry(geom) # Problem!? Which way around should the following two calls # go? If deiconify() is called first then I get complaints # from people using the enlightenment or sawfish window # managers that when a dialog is activated it takes about 2 # seconds for the contents of the window to appear. But if # tkraise() is called first then I get complaints from people # using the twm window manager that when a dialog is activated # it appears in the top right corner of the screen and also # takes about 2 seconds to appear. #window.tkraise() # Call update_idletasks to ensure certain window managers (eg: # enlightenment and sawfish) do not cause Tk to delay for # about two seconds before displaying window. #window.update_idletasks() #window.deiconify() window.deiconify() if window.overrideredirect(): # The window is not under the control of the window manager # and so we need to raise it ourselves. window.tkraise() #============================================================================= class MegaArchetype: # Megawidget abstract root class. # This class provides methods which are inherited by classes # implementing useful bases (this class doesn't provide a # container widget inside which the megawidget can be built). def __init__(self, parent = None, hullClass = None): # Mapping from each megawidget option to a list of information # about the option # - default value # - current value # - function to call when the option is initialised in the # call to initialiseoptions() in the constructor or # modified via configure(). If this is INITOPT, the # option is an initialisation option (an option that can # be set by the call to the constructor but can not be # used with configure). # This mapping is not initialised here, but in the call to # defineoptions() which precedes construction of this base class. # # self._optionInfo = {} # Mapping from each component name to a tuple of information # about the component. # - component widget instance # - configure function of widget instance # - the class of the widget (Frame, EntryField, etc) # - cget function of widget instance # - the name of the component group of this component, if any self.__componentInfo = {} # Mapping from alias names to the names of components or # sub-components. self.__componentAliases = {} # Contains information about the keywords provided to the # constructor. It is a mapping from the keyword to a tuple # containing: # - value of keyword # - a boolean indicating if the keyword has been used. # A keyword is used if, during the construction of a megawidget, # - it is defined in a call to defineoptions() or addoptions(), or # - it references, by name, a component of the megawidget, or # - it references, by group, at least one component # At the end of megawidget construction, a call is made to # initialiseoptions() which reports an error if there are # unused options given to the constructor. # # After megawidget construction, the dictionary contains # keywords which refer to a dynamic component group, so that # these components can be created after megawidget # construction and still use the group options given to the # constructor. # # self._constructorKeywords = {} # List of dynamic component groups. If a group is included in # this list, then it not an error if a keyword argument for # the group is given to the constructor or to configure(), but # no components with this group have been created. # self._dynamicGroups = () if hullClass is None: self._hull = None else: if parent is None: parent = Tkinter._default_root # Create the hull. self._hull = self.createcomponent('hull', (), None, hullClass, (parent,)) _hullToMegaWidget[self._hull] = self if _useTkOptionDb: # Now that a widget has been created, query the Tk # option database to get the default values for the # options which have not been set in the call to the # constructor. This assumes that defineoptions() is # called before the __init__(). option_get = self.option_get _VALUE = _OPT_VALUE _DEFAULT = _OPT_DEFAULT for name, info in self._optionInfo.items(): value = info[_VALUE] if value is _DEFAULT_OPTION_VALUE: resourceClass = name[0].upper() + name[1:] value = option_get(name, resourceClass) if value != '': try: # Convert the string to int/float/tuple, etc value = eval(value, {'__builtins__': {}}) except: pass info[_VALUE] = value else: info[_VALUE] = info[_DEFAULT] def destroy(self): # Clean up optionInfo in case it contains circular references # in the function field, such as self._settitle in class # MegaToplevel. self._optionInfo = {} if self._hull is not None: del _hullToMegaWidget[self._hull] self._hull.destroy() #====================================================================== # Methods used (mainly) during the construction of the megawidget. def defineoptions(self, keywords, optionDefs, dynamicGroups = ()): # Create options, providing the default value and the method # to call when the value is changed. If any option created by # base classes has the same name as one in , the # base class's value and function will be overriden. # This should be called before the constructor of the base # class, so that default values defined in the derived class # override those in the base class. if not hasattr(self, '_constructorKeywords'): # First time defineoptions has been called. tmp = {} for option, value in keywords.items(): tmp[option] = [value, 0] self._constructorKeywords = tmp self._optionInfo = {} self._initialiseoptions_counter = 0 self._initialiseoptions_counter = self._initialiseoptions_counter + 1 if not hasattr(self, '_dynamicGroups'): self._dynamicGroups = () self._dynamicGroups = self._dynamicGroups + tuple(dynamicGroups) self.addoptions(optionDefs) def addoptions(self, optionDefs): # Add additional options, providing the default value and the # method to call when the value is changed. See # "defineoptions" for more details # optimisations: optionInfo = self._optionInfo optionInfo_has_key = optionInfo.__contains__ keywords = self._constructorKeywords keywords_has_key = keywords.__contains__ FUNCTION = _OPT_FUNCTION for name, default, function in optionDefs: if '_' not in name: # The option will already exist if it has been defined # in a derived class. In this case, do not override the # default value of the option or the callback function # if it is not None. if not optionInfo_has_key(name): if keywords_has_key(name): value = keywords[name][0] optionInfo[name] = [default, value, function] del keywords[name] else: if _useTkOptionDb: optionInfo[name] = \ [default, _DEFAULT_OPTION_VALUE, function] else: optionInfo[name] = [default, default, function] elif optionInfo[name][FUNCTION] is None: optionInfo[name][FUNCTION] = function else: # This option is of the form "component_option". If this is # not already defined in self._constructorKeywords add it. # This allows a derived class to override the default value # of an option of a component of a base class. if not keywords_has_key(name): keywords[name] = [default, 0] def createcomponent(self, componentName, componentAliases, componentGroup, widgetClass, *widgetArgs, **kw): # Create a component (during construction or later). if componentName in self.__componentInfo: raise ValueError('Component "%s" already exists' % componentName) if '_' in componentName: raise ValueError('Component name "%s" must not contain "_"' % componentName) if hasattr(self, '_constructorKeywords'): keywords = self._constructorKeywords else: keywords = {} for alias, component in componentAliases: # Create aliases to the component and its sub-components. index = component.find('_') if index < 0: self.__componentAliases[alias] = (component, None) else: mainComponent = component[:index] subComponent = component[(index + 1):] self.__componentAliases[alias] = (mainComponent, subComponent) # Remove aliases from the constructor keyword arguments by # replacing any keyword arguments that begin with *alias* # with corresponding keys beginning with *component*. alias = alias + '_' aliasLen = len(alias) for option in list(keywords): if len(option) > aliasLen and option[:aliasLen] == alias: newkey = component + '_' + option[aliasLen:] keywords[newkey] = keywords[option] del keywords[option] componentPrefix = componentName + '_' nameLen = len(componentPrefix) for option in list(keywords): if len(option) > nameLen and option[:nameLen] == componentPrefix: # The keyword argument refers to this component, so add # this to the options to use when constructing the widget. kw[option[nameLen:]] = keywords[option][0] del keywords[option] else: # Check if this keyword argument refers to the group # of this component. If so, add this to the options # to use when constructing the widget. Mark the # keyword argument as being used, but do not remove it # since it may be required when creating another # component. index = option.find('_') if index >= 0 and componentGroup == option[:index]: rest = option[(index + 1):] kw[rest] = keywords[option][0] keywords[option][1] = 1 if 'pyclass' in kw: widgetClass = kw['pyclass'] del kw['pyclass'] if widgetClass is None: return None if len(widgetArgs) == 1 and isinstance(widgetArgs[0], tuple): # Arguments to the constructor can be specified as either # multiple trailing arguments to createcomponent() or as a # single tuple argument. widgetArgs = widgetArgs[0] widget = widgetClass(*widgetArgs, **kw) componentClass = widget.__class__.__name__ self.__componentInfo[componentName] = (widget, widget.configure, componentClass, widget.cget, componentGroup) return widget def destroycomponent(self, name): # Remove a megawidget component. # This command is for use by megawidget designers to destroy a # megawidget component. self.__componentInfo[name][0].destroy() del self.__componentInfo[name] def createlabel(self, parent, childCols = 1, childRows = 1): labelpos = self['labelpos'] labelmargin = self['labelmargin'] if labelpos is None: return label = self.createcomponent('label', (), None, Tkinter.Label, (parent,)) if labelpos[0] in 'ns': # vertical layout if labelpos[0] == 'n': row = 0 margin = 1 else: row = childRows + 3 margin = row - 1 label.grid(column=2, row=row, columnspan=childCols, sticky=labelpos) parent.grid_rowconfigure(margin, minsize=labelmargin) else: # horizontal layout if labelpos[0] == 'w': col = 0 margin = 1 else: col = childCols + 3 margin = col - 1 label.grid(column=col, row=2, rowspan=childRows, sticky=labelpos) parent.grid_columnconfigure(margin, minsize=labelmargin) def initialiseoptions(self, dummy = None): self._initialiseoptions_counter = self._initialiseoptions_counter - 1 if self._initialiseoptions_counter == 0: unusedOptions = [] keywords = self._constructorKeywords for name in keywords: used = keywords[name][1] if not used: # This keyword argument has not been used. If it # does not refer to a dynamic group, mark it as # unused. index = name.find('_') if index < 0 or name[:index] not in self._dynamicGroups: unusedOptions.append(name) if len(unusedOptions) > 0: if len(unusedOptions) == 1: text = 'Unknown option "' else: text = 'Unknown options "' raise KeyError(text + ', '.join(unusedOptions) + \ '" for ' + self.__class__.__name__) # Call the configuration callback function for every option. FUNCTION = _OPT_FUNCTION for info in self._optionInfo.values(): func = info[FUNCTION] if func is not None and func is not INITOPT: func() #====================================================================== # Method used to configure the megawidget. def configure(self, option=None, **kw): # Query or configure the megawidget options. # # If not empty, *kw* is a dictionary giving new # values for some of the options of this megawidget or its # components. For options defined for this megawidget, set # the value of the option to the new value and call the # configuration callback function, if any. For options of the # form _ (ALL)\n') line = raw_input().lower() s = self["solution"] if line[0] == 'a': self["label"] = s.getLabels() else: line=line.replace(',',' ') line=line.replace(':','-') lablist = line.replace(',',' ').split() label = [] for lab in lablist: try: lrange = map(int,lab.split('-')) except: print(" INVALID COMMAND, REENTER") return 0 if len(lrange) == 2: lrange = range(lrange[0],lrange[1]+1) label = label + lrange self["label"] = label return 1 def plotsol(self,use3d=False): xaxsn = [1] yaxsn = [2] zaxsn = [3] self.handle.config(type = "solution") if use3d: self["solution_z"] = [1] if not self.enterlabels(): return s = self["solution"] self.ndim=len(s[0]["data"][0]['u'])+1 while 1: its = 0 print(' NUMBER OF COMPONENTS :%5d'%(self.ndim)) if use3d: axisstr = "%s %s %s"%(xaxsn,yaxsn,zaxsn) else: axisstr = "%s %s"%(xaxsn,yaxsn) axisstr = axisstr.replace("[","") axisstr = axisstr.replace("]","") axisstr = axisstr.replace(", ",",") print (' ENTER AXES (DEFAULT %s),'\ ' (DISPLAY), OR (EXIT)'%axisstr) line = raw_input() lower = 0 upper = 0 for c in line: if c.islower(): lower = 1 if c.isupper(): upper = 1 if upper and not lower: line=line.lower() if line in ['end','ex','e']: return elif line == 'd': if not self.dset: self.getopts() elif line in ["save","sav","sa","s"]: self.savefile() elif (line == '2d' and not use3d) or (line == '3d' and use3d): self.enterlabels() else: try: axislist = map(int,line.replace(","," ").split()) if use3d: xaxsn = axislist[:len(axislist)/3] yaxsn = axislist[len(axislist)/3:len(axislist)/3*2] zaxsn = axislist[len(axislist)/3*2:] else: xaxsn = axislist[:len(axislist)/2] yaxsn = axislist[len(axislist)/2:] xaxs = [] for x in xaxsn: if x == 1: xaxs.append("t") else: xaxs.append(x-2) yaxs = [] for y in yaxsn: if y == 1: yaxs.append("t") else: yaxs.append(y-2) self["solution_x"] = xaxs self["solution_y"] = yaxs self["solution_z"] = None if use3d: zaxs = [] for z in zaxsn: if z == 1: zaxs.append("t") else: zaxs.append(z-2) self["solution_z"] = zaxs except: print(" INVALID COMMAND, REENTER") def plotbif(self,opt=None): if opt is None: while 1: if self.expert: print(' LIMITS') elif self.b3d: print(' ENTER XMIN,XMAX,YMIN,YMAX,ZMIN,ZMAX') else: print(' ENTER XMIN,XMAX,YMIN,YMAX') line = raw_input().replace(","," ") try: if self.b3d: [xmin,xmax,ymin,ymax, zmin,zmax] = map(float,line.split()) else: [xmin,xmax,ymin,ymax] = map(float,line.split()) break except: pass self.handle.config(type = "bifurcation") if self.b3d: self.handle.config(minx = xmin, maxx = xmax, miny = ymin, maxy = ymax, minz = zmin, maxz = zmax) else: self.handle.config(minx = xmin, maxx = xmax, miny = ymin, maxy = ymax) else: self.handle.config(type = "bifurcation") self.handle.grapher.plot() if not self.dset: self.getopts() def __setitem__(self,key,value): self.handle[key] = value def __getitem__(self,key): return self.handle[key] def help(self): print(""" Principal PLAUT Commands : Bifurcation diagram with default limits Bifurcation diagram with user-limits To select bifurcation diagram axes <2D> 2D plot of labeled solutions To save the current plot in a file To clear the graphics window List all labeled solutions in Unit 8 To End PLAUT PLAUT Default Options : Use solid curves, symbols, but no labels As , showing stability and labels As , without labels As , with grid lines AS , with grid lines Individual Options : Use symbols for special points Differential Plot (show stability) Set up titles and axes labels Normal usage (Reset special options) Press RETURN for more or Enter Command ... """) line = raw_input() if line != "": return line print(""" Additional PLAUT Commands : To change the plot size To define symbols Set symbol size ""Expert"" (Abbreviated prompts) To change curve type Set dash spacing Set dash size Set dot spacing Set circle spacing Set curve-symbol spacing Set curve-symbol size Set dash-dot spacing Set long-short dash spacing Set long-short dash size Set plotting accuracy Reset curves and symbols <3D> 3D plot of labeled solutions 3D bifurcation diagram --- End of Help --- """) return "" # Export the functions inside AUTOSimpleFunctions in a dictionary # This also allows the setting of the log def exportFunctions(log=None): PyPlautFunctionsInstance = PyPlautInteractiveConsole() dict = {} for name in PyPlautInteractiveConsole.__dict__: if name[0] != '_': dict[name] = getattr(PyPlautFunctionsInstance, name) return dict # This is the Python syntax for making a script runable if __name__ == '__main__': sys.ps1="" if len(sys.argv) < 2: b='fort.7' s='fort.8' else: b='b.'+sys.argv[1] s='s.'+sys.argv[1] runner = PyPlautInteractiveConsole(exportFunctions(), b, s) runner.interact(" ENTER IN CASE OF DIFFICULTY\n") auto/07p/python/auto/graphics/grapher_mpl.py0000640000175000017500000006774113570013207017224 0ustar sksk#!/usr/bin/env python import matplotlib matplotlib.use('TkAgg') from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg try: #MPL 2.2 wants NavigationToolbar2Tk instead from matplotlib.backends.backend_tkagg import NavigationToolbar2Tk as NavigationToolbar2TkAgg except ImportError: from matplotlib.backends.backend_tkagg import NavigationToolbar2TkAgg from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib.figure import Figure from matplotlib.lines import Line2D from matplotlib.axes import Axes from matplotlib.ticker import AutoLocator, FixedLocator from auto import Points if not Points.numpyimported: Points.importnumpy() transpose = Points.N.transpose try: # mpl >= 0.99 from mpl_toolkits.mplot3d import Axes3D from mpl_toolkits.mplot3d.proj3d import proj_transform, inv_transform except ImportError: try: # mpl < 0.98 from matplotlib.axes3d import Axes3D, Axes3DI from matplotlib.proj3d import proj_transform, inv_transform # mpl 0.87.7 bug workaround and compat def autoscale_view(self, scalex=True, scaley=True): self.set_top_view() Axes3DI.autoscale_view = autoscale_view Axes3DI.set_xlim3d = Axes3DI.set_w_xlim Axes3DI.set_ylim3d = Axes3DI.set_w_ylim Axes3DI.set_zlim3d = Axes3DI.set_w_zlim Axes3DI.get_xlim3d = Axes3DI.get_w_xlim Axes3DI.get_ylim3d = Axes3DI.get_w_ylim Axes3DI.get_zlim3d = Axes3DI.get_w_zlim except (ImportError, NotImplementedError, NameError): Axes3D = None try: import Tkinter import tkFileDialog except ImportError: import tkinter as Tkinter # Python 3 from tkinter import filedialog as tkFileDialog from auto.graphics import Pmw from auto import AUTOutil import math import string from auto.graphics import grapher GrapherError="GrapherError" class FigureCanvasTkAggRedraw(FigureCanvasTkAgg): def __init__(self,grapher,parent): if parent is None: parent = Tkinter.Tk() parent.wm_title("PyPLAUT") FigureCanvasTkAgg.__init__(self,grapher.ax.get_figure(),master=parent) grapher.toolbar = NavigationToolbar2TkAgg( self, parent ) grapher.toolbar.zoom() self.grapher = grapher def redraw(self): # recalculate label positions self.grapher.plotlabels() FigureCanvasTkAgg.draw(self) def draw(self): ax = self.grapher.ax d = {} if ax is self.grapher.ax3d: [d["minx"],d["maxx"]] = ax.get_xlim3d() [d["miny"],d["maxy"]] = ax.get_ylim3d() [d["minz"],d["maxz"]] = ax.get_zlim3d() d["azimuth"] = ax.azim d["elevation"] = ax.elev d["cur_lims"] = Axes.get_xlim(ax), Axes.get_ylim(ax) else: [d["minx"],d["maxx"]] = ax.get_xlim() [d["miny"],d["maxy"]] = ax.get_ylim() for k in list(d): # don't adjust any unchanged settings if k == "cur_lims": if map(list, d[k]) == map(list, self.grapher._cur_lims): del d[k] elif d[k] == self.grapher.cget(k): del d[k] if d != {}: if "cur_lims" in d: del d["cur_lims"] if d != {}: self.grapher._configNoDraw(**d) self.redraw() return FigureCanvasTkAgg.draw(self) def show(self): fig = self.grapher.ax.get_figure() dpi = fig.get_dpi() self.grapher._configNoDraw( realwidth=fig.get_figwidth()*dpi, realheight=fig.get_figheight()*dpi) self.redraw() class BasicGrapher(grapher.BasicGrapher): """Documentation string for Basic Grapher A simple graphing widget By Randy P. and Bart O.""" def __init__(self,parent=None,**kw): self.ax = Figure(figsize=(4.3,3.0)).gca() self.ax2d = self.ax self.ax3d = None if kw.get("hide"): self.canvas = FigureCanvasAgg(self.ax.get_figure()) else: self.canvas = FigureCanvasTkAggRedraw(self,parent) tk_widget = self.canvas.get_tk_widget() self.quit = tk_widget.quit self.bind = tk_widget.bind self.unbind = tk_widget.unbind self.winfo_rootx = tk_widget.winfo_rootx self.winfo_rooty = tk_widget.winfo_rooty self.ax.set_autoscale_on(0) self.postscript = self.canvas.print_figure self.savefig = self.ax.get_figure().savefig self.redrawlabels = 0 callback = self.__optionCallback grapher.BasicGrapher.__init__(self,parent,callback,**kw) optionDefaults={} optionDefaults["xticks"] = (None,callback) optionDefaults["yticks"] = (None,callback) optionDefaults["zticks"] = (None,callback) optionDefaults["background"] = ("white",callback) optionAliases = {} optionAliases["bg"] = "background" self.addOptions(**optionDefaults) self.addAliases(**optionAliases) for key in ["grid","decorations","xlabel","ylabel","zlabel", "xlabel_fontsize", "ylabel_fontsize", "zlabel_fontsize", "minx","maxx","miny","maxy","minz","maxz", "width", "height", "left_margin", "right_margin", "top_margin", "bottom_margin"]: self.__optionCallback(key,self.cget(key),[]) matplotlib.rcParams["axes.edgecolor"]=self.cget("foreground") def pack(self,**kw): self.canvas.get_tk_widget().pack(kw) def update(self): if isinstance(self.canvas,FigureCanvasTkAggRedraw): self.canvas.get_tk_widget().update() FigureCanvasTkAgg.draw(self.canvas) else: self.canvas.draw() def __optionCallback(self,key,value,options): if key in ["minx","maxx","miny","maxy","minz","maxz", "realwidth","realheight","azimuth","elevation", "left_margin","right_margin","top_margin","bottom_margin"]: self.redrawlabels = 1 if key[:3] in ["min", "max"]: minc = self.cget("min"+key[3]) maxc = self.cget("max"+key[3]) if minc < maxc: func = None if self.ax is self.ax3d: func = getattr(self.ax, "set_"+key[3]+"lim3d") self._cur_lims = ( Axes.get_xlim(self.ax), Axes.get_ylim(self.ax)) elif key[3] != 'z': func = getattr(self.ax, "set_"+key[3]+"lim") if func is not None: func(minc,maxc) tickskey = key[3]+"ticks" ticksval = self.cget(tickskey) if ticksval is not None: self.__optionCallback(tickskey,ticksval,options) elif key == "realwidth": lm = float(self.cget("left_margin")) rm = float(self.cget("right_margin")) self.ax.get_figure().subplots_adjust(left=lm/value, right=1-rm/value) elif key == "realheight": tm = float(self.cget("top_margin")) bm = float(self.cget("bottom_margin")) top = 1-tm/value bottom = bm/value if top > bottom: self.ax.get_figure().subplots_adjust(top=top, bottom=bottom) elif key == "left_margin": fig = self.ax.get_figure() width = fig.get_figwidth()*fig.get_dpi() fig.subplots_adjust(left=value/width) elif key == "right_margin": fig = self.ax.get_figure() width = fig.get_figwidth()*fig.get_dpi() fig.subplots_adjust(right=1-value/width) elif key == "top_margin": fig = self.ax.get_figure() height = fig.get_figheight()*fig.get_dpi() fig.subplots_adjust(top=1-value/height) elif key == "bottom_margin": fig = self.ax.get_figure() height = fig.get_figheight()*fig.get_dpi() fig.subplots_adjust(bottom=value/height) elif self.ax is self.ax3d: elev = self.cget("elevation") azim = self.cget("azimuth") if elev is not None or azim is not None: self.ax.view_init(elev, azim) elif key == "grid": if value in ["yes", True]: self.ax.grid(color = self.cget("foreground")) else: self.ax.grid(False) elif key in ["width", "height"]: if isinstance(self.canvas,FigureCanvasTkAggRedraw): self.canvas.get_tk_widget()[key] = value else: fig = self.ax.get_figure() if key == "width": fig.set_figwidth(float(value)/fig.get_dpi()) self._configNoDraw(realwidth=value) else: fig.set_figheight(float(value)/fig.get_dpi()) self._configNoDraw(realheight=value) elif key == "top_title": fontsize = self.cget("top_title_fontsize") if fontsize is None: self.ax.set_title(value) else: self.ax.set_title(value,fontsize=fontsize) elif key == "top_title_fontsize": title = self.cget("top_title") if title is not None: self.ax.set_title(title,fontsize=value) elif key in ["background", "bg"]: if hasattr(self.ax, 'set_facecolor'): # matplotlib >= 2.0 self.ax.set_facecolor(value) else: self.ax.set_axis_bgcolor(value) elif key in ["foreground", "fg"]: matplotlib.rcParams["axes.edgecolor"]=self.cget("foreground") self.redrawlabels = 1 if self.cget("grid") in ["yes", True]: self.ax.grid(color=value) elif key == "color_list": color_list = value.split() i = 0 for d in self.data: if d["newsect"] is None or d["newsect"]: i = i+1 if d["color"] is None: color = i else: color = d["color"] d["mpline"].set_color(color_list[color%len(color_list)]) elif key == "decorations": if value: self.ax.set_axis_on() else: self.ax.set_axis_off() elif key == "use_symbols": self.plotsymbols() elif key == "use_labels": self.plotlabels() elif key in ["xlabel","ylabel","zlabel"]: if value is None: value = "" fontsize = self.cget(key+"_fontsize") if hasattr(self.ax,"set_"+key): func = getattr(self.ax,"set_"+key) if fontsize is None: func(value) else: func(value,fontsize=fontsize) elif key in ["xlabel_fontsize","ylabel_fontsize","zlabel_fontsize"]: label = self.cget(key[:6]) if hasattr(self.ax,"set_"+key[:6]): func = getattr(self.ax,"set_"+key[:6]) if value is None: func(label) else: func(label,fontsize=value) elif key in ["xticks","yticks","zticks"]: if value is None: if self.ax is self.ax3d: axis = getattr(self.ax, "w_"+key[0]+"axis") axis.set_major_locator(AutoLocator()) elif key == "xticks": self.ax.set_xscale('linear') else: self.ax.set_yscale('linear') else: min = self.cget("min"+key[0]) max = self.cget("max"+key[0]) ticks = [min + ((max - min) * i) / float(value-1) for i in range(value)] if self.ax is self.ax3d: axis = getattr(self.ax, "w_"+key[0]+"axis") axis.set_major_locator( FixedLocator(ticks) ) elif key == "xticks": self.ax.set_xticks(ticks) elif key == "yticks": self.ax.set_yticks(ticks) def _delAllData(self): for d in self.data: if "mpline" in d: self.ax.lines.remove(d["mpline"]) self.data=[] # set type for next data try: zcolumn = self.cget(self.cget("type")+"_z") except Tkinter.TclError: #in regression test return oldax = self.ax if zcolumn is None or Axes3D is None: if zcolumn is not None: self._configNoDraw({self.cget("type")+"_z":None}) print("\nmatplotlib 0.98.x does not support 3D plots.") print("Plotting only the first two coordinates.") if self.ax is self.ax3d: # restore zoom mode new_zoom_mode = self.zoom_mode self.ax = self.ax2d else: if self.ax3d is None: self.ax3d = Axes3D(self.ax.get_figure()) try: self.ax3d.set_autoscale_on(0) except TypeError: #Matplotlib 1.1 bug self.ax2d.set_autoscale_on(0) self.ax3d.set_autoscalez_on(0) if self.ax is self.ax2d: # remember zoom mode and disable zoom if isinstance(self.canvas,FigureCanvasTkAggRedraw): self.zoom_mode = self.toolbar.mode new_zoom_mode = '' self.ax = self.ax3d if self.ax is not oldax: if (isinstance(self.canvas,FigureCanvasTkAggRedraw) and new_zoom_mode != self.toolbar.mode): if "rect" in new_zoom_mode: self.toolbar.zoom() elif "pan" in new_zoom_mode: self.toolbar.pan() elif "rect" in self.toolbar.mode: self.toolbar.zoom() elif "pan" in self.toolbar.mode: self.toolbar.pan() #copy settings from 3d to 2d or vice versa for key in ("grid","decorations","xlabel","ylabel","zlabel", "xticks","yticks","zticks", "minx","maxx","miny","maxy","minz","maxz", "azimuth", "elevation", "top_title", "background"): self.__optionCallback(key,self.cget(key),[]) def _delData(self,index): if "mpline" in data[index]: self.ax.lines.remove(data[index]["mpline"]) del self.data[index] def clear(self): if len(self.ax.get_figure().axes) > 0: self.ax.get_figure().delaxes(self.ax.get_figure().axes[0]) def draw(self): if self.redrawlabels: self.plotlabels() if len(self.ax.get_figure().axes) == 0: self.ax.get_figure().add_axes(self.ax) if isinstance(self.canvas,FigureCanvasTkAggRedraw): FigureCanvasTkAgg.draw(self.canvas) else: self.canvas.draw() def plot(self): color_list = self.cget("color_list").split() # data line_width=self.cget("line_width") dashes=list(map(float,self.cget("dashes"))) i=-1 for d in self.data: if d["newsect"] is None or d["newsect"]: i = i+1 curve="curve:%d"%(i,) if self.ax is self.ax2d: v = [d["x"],d["y"]] else: v = [d["x"],d["y"],d["z"]] if d["color"] is None: color = i else: color = d["color"] kw = {'color':color_list[color%len(color_list)]} if len(v[0]) == 1: # If we only have one point we draw a small circle or a pixel if self.cget("type") == "solution": marker = 'o' else: marker = ',' v.append(marker) #tags=("data_point:%d"%(0,),curve,"data") else: stable = d["stable"] #tags=(curve,"data") kw['lw'] = line_width if stable is not None and not stable: kw.update({'ls':'--','dashes':dashes}) if self.ax is self.ax2d: self.ax.plot(*v,**kw) else: self.ax.plot3D(*v,**kw) d["mpline"] = self.ax.lines[-1] if len(self.ax.get_figure().axes) == 0: self.ax.get_figure().add_axes(self.ax) def __setitem__(self,key,value): self.configure(**{key: value}) def __getitem__(self,key): return self.cget(key) class LabeledGrapher(BasicGrapher,grapher.LabeledGrapher): def __init__(self,parent=None,**kw): self.labels=[] BasicGrapher.__init__(self,parent,**kw) def _delData(self,i): del self.labels[i] BasicGrapher._delData(self,i) def _delAllData(self): for l in self.labels: for label in l: if "mpline" in label: self.ax.lines.remove(label["mpline"]) if "mptext" in label: self.ax.texts.remove(label["mptext"]) if "mpsymline" in label: self.ax.lines.remove(label["mpsymline"]) if "mpsymtext" in label: self.ax.texts.remove(label["mpsymtext"]) self.labels=[] BasicGrapher._delAllData(self) def _addData(self,data,newsect=None,color=None,stable=None): self.labels.append([]) BasicGrapher._addData(self,data,newsect,color,stable) def plotlabels(self): if self.cget("realwidth") == 1 or self.cget("realheight") == 1: return self.redrawlabels = 0 for labels in self.labels: for label in labels: if "mpline" in label: self.ax.lines.remove(label["mpline"]) del label["mpline"] if "mptext" in label: self.ax.texts.remove(label["mptext"]) del label["mptext"] if not self.cget("use_labels"): return if hasattr(self.ax.transData,'transform'): trans = self.ax.transData.transform if self.ax is self.ax2d: def transseq(x,y): return trans(transpose([x,y])) else: # this matrix needs to be initialized or matplotlib only does # that when it draws self.ax.M = self.ax.get_proj() def transseq(x,y,z): return trans(transpose(proj_transform(x,y,z,self.ax.M)[:2])) inv_trans = self.ax.transData.inverted().transform else: trans = self.ax.transData.xy_tup if self.ax is self.ax2d: def transseq(x,y): return transpose(self.ax.transData.numerix_x_y(x,y)) else: self.ax.M = self.ax.get_proj() def transseq(x,y,z): return transpose(self.ax.transData.numerix_x_y( *(proj_transform(x,y,z,self.ax.M)[:2]))) inv_trans = self.ax.transData.inverse_xy_tup if self.cget("smart_label"): mp = self.inarrs() sp1 = self.cget("left_margin") sp2 = 5 #fontsize sp3 = self.cget("bottom_margin") sp4 = 5 for d in self.data: if self.ax is self.ax2d: seq = transseq(d["x"],d["y"]) else: seq = transseq(d["x"],d["y"],d["z"]) seq[:,0] = (seq[:,0] - sp1) / sp2 seq[:,1] = (seq[:,1] - sp3) / sp4 self.map_curve(mp,seq) for i, labels in enumerate(self.labels): for label in labels: if len(label["text"]) == 0: continue [x,y] = label["xy"][:2] if self.ax is self.ax3d: # transform 3d to 2d coordinates and compare # against the 2D limits z = label["xy"][2] [x,y,z] = proj_transform(x, y, z, self.ax.M) lim = Axes.get_xlim(self.ax) if x < lim[0] or x > lim[1]: continue lim = Axes.get_ylim(self.ax) if y < lim[0] or y > lim[1]: continue data = trans((x,y)) if data is not None: [x,y] = data if self.cget("smart_label"): [xoffd1,yoffd1,xoffd2,yoffd2, xofft,yofft,pos] = self.findsp(x,y,mp) else: [xoffd1,yoffd1,xoffd2,yoffd2, xofft,yofft,pos] = self.dumblabel(i,label["j"],x,y) [ha,va] = self.getpos(pos) [xd1,yd1] = inv_trans((x+xoffd1,y+yoffd1)) [xd2,yd2] = inv_trans((x+xoffd2,y+yoffd2)) [xt,yt] = inv_trans((x+xofft,y+yofft)) # using the low-level line routines to avoid # rescaling in 3D (even with auto scale off, # the view is reset after each plot() by # set_top_view in mplot3d) line = Line2D([xd1,xd2],[yd1,yd2],linewidth=0.5, color=self.cget("foreground")) self.ax.add_line(line) self.ax.annotate(label["text"],(xt,yt),ha=ha,va=va, color=self.cget("foreground"),clip_on=True) label["mpline"] = self.ax.lines[-1] label["mptext"] = self.ax.texts[-1] def getpos(self,pos): has = [ "left", "center", "right", "right", "right", "center", "left", "left", "left" ] vas = [ "bottom","bottom","bottom","center", "top", "top", "top", "center", "bottom" ] ha = has[pos] va = vas[pos] return [ha,va] def plot(self): self.plotlabels() BasicGrapher.plot(self) self.plotsymbols() def plotsymbols(self): for labels in self.labels: for label in labels: v = label["xy"] if Axes3D is None: v = v[:2] l = label["symbol"] if l is None: continue if "mpsymline" in label: self.ax.lines.remove(label["mpsymline"]) del label["mpsymline"] if "mpsymtext" in label: self.ax.texts.remove(label["mpsymtext"]) del label["mpsymtext"] if not self.cget("use_symbols"): continue c=self.cget("symbol_color") if len(l) <= 3: #font=self.cget("symbol_font"), kw = {'ha':"center",'va':"center",'color':c,'clip_on':True} if self.ax is self.ax2d: self.ax.text(*(v+[l]),**kw) else: t = self.ax.text3D(*(v+[l])) t.set_horizontalalignment(kw['ha']) t.set_verticalalignment(kw['va']) t.set_color(kw['color']) t.set_clip_on(True) label["mpsymtext"] = self.ax.texts[-1] continue v = [[coord] for coord in v] markerdict = {"fillcircle" : "o", "circle": "o", "square": "s", "crossquare": "x", "fillsquare": "s", "diamond": "D", "filldiamond": "D", "triangle": "^", "doubletriangle": "^"} ms = None for i, ch in enumerate(l): if ch in string.digits: ms = int(l[i:]) l = l[:i] break if l not in markerdict: continue v.append(markerdict[l]) kw = {'color': c} if l in ["circle", "square", "diamond", "triangle"]: if hasattr(self.ax, 'get_facecolor'): # matplotlib >= 2.0 kw['mfc'] = self.ax.get_facecolor() else: kw['mfc'] = self.ax.get_axis_bgcolor() if l in ["diamond","filldiamond","triangle","doubletriangle"]: kw['ms'] = 8 if ms is not None: kw['ms'] = ms if self.ax is self.ax2d: self.ax.plot(*v,**kw) else: self.ax.plot3D(*v,**kw) label["mpsymline"] = self.ax.lines[-1] # FIXME: No regression tester class InteractiveGrapher(LabeledGrapher,grapher.InteractiveGrapher): def __init__(self,parent=None,**kw): LabeledGrapher.__init__(self,parent,**kw) class GUIGrapher(InteractiveGrapher,grapher.GUIGrapher): def __init__(self,parent=None,**kw): InteractiveGrapher.__init__(self,parent,**kw) #self.bind("",self.popupMenuWrapper) if kw.get("hide"): return self.menu=Tkinter.Menu() # self.menu.add_radiobutton(label="print tag",command=self.printTagBindings) # self.menu.add_radiobutton(label="label point",command=self.labelPointBindings) #self.menu.add_radiobutton(label="zoom",command=self.zoomBindings) #self.menu.invoke('zoom') self.menu.add_command(label="Unzoom",command=self.unzoom) self.menu.add_command(label="Save",command=self.generatePostscript) self.menu.add_command(label="Configure...",command=self.__interactiveConfigureDialog) def __interactiveConfigureDialog(self): widget=self.canvas.get_tk_widget() diag = Pmw.Dialog(widget,buttons=("Ok","Cancel")) options = sorted([self.configure(key)[0] for key in self.configure() if self._isInternalOption(key)]) self.optionList = Pmw.ScrolledListBox(diag.interior(), items=options, dblclickcommand=self.__updateInteractiveConfigureDialog) self.optionList.pack(side="left") frame = Tkinter.Frame(diag.interior()) frame.pack(side="right") self.optionLabel = Pmw.EntryField(frame, labelpos="w", label_text="Option Name", entry_state=Tkinter.DISABLED) self.optionLabel.pack(side="top") self.valueLabel = Pmw.EntryField(frame, labelpos="w", label_text="Old Value", entry_state=Tkinter.DISABLED) self.valueLabel.pack(side="top") self.valueEntry = Pmw.EntryField(frame, labelpos="w", label_text="New Value", command=self.__modifyOption) self.valueEntry.pack(side="top") def generatePostscript(self,filename=None,pscolormode=None): if pscolormode is None: pscolormode=self.cget("ps_colormode") if filename is None: filename = tkFileDialog.asksaveasfilename(defaultextension=".eps",title="Save the figure") self.update() #self.postscript(filename,colormode=pscolormode) self.postscript(filename) def test(): grapher.test(GUIGrapher()) if __name__=='__main__': test() auto/07p/python/auto/graphics/PmwColor.py0000750000175000017500000002703413570013207016457 0ustar sksk# Functions for converting colors and modifying the color scheme of # an application. import math import sys try: import Tkinter except ImportError: import tkinter as Tkinter # Python 3 _PI = math.pi _TWO_PI = _PI * 2 _THIRD_PI = _PI / 3 _SIXTH_PI = _PI / 6 _MAX_RGB = float(256 * 256 - 1) # max size of rgb values returned from Tk def setscheme(root, background=None, **kw): root = root._root() palette = _calcPalette(root, background,**kw) for option, value in palette.items(): root.option_add('*' + option, value, 'widgetDefault') def getdefaultpalette(root): # Return the default values of all options, using the defaults # from a few widgets. ckbtn = Tkinter.Checkbutton(root) entry = Tkinter.Entry(root) scbar = Tkinter.Scrollbar(root) orig = {} orig['activeBackground'] = str(ckbtn.configure('activebackground')[4]) orig['activeForeground'] = str(ckbtn.configure('activeforeground')[4]) orig['background'] = str(ckbtn.configure('background')[4]) orig['disabledForeground'] = str(ckbtn.configure('disabledforeground')[4]) orig['foreground'] = str(ckbtn.configure('foreground')[4]) orig['highlightBackground'] = str(ckbtn.configure('highlightbackground')[4]) orig['highlightColor'] = str(ckbtn.configure('highlightcolor')[4]) orig['insertBackground'] = str(entry.configure('insertbackground')[4]) orig['selectColor'] = str(ckbtn.configure('selectcolor')[4]) orig['selectBackground'] = str(entry.configure('selectbackground')[4]) orig['selectForeground'] = str(entry.configure('selectforeground')[4]) orig['troughColor'] = str(scbar.configure('troughcolor')[4]) ckbtn.destroy() entry.destroy() scbar.destroy() return orig #====================================================================== # Functions dealing with brightness, hue, saturation and intensity of colors. def changebrightness(root, colorName, brightness): # Convert the color name into its hue and back into a color of the # required brightness. rgb = name2rgb(root, colorName) hue, saturation, intensity = rgb2hsi(rgb) if saturation == 0.0: hue = None return hue2name(hue, brightness) def hue2name(hue, brightness = None): # Convert the requested hue and brightness into a color name. If # hue is None, return a grey of the requested brightness. if hue is None: rgb = hsi2rgb(0.0, 0.0, brightness) else: while hue < 0: hue = hue + _TWO_PI while hue >= _TWO_PI: hue = hue - _TWO_PI rgb = hsi2rgb(hue, 1.0, 1.0) if brightness is not None: b = rgb2brightness(rgb) i = 1.0 - (1.0 - brightness) * b s = bhi2saturation(brightness, hue, i) rgb = hsi2rgb(hue, s, i) return rgb2name(rgb) def bhi2saturation(brightness, hue, intensity): while hue < 0: hue = hue + _TWO_PI while hue >= _TWO_PI: hue = hue - _TWO_PI hue = hue / _THIRD_PI f = hue - math.floor(hue) pp = intensity pq = intensity * f pt = intensity - intensity * f pv = 0 hue = int(hue) if hue == 0: rgb = (pv, pt, pp) elif hue == 1: rgb = (pq, pv, pp) elif hue == 2: rgb = (pp, pv, pt) elif hue == 3: rgb = (pp, pq, pv) elif hue == 4: rgb = (pt, pp, pv) elif hue == 5: rgb = (pv, pp, pq) return (intensity - brightness) / rgb2brightness(rgb) def hsi2rgb(hue, saturation, intensity): i = intensity if saturation == 0: rgb = [i, i, i] else: while hue < 0: hue = hue + _TWO_PI while hue >= _TWO_PI: hue = hue - _TWO_PI hue = hue / _THIRD_PI f = hue - math.floor(hue) p = i * (1.0 - saturation) q = i * (1.0 - saturation * f) t = i * (1.0 - saturation * (1.0 - f)) hue = int(hue) if hue == 0: rgb = [i, t, p] elif hue == 1: rgb = [q, i, p] elif hue == 2: rgb = [p, i, t] elif hue == 3: rgb = [p, q, i] elif hue == 4: rgb = [t, p, i] elif hue == 5: rgb = [i, p, q] for index in range(3): val = rgb[index] if val < 0.0: val = 0.0 if val > 1.0: val = 1.0 rgb[index] = val return rgb def average(rgb1, rgb2, fraction): return ( rgb2[0] * fraction + rgb1[0] * (1.0 - fraction), rgb2[1] * fraction + rgb1[1] * (1.0 - fraction), rgb2[2] * fraction + rgb1[2] * (1.0 - fraction) ) def rgb2name(rgb): return '#%02x%02x%02x' % \ (int(rgb[0] * 255), int(rgb[1] * 255), int(rgb[2] * 255)) def rgb2brightness(rgb): # Return the perceived grey level of the color # (0.0 == black, 1.0 == white). rf = 0.299 gf = 0.587 bf = 0.114 return rf * rgb[0] + gf * rgb[1] + bf * rgb[2] def rgb2hsi(rgb): maxc = max(rgb[0], rgb[1], rgb[2]) minc = min(rgb[0], rgb[1], rgb[2]) intensity = maxc if maxc != 0: saturation = (maxc - minc) / maxc else: saturation = 0.0 hue = 0.0 if saturation != 0.0: c = [] for index in range(3): c.append((maxc - rgb[index]) / (maxc - minc)) if rgb[0] == maxc: hue = c[2] - c[1] elif rgb[1] == maxc: hue = 2 + c[0] - c[2] elif rgb[2] == maxc: hue = 4 + c[1] - c[0] hue = hue * _THIRD_PI if hue < 0.0: hue = hue + _TWO_PI return (hue, saturation, intensity) def name2rgb(root, colorName, asInt = 0): if colorName[0] == '#': # Extract rgb information from the color name itself, assuming # it is either #rgb, #rrggbb, #rrrgggbbb, or #rrrrggggbbbb # This is useful, since tk may return incorrect rgb values if # the colormap is full - it will return the rbg values of the # closest color available. colorName = colorName[1:] digits = len(colorName) / 3 factor = 16 ** (4 - digits) rgb = ( int(colorName[0:digits], 16) * factor, int(colorName[digits:digits * 2], 16) * factor, int(colorName[digits * 2:digits * 3], 16) * factor, ) else: # We have no choice but to ask Tk what the rgb values are. rgb = root.winfo_rgb(colorName) if not asInt: rgb = (rgb[0] / _MAX_RGB, rgb[1] / _MAX_RGB, rgb[2] / _MAX_RGB) return rgb def _calcPalette(root, background=None, **kw): # Create a map that has the complete new palette. If some colors # aren't specified, compute them from other colors that are specified. new = {} for key, value in kw.items(): new[key] = value if background is not None: new['background'] = background if 'background' not in new: raise ValueError('must specify a background color') if 'foreground' not in new: new['foreground'] = 'black' bg = name2rgb(root, new['background']) fg = name2rgb(root, new['foreground']) for i in ('activeForeground', 'insertBackground', 'selectForeground', 'highlightColor'): if i not in new: new[i] = new['foreground'] if 'disabledForeground' not in new: newCol = average(bg, fg, 0.3) new['disabledForeground'] = rgb2name(newCol) if 'highlightBackground' not in new: new['highlightBackground'] = new['background'] # Set to a color that is a little lighter that the # normal background. To do this, round each color component up by # 9% or 1/3 of the way to full white, whichever is greater. lighterBg = [] for i in range(3): lighterBg.append(bg[i]) inc1 = lighterBg[i] * 0.09 inc2 = (1.0 - lighterBg[i]) / 3 if inc1 > inc2: lighterBg[i] = lighterBg[i] + inc1 else: lighterBg[i] = lighterBg[i] + inc2 if lighterBg[i] > 1.0: lighterBg[i] = 1.0 # Set to a color that is a little darker that the # normal background. darkerBg = (bg[0] * 0.9, bg[1] * 0.9, bg[2] * 0.9) if 'activeBackground' not in new: # If the foreground is dark, pick a light active background. # If the foreground is light, pick a dark active background. # XXX This has been disabled, since it does not look very # good with dark backgrounds. If this is ever fixed, the # selectBackground and troughColor options should also be fixed. if rgb2brightness(fg) < 0.5: new['activeBackground'] = rgb2name(lighterBg) else: new['activeBackground'] = rgb2name(lighterBg) if 'selectBackground' not in new: new['selectBackground'] = rgb2name(darkerBg) if 'troughColor' not in new: new['troughColor'] = rgb2name(darkerBg) if 'selectColor' not in new: new['selectColor'] = 'yellow' return new def spectrum(numColors, correction = 1.0, saturation = 1.0, intensity = 1.0, extraOrange = 1, returnHues = 0): colorList = [] division = numColors / 7.0 for index in range(numColors): if extraOrange: if index < 2 * division: hue = index / division else: hue = 2 + 2 * (index - 2 * division) / division hue = hue * _SIXTH_PI else: hue = index * _TWO_PI / numColors if returnHues: colorList.append(hue) else: rgb = hsi2rgb(hue, saturation, intensity) if correction != 1.0: rgb = correct(rgb, correction) name = rgb2name(rgb) colorList.append(name) return colorList def correct(rgb, correction): correction = float(correction) rtn = [] for index in range(3): rtn.append((1 - (1 - rgb[index]) ** correction) ** (1 / correction)) return rtn #============================================================================== def _recolorTree(widget, oldpalette, newcolors): # Change the colors in a widget and its descendants. # Change the colors in and all of its descendants, # according to the dictionary. It only modifies # colors that have their default values as specified by the # variable. The keys of the dictionary # are named after widget configuration options and the values are # the new value for that option. for dbOption in newcolors: option = dbOption.lower() try: value = str(widget.cget(option)) except: continue if oldpalette is None or value == oldpalette[dbOption]: widget.configure(**{option : newcolors[dbOption]}) for child in widget.winfo_children(): _recolorTree(child, oldpalette, newcolors) def changecolor(widget, background=None, **kw): root = widget._root() if not hasattr(widget, '_Pmw_oldpalette'): widget._Pmw_oldpalette = getdefaultpalette(root) newpalette = _calcPalette(root, background, **kw) _recolorTree(widget, widget._Pmw_oldpalette, newpalette) widget._Pmw_oldpalette = newpalette def bordercolors(root, colorName): # This is the same method that Tk uses for shadows, in TkpGetShadows. lightRGB = [] darkRGB = [] for value in name2rgb(root, colorName, 1): value40pc = (14 * value) / 10 if value40pc > _MAX_RGB: value40pc = _MAX_RGB valueHalfWhite = (_MAX_RGB + value) / 2; lightRGB.append(max(value40pc, valueHalfWhite)) darkValue = (60 * value) / 100 darkRGB.append(darkValue) return ( '#%04x%04x%04x' % (lightRGB[0], lightRGB[1], lightRGB[2]), '#%04x%04x%04x' % (darkRGB[0], darkRGB[1], darkRGB[2]) ) auto/07p/python/auto/AUTOExceptions.py0000750000175000017500000000030113570013207015713 0ustar sksk#! /usr/bin/env python class AUTORegressionError(Exception): """A regression test has failed""" pass class AUTORuntimeError(Exception): """A runtime error has occured""" pass auto/07p/python/auto/interactiveBindings.py0000750000175000017500000004654313570013207017116 0ustar sksk#! /usr/bin/env python import sys import os import code import getopt import re if __package__ != 'auto': sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) from auto import AUTOExceptions import keyword try: import __builtin__ except ImportError: import builtins as __builtin__ # Python 3 class AUTOInteractive(object): def __init__(self,locals,filename=None): locals["execfile"] = self.execfile locals["ex"] = self.ex locals["auto"] = self.auto locals["demofile"] = self.demofile locals["dmf"] = self.dmf self.execfilename = filename self.stopdemo = False self.oldhelp = __builtin__.help locals["help"] = self.help self.atcommands = [cmd for cmd in os.listdir(os.environ["AUTO_DIR"]+"/cmds") if cmd[0]=='@' and cmd[-1]!='~'] def showtraceback(self): try: raise except AUTOExceptions.AUTORuntimeError: import traceback e = sys.exc_info()[1] l = traceback.extract_tb(sys.exc_info()[2]) found = False for entry in l: if entry[0] == self.execfilename: self.write("%s, line %s:\n"%(entry[0],entry[1])) found = True if found: self.write("\n") self.write("AUTO Runtime Error: %s\n"%e) self.stopdemo = True except: self.parentclass.showtraceback(self) def demofile(self,name): """Execute an AUTO CLUI script, line by line (demo mode). Type demofile('xxx.auto') to step through the script xxx.auto, which will proceed each time you press Enter. Aliases: demofile dmf""" import AUTOclui AUTOInteractiveConsole(AUTOclui.exportFunctions())._demofile(name) def _demofile(self,name): oldname = self.execfilename self.execfilename = name try: f = open(name,"r") except IOError: raise AUTOExceptions.AUTORuntimeError(sys.exc_info()[1]) lines = f.readlines() f.close() runline = '' for line in lines: while len(line) > 0 and line[-1] in "\r\n": line = line[:-1] # we only wait if the current line is not a comment if len(line.strip()) >0 and line.strip()[0] != "#": sys.stdout.write(sys.ps1+line) raw_input() else: sys.stdout.write(line+"\n") runline = runline + self.processShorthand(line) + "\n" if not self.runsource(runline): if self.stopdemo: self.stopdemo = False self.execfilename = oldname raise AUTOExceptions.AUTORuntimeError('Demo interrupted') runline = '' self.execfilename = oldname def dmf(self,name): """Execute an AUTO CLUI script, line by line (demo mode). Type dmf('xxx.auto') to step through the script xxx.auto, which will proceed each time you press Enter. Aliases: demofile dmf""" self.demofile(name) def execfile(self,name=None): """Execute an AUTO CLUI script. Type execfile('xxx.auto') to run the script xxx.auto, keeping all local state.""" if name is None: automain() return oldname = self.execfilename try: lines = open(name,"r") except IOError: if oldname is None: # to give a simple message for "auto notexists.auto". try: raise AUTOExceptions.AUTORuntimeError(sys.exc_info()[1]) except: self.showtraceback() return else: raise AUTOExceptions.AUTORuntimeError(sys.exc_info()[1]) self.execfilename = name source = "" for line in lines: while len(line) > 0 and line[-1] in "\r\n": line = line[:-1] source = source + self.processShorthand(line) + "\n" lines.close() self.runsource(source,name,"exec") self.execfilename = oldname def ex(self,name=None): """Execute an AUTO CLUI script. Type ex('xxx.auto') to run the script xxx.auto. Aliases: auto ex""" self.auto(name) def auto(self,name=None): """Execute an AUTO CLUI script. Type auto('xxx.auto') to run the script xxx.auto. Aliases: auto ex""" import AUTOclui if name is not None: AUTOInteractiveConsole(AUTOclui.exportFunctions()).execfile(name) else: self.execfile() def help(self,*args,**kwds): if len(args) == 0 and len(kwds) == 0: print('Press ENTER and then type "man" for help about the AUTO Python CLUI.') self.oldhelp(*args,**kwds) def processShorthand(self,line): """ Given a line of python input check to see if it is a AUTO shorthand command, if so, change it to its real python equivalent. """ lst = line.split() shortCommands = ["ls","cd","cat"] shortUnixCommands = ["clear","less","mkdir","rmdir","rm"] # these work both as functions and for the shell shortDuplCommands = ["cp","mv"] if len(lst) == 0: return line llen = len(line)-len(line.lstrip()) lspaces = ' '*llen command = None if lst[0][0]=="!": command = "shell('" + line[llen+1:].strip() +"')" elif len(lst) == 1 or lst[1][0] != '(': if lst[0]=="shell": command = "shell('"+line[llen+5:].strip()+"')" elif lst[0] in self.atcommands: command = ("shell('" + os.path.join( os.environ["AUTO_DIR"],"cmds",line.strip()) + "')") elif (lst[0] in shortUnixCommands or (lst[0] in shortDuplCommands and (len(lst) != 2 or (len(lst) == 2 and lst[1][0] == '-')))): command = "shell('" + line.strip() + "')" elif lst[0] in shortCommands: if len(lst) == 2: command = "%s('%s')"%tuple(lst) else: command = "%s()"%lst[0] if command is not None: return lspaces+command return line class AUTOInteractiveConsole(AUTOInteractive,code.InteractiveConsole): def __init__(self,locals,filename=None): self.parentclass = code.InteractiveConsole AUTOInteractive.__init__(self,locals,filename) code.InteractiveConsole.__init__(self,locals) self.line_split = re.compile(r'^(\s*[,;/]?\s*)' r'([\?\w\.]+\w*\s*)' r'(\(?.*$)') self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]' '|^is |^not |^in |^and |^or ') def raw_input(self, prompt=None): line = raw_input(prompt) line = self.processShorthand(line) return line def split_user_input(self,line): """Split user input into pre-char, function part and rest.""" #shamelessly stolen from IPython lsplit = self.line_split.match(line) if lsplit is None: # no regexp match returns None #print "match failed for line '%s'" % line # dbg try: iFun,theRest = line.split(None,1) except ValueError: #print "split failed for line '%s'" % line # dbg iFun,theRest = line,'' pre = re.match('^(\s*)(.*)',line).groups()[0] else: pre,iFun,theRest = lsplit.groups() # iFun has to be a valid python identifier, so it better be only pure #ascii, no unicode: try: iFuntmp = iFun.encode('ascii') if isinstance(iFuntmp, str): iFun = iFuntmp except UnicodeEncodeError: try: theRest = iFun+unicode(' ')+theRest iFun = unicode('') except NameError: theRest = iFun+' '+theRest iFun = '' return pre,iFun.strip(),theRest def _ofind(self, oname): """Find an object in the available namespaces. self._ofind(oname) -> obj """ #shamelessly stolen from IPython oname = oname.strip() # initialize results to 'null' found = 0; obj = None; # Look for the given name by splitting it in parts. If the head is # found, then we look for all the remaining parts as members, and only # declare success if we can find them all. oname_parts = oname.split('.') oname_head, oname_rest = oname_parts[0],oname_parts[1:] # Namespaces to search in: for ns in [ self.locals, __builtin__.__dict__ ]: if keyword.iskeyword(oname_head): break try: obj = ns[oname_head] except KeyError: continue else: for part in oname_rest: if keyword.iskeyword(part): break try: obj = getattr(obj,part) except: # Blanket except b/c some badly implemented objects # allow __getattr__ to raise exceptions other than # AttributeError, which then crashes IPython. break else: # If we finish the for loop (no break), we got all members found = 1 break # namespace loop # Last try: special-case some literals like '', [], {}, etc: if not found and oname_head in ["''",'""','[]','{}','()']: obj = eval(oname_head) return obj def handle_auto(self, pre, iFun, theRest, obj): """Handle lines which can be auto-executed, quoting if requested.""" #shamelessly stolen from IPython, too if pre == ',': # Auto-quote splitting on whitespace newcmd = '%s("%s")' % (iFun,'", "'.join(theRest.split())) elif pre == ';': # Auto-quote whole string newcmd = '%s("%s")' % (iFun,theRest) elif pre == '/': newcmd = '%s(%s)' % (iFun,",".join(theRest.split())) else: # Auto-paren. if len(theRest) > 0 and theRest[0] == '[': if hasattr(obj,'__getitem__'): # Don't autocall in this case: item access for an object # which is BOTH callable and implements __getitem__. newcmd = '%s %s' % (iFun,theRest) auto_rewrite = False else: # if the object doesn't support [] access, go ahead and # autocall newcmd = '%s(%s)' % (iFun.rstrip(),theRest) elif len(theRest) > 0 and theRest[-1] == ';': newcmd = '%s(%s);' % (iFun.rstrip(),theRest[:-1]) else: newcmd = '%s(%s)' % (iFun.rstrip(), theRest) return newcmd def processShorthand(self,line): """Do some IPython-style transformations before passing to Python.""" # First the short shell commands line = AUTOInteractive.processShorthand(self,line) pre,cmd,theRest = self.split_user_input(line) if (not(theRest and theRest[0] in '!=()') and (pre == ',' or pre == ';' or pre == '/' or not self.re_exclude_auto.match(theRest))): obj = self._ofind(cmd) if obj is not None and hasattr(obj, '__call__'): command = (line[:(len(line) - len(line.lstrip()))]+ self.handle_auto(pre,cmd,theRest,obj)) return command return line def close(self): self.locals['_runner'].config(log=None, err=None) def adjust_sys_path(): # if the path starts with '' (Python2.2 with current directory) # then add the AUTO python directory to sys.path if sys.path[0] == '': sys.path.insert(1,os.path.join(os.environ["AUTO_DIR"],"python")) else: #add current directory to sys.path sys.path.insert(0, "") def test(): adjust_sys_path() _testFilename("../demos/python/fullTest.auto","test_data/fullTest.log") _testFilename("../demos/python/tutorial.auto","test_data/tutorial.log") try: import Tkinter try: Tkinter.Tk().destroy() _testFilename("../demos/python/plotter.auto","test_data/plotter.log") except Tkinter.TclError: pass except ImportError: pass def _quicktest(): _testFilename("../demos/python/fullTest.auto","test_data/fullTest.log") def _testFilename(inputname,outputname): import AUTOclui, AUTOutil, runAUTO old_path = os.getcwd() log = open("log","w") os.environ["LANG"]="C" console = AUTOInteractiveConsole(AUTOclui.exportFunctions(log=log)) console.execfile(inputname) console.close() log.close() os.chdir(old_path) cmd = ["diff","-b", "--ignore-matching-lines='.*ab\.o.*'", "--ignore-matching-lines='.*cir\.o.*'", "--ignore-matching-lines='.*wav\.o.*'", "--ignore-matching-lines=' [0-9][0-9 ] .*'", "--ignore-matching-lines='Finished running:.*'", "--ignore-matching-lines='.*Location of special point.*'", "--ignore-matching-lines='[uU]sing .*'", "--ignore-matching-lines='.*Total Time.*'","log",outputname] status, output = AUTOutil.getstatusoutput(cmd) if status != 0: raise AUTOExceptions.AUTORegressionError( "Error: log files differ:\n%s"%output) os.system("rm -f log") def autoipython(funcs): # Use IPython in combination with AUTO # First import the shell class ipython011 = False ipython1x = False try: from IPython.terminal.prompts import Prompts, Token class MyPrompt(Prompts): def in_prompt_tokens(self, cli=None): return [ (Token.Prompt, 'AUTO In ['), (Token.PromptNum, str(self.shell.execution_count)), (Token.Prompt, ']: ') ] def continuation_prompt_tokens(self, cli=None, width=None): if width is None: width = self._width() return [(Token.Prompt, 'AUTO '+(width-10)*'.'+': ')] def out_prompt_tokens(self, cli=None): return [ (Token.OutPrompt, 'Out['), (Token.OutPromptNum, str(self.shell.execution_count)), (Token.OutPrompt, ']: ') ] ipython5x = True except ImportError: ipython5x = False try: # Check for ipython >=1.0 from IPython import start_ipython ipython1x = True except ImportError: try: import IPython.Shell except ImportError: try: # Check for ipython >= 0.11 from IPython.frontend.terminal.interactiveshell import TerminalInteractiveShell ipython011 = True except ImportError: print("Sorry, ipython is not available on this system.") return if ipython011 or ipython1x: if ipython1x: from traitlets.config import Config else: from IPython.config.loader import Config cfg = Config() if ipython5x: cfg.TerminalInteractiveShell.prompts_class = MyPrompt else: cfg.PromptManager.in_template="AUTO In [\\#]: " cfg.PromptManager.in2_template="AUTO .\\D.: " cfg.PromptManager.out_template="Out[\#]: " cfg.InteractiveShell.confirm_exit = False cfg.InteractiveShell.autocall = 2 cfg.InteractiveShell.banner2 =""" Welcome to the AUTO IPython CLUI man -> List of AUTO CLUI commands""" if ipython1x: sys.exit(start_ipython(user_ns=funcs, config=cfg)) return ipshell = TerminalInteractiveShell(config = cfg, user_ns = funcs ) ipshell.show_banner() ipshell.mainloop() return import IPython from IPython.iplib import InteractiveShell # Now create an instance of the embeddable shell. The first argument is a # string with options exactly as you would type them if you were starting # IPython at the system command line. Any parameters you want to define for # configuration can thus be specified here. args = ['-pi1','AUTO In [\\#]: ', '-pi2','AUTO .\\D.: ', '-po','Out[\#]: ', '-noconfirm_exit', '-autocall','2'] banner = ['Python %s\n' 'Type "copyright", "credits" or "license" ' 'for more information.\n' % (sys.version.split('\n')[0],), "IPython %s -- An enhanced Interactive Python." % (IPython.Release.version,), """? -> Introduction to IPython's features. %magic -> Information about IPython's 'magic' % functions. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. Welcome to the AUTO IPython CLUI man -> List of AUTO CLUI commands"""] class AUTOInteractiveShell(AUTOInteractive,InteractiveShell): def __init__(self,name,**kw): self.parentclass = InteractiveShell AUTOInteractive.__init__(self, kw["user_ns"], None) InteractiveShell.__init__(self,name,**kw) def prefilter(self,line,continue_prompt): if not continue_prompt: line = self.processShorthand(line) line = InteractiveShell.prefilter(self,line,continue_prompt) return line ipshell = IPython.Shell.IPShell(args, user_ns = funcs, user_global_ns = funcs, shell_class = AUTOInteractiveShell) ipshell.IP.user_ns['help'] = ipshell.IP.help ipshell.mainloop(banner = '\n'.join(banner)) def automain(name=None): import AUTOclui sys.ps1="AUTO> " opts_list,args=getopt.getopt(sys.argv[1:],"c:diqtT:L:") opts={} for x in opts_list: opts[x[0]]=x[1] demo_mode = 'no' use_ipython = 0 if "-t" in opts: test() sys.exit() elif "-q" in opts: _quicktest() sys.exit() elif "-i" in opts: use_ipython = 1 elif "-T" in opts: adjust_sys_path() _testFilename(opts["-T"],opts["-L"]) sys.exit() elif "-d" in opts: demo_mode = 'yes' try: import readline except: pass adjust_sys_path() funcs = AUTOclui.exportFunctions() runner = AUTOInteractiveConsole(funcs) if len(args) > 0: for arg in args: if demo_mode == 'no': runner.execfile(arg) else: sys.stdout.write("Python %s on %s\n%s\n(%s)\n" % (sys.version, sys.platform, sys.copyright, runner.__class__.__name__)) runner._demofile(arg) elif use_ipython: autoipython(funcs) elif "-c" in opts: source = "" for line in opts["-c"].split("\n"): source = source + runner.processShorthand(line) +"\n" runner.runsource(source,"-c","exec") else: runner.interact() if __name__ == "__main__": automain() auto/07p/python/auto/runDemo.py0000750000175000017500000000277613570013207014534 0ustar sksk#! /usr/bin/env python from auto import runAUTO from auto import AUTOExceptions def runDemo(demo,**kw): runner = runAUTO.runAUTO(**kw) runner.runDemo(demo) runner.config(log=None, err=None) def test(): import os import sys import AUTOutil log=open("log","w") err=open("err","w") stdout=sys.stdout class teelog(object): def write(self,text): log.write(text) stdout.write(text) def flush(self): log.flush() stdout.flush() runDemo("ab",log=teelog(),err=err,makefile="", demos_dir=os.path.join(os.environ["AUTO_DIR"],"python"), clean="yes") log.close() err.close() diffopts = ["diff","-b","--ignore-matching-lines='.*Total Time.*'", "--ignore-matching-lines='.*ab\.o.*'", "--ignore-matching-lines=' [0-9] .*'"] status,output=AUTOutil.getstatusoutput( diffopts+["log","test_data/runDemo.log"]) if status != 0: raise AUTOExceptions.AUTORegressionError("Log files differ") status,output=AUTOutil.getstatusoutput( diffopts+["err","test_data/runDemo.err"]) if status != 0: raise AUTOExceptions.AUTORegressionError("Error files differ") os.remove("log") os.remove("err") if __name__ == "__main__": import sys if len(sys.argv) == 1: test() if len(sys.argv) == 2: runDemo(sys.argv[1]) if len(sys.argv) == 3: runDemo(sys.argv[1],part=sys.argv[2]) auto/07p/python/auto/ab/0000750000175000017500000000000013570013207013114 5ustar skskauto/07p/python/auto/ab/c.ab0000750000175000017500000000060113570013207013642 0ustar sksk2 1 0 1 NDIM,IPS,IRS,ILP 1 1 NICP,(ICP(I),I=1,NICP) 50 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.05 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/ab/c.ab.10000750000175000017500000000060113570013207014001 0ustar sksk2 1 0 1 NDIM,IPS,IRS,ILP 1 1 NICP,(ICP(I),I=1,NICP) 50 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.05 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/ab/Makefile0000750000175000017500000000334413570013207014563 0ustar sksk# # Makefile 3/1994 Xianjun WANG # PGM = ab FC = f95 FFLAGS = -O SRC = $(PGM).f EXE = $(PGM).exe LIBS = $(AUTO_DIR)/lib/*.o RM = rm -f # all: clean $(EXE) run # $(EXE): $(SRC:.f=.o) $(FC) $(FFLAGS) $(SRC:.f=.o) -o $@ $(LIBS) # run: first second third fourth fifth # first: $(EXE) @echo " " @echo "Demo $(PGM) is started" @echo " " @echo "$(PGM) : first run : stationary solutions" @cp c.$(PGM).1 fort.2 @touch fort.3 @./$(EXE) @cp fort.7 b.$(PGM) @cp fort.8 s.$(PGM) @cp fort.9 d.$(PGM) @echo " Saved as *.$(PGM)" @$(RM) fort.* # second: $(EXE) @echo " " @echo "$(PGM) : second run : periodic solutions" @cp c.$(PGM).2 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 >> b.$(PGM) @cat fort.8 >> s.$(PGM) @cat fort.9 >> d.$(PGM) @echo " Appended to *.$(PGM)" @$(RM) fort.* # third: $(EXE) @echo " " @echo "$(PGM) : third run : a 2-parameter locus of folds" @cp c.$(PGM).3 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cp fort.7 b.2p @cp fort.8 s.2p @cp fort.9 d.2p @echo " Saved as *.2p" @$(RM) fort.* # fourth: $(EXE) @echo " " @echo "$(PGM) : fourth run : the locus of folds in reverse direction" @cp c.$(PGM).4 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 >> b.2p @cat fort.8 >> s.2p @cat fort.9 >> d.2p @echo " Appended to *.2p" @$(RM) fort.* # fifth: $(EXE) @echo " " @echo "$(PGM) : fifth run : a 2-parameter locus of Hopf points" @cp c.$(PGM).5 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 >> b.2p @cat fort.8 >> s.2p @cat fort.9 >> d.2p @echo " Appended to *.2p" @$(RM) fort.* @echo " " @echo "Demo $(PGM) is done" # clean: @echo "Cleaning $(PGM) ..." @cp $(SRC) $(EXE) @$(RM) *.exe *.o b.* s.* d.* fort.* *~ core @cp c.$(PGM).1 c.$(PGM) @echo "Cleaning ... done" auto/07p/python/auto/ab/ab.f0000750000175000017500000000440613570013207013654 0ustar skskC---------------------------------------------------------------------- C---------------------------------------------------------------------- C ab : The A --> B reaction C---------------------------------------------------------------------- C---------------------------------------------------------------------- C SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) C ---------- ---- C C Evaluates the algebraic equations or ODE right hand side C C Input arguments : C NDIM : Dimension of the ODE system C U : State variables C ICP : Array indicating the free parameter(s) C PAR : Equation parameters C C Values to be returned : C F : ODE right hand side values C C Normally unused Jacobian arguments : IJAC, DFDU, DFDP (see manual) C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM), PAR(*), F(NDIM), ICP(*) C U1=U(1) U2=U(2) E=DEXP(U2) C F(1)=-U1 + PAR(1)*(1-U1)*E F(2)=-U2 + PAR(1)*PAR(2)*(1-U1)*E - PAR(3)*U2 C RETURN END C---------------------------------------------------------------------- C---------------------------------------------------------------------- C SUBROUTINE STPNT(NDIM,U,PAR) C ---------- ----- C C Input arguments : C NDIM : Dimension of the ODE system C C Values to be returned : C U : A starting solution vector C PAR : The corresponding equation-parameter values C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM), PAR(*) C C Initialize the equation parameters PAR(1)=0. PAR(2)=14. PAR(3)=2. C C Initialize the solution U(1)=0. U(2)=0. C RETURN END C---------------------------------------------------------------------- C---------------------------------------------------------------------- C The following subroutines are not used here, C but they must be supplied as dummy routines C SUBROUTINE BCND RETURN END C SUBROUTINE ICND RETURN END C SUBROUTINE FOPT RETURN END C SUBROUTINE PVLS RETURN END C---------------------------------------------------------------------- C---------------------------------------------------------------------- auto/07p/python/auto/ab/c.ab.50000750000175000017500000000060313570013207014007 0ustar sksk2 1 4 1 NDIM,IPS,IRS,ILP 2 1 3 NICP,(ICP(I),I=1,NICP) 50 4 3 0 2 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS -0.01 0.005 0.5 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/ab/c.ab.30000750000175000017500000000060213570013207014004 0ustar sksk2 1 2 1 NDIM,IPS,IRS,ILP 2 1 3 NICP,(ICP(I),I=1,NICP) 50 4 3 0 2 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.5 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/ab/c.ab.40000750000175000017500000000060313570013207014006 0ustar sksk2 1 2 1 NDIM,IPS,IRS,ILP 2 1 3 NICP,(ICP(I),I=1,NICP) 50 4 3 0 2 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS -0.01 0.005 0.5 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/ab/c.ab.20000750000175000017500000000060113570013207014002 0ustar sksk2 2 4 0 NDIM,IPS,IRS,ILP 2 1 11 NICP,(ICP(I),I=1,NICP) 50 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 150 0 0.15 0 100 NMX,RL0,RL1,A0,A1 30 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1e-06 1e-06 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.5 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/bifDiag.py0000750000175000017500000003540613570013207014444 0ustar sksk#! /usr/bin/env python # this is an enhanced list of bifurcation branches: # the labels contain the solutions and diagnostics as well from auto import AUTOutil from auto import parseB from auto import parseC from auto import parseH from auto import parseS from auto import parseD from auto import Points from auto import AUTOExceptions import gzip import types import sys import struct class bifDiag(parseB.parseBR): # some constants must not be preserved from run to run. These are: nonekeys = set(["IRS", "PAR", "U", "sv", "s", "dat", "TY", "LAB", "IBR"]) def __init__(self,fort7_filename=None,fort8_filename=None, fort9_filename=None,constants=None): if (constants is not None and constants.get('sv') is not None and type(fort7_filename) in (type(""),type(None)) and type(fort8_filename) in (type(""),type(None)) and type(fort9_filename) in (type(""),type(None))): #filebased self.c = constants self.filenames = [fort7_filename,fort8_filename,fort9_filename] else: self.__realinit(fort7_filename,fort8_filename,fort9_filename, constants) def __realinit(self,fort7_filename,fort8_filename,fort9_filename,constants): ioerrors = [] try: parseB.parseBR.__init__(self,fort7_filename) for i, d in enumerate(self): self[i] = bifDiagBranch(d) except IOError: ioerrors.append(str(sys.exc_info()[1])) parseB.parseBR.__init__(self) fort7_filename = None if isinstance(fort8_filename, parseS.AUTOSolution): fort8_filename = [fort8_filename] try: solution = parseS.parseS(fort8_filename) except IOError: ioerrors.append(str(sys.exc_info()[1])) solution = None if fort7_filename is None: raise AUTOExceptions.AUTORuntimeError('\n'.join(ioerrors)) if fort7_filename is None and fort8_filename is not None: # simulate a bifurcation diagram labels = {} for s in solution: br = s["Branch number"] if labels == {} or br != branch.BR: if labels != {}: branch.labels = Points.PointInfo(labels) branch = bifDiagBranch() self.append(branch) branch.BR = br branch.coordarray = [] branch.coordnames = [] branch.headernames = [] branch.headerlist = [] branch.c = constants labels = {} base = 0 i = 0 pt = s["PT"] lab = s["LAB"] ty = s["TY number"] if i >= base + pt - 1: # point numbers wrapped around base += 9999 i = base + pt - 1 labels[i] = {s["TY"]: {"LAB":lab,"TY number":ty,"PT":pt}} if labels != {}: branch.labels = Points.PointInfo(labels) if fort9_filename is not None and self.data != []: try: # for now just attach diagnostics information to first branch self[0].diagnostics = parseD.parseD(fort9_filename) except IOError: pass i = 0 if solution is not None: for d in self: if constants is None and d.c is not None: constants = d.c constants = parseC.parseC(constants) for k in constants: if k in self.nonekeys: constants[k] = None for ind in d.labels.getIndices(): if i >= len(solution): break x = d._gettypelabel(ind)[1] s = solution[i] if x.get("LAB",0) != 0 or s["LAB"] == 0: i = i+1 s = x["solution"] = parseS.AUTOSolution( s, constants=constants) if d.coordnames != []: s.b = d[ind] #delayed file-based reading to save memory if sv= is used in run() def __getattr__(self,attr): if attr == 'c': if len(self)>0 and self[0].c is not None: return self[0].c elif attr == 'data': if hasattr(self,'filenames'): self.__realinit(self.filenames[0], self.filenames[1], self.filenames[2], self.c) del self.filenames del self.c return self.data return super(bifDiag, self).__getattribute__(attr) def __repr__(self): result = id(self) if result < 0: # avoid negative addresses and Python 2.3 warnings result += 256 ** struct.calcsize('P') return "<_=%s instance at %#010x>"%(self.__class__.__name__,result) def getLabel(self,label): sols = parseS.parseS() #adjust maximum label/branch mbr = max([abs(d["BR"]) for d in self] or [None]) mlab = max(self.getLabels() or [None]) for d in self: sols.extend(d.getLabel(None,mbr=mbr,mlab=mlab)) return sols(label) def __call__(self,label=None): return self.getLabel(label) def load(self,**kw): """Load solution with the given AUTO constants. Returns a shallow copy with a copied set of updated constants """ return self().load(**kw) def read(self,fort7_input,fort8_input=None,fort9_input=None): parseB.parseBR.read(self,fort7_input) for i, d in enumerate(self): self[i] = bifDiagBranch(d) if fort8_input is not None and ( isinstance(fort8_input, (file, gzip.GzipFile))): solution = parseS.parseS() solution.read(fort8_input) i = 0 for d in self: for k,x in map(d._gettypelabel, d.labels.getIndices()): if x.get("LAB",0) != 0: x["solution"] = solution[i] i = i+1 if fort9_input is not None: diagnostics = parseD.parseD() diagnostics.read(fort9_input) # for now just attach diagnostics information to the first branch self[0].diagnostics = diagnostics def write(self,fort7_output,fort8_output=None,fort9_output=None): parseB.parseBR.write(self,fort7_output) if fort8_output is not None: self().write(fort8_output) if fort9_output is not None: for d in self: if hasattr(d,"diagnostics"): d.diagnostics.write(fort9_output) def readFilename(self,fort7_filename,fort8_filename=None,fort9_filename=None): parseB.parseBR.readFilename(self,fort7_filename) for i, d in enumerate(self): self[i] = bifDiagBranch(d) if fort8_filename is not None and isinstance(fort8_filename, str): solution = parseS.parseS(fort8_filename) i = 0 for d in self: for k,x in map(d._gettypelabel, d.labels.getIndices()): if x.get("LAB",0) != 0: x["solution"] = solution[i] i = i+1 if not fort9_filename is None: # for now just attach diagnostics information to the first branch self[0].diagnostics = parseD.parseD(fort9_filename) def writeFilename(self,fort7_filename,fort8_filename=None,fort9_filename=None,append=False): #if only one filename is given, then just save the solutions file if fort8_filename is None: fort8_filename = fort7_filename elif len(self) > 0 and len(self[0]) > 0: parseB.parseBR.writeFilename(self,fort7_filename,append) if fort8_filename != '': self().writeFilename(fort8_filename,append) if not fort9_filename is None: for d in self: if hasattr(d,"diagnostics"): d.diagnostics.writeFilename(fort9_filename,append) append=True # Removes solutions with the given labels or type names def deleteLabel(self,label=None,keepTY=0,keep=0,copy=0): # accept a user-defined boolean function if isinstance(label, types.FunctionType): deletesols = self(label) data = [] for d in self: label = [s["LAB"] for s in deletesols if s.b.branch is d] data.append(d.deleteLabel(label,keepTY,keep,copy)) if copy: return self.__class__(data) return return parseB.parseBR.deleteLabel(self,label,keepTY,keep,copy) class bifDiagBranch(parseB.AUTOBranch): def __init__(self,input=None): parseB.AUTOBranch.__init__(self,input) def __getattr__(self,attr): if attr == "diagnostics": raise AttributeError return super(bifDiagBranch, self).__getattr__(attr) def getLabel(self,label,mbr=None,mlab=None): sols = [] for idx in self.labels.getIndices(): x = self._gettypelabel(idx)[1] if "solution" in x: br = abs(self["BR"]) pt = idx%9999 + 1 lab = x["LAB"] ty = x["TY number"] sol = x["solution"] if (sol._mlab != mlab or sol._mbr != mbr or br != sol["BR"] or pt != sol["PT"] or ty != sol["TY number"] or lab != sol["LAB"]): sol = sol.__class__(sol, BR=br, PT=pt, LAB=lab, TY=ty) sol._mlab = mlab sol._mbr = mbr sols.append(sol) return parseS.parseS(sols)(label) def load(self,**kw): """Load solution with the given AUTO constants. Returns a shallow copy with a copied set of updated constants """ return self().load(**kw) def write(self,fort7_output,fort8_output=None,fort9_output=None): parseB.AUTOBranch.write(self,fort7_output) if fort8_output is not None: self().write(fort8_output) if fort9_output is not None: if hasattr(self,"diagnostics"): self.diagnostics.write(fort9_output) def writeFilename(self,fort7_filename,fort8_filename=None,fort9_filename=None,append=False): #if only one filename is given, then just save the solutions file if fort8_filename is None: fort8_filename = fort7_filename elif len(self) > 0: parseB.AUTOBranch.writeFilename(self,fort7_filename,append) if fort8_filename != '': self().writeFilename(fort8_filename,append) if not fort9_filename is None: if hasattr(self,"diagnostics"): self.diagnostics.writeFilename(fort9_filename,append) append=True def deleteLabel(self,label=None,keepTY=0,keep=0,copy=0): # accept a user-defined boolean function if isinstance(label, types.FunctionType): label = [s["LAB"] for s in self(label)] new = parseB.AUTOBranch.deleteLabel(self,label,keepTY,keep,copy) if keepTY: if not copy: new = self for idx in new.labels.getIndices(): x = new._gettypelabel(idx)[1] if x["LAB"] ==0 and "solution" in x: del x["solution"] if copy: if hasattr(self,"diagnostics"): new.diagnostics = self.diagnostics return new def relabel(self,old_label=1,new_label=None): """Relabels the first solution with the given label""" if new_label is None: new = self.__class__(parseB.AUTOBranch.relabel(self,old_label)) if hasattr(self,"diagnostics"): new.diagnostics = self.diagnostics return new parseB.AUTOBranch.relabel(self,old_label,new_label) def pointtest7(a,b): if "TY name" not in a: raise AUTOExceptions.AUTORegressionError("No TY name label") if "TY number" not in a: raise AUTOExceptions.AUTORegressionError("No TY number label") if "BR" not in a: raise AUTOExceptions.AUTORegressionError("No BR label") if "data" not in a: raise AUTOExceptions.AUTORegressionError("No data label") if "PT" not in a: raise AUTOExceptions.AUTORegressionError("No PT label") if "LAB" not in a: raise AUTOExceptions.AUTORegressionError("No LAB label") if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def pointtest8(a,b): keys = ['Type number', 'Type name', 'Free Parameters', 'Branch number', 'Parameter NULL vector', 'data', 'NCOL', 'Label', 'ISW', 'NTST', 'Point number', 'Parameters'] scratch=a['Parameters'] scratch=b['Parameters'] for key in keys: if key not in a: raise AUTOExceptions.AUTORegressionError("No %s label"%(key,)) if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def test(): foo = bifDiag() foo.readFilename("test_data/fort.7","test_data/fort.8") if len(foo[0]) != 150: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest7(foo[0].getIndex(0),foo[0].getIndex(57)) if len(foo()) != 5: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest8(foo().getIndex(0),foo().getIndex(3)) if len(foo.getLabels()) != 5: raise AUTOExceptions.AUTORegressionError("Incorrect number of labels") print("Deleting labels") foo.deleteLabel(range(6,9)) if len(foo.getLabels()) != 2: raise AUTOExceptions.AUTORegressionError("Incorrect number of labels") print("Relabeling") foo.relabel(9,57) for i in range(len(foo[0])): if foo[0].getIndex(0)["TY number"] != 0: if foo[0].getIndex(0)["LAB"] != 57: raise AUTOExceptions.AUTORegressionError("Incorrect label") break if foo().getIndex(0)["Label"] != 57: raise AUTOExceptions.AUTORegressionError("Incorrect label") print("Making labels unique") foo.uniquelyLabel() for i in range(len(foo[0])): if foo[0].getIndex(0)["TY number"] != 0: if foo[0].getIndex(0)["LAB"] != 1: raise AUTOExceptions.AUTORegressionError("Incorrect label") break if foo().getIndex(0)["Label"] != 1: raise AUTOExceptions.AUTORegressionError("Incorrect label") print("bifDiag passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/test.py0000750000175000017500000000117313570013207014070 0ustar sksk#! /usr/bin/env python from auto import AUTOExceptions modules = ["parseB", "parseS", "parseBandS", "parseC", "parseH", "AUTOclui", "interactiveBindings", "AUTOCommands", "parseD", "bifDiag", "runDemo", "runAUTO"] regressions = [] for module in modules: print("-----------------------") print("Testing Module: %s\n"%module) mod = __import__(module) try: mod.test() except AUTOExceptions.AUTORegressionError: regressions.append(module) if regressions: print("Found regressions in: %s"%", ".join(regressions)) else: print("All regression tests were successful.") auto/07p/python/auto/__main__.py0000750000175000017500000000072013570013207014626 0ustar sksk#! /usr/bin/env python # Some ways to run AUTO: # a) python auto # b) import auto # auto.auto() # c) from auto import * if __name__ == "__main__": import sys, os autodir = os.path.dirname(os.path.abspath(__file__)) for autodirectory in autodir, os.path.dirname(autodir): if autodirectory not in sys.path: sys.path.insert(0, autodirectory) from auto import AUTOclui AUTOclui.auto() else: from auto.AUTOclui import * auto/07p/python/auto/wav/0000750000175000017500000000000013570013207013327 5ustar skskauto/07p/python/auto/wav/c.wav.40000750000175000017500000000104113570013207014431 0ustar sksk2 12 7 0 NDIM,IPS,IRS,ILP 2 3 10 NICP,(ICP(I),I=1,NICP) 20 4 3 0 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 25 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 75 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/wav/wav.f0000750000175000017500000000252513570013207014302 0ustar skskC---------------------------------------------------------------------- C---------------------------------------------------------------------- C wav : Periodic waves in an a nonlinear parabolic PDE C---------------------------------------------------------------------- C---------------------------------------------------------------------- C SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) C ---------- ---- C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM),PAR(*),F(NDIM) C R= U(2)/(PAR(5)+U(2)) * U(1)/(1+U(1)+PAR(6)*U(1)*U(1)) F(1)=-PAR(1)*( PAR(4)*R - (PAR(2)-U(1)) ) F(2)=-PAR(1)*( PAR(4)*R - PAR(7)*(PAR(3)-U(2)) ) C RETURN END C SUBROUTINE STPNT(NDIM,U,PAR) C ---------- ----- C IMPLICIT DOUBLE PRECISION (A-H,O-Z) DIMENSION U(NDIM),PAR(*) C PAR(1) = 3.0 PAR(2) = 145 PAR(3) = 539.23 PAR(4) = 210 PAR(5) = 3.4 PAR(6) = 0.023 PAR(7) = 0.2 C U(1) = 59.702 U(2) = 112.752 C PAR(10) = 0.05 PAR(15) = 1.0 PAR(16) = 5.0 C RETURN END C SUBROUTINE BCND RETURN END C SUBROUTINE ICND RETURN END C SUBROUTINE FOPT RETURN END C SUBROUTINE PVLS RETURN END auto/07p/python/auto/wav/c.wav.50000750000175000017500000000104113570013207014432 0ustar sksk2 14 7 0 NDIM,IPS,IRS,ILP 1 14 NICP,(ICP(I),I=1,NICP) 20 4 3 0 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 80 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 10 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/wav/c.wav.60000750000175000017500000000104113570013207014433 0ustar sksk2 13 19 0 NDIM,IPS,IRS,ILP 2 3 10 NICP,(ICP(I),I=1,NICP) 20 4 3 0 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 10 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 10 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/wav/c.wav.10000750000175000017500000000104113570013207014426 0ustar sksk2 1 0 1 NDIM,IPS,IRS,ILP 1 3 NICP,(ICP(I),I=1,NICP) 20 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 75 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 75 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/wav/Makefile0000750000175000017500000000405413570013207014775 0ustar sksk# # Makefile 3/1994 Xianjun WANG # PGM = wav FC = f95 FFLAGS = -O SRC = $(PGM).f EXE = $(PGM).exe LIBS = $(AUTO_DIR)/lib/*.o RM = rm -f # all: clean $(EXE) run # $(EXE): $(SRC:.f=.o) $(FC) $(FFLAGS) $(SRC:.f=.o) -o $@ $(LIBS) # #run: first second third fourth fifth sixth run: first second third fourth fifth # first: $(EXE) @echo " " @echo "Demo $(PGM) is started" @echo " " @echo "$(PGM) : first run : stationary solutions of the ODE" @cp c.$(PGM).1 fort.2 @touch fort.3 @./$(EXE) @echo " Saved as *.ode" @cp fort.7 b.ode @cp fort.8 s.ode @cp fort.9 d.ode @$(RM) fort.* # second: $(EXE) @echo " " @echo "$(PGM) : second run : stationary solutions of the reduced PDE" @cp c.$(PGM).2 fort.2 @./$(EXE) @cat fort.7 > b.$(PGM) @cat fort.8 > s.$(PGM) @cat fort.9 > d.$(PGM) @echo " Saved as *.$(PGM)" @$(RM) fort.* # third: $(EXE) @echo " " @echo "$(PGM) : third run : wave train solutions of fixed wave speed" @cp c.$(PGM).3 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 >> b.$(PGM) @cat fort.8 >> s.$(PGM) @cat fort.9 >> d.$(PGM) @echo " Appended to *.$(PGM)" @$(RM) fort.* # fourth: $(EXE) @echo " " @echo "$(PGM) : fourth run : fixed wave length waves on a ring" @cp c.$(PGM).4 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 > b.rng @cat fort.8 > s.rng @cat fort.9 > d.rng @echo " Saved as *.rng" @$(RM) fort.* # fifth: $(EXE) @echo " " @echo "$(PGM) : fifth run : time evolution computation" @cp c.$(PGM).5 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 > b.tim @cat fort.8 > s.tim @cat fort.9 > d.tim @echo " Saved as *.tim" @$(RM) fort.* @echo " " @echo "Demo $(PGM) is done" # sixth: $(EXE) @echo " " @echo "$(PGM) : sixth run : stationary wave continuation" @cp c.$(PGM).6 fort.2 @cp s.$(PGM) fort.3 @./$(EXE) @cat fort.7 >> b.$(PGM) @cat fort.8 >> s.$(PGM) @cat fort.9 >> d.$(PGM) @echo " Appended to *.$(PGM)" @$(RM) fort.* # clean: @echo "Cleaning $(PGM) ..." @cp $(SRC) $(EXE) @$(RM) *.exe *.o b.* s.* d.* fort.* *~ core @cp c.$(PGM).1 c.$(PGM) @echo "Cleaning ... done" auto/07p/python/auto/wav/c.wav0000750000175000017500000000104113570013207014267 0ustar sksk2 1 0 1 NDIM,IPS,IRS,ILP 1 3 NICP,(ICP(I),I=1,NICP) 20 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 75 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 75 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/wav/c.wav.30000750000175000017500000000107713570013207014441 0ustar sksk2 12 4 0 NDIM,IPS,IRS,ILP 2 3 11 NICP,(ICP(I),I=1,NICP) 20 4 3 0 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 75 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 75 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 3 NUZR,(/,I,PAR(I)),I=1,NUZR) 3 610. 3 630. 11 22. auto/07p/python/auto/wav/README0000750000175000017500000000013213570013207014206 0ustar skskType "make" to run the complete demo. Type "make clean" to clean (back to original state).auto/07p/python/auto/wav/c.wav.20000750000175000017500000000104113570013207014427 0ustar sksk2 11 0 1 NDIM,IPS,IRS,ILP 1 3 NICP,(ICP(I),I=1,NICP) 20 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 75 0.0 700.0 0.0 1000.0 NMX,RL0,RL1,A0,A1 75 10 2 8 7 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.5 0.1 10.0 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0.0 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/python/auto/parseC.py0000750000175000017500000004472113570013207014334 0ustar sksk#!/usr/bin/env python # Visualization for Bifurcation Manifolds # Copyright (C) 1997 Randy Paffenroth and John Maddocks # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA import sys from auto import AUTOExceptions from auto import AUTOutil from auto import parseB # The parseC class parses an AUTO parameter file # THESE EXPECT THE FILE TO HAVE VERY SPECIFIC FORMAT! # it provides 4 methods: # read and write take as an arguement either and input or output # stream (basically any object with has the method "readline" # for reading and "write" for writing) # # readFilename and writeFilename take as an arguement a filename # in which to read/write the parameters (basically it opens the # file and then calles "read" or "write" # # Once the data is read in the class provides a dictionary # interface for manipulating the file. class parseC(dict): line_comments = ["NDIM,IPS,IRS,ILP", "NICP,(ICP(I),I=1 NICP)", "NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT", "NMX,RL0,RL1,A0,A1", "NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC", "EPSL,EPSU,EPSS", "DS,DSMIN,DSMAX,IADS", "NTHL,(/,I,THL(I)),I=1,NTHL)", "NTHU,(/,I,THU(I)),I=1,NTHU)", "NUZR,(/,I,PAR(I)),I=1,NUZR)"] # These keys are preserved when reading in a new constants file, # and the keys are not in the constants file # Other keys are set to "None" special_keys = ["unames", "parnames", "e", "homcont"] def __init__(self, filename=None, **kw): self["new"] = True if filename is not None and type(filename) != type(""): dict.__init__(self, filename) self.update(**kw) return dict.__init__(self) for key in ['NPR', 'EPSS', 'ITMX', 'EPSU', 'ITNW', 'NBC', 'IADS', 'IPS', 'IID', 'IIS', 'A1', 'DS', 'NMX', 'NTST', 'NINT', 'NWTN', 'A0', 'EPSL', 'ISP', 'DSMIN', 'MXBF', 'RL0', 'RL1', 'IPLT', 'ILP', 'NCOL', 'DSMAX', 'ISW', 'IRS', 'IAD', 'JAC', 'NDIM', 'NPAR', 'IBR', 'LAB', 'TY', 'NUNSTAB', 'NSTAB', 'IEQUIB', 'ITWIST', 'ISTART', 'sv', 's', 'dat', "THL","THU","UZR","UZSTOP","ICP","IREV","IFIXED","IPSI","U","PAR", "SP","STOP"]: self[key] = None if filename: self.readFilename(filename) self.update(**kw) def __setitem__(self, key, item): if key in ["THL", "THU", "UZR", "UZSTOP", "U", "PAR", "unames", "parnames"]: if item is not None: if key == "PAR": from auto import parseS if isinstance(item,parseS.AUTOParameters): item = [(k,item(k)) for k in range(1,len(item)+1)] if isinstance(item, dict): item = item.items() new = [] for x in item: if isinstance(x, dict): new.append([x["PAR index"], x["PAR value"]]) else: new.append([x[0], x[1]]) item = new elif key == "DS" and item == '-': if self[key] is None: item = -0.01 else: item = -self[key] dict.__setitem__(self, key, item) def update(self, d=None, **kw): """ Change the options for this parseC object""" dct = d if dct is None: dct = {} dct.update(kw) for key in dct: value = dct[key] if self.get("homcont") is not None and key in self["homcont"]: self["homcont"][key] = value elif key in self or key in self.special_keys: self[key] = value elif key[:7] != 'Active ': raise AUTOExceptions.AUTORuntimeError( "Unknown option: %s"%(key,)) def setdefault(self, *args): k = args[0] if len(args) > 1: d = args[1] else: d = None if k not in self: self[k] = d return self.get(*args) def readFilename(self, filename): inputfile = open(filename, "r") self.read(inputfile) inputfile.close() def writeFilename(self, filename, new=False): output = open(filename, "w") self.write(output, new) output.close() def scanvalue(self, line, inputfile=None): # Scans line for a value # returns the value, followed by the rest of the line # The value is returned as a flat list of strings if the line # starts with [ and otherwise as a single string level = 0 quote = ' ' quoteesc = False prev = ' ' npos = 0 value = '' isdict = False v = '' line = line.strip() i = 0 while True: if i == len(line): if level == 0 or inputfile is None: break line = inputfile.readline().strip() i = 0 npos = i c = line[i] if quote == ' ': if c in [',', ' ']: if level == 0: break elif c == ':': pass elif c in [']', '}']: if c == '}': isdict = False if level == 1 and prev in ['[', '{']: value = [] level = level - 1 if v != '': value.append(v) v = '' if c == ']' and isdict: value.append(']') else: if prev in [',', ' ', ':'] and level > 0 and v != '': value.append(v) v = '' if c in ['[','{']: if level == 0: value = [] level = level + 1 if c == '{': isdict = True elif isdict: value.append('[') elif c in ['"', "'"]: quote = c else: v = v + c elif c == quote: # ignore "" and '' if (i+1 < len(line) and line[i+1] == c) or quoteesc: quoteesc = not quoteesc else: quote = ' ' else: v = v + c prev = c i = i + 1 if v != '': value = v while npos < len(line) and line[npos] in [" ", ","]: npos = npos + 1 if npos >= len(line) - 1: line = '' else: line = line[npos:].strip() return value, line def parseline(self, line, userspec=False, inputfile=None, lineno=None): # parses a new-style constant file line and puts the keys # in the dictionary c; also used for the header of a b. file while line != "": line = line.strip() if line[0] in ['#', '!', '_']: return pos = line.find('=') if pos == -1: return key = line[:pos].strip() value, line = self.scanvalue(line[pos+1:],inputfile) if key in ['ICP', 'IREV', 'IFIXED', 'IPSI']: d = [] for v in value: try: v = int(v) except ValueError: pass d.append(v) value = d elif key in ['THU', 'THL', 'UZR', 'UZSTOP', 'U', 'PAR']: d = [] i = 0 while i < len(value): try: v0 = int(value[i]) except ValueError: v0 = value[i] if value[i+1] == '[': i = i + 1 v1 = [] while i+1 < len(value) and value[i+1] != ']': v1.append(parseB.AUTOatof(value[i+1])) i = i + 1 else: v1 = parseB.AUTOatof(value[i+1]) d.append([v0,v1]) i = i + 2 value = self.__compactindexed(d) elif key in ['unames', 'parnames']: value = [[int(value[i]),value[i+1]] for i in range(0,len(value),2)] elif key in ['s', 'dat', 'sv', 'e', 'SP', 'STOP', 'TY']: pass elif key in self: if key[0] in 'IJKLMN': if value[0] == '*': value = 10**len(value) elif key == 'IRS': try: value = int(value) except ValueError: pass else: value = int(value) else: value=parseB.AUTOatof(value) elif lineno is not None: raise AUTOExceptions.AUTORuntimeError( "Unknown AUTO constant %s on line %d"%(key,lineno)) else: value = None if value is not None: if userspec: self["Active "+key] = self[key] self[key] = value def read(self, inputfile): line = inputfile.readline() lineno = 1 while line != '': data = line.split() if len(data) > 0: if data[0][0].isdigit(): break self.parseline(line,inputfile=inputfile,lineno=lineno) line = inputfile.readline() lineno += 1 if line == '': return self["new"] = False self["NDIM"] = int(data[0]) self["IPS"] = int(data[1]) try: self["IRS"] = int(data[2]) except ValueError: self["IRS"] = data[2] self["ILP"] = int(data[3]) line = inputfile.readline() data = line.split() icp = [] for i in range(int(data[0])): d = data[i+1] try: d = int(d) except ValueError: pass icp.append(d) self["ICP"] = icp for line_comment in self.line_comments[2:7]: line = inputfile.readline() data = line.split() for d, key in zip(data, line_comment.split(",")): if key[0] in 'IJKLMN': self[key] = int(d) else: self[key] = parseB.AUTOatof(d) for key in ["THL", "THU", "UZR"]: line = inputfile.readline() data = line.split() item = [] for i in range(int(data[0])): line = inputfile.readline() data = line.split() d = data[0] try: d = int(d) except ValueError: pass item.append([d, parseB.AUTOatof(data[1])]) self[key] = item def __compactindexed(self, value): """compact THL/THU/UZR lists""" d = [] v0s = [] for v0, v1 in value: if v0 in v0s: if not AUTOutil.isiterable(v1): v1 = [v1] # add to list when parameter was already encountered try: d[v0s.index(v0)][1].extend(v1) except AttributeError: d[v0s.index(v0)][1] = [d[v0s.index(v0)][1]] d[v0s.index(v0)][1].extend(v1) else: v0s.append(v0) d.append([v0,v1]) return d def __compactstr(self, value): """check if we can use more compact output than str...""" try: str1 = "%.5g" % value str2 = str(value) if float(str1) == float(str2) and 'e' in str1: return str1 return str2 except TypeError: l = [] for v in value: l.append(self.__compactstr(v)) return '['+", ".join(l)+']' def __newstr(self, lines=None): wdth3keys = ["NMX", "NPR", "NBC", "JAC", "e"] wdth5keys = ["EPSU", "EPSS"] if lines is None: lines = [ ["e", "s", "dat", "sv"], ["unames", "parnames"], ["U", "PAR"], ["NDIM", "IPS", "IRS", "ILP"], ["ICP"], ["NTST", "NCOL", "IAD", "ISP", "ISW", "IPLT", "NBC", "NINT"], ["NMX", "NPR", "MXBF", "IID", "ITMX", "ITNW", "NWTN", "JAC"], ["EPSL", "EPSU", "EPSS"], ["DS", "DSMIN", "DSMAX", "IADS"], ["NPAR", "THL", "THU"], ["IIS", "IBR", "LAB", "TY"], ["UZR"], ["UZSTOP"], ["STOP"], ["SP"], ["RL0", "RL1", "A0", "A1"], ["NUNSTAB", "NSTAB", "IEQUIB", "ITWIST", "ISTART"], ["IREV", "IFIXED", "IPSI"]] olist = [] for line in lines: pos = 0 for key in line: value = self.get(key) if value is None: continue if pos > 0: olist.append(", ") pos = pos + 1 if key in wdth3keys: s = "%-3s=" % key elif key in wdth5keys: s = "%-5s=" % key else: s = "%-4s=" % key olist.append(s) if key in ["ICP", "IREV", "IFIXED", "IPSI", "STOP", "SP"]: s = " "+str(value) elif key in ["THL", "THU", "UZR", "UZSTOP", "U", "PAR"]: l = ["'"+str(k)+"': "+self.__compactstr(v) for k, v in value] s = " {"+", ".join(l)+"}" elif key in ["unames", "parnames"]: l = [str(k)+": '"+str(v)+"'" for k, v in value] s = "{"+", ".join(l)+"}" elif key in ["sv", "s", "dat", "e", "TY"]: value = "'"+str(value)+"'" if key in wdth3keys: s = "%5s" % value else: s = "%4s" % value elif key[0] in ["A", "D", "E", "R"]: value = self.__compactstr(value) s = "%6s" % value elif pos > 4: s = "%2s" % value elif key in wdth3keys: s = "%5s" % value else: s = "%4s" % value olist.append(s) if pos > 0: olist.append("\n") return "".join(olist) def __oldstr(self): olist = [self.__newstr([ ["e", "s", "dat", "sv"], ["unames", "parnames"], ["U", "PAR"], ["NPAR", "IBR", "LAB"], ["STOP"], ["SP"], ["NUNSTAB", "NSTAB", "IEQUIB", "ITWIST", "ISTART"], ["IREV", "IFIXED", "IPSI"]])] for j, line_comment in enumerate(self.line_comments): if j==1: s = " ".join([str(len(self["ICP"]))]+map(str,self["ICP"])) elif j==7: s = str(len(self["THL"])) elif j==8: s = str(len(self["THU"])) elif j==9: uzrlist = [] for k, v in self["UZR"] or []: if not AUTOutil.isiterable(v): v = [v] for vv in v: uzrlist.append([k, vv]) s = str(len(uzrlist)) else: s = " ".join([str(self[d]) for d in line_comment.split(",")]) olist.append(s+" "*(max(24-len(s),1))+line_comment+"\n") if j==7: for k, v in self["THL"] or []: olist.append("%s %s\n" % (k, v)) elif j==8: for k, v in self["THU"] or []: olist.append("%s %s\n" % (k, v)) elif j==9: for k, v in uzrlist: olist.append("%s %s\n" % (k, v)) return "".join(olist) def __str__(self): if self["new"]: return self.__newstr() else: return self.__oldstr() def write(self, output, new=False): if new and not self["new"]: for key in ["UZR", "THL", "THU"]: self[key] = self.__compactindexed(self[key]) output.write(self.__newstr()) else: output.write(str(self)) def pointtest(a): keys = ['NPR', 'UZR', 'EPSS', 'ITMX', 'EPSU', 'ITNW', 'NBC', 'IADS', 'IPS', 'IID', 'A1', 'DS', 'NMX', 'NTST', 'NINT', 'NWTN', 'A0', 'EPSL', 'ISP', 'DSMIN', 'MXBF', 'RL0', 'RL1', 'ICP', 'IPLT', 'ILP', 'NCOL', 'THL', 'DSMAX', 'ISW', 'IRS', 'THU', 'IAD', 'JAC', 'NDIM'] for key in keys: if key not in a: raise AUTOExceptions.AUTORegressionError("No %s label"%(key,)) def test(): print("Testing reading from a filename") foo = parseC() foo.readFilename("test_data/c.ab") pointtest(foo) foo.write(sys.stdout, new=True) print("Testing reading from a stream") foo = parseC() fp = open("test_data/c.ab", "r") foo.read(fp) pointtest(foo) print("parseC passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/AUTOutil.py0000750000175000017500000003636513570013207014572 0ustar sksk#! /usr/bin/env python try: from ConfigParser import ConfigParser except ImportError: # Python 3 from configparser import ConfigParser import os import array import gzip import sys from auto import AUTOExceptions N = array # This file contains code from the Python distribution. As # per the Python License we include the following: ## ----------------------------------------------------------------------- ## Copyright 1991-1995 by Stichting Mathematisch Centrum, Amsterdam, ## The Netherlands. ## All Rights Reserved ## Permission to use, copy, modify, and distribute this software and its ## documentation for any purpose and without fee is hereby granted, ## provided that the above copyright notice appear in all copies and that ## both that copyright notice and this permission notice appear in ## supporting documentation, and that the names of Stichting Mathematisch ## Centrum or CWI or Corporation for National Research Initiatives or ## CNRI not be used in advertising or publicity pertaining to ## distribution of the software without specific, written prior ## permission. ## While CWI is the initial source for this software, a modified version ## is made available by the Corporation for National Research Initiatives ## (CNRI) at the Internet address ftp://ftp.python.org. ## STICHTING MATHEMATISCH CENTRUM AND CNRI DISCLAIM ALL WARRANTIES WITH ## REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF ## MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH ## CENTRUM OR CNRI BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL ## DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ## PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER ## TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR ## PERFORMANCE OF THIS SOFTWARE. ## ----------------------------------------------------------------------- # Portions taken from SCons and AIMA: # # http://code.google.com/p/aima-python/source/browse/trunk/utils.py # # __COPYRIGHT__ # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY # KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Portions of the following are derived from the compat.py file in # Twisted, under the following copyright: # # Copyright (c) 2001-2004 Twisted Matrix Laboratories try: unicode except NameError: # 'unicode' is undefined, must be Python 3 basestring = (str,bytes) def isiterable(value): # no strings! if isinstance(value, basestring): return False try: iter(value) return True except TypeError: return False def findBaseClass(inputClass,baseClass): try: for base in inputClass.__bases__: if base == baseClass: return 1 elif findBaseClass(base,baseClass) == 1: return 1 return 0 # Sometimes inputClass isn't really a class, if so we just return false except AttributeError: return 0 def getAUTORC(section=None): try: parser = ConfigParser(strict=False) except TypeError: # for Python 2.x without strict parser = ConfigParser() if section is not None: parser.add_section(section) path = os.path.expandvars("$AUTO_DIR/.autorc") if os.path.exists(path): parser.read(path) path = os.path.expandvars("$HOME/.autorc") if os.path.exists(path): parser.read(path) if os.path.exists("./autorc"): parser.read("./autorc") elif os.path.exists("./.autorc"): parser.read("./.autorc") return parser def openFilename(filename,mode): try: inputfile = open(filename,mode) except IOError: s = sys.exc_info()[1] try: import gzip inputfile = gzip.open(filename+".gz",mode) inputfile.name = filename except IOError: raise IOError(s) return inputfile def getstatusoutput(cmd, shell=False): try: import subprocess, os if not shell: for i in range(len(cmd)): cmd[i] = cmd[i].replace("'","") p = subprocess.Popen(cmd, shell=shell, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) output = p.communicate() s = output[0].decode('ascii') if len(s) > 0 and s[-1] == '\n': s = s[:-1] return p.returncode, s except ImportError: import commands if isiterable(cmd): cmd = " ".join(cmd) return commands.getstatusoutput(cmd) def format19_10E3(x): s = "%19.10E"%x if s[-4] == 'E': s = s[1:-2] + '0' + s[-2:] return s try: import __builtin__ except ImportError: import builtins as __builtin__ # Python 3 try: raw_input except NameError: # Python 3 __builtin__.raw_input = input try: all except NameError: # Pre-2.5 Python has no all() function. def all(iterable): """ Returns True if all elements of the iterable are true. """ for element in iterable: if not element: return False return True __builtin__.all = all all = all try: any except NameError: # Pre-2.5 Python has no any() function. def any(iterable): """ Returns True if any element of the iterable is true. """ for element in iterable: if element: return True return False __builtin__.any = any any = any try: reversed ## Introduced in 2.4 except NameError: def reversed(seq): """Iterate over x in reverse order. >>> list(reversed([1,2,3])) [3, 2, 1] """ if hasattr(seq, 'keys'): raise ValueError("mappings do not support reverse iteration") i = len(seq) while i > 0: i -= 1 yield seq[i] __builtin__.reversed = reversed try: sorted ## Introduced in 2.4 except NameError: import copy def sorted(seq, cmp=None, key=None, reverse=False): """Copy seq and sort and return it. >>> sorted([3, 1, 2]) [1, 2, 3] """ seq2 = copy.copy(seq) if key: if cmp == None: cmp = __builtins__.cmp seq2.sort(lambda x,y: cmp(key(x), key(y))) else: if cmp == None: seq2.sort() else: seq2.sort(cmp) if reverse: seq2.reverse() return seq2 __builtin__.sorted = sorted try: set, frozenset ## set builtin introduced in 2.4 except NameError: import sets ## sets module introduced in 2.3 set, frozenset = sets.Set, sets.ImmutableSet __builtin__.set = set __builtin__.frozenset = frozenset # very basic 1D/2D numpy emulation: class array(object): def __init__(self, l, code=None, copy=True): self.base = 0 if code is None: if isinstance(l, array): code = l.typecode else: code = 'd' if isinstance(l, array): if not copy: self.base = l.base self.typecode = l.typecode self.data = l.data self.__shape = l.shape self.strides = l.strides return l = l.tolist() if (isinstance(l, list) and len(l) > 0 and isinstance(l[0], (array, list))): a2 = [] for a1 in l: if isinstance(a1, array): a1 = a1.tolist() a2.extend(a1) self.data = N.array(code, a2) self.__shape = len(l), len(l[0]) self.strides = len(l[0]), 1 else: if not isiterable(l): l=[l] self.data = N.array(code, l) self.__shape = len(self.data), self.strides = 1, self.typecode = code def __copy__(self): return array(self) copy = __copy__ def __eq__(self, other): return array([a == b for a, b in zip(self, other)], 'B') def __ne__(self, other): return array([a != b for a, b in zip(self, other)], 'B') def __gt__(self, other): return array([a > b for a, b in zip(self, other)], 'B') def __lt__(self, other): return array([a < b for a, b in zip(self, other)], 'B') def __ge__(self, other): return array([a >= b for a, b in zip(self, other)], 'B') def __le__(self, other): return array([a <= b for a, b in zip(self, other)], 'B') def __add__(self, other): return array([a + other for a in self], self.typecode) def __mul__(self, other): return array([a * other for a in self], self.typecode) def __setattr__(self, attr, value): if attr == 'shape': length = 1 for idx in self.__shape: length *= idx j = None for i, idx in enumerate(value): if idx == -1: j = i elif idx != 0: length //= idx if j is not None: value = value[:j] + (length,) + value[j+1:] self.__shape = value if len(value) == 2: self.strides = value[1], 1 else: self.strides = 1, else: object.__setattr__(self, attr, value) def __getattr__(self, attr): if attr == 'shape': return self.__shape return object.__getattribute__(self, attr) def __subarray(self, i): if not isinstance(i, tuple): i = i, if len(i) < len(self.__shape): i = i + (slice(None),) base = self.base strides = [] shape = [] for j, idx in enumerate(i): if isinstance(idx, slice): idx, stop, step = idx.indices(self.__shape[j]) strides.append(step*self.strides[j]) shape.append(abs(stop-idx+step-1)//abs(step)) else: if idx < 0: idx += self.__shape[j] if idx < 0 or idx >= self.__shape[j]: raise IndexError base += idx*self.strides[j] return base, strides, shape def __setitem__(self, i, v): base, strides, shape = self.__subarray(i) if len(strides) == 0: self.data[base] = v elif len(strides) == 1: stop = base+strides[0]*shape[0] if stop < 0: stop = None if isinstance(v,array): self.data[base:stop:strides[0]] = v._arrayslice() else: self.data[base:stop:strides[0]] = N.array(self.typecode, v) else: raise AUTOExceptions.AUTORuntimeError("2D updates only " "supported with numpy.") def __getitem__(self, i): base, strides, shape = self.__subarray(i) if len(strides) == 0: return self.data[base] new = array(self, copy=False) new.base = base new.shape = tuple(shape) new.strides = tuple(strides) return new def __len__(self): return self.shape[0] def _arrayslice(self): stop = self.base+self.shape[0]*self.strides[0] if stop < 0: stop = None return self.data[self.base:stop:self.strides[0]] def __str__(self): return array2string(self) def tolist(self): if len(self.shape) == 1: return self._arrayslice().tolist() return [e.tolist() for e in self] def rank(a): return len(a.shape) def reshape(a,shape): new = array(a, copy=False) if isinstance(shape,int): shape = shape, new.shape = shape return new def transpose(a): new = array(a, copy=False) new.shape = a.shape[::-1] new.strides = a.strides[::-1] return new def take(a, idx, axis=0): try: if axis == 1: return array([[j[i] for i in idx] for j in a]) return array([a[i] for i in idx]) except TypeError: raise IndexError def array2string(a,precision=0,format=None): indent = 1 if a.typecode == 'd' and format is None: indent = 0 absa = [abs(e) for e in ravel(a) if e != 0] if absa != []: minval = min(absa) maxval = max(absa) else: maxval = minval = 1 if minval < 0.0001 or maxval > minval * 1000: maxlen = 16 + (0 < minval < 1e-99 or maxval >= 1e100) format = "%%%s.8e"%maxlen else: precision = 0 for e in absa: s = "%.8f"%e precision = max(precision, 8 - (len(s) - len(s.rstrip("0")))) maxlen = len(str(int(maxval))) + precision + 2 format = "%%#%s.%sf"%(maxlen, precision) if len(a.shape) == 2: return "["+"\n ".join([array2string(e,format=format) for e in a])+"]" if a.typecode == 'B': return '[ '+" ".join([str(e == 1) for e in a])+']' if a.typecode == 'd': ss = [format%e for e in a] if format[-1] == 'f': for i, s in enumerate(ss): t = s.rstrip("0") ss[i] = t + (len(s)-len(t))*" " if len(ss) > 0: itemsperline = 77//(1+len(ss[0])) for i in range(itemsperline-1, len(ss)-1, itemsperline): ss[i] = ss[i]+"\n"+" "*indent return '['+" ".join(ss)+']' return '[ '+" ".join(map(str, a))+']' def shape(a): try: return a.shape except AttributeError: return array(a).shape def zeros(dim,code): if len(dim) == 1: return array(dim[0]*[0.0],code) return array([array(dim[1]*[0.0],code) for i in range(dim[0])],code) def less(a, val): return array([v < val for v in a], a.typecode) def ravel(a): if len(a.shape) == 1: return a new = array([]) new.data = a.data new.shape = a.shape[0]*a.shape[1], new.strides = a.strides[1], new.base = a.base return new ArrayType = array def test(): a=array([1,2,3,4]) print("%s"%a[::-1]) a=array([[1,2],[3,4]]) print("%s %s"%(a[:,1],a[1,:])) print("%s"%a[:,::-1]) print("%s"%a[::-1,:]) print("%s"%a[::-1]) print("%s"%a[-1,-1]) print("%s"%a[::-1,::-1]) b=array(a) b[0][0] = 4 print("%s,%s"%(a,b)) b[0,:]=[7,8] print("%s"%(b)) if __name__ == "__main__": test() auto/07p/python/auto/AUTOclui.py0000750000175000017500000001260013570013207014533 0ustar sksk#! /usr/bin/env python from auto import AUTOutil import sys import os from auto import AUTOCommands from auto import runAUTO from auto import interactiveBindings try: import __builtin__ from new import function except ImportError: import builtins as __builtin__ # Python 3 from types import FunctionType class AUTOSimpleFunctions: def __init__(self,outputRecorder=None,errorRecorder=None): # Initialize the global AUTO runner runner = runAUTO.runAUTO() if outputRecorder is not None: stdout = sys.stdout class WriteLog(object): def write(self,s): outputRecorder.write(s) stdout.write(s) def flush(self): outputRecorder.flush() stdout.flush() runner.config(log=WriteLog()) if errorRecorder is not None: stderr = sys.stderr class WriteErr(object): def write(self,s): errorRecorder.write(s) stderr.write(s) def flush(self): errorRecorder.flush() stderr.flush() runner.config(err=WriteErr()) self._runner = runner # Read in the aliases. self._aliases = None parser = AUTOutil.getAUTORC() if parser.has_section("AUTO_command_aliases"): self._aliases = {} for option in parser.options("AUTO_command_aliases"): cmd = parser.get("AUTO_command_aliases",option) if cmd not in self._aliases: self._aliases[cmd] = [] self._aliases[cmd].append(option) self._addCommands([AUTOCommands]) # Now I resolve the aliases for key, aliases in self._aliases.items(): for alias in aliases: f = self._copyfunction(getattr(AUTOCommands,key).fun, alias) setattr(self, alias, f) doc = getattr(AUTOCommands,key).__doc__ doc = self._adjustdoc(doc, alias, key) f.__doc__ = doc def _copyfunction(self, f, key): def withrunner(runner=None): return self._runner or runner if 'FunctionType' in globals(): func_globals = f.__globals__.copy() func_globals["withrunner"] = withrunner return FunctionType(f.__code__, func_globals, key, f.__defaults__, f.__closure__) else: func_globals = f.func_globals.copy() func_globals["withrunner"] = withrunner return function(f.func_code, func_globals, key, f.func_defaults or ()) def _adjustdoc(self, doc, commandname, truecommandname = None): # If we were created with the nonempty string return a formatted # reference for the given command as the string if doc == None: return doc # Get rid of the LaTeX stuff from the string that gets returned. doc = doc.replace("\\begin{verbatim}","") doc = doc.replace("\\end{verbatim}","") doc = doc + "\n" doc = doc.replace("FUNC", commandname) # This means help was asked for an alias if not truecommandname is None: commandname = truecommandname doc = doc + "Command name: "+commandname+"\n" doc = doc + "Aliases: " if commandname in self._aliases: doc = doc + " ".join(self._aliases[commandname]) return doc def _addCommands(self,moduleList): addaliases = self._aliases is None if addaliases: self._aliases = {} for module in [AUTOCommands]: # Now we copy the commands from the module for key in module.__dict__: cmd = getattr(module,key) # Check to see if it is a command if hasattr(cmd,"fun"): if addaliases and cmd.alias is not None: self._aliases[key] = [cmd.fun.__name__] + cmd.alias f = self._copyfunction(cmd.fun, key) setattr(self, key, f) doc = cmd.__doc__ doc = self._adjustdoc(doc, key) f.__doc__ = doc # Export the functions inside AUTOSimpleFunctions in a dictionary # This also allows the setting of the log def exportFunctions(log=None,err=None): AUTOSimpleFunctionsInstance = AUTOSimpleFunctions(log,err) dict = {} for name in AUTOSimpleFunctionsInstance.__dict__: dict[name] = getattr(AUTOSimpleFunctionsInstance, name) return dict # Export the functions inside AUTOSimpleFunctions in this modules namespace # This is to make "from AUTOclui import *" work # ALMOST like the AUTOInteractiveConsole. Things that # don't work are help, shell, !, ls, cd, and any changes # to the aliases if "AUTO_DIR" not in os.environ: absfile = os.path.abspath(__file__) autodir = os.path.dirname(os.path.dirname(os.path.dirname(absfile))) os.environ["AUTO_DIR"] = autodir funcs = exportFunctions() runner = interactiveBindings.AUTOInteractiveConsole(funcs) for name,value in funcs.items(): if name not in __builtin__.__dict__: globals()[name] = value def test(): interactiveBindings._testFilename("../demos/python/fullTest.auto","test_data/fullTest.log") if __name__ == "__main__": test() auto/07p/python/auto/parseH.py0000750000175000017500000001214013570013207014327 0ustar sksk#!/usr/bin/env python # Visualization for Bifurcation Manifolds # Copyright (C) 1997 Randy Paffenroth and John Maddocks # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA from auto import AUTOExceptions # The parseH class parses an AUTO parameter file # THESE EXPECT THE FILE TO HAVE VERY SPECIFIC FORMAT! # it provides 4 methods: # read and write take as an arguement either and input or output # stream (basically any object with has the method "readline" # for reading and "write" for writing) # # readFilename and writeFilename take as an arguement a filename # in which to read/write the parameters (basically it opens the # file and then calles "read" or "write" # # Once the data is read in the class provides a dictionary # interface for manipulating the file. class parseH(dict): line1_comment = "NUNSTAB,NSTAB,IEQUIB,ITWIST,ISTART" line2_comment = "NREV,/,IREV(I),I=1,NDIM)" line3_comment = "NFIXED,(/,I,IFIXED(I)),I=1,NFIXED)" line4_comment = "NPSI,(/,I,IPSI(I)),I=1,NPSI)" def __init__(self, filename=None): if filename is not None and type(filename) != type(""): dict.__init__(self, filename) return dict.__init__(self) for key in ['NUNSTAB', 'NSTAB', 'IEQUIB', 'ITWIST', 'ISTART', 'NREV', 'NFIXED', 'NPSI', 'IREV', 'IFIXED', 'IPSI']: self[key] = None if filename: self.readFilename(filename) def readFilename(self, filename): inputfile = open(filename, "r") self.read(inputfile) inputfile.close() def writeFilename(self, filename): output = open(filename, "w") self.write(output) output.close() def read(self, inputfile): line = inputfile.readline() data = line.split() self["NUNSTAB"] = int(data[0]) self["NSTAB"] = int(data[1]) self["IEQUIB"] = int(data[2]) self["ITWIST"] = int(data[3]) self["ISTART"] = int(data[4]) line = inputfile.readline() data = line.split() nrev = int(data[0]) data = [] if nrev > 0: line = inputfile.readline() data = line.split() self["IREV"] = map(int, data) self["NREV"] = nrev line = inputfile.readline() data = line.split() nfixed = int(data[0]) data = [] if nfixed > 0: line = inputfile.readline() data = line.split() self["IFIXED"] = map(int, data[:nfixed]) self["NFIXED"] = nfixed line = inputfile.readline() data = line.split() npsi = int(data[0]) data = [] if npsi > 0: line = inputfile.readline() data = line.split() self["IPSI"] = map(int, data[:npsi]) self["NPSI"] = npsi def __str__(self): olist = ["%s %s %s %s %s %s\n" % (self["NUNSTAB"], self["NSTAB"], self["IEQUIB"], self["ITWIST"], self["ISTART"], self.line1_comment)] nrev = 0 if len(self["IREV"]) > 0: nrev = 1 olist.append("%s %s\n"%(nrev, self.line2_comment)) if nrev > 0: olist.append(" ".join(map(str, self["IREV"]))+"\n") olist.append("%s %s\n"%(len(self["IFIXED"]), self.line3_comment)) if len(self["IFIXED"]) > 0: olist.append(" ".join(map(str, self["IFIXED"]))+"\n") olist.append("%s %s\n"%(len(self["IPSI"]), self.line4_comment)) if len(self["IPSI"]) > 0: olist.append(" ".join(map(str, self["IPSI"]))+"\n") return "".join(olist) def write(self, output): output.write(str(self)) def pointtest(a): keys = ['NUNSTAB', 'NSTAB', 'IEQUIB', 'ITWIST', 'ISTART', 'NREV', 'IREV', 'NFIXED', 'IFIXED', 'NPSI', 'IPSI'] for key in keys: if key not in a: raise AUTOExceptions.AUTORegressionError("No %s label"%(key,)) def test(): print("Testing reading from a filename") foo = parseH() foo.readFilename("test_data/h.cir") pointtest(foo) print("Testing reading from a stream") foo = parseH() fp = open("test_data/h.cir","r") foo.read(fp) pointtest(foo) print("parseH passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/test_data/0000750000175000017500000000000013570013207014502 5ustar skskauto/07p/python/auto/test_data/fort.80000750000175000017500000031400713570013207015555 0ustar sksk 4 30 4 6 2 1 201 3 410 50 4 36 0.0000000000E+00 8.4126680320E-01 5.2580565499E+00 6.4429877768E-04 8.4629710707E-01 5.3213703294E+00 1.2885975554E-03 8.5152472840E-01 5.3872327630E+00 1.9328963331E-03 8.5695626181E-01 5.4557274718E+00 2.5771951107E-03 8.6259705759E-01 5.5269204093E+00 3.2304971151E-03 8.6853395898E-01 5.6019044536E+00 3.8837991195E-03 8.7469061586E-01 5.6797081400E+00 4.5371011238E-03 8.8106406205E-01 5.7602804608E+00 5.1904031282E-03 8.8764617920E-01 5.8434986038E+00 5.8764030222E-03 8.9476610383E-01 5.9334930646E+00 6.5624029161E-03 9.0207264156E-01 6.0257780647E+00 7.2484028101E-03 9.0952576352E-01 6.1197862783E+00 7.9344027041E-03 9.1707048256E-01 6.2147434791E+00 8.4187953659E-03 9.2241503096E-01 6.2818321411E+00 8.9031880277E-03 9.2773982071E-01 6.3484781140E+00 9.3875806895E-03 9.3301081731E-01 6.4142069191E+00 9.8719733514E-03 9.3819075883E-01 6.4785001990E+00 1.0358283557E-02 9.4325983511E-01 6.5410518333E+00 1.0844593762E-02 9.4815654654E-01 6.6010393227E+00 1.1330903967E-02 9.5284133677E-01 6.6579165876E+00 1.1817214172E-02 9.5727770929E-01 6.7111817614E+00 1.2319865769E-02 9.6156855152E-01 6.7619822223E+00 1.2822517366E-02 9.6553317702E-01 6.8080958041E+00 1.3325168962E-02 9.6915369195E-01 6.8492853109E+00 1.3827820559E-02 9.7242207727E-01 6.8854522351E+00 1.4412934819E-02 9.7578574007E-01 6.9212812157E+00 1.4998049080E-02 9.7869225340E-01 6.9506244564E+00 1.5583163340E-02 9.8117124162E-01 6.9739167967E+00 1.6168277600E-02 9.8326092304E-01 6.9917117863E+00 1.6674088475E-02 9.8478675047E-01 7.0031410323E+00 1.7179899349E-02 9.8608232072E-01 7.0113334438E+00 1.7685710223E-02 9.8717546291E-01 7.0166870001E+00 1.8191521098E-02 9.8809246551E-01 7.0195770362E+00 1.8714232890E-02 9.8888075062E-01 7.0203418591E+00 1.9236944682E-02 9.8953072962E-01 7.0191856240E+00 1.9759656475E-02 9.9006352477E-01 7.0164090488E+00 2.0282368267E-02 9.9049747926E-01 7.0122731389E+00 2.0890310502E-02 9.9089862350E-01 7.0060482364E+00 2.1498252737E-02 9.9120808295E-01 6.9985820167E+00 2.2106194971E-02 9.9144300703E-01 6.9901181951E+00 2.2714137206E-02 9.9161739072E-01 6.9808555875E+00 2.3639654452E-02 9.9179158796E-01 6.9655751387E+00 2.4565171698E-02 9.9188207018E-01 6.9492468865E+00 2.5490688944E-02 9.9191130101E-01 6.9321894574E+00 2.6416206190E-02 9.9189545168E-01 6.9146319956E+00 2.7205393690E-02 9.9185510402E-01 6.8993899769E+00 2.7994581189E-02 9.9179577736E-01 6.8839795103E+00 2.8783768689E-02 9.9172153814E-01 6.8684579138E+00 2.9572956189E-02 9.9163548224E-01 6.8528687014E+00 3.0432914619E-02 9.9153099866E-01 6.8358429382E+00 3.1292873049E-02 9.9141758462E-01 6.8188081406E+00 3.2152831478E-02 9.9129699075E-01 6.8017885307E+00 3.3012789908E-02 9.9117053630E-01 6.7848021931E+00 3.3997154880E-02 9.9101986066E-01 6.7654164864E+00 3.4981519851E-02 9.9086391653E-01 6.7461067453E+00 3.5965884823E-02 9.9070352995E-01 6.7268836976E+00 3.6950249794E-02 9.9053930996E-01 6.7077549872E+00 3.8144098661E-02 9.9033563403E-01 6.6846896427E+00 3.9337947527E-02 9.9012755660E-01 6.6617773546E+00 4.0531796394E-02 9.8991549265E-01 6.6390222295E+00 4.1725645261E-02 9.8969973610E-01 6.6164266639E+00 4.3237172870E-02 9.8942158886E-01 6.5880491640E+00 4.4748700479E-02 9.8913814523E-01 6.5599298955E+00 4.6260228088E-02 9.8884960257E-01 6.5320681399E+00 4.7771755697E-02 9.8855609254E-01 6.5044622832E+00 4.9879932056E-02 9.8813858957E-01 6.4663826308E+00 5.1988108416E-02 9.8771174423E-01 6.4287894081E+00 5.4096284776E-02 9.8727565021E-01 6.3916748753E+00 5.6204461135E-02 9.8683036481E-01 6.3550309260E+00 5.9308380517E-02 9.8615810535E-01 6.3019182289E+00 6.2412299899E-02 9.8546607638E-01 6.2497814350E+00 6.5516219281E-02 9.8475433688E-01 6.1985946372E+00 6.8620138663E-02 9.8402294100E-01 6.1483325175E+00 7.4571498404E-02 9.8256582544E-01 6.0544582912E+00 8.0522858144E-02 9.8103715648E-01 5.9637274267E+00 8.6474217885E-02 9.7943755590E-01 5.8759835849E+00 9.2425577626E-02 9.7776777832E-01 5.7910798103E+00 1.0356871848E-01 9.7445576838E-01 5.6392726952E+00 1.1471185933E-01 9.7090773167E-01 5.4961146952E+00 1.2585500018E-01 9.6713162635E-01 5.3608659509E+00 1.3699814103E-01 9.6313631283E-01 5.2328664707E+00 1.4863293142E-01 9.5874116747E-01 5.1063186753E+00 1.6026772182E-01 9.5412895882E-01 4.9864337949E+00 1.7190251221E-01 9.4931156244E-01 4.8726773265E+00 1.8353730260E-01 9.4430108717E-01 4.7645714230E+00 1.9698582866E-01 9.3828500499E-01 4.6460956374E+00 2.1043435473E-01 9.3204618989E-01 4.5340124244E+00 2.2388288080E-01 9.2560336136E-01 4.4278016204E+00 2.3733140686E-01 9.1897491739E-01 4.3270019414E+00 2.5292526156E-01 9.1108044222E-01 4.2163602670E+00 2.6851911626E-01 9.0298789868E-01 4.1118823553E+00 2.8411297096E-01 8.9472364163E-01 4.0130745405E+00 2.9970682565E-01 8.8631300288E-01 3.9195032054E+00 3.1661878968E-01 8.7705423440E-01 3.8235005946E+00 3.3353075370E-01 8.6768159354E-01 3.7327849059E+00 3.5044271773E-01 8.5822343668E-01 3.6469849871E+00 3.6735468176E-01 8.4870679669E-01 3.5657769749E+00 3.8573862038E-01 8.3832562366E-01 3.4823818685E+00 4.0412255900E-01 8.2793746689E-01 3.4037675649E+00 4.2250649762E-01 8.1757254138E-01 3.3296657646E+00 4.4089043624E-01 8.0725974981E-01 3.2598477875E+00 4.6092178887E-01 7.9611470381E-01 3.1884251798E+00 4.8095314151E-01 7.8509913947E-01 3.1216542607E+00 5.0098449414E-01 7.7424663657E-01 3.0593699488E+00 5.2101584678E-01 7.6358996696E-01 3.0014450630E+00 5.3778427206E-01 7.5484323711E-01 2.9562405953E+00 5.5455269734E-01 7.4627521583E-01 2.9139920196E+00 5.7132112262E-01 7.3790487030E-01 2.8746817862E+00 5.8808954791E-01 7.2975144936E-01 2.8383097080E+00 6.0191727524E-01 7.2320505398E-01 2.8105388025E+00 6.1574500257E-01 7.1683100357E-01 2.7847976349E+00 6.2957272989E-01 7.1064118996E-01 2.7611158643E+00 6.4340045722E-01 7.0464808688E-01 2.7395337669E+00 6.5520641842E-01 6.9969682246E-01 2.7228076317E+00 6.6701237962E-01 6.9490728500E-01 2.7076897378E+00 6.7881834082E-01 6.9028879287E-01 2.6942280947E+00 6.9062430201E-01 6.8585136019E-01 2.6824797375E+00 7.0086404302E-01 6.8215759651E-01 2.6737291504E+00 7.1110378402E-01 6.7861583720E-01 2.6663688881E+00 7.2134352503E-01 6.7523440718E-01 2.6604577646E+00 7.3158326603E-01 6.7202239685E-01 2.6560634223E+00 7.4048702151E-01 6.6937489551E-01 2.6535354076E+00 7.4939077700E-01 6.6687021441E-01 2.6522710975E+00 7.5829453248E-01 6.6451625359E-01 2.6523366396E+00 7.6719828796E-01 6.6232171846E-01 2.6538071399E+00 7.7495467003E-01 6.6054739846E-01 2.6562994964E+00 7.8271105209E-01 6.5890838841E-01 2.6599864729E+00 7.9046743416E-01 6.5741245004E-01 2.6649399622E+00 7.9822381623E-01 6.5606817703E-01 2.6712410769E+00 8.0498512972E-01 6.5502751626E-01 2.6779045024E+00 8.1174644322E-01 6.5411634742E-01 2.6857297920E+00 8.1850775672E-01 6.5334242479E-01 2.6947936286E+00 8.2526907021E-01 6.5271435285E-01 2.7051822093E+00 8.3116984186E-01 6.5229287140E-01 2.7154068332E+00 8.3707061351E-01 6.5199681783E-01 2.7267866484E+00 8.4297138516E-01 6.5183401828E-01 2.7394027120E+00 8.4887215680E-01 6.5181316512E-01 2.7533459237E+00 8.5402720981E-01 6.5191868054E-01 2.7666929914E+00 8.5918226281E-01 6.5214707138E-01 2.7812070512E+00 8.6433731581E-01 6.5250628221E-01 2.7969733476E+00 8.6949236881E-01 6.5300513982E-01 2.8140873209E+00 8.7400071597E-01 6.5356357733E-01 2.8302428165E+00 8.7850906313E-01 6.5424362960E-01 2.8475909236E+00 8.8301741029E-01 6.5505339399E-01 2.8662210620E+00 8.8752575745E-01 6.5600186761E-01 2.8862332306E+00 8.9147329049E-01 6.5695411683E-01 2.9049787429E+00 8.9542082354E-01 6.5802785189E-01 2.9249536690E+00 8.9936835658E-01 6.5923135694E-01 2.9462517616E+00 9.0331588963E-01 6.6057383661E-01 2.9689777769E+00 9.0677718548E-01 6.6187336947E-01 2.9901716870E+00 9.1023848133E-01 6.6329529162E-01 3.0126417421E+00 9.1369977718E-01 6.6484811414E-01 3.0364863584E+00 9.1716107303E-01 6.6654129421E-01 3.0618154382E+00 9.2019806110E-01 6.6815080955E-01 3.0853590091E+00 9.2323504918E-01 6.6988437623E-01 3.1102326484E+00 9.2627203726E-01 6.7175075746E-01 3.1365396541E+00 9.2930902533E-01 6.7375969086E-01 3.1643953263E+00 9.3197898555E-01 6.7565216025E-01 3.1902657112E+00 9.3464894576E-01 6.7767136169E-01 3.2175303497E+00 9.3731890598E-01 6.7982637455E-01 3.2462981381E+00 9.3998886619E-01 6.8212728945E-01 3.2766905941E+00 9.4234971321E-01 6.8429233326E-01 3.3050262879E+00 9.4471056022E-01 6.8658886011E-01 3.3348431310E+00 9.4707140723E-01 6.8902645485E-01 3.3662579050E+00 9.4943225425E-01 6.9161577739E-01 3.3994009717E+00 9.5148507919E-01 6.9399979847E-01 3.4297375646E+00 9.5353790413E-01 6.9651618449E-01 3.4615978475E+00 9.5559072907E-01 6.9917455817E-01 3.4951007431E+00 9.5764355401E-01 7.0198560799E-01 3.5303787822E+00 9.5947278182E-01 7.0462874343E-01 3.5634297461E+00 9.6130200963E-01 7.0741189147E-01 3.5981242535E+00 9.6313123744E-01 7.1034543096E-01 3.6345922214E+00 9.6496046525E-01 7.1344090236E-01 3.6729785415E+00 9.6671174250E-01 7.1656805894E-01 3.7116759771E+00 9.6846301976E-01 7.1986802109E-01 3.7524392328E+00 9.7021429702E-01 7.2335489641E-01 3.7954470139E+00 9.7196557427E-01 7.2704451771E-01 3.8409004620E+00 9.7361459935E-01 7.3071998840E-01 3.8861387464E+00 9.7526362442E-01 7.3460775041E-01 3.9339604875E+00 9.7691264949E-01 7.3872671584E-01 3.9846079908E+00 9.7856167456E-01 7.4309828843E-01 4.0383562296E+00 9.8026444449E-01 7.4790323376E-01 4.0974425994E+00 9.8196721441E-01 7.5303401097E-01 4.1605638582E+00 9.8366998434E-01 7.5852588600E-01 4.2281767805E+00 9.8537275426E-01 7.6441965209E-01 4.3008111332E+00 9.8663264571E-01 7.6906669877E-01 4.3581442130E+00 9.8789253715E-01 7.7398138271E-01 4.4188468693E+00 9.8915242859E-01 7.7918830244E-01 4.4832406219E+00 9.9041232003E-01 7.8471512924E-01 4.5516877466E+00 9.9134553382E-01 7.8903332166E-01 4.6052386776E+00 9.9227874762E-01 7.9355804447E-01 4.6614203317E+00 9.9321196141E-01 7.9830460097E-01 4.7204337675E+00 9.9414517520E-01 8.0328966716E-01 4.7824982286E+00 9.9492354279E-01 8.0764304703E-01 4.8367697031E+00 9.9570191038E-01 8.1218624299E-01 4.8934779776E+00 9.9648027797E-01 8.1693128913E-01 4.9527813519E+00 9.9725864556E-01 8.2189091561E-01 5.0148472029E+00 9.9794398417E-01 8.2644602555E-01 5.0719213296E+00 9.9862932278E-01 8.3118728975E-01 5.1313969879E+00 9.9931466139E-01 8.3612433395E-01 5.1934001359E+00 1.0000000000E+00 8.4126680320E-01 5.2580565499E+00 1 11 -4.6120475923E-03 1.5955207443E+00 -1.5890700815E-01 -6.7383303215E-02 -1.5003050254E-01 4.9298614525E-02 -1.4041348402E-01 1.7584721789E-01 -1.3000870201E-01 3.1288747860E-01 -1.1877282050E-01 4.6098762112E-01 -1.0649395547E-01 6.2293211901E-01 -9.3296435701E-02 7.9706163000E-01 -7.9171412161E-02 9.8345644742E-01 -6.4134219908E-02 1.1818588797E+00 -4.7414720134E-02 1.4023411892E+00 -2.9845762194E-02 1.6337864615E+00 -1.1594714949E-02 1.8738162581E+00 7.0972925797E-03 2.1190307058E+00 2.0390314829E-02 2.2928993872E+00 3.3606216571E-02 2.4651928010E+00 4.6587785399E-02 2.6337179882E+00 5.9161719768E-02 2.7960628999E+00 7.1189335970E-02 2.9502499034E+00 8.2428145883E-02 3.0929655617E+00 9.2691392132E-02 3.2216304146E+00 1.0180632668E-01 3.3338677741E+00 1.0986238989E-01 3.4304462172E+00 1.1640636036E-01 3.5055896478E+00 1.2136029182E-01 3.5582688761E+00 1.2469986903E-01 3.5882074777E+00 1.2659707065E-01 3.5951031465E+00 1.2648784021E-01 3.5739030876E+00 1.2458713295E-01 3.5277054195E+00 1.2116682693E-01 3.4603943391E+00 1.1721954308E-01 3.3885187587E+00 1.1256451672E-01 3.3069375876E+00 1.0739459235E-01 3.2183766987E+00 1.0188758591E-01 3.1253443632E+00 9.6009865560E-02 3.0268628146E+00 9.0087878422E-02 2.9280461594E+00 8.4241625279E-02 2.8305760924E+00 7.8564552429E-02 2.7357581343E+00 7.2265161019E-02 2.6300749919E+00 6.6360251673E-02 2.5302758297E+00 6.0891864378E-02 2.4369324520E+00 5.5877379019E-02 2.3502697192E+00 4.9108391275E-02 2.2310283990E+00 4.3328251724E-02 2.1262754214E+00 3.8444577781E-02 2.0346549855E+00 3.4349616906E-02 1.9546019984E+00 3.1398155158E-02 1.8942826578E+00 2.8876435806E-02 1.8402984653E+00 2.6725958747E-02 1.7918067469E+00 2.4894330569E-02 1.7480533672E+00 2.3207485916E-02 1.7049944543E+00 2.1792904254E-02 1.6660320217E+00 2.0606551302E-02 1.6305325644E+00 1.9611202934E-02 1.5979604073E+00 1.8666335354E-02 1.5636937589E+00 1.7892132035E-02 1.5321162129E+00 1.7256877957E-02 1.5027704177E+00 1.6734791250E-02 1.4752841360E+00 1.6223742784E-02 1.4440140312E+00 1.5818955668E-02 1.4146077889E+00 1.5497210873E-02 1.3867281133E+00 1.5240420098E-02 1.3601113664E+00 1.4986833287E-02 1.3279068482E+00 1.4793294745E-02 1.2970798704E+00 1.4643645204E-02 1.2673906835E+00 1.4525923154E-02 1.2386599629E+00 1.4398743821E-02 1.1999407912E+00 1.4299587016E-02 1.1625626567E+00 1.4216703170E-02 1.1263378104E+00 1.4142087763E-02 1.0911328382E+00 1.4036185781E-02 1.0409588942E+00 1.3925239023E-02 9.9257166064E-01 1.3802223181E-02 9.4581684947E-01 1.3662840684E-02 9.0058122800E-01 1.3340941035E-02 8.1778883846E-01 1.2939492406E-02 7.3978703295E-01 1.2453843212E-02 6.6619429375E-01 1.1882186151E-02 5.9668820879E-01 1.0579911709E-02 4.7656829288E-01 8.9792220790E-03 3.6815920427E-01 7.0887271695E-03 2.7006036406E-01 4.9199525936E-03 1.8106294714E-01 2.3731739880E-03 9.6719934275E-02 -4.4546714770E-04 2.0124545417E-02 -3.5182558525E-03 -4.9621233833E-02 -6.8270030944E-03 -1.1329792946E-01 -1.0921424762E-02 -1.8022363156E-01 -1.5278328510E-02 -2.4084930578E-01 -1.9870096354E-02 -2.9595210924E-01 -2.4670051618E-02 -3.4620054277E-01 -3.0462608156E-02 -3.9914052266E-01 -3.6462808474E-02 -4.4709042665E-01 -4.2635144382E-02 -4.9070104443E-01 -4.8946621363E-02 -5.3052659436E-01 -5.5913356672E-02 -5.6998595262E-01 -6.2971952749E-02 -6.0605855804E-01 -7.0089676904E-02 -6.3917872803E-01 -7.7236847186E-02 -6.6971617440E-01 -8.5008171737E-02 -7.0034727587E-01 -9.2751568098E-02 -7.2864029852E-01 -1.0043938622E-01 -7.5488642819E-01 -1.0804715525E-01 -7.7933393362E-01 -1.1622030834E-01 -8.0417222862E-01 -1.2424856738E-01 -8.2736175910E-01 -1.3211111216E-01 -8.4910622576E-01 -1.3979042318E-01 -8.6958486085E-01 -1.4606736035E-01 -8.8587133743E-01 -1.5219883778E-01 -9.0147072941E-01 -1.5817936508E-01 -9.1646667634E-01 -1.6400483168E-01 -9.3094114488E-01 -1.6869003506E-01 -9.4254296629E-01 -1.7326705940E-01 -9.5389309633E-01 -1.7773570438E-01 -9.6504054362E-01 -1.8209642503E-01 -9.7603692910E-01 -1.8573498166E-01 -9.8534725340E-01 -1.8929678097E-01 -9.9462414524E-01 -1.9278331619E-01 -1.0039070336E+00 -1.9619648677E-01 -1.0132385466E+00 -1.9909923221E-01 -1.0214072232E+00 -2.0195032422E-01 -1.0296800717E+00 -2.0475183070E-01 -1.0380927013E+00 -2.0750610986E-01 -1.0466838499E+00 -2.0986471517E-01 -1.0543319520E+00 -2.1219158154E-01 -1.0621771204E+00 -2.1448887024E-01 -1.0702521312E+00 -2.1675895930E-01 -1.0785925926E+00 -2.1871637641E-01 -1.0861047407E+00 -2.2065700560E-01 -1.0938754378E+00 -2.2258287574E-01 -1.1019346716E+00 -2.2449617472E-01 -1.1103148498E+00 -2.2615559460E-01 -1.1179090415E+00 -2.2780891529E-01 -1.1257986639E+00 -2.2945790648E-01 -1.1340104720E+00 -2.3110444093E-01 -1.1425731016E+00 -2.3254094862E-01 -1.1503565122E+00 -2.3397846044E-01 -1.1584520276E+00 -2.3541839916E-01 -1.1668824723E+00 -2.3686222873E-01 -1.1756718581E+00 -2.3812794617E-01 -1.1836639201E+00 -2.3939877321E-01 -1.1919665090E+00 -2.4067569821E-01 -1.2005974841E+00 -2.4195967671E-01 -1.2095749956E+00 -2.4308906632E-01 -1.2177246202E+00 -2.4422507538E-01 -1.2261651919E+00 -2.4536815193E-01 -1.2349081794E+00 -2.4651861924E-01 -1.2439641821E+00 -2.4753216945E-01 -1.2521580186E+00 -2.4855146454E-01 -1.2606038942E+00 -2.4957627404E-01 -1.2693049742E+00 -2.5060612622E-01 -1.2782620489E+00 -2.5151266822E-01 -1.2863246928E+00 -2.5242171185E-01 -1.2945781027E+00 -2.5333216317E-01 -1.3030145840E+00 -2.5424253731E-01 -1.3116221036E+00 -2.5503970313E-01 -1.3193016176E+00 -2.5583357282E-01 -1.3270830139E+00 -2.5662194559E-01 -1.3349443710E+00 -2.5740203779E-01 -1.3428568849E+00 -2.5807825748E-01 -1.3498260092E+00 -2.5874242904E-01 -1.3567736027E+00 -2.5939091340E-01 -1.3636589873E+00 -2.6001923811E-01 -1.3704312578E+00 -2.6055365450E-01 -1.3762747238E+00 -2.6106341338E-01 -1.3819261701E+00 -2.6154291711E-01 -1.3873191864E+00 -2.6198538518E-01 -1.3923724618E+00 -2.6233367401E-01 -1.3964134492E+00 -2.6264128009E-01 -1.4000433494E+00 -2.6290043745E-01 -1.4031665787E+00 -2.6310185224E-01 -1.4056679408E+00 -2.6322368053E-01 -1.4072606640E+00 -2.6328145299E-01 -1.4081317765E+00 -2.6326399709E-01 -1.4081402911E+00 -2.6315800935E-01 -1.4071174793E+00 -2.6295895017E-01 -1.4049854179E+00 -2.6264758079E-01 -1.4015099797E+00 -2.6220393196E-01 -1.3964344197E+00 -2.6160399722E-01 -1.3894488416E+00 -2.6087036513E-01 -1.3807900344E+00 -2.5994346191E-01 -1.3697275561E+00 -2.5878806179E-01 -1.3558017179E+00 -2.5736146204E-01 -1.3384534810E+00 -2.5554856313E-01 -1.3162233959E+00 -2.5332095211E-01 -1.2886928815E+00 -2.5059122635E-01 -1.2547073677E+00 -2.4725031452E-01 -1.2128221588E+00 -2.4430606352E-01 -1.1756988835E+00 -2.4088587310E-01 -1.1323722741E+00 -2.3690927152E-01 -1.0817697180E+00 -2.3228020392E-01 -1.0226089270E+00 -2.2836414050E-01 -9.7237990694E-01 -2.2397335770E-01 -9.1589399929E-01 -2.1904574104E-01 -8.5231923141E-01 -2.1351045274E-01 -7.8070612001E-01 -2.0837097223E-01 -7.1405136707E-01 -2.0270047085E-01 -6.4035214132E-01 -1.9644089035E-01 -5.5882941639E-01 -1.8952830497E-01 -4.6862547591E-01 -1.8284590739E-01 -3.8127266836E-01 -1.7555171749E-01 -2.8577434620E-01 -1.6759114189E-01 -1.8139939424E-01 -1.5890700815E-01 -6.7383303215E-02 1.1988147848E-01 1.4000000000E+01 2.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.7210436536E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.2831853072E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 4 60 4 7 2 1 201 3 410 50 4 36 0.0000000000E+00 5.3326866303E-01 3.7677440090E+00 4.0836331757E-04 5.3790426952E-01 3.8228841154E+00 8.1672663513E-04 5.4281296489E-01 3.8815866797E+00 1.2250899527E-03 5.4802762035E-01 3.9442936006E+00 1.6334532703E-03 5.5358735658E-01 4.0115318864E+00 1.9579419123E-03 5.5828204884E-01 4.0686070863E+00 2.2824305544E-03 5.6325202787E-01 4.1293189589E+00 2.6069191964E-03 5.6853035681E-01 4.1941154506E+00 2.9314078385E-03 5.7415636406E-01 4.2635302946E+00 3.1896039007E-03 5.7891243510E-01 4.3224854325E+00 3.4477999630E-03 5.8394649221E-01 4.3851517030E+00 3.7059960252E-03 5.8929185763E-01 4.4519834247E+00 3.9641920875E-03 5.9498814517E-01 4.5235214394E+00 4.1699813325E-03 5.9981090831E-01 4.5843382239E+00 4.3757705775E-03 6.0491506034E-01 4.6489444511E+00 4.5815598225E-03 6.1033427324E-01 4.7178015637E+00 4.7873490676E-03 6.1610855112E-01 4.7914583893E+00 4.9517257831E-03 6.2100767049E-01 4.8541770494E+00 5.1161024987E-03 6.2619262939E-01 4.9207728619E+00 5.2804792143E-03 6.3169758683E-01 4.9917158808E+00 5.4448559299E-03 6.3756309727E-01 5.0675646658E+00 5.5765968879E-03 6.4255670822E-01 5.1323419305E+00 5.7083378459E-03 6.4784247022E-01 5.2011054224E+00 5.8400788039E-03 6.5345529373E-01 5.2743371343E+00 5.9718197618E-03 6.5943659818E-01 5.3526093374E+00 6.0778449428E-03 6.6455124571E-01 5.4197236450E+00 6.1838701237E-03 6.6996698428E-01 5.4909660569E+00 6.2898953047E-03 6.7571984813E-01 5.5668354107E+00 6.3959204856E-03 6.8185256290E-01 5.6479235161E+00 6.4815332333E-03 6.8711628029E-01 5.7176867487E+00 6.5671459810E-03 6.9269251673E-01 5.7917516833E+00 6.6527587286E-03 6.9861872272E-01 5.8706378698E+00 6.7383714763E-03 7.0493925532E-01 5.9549609561E+00 6.8080263670E-03 7.1040885040E-01 6.0280812480E+00 6.8776812576E-03 7.1620794846E-01 6.1057515442E+00 6.9473361483E-03 7.2237618250E-01 6.1885226064E+00 7.0169910389E-03 7.2896043019E-01 6.2770461083E+00 7.0766541504E-03 7.3497290972E-01 6.3580283145E+00 7.1363172619E-03 7.4137287155E-01 6.4443751237E+00 7.1959803734E-03 7.4820945784E-01 6.5367703674E+00 7.2556434849E-03 7.5554109709E-01 6.6360273385E+00 7.3205150446E-03 7.6415654156E-01 6.7528774111E+00 7.3853866042E-03 7.7354930871E-01 6.8805141457E+00 7.4502581639E-03 7.8385535878E-01 7.0208316848E+00 7.5151297235E-03 7.9524451338E-01 7.1761965352E+00 7.5494783945E-03 8.0178385745E-01 7.2655338973E+00 7.5838270656E-03 8.0872287006E-01 7.3604282092E+00 7.6181757366E-03 8.1610362153E-01 7.4614659942E+00 7.6525244076E-03 8.2397315864E-01 7.5693031850E+00 7.6780979599E-03 8.3018040207E-01 7.6544350427E+00 7.7036715122E-03 8.3671051083E-01 7.7440598303E+00 7.7292450645E-03 8.4358768283E-01 7.8385148573E+00 7.7548186169E-03 8.5083659071E-01 7.9381439727E+00 7.7771038383E-03 8.5747541534E-01 8.0294445799E+00 7.7993890597E-03 8.6442968906E-01 8.1251360879E+00 7.8216742811E-03 8.7171148564E-01 8.2253863057E+00 7.8439595025E-03 8.7932846003E-01 8.3303011423E+00 7.8651257322E-03 8.8687413567E-01 8.4342773317E+00 7.8862919619E-03 8.9471505300E-01 8.5423595242E+00 7.9074581916E-03 9.0283084363E-01 8.6542615321E+00 7.9286244213E-03 9.1118468183E-01 8.7694668694E+00 7.9460535874E-03 9.1820236167E-01 8.8662521131E+00 7.9634827535E-03 9.2529743231E-01 8.9641001174E+00 7.9809119196E-03 9.3241131278E-01 9.0621906093E+00 7.9983410857E-03 9.3947182146E-01 9.1595131026E+00 8.0159580567E-03 9.4646798937E-01 9.2558975610E+00 8.0335750276E-03 9.5322603313E-01 9.3489279126E+00 8.0511919986E-03 9.5964603701E-01 9.4372062182E+00 8.0688089696E-03 9.6563282543E-01 9.5194011958E+00 8.0876842951E-03 9.7147393801E-01 9.5994223225E+00 8.1065596206E-03 9.7665325667E-01 9.6701610357E+00 8.1254349461E-03 9.8113701120E-01 9.7311467690E+00 8.1443102716E-03 9.8493016831E-01 9.7824513190E+00 8.1654517681E-03 9.8840750652E-01 9.8291058267E+00 8.1865932645E-03 9.9115826666E-01 9.8655777351E+00 8.2077347610E-03 9.9329103730E-01 9.8933897346E+00 8.2288762575E-03 9.9491790350E-01 9.9141130647E+00 8.2554398808E-03 9.9640475021E-01 9.9323436304E+00 8.2820035042E-03 9.9743111333E-01 9.9441230005E+00 8.3085671276E-03 9.9813247555E-01 9.9513497224E+00 8.3351307509E-03 9.9860850959E-01 9.9554204652E+00 8.3666406912E-03 9.9897714968E-01 9.9575040860E+00 8.3981506314E-03 9.9920727806E-01 9.9576487314E+00 8.4296605717E-03 9.9935076802E-01 9.9565812326E+00 8.4611705119E-03 9.9944014302E-01 9.9547572944E+00 8.5197462502E-03 9.9952605719E-01 9.9502472778E+00 8.5783219886E-03 9.9956004958E-01 9.9450159472E+00 8.6368977269E-03 9.9957313590E-01 9.9394978746E+00 8.6954734652E-03 9.9957745313E-01 9.9338631119E+00 1.1764381146E-02 9.9944316627E-01 9.6420743866E+00 1.4833288827E-02 9.9926413827E-01 9.3656929292E+00 1.7902196508E-02 9.9904964974E-01 9.1039862213E+00 2.0971104188E-02 9.9878113051E-01 8.8558816892E+00 2.7788295758E-02 9.9800017808E-01 8.3497605621E+00 3.4605487328E-02 9.9688820245E-01 7.8985548676E+00 4.1422678897E-02 9.9539737107E-01 7.4949470484E+00 4.8239870467E-02 9.9347161185E-01 7.1323479245E+00 5.5147168637E-02 9.9104654901E-01 6.8011750403E+00 6.2054466807E-02 9.8811308428E-01 6.5014324800E+00 6.8961764977E-02 9.8465956236E-01 6.2289185877E+00 7.5869063147E-02 9.8068166890E-01 5.9800270503E+00 8.3730072105E-02 9.7552343723E-01 5.7216546457E+00 9.1591081062E-02 9.6971097175E-01 5.4861703876E+00 9.9452090020E-02 9.6327038784E-01 5.2704199228E+00 1.0731309898E-01 9.5623331041E-01 5.0717654255E+00 1.1740923386E-01 9.4637725356E-01 4.8381968175E+00 1.2750536875E-01 9.3567366597E-01 4.6253368234E+00 1.3760150363E-01 9.2420103519E-01 4.4300253564E+00 1.4769763852E-01 9.1203477783E-01 4.2496624525E+00 1.6008564530E-01 8.9626393373E-01 4.0456609210E+00 1.7247365208E-01 8.7967703204E-01 3.8576991540E+00 1.8486165887E-01 8.6238251030E-01 3.6831270908E+00 1.9724966565E-01 8.4447569535E-01 3.5197707985E+00 2.1180059559E-01 8.2277426924E-01 3.3398425043E+00 2.2635152553E-01 8.0046540056E-01 3.1706449486E+00 2.4090245547E-01 7.7765893482E-01 3.0103904946E+00 2.5545338541E-01 7.5445777881E-01 2.8577462785E+00 2.7174100749E-01 7.2814456159E-01 2.6947934219E+00 2.8802862957E-01 7.0161106539E-01 2.5394904658E+00 3.0431625166E-01 6.7501320565E-01 2.3915680281E+00 3.2060387374E-01 6.4851563765E-01 2.2511288044E+00 3.4014150449E-01 6.1710452590E-01 2.0930646816E+00 3.5967913525E-01 5.8638217215E-01 1.9471540891E+00 3.7921676600E-01 5.5663133435E-01 1.8142222224E+00 3.9875439675E-01 5.2810492610E-01 1.6948699083E+00 4.1885336704E-01 5.0026123282E-01 1.5865489573E+00 4.3895233732E-01 4.7411839301E-01 1.4927702984E+00 4.5905130761E-01 4.4980280701E-01 1.4130527721E+00 4.7915027789E-01 4.2739126381E-01 1.3466279860E+00 4.9985138142E-01 4.0633302356E-01 1.2910868694E+00 5.2055248496E-01 3.8732507926E-01 1.2474562764E+00 5.4125358849E-01 3.7033241945E-01 1.2145497048E+00 5.6195469202E-01 3.5529685524E-01 1.1912188348E+00 5.8372841896E-01 3.4151190258E-01 1.1758387287E+00 6.0550214591E-01 3.2971125952E-01 1.1687591064E+00 6.2727587285E-01 3.1979188257E-01 1.1690216284E+00 6.4904959979E-01 3.1165075042E-01 1.1758279042E+00 6.6868614698E-01 3.0575163034E-01 1.1870473922E+00 6.8832269417E-01 3.0115184539E-01 1.2027177872E+00 7.0795924135E-01 2.9779277167E-01 1.2225977223E+00 7.2759578854E-01 2.9562574098E-01 1.2465610882E+00 7.4299696336E-01 2.9473607877E-01 1.2682077333E+00 7.5839813817E-01 2.9454595457E-01 1.2924224829E+00 7.7379931299E-01 2.9505143429E-01 1.3193284436E+00 7.8920048780E-01 2.9625715613E-01 1.3491236006E+00 8.0110192591E-01 2.9767764771E-01 1.3743065875E+00 8.1300336402E-01 2.9953737332E-01 1.4015661571E+00 8.2490480214E-01 3.0185463687E-01 1.4311366713E+00 8.3680624025E-01 3.0465512122E-01 1.4633195280E+00 8.4604114093E-01 3.0718294991E-01 1.4903345969E+00 8.5527604161E-01 3.1004366579E-01 1.5193797511E+00 8.6451094229E-01 3.1326400002E-01 1.5507351085E+00 8.7374584297E-01 3.1687761680E-01 1.5847483858E+00 8.8093878505E-01 3.1999149763E-01 1.6133571607E+00 8.8813172712E-01 3.2339419717E-01 1.6440921619E+00 8.9532466919E-01 3.2711586215E-01 1.6772613332E+00 9.0251761126E-01 3.3119340024E-01 1.7132425383E+00 9.0813648273E-01 3.3465513956E-01 1.7436035862E+00 9.1375535419E-01 3.3838784096E-01 1.7762353845E+00 9.1937422566E-01 3.4242315035E-01 1.8114674829E+00 9.2499309712E-01 3.4679938924E-01 1.8497019024E+00 9.2939269595E-01 3.5049388764E-01 1.8820515570E+00 9.3379229478E-01 3.5445288638E-01 1.9168311237E+00 9.3819189361E-01 3.5870873894E-01 1.9543887154E+00 9.4259149244E-01 3.6330041656E-01 1.9951473148E+00 9.4604309633E-01 3.6716816527E-01 2.0296968309E+00 9.4949470022E-01 3.7129893092E-01 2.0668360131E+00 9.5294630411E-01 3.7572541887E-01 2.1069294163E+00 9.5639790800E-01 3.8048690475E-01 2.1504186138E+00 9.5911019420E-01 3.8449417077E-01 2.1873224281E+00 9.6182248040E-01 3.8876506450E-01 2.2269695712E+00 9.6453476660E-01 3.9333247083E-01 2.2697392172E+00 9.6724705281E-01 3.9823580330E-01 2.3160894390E+00 9.6938132492E-01 4.0236110594E-01 2.3554393872E+00 9.7151559703E-01 4.0675142953E-01 2.3976768131E+00 9.7364986915E-01 4.1143975123E-01 2.4431938293E+00 9.7578414126E-01 4.1646554029E-01 2.4924630723E+00 9.7746558583E-01 4.2069348845E-01 2.5342929332E+00 9.7914703039E-01 4.2518805462E-01 2.5791432422E+00 9.8082847496E-01 4.2998226519E-01 2.6274174978E+00 9.8250991952E-01 4.3511560728E-01 2.6796011136E+00 9.8383601674E-01 4.3943415423E-01 2.7238954923E+00 9.8516211395E-01 4.4402089402E-01 2.7713315739E+00 9.8648821116E-01 4.4890888489E-01 2.8223228402E+00 9.8781430838E-01 4.5413762003E-01 2.8773658736E+00 9.8886117202E-01 4.5853691716E-01 2.9240708380E+00 9.8990803567E-01 4.6320590517E-01 2.9740273116E+00 9.9095489932E-01 4.6817767337E-01 3.0276575323E+00 9.9200176297E-01 4.7349172577E-01 3.0854678495E+00 9.9282895817E-01 4.7796372184E-01 3.1345021382E+00 9.9365615337E-01 4.8270685906E-01 3.1868871726E+00 9.9448334857E-01 4.8775426879E-01 3.2430529175E+00 9.9531054377E-01 4.9314548243E-01 3.3035143170E+00 9.9596476070E-01 4.9768378216E-01 3.3547795935E+00 9.9661897763E-01 5.0249468586E-01 3.4094855202E+00 9.9727319457E-01 5.0761138553E-01 3.4680689526E+00 9.9792741150E-01 5.1307346378E-01 3.5310524757E+00 9.9844555862E-01 5.1767567521E-01 3.5844702768E+00 9.9896370575E-01 5.2255232533E-01 3.6414144945E+00 9.9948185287E-01 5.2773674446E-01 3.7023289422E+00 1.0000000000E+00 5.3326866303E-01 3.7677440090E+00 1 11 -7.4467863926E-03 1.9452473073E+00 -8.8389977678E-02 -4.5863717873E-01 -8.8655756487E-02 -4.6509828098E-01 -8.8952475819E-02 -4.7203646249E-01 -8.9284839397E-02 -4.7952081520E-01 -8.9658618591E-02 -4.8763575743E-01 -8.9989841863E-02 -4.9460184681E-01 -9.0356073623E-02 -5.0209493149E-01 -9.0762648924E-02 -5.1019221264E-01 -9.1216102099E-02 -5.1898796081E-01 -9.1615713671E-02 -5.2656211575E-01 -9.2055038511E-02 -5.3472265918E-01 -9.2540102004E-02 -5.4355585934E-01 -9.3078264393E-02 -5.5316687410E-01 -9.3551199305E-02 -5.6146939504E-01 -9.4069161997E-02 -5.7042696947E-01 -9.4638907764E-02 -5.8013560567E-01 -9.5268656459E-02 -5.9071195865E-01 -9.5821455940E-02 -5.9987791205E-01 -9.6425139276E-02 -6.0977597593E-01 -9.7087193356E-02 -6.2051202796E-01 -9.7816675957E-02 -6.3221403919E-01 -9.8457353580E-02 -6.4239380956E-01 -9.9155207334E-02 -6.5338968790E-01 -9.9918395658E-02 -6.6531667545E-01 -1.0075670181E-01 -6.7831259463E-01 -1.0149384609E-01 -6.8965955506E-01 -1.0229454125E-01 -7.0190856748E-01 -1.0316740856E-01 -7.1518091856E-01 -1.0412263150E-01 -7.2961982605E-01 -1.0496219965E-01 -7.4224477455E-01 -1.0587067091E-01 -7.5584410999E-01 -1.0685654948E-01 -7.7053736135E-01 -1.0792957779E-01 -7.8646145403E-01 -1.0887450961E-01 -8.0043246815E-01 -1.0989108510E-01 -8.1541438261E-01 -1.1098648701E-01 -8.3150819226E-01 -1.1216828260E-01 -8.4882035365E-01 -1.1325499877E-01 -8.6469887041E-01 -1.1441513587E-01 -8.8161269077E-01 -1.1565205157E-01 -8.9960940436E-01 -1.1696700906E-01 -9.1870743118E-01 -1.1848182317E-01 -9.4067458432E-01 -1.2007313557E-01 -9.6372577470E-01 -1.2170794287E-01 -9.8740125940E-01 -1.2331727688E-01 -1.0107388750E+00 -1.2411757030E-01 -1.0223794644E+00 -1.2484330574E-01 -1.0329839043E+00 -1.2544888119E-01 -1.0419150966E+00 -1.2586985326E-01 -1.0482725585E+00 -1.2601102686E-01 -1.0506026048E+00 -1.2595060175E-01 -1.0501186051E+00 -1.2562402426E-01 -1.0459182535E+00 -1.2494865472E-01 -1.0368463826E+00 -1.2399475637E-01 -1.0238369653E+00 -1.2261121389E-01 -1.0048247643E+00 -1.2069494035E-01 -9.7836870858E-01 -1.1812461384E-01 -9.4277285821E-01 -1.1495220822E-01 -8.9874683428E-01 -1.1093562533E-01 -8.4292339958E-01 -1.0594558439E-01 -7.7349609960E-01 -9.9867159042E-02 -6.8885982718E-01 -9.3987280064E-02 -6.0694594871E-01 -8.7304795131E-02 -5.1382003782E-01 -7.9856167417E-02 -4.0999485203E-01 -7.1736394370E-02 -2.9680237343E-01 -6.3010768878E-02 -1.7516400767E-01 -5.4000582484E-02 -4.9573741110E-02 -4.4994096983E-02 7.5932669416E-02 -3.6305181636E-02 1.9696192498E-01 -2.7691604738E-02 3.1686000244E-01 -2.0090648673E-02 4.2255113746E-01 -1.3691293360E-02 5.1139377956E-01 -8.5553094180E-03 5.8252769936E-01 -4.2348946429E-03 6.4213129578E-01 -1.2346627574E-03 6.8323687819E-01 7.0044063852E-04 7.0942010134E-01 1.8339742506E-03 7.2437465156E-01 2.4827689895E-03 7.3230302887E-01 2.5994797071E-03 7.3277989688E-01 2.4360449915E-03 7.2933468400E-01 2.1501097590E-03 7.2417565129E-01 1.7734273231E-03 7.1753319849E-01 1.4244559121E-03 7.1128144032E-01 1.1325639598E-03 7.0583148802E-01 9.0199299084E-04 7.0124252073E-01 6.1118144681E-04 6.9464698228E-01 4.4763077650E-04 6.8983961939E-01 3.6015463599E-04 6.8610294965E-01 3.1437594171E-04 6.8295516813E-01 2.6852743641E-04 5.5717922432E-01 2.9780947033E-04 4.4396007799E-01 2.5379998071E-04 3.4035608938E-01 2.4996726911E-04 2.4716136167E-01 9.1712428485E-07 6.8355948835E-02 -4.0468273835E-04 -7.4765944356E-02 -1.1081528760E-03 -1.9019421814E-01 -2.0934013800E-03 -2.8271809106E-01 -3.4682307899E-03 -3.5865235165E-01 -5.1952281493E-03 -4.1989662806E-01 -7.2982650276E-03 -4.6984197817E-01 -9.7654665289E-03 -5.1087593111E-01 -1.3000753541E-02 -5.4923126444E-01 -1.6663877554E-02 -5.8083888404E-01 -2.0723401193E-02 -6.0744781909E-01 -2.5147018155E-02 -6.3042046983E-01 -3.1311995782E-02 -6.5627246674E-01 -3.7965964865E-02 -6.7961881768E-01 -4.5058635193E-02 -7.0181089068E-01 -5.2551432133E-02 -7.2392140517E-01 -6.2251313060E-02 -7.5218594923E-01 -7.2481355950E-02 -7.8290228225E-01 -8.3228786519E-02 -8.1709752761E-01 -9.4494556828E-02 -8.5557666226E-01 -1.0839952051E-01 -9.0700657623E-01 -1.2304001379E-01 -9.6562228171E-01 -1.3840488068E-01 -1.0313589250E+00 -1.5444656006E-01 -1.1035269105E+00 -1.7308445852E-01 -1.1902494025E+00 -1.9222185177E-01 -1.2804384996E+00 -2.1154119897E-01 -1.3704036996E+00 -2.3064886902E-01 -1.4559591931E+00 -2.5266537128E-01 -1.5467731766E+00 -2.7296331446E-01 -1.6186020032E+00 -2.9085084838E-01 -1.6667688072E+00 -3.0578976472E-01 -1.6889159959E+00 -3.1771595322E-01 -1.6845395990E+00 -3.2600382366E-01 -1.6548315205E+00 -3.3069746048E-01 -1.6034709067E+00 -3.3199428094E-01 -1.5349211214E+00 -3.3010582451E-01 -1.4512914050E+00 -3.2534630983E-01 -1.3591355195E+00 -3.1814711376E-01 -1.2625662637E+00 -3.0893868716E-01 -1.1649392033E+00 -2.9753547818E-01 -1.0639502670E+00 -2.8479978744E-01 -9.6683568126E-01 -2.7111943675E-01 -8.7507625235E-01 -2.5683233762E-01 -7.8958939029E-01 -2.4366740750E-01 -7.1827549832E-01 -2.3042354622E-01 -6.5259416926E-01 -2.1725272596E-01 -5.9254208147E-01 -2.0428234124E-01 -5.3802108179E-01 -1.9431886985E-01 -4.9902781576E-01 -1.8458660444E-01 -4.6325228320E-01 -1.7512206147E-01 -4.3060502311E-01 -1.6595637451E-01 -4.0100167464E-01 -1.5909509743E-01 -3.8016318219E-01 -1.5243885103E-01 -3.6107150995E-01 -1.4599721681E-01 -3.4370869299E-01 -1.3977892649E-01 -3.2806788664E-01 -1.3511293811E-01 -3.1712180856E-01 -1.3058999472E-01 -3.0722701073E-01 -1.2621377660E-01 -2.9840225467E-01 -1.2198808936E-01 -2.9067636149E-01 -1.1880363852E-01 -2.8544596991E-01 -1.1571507802E-01 -2.8093301761E-01 -1.1272476597E-01 -2.7717104100E-01 -1.0983539582E-01 -2.7420277109E-01 -1.0765055283E-01 -2.7247069361E-01 -1.0553096183E-01 -2.7128771553E-01 -1.0347867367E-01 -2.7069285676E-01 -1.0149611800E-01 -2.7073383330E-01 -9.9994312809E-02 -2.7124724654E-01 -9.8538703149E-02 -2.7222019606E-01 -9.7131270874E-02 -2.7369353063E-01 -9.5774390007E-02 -2.7571651864E-01 -9.4747113251E-02 -2.7772680048E-01 -9.3754372841E-02 -2.8014665375E-01 -9.2798160987E-02 -2.8301747344E-01 -9.1880878117E-02 -2.8638896473E-01 -9.1189270021E-02 -2.8942835798E-01 -9.0525203507E-02 -2.9284880306E-01 -8.9890735797E-02 -2.9669201246E-01 -8.9288358844E-02 -3.0100805974E-01 -8.8838884326E-02 -3.0477590372E-01 -8.8412957870E-02 -3.0890926407E-01 -8.8012757027E-02 -3.1345046145E-01 -8.7640932682E-02 -3.1845039771E-01 -8.7370090906E-02 -3.2275254933E-01 -8.7120812882E-02 -3.2741385075E-01 -8.6895455067E-02 -3.3247781196E-01 -8.6696898153E-02 -3.3799692625E-01 -8.6561510681E-02 -3.4271213029E-01 -8.6447122235E-02 -3.4778775997E-01 -8.6356329205E-02 -3.5326928014E-01 -8.6292315451E-02 -3.5921173504E-01 -8.6263253190E-02 -3.6427213793E-01 -8.6255695039E-02 -3.6970149799E-01 -8.6272540327E-02 -3.7554812994E-01 -8.6317351546E-02 -3.8187072792E-01 -8.6375410098E-02 -3.8725005113E-01 -8.6456342727E-02 -3.9301429432E-01 -8.6563416755E-02 -3.9921561414E-01 -8.6700651073E-02 -4.0591755800E-01 -8.6833793443E-02 -4.1162344739E-01 -8.6991928196E-02 -4.1773807641E-01 -8.7178757797E-02 -4.2431850642E-01 -8.7398837471E-02 -4.3143441413E-01 -8.7600427660E-02 -4.3750632558E-01 -8.7829844188E-02 -4.4401962717E-01 -8.8091300265E-02 -4.5103749382E-01 -8.8389977678E-02 -4.5863717873E-01 1.1530328804E-01 1.4000000000E+01 2.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.1474492424E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.2831853072E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 4 90 4 8 2 1 201 3 410 50 4 36 0.0000000000E+00 5.1181954328E-01 3.1200389849E+00 4.9440568795E-04 5.1650912316E-01 3.1702151020E+00 9.8881137590E-04 5.2151936835E-01 3.2242690264E+00 1.4832170638E-03 5.2689309484E-01 3.2827472177E+00 1.9776227518E-03 5.3268214637E-01 3.3463145354E+00 2.3604713879E-03 5.3749003205E-01 3.3995467872E+00 2.7433200240E-03 5.4262018846E-01 3.4567761568E+00 3.1261686601E-03 5.4811526415E-01 3.5185568448E+00 3.5090172962E-03 5.5402683124E-01 3.5855616530E+00 3.8059559262E-03 5.5893824083E-01 3.6416464470E+00 4.1028945562E-03 5.6417318104E-01 3.7018313443E+00 4.3998331862E-03 5.6977410994E-01 3.7666762488E+00 4.6967718162E-03 5.7579229593E-01 3.8368594163E+00 4.9275068117E-03 5.8079621647E-01 3.8956038289E+00 5.1582418072E-03 5.8612480766E-01 3.9585380335E+00 5.3889768028E-03 5.9182032591E-01 4.0262259631E+00 5.6197117983E-03 5.9793371489E-01 4.0993492450E+00 5.7994112180E-03 6.0302362397E-01 4.1605902977E+00 5.9791106377E-03 6.0843948983E-01 4.2261017106E+00 6.1588100575E-03 6.1422337700E-01 4.2964502709E+00 6.3385094772E-03 6.2042590607E-01 4.3723194651E+00 6.4788709735E-03 6.2560099612E-01 4.4359499101E+00 6.6192324698E-03 6.3110385481E-01 4.5039282869E+00 6.7595939660E-03 6.3697640644E-01 4.5768238440E+00 6.8999554623E-03 6.4326899842E-01 4.6553213269E+00 7.0100337240E-03 6.4853696103E-01 4.7213351949E+00 7.1201119857E-03 6.5413571756E-01 4.7917821312E+00 7.2301902474E-03 6.6010719930E-01 4.8672349624E+00 7.3402685092E-03 6.6650164475E-01 4.9483808982E+00 7.4270976343E-03 6.7188329160E-01 5.0169436746E+00 7.5139267595E-03 6.7760117284E-01 5.0900500014E+00 7.6007558847E-03 6.8369755320E-01 5.1682800542E+00 7.6875850098E-03 6.9022294133E-01 5.2523278899E+00 7.7565138032E-03 6.9574843463E-01 5.3237398208E+00 7.8254425966E-03 7.0161860660E-01 5.3998408207E+00 7.8943713900E-03 7.0787640844E-01 5.4812227336E+00 7.9633001834E-03 7.1457300795E-01 5.5685911935E+00 8.0197028610E-03 7.2042159362E-01 5.6451226142E+00 8.0761055385E-03 7.2664484836E-01 5.7267788662E+00 8.1325082161E-03 7.3329018769E-01 5.8142152652E+00 8.1889108936E-03 7.4041409174E-01 5.9082129045E+00 8.2478485600E-03 7.4844314195E-01 6.0144646839E+00 8.3067862263E-03 7.5716270264E-01 6.1302058353E+00 8.3657238926E-03 7.6668943090E-01 6.2570527530E+00 8.4246615589E-03 7.7716907255E-01 6.3970260869E+00 8.4598885635E-03 7.8396145445E-01 6.4879780915E+00 8.4951155681E-03 7.9120588538E-01 6.5851681361E+00 8.5303425727E-03 7.9895696621E-01 6.6893541586E+00 8.5655695773E-03 8.0727783199E-01 6.8014127736E+00 8.5881800148E-03 8.1295207900E-01 6.8779478228E+00 8.6107904523E-03 8.1891227816E-01 6.9584374488E+00 8.6334008898E-03 8.2518172151E-01 7.0432051506E+00 8.6560113274E-03 8.3178544071E-01 7.1325985711E+00 8.6778539596E-03 8.3850724167E-01 7.2236947467E+00 8.6996965918E-03 8.4559064129E-01 7.3197970145E+00 8.7215392241E-03 8.5306049077E-01 7.4212501417E+00 8.7433818563E-03 8.6094039875E-01 7.5283812953E+00 8.7619170314E-03 8.6796406256E-01 7.6239558136E+00 8.7804522064E-03 8.7530680361E-01 7.7239473977E+00 8.7989873814E-03 8.8297195887E-01 7.8284004718E+00 8.8175225565E-03 8.9095456960E-01 7.9372433282E+00 8.8328899271E-03 8.9780214004E-01 8.0306506100E+00 8.8482572977E-03 9.0483877946E-01 8.1266646309E+00 8.8636246683E-03 9.1203641254E-01 8.2248913051E+00 8.8789920388E-03 9.1935478734E-01 8.3247662804E+00 8.8952021752E-03 9.2714536770E-01 8.4310643123E+00 8.9114123115E-03 9.3492714443E-01 8.5371914741E+00 8.9276224478E-03 9.4259892832E-01 8.6417315219E+00 8.9438325841E-03 9.5004384242E-01 8.7430492751E+00 8.9663429017E-03 9.5977105167E-01 8.8751149026E+00 8.9888532193E-03 9.6849597381E-01 8.9930708552E+00 9.0113635369E-03 9.7597623231E-01 9.0935338967E+00 9.0338738544E-03 9.8209919393E-01 9.1749387528E+00 9.0623923690E-03 9.8796422883E-01 9.2515188162E+00 9.0909108836E-03 9.9202369449E-01 9.3027724967E+00 9.1194293981E-03 9.9470345622E-01 9.3346797490E+00 9.1479479127E-03 9.9641453514E-01 9.3530080144E+00 9.1903593869E-03 9.9785168872E-01 9.3647462232E+00 9.2327708611E-03 9.9854544544E-01 9.3660746469E+00 9.2751823353E-03 9.9887869008E-01 9.3623626869E+00 9.3175938094E-03 9.9903779277E-01 9.3562237973E+00 9.4810377253E-03 9.9916600374E-01 9.3259058101E+00 9.6444816412E-03 9.9913278511E-01 9.2935454377E+00 9.8079255571E-03 9.9911278932E-01 9.2615904455E+00 9.9713694729E-03 9.9908029860E-01 9.2296786445E+00 1.2186797215E-02 9.9862554279E-01 8.8177490929E+00 1.4402224956E-02 9.9800447566E-01 8.4399669198E+00 1.6617652698E-02 9.9720039912E-01 8.0930011528E+00 1.8833080440E-02 9.9617716322E-01 7.7735457514E+00 2.2623088543E-02 9.9386719937E-01 7.2829855878E+00 2.6413096646E-02 9.9075478851E-01 6.8523502036E+00 3.0203104749E-02 9.8677380730E-01 6.4713846628E+00 3.3993112852E-02 9.8188046195E-01 6.1315976026E+00 3.8142086192E-02 9.7545907438E-01 5.7987308290E+00 4.2291059532E-02 9.6792822257E-01 5.4996243871E+00 4.6440032871E-02 9.5930864585E-01 5.2283207560E+00 5.0589006211E-02 9.4963151473E-01 4.9799709546E+00 5.6103575529E-02 9.3519627217E-01 4.6786974582E+00 6.1618144847E-02 9.1904582867E-01 4.4035071191E+00 6.7132714165E-02 9.0126420558E-01 4.1484326037E+00 7.2647283483E-02 8.8192721049E-01 3.9087193991E+00 7.8446377381E-02 8.5999660783E-01 3.6691645902E+00 8.4245471280E-02 8.3652153705E-01 3.4392893546E+00 9.0044565178E-02 8.1161812532E-01 3.2169447926E+00 9.5843659076E-02 7.8543661341E-01 3.0010091846E+00 1.0100708908E-01 7.6120476711E-01 2.8139888424E+00 1.0617051907E-01 7.3627908133E-01 2.6323504730E+00 1.1133394907E-01 7.1084953549E-01 2.4568954746E+00 1.1649737907E-01 6.8512129841E-01 2.2886406920E+00 1.2264083350E-01 6.5441322478E-01 2.0993304022E+00 1.2878428793E-01 6.2392583928E-01 1.9233830885E+00 1.3492774235E-01 5.9397213923E-01 1.7620253103E+00 1.4107119678E-01 5.6482056171E-01 1.6159607937E+00 1.4763011007E-01 5.3482837716E-01 1.4770885711E+00 1.5418902335E-01 5.0619878555E-01 1.3554591148E+00 1.6074793664E-01 4.7907151687E-01 1.2502350550E+00 1.6730684993E-01 4.5353367399E-01 1.1602622769E+00 1.7486632023E-01 4.2612576683E-01 1.0737260574E+00 1.8242579053E-01 4.0089469187E-01 1.0035041502E+00 1.8998526083E-01 3.7780604379E-01 9.4747605579E-01 1.9754473114E-01 3.5679333005E-01 9.0365002649E-01 2.0750209239E-01 3.3213115751E-01 8.6150982812E-01 2.1745945365E-01 3.1067713530E-01 8.3382443702E-01 2.2741681491E-01 2.9217457484E-01 8.1760262625E-01 2.3737417616E-01 2.7636114475E-01 8.1040348222E-01 2.4994873048E-01 2.5983310859E-01 8.1119329918E-01 2.6252328479E-01 2.4668850981E-01 8.2019625648E-01 2.7509783910E-01 2.3647175999E-01 8.3509501524E-01 2.8767239341E-01 2.2876927050E-01 8.5415825391E-01 3.0261212719E-01 2.2237819728E-01 8.8047080443E-01 3.1755186097E-01 2.1847419175E-01 9.0929188618E-01 3.3249159475E-01 2.1659270191E-01 9.3949783285E-01 3.4743132853E-01 2.1633925512E-01 9.7029121674E-01 3.6551972706E-01 2.1774046149E-01 1.0075737196E+00 3.8360812559E-01 2.2056155871E-01 1.0442256784E+00 4.0169652412E-01 2.2441466633E-01 1.0798026769E+00 4.1978492265E-01 2.2899232086E-01 1.1140277162E+00 4.4347826160E-01 2.3568951156E-01 1.1565585398E+00 4.6717160055E-01 2.4281548036E-01 1.1963452593E+00 4.9086493949E-01 2.5008068799E-01 1.2333746081E+00 5.1455827844E-01 2.5728648820E-01 1.2677350545E+00 5.4486765355E-01 2.6621613716E-01 1.3080479087E+00 5.7517702866E-01 2.7468213803E-01 1.3446624687E+00 6.0548640377E-01 2.8261697057E-01 1.3780630213E+00 6.3579577887E-01 2.9001893370E-01 1.4087946570E+00 6.5957071351E-01 2.9548042477E-01 1.4314185628E+00 6.8334564814E-01 3.0067820066E-01 1.4530836731E+00 7.0712058278E-01 3.0566160450E-01 1.4741462658E+00 7.3089551742E-01 3.1049282791E-01 1.4950186515E+00 7.4810172000E-01 3.1393717124E-01 1.5102802550E+00 7.6530792258E-01 3.1737687410E-01 1.5259226847E+00 7.8251412516E-01 3.2085413577E-01 1.5422191546E+00 7.9972032774E-01 3.2442042507E-01 1.5595092010E+00 8.1241924728E-01 3.2714634573E-01 1.5731550206E+00 8.2511816682E-01 3.2998673193E-01 1.5877922698E+00 8.3781708635E-01 3.3298022223E-01 1.6036940670E+00 8.5051600589E-01 3.3617484011E-01 1.6212074085E+00 8.5999720929E-01 3.3872662731E-01 1.6355958784E+00 8.6947841269E-01 3.4145519889E-01 1.6513650377E+00 8.7895961609E-01 3.4439917285E-01 1.6688117503E+00 8.8844081949E-01 3.4760675711E-01 1.6883135470E+00 8.9556837243E-01 3.5022778202E-01 1.7046154143E+00 9.0269592537E-01 3.5306394107E-01 1.7226110869E+00 9.0982347831E-01 3.5615482805E-01 1.7426276908E+00 9.1695103125E-01 3.5954973281E-01 1.7650792548E+00 9.2233863512E-01 3.6235481232E-01 1.7839832943E+00 9.2772623900E-01 3.6540179659E-01 1.8048657260E+00 9.3311384288E-01 3.6873137298E-01 1.8280853763E+00 9.3850144676E-01 3.7239396163E-01 1.8540937596E+00 9.4259222139E-01 3.7543551919E-01 1.8760512476E+00 9.4668299602E-01 3.7873913427E-01 1.9002584389E+00 9.5077377066E-01 3.8234642970E-01 1.9271052897E+00 9.5486454529E-01 3.8630875200E-01 1.9570797483E+00 9.5798220550E-01 3.8960585027E-01 1.9823992611E+00 9.6109986571E-01 3.9318071189E-01 2.0102298719E+00 9.6421752592E-01 3.9707567307E-01 2.0409910684E+00 9.6733518612E-01 4.0134275479E-01 2.0752051030E+00 9.6971851209E-01 4.0489525932E-01 2.1040909465E+00 9.7210183805E-01 4.0873787897E-01 2.1357382120E+00 9.7448516401E-01 4.1291345105E-01 2.1705936906E+00 9.7686848997E-01 4.1747444012E-01 2.2092111413E+00 9.7869507995E-01 4.2127080172E-01 2.2417803672E+00 9.8052166993E-01 4.2536694637E-01 2.2773476452E+00 9.8234825991E-01 4.2980603437E-01 2.3163844482E+00 9.8417484988E-01 4.3464078505E-01 2.3594728304E+00 9.8557773697E-01 4.3866285002E-01 2.3957651251E+00 9.8698062405E-01 4.4299218297E-01 2.4352757265E+00 9.8838351113E-01 4.4767212854E-01 2.4784979592E+00 9.8978639821E-01 4.5275551683E-01 2.5260387562E+00 9.9086583044E-01 4.5698179447E-01 2.5660252894E+00 9.9194526267E-01 4.6152106798E-01 2.6094319661E+00 9.9302469489E-01 4.6641676475E-01 2.6567710863E+00 9.9410412712E-01 4.7172172233E-01 2.7086710210E+00 9.9493599592E-01 4.7612958892E-01 2.7522632459E+00 9.9576786471E-01 4.8085478346E-01 2.7994577127E+00 9.9659973351E-01 4.8594074225E-01 2.8507828582E+00 9.9743160231E-01 4.9144023500E-01 2.9068851083E+00 9.9807370173E-01 4.9600830238E-01 2.9539534060E+00 9.9871580115E-01 5.0089705691E-01 3.0047871501E+00 9.9935790058E-01 5.0614991233E-01 3.0599284752E+00 1.0000000000E+00 5.1181954328E-01 3.1200389849E+00 1 11 -1.1182023614E-03 1.0248701832E+01 -4.0489661728E-02 -6.6489465817E-01 -4.1386171527E-02 -6.7992231688E-01 -4.2345741318E-02 -6.9607377395E-01 -4.3380185782E-02 -7.1353676836E-01 -4.4504664756E-02 -7.3254896436E-01 -4.5449574587E-02 -7.4852611788E-01 -4.6471843508E-02 -7.6579201081E-01 -4.7586344282E-02 -7.8457195664E-01 -4.8812161701E-02 -8.0515235285E-01 -4.9855086984E-02 -8.2258538823E-01 -5.0994498255E-02 -8.4153902887E-01 -5.2249179285E-02 -8.6228867053E-01 -5.3643211403E-02 -8.8518517255E-01 -5.4842282534E-02 -9.0474353678E-01 -5.6162850079E-02 -9.2613804522E-01 -5.7628655600E-02 -9.4970945923E-01 -5.9270088083E-02 -9.7589223212E-01 -6.0694940518E-02 -9.9844633277E-01 -6.2273598238E-02 -1.0232568802E+00 -6.4036056572E-02 -1.0507487690E+00 -6.6020626339E-02 -1.0814633998E+00 -6.7756644780E-02 -1.1081387407E+00 -6.9687997626E-02 -1.1376231970E+00 -7.1852553498E-02 -1.1704490460E+00 -7.4298545324E-02 -1.2072933272E+00 -7.6453398712E-02 -1.2395562717E+00 -7.8857080347E-02 -1.2753520242E+00 -8.1557400464E-02 -1.3153497020E+00 -8.4615040047E-02 -1.3603979383E+00 -8.7329218661E-02 -1.4001971212E+00 -9.0361816633E-02 -1.4444815248E+00 -9.3773306789E-02 -1.4940956019E+00 -9.7640085540E-02 -1.5501057949E+00 -1.0109751566E-01 -1.6000114006E+00 -1.0496380058E-01 -1.6556492739E+00 -1.0931522586E-01 -1.7180836130E+00 -1.1424746855E-01 -1.7886489498E+00 -1.1879891321E-01 -1.8536032409E+00 -1.2390210291E-01 -1.9262729480E+00 -1.2965943829E-01 -2.0080860903E+00 -1.3619831165E-01 -2.1008191454E+00 -1.4403910677E-01 -2.2117998688E+00 -1.5313672419E-01 -2.3403301552E+00 -1.6378483279E-01 -2.4905049952E+00 -1.7635582795E-01 -2.6675169246E+00 -1.8497388943E-01 -2.7887277163E+00 -1.9455535624E-01 -2.9233801687E+00 -2.0521948530E-01 -3.0731361086E+00 -2.1708185266E-01 -3.2396049942E+00 -2.2537177881E-01 -3.3558808179E+00 -2.3420691064E-01 -3.4797575369E+00 -2.4358038202E-01 -3.6111366822E+00 -2.5345542564E-01 -3.7495015076E+00 -2.6339431707E-01 -3.8887205175E+00 -2.7358973580E-01 -4.0314953990E+00 -2.8381419461E-01 -4.1746426179E+00 -2.9371322114E-01 -4.3132032522E+00 -3.0147458731E-01 -4.4218217423E+00 -3.0818348300E-01 -4.5156957545E+00 -3.1326134207E-01 -4.5867358628E+00 -3.1598958986E-01 -4.6248967416E+00 -3.1587354346E-01 -4.6232689273E+00 -3.1305178716E-01 -4.5837992710E+00 -3.0703429860E-01 -4.4996441847E+00 -2.9741916993E-01 -4.3651958854E+00 -2.8312176422E-01 -4.1653071696E+00 -2.6461128131E-01 -3.9065644786E+00 -2.4233840408E-01 -3.5952994749E+00 -2.1716800491E-01 -3.2436380690E+00 -1.7967658665E-01 -2.7200637504E+00 -1.4251893416E-01 -2.2015121692E+00 -1.0876640224E-01 -1.7309580457E+00 -8.0315410035E-02 -1.3349068549E+00 -5.2733086757E-02 -9.5193945111E-01 -3.3602222814E-02 -6.8754994109E-01 -2.1019969414E-02 -5.1501167799E-01 -1.3029382236E-02 -4.0686348542E-01 -6.3539297428E-03 -3.1904865917E-01 -3.1516646144E-03 -2.7991988042E-01 -1.6173585668E-03 -2.6416102393E-01 -8.8092328518E-04 -2.5957064761E-01 -2.2943278804E-04 -2.7235594792E-01 -2.8762039043E-04 -2.9479805937E-01 -2.7905380530E-04 -3.1601121477E-01 -3.2566039431E-04 -3.3770842213E-01 -7.8931296178E-04 -6.0221397993E-01 -1.5415940575E-03 -8.2432673564E-01 -2.5829885366E-03 -1.0096806655E+00 -4.0046582734E-03 -1.1644934693E+00 -7.3545559029E-03 -1.3711447037E+00 -1.2036143534E-02 -1.5219826233E+00 -1.8099868628E-02 -1.6321926903E+00 -2.5558646454E-02 -1.7135038424E+00 -3.5268172892E-02 -1.7794362694E+00 -4.6501444487E-02 -1.8292792442E+00 -5.9149785430E-02 -1.8691426479E+00 -7.3107364016E-02 -1.9035740942E+00 -9.3520027028E-02 -1.9466318203E+00 -1.1589743976E-01 -1.9919814950E+00 -1.4010252084E-01 -2.0438412327E+00 -1.6602853504E-01 -2.1050418005E+00 -1.9501991415E-01 -2.1809338816E+00 -2.2558146981E-01 -2.2682370484E+00 -2.5737782510E-01 -2.3642391710E+00 -2.8990187958E-01 -2.4638305639E+00 -3.1891932215E-01 -2.5497165144E+00 -3.4737854607E-01 -2.6267262245E+00 -3.7464145491E-01 -2.6887694449E+00 -4.0007706975E-01 -2.7303956656E+00 -4.2717334164E-01 -2.7475997305E+00 -4.5012960649E-01 -2.7263042778E+00 -4.6847781723E-01 -2.6664373553E+00 -4.8203306539E-01 -2.5711367567E+00 -4.9129083613E-01 -2.4364839192E+00 -4.9547125828E-01 -2.2757990474E+00 -4.9503220146E-01 -2.0974023751E+00 -4.9050831194E-01 -1.9089890494E+00 -4.8095885839E-01 -1.6879563660E+00 -4.6755583134E-01 -1.4701781097E+00 -4.5105882131E-01 -1.2612485972E+00 -4.3214357108E-01 -1.0647947562E+00 -4.0451826627E-01 -8.2834226590E-01 -3.7482897581E-01 -6.1864097578E-01 -3.4397718449E-01 -4.3523226140E-01 -3.1267904278E-01 -2.7639112765E-01 -2.7337090655E-01 -1.0718056132E-01 -2.3507437975E-01 3.1735067796E-02 -1.9838650699E-01 1.4519834749E-01 -1.6371178249E-01 2.3750829556E-01 -1.2547351427E-01 3.2471729364E-01 -9.0652117260E-02 3.9222298483E-01 -5.9313184553E-02 4.4398631412E-01 -3.1407052416E-02 4.8310423408E-01 -2.0245628930E-03 5.1694661041E-01 2.2841399492E-02 5.3902184411E-01 4.3569773386E-02 5.5179980451E-01 6.0565378847E-02 5.5716264185E-01 7.7856105646E-02 5.5532841602E-01 9.0306099370E-02 5.4567334414E-01 9.8707221392E-02 5.3003459562E-01 1.0376399670E-01 5.0981154260E-01 1.0632104407E-01 4.7892445931E-01 1.0546416880E-01 4.4394039953E-01 1.0204881009E-01 4.0608044630E-01 9.6747037140E-02 3.6621256914E-01 9.1607098426E-02 3.3391553925E-01 8.5818895478E-02 3.0091475249E-01 7.9534051127E-02 2.6729795907E-01 7.2868023046E-02 2.3306864724E-01 6.7854322600E-02 2.0786955692E-01 6.2707527382E-02 1.8224174338E-01 5.7442383407E-02 1.5608632913E-01 5.2066233956E-02 1.2926396002E-01 4.8027332043E-02 1.0893081801E-01 4.3924997985E-02 8.8031963132E-02 3.9753485808E-02 6.6440667318E-02 3.5503924943E-02 4.3996216744E-02 3.2272905271E-02 2.6562046314E-02 2.8984613174E-02 8.4321029475E-03 2.5630448950E-02 -1.0525731087E-02 2.2199726621E-02 -3.0475626385E-02 1.9562341767E-02 -4.6248885772E-02 1.6867399251E-02 -6.2806355785E-02 1.4106701970E-02 -8.0280326359E-02 1.1270425610E-02 -9.8833654989E-02 9.0692220000E-03 -1.1369581995E-01 6.8119897464E-03 -1.2939666972E-01 4.4915091130E-03 -1.4606652302E-01 2.0992133466E-03 -1.6386481552E-01 2.2855041868E-04 -1.7825203603E-01 -1.6947375917E-03 -1.9350770298E-01 -3.6769480545E-03 -2.0975909463E-01 -5.7255547337E-03 -2.2716130057E-01 -7.3369124453E-03 -2.4131306934E-01 -8.9967532211E-03 -2.5634603548E-01 -1.0710698649E-02 -2.7238426619E-01 -1.2485471696E-02 -2.8957868430E-01 -1.3888247590E-02 -3.0361669155E-01 -1.5335689311E-02 -3.1853868787E-01 -1.6833064996E-02 -3.3446633791E-01 -1.8386760946E-02 -3.5154778384E-01 -1.9620487917E-02 -3.6553241557E-01 -2.0896203116E-02 -3.8040104469E-01 -2.2219181941E-02 -3.9627481448E-01 -2.3595926023E-02 -4.1330178216E-01 -2.4694849560E-02 -4.2727525052E-01 -2.5834826832E-02 -4.4213759670E-01 -2.7021528621E-02 -4.5801247239E-01 -2.8262054050E-02 -4.7505194028E-01 -2.9258786208E-02 -4.8907284770E-01 -3.0297846761E-02 -5.0400063816E-01 -3.1385720091E-02 -5.1996572191E-01 -3.2530622094E-02 -5.3712974018E-01 -3.3458405481E-02 -5.5130132244E-01 -3.4432402960E-02 -5.6641976707E-01 -3.5460372340E-02 -5.8262779306E-01 -3.6552219314E-02 -6.0010378068E-01 -3.7446640261E-02 -6.1460074867E-01 -3.8394200057E-02 -6.3011647584E-01 -3.9404455690E-02 -6.4681305913E-01 -4.0489661728E-02 -6.6489465817E-01 1.0565034089E-01 1.4000000000E+01 2.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 1.3997722244E+01 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.2831853072E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 4 120 4 9 2 1 201 3 410 50 4 36 0.0000000000E+00 3.8305005854E-01 1.8920205067E+00 6.2915057090E-04 3.8625779670E-01 1.9164318352E+00 1.2583011418E-03 3.8981551967E-01 1.9438446817E+00 1.8874517127E-03 3.9378608756E-01 1.9748544308E+00 2.5166022836E-03 3.9824954307E-01 2.0102313654E+00 2.9772835461E-03 4.0188882668E-01 2.0394761734E+00 3.4379648086E-03 4.0589829226E-01 2.0721061867E+00 3.8986460711E-03 4.1034212982E-01 2.1087687254E+00 4.3593273336E-03 4.1530165662E-01 2.1502958286E+00 4.6977120746E-03 4.1933251142E-01 2.1845143037E+00 5.0360968156E-03 4.2374929317E-01 2.2224831552E+00 5.3744815567E-03 4.2861696696E-01 2.2648956954E+00 5.7128662977E-03 4.3401749210E-01 2.3126379901E+00 5.9620690615E-03 4.3839533977E-01 2.3518616936E+00 6.2112718253E-03 4.4317082005E-01 2.3951728859E+00 6.4604745892E-03 4.4840922405E-01 2.4433040217E+00 6.7096773530E-03 4.5419264557E-01 2.4971864676E+00 6.8936143417E-03 4.5887108580E-01 2.5413354540E+00 7.0775513304E-03 4.6395536993E-01 2.5898737104E+00 7.2614883191E-03 4.6951076148E-01 2.6435655328E+00 7.4454253077E-03 4.7561908864E-01 2.7033784057E+00 7.5814669238E-03 4.8055253120E-01 2.7522696837E+00 7.7175085398E-03 4.8589713692E-01 2.8058121916E+00 7.8535501559E-03 4.9171786627E-01 2.8647947276E+00 7.9895917719E-03 4.9809596572E-01 2.9302117264E+00 8.0904107188E-03 5.0324188714E-01 2.9835776856E+00 8.1912296658E-03 5.0880200063E-01 3.0418154420E+00 8.2920486127E-03 5.1484074869E-01 3.1057312669E+00 8.3928675597E-03 5.2143854262E-01 3.1763377860E+00 8.4677379906E-03 5.2675900962E-01 3.2338493869E+00 8.5426084214E-03 5.3249493474E-01 3.2964126584E+00 8.6174788523E-03 5.3871006495E-01 3.3648447747E+00 8.6923492832E-03 5.4548375715E-01 3.4401683454E+00 8.7480766664E-03 5.5094651807E-01 3.5014627432E+00 8.8038040496E-03 5.5682469745E-01 3.5679507050E+00 8.8595314328E-03 5.6318119278E-01 3.6404543217E+00 8.9152588160E-03 5.7009410627E-01 3.7199986538E+00 8.9568838826E-03 5.7567833723E-01 3.7847669695E+00 8.9985089493E-03 5.8167781196E-01 3.8548470037E+00 9.0401340159E-03 5.8815462086E-01 3.9310628297E+00 9.0817590826E-03 5.9518566219E-01 4.0144383755E+00 9.1130082048E-03 6.0088541420E-01 4.0824988675E+00 9.1442573270E-03 6.0700160653E-01 4.1559866821E+00 9.1755064492E-03 6.1359583435E-01 4.2357291712E+00 9.2067555713E-03 6.2074418838E-01 4.3227509798E+00 9.2301891873E-03 6.2652455673E-01 4.3935439481E+00 9.2536228033E-03 6.3271879142E-01 4.4698122501E+00 9.2770564194E-03 6.3938705255E-01 4.5523714913E+00 9.3004900354E-03 6.4660335075E-01 4.6422270035E+00 9.3179026130E-03 6.5237402162E-01 4.7144497640E+00 9.3353151906E-03 6.5854378678E-01 4.7920154403E+00 9.3527277683E-03 6.6516856974E-01 4.8756875810E+00 9.3701403459E-03 6.7231660774E-01 4.9663992208E+00 9.3837205369E-03 6.7830796275E-01 5.0427625750E+00 9.3973007279E-03 6.8471686234E-01 5.1247679009E+00 9.4108809189E-03 6.9160207632E-01 5.2132219373E+00 9.4244611098E-03 6.9903526825E-01 5.3091095361E+00 9.4371685801E-03 7.0656501647E-01 5.4066398937E+00 9.4498760504E-03 7.1474113556E-01 5.5129719696E+00 9.4625835206E-03 7.2367636388E-01 5.6296602414E+00 9.4752909909E-03 7.3351407041E-01 5.7586835778E+00 9.4832281764E-03 7.4019631257E-01 5.8466312832E+00 9.4911653620E-03 7.4735731106E-01 5.9411419918E+00 9.4991025475E-03 7.5506412508E-01 6.0431435555E+00 9.5070397331E-03 7.6339775087E-01 6.1537573346E+00 9.5119335132E-03 7.6889018747E-01 6.2268294179E+00 9.5168272934E-03 7.7468497070E-01 6.3040630327E+00 9.5217210735E-03 7.8081300171E-01 6.3858865695E+00 9.5266148536E-03 7.8730954293E-01 6.4727890323E+00 9.5311098392E-03 7.9363577431E-01 6.5575620179E+00 9.5356048247E-03 8.0034229133E-01 6.6475825321E+00 9.5400998102E-03 8.0746925436E-01 6.7434079123E+00 9.5445947957E-03 8.1506194747E-01 6.8456666988E+00 9.5509835119E-03 8.2675494980E-01 7.0034668859E+00 9.5573722282E-03 8.3965740980E-01 7.1779921766E+00 9.5637609444E-03 8.5394844081E-01 7.3717274336E+00 9.5701496606E-03 8.6980106274E-01 7.5870691222E+00 9.5770430963E-03 8.8877984181E-01 7.8453364769E+00 9.5839365320E-03 9.0960850711E-01 8.1291343817E+00 9.5908299677E-03 9.3156305603E-01 8.4282980663E+00 9.5977234034E-03 9.5290364684E-01 8.7184647223E+00 9.6273649720E-03 9.9759353463E-01 9.3041221132E+00 9.6570065406E-03 9.9729631686E-01 9.2588392209E+00 9.6866481092E-03 9.9943038098E-01 9.2480221913E+00 9.7162896778E-03 9.9756067085E-01 9.1814294605E+00 9.7692559163E-03 9.9919870328E-01 9.1331515676E+00 9.8222221548E-03 9.9871992123E-01 9.0563085174E+00 9.8751883933E-03 9.9890007244E-01 8.9898231790E+00 9.9281546318E-03 9.9857277116E-01 8.9173096875E+00 1.0097637069E-02 9.9850542446E-01 8.7062043987E+00 1.0267119506E-02 9.9807453170E-01 8.5005186189E+00 1.0436601942E-02 9.9774450903E-01 8.3062789857E+00 1.0606084379E-02 9.9721378817E-01 8.1187742946E+00 1.0895638389E-02 9.9635388571E-01 7.8199559936E+00 1.1185192398E-02 9.9520087129E-01 7.5415825108E+00 1.1474746408E-02 9.9386397909E-01 7.2833262085E+00 1.1764300417E-02 9.9226515859E-01 7.0423793404E+00 1.2451118039E-02 9.8749086859E-01 6.5322641648E+00 1.3137935661E-02 9.8120045899E-01 6.0927762772E+00 1.3824753283E-02 9.7336708923E-01 5.7091324760E+00 1.4511570905E-02 9.6399741377E-01 5.3697166803E+00 1.5541433653E-02 9.4716468354E-01 4.9245685483E+00 1.6571296400E-02 9.2716537648E-01 4.5363703207E+00 1.7601159147E-02 9.0420373554E-01 4.1886606149E+00 1.8631021894E-02 8.7845707760E-01 3.8692773821E+00 1.9747854254E-02 8.4759563398E-01 3.5449634687E+00 2.0864686613E-02 8.1392727295E-01 3.2365132206E+00 2.1981518972E-02 7.7782096236E-01 2.9403559285E+00 2.3098351331E-02 7.3979125271E-01 2.6562779509E+00 2.4170837531E-02 7.0207533766E-01 2.3970985597E+00 2.5243323731E-02 6.6386766168E-01 2.1546379438E+00 2.6315809932E-02 6.2584247145E-01 1.9322097358E+00 2.7388296132E-02 5.8861305614E-01 1.7323065567E+00 2.9106585433E-02 5.3186686538E-01 1.4618276343E+00 3.0824874734E-02 4.7988466170E-01 1.2509439752E+00 3.2543164035E-02 4.3340233456E-01 1.0932968149E+00 3.4261453336E-02 3.9262813266E-01 9.8014578751E-01 3.5650330624E-02 3.6374244665E-01 9.1494865590E-01 3.7039207911E-02 3.3831361079E-01 8.6861335062E-01 3.8428085199E-02 3.1611808322E-01 8.3744252955E-01 3.9816962486E-02 2.9690722590E-01 8.1833965098E-01 4.2498826918E-02 2.6730339418E-01 8.0658629459E-01 4.5180691349E-02 2.4606772087E-01 8.1728814952E-01 4.7862555780E-02 2.3157551915E-01 8.4158741870E-01 5.0544420212E-02 2.2241689186E-01 8.7378983431E-01 5.3254238788E-02 2.1738034742E-01 9.1072398296E-01 5.5964057364E-02 2.1559110915E-01 9.4967032278E-01 5.8673875940E-02 2.1624236792E-01 9.8907008234E-01 6.1383694516E-02 2.1868911935E-01 1.0279233617E+00 6.4837974171E-02 2.2361915108E-01 1.0757019678E+00 6.8292253826E-02 2.2985043348E-01 1.1208387338E+00 7.1746533481E-02 2.3680087753E-01 1.1629469141E+00 7.5200813136E-02 2.4405738313E-01 1.2018831950E+00 7.9779825169E-02 2.5367313723E-01 1.2486315741E+00 8.4358837202E-02 2.6290699383E-01 1.2900622600E+00 8.8937849236E-02 2.7151538793E-01 1.3265402765E+00 9.3516861269E-02 2.7938149171E-01 1.3585048500E+00 1.0044784624E-01 2.8980843267E-01 1.3993042269E+00 1.0737883122E-01 2.9852309551E-01 1.4323051297E+00 1.1430981619E-01 3.0569400032E-01 1.4588537020E+00 1.2124080116E-01 3.1153427472E-01 1.4801394602E+00 1.3342753525E-01 3.1921392065E-01 1.5077244185E+00 1.4561426933E-01 3.2442611638E-01 1.5262157964E+00 1.5780100341E-01 3.2793062957E-01 1.5385536745E+00 1.6998773750E-01 3.3027648202E-01 1.5467787310E+00 1.8578693341E-01 3.3219467403E-01 1.5534809369E+00 2.0158612933E-01 3.3332228352E-01 1.5574120487E+00 2.1738532525E-01 3.3398558021E-01 1.5597212711E+00 2.3318452116E-01 3.3437632620E-01 1.5610809124E+00 2.5543890708E-01 3.3466931109E-01 1.5620997917E+00 2.7769329300E-01 3.3480623010E-01 1.5625758004E+00 2.9994767892E-01 3.3487110430E-01 1.5628012991E+00 3.2220206484E-01 3.3490210835E-01 1.5629090688E+00 3.6502664275E-01 3.3492333221E-01 1.5629828368E+00 4.0785122067E-01 3.3492774654E-01 1.5629981796E+00 4.5067579859E-01 3.3492900831E-01 1.5630025650E+00 4.9350037651E-01 3.3492930657E-01 1.5630036024E+00 5.4716771681E-01 3.3492942973E-01 1.5630040296E+00 6.0083505712E-01 3.3492944462E-01 1.5630040825E+00 6.5450239743E-01 3.3492944907E-01 1.5630040970E+00 7.0816973773E-01 3.3492945757E-01 1.5630041483E+00 7.3419069952E-01 3.3492947788E-01 1.5630042697E+00 7.6021166131E-01 3.3492955143E-01 1.5630047146E+00 7.8623262310E-01 3.3492980085E-01 1.5630062250E+00 8.1225358488E-01 3.3493086898E-01 1.5630126940E+00 8.2775527433E-01 3.3493266632E-01 1.5630235800E+00 8.4325696377E-01 3.3493663330E-01 1.5630476066E+00 8.5875865321E-01 3.3494548586E-01 1.5631012262E+00 8.7426034266E-01 3.3496564789E-01 1.5632233574E+00 8.8450608518E-01 3.3499138228E-01 1.5633792685E+00 8.9475182770E-01 3.3503523527E-01 1.5636449897E+00 9.0499757022E-01 3.3511022577E-01 1.5640995503E+00 9.1524331274E-01 3.3523912305E-01 1.5648813454E+00 9.2220052983E-01 3.3537604528E-01 1.5657124787E+00 9.2915774692E-01 3.3557395149E-01 1.5669148829E+00 9.3611496401E-01 3.3586093240E-01 1.5686609515E+00 9.4307218110E-01 3.3627904880E-01 1.5712101233E+00 9.4785791708E-01 3.3667418421E-01 1.5736248563E+00 9.5264365307E-01 3.3718921407E-01 1.5767802945E+00 9.5742938905E-01 3.3786374580E-01 1.5809269716E+00 9.6221512503E-01 3.3875284867E-01 1.5864169670E+00 9.6555127432E-01 3.3953933582E-01 1.5912961062E+00 9.6888742361E-01 3.4050218712E-01 1.5972979572E+00 9.7222357290E-01 3.4168820374E-01 1.6047343848E+00 9.7555972219E-01 3.4316037884E-01 1.6140315256E+00 9.7791377179E-01 3.4441666277E-01 1.6220228785E+00 9.8026782139E-01 3.4589731043E-01 1.6315085750E+00 9.8262187099E-01 3.4765431292E-01 1.6428587928E+00 9.8497592059E-01 3.4975647342E-01 1.6565719054E+00 9.8665379624E-01 3.5151511917E-01 1.6681543237E+00 9.8833167190E-01 3.5353887120E-01 1.6816052258E+00 9.9000954756E-01 3.5588397732E-01 1.6973550693E+00 9.9168742322E-01 3.5862398605E-01 1.7159768549E+00 9.9289309950E-01 3.6088994779E-01 1.7315536057E+00 9.9409877578E-01 3.6345614405E-01 1.7493847897E+00 9.9530445206E-01 3.6638232082E-01 1.7699624263E+00 9.9651012834E-01 3.6974584176E-01 1.7939350279E+00 9.9738259625E-01 3.7250872515E-01 1.8138790928E+00 9.9825506417E-01 3.7560236384E-01 1.8364772062E+00 9.9912753208E-01 3.7908934180E-01 1.8622831218E+00 1.0000000000E+00 3.8305005854E-01 1.8920205067E+00 1 11 1.9667058327E-08 1.7115001815E+02 -1.0257971654E-01 -7.9869244212E-01 -1.0575985887E-01 -8.3355384234E-01 -1.0913506686E-01 -8.7155004119E-01 -1.1273053399E-01 -9.1319621582E-01 -1.1657718528E-01 -9.5913983943E-01 -1.1957508140E-01 -9.9597450208E-01 -1.2274692077E-01 -1.0359570026E+00 -1.2611576973E-01 -1.0795920546E+00 -1.2971033848E-01 -1.1275136572E+00 -1.3251526408E-01 -1.1659051743E+00 -1.3547957016E-01 -1.2074427175E+00 -1.3862595520E-01 -1.2526270749E+00 -1.4198320101E-01 -1.3020893720E+00 -1.4461179457E-01 -1.3417137964E+00 -1.4739373669E-01 -1.3844985671E+00 -1.5035325076E-01 -1.4309535748E+00 -1.5352161243E-01 -1.4817257258E+00 -1.5601779521E-01 -1.5224493880E+00 -1.5867140674E-01 -1.5664005612E+00 -1.6151020649E-01 -1.6141178737E+00 -1.6457052751E-01 -1.6662908079E+00 -1.6700435635E-01 -1.7082620819E+00 -1.6961119681E-01 -1.7536213644E+00 -1.7242452016E-01 -1.8029623587E+00 -1.7548849633E-01 -1.8570521799E+00 -1.7795510563E-01 -1.9007838357E+00 -1.8062329859E-01 -1.9482008401E+00 -1.8353469209E-01 -1.9999853124E+00 -1.8674441490E-01 -2.0570257402E+00 -1.8936403637E-01 -2.1034681841E+00 -1.9222866922E-01 -2.1540769530E+00 -1.9539088932E-01 -2.2096635039E+00 -1.9892040084E-01 -2.2712908474E+00 -2.0184046250E-01 -2.3219057891E+00 -2.0506634452E-01 -2.3774036201E+00 -2.0866491398E-01 -2.4387745986E+00 -2.1272472460E-01 -2.5073199335E+00 -2.1612771028E-01 -2.5642160950E+00 -2.1991886416E-01 -2.6270181898E+00 -2.2418358427E-01 -2.6969580698E+00 -2.2903471233E-01 -2.7756556867E+00 -2.3315122540E-01 -2.8417678017E+00 -2.3776640370E-01 -2.9152154502E+00 -2.4298986859E-01 -2.9975551761E+00 -2.4896604505E-01 -3.0908320391E+00 -2.5405506660E-01 -3.1695615246E+00 -2.5978081471E-01 -3.2574535370E+00 -2.6628132011E-01 -3.3564506359E+00 -2.7373734204E-01 -3.4690928970E+00 -2.8003539634E-01 -3.5635802059E+00 -2.8711914961E-01 -3.6692222323E+00 -2.9515209473E-01 -3.7883091047E+00 -3.0434553765E-01 -3.9237984744E+00 -3.1249558810E-01 -4.0432938254E+00 -3.2168563966E-01 -4.1774386846E+00 -3.3212992850E-01 -4.3292270840E+00 -3.4410324710E-01 -4.5024979951E+00 -3.5700559469E-01 -4.6884709813E+00 -3.7193453898E-01 -4.9028586139E+00 -3.8938637642E-01 -5.1525893727E+00 -4.1001394045E-01 -5.4467755467E+00 -4.2487786238E-01 -5.6582250294E+00 -4.4156742445E-01 -5.8952055994E+00 -4.6038286898E-01 -6.1619065888E+00 -4.8166386404E-01 -6.4630667540E+00 -4.9617126238E-01 -6.6681221300E+00 -5.1183745481E-01 -6.8893662808E+00 -5.2873276196E-01 -7.1277787381E+00 -5.4690080616E-01 -7.3839654813E+00 -5.6470521738E-01 -7.6348696191E+00 -5.8351118442E-01 -7.8997529169E+00 -6.0314085870E-01 -8.1761255700E+00 -6.2324936003E-01 -8.4591628808E+00 -6.5139559917E-01 -8.8553214586E+00 -6.7607720544E-01 -9.2029753509E+00 -6.9148808192E-01 -9.4209674435E+00 -6.8833499311E-01 -9.3794303296E+00 -6.5020359696E-01 -8.8492566586E+00 -5.6422570091E-01 -7.6508146936E+00 -4.3534593441E-01 -5.8540397061E+00 -2.9255335092E-01 -3.8651682638E+00 -7.1973180197E-03 6.5997759697E-02 -1.2491917971E-02 -7.9851131403E-02 2.1207082788E-03 5.4585769405E-02 -9.6855380628E-03 -1.8038034553E-01 1.1316437369E-03 -1.5005386840E-01 -1.4916352780E-03 -3.0497182846E-01 -7.7964496059E-05 -4.0001894435E-01 -1.6862866498E-03 -5.3431864054E-01 -9.5850667981E-04 -8.6103115396E-01 -2.2353411959E-03 -1.1860225604E+00 -2.7793772752E-03 -1.4726728058E+00 -4.3389036393E-03 -1.7472756410E+00 -6.3455091650E-03 -2.1507345535E+00 -9.5407734350E-03 -2.5059709779E+00 -1.3241538737E-02 -2.8099051193E+00 -1.7874258826E-02 -3.0744405080E+00 -3.1963283968E-02 -3.5648993868E+00 -5.0938411363E-02 -3.9152164762E+00 -7.4679054657E-02 -4.1689454375E+00 -1.0299106970E-01 -4.3584114185E+00 -1.5331029165E-01 -4.5699875335E+00 -2.1211437173E-01 -4.7394049309E+00 -2.7846614593E-01 -4.9008015160E+00 -3.5172251126E-01 -5.0772900595E+00 -4.3833901949E-01 -5.3014416293E+00 -5.3164873266E-01 -5.5660444456E+00 -6.3026860153E-01 -5.8642998153E+00 -7.3189572809E-01 -6.1750774018E+00 -8.2923703782E-01 -6.4541596168E+00 -9.2260861564E-01 -6.6780228017E+00 -1.0082251955E+00 -6.8136077673E+00 -1.0827584104E+00 -6.8373316459E+00 -1.1732942236E+00 -6.6213145768E+00 -1.2254518657E+00 -6.1278739337E+00 -1.2411665485E+00 -5.4400882470E+00 -1.2257276348E+00 -4.6528316199E+00 -1.1950497070E+00 -4.0005512917E+00 -1.1516762707E+00 -3.3663814023E+00 -1.0985857651E+00 -2.7697510604E+00 -1.0383471365E+00 -2.2215974685E+00 -9.0948898913E-01 -1.3138236997E+00 -7.7349622433E-01 -5.9619772671E-01 -6.3829665735E-01 -4.2041552239E-02 -5.0903871158E-01 3.8032221617E-01 -3.8757402778E-01 7.0318700444E-01 -2.7704889395E-01 9.4542053210E-01 -1.7823349102E-01 1.1257464295E+00 -9.1207596960E-02 1.2583291430E+00 3.2696368052E-03 1.3745576739E+00 8.0637350527E-02 1.4461436535E+00 1.4264422421E-01 1.4844290609E+00 1.9117865234E-01 1.4976042231E+00 2.3792030579E-01 1.4862934032E+00 2.6825527234E-01 1.4512707530E+00 2.8567700421E-01 1.3997761174E+00 2.9314770836E-01 1.3371605491E+00 2.9081951927E-01 1.2297230439E+00 2.7763059799E-01 1.1154211992E+00 2.5817569219E-01 1.0007926314E+00 2.3559970513E-01 8.9006298610E-01 1.9423205087E-01 7.1207442690E-01 1.5556006226E-01 5.6001699566E-01 1.2219968583E-01 4.3492224893E-01 9.4676143825E-02 3.3440110955E-01 6.6965136189E-02 2.3506513670E-01 4.6750882760E-02 1.6349777398E-01 3.2331659496E-02 1.1281972752E-01 2.2193825637E-02 7.7327924639E-02 1.2929531214E-02 4.4995573945E-02 7.4700832175E-03 2.5979636830E-02 4.2860104184E-03 1.4901523689E-02 2.4402962223E-03 8.4819602178E-03 8.0518171384E-04 2.7974306925E-03 2.7395642539E-04 9.5090956728E-04 9.1853770035E-05 3.1800880682E-04 2.8368316987E-05 9.7283413850E-05 5.8022240868E-06 1.8899311837E-05 7.8880999604E-07 1.3122812053E-06 -6.9315464309E-07 -4.0394501037E-06 -2.7714922523E-06 -1.5714332814E-05 -6.4732176280E-06 -3.7941507930E-05 -1.6322792313E-05 -9.7498484610E-05 -4.3300630397E-05 -2.6084502253E-04 -1.2013449851E-04 -7.2619572785E-04 -2.1924385942E-04 -1.3265488268E-03 -3.9710125520E-04 -2.4039955593E-03 -7.1453318111E-04 -4.3275130804E-03 -1.2763961217E-03 -7.7339799083E-03 -1.8616401916E-03 -1.1284972991E-02 -2.7005118416E-03 -1.6379712755E-02 -3.8947331851E-03 -2.3644675247E-02 -5.5818914909E-03 -3.3935726729E-02 -7.0994719461E-03 -4.3222915986E-02 -9.0002057279E-03 -5.4899413146E-02 -1.1372878254E-02 -6.9553963930E-02 -1.4326429280E-02 -8.7934118703E-02 -1.6764264629E-02 -1.0323265498E-01 -1.9593744410E-02 -1.2114806578E-01 -2.2879771277E-02 -1.4219136559E-01 -2.6702395425E-02 -1.6702568314E-01 -2.9737158439E-02 -1.8703808507E-01 -3.3123744064E-02 -2.0970613561E-01 -3.6914881955E-02 -2.3553633806E-01 -4.1176776729E-02 -2.6519453914E-01 -4.4512298421E-02 -2.8889751611E-01 -4.8161077281E-02 -3.1535309125E-01 -5.2169285295E-02 -3.4508922401E-01 -5.6594647373E-02 -3.7879419840E-01 -6.0043131017E-02 -4.0573176536E-01 -6.3773225605E-02 -4.3556823389E-01 -6.7825332195E-02 -4.6884706985E-01 -7.2249377252E-02 -5.0626806155E-01 -7.5692420081E-02 -5.3621600617E-01 -7.9388003317E-02 -5.6920182894E-01 -8.3370838163E-02 -6.0577224769E-01 -8.7683444107E-02 -6.4662390074E-01 -9.1039285880E-02 -6.7935502924E-01 -9.4619706695E-02 -7.1522561766E-01 -9.8454412630E-02 -7.5477666439E-01 -1.0257971654E-01 -7.9869244212E-01 1.0550707015E-01 1.4000000000E+01 2.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 9.9563519731E+01 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.2831853072E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 4 150 9 10 2 1 201 3 410 50 4 36 0.0000000000E+00 3.3492894737E-01 1.5630017734E+00 8.0996698591E-04 3.3492897783E-01 1.5630019559E+00 1.6199339718E-03 3.3492907775E-01 1.5630025602E+00 2.4299009577E-03 3.3492940173E-01 1.5630045220E+00 3.2398679436E-03 3.3493064268E-01 1.5630120378E+00 3.7517927079E-03 3.3493277729E-01 1.5630249665E+00 4.2637174722E-03 3.3493745977E-01 1.5630533267E+00 4.7756422365E-03 3.3494784247E-01 1.5631162148E+00 5.2875670008E-03 3.3497132340E-01 1.5632584535E+00 5.6253196177E-03 3.3500106877E-01 1.5634386737E+00 5.9630722345E-03 3.3505149890E-01 1.5637442704E+00 6.3008248514E-03 3.3513730015E-01 1.5642644264E+00 6.6385774682E-03 3.3528404566E-01 1.5651546628E+00 6.8665984389E-03 3.3543826729E-01 1.5660910991E+00 7.0946194095E-03 3.3566006097E-01 1.5674392111E+00 7.3226403801E-03 3.3598014458E-01 1.5693878386E+00 7.5506613507E-03 3.3644442142E-01 1.5722207612E+00 7.7068038399E-03 3.3687948862E-01 1.5748823480E+00 7.8629463291E-03 3.3744452467E-01 1.5783486898E+00 8.0190888183E-03 3.3818213622E-01 1.5828904893E+00 8.1752313075E-03 3.3915163880E-01 1.5888889437E+00 8.2836832025E-03 3.4000414049E-01 1.5941902675E+00 8.3921350975E-03 3.4104570995E-01 1.6007007230E+00 8.5005869925E-03 3.4232656622E-01 1.6087574670E+00 8.6090388876E-03 3.4391453081E-01 1.6188230533E+00 8.6852642997E-03 3.4526301853E-01 1.6274369544E+00 8.7614897119E-03 3.4685100830E-01 1.6376576504E+00 8.8377151241E-03 3.4873444442E-01 1.6498874810E+00 8.9139405362E-03 3.5098767321E-01 1.6646706799E+00 8.9680250018E-03 3.5286411710E-01 1.6771068192E+00 9.0221094674E-03 3.5502325410E-01 1.6915550471E+00 9.0761939329E-03 3.5752581766E-01 1.7084857822E+00 9.1302783985E-03 3.6045158342E-01 1.7285283339E+00 9.1689403503E-03 3.6285992019E-01 1.7452249135E+00 9.2076023020E-03 3.6558837902E-01 1.7643544791E+00 9.2462642538E-03 3.6870164322E-01 1.7864570453E+00 9.2849262055E-03 3.7228387097E-01 1.8122480306E+00 9.3127252119E-03 3.7521015378E-01 1.8335977555E+00 9.3405242182E-03 3.7848862904E-01 1.8578133350E+00 9.3683232245E-03 3.8218704508E-01 1.8855032097E+00 9.3961222309E-03 3.8639285811E-01 1.9174665402E+00 9.4162020065E-03 3.8980959403E-01 1.9437998496E+00 9.4362817822E-03 3.9360518022E-01 1.9734331483E+00 9.4563615579E-03 3.9784956058E-01 2.0070394713E+00 9.4764413335E-03 4.0263245047E-01 2.0454961360E+00 9.4909969490E-03 4.0650102000E-01 2.0770494881E+00 9.5055525646E-03 4.1076964522E-01 2.1123242817E+00 9.5201081801E-03 4.1550966511E-01 2.1520519009E+00 9.5346637956E-03 4.2081211283E-01 2.1971793503E+00 9.5452439849E-03 4.2508515090E-01 2.2340649734E+00 9.5558241741E-03 4.2977413822E-01 2.2750661142E+00 9.5664043634E-03 4.3495109397E-01 2.3209641643E+00 9.5769845526E-03 4.4070753106E-01 2.3727648407E+00 9.5846924552E-03 4.4533224404E-01 2.4149554278E+00 9.5924003578E-03 4.5038390827E-01 2.4616156422E+00 9.6001082604E-03 4.5593461210E-01 2.5135671469E+00 9.6078161630E-03 4.6207562884E-01 2.5718617838E+00 9.6134422979E-03 4.6699675126E-01 2.6191853538E+00 9.6190684327E-03 4.7235143734E-01 2.6712823453E+00 9.6246945676E-03 4.7821130649E-01 2.7290039539E+00 9.6303207024E-03 4.8466674643E-01 2.7934343746E+00 9.6344372493E-03 4.8983281930E-01 2.8456189296E+00 9.6385537961E-03 4.9543580883E-01 2.9028301233E+00 9.6426703430E-03 5.0154652627E-01 2.9659392723E+00 9.6467868898E-03 5.0825407409E-01 3.0360510674E+00 9.6498102751E-03 5.1362529308E-01 3.0928130715E+00 9.6528336603E-03 5.1943544114E-01 3.1548184523E+00 9.6558570455E-03 5.2575455214E-01 3.2229536455E+00 9.6588804307E-03 5.3267052267E-01 3.2983379614E+00 9.6611007726E-03 5.3819334766E-01 3.3591318285E+00 9.6633211144E-03 5.4415300000E-01 3.4253114225E+00 9.6655414563E-03 5.5061796708E-01 3.4977633994E+00 9.6677617981E-03 5.5767391783E-01 3.5776021945E+00 9.6693935630E-03 5.6329815529E-01 3.6417956652E+00 9.6710253280E-03 5.6935320431E-01 3.7114405936E+00 9.6726570929E-03 5.7590522201E-01 3.7874087949E+00 9.6742888578E-03 5.8303660637E-01 3.8707901737E+00 9.6754872111E-03 5.8870205106E-01 3.9375322466E+00 9.6766855644E-03 5.9478638370E-01 4.0096874379E+00 9.6778839177E-03 6.0135214556E-01 4.0880912988E+00 9.6790822710E-03 6.0847675973E-01 4.1737811712E+00 9.6799655671E-03 6.1414170430E-01 4.2423548881E+00 9.6808488633E-03 6.2021021488E-01 4.3162314749E+00 9.6817321595E-03 6.2674054120E-01 4.3961973421E+00 9.6826154556E-03 6.3380426671E-01 4.4832210209E+00 9.6832869471E-03 6.3958499361E-01 4.5548306237E+00 9.6839584386E-03 6.4577273932E-01 4.6318593257E+00 9.6846299301E-03 6.5242565850E-01 4.7150985615E+00 9.6853014216E-03 6.5961501839E-01 4.8055198515E+00 9.6858385967E-03 6.6581111405E-01 4.8838251502E+00 9.6863757718E-03 6.7246194957E-01 4.9682494484E+00 9.6869129469E-03 6.7963534960E-01 5.0597215915E+00 9.6874501220E-03 6.8741504066E-01 5.1593897513E+00 9.6878841258E-03 6.9421391601E-01 5.2468702973E+00 9.6883181296E-03 7.0154437232E-01 5.3415669708E+00 9.6887521334E-03 7.0949066878E-01 5.4446395101E+00 9.6891861373E-03 7.1815789205E-01 5.5575358821E+00 9.6894204159E-03 7.2318130823E-01 5.6231838886E+00 9.6896546946E-03 7.2847786971E-01 5.6925647035E+00 9.6898889732E-03 7.3407656159E-01 5.7660786788E+00 9.6901232519E-03 7.4001096634E-01 5.8441899276E+00 9.6903375884E-03 7.4576743389E-01 5.9201374643E+00 9.6905519250E-03 7.5187232925E-01 6.0008656531E+00 9.6907662615E-03 7.5836624670E-01 6.0869363971E+00 9.6909805981E-03 7.6529668546E-01 6.1790074912E+00 9.6912075459E-03 7.7317288825E-01 6.2838977869E+00 9.6914344937E-03 7.8167981831E-01 6.3974738700E+00 9.6916614415E-03 7.9091222814E-01 6.5210497162E+00 9.6918883893E-03 8.0098430101E-01 6.6562093750E+00 9.6924798482E-03 8.3182797520E-01 7.0718512515E+00 9.6930713072E-03 8.7341141454E-01 7.6361582334E+00 9.6936627661E-03 9.2720227471E-01 8.3690766033E+00 9.6942542251E-03 9.7623718196E-01 9.0329040249E+00 9.7032365856E-03 1.0051696836E+00 9.0755264938E+00 9.7122189461E-03 9.9098837559E-01 8.5419401333E+00 9.7212013066E-03 1.0021008701E+00 8.3899711722E+00 9.7301836671E-03 9.8549322951E-01 7.8719712724E+00 9.7495852053E-03 9.9800242461E-01 7.5096873874E+00 9.7689867434E-03 9.8852071536E-01 6.9275341944E+00 9.7883882815E-03 9.8839737180E-01 6.5562746842E+00 9.8077898197E-03 9.8118380748E-01 6.1476706309E+00 9.8447574129E-03 9.6952245957E-01 5.5564363968E+00 9.8817250062E-03 9.5242656226E-01 5.0486345090E+00 9.9186925994E-03 9.3169631569E-01 4.6160303019E+00 9.9556601927E-03 9.0757877951E-01 4.2354382518E+00 1.0001696757E-02 8.7293316341E-01 3.8074988098E+00 1.0047733322E-02 8.3364663443E-01 3.4127089706E+00 1.0093769886E-02 7.9028794209E-01 3.0394784534E+00 1.0139806451E-02 7.4369983041E-01 2.6844905889E+00 1.0183260568E-02 6.9782923924E-01 2.3693122854E+00 1.0226714685E-02 6.5134379056E-01 2.0794503558E+00 1.0270168802E-02 6.0543565280E-01 1.8205656429E+00 1.0313622919E-02 5.6112981750E-01 1.5962012268E+00 1.0359002542E-02 5.1741779121E-01 1.3996921128E+00 1.0404382165E-02 4.7688001541E-01 1.2399414041E+00 1.0449761788E-02 4.3982748876E-01 1.1133920651E+00 1.0495141411E-02 4.0636692827E-01 1.0156433723E+00 1.0550757773E-02 3.7018528788E-01 9.2841497019E-01 1.0606374136E-02 3.3906531082E-01 8.6986764438E-01 1.0661990498E-02 3.1263018497E-01 8.3343645309E-01 1.0717606861E-02 2.9044763227E-01 8.1380233530E-01 1.0790734893E-02 2.6699859458E-01 8.0664716485E-01 1.0863862925E-02 2.4914312739E-01 8.1435769219E-01 1.0936990957E-02 2.3597831698E-01 8.3194993178E-01 1.1010118989E-02 2.2669807626E-01 8.5595280360E-01 1.1104567931E-02 2.1933402644E-01 8.9266079397E-01 1.1199016873E-02 2.1602463564E-01 9.3270679073E-01 1.1293465815E-02 2.1574860869E-01 9.7389804306E-01 1.1387914757E-02 2.1769350340E-01 1.0148543943E+00 1.1510312237E-02 2.2249689685E-01 1.0662464908E+00 1.1632709717E-02 2.2893797864E-01 1.1147878810E+00 1.1755107196E-02 2.3627337594E-01 1.1599433227E+00 1.1877504676E-02 2.4398566077E-01 1.2015140187E+00 1.2039962026E-02 2.5422154648E-01 1.2511731975E+00 1.2202419377E-02 2.6400604310E-01 1.2948204607E+00 1.2364876727E-02 2.7305918631E-01 1.3329042520E+00 1.2527334077E-02 2.8125680419E-01 1.3659618501E+00 1.2760570047E-02 2.9148450682E-01 1.4057205098E+00 1.2993806017E-02 2.9998955839E-01 1.4377754208E+00 1.3227041987E-02 3.0695793483E-01 1.4634836658E+00 1.3460277957E-02 3.1261165359E-01 1.4840347384E+00 1.3947900254E-02 3.2111475923E-01 1.5144886829E+00 1.4435522551E-02 3.2643133823E-01 1.5332864169E+00 1.4923144848E-02 3.2971864637E-01 1.5448219638E+00 1.5410767146E-02 3.3174359337E-01 1.5519058793E+00 1.6044700294E-02 3.3325312861E-01 1.5571704832E+00 1.6678633443E-02 3.3404554868E-01 1.5599295818E+00 1.7312566592E-02 3.3446350509E-01 1.5613834062E+00 1.7946499741E-02 3.3468491916E-01 1.5621534459E+00 1.8964713436E-02 3.3484304828E-01 1.5627031688E+00 1.9982927132E-02 3.3489756665E-01 1.5628926724E+00 2.1001140827E-02 3.3491752207E-01 1.5629620291E+00 2.2019354523E-02 3.3492493913E-01 1.5629878100E+00 4.6076708085E-02 3.3492997499E-01 1.5630053127E+00 7.0134061647E-02 3.3492772238E-01 1.5629974836E+00 9.4191415209E-02 3.3492976906E-01 1.5630045970E+00 1.1824876877E-01 3.3492628175E-01 1.5629924766E+00 2.1356787792E-01 3.3492968496E-01 1.5630043047E+00 3.0888698707E-01 3.3492799132E-01 1.5629984183E+00 4.0420609622E-01 3.3492964428E-01 1.5630041633E+00 4.9952520537E-01 3.3492654240E-01 1.5629933825E+00 5.5975113378E-01 3.3492960138E-01 1.5630040142E+00 6.1997706219E-01 3.3492810988E-01 1.5629988304E+00 6.8020299059E-01 3.3492954511E-01 1.5630038186E+00 7.4042891900E-01 3.3492690363E-01 1.5629946380E+00 7.7406317570E-01 3.3492948211E-01 1.5630035996E+00 8.0769743241E-01 3.3492827995E-01 1.5629994215E+00 8.4133168911E-01 3.3492940224E-01 1.5630033220E+00 8.7496594582E-01 3.3492741965E-01 1.5629964316E+00 8.9797794062E-01 3.3492932822E-01 1.5630030648E+00 9.2098993541E-01 3.3492848021E-01 1.5630001176E+00 9.4400193021E-01 3.3492924738E-01 1.5630027838E+00 9.6701392501E-01 3.3492794765E-01 1.5629982668E+00 9.7354608562E-01 3.3492910383E-01 1.5630022848E+00 9.8007824622E-01 3.3492877505E-01 1.5630011424E+00 9.8661040683E-01 3.3492901223E-01 1.5630019664E+00 9.9314256743E-01 3.3492871555E-01 1.5630009363E+00 9.9485692557E-01 3.3492890165E-01 1.5630015821E+00 9.9657128372E-01 3.3492892716E-01 1.5630016724E+00 9.9828564186E-01 3.3492893449E-01 1.5630016968E+00 1.0000000000E+00 3.3492894737E-01 1.5630017734E+00 1 11 6.1395025412E-07 2.5824854304E+04 -6.2594998645E-05 -3.3528973037E-04 -1.0975249929E-04 -6.2012932430E-04 -2.2258849797E-04 -1.3030900420E-03 -4.9611409088E-04 -2.9595422247E-03 -1.1685053642E-03 -7.0322844350E-03 -2.0160754383E-03 -1.2167127326E-02 -3.4680356898E-03 -2.0964889376E-02 -5.9393908926E-03 -3.5946175107E-02 -1.0107967455E-02 -6.1236940033E-02 -1.4280650887E-02 -8.6582339109E-02 -2.0079009609E-02 -1.2185273557E-01 -2.8085385201E-02 -1.7066931956E-01 -3.9065744314E-02 -2.3786539171E-01 -4.8651667613E-02 -2.9678796725E-01 -6.0424788262E-02 -3.6951899585E-01 -7.4850761189E-02 -4.5925671006E-01 -9.2500865161E-02 -5.7009161213E-01 -1.0680744406E-01 -6.6086131815E-01 -1.2323745919E-01 -7.6623093238E-01 -1.4213572308E-01 -8.8907066870E-01 -1.6393281530E-01 -1.0331540928E+00 -1.8106278721E-01 -1.1483498606E+00 -2.0008504071E-01 -1.2784549903E+00 -2.2128890055E-01 -1.4263998724E+00 -2.4504004770E-01 -1.5960585393E+00 -2.6350598749E-01 -1.7310379405E+00 -2.8366508802E-01 -1.8816547022E+00 -3.0577282662E-01 -2.0509806160E+00 -3.3014955976E-01 -2.2430328862E+00 -3.4904070454E-01 -2.3959384937E+00 -3.6945841011E-01 -2.5654040033E+00 -3.9162604919E-01 -2.7545888866E+00 -4.1582069285E-01 -2.9675759153E+00 -4.3454849879E-01 -3.1373232805E+00 -4.5464593416E-01 -3.3244433005E+00 -4.7630571128E-01 -3.5321156828E+00 -4.9976553989E-01 -3.7644118310E+00 -5.1791036655E-01 -3.9495599169E+00 -5.3727509483E-01 -4.1526446416E+00 -5.5802727860E-01 -4.3768208614E+00 -5.8037417493E-01 -4.6261053166E+00 -5.9765266599E-01 -4.8246593356E+00 -6.1602043475E-01 -5.0414723094E+00 -6.3562889218E-01 -5.2796635578E+00 -6.5666758485E-01 -5.5431976745E+00 -6.7294758049E-01 -5.7529248249E+00 -6.9022151820E-01 -5.9811010432E+00 -7.0863596976E-01 -6.2308404131E+00 -7.2837789503E-01 -6.5061108165E+00 -7.4369744107E-01 -6.7250986032E+00 -7.5996605877E-01 -6.9627755546E+00 -7.7733821481E-01 -7.2223259712E+00 -7.9601490550E-01 -7.5078336373E+00 -8.1059251969E-01 -7.7351673576E+00 -8.2613771528E-01 -7.9817185358E+00 -8.4282672848E-01 -8.2508655582E+00 -8.6089253858E-01 -8.5469813730E+00 -8.7512491273E-01 -8.7833916152E+00 -8.9041774898E-01 -9.0401074782E+00 -9.0698415374E-01 -9.3208740637E+00 -9.2510859276E-01 -9.6305872816E+00 -9.3957510711E-01 -9.8792177780E+00 -9.5528179280E-01 -1.0150127774E+01 -9.7249595802E-01 -1.0447660293E+01 -9.9157606073E-01 -1.0777542272E+01 -1.0070553802E+00 -1.1044794199E+01 -1.0240601015E+00 -1.1337598842E+01 -1.0429336230E+00 -1.1661211855E+01 -1.0641371744E+00 -1.2022609320E+01 -1.0815499928E+00 -1.2317426804E+01 -1.1008874515E+00 -1.2642570910E+01 -1.1225912289E+00 -1.3004533707E+01 -1.1472537637E+00 -1.3411957943E+01 -1.1677234341E+00 -1.3747009125E+01 -1.1906479088E+00 -1.4118994392E+01 -1.2165913945E+00 -1.4536002406E+01 -1.2463078978E+00 -1.5008795122E+01 -1.2711147014E+00 -1.5399790180E+01 -1.2990375131E+00 -1.5836218221E+01 -1.3307819702E+00 -1.6328052020E+01 -1.3672847658E+00 -1.6888497838E+01 -1.3979573582E+00 -1.7355659911E+01 -1.4325554265E+00 -1.7878940303E+01 -1.4719446476E+00 -1.8470480935E+01 -1.5172636009E+00 -1.9146231807E+01 -1.5565987559E+00 -1.9729103953E+01 -1.6010975229E+00 -2.0384936867E+01 -1.6518899758E+00 -2.1129521481E+01 -1.7104554876E+00 -2.1983517710E+01 -1.7641989923E+00 -2.2763560139E+01 -1.8254684937E+00 -2.3649232048E+01 -1.8959741738E+00 -2.4664390695E+01 -1.9779651665E+00 -2.5840404644E+01 -2.0546082741E+00 -2.6936077202E+01 -2.1427416240E+00 -2.8192429272E+01 -2.2450518170E+00 -2.9646918203E+01 -2.3650494469E+00 -3.1348486882E+01 -2.4387341149E+00 -3.2391415008E+01 -2.5197728733E+00 -3.3537011612E+01 -2.6091920146E+00 -3.4799583203E+01 -2.7081695303E+00 -3.6195550036E+01 -2.8082242876E+00 -3.7605283155E+01 -2.9185218805E+00 -3.9157921003E+01 -3.0402440000E+00 -4.0869925836E+01 -3.1745454716E+00 -4.2757375931E+01 -3.3314885102E+00 -4.4961402897E+01 -3.5041191833E+00 -4.7384091775E+01 -3.6912390643E+00 -5.0008572499E+01 -3.8884079634E+00 -5.2772648414E+01 -4.3885626411E+00 -5.9779793810E+01 -4.1150018947E+00 -5.5964155046E+01 -2.3813151020E+00 -3.1764269199E+01 -6.9993020256E-01 -8.3813302514E+00 1.8961320844E-01 9.5536418977E-01 -2.2728433291E-01 -7.6368507927E+00 1.1629755605E-01 -5.1913722978E+00 -3.6620497257E-01 -1.4048134958E+01 4.4554094486E-02 -1.1747478756E+01 -1.8743513703E-01 -1.7366826704E+01 -1.1833999948E-01 -1.7777116765E+01 -2.7046788782E-01 -2.0637825564E+01 -3.9963130952E-01 -2.2052209416E+01 -6.5018001389E-01 -2.3632265368E+01 -9.4235717981E-01 -2.4673869295E+01 -1.2741384603E+00 -2.5511321217E+01 -1.7471900762E+00 -2.6653947725E+01 -2.2764519590E+00 -2.8011883481E+01 -2.8547657104E+00 -2.9654759837E+01 -3.4701729451E+00 -3.1525760492E+01 -4.0666452728E+00 -3.3327922869E+01 -4.6517687789E+00 -3.4900896431E+01 -5.1956180218E+00 -3.5967920134E+01 -5.6699474682E+00 -3.6308457263E+01 -6.0674845628E+00 -3.5766903591E+01 -6.3527474123E+00 -3.4338739555E+01 -6.5241600068E+00 -3.2164441645E+01 -6.5885946085E+00 -2.9446216488E+01 -6.5398920051E+00 -2.5689123083E+01 -6.3753299250E+00 -2.1777135984E+01 -6.1207926380E+00 -1.7958285607E+01 -5.7994951274E+00 -1.4389101011E+01 -5.3081275893E+00 -1.0206488258E+01 -4.7705202694E+00 -6.6473934133E+00 -4.2132717994E+00 -3.6852250769E+00 -3.6559248669E+00 -1.2541627289E+00 -2.9578495024E+00 1.2286216105E+00 -2.3020053105E+00 3.1161535649E+00 -1.6999484782E+00 4.5421957278E+00 -1.1573654559E+00 5.6123206783E+00 -5.4489795891E-01 6.5991909853E+00 -3.1752881458E-02 7.2498657934E+00 3.8910425782E-01 7.6540057164E+00 7.2698799439E-01 7.8749095242E+00 1.0646326745E+00 7.9599170879E+00 1.2970257135E+00 7.8740384440E+00 1.4451535983E+00 7.6688420573E+00 1.5273318365E+00 7.3815287585E+00 1.5601265081E+00 6.8775555313E+00 1.5237032088E+00 6.3153337707E+00 1.4441475663E+00 5.7333987932E+00 1.3399655297E+00 5.1576221392E+00 1.0938859358E+00 4.0402082203E+00 8.5610534653E-01 3.0900243496E+00 6.5278722017E-01 2.3246972777E+00 4.8905593285E-01 1.7265918126E+00 3.2955633931E-01 1.1558284318E+00 2.1861082557E-01 7.6384882201E-01 1.4344871312E-01 5.0019041081E-01 9.3328586284E-02 3.2496049726E-01 4.6094953201E-02 1.6030470265E-01 2.2560138077E-02 7.8397816491E-02 1.0941118388E-02 3.7998146770E-02 5.2177026884E-03 1.8095745027E-02 -1.3324561305E-03 -4.6701737960E-03 1.4298504173E-03 4.9305319979E-03 -9.8813354561E-04 -3.4734328291E-03 2.9341365388E-03 1.0158847005E-02 -8.6118134152E-04 -3.0322080075E-03 1.0014259190E-03 3.4414894200E-03 -7.9892140400E-04 -2.8158144470E-03 2.5347724732E-03 8.7707981500E-03 -7.3428736520E-04 -2.5911684921E-03 8.2418192422E-04 2.8254507985E-03 -6.5260091641E-04 -2.3072547835E-03 2.0090060602E-03 6.9434158051E-03 -5.6326377702E-04 -1.9967480549E-03 5.8676999849E-04 2.0002865238E-03 -4.5764691826E-04 -1.6296589411E-03 1.3205674286E-03 4.5506288315E-03 -3.6439486103E-04 -1.3055440066E-03 3.3762641527E-04 1.1343406762E-03 -2.7229532572E-04 -9.8543203974E-04 7.0732915718E-04 2.4191831229E-03 -1.1826857030E-04 -4.5007473662E-04 4.8875327808E-05 1.3067865310E-04 -6.1485927062E-05 -2.5265660487E-04 5.4686277504E-05 1.5032320597E-04 -6.7222385867E-06 -6.2891639655E-05 -2.5805291053E-05 -1.3171255585E-04 -3.3833741637E-05 -1.6578032645E-04 -6.2594998645E-05 -3.3528973037E-04 1.0550707977E-01 1.4000000000E+01 2.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 2.9898334163E+03 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 6.2831853072E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 0.0000000000E+00 auto/07p/python/auto/test_data/c.ab0000640000175000017500000000073113570013207015232 0ustar skskunames = { 1:'a', 2:"b" } IRS=5 unames = { 1:'a', 2:"b" } ICP=[ 'ab' , 2 ] e='ab' e=ab 2 1 0 1 NDIM,IPS,IRS,ILP 1 1 NICP,(ICP(I),I=1,NICP) 50 4 3 1 1 0 0 0 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 100 0 0.15 0 100 NMX,RL0,RL1,A0,A1 100 10 2 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 0.0001 EPSL,EPSU,EPSS 0.01 0.005 0.05 1 DS,DSMIN,DSMAX,IADS 1 NTHL,((I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,((I,THU(I)),I=1,NTHU) 0 NUZR,((I,UZR(I)),I=1,NUZR) auto/07p/python/auto/test_data/plotter.log0000750000175000017500000000244413570013207016705 0ustar skskCopying demo ab ... done Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.123E-01 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 UZ 2 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.682E-02 ab ... done Created plot Created plot Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue Hit to continue auto/07p/python/auto/test_data/fullTest.log0000750000175000017500000004002013570013207017006 0ustar skskCopying demo wav ... done Runner configured c.wav c.wav.1 c.wav.2 c.wav.3 c.wav.4 c.wav.5 c.wav.6 clean.auto plaut04.rc wav.auto wav.f90 ALIASES DESCRIPTION append ap Append data files. cat Print the contents of a file cd Change directories. clean cl Clean the current directory. demo dm Copy a demo into the current directory and load it. copy cp Copy data files. copydemo Copy a demo into the current directory. save sv Save data files. gui Show AUTOs graphical user interface. delete dl Delete data files. df deletefort Clear the current directory of fort files. dlb Delete special labels. dsp Delete special points. double db Double a solution. man Get help on the AUTO commands. klb Keep special labels. ksp Keep special points. ls List the current directory. merge mb Merge branches in data files. move mv Move data-files to a new name. cn constantsget Get the current continuation constants. bt diagramandsolutionget Parse both bifurcation diagram and solution. dg diagramget Parse a bifurcation diagram. hcn Get the current HomCont continuation constants. loadbd bd Load bifurcation diagram files. sl solutionget Parse solution file: plot pl p2 Plotting of data. plot3 p3 3D plotting of data. branchpoint bp br Print the ``branch-point function''. eigenvalue ev eg Print eigenvalues of Jacobian (algebraic case). floquet fl Print the Floquet multipliers. hopf hp hb Print the value of the ``Hopf function''. iterations it Print the number of Newton interations. limitpoint lm lp Print the value of the ``limit point function''. note nt Print notes in info file. secondaryperiod sp sc Print value of ``secondary-periodic bif. fcn''. stepsize ss st Print continuation step sizes. quit q Quit the AUTO CLUI. relabel rl Relabel data files. run r rn Run AUTO. hch Modify HomCont continuation constants. ch changeconstant cc Modify continuation constants. load ld Load files into the AUTO runner or return modified solution data. hpr Print HomCont continuation parameters. pr printconstant pc Print continuation parameters. shell Run a shell command. splabs Return special labels subtract sb Subtract branches in data files. triple tr Triple a solution. us userdata Convert user-supplied data files. wait Wait for the user to enter a key. auto ex Execute an AUTO CLUI script. demofile dmf Execute an AUTO CLUI script, line by line (demo mode). Run AUTO. Type r=run([data],[options]) to run AUTO from solution data with the given AUTO constants or file keyword options. The results are stored in the bifurcation diagram r which you can later print with ``print r'', obtain branches from via r[0], r[1], ..., and obtain solutions from via r(3), r(5), r('LP2'), where 3 and 5 are label numbers, and 'LP2' refers to the second LP label. run(data) runs AUTO in the following way for different types of data: * A solution: AUTO starts from solution data, with AUTO constants data.c. * A bifurcation diagram: AUTO start from the solution specified by the AUTO constant IRS, or if IRS is not specified, the last solution in data, data()[-1], with AUTO constants data()[-1].c. * A string: AUTO uses the solution in the file 's.data' together with the constants in the files 'c.data', and 'h.data'. Not all of these files need to be present. If no solution data is specified, then the global values from the 'load' command are used instead, where options which are not explicitly set retain their previous value. Keyword argument options can be AUTO constants, such as DS=0.05, or ISW=-1, or specify a constant or solution file. These override the constants in s.c, where applicable. See ``load'': run(s,options) is equivalent to run(load(s,options)) Example: given a bifurcation diagram bd, with a branch point solution, switch branches and stop at the first Hopf bifurcation: hb = run(bd('BP1'),ISW=-1,STOP='HB1') Special keyword arguments are 'sv' and 'ap'; 'sv' is also an AUTO constant: run(bd('BP1'),ISW=-1,STOP='HB1',sv='hb',ap='all') saves to the files b.hb, s.hb and d.hb, and appends to b.all, s.all, and d.all. Command name: commandRun Aliases: run r rn NDIM= 2, IPS = 1, IRS = 0, ILP = 1 ICP = [3] NTST= 25, NCOL= 4, IAD = 3, ISP = 2, ISW = 1, IPLT= 0, NBC= 0, NINT= 0 NMX= 500, NPR= 500, MXBF= 10, IID = 2, ITMX= 8, ITNW= 5, NWTN= 3, JAC= 0 EPSL= 1e-06, EPSU = 1e-06, EPSS =0.0001 DS = 0.5, DSMIN= 0.1, DSMAX= 5.0, IADS= 1 NPAR = 16, THL = {11: 0.0}, THU = {} UZSTOP = {3: 800.0} Runner configured gfortran -fopenmp -O -c wav.f90 -o wav.o gfortran -fopenmp -O wav.o -o wav.exe /home/boldeman/auto/07p/lib/*.o Starting wav ... BR PT TY LAB PAR(3) L2-NORM U(1) U(2) U(3) U(4) 1 1 EP 1 5.00000E+02 1.08768E+02 6.27662E+01 8.88308E+01 0.00000E+00 0.00000E+00 1 47 LP 2 6.66144E+02 1.81841E+02 4.69085E+01 1.75687E+02 0.00000E+00 0.00000E+00 1 82 LP 3 6.30891E+02 7.49020E+01 3.23345E+01 6.75632E+01 0.00000E+00 0.00000E+00 1 87 HB 4 6.35591E+02 5.49735E+01 2.74121E+01 4.76515E+01 0.00000E+00 0.00000E+00 1 128 UZ 5 8.00000E+02 8.90054E+01 2.79228E+00 8.89616E+01 0.00000E+00 0.00000E+00 Total Time 0.358E-01 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PERIOD 4 26 UZ 6 6.38000E+02 5.85936E+01 3.41194E+01 6.66882E+01 5.23176E+00 7.67732E+00 2.00436E+01 4 71 UZ 7 6.38000E+02 5.12350E+01 4.32537E+01 6.10864E+01 1.56626E+01 1.44212E+01 1.13908E+01 4 129 UZ 8 6.10000E+02 9.35063E+01 5.67543E+01 1.20462E+02 1.60747E+01 2.40970E+01 1.49753E+01 4 263 UZ 9 6.04728E+02 1.62520E+02 5.59844E+01 1.54751E+02 1.54409E+01 2.47128E+01 5.00000E+02 Total Time 0.353E+00 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Starting wav ... BR PT TY LAB PAR(3) L2-NORM MAX U(1) MAX U(2) MAX U(3) MAX U(4) PAR(10) 4 50 10 6.34892E+02 6.77805E+01 4.88929E+01 8.92232E+01 1.98335E+01 2.26742E+01 3.31358E-01 4 100 11 6.38185E+02 6.14781E+01 4.47694E+01 7.71809E+01 7.78450E+00 9.26606E+00 -2.81251E-01 4 150 12 6.12152E+02 9.22702E+01 5.65260E+01 1.19617E+02 1.20552E+01 2.13923E+01 -1.66112E-01 4 200 13 6.31049E+02 7.39751E+01 5.17091E+01 9.91385E+01 2.10409E+01 2.47877E+01 3.52721E-01 4 250 14 6.40501E+02 5.60921E+01 3.94812E+01 6.50292E+01 6.87739E+00 9.43887E+00 -1.91003E-01 4 300 15 6.11584E+02 9.26076E+01 5.65906E+01 1.19830E+02 1.24223E+01 2.16750E+01 -1.45810E-01 4 350 16 6.00114E+02 1.23905E+02 5.64705E+01 1.36094E+02 1.04821E+01 1.37840E+01 -1.91736E-10 4 400 17 6.62431E+02 1.71195E+02 4.75911E+01 1.69640E+02 9.67626E-01 2.02388E+00 -3.40245E-13 4 450 18 5.91166E+02 1.17394E+02 5.72885E+01 1.30143E+02 1.25078E+01 1.54996E+01 -3.51009E-10 4 500 EP 19 6.10594E+02 8.30905E+01 5.37594E+01 9.86320E+01 1.34789E+01 1.51711E+01 -4.95168E-09 Total Time 0.721E+00 wav ... done Appending fort.7 to b.wav ... done Appending fort.8 to s.wav ... done Appending fort.9 to d.wav ... done Copying demo cir ... done Runner configured Starting conversion of cir.dat : (Required files : cir.f90, c.cir, cir.dat) Finished running: ./fcon Conversion done : converted file saved as s.dat Runner configured gfortran -fopenmp -O cir.o -o cir.exe /home/boldeman/auto/07p/lib/*.o Starting cir ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 1 EP 1 3.61300E+01 2.14038E-01 4.23177E-01 5.80472E-02 3.32867E-01 -7.21309E-01 1 21 UZ 2 1.00000E+02 1.28664E-01 4.22987E-01 5.80615E-02 3.32856E-01 -7.21309E-01 1 42 UZ 3 2.00000E+02 9.09790E-02 4.23250E-01 5.79918E-02 3.32895E-01 -7.21309E-01 1 50 EP 4 2.40000E+02 8.30521E-02 4.22889E-01 5.79887E-02 3.32695E-01 -7.21309E-01 Total Time 0.151E+00 cir ... done Starting cir ... BR PT TY LAB PERIOD L2-NORM MAX U(1) MAX U(2) MAX U(3) PAR(1) 1 1 EP 1 3.61300E+01 2.14038E-01 4.23177E-01 5.80472E-02 3.32867E-01 -7.21309E-01 1 21 UZ 2 1.00000E+02 1.28664E-01 4.22987E-01 5.80615E-02 3.32856E-01 -7.21309E-01 1 42 UZ 3 2.00000E+02 9.09790E-02 4.23250E-01 5.79918E-02 3.32895E-01 -7.21309E-01 1 50 EP 4 2.40000E+02 8.30521E-02 4.22889E-01 5.79887E-02 3.32695E-01 -7.21309E-01 Total Time 0.150E+00 cir ... done Saving fort.7 as b.cir ... done Saving fort.8 as s.cir ... done Saving fort.9 as d.cir ... done 1 2 Next Step : 1.50000E+00 1 3 Next Step : 1.65000E+00 1 4 Next Step : 1.81500E+00 1 5 Next Step : 1.99650E+00 1 6 Next Step : 2.19615E+00 1 7 Next Step : 2.41577E+00 1 8 Next Step : 2.65734E+00 1 9 Next Step : 2.92308E+00 1 10 Next Step : 3.21538E+00 1 11 Next Step : 3.53692E+00 1 12 Next Step : 3.89061E+00 1 13 Next Step : 4.27968E+00 1 14 Next Step : 4.70764E+00 1 15 Next Step : 5.00000E+00 1 16 Next Step : 5.00000E+00 1 17 Next Step : 5.00000E+00 1 18 Next Step : 5.00000E+00 1 19 Next Step : 5.00000E+00 1 20 Next Step : 5.00000E+00 ==> Location of special point : Convergence. Step size = 3.85683E-07 1 21 Next Step : 5.00000E+00 1 22 Next Step : 5.00000E+00 1 23 Next Step : 5.00000E+00 1 24 Next Step : 5.00000E+00 1 25 Next Step : 5.00000E+00 1 26 Next Step : 5.00000E+00 1 27 Next Step : 5.00000E+00 1 28 Next Step : 5.00000E+00 1 29 Next Step : 5.00000E+00 1 30 Next Step : 5.00000E+00 1 31 Next Step : 5.00000E+00 1 32 Next Step : 5.00000E+00 1 33 Next Step : 5.00000E+00 1 34 Next Step : 5.00000E+00 1 35 Next Step : 5.00000E+00 1 36 Next Step : 5.00000E+00 1 37 Next Step : 5.00000E+00 1 38 Next Step : 5.00000E+00 1 39 Next Step : 5.00000E+00 1 40 Next Step : 5.00000E+00 1 41 Next Step : 5.00000E+00 ==> Location of special point : Convergence. Step size = 4.98084E-07 1 42 Next Step : 5.00000E+00 1 43 Next Step : 5.00000E+00 1 44 Next Step : 5.00000E+00 1 45 Next Step : 5.00000E+00 1 46 Next Step : 5.00000E+00 1 47 Next Step : 5.00000E+00 1 48 Next Step : 5.00000E+00 1 49 Next Step : 5.00000E+00 1 2 Iterations : 2 1 3 Iterations : 3 1 4 Iterations : 3 1 5 Iterations : 3 1 6 Iterations : 3 1 7 Iterations : 3 1 8 Iterations : 3 1 9 Iterations : 3 1 10 Iterations : 3 1 11 Iterations : 3 1 12 Iterations : 3 1 13 Iterations : 3 1 14 Iterations : 3 1 15 Iterations : 3 1 16 Iterations : 3 1 17 Iterations : 3 1 18 Iterations : 3 1 19 Iterations : 3 1 20 Iterations : 3 1 21 Iterations : 2 1 22 Iterations : 2 1 23 Iterations : 3 1 24 Iterations : 3 1 25 Iterations : 3 1 26 Iterations : 3 1 27 Iterations : 3 1 28 Iterations : 3 1 29 Iterations : 3 1 30 Iterations : 3 1 31 Iterations : 3 1 32 Iterations : 3 1 33 Iterations : 3 1 34 Iterations : 3 1 35 Iterations : 3 1 36 Iterations : 3 1 37 Iterations : 3 1 38 Iterations : 3 1 39 Iterations : 3 1 40 Iterations : 3 1 41 Iterations : 3 1 42 Iterations : 2 1 43 Iterations : 2 1 44 Iterations : 3 1 45 Iterations : 3 1 46 Iterations : 2 1 47 Iterations : 2 1 48 Iterations : 2 1 49 Iterations : 2 Deleting fort.* *.o *.exe *.*~ ... done Copying demo ab ... done Runner configured Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.133E-01 ab ... done RL1 changed to 0.4 Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.484E-02 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Appending fort.7 to b.ab ... done Appending fort.8 to s.ab ... done Appending fort.9 to d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 14 UZ 2 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.631E-02 ab ... done Copying b.ab to b.double ... done Copying s.ab to s.double ... done Copying d.ab to d.double ... done Copying c.ab to c.double ... done Finished running: /home/boldeman/auto/07p/bin/double Solution doubling done. Renaming b.double as b.triple ... done Renaming s.double as s.triple ... done Renaming d.double as d.triple ... done Copying c.double to c.triple ... done Finished running: /home/boldeman/auto/07p/bin/triple Solution tripling done. Parsed file: fort.8 Parsed file: fort.7 Parsed files: fort.7 and fort.8 auto/07p/python/auto/test_data/fort.70000750000175000017500000003325313570013207015555 0ustar sksk 0 0.0000E+00 1.5000E-01 0.0000E+00 1.0000E+02 0 EPSL= 1.0000E-06 EPSU = 1.0000E-06 EPSS = 1.0000E-04 0 DS = 1.0000E-02 DSMIN= 5.0000E-03 DSMAX= 5.0000E-01 0 NDIM= 2 IPS = 2 IRS = 4 ILP = 0 0 NTST= 50 NCOL= 4 IAD = 3 ISP = 1 0 ISW = 1 IPLT= 0 NBC = 2 NINT= 1 0 NMX= 150 NPR = 30 MXBF= 10 IID = 2 0 ITMX= 8 ITNW= 5 NWTN= 3 JAC= 0 NUZR= 0 0 User-specified parameters: 1 11 0 Active continuation parameters: 1 11 0 0 PT TY LAB PAR(1) L2-NORM MAX(1) MAX(2) PERIOD -4 1 0 0 1.308998E-01 4.271867E+00 8.950803E-01 4.177042E+00 1.567753E+00 -4 -2 0 0 1.308985E-01 4.271850E+00 8.962968E-01 4.191176E+00 1.567805E+00 -4 -3 0 0 1.308901E-01 4.271752E+00 8.981083E-01 4.212539E+00 1.568100E+00 -4 -4 0 0 1.308642E-01 4.271448E+00 9.007960E-01 4.244977E+00 1.569016E+00 -4 -5 0 0 1.307954E-01 4.270638E+00 9.047634E-01 4.294498E+00 1.571461E+00 -4 -6 0 0 1.306255E-01 4.268625E+00 9.105752E-01 4.370910E+00 1.577566E+00 -4 -7 0 0 1.303779E-01 4.265655E+00 9.162137E-01 4.449959E+00 1.586641E+00 -4 -8 0 0 1.300563E-01 4.261731E+00 9.216774E-01 4.531609E+00 1.598753E+00 -4 -9 0 0 1.296658E-01 4.256860E+00 9.269648E-01 4.616093E+00 1.613986E+00 -4 -10 0 0 1.292126E-01 4.251052E+00 9.320735E-01 4.703431E+00 1.632444E+00 -4 -11 0 0 1.287043E-01 4.244322E+00 9.370040E-01 4.793739E+00 1.654236E+00 -4 -12 0 0 1.281496E-01 4.236691E+00 9.417461E-01 4.887010E+00 1.679480E+00 -4 -13 0 0 1.275582E-01 4.228190E+00 9.463063E-01 4.983475E+00 1.708284E+00 -4 -14 0 0 1.269410E-01 4.218857E+00 9.506749E-01 5.083034E+00 1.740746E+00 -4 -15 0 0 1.263093E-01 4.208738E+00 9.548400E-01 5.185749E+00 1.776935E+00 -4 -16 0 0 1.256748E-01 4.197889E+00 9.588042E-01 5.291643E+00 1.816881E+00 -4 -17 0 0 1.250488E-01 4.186368E+00 9.625596E-01 5.400478E+00 1.860570E+00 -4 -18 0 0 1.244417E-01 4.174235E+00 9.660911E-01 5.512420E+00 1.907936E+00 -4 -19 0 0 1.238623E-01 4.161543E+00 9.694122E-01 5.627110E+00 1.958867E+00 -4 -20 0 0 1.233174E-01 4.148335E+00 9.724999E-01 5.744413E+00 2.013215E+00 -4 -21 0 0 1.228113E-01 4.134638E+00 9.753683E-01 5.864320E+00 2.070817E+00 -4 -22 0 0 1.223459E-01 4.120464E+00 9.780110E-01 5.986459E+00 2.131521E+00 -4 -23 0 0 1.219213E-01 4.105805E+00 9.804288E-01 6.110604E+00 2.195199E+00 -4 -24 0 0 1.215356E-01 4.090640E+00 9.826324E-01 6.236666E+00 2.261762E+00 -4 -25 0 0 1.211864E-01 4.074938E+00 9.846314E-01 6.364501E+00 2.331163E+00 -4 -26 0 0 1.208706E-01 4.058666E+00 9.864289E-01 6.493663E+00 2.403390E+00 -4 -27 0 0 1.205851E-01 4.041784E+00 9.880435E-01 6.624075E+00 2.478456E+00 -4 -28 0 0 1.203269E-01 4.024257E+00 9.894904E-01 6.755402E+00 2.556393E+00 -4 -29 0 0 1.200932E-01 4.006050E+00 9.907749E-01 6.887629E+00 2.637240E+00 -4 -30 4 6 1.198815E-01 3.987129E+00 9.919113E-01 7.020342E+00 2.721044E+00 -4 -31 0 0 1.196893E-01 3.967467E+00 9.929129E-01 7.153253E+00 2.807848E+00 -4 -32 0 0 1.195147E-01 3.947037E+00 9.937953E-01 7.286296E+00 2.897697E+00 -4 -33 0 0 1.193555E-01 3.925820E+00 9.945697E-01 7.418992E+00 2.990628E+00 -4 -34 0 0 1.192101E-01 3.903799E+00 9.952461E-01 7.551135E+00 3.086673E+00 -4 -35 0 0 1.190768E-01 3.880963E+00 9.958353E-01 7.682456E+00 3.185854E+00 -4 -36 0 0 1.189541E-01 3.857307E+00 9.963495E-01 7.812346E+00 3.288182E+00 -4 -37 0 0 1.188407E-01 3.832832E+00 9.967965E-01 7.941267E+00 3.393656E+00 -4 -38 0 0 1.187353E-01 3.807546E+00 9.971835E-01 8.068141E+00 3.502259E+00 -4 -39 0 0 1.186366E-01 3.781463E+00 9.975185E-01 8.193047E+00 3.613955E+00 -4 -40 0 0 1.185436E-01 3.754603E+00 9.978096E-01 8.315645E+00 3.728687E+00 -4 -41 0 0 1.184552E-01 3.726996E+00 9.980612E-01 8.435662E+00 3.846374E+00 -4 -42 0 0 1.183705E-01 3.698676E+00 9.982789E-01 8.552965E+00 3.966903E+00 -4 -43 0 0 1.182883E-01 3.669688E+00 9.984673E-01 8.667049E+00 4.090126E+00 -4 -44 0 0 1.182076E-01 3.640080E+00 9.986307E-01 8.777955E+00 4.215854E+00 -4 -45 0 0 1.181275E-01 3.609914E+00 9.987721E-01 8.885717E+00 4.343842E+00 -4 -46 0 0 1.180467E-01 3.579255E+00 9.988953E-01 8.989777E+00 4.473785E+00 -4 -47 0 0 1.179638E-01 3.548179E+00 9.990025E-01 9.089926E+00 4.605298E+00 -4 -48 0 0 1.178774E-01 3.516774E+00 9.990953E-01 9.186550E+00 4.737902E+00 -4 -49 0 0 1.177857E-01 3.485133E+00 9.991761E-01 9.279132E+00 4.871006E+00 -4 -50 0 0 1.176863E-01 3.453363E+00 9.992464E-01 9.367495E+00 5.003891E+00 -4 -51 0 0 1.175765E-01 3.421579E+00 9.993078E-01 9.451749E+00 5.135696E+00 -4 -52 0 0 1.174526E-01 3.389901E+00 9.993607E-01 9.531437E+00 5.265428E+00 -4 -53 0 0 1.173103E-01 3.358449E+00 9.994068E-01 9.606350E+00 5.392000E+00 -4 -54 0 0 1.171440E-01 3.327325E+00 9.994470E-01 9.676100E+00 5.514327E+00 -4 -55 0 0 1.169474E-01 3.296597E+00 9.994810E-01 9.740217E+00 5.631496E+00 -4 -56 0 0 1.167134E-01 3.266268E+00 9.995098E-01 9.798195E+00 5.743011E+00 -4 -57 0 0 1.164355E-01 3.236260E+00 9.995334E-01 9.849278E+00 5.849039E+00 -4 -58 0 0 1.161085E-01 3.206410E+00 9.995503E-01 9.893202E+00 5.950560E+00 -4 -59 0 0 1.157305E-01 3.176499E+00 9.995663E-01 9.929308E+00 6.049303E+00 -4 -60 4 7 1.153033E-01 3.146307E+00 9.995775E-01 9.957649E+00 6.147449E+00 -4 -61 0 0 1.148327E-01 3.115663E+00 9.995750E-01 9.978380E+00 6.247250E+00 -4 -62 0 0 1.143273E-01 3.084469E+00 9.995780E-01 9.991527E+00 6.350702E+00 -4 -63 0 0 1.137975E-01 3.052707E+00 9.995764E-01 9.997967E+00 6.459397E+00 -4 -64 0 0 1.132535E-01 3.020413E+00 9.995797E-01 9.998760E+00 6.574510E+00 -4 -65 0 0 1.127048E-01 2.987658E+00 9.995857E-01 9.993234E+00 6.696891E+00 -4 -66 0 0 1.121593E-01 2.954530E+00 9.995970E-01 9.983584E+00 6.827156E+00 -4 -67 0 0 1.116238E-01 2.921122E+00 9.997424E-01 9.964303E+00 6.965790E+00 -4 -68 0 0 1.111034E-01 2.887523E+00 9.998238E-01 9.939251E+00 7.113222E+00 -4 -69 0 0 1.106020E-01 2.853820E+00 9.999558E-01 9.921266E+00 7.269845E+00 -4 -70 0 0 1.101228E-01 2.820091E+00 9.995322E-01 9.905802E+00 7.436089E+00 -4 -71 0 0 1.096677E-01 2.786406E+00 9.995178E-01 9.878580E+00 7.612411E+00 -4 -72 0 0 1.092385E-01 2.752836E+00 9.995011E-01 9.851344E+00 7.799305E+00 -4 -73 0 0 1.088358E-01 2.719440E+00 9.994858E-01 9.821238E+00 7.997338E+00 -4 -74 0 0 1.084604E-01 2.686275E+00 9.994678E-01 9.790363E+00 8.207138E+00 -4 -75 0 0 1.081122E-01 2.653394E+00 9.994474E-01 9.758828E+00 8.429402E+00 -4 -76 0 0 1.077912E-01 2.620846E+00 9.994209E-01 9.726365E+00 8.664900E+00 -4 -77 0 0 1.074970E-01 2.588676E+00 9.994272E-01 9.693884E+00 8.914473E+00 -4 -78 0 0 1.072289E-01 2.556928E+00 9.994585E-01 9.661442E+00 9.179046E+00 -4 -79 0 0 1.069862E-01 2.525637E+00 9.993604E-01 9.629582E+00 9.459677E+00 -4 -80 0 0 1.067679E-01 2.494844E+00 9.993487E-01 9.597001E+00 9.757409E+00 -4 -81 0 0 1.065730E-01 2.464579E+00 9.993426E-01 9.568117E+00 1.007346E+01 -4 -82 0 0 1.064003E-01 2.434870E+00 9.992946E-01 9.538749E+00 1.040914E+01 -4 -83 0 0 1.062485E-01 2.405741E+00 9.992704E-01 9.511269E+00 1.076586E+01 -4 -84 0 0 1.061162E-01 2.377214E+00 9.992532E-01 9.483359E+00 1.114514E+01 -4 -85 0 0 1.060020E-01 2.349301E+00 9.992355E-01 9.460352E+00 1.154863E+01 -4 -86 0 0 1.059044E-01 2.322016E+00 9.992134E-01 9.437646E+00 1.197812E+01 -4 -87 0 0 1.058220E-01 2.295362E+00 9.991964E-01 9.415902E+00 1.243556E+01 -4 -88 0 0 1.057531E-01 2.269341E+00 9.991873E-01 9.397410E+00 1.292307E+01 -4 -89 0 0 1.056964E-01 2.243950E+00 9.991756E-01 9.381226E+00 1.344294E+01 -4 -90 4 8 1.056503E-01 2.219179E+00 9.991660E-01 9.366075E+00 1.399772E+01 -4 -91 0 0 1.056135E-01 2.195018E+00 9.991447E-01 9.353216E+00 1.459018E+01 -4 -92 0 0 1.055845E-01 2.171450E+00 9.991342E-01 9.340508E+00 1.522340E+01 -4 -93 0 0 1.055622E-01 2.148457E+00 9.991240E-01 9.332880E+00 1.590079E+01 -4 -94 0 0 1.055454E-01 2.126021E+00 9.991184E-01 9.324507E+00 1.662615E+01 -4 -95 0 0 1.055330E-01 2.104118E+00 9.991115E-01 9.318820E+00 1.740374E+01 -4 -96 0 0 1.055240E-01 2.082729E+00 9.991048E-01 9.313272E+00 1.823834E+01 -4 -97 0 0 1.055178E-01 2.061831E+00 9.991056E-01 9.309804E+00 1.913538E+01 -4 -98 0 0 1.055136E-01 2.041404E+00 9.991022E-01 9.306336E+00 2.010097E+01 -4 -99 0 0 1.055109E-01 2.021428E+00 9.990987E-01 9.303606E+00 2.114207E+01 -4 -100 0 0 1.055092E-01 2.001887E+00 9.990987E-01 9.302727E+00 2.226661E+01 -4 -101 0 0 1.055082E-01 1.982763E+00 9.991105E-01 9.300470E+00 2.348365E+01 -4 -102 0 0 1.055076E-01 1.964044E+00 9.991300E-01 9.300676E+00 2.480356E+01 -4 -103 0 0 1.055073E-01 1.945720E+00 9.990856E-01 9.299353E+00 2.623828E+01 -4 -104 0 0 1.055072E-01 1.927784E+00 9.990795E-01 9.301276E+00 2.780151E+01 -4 -105 0 0 1.055071E-01 1.910232E+00 9.990726E-01 9.302058E+00 2.950912E+01 -4 -106 0 0 1.055071E-01 1.893064E+00 9.990968E-01 9.298481E+00 3.137953E+01 -4 -107 0 0 1.055071E-01 1.876281E+00 9.990971E-01 9.299480E+00 3.343421E+01 -4 -108 0 0 1.055071E-01 1.859888E+00 9.990973E-01 9.298104E+00 3.569828E+01 -4 -109 0 0 1.055071E-01 1.843892E+00 9.990928E-01 9.299155E+00 3.820134E+01 -4 -110 0 0 1.055071E-01 1.828300E+00 9.990911E-01 9.298649E+00 4.097837E+01 -4 -111 0 0 1.055071E-01 1.813123E+00 9.990867E-01 9.299098E+00 4.407110E+01 -4 -112 0 0 1.055071E-01 1.798369E+00 9.990895E-01 9.295799E+00 4.752950E+01 -4 113 0 0 1.055071E-01 1.784050E+00 9.990830E-01 9.299142E+00 5.141392E+01 -4 114 0 0 1.055071E-01 1.770175E+00 9.990719E-01 9.301251E+00 5.579774E+01 -4 115 0 0 1.055071E-01 1.756756E+00 9.991266E-01 9.299298E+00 6.077094E+01 -4 116 0 0 1.055071E-01 1.743801E+00 9.991810E-01 9.298773E+00 6.644502E+01 -4 117 0 0 1.055071E-01 1.731323E+00 9.993140E-01 9.299234E+00 7.295908E+01 -4 118 0 0 1.055071E-01 1.719331E+00 9.991173E-01 9.306946E+00 8.048944E+01 -4 119 0 0 1.055071E-01 1.707833E+00 9.992260E-01 9.310329E+00 8.926257E+01 -4 120 4 9 1.055071E-01 1.696847E+00 9.994304E-01 9.304122E+00 9.956352E+01 -4 121 0 0 1.055071E-01 1.686375E+00 9.990944E-01 9.298362E+00 1.117808E+02 -4 122 0 0 1.055071E-01 1.676429E+00 9.990950E-01 9.299439E+00 1.264287E+02 -4 123 0 0 1.055071E-01 1.667017E+00 9.990950E-01 9.300114E+00 1.442055E+02 -4 124 0 0 1.055071E-01 1.658151E+00 9.990998E-01 9.298835E+00 1.660883E+02 -4 125 0 0 1.055071E-01 1.649836E+00 9.991081E-01 9.298984E+00 1.934755E+02 -4 126 0 0 1.055071E-01 1.642081E+00 9.991401E-01 9.299691E+00 2.284324E+02 -4 127 0 0 1.055071E-01 1.638479E+00 9.990811E-01 9.297078E+00 2.492920E+02 -4 128 0 0 1.055071E-01 1.635059E+00 9.990568E-01 9.298180E+00 2.728926E+02 -4 129 0 0 1.055071E-01 1.631784E+00 9.990288E-01 9.296345E+00 3.000362E+02 -4 130 0 0 1.055071E-01 1.628654E+00 9.990890E-01 9.299203E+00 3.314803E+02 -4 131 0 0 1.055071E-01 1.625671E+00 9.991613E-01 9.298749E+00 3.681921E+02 -4 132 0 0 1.055071E-01 1.622836E+00 9.993798E-01 9.297252E+00 4.114317E+02 -4 133 0 0 1.055071E-01 1.620149E+00 1.000145E+00 9.317090E+00 4.628591E+02 -4 134 0 0 1.055071E-01 1.617610E+00 1.001333E+00 9.339434E+00 5.247076E+02 -4 135 0 0 1.055071E-01 1.615224E+00 1.002451E+00 9.347228E+00 5.999608E+02 -4 136 0 0 1.055071E-01 1.612981E+00 9.990841E-01 9.299885E+00 6.932936E+02 -4 137 0 0 1.055071E-01 1.611931E+00 9.990779E-01 9.299841E+00 7.476756E+02 -4 138 0 0 1.055071E-01 1.610928E+00 9.990730E-01 9.294310E+00 8.082267E+02 -4 139 0 0 1.055071E-01 1.609963E+00 9.990951E-01 9.299371E+00 8.764847E+02 -4 140 0 0 1.055071E-01 1.609035E+00 9.990953E-01 9.299069E+00 9.538276E+02 -4 141 0 0 1.055071E-01 1.608146E+00 9.990945E-01 9.298059E+00 1.041954E+03 -4 142 0 0 1.055071E-01 1.607295E+00 9.990947E-01 9.297547E+00 1.142983E+03 -4 143 0 0 1.055071E-01 1.606481E+00 9.990900E-01 9.299707E+00 1.259593E+03 -4 144 0 0 1.055071E-01 1.605706E+00 9.990736E-01 9.296695E+00 1.395176E+03 -4 145 0 0 1.055071E-01 1.604971E+00 9.990690E-01 9.298093E+00 1.554123E+03 -4 146 0 0 1.055071E-01 1.604271E+00 9.990280E-01 9.297308E+00 1.742226E+03 -4 147 0 0 1.055071E-01 1.603610E+00 9.990033E-01 9.300502E+00 1.967152E+03 -4 148 0 0 1.055071E-01 1.602990E+00 9.996279E-01 9.287778E+00 2.239375E+03 -4 149 0 0 1.055071E-01 1.602404E+00 1.002081E+00 9.179351E+00 2.573464E+03 -4 150 9 10 1.055071E-01 1.601857E+00 1.005170E+00 9.075526E+00 2.989833E+03 auto/07p/python/auto/test_data/runDemo.err0000750000175000017500000000003413570013207016625 0ustar sksk===ab start=== ===ab end=== auto/07p/python/auto/test_data/tutorial.log0000750000175000017500000001602013570013207017052 0ustar skskCopying demo ab ... done Runner configured ***Generate starting data*** gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.125E-01 ab ... done ***Compute stationary solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 14 UZ 7 2.50000E-01 7.22011E-01 3.22893E-01 6.45786E-01 Total Time 0.640E-02 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.134E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.46882E-01 1.44760E+00 3.72992E-01 1.39872E+00 1 67 UZ 8 2.50000E-01 3.35710E+00 8.65000E-01 3.24375E+00 Total Time 0.144E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.32538E-01 1.42450E+00 3.45491E-01 1.38197E+00 1 74 UZ 8 2.50000E-01 3.72020E+00 9.02281E-01 3.60912E+00 Total Time 0.165E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 27 HB 7 1.20866E-01 1.40614E+00 3.22062E-01 1.36877E+00 1 32 LP 8 1.21901E-01 1.65357E+00 3.78732E-01 1.60961E+00 1 54 LP 9 1.17015E-01 2.71249E+00 6.21268E-01 2.64039E+00 1 80 HB 10 2.17079E-01 3.98722E+00 9.13231E-01 3.88123E+00 1 82 UZ 11 2.49999E-01 4.05225E+00 9.28125E-01 3.94453E+00 Total Time 0.181E-01 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 26 HB 7 1.11153E-01 1.39119E+00 3.01792E-01 1.35806E+00 1 29 LP 8 1.11565E-01 1.53659E+00 3.33333E-01 1.50000E+00 1 60 LP 9 9.95741E-02 3.07318E+00 6.66667E-01 3.00000E+00 1 84 HB 10 1.83833E-01 4.24297E+00 9.20430E-01 4.14194E+00 1 87 UZ 11 2.50000E-01 4.36311E+00 9.46491E-01 4.25921E+00 Total Time 0.188E-01 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Compute periodic solution families*** Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 2 161 UZ 18 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.295E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 222 UZ 18 2.50000E-01 3.37532E+00 9.87350E-01 5.87488E+00 1.72637E+00 Total Time 0.399E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 6 309 UZ 18 2.50000E-01 3.72137E+00 9.36686E-01 4.12902E+00 1.23162E+00 Total Time 0.551E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 8 116 UZ 18 1.20102E-01 2.07774E+00 4.77420E-01 2.02903E+00 9.99882E+02 Total Time 0.218E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 11 349 UZ 18 1.19455E-01 2.17761E+00 9.99221E-01 9.34036E+00 9.99989E+02 Total Time 0.727E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 13 67 UZ 18 1.10829E-01 1.75170E+00 3.80862E-01 1.71388E+00 9.99998E+02 Total Time 0.133E+00 ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 16 205 MX 18 1.13210E-01 2.84764E+00 1.00476E+00 1.26297E+01 6.14785E+00 Total Time 0.390E+00 ab ... done ***Relabel and save the output files*** Relabeling done Saving to b.ab, s.ab, and d.ab ... done ***Clean the directory*** Deleting fort.* *.o *.exe *.*~ ... done ***Clean the directory*** Deleting b.ab ... done Deleting s.ab ... done Deleting d.ab ... done Deleting fort.* *.o *.exe *.*~ ... done Runner configured gfortran -fopenmp -O -c ab.f90 -o ab.o gfortran -fopenmp -O ab.o -o ab.exe /home/boldeman/auto/07p/lib/*.o Starting ab ... BR PT TY LAB PAR(2) L2-NORM U(1) U(2) 1 1 EP 1 8.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 31 UZ 2 1.40000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 36 UZ 3 1.50000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 41 UZ 4 1.60000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 46 UZ 5 1.70000E+01 0.00000E+00 0.00000E+00 0.00000E+00 1 51 UZ 6 1.80000E+01 0.00000E+00 0.00000E+00 0.00000E+00 Total Time 0.125E-01 ab ... done Saving fort.7 as b.ab ... done Saving fort.8 as s.ab ... done Saving fort.9 as d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 28 HB 7 1.65042E-01 1.47770E+00 4.05955E-01 1.42084E+00 1 58 UZ 8 2.50000E-01 2.94686E+00 8.09564E-01 2.83347E+00 Total Time 0.130E-01 ab ... done Appending fort.7 to b.ab ... done Appending fort.8 to s.ab ... done Appending fort.9 to d.ab ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.292E+00 ab ... done Saving fort.7 as b.2p ... done Saving fort.8 as s.2p ... done Saving fort.9 as d.2p ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95388E-01 6.87999E+00 2.22034E+00 Total Time 0.292E+00 ab ... done Appending fort.7 to b.2p ... done Appending fort.8 to s.2p ... done Appending fort.9 to d.2p ... done Starting ab ... BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 7 161 UZ 9 2.50000E-01 3.02968E+00 9.95387E-01 6.87995E+00 2.22034E+00 Total Time 0.291E+00 ab ... done Appending fort.7 to b.2p ... done Appending fort.8 to s.2p ... done Appending fort.9 to d.2p ... done auto/07p/python/auto/test_data/runDemo.log0000750000175000017500000000447613570013207016634 0ustar skskf77 -O -c -o ab.o ab.f f77 -O ab.o -o ab.exe /home/boldeman/auto/07p/../97/lib/*.o Cleaning ab ... Cleaning ... done f77 -O -c -o ab.o ab.f f77 -O ab.o -o ab.exe /home/boldeman/auto/07p/../97/lib/*.o Demo ab is started ab : first run : stationary solutions BR PT TY LAB PAR(1) L2-NORM U(1) U(2) 1 1 EP 1 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 1 33 LP 2 1.05739E-01 1.48439E+00 3.11023E-01 1.45144E+00 1 70 LP 3 8.89318E-02 3.28824E+00 6.88982E-01 3.21525E+00 1 90 HB 4 1.30900E-01 4.27187E+00 8.95080E-01 4.17704E+00 1 92 EP 5 1.51241E-01 4.36975E+00 9.15589E-01 4.27275E+00 Total Time 0.162E-01 Saved as *.ab ab : second run : periodic solutions BR PT TY LAB PAR(1) L2-NORM MAX U(1) MAX U(2) PERIOD 4 30 6 1.19881E-01 3.98713E+00 9.91911E-01 7.02034E+00 2.72104E+00 4 60 7 1.15303E-01 3.14631E+00 9.99578E-01 9.95760E+00 6.14745E+00 4 90 8 1.05650E-01 2.21919E+00 9.99154E-01 9.36586E+00 1.39976E+01 4 120 9 1.05507E-01 1.69685E+00 9.99085E-01 9.29739E+00 9.95601E+01 4 150 EP 10 1.05507E-01 1.60084E+00 9.99082E-01 9.29066E+00 4.28596E+03 Total Time 0.289E+00 Appended to *.ab ab : third run : a 2-parameter locus of folds BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 27 LP 11 1.35335E-01 2.06196E+00 5.00099E-01 2.00040E+00 2.50000E+00 2 100 EP 12 1.09191E-08 2.13669E+01 9.53152E-01 2.13456E+01 -3.74854E-01 Total Time 0.199E-01 Saved as *.2p ab : fourth run : the locus of folds in reverse direction BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 2 35 EP 11 -8.67603E-05 9.99764E-01 -2.35839E-04 9.99764E-01 -1.00330E+00 Total Time 0.805E-02 Appended to *.2p ab : fifth run : a 2-parameter locus of Hopf points BR PT TY LAB PAR(1) L2-NORM U(1) U(2) PAR(3) 4 100 EP 11 1.65104E-06 1.57404E+01 9.16793E-01 1.57137E+01 -1.83188E-01 Total Time 0.220E-01 Appended to *.2p Demo ab is done Cleaning ab ... Cleaning ... done auto/07p/python/auto/test_data/h.cir0000750000175000017500000000027613570013207015440 0ustar sksk1 2 0 0 1 NUNSTAB,NSTAB,IEQUIB,ITWIST,ISTART 0 NREV,/,IREV(I),I=1,NDIM) 0 NFIXED,(/,I,IFIXED(I)),I=1,NFIXED) 0 NPSI,(/,I,IPSI(I)),I=1,NPSI) auto/07p/python/auto/relabel.py0000750000175000017500000000366513570013207014527 0ustar sksk#!/usr/bin/env autox #====================================================================== #====================================================================== # Utility Program for Relabeling Labeled Solutions # in AUTO Data Files #====================================================================== #====================================================================== from auto import bifDiag import sys def relabel(n1b,n1s,n2b,n2s): bd = bifDiag.bifDiag(n1b,n1s) labels = bd().getLabels() l = 0 for lab in bd.getLabels(): lnum = 1 if l > len(labels) or lab != labels[l]: k = 0 for br in bd: lnum = lnum + len(br.headerlist) k = k + len(br.getLabels()) if k > l: break lnum = lnum + len(br) lnum = lnum + br(lab)["index"] sys.stdout.write("%s\n%s%d%s%d\n%s%d\n%s\n%s"%( " WARNING : The two files have incompatible labels :", " b-file label ", lab, " at line ", lnum, " s-file label ", labels[l], " New labels may be assigned incorrectly.", " Continue ? : ")) ch = raw_input() if ch != 'y' and ch != 'Y': print("Rewrite discontinued. Recovering original files") import os try: os.remove(n2b) os.remove(n2s) except: pass return l = l + 1 bd.uniquelyLabel() bd.writeFilename(n2b,n2s) if __name__ == '__main__': if len(sys.argv) == 5: inb = sys.argv[1] ins = sys.argv[2] outb = sys.argv[3] outs = sys.argv[4] else: inb = "fort.27" ins = "fort.28" outb = "fort.37" outs = "fort.38" relabel(inb,ins,outb,outs) auto/07p/python/auto/parseB.py0000750000175000017500000014304313570013207014330 0ustar sksk#! /usr/bin/env python # Visualization for Bifurcation Manifolds # Copyright (C) 1997 Randy Paffenroth and John Maddocks # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA import os import sys from auto import AUTOExceptions from auto import AUTOutil from auto.AUTOutil import format19_10E3 try: from UserList import UserList except ImportError: # Python 3 from collections import UserList from auto import Points try: next except NameError: #Python < 3 def next(it): return it.next() type_translation_dict = { 0: {"long name" : "No Label","short name" : "No Label"}, 1: {"long name" : "Branch point (algebraic problem)","short name" : "BP"}, -2: {"long name" : "Cusp (algebraic problem)","short name" : "CP"}, 2: {"long name" : "Fold (algebraic problem)","short name" : "LP"}, 3: {"long name" : "Hopf bifurcation (algebraic problem)","short name" : "HB"}, -3: {"long name" : "Zero-Hopf bifurcation (algebraic problem)","short name" : "ZH"}, -1: {"long name" : "Bogdanov-Takens bifurcation (algebraic problem)","short name" : "BT"}, -32: {"long name" : "Generalized Hopf bifurcation (algebraic problem)","short name" : "GH"}, 4: {"long name" : "Regular point (every NPR steps)","short name" : "RG"}, -4: {"long name" : "User requested point","short name" : "UZ"}, 5: {"long name" : "Fold (ODE)","short name" : "LP"}, 6: {"long name" : "Bifurcation point (ODE)","short name" : "BP"}, 7: {"long name" : "Period doubling bifurcation (ODE)","short name" : "PD"}, 8: {"long name" : "Bifurcation to invariant torus (ODE)","short name" : "TR"}, -5: {"long name" : "1:1 Resonance bifurcation (ODE)","short name" : "R1"}, -6: {"long name" : "1:2 Resonance bifurcation (ODE)","short name" : "R2"}, -7: {"long name" : "1:3 Resonance bifurcation (ODE)","short name" : "R3"}, -8: {"long name" : "1:4 Resonance bifurcation (ODE)","short name" : "R4"}, 23: {"long name" : "Fold-torus bifurcation (maps)","short name" :"LTR"}, 77: {"long name" : "Flip-torus bifurcation (maps)","short name" :"PTR"}, 28: {"long name" : "Fold-flip bifurcation (maps)","short name" :"LPD"}, 88: {"long name" : "Torus-torus bifurcation (maps)","short name" :"TTR"}, 9: {"long name" : "Normal begin or end","short name" : "EP"}, -9: {"long name" : "Abnormal termination","short name" : "MX"}} all_point_types = ["No Label", "BP","LP","HB","BT","RG","UZ","PD","TR","EP","MX","ZH", "CP","GH","R1","R2","R3","R4","LPD","LTR","PTR","TTR"] def type_translation(type): """A little dictionary to transform types to human readable strings""" if type in [28,78]: # LPD type=28 elif type in [23,83]: # LTR type=23 elif type in [77,87]: # PTR type=77 elif type not in [-32,88]: if type>=0: type=type%10 else: type=-((-type)%10) return type_translation_dict.get(type, {"long name" : "Unknown type", "short name" : "Unknown type"}) def reverse_type_translation(type): """A little dictionary to transform human readable strings to types""" for k,v in type_translation_dict.items(): if v["short name"] == type or v["long name"] == type: return k return type # The parseB and AUTOBranch classes parse an AUTO fort.7 file # THESE EXPECT THE FILE TO HAVE VERY SPECIFIC FORMAT! # it provides 4 methods: # read and write take as an arguement either and input or output # stream (basically any object with has the method "readline" # for reading and "write" for writing) # # readFilename and writeFilename take as an arguement a filename # in which to read/write the parameters (basically it opens the # file and then calles "read" or "write" # # Once the data is read in the class provides a list all the points # in the fort.7 file. class parseBMixin(object): def __str__(self): return self.summary() def __getitem__(self,index): return self.getIndex(index) def __call__(self,label=None): return self.getLabel(label) def dsp(self,label=None): """Removes solutions with the given labels or type names""" return self.deleteLabel(label,copy=1) def ksp(self,label=None): """Keeps solutions with the given labels or type names""" return self.deleteLabel(label,keep=1,copy=1) def dlb(self,label=None): """Removes solutions with the given labels or type names""" return self.deleteLabel(label,keepTY=1,copy=1) def klb(self,label=None): """Keeps solutions with the given labels or type names""" return self.deleteLabel(label,keepTY=1,keep=1,copy=1) def readFilename(self,filename): inputfile = AUTOutil.openFilename(filename,"r") self.read(inputfile) inputfile.close() def writeFilename(self,filename,append=False): if append: output = open(filename,"a") else: output = open(filename,"w") self.write(output) output.close() def writeRawFilename(self,filename): output = open(filename,"w") self.writeRaw(output) output.flush() output.close() def writeScreen(self): sys.stdout.write(self.summary()) # a point within an AUTOBranch class BDPointData(UserList): def __init__(self, branch=None, idx=None): self.branch = branch self.idx = idx def __getattr__(self, attr): if attr == 'data': return [d[self.idx] for d in self.branch.coordarray] return super(BDPointData, self).__getattribute__(attr) def __setitem__(self, i, item): self.branch.coordarray[i][self.idx] = item def __str__(self): return str(self.data) class BDPoint(Points.Point): def __init__(self, p, branch=None, idx=None, pt=None): if isinstance(p['coordarray'], list): # not fully parsed self.__fullyParsed = False self.p = p self.coordnames = p['coordnames'] self.name_map = dict(zip(p['coordnames'], range(len(p['coordnames'])))) else: self.__fullyParsed = True Points.Point.__init__(self, p) self.idx = idx self.pt = pt self.branch = branch self.section = 0 self.index = idx def __getattr__(self, attr): if not self.__fullyParsed: p = self.p p['coordtype'] = type(p['coordarray'][0]) del self.name_map, self.p Points.Point.__init__(self, p) self.__fullyParsed = True return super(BDPoint, self).__getattribute__(attr) def __contains__(self, key): if (key in ["TY","TY name","data","BR","PT","section","index"] or Points.Point.has_key(self,key)): return True for k,v in self.labels.items(): if k in all_point_types: return key in v return False def has_key(self, key): return self.__contains__(key) def __setitem__(self, ixarg, val): """Change coordinate array values.""" if type(ixarg) == type(""): if ixarg == "BR": self.branch["BR"] = val return elif ixarg == "PT": if not self.__fullyParsed: self.pt = val # else ignore return elif ixarg == "section": self.section = val return elif ixarg == "index": self.index = val return for k,v in self.labels.items(): if "LAB" in v: v[ixarg] = val return Points.Point.__setitem__(self, ixarg, val) def __getitem__(self, coords): if type(coords) == type(""): if not self.__fullyParsed: try: return self.p['coordarray'][self.name_map[coords]] except KeyError: pass if coords == "BR": return self.branch["BR"] elif coords == "PT": if self.__fullyParsed: pt = self.idx+1 for p in self.branch.stability(): if abs(p) >= pt: if p < 0: pt = -pt break if pt < 0: pt = -((-pt-1) % 9999) - 1 else: pt = ((pt-1) % 9999) + 1 else: pt = self.pt return pt elif coords == "section": return self.section elif coords == "index": return self.index for k,v in self.labels.items(): if k in all_point_types: if coords in v: return v[coords] elif coords in ("TY name", "TY"): return k if coords == "data": return BDPointData(self.branch, self.idx) return Points.Point.__getitem__(self, coords) def __str__(self): for k,v in self.labels.items(): if k in all_point_types: ty_name = k label = v break return str({"BR": self["BR"], "PT": self["PT"], "TY number": label["TY number"], "TY name": ty_name, "LAB": label["LAB"], "data": list(self.coordarray), "section": self.section, "index": self.index}) __repr__ = __str__ # a branch within the parseB class class AUTOBranch(parseBMixin, Points.Pointset): def __init__(self,input=None,prevline=None,coordnames=[]): self.__fullyParsed = True if isinstance(input,AUTOBranch): for k,v in input.__dict__.items(): self.__dict__[k] = v elif input is not None: self.read(input,prevline) self.__fullyParsed = False def __getattr__(self,attr): if self.__fullyParsed or attr == "__del__": raise AttributeError self.__parse() return super(AUTOBranch, self).__getattribute__(attr) def _gettypelabel(self,idx): for k,v in self.labels[idx].items(): if "LAB" in v: return k,v return 'No Label', {} def __parse(self): if self.__fullyParsed: return global N if not Points.numpyimported: Points.importnumpy() self.__fullyParsed = True fromstring = Points.fromstring N = Points.N datalist = self.__datalist del self.__datalist line0 = datalist[0].split() self.BR = int(line0[0]) ncolumns = len(line0) nrows = len(datalist) datalist = "".join(datalist) if fromstring: #numpy data = [] if "D" not in datalist: data = fromstring(datalist, dtype=float, sep=' ') if len(data) != nrows * ncolumns: data = N.array(map(AUTOatof,datalist.split()), 'd') else: #make sure the last element is correct #(fromstring may not do this correctly for a #string like -2.05071-106) data[-1] = AUTOatof(datalist[datalist.rfind(' ')+1:].strip()) else: #array datalist = datalist.split() try: data = N.array(map(float, datalist), 'd') except ValueError: data = N.array(map(AUTOatof, datalist), 'd') data.shape = (-1,ncolumns) coordarray = N.transpose(data[:,4:]).copy() points = data[:,1] if hasattr(N,"concatenate"): stability = self.__parsenumpy(points) else: stability = self.__parsearray(points) # add stability info labels branchtype = type_translation(self.TY)["short name"] for i in stability: if i < 0: stab = "S" else: stab = "U" self.labels.update(abs(i)-1, branchtype, {"stab": stab}) # sometimes the columns names are the same: add spaces to those for i in range(len(self.coordnames)): name = self.coordnames[i] if self.coordnames.count(name) > 1: for j in range(i+1,len(self.coordnames)): if self.coordnames[j] == name: self.coordnames[j] = name + ' ' Points.Pointset.__init__(self,{ "coordarray": coordarray, "coordnames": self.coordnames, "labels": self.labels, }) def __parsenumpy(self,points): global N # stability gives a list of point numbers where the stability # changes: the end point of each part is stored stab = N.concatenate((N.flatnonzero(N.less(points[:-1]*points[1:],0)), [len(points)-1])) points = N.less(N.take(points,stab),0) stab = stab + 1 stability = N.where(points,-stab,stab) return stability def __parsearray(self,points): global N # for those without numpy... stability = [] prevpt = points[0] for p, pt in enumerate(points): if pt * prevpt < 0: if prevpt < 0: p = -p stability.append(p) prevpt = pt p = len(points) if pt < 0: p = -p stability.append(p) return stability def __setitem__(self, item, value): if item in ("BR", "TY", "TY number") and item not in self.coordnames: if item == "BR": br = self["BR"] if value != br: self.__parse() self.BR = value else: if item == "TY": value = reverse_type_translation(value) self.TY = value # sync solution TYs for k,x in map(self._gettypelabel, self.labels.getIndices()): v = x["TY number"] if v>=0: v=v%10 else: v=-((-v)%10) x["TY number"] = value*10 + v else: Points.Pointset.__setitem__(self, item, value) def __len__(self): if not self.__fullyParsed: return len(self.__datalist) if len(self.coordarray) == 0: return 0 return Points.Pointset.__len__(self) def deleteLabel(self,label=None,keepTY=0,keep=0,copy=0): """Removes solutions with the given labels or type names""" if label is None: label = [lab for lab in all_point_types if lab not in ["No Label", "RG", "UZ"]] if isinstance(label, (str, int)): label = [label] if copy: new = self.__class__(self) new.labels = Points.PointInfo(self.labels.by_index.copy()) if not self.__fullyParsed: new.__datalist = self.__datalist[:] else: new = self for idx in new.labels.getIndices(): ty_name,v = new._gettypelabel(idx) if "LAB" not in v: continue if ((not keep and (v["LAB"] in label or ty_name in label)) or (keep and not v["LAB"] in label and not ty_name in label)): if copy: new.labels[idx][ty_name] = v.copy() new.labels[idx][ty_name]["LAB"] = 0 if not keepTY: new.labels[idx][ty_name]["TY number"] = 0 if not new.__fullyParsed: new.__patchline(new.__datalist,idx,3,0) if not keepTY: new.__patchline(new.__datalist,idx,2,0) if v["TY number"] == 0: new.labels.remove(idx) if copy: return new def relabel(self,old_label=1,new_label=None): """Relabels the first solution with the given label""" if new_label is None: label = old_label new = self.__class__(self) labels = {} if not self.__fullyParsed: new.__datalist = self.__datalist[:] for index in self.labels.getIndices(): labels[index] = self.labels[index].copy() ty_name,v = self._gettypelabel(index) if v.get("LAB",0) != 0: labels[index][ty_name] = v.copy() labels[index][ty_name]["LAB"] = label if not self.__fullyParsed: self.__patchline(new.__datalist,index,3,label) label = label + 1 new.labels = Points.PointInfo(labels) return new labels = self.labels if isinstance(old_label, int): old_label = [old_label] new_label = [new_label] for j in range(len(old_label)): for index in self.labels.getIndices(): v = self._gettypelabel(index)[1] if "LAB" not in v: continue if v["LAB"] == old_label[j]: v["LAB"] = new_label[j] if not self.__fullyParsed: self.__patchline(self.__datalist,index,3,new_label[j]) def uniquelyLabel(self,label=1): """Make all labels in the file unique and sequential""" for index in self.labels.getIndices(): v = self._gettypelabel(index)[1] if v.get("LAB",0) != 0: v["LAB"] = label if not self.__fullyParsed: self.__patchline(self.__datalist,index,3,label) label = label + 1 def getLabel(self,label): """Given a label, return the correct solution""" if label is None: return self if isinstance(label, int): for k in self.labels.getIndices(): v = self._gettypelabel(k)[1] if v.get("LAB",0) == label: return self.getIndex(k) raise KeyError("Label %s not found"%label) if isinstance(label, str) and len(label) > 2 and label[-1].isdigit(): j = 2 if not label[2].isdigit(): j = 3 number = int(label[j:]) i = 0 for k,v in self.labels.sortByIndex(): if label[:j] in v: i = i + 1 if i == number: return self.getIndex(k) raise KeyError("Label %s not found"%label) if not AUTOutil.isiterable(label): label = [label] labels = {} counts = [0]*len(label) for k,val in self.labels.sortByIndex(): ty_name,v = self._gettypelabel(k) if "LAB" not in v: continue for i in range(len(label)): lab = label[i] j = 2 if len(lab) > 2 and not lab[2].isdigit(): j = 3 if (isinstance(lab, str) and len(lab) > j and ty_name == lab[:j]): counts[i] = counts[i] + 1 if counts[i] == int(lab[j:]): labels[k] = val if v["LAB"] in label or ty_name in label: labels[k] = val continue new = self.__class__(self) new.labels = Points.PointInfo(labels) return new def getIndex(self,index): """Return a parseB style line item; if given a string, return the relevant column""" if isinstance(index,tuple) and len(index)==2 and not self.__fullyParsed: # retrieve data without parsing everything else i, j = index if isinstance(j, str): j = self.coordnames.index(j) return AUTOatof(self.__datalist[i].split()[4+j]) if index in ("BR", "TY", "TY number") and index not in self.coordnames: if index == "BR": if self.__fullyParsed: return self.BR else: return int(self.__datalist[0].split(None,1)[0]) elif index == "TY": return type_translation(self.TY)["short name"] else: #"TY number" return self.TY if isinstance(index, int) and index < 0: index = len(self) + index if self.__fullyParsed or not isinstance(index, int): if not Points.numpyimported: Points.importnumpy() ret = Points.Pointset.__getitem__(self,index) if isinstance(ret, Points.Pointset): r = self.__class__(self) r.coordarray = ret.coordarray r.labels = ret.labels # adjust stability info if isinstance(index, slice): prev = 0 stability = [] for p in self.stability(): if p < 0: stab = "S" else: stab = "U" stability.append((abs(p)-prev)*stab) prev = abs(p) stability = "".join(stability)[index] branchtype = type_translation(self.TY)["short name"] prev = stability[0] for i, stab in enumerate(stability): if stab != prev: r.labels.update(i-1, branchtype, {"stab": prev}) prev = stab r.labels.update(len(r)-1, branchtype,{"stab":stability[-1]}) return r if not isinstance(ret, Points.Point): return ret labels = ret.labels coordnames = ret.coordnames coordarray = ret.coordarray pt = None else: labels = self.labels[index] coordnames = self.coordnames coordarray = self.__datalist[index].split() pt = int(coordarray[1]) coordarray = list(map(AUTOatof, coordarray[4:])) label = None for v in labels.values(): if "LAB" in v: label = v break if label is None: label = {"TY number": 0, "LAB": 0} if "No Label" in labels: labels["No Label"].update(label) else: labels["No Label"] = label return BDPoint({'coordarray': coordarray, 'coordnames': coordnames, 'labels': labels},self,index) def getLabels(self): """Get all the labels from the solution""" labels = [] for index in self.labels.getIndices(): x = self._gettypelabel(index)[1] if x.get("LAB",0) != 0: labels.append(x["LAB"]) return labels def stability(self): """Returns a list of point numbers where the stability changes: the end point of each part is stored.""" if not self.__fullyParsed: self.__parse() stab = [] prevpt = 0 branchtype = type_translation(self.TY)["short name"] for idx,val in self.labels.sortByIndex(): if branchtype in val and "stab" in val[branchtype]: if val[branchtype]["stab"] == "U": pt = idx+1 else: pt = -idx-1 if pt * prevpt <= 0: stab.append(pt) else: stab[-1] = pt prevpt = pt return stab def subtract(self,other,ref,pt=None): """Subtracts branch branches using interpolation with respect to other with monotonically increasing or decreasing reference coordinate ref, and starting point pt""" global N if not Points.numpyimported: Points.importnumpy() N = Points.N if pt is None: index = 0 elif type(pt) == type(1): index = abs(pt) - 1 else: index = pt["index"] coordarray = N.array(self.coordarray) if not isinstance(other,Points.Pointset): other = other[0] b0 = other[ref] if b0[index] > b0[index+1]: # decreasing array: take first part until it increases k = index+1 while k < len(b0) and b0[k] <= b0[k-1]: k = k + 1 b0 = b0[:k] else: k = index+1 while k < len(b0) and b0[k] >= b0[k-1]: k = k + 1 b0 = b0[:k] r = 0 for i in range(len(other.coordnames)): if other.coordnames[i] == ref: r = i a0 = self.coordarray[r] k = index+1 for j in range(len(a0)): if b0[index+1] > b0[index]: #find k so that b0[k-1] < a0[j] <= b0[k] if a0[j] > b0[k]: while k < len(b0)-1 and a0[j] > b0[k]: k = k + 1 elif b0[k-1] >= a0[j]: while k > index+1 and b0[k-1] >= a0[j]: k = k - 1 else: #find k so that b0[k-1] > a0[j] >= b0[k] if a0[j] < b0[k]: while k < len(b0)-1 and a0[j] < b0[k]: k = k + 1 elif b0[k-1] <= a0[j]: while k > index+1 and b0[k-1] <= a0[j]: k = k - 1 #do extrapolation if past the boundaries... for i in range(len(self.coordnames)): if i == r or i >= len(other.coordarray): continue a = coordarray[i] b = other.coordarray[i] a[j]=a[j]-b[k-1]-(a0[j]-b0[k-1])*(b[k]-b[k-1])/(b0[k]-b0[k-1]) new = self.__class__(self) Points.Pointset.__init__(new, coordarray = coordarray, coordnames = self.coordnames, labels = self.labels) return new def toArray(self): return list(map(list,zip(*self.coordarray))) def writeRaw(self,output): data = self.toArray() output.write("\n".join(["".join(["%24.15E"%v for v in d]) for d in data])+"\n") def write(self, output, columnlen=19): if columnlen == 19 and not self.__fullyParsed: output.writelines(self.headerlist) output.writelines(self.__datalist) return format = "%"+str(-columnlen)+"s" if self.headerlist != []: for l in self.headerlist: if " PT " not in l: output.write(l) if self.headernames != []: output_line = [" 0 PT TY LAB "] for name in self.headernames: output_line.append(format%name) output.writelines(output_line) output.write('\n') br = self.BR data = self.coordarray istab = 0 format = "%"+str(columnlen)+"."+str(columnlen-9)+"E" stability = self.stability() for i in range(len(data[0])): pt = i+1 if stability[istab] < 0: pt = -pt tynumber = 0 lab = 0 if i in self.labels.by_index: for k,label in self.labels[i].items(): if "LAB" in label: tynumber = label["TY number"] lab = label["LAB"] break if pt == stability[istab]: istab = istab + 1 if pt < 0: pt = -((-pt-1) % 9999) - 1 else: pt = ((pt-1) % 9999) + 1 output_line = "%4d%6d%4d%5d"%(br,pt,tynumber,lab) if columnlen == 19: for j in range(len(data)): output_line = output_line + format19_10E3(data[j,i]) else: for j in range(len(data)): output_line = output_line + format%data[j,i] output.write(output_line+"\n") def writeShort(self): self.write(sys.stdout, columnlen=14) def summary(self): slist = [] if self.__fullyParsed: data = self.coordarray first = True for index,l in self.labels.sortByIndex(): label = {} for k,v in l.items(): if "LAB" in v: label = v break ty_number = label.get("TY number",0) if ty_number == 0 or label["LAB"] == 0: continue if first: slist.append("".join( ["\n BR PT TY LAB "] + ["%-14s"%name for name in self.headernames])) first = False ty_name = type_translation(ty_number)["short name"] if ty_name=='RG': ty_name = ' ' if self.__fullyParsed: linelist = (["%4d%6d%4s%5d"%(abs(self.BR),(index % 9999) + 1, ty_name,label["LAB"])]+ ["%14.5E"%d[index] for d in data]) else: linedata = self.__datalist[index].split() linelist = ( ["%4d%6d%4s%5d"%(abs(int(linedata[0])),abs(int(linedata[1])), ty_name,label["LAB"])] + ["%14.5E"%AUTOatof(d) for d in linedata[4:]]) slist.append("".join(linelist)) return "\n".join(slist) def __patchline(self,datalist,lineno,column,new): #patch column of line with new integer value newsp = 0 line = datalist[lineno] l = len(line) for i in range(column+1): oldsp = newsp start = l - len(line[oldsp:].lstrip()) newsp = line.find(' ',start) datalist[lineno] = (line[:oldsp]+ '%'+str(newsp-oldsp)+'d'+line[newsp:])%new def __checknorotate(self,datalist): # Sometimes the point numbers rotate, like # 9996, 9997, 9998, 9999, 1, 2, ... # -9996, -9997, 1, 0, -1, -2, ... (an AUTO bug) # do not define a new branch if that happens prevpt = int(datalist[-2].split(None,2)[1]) if prevpt not in [9999,-9999,9997,-9997,0]: return True # do some corrections if prevpt in [-9997,9997]: self.__patchline(datalist,-1,1,-9998) elif prevpt == 0: self.__patchline(datalist,-2,1,-9999) return False def read(self,inputfile,prevline=None): # We now go through the file and read the branches. # read the branch header # A section is defined as a part of a fort.7 # file between "headers", i.e. those parts # of the fort.7 file which start with a 0 # and contain information about the branch # FIXME: I am not sure of this is the correct # fix to having multiple sections of a fort.7 # file with the same branch number. What it comes # dowm to is keeping the fort.7 and fort.8 files # in sync. I.e. I could make sure that # this branch numbers are unique here, but then # the fort.7 file will not match the fort.8 file. # Another way for a section to start is with a point number # equal to 1. self._lastline = None if hasattr(str,"split"): split = str.split else: import string split = string.split if prevline: line = prevline else: try: line = next(inputfile) except StopIteration: self.labels = None return headerlist = [] columns = split(line,None,2) if columns[0] == '0': headerlist.append(line) for line in inputfile: columns = split(line,None,2) if columns[0] != '0': self._lastline = line break headerlist.append(line) datalist = [] labels = {} if columns[0] != '0': self._lastline = None datalist = [line] if columns[2][0] != '0': #type columns = split(line,None,4) pt = int(columns[1]) if pt < 0: stab = 'S' else: stab = 'U' ty = int(columns[2]) lab = int(columns[3]) key = type_translation(ty)["short name"] labels[len(datalist)-1] = {key: {"LAB":lab,"TY number":ty}} for line in inputfile: datalist.append(line) columns = split(line,None,2) if (columns[0] == '0' or ((columns[1] == '-1' or columns[1] == '1') and self.__checknorotate(datalist))): self._lastline = datalist.pop() break if columns[2][0] != '0': #type columns = split(datalist[-1],None,4) pt = int(columns[1]) ty = int(columns[2]) lab = int(columns[3]) key = type_translation(ty)["short name"] labels[len(datalist)-1] = {key: {"LAB":lab,"TY number":ty}} self.labels = Points.PointInfo(labels) self.__datalist = datalist self.c = self.parseHeader(headerlist) def parseHeader(self,headerlist): from auto import parseC self.headerlist = headerlist if hasattr(str,"split"): split = str.split else: import string split = string.split line = "" if headerlist != []: line = headerlist[-1] ncolumns = len(split(self.__datalist[0])) - 4 self.headernames = [] self.coordnames = [] self.TY = 0 if " PT " in line: linelen = len(self.__datalist[0]) columnlen = (linelen - 19) // ncolumns n = linelen - columnlen * ncolumns for i in range(ncolumns): self.headernames.append(line[n:n+columnlen].rstrip()) self.coordnames.append(line[n:n+columnlen].strip()) n = n + columnlen if self.coordnames == []: self.coordnames = ["COLUMN(%d)"%(i+1) for i in range(ncolumns)] dict = parseC.parseC() i = 0 if len(headerlist) == 0: return words = split(headerlist[0]) if len(words) < 5: return for key in ["RL0","RL1","A0","A1"]: i = i + 1 dict[key] = AUTOatof(words[i]) key = "" userspec = False for line in headerlist[1:]: words = split(line) if len(words) < 2: break if words[-1] in ["constants:", "above:"]: userspec = True continue if words[1] == 'Branch': self.TY = int(words[3]) if words[1] in ["User-specified", "Active"]: line = line.replace("s:",":") for ind in range(2,len(words)): if words[ind] in ["parameter:","parameters:"]: index = ind + 1 break if words[1][0] == "U": key = "ICP" else: key = "Active ICP" d = [] for w in words[index:]: try: w = int(w) except ValueError: if ((w[0] == "'" and w[-1] == "'") or (w[0] == '"' and w[-1] == '"')): w = w[1:-1] d.append(w) dict[key] = d continue dict.parseline(" ".join(words[1:]),userspec) return dict class parseBR(parseBMixin, UserList): def __init__(self,filename=None): if isinstance(filename, str): UserList.__init__(self) self.readFilename(filename) else: UserList.__init__(self,filename) # Removes solutions with the given labels or type names def deleteLabel(self,label=None,keepTY=0,keep=0,copy=0): if copy: data = [] for d in self.data: data.append(d.deleteLabel(label,keepTY,keep,copy)) return self.__class__(data) for d in self.data: d.deleteLabel(label,keepTY,keep) # Relabels the first solution with the given label def relabel(self,old_label=None,new_label=None): if new_label is None: label = 1 new = [] for d in self.data: newd = d.relabel(label) for idx,val in newd.labels.sortByIndex(): for k,v in val.items(): if v.get("LAB",0) != 0: label = v["LAB"] new.append(newd) label = label + 1 return self.__class__(new) for d in self.data: d.relabel(old_label,new_label) # Make all labels in the file unique and sequential def uniquelyLabel(self): label = 1 for d in self.data: d.uniquelyLabel(label) for idx,val in d.labels.sortByIndex(): for k,v in val.items(): if v.get("LAB",0) != 0: label = v["LAB"] + 1 # Given a label, return the correct solution def getLabel(self,label): if isinstance(label, int): i = 0 section = 0 for d in self.data: l = len(d.coordarray[0]) try: item = d.getLabel(label) item["index"] = item["index"] + i item["section"] = section return item except (KeyError, IndexError): pass i = i + l section = section + 1 raise KeyError("Label %s not found"%label) elif isinstance(label, str) and len(label) > 2 and label[-1].isdigit(): j = 2 if not label[2].isdigit(): j = 3 number = int(label[j:]) for d in self.data: l = len(d.getLabel(label[:j]).getLabels()) if number <= l: return d.getLabel(label[:j]+str(number)) number -= l raise KeyError("Label %s not found"%label) new = [] label = label[:] for d in self.data: newbranch = d.getLabel(label) if newbranch: new.append(newbranch) for i, lab in enumerate(label): if isinstance(lab, str) and len(lab) > 2 and lab[-1].isdigit(): j = 2 if not lab[2].isdigit(): j = 3 number = int(lab[j:]) l = len(d.getLabel(lab[:j]).getLabels()) if number >= l: number -= l label[i] = lab[:j]+str(number) return self.__class__(new) def __getitem__(self,index): try: return UserList.__getitem__(self,index) except TypeError: return self.data[0][index] # Given an index, return the correct solution # Return a parseB style line item def getIndex(self,index): if type(index) != type(0): return self.data[0].getIndex(index) section = 0 i = index for d in self.data: l = len(d) if i < l: item = d.getIndex(i) item["section"] = section item["index"] = index return item i = i - l section = section + 1 raise IndexError # Get all the labels from the solution def getLabels(self): labels = [] for d in self.data: labels.extend(d.getLabels()) return labels # Merges branches def merge(self): fw = None data = [] for bw in self.data: data.append(bw) if fw is None or fw.BR != bw.BR or (fw.c is not bw.c and fw.c["DS"] * bw.c["DS"] > 0): fw = bw continue f0 = fw[0] b0 = bw[0] if len(f0) != len(b0): fw = bw continue cont = False for i in range(len(f0)): if f0[i] != b0[i]: fw = bw cont = True break if cont: continue #now we know that the branches have the same starting point: #merge them new = bw[::-1] new.extend(fw[1:]) new.c = fw.c new.headerlist = fw.headerlist data[-1] = new # adjust label numbers lab = min(fw.getLabels()+bw.getLabels()) for idx,val in new.labels.sortByIndex(): for k,v in val.items(): if v.get("LAB",0) > 0: val[k] = v.copy() val[k]["LAB"] = lab lab = lab+1 if hasattr(fw,"diagnostics"): if hasattr(bw,"diagnostics"): new.diagnostics = fw.diagnostics + bw.diagnostics else: new.diagnostics = fw.diagnostics del data[-2] #reset for further search fw = None return self.__class__(data) def subtract(self,other,ref,pt=None): """Subtracts branch branches using interpolation with respect to other with monotonically increasing or decreasing reference coordinate ref, and starting point pt""" new = [] for d in self.data: new.append(d.subtract(other,ref,pt)) return self.__class__(new) def toArray(self): array = [] for d in self.data: array.extend(d.toArray()) return array def writeRaw(self,output): for d in self.data: d.writeRaw(output) output.write("\n") def write(self,output): for d in self.data: d.write(output) def writeShort(self): for d in self.data: d.writeShort() def summary(self): slist = [] for branch in self.data: s = branch.__str__() if s != "": slist.append(s) return "\n".join(slist)+"\n" def __repr__(self): slist = [] for branch in self.data: slist.append(branch.__repr__()) return "\n".join(slist)+"\n" def read(self,inputfile): # We now go through the file and read the branches. prevline = None coordnames = [] lastc = None lastTY = 0 while True: branch = AUTOBranch(inputfile,prevline,coordnames) if branch.labels is None: break prevline = branch._lastline coordnames = branch.coordnames self.data.append(branch) if branch.c is None: #for header-less branches use constants of last branch header branch.c = lastc branch.TY = lastTY else: lastc = branch.c lastTY = branch.TY if prevline is None: break class parseB(parseBMixin): #compatibility class for dg() def __init__(self,filename=None): self.branches = parseBR(filename) if len(self.branches) > 0: self.coordnames = self.branches[0].coordnames self.deleteLabel = self.branches.deleteLabel self.relabel = self.branches.relabel self.uniquelyLabel = self.branches.uniquelyLabel self.getIndex = self.branches.getIndex self.getLabels = self.branches.getLabels self.toArray = self.branches.toArray self.writeRaw = self.branches.writeRaw self.write = self.branches.write self.writeShort = self.branches.writeShort self.summary = self.branches.summary def __len__(self): l = 0 for d in self.branches: l += len(d) return l def getLabel(self,label): if isinstance(label, int) or ( isinstance(label, str) and len(label) > 2 and label[-1].isdigit()): return self.branches.getLabel(label) return self.__class__(self.branches.getLabel(label)) def read(self,inputfile): self.branches.read(inputfile) if len(self.branches) > 0: self.coordnames = self.branches[0].coordnames def __repr__(self): return self.branches.__repr__() def AUTOatof(input_string): #Sometimes AUTO messes up the output. I.e. it gives an #invalid floating point number of the form x.xxxxxxxE #instead of x.xxxxxxxE+xx. Here we assume the exponent #is 0 and make it into a real real number :-) try: return float(input_string) except ValueError: try: if not isinstance(input_string, str): input_string = input_string.decode('ascii') if input_string[-1] == "E": # This is the case where you have 0.0000000E return float(input_string.strip()[0:-1]) if len(input_string) >= 5: if input_string[-4] in ["-","+"]: # This is the case where you have x.xxxxxxxxx-yyy # or x.xxxxxxxxx+yyy (standard Fortran but not C) return float(input_string[:-4]+'E'+input_string[-4:]) if input_string[-4] == "D": # This is the case where you have x.xxxxxxxxxD+yy # or x.xxxxxxxxxD-yy (standard Fortran but not C) return float(input_string[:-4]+'E'+input_string[-3:]) input_string = input_string.replace("D","E") input_string = input_string.replace("d","e") try: return float(input_string) except ValueError: i = input_string.find("-", 1) if i == -1: i = input_string.find("+", 1) if i != -1 and input_string[i-1] not in ["e", "E"]: # form x.xxx+yy or x.xxx-yy (standard Fortran but not C) return float(input_string[:i]+'E'+input_string[i:]) print("Encountered value I don't understand") print(input_string) print("Setting to 0") return 0.0 except ValueError: print("Encountered value which raises an exception while processing!!!") print(input_string) print("Setting to 0") return 0.0 def pointtest(a,b): if "TY name" not in a: raise AUTOExceptions.AUTORegressionError("No TY label") if "TY number" not in a: raise AUTOExceptions.AUTORegressionError("No TY label") if "BR" not in a: raise AUTOExceptions.AUTORegressionError("No BR label") if "data" not in a: raise AUTOExceptions.AUTORegressionError("No data label") if "PT" not in a: raise AUTOExceptions.AUTORegressionError("No PT label") if "LAB" not in a: raise AUTOExceptions.AUTORegressionError("No LAB label") if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def test(): print("Testing reading from a filename") foo = parseB() foo.readFilename("test_data/fort.7") if len(foo) != 150: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest(foo.getIndex(0),foo.getIndex(57)) print("Testing reading from a stream") foo = parseB() fp = open("test_data/fort.7","r") foo.read(fp) if len(foo) != 150: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest(foo.getIndex(0),foo.getIndex(57)) print("Testing label manipulation") labels = foo.getLabels() foo.relabel(labels[0],57) labels = foo.getLabels() if labels[0] != 57: raise AUTOExceptions.AUTORegressionError("Error in either relabel or getLabel") foo.deleteLabel(labels[1]) new_labels = foo.getLabels() if len(labels) != len(new_labels) + 1: raise AUTOExceptions.AUTORegressionError("Error in label deletion") bar = foo.relabel() old_labels = foo.getLabels() new_labels = bar.getLabels() if old_labels[0] != 57 or new_labels[0] != 1: raise AUTOExceptions.AUTORegressionError("Error in relabelling") print("parseB passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/runAUTO.py0000750000175000017500000006200513570013207014407 0ustar sksk#! /usr/bin/env python import getopt,sys,os import signal try: from cStringIO import StringIO except ImportError: # Python 3 from io import StringIO import re import glob from auto import AUTOExceptions,parseC,parseS import gc try: import subprocess except ImportError: import popen2 import shlex # A few global variables for the signal handler alarm_demo="" demo_killed=0 demo_max_time=-1 signals = { "SIGHUP": "Hangup", "SIGINT": "Interrupt", "SIGQUIT": "Quit", "SIGILL": "Illegal instruction", "SIGTRAP": "Trace/breakpoint trap", "SIGABRT": "Aborted", "SIGBUS": "Bus error", "SIGFPE": "Floating point exception", "SIGKILL": "Killed", "SIGUSR1": "User defined signal 1", "SIGSEGV": "Segmentation fault", "SIGUSR2": "User defined signal 2", "SIGPIPE": "Broken pipe", "SIGALRM": "Alarm clock", "SIGTERM": "Terminated", "SIGSTKFLT": "Stack fault", "SIGCHLD": "Child exited", "SIGCONT": "Continued", "SIGSTOP": "Stopped (signal)", "SIGTSTP": "Stopped", "SIGTTIN": "Stopped (tty input)", "SIGTTOU": "Stopped (tty output)", "SIGURG": "Urgent I/O condition", "SIGXCPU": "CPU time limit exceeded", "SIGXFSZ": "File size limit exceeded", "SIGVTALRM": "Virtual timer expired", "SIGPROF": "Profiling timer expired", "SIGWINCH": "Window changed", "SIGIO": "I/O possible", "SIGPWR": "Power failure", "SIGSYS": "Bad system call" } class runAUTO: def __init__(self,**kw): # Set the signal handler if hasattr(signal,'SIGALRM') and demo_max_time > 0: signal.signal(signal.SIGALRM, self.__handler) self.options={} self.options["log"] = None self.options["err"] = None self.options["auto_dir"] = None self.options["demos_dir"] = None self.options["equation"] = "all" self.options["verbose"] = "yes" # note: this is ignored! self.options["clean"] = "no" self.options["dir"] = "." self.options["executable"] = None self.options["command"] = None self.options["makefile"] = None self.options["constants"] = parseC.parseC() self.options["solution"] = parseS.AUTOSolution() self.options["homcont"] = None self.options["selected_solution"] = None kw = self.config(**kw) def config(self,**kw): """ Change the options for this runner object""" # first the normal parameters, then IRS=... style parameters for key in self.options: if key in kw: value = kw[key] del kw[key] if key == 'log': if self.options[key] is None: self.stdout = sys.stdout sys.stdout = value or self.stdout elif key == 'err': if self.options[key] is None: self.stderr = sys.stderr sys.stderr = value or self.stderr elif key == 'constants': # do not completely replace existing constants data but # leave the special keys such as unames, parnames, etc, # intact self.options[key].update(value) value = self.options[key] elif key == 'solution' and not hasattr(value, "load"): t=kw.get('t') if "t" in kw and value is not None: del kw["t"] value = parseS.AUTOSolution(value,t=t) self.options[key] = value self.options["constants"].update(**kw) def __analyseLog(self,text): # now we also want to look at the log information to try and determine # where the data was written to files = ["fort.7", "fort.8", "fort.9"] v = self.options["constants"].get("sv") if v is None: value = re.findall("(Saved as|Appended to) \*\.(\w*)",text) if len(value): v = value[-1][1] if v is not None: files = ["b."+v, "s."+v, "d."+v] # return as the output data the last filename which was # either saved or appended to or # otherwise we assume it is fort.7 and fort.8 self.fort7_path = os.path.join(self.options["dir"],files[0]) self.fort8_path = os.path.join(self.options["dir"],files[1]) self.fort9_path = os.path.join(self.options["dir"],files[2]) def __popen(self,args,stdin=None,stderr=None): # subprocess.Popen wrapper: return subprocess.Popen(args, stdin=stdin, stdout=subprocess.PIPE, stderr=stderr, bufsize=1, universal_newlines=True) def __handler(self, signum, frame): global demo_killed,alarm_demo,demo_max_time sys.stdout.write('Demo taking too long: '+alarm_demo+'\n') sys.stdout.write('Finding processes to kill...\n') if "subprocess" in sys.modules: p1 = self.__popen(["ps","ww"]) p2 = self.__popen(["grep",alarm_demo+".exe"], p1.stdout) p3 = self.__popen(["grep","-v","grep"], p2.stdout) pids = p3.communicate()[0] p1.stdout.close() p2.stdout.close() else: cout,cin = popen2.popen2( "ps ww | grep %s.exe | grep -v grep"%(alarm_demo,)) cin.close() pids = cout.read() cout.close() pids = pids.splitlines() for pid in pids: sys.stdout.write('Killing: %s\n'%pid) pid = pid.split() pid = int(pid[0]) command = "/bin/kill -KILL %d\n"%(pid,) sys.stdout.write(command) if hasattr(os,"kill"): os.kill(pid,signal.SIGKILL) else: os.system("sh -c '%s'"%command) sys.stdout.flush() # Restart the alarm to make sure everything gets killed if hasattr(signal,"alarm"): signal.alarm(20) def runDemo(self,d): """ This function compiles the demo, then calls the runMakefile method, and then cleans up""" global demo_killed # Garbage collect just before the run to make sure we're not # running out of memory quickly. gc.collect() if self.options["auto_dir"] is None: if "AUTO_DIR" in os.environ: self.options["auto_dir"]=os.environ["AUTO_DIR"] else: raise AUTOExceptions.AUTORuntimeError("AUTO_DIR not set as option or as environment variable") if self.options["demos_dir"] is None: self.options["demos_dir"] = os.path.join(self.options["auto_dir"], "demos") self.options["dir"] = os.path.join(self.options["demos_dir"],d) var = self.__getmakevars() var["FFLAGS"] = var["FFLAGS"] + " " + var["OPT"] var["CFLAGS"] = var["CFLAGS"] + " " + var["OPT"] del var["OPT"] for envvar in var: os.environ[envvar] = var[envvar] sys.stderr.write("===%s start===\n"%(d,)) curdir = os.getcwd() os.chdir(self.options["dir"]) if os.path.exists(d+".exe"): os.remove(d+".exe") cmd = "make -e %s.exe AUTO_DIR=%s"%(d,self.options["auto_dir"]) if "subprocess" in sys.modules: p = self.__popen(cmd.split(), stderr=subprocess.PIPE) stdout,stderr = p.stdout,p.stderr else: stdout,stdin,stderr = popen2.popen3(cmd) stdin.close() sys.stdout.write(stdout.read()) sys.stderr.write(stderr.read()) stdout.close() stderr.close() self.runMakefile() if self.options["clean"] == "yes": os.chdir(self.options["dir"]) cmd = "make -e clean" if "subprocess" in sys.modules: p = self.__popen(cmd.split(), stderr=subprocess.PIPE) stdout,stderr = p.stdout,p.stderr else: stdout,stdin,stderr = popen2.popen3(cmd) stdin.close() sys.stdout.write(stdout.read()) sys.stderr.write(stderr.read()) stdout.close() stderr.close() os.chdir(curdir) if demo_killed != 0: sys.stdout.write("***Demo was killed because it took too long***\n") sys.stderr.write("***Demo was killed because it took too long***\n") sys.stderr.write("===%s end===\n"%(d,)) def __setup(self): """ This function sets up self.options["dir"] by possibly creating the fort.12 file. The "constants", "solution", and "homcont" options can be anything with a writeFilename method. NOTE: The values set here will often be overridden by runMakefile (thought almost never by runExecutable or runCommand)""" solution = self.options["selected_solution"] constants = solution.c if os.path.exists("fort.2"): os.remove("fort.2") if os.path.exists("fort.3"): os.remove("fort.3") if constants["homcont"] is not None: constants["homcont"].writeFilename("fort.12") elif os.path.exists("fort.12"): os.remove("fort.12") def __newer(self,sources,target): targettime = os.stat(target).st_mtime for src in sources: if os.stat(src).st_mtime > targettime: return True return False def __getmakevars(self): # do the same as $AUTO_DIR/cmds/cmds.make but in Python # first get the configure-set variables auto_dir = self.options["auto_dir"] f = open(os.path.join(auto_dir,"cmds","cmds.make"),"r") var = {} for line in f: line = line.split() if len(line) < 2 or line[1] != '=': continue if line[0] == "SRC": break for key in ["CC","FC","CFLAGS","FFLAGS","OPT"]: if line[0] == key: if len(line) == 2: v = "" else: v = " ".join(line[2:]) v = v.replace("$(AUTO_DIR)",auto_dir) var[key] = v f.close() return var def __make(self,equation,fcon=False): var = self.__getmakevars() # figure out equation file name src = "" for ext in [".f90",".f",".c"]: if os.path.exists(equation+ext): src = equation+ext if src == "": raise AUTOExceptions.AUTORuntimeError( "Neither the equation file %s.f90, nor %s.f, nor %s.c exists."%( equation,equation,equation)) # compile if not os.path.exists(equation+'.o') or self.__newer([src], equation+'.o'): if src[-1] == 'c': cmd = "%s %s %s -c %s -o %s.o"%(var["CC"],var["CFLAGS"], var["OPT"],src,equation) else: cmd = "%s %s %s -c %s -o %s.o"%(var["FC"],var["FFLAGS"], var["OPT"],src,equation) sys.stdout.write(cmd+"\n") self.runCommand(cmd) # link auto_dir = self.options["auto_dir"] libdir = os.path.join(auto_dir,"lib") if fcon: srcdir = os.path.join(auto_dir,"src") incdir = os.path.join(auto_dir,"include") libs = os.path.join(srcdir,"fcon.f") deps = [libs] + [os.path.join(incdir,"fcon.h")] var["FFLAGS"] = var["FFLAGS"] + " -I" + incdir.replace(" ","\\ ") execfile = "fcon" else: libs = os.path.join(libdir,"*.o") deps = glob.glob(libs) + [equation+'.o'] execfile = equation + ".exe" if not os.path.exists(execfile) or self.__newer(deps,execfile): if src[-1] == 'c': cmd = '%s -L%s %s %s %s.o -o %s %s -lauto_c'%(var["FC"],libdir.replace(" ","\\ "), var["FFLAGS"],var["OPT"],equation,execfile,libs) else: cmd = "%s %s %s %s.o -o %s %s"%(var["FC"],var["FFLAGS"],var["OPT"], equation,execfile,libs) sys.stdout.write(cmd+"\n") cmd = cmd.replace(libs, " ".join([x.replace(" ","\\ ") for x in deps[:-1]])) self.runCommand(cmd) return os.path.exists(equation+'.exe') and not self.__newer(deps,equation+'.exe') def load(self,**kw): """Load solution with the given AUTO constants. Returns a shallow copy with a copied set of updated constants """ self.config(**kw) ret = self.options["solution"].load(constants=self.options["constants"], homcont=self.options["homcont"]) self.options["selected_solution"] = ret return ret def run(self): """Run AUTO. Run AUTO from the solution with the given AUTO constants. Returns a bifurcation diagram of the result. """ self.__setup() solution = self.options["selected_solution"] constants = solution.c if self.options["makefile"] is None: if self.options["auto_dir"] is None: if "AUTO_DIR" not in os.environ: raise AUTOExceptions.AUTORuntimeError( "AUTO_DIR not set as option or as environment variable") self.options["auto_dir"]=os.environ["AUTO_DIR"] curdir = os.getcwd() os.chdir(self.options["dir"]) if (constants["IRS"] and self.options["selected_solution"].coordnames == []): raise AUTOExceptions.AUTORuntimeError( "Restart label IRS=%s not found."%constants["IRS"]) if "e" not in constants: raise AUTOExceptions.AUTORuntimeError( "The equation file argument is missing.") equation = constants["e"] if self.__make(equation): line = "Starting %s ...\n"%equation sys.stdout.write(line) self.__analyseLog(line) for filename in [self.fort7_path,self.fort8_path, self.fort9_path]: if os.path.exists(filename): os.remove(filename) command = os.path.join(".",equation + ".exe") prefix = os.environ.get("AUTO_COMMAND_PREFIX") if prefix is not None: command = " ".join((prefix, command)) self.runCommand(command, solution) if os.path.exists("fort.3"): os.remove("fort.3") line = "%s ... done\n"%equation sys.stdout.write(line) os.chdir(curdir) else: self.runMakefile() self.__outputCommand() from auto import bifDiag return bifDiag.bifDiag(self.fort7_path,self.fort8_path, self.fort9_path,constants) def runMakefileWithSetup(self,equation=None): self.__setup() self.runMakefile(equation) self.__outputCommand() def runMakefile(self,equation=None): """ This function expects self.options["dir"] to be a directory with a Makefile in it and a equation file all ready to run (i.e. the Makefile does all of the work, like with the demos). Basically it runs: cd dir make equation""" if equation is None: if not(self.options["equation"] is None): equation = self.options["equation"] else: raise AUTOExceptions.AUTORuntimeError("No equation set") else: self.options["equation"] = equation if self.options["auto_dir"] is None: if "AUTO_DIR" in os.environ: self.options["auto_dir"]=os.environ["AUTO_DIR"] else: raise AUTOExceptions.AUTORuntimeError("AUTO_DIR not set as option or as environment variable") if self.options["makefile"] == "$AUTO_DIR/cmds/cmds.make fcon": self.__make(equation,fcon=True) else: if self.options["makefile"] == "": executable = ("make -e %s AUTO_DIR=%s"% (self.options["equation"], self.options["auto_dir"])) else: executable = ("make -f %s -e %s AUTO_DIR=%s"% (self.options["makefile"], self.options["equation"], self.options["auto_dir"])) path = os.environ["PATH"] os.environ["PATH"] = path+os.pathsep+"." self.runExecutable(executable) os.environ["PATH"] = path def runExecutableWithSetup(self,executable=None): self.__setup() self.runExecutable(executable) self.__outputCommand() def runExecutable(self,executable=None): """ This function expects self.options["dir"] to be a directory with an executable in it and a equation file all ready to run. Basically it runs: cd dir executable""" if executable is None: if not(self.options["executable"] is None): executable = self.options["executable"] else: raise AUTOExceptions.AUTORuntimeError("No executable set") else: self.options["executable"] = executable curdir = os.getcwd() os.chdir(self.options["dir"]) self.runCommand(executable) os.chdir(curdir) def runCommandWithSetup(self,command=None): self.__setup() self.runCommand(command,self.options["selected_solution"]) self.__outputCommand() def runCommand(self,command=None,solution=None): """ This is the most generic interface. It just takes a string as a command and tries to run it. """ global demo_killed,alarm_demo,demo_max_time gc.collect() if command is None: if not(self.options["command"] is None): command = self.options["command"] else: raise AUTOExceptions.AUTORuntimeError("No command set") else: self.options["command"] = command alarm_demo = self.options["dir"] if demo_max_time > 0 and hasattr(signal,"alarm"): signal.alarm(demo_max_time) if hasattr(os,"times"): user_time = os.times()[2] command = os.path.expandvars(command) if self.options["makefile"] is None and sys.stdout is sys.__stdout__: try: status = self.__runCommand_noredir(command, solution) except KeyboardInterrupt: if hasattr(signal, 'SIGINT'): status = -signal.SIGINT else: status = 1 except OSError: if hasattr(signal, 'SIGKILL'): status = -signal.SIGKILL else: status = 1 else: status = self.__runCommand_redir(command, solution) if hasattr(signal,"alarm"): signal.alarm(0) if hasattr(os,"times"): user_time = os.times()[2] else: user_time = 1.0 if status != 0: # in case of error, write constants to fort.2 to enable # easier debugging. if solution is not None: f = open('fort.2', 'w') self.__write_constants_solution(f, solution) f.close() if status < 0: status = abs(status) for s in signals: if hasattr(signal,s) and status == getattr(signal,s): raise AUTOExceptions.AUTORuntimeError(signals[s]) raise AUTOExceptions.AUTORuntimeError("Signal %d\n"%status) raise AUTOExceptions.AUTORuntimeError("Error running AUTO") def __write_constants_solution(self, f, solution): solution.c.write(f,new=True) f.write("s='/'\n") if hasattr(f, 'buffer'): f = f.buffer solution.write(f,mlab=True) def __runCommand_noredir(self,command,solution=None): sys.stdout.flush() args = shlex.split(os.path.expandvars(command)) if solution is None: if "subprocess" in sys.modules: return subprocess.call(args) elif hasattr(os,"spawnlp"): return os.spawnlp(os.P_WAIT, args[0], *args) else: return os.system(command) if "subprocess" in sys.modules: obj = subprocess.Popen(args, stdin=subprocess.PIPE, universal_newlines=True) stdin = obj.stdin else: stdin = os.popen(command, "w") status = 0 self.__write_constants_solution(stdin, solution) stdin.close() if "subprocess" in sys.modules: status = obj.wait() return status def __runCommand_redir(self,command,solution=None): global demo_killed tmp_out = [] if "subprocess" in sys.modules or hasattr(popen2,"Popen3"): # The command runs here. # This is done as the object version so I can use the "poll" method # later on to see if it is still running. if "subprocess" in sys.modules: args = shlex.split(os.path.expandvars(command)) demo_object = self.__popen(args, subprocess.PIPE, subprocess.PIPE) stdin, stdout, stderr = (demo_object.stdin, demo_object.stdout, demo_object.stderr) teststatus = None else: demo_object = popen2.Popen3(command,1,1) stdin, stdout, stderr = (demo_object.tochild, demo_object.fromchild, demo_object.childerr) teststatus = -1 if solution is not None: self.__write_constants_solution(stdin, solution) stdin.close() status = demo_object.poll() while status == teststatus: try: line = stdout.readline() sys.stdout.write(line) sys.stdout.flush() tmp_out.append(line) except IOError: demo_killed = 1 status = demo_object.poll() else: stdout, stdin, stderr = popen2.popen3(command) self.__write_constants_solution(stdin, solution) stdin.close() status = 0 line = stdout.readline() # Read the rest of the data from stdout while len(line) > 0: tmp_out.append(line) sys.stdout.write(line) sys.stdout.flush() line = stdout.readline() self.__analyseLog("".join(tmp_out)) sys.stderr.write(stderr.read()) stdout.close() stderr.close() return status def __outputCommand(self): # Check to see if output files were created. # If not, there must have been an error if (not os.path.isfile(self.fort7_path) or os.path.getsize(self.fort7_path) == 0 or not os.path.isfile(self.fort8_path) or not os.path.isfile(self.fort9_path)): f = open('fort.2', 'w') self.__write_constants_solution(f, self.options["selected_solution"]) f.close() raise AUTOExceptions.AUTORuntimeError("Error running AUTO") def test(): log = StringIO() stdout = sys.stdout class teeStringIO(object): def write(self,s): stdout.write(s) log.write(s) def flush(self): stdout.flush() class quiet(object): def write(self,s): pass def flush(self): pass runner = runAUTO(clean="yes",log=teeStringIO(),err=quiet(), makefile="", demos_dir=os.path.join(os.environ["AUTO_DIR"],"python")) runner.runDemo("wav") stdout.write(log.getvalue()+"\n") log.truncate(0) runner.config(equation="clean",log=log) runner.runDemo("wav") stdout.write(log.getvalue()+"\n") log.truncate(0) runner.config(equation="first") runner.runDemo("wav") stdout.write(log.getvalue()+"\n") runner.config(log=None, err=None) if __name__ == "__main__": #Parse command line arguements opts_list,args=getopt.getopt(sys.argv[1:],"l:") opts={} for x in opts_list: opts[x[0]]=x[1] log = None err = None if "-l" in opts: log = open(opts["-l"],"w") err = open(opts["-l"]+"errors","w") runner = runAUTO() if len(args) == 0: test() if len(args) == 1: runner.runDemo(args[0],log=log,err=err) if len(args) == 2: runner.runDemo(args[0],part=args[1],log=log,err=err) auto/07p/python/auto/parseS.py0000750000175000017500000013065313570013207014354 0ustar sksk#! /usr/bin/env python # Visualization for Bifurcation Manifolds # Copyright (C) 1997 Randy Paffenroth and John Maddocks # # This library is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public # License as published by the Free Software Foundation; either # version 2 of the License, or (at your option) any later version. # # This library is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this library; if not, write to the Free # Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, # MA 02111-1307, USA import os import sys import struct try: from UserDict import UserDict from UserList import UserList except ImportError: #Python 3 from collections import UserDict, UserList try: file except NameError: #Python 3 from io import IOBase as file from auto import AUTOExceptions import copy from auto import parseB from auto import parseC from auto import Points import gzip from auto import AUTOutil from auto.AUTOutil import format19_10E3 import types # End of data exception definition class PrematureEndofData(Exception): pass class IncorrectHeaderLength(Exception): pass # This is the number of parameters. Should be read from auto.h... # This is not required anymore in AUTO97, since the last entry in # the header line is this number NPAR = 20 class fileS(object): def __init__(self, filename): if isinstance(filename, str): inputfile = AUTOutil.openFilename(filename,"rb") else: inputfile = filename self.inputfile = inputfile self.name = inputfile.name self.solutions = [] # We now go through the file and read the solutions. prev = None # for fort.8 we need to read everything into memory; otherwise load the # data on demand from disk when we really need it # on Windows always load everything because deleting open files is # impossible there inmemory = (os.path.basename(inputfile.name) == 'fort.8' or sys.platform in ['cygwin', 'win32']) while len(inputfile.read(1)) > 0: line = inputfile.readline() if not line: raise PrematureEndofData try: header = list(map(int, line.split())) except ValueError: raise PrematureEndofData if len(header) < 10: raise PrematureEndofData if len(header) == 10: # This is the case for AUTO94 and before header = header + [NPAR] numLinesPerEntry = header[8] start_of_data = inputfile.tell() if prev is not None and all( [header[i] == prevheader[i] for i in [4, 6, 7, 8, 11]]): # guess the end from the previous solution end += inputfile.tell() - prev # See if the guess for the solution end is correct inputfile.seek(end) data = inputfile.readline().split() # This is where we detect the end of the file if len(data) == 0: data = inputfile.read(1) if len(data) != 0: try: # Check length of line... if len(data) != 12 and len(data) != 16: raise IncorrectHeaderLength # and the fact they are all integers map(int,data) # and the fact that NCOL*NTST+1=NTPL if int(data[9])*int(data[10])+1 != int(data[6]): end = None # If it passes all these tests we say it is a header line # and we can read quickly except: # otherwise the guessed end is not valid end = None else: end = None data = None if end is None: # We skip the correct number of lines in the entry to # determine its end. inputfile.seek(start_of_data) if inmemory: data = "".encode("ascii").join([inputfile.readline() for i in range(numLinesPerEntry)]) else: for i in range(numLinesPerEntry): inputfile.readline() end = inputfile.tell() elif inmemory: inputfile.seek(start_of_data) data = inputfile.read(end - start_of_data) else: inputfile.seek(end) if data is None: data = (start_of_data, end) self.solutions.append({'header': header, 'data': data}) prev = start_of_data prevheader = header def readstr(self, i): solution = self.solutions[i] data = solution['data'] if not isinstance(data, tuple): return data start = data[0] end = data[1] self.inputfile.seek(start) solution['data'] = self.inputfile.read(end - start) return solution['data'] def readfloats(self, i, total): if not Points.numpyimported: Points.importnumpy() N = Points.N data = self.readstr(i) if hasattr(N, "ndarray") and isinstance(data, N.ndarray): return data fromstring = Points.fromstring if fromstring: fdata = [] if "D".encode("ascii") not in data: fdata = fromstring(data, dtype=float, sep=' ') if fdata == [] or len(fdata) != total: fdata = N.array(map(parseB.AUTOatof, data.split()), 'd') else: #make sure the last element is correct #(fromstring may not do this correctly for a #string like -2.05071-106) fdata[-1] = parseB.AUTOatof( data[data.rfind(" ".encode("ascii"))+1:].strip()) else: data = data.split() try: fdata = N.array(map(float, data), 'd') except ValueError: fdata = N.array(map(parseB.AUTOatof, data), 'd') if total != len(fdata): raise PrematureEndofData del self.solutions[i]['data'] self.solutions[i]['data'] = fdata return fdata def conditionalclose(self): # if everything is in memory, close the file for s in self.solutions: if isinstance(s['data'], tuple): return self.inputfile.close() # The parseS class parses an AUTO fort.8 file # THESE EXPECT THE FILE TO HAVE VERY SPECIFIC FORMAT! # it provides 4 methods: # read and write take as an arguement either and input or output # stream (basically any object with has the method "readline" # for reading and "write" for writing) # # readFilename and writeFilename take as an arguement a filename # in which to read/write the parameters (basically it opens the # file and then calles "read" or "write" # # Once the data is read in the class provides a list all the points # in the fort.8 file. class parseS(list): def __init__(self,filename=None): if isinstance(filename, str): list.__init__(self) self.readFilename(filename) else: if filename is None: list.__init__(self) else: list.__init__(self,filename) def __str__(self): rep = "" rep = rep + "Number of solutions: " + str(len(self)) + "\n" labels = self.getLabels() rep = rep + "Labels: " for label in labels: rep = rep + str(label) + " " rep = rep + "\n" return rep def __call__(self,label=None): return self.getLabel(label) def load(self,**kw): """Load solution with the given AUTO constants. Returns a shallow copy with a copied set of updated constants """ irs = kw.get("IRS") if irs is None: irs = (kw.get("constants") or {}).get("IRS") sol = None if irs is not None: if irs != 0: try: sol = self(irs) except KeyError: pass elif len(self) > 0: sol = self[-1] else: raise AUTOExceptions.AUTORuntimeError( "Cannot start from empty solution list.") if sol is None: sol = AUTOSolution() return sol.load(**kw) # This function needs a little explanation # It trys to read a new point from the input file, and if # it cannot (because the file ends prematurely) is sets the # file pointer back to the way it was when it started and returns # This will be used to check a file to see if it has a new point # and it will ignore a partially created solution. # Basically it for an VBM kind of program. def tryNextPointRead(self,inputfile): current_position = inputfile.tell() try: self.append(AUTOSolution(inputfile,name=inputfile.name)) except PrematureEndofData: inputfile.seek(current_position) def read(self,inputfile=None): # We now go through the file and read the solutions. if inputfile is None: # read everything into memory for solution in self: solution.read() return if not isinstance(inputfile, fileS): inputfile = fileS(inputfile) for i in range(len(inputfile.solutions)): solution = AUTOSolution(inputfile,i,inputfile.name) self.append(solution) if len(self) > 0: mbr, mlab = 0, 0 for d in self: if d["BR"] > mbr: mbr = d["BR"] if d["LAB"] > mlab: mlab = d["LAB"] for d in self: d._mbr, d._mlab = mbr, mlab def write(self,output,mlab=False): for i in range(len(self)): x = self[i] if i == len(self) - 1: # maybe write a header after the last solution so that AUTO can # pickup a new branch and solution label number x.write(output,mlab) else: x.write(output) output.flush() def readFilename(self,filename): inputfile = fileS(filename) self.read(inputfile) inputfile.conditionalclose() # else don't close but garbage collect def writeFilename(self,filename,append=False,mlab=False): # read all solutions because we may overwrite self.read() if append: output = open(filename,"ab") else: output = open(filename,"wb") self.write(output,mlab) output.close() # Removes solutions with the given labels or type name def deleteLabel(self,label=None,keep=0): if label is None: label = [lab for lab in parseB.all_point_types if lab not in ["No Label", "RG", "UZ"]] if isinstance(label, (str, int)): label = [label] indices = [] for i in range(len(self)): x = self[i] if ((not keep and (x["Label"] in label or x["Type name"] in label) or (keep and not x["Label"] in label and not x["Type name"] in label))): indices.append(i) indices.reverse() for i in indices: del self[i] if len(self) > 0: maxlab = max(self.getLabels()) for d in self: d._mlab = maxlab # Relabels the first solution with the given label def relabel(self,old_label=None,new_label=None): if old_label is None and new_label is None: i = 1 new = parseS() for d in self: news = d.__class__(d) news["LAB"] = i news._mlab = len(self) i = i + 1 new.append(news) return new if isinstance(old_label, int): old_label = [old_label] new_label = [new_label] for j in range(len(old_label)): for d in self: if d["Label"] == old_label[j]: d["Label"] = new_label[j] if len(self) > 0: maxlab = max(self.getLabels()) for d in self: d._mlab = maxlab # Make all labels in the file unique and sequential def uniquelyLabel(self): i = 1 for d in self: d["Label"] = i d._mlab = len(self) i = i + 1 # Given a label, return the correct solution def getLabel(self,label): if label is None: return self if isinstance(label, int): for d in self: if d["Label"] == label: return d raise KeyError("Label %s not found"%label) if isinstance(label, str) and len(label) > 2 and label[-1].isdigit(): j = 2 if not label[2].isdigit(): j = 3 number = int(label[j:]) i = 0 for d in self: if d["Type name"] == label[:j]: i = i + 1 if i == number: return d raise KeyError("Label %s not found"%label) if isinstance(label, types.FunctionType): # accept a user-defined boolean function f = label cnt = getattr(f,"func_code",getattr(f,"__code__",None)).co_argcount if cnt == 1: # function takes just one parameter s = [s for s in self if f(s)] elif cnt == 2: # function takes two parameters: compare all solutions # with each other indices = set([]) for i1, s1 in enumerate(self): if i1 in indices: continue for i2 in range(i1+1,len(self)): if i2 not in indices and f(s1, self[i2]): indices.add(i2) s = [self[i] for i in sorted(indices)] else: raise AUTOExceptions.AUTORuntimeError( "Invalid number of arguments for %s."%f.__name__) return self.__class__(s) if not AUTOutil.isiterable(label): label = [label] data = [] counts = [0]*len(label) for d in self: ap = None if d["Label"] in label or d["Type name"] in label: ap = d for i in range(len(label)): lab = label[i] j = 2 if len(lab) > 2 and not lab[2].isdigit(): j = 3 if (isinstance(lab, str) and len(lab) > j and d["Type name"] == lab[:j]): counts[i] = counts[i] + 1 if counts[i] == int(lab[j:]): ap = d if ap is not None: data.append(ap) return self.__class__(data) def getIndex(self,index): return self[index] # Return a list of all the labels in the file. def getLabels(self): return [x["Label"] for x in self] # an old-style point and point keys within an AUTOSolution class SLPointKey(UserList): def __init__(self, solution=None, index=None, coords=None): if coords=="u dot": self.solution = solution["udotps"] else: self.solution = solution self.index = index def __getattr__(self, attr): if attr == 'data': return [point[self.index] for point in self.solution.coordarray] raise AttributeError(attr) def __setitem__(self, i, item): self.solution.coordarray[i,self.index] = item def __str__(self): return str(self.data) def append(self, item): self.enlarge(1) self.solution.coordarray[-1,self.index] = item self.data.append(item) def extend(self, other): self.enlarge(len(other)) for i in range(len(other)): self.solution.coordarray[-len(other)+i,self.index] = other[i] def enlarge(self, ext): # enlarges the dimension of coordarray and coordnames s = self.solution if s._dims is None: s._dims = [s.dimension]*len(s) s0 = s.coordnames[0] s.extend([s0[0:s0.find('(')+1]+str(s.dimension+i+1)+')' for i in range(ext)]) s._dims[self.index] = s.dimension if min(s._dims) == max(s._dims): s._dims = None class SLPoint(Points.Point): def __init__(self, p, solution=None, index=None): Points.Point.__init__(self, p) self.index = index self.solution = solution def __contains__(self, key): return key in ["u", "u dot", "t"] or Points.Point.has_key(self,key) def has_key(self, key): return self.__contains__(key) def __getitem__(self, coords): if coords == "t": return self.solution.indepvararray[self.index] if coords in ["u", "u dot"]: return SLPointKey(self.solution, self.index, coords) return Points.Point.__getitem__(self, coords) def __setitem__(self, coords, item): if coords == 't': self.solution.indepvararray[self.index] = item Points.Point.__setitem__(self, coords, item) def __str__(self): return str({ "t" : self["t"], "u" : self["u"], "u dot" : self["u dot"]}) __repr__ = __str__ class AUTOParameters(Points.Point): def __init__(self, kwd=None, **kw): if isinstance(kwd, self.__class__): for k,v in kwd.__dict__.items(): self.__dict__[k] = v return if kwd is None and kw == {}: self.coordnames = [] self.dimension = 0 return coordnames = kw.get("coordnames",[])[:] if "coordarray" in kw: coordarray = kw["coordarray"] if len(coordarray) < len(coordnames): kw["coordarray"] = (list(coordarray) + (len(coordnames)-len(coordarray)) * [0.0]) for i in range(len(coordnames),len(coordarray)): coordnames.append("PAR(%d)"%(i+1)) kw["coordtype"] = Points.float64 kw["coordnames"] = coordnames Points.Point.__init__(self,kwd,**kw) def __call__(self,index): return self.coordarray[index-1] def __str__(self): rep = [] for i in range(1,len(self)+1,5): j = min(i+4,len(self)) line = "PAR(%-7s "%("%d:%d):"%(i,j)) for k in range(i,j+1): if self.coordnames[k-1] != "PAR(%d)"%k: for k in range(i,j+1): line += " %-15s"%self.coordnames[k-1] rep.append(line) line = 12*" " break line += "".join([format19_10E3(self(k)) for k in range(i,j+1)]) rep.append(line) return "\n".join(rep) # The AUTOsolution class parses an AUTO fort.8 file # THESE EXPECT THE FILE TO HAVE VERY SPECIFIC FORMAT! # it provides 4 methods: # read and write take as an argument either and input or output # stream (basically any object with has the method "readline" # for reading and "write" for writing) # # readFilename and writeFilename take as an argument a filename # in which to read/write the parameters (basically it opens the # file and then calles "read" or "write" # # Used by itself is only reads in ONE solution from the file # for example readFilename will only read the first solution # Commonly it will be used in a container class only using the # read and write methods and letting the outside class take care # of opening the file. class AUTOSolution(UserDict,Points.Pointset): data_keys = set(["PT", "BR", "TY number", "TY", "LAB", "ISW", "NTST", "NCOL", "Active ICP", "rldot", "udotps", "NPARI", "NDIM", "IPS", "IPRIV"]) long_data_keys = { "Parameters": "p", "parameters": "p", "Parameter NULL vector": "rldot", "Free Parameters": "Active ICP", "Point number": "PT", "Branch number": "BR", "Type number": "TY number", "Type name": "TY", "TY name": "TY", "Label": "LAB"} def __init__(self,input=None,index=None,name=None,t=None,**kw): if isinstance(input,self.__class__): for k,v in input.__dict__.items(): self.__dict__[k] = v UserDict.__init__(self,input) else: UserDict.__init__(self) self.c = None self.__input = None self.__fullyParsed = False self._dims = None self._mbr = 0 self._mlab = 0 self.name = name self.data.update({"BR":1, "PT":1, "TY number":9, "LAB":0, "ISW":1, "NTST": 1, "NCOL": 0, "NPARI":0, "NDIM": 0, "IPS": None, "IPRIV":0}) self.indepvarname = 't' self.coordnames = [] self.__parnames = [] if isinstance(input,(file,gzip.GzipFile)): input = fileS(input) if isinstance(input,fileS): self.read(input,index) elif input is not None: self.__readarray(input,t) self.update(**kw) def update(self, dct=None, **kw): par = None if "constants" in kw: self.c = kw["constants"] del kw["constants"] unames = dict(self.c.get("unames") or []) self.coordnames = [unames.get(i+1,'U(%d)'%(i+1)) for i in range(len(self.coordnames))] parlen = len(self.__parnames) parnames = dict(self.c.get("parnames") or []) if parnames != {}: parlen = max(parlen, max(parnames)) par = dict(self.c.get("PAR") or []) for key in par: if key not in parnames.values(): parlen = max(key, parlen) self.__parnames = [parnames.get(i,"PAR(%d)"%i) for i in range(1,parlen+1)] if ((self.name is None or os.path.basename(self.name) == 'fort.8') and self.c.get("e") is not None): self.name = self.c["e"] if self.name is None: self.name = '' if self.__fullyParsed: self.makeIxMaps() self.PAR = AUTOParameters(coordnames=self.__parnames, coordarray=Points.array(self.PAR), name=self.name) if dct is not None: for k,v in dct.items(): self.data[k] = v for k,v in kw.items(): self[k] = v if par is not None and not self.__nodata(): self["PAR"] = par u = self.c.get("U") if u is not None: self["U"] = u def __nodata(self): return self.__input is None and not self.__fullyParsed def __getstate__(self): # For pickle: read everything self.__readAll() return Points.Pointset.__getstate__(self) def __str__(self): self.__readAll() keys = list(self.data) for key in ["BR","PT","LAB","TY number","ISW","NTST","NCOL","NDIM", "IPS","IPRIV","NPARI"]: keys.remove(key) keys.sort() rep=" BR PT TY LAB ISW NTST NCOL" #add corresponding L2-NORM, etc, from fort.7 if self["IPS"] is not None: rep = rep+" NDIM IPS IPRIV" for key in keys: if key not in self.data_keys: rep = rep+"%19s"%key rep=rep+ "\n%4d%6d%4s%5d%4d%5d%5d" % (self["BR"], self["PT"], self["TY"], self["LAB"], self["ISW"], self["NTST"], self["NCOL"]) if self["IPS"] is not None: rep = rep+"%5d%4d%6d"%(self["NDIM"],self["IPS"],self["IPRIV"]) for key in list(keys): if key not in self.data_keys: rep = rep+format19_10E3(self[key]) keys.remove(key) if not self.__nodata(): rep=rep+"\n"+Points.Pointset.__repr__(self) for key in keys: v = self[key] if isinstance(v,Points.Pointset): v = repr(v) elif type(v) not in [type(1),type(1.0),Points.float64,type("")]: v = list(v) if type(v) == type([]) and type(v[0]) not in [type(1),type(1.0), Points.float64]: v = map(str,v) rep=rep+"\n"+str(key)+": "+str(v) if not self.__nodata(): rep=rep+"\n"+str(self.PAR) return rep def __repr__(self): result = id(self) if result < 0: # avoid negative addresses and Python 2.3 warnings result += 256 ** struct.calcsize('P') return "<_=%s instance at %#010x>"%(self.__class__.__name__,result) def __len__(self): return Points.Pointset.__len__(self) def __setitem__(self,key,value): if (type(key) == type("") and not key in self.coordnames and key != self.indepvarname and not key in self.__parnames): shortkey = self.long_data_keys.get(key,key) if shortkey in self.data_keys: if shortkey == "TY": value = parseB.reverse_type_translation(value) shortkey = "TY number" elif shortkey == "BR": self._mbr = 0 elif shortkey == "LAB": self._mlab = 0 self.data[shortkey] = value return if shortkey == "PAR": if type(value) == type({}): value = value.items() for k,v in value: if isinstance(k,str): self.PAR[k] = v else: self.PAR[k-1] = v return if shortkey == "p": self.PAR = AUTOParameters(coordnames=self.__parnames, coordarray=value, name=self.name) return if shortkey == "U": if type(value) == type({}): value = value.items() for i,(k,v) in enumerate(value): if isinstance(k,str): value[i] = self.coordnames.index(k) if len(self.coordarray[0]) > 1: # reduce solution to one point del self.coordarray del self.indepvararray self.coordarray = Points.N.array([[0.0]]*max(dict(value))) self.indepvararray = Points.N.array([0.0]) self.data.update({"NTST": 1, "NCOL": 0}) del self.data["Active ICP"] del self.data["rldot"] del self.data["udotps"] for k,v in value: self.coordarray[k-1,0] = v return try: Points.Pointset.__setitem__(self,key,value) except (TypeError, ValueError, KeyError, IndexError): if self.__nodata(): raise AUTOExceptions.AUTORuntimeError("Unknown option: %s"%key) self.PAR[key] = value def __getitem__(self,key): big_data_keys = ["data","Active ICP","rldot","p","udotps"] if (isinstance(key,str) and key not in self.coordnames and key != self.indepvarname and key not in self.__parnames): shortkey = self.long_data_keys.get(key,key) if shortkey in big_data_keys: self.__readAll() if shortkey in self.data_keys: if shortkey == "TY": return parseB.type_translation( self.data["TY number"])["short name"] return self.data[shortkey] if shortkey == "p": return self.PAR if shortkey == "data": return self if isinstance(key,str) and hasattr(self,"b") and key in self.b: if not self.__fullyParsed or not key in self.PAR: if key not in self.coordnames: return self.b[key] self.__readAll() if isinstance(key, str): try: return Points.Pointset.__getitem__(self,key) except: try: return self.PAR[key] except: return self.data[key] ret = Points.Pointset.__getitem__(self,key) if not isinstance(key, int): return ret return SLPoint(ret, self, key) def __call__(self, p=None, coords=None): if p is None: return(str(self)) return Points.Pointset.__call__(self, p, coords) def __copy__(self): return self.__class__(self) def copy(self): return self.__copy__() def __contains__(self,key): return (key in ["data","TY"] or key in self.long_data_keys or key in self.__parnames or (not self.__fullyParsed and key in self.data_keys) or (self.__fullyParsed and key in self.data) or (hasattr(self,"b") and key in self.b) or Points.Pointset.has_key(self,key)) def has_key(self, key): return self.__contains__(key) def get(self, key, failobj=None): if key in self: return self[key] return failobj def type(self): return parseB.type_translation(self["Type number"])["long name"] def load(self,**kw): """Load solution with the given AUTO constants. Returns a shallow copy with a copied set of updated constants """ constants = kw.get("constants") if "constants" in kw: del kw["constants"] c = parseC.parseC(self.c) datakw = {} for key in self.data_keys: if key in kw and (key not in c or key in ["LAB", "TY"]): datakw[key] = kw[key] if key not in ["LAB", "TY"]: del kw[key] oldirs = c["IRS"] c.update(constants, **kw) if oldirs is not None and c["IRS"] == 0: return AUTOSolution(constants=c, **datakw) if self["LAB"] != 0: c["IRS"] = self["LAB"] return AUTOSolution(self, constants=c, **datakw) def run(self,**kw): """Run AUTO. Run AUTO from the solution with the given AUTO constants. Returns a bifurcation diagram of the result. """ from auto import runAUTO return runAUTO.runAUTO(selected_solution=self.load(**kw)).run() def readAllFilename(self,filename): inputfile = fileS(filename) self.readAll(inputfile) inputfile.close() def readFilename(self,filename): inputfile = fileS(filename) self.read(inputfile) inputfile.conditionalclose() # else don't close the input file but garbage collect def writeFilename(self,filename,mlab=False): output = open(filename,"wb") self.write(output,mlab) output.flush() output.close() def writeRawFilename(self,filename): output = open(filename,"w") self.writeRaw(output) output.flush() output.close() def toArray(self): return [ [vector["t"]] + [point for point in vector["u"]] for vector in self["data"]] def writeRaw(self,output): s = "%24.15E"*(self.coordarray.shape[0]+1) for i in range(self.coordarray.shape[1]): output.write(s%((self.indepvararray[i],)+ tuple(self.coordarray[:,i]))+"\n") def read(self, inputfile=None, index=0): if self.__fullyParsed: return if inputfile is None: # read data into memory self.__input.readstr(self.__index) self.__input.conditionalclose() return if not isinstance(inputfile, fileS): inputfile = fileS(inputfile) self.__input = inputfile self.__index = index self.__readHeader() def readAll(self, inputfile): self.read(inputfile) self.__readAll() def __readHeader(self): header = self.__input.solutions[self.__index]['header'] self.indepvarname = 't' self.__numEntriesPerBlock = header[7] ndim = self.__numEntriesPerBlock-1 if ndim < len(self.coordnames): self.coordnames = self.coordnames[:ndim] for i in range(len(self.coordnames), self.__numEntriesPerBlock-1): self.coordnames.append("U(%d)"%(i+1)) self.update({"NPARI": 0, "NDIM": 0, "IPS": None, "IPRIV": 0}) for i, key in enumerate(["BR", "PT", "TY number", "LAB", "", "ISW", "", "", "", "NTST", "NCOL", "", "NPARI", "NDIM", "IPS", "IPRIV"]): if key and i < len(header): self[key] = header[i] self.__numChangingParameters = header[4] self.__numSValues = header[6] self.__numLinesPerEntry = header[8] self.__numFreeParameters = header[11] def __readAll(self): if self.__fullyParsed or self.__nodata(): return if not Points.numpyimported: Points.importnumpy() fromstring = Points.fromstring N = Points.N self.__fullyParsed = True n = self.__numEntriesPerBlock nrows = self.__numSValues total = n * nrows + self.__numFreeParameters nlinessmall = (((n-1)/7+1) * nrows + (self.__numFreeParameters+6)/7) if self["NTST"] != 0 and self.__numLinesPerEntry > nlinessmall: total += 2 * self.__numChangingParameters + (n-1) * nrows fdata = self.__input.readfloats(self.__index, total) ups = N.reshape(fdata[:n * nrows],(nrows,n)) self.indepvararray = ups[:,0] self.coordarray = N.transpose(ups[:,1:]) j = n * nrows # Check if direction info is given if self["NTST"] != 0 and self.__numLinesPerEntry > nlinessmall: nfpr = self.__numChangingParameters self["Active ICP"] = list(map(int,fdata[j:j+nfpr])) j = j + nfpr self["rldot"] = fdata[j:j+nfpr] j = j + nfpr n = n - 1 self["udotps"] = N.transpose( N.reshape(fdata[j:j+n * self.__numSValues],(-1,n))) udotnames = ["UDOT(%d)"%(i+1) for i in range(self.__numEntriesPerBlock-1)] self["udotps"] = Points.Pointset({ "coordarray": self["udotps"], "coordnames": udotnames, "name": self.name}) self["udotps"]._dims = None j = j + n * nrows self.PAR = fdata[j:j+self.__numFreeParameters] Points.Pointset.__init__(self,{ "indepvararray": self.indepvararray, "indepvarname": self.indepvarname, "coordarray": self.coordarray, "coordnames": self.coordnames, "name": self.name}) self.update() def __readarray(self,coordarray,indepvararray=None): #init from array if not Points.numpyimported: Points.importnumpy() N = Points.N if not hasattr(coordarray[0],'__len__'): # point indepvararray = [0.0] ncol = 0 ntst = 1 coordarray = [[d] for d in coordarray] pararray = [] else: # time + solution if indepvararray is None: indepvararray = coordarray[0] coordarray = coordarray[1:] ncol = 1 ntst = len(indepvararray)-1 t0 = indepvararray[0] period = indepvararray[-1] - t0 if period != 1.0 or t0 != 0.0: #scale to [0,1] for i in range(len(indepvararray)): indepvararray[i] = (indepvararray[i] - t0)/period # set PAR(11) to period pararray = 10*[0.0] + [period] indepvarname = "t" ndim = len(coordarray) coordnames = ["U(%d)"%(i+1) for i in range(ndim)] Points.Pointset.__init__(self,{"indepvararray": indepvararray, "indepvarname": indepvarname, "coordarray": coordarray, "coordnames": coordnames}) self.__fullyParsed = True self.data.update({"NTST": ntst, "NCOL": ncol, "LAB": 1, "NDIM": ndim}) self.__numChangingParameters = 1 self.PAR = pararray def __getattr__(self,attr): if self.__nodata(): raise AUTOExceptions.AUTORuntimeError("Solution without data.") if not self.__fullyParsed and attr != "__del__": self.__readAll() return getattr(self,attr) raise AttributeError(attr) def write(self,output,mlab=False): if self.__nodata(): return try: "".encode("ascii") + "" #write encoded def write_enc(s): output.write(s) except TypeError: #Python 3.0 if hasattr(output, "encoding"): # output is a text stream if os.linesep == "\n": def write_enc(s): output.write(s) else: def write_enc(s): output.write(s.replace(os.linesep, "\n")) else: # output is a binary stream (common case) def write_enc(s): output.write(s.encode("ascii")) if self.__fullyParsed: ndim = len(self.coordarray) npar = len(self["Parameters"]) ntpl = len(self) nrowpr = (ndim//7+1) * ntpl + (npar+6)//7 nfpr = self.__numChangingParameters if "Active ICP" in self.data: nfpr = len(self.get("Active ICP",[0])) nrowpr += (nfpr+19)//20 + (nfpr+6)//7 + (ndim+6)//7 * ntpl else: ndim = self.__numEntriesPerBlock-1 npar = self.__numFreeParameters ntpl = self.__numSValues nfpr = self.__numChangingParameters nrowpr = self.__numLinesPerEntry line = "%6d%6d%6d%6d%6d%6d%8d%6d%8d%5d%5d%5d" % (self["BR"], self["PT"], self["TY number"], self["LAB"], nfpr, self["ISW"], ntpl, ndim+1, nrowpr, self["NTST"], self["NCOL"], npar ) if self["IPS"] is not None: line += "%5d%5d%5d%5d" % (self["NPARI"],self["NDIM"],self["IPS"], self["IPRIV"]) write_enc(line+os.linesep) # If the file isn't already parsed, we can just copy from the input # file into the output file if not self.__fullyParsed: inputsolution = self.__input.readstr(self.__index) if hasattr(output, "encoding") and hasattr(inputsolution, "decode"): inputsolution = inputsolution.decode("ascii") output.write(inputsolution) # Otherwise we do a normal write. NOTE: if the solution isn't already # parsed it will get parsed here. else: slist = [] for i in range(len(self.indepvararray)): slist.append(" "+format19_10E3(self.indepvararray[i])) for j in range(1,len(self.coordarray)+1): if j%7==0: slist.append(os.linesep+" ") slist.append(format19_10E3(self.coordarray[j-1,i])) slist.append(os.linesep) write_enc("".join(slist)) if "Active ICP" in self.data: # Solution contains derivative information. j = 0 for parameter in self["Active ICP"]: write_enc("%5d" % (parameter)) j = j + 1 if j%20==0: write_enc(os.linesep) if j%20!=0: write_enc(os.linesep) line = " " i = 0 for vi in self["rldot"]: num = format19_10E3(vi) if i != 0 and i%7==0: line = line + os.linesep + " " line = line + num i = i + 1 write_enc(line+os.linesep) # write UDOTPS slist = [] c = self["udotps"].coordarray l = len(c) for i in range(len(self.indepvararray)): slist.append(" ") for j in range(len(self.coordarray)): if j!=0 and j%7==0: slist.append(os.linesep+" ") if j 0 or self._mlab > 0) and not ( self._mbr == self["BR"] and self._mlab == self["LAB"]): # header for empty solution so that AUTO can pickup the maximal # label and branch numbers. if self["IPS"] is not None: write_enc("%6d%6d%6d%6d%6d%6d%8d%6d%8d%5d%5d%5d%5d%5d%5d%5d%s"% ((self._mbr, 0, 0, self._mlab) + 12*(0,) + (os.linesep,))) else: write_enc("%6d%6d%6d%6d%6d%6d%8d%6d%8d%5d%5d%5d%s"% ((self._mbr, 0, 0, self._mlab) + 8*(0,) + (os.linesep,))) output.flush() def pointtest(a,b): keys = ['Type number', 'Type name', 'Parameter NULL vector', 'Free Parameters', 'Branch number', 'data', 'NCOL', 'Label', 'ISW', 'NTST', 'Point number', 'Parameters'] # make sure the solutions are fully parsed... scratch=a['Parameters'] scratch=b['Parameters'] for key in keys: if key not in a: raise AUTOExceptions.AUTORegressionError("No %s label"%(key,)) if len(a["data"]) != len(b["data"]): raise AUTOExceptions.AUTORegressionError("Data sections have different lengths") def test(): print("Testing reading from a filename") foo = parseS() foo.readFilename("test_data/fort.8") if len(foo) != 5: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest(foo.getIndex(0),foo.getIndex(3)) print("Testing reading from a stream") foo = parseS() fp = open("test_data/fort.8","rb") foo.read(fp) if len(foo) != 5: raise AUTOExceptions.AUTORegressionError("File length incorrect") pointtest(foo.getIndex(0),foo.getIndex(3)) print("parseS passed all tests") if __name__ == '__main__' : test() auto/07p/python/auto/AUTOCommands.py0000750000175000017500000022057713570013207015356 0ustar sksk#! /usr/bin/env python try: from cStringIO import StringIO import __builtin__ except ImportError: # Python 3 from io import StringIO import builtins as __builtin__ from auto import parseC from auto import parseB from auto import parseS from auto import parseBandS from auto import parseH from auto import bifDiag import os from auto import AUTOutil import sys import glob import shutil SIMPLE=0 EXPERT=1 from auto import AUTOExceptions ############################################# # commands ############################################# def command(f,*args,**kw): # This is a class factory that produces a class that can be used # to make macros of commands. class cmd(object): if len(args) == 2: type = args[0] shortName = args[1] alias = kw.get("alias",[]) fun = staticmethod(f) __doc__ = f.__doc__ def __init__(self,*args,**kw): self.args = args self.kw = kw # The call function must return something that you # can call the "print" function on def __call__(self): return self.fun(*self.args,**self.kw) def undo(self): raise Exception("Undo undefined for this command") return cmd ############################################## # Generic Commands ############################################## def macro(command_list): for command in command_list: command() commandMacro = command(macro) # info messages: override this function or sys.stdout to redirect def info(s): sys.stdout.write(s) # interact with a .exe file def interact(command,*args): if not os.path.exists(command): command = command + '.exe' fullcmd = " ".join([command]+list(args)) if os.spawnv(os.P_WAIT,command, (os.path.basename(command),) + args) != 0: raise AUTOExceptions.AUTORuntimeError("Error running %s"%fullcmd) info("Finished running: " + fullcmd + "\n") ############################################## # Script based commands from $AUTO_DIR/97/cmds ############################################## def clean(): """Clean the current directory. Type FUNC() to clean the current directory. This command will delete all files of the form fort.*, *.*~, *.o, and *.exe. """ toclean = (glob.glob("fort.*") + glob.glob("*.o") + glob.glob("*.exe")+ glob.glob("*.*~")) # remove duplicates files = [] for f in toclean: if f not in files: files.append(f) for f in files: os.remove(f) info("Deleting fort.* *.o *.exe *.*~ ... done\n") commandClean = command(clean,alias=['cl']) def copydemo(name): """Copy a demo into the current directory. Type FUNC('xxx') to copy all files from auto/07p/demos/xxx to the current user directory. Here 'xxx' denotes a demo name; e.g., 'abc'. To avoid the overwriting of existing files, always run demos in a clean work directory. """ demodir = os.path.join(os.environ["AUTO_DIR"],"demos",name) for f in glob.glob(os.path.join(demodir,"*")): if os.path.isdir(f): subdir = f[len(demodir)+len(os.sep):] try: os.remove(subdir) except OSError: pass try: os.mkdir(subdir) except OSError: pass for f2 in glob.glob(os.path.join(f,"*")): try: shutil.copy(f2, subdir) except IOError: pass try: shutil.copy(f, ".") except IOError: pass if (os.path.exists(os.path.join(demodir,"c.%s.1"%name)) and not os.path.exists(os.path.join(demodir,"c.%s"%name))): shutil.copy("c.%s.1"%name,"c.%s"%name) info("Copying demo %s ... done\n"%name) commandCopyDemo = command(copydemo,SIMPLE,"demo") def demo(name,runner=None): """Copy a demo into the current directory and load it. Type FUNC('xxx') to copy all files from auto/07p/demos/xxx to the current user directory. Here 'xxx' denotes a demo name; e.g., 'abc'. To avoid the overwriting of existing files, always run demos in a clean work directory. NOTE: This command automatically performs the load command as well. """ runner = withrunner(runner) lst = [commandCopyDemo(name)] slash = name.rfind("/") if slash != -1: name = name[slash+1:] lst.append(commandRunnerLoadName(name,runner)) return macro(lst) commandCopyAndLoadDemo = command(demo,alias=['dm']) def df(): """Clear the current directory of fort files. Type FUNC() to clean the current directory. This command will delete all files of the form fort.*. """ toclean = glob.glob("fort.*") for f in toclean: os.remove(f) info("Deleting fort.* ... done\n") commandDeleteFortFiles = command(df,alias=['deletefort']) def us(name,templates=None): """Convert user-supplied data files. Type FUNC('xxx') to convert a user-supplied data file 'xxx.dat' to AUTO format. The converted file is called 's.dat'. The original file is left unchanged. AUTO automatically sets the period in PAR(11). Other parameter values must be set in 'STPNT'. (When necessary, PAR(11) may also be redefined there.) The constants-file file 'c.xxx' must be present, as the AUTO-constants 'NTST' and 'NCOL' are used to define the new mesh. For examples of using the 'userData' command see demos 'lor' and 'pen' (where it has the old name 'fc'). Note: this technique has been obsoleted by the 'dat' AUTO constant. """ info("Starting conversion of %s.dat : \n"%name) if glob.glob("%s.f90"%name) == []: if glob.glob("%s.f"%name) == []: equation_file="%s.c"%name else: equation_file="%s.f"%name else: equation_file="%s.f90"%name cfile = applyTemplate(name,"constants",templates) datfile = "%s.dat"%name info("(Required files : %s, %s, %s)\n"%(equation_file,cfile, datfile)) import runAUTO fconrun = runAUTO.runAUTO(makefile="$AUTO_DIR/cmds/cmds.make fcon") fconrun.config(e=name) fconrun.runMakefile(name) if os.path.exists(cfile): shutil.copy(cfile,"fort.2") if os.path.exists(datfile): shutil.copy(datfile,"fort.3") interact("./fcon") sfile = applyTemplate("dat","solution",templates) if os.path.exists("fort.8"): if os.path.exists(sfile): os.remove(sfile) os.rename("fort.8",sfile) info("Conversion done : converted file saved as %s\n"%sfile) files = glob.glob("fcon*") + ["fort.2", "fort.3"] for f in files: os.remove(f) commandUserData = command(us,alias=['userdata']) ############################################## # Commands which use the filename templates ############################################## def applyTemplate(text,template,templates=None): if templates is None: templates = {} templates["equation"] = "EQUATION_NAME=%s" templates["constants"] = "c.%s" templates["bifurcationDiagram"] = "b.%s" templates["solution"] = "s.%s" templates["diagnostics"] = "d.%s" templates["homcont"] = "h.%s" if text is None: return None elif type(text) in [type(""), type(1), type(1.0)]: rval = templates[template]%text tmp = glob.glob(rval) if len(tmp) > 0: rval = "" for x in tmp: rval = rval + x + " " rval = rval.strip() return rval else: return text def filenameTemplate(name=None,templates=None): name1={} name1["constants"] = applyTemplate(name,"constants",templates) name1["bifurcationDiagram"] = applyTemplate(name,"bifurcationDiagram",templates) name1["solution"] = applyTemplate(name,"solution",templates) name1["diagnostics"] = applyTemplate(name,"diagnostics",templates) return name1 def relabel(name1=None,name2=None,templates=None): """Relabel data files. Type y=FUNC(x) to return the python object x, with the solution labels sequentially relabelled starting at 1, as a new object y. Type FUNC('xxx') to relabel s.xxx and b.xxx. Backups of the original files are saved. Type FUNC('xxx','yyy') to relabel the existing data-files s.xxx and b.xxx, and save them to s.yyy and b.yyy; d.xxx is copied to d.yyy. """ typen = type(name1) if type(name1) == type(""): name1 = filenameTemplate(name1,templates) name2 = filenameTemplate(name2,templates) if typen != type("") and typen != type(None): data = name1.relabel() info("Relabeling done\n") return data n1b = name1["bifurcationDiagram"] n1s = name1["solution"] n1d = name1["diagnostics"] if n1b is None and n1s is None and n1d is None: n1b, n1s, n1d = "fort.7", "fort.8", "fort.9" if name2["bifurcationDiagram"] is None: n2b = n1b+'~~' n2s = n1s+'~~' n2d = n1d+'~~' else: n2b = name2["bifurcationDiagram"] n2s = name2["solution"] n2d = name2["diagnostics"] from auto.relabel import relabel relabel(n1b,n1s,n2b,n2s) if os.access(n2b,os.F_OK): if name2["bifurcationDiagram"] is None: # Save backups if os.access(n1b+'~',os.F_OK): os.remove(n1b+'~') os.rename(n1b,n1b+'~') os.rename(n2b,n1b) if os.access(n1s+'~',os.F_OK): os.remove(n1s+'~') os.rename(n1s,n1s+'~') os.rename(n2s,n1s) elif os.path.exists(n1d): shutil.copy(n1d, n2d) info("Relabeling succeeded\n") info("Relabeling done\n") commandRelabel = command(relabel,SIMPLE,"relabel",alias=['rl']) def merge(name1=None,name2=None,templates=None): """Merge branches in data files. Type y=FUNC(x) to return the python object x, with its branches merged into continuous curves, as a new object y. Type FUNC('xxx') to merge branches in s.xxx, b.xxx, and d.xxx. Backups of the original files are saved. Type FUNC('xxx','yyy') to merge branches in the existing data-files s.xxx, b.xxx, and d.xxx and save them to s.yyy, b.yyy, and d.yyy. """ ntype = type(name1) if type(name1) == type(""): name1 = filenameTemplate(name1,templates) name2 = filenameTemplate(name2,templates) if ntype != type("") and ntype != type(None): data = name1.merge() info("Merge done\n") return data n1b = name1["bifurcationDiagram"] n1s = name1["solution"] n1d = name1["diagnostics"] if n1b is None and n1s is None and n1d is None: n1b, n1s, n1d = "fort.7", "fort.8", "fort.9" bd = bifDiag.bifDiag(n1b,n1s,n1d) bd = bd.merge() if name2["bifurcationDiagram"] is None: n2b = n1b+'~~' n2s = n1s+'~~' n2d = n1d+'~~' else: n2b = name2["bifurcationDiagram"] n2s = name2["solution"] n2d = name2["diagnostics"] bd.writeFilename(n2b,n2s,n2d) if os.access(n2b,os.F_OK): if name2["bifurcationDiagram"] is None: # Save backups for [n1,n2] in [[n1b,n2b],[n1s,n2s],[n1d,n2d]]: if os.access(n1+'~',os.F_OK): os.remove(n1+'~') os.rename(n1,n1+'~') os.rename(n2,n1) info("Merging succeeded\n") info("Merging done\n") commandMergeBranches = command(merge,SIMPLE,"merge",alias=['mb']) def subtract(name1,name2,col,branch=1,point=1,templates=None): """Subtract branches in data files. Type z=FUNC(x,y,ref) to return the python object x, where, using interpolation, the first branch in y is subtracted from all branches in x, as a new object z. Use 'ref' (e.g., 'PAR(1)') as the reference column in y (only the first monotonically increasing or decreasing part is used). Type FUNC('xxx','yyy','ref') to subtract, using interpolation, the first branch in b.yyy from all branches in b.xxx, and save the result in b.xxx. A Backup of the original file is saved. Use optional arguments branch=m, and point=n, to denote the branch and first point on that branch within y or 'b.yyy', where m,n are in {1,2,3,...}. """ ntype = type(name1) if type(name1) == type(""): name1 = filenameTemplate(name1,templates) name2 = filenameTemplate(name2,templates) if ntype != type(""): sub = name1.subtract(name2[branch-1],col,point) info("Subtracting done\n") return sub else: n1b = name1["bifurcationDiagram"] bd1 = bifDiag.bifDiag(n1b) n2b = name2["bifurcationDiagram"] if n1b == n2b: bd2 = bd1 else: bd2 = bifDiag.bifDiag(n2b) sub = bd1.subtract(bd2[branch-1],col,point) shutil.copy(n1b,n1b+'~') sub.writeFilename(n1b,'') info("Subtracting done\n") commandSubtractBranches = command(subtract,SIMPLE,"subtract",alias=['sb']) def append(name1,name2=None,templates=None): """Append data files. Type FUNC(x,'xxx') to append bifurcation diagram x to the data-files b.xxx, s.xxx, and d.xxx. This is equivalent to the command save(x+load('xxx'),'xxx') Type FUNC('xxx',x) to append existing data-files s.xxx, b.xxx, and d.xxx to bifurcation diagram x. This is equivalent to the command x=load('xxx')+x Type FUNC('xxx') to append the output-files fort.7, fort.8, fort.9, to existing data-files s.xxx, b.xxx, and d.xxx. Type FUNC('xxx','yyy') to append existing data-files s.xxx, b.xxx, and d.xxx to data-files s.yyy, b.yyy, and d.yyy. """ parsed1=None parsed2=None if isinstance(name1, bifDiag.bifDiag): parsed1=name1 name1=name2 name2=None if isinstance(name1, bifDiag.bifDiag): parsed2=name1 else: name1 = filenameTemplate(name1,templates) name2 = filenameTemplate(name2,templates) if parsed1 or parsed2: n = None if not parsed1 or not parsed2: nb = name1["bifurcationDiagram"] ns = name1["solution"] nd = name1["diagnostics"] if parsed2: #append to parsed2 if not parsed1: parsed1 = bifDiag.bifDiag(nb,ns,nd) info("Appending from %s, %s and %s ... done\n"%(nb,ns,nd)) parsed2.extend(parsed1) return if parsed1: #append from parsed1 to file parsed1.writeFilename(nb,ns,nd,append=True) info("Appending to %s, %s and %s ... done\n"%(nb,ns,nd)) return i = 7 for s in ["bifurcationDiagram","solution","diagnostics"]: n1 = name1[s] n2 = name2[s] if n2 is None: n2 = n1 n1 = "fort."+str(i) i = i+1 try: f1 = open(n1,"rb") f2 = open(n2,"ab") while 1: buf = f1.read(1024*1024) if len(buf) == 0: break f2.write(buf) f1.close() f2.close() info("Appending %s to %s ... done\n"%(n1,n2)) except IOError: info("Appending %s to %s: %s\n"%(n1,n2,sys.exc_info()[1])) commandAppend = command(append,SIMPLE,"append",alias=['ap']) def dirfilenames(name1,name2,name3,name4): """Convert arguments to directories and names for copy() and move()""" dir1 = "" dir2 = "" if os.path.isdir(name1): dir1 = name1 name1 = name2 if name4 is not None: dir2 = name3 name2 = name4 elif name3 is not None: name2 = name3 elif os.path.isdir(name2): dir2 = name2 if name3 is not None: name2 = name3 else: name2 = name1 return dir1,name1,dir2,name2 def copy(name1,name2,name3=None,name4=None,templates=None): """Copy data files. Type FUNC(name1,name2) or FUNC(name1,name2,name3) or FUNC(name1,name2,name3,name4). Copy the data-files dir1/c.xxx, dir1/b.xxx, dir1/s.xxx, and dir1/d.xxx to dir2/c.yyy, dir2/b.yyy, dir2/s.yyy, and dir2/d.yyy. The values of dir1/?.xxx and dir2/?.yyy are as follows, depending on whether name1 is a directory or name2 is a directory: FUNC(name1,name2) no directory names: ./?.name1 and ./?.name2 name1 is a directory: name1/?.name2 and ./?.name2 name2 is a directory: ./?.name1 and name2/?.name1 FUNC(name1,name2,name3) name1 is a directory: name1/?.name2 and ./?.name3 name2 is a directory: ./?.name1 and name2/?.name3 FUNC(name1,name2,name3,name4) name1/?.name2 and name3/?.name4 """ dir1, name1, dir2, name2 = dirfilenames(name1,name2,name3,name4) names1 = filenameTemplate(name1,templates) names2 = filenameTemplate(name2,templates) done = False for s in ["bifurcationDiagram","solution","diagnostics","constants"]: n1 = os.path.join(dir1,names1[s]) n2 = os.path.join(dir2,names2[s]) if os.path.exists(n1): shutil.copy(n1,n2) info("Copying %s to %s ... done\n"%(n1,n2)) done = True if not done: raise AUTOExceptions.AUTORuntimeError( "Copying: no files found for %s and %s"%( os.path.join(dir1,"[bsdc]."+name1), os.path.join(dir2,"[bsdc]."+name2))) commandCopyDataFiles = command(copy,alias=['cp']) def save(name1,name2=None,templates=None): """Save data files. Type FUNC(x,'xxx') to save bifurcation diagram x to the files b.xxx, s.xxx, d.xxx. Existing files with these names will be overwritten. If x is a solution, a list of solutions, or does not contain any bifurcation diagram or diagnostics data, then only the file s.xxx is saved to. Type FUNC('xxx') to save the output-files fort.7, fort.8, fort.9, to b.xxx, s.xxx, d.xxx. Existing files with these names will be overwritten. """ parsed = None if not name2 is None: parsed = name1 name1 = name2 name1 = filenameTemplate(name1,templates) for s in ["bifurcationDiagram","solution","diagnostics"]: n1 = name1[s] if os.path.exists(n1): shutil.copy(n1,n1+'~') if parsed: n1b = name1["bifurcationDiagram"] n1s = name1["solution"] n1d = name1["diagnostics"] if (type(parsed) == type([]) and isinstance(parsed[0], parseB.AUTOBranch)): parsed = bifDiag.bifDiag(parsed) if (isinstance(parsed,bifDiag.bifDiag) and len(parsed) > 0 and len(parsed[0]) > 0): parsed.writeFilename(n1b,n1s,n1d) msg = "Saving to %s and %s ... done\n"%(n1b,n1s) for d in parsed: if hasattr(d,"diagnostics"): msg = "Saving to %s, %s, and %s ... done\n"%(n1b,n1s,n1d) break else: if (type(parsed) == type([]) and isinstance(parsed[0], parseS.AUTOSolution)): parsed = parseS.parseS(parsed) parsed.writeFilename(n1s) msg = "Saving to %s ... done\n"%(n1s) info(msg) return i = 7 for s in ["bifurcationDiagram","solution","diagnostics"]: n1 = name1[s] forti = "fort." + str(i) i = i + 1 if os.path.exists(forti): shutil.copy(forti,n1) info("Saving %s as %s ... done\n"%(forti,n1)) commandCopyFortFiles = command(save,SIMPLE,"save",alias=['sv']) def delete(name,templates=None): """Delete data files. Type FUNC('xxx') to delete the data-files d.xxx, b.xxx, and s.xxx. """ name = filenameTemplate(name,templates) n1b = name["bifurcationDiagram"] n1s = name["solution"] n1d = name["diagnostics"] if os.path.exists(n1b): os.remove(n1b) info("Deleting %s ... done\n"%n1b) if os.path.exists(n1s): os.remove(n1s) info("Deleting %s ... done\n"%n1s) if os.path.exists(n1d): os.remove(n1d) info("Deleting %s ... done\n"%n1d) commandDeleteDataFiles = command(delete,alias=['dl']) def deleteLabel(codes=None,name1=None,name2=None,templates=None, keepTY=0,keep=0): if hasattr(codes,'deleteLabel'): origlen=len(codes()) new = codes.deleteLabel(name1,keepTY=keepTY,keep=keep,copy=1) newlen=len(new()) info("Deleted %d labels, and kept %d.\n"%(origlen-newlen, newlen)) return new name1 = filenameTemplate(name1,templates) if name1["solution"] is None: changedb='fort.7' changeds='fort.8' else: changedb=name1["bifurcationDiagram"] changeds=name1["solution"] bs=bifDiag.bifDiag(changedb,changeds) origlen=len(bs()) bs.deleteLabel(codes,keepTY=keepTY,keep=keep) newlen=len(bs()) if name2 is None: origb=changedb+'~' origs=changeds+'~' try: os.remove(origb) except: pass try: os.remove(origs) except: pass os.rename(changedb,origb) os.rename(changeds,origs) bs.writeFilename(changedb,changeds) else: name2 = filenameTemplate(name2,templates) bs.writeFilename(name2["bifurcationDiagram"],name2["solution"]) info("Deleted %d labels, and kept %d.\n"%(origlen-newlen, newlen)) def dsp(typenames=None,name1=None,name2=None,templates=None): """Delete special points. Type FUNC(x,list) to delete the special points in list from the Python object x, which must be a solution list or a bifurcation diagram. Type FUNC(list,'xxx') to delete from the data-files b.xxx, and s.xxx. Type FUNC(list,'xxx','yyy') to save to b.yyy and s.yyy instead of ?.xxx. Type FUNC(list) to delete from fort.7 and fort.8. list is a label number or type name code, or a list of those, such as 1, or [2,3], or 'UZ' or ['BP','LP'], or it can be None or omitted to mean the special points ['BP','LP','HB','PD','TR','EP','MX'] Alternatively a boolean user-defined function f that takes a solution can be specified for list, such as def f(s): return s["PAR(9)"]<0 where all solutions are deleted that satisfy the given condition, or def f(s1,s2): return abs(s1["L2-NORM"] - s2["L2-NORM"]) < 1e-4 where all solutions are compared with each other and s2 is deleted if the given condition is satisfied, which causes pruning of solutions that are close to each other. Type information is NOT kept in the bifurcation diagram. """ return deleteLabel(typenames,name1,name2,templates) commandDeleteSpecialPoints = command(dsp) def ksp(typenames=None,name1=None,name2=None,templates=None): """Keep special points. Type FUNC(x,list) to only keep the special points in list in the Python object x, which must be a solution list or a bifurcation diagram. Type FUNC(list,'xxx') to keep them in the data-files b.xxx and s.xxx. Type FUNC(list,'xxx','yyy') to save to b.yyy and s.yyy instead of ?.xxx. Type FUNC(list) to keep them in fort.7 and fort.8. list is a label number or type name code, or a list of those, such as 1, or [2,3], or 'UZ' or ['BP','LP'], or it can be None or omitted to mean ['BP','LP','HB','PD','TR','EP','MX'], deleting 'UZ' and regular points. Alternatively a boolean user-defined function f that takes a solution can be specified for list, such as def f(s): return s["PAR(9)"]<0 where only solutions are kept that satisfy the given condition. Type information is NOT kept in the bifurcation diagram. """ return deleteLabel(typenames,name1,name2,templates,keep=1) commandKeepSpecialPoints = command(ksp) def dlb(typenames=None,name1=None,name2=None,templates=None): """Delete special labels. Type FUNC(x,list) to delete the special points in list from the Python object x, which must be a solution list or a bifurcation diagram. Type FUNC(list,'xxx') to delete from the data-files b.xxx and s.xxx. Type FUNC(list,'xxx','yyy') to save to b.yyy and s.yyy instead of ?.xxx. Type FUNC(list) to delete from fort.7 and fort.8. list is a label number or type name code, or a list of those, such as 1, or [2,3], or 'UZ' or ['BP','LP'], or it can be None or omitted to mean the special points ['BP','LP','HB','PD','TR','EP','MX'] Alternatively a boolean user-defined function f that takes a solution can be specified for list, such as def f(s): return s["PAR(9)"] < 0 where all solutions are deleted that satisfy the given condition, or def f(s1,s2): return abs(s1["L2-NORM"] - s2["L2-NORM"]) < 1e-4 where all solutions are compared with each other and s2 is deleted if the given condition is satisfied, which causes pruning of solutions that are close to each other. Type information is kept in the bifurcation diagram for plotting. """ return deleteLabel(typenames,name1,name2,templates,keepTY=1) commandDeleteLabels = command(dlb) def klb(typenames=None,name1=None,name2=None,templates=None): """Keep special labels. Type FUNC(x,list) to only keep the special points in list in the Python object x, which must be a solution list or a bifurcation diagram. Type FUNC(list,'xxx') to keep them in the data-files b.xxx and s.xxx. Type FUNC(list,'xxx','yyy') to save to b.yyy and s.yyy instead of ?.xxx. Type FUNC(list) to keep them in fort.7 and fort.8. list is a label number or type name code, or a list of those, such as 1, or [2,3], or 'UZ' or ['BP','LP'], or it can be None or omitted to mean ['BP','LP','HB','PD','TR','EP','MX'], deleting 'UZ' and regular points. Alternatively a boolean user-defined function f that takes a solution can be specified for list, such as def f(s): return s["PAR(9)"]<0 where only solutions are kept that satisfy the given condition. Type information is kept in the bifurcation diagram for plotting. """ return deleteLabel(typenames,name1,name2,templates,keepTY=1,keep=1) commandKeepLabels = command(klb) def expandData(cmd,name=None,templates=None): name = filenameTemplate(name,templates) n1b = name["bifurcationDiagram"] n1s = name["solution"] if n1s is None: n1s = "fort.8" n1b = "fort.7" if os.path.exists(n1b): shutil.copy(n1b,n1b+'~') if os.path.exists(n1s): shutil.copy(n1s,"fort.28") if os.path.exists(n1s+'~'): os.remove(n1s+'~') os.rename(n1s,n1s+'~') interact(os.path.expandvars("$AUTO_DIR/bin/%s"%cmd)) os.rename("fort.38",n1s) if os.path.exists("fort.28"): os.remove("fort.28") if cmd == "double": info("Solution doubling done.\n") else: info("Solution tripling done.\n") def double(name=None,templates=None): """Double a solution. Type FUNC() to double the solution in 'fort.7' and 'fort.8'. Type FUNC('xxx') to double the solution in b.xxx and s.xxx. """ expandData("double",name,templates) commandDouble = command(double,alias=['db']) def move(name1,name2,name3=None,name4=None,templates=None): """Move data-files to a new name. Type FUNC(name1,name2) or FUNC(name1,name2,name3) or FUNC(name1,name2,name3,name4) Move the data-files dir1/b.xxx, dir1/s.xxx, and dir1/d.xxx, to dir2/b.yyy, dir2/s.yyy, and dir2/d.yyy, and copy the constants file dir1/c.xxx to dir2/c.yyy. The values of dir1/?.xxx and dir2/?.yyy are as follows, depending on whether name1 is a directory or name2 is a directory: FUNC(name1,name2) no directory names: ./?.name1 and ./?.name2 name1 is a directory: name1/?.name2 and ./?.name2 name2 is a directory: ./?.name1 and name2/?.name1 FUNC(name1,name2,name3) name1 is a directory: name1/?.name2 and ./?.name3 name2 is a directory: ./?.name1 and name2/?.name3 FUNC(name1,name2,name3,name4) name1/?.name2 and name3/?.name4 """ dir1, name1, dir2, name2 = dirfilenames(name1,name2,name3,name4) names1 = filenameTemplate(name1,templates) names2 = filenameTemplate(name2,templates) done = False for s in ["bifurcationDiagram","solution","diagnostics","constants"]: n1 = os.path.join(dir1,names1[s]) n2 = os.path.join(dir2,names2[s]) if s == "constants": try: shutil.copy(n1,n2) info("Copying %s to %s ... done\n"%(n1,n2)) done = True except IOError: pass continue if os.path.exists(n1): if os.path.exists(n2): os.remove(n2) os.rename(n1,n2) info("Renaming %s as %s ... done\n"%(n1,n2)) done = True if not done: raise AUTOExceptions.AUTORuntimeError( "Renaming: no files found for %s and %s"%( os.path.join(dir1,"[bsdc]."+name1), os.path.join(dir2,"[bsdc]."+name2))) commandMoveFiles = command(move,alias=['mv']) def cn(name,templates=None): """Get the current continuation constants. Type FUNC('xxx') to get a parsed version of the constants file c.xxx. This is equivalent to the command loadbd('xxx').c """ name = filenameTemplate(name,templates) data = parseC.parseC(name["constants"]) info("Parsed file: %s\n"%name["constants"]) return data commandParseConstantsFile = command(cn,alias=['constantsget']) def hcn(name,templates=None): """Get the current HomCont continuation constants. Type FUNC('xxx') to get a parsed version of the HomCont file h.xxx. """ name = filenameTemplate(name,templates) data = parseH.parseH(name["homcont"]) info("Parsed file: %s\n"%name["homcont"]) return data commandParseHomcontFile = command(hcn) def sl(name=None,templates=None): """Parse solution file: Type FUNC('xxx') to get a parsed version of the solution file s.xxx. This is equivalent to the command loadbd('xxx')() """ name = filenameTemplate(name,templates) n1s = name["solution"] or "fort.8" try: data = parseS.parseS(n1s) except IOError: raise AUTOExceptions.AUTORuntimeError(sys.exc_info()[1]) if isinstance(n1s, str): info("Parsed file: %s\n"%n1s) return data commandParseSolutionFile = command(sl,alias=['solutionget']) def dg(name=None,templates=None): """Parse a bifurcation diagram. Type FUNC('xxx') to get a parsed version of the diagram file b.xxx. This is equivalent to the command loadbd('xxx') but without the solutions in s.xxx and without the diagnostics in d.xxx. """ name = filenameTemplate(name,templates) n1b = name["bifurcationDiagram"] if n1b is None: n1b = "fort.7" try: data = parseB.parseB(n1b) except IOError: raise AUTOExceptions.AUTORuntimeError(sys.exc_info()[1]) info("Parsed file: %s\n"%n1b) return data commandParseDiagramFile = command(dg,alias=['diagramget']) def bt(name=None,templates=None): """Parse both bifurcation diagram and solution. Type FUNC('xxx') to get a parsed version of the diagram file b.xxx and solution file s.xxx. This is equivalent to the command loadbd('xxx') but without the diagnostics in d.xxx. """ name = filenameTemplate(name,templates) n1b = name["bifurcationDiagram"] n1s = name["solution"] if n1b is None: n1b = "fort.7" n1s = "fort.8" data = parseBandS.parseBandS(n1b,n1s) output_names = n1b + " and " + n1s info("Parsed files: %s\n"%output_names) return data commandParseDiagramAndSolutionFile = command(bt,alias=['diagramandsolutionget']) def queryDiagnostic(diagnostic,name=None,templates=None): name = filenameTemplate(name,templates) n1d = name["diagnostics"] if n1d is None: n1d = "fort.9" try: f = open(n1d) except TypeError: for branch in n1d: if hasattr(branch,"diagnostics"): for s in str(branch.diagnostics).splitlines(): if diagnostic in s: info(s+"\n") info("\n") return for s in f: if diagnostic in s: info(s) f.close() info("\n") commandQueryDiagnostic = command(queryDiagnostic,alias=None) def branchpoint(name=None,templates=None): """Print the ``branch-point function''. Type FUNC(x) to list the value of the ``branch-point function'' in the diagnostics of the bifurcation diagram object x. This function vanishes at a branch point. Type FUNC() to list the value of the ``branch-point function'' in the output-file fort.9. Type FUNC('xxx') to list the value of the ``branch-point function'' in the info file 'd.xxx'. """ queryDiagnostic("BP",name,templates) commandQueryBranchPoint = command(branchpoint,alias=['bp','br']) def eigenvalue(name=None,templates=None): """Print eigenvalues of Jacobian (algebraic case). Type FUNC(x) to list the eigenvalues of the Jacobian in the diagnostics of the bifurcation diagram object x. (Algebraic problems.) Type FUNC() to list the eigenvalues of the Jacobian in fort.9. Type FUNC('xxx') to list the eigenvalues of the Jacobian in the info file 'd.xxx'. """ queryDiagnostic("Eigenvalue",name,templates) commandQueryEigenvalue = command(eigenvalue,alias=['ev','eg']) def floquet(name=None,templates=None): """Print the Floquet multipliers. Type FUNC(x) to list the Floquet multipliers in the diagnostics of the bifurcation diagram object x. (Differential equations.) Type FUNC() to list the Floquet multipliers in the output-file fort.9. Type FUNC('xxx') to list the Floquet multipliers in the info file 'd.xxx'. """ queryDiagnostic("Mult",name,templates) commandQueryFloquet = command(floquet,alias=['fl']) def hopf(name=None,templates=None): """Print the value of the ``Hopf function''. Type FUNC(x) to list the value of the ``Hopf function'' in the diagnostics of the bifurcation diagram object x. This function vanishes at a Hopf bifurcation point. Type FUNC() to list the value of the ``Hopf function'' in the output-file fort.9. Type FUNC('xxx') to list the value of the ``Hopf function'' in the info file 'd.xxx'. """ queryDiagnostic("Hopf",name,templates) commandQueryHopf = command(hopf,alias=['hp','hb']) def iterations(name=None,templates=None): """Print the number of Newton interations. Type FUNC(x) to list the number of Newton iterations per continuation step in the diagnostics of the bifurcation diagram object x. Type FUNC() to list the number of Newton iterations per continuation step in fort.9. Type FUNC('xxx') to list the number of Newton iterations per continuation step in the info file 'd.xxx'. """ queryDiagnostic("Iterations",name,templates) commandQueryIterations = command(iterations,alias=['it']) def limitpoint(name=None,templates=None): """Print the value of the ``limit point function''. Type FUNC(x) to list the value of the ``limit point function'' in the diagnostics of the bifurcation diagram object x. This function vanishes at a limit point (fold). Type FUNC() to list the value of the ``limit point function'' in the output-file fort.9. Type FUNC('xxx') to list the value of the ``limit point function'' in the info file 'd.xxx'. """ queryDiagnostic("Fold",name,templates) commandQueryLimitpoint = command(limitpoint,alias=['lm','lp']) def note(name=None,templates=None): """Print notes in info file. Type FUNC(x) to show any notes in the diagnostics of the bifurcation diagram object x. Type FUNC() to show any notes in the output-file fort.9. Type FUNC('xxx') to show any notes in the info file 'd.xxx'. """ queryDiagnostic("NOTE",name,templates) commandQueryNote = command(note,alias=['nt']) def secondaryperiod(name=None,templates=None): """Print value of ``secondary-periodic bif. fcn''. Type FUNC(x) to list the value of the ``secondary-periodic bifurcation function'' in the diagnostics of the bifurcation diagram object x. This function vanishes at period-doubling and torus bifurcations. Type FUNC() to list the value of the ``secondary-periodic bifurcation function'' in the output-file 'fort.9. Type FUNC('xxx') to list the value of the ``secondary-periodic bifurcation function'' in the info file 'd.xxx'. """ queryDiagnostic("SPB",name,templates) commandQuerySecondaryPeriod = command(secondaryperiod,alias=['sp','sc']) def stepsize(name=None,templates=None): """Print continuation step sizes. Type FUNC(x) to list the continuation step size for each continuation step in the diagnostics of the bifurcation diagram object x. Type FUNC() to list the continuation step size for each continuation step in 'fort.9'. Type FUNC('xxx') to list the continuation step size for each continuation step in the info file 'd.xxx'. """ queryDiagnostic("Step",name,templates) commandQueryStepsize = command(stepsize,alias=['ss','st']) def triple(name=None,templates=None): """Triple a solution. Type FUNC() to triple the solution in 'fort.8'. Type FUNC('xxx') to triple the solution in s.xxx. """ return expandData("triple",name,templates) commandTriple = command(triple,alias=['tr']) ############################################ # System Commands ############################################ def ls(dir=None): """List the current directory. Type 'FUNC' to run the system 'ls' command in the current directory. This command will accept whatever arguments are accepted by the Unix command 'ls'. """ cmd = "ls" if os.name in ["nt", "dos"]: path = os.environ["PATH"].split(os.pathsep) cmd = "dir" for s in path: if os.path.exists(os.path.join(s,"ls.exe")): cmd = "ls" break if dir is not None: cmd = "%s %s"%(cmd,dir) if sys.stdout is sys.__stdout__: sys.stdout.flush() os.system(cmd) else: info(AUTOutil.getstatusoutput(cmd, shell=True)[1]+'\n') commandLs = command(ls) def quit(): """Quit the AUTO CLUI.""" if isinstance(__builtin__.quit,str): sys.exit() else: __builtin__.quit() commandQuit = command(quit,alias=['q']) def shell(cmd): """Run a shell command. Type FUNC('xxx') to run the command 'xxx' in the Unix shell and display the results in the AUTO command line user interface. """ sys.stdout.flush() os.system(cmd) commandShell = command(shell) def wait(): """Wait for the user to enter a key. Type 'FUNC()' to have the AUTO interface wait until the user hits any key (mainly used in scripts). """ print("Hit to continue") raw_input() commandWait = command(wait) def cat(f=None): """Print the contents of a file Type 'FUNC xxx' to list the contents of the file 'xxx'. """ if f is not None: f = open(f,"r") for line in f: info(line) f.close() else: line = sys.stdin.readline() while line != "": info(line) line = sys.stdin.readline() commandCat = command(cat) ############################################ # Commands which use runAUTO ############################################ # This function is overridden in AUTOclui.py, so the AUTOSimpleFunctions # instance's runner can be used. def withrunner(runner=None): return runner def cd(dir=None,runner=None): """Change directories. Type 'FUNC xxx' to change to the directory 'xxx'. This command understands both shell variables and home directory expansion. """ runner = withrunner(runner) if dir is None or dir == '': dir = os.path.expanduser("~") try: dir = os.path.expanduser(dir) dir = os.path.expandvars(dir) os.chdir(dir) except: print("Directory '%s' not found"%(dir,)) runner.config(dir=os.getcwd()) commandCd = command(cd) def configure(runner=None,templates=None,data=None,**kw): """Load files into the AUTO runner or return modified solution data. Type result=FUNC([options]) to modify the AUTO runner. The type of the result is a solution object. There are many possible options: \\begin{verbatim} Long name Short name Description ------------------------------------------- equation e The equations file constants c The AUTO constants file homcont h The Homcont parameter file solution s The restart solution file NDIM,IPS,etc AUTO constants. BR,PT,TY,LAB Solution constants. \\end{verbatim} Options which are not explicitly set retain their previous value. For example one may type: s=FUNC(e='ab',c='ab.1') to use 'ab.c' as the equations file and c.ab.1 as the constants file. You can also specify AUTO Constants, e.g., DS=0.05, or IRS=2. Special values for DS are '+' (forwards) and '-' (backwards). Example: s = FUNC(s,DS='-') changes s.c['DS'] to -s.c['DS']. """ def applyRunnerConfigResolveAbbreviation(**kw): abbrev = {} for key in ["equation", "constants", "solution", "homcont"]: abbrev[key[0]] = key abbrev[key] = key for key in list(kw): # remove long duplicates if (key in abbrev and key != abbrev[key] and abbrev[key] in kw): del kw[abbrev[key]] for key,value in list(kw.items()): if key in abbrev: # change the abbreviation to the long version del kw[key] if AUTOutil.isiterable(value): kw[abbrev[key]] = value else: if key[0] == 'e': kw['e'] = value kw[abbrev[key]] = applyTemplate(value,abbrev[key],templates) return kw def applyRunnerConfigResolveFilenames(**kw): exception = None objectdict = {"constants": parseC.parseC, "homcont": parseH.parseH, "solution": parseS.parseS} for key in ["constants", "homcont", "solution"]: if key in kw: value = kw[key] elif data is not None: value = applyTemplate(data,key,templates) else: value = None if value is not None and not AUTOutil.isiterable(value): try: kw[key] = objectdict[key](value) except IOError: if key in kw: # for solution only raise exception later if IRS!=0 exception = sys.exc_info()[1] if key != "solution": raise AUTOExceptions.AUTORuntimeError(exception) # ignore error, but erase runner data for load("xxx") kw[key] = None if data is not None and "e" not in kw and not AUTOutil.isiterable(data): kw["e"] = data kw["equation"] = applyTemplate(data,"equation",templates) if "e" in kw: eq = kw["e"] for ext in [".f90",".f",".c"]: if os.path.exists(eq+ext): return kw, exception raise AUTOExceptions.AUTORuntimeError( "No equations file found for: '%s'"%eq) return kw, exception runner = withrunner(runner) if "info" in kw: info = kw["info"] del kw["info"] else: info = globals()["info"] kw = applyRunnerConfigResolveAbbreviation(**kw) kw, exception = applyRunnerConfigResolveFilenames(**kw) if data is not None and AUTOutil.isiterable(data): if hasattr(data,"load"): # for load(object,...) if "equation" in kw: del kw["equation"] solution = data.load(**kw) c = solution.c kw = {"equation": applyTemplate(c.get("e", ""), "equation", templates), "solution": solution, "constants": c, "homcont": c.get("homcont")} else: # for load(array,...) kw["solution"] = data solution = runner.load(**kw) if exception is not None and runner.options["constants"]["IRS"]: raise AUTOExceptions.AUTORuntimeError(exception) info("Runner configured\n") return solution commandRunnerConfig = command(configure,alias=None) def load(data=None,runner=None,templates=None,**kw): """Load files into the AUTO runner or return modified solution data. Type result=FUNC([options]) to modify the AUTO runner. Type result=FUNC(data,[options]) to return possibly modified solution data. The type of the result is a solution object. FUNC(data,[options]) returns a solution in the following way for different types of data: * A solution: load returns the solution data, with AUTO constants modified by options. * A bifurcation diagram or a solution list: returns the solution specified by the AUTO constant IRS, or if IRS is not specified, the last solution in s. * A string: AUTO uses the solution in the file 's.s' together with the constants in the files 'c.s', and 'h.s'. Not all of these files need to be present. * A Python list array or a numpy array representing a solution, returns a solution with the given contents. Such an array must be given column-wise, as [[t0, ..., tn], [x0, ..., xn], [y0, ..., yn], ...], or for a point solution as [x, y, z, ...]. There are many possible options: \\begin{verbatim} Long name Short name Description ------------------------------------------- equation e The equations file constants c The AUTO constants file homcont h The Homcont parameter file solution s The restart solution file NDIM,IPS,etc AUTO constants. BR,PT,TY,LAB Solution constants. \\end{verbatim} If data is not specified or data is a string then options which are not explicitly set retain their previous value. For example one may type: s=FUNC(e='ab',c='ab.1') to use 'ab.c' as the equations file and c.ab.1 as the constants file. Type s=FUNC('name') to load all files with base 'name'. This does the same thing as running s=FUNC(e='name',c='name,h='name',s='name'). You can also specify AUTO Constants, e.g., DS=0.05, or IRS=2. Special values for DS are '+' (forwards) and '-' (backwards). Example: s = FUNC(s,DS='-') changes s.c['DS'] to -s.c['DS']. """ runner = withrunner(runner) return configure(runner,templates,data,**kw) commandRunnerLoadName = command(load,SIMPLE,"loadname",alias=['ld']) def loadbd(name=None,templates=None,**kw): """Load bifurcation diagram files. Type b=FUNC([options]) to load output files or output data. There are three possible options: \\begin{verbatim} Long name Short name Description ------------------------------------------- bifurcationdiagram b The bifurcation diagram file solution s The solution file or list of solutions diagnostics d The diagnostics file \\end{verbatim} Type FUNC('name') to load all files with base 'name'. This does the same thing as running FUNC(b='name',s='name,d='name'). plot(b) will then plot the 'b' and 's' components. Returns a bifurcation diagram object representing the files in b. """ def __applyBsdConfigResolveAbbreviation(**kw): abbrev = {} for key in ["bifurcationDiagram", "solution", "diagnostics"]: abbrev[key[0]] = key abbrev[key] = key for key in list(kw): # remove long duplicates if (key in abbrev and key != abbrev[key] and abbrev[key] in kw): del kw[abbrev[key]] for key,value in list(kw.items()): if key in abbrev: # change the abbreviation to the long version del kw[key] if type(value) in [type(""),type(1),type(1.0)]: kw[abbrev[key]] = applyTemplate(value,abbrev[key],templates) else: kw[abbrev[key]] = value return kw if name is not None: if AUTOutil.isiterable(name): lst = ["bifurcationDiagram"] else: lst = ["bifurcationDiagram", "solution", "diagnostics"] for key in lst: if key not in kw: kw[key] = name if name is None and kw == {}: bname, sname, dname = "fort.7", "fort.8", "fort.9" else: dict = __applyBsdConfigResolveAbbreviation(**kw) bname = dict.get("bifurcationDiagram") sname = dict.get("solution") dname = dict.get("diagnostics") data = bifDiag.bifDiag(bname,sname,dname) info("Parsed output data\n") return data commandParseOutputFiles = command(loadbd,SIMPLE,"loadbd",alias=['bd']) def pr(parameter=None,runner=None): """Print continuation parameters. Type FUNC() to print all the parameters. Type FUNC('xxx') to return the parameter 'xxx'. These commands are equivalent to the commands print s.c print s.c['xxx'] where s is a solution. """ runner = withrunner(runner) if parameter is None: info(str(runner.options["constants"])) else: return runner.options["constants"][parameter] commandRunnerPrintFort2 = command(pr,alias=['printconstant','pc']) def hpr(parameter=None,runner=None): """Print HomCont continuation parameters. Type FUNC() to print all the HomCont parameters. Type FUNC('xxx') to return the HomCont parameter 'xxx'. These commands are equivalent to the commands print s.c print s.c['xxx'] where s is a solution. """ runner = withrunner(runner) if parameter is None: info(str(runner.options["homcont"])) else: return runner.options["homcont"][parameter] commandRunnerPrintFort12 = command(hpr) def ch(entry=None,value=None,runner=None,**kw): """Modify continuation constants. Type FUNC('xxx',yyy) to change the constant 'xxx' to have value yyy. This is equivalent to the command s=load(s,xxx=yyy) where s is a solution. """ runner = withrunner(runner) if entry is not None: runner.options["constants"][entry] = value info("%s changed to %s\n"%(entry,value)) else: configure(runner,None,info=lambda s:None,**kw) info(str(kw)+'\n') commandRunnerConfigFort2 = command(ch,SIMPLE,"changeConstants", alias=['changeconstant','cc']) def hch(entry=None,value=None,runner=None,**kw): """Modify HomCont continuation constants. Type FUNC('xxx',yyy) to change the HomCont constant 'xxx' to have value yyy. This is equivalent to the command s=load(s,xxx=yyy) where s is a solution. """ runner = withrunner(runner) if entry is not None: runner.options["homcont"][entry] = value info("%s changed to %s\n"%(entry,value)) else: configure(runner,None,info=lambda s:None,**kw) info(str(kw)+'\n') commandRunnerConfigFort12 = command(hch,SIMPLE,"changeConstantsHomCont") def run(data=None,sv=None,ap=None,runner=None,templates=None,**kw): """Run AUTO. Type r=FUNC([data],[options]) to run AUTO from solution data with the given AUTO constants or file keyword options. The results are stored in the bifurcation diagram r which you can later print with ``print r'', obtain branches from via r[0], r[1], ..., and obtain solutions from via r(3), r(5), r('LP2'), where 3 and 5 are label numbers, and 'LP2' refers to the second LP label. FUNC(data) runs AUTO in the following way for different types of data: * A solution: AUTO starts from solution data, with AUTO constants data.c. * A bifurcation diagram: AUTO start from the solution specified by the AUTO constant IRS, or if IRS is not specified, the last solution in data, data()[-1], with AUTO constants data()[-1].c. * A string: AUTO uses the solution in the file 's.data' together with the constants in the files 'c.data', and 'h.data'. Not all of these files need to be present. If no solution data is specified, then the global values from the 'load' command are used instead, where options which are not explicitly set retain their previous value. Keyword argument options can be AUTO constants, such as DS=0.05, or ISW=-1, or specify a constant or solution file. These override the constants in s.c, where applicable. See ``load'': FUNC(s,options) is equivalent to FUNC(load(s,options)) Example: given a bifurcation diagram bd, with a branch point solution, switch branches and stop at the first Hopf bifurcation: hb = FUNC(bd('BP1'),ISW=-1,STOP='HB1') Special keyword arguments are 'sv' and 'ap'; 'sv' is also an AUTO constant: FUNC(bd('BP1'),ISW=-1,STOP='HB1',sv='hb',ap='all') saves to the files b.hb, s.hb and d.hb, and appends to b.all, s.all, and d.all. """ runner = withrunner(runner) if sv is not None: kw['sv'] = sv load(data,runner,templates,info=lambda msg:None,**kw) res = runner.run() sv = runner.options["constants"].get("sv") runner.options["constants"]['sv'] = None if sv is not None and sv != '': name = filenameTemplate(sv,templates) bname = name["bifurcationDiagram"] sname = name["solution"] dname = name["diagnostics"] info("Saving to %s, %s, and %s ... done\n"%(bname,sname,dname)) if ap is not None: append(sv,ap) elif ap is not None: append(ap) return res commandRun = command(run,SIMPLE,"run",alias=['r','rn']) def rundemo(demo,equation="all",runner=None): runner = withrunner(runner) runner.config(equation=equation) runner.runDemo(demo) commandRunDemo = command(rundemo,alias=None) def runMakefileWithSetup(equation=None,fort2=None,fort3=None,runner=None): runner = withrunner(runner) if fort2 is not None: runner.config(fort2=fort2) if fort3 is not None: runner.config(fort3=fort3) # Before this is called runner needs to have the fort2 and fort3 # options set. Otherwise this will raise an exception. runner.runMakefileWithSetup(equation) commandRunMakefileWithSetup = command(runMakefileWithSetup,alias=None) def runMakefile(equation=None,runner=None): runner = withrunner(runner) runner.runMakefile(equation) commandRunMakefile = command(runMakefile,alias=None) def runExecutableWithSetup(executable=None,fort2=None,fort3=None,runner=None): runner = withrunner(runner) if fort2 is not None: runner.config(fort2=fort2) if fort3 is not None: runner.config(fort3=fort3) # Before this is called runner needs to have the fort2 and fort3 # options set. Otherwise this will raise an exception. runner.runExecutableWithSetup(executable) commandRunExecutableWithSetup = command(runExecutableWithSetup,alias=None) def runExecutable(executable=None,fort2=None,fort3=None,runner=None): runner = withrunner(runner) runner.runExecutable(executable) commandRunExecutable = command(runExecutable,alias=None) def runCommandWithSetup(command=None,fort2=None,fort3=None,runner=None): runner = withrunner(runner) if fort2 is not None: runner.config(fort2=fort2) if fort3 is not None: runner.config(fort3=fort3) # Before this is called runner needs to have the fort2 and fort3 # options set. Otherwise this will raise an exception. runner.runCommandWithSetup(command) commandRunCommandWithSetup = command(runCommandWithSetup,alias=None) def runCommand(command=None,runner=None): runner = withRunner(runner) runner.runCommand(command) commandRunCommand = command(runCommand,alias=None) def plot3(name=None,r3b=False): """3D plotting of data. Type FUNC(x) to run the graphics program PLAUT04 for the graphical inspection of bifurcation diagram or solution data in x. Type FUNC('xxx') to run the graphics program PLAUT04 for the graphical inspection of the data-files b.xxx and s.xxx. Type FUNC() to run the graphics program PLAUT04 for the graphical inspection of the output-files 'fort.7' and 'fort.8'. Type FUNC(...,r3b=True) to run PLAUT04 in restricted three body problem mode. """ cmd = os.path.join(os.path.expandvars("$AUTO_DIR"),"bin") cmd = os.path.join(cmd, "plaut04") arg = [] if r3b: arg = ["-r3b"] if name is not None: if type(name) == type(""): arg.append(name) else: d = name for f in ["fort.7","fort.8","fort.9"]: if os.path.exists(f): os.remove(f) if isinstance(d,bifDiag.bifDiag): d.writeFilename("fort.7","fort.8","fort.9") elif isinstance(d,parseBandS.parseBandS): d.writeFilename("fort.7","fort.8") elif isinstance(d,parseB.parseB): d.writeFilename("fort.7") elif isinstance(d,parseS.parseS): d.writeFilename("fort.8") elif isinstance(d,parseB.AUTOBranch): d.writeFilename("fort.7") elif isinstance(d,parseS.AUTOSolution): d.writeFilename("fort.8") sys.stdout.flush() if not os.path.exists(cmd): cmd = cmd + '.exe' if sys.stdout is sys.__stdout__: os.spawnv(os.P_NOWAIT,cmd,[os.path.basename(cmd)] + arg) else: # when testing, change directories so plaut04 does not keep # cwd open on Windows and it can be deleted cwd = os.getcwd() os.chdir(os.path.dirname(cmd)) os.spawnv(os.P_NOWAIT,cmd,[os.path.basename(cmd), cwd] + arg) # and wait a little bit os.chdir(cwd) import time time.sleep(2) commandPlotter3D = command(plot3,alias=['p3']) try: try: from Tkinter import Tk, TclError except ImportError: from tkinter import Tk, TclError # Python 3 plotterimported = False try: import readline import atexit except: pass import select # this polling loop is here so that Cygwin Python does not "hang" the # plot window while Python waits for a user input def handleevents(): while select.select([sys.stdin],[],[],0.02) == ([], [], []): _root.dooneevent() ##################################################### # Plotting commands ##################################################### def plot(name=None,templates=None,**kw): """Plotting of data. Type FUNC(x) to run the graphics program PyPLAUT for the graphical inspection of bifurcation diagram or solution data in x. Type FUNC('xxx') to run the graphics program PyPLAUT for the graphical inspection of the data-files b.xxx and s.xxx. Type FUNC() to run the graphics program for the graphical inspection of the output-files 'fort.7' and 'fort.8'. Values also present in the file autorc, such as color_list="black green red blue orange" can be provided as keyword arguments, as well as hide=True which hides the on-screen plot. The return value, for instance, p for p=plot(x) will be the handle for the graphics window. It has p.config() and p.savefig() methods that allow you to configure and save the plot. When plotting, see help(p.config) and help(p.savefig) for details. """ options = kw if type(name) == type("") or name is None: name = filenameTemplate(name,templates) parsed = None else: parsed = name # delay importing plotting modules until we actually plot... global plotterimported, windowPlotter if not plotterimported: from auto.graphics import windowPlotter plotterimported = True # root has to be here since I am passing options in # a dictionary. Otherwise the default agruements # get messed up # NOTE: options set here go to the MegaToplevel!, while # the return value of this function is the underlying # grapher. So we add 'grapher_' to all options that don't # already do for k in list(options): if k[:8] != 'grapher_': v = options[k] del options[k] options['grapher_'+k] = v # Get rid of the initial window root = None if not options.get('grapher_hide'): try: root=Tk() root.withdraw() except TclError: sys.stderr.write(str(sys.exc_info()[1])+"\n") options['grapher_hide'] = True if 'auto.graphics.grapher_mpl' in sys.modules: sys.stderr.write("Disabling on-screen plots, but you can still use savefig\n") else: sys.stderr.write("Disabling plots, off-screen plots require Matplotlib\n") return windowPlotter.WindowPlotter2D(root,disabled=True,**options) if sys.platform == "cygwin": try: readline.set_pre_input_hook(handleevents) global _root _root=root except: pass if parsed: nb, ns = None, None if isinstance(parsed,bifDiag.bifDiag): nb = parsed ns = parsed() elif isinstance(parsed,parseBandS.parseBandS): nb = parsed.diagram.branches ns = parsed.solution elif isinstance(parsed,parseB.parseB): nb = parsed.branches elif isinstance(parsed,parseS.parseS): ns = parsed elif isinstance(parsed,parseB.AUTOBranch): nb = parseB.parseBR([parsed]) elif isinstance(parsed,parseS.AUTOSolution): ns = parseS.parseS([parsed]) if nb: options["grapher_bifurcation_diagram"] = nb if ns: options["grapher_solution"] = ns else: n1b = name["bifurcationDiagram"] n1s = name["solution"] if n1b is None: n1b = "fort.7" n1s = "fort.8" try: n1b = parseB.parseBR(n1b) n1b = bifDiag.bifDiag(n1b,n1s,constants=n1b[0].c) except IOError: n1b = bifDiag.bifDiag(n1b,n1s) options["grapher_bifurcation_diagram"] = n1b options["grapher_solution"] = n1b() handle = windowPlotter.WindowPlotter2D(root,**options) if (not options.get('grapher_hide') or 'auto.graphics.grapher_mpl' not in sys.modules): handle.update() try: def plotterquit(): try: handle.destroy() except KeyError: pass atexit.register(plotterquit) except: pass info("Created plot\n") return handle except: print("\n-------------------------------------------------------------") print("Could not import plotting modules, plotting will be disabled.") print("This is probably because Tkinter is not enabled in your Python installation.") print("-------------------------------------------------------------\n") def plot(name=None,templates=None,**kw): """2D plotting of data. Plotting of data has been disabled in the AUTO-07P CLUI. This is probably because the Python interpretor cannot load the Tkinter module. """ info("2D plotting has been disabled\n") commandPlotter = command(plot,SIMPLE,"plot",alias=['pl','p2']) ################################################## # CLUI commands ################################################## def autohelp(command_string=""): outputString = "" # Read in the aliases. _aliases = {} parser = AUTOutil.getAUTORC() if parser.has_section("AUTO_command_aliases"): for option in parser.options("AUTO_command_aliases"): cmd = parser.get("AUTO_command_aliases",option) if cmd not in _aliases: _aliases[cmd] = [] _aliases[cmd].append(option) from auto import AUTOCommands if _aliases == {}: # Now we copy the commands from the module for key in AUTOCommands.__dict__: cmd = getattr(AUTOCommands,key) # Check to see if it is a command if hasattr(cmd,"fun") and cmd.alias is not None: _aliases[key] = [cmd.fun.__name__] + cmd.alias command_list = [] # Here we get a list of the names of all of the commands in AUTOCommands for key in AUTOCommands.__dict__: if key in _aliases: command_list.append(key) return_value = {} if not isinstance(command_string, str): try: outputString += command_string.__doc__+'\n' except TypeError: pass info(outputString) return return_value if len(command_string) == 0: # If we were created with the empty string return a formatted # quick reference of all commands as the string and a # dictionary of all commands as the data. The dictionary # has an entry for each command which is a dictionary # with two entries: # "aliases" a list of the aliases of the command # "description" a one line description of the command command_list.sort() outputString += " ALIASES DESCRIPTION\n" for cmd in command_list: return_value[cmd] = {} return_value[cmd]["aliases"] = [] aliases = "" for key in _aliases[cmd]: aliases = aliases + key + " " return_value[cmd]["aliases"].append(key) doc = getattr(AUTOCommands,cmd).__doc__ if doc is not None: outputString += " %-25s"%aliases doc = doc.splitlines() return_value[cmd]["description"] = doc[0] outputString += doc[0] outputString += "\n" from auto import interactiveBindings execlist = [{'name' : 'auto', 'alias' : 'ex', 'fn' : interactiveBindings.AUTOInteractiveConsole.ex}, {'name' : 'demofile', 'alias' : 'dmf', 'fn' : interactiveBindings.AUTOInteractiveConsole.dmf}] for cmdprop in execlist: cmd = cmdprop['name'] return_value[cmd] = {} return_value[cmd]["aliases"] = [cmd,cmdprop['alias']] aliases = cmd + " " + cmdprop['alias'] doc = cmdprop["fn"].__doc__ outputString += " %-25s"%aliases doc = doc.splitlines() return_value[cmd]["description"] = doc[0] outputString += doc[0] outputString += "\n" outputString += "\n" else: # If we were created with the nonempty string return a formatted # reference for the given command as the string and a # dictionary containing information about the command as the data. # The dictionary has 3 entries: # "name" the full name of the command # "aliases" a list of all of the aliases of the command # "description" a long description of the command try: doc = getattr(AUTOCommands,command_string).__doc__ return_value["name"] = command_string except: doc = getattr(AUTOCommands,_aliases[command_string]).__doc__ return_value["name"] = _aliases[command_string] doc = doc.replace("FUNC",command_string) return_value["short description"] = doc.splitlines()[0] return_value["long description"] = "\n".join(doc.split("\n")[1:]) # Get rid of the LaTeX stuff from the string that gets returned, but # NOT from the data portion doc = doc.replace("\\begin{verbatim}","") doc = doc.replace("\\end{verbatim}","") doc = doc + "\n" if not command_string in command_list: # This means help was asked for an alias for cmd in _aliases: if command_string in _aliases[cmd]: command_string = cmd break doc = doc + "Command name: "+command_string+"\n" return_value["aliases"] = [] doc = doc + "Aliases: " if command_string in _aliases: for key in _aliases[command_string]: doc = doc + key + " " return_value["aliases"].append(key) outputString += doc+"\n" info(outputString) return return_value commandHelp = command(autohelp) # This is just a little wrapper around commandHelp which discards the # data portion of the return. This is because, for the # interactive command line we don't want it to print out. def man(command_string=""): """Get help on the AUTO commands. Type 'FUNC' to list all commands with a online help. Type 'FUNC xxx' to get help for command 'xxx'. """ autohelp(command_string) commandInteractiveHelp = command(man) ################################################## # GUI commands ################################################## def printFunc(printFnc,text): printFnc(text) info(text) commandPrintFunc = command(printFunc) # FIXME: This is not done!! def gui(type="simple"): """Show AUTOs graphical user interface. Type FUNC() to start AUTOs graphical user interface. NOTE: This command is not implemented yet. """ try: from Tkinter import Tk except ImportError: from tkinter import Tk # Python 3 from auto.graphics import AUTOgui, Pmw # Get rid of the initial window root = Tk() root.withdraw() guic = AUTOgui.AUTOgui(type) info("GUI created\n") return guic commandCreateGUI = command(gui) # Not ready yet ## def commandRunGeneralGUI(runner): ## tkSimple ## first = commandSetupGeneralRun(eq_name,saved_data,parameter_name) ## second = commandRunnerConfig(runner,makefile="$AUTO_DIR/cmds/cmds.make") ## third = commandRunMakefile(runner,"EQUATION_NAME=%s"%(eq_name)) ## return commandMacro((first,second,third)) ## commandRunGeneralGUI = command(generalGUI) ############################################ # High level functions ############################################ def splabs(s,typename,templates=None): """Return special labels Type FUNC('xxx',typename) to get a list of labels with the specified typename, where typename can be one of 'EP', 'MX', 'BP', 'LP', 'UZ', 'HB', 'PD', 'TR', or 'RG'. This is equivalent to the command load('xxx')(typename) which gives a list of the solutions themselves; load('xxx')(typename).getLabels() returns the list of labels. Or use FUNC(s,typename) where s is a parsed solution from sl(). This is equivalent to the command s(typename).getLabels() """ labels = [] for solution in sl(s,templates=templates): if solution['Type name'] == typename: labels.append(solution['Label']) return labels commandSpecialPointLabels = command(splabs) ############################################ # Testing stuff ############################################ def test(): from auto import runAUTO import sys def printfunc(text): stdout.write(text+"\n") stdout = sys.stdout f = StringIO() def getinfo(s): f.write(s) def noinfo(s): pass global info runner = runAUTO.runAUTO( makefile="", demos_dir=os.path.join(os.environ["AUTO_DIR"],"python")) clean = commandRunDemo("wav","clean",runner) first = commandRunDemo("wav","first",runner) second = commandRunDemo("wav","second",runner) tmacro = commandMacro((clean,first,first)) printer = commandPrintFunc(printfunc,"Hello World") quiet = commandRunnerConfig(runner,log=f) verbose = commandRunnerConfig(runner,log=None) changedir = commandCd("wav",runner) constants = commandParseConstantsFile("wav") changeup = commandCd("..",runner) verbose() clean() first() tmacro() quiet() second() stdout.write(f.getvalue()+"\n") printer() verbose() clean() changedir() constants() changeup() if __name__ == "__main__": test() auto/07p/gui/0000750000175000017500000000000013570013207011025 5ustar skskauto/07p/gui/auto.makefile.in0000750000175000017500000001245713570013207014115 0ustar sksk#===> auto.makefile # # Makefile written by Xianjun WANG in March 1994 # # This Makefile is called from the Graphic User Interface (GUI) # # The following environment variables are controlled in GUI program # at run time: # # PROGRAMNAME : the name of the program # NEW_PROGRAMNAME : the output data name saved by "save as ..." button # NEW_PLOTNAME : the output data name to be plotted by "plot name ..." button # RESTARTNAME : the restart data name to be set to unit 3 (fort.3) # RESTARTDATA : same as RESTARTNAME, but only needed in GUI program # COPYFROM : the name of the output data to be copied from # COPYTO : the name of the output data to be copied to # MOVEFROM : the name of the output data to be moved from # MOVETO : the name of the output data to be moved to # APPENDFROM : the name of the output data to be appended from # APPENDTO : the name of the output data to be appended to # DELETEDATA : the name of the output data to be deleted # # .IGNORE: # FC = @FC@ FFLAGS = @FFLAGS@ OPT = @OPT_FLAG@ SRC = $(PROGRAMNAME).f OBJ = $(PROGRAMNAME).o EXE = $(PROGRAMNAME).exe LIBS = $(AUTO_DIR)/lib/*.o RM = rm -f # start: $(EXE) run # run: @echo " " @echo "Starting $(PROGRAMNAME) ..." @echo " " @cp c.$(PROGRAMNAME) fort.2 @touch fort.3 @./$(EXE) @rm -f fort.3 @echo " " @echo "$(PROGRAMNAME) ... done" # restart: $(EXE) rerun rerun: @echo " " @echo "Restarting $(PROGRAMNAME) ..." @echo " " @cp c.$(PROGRAMNAME) fort.2 @cp s.$(RESTARTNAME) fort.3 @./$(EXE) @rm -f fort.3 @echo " " @echo "$(PROGRAMNAME) ... done" # $(EXE): $(OBJ) $(FC) $(FFLAGS) $(OPT) $(OBJ) -o $@ $(LIBS) # $(OBJ): $(SRC) $(FC) $(FFLAGS) $(OPT) -c $(SRC) -o $@ # save: @echo " " @echo "Starting save ..." @cp fort.7 b.$(PROGRAMNAME) @echo "Saved fort.7 as b.$(PROGRAMNAME)" @cp fort.8 s.$(PROGRAMNAME) @echo "Saved fort.8 as s.$(PROGRAMNAME)" @cp fort.9 d.$(PROGRAMNAME) @echo "Saved fort.9 as d.$(PROGRAMNAME)" @echo "Saving ... done" @echo " " # saveas: @echo " " @echo "Starting save ..." @cp fort.7 b.$(NEW_PROGRAMNAME) @echo "Saved fort.7 as b.$(NEW_PROGRAMNAME)" @cp fort.8 s.$(NEW_PROGRAMNAME) @echo "Saved fort.8 as s.$(NEW_PROGRAMNAME)" @cp fort.9 d.$(NEW_PROGRAMNAME) @echo "Saved fort.9 as d.$(NEW_PROGRAMNAME)" @cp fort.2 c.$(NEW_PROGRAMNAME) @echo "Saved fort.2 as c.$(NEW_PROGRAMNAME)" @echo "Saving ... done" @echo " " # append: @echo " " @echo "Starting append ..." @cat fort.7 >> b.$(PROGRAMNAME) @echo "Appended fort.7 to b.$(PROGRAMNAME)" @cat fort.8 >> s.$(PROGRAMNAME) @echo "Appended fort.8 to s.$(PROGRAMNAME)" @cat fort.9 >> d.$(PROGRAMNAME) @echo "Appended fort.9 to d.$(PROGRAMNAME)" @echo "Appending ... done" @echo " " # appendto: @echo " " @echo "Starting append ..." @cat fort.7 >> b.$(NEW_PROGRAMNAME) @echo "Appended fort.7 to b.$(NEW_PROGRAMNAME)" @cat fort.8 >> s.$(NEW_PROGRAMNAME) @echo "Appended fort.8 to s.$(NEW_PROGRAMNAME)" @cat fort.9 >> d.$(NEW_PROGRAMNAME) @echo "Appended fort.9 to d.$(NEW_PROGRAMNAME)" @echo "Appending ... done" @echo " " # plot_current: @echo " " @echo "Starting plaut ..." @cp b.$(PROGRAMNAME) fort.17 @cp s.$(PROGRAMNAME) fort.18 @echo "Plotting b.$(PROGRAMNAME) and s.$(PROGRAMNAME) ..." @xterm -bg black -fg white -t -e $(AUTO_DIR)/bin/plaut @$(RM) fort.17 @$(RM) fort.18 @echo "Plotting ... done" @echo " " # plot_other: @echo " " @echo "Starting plaut ..." @cp b.$(NEW_PLOTNAME) fort.17 @cp s.$(NEW_PLOTNAME) fort.18 @echo "Plotting b.$(NEW_PLOTNAME) and s.$(NEW_PLOTNAME) ..." @xterm -bg black -fg white -t -e $(AUTO_DIR)/bin/plaut @$(RM) fort.17 @$(RM) fort.18 @echo "Plotting ... done" @echo " " # restartdata: @echo " " @echo "Setting s.$(RESTARTDATA) as restart file ... done" # copydata: @echo " " @cp b.$(COPYFROM) b.$(COPYTO) @echo "Copying b.$(COPYFROM) to b.$(COPYTO) ... done" @cp s.$(COPYFROM) s.$(COPYTO) @echo "Copying s.$(COPYFROM) to s.$(COPYTO) ... done" @cp d.$(COPYFROM) d.$(COPYTO) @echo "Copying d.$(COPYFROM) to d.$(COPYTO) ... done" @cp c.$(COPYFROM) c.$(COPYTO) @echo "Copying c.$(COPYFROM) to c.$(COPYTO) ... done" # appenddata: @echo " " @cat b.$(APPENDFROM) >> b.$(APPENDTO) @echo "Appending b.$(APPENDFROM) to b.$(APPENDTO) ... done" @cat s.$(APPENDFROM) >> s.$(APPENDTO) @echo "Appending s.$(APPENDFROM) to s.$(APPENDTO) ... done" @cat d.$(APPENDFROM) >> d.$(APPENDTO) @echo "Appending d.$(APPENDFROM) to d.$(APPENDTO) ... done" # movedata: @echo " " @mv -f b.$(MOVEFROM) b.$(MOVETO) @echo "Moving b.$(MOVEFROM) to b.$(MOVETO) ... done" @mv -f s.$(MOVEFROM) s.$(MOVETO) @echo "Moving s.$(MOVEFROM) to s.$(MOVETO) ... done" @mv -f d.$(MOVEFROM) d.$(MOVETO) @echo "Moving d.$(MOVEFROM) to d.$(MOVETO) ... done" @mv -f c.$(MOVEFROM) c.$(MOVETO) @echo "Moving c.$(MOVEFROM) to c.$(MOVETO) ... done" # deletedata: @echo " " @$(RM) b.$(DELETEDATA) @echo "Deleting b.$(DELETEDATA) ... done" @$(RM) s.$(DELETEDATA) @echo "Deleting s.$(DELETEDATA) ... done" @$(RM) d.$(DELETEDATA) @echo "Deleting d.$(DELETEDATA) ... done" # clean: @echo " " @echo "Cleaning ..." @$(RM) *.o fort.* *.exe *.trace core @echo "Cleaning ... done" @echo " " # # DO NOT ADD ANYTHING AFTER THIS LINE # auto/07p/gui/c.aut0000750000175000017500000000104013570013207011760 0ustar sksk2 1 0 1 NDIM,IPS,IRS,ILP 2 1 11 NICP,(ICP(I),I=1,NICP) 15 4 3 1 1 0 2 1 NTST,NCOL,IAD,ISP,ISW,IPLT,NBC,NINT 50 -1.e10 1.e10 -1.e10 1.e10 NMX,RL0,RL1,A0,A1 50 5 3 8 5 3 0 NPR,MXBF,IID,ITMX,ITNW,NWTN,JAC 1.e-6 1.e-6 1.e-4 EPSL,EPSU,EPSS 0.02 0.001 0.05 1 DS,DSMIN,DSMAX,IADS 1 NTHL,(/,I,THL(I)),I=1,NTHL) 11 0. 0 NTHU,(/,I,THU(I)),I=1,NTHU) 0 NUZR,(/,I,PAR(I)),I=1,NUZR) auto/07p/gui/Makefile.in0000750000175000017500000000102613570013207013074 0ustar sksk#===> sun.makefile # # Makefile written by Xianjun WANG in March 1994 # # This Makefile is used to compile the Graphic User Interface(GUI) # source code for Sun(Sparc) Station machines. # # Type "make -f sun.makefile" to compile # .SUFFIXES: .c .o # CC = @CC@ # CFLAGS = @CFLAGS@ @X_CFLAGS@ -I../include -c #SRC = auto97.c OBJ = auto97.o PGM = ../bin/auto97 RM = rm -f LIBS = @X_PRE_LIBS@ @X_LIBS@ @X_EXTRA_LIBS@ # .c.o: $(CC) $(CFLAGS) $*.c -o $@ # $(PGM): $(OBJ) $(CC) $(OBJ) -o $@ $(LIBS) # clean: $(RM) *.o *~ auto/07p/gui/Xdefaults.10000750000175000017500000000132113570013207013046 0ustar sksk! AUTO97*traversalOn: true AUTO97*keyboardFocusPolicy: explicit AUTO97*menuAccelerator: Alt ! AUTO97*background: SlateGrey AUTO97*Foreground: gold AUTO97*XmFrame.background: gold2 AUTO97*XmMainWindow*XmText.background: SkyBlue AUTO97*XmMainWindow*XmText.foreground: black AUTO97*XmRowColumn*XmTextField.background: SkyBlue1 AUTO97*XmRowColumn*XmTextField.foreground: black ! AUTO97*XmPushButton.foreground: gold AUTO97*XmPushButton.background: gray45 ! AUTO97*XmSeparator.background: red ! AUTO97*XmCascadeButton.foreground: gold ! ! clock color ! AUTO97*XmMainWindow.XmForm.XmRowColumn.XmForm.XmLabel.foreground: GhostWhite ! !AUTO97*XmToggleButton.background: green AUTO97*XmToggleButton.selectColor: red auto/07p/gui/aut.f900000640000175000017500000001730413570013207012144 0ustar sksk!---------------------------------------------------------------------- !---------------------------------------------------------------------- ! aut.f90 : Model AUTO-equations file !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FUNC(NDIM,U,ICP,PAR,IJAC,F,DFDU,DFDP) ! ---------- ---- ! ! Evaluates the algebraic equations or ODE right hand side ! ! Input arguments : ! NDIM : Dimension of the algebraic or ODE system ! U : State variables ! ICP : Array indicating the free parameter(s) ! PAR : Equation parameters ! ! Values to be returned : ! F : Equation or ODE right hand side values ! ! Normally unused Jacobian arguments : IJAC, DFDU, DFDP (see manual) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, IJAC, ICP(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: F(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM,NDIM),DFDP(NDIM,*) F(1)= .... F(2)= .... END SUBROUTINE FUNC !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE STPNT(NDIM,U,PAR) ! ---------- ----- ! ! Input arguments : ! NDIM : Dimension of the algebraic or ODE system ! ! Values to be returned : ! U : A starting solution vector ! PAR : The corresponding equation-parameter values ! ! Note : For time- or space-dependent solutions this subroutine has ! arguments (NDIM,U,PAR,T), where the scalar input parameter T ! contains the varying time or space variable value. IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(INOUT) :: U(NDIM),PAR(*) DOUBLE PRECISION, INTENT(IN) :: T ! Initialize the equation parameters PAR(1)= .... PAR(2)= .... ! Initialize the solution U(1)= .... U(2)= .... END SUBROUTINE STPNT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE BCND(NDIM,PAR,ICP,NBC,U0,U1,FB,IJAC,DBC) ! ---------- ---- ! ! Boundary Conditions ! ! Input arguments : ! NDIM : Dimension of the ODE system ! PAR : Equation parameters ! ICP : Array indicating the free parameter(s) ! NBC : Number of boundary conditions ! U0 : State variable values at the left boundary ! U1 : State variable values at the right boundary ! ! Values to be returned : ! FB : The values of the boundary condition functions ! ! Normally unused Jacobian arguments : IJAC, DBC (see manual) IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NBC, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*), U0(NDIM), U1(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FB(NBC) DOUBLE PRECISION, INTENT(INOUT) :: DBC(NBC,*) !XXX FB(1)= !XXX FB(2)= END SUBROUTINE BCND !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE ICND(NDIM,PAR,ICP,NINT,U,UOLD,UDOT,UPOLD,FI,IJAC,DINT) ! ---------- ---- ! ! Integral Conditions ! ! Input arguments : ! NDIM : Dimension of the ODE system ! PAR : Equation parameters ! ICP : Array indicating the free parameter(s) ! NINT : Number of integral conditions ! U : Value of the vector function U at `time' t ! ! The following input arguments, which are normally not needed, ! correspond to the preceding point on the solution branch ! UOLD : The state vector at 'time' t ! UDOT : Derivative of UOLD with respect to arclength ! UPOLD : Derivative of UOLD with respect to `time' ! ! Normally unused Jacobian arguments : IJAC, DINT ! ! Values to be returned : ! FI : The value of the vector integrand IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), NINT, IJAC DOUBLE PRECISION, INTENT(IN) :: PAR(*) DOUBLE PRECISION, INTENT(IN) :: U(NDIM), UOLD(NDIM), UDOT(NDIM), UPOLD(NDIM) DOUBLE PRECISION, INTENT(OUT) :: FI(NINT) DOUBLE PRECISION, INTENT(INOUT) :: DINT(NINT,*) !XXX FI(1)= END SUBROUTINE ICND !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE FOPT(NDIM,U,ICP,PAR,IJAC,FS,DFDU,DFDP) ! ---------- ---- ! ! Defines the objective function for algebraic optimization problems ! ! Supplied variables : ! NDIM : Dimension of the state equation ! U : The state vector ! ICP : Indices of the control parameters ! PAR : The vector of control parameters ! ! Values to be returned : ! FS : The value of the objective function ! ! Normally unused Jacobian argument : IJAC, DFDP IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM, ICP(*), IJAC DOUBLE PRECISION, INTENT(IN) :: U(NDIM), PAR(*) DOUBLE PRECISION, INTENT(OUT) :: FS DOUBLE PRECISION, INTENT(INOUT) :: DFDU(NDIM),DFDP(*) !XXX FS= END SUBROUTINE FOPT !---------------------------------------------------------------------- !---------------------------------------------------------------------- SUBROUTINE PVLS(NDIM,U,PAR) ! ---------- ---- IMPLICIT NONE INTEGER, INTENT(IN) :: NDIM DOUBLE PRECISION, INTENT(IN) :: U(NDIM) DOUBLE PRECISION, INTENT(INOUT) :: PAR(*) !---------------------------------------------------------------------- ! NOTE : ! Parameters set in this subroutine should be considered as ``solution ! measures'' and be used for output purposes only. ! ! They should never be used as `true'' continuation parameters. ! ! They may, however, be added as ``over-specified parameters'' in the ! parameter list associated with the AUTO-Constant NICP, in order to ! print their values on the screen and in the ``p.xxx file. ! ! They may also appear in the list associated with AUTO-Constant NUZR. ! !---------------------------------------------------------------------- ! For algebraic problems the argument U is, as usual, the state vector. ! For differential equations the argument U represents the approximate ! solution on the entire interval [0,1]. In this case its values must ! be accessed indirectly by calls to GETP, as illustrated below. !---------------------------------------------------------------------- ! ! Set PAR(2) equal to the L2-norm of U(1) !XX PAR(2)=GETP('NRM',1,U) ! ! Set PAR(3) equal to the minimum of U(2) !XX PAR(3)=GETP('MIN',2,U) ! ! Set PAR(4) equal to the value of U(2) at the left boundary. !XX PAR(4)=GETP('BV0',2,U) ! ! Set PAR(5) equal to the pseudo-arclength step size used. !XX PAR(5)=GETP('STP',1,U) ! !---------------------------------------------------------------------- ! The first argument of GETP may be one of the following: ! 'NRM' (L2-norm), 'MAX' (maximum), ! 'INT' (integral), 'BV0 (left boundary value), ! 'MIN' (minimum), 'BV1' (right boundary value). ! ! Also available are ! 'STP' (Pseudo-arclength step size used). ! 'FLD' (`Fold function', which vanishes at folds). ! 'BIF' (`Bifurcation function', which vanishes at singular points). ! 'HBF' (`Hopf function'; which vanishes at Hopf points). ! 'SPB' ( Function which vanishes at secondary periodic bifurcations). !---------------------------------------------------------------------- END SUBROUTINE PVLS !---------------------------------------------------------------------- !---------------------------------------------------------------------- auto/07p/gui/auto97.c0000640000175000017500000115336313570013207012336 0ustar sksk#include "GuiMotif.h" #include "GuiConsts.h" #include "GuiWidgets.h" #include "GuiPar.h" #include "GuiFuncs.h" #include "GuiGlobal.h" /*****************************************************************/ #if 0 /* begin of all headers */ #ifndef _GUIMOTIF_H #define _GUIMOTIF_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #include #include #include #include #include #include #include #include #include #if __STDC__ #include #else #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIMOTIF_H */ /*** DON'T ADD ANYTHING AFTER THIS #endif ***/ /************************************************************************/ #ifndef _GUIDEFS_H #define _GUIDEFS_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif #include #define MENU_HELP 200 #define MENU_EXIT 201 #define MENU_OPEN 202 #define MENU_NEW 203 #define MENU_CLOSE 204 #define MENU_SAVE 205 #define MENU_SAVE_AS 206 #define MENU_PRINT 207 #define MENU_CUT 208 #define MENU_COPY 209 #define MENU_PASTE 210 #define MENU_CLEAR 211 #define DIALOG_FSELECT 300 #define DIALOG_CWARNING 301 #define DIALOG_XWARNING 302 #define DIALOG_NEW 303 #define DIALOG_SAVE 304 #define DIALOG_HELP 305 #define DIALOG_PRINT 306 #define WX_BUTTONS 30 #define WX_DEBUG 1 #define WX_TEXTLENGTH 20 #define DE_TEXTLENGTH 10 #define WX_FNLEN 100 #define XEDIT "xedit" #define XEDIT_OPTION 1 #define EMACS "emacs" #define EMACS_OPTION 2 #define AUTO_DIR "AUTO_DIR" #define MAX_NICP 10 /* has to be an even number */ #define MAX_NUZR 10 /* has to be an even number */ #define MAX_NTHL 10 /* has to be an even number */ #define MAX_NTHU 10 /* has to be an even number */ #define NONE 0 #define DEFAULT_RFILE "c.aut" #define CURRENT_RFILE "c.current" #define DEFAULT_FILE "aut.f90" #define DEFAULT_NAME "aut.f90" #define TEXT_WIDTH 60 #define EMPTY "" #define MAX_FILESIZE 20000 #define PRINT_FILE "lp < " /* typedef struct _Vector { int i; double value; } Vector; */ typedef struct _ClientData { Widget widget; int data; } ClientData; /* Global Widget : GW */ typedef struct _GlobalWidget { Widget help; /* message box widget */ Widget helpList; Widget demoList; Widget textDALG; Widget textField; Widget *parButton; Widget *probButton; Widget *disButton; Widget *tolButton; Widget *stepButton; Widget *limButton; Widget *conButton; Widget *runButton; Widget *outButton; Widget text; /* multi-line text widget */ Widget cut_button; /* clipboard cut button */ Widget copy_button; /* clipboard copy button */ Widget paste_button; /* clipboard paste button */ Widget clear_button; /* clipboard clear button */ Widget open_dialog; /* file selection dialog */ Widget new_dialog; /* file name prompt dialog */ Widget close_warning; /* special internal selection dialog */ Widget exit_warning; /* special internal selection dialog */ Widget save_dialog; /* save as prompt dialog */ Widget print_warning; /* warning dialog */ Widget mainWindow; Widget thlButton[2*MAX_NTHL]; Widget thuButton[2*MAX_NTHU]; Widget uzrButton[2*MAX_NUZR]; Widget icpButton[2*MAX_NICP]; Widget popThl,popThu,popIcp,popUzr; Widget copyFrom,copyTo; Widget moveFrom,moveTo; Widget appendFrom,appendTo; } GlobalWidget; extern GlobalWidget GW; /* Global Parameter : GP */ typedef struct _GlobalPar { Boolean exit; Boolean quit; Boolean fileIn; Boolean question; int numFileName; int activeFile; int numParameter; int numDemo; int nthl,nthu,nuzr,nicp; char nthlStr[WX_TEXTLENGTH],nthuStr[WX_TEXTLENGTH],nuzrStr[WX_TEXTLENGTH]; double thlValue[2*MAX_NTHL]; char thlStrValue[2*MAX_NTHL][WX_TEXTLENGTH]; double thuValue[2*MAX_NTHU]; char thuStrValue[2*MAX_NTHU][WX_TEXTLENGTH]; double uzrValue[2*MAX_NUZR]; char uzrStrValue[2*MAX_NUZR][WX_TEXTLENGTH]; double icpValue[2*MAX_NICP]; char icpStrValue[2*MAX_NICP][WX_TEXTLENGTH]; double *parValue; char **parStrValue; XmString *parXmLabel; XmString *demoXmItems; char fileDir[WX_FNLEN]; char filePattern[WX_FNLEN]; char fileName[WX_FNLEN]; char demoFileName[WX_FNLEN]; Boolean file_saved; char xedit[WX_FNLEN]; char emacs[WX_FNLEN]; char command[WX_FNLEN]; int autoPid; } GlobalPar; extern GlobalPar GP; #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIDEFS_H */ /* DON'T ADD ANY STUFF AFTER THIS LINE */ /************************************************************************/ #ifndef _GUIFUNCS_H #define _GUIFUNCS_H #ifndef _NO_PROTO #if !(defined(__STDC__) && __STDC__) \ && !defined(__cplusplus) \ && !defined(c_plusplus) \ && !defined(FUNCPROTO) \ && !defined(XTFUNCPROTO) \ && !defined(XMFUNCPROTO) #define _NO_PROTO #endif /* __STDC__ */ #endif /* _NO_PROTO */ #ifdef __cplusplus extern "C" { /* Begin scope of extern "C" */ #endif /* #include "WxDefs.h" */ #ifdef _NO_PROTO extern Widget AppendData(); extern void AppendDataCB(); extern void clallCB(); extern void CleanCB(); extern void CloseFile(); extern void clselCB(); extern void ConfigInit(); extern char *copyenv(); extern void CopyFileToClipboard(); extern Widget CopyData(); extern void CopyDataCB(); extern int countAny(); extern void CreateActionMenu(); extern void CreateAppendMenu(); extern void CreateBox(); extern void CreateBoxCon(); extern void CreateBoxDis(); extern void CreateBoxLim(); extern void CreateBoxOut(); extern void CreateBoxProb(); extern void CreateBoxRun(); extern void CreateBoxStep(); extern void CreateBoxTol(); extern void CreateBrowseRfileMenu(); extern void CreateFilesMenu(); extern XImage *CreateDefaultImage(); extern void CreateDefineMenu(); extern void CreateDemoMenu(); extern void CreateEditMenu(); extern void CreateFileMenu(); extern void CreateFileMenuDef(); extern Widget CreateFileSelectionDialog(); extern Widget CreateFormCon(); extern Widget CreateFormDefault(); extern Widget CreateFormDis(); extern Widget CreateFormLim(); extern Widget CreateFormOut(); extern Widget CreateFormProb(); extern Widget CreateFormRun(); extern Widget CreateFormStep(); extern Widget CreateFormTol(); extern void CreateHelpMenu(); extern Widget CreateLayout(); extern void CreateLoadRfileMenu(); extern void CreateMenuBar(); extern void CreateMiscMenu(); extern Widget CreateNewFileDialog(); extern void CreatePlotMenu(); extern void CreateRunMenu(); extern Widget CreateQuestionDialog(); extern void CreateSaveMenu(); extern Widget CreateScrolledDemoList(); extern Widget CreateScrolledHelpList(); extern void CreateSettingMenu(); extern Widget CreateSpWarningDialog(); extern void CreateText(); extern void CreateWriteMenu(); extern void DefDriverCB(); extern void DeleteCB(); extern void DeletePrimarySelection(); extern void DemoRunCB(); extern void DemoBrowseCB(); extern void DemoHelpCB(); extern void DialogAcceptCB(); extern void DialogApplyCB(); extern void DialogCancelCB(); extern void EntCancelCB(); extern void EntOkCB(); extern void ExitCB(); extern void FileChangedCB(); extern int GetAutoPid(); extern char *GetDirName(); extern void GetJobName(); extern char **getstr(); extern void HelpCB(); extern void ManualCB(); extern void MenuCB(); extern Widget MoveData(); extern void MoveDataCB(); extern void NewOutputCB(); extern Boolean noting(); extern void OkFormConCB(); extern void OkFormDefCB(); extern void OkFormDisCB(); extern void OkFormLimCB(); extern void OkFormOutCB(); extern void OkFormProbCB(); extern void OkFormRunCB(); extern void OkFormStepCB(); extern void OkFormTolCB(); extern Boolean OpenFile(); extern void OutputCB(); extern void PasteItemFromClipboard(); extern void PopdownCB(); extern void PopupCB(); extern void PopupCB1(); extern void PopupCon(); extern void PopupDis(); extern Widget PopupIcp(); extern Widget PopupIid(); extern Widget PopupIlp(); extern Widget PopupIps(); extern Widget PopupIsp(); extern Widget PopupIsw(); extern Widget PopupJac(); extern void PopupLim(); extern Widget PopupNcol(); extern void PopupOut(); extern void PopupProb(); extern void PopupRun(); extern void PopupStep(); extern void PopupTemplate(); extern void PopupTemplate1(); extern void PopupTemplate2(); extern void PopupTemplate3(); extern void PopupTemplate4(); extern Widget PopupThl(); extern Widget PopupThu(); extern void PopupTol(); extern Widget PopupUzr(); extern void PostItCB(); extern void PostItCB1(); extern void PrintCB(); extern char* ProgramName(); extern void ReadDefCB(); extern Widget ReadFile(); extern void ReadFileCB(); extern int ReadRfile(); extern void RestartCB(); extern void RunAllDemoCB(); extern void RunCB(); extern void RunDemo(); extern Boolean SaveFile(); extern void SaveParScreen(); extern void SelOkCB(); extern void SetParCB(); extern void SetParScreen(); extern void StopCB(); extern void TekCB(); extern void TmpCB(); extern void UpdateTime(); extern void VtCB(); extern void Wprintf(); extern void WriteRfile(); #else extern Widget AppendData(Widget); extern void AppendDataCB(Widget,XtPointer,XtPointer); extern void clallCB(Widget,XtPointer,XtPointer); extern void CleanCB(Widget,XtPointer,XtPointer); extern void CloseFile(); extern void clselCB(Widget,XtPointer,XtPointer); extern void ConfigInit(Widget); extern char *copyenv(char *); extern void CopyFileToClipboard(Time); extern Widget CopyData(Widget); extern void CopyDataCB(Widget,XtPointer,XtPointer); extern int countAny(int); extern void CreateActionMenu(Widget); extern void CreateAppendMenu(Widget); extern void CreateBrowseRfileMenu(Widget); extern void CreateBox(Widget); extern void CreateBoxCon(Widget); extern void CreateBoxDis(Widget); extern void CreateBoxLim(Widget); extern void CreateBoxOut(Widget); extern void CreateBoxProb(Widget); extern void CreateBoxRun(Widget); extern void CreateBoxStep(Widget); extern void CreateBoxTol(Widget); extern void CreateFilesMenu(Widget); extern XImage *CreateDefaultImage(char*, int, int); extern void CreateDefineMenu(Widget); extern void CreateDemoMenu(Widget); extern void CreateEditMenu(Widget); extern void CreateFileMenu(Widget); extern void CreateFileMenuDef(Widget); extern Widget CreateFileSelectionDialog(Widget,int); extern Widget CreateFormCon(Widget); extern Widget CreateFormDefault(Widget); extern Widget CreateFormDis(Widget); extern Widget CreateFormLim(Widget); extern Widget CreateFormOut(Widget); extern Widget CreateFormProb(Widget); extern Widget CreateFormRun(Widget); extern Widget CreateFormStep(Widget); extern Widget CreateFormTol(Widget); extern void CreateHelpMenu(Widget); extern Widget CreateLayout(Widget); extern void CreateLoadRfileMenu(Widget); extern void CreateMenuBar(Widget); extern void CreateMiscMenu(Widget); extern Widget CreateNewFileDialog(Widget,int); extern void CreatePlotMenu(Widget); extern void CreateRunMenu(Widget); extern Widget CreateQuestionDialog(Widget); extern void CreateSaveMenu(Widget); extern Widget CreateScrolledDemoList(Widget); extern Widget CreateScrolledHelpList(Widget); extern void CreateSettingMenu(Widget); extern Widget CreateSpWarningDialog(Widget,String,String,String,ArgList,int); extern void CreateText(Widget); extern void CreateWriteMenu(Widget); extern void DefDriverCB(Widget,XtPointer,XtPointer); extern void DeleteCB(Widget,XtPointer,XtPointer); extern void DeletePrimarySelection(Time); extern void DemoRunCB(Widget,XtPointer,XtPointer); extern void DemoBrowseCB(Widget,XtPointer,XtPointer); extern void DemoHelpCB(Widget,XtPointer,XtPointer); extern void DialogAcceptCB(Widget,XtPointer,XtPointer); extern void DialogApplyCB(Widget,XtPointer,XtPointer); extern void DialogCancelCB(Widget,XtPointer,XtPointer); extern void EntCancelCB(Widget,XtPointer,XtPointer); extern void EntOkCB(Widget,XtPointer,XtPointer); extern void ExitCB(Widget,XtPointer,XtPointer); extern void FileChangedCB(Widget,XtPointer,XtPointer); extern int GetAutoPid(char *); extern char *GetDirName(); extern void GetJobName(char *,char *); extern char **getstr(int,int); extern void HelpCB(Widget ,XtPointer, XtPointer); extern void ManualCB(Widget,XtPointer,XtPointer); extern void MenuCB(Widget,XtPointer,XtPointer); extern Widget MoveData(Widget); extern void MoveDataCB(Widget,XtPointer,XtPointer); extern void NewOutputCB(Widget,XtPointer,XtPointer); extern Boolean noting(char *); extern void OkFormConCB(Widget,XtPointer,XtPointer); extern void OkFormDefCB(Widget,XtPointer,XtPointer); extern void OkFormDisCB(Widget,XtPointer,XtPointer); extern void OkFormLimCB(Widget,XtPointer,XtPointer); extern void OkFormOutCB(Widget,XtPointer,XtPointer); extern void OkFormProbCB(Widget,XtPointer,XtPointer); extern void OkFormRunCB(Widget,XtPointer,XtPointer); extern void OkFormStepCB(Widget,XtPointer,XtPointer); extern void OkFormTolCB(Widget,XtPointer,XtPointer); extern Boolean OpenFile(char *); extern void OutputCB(Widget,XtPointer,XtPointer); extern void PasteItemFromClipboard(); extern void PopdownCB(Widget,XtPointer,XtPointer); extern void PopupCB(Widget,XtPointer,XtPointer); extern void PopupCB1(Widget,XtPointer,XtPointer); extern void PopupCon(Widget); extern void PopupDis(Widget); extern Widget PopupIcp(Widget); extern Widget PopupIid(Widget); extern Widget PopupIlp(Widget); extern Widget PopupIps(Widget); extern Widget PopupIsp(Widget); extern Widget PopupIsw(Widget); extern Widget PopupJac(Widget); extern void PopupLim(Widget); extern Widget PopupNcol(Widget); extern void PopupOut(Widget); extern void PopupProb(Widget); extern void PopupRun(Widget); extern void PopupStep(Widget); extern void PopupTemplate(Widget,Widget*,Widget*,Widget*, Widget*,Widget*,int); extern void PopupTemplate1(Widget,Widget*,Widget*,Widget*,Widget*,Widget*); extern void PopupTemplate2(Widget,Widget*); extern void PopupTemplate3(Widget,Widget*,Widget*,Widget*,Widget*,Widget*); extern void PopupTemplate4(Widget,Widget*,Widget*,Widget*); extern Widget PopupThl(Widget); extern Widget PopupThu(Widget); extern void PopupTol(Widget); extern Widget PopupUzr(Widget); extern void PostItCB(Widget,XtPointer,XEvent *,Boolean *); extern void PostItCB1(Widget,XtPointer,XEvent *,Boolean *); extern void PrintCB(Widget,XtPointer,XtPointer); extern char* ProgramName(char *); extern void ReadDefCB(Widget,XtPointer,XtPointer); extern Widget ReadFile(Widget); extern void ReadFileCB(Widget,XtPointer,XtPointer); extern int ReadRfile(char *); extern void RestartCB(Widget,XtPointer,XtPointer); extern void RunAllDemoCB(Widget,XtPointer,XtPointer); extern void RunCB(Widget,XtPointer,XtPointer); extern void RunDemo(char *); extern Boolean SaveFile(); extern void SaveParScreen(int); extern void SelOkCB(Widget,XtPointer,XtPointer); extern void SetParCB(Widget w,XtPointer,XtPointer); extern void SetParScreen(); extern void StopCB(Widget,XtPointer,XtPointer); extern void TekCB(Widget,XtPointer,XtPointer); extern void TmpCB(Widget,XtPointer,XtPointer); extern void UpdateTime(XtPointer, XtIntervalId *); extern void VtCB(Widget,XtPointer,XtPointer); #if __STDC__ extern void Wprintf(Widget,...); #else extern void Wprintf(...); #endif extern void WriteRfile(char *); #endif /* _NO_PROTO */ #ifdef __cplusplus } /* Close scope of extern "C" */ #endif #endif /* _GUIFUNCS_H */ /*** DON'T ADD ANYTHING AFTER THIS #endif ***/ /************************************************************************/ #endif /* end of all headers */ /* *********************************************************************** ** ** Main.c ** ************************************************************************ */ #ifdef _NO_PROTO main(argc,argv) int argc; char *argv[]; #else main(int argc,char **argv) #endif { XtAppContext applContext; Widget topLevel,mainWindow; /* topLevel = XtVaAppInitialize(&applContext,"XAuto",NULL,0, &argc,argv,NULL,NULL); */ topLevel = XtInitialize(argv[0],"Auto",NULL,0,&argc,argv); mainWindow = XmCreateMainWindow(topLevel,"MainWindow",NULL,0); XtVaSetValues(mainWindow,XmNshadowThickness,0,NULL); XtManageChild(mainWindow); ConfigInit(mainWindow); CreateMenuBar(mainWindow); GW.mainWindow=CreateLayout(mainWindow); CreateText(GW.mainWindow); XtManageChild(GW.text); XmAddTabGroup(GW.text); XtSetSensitive(GW.text, False); XtRealizeWidget(topLevel); /* XtAppMainLoop(applContext); */ XtMainLoop(); } #ifdef _NO_PROTO Widget CreateLayout(parent) Widget parent; #else Widget CreateLayout(Widget parent) #endif { Widget rtrn,form,rwcl,line,frame,frame1,button,pane,wgt,line1; Widget form2,frame2,rwcl2,clock; form = XmCreateForm(parent,"Form",NULL,0); XtManageChild(form); pane = XmCreateRowColumn(form,"RowColumn",NULL,0); XtManageChild(pane); XtVaSetValues(pane, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNbottomOffset,10, /* XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,4, */ NULL); form2=XmCreateForm(pane,"fm",NULL,0); XtManageChild(form2); clock = XmCreateLabel(form2,"Face",NULL,0); XtManageChild(clock); XtVaSetValues(clock, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNleftOffset,15, XmNrightOffset,10, NULL); UpdateTime(clock,NULL); wgt = XmCreateForm(pane,"Form",NULL,0); XtManageChild(wgt); frame = XmCreateFrame(wgt,"Frame",NULL,0); XtManageChild(frame); XtVaSetValues(frame, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, /* XmNbottomOffset,5,*/ XmNleftOffset,10, XmNrightOffset,4, NULL); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); button = XmCreateLabel(rwcl,"DefineConsts",NULL,0); XtManageChild(button); line = XmCreateSeparator(rwcl,"Separator",NULL,0); XtManageChild(line); /* line1 = CreateFormDefault(parent); */ button = XmCreatePushButton(rwcl,"Problem",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'P', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftP:",NULL); */ line = CreateFormProb(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupProb(button); button = XmCreatePushButton(rwcl,"Discretize",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'D', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftD:",NULL); */ line = CreateFormDis(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupDis(button); button = XmCreatePushButton(rwcl,"Tolerances",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'T', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftT:",NULL); */ line = CreateFormTol(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupTol(button); button = XmCreatePushButton(rwcl,"Step Size",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'S', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftS:",NULL); */ line = CreateFormStep(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupStep(button); button = XmCreatePushButton(rwcl,"Limits",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'L', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftL:",NULL); */ line = CreateFormLim(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupLim(button); button = XmCreatePushButton(rwcl,"Parameters",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'C', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftC:",NULL); */ line = CreateFormCon(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupCon(button); button = XmCreatePushButton(rwcl,"Computation",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'R', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftR:",NULL); */ line = CreateFormRun(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupRun(button); button = XmCreatePushButton(rwcl,"Output",NULL,0); XtManageChild(button); /* XtVaSetValues(button,XmNmnemonic,'O', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftO:",NULL); */ line = CreateFormOut(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,line); PopupOut(button); /* XtVaSetValues(button,XmNmnemonic,'A', XmNtranslations,XtParseTranslationTable(transTable), XmNaccelerator,"ShiftA:",NULL); line1 = CreateFormDefault(parent); */ frame1 = XmCreateFrame(wgt,"Frame",NULL,0); XtManageChild(frame1); XtVaSetValues(frame1, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,frame, XmNtopOffset,10, /* XmNbottomOffset,10, */ XmNleftOffset,10, XmNrightOffset,4, NULL); rwcl = XmCreateRowColumn(frame1,"RowColumn",NULL,0); XtManageChild(rwcl); /* button = XmCreatePushButton(rwcl,"Run",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,RunCB,1); button = XmCreatePushButton(rwcl,"Reset",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,RunCB,2); button = XmCreatePushButton(rwcl,"Exit",NULL,0); XtManageChild(button); wgt = CreateQuestionDialog(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,wgt); */ button = XmCreateLabel(rwcl,"LoadConsts",NULL,0); XtManageChild(button); button = XmCreateSeparator(rwcl,"Separator",NULL,0); XtManageChild(button); line1 = ReadFile(parent); button = XmCreatePushButton(rwcl,"Previous",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,PopupCB,line1); button = XmCreatePushButton(rwcl,"Default",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,ReadDefCB,NULL); form2 = XmCreateForm(pane,"Fm",NULL,0); XtManageChild(form2); frame2=XmCreateFrame(form2,"Fr",NULL,0); XtManageChild(frame2); XtVaSetValues(frame2, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,7, XmNbottomOffset,5, XmNleftOffset,10, XmNrightOffset,4, NULL); rwcl2=XmCreateRowColumn(frame2,"rm",NULL,0); XtManageChild(rwcl2); XtVaSetValues(rwcl2,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); /* button = XmCreatePushButton(rwcl2,"Run",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,RunCB,1); button = XmCreatePushButton(rwcl2,"Reset",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,RunCB,2); */ button = XmCreatePushButton(rwcl2,"Stop ",NULL,0); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,StopCB,NULL); button = XmCreatePushButton(rwcl2,"Exit ",NULL,0); XtManageChild(button); wgt = CreateQuestionDialog(parent); XtAddCallback(button,XmNactivateCallback,PopupCB,wgt); line = XmCreateSeparator(form,"Separator",NULL,0); XtManageChild(line); XtVaSetValues(line,XmNorientation,XmVERTICAL,NULL); XtVaSetValues(line, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_NONE, XmNleftWidget,pane, XmNleftOffset,1, XmNrightOffset,1, NULL); rwcl = XmCreateForm(form,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,line, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,4, XmNrightOffset,10, NULL); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); XtVaSetValues(frame, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); rtrn = XmCreateMainWindow(frame,"Form",NULL,0); XtManageChild(rtrn); return rtrn; } #ifdef _NO_PROTO void CreateText(parent) Widget parent; #else void CreateText(Widget parent) #endif /* cdromd -a; eject; */ { Arg al[10]; /* arg list */ register int ac; /* arg count */ register int i; /* counter */ XFontStruct * newfont; Widget v,h; /* create text widget */ ac = 0; XtSetArg (al[ac], XmNrows, 24); ac++; /* XtSetArg (al[ac], XmNcolumns, 80); ac++; */ XtSetArg (al[ac], XmNcolumns, TEXT_WIDTH); ac++; XtSetArg (al[ac], XmNresizeWidth, False); ac++; XtSetArg (al[ac], XmNresizeHeight, False); ac++; XtSetArg (al[ac], XmNscrollVertical, True); ac++; XtSetArg (al[ac], XmNscrollHorizontal, True); ac++; XtSetArg (al[ac], XmNeditMode, XmMULTI_LINE_EDIT); ac++; XtSetArg (al[ac], XmNscrollingPolicy, XmAUTOMATIC); ac++; XtSetArg (al[ac], XmNblinkRate,0); ac++; GW.text = XmCreateScrolledText (parent, "text", al, ac); /* XtVaSetValues(GW.text, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaGetValues(GW.text,XmNverticalScrollBar,&v, XmNhorizontalScrollBar,&h,NULL); XtVaSetValues(v,XmNwidth,10,NULL); XtVaSetValues(h,XmNwidth,10,NULL); */ /* add value changed callback */ XtAddCallback (GW.text, XmNmodifyVerifyCallback, FileChangedCB, NULL); } /* *********************************************************************** ** ** ConfigInit.c ** ************************************************************************ */ #ifdef _NO_PROTO void ConfigInit(parent) Widget parent; #else void ConfigInit(Widget parent) #endif { int i,k1,k2; Widget wgt,txtField; char demo[10]; printf("\n"); strcpy(GP.autoDir,copyenv(AUTO_DIR)); GP.nicpFlag = 0; GP.restart = 0; GP.file_saved=True; GP.autoPid = -1; strcpy(GP.fileName,EMPTY); strcpy(GP.demoFileName,EMPTY); strcpy(GP.xedit,XEDIT); strcpy(GP.emacs,EMACS); GP.numDemo = sizeof(demoItems) / sizeof(demoItems[0]); GP.numParameter = sizeof(parLabel) / sizeof(parLabel[0]); GW.parButton = (Widget*) malloc(GP.numParameter*sizeof(Widget)); GW.probButton = (Widget*) malloc(4*sizeof(Widget)); GW.disButton = (Widget*) malloc(3*sizeof(Widget)); GW.tolButton = (Widget*) malloc(6*sizeof(Widget)); GW.stepButton = (Widget*) malloc(6*sizeof(Widget)); GW.limButton = (Widget*) malloc(5*sizeof(Widget)); GW.conButton = (Widget*) malloc(2*sizeof(Widget)); GW.runButton = (Widget*) malloc(6*sizeof(Widget)); GW.outButton = (Widget*) malloc(4*sizeof(Widget)); GP.parValue = (double*) malloc(GP.numParameter*sizeof(double)); GP.parXmLabel = (XmString*) malloc(GP.numParameter*sizeof(XmString)); GP.demoXmItems = (XmString*) malloc(GP.numDemo*sizeof(XmString)); GP.parStrValue = getstr(GP.numParameter,WX_TEXTLENGTH); GP.nuzr = 0; GP.nthl = 0; GP.nthu = 0; for(i = 0; i < GP.numParameter; i++) { GP.parValue[i] = NONE; GP.parXmLabel[i] = XmStringCreateSimple(parLabel[i]); strcpy(GP.parStrValue[i],""); } /* sprintf(GP.parStrValue[PAR_NUZR],"%d",GP.nuzr); sprintf(GP.parStrValue[PAR_NTHL],"%d",GP.nthl); sprintf(GP.parStrValue[PAR_NTHU],"%d",GP.nthu); */ for(i = 0; i < MAX_NTHL; i++){ k1=2*i; k2=k1+1; GP.thlToggle[i] = False; GP.thlValue[k1]=NONE; GP.thlValue[k2]=NONE; strcpy(GP.thlStrValue[k1],""); strcpy(GP.thlStrValue[k2],""); } for(i = 0; i < MAX_NTHU; i++){ k1=2*i; k2=k1+1; GP.thuToggle[i] = False; GP.thuValue[k1]=NONE; GP.thuValue[k2]=NONE; strcpy(GP.thuStrValue[k1],""); strcpy(GP.thuStrValue[k2],""); } for(i = 0; i < MAX_NUZR; i++){ k1=2*i; k2=k1+1; GP.uzrToggle[i] = False; GP.uzrValue[k1]=NONE; GP.uzrValue[k2]=NONE; strcpy(GP.uzrStrValue[k1],""); strcpy(GP.uzrStrValue[k2],""); } for(i = 0; i < MAX_NICP; i++){ GP.icpToggle[i] = False; GP.icpValue[i]=NONE; strcpy(GP.icpStrValue[i],""); /* k1=2*i; k2=k1+1; GP.icpValue[k1]=NONE; GP.icpValue[k2]=NONE; strcpy(GP.icpStrValue[k1],""); strcpy(GP.icpStrValue[k2],""); */ } for(i = 0; i < GP.numDemo; i++) { k1 = strlen(demoItems[i]); strncpy(demo,demoItems[i],k1-4); demo[k1-4] = '\0'; GP.demoXmItems[i] = XmStringCreateLtoR(demo,XmSTRING_DEFAULT_CHARSET); /* GP.demoXmItems[i] = XmStringCreateLtoR(demoItems[i],XmSTRING_DEFAULT_CHARSET); */ } GW.demoList = CreateScrolledDemoList(parent); GW.helpList = CreateScrolledHelpList(parent); GW.demo_list = CreateDemoList(parent); GW.textDALG = XmCreateFormDialog(parent,"Message",NULL,0); PopupTemplate2(GW.textDALG,&txtField); GW.textField = XmCreateScrolledText(txtField,"Browser",NULL,0); XtManageChild(GW.textField); XtVaSetValues(GW.textField, XmNblinkRate,0, XmNeditable,False, XmNeditMode,XmMULTI_LINE_EDIT, XmNrows,24, XmNcolumns,TEXT_WIDTH, XmNresizeWidth, False, XmNresizeHeight, False, XmNscrollVertical, True, XmNscrollHorizontal, True, XmNscrollingPolicy, XmAUTOMATIC, NULL); } /* *********************************************************************** ** ** CreateMenuBar.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateMenuBar(parent) Widget parent; #else void CreateMenuBar(Widget parent) #endif { Widget menuBar; menuBar = XmCreateMenuBar(parent,"MenuBar",NULL,0); XtManageChild(menuBar); CreateFileMenuDef(menuBar); /* CreateFileMenu(menuBar); */ CreateEditMenu(menuBar); CreateWriteMenu(menuBar); /* CreateSettingMenu(menuBar); CreateActionMenu(menuBar); */ CreateDefineMenu(menuBar); CreateRunMenu(menuBar); /* CreateLoadRfileMenu(menuBar); */ /* CreateBrowseRfileMenu(menuBar); */ CreateSaveMenu(menuBar); CreateAppendMenu(menuBar); CreatePlotMenu(menuBar); CreateFilesMenu(menuBar); CreateDemoMenu(menuBar); CreateMiscMenu(menuBar); /*MiscMenu*/ CreateHelpMenu(menuBar); } /* *********************************************************************** ** ** CreateFileMenuDef.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateFileMenuDef(menuBar) Widget menuBar; #else void CreateFileMenuDef(Widget menuBar) #endif { Widget sept; Widget cascade; /* CascadeButton */ Widget menuPane; /* RowColumn */ Widget button; /* PushButton */ menuPane = XmCreatePulldownMenu(menuBar,"EqnPane",NULL,0); /* XtManageChild(menuPane); */ cascade = XmCreateCascadeButton(menuBar,"Equations",NULL,0); XtVaSetValues(cascade,XmNsubMenuId,menuPane,XmNmnemonic,'q',NULL); XtManageChild(cascade); GW.open_dialog = XmCreateFileSelectionDialog(menuPane,"Selection", NULL, 0); XtAddCallback(GW.open_dialog,XmNokCallback,DialogAcceptCB,(XtPointer)DIALOG_FSELECT); XtAddCallback(GW.open_dialog,XmNcancelCallback,DialogCancelCB,(XtPointer)DIALOG_FSELECT); button = XmSelectionBoxGetChild(GW.open_dialog,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); button = XmCreatePushButtonGadget(menuPane, "Old ...",NULL,0); XtVaSetValues(button,XmNmnemonic,'O',NULL); XtAddCallback(button, XmNactivateCallback, MenuCB, (XtPointer)MENU_OPEN); XtManageChild(button); GW.new_dialog = XmCreatePromptDialog(menuPane,"new file dialog",NULL,0); XtVaSetValues(GW.new_dialog,XmNselectionLabelString, XmStringCreateSimple("Enter name"),NULL); button = XmSelectionBoxGetChild(GW.new_dialog,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); XtAddCallback(GW.new_dialog, XmNokCallback,DialogAcceptCB, (XtPointer)DIALOG_NEW); XtAddCallback(GW.new_dialog, XmNcancelCallback,DialogCancelCB, (XtPointer)DIALOG_NEW); button = XmCreatePushButtonGadget (menuPane, "New ...",NULL,0); XtVaSetValues(button,XmNmnemonic,'N',NULL); XtAddCallback(button, XmNactivateCallback, MenuCB, (XtPointer)MENU_NEW); XtManageChild(button); /* button = XmCreatePushButtonGadget (menuPane, "Default",NULL,0); XtVaSetValues(button,XmNmnemonic,'e',NULL); XtAddCallback(button, XmNactivateCallback, DefDriverCB,NULL); XtManageChild(button); sept = XmCreateSeparatorGadget(menuPane,"sp",NULL,0); XtManageChild(sept); */ button = XmCreatePushButtonGadget(menuPane,"Demo ...",NULL,0); XtVaSetValues(button,XmNmnemonic,'D',NULL); XtManageChild(button); XtAddCallback(button,XmNactivateCallback,PopupCB,GW.demo_list); #if 0 sept = XmCreateSeparatorGadget(menuPane,"sp",NULL,0); XtManageChild(sept); /* ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Close", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'C'); ac++; button = XmCreatePushButtonGadget (menuPane, "Clear", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_CLOSE); XtManageChild (button); GW.close_warning = CreateSpWarningDialog(menuPane, "save_warning", "warning_image", "Save Changes?", al, ac); XtAddCallback(GW.close_warning,XmNapplyCallback,DialogApplyCB,(XtPointer)DIALOG_CWARNING); XtAddCallback(GW.close_warning,XmNokCallback,DialogAcceptCB, (XtPointer)DIALOG_CWARNING); */ ac = 0; XtSetArg(al[ac], XmNlabelString,XmStringCreateLtoR("Save", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'S'); ac++; button = XmCreatePushButtonGadget (menuPane, "Save", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_SAVE); XtManageChild (button); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Save As ...", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'A'); ac++; button = XmCreatePushButtonGadget (menuPane, "Save As ...", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_SAVE_AS); XtManageChild (button); ac = 0; XtSetArg(al[ac], XmNselectionLabelString, XmStringCreateLtoR ("Save As ...", XmSTRING_DEFAULT_CHARSET)); ac++; GW.save_dialog = XmCreatePromptDialog(menuPane, "save dialog", al, ac); XtAddCallback (GW.save_dialog, XmNokCallback, DialogAcceptCB, (XtPointer)DIALOG_SAVE); /* ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Print", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'P'); ac++; button = XmCreatePushButtonGadget (menuPane, "Print", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_PRINT); XtManageChild (button); ac = 0; XtSetArg(al[ac], XmNselectionLabelString, XmStringCreateLtoR ("Save file before printing?", XmSTRING_DEFAULT_CHARSET)); ac++; GW.print_warning = CreateSpWarningDialog(menuPane, "print_warning", "warning_image", "Save file before printing?", al, ac); XtAddCallback (GW.print_warning, XmNokCallback, DialogAcceptCB, (XtPointer)DIALOG_PRINT); */ sept = XmCreateSeparatorGadget(menuPane,"sp",NULL,0); XtManageChild(sept); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Clear", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'C'); ac++; button = XmCreatePushButtonGadget (menuPane, "Clear", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_CLOSE); XtManageChild (button); GW.close_warning = CreateSpWarningDialog(menuPane, "save_warning", "warning_image", "Save Changes?", al, ac); XtAddCallback(GW.close_warning,XmNapplyCallback,DialogApplyCB,(XtPointer)DIALOG_CWARNING); XtAddCallback(GW.close_warning,XmNokCallback,DialogAcceptCB, (XtPointer)DIALOG_CWARNING); sept = XmCreateSeparatorGadget(menuPane,"sp",NULL,0); XtManageChild(sept); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Exit", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'E'); ac++; XtSetArg(al[ac], XmNacceleratorText, XmStringCreateLtoR("Escape", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNaccelerator, "Escape:"); ac++; button = XmCreatePushButtonGadget (menuPane, "Exit", al, ac); XtAddCallback (button, XmNactivateCallback, MenuCB, (XtPointer)MENU_EXIT); XtManageChild (button); GW.exit_warning = CreateSpWarningDialog(menuPane, "exit warning", "warning_image", "Save Changes?", al, ac); XtAddCallback (GW.exit_warning, XmNapplyCallback, DialogApplyCB, (XtPointer)DIALOG_XWARNING); XtAddCallback (GW.exit_warning, XmNokCallback, DialogAcceptCB, (XtPointer)DIALOG_XWARNING); #endif } #ifdef _NO_PROTO void DefDriverCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void DefDriverCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { char command[100]; strcpy(GP.fileName,DEFAULT_NAME); /* autoDir = copyenv(AUTO_DIR); */ strcpy(command,GP.autoDir); /* strcat(command,"/gui/default.f"); */ strcat(command,"/gui/"); strcat(command,DEFAULT_FILE); if (!OpenFile(command)) { XtSetSensitive(GW.text, True); XtSetSensitive(GW.cut_button, True); XtSetSensitive(GW.copy_button, True); XtSetSensitive(GW.clear_button, True); } ReadDefCB(w,userData,callbackArg); printf("Loading default Auto-Equation and Auto-Constants files to buffer ... done\n"); } /* *********************************************************************** ** ** CreateWriteMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateWriteMenu(menuBar) Widget menuBar; #else void CreateWriteMenu(Widget menuBar) #endif { Widget cascade; /* CascadeButton */ Widget menuPane; /* RowColumn */ Widget button,bn; /* PushButton */ menuPane = XmCreatePulldownMenu(menuBar, "WritePane",NULL,0); /* XtManageChild(menuPane); */ cascade = XmCreateCascadeButton(menuBar,"Write",NULL,0); XtManageChild(cascade); XtVaSetValues(cascade,XmNsubMenuId,menuPane,XmNmnemonic,'W',NULL); button = XmCreatePushButtonGadget(menuPane, "Write", NULL,0); XtManageChild(button); XtVaSetValues(button,XmNmnemonic,'W',NULL); XtAddCallback(button, XmNactivateCallback, MenuCB, (XtPointer)MENU_SAVE); GW.save_dialog = XmCreatePromptDialog(menuPane, "save dialog",NULL,0); button = XmSelectionBoxGetChild(GW.save_dialog,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); XtVaSetValues(GW.save_dialog,XmNselectionLabelString, XmStringCreateSimple("Write as"),NULL,0); XtAddCallback(GW.save_dialog,XmNokCallback,DialogAcceptCB, (XtPointer)DIALOG_SAVE); bn = XmCreatePushButtonGadget(menuPane, "Write As ...",NULL,0); XtManageChild(bn); XtVaSetValues(bn,XmNmnemonic,'A',NULL); XtAddCallback(bn, XmNactivateCallback, MenuCB, (XtPointer)MENU_SAVE_AS); } /* *********************************************************************** ** ** CreateEditMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateEditMenu(menuBar) Widget menuBar; #else void CreateEditMenu(Widget menuBar) #endif { Widget cascade; /* CascadeButton */ Widget menuPane; /* RowColumn */ Widget button; /* PushButton */ #if 0 Arg al[10]; /* arg list */ register int ac; /* arg count */ #endif /* Create "Options" PulldownMenu. */ menuPane = XmCreatePulldownMenu(menuBar, "EditPane",NULL,0); /* XtManageChild(menuPane); */ /* ac = 0; XtSetArg (al[ac], XmNsubMenuId, menuPane); ac++; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Edit", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'E'); ac++; */ cascade= XmCreateCascadeButton(menuBar, "Edit",NULL,0); XtVaSetValues(cascade,XmNsubMenuId,menuPane,XmNmnemonic,'E',NULL); XtManageChild(cascade); /* ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Cut", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 't'); ac++; XtSetArg(al[ac], XmNacceleratorText, XmStringCreateLtoR("Delete", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNaccelerator, "Delete:"); ac++; */ GW.cut_button = XmCreatePushButtonGadget(menuPane, "Cut", NULL,0); XtAddCallback(GW.cut_button, XmNactivateCallback, MenuCB, (XtPointer)MENU_CUT); XtVaSetValues(GW.cut_button,XmNmnemonic,'C',NULL); XtManageChild(GW.cut_button); XtSetSensitive(GW.cut_button, False); /* ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Copy", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'C'); ac++; XtSetArg(al[ac], XmNacceleratorText, XmStringCreateLtoR("F2", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNaccelerator, "F2:"); ac++; */ GW.copy_button = XmCreatePushButtonGadget(menuPane, "Copy", NULL,0); XtAddCallback(GW.copy_button, XmNactivateCallback, MenuCB, (XtPointer)MENU_COPY); XtManageChild(GW.copy_button); XtVaSetValues(GW.copy_button,XmNmnemonic,'o',NULL); XtSetSensitive(GW.copy_button, False); /* ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Paste", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'P'); ac++; XtSetArg(al[ac], XmNacceleratorText, XmStringCreateLtoR("Insert", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNaccelerator, "Insert:"); ac++; */ GW.paste_button = XmCreatePushButtonGadget(menuPane, "Paste",NULL,0); XtAddCallback(GW.paste_button, XmNactivateCallback, MenuCB, (XtPointer)MENU_PASTE); XtManageChild(GW.paste_button); XtVaSetValues(GW.paste_button,XmNmnemonic,'P',NULL); XtSetSensitive(GW.paste_button, False); #if 0 ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Clear", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetArg(al[ac], XmNmnemonic, 'e'); ac++; /* pseudo accelerator - Text already handles this action appropriately */ XtSetArg(al[ac], XmNacceleratorText, XmStringCreateLtoR("Del", XmSTRING_DEFAULT_CHARSET)); ac++; GW.clear_button = XmCreatePushButtonGadget (menuPane, "Clear", al, ac); XtAddCallback (GW.clear_button, XmNactivateCallback, MenuCB, (XtPointer)MENU_CLEAR); /* XtManageChild (GW.clear_button); */ XtSetSensitive(GW.clear_button, False); #endif } #ifdef _NO_PROTO XImage *CreateDefaultImage(bits, width, height) char *bits; int width, height; #else XImage *CreateDefaultImage(char *bits, int width, int height) #endif { XImage *image; image = (XImage *) XtMalloc (sizeof (XImage)); image->width = width; image->height = height; image->data = bits; image->depth = 1; image->xoffset = 0; image->format = XYBitmap; image->byte_order = LSBFirst; image->bitmap_unit = 8; image->bitmap_bit_order = LSBFirst; image->bitmap_pad = 8; image->bytes_per_line = (width+7)/8; return (image); } /* ** Open the present file. Returns true if file ** exists and open is sucessful. */ #ifdef _NO_PROTO Boolean OpenFile(file_name) char *file_name; #else Boolean OpenFile(char *file_name) #endif { struct stat statbuf; /* Information on a file. */ int file_length,n; /* Length of file. */ char *file_string; /* Contents of file. */ FILE *fp = NULL; /* Pointer to open file */ /* CloseFile(); */ if((fp = fopen(file_name, "r")) == NULL) { return (False); } if(stat(file_name, &statbuf) == 0) file_length = statbuf.st_size; else file_length = MAX_FILESIZE; n = 2*file_length+MIN_FILESIZE; file_string = (char *) XtMalloc(n); fread(file_string, sizeof(char), file_length, fp); file_string[file_length] = '\0'; XmTextSetString(GW.text, file_string); GP.file_saved = True; XtSetSensitive(GW.text, True); XtSetSensitive(GW.cut_button, True); XtSetSensitive(GW.copy_button, True); if(file_string != NULL) XtFree(file_string); if (fp != NULL) fclose(fp); return(True); #if 0 struct stat statbuf; /* Information on a file. */ int file_length; /* Length of file. */ char *file_string; /* Contents of file. */ FILE *fp = NULL; /* Pointer to open file */ if((fp = fopen(file_name, "r+")) == NULL) if((fp = fopen(file_name, "r")) != NULL) { /* fprintf(stderr, "Warning: unable to open the file\n"); */ CloseFile(); return (False); } else { return(False); } if(stat(file_name, &statbuf) == 0) file_length = statbuf.st_size; else file_length = 20000; /* arbitrary file length */ /* read the file string */ file_string = (char *) XtMalloc(file_length); fread(file_string, sizeof(char), file_length, fp); /* close up the file */ if(fclose(fp) != NULL) fprintf(stderr, "Warning: unable to close file.\n"); /* added the file string to the text widget */ XmTextSetString(GW.text, file_string); GP.file_saved = True; /* intialize to True */ /* make appropriate item sensitive */ XtSetSensitive(GW.text, True); XtSetSensitive(GW.cut_button, True); XtSetSensitive(GW.copy_button, True); /* XtSetSensitive(GW.clear_button, True); */ if(file_string != NULL) XtFree(file_string); return(True); #endif } /* ** Save the present file. */ Boolean SaveFile() { char *file_string = NULL; /* Contents of file. */ FILE *fp; char name[20],rname[20]; int i=0; if((fp = fopen(ProgramName(GP.fileName), "w")) == NULL) { fprintf(stderr, "Warning: unable to write file %s\n",ProgramName(GP.fileName)); return(False);; } file_string = (char *)XmTextGetString(GW.text); /* original line fwrite(file_string, sizeof(char), strlen(file_string) + 1, fp); */ fwrite(file_string, sizeof(char), strlen(file_string), fp); GP.file_saved = True; strcpy(name,ProgramName(GP.fileName)); while(name[i] != '.') ++i; name[i]='\0'; strcpy(rname,"c."); strcat(rname,name); /* WriteRfile(CURRENT_RFILE); */ WriteRfile(rname); if (file_string != NULL) { XtFree(file_string); } if (fp != NULL) fclose(fp); printf("Saving %s ... done\n",ProgramName(GP.fileName)); printf("Saving %s ... done\n",rname); return(True); #if 0 char *file_string = NULL; /* Contents of file. */ FILE *tfp; /* Pointer to open temporary file. */ char namebuf[BUFSIZ]; /* for "system" call below */ int status; char *tempname = (char *)XtMalloc(100); /* Temporary file name. */ /* strcpy(tempname, mktemp("/tmp/xmeditXXXXXX"));*/ strcpy(tempname, mktemp("/tmp/XAutoXXXXXX")); if((tfp = fopen(tempname, "w")) == NULL) { fprintf(stderr, "Warning: unable to open temp file, text not saved.\n"); return(False);; } /* get the text string */ file_string = (char *)XmTextGetString(GW.text); /* write to a temp file */ fwrite(file_string, sizeof(char), strlen(file_string) + 1, tfp); /* flush and close the temp file */ if (fflush(tfp) != NULL) fprintf(stderr,"Warning: unable to flush file.\n"); if (fclose(tfp) != NULL) fprintf(stderr,"Warning: unable to close file.\n"); if (file_string != NULL) { XtFree(file_string); /* free the text string */ } /* move the tempname to the saved file, but do it independent of filesystem boundaries */ sprintf (namebuf, "cp %s \.\/%s\0", tempname, ProgramName(GP.fileName)); status = system(namebuf); unlink (tempname); if (status == 0) { } else { fprintf(stderr, "Warning: unable to save file.\n"); XtFree(tempname); return(False); } XtFree(tempname); return(True); #endif } /* ** Close the present file. */ void CloseFile() { XmTextSetString(GW.text, ""); XtSetSensitive(GW.text, False); #if 0 /* zero out the text string in the text widget. caution: is causes a value changed callack. */ XmTextSetString(GW.text, ""); GP.file_saved = True; /* reinitialize file_saved flag */ /* free the file name */ if( strcmp(GP.fileName,EMPTY) != 0 ) { /* XtFree(GP.file_name); */ /* GP.file_name = NULL; */ strcpy(GP.fileName,EMPTY); } /* set text to insensitive */ XtSetSensitive(GW.text, False); #endif } /* ** Copy the present file to the clipboard. */ #ifdef _NO_PROTO void CopyFileToClipboard(time) Time time; #else void CopyFileToClipboard(Time time) #endif { char *selected_string = XmTextGetSelection (GW.text); /* text selection */ long item_id = 0; /* clipboard item id */ long data_id = 0; /* clipboard data id */ int status = 0; /* clipboard status */ XmString clip_label; /* using the clipboard facilities, copy the selected text to the clipboard */ if(selected_string != NULL) { clip_label = XmStringCreateLtoR ("XM_EDITOR", XmSTRING_DEFAULT_CHARSET); /* start copy to clipboard, and continue till a sucessful start copy is made */ status = 0; while(status != ClipboardSuccess) status = XmClipboardStartCopy(XtDisplay(GW.text), XtWindow(GW.text), clip_label, time, GW.text, NULL, &item_id); /* move the data to the clipboard, and continue till a sucessful copy is made */ status = 0; while(status != ClipboardSuccess) status = XmClipboardCopy (XtDisplay(GW.text), XtWindow(GW.text), item_id, "STRING", selected_string, (long)strlen(selected_string)+1, 0, &data_id); /* end the copy to the clipboard and continue till a sucessful end copy is made */ status = 0; while(status != ClipboardSuccess) status = XmClipboardEndCopy(XtDisplay(GW.text),XtWindow(GW.text),item_id); /* allow pasting when an item is sucessfully copied to the clipboard */ XtSetSensitive(GW.paste_button, True); } } /* ** Deletes the primary selection. */ #ifdef _NO_PROTO void DeletePrimarySelection(time) Time time; #else void DeletePrimarySelection(Time time) #endif { XClientMessageEvent cm; /* send a client message to the text widget to delete the current selection */ XmTextCut(GW.text,time); #if 0 cm.type = ClientMessage; cm.display = XtDisplay(GW.text); cm.message_type = XmInternAtom(XtDisplay(GW.text), "KILL_SELECTION", FALSE); cm.window = XtWindow(GW.text); cm.format = 32; cm.data.l[0] = XA_PRIMARY; XSendEvent(XtDisplay(GW.text), cm.window, TRUE, NoEventMask, &cm); #endif } /* ** paste item from the clipboard to the current cursor location */ void PasteItemFromClipboard() { /* retrieve the current data from the clipboard and paste it at the current cursor position */ char * selected_string = XmTextGetSelection (GW.text); /* containts of selection */ int status = 0; /* clipboard status */ char *buffer; /* temporary text buffer */ unsigned long length; /* length of buffer */ unsigned long outlength = 0; /* length of bytes copied */ long private_id = 0; /* id of item on clipboard */ XmTextPosition cursorPos; /* text cursor position */ register int ac; /* arg count */ Arg al[10]; /* arg list */ /* find the length of the paste item, continue till the length is found */ while (status != ClipboardSuccess) { status = XmClipboardInquireLength(XtDisplay(GW.text), XtWindow(GW.text), "STRING", &length); if (status == ClipboardNoData) { length = 0; break; } } if (length == 0) { fprintf(stderr, "Warning: paste failed, no items to paste.\n"); return; } /* malloc to necessary space */ buffer = XtMalloc(length); status = XmClipboardRetrieve (XtDisplay(GW.text), XtWindow(GW.text), "STRING", buffer, length, &outlength, &private_id); /* Dialogs need to be added to indicate errors in pasting */ if (status != ClipboardSuccess) { fprintf(stderr, "Warning: paste failed, status = %d\n", status); return; } /* get cursor position for pasting */ XtSetArg(al[0], XmNcursorPosition, &cursorPos); XtGetValues(GW.text, al, 1); /* add new text */ XmTextReplace(GW.text, cursorPos, cursorPos, buffer); } /* ** Process callback from Text. */ #ifdef _NO_PROTO void FileChangedCB (w, client_data, call_data) Widget w; /* widget id */ XtPointer client_data; /* data from application */ XtPointer call_data; /* data from widget class */ #else void FileChangedCB ( Widget w, /* widget id */ XtPointer client_data, /* data from application */ XtPointer call_data /* data from widget class */ ) #endif { /* set the GP.file_saved flag to indicate that the file has been modified and the user should be notified before exiting. */ GP.file_saved = False; } /* ** Process callback from PushButtons in PulldownMenus. */ #ifdef _NO_PROTO void MenuCB (w, client_data, call_data) Widget w; /* widget id */ XtPointer client_data; /* data from application */ XtPointer call_data; /* data from widget class */ #else void MenuCB ( Widget w, /* widget id */ XtPointer client_data, /* data from application */ XtPointer call_data /* data from widget class */ ) #endif { register int ac; /* arg count */ Arg al[10]; /* arg list */ /* char *command; */ /* command used in printing */ Widget exitFile; XmAnyCallbackStruct * cb; char progname[100]; switch ((size_t)client_data) { case MENU_OPEN: /* display the file selection dialog */ XtManageChild(GW.open_dialog); break; case MENU_NEW: /* display the prompt dialog */ XtManageChild(GW.new_dialog); break; case MENU_CLOSE: /* the present file has not been saved since the last modification */ if (!GP.file_saved) /* display the 'save' message dialog */ XtManageChild (GW.close_warning); else CloseFile(); break; case MENU_SAVE: /* open a temp file for writing */ SaveFile(); break; case MENU_SAVE_AS: /* Display the 'save as' dialog with the present filename displayed in it. */ /* strcpy(progname,GetDirName()); strcat(progname,"/"); strcat(progname,ProgramName(GP.fileName)); ac = 0; while(progname[ac] != '.' && ac < 99) ++ac; if(progname[ac] = '.') progname[ac] = '\0'; else progname[0] = '\0'; */ strcpy(progname,ProgramName(GP.fileName)); ac=0; while(progname[ac] != '.' && progname[ac] != '\0') ++ac; if(progname[ac] = '.') progname[ac] = '\0'; ac = 0; /* XtSetArg(al[ac], XmNtextString,XmStringCreateSimple(GP.fileName));*/ XtSetArg(al[ac], XmNtextString,XmStringCreateSimple(progname)); ac++; XtSetValues(GW.save_dialog, al, ac); XtManageChild(GW.save_dialog); break; case MENU_PRINT: #if 0 if (!GP.file_saved) { XtManageChild(GW.print_warning); } else if( strcmp(GP.fileName,EMPTY) != 0) { /* malloc space for the command name. Note: command = size of the filename + "lp " + null terminator */ /* command = (char *)malloc((strlen(GP.file_name) + 4)*sizeof(char));*/ /* sprintf(command, "lp < %s &", GP.file_name); */ strcpy(GP.command,"lp < "); strcat(GP.command,GP.fileName); strcat(GP.command," &"); if (system(GP.command) != NULL) fprintf(stderr, "print failed"); /* XtFree(command); */ } else { printf("No equation was load\n"); } #endif break; case MENU_EXIT: /* exit if there is no files open */ if (!GP.file_saved) /* display the 'save' message dialog */ XtManageChild (GW.exit_warning); else { /* close up file pointers and descriptors */ CloseFile(); /* exit this program */ exitFile = CreateQuestionDialog(GW.mainWindow); XtManageChild(exitFile); /* exit (0); */ } break; case MENU_CUT: { /* needed to get the event time */ cb =(XmAnyCallbackStruct *) call_data; /* call routine to copy selection to clipboard */ CopyFileToClipboard(cb->event->xbutton.time); /* call routine to delete primary selection */ DeletePrimarySelection(cb->event->xbutton.time); } break; case MENU_COPY: { /* needed to get the event time */ cb =(XmAnyCallbackStruct *) call_data; /* call routine to copy selection to clipboard */ CopyFileToClipboard(cb->event->xbutton.time); } break; case MENU_PASTE: /* call the routine that pastes the text at the cursor position */ PasteItemFromClipboard(); break; case MENU_CLEAR: /* call routine to delete primary selection */ /*added by Randy to get it to compile*/ DeletePrimarySelection(0); /*************************************/ break; case MENU_HELP: /* no help at this time */ break; default: /* unknown client_data was recieved and there is no setup to handle this */ fprintf(stderr, "Warning: in menu callback\n"); break; } } /* ** Process callback from Dialog apply actions. */ #ifdef _NO_PROTO void DialogApplyCB (w, client_data, call_data) Widget w; /* widget id */ XtPointer client_data; /* data from application */ XtPointer call_data; /* data from widget class */ #else void DialogApplyCB ( Widget w, /* widget id */ XtPointer client_data, /* data from application */ XtPointer call_data /* data from widget class */ ) #endif { /* char *command; */ /* command used in printing */ switch ((size_t)client_data) { case DIALOG_PRINT: if( strcmp(GP.fileName,EMPTY) != 0) { /* malloc space for the command name. Note: command = size of the filename + "lp " + null terminator */ /* command = XtMalloc(strlen(GP.file_name) + 4); sprintf(command, "lp < %s\0", GP.fileName); */ strcpy(GP.command,"lp < "); strcat(GP.command,GP.fileName); strcat(GP.command," &"); if (system(GP.command) != 0) fprintf(stderr, "print failed"); /* XtFree(command); */ } case DIALOG_CWARNING: CloseFile(); GP.file_saved = True; /* reset the default */ break; case DIALOG_XWARNING: CloseFile(); exit (1); break; default: /* unknown client_data was recieved and there is no setup to handle this */ fprintf (stderr, "Warning: in apply callback\n"); break; } } /* ** Process callback from Dialog cancel actions. */ #ifdef _NO_PROTO void DialogCancelCB (w, client_data, call_data) Widget w; /* widget id */ XtPointer client_data; /* data from application */ XtPointer call_data; /* data from widget class */ #else void DialogCancelCB ( Widget w, /* widget id */ XtPointer client_data, /* data from application */ XtPointer call_data /* data from widget class */ ) #endif { switch ((size_t)client_data){ case DIALOG_FSELECT: /* popdown the file selection box */ XtUnmanageChild (GW.open_dialog); break; case DIALOG_CWARNING: case DIALOG_XWARNING: case DIALOG_NEW: case DIALOG_PRINT: case DIALOG_SAVE: case DIALOG_HELP: /* no action is necessary at this time */ break; default: /* a unknown client_data was recieved and there is no setup to handle this */ fprintf (stderr, "Warning: in cancel callback\n"); break; } } /* ** Process callback from Dialog actions. */ #ifdef _NO_PROTO void DialogAcceptCB (w, client_data, call_data) Widget w; /* widget id */ XtPointer client_data; /* data from application */ XtPointer call_data; /* data from widget class */ #else void DialogAcceptCB ( Widget w, /* widget id */ XtPointer client_data, /* data from application */ XtPointer call_data /* data from widget class */ ) #endif { /* char *command; */ /* command used in printing */ /* char cmd[100]; */ char name[10],*autoDir; char *fileName,c1[100],c2[100]; FILE *fp; switch ((size_t)client_data){ case DIALOG_FSELECT: /* open the file and read it into the text widget */ if( strcmp(GP.fileName,EMPTY) != 0) { /* XtFree(GP.file_name); GP.file_name = NULL; */ strcpy(GP.fileName,EMPTY); } { XmFileSelectionBoxCallbackStruct *fcb = (XmFileSelectionBoxCallbackStruct *) call_data; /* get the filename from the file selection box */ XmStringGetLtoR(fcb->value, XmSTRING_DEFAULT_CHARSET, &fileName); XmStringGetLtoR(fcb->dir, XmSTRING_DEFAULT_CHARSET, &autoDir); strcpy(GP.fileName,fileName); /* Open file, print error if it does not exist. */ if (!OpenFile(GP.fileName)) { fprintf(stderr, "\nWarning: unable to open the file\n"); XtUnmanageChild(GW.open_dialog); break; } printf("\nLoading %s to buffer ... done\n",ProgramName(GP.fileName)); /* load rfile if exist */ GetJobName(name,ProgramName(GP.fileName)); strcpy(c1,autoDir); strcat(c1,"c."); strcat(c1, name); fp = fopen(c1,"r"); if(fp != NULL && ReadRfile(c1) == 0 ) { SetParScreen(); printf("Loading %s to buffer ... done\n",ProgramName(c1)); } else printf("%s is not available\n",ProgramName(c1)); if (fp != NULL) fclose(fp); /* popdown the file selection box */ XtUnmanageChild(GW.open_dialog); } break; case DIALOG_NEW: /* open the file and read it into the text widget */ if (strcmp(GP.fileName,EMPTY) != 0) { /* XtFree(GP.file_name); GP.file_name = NULL; */ strcpy(GP.fileName,EMPTY); } { XmSelectionBoxCallbackStruct *scb = (XmSelectionBoxCallbackStruct *) call_data; /* get the filename string from the file name prompt box */ XmStringGetLtoR(scb->value, XmSTRING_DEFAULT_CHARSET, &fileName); strcpy(GP.fileName,fileName); strcat(GP.fileName,".f90"); if( strcmp(fileName,EMPTY) == 0 ) strcpy(GP.fileName,DEFAULT_NAME); /* load the default.c */ /* autoDir = copyenv(AUTO_DIR); */ strcpy(c2,GP.autoDir); /* strcat(c2,"/gui/default.f"); */ strcat(c2,"/gui/"); strcat(c2,DEFAULT_FILE); if (!OpenFile(c2)) { /* make appropriate item sensitive */ XtSetSensitive(GW.text, True); XtSetSensitive(GW.cut_button, True); XtSetSensitive(GW.copy_button, True); XtSetSensitive(GW.clear_button, True); } if(strcmp(fileName,EMPTY) == 0) printf("Loading %s to buffer ... done\n",DEFAULT_FILE); else printf("Loading %s to buffer ... done\n",GP.fileName); ReadDefCB(w, client_data, call_data); printf("Loading default Auto-Constants to buffer ... done\n"); /* popdown the file selection box */ XtUnmanageChild(GW.new_dialog); } break; case DIALOG_CWARNING: /* save the file */ if (SaveFile()) { CloseFile(); /* close the file */ } else fprintf(stderr,"Warning: unable to save file, file not closed"); break; case DIALOG_XWARNING: /* save the file */ if (SaveFile()) { CloseFile(); /* close the file */ exit(0); } else fprintf(stderr, "Warning: unable to save file, exit aborted"); break; case DIALOG_SAVE: { XmSelectionBoxCallbackStruct *scb = (XmSelectionBoxCallbackStruct *) call_data; /* get the filename string from the file selection box */ XmStringGetLtoR(scb->value, XmSTRING_DEFAULT_CHARSET, &fileName); strcpy(GP.fileName,fileName); strcat(GP.fileName,".f90"); SaveFile(); XtUnmanageChild(GW.save_dialog); } break; case DIALOG_PRINT: /* save the file */ if (SaveFile()) { if ( strcmp(GP.fileName,EMPTY) != 0) { /* malloc space for the command name. Note: command = size of the filename + "lp " + null terminator */ /* command = XtMalloc(strlen(GP.file_name) + 4); sprintf(command, "lp %s\0", GP.file_name);*/ strcpy(GP.command,"lp < "); strcat(GP.command,GP.fileName); strcat(GP.command," &"); if (system(GP.command) != 0) fprintf(stderr, "print failed"); /* XtFree(command);*/ } } else fprintf(stderr, "Warning: unable to save file, file not printed"); break; case DIALOG_HELP: /* no help at this time */ break; default: /* unknown callback type */ fprintf (stderr, "Warning: in accept callback\n"); break; } } /* ** Create special 4 button message box out of a ** Selection box. */ #ifdef _NO_PROTO Widget CreateSpWarningDialog (parent, name, image_string, message,arglist, argcount) Widget parent; String name; String image_string; String message; ArgList arglist; int argcount; #else Widget CreateSpWarningDialog ( Widget parent, String name, String image_string, String message, ArgList arglist, int argcount ) #endif { Widget warning_dialog; /* special warning selection box */ Widget work_area; /* rowcolumn for pixmap and text */ Widget pixmap_label; /* pixmap label */ Widget text_label; /* text label */ Widget apply_button; /* apply button */ Widget ok_button; /* ok button */ Widget kid[5]; /* buttons */ Pixel foreground; /* dialog foreground */ Pixel background; /* dialog background */ Pixmap pixmap; /* dialog pixmap */ register int i; /* kid index */ Arg al[10]; /* arg list */ register int ac; /* arg count */ warning_dialog = XmCreatePromptDialog(parent, name, arglist, argcount); ac = 0; XtSetArg(al[ac], XmNorientation, XmHORIZONTAL); ac++; work_area = XmCreateRowColumn(warning_dialog, "workarea", al, ac); XtManageChild(work_area); ac = 0; XtSetArg(al[ac], XmNforeground, &foreground); ac++; XtSetArg(al[ac], XmNbackground, &background); ac++; XtGetValues(warning_dialog, al, ac); ac = 0; XtSetArg(al[ac], XmNlabelType, XmPIXMAP); ac++; pixmap = XmGetPixmap(XtScreen(warning_dialog), image_string, foreground, background); XtSetArg(al[ac], XmNlabelPixmap, pixmap); ac++; pixmap_label = XmCreateLabelGadget(work_area, "pixmap_label", al, ac); XtManageChild(pixmap_label); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR(message, XmSTRING_DEFAULT_CHARSET)); ac++; text_label = XmCreateLabelGadget(work_area, "text_label", al, ac); XtManageChild(text_label); apply_button = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_APPLY_BUTTON); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Discard", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetValues(apply_button, al, ac); XtManageChild(apply_button); ok_button = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_OK_BUTTON); ac = 0; XtSetArg(al[ac], XmNlabelString, XmStringCreateLtoR("Save", XmSTRING_DEFAULT_CHARSET)); ac++; XtSetValues(ok_button, al, ac); /* Unmanage unneeded children. */ i = 0; kid[i++] = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_TEXT); kid[i++] = XmSelectionBoxGetChild (warning_dialog, XmDIALOG_SELECTION_LABEL); XtUnmanageChildren (kid, i); return(warning_dialog); } /* *********************************************************************** ** ** CreateFileMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateFileMenu(menuBar) Widget menuBar; #else void CreateFileMenu(Widget menuBar) #endif { Widget filePDPN,fileCSCD,openPUSH,exitPUSH,lineSEPT; Widget openFile,exitFile,newPUSH,newFile; filePDPN = XmCreatePulldownMenu(menuBar,"FilePullDown",NULL,0); fileCSCD = XmCreateCascadeButton(menuBar,"File",NULL,0); XtVaSetValues(fileCSCD,XmNsubMenuId,filePDPN,XmNmnemonic,'F',NULL); XtManageChild(fileCSCD); /* XtManageChild(filePDPN); */ newPUSH = XmCreatePushButtonGadget(filePDPN,"New",NULL,0); XtVaSetValues(newPUSH,XmNmnemonic,'N',NULL); XtManageChild(newPUSH); newFile = CreateNewFileDialog(menuBar,XEDIT_OPTION); XtAddCallback(newPUSH,XmNactivateCallback,PopupCB,newFile); openPUSH = XmCreatePushButtonGadget(filePDPN,"Open",NULL,0); XtVaSetValues(openPUSH,XmNmnemonic,'O',NULL); XtManageChild(openPUSH); openFile = CreateFileSelectionDialog(menuBar,XEDIT_OPTION); XtAddCallback(openPUSH,XmNactivateCallback,PopupCB,openFile); lineSEPT = XmCreateSeparatorGadget(filePDPN,"Separator",NULL,0); XtManageChild(lineSEPT); exitPUSH = XmCreatePushButtonGadget(filePDPN,"Exit",NULL,0); XtVaSetValues(exitPUSH,XmNmnemonic,'E',NULL); XtManageChild(exitPUSH); exitFile = CreateQuestionDialog(menuBar); XtAddCallback(exitPUSH,XmNactivateCallback,PopupCB,exitFile); } #ifdef _NO_PROTO Widget CreateFileSelectionDialog(parent,editor) Widget parent; int editor; #else Widget CreateFileSelectionDialog(Widget parent, int editor) #endif { Widget rtrn; static ClientData *clientData; rtrn=XmCreateFileSelectionDialog(parent,"Selection",NULL,0); clientData = (ClientData*) malloc(sizeof(ClientData)); clientData->widget = rtrn; clientData->data = editor; XtAddCallback(rtrn,XmNokCallback,SelOkCB,clientData); XtAddCallback(rtrn,XmNcancelCallback,PopdownCB,rtrn); XtAddCallback(rtrn,XmNhelpCallback,PopdownCB,rtrn); /* free(clientData); */ return rtrn; } #ifdef _NO_PROTO void SelOkCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void SelOkCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char *filename,*dir,name[100]; Widget wgt,help; XmString s1,s2; XmFileSelectionBoxCallbackStruct *cbs; ClientData *clientData; int editor; clientData = (ClientData*) userData; wgt = clientData->widget; editor = clientData->data; XtUnmanageChild(wgt); cbs = (XmFileSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&filename); XmStringGetLtoR(cbs->dir,XmSTRING_DEFAULT_CHARSET,&dir); if(fopen(filename,"r") != NULL) { /* strcpy(GP.fileName,filename); */ if(editor==XEDIT_OPTION) { strcpy(name,GP.xedit); } else if(editor==EMACS_OPTION) { strcpy(name,GP.emacs); } else printf("Editor is not available\n"); strcat(name," "); /* strcat(GP.command,GP.fileName); */ strcat(name,filename); /* GP.fileName[0]='\0'; */ strcat(name," &"); system(name); } else { while(*dir++) ++filename; strcpy(name,"File \""); strcat(name,filename); strcat(name,"\" "); strcat(name,"does not exist!"); s1=XmStringCreateLtoR(name, XmSTRING_DEFAULT_CHARSET); s2=XmStringCreateLtoR("Quit",XmSTRING_DEFAULT_CHARSET); wgt = XmCreateMessageDialog(w,"Message",NULL,0); help=XmMessageBoxGetChild(wgt,XmDIALOG_HELP_BUTTON); XtUnmanageChild(help); help=XmMessageBoxGetChild(wgt,XmDIALOG_CANCEL_BUTTON); XtUnmanageChild(help); XtVaSetValues(wgt,XmNmessageString,s1,XmNokLabelString,s2,NULL); XmStringFree(s1); XmStringFree(s2); XtManageChild(wgt); } } #ifdef _NO_PROTO void PostItCB(w,popup,event,b) Widget w,popup; XButtonEvent *event; Boolean *b; #else void PostItCB(Widget w,XtPointer popup,XEvent * event, Boolean *b) #endif { if(((XButtonEvent *)event)->button != Button3) return; XmMenuPosition(popup,(XButtonEvent *)event); XtManageChild(popup); } #ifdef _NO_PROTO void PostItCB1(w,popup,event,b) Widget w,popup; XButtonEvent *event; Boolean *b; #else void PostItCB1(Widget w,XtPointer popup,XEvent * event, Boolean *b) #endif { if(((XButtonEvent *)event)->button != Button1) return; XmMenuPosition(popup,(XButtonEvent *)event); XtManageChild(popup); } #ifdef _NO_PROTO void PopupCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void PopupCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { Widget wgt; wgt = (Widget) userData; XtManageChild(wgt); } #ifdef _NO_PROTO void PopupCB1(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void PopupCB1(Widget w,XtPointer userData,XtPointer callbackArg) #endif { ClientData *tmp; char name[10]; int i=0,who; tmp = (ClientData *) userData; if(strcmp(GP.fileName,EMPTY) != 0) { strcpy(name,ProgramName(GP.fileName)); while(name[i] != '.') ++i; name[i] = '\0'; if(tmp->data == 1) XtVaSetValues(GW.copyFrom,XmNvalue,name,NULL); else if(tmp->data == 2) XtVaSetValues(GW.moveFrom,XmNvalue,name,NULL); else if(tmp->data == 3) XtVaSetValues(GW.appendFrom,XmNvalue,name,NULL); else printf("Error : in PopupCB1\n"); } XtManageChild(tmp->widget); } #ifdef _NO_PROTO void PopdownCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void PopdownCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { Widget wgt; wgt = (Widget) userData; XtUnmanageChild(wgt); } #ifdef _NO_PROTO Widget CreateNewFileDialog(parent,editor) Widget parent; int editor; #else Widget CreateNewFileDialog(Widget parent,int editor) #endif { Widget rtrn,wgt; XmString s1,s2,s3; rtrn = XmCreatePromptDialog(parent,"Prompt",NULL,0); s1=XmStringCreateLtoR("Enter the New File Name",XmSTRING_DEFAULT_CHARSET); s2=XmStringCreateLtoR("Reset",XmSTRING_DEFAULT_CHARSET); s3=XmStringCreateLtoR("Quit",XmSTRING_DEFAULT_CHARSET); wgt=XmSelectionBoxGetChild(rtrn,XmDIALOG_APPLY_BUTTON); XtManageChild(wgt); wgt=XmSelectionBoxGetChild(rtrn,XmDIALOG_HELP_BUTTON); XtUnmanageChild(wgt); XtVaSetValues(rtrn,XmNselectionLabelString,s1, XmNapplyLabelString,s2,XmNcancelLabelString,s3, NULL); XmStringFree(s1); XmStringFree(s2); XmStringFree(s3); XtAddCallback(rtrn,XmNokCallback,EntOkCB,(XtPointer)(size_t)editor); XtAddCallback(rtrn,XmNapplyCallback,EntCancelCB,rtrn); XtAddCallback(rtrn,XmNcancelCallback,EntCancelCB,rtrn); return rtrn; } #ifdef _NO_PROTO void EntOkCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void EntOkCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { Widget wgt,help; char *filename,name[100]; XmString s1,s2; XmSelectionBoxCallbackStruct *cbs; int editor; editor = (size_t) userData; cbs = (XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&filename); if(XmStringEmpty(cbs->value) || noting(filename)) { strcpy(name,"No file Entered !"); s1=XmStringCreateLtoR(name, XmSTRING_DEFAULT_CHARSET); s2=XmStringCreateLtoR("Quit",XmSTRING_DEFAULT_CHARSET); wgt = XmCreateMessageDialog(w,"Message",NULL,0); help=XmMessageBoxGetChild(wgt,XmDIALOG_HELP_BUTTON); XtUnmanageChild(help); help=XmMessageBoxGetChild(wgt,XmDIALOG_CANCEL_BUTTON); XtUnmanageChild(help); XtVaSetValues(wgt,XmNmessageString,s1,XmNokLabelString,s2,NULL); XmStringFree(s1); XmStringFree(s2); XtManageChild(wgt); } else { while(*filename == ' ' || *filename == '\t') ++filename; if(fopen(filename,"r") == NULL) { /* strcpy(GP.fileName,filename); */ if(editor==XEDIT_OPTION) { strcpy(name,GP.xedit); } else if(editor==EMACS_OPTION) { strcpy(name,GP.emacs); } else printf("Editor is not available\n"); strcat(name," "); strcat(name,filename); GP.fileName[0]='\0'; strcat(name," &"); system(name); XtVaSetValues(w,XmNtextString,"",NULL); } else { XtVaSetValues(w,XmNtextString,"",NULL); strcpy(name,"File \""); strcat(name,filename); strcat(name,"\" "); strcat(name,"exist!"); s1=XmStringCreateLtoR(name, XmSTRING_DEFAULT_CHARSET); s2=XmStringCreateLtoR("Quit",XmSTRING_DEFAULT_CHARSET); wgt = XmCreateMessageDialog(w,"Message",NULL,0); help=XmMessageBoxGetChild(wgt,XmDIALOG_HELP_BUTTON); XtUnmanageChild(help); help=XmMessageBoxGetChild(wgt,XmDIALOG_CANCEL_BUTTON); XtUnmanageChild(help); XtVaSetValues(wgt,XmNmessageString,s1,XmNokLabelString,s2,NULL); XmStringFree(s1); XmStringFree(s2); XtManageChild(wgt); } } } #ifdef _NO_PROTO Boolean noting(s) char *s; #else Boolean noting(char *s) #endif { while(*s == ' ') ++s; if(*s == '\0') return True; else return False; } #ifdef _NO_PROTO void EntCancelCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void EntCancelCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { XtVaSetValues(w,XmNtextString,"",NULL); } #ifdef _NO_PROTO Widget CreateQuestionDialog(parent) Widget parent; #else Widget CreateQuestionDialog(Widget parent) #endif { Widget help,rtrn; XmString s1,s2,s3; rtrn=XmCreateQuestionDialog(parent,"Question",NULL,0); XtAddCallback(rtrn,XmNokCallback,ExitCB,NULL); s1=XmStringCreateLtoR("Do you really want to exit?", XmSTRING_DEFAULT_CHARSET); s2=XmStringCreateLtoR("Yes",XmSTRING_DEFAULT_CHARSET); s3=XmStringCreateLtoR("No",XmSTRING_DEFAULT_CHARSET); help=XmMessageBoxGetChild(rtrn,XmDIALOG_HELP_BUTTON); XtUnmanageChild(help); XtVaSetValues(rtrn,XmNmessageString,s1,XmNokLabelString,s2, XmNcancelLabelString,s3,NULL); XmStringFree(s1); XmStringFree(s2); XmStringFree(s3); return rtrn; } #ifdef _NO_PROTO void ExitCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void ExitCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { exit(0); } /* *********************************************************************** ** ** CreateSettingMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateSettingMenu(menuBar) Widget menuBar; #else void CreateSettingMenu(Widget menuBar) #endif { Widget setPDPN,setCSCD,lineSEPT; Widget probPDPN,probCSCD,probFORM,probPUSH; Widget fullPUSH,fullFORM; Widget accuPDPN,accuCSCD,accuFORM; Widget tolPDPN,tolCSCD,tolPUSH,tolFORM; Widget limPDPN,limCSCD,limPUSH,limFORM; Widget stepPDPN,stepCSCD,stepPUSH,stepFORM; Widget crPDPN,crCSCD,conPDPN,conCSCD,conPUSH,conFORM; Widget runPDPN,runCSCD,runPUSH,runFORM; Widget outPDPN,outCSCD,outPUSH,outFORM; Widget ndim,nbc,nint,jac; Widget epsl,epsu,epss,itmx,nwtn,itnw; Widget nmx,rl0,rl1,a0,a1; Widget ds,dsmin,dsmax,iads; Widget nicp,icp,ilp,isp,isw,mxbf,irs,ips; Widget npr,iid,iplt,nthl,nthu,nuzr,thl,thu,par; Widget prompt; Widget disPDPN,disCSCD,disPUSH,disFORM; Widget ntst,ncol,iad; prompt = XmCreatePromptDialog(menuBar,"Prompt",NULL,0); setPDPN = XmCreatePulldownMenu(menuBar,"SetPullDown",NULL,0); /* XtManageChild(setPDPN); */ setCSCD = XmCreateCascadeButton(menuBar,"Set",NULL,0); XtVaSetValues(setCSCD,XmNsubMenuId,setPDPN,XmNmnemonic,'S',NULL); XtManageChild(setCSCD); probPDPN = XmCreatePulldownMenu(setPDPN,"ProbPullDown",NULL,0); probCSCD = XmCreateCascadeButton(setPDPN,"Problem",NULL,0); XtVaSetValues(probCSCD,XmNsubMenuId,probPDPN,XmNmnemonic,'P',NULL); XtManageChild(probCSCD); ndim = XmCreatePushButtonGadget(probPDPN,"NDIM",NULL,0); XtVaSetValues(ndim,XmNmnemonic,'N',NULL); XtManageChild(ndim); XtAddCallback(ndim,XmNactivateCallback,PopupCB,prompt); nbc = XmCreatePushButtonGadget(probPDPN,"NBC",NULL,0); XtVaSetValues(nbc,XmNmnemonic,'B',NULL); XtManageChild(nbc); XtAddCallback(nbc,XmNactivateCallback,PopupCB,prompt); nint = XmCreatePushButtonGadget(probPDPN,"NINT",NULL,0); XtVaSetValues(nint,XmNmnemonic,'I',NULL); XtManageChild(nint); XtAddCallback(nint,XmNactivateCallback,PopupCB,prompt); jac = XmCreatePushButtonGadget(probPDPN,"JAC",NULL,0); XtVaSetValues(jac,XmNmnemonic,'J',NULL); XtManageChild(jac); XtAddCallback(jac,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(probPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); probFORM = CreateFormProb(menuBar); probPUSH=XmCreatePushButtonGadget(probPDPN,"All Above",NULL,0); XtVaSetValues(probPUSH,XmNmnemonic,'P',NULL); XtManageChild(probPUSH); XtAddCallback(probPUSH,XmNactivateCallback,PopupCB,probFORM); accuPDPN = XmCreatePulldownMenu(setPDPN,"AccuPullDown",NULL,0); accuCSCD = XmCreateCascadeButton(setPDPN,"Accuracy",NULL,0); XtVaSetValues(accuCSCD,XmNsubMenuId,accuPDPN,XmNmnemonic,'A',NULL); XtManageChild(accuCSCD); disPDPN = XmCreatePulldownMenu(accuPDPN,"DisPullDown",NULL,0); disCSCD = XmCreateCascadeButton(accuPDPN,"Discretization",NULL,0); XtVaSetValues(disCSCD,XmNsubMenuId,disPDPN,XmNmnemonic,'D',NULL); XtManageChild(disCSCD); ntst = XmCreatePushButtonGadget(disPDPN,"NTST",NULL,0); XtVaSetValues(ntst,XmNmnemonic,'N',NULL); XtManageChild(ntst); XtAddCallback(ntst,XmNactivateCallback,PopupCB,prompt); ncol = XmCreatePushButtonGadget(disPDPN,"NCOL",NULL,0); XtVaSetValues(ncol,XmNmnemonic,'C',NULL); XtManageChild(ncol); XtAddCallback(ncol,XmNactivateCallback,PopupCB,prompt); iad = XmCreatePushButtonGadget(disPDPN,"IAD",NULL,0); XtVaSetValues(iad,XmNmnemonic,'I',NULL); XtManageChild(iad); XtAddCallback(iad,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(disPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); disFORM = CreateFormDis(menuBar); disPUSH=XmCreatePushButtonGadget(disPDPN,"All Above",NULL,0); XtVaSetValues(disPUSH,XmNmnemonic,'A',NULL); XtManageChild(disPUSH); XtAddCallback(disPUSH,XmNactivateCallback,PopupCB,disFORM); tolPDPN = XmCreatePulldownMenu(accuPDPN,"TolPullDown",NULL,0); tolCSCD = XmCreateCascadeButton(accuPDPN,"Tolerance",NULL,0); XtVaSetValues(tolCSCD,XmNsubMenuId,tolPDPN,XmNmnemonic,'T',NULL); XtManageChild(tolCSCD); epsl = XmCreatePushButtonGadget(tolPDPN,"EPSL",NULL,0); XtVaSetValues(epsl,XmNmnemonic,'E',NULL); XtManageChild(epsl); XtAddCallback(epsl,XmNactivateCallback,PopupCB,prompt); epsu = XmCreatePushButtonGadget(tolPDPN,"EPSU",NULL,0); XtVaSetValues(epsu,XmNmnemonic,'P',NULL); XtManageChild(epsu); XtAddCallback(epsu,XmNactivateCallback,PopupCB,prompt); epss = XmCreatePushButtonGadget(tolPDPN,"EPSS",NULL,0); XtVaSetValues(epss,XmNmnemonic,'S',NULL); XtManageChild(epss); XtAddCallback(epss,XmNactivateCallback,PopupCB,prompt); itmx = XmCreatePushButtonGadget(tolPDPN,"ITMX",NULL,0); XtVaSetValues(itmx,XmNmnemonic,'I',NULL); XtManageChild(itmx); XtAddCallback(itmx,XmNactivateCallback,PopupCB,prompt); nwtn = XmCreatePushButtonGadget(tolPDPN,"NWTN",NULL,0); XtVaSetValues(nwtn,XmNmnemonic,'N',NULL); XtManageChild(nwtn); XtAddCallback(nwtn,XmNactivateCallback,PopupCB,prompt); itnw = XmCreatePushButtonGadget(tolPDPN,"ITNW",NULL,0); XtVaSetValues(itnw,XmNmnemonic,'T',NULL); XtManageChild(itnw); XtAddCallback(itnw,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(tolPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); tolFORM = CreateFormTol(menuBar); tolPUSH=XmCreatePushButtonGadget(tolPDPN,"All Above",NULL,0); XtVaSetValues(tolPUSH,XmNmnemonic,'A',NULL); XtManageChild(tolPUSH); XtAddCallback(tolPUSH,XmNactivateCallback,PopupCB,tolFORM); stepPDPN = XmCreatePulldownMenu(accuPDPN,"StepPullDown",NULL,0); stepCSCD = XmCreateCascadeButton(accuPDPN,"Step Size",NULL,0); XtVaSetValues(stepCSCD,XmNsubMenuId,stepPDPN,XmNmnemonic,'S',NULL); XtManageChild(stepCSCD); ds = XmCreatePushButtonGadget(stepPDPN,"DS",NULL,0); XtVaSetValues(ds,XmNmnemonic,'S',NULL); XtManageChild(ds); XtAddCallback(ds,XmNactivateCallback,PopupCB,prompt); dsmin = XmCreatePushButtonGadget(stepPDPN,"DSMIN",NULL,0); XtVaSetValues(dsmin,XmNmnemonic,'M',NULL); XtManageChild(dsmin); XtAddCallback(dsmin,XmNactivateCallback,PopupCB,prompt); dsmax = XmCreatePushButtonGadget(stepPDPN,"DSMAX",NULL,0); XtVaSetValues(dsmax,XmNmnemonic,'X',NULL); XtManageChild(dsmax); XtAddCallback(dsmax,XmNactivateCallback,PopupCB,prompt); iads = XmCreatePushButtonGadget(stepPDPN,"IADS",NULL,0); XtVaSetValues(iads,XmNmnemonic,'I',NULL); XtManageChild(iads); XtAddCallback(iads,XmNactivateCallback,PopupCB,prompt); thl = XmCreatePushButtonGadget(stepPDPN,"THL",NULL,0); XtVaSetValues(thl,XmNmnemonic,'L',NULL); XtManageChild(thl); XtAddCallback(thl,XmNactivateCallback,PopupCB,prompt); thu = XmCreatePushButtonGadget(stepPDPN,"THU",NULL,0); XtVaSetValues(thu,XmNmnemonic,'U',NULL); XtManageChild(thu); XtAddCallback(thu,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(stepPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); stepFORM = CreateFormStep(menuBar); stepPUSH=XmCreatePushButtonGadget(stepPDPN,"All Above",NULL,0); XtVaSetValues(stepPUSH,XmNmnemonic,'A',NULL); XtManageChild(stepPUSH); XtAddCallback(stepPUSH,XmNactivateCallback,PopupCB,stepFORM); limPDPN = XmCreatePulldownMenu(accuPDPN,"LimPullDown",NULL,0); limCSCD = XmCreateCascadeButton(accuPDPN,"Limits",NULL,0); XtVaSetValues(limCSCD,XmNsubMenuId,limPDPN,XmNmnemonic,'L',NULL); XtManageChild(limCSCD); nmx = XmCreatePushButtonGadget(limPDPN,"NMX",NULL,0); XtVaSetValues(nmx,XmNmnemonic,'N',NULL); XtManageChild(nmx); XtAddCallback(nmx,XmNactivateCallback,PopupCB,prompt); rl0 = XmCreatePushButtonGadget(limPDPN,"RL0",NULL,0); XtVaSetValues(rl0,XmNmnemonic,'L',NULL); XtManageChild(rl0); XtAddCallback(rl0,XmNactivateCallback,PopupCB,prompt); rl1 = XmCreatePushButtonGadget(limPDPN,"RL1",NULL,0); XtVaSetValues(rl1,XmNmnemonic,'R',NULL); XtManageChild(rl1); XtAddCallback(rl1,XmNactivateCallback,PopupCB,prompt); a0 = XmCreatePushButtonGadget(limPDPN,"A0",NULL,0); XtVaSetValues(a0,XmNmnemonic,'0',NULL); XtManageChild(a0); XtAddCallback(a0,XmNactivateCallback,PopupCB,prompt); a1 = XmCreatePushButtonGadget(limPDPN,"A1",NULL,0); XtVaSetValues(a1,XmNmnemonic,'A',NULL); XtManageChild(a1); XtAddCallback(a1,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(limPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); limFORM=CreateFormLim(menuBar); limPUSH=XmCreatePushButtonGadget(limPDPN,"All Above",NULL,0); XtVaSetValues(limPUSH,XmNmnemonic,'A',NULL); XtManageChild(limPUSH); XtAddCallback(limPUSH,XmNactivateCallback,PopupCB,limFORM); crPDPN = XmCreatePulldownMenu(setPDPN,"CrPullDown",NULL,0); crCSCD = XmCreateCascadeButton(setPDPN,"Cont+Run",NULL,0); XtVaSetValues(crCSCD,XmNsubMenuId,crPDPN,XmNmnemonic,'C',NULL); XtManageChild(crCSCD); conPDPN = XmCreatePulldownMenu(crPDPN,"ConPullDown",NULL,0); conCSCD = XmCreateCascadeButton(crPDPN,"Continuation",NULL,0); XtVaSetValues(conCSCD,XmNsubMenuId,conPDPN,XmNmnemonic,'C',NULL); XtManageChild(conCSCD); nicp = XmCreatePushButtonGadget(conPDPN,"NICP",NULL,0); XtVaSetValues(nicp,XmNmnemonic,'N',NULL); XtManageChild(nicp); XtAddCallback(nicp,XmNactivateCallback,PopupCB,prompt); icp = XmCreatePushButtonGadget(conPDPN,"ICP",NULL,0); XtVaSetValues(icp,XmNmnemonic,'I',NULL); XtManageChild(icp); XtAddCallback(icp,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(conPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); conFORM = CreateFormCon(menuBar); conPUSH=XmCreatePushButtonGadget(conPDPN,"All Above",NULL,0); XtVaSetValues(conPUSH,XmNmnemonic,'A',NULL); XtManageChild(conPUSH); XtAddCallback(conPUSH,XmNactivateCallback,PopupCB,conFORM); runPDPN = XmCreatePulldownMenu(crPDPN,"RunPullDown",NULL,0); runCSCD = XmCreateCascadeButton(crPDPN,"Run",NULL,0); XtVaSetValues(runCSCD,XmNsubMenuId,runPDPN,XmNmnemonic,'R',NULL); XtManageChild(runCSCD); ilp = XmCreatePushButtonGadget(runPDPN,"ILP",NULL,0); XtVaSetValues(ilp,XmNmnemonic,'I',NULL); XtManageChild(ilp); XtAddCallback(ilp,XmNactivateCallback,PopupCB,prompt); isp = XmCreatePushButtonGadget(runPDPN,"ISP",NULL,0); XtVaSetValues(isp,XmNmnemonic,'S',NULL); XtManageChild(isp); XtAddCallback(isp,XmNactivateCallback,PopupCB,prompt); isw = XmCreatePushButtonGadget(runPDPN,"ISW",NULL,0); XtVaSetValues(isw,XmNmnemonic,'W',NULL); XtManageChild(isw); XtAddCallback(isw,XmNactivateCallback,PopupCB,prompt); mxbf = XmCreatePushButtonGadget(runPDPN,"MXBF",NULL,0); XtVaSetValues(mxbf,XmNmnemonic,'M',NULL); XtManageChild(mxbf); XtAddCallback(mxbf,XmNactivateCallback,PopupCB,prompt); irs = XmCreatePushButtonGadget(runPDPN,"IRS",NULL,0); XtVaSetValues(irs,XmNmnemonic,'R',NULL); XtManageChild(irs); XtAddCallback(irs,XmNactivateCallback,PopupCB,prompt); ips = XmCreatePushButtonGadget(runPDPN,"IPS",NULL,0); XtVaSetValues(ips,XmNmnemonic,'P',NULL); XtManageChild(ips); XtAddCallback(ips,XmNactivateCallback,PopupCB,prompt); lineSEPT = XmCreateSeparatorGadget(runPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); runFORM=CreateFormRun(menuBar); runPUSH=XmCreatePushButtonGadget(runPDPN,"All Above",NULL,0); XtVaSetValues(runPUSH,XmNmnemonic,'A',NULL); XtManageChild(runPUSH); XtAddCallback(runPUSH,XmNactivateCallback,PopupCB,runFORM); outPDPN = XmCreatePulldownMenu(setPDPN,"OutPullDown",NULL,0); outCSCD = XmCreateCascadeButton(setPDPN,"Output",NULL,0); XtVaSetValues(outCSCD,XmNsubMenuId,outPDPN,XmNmnemonic,'O',NULL); XtManageChild(outCSCD); npr = XmCreatePushButtonGadget(outPDPN,"NPR",NULL,0); XtVaSetValues(npr,XmNmnemonic,'N',NULL); XtManageChild(npr); XtAddCallback(npr,XmNactivateCallback,PopupCB,prompt); iid = XmCreatePushButtonGadget(outPDPN,"IID",NULL,0); XtVaSetValues(iid,XmNmnemonic,'D',NULL); XtManageChild(iid); XtAddCallback(iid,XmNactivateCallback,PopupCB,prompt); iplt = XmCreatePushButtonGadget(outPDPN,"IPLT",NULL,0); XtVaSetValues(iplt,XmNmnemonic,'I',NULL); XtManageChild(iplt); XtAddCallback(iplt,XmNactivateCallback,PopupCB,prompt); /* nthl = XmCreatePushButtonGadget(outPDPN,"NTHL",NULL,0); XtVaSetValues(nthl,XmNmnemonic,'T',NULL); XtManageChild(nthl); XtAddCallback(nthl,XmNactivateCallback,PopupCB,prompt); nthu = XmCreatePushButtonGadget(outPDPN,"NTHU",NULL,0); XtVaSetValues(nthu,XmNmnemonic,'H',NULL); XtManageChild(nthu); XtAddCallback(nthu,XmNactivateCallback,PopupCB,prompt); */ nuzr = XmCreatePushButtonGadget(outPDPN,"UZR",NULL,0); XtVaSetValues(nuzr,XmNmnemonic,'U',NULL); XtManageChild(nuzr); XtAddCallback(nuzr,XmNactivateCallback,PopupCB,prompt); /* thl = XmCreatePushButtonGadget(outPDPN,"THL",NULL,0); XtVaSetValues(thl,XmNmnemonic,'L',NULL); XtManageChild(thl); XtAddCallback(thl,XmNactivateCallback,PopupCB,prompt); thu = XmCreatePushButtonGadget(outPDPN,"THU",NULL,0); XtVaSetValues(thu,XmNmnemonic,'U',NULL); XtManageChild(thu); XtAddCallback(thu,XmNactivateCallback,PopupCB,prompt); par = XmCreatePushButtonGadget(outPDPN,"PAR",NULL,0); XtVaSetValues(par,XmNmnemonic,'P',NULL); XtManageChild(par); XtAddCallback(par,XmNactivateCallback,PopupCB,prompt); */ lineSEPT = XmCreateSeparatorGadget(outPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); outFORM=CreateFormOut(menuBar); outPUSH=XmCreatePushButtonGadget(outPDPN,"All Above",NULL,0); XtVaSetValues(outPUSH,XmNmnemonic,'A',NULL); XtManageChild(outPUSH); XtAddCallback(outPUSH,XmNactivateCallback,PopupCB,outFORM); lineSEPT = XmCreateSeparatorGadget(setPDPN,"Separator ",NULL,0); XtManageChild(lineSEPT); fullPUSH = XmCreatePushButtonGadget(setPDPN,"Full Panel",NULL,0); XtVaSetValues(fullPUSH,XmNmnemonic,'F',NULL); XtManageChild(fullPUSH); fullFORM = CreateFormDefault(menuBar); XtAddCallback(fullPUSH,XmNactivateCallback,PopupCB,fullFORM); } #ifdef _NO_PROTO Widget CreateFormProb(parent) Widget parent; #else Widget CreateFormProb(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate1(rtrn,&rwcl,&ok,&apply,&cancel,&help); CreateBoxProb(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormProbCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormProbCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormProbCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxProb(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxProb(parent) Widget parent; #else void CreateBoxProb(Widget parent) #endif { Widget rwcl,label,frame; Widget popJac; XtVaSetValues(parent,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN,XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[0],NULL,0); XtManageChild(label); GW.probButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.probButton[0]); XtVaSetValues(GW.probButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NDIM], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[1],NULL,0); XtManageChild(label); GW.probButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.probButton[1]); XtVaSetValues(GW.probButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NBC], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[2],NULL,0); XtManageChild(label); GW.probButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.probButton[2]); XtVaSetValues(GW.probButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NINT], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[3],NULL,0); XtManageChild(label); GW.probButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.probButton[3]); XtVaSetValues(GW.probButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_JAC], NULL); XtVaSetValues(GW.probButton[3],XmNeditable,False,NULL); popJac=PopupJac(GW.probButton[3]); XtAddEventHandler(GW.probButton[3],ButtonPressMask,False,PostItCB,popJac); } #ifdef _NO_PROTO void OkFormProbCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormProbCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; XtVaGetValues(GW.probButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_NDIM] = atof(value); sprintf(GP.parStrValue[PAR_NDIM],"%d",(int) GP.parValue[PAR_NDIM]); XtVaSetValues(GW.parButton[PAR_NDIM],XmNvalue,GP.parStrValue[PAR_NDIM],NULL); XtVaGetValues(GW.probButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_NBC] = atof(value); sprintf(GP.parStrValue[PAR_NBC],"%d",(int)GP.parValue[PAR_NBC]); XtVaSetValues(GW.parButton[PAR_NBC],XmNvalue,GP.parStrValue[PAR_NBC],NULL); XtVaGetValues(GW.probButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_NINT] = atof(value); sprintf(GP.parStrValue[PAR_NINT],"%d",(int)GP.parValue[PAR_NINT]); XtVaSetValues(GW.parButton[PAR_NINT],XmNvalue,GP.parStrValue[PAR_NINT],NULL); XtVaGetValues(GW.probButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_JAC] = atof(value); sprintf(GP.parStrValue[PAR_JAC],"%d",(int)GP.parValue[PAR_JAC]); XtVaSetValues(GW.parButton[PAR_JAC],XmNvalue,GP.parStrValue[PAR_JAC],NULL); if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormDis(parent) Widget parent; #else Widget CreateFormDis(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,25); CreateBoxDis(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormDisCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormDisCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormDisCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxDis(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxDis(parent) Widget parent; #else void CreateBoxDis(Widget parent) #endif { Widget rwcl,label,frame,popNcol; XtVaSetValues(parent,XmNorientation,XmHORIZONTAL,XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[4],NULL,0); XtManageChild(label); GW.disButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.disButton[0]); XtVaSetValues(GW.disButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NTST], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[5],NULL,0); XtManageChild(label); GW.disButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.disButton[1]); XtVaSetValues(GW.disButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NCOL], NULL); XtVaSetValues(GW.disButton[1],XmNeditable,False,NULL); popNcol=PopupNcol(GW.disButton[1]); XtAddEventHandler(GW.disButton[1],ButtonPressMask,False,PostItCB,popNcol); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[6],NULL,0); XtManageChild(label); GW.disButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.disButton[2]); XtVaSetValues(GW.disButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_IAD], NULL); } #ifdef _NO_PROTO void OkFormDisCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormDisCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; XtVaGetValues(GW.disButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_NTST] = atof(value); sprintf(GP.parStrValue[PAR_NTST],"%d",(int)GP.parValue[PAR_NTST]); XtVaSetValues(GW.parButton[PAR_NTST],XmNvalue,GP.parStrValue[PAR_NTST],NULL); XtVaGetValues(GW.disButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_NCOL] = atof(value); sprintf(GP.parStrValue[PAR_NCOL],"%d",(int)GP.parValue[PAR_NCOL]); XtVaSetValues(GW.parButton[PAR_NCOL],XmNvalue,GP.parStrValue[PAR_NCOL],NULL); XtVaGetValues(GW.disButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_IAD] = atof(value); sprintf(GP.parStrValue[PAR_IAD],"%d",(int)GP.parValue[PAR_IAD]); XtVaSetValues(GW.parButton[PAR_IAD],XmNvalue,GP.parStrValue[PAR_IAD],NULL); if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormTol(parent) Widget parent; #else Widget CreateFormTol(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,25); CreateBoxTol(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormTolCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormTolCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormTolCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxTol(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxTol(parent) Widget parent; #else void CreateBoxTol(Widget parent) #endif { Widget rwcl,label,frame; XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[7],NULL,0); XtManageChild(label); GW.tolButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[0]); XtVaSetValues(GW.tolButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[7], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[8],NULL,0); XtManageChild(label); GW.tolButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[1]); XtVaSetValues(GW.tolButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[8], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[9],NULL,0); XtManageChild(label); GW.tolButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[2]); XtVaSetValues(GW.tolButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[9], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[10],NULL,0); XtManageChild(label); GW.tolButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[3]); XtVaSetValues(GW.tolButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[10], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[11],NULL,0); XtManageChild(label); GW.tolButton[4]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[4]); XtVaSetValues(GW.tolButton[4], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[11], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[12],NULL,0); XtManageChild(label); GW.tolButton[5]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.tolButton[5]); XtVaSetValues(GW.tolButton[5], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[12], NULL); } #ifdef _NO_PROTO void OkFormTolCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormTolCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData *) userData; XtVaGetValues(GW.tolButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_EPSL] = atof(value); sprintf(GP.parStrValue[PAR_EPSL],"%lg",GP.parValue[PAR_EPSL]); XtVaSetValues(GW.parButton[PAR_EPSL],XmNvalue,GP.parStrValue[PAR_EPSL],NULL); XtVaGetValues(GW.tolButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_EPSU] = atof(value); sprintf(GP.parStrValue[PAR_EPSU],"%lg",GP.parValue[PAR_EPSU]); XtVaSetValues(GW.parButton[PAR_EPSU],XmNvalue,GP.parStrValue[PAR_EPSU],NULL); XtVaGetValues(GW.tolButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_EPSS] = atof(value); sprintf(GP.parStrValue[PAR_EPSS],"%lg",GP.parValue[PAR_EPSS]); XtVaSetValues(GW.parButton[PAR_EPSS],XmNvalue,GP.parStrValue[PAR_EPSS],NULL); XtVaGetValues(GW.tolButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_ITMX] = atof(value); sprintf(GP.parStrValue[PAR_ITMX],"%d",(int)GP.parValue[PAR_ITMX]); XtVaSetValues(GW.parButton[PAR_ITMX],XmNvalue,GP.parStrValue[PAR_ITMX],NULL); XtVaGetValues(GW.tolButton[4],XmNvalue,&value,NULL); GP.parValue[PAR_NWTN] = atof(value); sprintf(GP.parStrValue[PAR_NWTN],"%d",(int)GP.parValue[PAR_NWTN]); XtVaSetValues(GW.parButton[PAR_NWTN],XmNvalue,GP.parStrValue[PAR_NWTN],NULL); XtVaGetValues(GW.tolButton[5],XmNvalue,&value,NULL); GP.parValue[PAR_ITNW] = atof(value); sprintf(GP.parStrValue[PAR_ITNW],"%d",(int)GP.parValue[PAR_ITNW]); XtVaSetValues(GW.parButton[PAR_ITNW],XmNvalue,GP.parStrValue[PAR_ITNW],NULL); if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormStep(parent) Widget parent; #else Widget CreateFormStep(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,25); CreateBoxStep(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormStepCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormStepCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormStepCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxStep(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxStep(parent) Widget parent; #else void CreateBoxStep(Widget parent) #endif { Widget rwcl,label,frame; /* Widget popThl,popThu; */ XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[13],NULL,0); XtManageChild(label); GW.stepButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[0]); XtVaSetValues(GW.stepButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[13], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[14],NULL,0); XtManageChild(label); GW.stepButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[1]); XtVaSetValues(GW.stepButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[14], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[15],NULL,0); XtManageChild(label); GW.stepButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[2]); XtVaSetValues(GW.stepButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[15], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[16],NULL,0); XtManageChild(label); GW.stepButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[3]); XtVaSetValues(GW.stepButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[16], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[34],NULL,0); XtManageChild(label); GW.stepButton[4]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[4]); XtVaSetValues(GW.stepButton[4], XmNblinkRate,0, XmNeditable,False, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NTHL], NULL); /* popThl=PopupThl(GW.stepButton[4]); */ XtAddEventHandler(GW.stepButton[4],ButtonPressMask,False,PostItCB1,GW.popThl); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[35],NULL,0); XtManageChild(label); GW.stepButton[5]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.stepButton[5]); XtVaSetValues(GW.stepButton[5], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NTHU], NULL); /* popThu=PopupThu(GW.stepButton[5]); */ XtAddEventHandler(GW.stepButton[5],ButtonPressMask,False,PostItCB1,GW.popThu); } #ifdef _NO_PROTO void OkFormStepCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormStepCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; int i,k1,k2; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; XtVaGetValues(GW.stepButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_DS] = atof(value); sprintf(GP.parStrValue[PAR_DS],"%lg",GP.parValue[PAR_DS]); XtVaSetValues(GW.parButton[PAR_DS],XmNvalue,GP.parStrValue[PAR_DS],NULL); XtVaGetValues(GW.stepButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_DSMIN] = atof(value); sprintf(GP.parStrValue[PAR_DSMIN],"%lg",GP.parValue[PAR_DSMIN]); XtVaSetValues(GW.parButton[PAR_DSMIN],XmNvalue,GP.parStrValue[PAR_DSMIN],NULL); XtVaGetValues(GW.stepButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_DSMAX] = atof(value); sprintf(GP.parStrValue[PAR_DSMAX],"%lg",GP.parValue[PAR_DSMAX]); XtVaSetValues(GW.parButton[PAR_DSMAX],XmNvalue,GP.parStrValue[PAR_DSMAX],NULL); XtVaGetValues(GW.stepButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_IADS] = atof(value); sprintf(GP.parStrValue[PAR_IADS],"%d",(int)GP.parValue[PAR_IADS]); XtVaSetValues(GW.parButton[PAR_IADS],XmNvalue,GP.parStrValue[PAR_IADS],NULL); /* XtVaGetValues(GW.stepButton[4],XmNvalue,&value,NULL); GP.parValue[PAR_NTHL] = atof(value); sprintf(GP.parStrValue[PAR_NTHL],"%lg",GP.parValue[PAR_NTHL]); XtVaSetValues(GW.parButton[PAR_NTHL],XmNvalue,GP.parStrValue[PAR_NTHL],NULL); XtVaGetValues(GW.stepButton[5],XmNvalue,&value,NULL); GP.parValue[PAR_NTHU] = atof(value); sprintf(GP.parStrValue[PAR_NTHU],"%lg",GP.parValue[PAR_NTHU]); XtVaSetValues(GW.parButton[PAR_NTHU],XmNvalue,GP.parStrValue[PAR_NTHU],NULL); GP.nthl = CountAny(2); GP.nthu = CountAny(3); for(i = 0; i < GP.nthl; i++) { k1=2*i; k2=k1+1; XtVaGetValues(GW.thlButton[k2],XmNvalue,&value,NULL); GP.thlValue[k2] = atof(value); sprintf(GP.thlStrValue[k2],"%lg",GP.thlValue[k2]); } for(i = 0; i < GP.nthu; i++) { k1=2*i; k2=k1+1; XtVaGetValues(GW.thuButton[k2],XmNvalue,&value,NULL); GP.thuValue[k2] = atof(value); sprintf(GP.thuStrValue[k2],"%lg",GP.thuValue[k2]); } */ if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormLim(parent) Widget parent; #else Widget CreateFormLim(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,25); CreateBoxLim(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormLimCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormLimCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormLimCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxLim(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxLim(parent) Widget parent; #else void CreateBoxLim(Widget parent) #endif { Widget rwcl,label,frame; XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[17],NULL,0); XtManageChild(label); GW.limButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.limButton[0]); XtVaSetValues(GW.limButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[17], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[18],NULL,0); XtManageChild(label); GW.limButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.limButton[1]); XtVaSetValues(GW.limButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[18], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[19],NULL,0); XtManageChild(label); GW.limButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.limButton[2]); XtVaSetValues(GW.limButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[19], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[20],NULL,0); XtManageChild(label); GW.limButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.limButton[3]); XtVaSetValues(GW.limButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[20], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[21],NULL,0); XtManageChild(label); GW.limButton[4]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.limButton[4]); XtVaSetValues(GW.limButton[4], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[21], NULL); } #ifdef _NO_PROTO void OkFormLimCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormLimCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData *) userData; XtVaGetValues(GW.limButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_NMX] = atof(value); sprintf(GP.parStrValue[PAR_NMX],"%d",(int)GP.parValue[PAR_NMX]); XtVaSetValues(GW.parButton[PAR_NMX],XmNvalue,GP.parStrValue[PAR_NMX],NULL); XtVaGetValues(GW.limButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_RL0] = atof(value); sprintf(GP.parStrValue[PAR_RL0],"%lg",GP.parValue[PAR_RL0]); XtVaSetValues(GW.parButton[PAR_RL0],XmNvalue,GP.parStrValue[PAR_RL0],NULL); XtVaGetValues(GW.limButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_RL1] = atof(value); sprintf(GP.parStrValue[PAR_RL1],"%lg",GP.parValue[PAR_RL1]); XtVaSetValues(GW.parButton[PAR_RL1],XmNvalue,GP.parStrValue[PAR_RL1],NULL); XtVaGetValues(GW.limButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_A0] = atof(value); sprintf(GP.parStrValue[PAR_A0],"%lg",GP.parValue[PAR_A0]); XtVaSetValues(GW.parButton[PAR_A0],XmNvalue,GP.parStrValue[PAR_A0],NULL); XtVaGetValues(GW.limButton[4],XmNvalue,&value,NULL); GP.parValue[PAR_A1] = atof(value); sprintf(GP.parStrValue[PAR_A1],"%lg",GP.parValue[PAR_A1]); XtVaSetValues(GW.parButton[PAR_A1],XmNvalue,GP.parStrValue[PAR_A1],NULL); if(tmp->data == 1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormCon(parent) Widget parent; #else Widget CreateFormCon(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate1(rtrn,&rwcl,&ok,&apply,&cancel,&help); CreateBoxCon(rwcl); userData1.widget = rtrn; userData1.data = 1; userData2.widget = rtrn; userData2.data = 0; XtAddCallback(ok,XmNactivateCallback,OkFormConCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormConCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormConCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxCon(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxCon(parent) Widget parent; #else void CreateBoxCon(Widget parent) #endif { Widget rwcl,label,frame; XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[22],NULL,0); XtManageChild(label); GW.conButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.conButton[0]); XtVaSetValues(GW.conButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[22], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[23],NULL,0); XtManageChild(label); GW.conButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.conButton[1]); XtVaSetValues(GW.conButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[23], NULL); XtVaSetValues(GW.conButton[1],XmNeditable,False,NULL); XtAddEventHandler(GW.conButton[1],ButtonPressMask,False,PostItCB1,GW.popIcp); } #ifdef _NO_PROTO void OkFormConCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormConCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; int i,k1,k2; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; XtVaGetValues(GW.conButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_NICP] = atof(value); sprintf(GP.parStrValue[PAR_NICP],"%d",(int)GP.parValue[PAR_NICP]); XtVaSetValues(GW.parButton[PAR_NICP],XmNvalue,GP.parStrValue[PAR_NICP],NULL); /* XtVaGetValues(GW.conButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_ICP] = atof(value); sprintf(GP.parStrValue[PAR_ICP],"%d",(int)GP.parValue[PAR_ICP]); XtVaSetValues(GW.parButton[PAR_ICP],XmNvalue,GP.parStrValue[PAR_ICP],NULL); for(i = 0; i < (int)GP.parValue[PAR_NICP]; i++) { k1=2*i; k2=k1+1; XtVaGetValues(GW.icpButton[k2],XmNvalue,&value,NULL); GP.icpValue[k2] = atof(value); sprintf(GP.icpStrValue[k2],"%d",(int)GP.icpValue[k2]); } */ if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormRun(parent) Widget parent; #else Widget CreateFormRun(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,25); CreateBoxRun(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormRunCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormRunCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormRunCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxRun(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxRun(parent) Widget parent; #else void CreateBoxRun(Widget parent) #endif { Widget rwcl,label,frame; Widget popIlp,popIsp,popIsw,popIps; XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[24],NULL,0); XtManageChild(label); GW.runButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[0]); XtVaSetValues(GW.runButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[24], NULL); XtVaSetValues(GW.runButton[0],XmNeditable,False,NULL); popIlp=PopupIlp(GW.runButton[0]); XtAddEventHandler(GW.runButton[0],ButtonPressMask,False,PostItCB,popIlp); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[25],NULL,0); XtManageChild(label); GW.runButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[1]); XtVaSetValues(GW.runButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[25], NULL); XtVaSetValues(GW.runButton[1],XmNeditable,False,NULL); popIsp=PopupIsp(GW.runButton[1]); XtAddEventHandler(GW.runButton[1],ButtonPressMask,False,PostItCB,popIsp); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[26],NULL,0); XtManageChild(label); GW.runButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[2]); XtVaSetValues(GW.runButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[26], NULL); XtVaSetValues(GW.runButton[2],XmNeditable,False,NULL); popIsw=PopupIsw(GW.runButton[2]); XtAddEventHandler(GW.runButton[2],ButtonPressMask,False,PostItCB,popIsw); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[27],NULL,0); XtManageChild(label); GW.runButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[3]); XtVaSetValues(GW.runButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[27], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[28],NULL,0); XtManageChild(label); GW.runButton[4]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[4]); XtVaSetValues(GW.runButton[4], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[28], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[29],NULL,0); XtManageChild(label); GW.runButton[5]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.runButton[5]); XtVaSetValues(GW.runButton[5], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[29], NULL); XtVaSetValues(GW.runButton[5],XmNeditable,False,NULL); popIps=PopupIps(GW.runButton[5]); XtAddEventHandler(GW.runButton[5],ButtonPressMask,False,PostItCB,popIps); } #ifdef _NO_PROTO void OkFormRunCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormRunCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; XtVaGetValues(GW.runButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_ILP] = atof(value); sprintf(GP.parStrValue[PAR_ILP],"%d",(int)GP.parValue[PAR_ILP]); XtVaSetValues(GW.parButton[PAR_ILP],XmNvalue,GP.parStrValue[PAR_ILP],NULL); XtVaGetValues(GW.runButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_ISP] = atof(value); sprintf(GP.parStrValue[PAR_ISP],"%d",(int)GP.parValue[PAR_ISP]); XtVaSetValues(GW.parButton[PAR_ISP],XmNvalue,GP.parStrValue[PAR_ISP],NULL); XtVaGetValues(GW.runButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_ISW] = atof(value); sprintf(GP.parStrValue[PAR_ISW],"%d",(int)GP.parValue[PAR_ISW]); XtVaSetValues(GW.parButton[PAR_ISW],XmNvalue,GP.parStrValue[PAR_ISW],NULL); XtVaGetValues(GW.runButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_MXBF] = atof(value); sprintf(GP.parStrValue[PAR_MXBF],"%d",(int)GP.parValue[PAR_MXBF]); XtVaSetValues(GW.parButton[PAR_MXBF],XmNvalue,GP.parStrValue[PAR_MXBF],NULL); XtVaGetValues(GW.runButton[4],XmNvalue,&value,NULL); GP.parValue[PAR_IRS] = atof(value); sprintf(GP.parStrValue[PAR_IRS],"%d",(int)GP.parValue[PAR_IRS]); XtVaSetValues(GW.parButton[PAR_IRS],XmNvalue,GP.parStrValue[PAR_IRS],NULL); XtVaGetValues(GW.runButton[5],XmNvalue,&value,NULL); GP.parValue[PAR_IPS] = atof(value); sprintf(GP.parStrValue[PAR_IPS],"%d",(int)GP.parValue[PAR_IPS]); XtVaSetValues(GW.parButton[PAR_IPS],XmNvalue,GP.parStrValue[PAR_IPS],NULL); if(tmp->data==1) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO Widget CreateFormOut(parent) Widget parent; #else Widget CreateFormOut(Widget parent) #endif { Widget rtrn,rwcl,ok,apply,cancel,help; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate1(rtrn,&rwcl,&ok,&apply,&cancel,&help); CreateBoxOut(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormOutCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormOutCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 Widget rtrn,rwcl,sept,form,apply,reset,quit,wgt,frame; /* rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); */ rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); XtAddCallback(rtrn,XmNokCallback,OkFormOutCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,PopupCB,GW.helpList); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); CreateBoxOut(rwcl); sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); apply = XmCreatePushButtonGadget(form,"Apply",NULL,0); XtManageChild(apply); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); quit = XmCreatePushButtonGadget(form,"Quit",NULL,0); XtManageChild(quit); XtAddCallback(quit,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(apply,XmNleftAttachment,XmATTACH_FORM,NULL); XtVaSetValues(apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNleftWidget,apply, XmNrightAttachment,XmATTACH_WIDGET, XmNrightWidget,quit, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, XmNrightOffset,5, NULL); XtVaSetValues(quit,XmNrightAttachment,XmATTACH_FORM,NULL); XtVaSetValues(quit, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBoxOut(parent) Widget parent; #else void CreateBoxOut(Widget parent) #endif { Widget rwcl,label,frame; Widget popIid; XtVaSetValues(parent,XmNpacking,XmPACK_COLUMN,XmNorientation,XmHORIZONTAL, XmNnumColumns,2,NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[30],NULL,0); XtManageChild(label); GW.outButton[0]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[0]); XtVaSetValues(GW.outButton[0], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[30], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[31],NULL,0); XtManageChild(label); GW.outButton[1]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[1]); XtVaSetValues(GW.outButton[1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[31], NULL); XtVaSetValues(GW.outButton[1],XmNeditable,False,NULL); popIid=PopupIid(GW.outButton[1]); XtAddEventHandler(GW.outButton[1],ButtonPressMask,False,PostItCB,popIid); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[32],NULL,0); XtManageChild(label); GW.outButton[2]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[2]); XtVaSetValues(GW.outButton[2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[32], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[33],NULL,0); XtManageChild(label); GW.outButton[3]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[3]); XtVaSetValues(GW.outButton[3], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[PAR_NUZR], NULL); XtVaSetValues(GW.outButton[3],XmNeditable,False,NULL); XtAddEventHandler(GW.outButton[3],ButtonPressMask,False,PostItCB1,GW.popUzr); /* frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[33],NULL,0); XtManageChild(label); GW.outButton[4]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[4]); XtVaSetValues(GW.outButton[4], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[33], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[34],NULL,0); XtManageChild(label); GW.outButton[5]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[5]); XtVaSetValues(GW.outButton[5], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[34], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[36],NULL,0); XtManageChild(label); GW.outButton[6]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[6]); XtVaSetValues(GW.outButton[6], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[36], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[37],NULL,0); XtManageChild(label); GW.outButton[7]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[7]); XtVaSetValues(GW.outButton[7], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[37], NULL); frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[38],NULL,0); XtManageChild(label); GW.outButton[8]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.outButton[8]); XtVaSetValues(GW.outButton[8], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[38], NULL); */ } #ifdef _NO_PROTO void OkFormOutCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormOutCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; ClientData *tmp; int i,k1,k2; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp=(ClientData*) userData; XtVaGetValues(GW.outButton[0],XmNvalue,&value,NULL); GP.parValue[PAR_NPR] = atof(value); sprintf(GP.parStrValue[PAR_NPR],"%d",(int)GP.parValue[PAR_NPR]); XtVaSetValues(GW.parButton[PAR_NPR],XmNvalue,GP.parStrValue[PAR_NPR],NULL); XtVaGetValues(GW.outButton[1],XmNvalue,&value,NULL); GP.parValue[PAR_IID] = atof(value); sprintf(GP.parStrValue[PAR_IID],"%d",(int)GP.parValue[PAR_IID]); XtVaSetValues(GW.parButton[PAR_IID],XmNvalue,GP.parStrValue[PAR_IID],NULL); XtVaGetValues(GW.outButton[2],XmNvalue,&value,NULL); GP.parValue[PAR_IPLT] = atof(value); sprintf(GP.parStrValue[PAR_IPLT],"%d",(int)GP.parValue[PAR_IPLT]); XtVaSetValues(GW.parButton[PAR_IPLT],XmNvalue,GP.parStrValue[PAR_IPLT],NULL); /* XtVaGetValues(GW.outButton[3],XmNvalue,&value,NULL); GP.parValue[PAR_NUZR] = atof(value); sprintf(GP.parStrValue[PAR_NUZR],"%lg",GP.parValue[PAR_NUZR]); XtVaSetValues(GW.parButton[PAR_NUZR],XmNvalue,GP.parStrValue[PAR_NUZR],NULL); GP.nuzr = CountAny(1); for(i = 0; i < GP.nuzr; i++) { k1=2*i; k2=k1+1; XtVaGetValues(GW.uzrButton[k2],XmNvalue,&value,NULL); GP.uzrValue[k2] = atof(value); sprintf(GP.uzrStrValue[k2],"%lg",GP.uzrValue[k2]); } */ if(tmp->data==1) XtUnmanageChild(tmp->widget); /* XtVaGetValues(GW.outButton[4],XmNvalue,&value,NULL); GP.parValue[33] = atof(value); sprintf(GP.parStrValue[33],"%lg",GP.parValue[33]); XtVaSetValues(GW.parButton[33],XmNvalue,GP.parStrValue[33],NULL); XtVaGetValues(GW.outButton[5],XmNvalue,&value,NULL); GP.parValue[34] = atof(value); sprintf(GP.parStrValue[34],"%lg",GP.parValue[34]); XtVaSetValues(GW.parButton[34],XmNvalue,GP.parStrValue[34],NULL); XtVaGetValues(GW.outButton[6],XmNvalue,&value,NULL); GP.parValue[36] = atof(value); sprintf(GP.parStrValue[36],"%lg",GP.parValue[36]); XtVaSetValues(GW.parButton[36],XmNvalue,GP.parStrValue[36],NULL); XtVaGetValues(GW.outButton[7],XmNvalue,&value,NULL); GP.parValue[37] = atof(value); sprintf(GP.parStrValue[37],"%lg",GP.parValue[37]); XtVaSetValues(GW.parButton[37],XmNvalue,GP.parStrValue[37],NULL); XtVaGetValues(GW.outButton[8],XmNvalue,&value,NULL); GP.parValue[38] = atof(value); sprintf(GP.parStrValue[38],"%lg",GP.parValue[38]); XtVaSetValues(GW.parButton[38],XmNvalue,GP.parStrValue[38],NULL); */ } #ifdef _NO_PROTO Widget CreateFormDefault(parent) Widget parent; #else Widget CreateFormDefault(Widget parent) #endif { Widget rtrn,rwcl,sept,form,ok,apply,cancel,help,wgt,frame; static ClientData userData1,userData2; /* rtrn = XmCreateMessageDialog(parent,"Message",NULL,0); */ rtrn = XmCreateFormDialog(parent,"DialogShell",NULL,0); PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,28); CreateBox(rwcl); userData1.widget=rtrn; userData1.data=1; userData2.widget=rtrn; userData2.data=0; XtAddCallback(ok,XmNactivateCallback,OkFormDefCB,&userData1); XtAddCallback(apply,XmNactivateCallback,OkFormDefCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 sept = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(sept); /* form = XmCreateForm(rtrn,"Form",NULL,0); */ form = XmCreateRowColumn(rtrn,"Form",NULL,0); XtManageChild(form); XtVaSetValues(form,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); ok = XmCreatePushButtonGadget(form,"Ok",NULL,0); XtManageChild(ok); reset = XmCreatePushButtonGadget(form,"Reset",NULL,0); XtManageChild(reset); cancel = XmCreatePushButtonGadget(form,"Cancel",NULL,0); XtManageChild(cancel); help = XmCreatePushButtonGadget(form,"Help",NULL,0); XtManageChild(help); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); XtVaSetValues(rwcl, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,sept, NULL); XtVaSetValues(sept, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,5, XmNbottomOffset,5, XmNbottomAttachment,XmATTACH_WIDGET, XmNbottomWidget,form, NULL); XtVaSetValues(form, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, NULL); XtVaSetValues(ok, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,5, NULL); XtVaSetValues(reset, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightPosition,50, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,-50, NULL); XtVaSetValues(cancel, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftPosition,50, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNleftOffset,50, NULL); XtVaSetValues(help, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, /* XmNtopOffset,5, */ XmNbottomOffset,5, XmNrightOffset,5, NULL); #endif return rtrn; } #ifdef _NO_PROTO void CreateBox(parent) Widget parent; #else void CreateBox(Widget parent) #endif { int i; Widget rwcl,label,frame; Widget popJac,popNcol,popIlp,popIsp,popIsw,popIps,popIid; /* Widget popThl,popThu,popUzr,popIcp; */ XtVaSetValues(parent,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,6,NULL); for(i = 0; i < GP.numParameter; i++) { frame = XmCreateFrame(parent,"Frame",NULL,0); XtManageChild(frame); rwcl = XmCreateRowColumn(frame,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNpacking,XmPACK_TIGHT,NULL); label = XmCreateLabelGadget(rwcl,parLabel[i],NULL,0); XtManageChild(label); /* label = XmCreateTextField(rwcl,parLabel[i],NULL,0); XtManageChild(label); */ GW.parButton[i]=XmCreateTextField(rwcl,"Button",NULL,0); XtManageChild(GW.parButton[i]); XtVaSetValues(GW.parButton[i], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH-2, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.parStrValue[i], NULL); switch(i) { case PAR_NDIM: case PAR_NBC: case PAR_NINT: case PAR_NTST: case PAR_IAD: case PAR_EPSL: case PAR_EPSU: case PAR_EPSS: case PAR_NWTN: case PAR_ITNW: case PAR_DS: case PAR_DSMIN: case PAR_DSMAX: case PAR_IADS: case PAR_NMX: case PAR_RL0: case PAR_RL1: case PAR_A0: case PAR_A1: case PAR_NICP: case PAR_MXBF: case PAR_IRS: case PAR_NPR: case PAR_IPLT: break; case PAR_JAC: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popJac=PopupJac(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popJac); break; case PAR_NCOL: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popNcol=PopupNcol(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popNcol); break; case PAR_ICP: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); GW.popIcp=PopupIcp(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB1,GW.popIcp); break; case PAR_ILP: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popIlp=PopupIlp(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popIlp); break; case PAR_ISP: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popIsp=PopupIsp(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popIsp); break; case PAR_ISW: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popIsw=PopupIsw(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popIsw); break; case PAR_IPS: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popIps=PopupIps(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popIps); break; case PAR_IID: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); popIid=PopupIid(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB,popIid); break; case PAR_NUZR: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); GW.popUzr=PopupUzr(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB1,GW.popUzr); break; case PAR_NTHL: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); GW.popThl=PopupThl(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB1,GW.popThl); break; case PAR_NTHU: XtVaSetValues(GW.parButton[i],XmNeditable,False,NULL); GW.popThu=PopupThu(GW.parButton[i]); XtAddEventHandler(GW.parButton[i],ButtonPressMask,False,PostItCB1,GW.popThu); break; default: break; } } } #ifdef _NO_PROTO void OkFormDefCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OkFormDefCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { String value; int i,k1,k2; ClientData *tmp; #if 0 SaveParScreen(1); SaveParScreen(2); SaveParScreen(3); SaveParScreen(4); SetParScreen(); tmp = (ClientData*) userData; if(tmp->data==1) XtUnmanageChild(tmp->widget); #endif tmp = (ClientData*) userData; for(i=0; idata==1) XtUnmanageChild(tmp->widget); } /* *********************************************************************** ** ** CreateActionMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateActionMenu(menuBar) Widget menuBar; #else void CreateActionMenu(Widget menuBar) #endif { Widget actionPDPN,actionCSCD,compPUSH,runPUSH,stopPUSH,lineSEPT; actionPDPN = XmCreatePulldownMenu(menuBar,"ActionPullDown",NULL,0); actionCSCD = XmCreateCascadeButton(menuBar,"Action",NULL,0); XtVaSetValues(actionCSCD,XmNsubMenuId,actionPDPN,XmNmnemonic,'A',NULL); XtManageChild(actionCSCD); /* XtManageChild(actionPDPN); */ compPUSH = XmCreatePushButtonGadget(actionPDPN,"Compile",NULL,0); XtVaSetValues(compPUSH,XmNmnemonic,'C',NULL); XtManageChild(compPUSH); XtAddCallback(compPUSH,XmNactivateCallback,RunCB,NULL); runPUSH = XmCreatePushButtonGadget(actionPDPN,"Run",NULL,0); XtVaSetValues(runPUSH,XmNmnemonic,'R',NULL); XtManageChild(runPUSH); XtAddCallback(runPUSH,XmNactivateCallback,RunCB,NULL); lineSEPT = XmCreateSeparatorGadget(actionPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); stopPUSH = XmCreatePushButtonGadget(actionPDPN,"Stop",NULL,0); XtVaSetValues(stopPUSH,XmNmnemonic,'S',NULL); XtManageChild(stopPUSH); XtAddCallback(stopPUSH,XmNactivateCallback,StopCB,NULL); } #ifdef _NO_PROTO void CleanCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void CleanCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { if(strcmp(GP.fileName,EMPTY) != 0) system("make clean &"); else printf("No equation was loaded\n"); } #ifdef _NO_PROTO void RunCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void RunCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char name[20],env[20],command[200]; int i=0,what; FILE *fp; what = (size_t) userData; if( strcmp(GP.fileName,EMPTY) != 0 ) { if(what == 1) { env[0] = '\0'; fp = fopen("Makefile","r"); if(fp == NULL) system("cp $AUTO_DIR/gui/auto.makefile ./Makefile"); /* if (fp != NULL) fclose(fp); */ strcpy(name,ProgramName(GP.fileName)); while(name[i] != '.') { env[i] = name[i]; ++i; } env[i] = '\0'; strcpy(name,"s."); strcat(name,env); fp = fopen(name,"r"); if (fp != NULL) { strcpy(command,"cp "); strcat(command,name); strcat(command," fort.3"); system(command); } if (fp != NULL) fclose(fp); strcpy(name,"c."); strcat(name,env); /* WriteRfile(CURRENT_RFILE); */ WriteRfile(name); if(i==0) { if(GP.parValue[PAR_IRS] > 0.0) { if(GP.restart == 0) sprintf(command,"make restart PROGRAMNAME= RESTARTNAME= &"); else { sprintf(command,"make restart PROGRAMNAME= RESTARTNAME=%s &",GP.q); GP.restart = 0; } } else { if(GP.restart == 0) { sprintf(command,"make PROGRAMNAME= RESTARTNAME= &"); } else { sprintf(command,"make PROGRAMNAME= RESTARTNAME=%s &",GP.q); GP.restart = 0; } } system(command); } else { if(GP.parValue[PAR_IRS] > 0.0) { if(GP.restart == 0) { sprintf(command,"make restart PROGRAMNAME=%s RESTARTNAME=%s &",env,env); } else { sprintf(command,"make restart PROGRAMNAME=%s RESTARTNAME=%s &",env,GP.q); GP.restart = 0; } } else { if(GP.restart == 0) { sprintf(command,"make PROGRAMNAME=%s RESTARTNAME=%s &",env,env); } else { sprintf(command,"make PROGRAMNAME=%s RESTARTNAME=%s &",env,GP.q); GP.restart = 0; } } system(command); } /* if(i==0) { putenv("PROGRAMNAME="); } else { strcpy(GP.command,"PROGRAMNAME="); strcat(GP.command,env); putenv(GP.command); } if (GP.parValue[PAR_IRS] > 0.0) system("make restart &"); else system("make &"); */ } } else printf("No equation was loaded\n"); } #ifdef _NO_PROTO void StopCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void StopCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char jobName[10]; if(strcmp(GP.fileName,EMPTY) == 0) printf("No running program to be killed\n"); else { GetJobName(jobName,ProgramName(GP.fileName)); if(strcmp(jobName,EMPTY) != 0) GP.autoPid = GetAutoPid(jobName); if(GP.autoPid == -1) printf("No running program to be killed\n"); else { kill(GP.autoPid,SIGKILL); printf("The running program has been killed\n"); } } } /* *********************************************************************** ** ** CreateSaveMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateSaveMenu(menuBar) Widget menuBar; #else void CreateSaveMenu(Widget menuBar) #endif { Widget savePDPN,saveCSCD,savPUSH,sasPUSH,prompt1,button; savePDPN = XmCreatePulldownMenu(menuBar,"SavePullDown",NULL,0); /* XtManageChild(savePDPN); */ saveCSCD = XmCreateCascadeButton(menuBar,"Save",NULL,0); XtManageChild(saveCSCD); XtVaSetValues(saveCSCD,XmNsubMenuId,savePDPN,XmNmnemonic,'v',NULL); savPUSH = XmCreatePushButtonGadget(savePDPN,"Save",NULL,0); XtVaSetValues(savPUSH,XmNmnemonic,'S',NULL); XtManageChild(savPUSH); XtAddCallback(savPUSH,XmNactivateCallback,OutputCB,(XtPointer *)1); prompt1 = XmCreatePromptDialog(menuBar,"Prompt",NULL,0); XtAddCallback(prompt1,XmNokCallback,NewOutputCB,(XtPointer *)1); XtVaSetValues(prompt1,XmNselectionLabelString, XmStringCreateSimple("Enter Name"),NULL); button = XmSelectionBoxGetChild(prompt1,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); sasPUSH = XmCreatePushButtonGadget(savePDPN,"Save as ...",NULL,0); XtVaSetValues(sasPUSH,XmNmnemonic,'a',NULL); XtManageChild(sasPUSH); XtAddCallback(sasPUSH,XmNactivateCallback,PopupCB,prompt1); } /* *********************************************************************** ** ** CreatePlotMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreatePlotMenu(menuBar) Widget menuBar; #else void CreatePlotMenu(Widget menuBar) #endif { Widget plotPDPN,plotCSCD,defPUSH,otherPUSH,prompt,button; plotPDPN = XmCreatePulldownMenu(menuBar,"PlotPullDown",NULL,0); /* XtManageChild(plotPDPN); */ plotCSCD = XmCreateCascadeButton(menuBar,"Plot",NULL,0); XtManageChild(plotCSCD); XtVaSetValues(plotCSCD,XmNsubMenuId,plotPDPN,XmNmnemonic,'P',NULL); defPUSH = XmCreatePushButtonGadget(plotPDPN,"Plot",NULL,0); XtVaSetValues(defPUSH,XmNmnemonic,'P',NULL); XtManageChild(defPUSH); XtAddCallback(defPUSH,XmNactivateCallback,TekCB,(XtPointer *)1); prompt = XmCreatePromptDialog(menuBar,"Prompt",NULL,0); XtAddCallback(prompt,XmNokCallback,TekCB,(XtPointer)2); XtVaSetValues(prompt,XmNselectionLabelString, XmStringCreateSimple("Enter Name"),NULL); button = XmSelectionBoxGetChild(prompt,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); otherPUSH = XmCreatePushButtonGadget(plotPDPN,"Name ...",NULL,0); XtVaSetValues(otherPUSH,XmNmnemonic,'N',NULL); XtManageChild(otherPUSH); XtAddCallback(otherPUSH,XmNactivateCallback,PopupCB,prompt); } /* *********************************************************************** ** ** CreateAppendMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateAppendMenu(menuBar) Widget menuBar; #else void CreateAppendMenu(Widget menuBar) #endif { Widget appendPDPN,appendCSCD,appPUSH,aptPUSH,prompt2,button,bn; appendPDPN = XmCreatePulldownMenu(menuBar,"AppendPullDown",NULL,0); /* XtManageChild(appendPDPN); */ appendCSCD = XmCreateCascadeButton(menuBar,"Append",NULL,0); XtManageChild(appendCSCD); XtVaSetValues(appendCSCD,XmNsubMenuId,appendPDPN,XmNmnemonic,'A',NULL); appPUSH = XmCreatePushButtonGadget(appendPDPN,"Append",NULL,0); XtVaSetValues(appPUSH,XmNmnemonic,'A',NULL); XtManageChild(appPUSH); XtAddCallback(appPUSH,XmNactivateCallback,OutputCB,(XtPointer)2); prompt2 = XmCreatePromptDialog(menuBar,"Prompt",NULL,0); XtAddCallback(prompt2,XmNokCallback,NewOutputCB,(XtPointer)2); XtVaSetValues(prompt2,XmNselectionLabelString, XmStringCreateSimple("Enter Name"),NULL); bn = XmSelectionBoxGetChild(prompt2,XmDIALOG_HELP_BUTTON); XtUnmanageChild(bn); button = XmSelectionBoxGetChild(prompt2,XmDIALOG_HELP_BUTTON); XtUnmanageChild(button); aptPUSH = XmCreatePushButtonGadget(appendPDPN,"Append to ...",NULL,0); XtVaSetValues(aptPUSH,XmNmnemonic,'t',NULL); XtManageChild(aptPUSH); XtAddCallback(aptPUSH,XmNactivateCallback,PopupCB,prompt2); } #ifdef _NO_PROTO void NewOutputCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void NewOutputCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { int who; char *newName,command[100]; XmSelectionBoxCallbackStruct *cbs; cbs = (XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&newName); who = (size_t) userData; /* strcpy(command,"NEW_PROGRAMNAME="); strcat(command,newName); putenv(command); */ switch(who) { case 1: /* save as */ sprintf(command,"make saveas NEW_PROGRAMNAME=%s &",newName); system(command); /* system("make saveas &"); */ break; case 2: /* append to */ sprintf(command,"make appendto NEW_PROGRAMNAME=%s &",newName); system(command); /* system("make appendto &"); */ break; default: break; } } #ifdef _NO_PROTO void OutputCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void OutputCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char name[20],env[20],command[100]; int i=0,what; what = (size_t) userData; if( strcmp(GP.fileName,EMPTY) != 0) { env[0] = '\0'; strcpy(name,ProgramName(GP.fileName)); while(name[i] != '.') { env[i] = name[i]; ++i; } env[i]='\0'; /* if(i==0) { putenv("PROGRAMNAME="); else { strcpy(command,"PROGRAMNAME="); strcat(command,env); putenv(command); } */ switch(what) { case 1: /* save */ { if(i==0) sprintf(command,"make save PROGRAMNAME= &"); else sprintf(command,"make save PROGRAMNAME=%s &",env); system(command); /* system("make save &"); */ } break; case 2: /* append */ { if(i==0) sprintf(command,"make append PROGRAMNAME= &"); else sprintf(command,"make append PROGRAMNAME=%s &",env); system(command); /* system("make append &"); */ } break; default: break; } } else printf("No equation was loaded\n"); } /* *********************************************************************** ** ** CreateDemoMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateDemoMenu(menuBar) Widget menuBar; #else void CreateDemoMenu(Widget menuBar) #endif { Widget demoPDPN,demoCSCD,selPUSH,clselPUSH,allPUSH,clallPUSH,lineSEPT; demoPDPN = XmCreatePulldownMenu(menuBar,"DemoPullDown",NULL,0); /* XtManageChild(demoPDPN); */ demoCSCD = XmCreateCascadeButton(menuBar,"Demos",NULL,0); XtManageChild(demoCSCD); XtVaSetValues(demoCSCD,XmNsubMenuId,demoPDPN,XmNmnemonic,'o',NULL); selPUSH = XmCreatePushButtonGadget(demoPDPN,"Select ...",NULL,0); XtVaSetValues(selPUSH,XmNmnemonic,'S',NULL); XtManageChild(selPUSH); XtAddCallback(selPUSH,XmNactivateCallback,PopupCB,GW.demoList); clselPUSH = XmCreatePushButtonGadget(demoPDPN,"Reset",NULL,0); XtVaSetValues(clselPUSH,XmNmnemonic,'R',NULL); XtManageChild(clselPUSH); XtAddCallback(clselPUSH,XmNactivateCallback,clselCB,NULL); /* lineSEPT = XmCreateSeparatorGadget(demoPDPN,"Separator",NULL,0); XtManageChild(lineSEPT); allPUSH = XmCreatePushButtonGadget(demoPDPN,"Run All Demo",NULL,0); XtVaSetValues(allPUSH,XmNmnemonic,'A',NULL); XtManageChild(allPUSH); XtAddCallback(allPUSH,XmNactivateCallback,RunAllDemoCB,NULL); clallPUSH = XmCreatePushButtonGadget(demoPDPN,"Reset All Demo",NULL,0); XtVaSetValues(clallPUSH,XmNmnemonic,'D',NULL); XtManageChild(clallPUSH); XtAddCallback(clallPUSH,XmNactivateCallback,clallCB,NULL); */ } #ifdef _NO_PROTO Widget CreateScrolledDemoList(parent) Widget parent; #else Widget CreateScrolledDemoList(Widget parent) #endif { Widget rtrn,list; XmString listTitle,run,browse; run = XmStringCreateSimple("Run"); browse = XmStringCreateSimple("Browse"); listTitle = XmStringCreateSimple("Auto Demos:"); rtrn = XmCreateSelectionDialog(parent,"Selection",NULL,0); list = XmSelectionBoxGetChild(rtrn,XmDIALOG_APPLY_BUTTON); XtManageChild(list); XtVaSetValues(rtrn, XmNlistLabelString,listTitle, XmNlistItems, GP.demoXmItems, XmNlistItemCount,GP.numDemo, XmNvisibleItemCount,8, XmNokLabelString,run, XmNapplyLabelString,browse, NULL); XtAddCallback(rtrn,XmNokCallback,DemoRunCB,NULL); XtAddCallback(rtrn,XmNapplyCallback,DemoBrowseCB,NULL); XtAddCallback(rtrn,XmNhelpCallback,DemoHelpCB,NULL); XmStringFree(run); XmStringFree(browse); XmStringFree(listTitle); return rtrn; } #ifdef _NO_PROTO Widget CreateDemoList(parent) Widget parent; #else Widget CreateDemoList(Widget parent) #endif { Widget rtrn,list; XmString listTitle; listTitle = XmStringCreateSimple("Auto Demos:"); rtrn = XmCreateSelectionDialog(parent,"Selection",NULL,0); list = XmSelectionBoxGetChild(rtrn,XmDIALOG_HELP_BUTTON); XtUnmanageChild(list); list = XmSelectionBoxGetChild(rtrn,XmDIALOG_APPLY_BUTTON); XtUnmanageChild(list); XtVaSetValues(rtrn, XmNlistLabelString,listTitle, XmNlistItems, GP.demoXmItems, XmNlistItemCount,GP.numDemo, XmNvisibleItemCount,8, /* XmNokLabelString,run, XmNapplyLabelString,browse, */ NULL); XtAddCallback(rtrn,XmNokCallback,DemoCopyCB,NULL); XmStringFree(listTitle); return rtrn; } #ifdef _NO_PROTO void DemoCopyCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void DemoCopyCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { XmString item; XmSelectionBoxCallbackStruct *cbs; int i,index = -1, k; char cmd[200],demo[100]; FILE *fp; cbs = (XmSelectionBoxCallbackStruct *) callbackArg; item=cbs->value; for(i=0; ivalue; for(i=0; ivalue,XmSTRING_DEFAULT_CHARSET,&filename); strcpy(file,filename); if(ReadRfile(file)==0) { SetParScreen(); XtUnmanageChild(w); } else { printf("Warning : unable to read the AUTO-constants file\n"); XtUnmanageChild(w); } } #ifdef _NO_PROTO void TekCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void TekCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char name[20],env[20],*newName,command[100]; int i=0,what; XmSelectionBoxCallbackStruct *cbs; what = (size_t) userData; if(what == 1) { /* plot current */ if(strcmp(GP.fileName,EMPTY) != 0) { env[0] = '\0'; strcpy(name,ProgramName(GP.fileName)); while(name[i] != '.') { env[i] = name[i]; ++i; } env[i]='\0'; if(i==0) { sprintf(command,"make plot_current PROGRAMNAME= &"); system(command); } else { sprintf(command,"make plot_current PROGRAMNAME=%s &",env); system(command); } /* if(i==0) putenv("PROGRAMNAME="); else { strcpy(command,"PROGRAMNAME="); strcat(command,env); putenv(command); } system("make plot_current &"); */ } else { printf("No equation was loaded\n"); } } else if(what == 2) { /* plot other */ cbs = (XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value,XmSTRING_DEFAULT_CHARSET,&newName); sprintf(command,"make plot_other NEW_PLOTNAME=%s &",newName); system(command); /* strcpy(command,"NEW_PLOTNAME="); strcat(command,newName); putenv(command); system("make plot_other &"); */ } else { /* Tek Term only */ system("xterm -bg black -fg white -t &"); } } #ifdef _NO_PROTO void VtCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void VtCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { system("xterm -bg navy -fg white +t &"); } /* *********************************************************************** ** ** CreateHelpMenu.c ** ************************************************************************ */ #ifdef _NO_PROTO void CreateHelpMenu(menuBar) Widget menuBar; #else void CreateHelpMenu(Widget menuBar) #endif { Widget helpPDPN,helpCSCD,helpPUSH; Widget parPUSH,manPUSH; helpPDPN = XmCreatePulldownMenu(menuBar,"HelpPullDown",NULL,0); /* XtManageChild(helpPDPN); */ helpCSCD = XmCreateCascadeButton(menuBar,"Help",NULL,0); XtVaSetValues(helpCSCD,XmNsubMenuId,helpPDPN,XmNmnemonic,'H',NULL); XtManageChild(helpCSCD); XtVaSetValues(menuBar,XmNmenuHelpWidget,helpCSCD,NULL); parPUSH = XmCreatePushButtonGadget(helpPDPN,"AUTO-Consts ...",NULL,0); XtVaSetValues(parPUSH,XmNmnemonic,'P',NULL); XtManageChild(parPUSH); /* GW.helpList = CreateScrolledHelpList(menuBar); */ XtAddCallback(parPUSH,XmNactivateCallback,PopupCB,GW.helpList); manPUSH = XmCreatePushButtonGadget(helpPDPN,"User Manual ...",NULL,0); XtVaSetValues(manPUSH,XmNmnemonic,'M',NULL); /* XtVaSetValues(manPUSH,XmNacceleratorText,XmStringCreateSimple("F1"), XmNaccelerator,"F1:",NULL); */ XtManageChild(manPUSH); XtAddCallback(manPUSH,XmNactivateCallback,ManualCB,NULL); } #ifdef _NO_PROTO void ManualCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void ManualCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { char command[100]; /* autoDir=copyenv(AUTO_DIR); */ strcpy(command,"ghostview "); strcat(command,GP.autoDir); strcat(command,"/doc/auto.ps &"); system(command); } #ifdef _NO_PROTO Widget CreateScrolledHelpList(parent) Widget parent; #else Widget CreateScrolledHelpList(Widget parent) #endif { Widget rtrn,list; XmString listTitle; listTitle = XmStringCreateSimple("Help On Auto-Consts:"); rtrn = XmCreateSelectionDialog(parent,"Selection",NULL,0); list = XmSelectionBoxGetChild(rtrn,XmDIALOG_APPLY_BUTTON); XtUnmanageChild(list); list = XmSelectionBoxGetChild(rtrn,XmDIALOG_HELP_BUTTON); XtUnmanageChild(list); XtVaSetValues(rtrn, XmNlistLabelString,listTitle, XmNlistItems, GP.parXmLabel, XmNlistItemCount,GP.numParameter, XmNvisibleItemCount,8, NULL); XtAddCallback(rtrn,XmNokCallback,HelpCB,NULL); XmStringFree(listTitle); /* XmStringFree(listItems); */ return rtrn; } #ifdef _NO_PROTO void HelpCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void HelpCB(Widget w, XtPointer userData,XtPointer callbackArg) #endif { XmString item; XmSelectionBoxCallbackStruct *cbs; int i,index = -1; cbs = (XmSelectionBoxCallbackStruct *) callbackArg; item=cbs->value; for(i=0; i",NULL,0); XtManageChild(label); for(i = 0; i < MAX_NTHL; i++) { k1 = 2*i; k2 = k1+1; wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt, /* XmNpacking,XmPACK_COLUMN, */ XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thlButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thlButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); GW.thlTg[i]=XmCreateToggleButton(wgt,"",NULL,0); XtManageChild(GW.thlTg[i]); XtManageChild(GW.thlButton[k1]); XtManageChild(GW.thlButton[k2]); XtVaSetValues(GW.thlButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k1], NULL); XtVaSetValues(GW.thlButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k2], NULL); } #if 0 PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,27); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); userData1.widget = rtrn; userData1.data = 3; userData2.widget = rtrn; userData2.data = 7; XtAddCallback(ok,XmNactivateCallback,TmpCB,&userData1); XtAddCallback(apply,XmNactivateCallback,TmpCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 rtrn = XmCreateFormDialog(parent,"Prompt",NULL,0); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); wgt = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(wgt); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); ok = XmCreatePushButtonGadget(form," Ok ",NULL,0); XtManageChild(ok); cancel = XmCreatePushButtonGadget(form," Cancel ",NULL,0); XtManageChild(cancel); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_POSITION, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomPosition,90, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(wgt, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,wgt, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(ok, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(cancel, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); #endif rc11=XmCreateRowColumn(rwcl,"rc",NULL,0); rc22=XmCreateRowColumn(rwcl,"rc",NULL,0); XtManageChild(rc11); XtManageChild(rc22); frame = XmCreateFrame(rc11,"Frame",NULL,0); XtManageChild(frame); rc1=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc1); frame = XmCreateFrame(rc22,"Frame",NULL,0); XtManageChild(frame); rc2=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc2); XtVaSetValues(rc1,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NTHL/2)+1,NULL); wgt = XmCreateFrame(rc1,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 1 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc1,"st",NULL,0); XtManageChild(label); */ XtVaSetValues(rc2,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NTHL/2)+1,NULL); wgt = XmCreateFrame(rc2,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 2 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc2,"st",NULL,0); XtManageChild(label); */ for(i = 0; i < MAX_NTHL/2; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc1,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thlButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thlButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.thlButton[k1]); XtManageChild(GW.thlButton[k2]); XtVaSetValues(GW.thlButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k1], NULL); XtVaSetValues(GW.thlButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k2], NULL); } for(i = MAX_NTHL/2; i < MAX_NTHL; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc2,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc2,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thlButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thlButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.thlButton[k1]); XtManageChild(GW.thlButton[k2]); XtVaSetValues(GW.thlButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k1], NULL); XtVaSetValues(GW.thlButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thlStrValue[k2], NULL); } #endif return rtrn; } #ifdef _NO_PROTO void DeleteCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void DeleteCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { XmSelectionBoxCallbackStruct *cbs; char *name,command[100]; cbs=(XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &name); sprintf(command,"make deletedata DELETEDATA=%s &",name); system(command); #if 0 XmSelectionBoxCallbackStruct *cbs; char *name; cbs=(XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &name); sprintf(GP.command,"rm -f b\.%s &\0",name); system(GP.command); printf("Deleting b.%s ... done\n",name); sprintf(GP.command,"rm -f s\.%s &\0",name); system(GP.command); printf("Deleting s.%s ... done\n",name); sprintf(GP.command,"rm -f d\.%s &\0",name); system(GP.command); printf("Deleting d.%s ... done\n",name); #endif } #ifdef _NO_PROTO void RestartCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void RestartCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { XmSelectionBoxCallbackStruct *cbs; char *name,command[100]; cbs=(XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &name); strcpy(GP.q,name); GP.restart = 1; sprintf(command,"make restartdata RESTARTDATA=%s &",name); system(command); #if 0 XmSelectionBoxCallbackStruct *cbs; char *name,nm[10]; int i=0; if(strcmp(GP.fileName,EMPTY) != 0) { cbs=(XmSelectionBoxCallbackStruct *) callbackArg; XmStringGetLtoR(cbs->value, XmSTRING_DEFAULT_CHARSET, &name); strcpy(nm,ProgramName(GP.fileName)); while(nm[i] != '.') ++i; nm[i] = '\0'; /* sprintf(GP.command,"cp c\.%s c\.%s &",name,nm); system(GP.command); printf("Copying c.%s to c.%s ... done\n",name,nm); sprintf(GP.command,"cp b\.%s b\.%s &",name,nm); system(GP.command); printf("Copying b.%s to b.%s ... done\n",name,nm); */ sprintf(GP.command,"cp s\.%s s\.%s &\0",name,nm); system(GP.command); printf("Copying s.%s to s.%s ... done\n",name,nm); /* sprintf(GP.command,"cp d\.%s d\.%s &",name,nm); system(GP.command); printf("Copying d.%s to d.%s ... done\n",name,nm); printf("Setting restart files as c.%s p.%s s.%s d.%s ... done\n",name,name,name,name); */ printf("Setting restart file as s.%s ... done\n",name); } else printf("No equation was loaded\n"); #endif } #ifdef _NO_PROTO void CopyDataCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void CopyDataCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { String value; char from[10],to[10],command[120]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.copyFrom,XmNvalue,&value,NULL); strcpy(from,value); XtVaGetValues(GW.copyTo,XmNvalue,&value,NULL); strcpy(to,value); sprintf(command,"make copydata COPYFROM=%s COPYTO=%s &",from,to); system(command); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #if 0 int i=0; String value; char from[10],to[10]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.copyFrom,XmNvalue,&value,NULL); /* if(strcmp(value,"") == 0 ) { strcpy(from,ProgramName(GP.fileName)); while(from[i] != '.') ++i; from[i] = '\0'; } else */ strcpy(from,value); XtVaGetValues(GW.copyTo,XmNvalue,&value,NULL); strcpy(to,value); /* strcpy(GP.command,"cp c\."); strcat(GP.command,from); strcat(GP.command," c\."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cp c\.%s c\.%s &\0",from,to); system(GP.command); printf("Copying c.%s to c.%s ... done\n",from,to); /* strcpy(GP.command,"cp b\."); strcat(GP.command,from); strcat(GP.command," b\."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cp b\.%s b\.%s &\0",from,to); system(GP.command); printf("Copying b.%s to b.%s ... done\n",from,to); /* strcpy(GP.command,"cp s\."); strcat(GP.command,from); strcat(GP.command," s\."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cp s\.%s s\.%s &\0",from,to); system(GP.command); printf("Copying s.%s to s.%s ... done\n",from,to); /* strcpy(GP.command,"cp d\."); strcat(GP.command,from); strcat(GP.command," d\."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cp d\.%s d\.%s &\0",from,to); system(GP.command); printf("Copying d.%s to d.%s ... done\n",from,to); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #endif } #ifdef _NO_PROTO Widget CopyData(parent) Widget parent; #else Widget CopyData(Widget parent) #endif { Widget frame,label1,label2,form,ok,cancel,rwcl; Widget rc,rc2,rc11,rc22,t; static Widget rtrn; rtrn = XmCreateFormDialog(parent,"CPrompt",NULL,0); PopupTemplate4(rtrn,&rwcl,&ok,&cancel); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); XtAddCallback(ok,XmNactivateCallback,CopyDataCB,rtrn); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); rc=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc); XtVaSetValues(rc,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label1 = XmCreateLabelGadget(form," Copy",NULL,0); XtManageChild(label1); GW.copyFrom = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.copyFrom); XtVaSetValues(GW.copyFrom, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label1, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.copyFrom, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label1, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label2 = XmCreateLabelGadget(form," To",NULL,0); XtManageChild(label2); GW.copyTo = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.copyTo); XtVaSetValues(GW.copyTo, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label2, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.copyTo, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label2, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); return rtrn; } #ifdef _NO_PROTO void MoveDataCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void MoveDataCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { String value; char from[10],to[10],command[120]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.moveFrom,XmNvalue,&value,NULL); strcpy(from,value); XtVaGetValues(GW.moveTo,XmNvalue,&value,NULL); strcpy(to,value); sprintf(command,"make movedata MOVEFROM=%s MOVETO=%s &",from,to); system(command); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #if 0 int i=0; String value; char from[10],to[10]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.moveFrom,XmNvalue,&value,NULL); /* if(strcmp(value,"") == 0 ) { strcpy(from,ProgramName(GP.fileName)); while(from[i] != '.') ++i; from[i] = '\0'; } else */ strcpy(from,value); XtVaGetValues(GW.moveTo,XmNvalue,&value,NULL); strcpy(to,value); /* strcpy(GP.command,"mv c."); strcat(GP.command,from); strcat(GP.command," c."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"mv c\.%s c\.%s &\0",from,to); system(GP.command); printf("Moving c.%s to c.%s ... done\n",from,to); /* strcpy(GP.command,"mv b."); strcat(GP.command,from); strcat(GP.command," b."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"mv b\.%s b\.%s &\0",from,to); system(GP.command); printf("Moving b.%s to b.%s ... done\n",from,to); /* strcpy(GP.command,"mv s."); strcat(GP.command,from); strcat(GP.command," s."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"mv s\.%s s\.%s &\0",from,to); system(GP.command); printf("Moving s.%s to s.%s ... done\n",from,to); /* strcpy(GP.command,"mv d."); strcat(GP.command,from); strcat(GP.command," d."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"mv d\.%s d\.%s &\0",from,to); system(GP.command); printf("Moving d.%s to d.%s ... done\n",from,to); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #endif } #ifdef _NO_PROTO Widget MoveData(parent) Widget parent; #else Widget MoveData(Widget parent) #endif { Widget frame,label1,label2,form,ok,cancel,rwcl; Widget rc,rc2,rc11,rc22,t; static Widget rtrn; rtrn = XmCreateFormDialog(parent,"MPrompt",NULL,0); PopupTemplate4(rtrn,&rwcl,&ok,&cancel); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); XtAddCallback(ok,XmNactivateCallback,MoveDataCB,rtrn); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); rc=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc); XtVaSetValues(rc,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label1 = XmCreateLabelGadget(form," Move",NULL,0); XtManageChild(label1); GW.moveFrom = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.moveFrom); XtVaSetValues(GW.moveFrom, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label1, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.moveFrom, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label1, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label2 = XmCreateLabelGadget(form," To",NULL,0); XtManageChild(label2); GW.moveTo = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.moveTo); XtVaSetValues(GW.moveTo, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label2, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.moveTo, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label2, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); return rtrn; } #ifdef _NO_PROTO void AppendDataCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void AppendDataCB(Widget w,XtPointer userData, XtPointer callbackArg) #endif { String value; char from[10],to[10],command[120]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.appendFrom,XmNvalue,&value,NULL); strcpy(from,value); XtVaGetValues(GW.appendTo,XmNvalue,&value,NULL); strcpy(to,value); sprintf(command,"make appenddata APPENDFROM=%s APPENDTO=%s &",from,to); system(command); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #if 0 int i=0; String value; char from[10],to[10]; Widget tmp; tmp = (Widget) userData; if(strcmp(GP.fileName,EMPTY) != 0) { XtVaGetValues(GW.appendFrom,XmNvalue,&value,NULL); /* if(strcmp(value,"") == 0 ) { strcpy(from,ProgramName(GP.fileName)); while(from[i] != '.') ++i; from[i] = '\0'; } else */ strcpy(from,value); XtVaGetValues(GW.appendTo,XmNvalue,&value,NULL); strcpy(to,value); /* strcpy(GP.command,"cat c."); strcat(GP.command,from); strcat(GP.command," >> c."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cat c\.%s >> c\.%s &\0",from,to); system(GP.command); printf("Appending c.%s to c.%s ... done\n",from,to); /* strcpy(GP.command,"cat b."); strcat(GP.command,from); strcat(GP.command," >> b."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cat b\.%s >> b\.%s &\0",from,to); system(GP.command); printf("Appending b.%s to b.%s ... done\n",from,to); /* strcpy(GP.command,"cat s."); strcat(GP.command,from); strcat(GP.command," >> s."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cat s\.%s >> s\.%s &\0",from,to); system(GP.command); printf("Appending s.%s to s.%s ... done\n",from,to); /* strcpy(GP.command,"cat d."); strcat(GP.command,from); strcat(GP.command," >> d."); strcat(GP.command,to); strcat(GP.command,"\0"); */ sprintf(GP.command,"cat d\.%s >> d\.%s &\0",from,to); system(GP.command); printf("Appending d.%s to d.%s ... done\n",from,to); } else printf("No equation was loaded\n"); XtUnmanageChild(tmp); #endif } #ifdef _NO_PROTO Widget AppendData(parent) Widget parent; #else Widget AppendData(Widget parent) #endif { Widget frame,label1,label2,form,ok,cancel,rwcl; Widget rc,rc2,rc11,rc22,t; static Widget rtrn; rtrn = XmCreateFormDialog(parent,"APrompt",NULL,0); PopupTemplate4(rtrn,&rwcl,&ok,&cancel); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); XtAddCallback(ok,XmNactivateCallback,AppendDataCB,rtrn); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); rc=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc); XtVaSetValues(rc,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label1 = XmCreateLabelGadget(form,"Append",NULL,0); XtManageChild(label1); GW.appendFrom = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.appendFrom); XtVaSetValues(GW.appendFrom, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label1, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.appendFrom, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label1, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); form = XmCreateForm(rc,"fm",NULL,0); XtManageChild(form); label2 = XmCreateLabelGadget(form," To",NULL,0); XtManageChild(label2); GW.appendTo = XmCreateTextField(form,"label",NULL,0); XtManageChild(GW.appendTo); XtVaSetValues(GW.appendTo, XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH/2, XmNmaxLength,WX_TEXTLENGTH, NULL); XtVaSetValues(label2, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(GW.appendTo, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_WIDGET, XmNrightAttachment,XmATTACH_FORM, XmNleftWidget,label2, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); return rtrn; } #ifdef _NO_PROTO Widget PopupIcp(parent) Widget parent; #else Widget PopupIcp(Widget parent) #endif { int i,k1,k2; Widget rtrn,wgt,frame,label,rwcl,window,form,ok,apply,cancel,help; Widget rc1,rc2,rc11,rc22,t; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"Prompt",NULL,0); /* PopupTemplate1(rtrn,&rwcl,&ok,&apply,&cancel,&help); */ PopupTemplate3(rtrn,&rwcl,&ok,&apply,&cancel,&help); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); userData1.widget = rtrn; userData1.data = 1; userData2.widget = rtrn; userData2.data = 5; XtAddCallback(ok,XmNactivateCallback,TmpCB,&userData1); XtAddCallback(apply,XmNactivateCallback,TmpCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); rc1=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc1); label = XmCreateLabelGadget(rc1," ICP(i) ",NULL,0); XtManageChild(label); for(i = 0; i < MAX_NICP; i++) { wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt, /* XmNpacking,XmPACK_COLUMN,*/ XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.icpButton[i]=XmCreateTextField(wgt,"Button",NULL,0); GW.icpTg[i]=XmCreateToggleButton(wgt,"",NULL,0); XtManageChild(GW.icpTg[i]); XtManageChild(GW.icpButton[i]); XtVaSetValues(GW.icpButton[i], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.icpStrValue[i], NULL); /* k1 = 2*i; k2 = k1+1; wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.icpButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.icpButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.icpButton[k1]); XtManageChild(GW.icpButton[k2]); XtVaSetValues(GW.icpButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.icpStrValue[k1], NULL); XtVaSetValues(GW.icpButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.icpStrValue[k2], NULL); */ } return rtrn; } #ifdef _NO_PROTO void TmpCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void TmpCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { ClientData *tmp; tmp = (ClientData *) userData; SaveParScreen(tmp->data); SetParScreen(); if(tmp->data < 5) XtUnmanageChild(tmp->widget); } #ifdef _NO_PROTO void UzrToggleCB(w,userData,callbackArg) Widget w; XtPointer userData,callbackArg; #else void UzrToggleCB(Widget w,XtPointer userData,XtPointer callbackArg) #endif { int i; XmToggleButtonCallbackStruct *cbs; cbs = (XmToggleButtonCallbackStruct *) callbackArg; i = (size_t) userData; if(cbs->set) GP.uzrToggle[i] = True; } #ifdef _NO_PROTO Widget PopupUzr(parent) Widget parent; #else Widget PopupUzr(Widget parent) #endif { int i,k1,k2; Widget rtrn,wgt,frame,label,rwcl,window,form,ok,apply,cancel,help; Widget rc1,rc2,rc11,rc22,t; static ClientData userData1,userData2; rtrn = XmCreateFormDialog(parent,"Prompt",NULL,0); PopupTemplate1(rtrn,&rwcl,&ok,&apply,&cancel,&help); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); userData1.widget =rtrn; userData1.data =2; userData2.widget =rtrn; userData2.data =6; XtAddCallback(ok,XmNactivateCallback,TmpCB,&userData1); XtAddCallback(apply,XmNactivateCallback,TmpCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); frame = XmCreateFrame(rwcl,"Frame",NULL,0); XtManageChild(frame); #if 0 t = XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(t); XtVaSetValues(t, /* XmNpacking,XmPACK_COLUMN,*/ XmNorientation,XmHORIZONTAL, /* XmNnumColumns,1,*/ NULL); rc2=XmCreateRowColumn(t,"rc1",NULL,0); XtManageChild(rc2); for(i = 0; i < MAX_NUZR; i++) { tg = XmCreateToggleButton(rc2,"",NULL,0); XtManageChild(tg); } #endif rc1=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc1); label = XmCreateLabelGadget(rc1," < i, UZR(i) >",NULL,0); XtManageChild(label); for(i = 0; i < MAX_NUZR; i++) { k1 = 2*i; k2 = k1+1; wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt, /* XmNpacking,XmPACK_COLUMN, */ XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.uzrButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.uzrButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); GW.uzrTg[i]=XmCreateToggleButton(wgt,"",NULL,0); XtManageChild(GW.uzrTg[i]); /* XtAddCallback(GW.uzrTg[i],XmNvalueChangedCallback,UzrToggleCB,i); */ XtManageChild(GW.uzrButton[k1]); XtManageChild(GW.uzrButton[k2]); XtVaSetValues(GW.uzrButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k1], NULL); XtVaSetValues(GW.uzrButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k2], NULL); } #if 0 PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,27); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); userData1.widget =rtrn; userData1.data =2; userData2.widget =rtrn; userData2.data =6; XtAddCallback(ok,XmNactivateCallback,TmpCB,&userData1); XtAddCallback(apply,XmNactivateCallback,TmpCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 rtrn = XmCreateFormDialog(parent,"Prompt",NULL,0); rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); wgt = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(wgt); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); ok = XmCreatePushButtonGadget(form," Ok ",NULL,0); XtManageChild(ok); cancel = XmCreatePushButtonGadget(form," Cancel ",NULL,0); XtManageChild(cancel); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_POSITION, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomPosition,90, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(wgt, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,wgt, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(ok, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(cancel, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); #endif rc11=XmCreateRowColumn(rwcl,"rc",NULL,0); rc22=XmCreateRowColumn(rwcl,"rc",NULL,0); XtManageChild(rc11); XtManageChild(rc22); frame = XmCreateFrame(rc11,"Frame",NULL,0); XtManageChild(frame); rc1=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc1); frame = XmCreateFrame(rc22,"Frame",NULL,0); XtManageChild(frame); rc2=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc2); XtVaSetValues(rc1,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NUZR/2)+1,NULL); wgt = XmCreateFrame(rc1,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 1 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc1,"st",NULL,0); XtManageChild(label); */ XtVaSetValues(rc2,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NUZR/2)+1,NULL); wgt = XmCreateFrame(rc2,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 2 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc2,"st",NULL,0); XtManageChild(label); */ for(i = 0; i < MAX_NUZR/2; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc1,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.uzrButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.uzrButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.uzrButton[k1]); XtManageChild(GW.uzrButton[k2]); XtVaSetValues(GW.uzrButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k1], NULL); XtVaSetValues(GW.uzrButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k2], NULL); } for(i = MAX_NUZR/2; i < MAX_NUZR; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc2,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc2,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.uzrButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.uzrButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.uzrButton[k1]); XtManageChild(GW.uzrButton[k2]); XtVaSetValues(GW.uzrButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k1], NULL); XtVaSetValues(GW.uzrButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.uzrStrValue[k2], NULL); } #endif return rtrn; } #ifdef _NO_PROTO int CountAny(who) int who; #else int CountAny(int who) #endif { int i, k1,k2,num=0; char *value; switch(who) { case 0: /* icp */ for(i=0; i",NULL,0); XtManageChild(label); for(i = 0; i < MAX_NTHU; i++) { k1 = 2*i; k2 = k1+1; wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt, /* XmNpacking,XmPACK_COLUMN, */ XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thuButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thuButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); GW.thuTg[i]=XmCreateToggleButton(wgt,"",NULL,0); XtManageChild(GW.thuTg[i]); XtManageChild(GW.thuButton[k1]); XtManageChild(GW.thuButton[k2]); XtVaSetValues(GW.thuButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k1], NULL); XtVaSetValues(GW.thuButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k2], NULL); } #if 0 PopupTemplate(rtrn,&rwcl,&ok,&apply,&cancel,&help,27); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); userData1.widget = rtrn; userData1.data = 4; userData2.widget = rtrn; userData2.data = 8; XtAddCallback(ok,XmNactivateCallback,TmpCB,&userData1); XtAddCallback(apply,XmNactivateCallback,TmpCB,&userData2); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.helpList); #if 0 rwcl = XmCreateRowColumn(rtrn,"RowColumn",NULL,0); XtManageChild(rwcl); XtVaSetValues(rwcl,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); wgt = XmCreateSeparatorGadget(rtrn,"Separator",NULL,0); XtManageChild(wgt); form = XmCreateForm(rtrn,"Form",NULL,0); XtManageChild(form); ok = XmCreatePushButtonGadget(form," Ok ",NULL,0); XtManageChild(ok); cancel = XmCreatePushButtonGadget(form," Cancel ",NULL,0); XtManageChild(cancel); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,rtrn); XtVaSetValues(rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_POSITION, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomPosition,90, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(wgt, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,wgt, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(ok, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(cancel, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); #endif rc11=XmCreateRowColumn(rwcl,"rc",NULL,0); rc22=XmCreateRowColumn(rwcl,"rc",NULL,0); XtManageChild(rc11); XtManageChild(rc22); frame = XmCreateFrame(rc11,"Frame",NULL,0); XtManageChild(frame); rc1=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc1); frame = XmCreateFrame(rc22,"Frame",NULL,0); XtManageChild(frame); rc2=XmCreateRowColumn(frame,"rc",NULL,0); XtManageChild(rc2); XtVaSetValues(rc1,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NTHU/2)+1,NULL); wgt = XmCreateFrame(rc1,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 1 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc1,"st",NULL,0); XtManageChild(label); */ XtVaSetValues(rc2,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,(MAX_NTHU/2)+1,NULL); wgt = XmCreateFrame(rc2,"fm",NULL,0); XtManageChild(wgt); t = XmCreateRowColumn(wgt,"rc",NULL,0); XtManageChild(t); label = XmCreateLabelGadget(t,"Group 2 : ",NULL,0); XtManageChild(label); /* label = XmCreateSeparatorGadget(rc2,"st",NULL,0); XtManageChild(label); */ for(i = 0; i < MAX_NTHU/2; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc1,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc1,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thuButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thuButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.thuButton[k1]); XtManageChild(GW.thuButton[k2]); XtVaSetValues(GW.thuButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k1], NULL); XtVaSetValues(GW.thuButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k2], NULL); } for(i = MAX_NTHU/2; i < MAX_NTHU; i++) { k1 = 2*i; k2 = k1+1; /* frame = XmCreateFrame(rc2,"Frame",NULL,0); XtManageChild(frame); */ wgt = XmCreateRowColumn(rc2,"RowColumn",NULL,0); XtManageChild(wgt); XtVaSetValues(wgt,XmNpacking,XmPACK_COLUMN, XmNorientation,XmHORIZONTAL, XmNnumColumns,1,NULL); GW.thuButton[k1]=XmCreateTextField(wgt,"Button",NULL,0); GW.thuButton[k2]=XmCreateTextField(wgt,"Button",NULL,0); XtManageChild(GW.thuButton[k1]); XtManageChild(GW.thuButton[k2]); XtVaSetValues(GW.thuButton[k1], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k1], NULL); XtVaSetValues(GW.thuButton[k2], XmNblinkRate,0, XmNcolumns,DE_TEXTLENGTH, XmNmaxLength,WX_TEXTLENGTH, XmNvalue,GP.thuStrValue[k2], NULL); } #endif return rtrn; } #ifdef _NO_PROTO void PopupProb(parent) Widget parent; #else void PopupProb(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NDIM",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NBC",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NINT",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "JAC",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupDis(parent) Widget parent; #else void PopupDis(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NTST",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NCOL",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IAD",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupTol(parent) Widget parent; #else void PopupTol(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "EPSL",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "EPSU",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "EPSS",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ITMX",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NWTN",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ITNW",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupStep(parent) Widget parent; #else void PopupStep(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "DS",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "DSMIN",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "DSMAX",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IADS",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "THL",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "THU",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupLim(parent) Widget parent; #else void PopupLim(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NMX",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "RL0",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "RL1",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "A0",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "A1",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupCon(parent) Widget parent; #else void PopupCon(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NICP",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ICP",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupRun(parent) Widget parent; #else void PopupRun(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ILP",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ISP",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "ISW",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "MXBF",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IRS",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IPS",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupOut(parent) Widget parent; #else void PopupOut(Widget parent) #endif { Widget rtrn,button; rtrn = XmCreatePopupMenu(parent,"Popup",NULL,0); XtAddEventHandler(parent,ButtonPressMask,False,PostItCB,rtrn); button = XmCreateLabelGadget(rtrn, "Menu",NULL,0); XtManageChild(button); button = XmCreateSeparatorGadget(rtrn, "Separator",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "NPR",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IID",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "IPLT",NULL,0); XtManageChild(button); button = XmCreateLabelGadget(rtrn, "UZR",NULL,0); XtManageChild(button); } #ifdef _NO_PROTO void PopupTemplate(parent,rwcl,ok,apply,cancel,help,position) Widget parent,*rwcl,*ok,*apply,*cancel,*help; int position; #else void PopupTemplate (Widget parent,Widget *rwcl, Widget *ok,Widget *apply,Widget *cancel,Widget *help,int position) #endif { Widget sept,form; *rwcl = XmCreateRowColumn(parent,"RowColumn",NULL,0); XtManageChild(*rwcl); sept= XmCreateSeparatorGadget(parent,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(parent,"Form",NULL,0); XtManageChild(form); XtVaSetValues(*rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(sept, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,*rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,sept, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); *ok = XmCreatePushButton(form," Ok ",NULL,0); XtManageChild(*ok); *apply = XmCreatePushButton(form,"Apply ",NULL,0); XtManageChild(*apply); *cancel = XmCreatePushButton(form,"Cancel",NULL,0); XtManageChild(*cancel); *help = XmCreatePushButton(form," Help ",NULL,0); XtManageChild(*help); XtVaSetValues(*ok, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(*apply, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_POSITION, XmNrightAttachment,XmATTACH_NONE, XmNleftPosition,position, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(*cancel, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_POSITION, XmNrightPosition,100-position, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(*help, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); } #ifdef _NO_PROTO void PopupTemplate1(parent,rwcl,ok,apply,cancel,help) Widget parent,*rwcl,*ok,*apply,*cancel,*help; #else void PopupTemplate1 (Widget parent,Widget *rwcl,Widget *ok,Widget *apply,Widget *cancel,Widget *help) #endif { Widget sept,form; *rwcl = XmCreateRowColumn(parent,"RowColumn",NULL,0); XtManageChild(*rwcl); sept= XmCreateSeparatorGadget(parent,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(parent,"Form",NULL,0); XtManageChild(form); /* XtVaSetValues(form,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,1,NULL); */ XtVaSetValues(*rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(sept, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,*rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,sept, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); *ok = XmCreatePushButton(form," Ok ",NULL,0); XtManageChild(*ok); *apply = XmCreatePushButton(form,"Apply",NULL,0); XtManageChild(*apply); *cancel = XmCreatePushButton(form,"Cancel",NULL,0); XtManageChild(*cancel); *help = XmCreatePushButton(form,"Help",NULL,0); XtManageChild(*help); XtVaSetValues(*ok, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, /* XmNleftOffset,10, XmNrightOffset,5, */ NULL); XtVaSetValues(*apply, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_POSITION, XmNrightAttachment,XmATTACH_NONE, XmNleftPosition,23, XmNtopOffset,10, XmNbottomOffset,10, /* XmNleftOffset,5, XmNrightOffset,5, */ NULL); XtVaSetValues(*cancel, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_POSITION, XmNrightPosition,77, XmNtopOffset,10, XmNbottomOffset,10, /* XmNleftOffset,5, XmNrightOffset,5, */ NULL); XtVaSetValues(*help, /* XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_FORM, */ XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, /* XmNleftOffset,5, XmNrightOffset,10, */ NULL); } #ifdef _NO_PROTO void PopupTemplate3(parent,rwcl,ok,apply,cancel,help) Widget parent,*rwcl,*ok,*apply,*cancel,*help; #else void PopupTemplate3 (Widget parent,Widget *rwcl,Widget *ok,Widget *apply,Widget *cancel,Widget *help) #endif { Widget sept,form,rc; *rwcl = XmCreateRowColumn(parent,"RowColumn",NULL,0); XtManageChild(*rwcl); sept= XmCreateSeparatorGadget(parent,"Separator",NULL,0); XtManageChild(sept); rc = XmCreateRowColumn(parent,"rc",NULL,0); XtManageChild(rc); XtVaSetValues(*rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(sept, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,*rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(rc, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,sept, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(rc,XmNorientation,XmHORIZONTAL, XmNpacking,XmPACK_COLUMN, XmNnumColumns,2,NULL); *ok = XmCreatePushButton(rc," Ok ",NULL,0); XtManageChild(*ok); *apply = XmCreatePushButton(rc,"Apply",NULL,0); XtManageChild(*apply); *cancel = XmCreatePushButton(rc,"Cancel",NULL,0); XtManageChild(*cancel); *help = XmCreatePushButton(rc," Help ",NULL,0); XtManageChild(*help); } #ifdef _NO_PROTO void PopupTemplate4(parent,rwcl,ok,cancel) Widget parent,*rwcl,*ok,*cancel; #else void PopupTemplate4(Widget parent,Widget *rwcl,Widget *ok,Widget *cancel) #endif { Widget sept,form,rc; *rwcl = XmCreateRowColumn(parent,"RowColumn",NULL,0); XtManageChild(*rwcl); sept= XmCreateSeparatorGadget(parent,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(parent,"fm",NULL,0); XtManageChild(form); XtVaSetValues(*rwcl, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(sept, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_NONE, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,*rwcl, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_WIDGET, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopWidget,sept, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); *ok = XmCreatePushButton(form," Ok ",NULL,0); XtManageChild(*ok); XtVaSetValues(*ok, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_NONE, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, NULL); *cancel = XmCreatePushButton(form,"Cancel",NULL,0); XtManageChild(*cancel); XtVaSetValues(*cancel, XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNrightOffset,10, NULL); } #ifdef _NO_PROTO void PopupTemplate2(parent,fm) Widget parent,*fm; #else void PopupTemplate2(Widget parent,Widget *fm) #endif { Widget sept,form,cancel,help; *fm = XmCreateMainWindow(parent,"MainW",NULL,0); XtManageChild(*fm); sept= XmCreateSeparatorGadget(parent,"Separator",NULL,0); XtManageChild(sept); form = XmCreateForm(parent,"Form",NULL,0); XtManageChild(form); XtVaSetValues(*fm, XmNtopAttachment,XmATTACH_FORM, XmNbottomAttachment,XmATTACH_WIDGET, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomWidget,sept, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(sept, XmNtopAttachment,XmATTACH_NONE, XmNbottomAttachment,XmATTACH_WIDGET, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNbottomWidget,form, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); XtVaSetValues(form, XmNtopAttachment,XmATTACH_NONE, XmNbottomAttachment,XmATTACH_FORM, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); cancel = XmCreatePushButton(form,"Cancel",NULL,0); XtManageChild(cancel); XtAddCallback(cancel,XmNactivateCallback,PopdownCB,parent); /* help = XmCreatePushButton(form," Help ",NULL,0); XtManageChild(help); XtAddCallback(help,XmNactivateCallback,PopupCB,GW.demoList); */ XtVaSetValues(cancel, XmNleftAttachment,XmATTACH_FORM, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNleftOffset,10, XmNrightOffset,10, NULL); /* XtVaSetValues(help, XmNleftAttachment,XmATTACH_NONE, XmNrightAttachment,XmATTACH_FORM, XmNtopOffset,10, XmNbottomOffset,10, XmNrightOffset,10, NULL); */ } #if 0 #include #include /* tmp codes begin */ #define WX_FNLEN 10 #define MAX_NICP 20 #define MAX_NUZR 20 #define MAX_NTHL 20 #define MAX_NTHU 20 enum { PAR_NDIM, PAR_NBC, PAR_NINT, PAR_JAC, PAR_NTST, PAR_NCOL, PAR_IAD, PAR_EPSL, PAR_EPSU, PAR_EPSS, PAR_ITMX, PAR_NWTN, PAR_ITNW, PAR_DS, PAR_DSMIN, PAR_DSMAX, PAR_IADS, PAR_NMX, PAR_RL0, PAR_RL1, PAR_A0, PAR_A1, PAR_NICP, PAR_ICP, PAR_ILP, PAR_ISP, PAR_ISW, PAR_MXBF, PAR_IRS, PAR_IPS, PAR_NPR, PAR_IID, PAR_IPLT, PAR_NUZR, PAR_NTHL, PAR_NTHU }; typedef struct _TEMP { double parValue[36]; char parStrValue[36][WX_FNLEN]; double icpValue[2*MAX_NICP]; char icpStrValue[2*MAX_NICP][WX_FNLEN]; double uzrValue[2*MAX_NUZR]; char uzrStrValue[2*MAX_NUZR][WX_FNLEN]; double thlValue[2*MAX_NTHL]; char thlStrValue[2*MAX_NTHL][WX_FNLEN]; double thuValue[2*MAX_NTHU]; char thuStrValue[2*MAX_NTHU][WX_FNLEN]; int nuzr,nthl,nthu; } TEMP; extern int ReadRfile(char *rfile); extern void WriteRfile(char *rfile); extern TEMP GP; TEMP GP; /* tmp codes end */ #endif #ifdef _NO_PROTO int ReadRfile(rfile) char *rfile; #else int ReadRfile(char *rfile) #endif { FILE *fp; int c,k1,k2; double tmp; if( (fp = fopen(rfile,"r")) == NULL) { printf("Unable to open the file : %s\n",rfile); if (fp != NULL) fclose(fp); return (-1); } if( fscanf(fp,"%lg%lg%lg%lg", &GP.parValue[PAR_NDIM], &GP.parValue[PAR_IPS], &GP.parValue[PAR_IRS], &GP.parValue[PAR_ILP]) != 4) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_NDIM],"%d",(int) GP.parValue[PAR_NDIM]); sprintf(GP.parStrValue[PAR_IPS ],"%d",(int) GP.parValue[PAR_IPS]); sprintf(GP.parStrValue[PAR_IRS ],"%d",(int) GP.parValue[PAR_IRS]); sprintf(GP.parStrValue[PAR_ILP ],"%d",(int) GP.parValue[PAR_ILP]); while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg", &GP.parValue[PAR_NICP]) != 1) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_NICP],"%d",(int) GP.parValue[PAR_NICP]); if((int) GP.parValue[PAR_NICP] > MAX_NICP) { GP.nicpFlag = -1; GP.nicp = MAX_NICP; } else GP.nicp = (int) GP.parValue[PAR_NICP]; for(c=0; c < (int)GP.parValue[PAR_NICP]; c++) { if( fscanf(fp,"%lg",&GP.icpValue[c]) != 1) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.icpStrValue[c],"%d",(int) GP.icpValue[c]); } if(( (int) GP.parValue[PAR_NICP]) > 0) { GP.parValue[PAR_ICP]=GP.icpValue[0]; sprintf(GP.parStrValue[PAR_ICP],"%d",(int)GP.parValue[PAR_ICP]); } else { strcpy(GP.parStrValue[PAR_ICP],""); } while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg%lg%lg%lg%lg%lg%lg%lg", &GP.parValue[PAR_NTST], &GP.parValue[PAR_NCOL], &GP.parValue[PAR_IAD], &GP.parValue[PAR_ISP], &GP.parValue[PAR_ISW], &GP.parValue[PAR_IPLT], &GP.parValue[PAR_NBC], &GP.parValue[PAR_NINT]) != 8) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_NTST],"%d",(int) GP.parValue[PAR_NTST]); sprintf(GP.parStrValue[PAR_NCOL],"%d",(int) GP.parValue[PAR_NCOL]); sprintf(GP.parStrValue[PAR_IAD],"%d",(int) GP.parValue[PAR_IAD]); sprintf(GP.parStrValue[PAR_ISP],"%d",(int) GP.parValue[PAR_ISP]); sprintf(GP.parStrValue[PAR_ISW],"%d",(int) GP.parValue[PAR_ISW]); sprintf(GP.parStrValue[PAR_IPLT],"%d",(int) GP.parValue[PAR_IPLT]); sprintf(GP.parStrValue[PAR_NBC],"%d",(int) GP.parValue[PAR_NBC]); sprintf(GP.parStrValue[PAR_NINT],"%d",(int) GP.parValue[PAR_NINT]); while( (c=fgetc(fp)) != '\n' ); if(fscanf(fp,"%lg%lg%lg%lg%lg", &GP.parValue[PAR_NMX], &GP.parValue[PAR_RL0], &GP.parValue[PAR_RL1], &GP.parValue[PAR_A0], &GP.parValue[PAR_A1]) != 5) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_NMX],"%d",(int) GP.parValue[PAR_NMX]); sprintf(GP.parStrValue[PAR_RL0],"%lg", GP.parValue[PAR_RL0]); sprintf(GP.parStrValue[PAR_RL1],"%lg", GP.parValue[PAR_RL1]); sprintf(GP.parStrValue[PAR_A0],"%lg", GP.parValue[PAR_A0]); sprintf(GP.parStrValue[PAR_A1],"%lg", GP.parValue[PAR_A1]); while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg%lg%lg%lg%lg%lg%lg", &GP.parValue[PAR_NPR], &GP.parValue[PAR_MXBF], &GP.parValue[PAR_IID], &GP.parValue[PAR_ITMX], &GP.parValue[PAR_ITNW], &GP.parValue[PAR_NWTN], &GP.parValue[PAR_JAC]) != 7) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_NPR],"%d",(int) GP.parValue[PAR_NPR]); sprintf(GP.parStrValue[PAR_MXBF],"%d",(int) GP.parValue[PAR_MXBF]); sprintf(GP.parStrValue[PAR_IID],"%d",(int) GP.parValue[PAR_IID]); sprintf(GP.parStrValue[PAR_ITMX],"%d",(int) GP.parValue[PAR_ITMX]); sprintf(GP.parStrValue[PAR_ITNW],"%d",(int) GP.parValue[PAR_ITNW]); sprintf(GP.parStrValue[PAR_NWTN],"%d",(int) GP.parValue[PAR_NWTN]); sprintf(GP.parStrValue[PAR_JAC],"%d",(int) GP.parValue[PAR_JAC]); while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg%lg%lg", &GP.parValue[PAR_EPSL], &GP.parValue[PAR_EPSU], &GP.parValue[PAR_EPSS]) != 3) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_EPSL],"%lg",GP.parValue[PAR_EPSL]); sprintf(GP.parStrValue[PAR_EPSU],"%lg",GP.parValue[PAR_EPSU]); sprintf(GP.parStrValue[PAR_EPSS],"%lg",GP.parValue[PAR_EPSS]); while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg%lg%lg%lg", &GP.parValue[PAR_DS], &GP.parValue[PAR_DSMIN], &GP.parValue[PAR_DSMAX], &GP.parValue[PAR_IADS]) != 4) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.parStrValue[PAR_DS],"%lg",GP.parValue[PAR_DS]); sprintf(GP.parStrValue[PAR_DSMIN],"%lg",GP.parValue[PAR_DSMIN]); sprintf(GP.parStrValue[PAR_DSMAX],"%lg",GP.parValue[PAR_DSMAX]); sprintf(GP.parStrValue[PAR_IADS],"%d",(int) GP.parValue[PAR_IADS]); while( (c=fgetc(fp)) != '\n' ); if( fscanf(fp,"%lg", &tmp) != 1) { if (fp != NULL) fclose(fp); return (-1); } GP.nthl = (int) tmp; while( (c=fgetc(fp)) != '\n' ); for(c=0; c < GP.nthl; c++) { k1=2*c; k2=k1+1; if( fscanf(fp,"%lg%lg",&GP.thlValue[k1],&GP.thlValue[k2]) != 2) { if (fp != NULL) fclose(fp); return (-1); } /* while( (c=fgetc(fp)) != '\n' );*/ sprintf(GP.thlStrValue[k1],"%d",(int) GP.thlValue[k1]); sprintf(GP.thlStrValue[k2],"%lg", GP.thlValue[k2]); } if(GP.nthl > 0) { GP.parValue[PAR_NTHL]=GP.thlValue[1]; sprintf(GP.parStrValue[PAR_NTHL],"%lg",GP.parValue[PAR_NTHL]); } else { strcpy(GP.parStrValue[PAR_NTHL],""); } if( fscanf(fp,"%lg", &tmp) != 1) { if (fp != NULL) fclose(fp); return (-1); } GP.nthu = (int) tmp; while( (c=fgetc(fp)) != '\n' ); for(c=0; c < GP.nthu; c++) { k1=2*c; k2=k1+1; if( fscanf(fp,"%lg%lg",&GP.thuValue[k1],&GP.thuValue[k2]) != 2) { if (fp != NULL) fclose(fp); return (-1); } /* while( (c=fgetc(fp)) != '\n' ); */ sprintf(GP.thuStrValue[k1],"%d",(int) GP.thuValue[k1]); sprintf(GP.thuStrValue[k2],"%lg", GP.thuValue[k2]); } if(GP.nthu > 0) { GP.parValue[PAR_NTHU]=GP.thuValue[1]; sprintf(GP.parStrValue[PAR_NTHU],"%lg",GP.parValue[PAR_NTHU]); } else { strcpy(GP.parStrValue[PAR_NTHU],""); } if( fscanf(fp,"%lg", &tmp) != 1) { if (fp != NULL) fclose(fp); return (-1); } GP.nuzr = (int) tmp; while( (c=fgetc(fp)) != '\n' ); for(c=0; c < GP.nuzr; c++) { k1=2*c; k2=k1+1; if( fscanf(fp,"%lg%lg",&GP.uzrValue[k1],&GP.uzrValue[k2]) != 2) { if (fp != NULL) fclose(fp); return (-1); } sprintf(GP.uzrStrValue[k1],"%d",(int) GP.uzrValue[k1]); sprintf(GP.uzrStrValue[k2],"%lg", GP.uzrValue[k2]); } if(GP.nuzr > 0) { GP.parValue[PAR_NUZR]=GP.uzrValue[1]; sprintf(GP.parStrValue[PAR_NUZR],"%lg",GP.parValue[PAR_NUZR]); } else { strcpy(GP.parStrValue[PAR_NUZR],""); } if (fp != NULL) fclose(fp); for(c=0; c0) { k1=0; while(GP.icpToggle[k1]) ++k1; GP.parValue[PAR_ICP] = GP.icpValue[k1]; sprintf(GP.parStrValue[PAR_ICP],"%d",(int)GP.parValue[PAR_ICP]); XtVaSetValues(GW.parButton[PAR_NICP],XmNvalue,GP.parStrValue[PAR_NICP],NULL); XtVaSetValues(GW.parButton[PAR_ICP],XmNvalue,GP.parStrValue[PAR_ICP],NULL); XtVaSetValues(GW.conButton[0],XmNvalue,GP.parStrValue[PAR_NICP],NULL); XtVaSetValues(GW.conButton[1],XmNvalue,GP.parStrValue[PAR_ICP],NULL); } break; case 2: case 6: GP.nuzr = CountAny(1); for(i = 0; i < GP.nuzr; i++) { k1=2*i; k2=k1+1; XtVaGetValues(GW.uzrButton[k1],XmNvalue,&value,NULL); GP.uzrValue[k1] = atof(value); sprintf(GP.uzrStrValue[k1],"%d",(int) GP.uzrValue[k1]); XtVaGetValues(GW.uzrButton[k2],XmNvalue,&value,NULL); GP.uzrValue[k2] = atof(value); sprintf(GP.uzrStrValue[k2],"%lg",GP.uzrValue[k2]); } if(GP.nuzr > 0) { k1=0; for(i=0; i 0) { k1=0; for(i=0; i0) { k1=0; for(i=0; i n) { i=0; break; } } if(i>0) jobName[i] = '\0'; else strcpy(jobName,EMPTY); } char *GetDirName() { static char dir[100]; FILE *fp; system("pwd > ./XAutoDir &"); fp=fopen("./XAutoDir","r"); fscanf(fp,"%s",dir); if (fp != NULL) fclose(fp); system("rm -f ./XAutoDir &"); return dir; } #ifdef _NO_PROTO void UpdateTime(w, id) Widget w; XtIntervalId *id; #else void UpdateTime(XtPointer w, XtIntervalId *id) #endif { long tloc,nextSecond,nextMinute; time(&tloc); Wprintf(w, "%s", ctime(&tloc)); /* nextSecond = (1- tloc % 1) * 1000; XtAddTimeOut(nextSecond, UpdateTime, w); */ nextMinute = (60- tloc % 60) * 1000; XtAddTimeOut(nextMinute, UpdateTime, w); } #if __STDC__ void Wprintf(Widget w,...) #else void Wprintf(va_alist) va_dcl #endif { va_list args; char *format,str[100],s[20]; /* DANGER: Fixed buffer size */ Arg wargs[1]; XmString xmstr; int i; #if __STDC__ va_start(args,w); #else Widget w; va_start(args); w = va_arg(args, Widget); #endif if(!XtIsSubclass(w, xmLabelWidgetClass)) XtError("Wprintf() requires a Label Widget"); format = va_arg(args, char *); vsprintf(str, format, args); /* for(i=10; i<20; i++) */ for(i=10; i<16; i++) s[i-10]=str[i]; s[i-10]='\0'; xmstr = XmStringLtoRCreate(s, XmSTRING_DEFAULT_CHARSET); XtSetArg(wargs[0], XmNlabelString, xmstr); XtSetValues(w, wargs, 1); va_end(args); } #ifdef _NO_PROTO int GetAutoPid(pgm) char *pgm; #else int GetAutoPid(char *pgm) #endif { int pid; FILE *fp; char command[100]; strcpy(command,"ps | awk '/"); strcat(command,pgm); strcat(command,"/ {print $1}' > autopid"); system(command); fp = fopen("autopid","r"); if(fscanf(fp,"%d",&pid) != 1) { if (fp != NULL) fclose(fp); system("rm -f autopid &"); return -1; } else { if (fp != NULL) fclose(fp); system("rm -f autopid &"); return pid; } } auto/07p/gui/Xdefaults.20000750000175000017500000000202513570013207013051 0ustar sksk! AUTO97*background: navy AUTO97*Foreground: gold AUTO97*XmFrame.background: red !AUTO97*XmMainWindow*XmText.background: SkyBlue AUTO97*XmMainWindow*XmText.background: SlateGrey AUTO97*XmMainWindow*XmText.foreground: black AUTO97*XmRowColumn*XmTextField.background: SkyBlue1 AUTO97*XmRowColumn*XmTextField.foreground: black ! AUTO97*traversalOn: true AUTO97*keyboardFocusPolicy: explicit AUTO97*menuAccelerator: Alt ! !AUTO97*XmPushButton.foreground: gold !AUTO97*XmPushButton.background: SlateGrey AUTO97*XmPushButton.foreground: gold AUTO97*XmPushButton.background: grey35 ! ! clock color ! AUTO97*XmMainWindow.XmForm.XmRowColumn.XmForm.XmLabel.foreground: yellow ! AUTO97*XmSeparator.background: gold ! AUTO97*XmMainWindow.XmRowColumn.background: tan3 AUTO97*XmMainWindow.XmRowColumn.XmCascadeButton.background: tan4 AUTO97*XmMainWindow.XmRowColumn.XmCascadeButton.foreground: GhostWhite ! AUTO97*XmMainWindow.XmForm*XmFrame*XmLabel.foreground: LightBlue ! !AUTO97*XmToggleButton.background: green AUTO97*XmToggleButton.selectColor: red auto/07p/gui/README0000640000175000017500000000071113570013207011705 0ustar skskThis directory contains the following: README : this file. auto97.c : the Graphic User Interface(GUI) source code of AUTO97. c.aut : the default AUTO-constants file. aut.f : the default AUTO-equations file. Makefile.in : GUI makefile input file. auto.makefile.in : makefile used by the GUI at run time. Makefile : parsed copy of Makefile.in. auto.makefile : parsed copy of auto.makefile.in. ============================================================== auto/07p/setup.py0000640000175000017500000000010013570013207011743 0ustar skskfrom setuptools import setup setup(package_dir={'': 'python'}) auto/07p/plaut04/0000750000175000017500000000000013570013207011532 5ustar skskauto/07p/plaut04/doc/0000750000175000017500000000000013570014431012277 5ustar skskauto/07p/plaut04/doc/notes0000750000175000017500000000522013570013207013354 0ustar sksk 2. A new @xxx command is create. @pl which should be put in $AUTO_DIR/cmds/ the graphics tool is called `plot3d' --- the coin3d version which should be put in $AUTO_DIR/bin/ The @pl command is: if ( test $# -eq 0 ) then $AUTO_DIR/bin/plot3d elif ( test $# -eq 1 ) then $AUTO_DIR/bin/plot3d $1 elif ( test $# -eq 2 ) then $AUTO_DIR/bin/plot3d $1 $2 elif ( test $# -eq 3 ) then $AUTO_DIR/bin/plot3d $1 $2 $3 else echo "Illegal command" fi 3. insert following code to .autorc pl3 =commandPlot3D plot3D =commandPlot3D 4. insert following code to $AUTO_DIR/python/AUTOCommands.py class commandPlot3D(command): """ Draw the solution or/and bifurcation using the 3D graphics tool Type FUNC() to draw the fort.* file in current directory. Other formats for this command are: FUNC('mu') --- draw the fort.* files with the given mu. FUNC('mu','file') --- draw the *.file with the given mu. the *.file are supposed to be in the current dir FUNC('mu','path', 'file') --- draw the *.file with the given mu. the *.file are supposed to be in the dir on the path 'path' """ def __init__(self, mu= ' ', path= ' ', file=' '): self.filename_list = mu + ' ' + path + ' ' + file def __call__(self): os.system("@pl %s " % self.filename_list) return '' 5. structure of directories. $AUTO/ | |-- plot3d --- keep the makefile and .rc | | | |--- src ---- keep source file(.c++) .h, Makefile, .rc) | |--- include --- keep the headers | |--- lib --- keep the object file | |--- bin --- keep the executable | |--- widgets --- keep the widgets | |--- doc ---- keep the help/manual | |--- bin |--- cmds |--- python The default plot3d.rc should be put at $AUTO/. The script @pl3d should be put at $AUTO/cmds/. The executable plot3d should be put at $AUTO/bin/. The widget should be put at $AUTO/plot3d/widgets/. DEPENDENCE: The Coin3d should be put at /usr/local/lib libCoin.so.40.0.0 libsimage.so.20.2.2 libSoXt.so.0.0.0 The above three lib must be installed. auto/07p/plaut04/doc/userguide.pdf0000640000175000017500000126210613570014431014777 0ustar sksk%PDF-1.5 % 3 0 obj << /Length 236 /Filter /FlateDecode >> stream xEMO0 H$n&miP.C25NjW~?)~wM֒У*#=9hZdCDl+EY91Glֲ9^9&ԲԖV0V: J#LwqtOd٩ 10׬b̝0nz_9nÍT69G_o> stream xڝWߏ6 ~_ex,Yv(zðvX={%J"̱)R>'C>(>}"/+ʅi\w !T|QhJel:-uHCS/L!gU/+Ufmh2t˕4It00Uf ҏ$oX7zp].Wew˕HR$%;l1iVUPReOM*/-e [ggA9roO;7&I7*`C0S%@gH l?;kq@uw͈J>eB5L"P;,I~}ݒ.ߺzv~`yԓAA%%Dd$ܸū*L$ڶ, mE:o[20B$޶>Z>8;-,nq"ﺦ\c `,Y , B7 ozwkA/:=!EI&UDUtK! {Lj”AVC8?LQ^ in7FǾap1BQeQÙyƞc9zhTo}A% aR)B(Tdd^U! `#\$BXF'~ EQV1"R&w`?=`;H\ < аLEa&OM_9Ŷ5Y:@+x !k&ղZ@ʨkk)Bj8!1o( tݓ0E$f_{J&uL(P>Cؒfté "ݴ$zCŸ~x]kI[nV|-F9%btjCP8M)S3…r?b# ai=ZxZ_iοdb \}`|-Iڎ~dGqFS^q8MfRV\RyO:ZkwCL4iW ?*P'xF/i7>!*Xб;/K/~Y6? endstream endobj 18 0 obj << /Length 1287 /Filter /FlateDecode >> stream xڍVKs6W:A3M|3@ E*$0IOvwC"Σ0O MPYb\$C>yYAn#9{=3|u{s0IbmGVިZgE7 <^d4$p6E){lA j^6"gۜ ]39q<ҦlOz+D%SºF2o$l`;9sa$&1.g՜RUw<5(:` +*WZ7'LU3 )3Tw$FX'hd8;Ao׀#.$^W@NKCӥk5 xj{no s,%u=iCE8kŵ|vZX"yw)7eFCbW5[WK9œW7^.'x@PF`ZyTTԲ,(Rpb<skBb/ Da($2,A\ANǫ?v+H+OZڱ\A_7DzڋזPe=iRW g);nGpmLl 0ոq ʐaZ ՞.??yŇ(&䜋bp[j(BYuH7$#?@IZ= endstream endobj 12 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/typeMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 21 0 R /BBox [0 0 42 82] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 22 0 R >>/XObject << /R8 23 0 R >>>> /Length 51 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*,m8 endstream endobj 23 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 91 /Height 46 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 91 /Colors 3 >> /Length 451 >> stream x=n1FMK2w "EH9 RpH)(]^5bfefӧ#h6gt8p`xn_$34r.u~JMXpxdnɋJ*q>ӞPUbRȐHj۽~XGcGg fcY0u`| *=.([JGXF="RG!0└{) .1⾥F|yF32hF#Mux~Lh١AhFkD{_o>*{/>SVF*hZ41?"sW15k-=|7]z{$Sejč0ꑍDŕ4W7yވႵ_wVFAhF_F؈FCaS& endstream endobj 13 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/styleMenuNew.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 24 0 R /BBox [0 0 99 82] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 25 0 R >>/XObject << /R8 26 0 R >>>> /Length 60 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*ZZ@AZ(s!  endstream endobj 26 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 91 /Height 109 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 91 /Colors 3 >> /Length 796 >> stream x=N0MK$J@ X  BH,eV @D$cεo:v&+ 39|w$FbiȠqF>>}<>>2|C#  Un\\\|Sj$KJ٢"#q%ő7j=2HI6?v_Gn~uu\Sr.e3eϑ??IΗfHgN,Ĕ^k}r#ؙp?2Hݶ%?5ޙuB# Y#!G3G#1%;4rFAhdl>fް7g='Ϟl"C437NgOE#5ޏ'\zJB# 4B# 4B# Ff?zN0=ǡAWR,Ӱ6FrPr!44%CY!U?RUX'7L,5RUe8E 4HIuN==yN6mWWsQ#ʞ]gFAhFAhFAhiSztm&E6e:Ј6s$|̢a'ϒH _}j6nGL{#rr0.jB12ޣursVrs#ʮY楆WYYҳԚ*fеrfIGFBy͜YR{^,h4ə%l> stream xڍn0z '  7I5I@Ѵ0CӃb1-$wI!~,@@e(\e}i":B)Nw8LY$QYT77 *>ĉ@1Еe)pR<>NpUݕI>3cgaLJ5nX_i=5'J(SIds& ѳB!sM%"KSw>9b t>'Oq~m@Ѳzxw|OЙp Ret2;oY4|ݝt4fwn9`W uw,RU}0ǚN/vLz@BF9a`Go' |;ӔýI1e@D R(a.?;FaSyaMa1GvAXíCmo/h_WSMisf;zK8EM[\+)j7lab3Y.S ūNkA3U4Hf I4t9IT !..T5Y6$v^0l=vXWf[sv[% &9&BpzC{݌&exP ٵ+N7S*CLz^rNi&sJ0ՏsAV endstream endobj 14 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/drawCoordMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 32 0 R /BBox [0 0 100 99] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 33 0 R >>/XObject << /R8 34 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^UYZ*ZZZ@R@ M -\# endstream endobj 34 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 109 /Height 111 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 109 /Colors 3 >> /Length 969 >> stream x1n0EM Q@k9RHe6PpZV;rJj/^^~'}('cEbZy|~uoyǡG )K5ǧƲ'\2lx=渪HK2(Tcc}^,XJ\6? s mUI[ ZqY|k묲Ұܳw:~?Tj?3=bG \%Hy=rucz@=bx\U% X( ZX`kwH(糉GyU+eIekt~d26 ޣZZ{,-ܮs6ͣD)=6cϵǤoc9K"w/]yo9;qU8̜_K< G 1#z@=bG jsd&?$e%Rvocc,V1cݱ\ rr,J&cHw,9*Z?M<>ǾvWNcy=bG 1#WsEyx]=bG 1 fؾUղG'c{R[R=5Zϱs؇Ǚǎjʝey&SMfkF?[2&o-3jJ)9ãi{<9X2cxg׵gɍEX<1#z@Hz8Y=e endstream endobj 15 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/optionMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 35 0 R /BBox [0 0 178 131] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 36 0 R >>/XObject << /R8 37 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^U*8 J@F .\@KL endstream endobj 37 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 145 /Height 197 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 145 /Colors 3 >> /Length 2059 >> stream xK6E-0{ +Yc] d8('V30Tl)J*YzEPNθx~,gLV4Έ +;g߾uRD/_ޗ9C˟SzVsn}}ؽm?v֡ђȋZ#5;w^~హsvý.ҟ[vYl+ˑiVus>muhdvۋ6f7"_N»:Q>Wݽkm rVzE{q.#i)A"8ﶕipg@dJ;Z9o Uϒc7|;K5H,+Iez}F9CgBŕߙә܎rƄ!g|rǨhouɜQLlwn9L-A8A53>9C3>9C3>99<ՀOX7pD-F*Ǒ3Rgx3]!g[-@~Ny"->LiV'9<}֣#5ۙrxl9O|Vaቢ:˫0&g-Esɹt![/n[#༭&t9C3>93=8KW?ӱ3>9C3v[@$ƙ gS2;jvjMSrj3#_,{4qiD{1kG;ICw-,qV7lլgyl?mm?H2ճ2g^˝5lr-3ř{pknR>sݗma5I-{a|‡!g|rƇ!g|rƇ!g|G4or]ݹ> |-ѴQ?`8 ϻV[[賓m!ȷuhvTAP~SnȖڭ(@sw;-ַ1:+<@w^9ۮ8יyaW/GR'5-c_y|%`dIgɖ1>oY,9]'W }%HdadW n-=89C3>9C3>9C3>.κ=wL\Gd9]| 1(;UҜjSCge;J:{AmYPd}*Ȝ"grƇ!g|rƇ!g|,GrFu)ᩞ3ZɵyI/ˢ>rƇ!g|r+gϟ@LPpZ:62rƇ!g|Kމ2J8Ln-[3<$NiyRu呝mqA,+nm!l[Ҕ;5'G[]@#g u# g[grƇ!g|ʕc_g?_ endstream endobj 27 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/centerMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 38 0 R /BBox [0 0 81 142] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 39 0 R >>/XObject << /R8 40 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^U+Zd@ATZ(s!+ endstream endobj 40 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 157 /Height 90 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 157 /Colors 3 >> /Length 1176 >> stream xKn!֛H "%ym)Gr,|,-eLԃU¢5PJ^_+;W4`ڠ˟ ꠇ1\q\1\1UktϿzGaV';5cў[-TVIbX 0 ,4SЎ.5渽sKghYqC2 dYLN|}ATB77_ (t݋pJ")^ *O[ 5Waw̾6rel?,4\CDY1\%xYpD5uVbKϐZU\es:+,6p{"iv2MKh1tEБ\1%rա"鍫CǭC<`힜+++++Z?[4ə7Eƫ%l(<•sqF1wfHVQ[B:D͔Rz$HSV$TrM1rRURzߧEB8Bn;4+qReeK?-/!_MւV/}OdّI_m]i0.v8Y|SSSSSSSSSSĭMx>IQMsOz,qk+(i6{*]u)PAn5-k9föO4*nM1iЭQ>lC% Ouގ,׬XIQ8RUU5w~Zt.?[g* [ A3]^8?KY 7|Ow0+++++++++{0RG?I&9svj:4wXe{q=F}X+{eW\@n./h9fCH6__Yi"kXHXvqef-jc*zi f1 Zf?şQj}U)Ue9Ht:WgN.⏑krTpqÕ]zS#[gQ+&Y]u?IX{@0b):1++++>pL:T<F endstream endobj 28 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/helpMenu.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 41 0 R /BBox [0 0 44 38] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 42 0 R >>/XObject << /R8 43 0 R >>>> /Length 61 /Filter /FlateDecode >> stream x+T03T0A(˥d^U[( R@ M -\x endstream endobj 43 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 42 /Height 48 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 42 /Colors 3 >> /Length 211 >> stream xֱ @  },v 1X{=5d:ΜшiEh|abd4= xGmok >yVn<9)> stream xYoܸ_a%ZH }Jh\]y |6 g(ֲk'Cr8|-ϤILJ9Iqg۳%2Wk)U|6+-ߪf.KJG&m@44VMWWdwEkZTZ2er )UM@]9TmC>Dw+'~l2ehJ&MwDؖCI6mm-`7c,9 bd㻡$ >ldhtlw4 7 7O h|8ŒF٤ߵzK붮GKeY?>%؇ҥFgHL_tKaA]^"0(n&&8%jNNd"(r>&z(˚\+ e._L;,Ѹ(BpJ\ӐpxYkb\ oQ'';%Ny|j6xĸ=A40Ɏ{ fؤwjc`grlz4°#,+NkP#S(#^x?eP֕z";;5ʎ!e M+_?0lMbve7NfXd9t399#} w:S$r5,7ɇ}<nn ʦlh{OF#K6>I*(g ء do1sѨGWfDL;-p2+XnU>^3@e3VYc7kҽ۵ԼcS7vl_Wʫ Otzo02إu0Y?}Ʉ2'*'pتt!a2p# 2yRX"4ZTq3xKB[<`MLY#\Z8!4  w>b&zmmy9hlsߖy*-1OYTȐ KTS㑬(p>J|o@EL0+Cl=p:5ܦ j{BJ Bp3DxC}5}C >nA n 5(?d>S6q3q-F6&G qث#%4}0SAu1IYe<)R'im;GʂE闝e}T3JJ"ϐ!sn Heؑ9l&J}P\a{tnRuVIJ +\@3}ߤoD3De}֦43)7àFuOP7ut@h@6P0ʄgZl_H?Fʐ~Wn+\YAXp~X Tzz5CWb FN^J)f*!@3guD_g2#nrb&<3 ".tM:p% E"8Dqg'@iʙ>33 0( y7{HJS ΆiO D`U0*XW)mT<l"󔌭(9Q\6ST x,eX)O؜D‘}BO 8qI;,L|J#G/=0/okQ\CqLBxwL ( ob!ɏzzCxN\Ʒm^<*|\+n lGiqV{e̙мs G|9ͯߌKjz%S+.z`o'A endstream endobj 54 0 obj << /Length 502 /Filter /FlateDecode >> stream xڭTM0+|4ohoU=v=$Vnkc)j7 cͼy `sTp,@%$&4Ʌc|t>v7P6se*9'B D p,AZOJ3JoҌQ?&%>7̭F+M$2DrHQG>>~{ !PxꐫEʐ7|ë=DxP㩵kv3 zTGDtэcʥ3 1&t>tjӻS -9YoZIxiAت;&`f <~[ײZS$HrpR6,altoR>VD0TP|Ck$ }9BmAFyV n[>Yӹ4u۞8(3^V!4kQt^Fb5n[ ט܇m<_0bDF_I׺\f&qJ4J7zK>T@ endstream endobj 44 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/floquet.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 55 0 R /BBox [0 0 657 760] /Resources << /ProcSet [ /PDF /ImageC /Text ] /ExtGState << /R7 56 0 R >>/XObject << /R8 57 0 R >>/Font << /R9 58 0 R>> >> /Length 400 /Filter /FlateDecode >> stream xSn0 +xl+R"%]{ݶ}bH{ߑ6I{ qC{{7яOC:r+ _?=~{u𠜣ykAB$sWaig] UC?&Cy4Kn0\t3ٟBmx\pbg %M ]4kcRӪeV/3:MsQ3MrN"GtDt36TQTA}#4BXc-{UuKI͛Z^dIhWES|>0-JAӑ5iۃEaV.nhE#4^͕Tc{fb9_jC$6#}NkKoFsE endstream endobj 57 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 844 /Height 730 /BitsPerComponent 8 /Filter /DCTDecode /Length 68593 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?volDėQ#wf,=\ЬXwZ{& NɔmuЗV>bAEmOY[_yqe|>Ι3ޘR)$TK;Vv -$t{!BڔgMiǧJjm<\]Gqy6 .ҫvH4F;?1[aV%9%whi+>{t Jrkm$A9>dUs^z9ǥ]Үm6N ^l7Zlc^99[LwOʃ}-?§ܴ1TҤ1]ΟV}ҏ7h `u?gOʃ}-s^VއڏCE.ʞTkNJ<:}=ӏҭ18eO*:U`u?gOfnz>އҋG]|:}>gN>Q[-:Ǻr*cΏ7E.ʾL>iZiO^*ٛGA4}SE.ʾU_GNOGOg:`~_foQcZ=Aן>ΜyVm0:*ٛ4}zaݕ|z}wӁGo춸?$_Z10qտ͟\pG]|:}=hc`㿫{Ҵ{Wʷ[\t>zL>i@9>_fl8QGَH=}({Wʀ--~oَ1Տ9ɢe_*߯mJ=8>Og rAfXqA}f짹?G]|sȴ'ߧO_Nn96֛W7A*ۜ(;dapG>.ʾL=>knߏ8ʷ[R:eN8c sGٛ?c =,WɃm3ՏЅ9?UZZpy ӧ[_f8i+OsgnrNOo?Ͽ˰]|qɶڿyΘ?_AGOZ<۠N*# >>q6M][-^2ǧz`[Lct!NO3Vk8Q?ϷLc6>Qe.ʾUZZpy ӧSʷkM鏠kI}0#B˰]|z}qqGo춥ztqK_f8oV?&63z4Yv Og rA䜟AE`*Vmi~}1&dyAUF}}}mX,Wʷ[b:eN8A춙Bf}1pnm%{)}O8˰]|sȴ'ߧO_Nn96֛W7A*ۜ(;dapG>`*0% ~?*߯m=8>q6Mflg(ۦhe_"eV?gB4yVik}&ONm} e=ϩ?}9?y>.vUm&j:c8=}'OZ<۠N*# >>q6M]-^2ǧz [Lct!NO3Vk8Q?ϷLc6>Qe.ʞMZZpy ӧSɷkM鏠oI}0#B˰]䜟AE`*y6mi~}1"dyAUF}}}mX,Sɷ[b:eN8A춙Bf1pnm%{)}O8˰]#B˰] 0 >gN>VYOe#cf[Fx :γ~qq]cŌo+*rh\/rho}2ۤM>mK<l>u}]Ҹx9A;Y' P3LY0F:5lcjibiv3)@g\uѭJk8q[1hLЋ΢#'r* o$Z2L&lԓf$A]/OSO(5AQ6SYX$rY" \go\sKrA-r{ q\7Fz-YZx\(]1[q˂Ǩ>gKtɣ=絘H)k.x9)|%2]ZyT zJL8>(Q?_٪ k5A@ZMpX}FW @lgZsO2r򮥉{"( 9d"ELx]`1 z nQEIo4}Յݘ~̾_[pd@ ,5 "9%rA$3 Zl$3&vm<0Y屌1Z]F@rD hC[97SLc4N$V㵹EV-m4:krlG0=#wCڨ-%L,@w+nU6A|Rܒ su45u4?#DLA/`/;[Js }2Nf6+1I;VEc߀xEsOI3/$R`]S 91[Ukq5ĖxprG ;g5QLʩu dg:1wc!wtnWϔvy 紘u_"/`1?82AEsv2\9zer QErVpGqĒ\BnFw~ikkS$<ǀK1~>^U.-`\\9(=Lņ1MMbq]2$_lO$homU14 J KGw9JoѬI."(C!.NoR8Tؗ*Z m u>Rq 2k,pFy @tԚ8dJlۏSAr(((((((((((((((((((((((((((((((((((^;Hct/k\B-thэpΪqGhi-Y]v 媷-U?jo"/,8<o-W?a{j6qZxb ;[1x#=A?Y21VAZhOЩH./%YtҙJ<y?{j \_GN?T rw{[DUy #fj_&!™ɫZXj6ry!‚z]fAOo;Y᛹;}I8UE9zPϲ[ϼ?*OK6vK6vɝМ)ّϬ?ӆeѳc?Mj#?Y\̏}aVj#?Y_fs2?Z?#Xǥj1ƨ5+c-;7R7^ʯ&KoI_l݂$?7R7&#GodfG>+Uu)e/KVZg#?Y\̏}aVj#?YOoj0)ڰHIdrmK|#iТkhU@%T)u/ڎF}J+c8l(%| 7R77R7m>[ϼ??u/?u/)+m  _K6vIhTd1h?#X2?ZAo;G#?Y\̏}aVj#?Y_fs2?Z?#X_f;s%h̏}aVj 5LsshԿ#iMhcdm\o-Q?J~͘c?u/(%| 7R77R7m>[ϼ??u/?u/?#X2?ZHԮ1աh?;s%h̏}aV;s%Ao;@?#X2?ZAo;JU:`pm"h̏}aVK6vK6vVZ6qIKoG_[ϼ?~m> 2,15r94釕ld!@*>cր.`0ndSm>m4֚-)/m~K{FH  |Ck}kp!Rx;@dxNw{x=c%:??ʀ*O;d46>J*/?¤, $RI\UnGt[8 Ѧ N?V{`}OOA>¬˯UkMRc}2Pk3eBAW>[ϼ?<mj(%| jQMM̜9¿>Cw^KKo}}cgo%[$U ̻0Ι<MIay=Ρ(e`N ݌8j}}Gqoo-9D,2U yO\PRy 23m}?٩-/(ٿ6>Պ(b%C(nwuҿ#<֖4X8'l:@ K #WT 2pzvhci$])QFIiL7,H8;GAOc$q˹06{P6>ѶofQ@>ѶofQ@o&{wxY1`TQ:_j]}C\ƺ֨?NvZn? `ڷaqBżq85uGE@sz??5W=Fx 8sp4$ ҪY" r8F}rVxDB C6r\i(:<`U'G}P!}1%e>p|c?3N`Cn \PSp*]@f&T<\,L.IsJu˕Ӧ*Ha ȿmƹ1rHۧ@Q]>TW3WGrryIǦb3'߁jXE.8rU=)< SQCހ"˻f̓d=jۼp̐ǐ84K7#g9sP>R;v>ڀ&LD4oȤ`WV%op0l $W€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nuSd_߶ >€.nVUOEo^D @3N E˯|'u"[9ۘ̍1w'ݥ@:?Y[ -p#q9nG89_mFY̍Cgz!Mh6S?{#q#0矽 9P@mq~T[q*Sm3%&O5]*V ;*=ɷ#=6UtUDB~jCyS6U5W'wݸ9튒X?u'U$ 'ڀo ְ;i-ѷ媔VR$6dp 3@wqƷk^dI|[xTARr:KTQztQ)PH D ǃCLg'i5;?*# _ y 3Z+,rSZUy?3=1udP8U~TۖVTgr~?n[8«Q@-?G*4vP8NDRܷpۖhߠ2HU@ P-?G*gr~?n[8«Q@vw"U)*F~V6oPǗ3HYkNdjw?b\5ڤ{7V&$I1:}MWZ? jqZlÈaFd.I'Go΀8m3Cq{he_C-Q?,Ur3 ij $䓴V}zh-^p@GHZ]y"|IҺ(())h((@Q@Q@Q@ KEQEQEN;gA"qJ)}}\  g8U'_Ȕ_卾wUK$UQqF kY%$e!"j!%KeGBYN'3BGLSWTyE +3Xd`g84ig9QC#+FXWc>G?sqz^VC޾j. :8 G&2FJ7^FGLgkj`2A/-Pky- U) SRh X;QSl#4B\jOh@ ?ߛfKU5aN-wN?)2;8]\~oھh~=|:sIae \wtP^Ix8[W1N ;m jtFi;}HmkfWF GtJf*cѷn^H:sUiWL(7 gv'#sӓBvO S}z`sq)Br!'<͹aYܧ_j7[pw/u7hgT[u7hgUg8˸Ti%v&"G>+J7g^K,0"X[o,fƪ>(σ~ ΓW#yQ%Ï8TB3WC)/y_ۗ>@qWn W OEPOy"|IҺȡy_贮 ( ( ( ( ( ( ( ( ( ( ( (3t'_Ȕ_卾wVfOw}*ڿĽ䄂(FQEQEQEQEQEQEQEQEQEQEQE5fjkW_/@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEK ͒0:(jm_j\#hmsIywEnۧӵkY\_;-$}4ۥrǶz T׼tŬ4I_ׯ~~fŽܚeoE=IaׯCk 0%)98>L1^/x**ZuQݖ2#dk#—P@rY'H_ъmd֗?b3Yд5pHu=?zqJZ?:m*HW&>c~JFBgު_w~hӥZ:4zºa +:=?'J;?E Et4QEQERR@Q@Q@!-QEQEQEEQEQEfy_d{,m뺬çڽPNf'}?@IUm?v#co]&I\4FрF R2wm_^BDHBxރ?/a{$Ԫ+0r?7Vb^ۋg2cAԕ)$`T\3qO;qEPREQEQE!-PEPEPI-QEQEQETꮿ_]5xMQ@Q@Q@ihzZ3Be8ZUH$U,8$9ž fֆygh9hg9$pA'q@&WDny[>vBC+öViRcO#xrwsU3nYDx`l9f}N;h{[\<7j H9P}դ6s^"O3 vz`g'iw&%HprQOkbL;XД23SqU}A41вMA!YOBdgϢ(((((((((( gm!cOc} KZB0A$ 18 =okx~F8TF~+7^w%y' ^@QQQERIhe)MI݅QLC0+.ME*\GR8 æ_]gb 2:>A"Z;'١VRq]‘j Ar3ڣdxɜkiQrrs$zq| wXB輔;sc=`d2E^kC@U7@?2d֗?b?[?j*({s_4^?:(^ğ-+{'Jh((((((((((((7O]XuiVnk|ۮҭK~HH(aEPEPEPEPEPEPV˥Oӛe$LOtk+Gݭw>@oa^45+y.Y"[7 dxd4tfiLE˪nٟhQ@Q@Q@Q@Mo٪UPEQJQK1ɫ l#r?NIBۿObOSS،A\UbKI$I=}h(yXhU pB0zUj(JSŠ(@QEQEQEQEQEQEQEQE[uKdp #RDžxJ+fA[_MfIffPِr/<i4_ @ZȢ:o!4B\ʢV q2zft65,XyF&v='ӽV[uM;;vF?3p#M-8(Gd^N P[ sŠ(HQEQEtCRXDerwۉ9Ā UL1^j-mp-,QvQފ?^?>+u{KաQp1 5gD񱸼 1 ,`ǿouP F2JbbZV X;QV}׻ZgT}5KuGE@Q@W//nxF@E Et5|<B$i] QEQEQEQEQEQEQEQEQEQEQEQEfOw}*}Wo2=~6uZUz/ QX(((((((((((0.W#pG-Mo٪mi45Z"8J1WA'*\e5Ͳf(+kX(JZ(((4Q@Q@Q@%-QEQEcj8A Yǩ;fRQ;JI.A!ʯ֨i7?Cw<|Fgsߊizִ`lF;#qy9*JWg*4:iZ; y=nBUT55f9MNE ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4spbV^A3+`淡MTOiE4h}g?nLս,D嘒>Pȸ= v,56r6v7/5B YOoh\Izx~_F*@>f(+kX0+LegI"ŏbw_A]8jc N+*%x)GI+l):~5}֛SWJrNs طt_ъt;y!FuH-|FSq kk1Wzw_U-}5QEy_h Xu//z/?O=E Et4QEQEQEQEQEQEQEQEQEQEQEQE?d{,m뺴7O]XuiV%$$QEb0(((((((((((]5CS[qj( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4 (<_4^?:k=?'Jky"|IҺQEQEQI@ EPEPE(((JZ(\?M.J;?NSy=<{/e ?v#co]եYBԵ(ȟ) 0:wtVHte0KtLEm2csEih5"IR0IubWa8Ȩl,`Vismv(,zL0#c;kͣ[4slɻ(\z{PimiYmb9Rꜘi"A}o2^bD"x9@U8z|Ó2Meeye  -uڥԯkx`RZA3Ioyǵ\d,@wnDR36 j 99 VEhG̓ZBl# 39(((((((((:g}E湘jJmK18?#^ctCzC]]I4ֺC"nolsQ5&fu1.t{{T:(|uqL>ն&H6hD *O?OZC_j?|?֫REg%m38RvFHݿix~_F*βd!{mLDI8c Owl(4uGERp3QPEPF[2-a<B$i] s?P?ZWC@Q@Q@Q@Q@Q@Q@Q@Q@Q@! )j"v)?S)[mȜ9!XcoH` Z(mP9uz*3t'_Ȕ_卾wUHo`0Bɑ`##SO]XuiV%$$G KK* sIR2jZ+Vd[6qF5~y%OX;="Z(5 ( ( ( ( ( ( ( ( ( UT55f ((((((((pF ]HA9g)#n|S?tTsftU죰~:`(In_w~dv˻cԚmUŠ(AEPEPEPEPEPEPEPEPEPa?/ WK5L1^vv! ʱc96۫TE'\y}I=@5a5q8`M#ˁ9y7ӹRmrzswt;&ڡ$uǹ$I;J* s8[{/hY2E^kK1VFw_U-}5QEy_h Xu//z/?O=E Et4QEQEQEQEQEQEQEQEQE SP@0)星~'*#l:/QEfEPnk|ۮҬ?v#co]ե[WQEšHciRjM&ƣnPqQieaپoIJ.R`ZQEQaEPEPEPEPEPEPEPEPS[qjUu4VD$|Y=w4YV;Hwx!x]d?ĹVCjt~So*?NG23\})|褃0؀#D?dc@y*}dK[\Hxx+XN吀r4٭K#6^U=ic43E,UJ>szPV~/CnU$QMAEIYԜI[QL((((((((((C0+ئ$Ă:^;tCRXDerwۉ9Ā T ݮ/#8,Hd5,uF@9*w|P m#$_ִ?YgYC))iXgT>f(+k=vJ:\E~FN>~oPki@ʶ@Sԕ%N1aJM e m1.~G :'81TQL1hYXh#Z3E\GPH#)J円\= +ie1\DѸïŭ.VkUmR>$x`F#RV&i,$7*nl؃Ђv喟t|ϡN'N~q*KH 3A[S[>ZE.x@3ZΪap2S2)m&fZޟTH\b:16*7)[dKQTdQEQEQEQEQEQEQEQEQEQEQEhxF3zn͵r<~{uHGF3zĦK V)_to_S^q &U#IJ9EkA介-8lHsc8qRhܗY]LX, X1VH]dV Av|$jJüO' ~"0U'hZ!xxFK~_m#$_ִ?Yf{/h^p3QT_TQE~2-a猿h Xt?P?ZVۛ#,b%M,I!#5E Eo," 2 PEiq(gy7>}9}9>+9$ԵX$,!3nNߗ<3lm0E@B@6r@L ,p<0d@QEUg{r 0de6;1Uf[[eyVoaX?9:c5v}}dm/mE*L N1c^B֖-jLRb$B4Sh>Iڽa;BM˃94Q@ArK.s̔=19*z(0F^Fo1eoʦ.<'A;2Mjdrns qq inӂcRq0*uERUT>?QETsV&0"<ܨ?TP5J;O̩8lK;[#khg*玜n0Kcg)n ?g4lngolg4$ٲ4_-v& p8%Q@Q@G7R{gG><xeĶU o#鞫41\DOKuGP yPC{H0p;9m5,P[" /<4R @8?*uQEe&$׫q1*"m;ڻ$s5MtYEWFeaA k˹Q- n}sr}fAA F 1$V]5x&Rh#te8#}h@4rQ\#'ר1-n6Q|ÞS,WH-CLe2O^{sVp1w 3n31v@38@=ON; :Ƚ]HsPaYRXfh$By=duϰp!!r^1Rv[]DOHё`wIXΞbhZ p B@<UVy7 ݑ=sCL+D4lwBx# M=y6}r$G, :kv>`i'SIaa;t`O-;n%p%v8J!mK:R.S=I17_b}5 a9yu:銙Kk{&"yTnIzP[M%&7HTuẹtr f9q9p+;Yt3qkNcl&b Xag2mo\i6u1x. pI#.r䖯mo$ Ds 2/̳z2g8n$1,2: pCrQW]L9u.&#,R>~33zv'72A*A gZ PT R;۳3\Yr'a[$@@)'%tvb3?eN8zKI|ߛ8)FHQ~?Š(((((((((((( æ_]gZx AאhgG_ ϲ[ϼ? ;M *OO''דSiV:eDsYK \(%| wv/h\y 2>yG!U@V|?YP?[?j*({s_4^?:(^ğ-+{'Jh(((((((((/?x>[!è׼xdIE5\eNy:4i(37O]XuiVnk|ۮҭK~HH(aLAv0:ֈԨ%\?ҳFR|ϑ|0REhjQEQEQEQEQEQEQEQEQE5fjkW_/@- ђ%AWfE'9J5 .~gM[ Lc5}q9+,Wj&Q$~c95˭.`9rrxxSQE1dx`*ЂAD{ME.|ˈCB=GTl.W}dgAӐ:v〯m/{{}s|7lbG^8iS*Ny=GqqifBb5!0Dze?0U#9\NZ^fpr@˒pcH2a%2 !1NV!t [1 Fܪs !Xͫ_֯ G?UhXAF#x֠0|nc8[9s?d <-DI*>e2#8E \aB$o_'-EWzEPEPEPEPEPEPEPEPEPEPEPC| *C| *(>&gU}MK;?j*> (<_4^?:k=?'Jky"|IҺQEQEQI@ EPEPE4QEQEQERsK@ d`9A8}ϒb—9_P}Wo2=~6uZUbSWS›$`lq=+C/'+j󼕓~K%>IQ  ҫsWZ$a[=.V>//*ŏ.F ERIhQQVAE%-1Q@Q@4QEQEQE'4QEQEQE5fjkW_/@+Ϛ)[]~`6{H')%h㪶G=NO[p6v14_kpRxdl$yO?c8;-3u[F\Icu +y褑'tTsr!H0dĊth[mʹ~\g*orBܩjY#ǦI$nqǦڭ]:4|A)ddԅ*0JD0 B:ݽMF|ݤJdc5ikLiT?\q{}[}f8+'Oztq D-K(Ndv:=xDE9"?uS? go}&VxT 9$NrA|+Lsf rO<ڪLʹ`F8 9?8cH7,파 :Gס_#2bZ[ b|z<<=<l &tdz^x2F #\su/&^gl~wz x&9oN6 Q~YuI|Wj99nrEq݇ wGV+ ( ( ( ( ( ( ( ( ( (/h?WW?WPEP A5/?b/j_h@p3QT_TQE~2-a猿h Xt?P?ZWC\/?OEPEPEPEPEPEPEPEPEPEPEPEPnk|ۮqn1Pw+F5 -?v#co]ե[WyM`֗7dgU :.',?ʵhQEQEQEQEQEQEQEQEQEQEQETꮿ_]5xb'G5c(pCӧ;y,IRFG =A#ޑC0!p? Egwэ޲_Dyi5t ~玜tϳI $b_)2C2b]㟨S"11d0a =1ҧS_,FeejŜsm8{b;eaxԜy;8H>ݨMyf,}ןy41n\zc=hקɒtA/eyus6yNt#2:pPzOҥ+LRz:aцI{s-Dm1T7۸m_/^mct>T9b:;LF?tZD+ /<w*qCcYnb?Н>}Gsqy>绌㢺_AJ^Ёm+G2E$2T 2E.9 0Wwsʋw6b(.S|3 c6sX{cjBmky(aXu'H91 wPk,фH٭1 |npIE;TU,9P@<3\AUGR֨}y.81pOnc,$hXHG~h &_Os; `rrNA\ǎy#$퉕Urr"zO#ӡ5?Ls@Kv d?:ߑd!粜fA:<{ +f-z1=: `:.t_ȇ5e2[4`d_RW'ߧxO}ʌغ1hقel0{TȊgc$.pB*̣OZ[u u^e'|-( Xdv5ii+_k8UC\?pGUy :Uy'eɐAvTtϿ_Bƺݻ!xX/b$H5n-kt:{18㞕.ԪiVzEYJSΆF=O O xC(|UVLF#א9"핱(CrzOng̶' G&c8 0DmyԛkS,ONsѺqR@.mDZUgaXXBrHGF_Q8#\j.VG*U0A^NreZ^]gB\RQE2((((((((( '4BU'4BTQE%}MK+o1Pw_U-}5QEy_h Xu//z/?O=E Eth(((() -Q@Q@Q@QEQE?d{,m뺴:bqs㏩jѭK~HH(2+0 ?c \*c(((CK@Q@Q@RPEQEQETꮿ_]5xRV  ls0!>;FSɦ"60$^!ǯ4@2pNT<;=$X$+}SϡXhaHɍ>t>);SRlGʓi1>sCslyN7puP+`J9A7)"0`>g)?϶(y ?,~4׊H6ʍeL?^ҵe/2OeTqK$,Z6*H#Ўڅ%BMno7ٽ}O5hvLTzӱ p,z;g{`i%#R1A=%&gZZ_GnJ/E!#[{mCL{at6-1R{=nSk I9>ܞ?jaEPEPEPEPEPEPEPEPEPEPEPS[qjUuæ9e9 Hdxە'GԈt*pEKG7礈0?KRM,Qj/nC`a߇ZXd׆O.LG^Tg߱PE4gcpTU'Oaz8Yc~moKuTo4﯒A?Q@2pNTҗNmY?l+DJ^{p!Ds){wc4!Y֭Y4J#kƫ'OnU:#|R'Yyjf 2Cw A^=TH>^c$1K*ΦXX9F8rcƢpAEL<ák~H)<ƏYJ9,냞ݗ 5i;IA<{npgd*fr6Qf_a#aZ򟵅&6( NH'džZQ4ikj.UZD< θ*bnA9 (Hp=G\}k >YJ *%]c>(@ ( ( ( ( ( ( ( ( (/h?WW?WPEP A5/?b/j_h@p3QT_TQE~2-a猿h Xt?P?ZWC\/?OEPEPEPEPEPEPEPEPEPEPEPEPnk|ۮҬ?v#co]ե[WQEŠ((((((M3AX>4VY8[>7LY&[ϜJI ?Q@Q@Q@Q@Mo٪UP,щ >إOy ~~ϵ"NeB ohki6-8FFV2N8͊_ɱ^?E%BLTwUthY:C=~b^B5-YT $R:E29dE##x偕+UzOI sF/}Iͼ'-<E'pܗ 7CFlcƼ8G`[ve8daq?ΆN%W=^"AϮ 1SVM$сr ܹ ~hk~slw= ƻ8hFSsN$#_X??KɛiY| q 鸃OkЁ}{L@Mm  8GOo(p$#?6}Vj*sR{vbnjJΛJE%Ay=*b=Lf0M7G#G^%d'i'uzg)m}5يii D'2\ ?L rsn (dO*T}ۺ }8:9D9'ojPx$:z YY#.y=_r40IB;ֹ[{ɔ(A38J;AbNbuv-1OQ0c\aa- f(+k _l̙xxwibMݣHqJ^xQhEc;~#Mt'?#?S*H{'!^3 5$2c#e>aqڝk̒d_KoOA>yv\2Y# Ty7߷9sGnrfC/#9wBF}+*PGP=ȥeyhm Y9S|߂ҝ$Q'2<6?C8}4aky mmO*B?=٣ȉΤvAǑ>ЭTl {c1j?Goܿfn|]"P8흼gӥ?*Q#1OGcݿ<*;}|#jrIJ!!+=@ZFi+539O!q hbN9Vwyk nBXcݷ?Ł~ئJ򅷘!c;'iD|]0Q`RNߵL I3Jye}dsӖ>2 rM_Ia?*<&86qT) >bly9忼߆loGi.f*'Qʳkn3gku3MNq۠QEf'WѮ}:"WMvddU(((((((( '4BU'4BTQE%}MK+o1Pw_U-}5QEy_h Xu//z/?Ow'Jh(( ( ( CKEQEQEQE%-PEPEPuFuMQ( c\NU^ 8PG@z_GnJ/E!#.y.L dhnO9b 1NP{}\E5\>Ny}n֟ow*I7?w@#8R9#>2B-p ~_3+ }qjҼ(i9lpys q/TVR5'8@ ((( -PEPEPIKEQEQEQE5fjkW_/@|x`>N"\dqF0p?@3O:Ym]w_ `6$:gӎ70IL,{.?Jt`+n>l?F>;uea`oƒǟ"2~(>63bDPO>?\{۪H gɹL7Hn+l1 1C/#9>8Fm(bFSHmchHN?=?^m%6q FH< !ہbhsʕ_*~O{G T|\m#FmnrBSBiSſ0G.B@A?'/A>ߘnb?qGpy};sw>['ٿh&95ݻq?_&S2Mge4?qg}]"; "rPTʍ)I/" GPұ* N |EFhmJHGq(y[)>yEXwy}G9ޥ7=5tU?;yu̴]y !G\N}Zμ{GWFFwbܒi)$1n<~`+S(((((((((sO!^^;sO!^@Q@[_/Ծ_ъ_ |?YGuGERp3QPEPF[2-a<B$i] s?P?ZWC@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@_GnJt'_Ȕ_卾wVm_^BAEV# ( ( ( ( ( ( ( ( ( ( ( UT55f}2ycR|"o,,81qKP l4زHO_ZԷon48d~*73sڽq;4NmPc@iUϮF 07T ?ZҖI͞>tqmfK2GQf(+k\hFzpo pO^٪%Y. 3XTP͕Ǚ2}v+\oy/{[6ŇF_BP՛9 hd:jw]6JǩfXdp;&u*V i,v*vt-zs@o%Ngr$*r(ۦOS]滊YZj+̕K:##+duϱȫ6l}#~5tޡ+G'9bUU=Z;( 3W-[B(%sl?>[OG$4PC dqp0{cIu$QTkPR0 JN'&͡YݞX bPvt2kdE8+s kic!Ln#qOlqiow-vq !5W{Զm Ζ(y‡|85}5 KO5a ur'BM,w=P,0;w0Vr3'DrJE1I7 觶8UuQN& nu`>H##$c={ wvPM [S )lpNIpj-ʑ~PO=8Ҫ HsY̶\#L3{py\%ާws`L(n$f+QEQEQEQE{D_1BwD_1B ($_ |?YEmqR~_F*>f(+k$~{1A@.gGB(וM?4hM3Lb̓}a;]i4)# @_O&+~i[ƚ=B#CŅG9Ҭ4&+~i{?K{k*qȚ30TPK'gpNpg9;|{?FG$w%MW7jp;,8 /9L%`0H gjYhv)بv`[`MK{?f(+koQ{{fK嵾PN8|u=qW"{CK@L tI;3`?G4ilbTPOFOpz\)|xk4g2 r8g{ i˦]IduV0 .͡F3sJm/ *d'sTE'kx@@'q ZI.`MIbܤvLv]N.2%]>h-R# 1vn8JlVf4^Sq-urI= (*(`I8Q(}:ʥ:Gy_79D0-۴,2s{ʩj;;hcؖ7ҼgD4/rN w&r;s@n-lhc8qRcʫ,2 \%ϦhF;WYlE+yKm |qTNtG];K a Y 6>5k4_/ڊUc dHvc`ƾIڽa;BM˃9Ne6^Dʫo3LsH1 c# Q67,][ *a ݽ=9DH$xށ+Tuyo1Kli^x }3rk&\FɼXlu'?9=ID#1cNy(Isp8A~3l]I N=3XbiRG 4 [̍Xh `%%w#hQDq$?so3#i|j)Ue gq kq -UʆO?ҥh1ʷo<ў0e--8EP!ӵ1a܎1ku;x-"69P6@-f(+kPGju$cj#cq֫i0=Fcxa "4h 1.`f(#=y*ϽmڎRc#0r[G5fڼ8cy\t=SO enżRy9{<|q ^?4WNk{H+GH0? ĜzZW6z[X[<˴GL(B9栰kIb#1p-9å_[Y\2rgXa<^3H6&ż L,a }܏Z9S%G۞%"da2I.r9/tc_1 ;3#n`8N6Y-%ZFCuo-v#;F[=.,ZiYHDS% g%H#90jI/JbDYw@q@ONj ,wHW:s]s*BO'ޫv ->g٭CyNC<0x4hn-tYr>V';U"Jw,j Ƿ9 ͣ㴸P;WrVg{Ey+Igf?9^w1<#В2F\{pDmR={4\Z^i-klm/l9٠(tȐQ};;HdZU6"IQbwi _h"H-ev2 X@8۩ bfV\<,2 E6I] ؊x,Qm/a#s=sޟ8 <c̱كGx<9\FW8 'Q]!wv}W5;%ie/ 2[ǖ 3TХEPAX=Ϡr=By>@8m q~h-@ġZ=?tw;s1\46ѝlcX$1Wd,$-.cmAbVR,`ey`x8WZI.ݪD@;U[q+JҒEd+c 99NGciE` j$c*"D$P{ڧ:*. ei$9e~B$)( h1(@2ǖfsyd^6WF) ;%ie/ 2[ǖ 3B6۷1{c8 CbcOtef;5MKcۃ Ye4>\HcrN_<\g3S nEG-9ϱQbH ֓~#IU1ß=By>@8m qm|#e%$\@s)*ᡶSc'l `w'ϵ h1(@2ǖfs'm2\(FUw`w\KKPX`.nGX'8[S[BjS7LyA6c>p 1|. ~\pW5.%JSX<]>0G4\46ѝlcX$1Wd,$kkr/7'z8$dhn# )T q*z\|p?rs?.8+_\F;O@o psqTƕpFv)c^6|;XVH,)C1>0FA=TM*kP c[#*ꝉ56pcPaN9^6ܶ1Mf$$K31$$Ֆ%2Lqol'{-<+ѳ%b<*Gv25_Tഹo0o݃2gvOrIp8pCmГB]\=W ^<TQEQEQEQEQE^?9b?9b( -/j_hQ[_/Ծ_ъ#fn?(e#E@Zí{ȡy_贮(^ğ-+fM:Uؼ;j-܌U%725OʐW::Y"2QK'eOQʸ<NzzLYVA#4Gje͌ l"Xks)d ,G+^o*X&BMIfBx;W$q@n[[i&pgj=;PiSMqf^o&HS6p3*[߲v6u9* &;]tׅ23R7|=ޮGN^U/1HY|+ug4Lâ!́ #ͱUy w3pI^=qEh>{ycfuݒF}scXٕ\ex{8f3DT+hU \e}x{k8aw+JXĞkQ̂@%L|#드 7+3@V$$ FF=g5X /Y@27/T#ͼk/5GQ{ 1#)P6FAIYEʷ7(l J2>f(;d~l/Vmp=l##PiI(MmYH]86k-٭Z@mU]ʃUf<<@^}!y~Щ!\t;j{<:[Iq4~}$v6N88g nlZ^g%b ]fGkinlq[ FmNHϿ4wq{t|pc>\+CHozW'S>Ds "5g8ݜg~5ofdcjlbRuPAai\$2!$8P[19jiMm VcyT!*Rs ciZi \ȫ[y!Ptti{S0` +Mj 62P512*Y $4ϷNr',#J'j 3}NODLЪ|Faz(d%pޙM*]G >T#ǡl'}[HK^(xҲ6pI=;r 1ɧM\v!A1M5 o2*$%P Tw@$ c8!k6)YO%"  >sӣicMfFe(Ÿ @g =ݵ{m1ՏgMZ+0| iM,^F fp97*ji_7㲁#z@Mo٪UPEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE{D_1BwD_1B ($_ |?YEmqR~_F*>f(+koQJJ,@w@5U;s4) $npNx 5I^\;(x؜)85. Zt["dpON;Pu|o@492 =MM{GO1V8`sMii$~v'*8bÁ5=ḿweE\f 2{ Ny3V))`rԀV3[DSe'8Ǔ^_Ϊ^&^o*ټ0hs*>xcjEoK<k݂Oӻwhcy֜xnw$G`boǯoΤ22Ѹ`E)tYc΀2tk>9u$1oqrs9>{k, YAԻm 6zu;z7l7x2l,6{pZk˱BćˉF7`8zp=bXIqk'v3kiF\q)6BNp~#b w˶@C cpyٸ(Fbbon`gu TCUh}٢&T6\ʡX6]F2G\U֞C\\۴}(}Ƀf@I *K}k2B-v#)̪)[#R$+=ڒ p3p& %g% <r{nm\E/:ǵ2р;|÷?G<`ѭal9ay=ct4ۻ"1"혻rn2GQ48,>UpH2@-7 pܫ@lw6T|ރuF I./!ݢ2FGÃîqz ((|qEnVrKj#hШw9y;Oz)Ż-J{/mmفL|2+Фp׵ZbuG%n'geq }yb$pz`Vy &cTd|Pm'H%U?,e0Gs êA?$]CH?<"\+\][2TԯNJw ' Eoqn[1mE2ڍJOQ$WX3J8'#8uVâ$eaAEg̡֡*>E &Ht Mq%_##ckrQL~a$p$ $ !ߜ|_QXeoۇCN T.`1s ͐dX8fY$pߎʊkAk%ͼ2 |+Bei@O9uxѾtX\c|I6`1 .. (Q:3dqL:r[D?LUP΄)DG<#e)N©ϛڈZ4*<~^N?Þq$P˵gt/I#XzUHEDۅ3&@?^$|@+[eq }yb$pz`f]ݞtk&jz*kW_/Pꮿ_<&(((((((((((((((((((( '4BU'4BTQE%}MK+o1Pw_U-}5xP4$+gq{(<LjI~+ލryhð>>kz4mZ"Ewܰr u AbkiYĆ=s?:Ds6fc IST$23Ԝq@&`1!u3jhHWG@ #7O姝yFTj{?٭^l»qyi?*uO ed{| M.]A/^&/'m=it@nl6AzTS_O J:3NG͜ l_Q/Ѽr;%[dr3ߧ:{ ۱gR ^A xⲼ9-g)!%gˣQ:gלZYgVx&H<(:deXiWQ+ 幹HNS;>j:Norެ 8Nk[*['.mtaBz`\X%C-7O<*;q`qhK7s3!nVTU;[p{ V{5~Zee )Azrtvo!cO1r)eƙ Ѷc\JלJww%ŒI!7Y[^Y#m`6bc#gLիX7|4R "1NQEGKYx*Ccu"`"\@XdeNȋj(UF魨2; DAYqAd`Zus朂9dH\$PnAH1UIm7q5ĩ`~/.\Ɠ VQAE܌"(P?ua@XF0;C}?*O >\CSoS֋Y텴1I>&g|\@<r%dImƥ8d -!U0wCe~\|F ]Gy ͭDy+!޲88=>h4}yvG q1'28$Jf2Gp[Dir ylmx㨠 c[ ]H͔$*p #V;k.l$ c(;sߦq1&KaO U#@;:i̷YCࡷ a2UH ZeOgxex-.KȘ 'wXbYd T|@H9ԗ]gj.&+e|thKwkt aW9< T,cS U| N@>?Q3 f%_&'U2 'B 4,[`u,rG'3l9 e9鑃}kJ|ЙZ{K34P-4K"TI-|L1<04 Am$^e?g-J|o4R8N#4A;GxFs4r^r2}\ a1s=pɧH2 {%sbM&t"#'PC(<6ӟ}w*H۟,$eEBCF2$&Ѽ(6䳴{d*UT/ Z,)0);Bl($wd!L%̖wlHbY`mNp#H$IyhLX릺fuݨ[[NXc vv=s֮ãn,"Q#.Ny 4='F$\ևxF[2-a3=?'Jky"|IҺ*v`8N~N@?.:AW( oZ.B| :Sz yiTcnqU(9K$UQqF IEZkO: i@Xݥ{EQETN|{'? h큘G2;8p*Pi֢Tb۷Eb#(F `z E01 0p~\tQ@Ιk( ,$9r=Sz QZREnaL;I$q*RO +N{$5Ŵ7Q5A *IxMyЉ8h88EQEAyl.M#+Ld`è#TR,{qN+%\ꍿ%T.p }Mve4<;ɷ$ ;U(͔WSK#JA8#: PK> kz-G . 8.m61]Cv~~q׆SjB-p ~_3*9,mnFGWe`Br8g՚(iv Hx8~~~I?6zSD]R3 O1!sNO 5r;m[L۱2gN? t$o,jʓ o]/7Rgr獤'g \~#^xKE5cR5TE*vEROދu$ :z5#Z@Nab:u' {zjz(閫#YHrţi۳(Nr{P4_,I$1s q'pz(iH6~X89p$'p'zl̐3Cʑ9z Y w6g̙-3Fr$*GxKyԙ܂9i8E5fjkW_/@EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPC| Mo@z{IC| Mo@z{I奵_5v=ϷҴ48zXʹu4>@0GARئ^o:k%[_/Ծ_ъ_ |?YQ}5Z\GV}5uXH$gpAEICՉtq'?z%o5>wMe{u-ۙ$u\gn:hܬ.wV)O̍3XA⫨-"?.`3.A]qEI{s_4^?:dQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Oi+5'kOi+H^J%$:(2J(2} aU.V[y is}GYzN??*?aAyvB@KrYOb} +tuv A5/?b/j_hL;?j*>̼mlg}r2e$ NF?@K[z{VX~ј$ܧʗOJC|r$ݏ-`Jբ3-wlLrѕn H.[jQE3Af#mҋw))NVX=0V%Xe%A}jjJH?!,.vq}[iHgj?nrK:(`I+rl眿y~+Rd7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@7Q9jQ@B_Nkm)dp ^u#Rq&kk`ӮZ)cDPbE([ђp|vP;*uiX$F'B8qWvk,YVDlc9d)gs]]~/fKpĒi~V~e{ 3rXFsϡqVDJ [ endstream endobj 61 0 obj << /Length 367 /Filter /FlateDecode >> stream xڭRMk@W1wܙn{+`B<5b}7*xP27/>/XObject << /R8 65 0 R >>/Font << /R9 66 0 R>> >> /Length 863 /Filter /FlateDecode >> stream xmVr@W `glEA%,E"-b^fAa^K=Mk JKiMw'V KmZ)fF>ĵhOn^zFFY7VI\"*`цUl-}! z{Y[\#E-%kVo<ԯm`.F6I,1K:cIR̓+UjbL1QNk(kNlɤ֧X˜2%}TJ\k9Tv`iy=Ʋf*fϪՄYL`B&VcVZUqLq2FXgݱ@CCvL:ƔРLh;kwr,a5ڙ"4A\hTv`*iy=6EhBⵚQ Q!TV*dbe90T71AeAR;<{+2 |i3t`*+2˸~nqHT :e*J 8f*VLŪ8bb* JL:)wLteuuXς)8Z_\%3drM|Md''xG'h;!&'uR@bs@/x.M^>2lD 4ۋOǿҶYYmUl^ ۀwb?|iw mXt|LJa9;yH,N/?(Nq'׿9 pp/=>_tۡ?0)r{:q8~ڡEfW~pz< endstream endobj 65 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 851 /Height 148 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 851 /Colors 3 >> /Length 6796 >> stream x}U[Z*btq1)$@Un,Hy!~fkVPZѐ" &-YlaZ]JwoΙ9sf3{߯s9{?{H~ ":M: ?ͼ^8722v6m5kV8 Vy1'bc=M;v(iiiFmo߾}ꫯs9ࠝ;wvtt{Y3fPE"noo7\q2ZEj v-aE]MfI&|yf͚Ç+_!k.-?+°j$ٳ?s~/ҧ?_=O3?O\{UkҤI~ 7022Qo)rZnݺ[N}cN;m…W^yexxX>o|CS Dlr*izP~SL$|e~򓟌7?~;>}3"-^_\~}GGǬY^x۷wuu͜9?'NxWwI':tvǍ78cƌ'x_׿u]Rڻw^M"_;C꒡'xN~O=TD*TOF;"rgWX1a$,ފvGy-Yt~ȑ%Khj믿m!•R D>Qijp4iȈMv׿us)S^ޮǏƍ<;#CbwLC1H1iӦ1E_WkC=$6k_Z&doq;vˑ wyI&2J -ٮ>WijؽZ z)<.P%:VINE=ztէr… /"iӦK/駟>v޽{?]"d( K<v,65۷5Ǐ7dH~ .綾^:rȤI=?_~֭[yW^y=zt„ "t(hO$Bq^=|_γ !jٹs3f$~o[ͣ^zid%I >6m߾=qM?B+W8q P9 *c߶mt}SO=5Ըj*/^{xZſ޲O'N{VUxt-2ypɡCԹ,6l յ| r-2I_ݻnݺK.>@V"-ZH͛7=aOxf5 c͞=;WYj$?JL~2IM6͚5PiO=0FQQ$'O|G TZrG?*2ƍ3$w=TZah!oy 'BUW]uСl/Pm|fim #)O5? c+nlrw~{_,7~:< D&gyfܹw.첚xcڵ_~В9E))@ͧuc˿^h֫@"Fk^E6؂ǡKc"ZbŸqjD8H%Uk"]$Ok4nSCh׫>Yi"^9n֟s-ŋ!aIs&90+[w ǯV;$?"w}g8qbojjv='ebSw\Z>-ӕ5"fII9$zM^$?"s=7?nml댻eg;ݳg~7)%yCԴCNP;/>i҉ h]h/-p/"-hoo"ҮE75n,_/o75th($?FAho…k֬!TZdaOj$?JL~2I$?1(r% dL~u.Q!ν1i$? _Uc=v5{/!} ȉggPn;3@N$?H~.]*_{njj"Ƙ 6Fu2͙3]|ԳO4EQAueZTbR^륋K~%WUG 1O~===K.5_DmٺYܺ,-"Dy(#s~&?_Z$`xJa2wW]߾v[W[keZH1UE&?(~rQH5ɯF߬䗹VH~&R$|9s'vغl\غ̊+-עJSUfy*`S`(ѝxġgX<$?c9Fl]$G>M]&!עSUZy]+aU1vt/bH~&M~_a9A [ϴ4-,PނF#TS^K9e)$?OL K3tۊm4[ǑO"RҢH1UO~U7[q~~?<=E',sVlSeVDY[%5I%TS^K9נH93Ӯ#ouqAFe܊13g2fMϤK$G9?u9L -n%h>x/?nK*i%{ۣ>`3<2`ԣ}o+lgu|(֙ucLɤT +&,s~bՑ X^ks~71=Ώ ~wVzs,*ȇrn]G[O~ظ2-✟Xl^]MK~BoT䗨Y1/U"VSwBL~D g䗨ϑ9D9עWn/Q%?'F(8TOܯ׹AuO'Ń=.KisDNZn򚗮9P1-Yye<s~$MV%2T%9uօ2_dJP&Q[J07R.Ԓsί7IRS^唗<7x7ԚZ4-.y^`$?C׊$'zڵU^ʹ՟m|O+l2+,EͣFUr[h"'}3R9#{32l[LnBiC.³>[PϾ |{[>m+--Yc ۺ̊(-x,P<9L_qi;ԨjݓbUO~_A#C*Fu%p'(oA#IˑbR{(B3Dy#teF\I{X LjVZ\˒NȜ/غ<}ȧ;DEy IZS5V~LN[ vz78Ng{\xGfqa2+,P^*]LU^lL FZB t9<`G !YN~e\xGfqa2+,P^*]LUu?%Lumŝj'p.lk#T__(DB:8ZY˨ 6rG%SKf7ueeZTbR/< g 7Y|H~&\I~XFl]fYlսҥD ᩈ)h4$?L~Vnnn#:N 7<<Ĝsd0J~˖-#SU*VBo޼y".! {{/䒂4uԂz={ԳHq_NYbE=TEAOٳggL~E\ϐL~E-[H~(H~"n/}K9$(V^Vy9E]]]Cz-3?OɿaÆPlw"J~Wn[jhw?s~~7ԜGH!:ϛ)_w7}>!E>485;'p^gH~刼 ~h2Qnjj27GE>0*2~+/)%e˖1P+9|굴x=mvgD?'2߼y:;;I~K~~@m=ajmm^h-zoM _{{{[[[?(&EOM}&MN7|#Lߜ'bdwxޒGp>y?>y*I'8 qw]H~.JL~h ]O;q0")<2'? M~===$@s1<hxuK~}}}s~E:ujA=TL~E̲%$ᦦ։-d48 ڹz{{-[XdIA='$?͛I(GAoҥ"Pkk+Wu(L~\s>;::K~mmm$?r-q%g&?wH~.2I~2;vl&'޶mۦO~]wvm2j,*a[4%%?V\y7ϙ3?,cϟ{ToH~6(5mڴ]vy>5FYx <!9wԧd Fݾ&P#J `02nHK?'̙3}e-8Eۺu3-eyCEݸ>(uww777f'/@8~l>7<<Ԕ8?`NM~0 yq?>_ooer_=uO do޼y$?r_0W |O744&4 KȨwίMtA(Gq~S: 9/U]R!x13dqWu 秞J~2eBO$Hr/xbG0}kcyCI~~ozbWDH~ɟwum&gJ~ݍ)gJ'lH~.[+O:餾>@9d[tM$ endstream endobj 70 0 obj << /Length 774 /Filter /FlateDecode >> stream x}TKo0 W9@Zn]`=N4>HQi"rD~&?~$œ~<ʦNe܌"x_0񈏆M\u۹&X`&gUQdJxUfJDeVV*7/6ޤ)4ޥ% veSQޓo׭샋eyH'bʺ֤|{1*Q@DW.G1J 5q*Y){jd5!\G 1Б7M ʔsk f?bwŖuKE՛;7+g2+v"cJlHe^fEQӇtp/~0<~ΑuKt^u=OgBb @GD6r @ ;.uv]'savb{HcmST:lARP#\hpy`^qbo"㺌N SxIp[ qtwA4S*gO) F !K4"Gk@&`:ʨ 掬 =8rZ>^Bei@kdM5l#.q×jm1jO-C(ϟOP="#tKd+tJM=D3#-2pq;4!4|;H00 ==fikT#A5> E~r}9&3Cđ}puDnE|3 /7ȑ !/͘ endstream endobj 46 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/2component.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 71 0 R /BBox [0 0 521 668] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 72 0 R >>/XObject << /R8 73 0 R >>>> /Length 63 /Filter /FlateDecode >> stream x+T03T0A(˥d^U䙙[(9`J@ L j-\KL endstream endobj 73 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 742 /Height 578 /BitsPerComponent 8 /Filter /FlateDecode /DecodeParms << /Predictor 15 /Columns 742 /Colors 3 >> /Length 30892 >> stream x먮{v9ؤ 0fXEuw@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H\vW` tkZAo:?% j~ǁ YYz@6a\ TJϷu؁a~rw2ArG=1'p;4C¿lJg?s2X"0E ߃6/183y!_!`C]D2-_fV"XVgVѢ]ט@"]OE@bg]&/dy1Ν>I )*c RtUae|7c&/Hx|*3ng‹\/ LU*z=7Lbqa90)/vvr ܡN!tTy Tݵ!+W淁dN].tJtE- C4 C2LF+{(Cwc bpCF LeHג/ 3GFbmء+q8qBSĔ{8Emغ$vE@ H>of_]44],קrBzkϣzф(a fCȸG{=6ϯ}986n#WHEZ?}+Z+wL.?fH+1r+ X&p10m%]hh-K_OK_xܸ󀋿,8Lt_W+|a~ksQ-bWc+H6P2Ŵڷy0_ M4҄Ay&U#vIq+Ga ۹+|e2l>]uT.s7\ h@3b,Q]|?14t>whH%``N[}Z^7]:gNj^S ,m\|cf"k}IQ$eV2p0e"-h\85(XͰˤvIw¥{x `KpPeԢda3+ŭkث<GNW:1#VT4po_}9ȰhpgΞN8L\+wIXI)xH.3_v%3<ZS+beCO+o tF!?'i`Lb3/ _=MƋ |-ez;3Uχ1xI2V}}¿wuX{8`6s w );45~J[0tei{%mqF-#J>f \xHtJX8}"=c|_-OނO 0;y=i;yvFdtlv-عֶJ#^iFxd05+J9&K,4>sQvVcH87 ǸITڇj<K}Q+xtzs QpҌzPY>G|k 728$أK<▟x2DxN;vO}yb8:gѥ ;$\|)=J1p#ZI{0%pDWI,I\1Jv%v,m̮8L>+ţWGm1=եY܀& lN,[q֙xX͞&~0|pE\^=eECO G j߼Vڱ-~0ïWDLdpJ&bNLt?^1Ny4~~էd+Mۡ-e{8w,nfppd J#Vn9a,<;$\Dw DT+z%kp xW>YVϐCΨ m\pzPdȝx1û$7]%nG5[?H,$+΃C'8إ+N›Na7Z(-vp [eb T  3W=ĝ#ND;5i!'wF$p _1cRT +j,/N/>=?dDZ'rK`bK?-"7ah `5nbᢄ14vjHYטmbE+2 Z!\fMLp4;DF ߚUbzef vzvk)'0hΈfI/w n4Cy1hJQo7 [dX<.oa0nR-[jT F+~\M3tM|Fӟޯqd1wK`I2T `b2y^Y*V'hN6G8f.E 1GyP-\&I+7bc a,cwC+"nhpR)WOA)mۈfX?_>z%OM;WAIzIObA ?* UĚ$ .$_>h]zůizb& 7іH 5ỉB#ȓrKS)-]oZy|yWY'uZ{k g-!cY]]+W+~>ڬŎ35Zgz2s$:`HQ*Zbp(<'pp+vF8KaݣW3+؟?(t2I(y[/mb x~Y-_=[u%[SD7S#\4XU P'/=ͨGZjDy(kKϓ3dt2j 87P(2o,Hl 2ó³;>$ Ur Qq[eS΃۶bQFŌģbetA{\<+*_T -"OlK@4*W(,(vdT95x /+J`hD7fXzb r%ЄKƾ7RMCLN%^!y^Y\)8]PRm;eh, m zP4"|*/=hdٷ=QC48Jp{bɨ4de Qj+96Htw Y3_DS*;s]O{I'Qs̰tOU]R lfFRsp8g .IyKyϊ߫1H PZuܔ4Pnk?S)֏:^W8;1˷;za1VXz;c!E`5J9xS=Ɍʋ^FQo˹!5*S-3WU! \8k.^)^!W27Nhd,;Ɏ,;wm7&JkwRY *+E\7Iw!\gxO-!^&j2%NtON*!ma^R¾7^Oz[Sk˕Rn|rޔ8 z\l]Ud=ETg\,[B+9WniXW.&SD,fXx(|Qbe T:T~MkIe}Oo|6/}m0pGtCPr˖"'WԭPئWx%SV bRcJ)b+-WަIHvƽ]X͝.ݕ,zH+Aa4]z#*%ވfrzwF6_/T󮎰\s-e_@]'M2g\,ʕ`^1:{Ȼ؄ ?d4h%b:&ULaT"W4ܠ3RΖƀyI͞o=C.!bw9!wJ|-mnS4^|5WCb%~*WIe辋nB)cfIoV&n_],Jh( dG1,̊u4 -WQZ7ȽAC͚֚6[=N_O^OZ\Ek[ECц!bo+M? 󸎬v땀41SY~zE@C_YU5w/IۓZ͈} WSi\5nK#\ }jo"zqz Ȑ#Ŀ+Ωҟ?Vov"rsz]K1FuB-"c54 6ItG3蓓%tjn ],]2b,J-5ޅgu;L WenqEindMN#*RՍIlE)vz_ڏ)͆T "yvܥWyi+WvFkRGg+<|*)76-;_ux3Sd)_w xxPϽ+* n~\j}ftXq,ʿBI4*A>bWU+wn,K'uS8G3%~Dkҋ±4A6z|bd]>VwTnS19a bGw 7ά4mG:Ru58=YE:J7(ci)6bL;%K>QY&0^QXwgOBG /(X1UsV<񕾡- ǘS`iCxJo= )i+7?mgj BgnfUǶŏzD6yCrp;hqĞyziT 8tUm޼)J`}Ehf+`7Ċ4dPssLth%E.^!}(:3 NіŤ|\Av lnYj?/΄pZو6 / Cuq Nbkf4x,!24p1QzXPT,(l+t*d/ s/^!՞ϧ1MYQişf@L+=p+KQIXn+[h.ҟA53OdeBԹg#X?ERAHǞQ[[]>Ow = $쏉.,@C.j aVLVãl-g$fڸ~EȻYybivJˑvu~WJ4w gp|)nX.7qdy-ߤ'bbsv.9.eutߟܷ!7ѾȑB4MlCNFR'.2W/vL^mʐ-Ȥg *m 8Q>hXT _by^{dEl(Q*qO@0(Y<2Z{11 5M7Dm!=5tj% #^]1%=5لWT]Xڹ(f S87t@oC"5!bFߘ2LMcM,v.r5M\@TwWbbeU0sgSH)d1)",4 yjETL>;bE8Zh_v"hψ3!z_ ,2$&rI抈U`uX4Tb)j#c"fdICHQQt.43'hJsտY8MeΘd)!YpwJ)G F6N]'*Dŋq>~+\F埐1jh1f掙bսN^,3V:-vwR)XՒZL[4 r3M{q3>}*D6S.R_ks锢Nfr*L¶T}`+5BuE\eQ6{$ Y3.#.9GB#2ŹBF9WhIY rVH |NQX_(q oHJEhtL]hev]Qk>Q\R;Jn% IR =KmA!%ŲT8lxb>_}^/e=N1כK OA>xws4FlUD+?ڠj~jӫYd{9@8 O9ar&p:],z%|=fvV`CY+=Pkj2.HFl2$h#gVk?_#M~v ͳdD'2$Nj"ޯ\I,jWWaO`Hdl'Ju<[%񗶨2CCU_7b!Yh|zb,N{aHsK/vYZ?1%%;ƗV}:{猷]}!xbr9[Ͽ#ڔq3ёT/,]6Tfs>")8Յ3\,bRmfV&1(BZ Mmsn /LpdyA#Jͨ^f2:+'\%3nChY(ssc-b>(>eNbןŢ"x.ȗ: NOȌd֞#&;T ¾qPTdXVD98],r;乊S.N\Iv*h:U| 0]#xG&$IUEq/MV$«.&p9N5qDb%Ysd>ː qB?=ŲٸKbܹ_ëMi!(KlVtHp,fT020Qz-/1AV7)% QXn">yƗb%ѿX5@Iyf.) mϲz lK",*+hק,D#&o~ퟒ_ȯ¸^!,TW͒%1}w=v $˵Ѳ\'mqzk\f@yQHOH=4]y_1"eDm,EZtJ4H1F?kY5T Xͦ.&.u]~%3Z4+˟]wtcL^7[~~1g0+zt/DtsK#@?Ho\gz;EqbXÃ$g&J .JsCbb9u}X4KJ|Hdf-ۯou%Ij4q-3و6/UlUpN?-p413dVn@8oWr =Im8;"S,=qKDߓ˥'#~'ymȐ4,$қ5r{跪&%~%M@7K#3IEo皌5Z)V3Q! 38#՝CD +];Z^F2gEPk$S obZWJO!M]!{y[1CV K),,7!oN@>MCzʔ#GJ+ ʕ_%UK `!-Chi y6~jOaOeT핢\Jj!Ѿ,8&%P"~$U/YYF5&X{emJ\*T|2[gUJU(>\ p1If~ׁoe4ZjZ_("a{Y5~QZbIiœ,).͸e2Q]g)[{$˺RV8o2BKǿdu%PID⩤v6?:rG[V S~;D)pd14'Eb?*@ӂHLӧ Kي^di?_TEoc436| .ǃI8uK(y+:CS>5fF$K{$dxd1< nyR\]Rftd9WJk{4XZ[;Vegh]5$e#sbʚf^1wtDǍsWJ_Nsi: Wbk~05rBJ0=Ҷ7RR1F% K>;S6bIV+W{,{snO)s nI1|DsKWQkӰU{**/۰,`˻U7HQaHYuNCI.kɴ7\*O4E-hZYquJ{ RCk*wzR#pL3y/`23pnҍKtbex $K5qY/yӌl˥Tه~OFh.lWooBTڹinI,\vIc&K%E]"@xk@*YR\,y(Y;$/zEd2ꖻP #^͟h7n?>ga|"db97XіOY?X$RE^H\ #v].YH$Y&],Nz%ueK4b)1G x.Uz<^tE)jXqxAt ju)W 5BRu%5l] v4]ƗHѥ+%,? f"~kխY-876l`dy^2Ց,brWKf7QѬ9SS%gw/`zaIOĪګ̫ww}j_Rf+n6'H)".$eŮ2I,kKnedCq3.cݪxm<4KfJz:GvWERW|KHma6PËKJyR\ NRc6U>Q*.|TB#vl4$ 5;f/,_WT#*^2:e?=[nMJ={W> bV'mK]R&`._9't]z(ւVQP-YKM v@F{q!=V.T KQלv 4۬@G͘r*31[ޣ+|*ocU ueX܏=Qk!wYHj.M4Ĥ4>%c,Yu %YRl RxNђ٦Lf=R8$+n(v6Jr,cbxepuq' H"N5c>Q{"6 d-.Stl4 ?KtʤR1NdV{ť%Lmx >j?Jkt 4M\KOڲU-#fU%?KEodsE9wYjMnS/iZCUOCZG d"b4.Euvw!Jɒe^Ʋ S4kQ}EgJW=NDS5ע lAv.klp&vR.5i(;l%#Wl!8H,"%KYX F%ZbB3B>K_&/9' e@hm[C廷{OR{#P7.*?\7I1Ndo._$K?}nTW㉚I $K?}bT@|^SnzK{q*MC,1)ю^[R|UkQYE{ 45O^ƍA꨾c\|¥IJZc0)bFFһGngȉ/n6_pWHmQ-͢;8VCړoQ7mmMuUK1cA\@< H~(H[]a0WXUbp+%[乃/(M b\cQСcK绢k?]JBFno2kmZnY>1jR6,m.+F +{$+5.jƊQ[VVW 2$GS] vHuxMH n[X6x$eMkr2v8 H~Ĩdiɲ>a5x[ i'fhމvWHJ|2ZK_ -'`Z(CŊVgDbv>1*&Yh׀dosd!i2ydnaJ;>i +4{'TT-2.TuܵsM1!"ק]?ׂ*m֯ZK?JәY]%"EzKKdO,e3ox",m,Z* %ܢebU1_s¥aU&sͼ¿?"7sm,2"JZ&kdT56!q5JdO K¤dosdy?ϪbT7Y?hjތ⧨o@ᤪXBX2k|b GH\ɥW$ QSXֵjtpxD[ "@:,Q%ɲ" ,?t_ա֨(>Cu^L/?gR3!6 P>~uUi=)! '+J,b?%3ҁdOZ'Yxz @,?cXK\Z+X&G];+DH/kզ̧wև 2j^f[c;ɥAY%ghӘU),lr$sQ O Yļ, #YH(j#mjgאړV΋{ݨC?=krimI.Z|$١N UN>t1 +W@l3XU0$7-H3wce咥M;I߉Tg]4!֍&UC~CX!0mfQ!귻ًiL%Y_/)1m-YȌ]<+.*cYe.3@x.YzC@7\4)~o hr4X]W#S_9O+%Ң'mt]\,M#wjo8_kovR6X잙ZYTS-\ ELQJ~B?iVH; ,b" i?o.o 4ڎ+'h"1,I)0YK^&ޥt-Vnv[$]Q,9hXiZG,xxdcdSm@,$IU˭2[o V2x^u¯0NbYl3R˪^;WFW=h˯U[CKMUE*5m1۶N67Hj wd1,Fe]lE,$˕pp\56|qiijjlciOCRV RWXXl,%ekmjB*K pɢgII+RoXŢɲU.Y'XZ1\)ƈtZOY*Dak¾K/ ܿ yޥ--͍];8]1op⹒'J;#Yh|{-%YEx&dv *H j #WxFjNr&j ;6OJш@QE$-ZTNVV0.GTbǦgⴣ5Yt% >@³&% NnV"Mu'D o9yKWU$V\=4XY#֫)Nȗ=>YJ5SU%\62R5SFW Mkʟ Il40e4f)Y ~‹Eժ%˹%JTT?`uHf+ˡBS[EtBԥtgf(W;EdܔhM9(Y'B"ZѴR"Z(Y?V,J2a,.fbvUS7*z?B9`xVP.~5E4 Zl.1)|KKvJY@#1m,_{XtK4jBJbы$$~ OɾY.U^b-ŠG|=n2&Y :^j[]vU(mѢM!)̶k.'[yޥZL!QekO6Nm@2џ^^ 4TgL3ː2Tue(Q[<i"bLѳEQ97O,5n4&\ j#% %sPquDB J18S!`,M :fJG-_>Eʶ4 X*g[JqCwFQ3s U 'O~ɢEm,_d|4A.{d7LB# 2j܋>+)uhWGW(ձap.uS u~ՒuL`^H3@{ ,FXVܳhcPvHZ@ر㪥[7?mZd=J %% BeJ2'i1͵6)51NG903 *o,Y5MQUW'J@Ư%3ͺp1ƅ Op Kҝ zuJ2.HʸlO/tE' dYRby+JļmhR4U5o876[+Wu[!Vg)hRT uW\]N,<8+_,;K_.C uE)Bczђe x '&Mw51<WZ7]tL[e a.Njf(u \q}i)YĔNb a-k"b#6_ZRҨr>g%[M] %zzWQ$SXK2XYۮ.\tmWIH7)Q:cI3nd |Rde(qL+z*]uxUKQM+YNjõh]IRy]ԗ:T(Yn@nUcj2c_\dͲC4A\+ܡrHn]&yv&J,F9fuCW=z@48/Yiu˝ݟ,YDk wiy qjBFogfvEZjڏXUqT31Y^U 'OM\FhQ;C=ð6Z첌BK?Kp[%Pzv1kEϫ+Iz*屲GZbr#"vu]3% K(d;vP2&^ZxH@ O$=Pu-e(M@n|C8dMQKUnY;VB沭ѨdG%˨n)b\ 78F ҁW/,Fͬ$hIëݬT'6F íO"ɲ)&1|Oyp'Y !b%%_.dEH&&m#hnO,Jb&R2٪piV++_DUAzDP]YH3ƷEe-g·6Bא,CF)% OcT]4wd#ʤ_ZAcX׌?f5bnGrZ=iA\?kewj!ߪGҢddyIN\ş3+'1N,5u0hfhض048d^b~4B)g]퓞qCNlJ^%QJڱC#Zqf B.[[s$[zI{Υ XPY<. dyegǮ7fBԼjisI_wnFR}rJ}[A^Uft J T/G!4HSKeA.5z^r>?hW+HXƘNB#YRTg,#KOZZ4r˻Rhb)%7JEf$Kwµ;2UKiqح~jӝsSXk(벯ȘXN,C3)Y S(,bԐjƎ$$K%ͦ֩;WWӐ: mkYL & Y3|V@M؜<ޔɺz¿H;LWnO;,l藓K(IX.ʦY3K]R^WQ^(>-6yRhS4 SfBr%?hbGXҜp\8cE`%K8fӰJ.HM^qÕ>):),b2WT㱒H(3VTA+ ލHXw@Sr %Ev,8}FOM_^JA1`W7Q$ucud곴gEIړ!'%KD*Yh% YXFjI/kH X,3Ss%Ew8Q=@cj"6SQtr 3b!&ytٲNy˘d ]3Qݺ-30SK]9Jբ2"/.\ٌt gsdY}gi;vdh ۆ8br Y-y_U&eN_\]P-MvmiY̦e4bAN#)z.kSЍ#}M:hHQѬ!縝CKtQ=HI\, 7L#Su^'HEIT;Z3-:pZXSEkO.tR *54 -@vV4X3?MЍhRT)`&;O9 7tr)y>Xa-|;jbW`[DSP9JkgrOm=Ả][Xyd!s4z$l(١+-Y"RFP}.J߀=J/nW]֖$ۿf3R땔یl+ f^)q.mLxn_P<8Zȼج6p$_v:Z<9%B۾Eu(}xtG^Ƿ?BIgMl#$-7C6E=Kb3#k^V#n0jƏ£jB9m&zze0ѵ 0BrxҬ0Gr3]Q@{^'TRh ,)eR8 5,٩]mhW r\ s=闣~tÆ4K}\bѺ =>^G I3?F̽u/H1^))i:ɢR<$eZhpla*\2~Ѵ(#T!YH#DGM(O3(hAYK3fT ;2gBJ *b͕2$81)Ff0&:W.Q1"*nk2V,7Zi=={bܲnwFO.Ee[hs]3om_stύ.OJ?B(eyѼnEkUwUw9͔zŰC}ӁU3]a|2`ErMan(]#oD@ mELwW'v/1ׯ:|Xq ^IJl$kcp>ALSiT ݬjzYO]ER b4QV)镝1?}w5b'^ڌF=M8YP~>9gJjƞ=y weQҥ買Nl4d+~wRTv!'^݀[-vY>Ii-4ЧcşeӅlgI qu^MdU".'ze~-)hBL4j_+?<2 G ;tp1jj!Ǖ:5fi<˺e@FZw'nESM\rbR-:s=O7WԸMC/vňIb fX18eîg5\LaG\׋ˌhg^$pqE5Dn}VEcu%{ɛ-FTX$hr-Y'bN@A:إ\..'{f#\/U523Glx12sXhgxt#QbKyb{>f dXlbSwWg0-?tQuǞjO,XZP~n5Le!z#VS[y"Bh0{ W֢y:S#Қ Ѩ^y$kN=P7\18c~Ǵؐ 9ZQv飖G5k\o.MFW 鵺E]E.#Ʃ/z%wIt_(sEφ18L!vhE8z\g* Lf2isnLZ3tE a?#E!w3Mmgˮ;9>dxPZ1>iFkVZiOE3@Cuh03G 'hwPV'J7C+ءn;FǡCϣZD"OW-47u 1$:4}3Zh1ld2ql,DSPzV 7o5? !By1K 4,$v )X]qou/Fky6i$vS@m|pc+|j!GC/ڸ6h~˚̙ShF͚lw(%KaG3;AY}g%&_ϷBʤ{2Z$\Fk]RJ&WwY )so)xO9_y GZe"D(.u}'{\zPp";r<[#w*0ɜ K$<%v)3l4%818-&MM  l#  LN34m[nFj)Bc UCL9 r6>&_9]NRsE;6ؽ'30iF^ @YCrz6ZLOoF54Zd L\0Vڇd|sX&v{wk8+# 1*{,7޳&gߪ93uxT76ǂԒZhݢ%tzWrdT91yFl:gs |١.Ɣ!Vk艓pzq2_`8{O2c(3GFz(?XnؔyH_z`tU =bCKn1)a*NbN=.=nS`G[xpJ~T"}Gdm`9ŭ:u/@p.X;)=.==8q,u xVbdl.1}v9'gH>xϹ+\fjN#iޒR!EuG" tj4{D=1mnT/p&ubB miQAQ씣ͥmN*OwƟ'cyQ22 0a#n o +'Y( _hNEX$g.YnԨ!9yF[;p]c\t,=wbIy1r`;J7xD=p#uם;Kc ]etC-,59TR (n*4GtgW'`,CH#I/i; 楅CYřX{qbpʗe[KQ9++OD~As&f o _& ;T~._&Wͱř׃t?8bEn᲼>nqa1_fLΓ.ZgL2_NBG[ү<!]` awd^`[ΏeZ/ax|C3c褭Tމ'?7zoSߑx&ZgbO0͕tx+8?:':k v23:`><ţfi<ϋ'o4 n:Iǡ2zn{U+3Utp Ygϛ9;}+B_&ɯ%x%΢o*r7N"A0[~?8;ğ̿9Q;T4̙ ۷۬yxq4F{dP*&?NԆ]8V#MS $O}&7֌GM0|ym{w90b1603 &[¹{bdKu_0\0Ls-N gILt$ BW{0 `[Y5\N'<e> _ w$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8H$ d@ Yp,8HnђN endstream endobj 79 0 obj << /Length 1540 /Filter /FlateDecode >> stream xڭWKo6W9i"M H"(W[I3!0g<8ݮ^߉<"*8u:dmOطa(ۦ_,(¶2Q2i0U%ߵ vKRg OD0 e@agˎLTfXſ߂8X$J ADUQ)߈۽ q M[צGs-_FFNmO`AU0_ĞLȘ$˪_YPdnffK.4|8YVJO rؑ)m"^}{6K,FDNB_R䡺X,:s?s&WH!FTa:NXѭj;@V17۞8D;n , W;`uquʦ2}_[X)XAvsе=}nL _hì‰)\k4+ͺYA ofoy=FRpW޵b   0NqCۑD{OS8 I:ث| CYSEcwQU)\mi5ÀAP<clO@c߂U |֮TED6P3F;Tx̿Viumq%1J(BӦmNx݃j@G6Ğv@97ruAG iͦ:l/B%?}uM;,tE}GIH2j~a5IO*39ҾhAqLC@?ʑ Qcdm~sCon;y|byg *l[}4-ˮk- o z$f{LʇCl UZ{& =lC;;9^cϊY5E[hښ٩"?7V3ceΰ0ck˃xk;{ݺd3ey.qZG4ZI6模FJO5 fw̾+ED㒢Q( v LW%5KwlB&7z{"y j4|qKIcsZ8 8QtXE*NM}Lw fId* H]-M{7>/XObject << /R8 83 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^U[)9`J@- !j-\J}E endstream endobj 83 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 598 /Height 458 /BitsPerComponent 8 /Filter /DCTDecode /Length 25979 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYV" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )QGTE,p$AZZM6ϼh+`\ƢSZMe'cQ;KDec"{ (u Th{Oe}Ggk4VXKʼ`Zέit (AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPNDi$TY݈ 2I=ji-MҴ6;m{ペt._ hڙhn.| DAՏNZCD-R9K'PIsgh@sl5VrucJ}oiitO~vZm;cfi!i5[ͱ/V1IၟIjڿ*zS:U]ݕց}.OE+M럧7BT$_5gE#4}囼,9%I_V5tWdO'RYs=YDac$YrYKa6 5$YN5&޲JCK7l ,dY%gʃ'çPF?3]?m2MfQvA?sz?^,02: Ƕx+jsU*UZ2+[O`Ϊ?us#I^]N*Z8QEAQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE趲v\_ܱ[b=Tml4³c {Gڴ|Iݍ'DfB8JQԒJ2vL q9Hb=͊"i2n;H;V5;Xg'(K8^4c~GyAfsͬiz ${sѧj40OpuϭW~waMs;*kٴ-oqqqX%Χ |6mo!LVijx=Az_+W\.4;QtȓnIs!Vhi<ߏC}vVOx6k/!@1ݰ[GGjxOm]k0W۩z|zGRO}a9ylV18+"qOع[>l2 \NJJ8)j|=px6@w ʪ=_I%jwEv.q`kyVW s)y3cљQE3(((((((((((((((((((((((((((((*KNUfo5&v$q+ɅAڹikk+ktzdMfѥF!yHsM6k7moΗm4pеE0Tijxsŗ~moH2OMmZEajp/-rp$˴M{򥻌G̼=yǭfxX]!}68uЁJV+(?+H[xJ&>ҋ,^# 01gSd~uԗ:]auϨzzWQ6ţ\6ȯo6UJ(X{%s:-n66ڍK2pOYzYAGM 4s!޵<,~gk wܴd?3 -B\bޤk>v*otWa\&olֱ>m쏬_WT-Dz.j q-\? )IJu-~H⎊?΢+S(((((((((((((((((((((((((((((,ޮ[E TGW-{hiORZ[%Uso5ȕ3.Ѵ{dO 6 ,Nw,׷^UISڥ{;yvKKOf:|Y^?[q9i<mb5[LLB`u35~>y H/T8{]|avx,ݼ6 ~jPk^:]y(X#l֝%֙hCTCe)!Pa ÓLE3U"LR(W`zxztMJkw_KrX˪[j>pepq _ {qjb>)K7D\7\9+ZMN]$q,E2uw;WWݎH2}&o68qsҴq<%zb]lu [m  RIpGO:`Wcf&32ORhT&ȷZE"HC\zsQik7_cQkٹ"/<:籬oN^r ޅqa(8XEQq٣$I%H1zM[bɪD,0Y8*#}kODMJ]J#KbNTӯJB{5&%I.!]rT=5x 0FOF1 atE$oul7oґB ƣc%A9n˪jV(MN(} *hmm| YC"b?j/WU~ӫE+?RAV R=r8GpS2(((((((((((((((((((((((((((((+K֩y[E*%c+6oz/fG!2G:~"|.[KqiZLp~qNhz=`Xo,~:-v^n_yMʓS.Hy{  ߅q*MI)+_ʿSKP֙ax`־~Tkb$7O~+cWҭ: u(k$`Algo9!^ CL]z]k?ºiڟrY]:L?jyjϞ4.at~4ˇ2gwR&P@\2>:Mƕ}<2FRHUd*vqLYu IvJzʺׯjVlOkd]ק'ҫ9*jJV];}$bT˸DGC+?0KhФLO*]ҵ N}=lMDDx88 8SWUfK ~C>Xєy3husqnw'=;t"6Wz>ϥanb[Z.l" Z\m!:{ia奵ۈ\N?~$ɨ큮#0'iIkg#uw$` $N*޾gOO3R![C(#$li:f[f9> =.H3ۯA-F:y֞֬Bv{q\c9kwl1U.$0+i٤񮹮JFlN-5r&]/}M}4D'QEvQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@t>[U}3\4 c|gԜW]Rh7v6Lf,e\{W&&Vq^?R..sQOxK1k6  {` U8"|-*sh.|n2|?ɣMgG<GC!IJHxCqIefjMcUvPkXjxE]Au{gPyF:c=j V'$z1EsW$yǙ [3L_.WPk6Y!470;s=SJߊ mq 똧xu~@$ 4sCi#z $^3?1QK]{Ӧ} yH=s©<7]Zt >O ^0I88bPZe΃F2\wPqlIĖ^o!Y-d9oPF3qT<9\5o1!Lx8ǠIROE%{?+jIHГe휟6#9x<>bo`k[{0ݮ3G7ijmg pMy^=3`J SOԬ۩$SBx L8p1ri6'u3Z9$Qg-“w)鞢Xh &@FU7:ōMo%(2CW AJȃ)F]YR c}+wRk_Qx%^X14=I* aٮM۳;>q]e}jY]Db7+G]~|ޱe?w~h-(􍂊(((((((@𯄴CC^Ifݐ\\31NwuE ^\mr7ϰz~iXdA9BiGFēeQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@t-NG!Q&F$u=\N$@0Pݟ>uTV~Deǩ?\´/U{gLGهkRmb"R8,^8- H4?-F?lבΟxM:YkT2д7=߃sP-/W=Ƣרw*?̥c[Γx.wq.xzMH}9g7-CۨҰ{+VI[ۤmfhqϩtwrǧ]i[Y7UBOiw5BF*qqkk禞zg440z<*)G*\G^JcuoIq|A:,ުxgNt/ya7q1PXw6Mۤ'y@,9< \n}pywuo]E`#扇P}qRhڥΠ/t똾ˬi6{(XіU$k+ROP$yugR N,OBq`Б޲ۍ5{mԷ\w=WQ$l( va85 {x|$mrNTse1{hͭ\E6;NH8Վpƪ#S$@G̾gKR1uK6< r{w>|] 1]c/!w Aܚ_(_4tvR?0)r~+*ķEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ìY_(wR9stHm-ϯ{N?b~Ƿ炵rtح:s69hq=*M.XM#W}uO-I]O5]ob3EqZ9pŭ>hA#"*2J05YkkV KٽW+[}G} qFn":a,H'Coy⼃XO9B? G=?_ORh@x{W2ۍC(bo'9{Rڥ tjyfJ*SuiK W7Lz,8 ʆ7x=*|2݌wR>=>Sgot5l07s3Kyek&}=bE^c'8l쒍N=>Cim*)|X|ጯU rOS[|5[m9%FBȭ߯zMl4-^{/[a+{_jnuޣe( w*I\DY?v:\^Y鰭żi;emvg)I&и)A`3Tss R-Q4\tld`~x5MVʸ[Fx Ro^k4/I-)Ed+=~f3\F\d%p#keSʙe5_O{uXl]NgW/-Ko/;~%E>XZ92-͂((+t8n-7H Ɍ kQ[K1*Fᚫ@'}B(aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE넵%Dc(o8| olg ")n 8Y ӱ*VIɚ{ _vX.9>^C@Q@Q@Q@S(,g'1֌ح֙'c,\|V&Ke>xObQsGPqX֦W#>"Cvx_f?ZG/z+ڏuͅ#tqbyq0kX{sh rqMM$%Tf[l=/irzNG.נ#Cb-sGcKf6=^"Yx-'14,x3$ELt!;oq{iE MD:~px9E-hhw#tr㒣Oԏq?F(S{y5kX9Ź!`3lԛw[^(4AR#ާu ]"9RGF#8~G>-(la~3W-O9cLF[hzҋɨ.UP/f~^zY~ Z#MۢgW1ȪCqsߑӥqu7G\ K\I?2F$DrO~Ƕ:{Ku>GD5#x)"2:V#״fQEekjmwhM\2; (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVΟ[j,5`n?L9xV5fޑym뎕n=nT`נa׎4RMuAyV7Z.q:C1S׮ZWU!do-%9`3ЯץJ.b5<-#=DFS#Ȓٷd{~մQz呶 ͸K𬟽|V괒]XO_ VTMGGFAOImb(<%rD2=G'Kiiin4[;Dlp 9#qE"}tm SɟОGSvƕ1& sׂx4q7r5+&0*o-D߸/r7A4*~<3£bLР!Yak5R+nWm4sZHUvC ng$ z|j.*&\n5][͑\l!>2dRK GGsxSԴ;PB.|!rG#==p{ܾIciw$~Ҩl1ֻ_0+89%Fr?^֟d)*˸i;3<]zKݐ8ym׃u wApkЁso, :^xsae_!x%O8ֻWOݨSKm(OՇ5kyBa ӿo6Gb4j۝Njτ}fU_≃g] Es[O̞VbQS\Z\6CbP駪QE((((((((((((((((((((((((g}uc'k;w7#tO5>Ivta7vm]yw7nO{v & a;;u=օR* |w/kOTycs'TH4{ _#*|/̴j+t1Kk-- ɦ\4|ux#+B4<6a=#=I֦ٶ4Y7yJpp+AYFH=y9WQI*eoǡ +UrP1^2b>]Y k+ͷy\pIbuc2:GO\U&U fA: ʶi# h z8IҔ\%=MT B( ]4;4bƸĊSvBiK!:gdP CLBwϥ]<ПCt_d5uز $* X$lUZY|MX3ZHe:133$ib^z >TSi{_c?h+_˺۰\1m$ZInʹs zmr1Jդr~GLMG2WlÌtb:wi5 vxSèXˢ݃pB㯠ֺ`ݬjDYo:|.YM;)ZI#,񫋥kd~})ǒ:!P7 kL,)b$_S*XK/A%x Fkk 7[vcsR{]ϦLx 8ܟ\fnFeʴ.2Gc3Z{G+y]xWX~fE(X6~YA-'~]Jո=*AujwylJMi C#KqWJu_wCa}C"OF́SR ϕ/{>ŸR"qBc^uլ2qTkx2W((((((((((((((((((((((((X`[]Ȋ?kđ^+բ;}돢U5&VF~6 Ynx?]fT3  trw˥yʣ7nms $U#(YH 9 9Sy t>v(SE,oÐs6܌g+˭Eݭ RL`22 :"]>`ђ\3cP,:g $T$1#8ޘ*v[oNG1Ӟ{zz2^_jKCt6D|KX'*m]k-$oG=+Ei k:d"[)~]KO#;Ov$U7:m5'Tr?>>.Qrkfхɑ 旍Ggϴ3&nۛ LkgβN5~{8?eb9YT9vYu߿iv}Xjқ ܶ/U{{{r: dK'<[5>QpEqp})DZw5Gk*I}P (o/r D} r}zT##6ٲTɴ+=TڞCC"e:g69%l.B5银'u?/ua:d2?ZߕM]Sbm>Ѷm58S?cZb]7ѷV;6Gѿצj _My]fcd͕e7 aZ;=t.:.1qp(ySw[?[sixBn- o)1;? \WѼPf F#S=Ttj@]:6qYz5>/-N76>e?~:洖:Ϥgmxbvd$!ru=ZizڈA#QTMiصO /& Q:U {l2^ݿ'~;s~Y ȭxV/ٺdK$:fi֡:[T͎P~m3C|' 1[6L- 7Si܌s{&.hK_/A&Pg7CX޳u?Ќێ}9Pj%]F<7._l>11SvڈAsPgRR Hqє-C[\G& vHcoI;>N0DQazӮf%jG@16_Z˯bT rvqL;s!<5irlA=׭)JMW1oմ7V׿te/'ʬc?UE-QEn ((((((((((((((((((((((((إ%Ix}jTb:ȠOctmY.DVRee@]߼=A9=O<x٘6dG B<{=12Vp#w%+pĎA?w>}[ _wcJ3l K/3P.8Yzv=" у&~n:c9^ ՗`,y3$u۷^Vڄm_%1!~QҰ|iW_=Ŕ&'2@*ީa Ο97k_rV 6Knӏ(".eߏTt GEM{Dln> jM]-Rz_'еB\(eA׏ϊkVzUeaT`p6O[u4}B{hv7[U 펵NHC̶o)ˠ(t'>cqOf?]t[eԌk(ĶHұsGD|}'bAԴ1mz-հ?g/GEq'=?>GJԴy!yBO~:(s˚tyu]/'nRtۍnm'APӭqRCѷ;[) kuM6=GFԦf9R9uɢ_FX5tXEJwfMroc9pCBlCUJHo]("l53S>5Eޏr!@7 r=ugE2 w{H]=g.ncf+!A Cǵ' _s8x{E =沵=nc4o}ZU:˯i.K0[GL\oImQ,NyQ YSImK(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ@Ґ@QEQEQEQEQEQEQEQEQEm1W aIkAs2c'ϩ,fZD{~g?*|dzWH#5"A%Y_X I2TqF W*Hul4Ҧ(=_ C9RL!,~W{n>>QgɫDbx̊s#zzJfmos'cx5%+=VU%`pu5B[QjvEp3s=~eu^kK(_ͪ\69. zw9}N8^F*ƍX[κ] q>}{WΕmn-B@u Pq5&/]E-̏;7ݫ݌X,c֚Ys .GNK<;&Q=<Ƨu{o<3BTpps)b=&nKD?vy鎛OUּ$y-no|>,f[65]?zY!cx^`(RP="UCG42$n}23HeK9),r!ǹ__® rԺɝIcۭyhd#3}:W'rH #lFT[m hӯm6oDHށ;X[ݸ~_*N6Ukpvٔ_$vٚ_jӟQ*KbݾӧIW އ?uqH>٦YjSp=o )6@4q?Ƀ?V֕=iYKfgG֮y@ۢcțhֺjz?ޚӺz+cQ͝WI{i奼OXbkZiN=$Fn;BќjF Am/mEh z3?ۆO:n%2DOϟ]=u<_im?BG8jVU7̼ҳZLhn2gwOv9Y[LlicO<~3j}nI:{'AϡM٩3"Оց&9F@Qд5֋qx$7xPKYAhR͵1M<0 N> 6 ۧn1I.dnn=Gi[ &pn1 IY({6.z7ӱ9~qmm%JL@}GӃ_]W3ūYU%sߠwZǒ_?_h%T)5^@j:= WCO֗Y.$HL3b~r9Gg3 iphf]Іb)ʯ-Yӿ{Zh F{8ftL=z>ׂl̈-uaܦ cGAY b[ʘnǸ?Ҭhw^I!ͬ) vVF =:vzH4mRNF7E&L^8?ro#x:*܏~85t+Ǵ{xDa؏Q]X,˧ ?]Ҷkm^Y!b8q؎{Ԛw{6Vy7`8e {%Sw<Ҷ5̗gsF;]g7UHa!5FR$+"C ޼朧Yڴ _pYlGx~Mo/<`8^#HCi6p0FAe_ʢ]$ɑ݉}k;YKVh61ҵ*כo/BQ]Q@Q@Q@tK柖6 g$[?suoPhn9[{. p?m?Z޲qp'mbs 䟮J^ eskY!:skd~޾RtIw\ԑV9y)۴?Nz<|r)y{24I $*7}պv9^8Ӟv[~w$GqT6ӷЂ ]VJr9= 3܏ɣ?u;6.-xʃ뎘:A}~Y:@E{GZ[XǮ[\ڱ'^3DU4_>}}kSA1\z~k3k9.&ހ=}Gkx .;-P{cF`HӐ{{5m g$˒bN;gcW+Et/f;t/"WvL {1֨~ҭc"AU^HuTblqp@OʯjG̃X<\_ߎkU5JKؾ[O0*hwwRi2LzŰFYz=}sکGMB"(*aЃx٘5{8Y{1ZNڕA)O@ b4N}wk[1ncD{rZrNDt{cx眶Ər:HO)ኀxo%]&1|mc*wt"G@$\DPvA(FOu϶tnM(%ksgN=kk`ݐZ²{;@Tak,1=auq$``p?ua^8Yߧ^ۊk^xwR4Kxo$i8+<9iL'>*N&y$`Үhiy=lmcRR)o1&)f#򕹙 I`-Vu}5 zBR[ (QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE"Z7֑*>+2ݜY΃I>׼7 ۩*U?Z|5ΛJ[jpKx]=E3SM{k#JmazH YrFN<48FoM~FR\ KI@Ź}xj]McIJ9:} [N{FgaϖH^;g>r {.hi$ꋧjjV9z <{}jiʐI=v7h{8>"yr*tk;_kc}9_ *罿-zqmsTpN:'NFjRl5hM͙'8FNꫩ[MzД */to)5mN=?PL֭Kz=8Z_p߬_/2GQ̳JWϡ癥S&u;O9h_,VHRܫ ߏ+*}jI4bc\+)~=5$8K[<7-i\ۢ8}*j~hѦ]3EsF=qޯO-߄嵶[&[ISp~ W#cj4(6paO誕dO.V[[{49ʲӮkk,KD a$x՘-;Y;f)WAN2;O O2kJeYR=ۅH8զJ dZޕHϿAZ4;+/KʵS)IN*#=:MD.:ŝ02$#ң473^ȐDd ˤo{qq4bӴk{aզ^j5;篶z=V-jsc:+dQ܃׿OAYzE6zlNOޫ^~!6)w g=ֈr/D>22_l­yz%#c=̀}W$ kNЭu5{;(ٶr0O?ʫQMuvC M9ǯDg70/2۹f#:{V6gg`nϯ.2{5P$`zZ.[BV;y6J{=z=EO&߳}]\ӋXT}VN8ıs1VuVⴷKdQ d6}3\# Od<^Ggs՘8Fw_\욽GHH3yڰ(!MCb[QE((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 75 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/clrLBMu0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 84 0 R /BBox [0 0 447 530] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 85 0 R >>/XObject << /R8 86 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UY)蚘9`J@- !j-\LW endstream endobj 86 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 588 /Height 496 /BitsPerComponent 8 /Filter /DCTDecode /Length 22259 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( *Ž3$QWt0Ou)W e(?)5bW,"G͐'Mj"zØbwGF56>FVB Ve=^94RA+E*u8 3LYl:8+>.n`;% :jѶٰ!S\[8A]m?WqI z>`7"fx]zԷ7@i?[U>~aq@/>v䭱J,S( ((((((((((((((((((((((((((((((wZUbSU؛I][Pp;~yU ŶI#izT:}C4w9[QHhVWV,K؝܆kr+3SvL__g|,P:MSE3ȀGǩ*3^$0ѝǟ楼;}%Y#aIʳi(gzٜݬ}يPRD9 _B tZݼ59(C ?!qfCl7F{=?ϵ\Y:*r@bO\&/53@n"~I=|FHI GsiuaB{ *ljaax':t JYR]Qjɮ%E {lgKt=Oxuh};j3v%A|^qcEyaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEoK7>r@i6L G8iUOWү-<ۨWMY8=j ǽ}R {[yFdVw?ݕvVpA伪M}"IY׿^-S)dmu$H$L_Arip:m=].[CsisVE:2+t*'osu;]oF`X3 yV=9'5rؗJ};PK]:7Y˘Xz+*kgBCi%l1_Y[r:5&;'V\٬<W|T_w>3ʱ^) Y9CE{7[[+eoٰ@?8YNm"@゠6}PiP8a+mSv7ƺ~E?Ϣpʑ#:C/ l]2eMaqji淹}mxH$?^N 9WD|'Q?Yz>gۃNG66=:Z7tF.mX<~4{>dJc{jծ>] ?r_/̹a[Ptܭj1{ŎП9@ʟ{Q?*/ӱ?ҋ~z1EWiQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@jxv\j@F}:~ $V Ӕ>HHۭEGh>X4fyXeqӎֲbmEYbp2c}jJN3V|Mh-5d^{k4;w_N[#W:HN<@4+.m\ vfB4~u py#jJ~k5?moGS#.U8@ nZ:t9_/u !вgFDjz/zqΩ,VWpJ+5'[j^q愿?cld`c8?.c)d@I?*. *c_6=-k+i %WTJ{+tꎚ*Ҕ<mҠxR߶Ih B9+?ӳ.E"QOCaS+(((((((((((((((((((((((((((( <>@>G-흖exݮi 8QӁuR'Hx˸r@<XִQ8tW-!?ʓWv9$ԧm%ֵ+;Qxc+LJGڶɓo{=iVpzD,o^U}~, sCpSWnsө?e(˖x_];ޏn *6(!D\g֒N!{9^d,oI3 ҭC aI_c:~9 nnkc}u~=5(;'!̓_xz;ɬ231BF9 RXk0-&cni5R+6x?R^"IgAh[hmqxQ*oh{'մKYnmb;xOGmΥn]"oGo~'+[ b2*FOq*MQ}nL eRLu+#5 [~(K ӵndDU3Ͼp&u&x7:?ͻgqz]h-AI扃eAA<kF%UU崸P2Z'7NTmekgx=鳬|.{*ՠ.Z,AiZy3eTgN4crN#['_P2yӎ6= _2=ǜd'We;<{dpo%~6?LSM5]_8]i"R\qs/uS ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( r#H2@j!H_ 2vM׮Z\&f| y;~ yմBK1qܲOSw'|ks*Ki7#3rFyh;D _mqʧ5`tBH:>zZi#Eo~U7QSd%_ۮQʺ`U5+h*]h+xb68˧ g$2g{zs[/}c$,8B6=8qV5t)ͧ)#pF~Wt+Z{^CuMN[]FK]R+&6:*Ưil;I$@3R^o1'h]%q֙I{6gzWGHyޮ;_-'BLbd3۱o_SMԭUVQtۅzf&FNNA=գ=9>a"b|`G;OY9Ym#fԴ}5Y`SM9˞b>.[1ZȻu[늫"x~ٵngFiפ#K0?NMz6❯tiXnuE "\GU-6ĖόN6ӆO-$dC\?tBy=ڹe`QEҗR}2CğF2p@36lqҪ\mm\֧ۗoU5~O]5-2[)(((((((Oi嵕:. “J Z][~!wS?.GzJ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( V8^~X(_ejYD.4bC"yzXjVMGk(jg>,Źl 2V:twB$WU50u:m˦|cTcNrcoꍵeXVr?qUKE?_Z xNӷbYԗu~dƓBXD2CGV,eџLhHkiV6䵻Rm'%S'ƣl aed\yף.zSh`TosR\hz[Ym 0{}GV dP>eh{tU%ΉM"A@:LsT4bf52\eiv/Oβ1>cV%ęvAϠ=*8LWw=ө/XU~]55~Fu zcϗŠ(HQEQEQEQEQEQE$m2o+*xثE]u=B;{e '5EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEo*YmcOZME,[QmE]=!wVJ=݅7Hפ|*_Dm&>II<`_\~=GO,4b7 !<~<Jh,e3aрu[̋!g!3Ogt/CKnFRpV`+tjɵANx-@Q9Gמ?ƕѳ'yιOW]~Fu O{ѿA]c L(dQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ayDpMthݑԫ+ } %Q@Q@Q@iڭ*c^ǥfVdEvPYHki;!.4Ѷ[r=ڬwitRcb9dw6w $O;iNxE~2k^o[:*(Op6dQpǏqZm~/E4O.d~W^x5y]̖YK#G)aK/g_QJc[|{aQ/i=赼 j !yDu_ɢ471ʞ?onzlX]u znh7o3peXzoJQľc67PFc dw}uMkI}bx;Ǯ?_sCȚnvȀr__֡oatnW窟OϷI 4Ws{e'^W~ ?/,}ЃZ(%Ո/LsӵE}SEԭewk'e8,;9@⿃ _.(8~48#|C6)~Qzϱ?^FluWcOm~frThyl#yJ|XXn=1S QSyEQΫr ,+Aʵڍ۶_'1^lz 3gj7sjyX*#r:֝x壕r;O*ޮC I~F&dU/{=w[-M  [iʓqzu t맂\6@qh_CrYA((鶋wtFU*kKdP:ހ75M{f0Ѱ]IGsKwл} QAAEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPMڻGt $ 3g{V.//-ddRF8+Cպ~5@Q@Q@Q@\ .cTJkJrI[12W\!$d$A$lqקNh!%Y 2a+Kg?\v,m,Apx:7֛zLYCDA[}i<[mʔt4Guqd|zma=O޿R-}iF%S8#R%:ڂ7`mY{P-r>)Y-Hxk$hH:0 \~cDҦk;YkcӞkO{?-#m󙴻'?㒤?Z_!K@lzjZT\MSJ%#;n~$d_8W x9lӤycW=][g'c_2+˯i#fkv׸?8<<MR"ׯqui H9u ' !_ΨIɥR drh} r)faX\`+JWαCĒjW umG~5^+ qlO $??V4]rp@N?zqj{fw.T)gB1$T G\쵯ejG83/2eŃKG?U7jp8#5h?vVUS1KIrVM?jz\[.3,Gsx$PM;ѫxU-M+ki)nN?*KSܽ?ϧZ敏zUI?ByÛ_;4Oom^Y6⥵7˦e?md850܌3zLr qR]i~硔X %8CSqHH"QuA.VIm=ǧ>j-_4lr]~/~ks_q#"Cg<āީ=1Se7/K#OzEF 9uC|~mFbYZ5uoCyu_֧4~z#[4tLWCh#я~4iu)Sk+8:c#p|gsМ<Ӫ7췉+~9^n4tЫ2 -ms&>7x㴢|5=ygqA>r'R1 C\:}rqFEh|8"Epr>ai_iu0)"rDهRWd%$t#=xcj#$dgG9'bdd .2H_1Xi{2Jnm̀؊C7Q-9-`!0|2 {wVBX6!s֨FCcF-:.0uTf}ۼydH:ڀIp_ j@;[$D[ЎH`XF=LJ[-~aӟAc#슶JN'џn"1Ҳ!) 6Y@R~?NH}.6"ųG56&xu_fXkv{Rv:m/sz.&3ۊsަAΣnyqQ4QBN}}?aQ࣏k-+KUX"{ z7_LCӜKM˚g|g Q" ]\mG6z|G4|>7⊡-elu ۡ<*RY%O5̠kCwzzqLuI ~_6Ooed1?#Hdr2?1i^o\?tjGROyzuj|<4h~a8[sttGtsmnU$Ӯ$*9t|gN6*^?UA%ձ,QyOQ4佻rdS [pzA?")۫cpAa1tnӎ6 ުǑT淚~ߝ\U+ԊؚM>edVR؊tsIەV2dkԣE_kX'?9b&ĊTs(+1QEd0((((((((((((((((((((((V*r;J(Zzذ0TorH ;Lq3K^"T%f\h,(@Irx@ :ү+"s?zcT?jyjpQఘc30Tu:۹x^:n% ߖ*ʙ#<z~;ol>dsWR ݒkOEcQ%Ժ!Sk#O:,*!yǗs\sRC~g-2#v~8*OHVLwdE+ϡ&ך'monkDRM.`bM?~Uwt͛Ip\?j|w}#\V1JO1Oң/|;p79_錍n~+c"Qv>TJȸMB=XOb7V#g̷c銂 UmJ/B0zK[#=ͫsϖt?U$M'|y<2U$I_J~΢n-qGђNLUEŶ|Ԣ/W^خa0q?ϽHl5^21?a qW]g 9mѸgƭAOD:Uywqaʗgly(kZRuS̄ cw6ݳ~^h2q?<.RD(ñf ?i9nuC[ Wbܦ;|T;kZ2"'U+"{/z.lHNT6SlnQ .T )}*f(2(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU7Pkb"x\"QM6BTjv#*1g-a 21c?H${We]U#:We$h$l ~_q?)>%Sj=rhIUa;<s;t]?VftW%8Vs<ϔ2㑞Nfk/JExovдL1psRwΓ/ I '~kP{MY"8uV/'=/:Rƞ!-&n?|@:Xj%]帱V`WMEW3n#88?qߧֹeBj*N/24"mnWOmqmVw+;dMԢ/jN׍;YhE&tF@*}ǽI},Z,^!R2G`ÿTsjKɭ?&%𯇷gTt/錖dSj.5XyRU7?֣^MŞN$9~4AwГ!H=)JZzN/*ڨNhotk1+)ʰyg []8sue1 ]I>nO ܲ{PZ1qjilג\:Sz>ז761H~?&?E~-UȹAqlp67oKqG GSB)O%HT;YmWwŨW.xqS.t͵o:# [91 㡦[]Kln;j_4 \G]sK$pj)C)S5^:V95tUc{6r% qKn@Eths1$I9'UhƔycNZQ\eQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@9FM*4{Hu Ǘщx`dqkc@vkܤ8\nѦ"T'֚r0|oC} DOaV$eˀG8<*]_c=uCufx1nd{xXÀAלAT ko+(iwYE3C>۾q^kKVdRO1ʾ]nW[^Gvw_>i4"̄VuG V}j09U$m '9 <\d*=Ʀ{[{DQ~Ic8?\>W-Rūn`F #6ePT¨6 t!CDqmM?YV : ^]6ȺX/Nk'w.ۚߪhOh-rcn؏_+%.ѰutM6<\R2G >r1w)shUk |,dH)0Áֳh\F'%S'ޖg ^3G]4uM(-1H{eS]z&;KUzZ{hb neF}Ei"`y<T eM;jו עimaAG$}?5#+t0f#nϽC5k7q4JuI-*ᣑNֶRmuw0? M8m/۬$I#k&Glh&f9$Y8> +jtynz*Yrsrj*pv'p*QEQEQEQEQEQEQEih/R =JUnm .O+RoWkOO-u#@=r+ C_z:yGEb? 8`11zzՙ lX(^p랿OְT8R:@zlךۋ< &ѕsDd %GfQ{^+>D6%aeBv?+>jcT ['ǨYB"%e|uFǿZUUl8 ?5Mzn-7̧ڟǯ9Lm줼L8 5Gඝ.bi2KH9;NTqڶu}&J8G>WzKs|'NN?=x7\h,"pVXf7ߎq/|K{vͥΚxH&5v{}:~S b v_ʟyO3ۏ:J+cGu6Rv߭tk/4SiqBc֯v}y28*pU99毮bݶ٢%K!)qչ ^-paÕAd_֝88 zzqލ{{G]Bfw]G! eV4tAdCKm][̗QHÜW5< !Qlb]I2?fd"HʣRKev)fq(I#*růZ;*חX?qCFcrژ([H8?^M2dJISk`Ur lY̺Y6>hG-WCyu[ V2F#HZ]ԌG2NJ֓myq303SujAtհ2rʤ+:44#esN\Һ5 (aEPEPEP->$7oaOSQ\[Oj.!#!dR׬_JÖA130P2[}phKH ((((((((((Ŵ" P=z{60q89B)MDѱsu ik}#{q-)$KMAEVc ( ( ( ( ( ( (IT`𭫜[)!ʟFí]U܆̍{SYjR:h\G=JqԳH&esΤK1W`y̙Nqrקy#ur񴔮R2C ~Ye! 73ul@VNB@S.T/$#1zo>qy1:N]LJ)#Y u1}QUڒKmC1,c_Q+M&ϲq\`?5Jۍ&x_<aVգ$(DIdXUO@s@'ӘIvzDZir㪨=W7j!rYU;~og^z)o{l0?P\6ny@9=U &n.GsnOk"9?<})\iy6vktEghֺ|IDvq=L)4#Pݴ` J?OjGLH#eɜi}˄}~O/iw;ZJa ꧿oӽCiEoǗp }HmmIlg(؏󞕓uaxngGT٦0ipvwOns%._hh"4B-r7$G?ɧ[eplE6Vi$6Pd)`tK FI;3K[]>?N&jsJg׭_mm"s"B|I^~TuEƟtdao(WM9_ [2jrB9M[RaF6]ڷ+75~;^]3lQn3{4mFkm#UJ uW2O,ʚ_渆Ph!rtHt8f[IP*Я3= 4"6nf@rjKIQ6P k$됮*򬱣ړ[cjX_;%CmnHҙ-w%$ˤK3Ȧ+I%ԧh|3q?s^d8UR^=gJ4Š((((((((((((((((((((((((((((O% / D}G_JF<*HZ'B1tq}*.sou 랟 `EHHZjmo?1ɘ\vO뢸`&0xC휟ҹ]|RVO$8#Qȸv sRdRb-BM.!'ݿ;:ݣYn\۪?ҪM3l˃_ҵ5k(Ky`01嗺]NiF18GԆ=vy~jW&)Gڴ U}W]m0.bcwߏ޲_ 8Y d\A?lT˙](^ޫE^)/-u=F|/P:~5^[%%0)r>޽vϤwr\,(TgZ tտ>ZQM=^Õ5u[Qu=BSPVJwn8g9u+6iA_1xpG~5jm%ػX\%ӵ-%n3'<>k_|}˛J%wX5/ c:Z6N]۬q9I<>ˉvTOQ}BUb8as)JߩaRmj컚&{- oHVhQr* ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (;cܜm}%9AqfIm籹 <:xUI k'+rF0W8(pM/j3Ev]-.p:mbPH/O2}QSbCgA--)!/£}CH>eƜ)7Eoԟf~и-foU#GL[Nv\;xQTkaqN ((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 76 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/clrTimeMu0.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 87 0 R /BBox [0 0 452 530] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 88 0 R >>/XObject << /R8 89 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UY)蚘Z9`J@͌!j-\M[ endstream endobj 89 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 588 /Height 502 /BitsPerComponent 8 /Filter /DCTDecode /Length 19758 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYL" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (Tg-ZJ(2FʖRoZ((((((((((((((((((((((((((((((((((;;u6um=Z!'큐~$s([|I1it{8gk0[PpIE>q%r9+f.+l#Yh5'UE)uܡycmq}OR8"IVtˑ<'8:],)@0\-s՝ji[++iLrT%odłAq U(F_v(; Σ/69F=?Y9>T;w/娢=`((((((((((((((((((((((((((((((!40!ڨ8.ԛ+X=@nhK}ejE3"p^@ c[Xo|«(3\ ?JR$7ΝoJ+"YT4Ql#QU9h7 =G"~ ܩ}M_u_V r/r9(MWciƆ MrŮ]ޢ4Kwk {[AdCʞ7 ԣ.blRq=[R-yyٝ?Px;s3ꧧ̦m:Vϖ?SOΧCt 3.Ou_NjG,?u9neM v5$r#ā(ћ~PѸ@>܉G0՝M$Hϙ/QVά,˚Dev((((((((((((((((((((((((((((((Ys!8$aޓijɔU%0 \CJѻHEfQꍧ&_$Uڟqmo}ie *W;wG){{ax;w~#']sb@zK+VX_HdBdgr~՝iiÒM77tnf^ify0Ԏ5U4GCI|itNԐ>\*}7y7(?PG4׽ˑ]3CPuX%YRNߎ?5WD wgsfH)L&}{tPEf$"1*>jWr2~q0/G5oj NPQEEQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@AOi8I=%0Q鷺vf-J(elM4Ab~P9Oj\ .t GM;Po,ը juSɥn :ʁק?҇'lm~3I\h@BѷnsU} KzJ_/P\2# ?j3]nkqeq=q Zv۵2|mDxuN]6{yH2[\!Ɲ{2v 6l6Vdkc*hkx!YKK (4 ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( 5(FRZCfg<9`VJ}I&9_NN*KmK}Fu*CF#ssݬ<$*F}N{];~ERri;/fY41,mB7=;ڗD"A;cߕ2CBY?yhZ'mn2H[2J=sɫ3ո{`14e_iZ֟!|pǨo`#oTnj"pUdsT་rT5׿3s5s_Vuu}#肊( ((((((((((((((((((((((((((( Vb\1CWuiwAk$ R)^Zfm>/9U,Aո٘_ăsYR^Q4U#mNJICwNbl`zsVu㍢ nԗzΥg{"c/Z|"I[/um3=}RǨ4?Nc`%E݁=>5KipPXsvM+Jr^ooOm%ܱzo ױhN̶ ߷t:V-`ʗm$ ߅7Y8⸑JO=}%7f!'d;_,u{ao dt8g ZU5z{nQҩ|M rR:EΖm[}&~tP›eFt"^\&OmQ j+xbxFyJk;[20 J+k'Wpٺ s;[_O?FKvv< 1j-F{| rFA?LceƎ'=ID~tVe0۲Fsu/gBÑo+)4??s!+>4@K;p0t#*vjY8n{7?J$ݣR/_F75*˭o]dM>EVEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEidT@Y B)L$g_U/YVݶK:YݴiۢT:4s &xVVj3V[KrIt෈=~jk(o#/G#E?/* Ce!TbJmvznt{3,/j.Ȁ 3:3'VewGBoLjjhg/8,9P?U6Hn6J@ɀxq|k.ˉ@GP`9ۮ1Ilʗ.d#x_UFQIBMĿ>赑Z%ֲ+zÏQQEQEQEQEQEQEQEV^e@E~D+"IwKc#d G7NAo{PO $2#b3pi=.vi683PPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPW |dLQ #f '_$Oуın_oRBlmkVĭW\[jA•*[})$9ovOT^Md]-7ue'QZ5V֓J?֬#TP=埓sP~fBКvqLn\֥q^M']m ŭq0Džr23RMAm1]&Dv~#d0hT JirQ\tl>CTP5%]]Z\E)Gx- k1v] #cjG5{iG͵ձ0k<&T4?|sW-:fj]wɜH0R:]@e>j 3}3֛usqhVkI[yPOQ58ϻYd=3>8+]kn6Lm-Ϸ T&=T9H`_$z#pck]:I璃ˊ_* G2p?9\K9"ES׾O^%!åͱ9^@UI.'iHϻ'm("?vX]}mj ]&Fmdr0ȫS^o>u||`X\q"6md\[=Hʮ[mZO-0c-(3QF{Y zJszqYHd ?bԕU?ΗVQ|s.A#np웿8=jIImNHQHGB^>XI#FR7Ȳl\+ T?Sq\44o_b!C'ӰWfrSᑣJiAEPR[2c;U.ᕮ%dL761LPJV( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( (4=fC{T1($`{Wu] $"4sXk(((*{K"BXn_QPQ@MY-݋ByW^ x6A*Zmu%|*zjǗmyMKM[=ś mDcޤm'~k=A {Tɴ<JV zw%(W%$g=!]aڭw//CH2i{?J :sҰ7ܘ +!`MgʮWC{o` Wrv_De;fOzSȒC {OOQ?t,鎇~]c+p{Qsi$'mnSRy +7|\?u0&/ݸ_pgML)_>9 ɲb&'ӯYdbE"wA_&n[G8l@r;g)%BԂ_  W(:Z.;@_WU,).N]vpjS:dFs3Q{}@d9ҝQHHwEG$Ck0:fG+ٍʟcVp$zV3p $Ly" J&m{vr*+1,@V_2zi^0*EUL熍tP1J{Q#H??ߕJP`mRrq H˸|cٿϵ>O#RCFR{~u$6Dٲʠ)$<^ioCcױ>23pҥvd-qQ;\30}7v0:Hx?ҜBBA(<1IꟇW?'_q<\p=}ւ0_<Q{*LűL$!:#8çK}rpe>eLtUHK)8d{w)$UY&-,e}$ VK۟{mЌ洌{_HDlY=G8]uAp:oOy#0ǩ[0z*qHsj e)rm0Vnnu+@8}y\Ǥ\-nG7̴F%dqU%>d(ISίdG9eѾ ?Zs֑?v3Ou>l `H6Yϱ|o=Eie$/}UO^5R/8It+QEdQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@>9d7ee'mSQ~85n;$#-5Em󏙔ŝ#֔W<tRSo2r$gA4[X폟leQ*0 &1μi$~_|lZ3BTLIO_nZ_޵ȅT`\/̞f)v y Ӯ$ym1pҕ,JHL16{鐱T{-孛ȿqH=ih3\Zjqg|}7aa +4LqПafCn֗_FƔ4:%w*Iu=jـICiE|NҠ-6=^c @ଋ?ϭ$WygDx?QE=ueB_ۤˌo ?W+I~#ZKǛ9Mm'Rw:8aNε.nTEQǘv?E8hLT6ky}H!a&lzMp]!૎&tCs~M,oSwlpIK[cq''oGٓҩ֜cܚh{It9Yhp7n_Fs5$g={2$м-=cQէs&vaEP ((((((((((((((((((((((+rE4<݂xuݽ+GUkp0}M:]Qx :IyʻmK@'<0,}3k\NW.QXMe.9ʭ2CpFmo֫.ƪ6H-FX=o,pT^T2峳7RL 5Ə;q{M~]Bv/Y? ;Ͻ:܈uk_A}:U :ɔ{ Xv1 cj5hmFYGOqMcūeUh]u]8:ǥB[[N^Oȫ Ze<PAi{6:mxN4ա]y2F:N1k}q}hHe-[?QiTdm=&I|L(ܣj|F:kgAK 6k)n&ے]?QZd_*+}M^GЫӧhsOZo{G_ב^MOgvK<~ZnjRPŭXUTEukipR~?S>^9kW2;7PQH#Gb&G 3[HW۵\eA_z%8_d?)m *>f2.,\XE p"SОd+O*}E1ѣr0èS|1;}?=+-KtT*(((((((((((((((((((((((( Sg`s E]׾?ªeML=RٹtCr#-&Ny=J kPLK81 Ta$pEvTN>3 xEeWhTrMF\ 1*@9N&+Džs}?Jm`0eNO!\8]4/TF#J4饷u |A(i8qL90$RDz};쳸m(cXJ }t~Zӭ! O;H}R[&˅r}U`T&$WޥS`$Q+Sù^jZPg|/!n-DWڦo`tU@~sI-[ lXTS pswSȅVB$uKo2xh ~u?E\5Le;XøSMrzM{d27ue?B ]rn͏u7aHiWEڠ'O2F^.i~cnl'yP GqZgIu)v[n$ʉC,rgS} sՆ'=3HjYjCG_wv!U-I0=i)){>(ŷ&ݭ$W_SUo0<+ȿDǠΫlFpqҚ[LC]N7!"5$?J#-#%5=~=KCd_a= MC }"#*X ?2έYm$Hѹ!we;To}>eꖎP{Bcq[/,I'gnx<[WF__% F2xc*߅sօ8iFW}UtQKRp%,y?hX~ep@y#=ʴJcN;E:{YDN 擋oJ;(JLb5.ZJbFLgW`vk~dca{HʰC+[M\|ƽWԎp1]ǜm3E\({qTWJ#$*ZN-J뙯;$WnGo3A(aӸX+s<y@Ȍ#K&27U)[reWA3703 ̱2J0QEhqQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ԛ:}hC?5~؈RQ 9˨b}A*:ԳQ m6g?fvSSIS6(QEQEQEQEQEQEQEm]Z7è9Z:U{sJ-HvdR?4p:4Zrk"80g=AפH|cn8;_ZcgvT;0nr$E?1gpLkw[}Rʲ#!)dZ~x8*==qm+=y=Q![3;v>T,9{YGuC*k-HY 8a*.Dd`޹Cڧ2_ש|ZkI2Ea*h!3*TZ[Hެ!Fv  NISʟiՔyhNs쓼Gki҆Դl}~N()oB-oA3^}wԣYuZU/f ѡ,$#%X]0,?r.4Ki1G#PAZ&౼[͎G\GO{Egu,2 X' ֍>g$G߈1M{ 6O5et-m`F}GQ~ܪt+GnkLOA7St晤I7$g[k@r\* $䜓Emdpթ+삊(fQEQEQEoSAԏ.mo{9$o]"L[b̚k"}7\a$z~gT>JEva}U |g(((((((((U;NjErCQQZӪ&},P#imߍSU*9JEVc ( ( ( ( ( ( ( А4Hp9BB2iWq|?*}pX3> >3OlӃ?+ԼU/9e}zln)}~>|qT+q].W_ ܏/!dMkv@$^ tr2C!GnrTS5Q_ݶG4Zj:8 e$>=-Z )boCUR&VE&D玤zZt zzW,uW4NmO$dj fC2kc2 sП6фw eXڥUoG_̨_a$gAbbbA>S."I<19/FO 'U.Jk3}/t=jF ).,U%ųNˋ s7d@犂D JU֦tDyOڥCNjTkZo_*܈[3 E{lmg+CʷGT3$bMnhʩO^M|,n| 8OLOf1ͣ:jasnE9Si!*09D>KΒU83K&8%`?#%TFN+(NO$IMIƝ8jW (8((((F$nC+)t ֋xV{l俞H%q=8y3EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEJ"p$zV4lgYt߾II˻8 A?N$GtPeENhpw`~V8zcCd/[6TKo0Xdڤ`F8Ѻj63Gȏ5.Y4r[,"vVDQjAlel3׸DTsB6C+[IaIG+5GYK~_\=2=ǽ6_.v! {zLb2a m{yclneni~]fT/_a֏[r!qܣzTE#Gu?ȱ}ܖOnȶvi<])F C^mzѦڧ#5Ef$_w'zHo5h[Ma:NK<j"EQsָ"}ժgMHF^KK\piqMDaUdOgW_2"{4MZ7jdġ0z QQMGYI%?ܷyh&X jzu2P9ᨰWe(E7*H85qRS0:ZTo4h]i94,fK*C 7$SdUhi; Zۖ?jkݾ6qr?&J5R+t<ʕ%Q݅QL(((((((((((((((((((((((((4P- ( O vP>j|+Y9- *hd;3Zz~I{7/E{"ܴ,嚖ۑ:6ǥC}T`~b֓$o?kxmN*KUu [2 ?UL-7(MYh. lӦUg|+}=?t,}H+k>S8'o:{EhHMk{7 .I_qOFK;VP0 隍&;x8WՒ哾_M[{_}Btf y,{tVm緻Hys=3`S 㳯@~?*ؑayN`q.6ʚũ@buh|/ S.~Wx%\n{,Bi.?u s5f(E~_>⤚dnة?bH8?V;IݣWEA1Vm/e\jOsj[zʑVn&Gq@#棂x(?JmΠU!USK7JUewVQR !p$/aYdI'$ҳ3f$M%mϯYՕEUQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@l4sĻ\Kj@~~@AwI$٨uO̻&'W^HE^է0 wǗʚq,1&Nj}6r7#>WtuRo.!%q"|ކV ?os"%Xxb(լ]7Nou]DE9}{:.30bS-n9S;si];5SﴗufUr8Rz C%lj윺{}婭.7XE1f@'ibV%Κn;V$Icgm׃Z=*|S*y8as*8XHH: bmUy%eRMi_yj[y*J`di\qFSqT^wf"FP{Ҡf,rĒ{OLn%E*6ƿUj(RKcu%7y;QL(((((((((((((((((((((((((((((({Je 6$g;$9qܷаog(T}@rTRQBIl9TlVfc%4QLŠ(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( endstream endobj 92 0 obj << /Length 1648 /Filter /FlateDecode >> stream xڍMw6_ (D}d떾u@۲WYHNfH  yݾ'd4O0饉 "y7BDW_o[jenت ׆ж?jzyArP$S"n()lJsmF 2 +CA=ʆ9:1`ںUUCpF5rRfZJHsm0iΣ^W#7wj3!- ;Oɞ^N5ے=uQ]m uH`Ձ&g^JRd~W3lUE"6hHt͊V&i\mq>BBEU`Ot?BN,ޡoٿ3COxq=*H[g?6A .rH^$ N=u80L/t_>> ZoKk8m!¸0IckDe՗@ǩS8W罫]^M5 ""Gk1ߢKkHN"v b~icޞH 20w CZaM7 }klZ׀nkMat,4.qgvt@ 2˩@i[`?сaYQSSg)ȃ"OGraj)yiR SCB V"Fv|!=1ƒ&k„`~܌\ŒuF`2TtD괆D7aç |2]!I{bߏt.\gy_ㄤuNn/:d m)Ѵb(56HuZ4kn6vmtBtVrak'Zʷ^6]p?b\$΁RK1Q3fooqsRv4mae= ~TPa<π"%%Y8zCh6\X ~<}?2}$̈́f"O^"9蘿PA {9 endstream endobj 95 0 obj << /Length 1627 /Filter /FlateDecode >> stream xڝnF X or`9MaڦHcΐzXJ pv8;;2}t+~$`0E$8^qx5^; 3Q8ڵB (~%'Ju-7pH_.^^r UKġڪ+NFw%y[hy8g@`L6)6`@y*P8vg[鐲=ԒQVوE`Bgdt 4zFЮ0eY.tk hQi4dS^:|uNo'qNq0 Š=}Κ!2jeJ ,F x5}fG)hvS].7 ِ(Pec6.iUfqݑBtTKuG0z["XWY g[iڞEk"ECb~uO}UBYKl $єgm5&{ "U*?MK|J̛Y͙\vPY6p jFE"w|[2h.'ڑYjd*SӇS8 mFx%昉;ێsvW̆.%I&bM [CiQH]_4-V ^)J9f$準f7C1 Cd Px.Őm[\by.X,u+9lPr!gPY߃#˓~UaB @1V[($ʍ[yl^F p~Y@> pОP'Co1Seq"#=rtz~uZ % M Ew5_D߿J뮬ޑE)ϘtɧT6m\˪g|=]K;s(L}:Ҕ4Ky-$aj>Sy?aRoBSm/GgLr3<B 4'Ӥ[ČB!48 "y_UZ;+p9YF΍㠠)}ct!Vn-il+֛4j&FGdF~)F~"n!Ciy4F%dеqXX͚Y!,@ddd~'{6-vmI ar {M4- (Lyuv|'.˓O H;Zoo( XIxt5 Q+Hwn~#hX]!`4Gj71eB3/Sҁ'(_#JLo PwTQ0f;9wr q?WWO4sr^O_Iu"# !=gxht8=&{ތGtz۔_]fs|{FipLހ[K< @,SKଖad^/I+b5́ZɞA.^n^RɻX&qb@oG&/Q,<ωFهl$ endstream endobj 99 0 obj << /Length 677 /Filter /FlateDecode >> stream xڥVQ0~W& KAP/ջiSjWh9A$T:Lۉy4RFfJ'*C/F_v'v{]U{2P jn&ߏ~_%UPFə^J&Lo}-g9Ņyɦp;%A|M}a8RH^D[OUq=̧wrlՂ/oƠ$MƬ]}@"QqeN yp#LK YDϖgT3P!I=Y7 8 Rj lQ,G$ F0)9v-epH]DPgHaˍdA> pax yn~oI[RmQ&CQusee9 !D$aVRALa|+a跓A\2Wp1=T>'[/jͿ 1ބ;M3|jGV#'sa Umk= A[V^sًGUPf`(q>eIևMķ3;xh endstream endobj 102 0 obj << /Length 681 /Filter /FlateDecode >> stream xڵV]0}W̋&!͸qԬMFCA@qUہfZs=ĵlO{ͲLv4v@|Qtv;^m~,4[t1Eqw Ya.R ݐ#43^xƓYw]!I"|BRu{e!ѫKvg_-na2O=}^?h(MNSMpV*^ifpBJK -Y5q'8:Ы"8P Vت, ) Oh΁*KG ‘``8-XY"WmS }?NKI,i;2GG/NiWPeEy(|goȅ¹8" Hc!|߽(:8H-8e^ߗ/Us= <;x(< 'HgȟF0+ \b+< d)IJS% T:·'yD6sΉ*+ [9>$q7\Nd/1imvmnqWaÒF LPnM28K\%U|f|'VO⏱j3>34>m& endstream endobj 106 0 obj << /Length 525 /Filter /FlateDecode >> stream xڥV]o0}ϯD*MI}W4M4u> stream xڵVo0~_D&$6SJ=8`Al'}wwjAlcf\5YS.q,ۙ^`f1Il2q)%^r r>R>2mF,!|L2W@i",xH}&^ZyclޚLL*hss$dFEi*FR$y='p~X.O~+Sp@ ; [YA$vDi}$7hȈ:LISW~UeZ,*7 )uʲatZfsjߎ+kZuMD|;r5:pyQD~XOb9=S llN@n@4Zƴ[=WNLגV[ jَ[=bYG^|/$HD+o5kMKͥ>֡gVA+oĥ~/Ҿ}p,W|u*r> stream xڭWO8~篨Tj8IAp{nuiRw?B] {<ϟEF,8Q1{ " =ƣ4c19/rO,48# 'E|.nN̩i(|sB[- LSR̳Vk4qv@keUPq)qIPbDd̴|Y腡 9ܩJ\D!qmD~L!'+)ݼ\PR/}Օ/],$Q`(Q"3Ǟ.a@b=C#omQHGFfx0^ՎWS]*qޝ :PjBNh" ~ E^5ZH #F̧!̓cMO]zEm.hxI%__r.~)}gfW4\xR9s*pdKK9'@\kP}^2ϝ3LU}'t( !.URЄ.y.Le+ʟZ,0ʡyjMׁAhcVI{]аuHf:NZkomD0TMU X|h Tv(=8n]=MwsY'\*IMOl&דV U ?r<(%?CnOzW쎽 Z\W bɞޡzP>fد=w겭bbVo@i-<'bpȩ7\/'lc ?Fz 42mР\۷C%kZ=^.ԽLqUʹ+ lr( 9uIJ CueSO& RSN ѵ)ZE#ħrcUVY\4Փ]RC8>-s]ے1>D/lo^ج A7dgF>ut//o'1;5Nyغ89;A?_̪hVσh}YیRb/jks49<N[^ZrG(mq?yWC?[oW' E2rCPCdzƵG t endstream endobj 116 0 obj << /Length 488 /Filter /FlateDecode >> stream xuSn0+"͙"ȡnb E]|zPb%ୖ(@87HNdfPԲh^(Y-ݮ~)J&O+JGFqB@Ǝq#xK$kԛ]1P9jk1{`u{hq7 vcNחqL~ِQḭ4&3DtrҘ5hU6](JRu c&mQ˷oXgYvw/7K'I_hiH6k׻Trܣ*(&pZk}[ Jx<+F9 Ln{6.713ˇ}c.fW  oFܭ4*hӇ}*H\n\N>R-KcuuyQj2Sޭ4Hm\N:5GgD endstream endobj 113 0 obj << /Type /XObject /Subtype /Form /FormType 1 /PTEX.FileName (./include/emL1Sol.pdf) /PTEX.PageNumber 1 /PTEX.InfoDict 117 0 R /BBox [0 0 494 609] /Resources << /ProcSet [ /PDF /ImageC ] /ExtGState << /R7 118 0 R >>/XObject << /R8 119 0 R >>>> /Length 62 /Filter /FlateDecode >> stream x+T03T0A(˥d^UX(X9`J@- !j-\LW endstream endobj 119 0 obj << /Subtype /Image /ColorSpace /DeviceRGB /Width 676 /Height 548 /BitsPerComponent 8 /Filter /DCTDecode /Length 32905 >> stream AdobedC  $, !$4.763.22:ASF:=N>22HbINVX]^]8EfmeZlS[]YC**Y;2;YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY$" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?j( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( ( )$pHZ^֯0RHжb<{󏠬V6lŢ;onr*4FW-x$4~L|+я2^`s*s-^O u2ZNFCVr(#<7AO*K O|1ͨug^79 [ۨC]Z\@#eWT+ҩI?-4V+aQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@TA-ysfуw ~{Iʅ 'v@?"4bLyɨke59K.%M[QӇ\w^EE'/iF9]JE6cjicpywVH2z@A ls V񞾟?hz"c3nOKUn+HA?49$ fn6R:OxO`_ʅ7=y뚖x30TȞ{zsW)/*mh^gvNzK!ţ(Bbnl䲌ݜKH׵-͹H{Pl4j%ac=?+Ӽ%YV\g 1f^=Ȳã\5{q? t؟ W=C1"/-pTʏ6&cS6(\~y!rLɟ158 K1{CզɯOrTH5^k 䍚g;&^khEm'L[M.\l%???u|JrQd$yIМ,M&0=Ko(x巻Vj{m1>eux?r־#mXs] _[$ܯxJzh̻xAPZl@W֜R[H $uI?xs?n=|m 0 _&?*νNhVm2u_Xϖ'Nݛp}tߩ5dExmߧ T"Ʒ^Se0psΓ1frSG2·N(Z1`3 ~507]LjF煴mJ= r>`:ʹܦnP[o8U_#,{}x֖ł+okpo E)!.0iu8>O˼zp{Z9}n놊\e~zsUm;iln& O=;{:We-VKcΨz{M_[,zn7Ў^RhI^.(`QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU3NoR=7$QܓWwiFɕP;cߠqwoQx.YaV)1:ۯ=xiA.m\ȤA*鶱E,wJ[)&5#5~$ԵGUH7Wlc~J՗NXM^;!01t+"M|Pig{m? lnOW,;xzkqp3:=8?xXnF1@L֍42sm Vk6=:nj!5G>tc?iz]tY1?3cAǰ+]щgqyptU_ҷquB7."Z`G_7?fִ !HY@~ۧAǵsZ߉ow!h:ŭVmqO[|IjNL!8rrzEvœ`dETvw7 4(3s=vVӴ~ r?m=cbi[[&>_.Y N3']=n{ ,yMO}t-pB][Z~U|U]+G^ti̷m֓vwo ܹkf9f0.Itj̶'_lF0Ts'VxGEGi?_9Tv)sGo?F1N?ZҼWX6`@o뚎\Q r+6Bz+z5zZ?]w5̊,.%-偲@ޤgp{5`Ƞ 9u6>6/v pNTw~8+ݨ'&F?qv3P2Uqzz裉[H{=i ӵGMa\1Qr+.pդw$u]A d鏣Gj<41H[)ǘN+]'_\yuGZ^t_6kCc_3!F#u֞+ӵV\C>59mvŶ~;qƋ{O*d}s-E5PmjvI,bSAuSh3-ckjn>%]tz>A6Z,2rG~rԢFv|+ۡ;eCyFAp9“a+|@jkK1Sۗs:o~_Uy͍Aw *WG+/c|7P,wAItnnqҸm{ךmCO}8uahI~ЇQEwQEQEQEQEQEQEQEQEQEQEQEQEQExw38V[/1R_GSN&-:3e#?ۻ4P-aI*,kӏ?F)ӤmE//xVU3N߇MLco겮$'=ZvєoI'_Hү|EF' >)aԢT뼼DmXFgƽ\i ,O:#9)a#h %&c+i.%ier$*\˿7&'3\+K~[,eA~Y|3q8\;8eϿA?(-Ɠ Ci)=ϽkVoa/>BK-!Э[MbU9;>549wcI譨aEi{M(V|7sLAb0_SC?4uFebӢW Řcԓɤ''}sv:> jL~HQ IOL=BaA|ma|G"kk>4f&-v>S޲+4($cs&aWme'X0w{θ 5|4*봖n4m×:,i۔>bWgٺ&l QdUe}5}>r(G+":WkFr4)z+YZ[}Pӱxhf%c o* :5xkBS֒ ~p=G GBs2AON};s5J/c_w}3Y-ff Zu÷Hٍ oXX2r]H/Y#mJΒ^C6.iڮ(.(AW佟AYj]s0 {:K4)bL֒ˌ==3tsntmV[y}sTQuv]b!{ Ez޿Z+WGFrbcX j(R7M;z8Tw_c+ (((((((((((+džbc=I :8Ϣ? 6}F|"51qz+iJ^ƛwIueۯޮ ȣ ӷ;Vzpty|ԓܓK[x?Jϱ3,@;Vk۵E̳FO,W- imMmnޤ}ޱ-&<݉V𶌚FXfYp$'`*O΁ĺ< tg y.fyb9&oQYf'$CcoL};d}*c6} YNNI 5BÚbW$Ov>&T|O]ėVSF #klY5PI$rOz+jcF<w (VG5+q1i1z=Jˆ'd%$WԞS? n=:݁`s2G+VQJ?[yyՔ|Y D43qI9&օч,DŠ(3K]sQ@a?Bë{㷾}+uEL]oFbaҸqrhGo*=wHD*vYTQ]piF+DKw (i7I*J"kU~=>^R(I%va)RqN_Y>E_cI$zUv_} ].wUitRE4gFÆ*uq F&JP+9uCҼIj#LExݎ9?jݞ)AecFx穯/.rs3՘- \AH דS)|Tekpe_(6r$<\=9$GA$Ii'޹o"Pҭ9?qst;_<\^MKy\'O\XEl"rEK.B췈"PSJ@q^P3iy~&)~DWCf$O*)ʒO WZuŪu S*ij;v"ZHp޹+:V.ٍ;78@7=<#^|= ׼+uIR;?J૟ 9ZTttP+ºWvKj__C\e*F  Սz1Wv5|E #}GY5V.ˁ}oן21VYN# ZSN>(c%Q]duCZ6 ڹ*+cZv:x&%$vu]Z-VMTDu–?W'iisS|`:0ewFĿmuGS}n Vѵ`$AKwEɢjI&HnL}YJX2;W}6&cQ~޲T5hgxSB3-`}Yf≺?ϯC\Oj\) lpهֺ kPjvmjH6nJ1]ט'щ ^:( 7M ;zG55Me#uVM[mqdG~]}+#_[Tզ')>MM{㸮0:ϦSX($(bU>$jgfiGvOQQ)ػr :vė9&}1\_} (B( BgL ⱫcLtBYsJcaW.袝4,h2BV"7k<匑^}yx2`H2徦+^|qUjTݿRݜt m72Hף0bLu'TǮU_&K7ROԐ\\gȂYqȄ*] #6QŏRu_& B{K` Ş>t+SGgwZj!ڼ6e$P7>),UX4Bt>TgEWy![mw3:} j܉&XP:lQEAQEuee$}ׄ&5u _(xI؝F(d+eWs)I3#ܓ\4NݑOEj( (6<1Dr=^֜Do5wsZO\u^W]RX($( &]Qxë<\jpu?\kϫsš5h6!a.UH|QQ}R[%4LU]4g Wcx7q:kzU#Zى358_u#q׮utb շ]eIw%8qWySdcqq-t,YvD9zZJ9"jw_s!9sǰZ^҆F%\Aٲ8 t=~y?p{e3{\)%$IQT(~U~9KV}ua~?RkЬKBY$8G-[~=Nwֳ(AhrĖ$y&+(t{<7lݷ;;Ol#"@`0+6-=<ҸR($(tr4R2B+נ%徫j¸'V߆u4K[sĉGrbJVOјWo Et,J7I rOWXe8 kJZ7Wa5a(C]NEm,[$8?a pE4gR2݌w)CUJW!aV<2o%aUd3ƾhGM>7w &pXXuM?/ l2fIMK gH Icms^s֢۠>ѯN}IR'Q.E*G׾k6ڀխÈ(vzaYG!OM7e EIg Ok}o8VU+NOF%+!%՟.b;Dٳ{&dɎ3sq29ڶ&^n<\Kݦx;){i õxXVM_5J|iztH|aŕ#p.~@}:Q}vX[Hf^5{qk7-!C$cJ3E梞WwlXq3"SNCH<~ I;MQd2= 6k ßkQR)PZQH)QGTE,p })\$񴒹ªk4? Yi g>b#E[y=qq.O?e.o8 \_uY{xDT)ahqnՎNEWQ!EP]σAީfĐ ]-< \9ǫnpQEwQEQEzB ݸ=mcc=Uo Ac'Ѻ>kʗGKzxZ5H;L)<~WZ:f 8L.jEfQ'y!ve <wvi=. >;8/z䕊e$09v\|,t92Q wln8,;SI+x-P8##?+t]6!aڹ=?fxKɞ!wSٿ~g?sҨN=HjEV ( ( ( ( ( ( i\kj7`{0?\uo<ɝc\8-I;a*a[uh/24\B3\s ewcmٜGާ<UmFPn82z3d7Xپ';KT(}/ N- -bW+=Sk]Co<ɝc\8tz\Enm@9!p!A56*ĔזgEwl 7ZF*5arCiGP*_}W+pW['T1򧳕sA#2x7^ p2)#i9Yzf&v+}EI?lmqe3P+Ql. 5J2/Dp k*h%}1éGZ2>ΘƢhm.nJB?'Q,=>jr y~,}MYN4¬AbǦ](?3Yʴ_yi쌺+ZوȸW}h;ň0?a,n;r"1Ե# I4_vW|~~\^/Ealn-坲>ixڭv1J3㿰jKʑy:eVс\ΡLM̒ R*h/{״_ [?zf9'>j:֧rg秢UhIo''&Š(Q@Q@w^z yg ָh$T0UxTҴ-X}Z>w +QS+((̒#v3E4Q2X09?kMrr) )+J^&Tz+ћ/ \ir]~ˮ,lp sUlr(2*\Mnxss貔`fsEq(ϙV/v)>âKv:M3hI'yesc1uz֔10Oq4^(Q@Q@Q@*V :i( 꺄'_m䊽G( ŢrwgMu$O|A7En+x,;|KƝ |S@֦wqQ@gZ5f,v'y =fqt% +O_u^=j/@J٫'[:Խ>Fp@$1\uc|_yKYֻ?u3\qYbz&^#c ӳ6{ ⫶)F3 q5ɂ2y2QEvvW76rUWk77tWHՏ|es\Uq`?keKp+(((͍֟8gAO_]u-aLUEqW=l5:kߨԚ;IԾ FpPyjπuH(>?ZUmgR {:.Ha1KwOtXֳlӧ85JM>--j9%`[Px[s:K]1W?ӊ9q ;~ahmۏrBj|@*?|OɐYw8J+')??)}c>]wJSO7\#֧?&Ae$Ͷ$glg 2k?m:SOKᲈ{lOɗ|,O& _C|nu-O0~T/}-7υo+Q ],Sy[4u_o|=/sReu~[++ҏZx`? G̝6uɿ¢xFeHqR+pyVpZkM}h8+?}:S'-.S pWv> GZTNЏJ_җ1AeਮMoP飨-Y>ނ˹]'+4|AAJlJ>Ae⠶o "W;]i}6v]kgɣb*W]-^ HMep?\ukYv=>5:?׿Q6QE ((('pW!]è%3\Xl<+7$ЍS.%3K3}  jv9(kt헉80_oT78r9תEIwxaRFP=5 vtIxWQƟF7 Gea W/cKOQ;ҖW "9{&ȹnxCEv1xpMumz2ڐNN#W Zd.Wt [Q]Q@Q@Q@Q@v B/W]/s %><ō/*=)=Iɮ F0.徻 +QFwen= ?CF/WN?_GQEI] z\ev^/ǻSn}덮,o*[Q]OO4cBk,smiN0\Z]n\8_rJ^w2d4QEwQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQExxf#Pcf}zָxiHӖv >s\z?*{jTz+:+x զ#θ*;ި6귃wsW t7c5Ni(w> k;&'+/y\W ]ùv71g[P[j0(+ CT{2|0M׃;UG&q\5vKsї8MA<>7FN=AvX?eQ]ąQ@Q@Q@Q@v);|%( g.+E谸äzդRٜuv%;<'gO42:#F'@[3+ֈ:媧OW]["m݁wZ⫋{I +|fmx>SQG9YխH{{#= rxBCOA`C`'\8b#Gx~^y<F}]<)hz2]XQŏ&#%$%:(((((((((2EaR& \tk)VI|fa]RxY` 6}~IEC[ 򳎢Wu`OA_T\~Tc?8o#8+ m5ZmIފkW(;j tϚ`}D>3ԃ .eQVEPEPEPEPEPEPEPEPqO?&  `ϱc_Ӣu.pQ \ApIvg5&7(wncFԂ{ Wz֨Gus!v8$qӭ&W`nI7d ^}b|OW[t9wM|9&fٸxd)Oב 0׭Q/N2EWHWm<=@]DžKVPPuØǽT78vFw9f$iQ]ĝW>XZ5B5Cְu 'ksE?^J73i UF'2*18{XL>EHQEQEQEQEWm O+6~k˳ҸRB+\La9dWk7@7o 1z:rB=N*(N5-2F%dEpZna62QUkϱxBN-8n9>4&+7\0*QeЭsQEwu9 >Piqk-$YHjeΕvHT va*R<2;#ʲkMa[-Bc9¦ޚ;u^^(UE`ϥ۞B7rC,h'UW-5(QEQEQJTbp$֝5:twu?TN`'`Ev6M嵲,YΡ5̊hձϨֹ^>g WlB,_8`o+g^0$d?Ry7~>&mt#DKvGk=^eWȶRy>HGZhHNsͨ?\-ujwg3NF]Q2Mjj +-hhZO'B<& #0MM/mM/W {x\IhbI^7E`\xW[N;Q_?M-既0N{Z?ʚ| l?*=#~. uOOGɫ۱s\E99Fe>aW%Au 崑{! ٬$e^CgPU! {p1o n?  "\dvq&1紹-<1 :;7x{|SkxGTȼͫu]?U}b?Mˣ8j+o5urU`=MC͂ko>02ZUFn׳Ř4SGHa)HQE zkbz͞^4?AbQYΔ*i4hm Lr~}M9D+ Er/Ga3놶#23M>BL,ṗ*JPhh_&]_ڈo]ZHXF XPAQ#K??Əgu DZ_C-S hVN ʡɮ.[%AMCGctQ..@8_ڦ<߳\qztTQEHQEQEOek%V Rm%v]+%n{(cKP{lg88Q5hpΡ#s"u%,C뷢2EWy'q-|d=q\=w:_-l7ܲ>b0\5pzT#gc>!RxF Sx;1d">(^#1)N \cdʢ+((((ݖỠ}w#\]v^ qy[|^# pqctʎWKeoJs3TCI]rZ}I:50I"z.?xk/;G둊'%t*[)Ue$09uWa'{  jv2qއ\$2r)WScVJ}*;s's_鶾&tʏE=9?Oo'пy%#i+ (((((((M+Acֿʟ~],~xm{Pd%R/]#~,,uQH_֫\@6wvC;O/i;z}~EԴh-*?P2W"20db:pEmi+0ʃeֱ((TVӱܯ4UzޘGv3(ZVMj*yHۀ㧨kE,xqє&$xwTc21qⲫGZo@JCkwX:&~/ٕ˨w9䭓ރZ+IEY{E78'95 V{Nrp=I15})HqWd?.hAKX3uZ*ީxچsv셆z~Rv@;\Uӽq4~F.'5|-; 8ժ/odQEwQEQEQEQEg;mϘ[wO{NGT6ҳMT4oY^La\cgO"Rx 7:1o}YOoZ|xq?Lʱujۑ+5N^ &$l[ЃkxAYQ12/$Su>8z( u\[HGz΢p%t聆al:{-m=늿ӮZ 7SGĶ4rʲEv6~/! I"\<WrgEvמ ?lnA,[J?2Vth(DQEU=.l7ϥoYxU+l'1~LE*MI\H#'? :0Ϋ5`Ƈ\/?6oZFzdVsϮZr7C쥧R;w!֖ xt7iП?#SQMvS*Υz=;-?lu+ci@뙒GzMPIZ mŠ(DVCZpmy_׿Jş<,jÝzƹ* rGޗehRg/sS՘kfk'ʟ5/twzN!?!ɬ[ƚc"c}¹v˻c,rMg9r.lvx-L' ְ/S_^k^3ZTJ$g1Ev Ƴ'^|+A\:6!3n8ŞMX~'}xKkYg+zmY/,62Ń+?.}mbq|_8?5U jZ4-QSn+cDxS^'p 3~uQ\o|ϩj^HT{P\żֲ"xU Xӵk2@w/* YjЋ_Y'< Pp:CFpWg-fW)s FXg=:'[ihCV"()^uME-3^te`Y+txKkO5q? ᨮjJU3V}֌&B9T#zdz{湍GG4"Ha_=c~1W%k׺ۮ`"^W?v=O*;QV՘ZGC}Wm*Q- nEVeS]޺@Ñ??NGrolsŪQkR/p;'WW؈[GWW1T`d)+WV_o-U[{}9E!'2NRr@WKߴ?A=I+lh=T ( ( ( ( ( (;m#~dr3I+F=e*X`+[& ^t*όagԏ^K5O_W9 @\]·c?UQ]UiF%ISk;i:$;#ұk/6t}Iz2~!MImpt=}GsĿmuEZ( (&}Bިf+?js҃Ϙc^ƥ u~84?3/m  ohe?C\= Kl||(з{k4i;D9* kQ߫aζڤ[xN.HՅyW{3c+>ڞ?) ɰ+AEPE*+;"f8 k|!{L--Tna{V5Š&kM.K-+_r{Waxn!qNW8N^߅s$$I<{Q]t’傱-QV6TX,i}]:FhRXn̰ aJζ&.}KWnz/t]g|;u ?@?Y׌u K1@~m$gsֱ͓UkV\_lvW~<ҬᴅF#' V{鏲Vm<- PbI=I4Q]" WT4Ri= 28*%еkZxNqEpW,Td)IuݥG)g?_ι+Yhnaxd^euN𿪞Qai?YY2x=3+;(o3kE1p]G 嫪hV4[4RL̳9Cx׭)pڸZ+:XU|Gn M6͓} c.{r?*kgE%E!߼.x=+km dacʞ7~UY^?̿TUh [F"  7JϮ3\wDQTV; ԱcJE)EIYYRB]E c]&nѕeoQpWU\.Xݏr1;S^#"qRV_o#wƒOD y$`.+IUe7v HNy,:]c+;O+'\ 6薽 G'[L:.Y-͖ QBsڹ[Y.,PpEkG o.QJ],9&/xVVSqrpL9q}:Ѽ5kad5_cKvWcx  Wi8P˧˻*j]OzMitiOLS\\Kq+K4$f9&EtQŠw{M(AEPND޺k8"CVai779fR 4]Z[I!y\an*);QEb (5?^b ?z<tnKu|qG\Kms55rN+^қ~)tc,,n )WA]喩lutXo~aOmkDnLw %uQG/gQZ_5F*ÐAWY'_x0\]7w5/Cy|=pF|#θʹꗚ\[93WW _nkV)!92ȵ-e8?xBN--תc, xUrgǪ9( ( ( ( ( ( )Hѝۢ5hIj,cr{}Յ|D(~W!ׇgZ""$z &.`,QSi$ i#_FN^ڷvCo (e-$I]uӑTl?޹oR}[UTtk<^m31?k*!z*ZhQEwQEQEQEQEQEQEQEv[ҟA ȋvcQ\}:uG<RX2k`BYm[E?{Uyf%&_ĎsF쎥YN=*;F]NCuW=zun~_7h,QX֡ _4;=O]̷>^ rwVrw0Oj7lmĐ~޺_EuXGp`cs_s&=]#j'7n>I#RwVVqWR֔d vvO$~֟@I֫~u+rW_P絊>? UÝSZRjCJPgZg]Sk[ZI>Uk~Kts($3n*knHmb=!>^Sp,^4YŸ>x9<SS-ݏaW%$+ݹ,$i>g}|4$;rYIQEvHQEZtR-m#/#~J=I)JJ*`! CU]͎cojD{$<lRm֯"\E]HdڼHԳ7zњP~HQYQ]`b ((( a#pNEN+QY(( EvZ ,6}O6Ƶ֍}Pӱ? ͣNx.vOF"nyp1P|f==oSGe̵y6{-nVQ]$ (Q@Q@Q@Q@Q@Q@Q@]5;".8e={TT`wZƙmM;[HN?=ָfRU{V\跢{sOFO=>KG4QeAp2x9}3xG?8Z*Ifx9 Tu'}QESaϑuRS?*ϢC~T;ėYnu=BGQV[(`QEQ]^/k/;$ eVM+zɘCO0WGk>:^K9?ʩk+v~R0[+HҞ!VHt,4$rYIQEzQ@Q@Q@Q@Q@Q@Q@Q@Q@Q@m{w:,=R.3WCNkxzVndqC+edb 8 jBkY?+q]lzgmĭ΍?Sݩ:>ʷ6EX#zjJ耢)Sp;#Sh Ok6ejU^%EAuQ\P3;a L|\ }w &+?7~cgOqndڲCqo5mBPTtTVHMQEl ( h2w9[hdRkSRV+[ 3D,^/cG"WEغA6gָ(cFw (QEQEQEQEQEQEQEQEQEU>\Y7/qGzE&E-qsrօyNRt-ip²ҼguoQ-Ouzuja&U娮zˣ\[dc8⹽W1DVt>]ţ*(B((+GLTڻ? 9S*e8^N 꽥ڼU &>~<- ^#?Q  5WSyE[+p0õq[0wsj cS~W'뗺?$K/\N\N{Ed6i6ԭ#Xn;Gi~N>osVUhӪ5qp5 hX5gU' x~6v:~k)|nm>QjW-DIFBz8>t?oX//Y뭹->Ҥ[m`e54e#f&KWWIcV y 9Ҩj>8˵ e1?Zj*4|KtۆF}sn|4i\<88ʖ 혵BǩʟҹR5_>dF-)A_ޱX+JqzΣ]A5||@;x͋͋ 3,ZN+KOdκPL,_q=/-;okwFV^?7W"0~+ Z2(V/k&iC$> stream xڍPZ 4wwA4 ;A ;wfrkgTd*L@){;g&6fV~6;Js@? ;Q b`qYYC$\-M9{;=hMl||av6bMU99KQL`bbqxX>Gu3]{Sg BXJ t=V.V/SWAIN7ndkio8o._16Yg]3o-,݁*&-Pleb|8Lߔv&m;72@`}%v..:5f;{w8=u7A|"v `QޙE? GQ8,'E㿈?=课g+Cx/ Ys]/ -,:߅+ޕj>K/|w{WOo .@Scٟpp1[lg{ĿNxdc'l]pv{ <zA1q@~@w ✽ɇ`-UnLcTZtL^V'do;.mI[%WذDg/j 8}Ǣzቘ4D_?XC6Qe;b>H-] UݫG|)bь (1Μ#qf"ǸpG#€sQॳ8ZԁOG y12I%v";U\'UhFl0W/ԊjYM־(P:<9wh ^=gE%6xhՆh0Im37Pp {XZw I-0LAA<~n_/MM›ȗvgN/#w6Kqi;7N4&),Ȳ>|>5Wf-NX3 !o5R.֭$Hx@`Q bcQc%xT8n/i5,I[tܛ)f!bؾ;*%EIlԀbNSLA^})tG S&2 GݶLn*? l3)(s${S)N+R@ Ht._ /ҭ9t~O剑X&8b%9<g^v3k@dzU ن*ڥ%"eῚ) e栒[{|VGOc3~tC~Y# iVR`5H"ñ'0#n<m-Svg!bG ʔΊ%J܆_ 9_l_|2y8W{aK?JqrT Z"ZB4ců)u#ϴ_QfOX`ϥY?+|U(]x6$c^3|F&QT~!腽TT]8b^O &)#5:>oAP/:ƚ/nta0LWxt˽DZL60PurMNȚx(A< -PBf28K#_d6mG|C*,-A>)ל@6g)t3&YxL$]lY[=Œv^S IMEˢ }!'Z&!"A⾿mno#1MGYdX+>19(c |mɪ16su[<`dH!=6.jDa\X@K߂tU8 Ý}\)qj:knϜ*In~2>'j/ٜ^!=j,Z(LF{@+}]nj"89qV"{VeFIx7&r_kBS@yz-ɈJg(A&֤~DcⱼkӸQq=BJ%kqN BY17ř`Kr.lH񆺬1cla%:u[/n^&k>#*`pSN_On~)JT{3D'^gyA(7jmq8V `֚Asa)ͨwg*>ґc2=Ϡr˘ߨًxe4SQͩ6rmӈgW;ʀ(|lt$]DD9{Xyi-F)SNݙjo]u#&հe'_^<$kd.TcZf3Af7E/z\\aۋغ!kqw j|~(h?3R!Rh̢1ރWw]٠*E(8 %b*lOP~ y$`V:ebމc,/ϰ){ObF#bKF+)s(\E, 1zY SmgRi&ַJ3Qvs\gӓv()N'~ýoUIjh#ۜ!PC̠Xq`#`'$Xۈ<@mZ"MJ7AeW5+M K- ̾﵎cilnHeaF{Pis~ e83NFG}݈`_+n[,7"\Q1AieUih̰0DiB3[*r{oڴm rP@JȆ3wj6o.VnB( -M BTa2;V)3]:$l~͚m6Sɳ?oWf0aLE96dYX<dL?3T.q)4rn'rs x헯gڔ%]ªZ>") yHQ'V@9_Z!_-5-7r 60m}BA H@#%%T1l[s0l+ܿxdUyR$.nZl3^}owΑ{{I}uˠ)؀и)xmkǸnh'i&dX&M\ J%oWRnq[ͼ(u@W]Jm*M2(>,,H%TC̣t:$R3zh`uc0kI-9"?"x):ŏ. M[erg?≋cAn>lI]wV,0WĴ[/5R`SeьK"8$"Mܭコ͙ IJp  @P-4[YG(r4KƸi bEMB)#ݷ>LF c<GG8xXQUg(KW?uKFvn EMfnmdvH7y2fVCx4ٙkdXItE]moރ9 knxC-k92U3֠K_`0ۛtƌ]hBDS7@D 4O Dy| R(wD?8GJ"ՐϱoC/{VV>MTʪ7 Ԧ _Pnۿ~ژc6X{G<}X*eOz/ =3#Gx8K&y0>źmԖvh6<ȲQ-~/HO1{uK gMm o5(+ZG4 52H^ֻ !wv)Lڽwi[@xZk{jTW j>vJYXz)-/eݩ+@VmA70ӕ.Y X]Ce}z-jNa<0 ӻn綏I=Y8h$ED1)FB=4Тn-~c9G'%FR(Z։勽Hjz4Nb:,ޒkkf/p2n} ّ t5:s~fc߱8ϡI` J|}ZrXCik!@| {[yvST+[.FJ&v)]?~Fhv*^3u_]F?PlA_e@kYڴV'm;N_- o!S-ileXڜ?)zx&9f@8hh_8DS1a7I?0IςN|s3vn9 "{ bMj#*|%몏8{`}0~o񽷍FOvCA7#tTq+C&WMVg\{E3M0C84'jj [_&3WcpEx*!>Ӏ[*){B6\nZmfʂ uƄ,eC$ɏuLOdj}]L]\W |!sޝd \Ju|e1]`+յvay/8Y!8^ k~ӾlbI>sCnq:8$w `D41vn&T.,, ōj5awP:=G"-qz$2ѭEqqa%)VTaCS!Gvٖi)5_sa 0 kȹ_S=l|f^r<'fW;jfbDFGه})KˣUeR=2\z(Jwőg&vGuRymBmH^lxG(!*K:0&5NAW`鰦 w$,fCOey?p!ELV!r 7댛a[2]%XE3yo:}i"_'d)V;g5>ËKz40v?Xi,o˂YIrol="Y~řOíx0^rmJBo+ۊrx_&I13֎PyHa%V˿Lvn pj׎/PN{Tz}OHB˺!+M6k ge^2c2c=޹Zri{n- ˺ArumF_'B*^b%4-H"UD3bZ: YhrpOhTZ\ezAL1!]U9t:79KL)!Z|^=; ^S (H]彈3. Y*MOCt>ydVo8:ӣՋKcf\-|/gџ=rxce Br;N[Eœ ՟Äk^/ ;cnq:UX13J5l&[YߥYAtcZ,t`PpwxwUVVEv}AJBk=;y ם;}/،"Ye@Y֡&Ok5 os=kKA' Ք{FF&&!9|H 7|4؛H?&R.RqX `;Z‹ow08?! D1,/xnIdnjIC[غ 22h4Z9(] kčO /y%_.z~h|%Ң 4+kQ)r\ Jpw]fU%z^k/hm.H\ SőHcLbU!粥Q>wf]Hm^Gx̲=Df˴lW`v-CewTjV|"& 7}!iuo46rϹ,mXz>2J-o׻+q*is V#OqB>ϏǷ3 #̵ydǟ.-Ccxom1uD"es'\?ޞ%zjpq?gzT7[ճ$e)j}9@=6O.rXjrV݋<ytB/x(I ޣ'h<%ŝO[=ӿb,E <9(L$+n}|fk<9s\2B,& {ڳiŏ3 E vr 'glOP'fN|g roE9bGT٤GcIbt(aڽ@y̓jpnu-G%ur9+=Z]DF$#A{q*\O /DU֥֒1wp_{אA'"k۞biCjrnF4ӅSd,$w^SÖWM΋yKNKc_/̒M񽪋$ uc`80F/w| $Bgfd;4!ڵJyNot Uf_3hݾ9*|!ET߸ ; Qps"?KDаIh!3=*JIpy,!Hs:lzRZDIέD5'u1+Bpg#v~dHOF*'վސ'w D r BnzVgab2gQW{?jn+MȦi3C5/r.|JAUqnN(s0BVH;յ|=ںGJme'ZPab(;~$"U8ЛZWirO/0fE7w0)in2*?0W%v3tok潜,GdҋQkWEs%YiW>|dF1Wۏݧ`bZ7fcAEc8y fݏש6y%Tw#etb^L#2y?WLʼngybר!GRL'WA7>XݢəEzzkK,\n4Ԩ82,^|LI,B|:}4*e eLbJ窳vM15DaB-ٍΆ}ũdz Ŝ9FڋW/ѝYF8S`K1_n?Ԝ|G4mkgRgV٭>p%$;R0\I-dotVFxT4 ;_j0{jm '4\)+mFk 3! 1y2ڊ_\w /u2ǜ0N4t՞$MC祁0aX`Hpz(m{cʇ|#rsQ #&hYmRÂj湮dʳ*:MT:ZbO{MGjYR7rICva,ap::G|W2RX!0lULX( 1 g##:;/xUN;AA?ˮYjG8J42!Zh[1?(yJ]Pr*C]4,0h)$MHろc8g?4"m`| on{>fؘ\_CK14k.4d+fUo3?S+1ù?ENn試LT@cXyҟAWjnkxF?2ӆ! VA&=~!ǡv(׊S\1zx >o݉:E3 \Tt`|YByMO2/"_)޸9hɰHuRwԵeW k^P6{u0Hcz1w`[}jDkQQ 4wǓd)Ӯ^"\`U4 w*.(%At-%5oFk*Y!Hݙzّ@ݥlL1U|Ljk~TDX"WL֧uLr)~˴tw f ?X.8VU{Y[Bqd(Ť$+nv<-)mc̭Ųy +dߧʆ1Xz*F,]?M jKKn`XDۓ@f̘>ڜfp7)w.};ߓɒ6D] HfTlA ݃U bS0r! 4W|(;bd*(~mɑP锈\M3[ WU[6FAXeJ.GQpG};.8N8+ԏkM 3`0X$d{F5H/PUV[B7B3cXIgPDܴ2艃~g4_}PͭՔblmQb @ pҜk 445[&7m+f D9B$3:g!QhczZb$G)W남Bξ￷R}ku ynLι!yz3Q|1o&U \Nw,]eoy/] U$n]D&?MOdK ]xx=[)%JZ R(,S]gx(SV&/_sQp)!9 r&ikuv:B$^Znh{Lm">vP!0OA3I'9vE՝_I?i]ɉq}bAm(SnW27Koi%-}Rfw֝ŗ _3.޹-@X2ϙJ1ш?XFUy3^(dW8 f xx"4!g}\EjP!s( w=lŘ9 ߠ+J]c{cW޽Mҵꃋ%{OiC`"^_bցD/P$w2IAŗmf80`Gܡ"S4+@[c33%M ҉OÏT`Av%YVLxc& X"TP̽ϥs<4ԮK^'PҵňzwEжq?mG>G/|dGB1hO蠇)#i@*cKL))фKꦠNLsݞ&kE:Z@j>̉zOiˈ,~tjG6Ue/ADgNWk;\ Rk,*q؇*f <$۴ 5vM3(.卽R[Va35,QgDvuM0g1JLbG+{.߷IM*Qm+ t%Vc"LJpqEdmHF%IYRct[M3U\Yyy >(䌼A7=N}`{[Ⅻ+a6*A'FؠZ&Ijo+[X=aU1`0zdt!Sc9?fM}{`fJd-< %-m1~:,"h r6(jN"tZczїLdDG* Kr ynpF.{oyif*AY(@xh PTЫdW~"<i=!.2]aM}mJfa0G^um.Y[ gTSѯ,$Z9)4*j?BaY@JGL'|&6SB[i\(&x)!]vi}tsfCtg7eQ0 2Rv ˪l71:fλzƮԬ϶ZS ۋr/M•&{oL f('i.0Mߒ1rב3u^qZaYg{R;8uڀHFK x܀\hxls7% Z}nżfUSgN{[^kgɪK!ae<٦\A  ^)1‘t?Uv*u;8qI8׉bS`7s|U`Qfcu7bf 8E@9s&[|"MׇLH%B^hf`r&Of]QT7LJ ' ?۴oނ$?`LQLebZ* sR=􆭩 ZdLPfpהMi*gx;u.U|$Ags\ Ts1,L@+b\7T%@Mn͵[@ ]  l}3| U%sxlhY5ƁUF(M IR V??n(R.nyd֪r  Sk6T$ƙq܈=uJȶ8iK%̄oRr R(ia98,I!lutUp&4)b5EYe tccVeM O`7H{czљձ@;ON/[ʯ+`CCdSAvͫIsyifBx^adb`8h)g;(X貑R=Hwy+6Fw??e;r"n<2Z?G$/;L-a7E2|7"hňǵT}kr=taɝ+v ct7Μ='ͦɬCVw ~bu 6m/Ah[*FۤA\RMLiB?70};x}5T6ae($-1M|bx J;DZڽMODd$|:uzG~Q endstream endobj 131 0 obj << /Length1 1614 /Length2 8683 /Length3 0 /Length 9739 /Filter /FlateDecode >> stream xڍT}6NȂtwww ,K,K#twt() ݝ t~=f~3榣a,0(S &# aơӅ8p.T_g0`j0(@psr M9 dPA.8t20Gg ᠿ_L.!!?R`g% Pm'Z:0K_)EmpGa777v ;Z.`g4@7v: O t K0! ;(4?ɪXMO'@ZZP`4UpV Mڻ h@v @^J |h],!pv&9~y$spC.8듅8-AanP ՑC qr+Ez0f 8x9`'҆?\]x9V} V?/  ;}oA, 5f՟Aw1> {-sȫI?^ii;  vaY:;??oǷ v[,|Y~jpcE?L0f+|2EL~KmE/oTuglT;TϐgΟ|oB3H~!\܋IAЁ-աf=FOR"/ܪQSJ\H]b@wCκCLFIXz:h%N[5Zaeg2"`'mPNd,/fR㛜bt"/ b2VMo0#YUZؤG)X.:TbG |RfLL$sh&XG:kiBEMdMXAi /i!/#iZA0LUDF7qHt-\}#Vׯ]_NR,O 6q|Vk𽪜AHhil}(}% 4Q/]˹W@Rg]_;n,I_*ẄFD v:y Ҙ8; w@DRSmbnc*< ɣeQH" vkb 4GU[q+{u16 Q+bN䦙eNȧz~*{#Q:o&u(:d0DߒB9\ߏ]굍ՕcQ$#MwG3bq ]`yKDMi Қf5/]ݣfF+slO%GY'5ɞA!61F&߬|/mnjY(*3\"[V՚ry 6kITc {)bwbYK)xy x{p+nw]ĕ ?`Ķ=(945"1J7oX`MkQCFC.B aai JsW l'i)"(Lnz֙: X6ǥ,/'/+U>10q5YD @/50XlnDü~{y"鞷 ̫\ E<a8x?DKSKIC L z$'Ȍ?Þ!d`DŻd`cw#;Cm]>+L bjv63x>G_wZ̏X4\8rALwj"sBㆋpnT4X* )لnp!̬qOŨ٘U ]^ؔ@)RopG? 8zX>-Os:7M)0(tlU>>m\N9CS¦`R~ "ɕ鎣_5>/_vO{? K3F>YiL=V$f]YxyҺ|PU^,O/V.l2fe.Q|YVg0#V'{Zqn 1x!X+=&rZ=~BL=AkCqS[z=sQJYNѩ<&7rΌw_= KCU%+ˏRo(M=0E7$2g,SSG|GuKD,4>I̟SSo)F^[|]˦]vlM~99P,ΩL]CS=r=ѓg_ֿdo+qJ:3 VYpElN0SV[|~աL y2gF2B3l l  DLƄ)FeYJifr?h]HUcK{-e$fJVta&"6fcYsg iNOǁ4L1 xDM/ncE~.&,SAzkl:ZQy뽚zYh&Z9}VϾX/\2,d";v[%IZX`|f( Ug:٩9q3ZdJ">I^eʎchaBk G|Dy2r0KO dJ=7ny7!4X;|? ânwpXP 4uX;}ӫrR^{\ _JȨUO "k Oƴez4:ncj\-l׮oRq[).ڽjݸmP5T9hͭfxA:3kv|z.z qhY)<4`u5B J9XBBQ˼qUqZ3:J>)2z!N^N~9oӹҚYW 4ibNfDʵJ@!ea5k5$Lhѿa$ZShʏqMCz:|m,u>J 4ts 3o/չnuSOxol9|Q6&ziC#b b#rx,M-U%NJ* QgVGb=)%rF->d6G狷Ӕ#|9=&.i eckh{U][1A҉1! ^\uIQEAI{'%خ& RWNهv)ٷjY?ʜv$h6՗fLR06.C8 o$c9CWK7,~Y}[7a8)GrP7{C-^S2.m9`&;ˌEoiy_V` T|o30c%x~QBY&:Ox$ _(-lU 7>qxM= 35Υ5(}AL5W3=WW6Pc^@ܚg=j]qSxP 9ptB!b[!Ob+o!9&e+A\%Q)tvg Js\7j^g`}k)ջ}8RF]5_+ptpnr+~_gt]Ц%}No> o Gg^3Ep9O:W D(<2EcZ2n|J9BaQ2=즮P$ce&0$8X;~G4EӼ.4@2Xf|c3AfZ74ewml[̭ %`۰滗"/mtayB,"AQqte{&{~ɩ>)c(`ÎW6 x=~=Ծ-BS+3JwϿGL}2%z./RD$lOl kޠ_+}(O 12!lkNͶ&NJOV׿A#MN3NDf1HJk=QgCyɚ߽\Cۂ[I`!VW~( YIgA)tUTcd+buNYd}\&Q;F:sCGcu^qZDz5ׯv˘E#Ǔ;9j'Rf;Nhi S/TyqRNvmwmM]r7AEO_NWaU$:v! '`0&U.=ou|1< Rse}h*i"[-X(KbYf R.`{'Z2jl\z""rue_"znVjw-75PPb;D2uT* b?C ;Ld:q*,h4TݱC )MR2K+B $^/Mjڪ*$z[T*2;"h{b[[zI $* pZN1RIŅÿ́\f$ #b fhƢI:P,Sྼ<չ 0w5ֈ'i 'T1PˌI|Lyc˴О-|_Yu[)OkeoI>LӨl. _PD" q˺R-ӗBW}#O?jCC݇_>r08HEa=D|am|-`gsEid0k5׏on>C!tqBRNDJ=1M^*GG]g0|RI`>b>7317DQ+]WuF F5y#W< u<lMjڋla;to7R=oឬu ?hu~'?^1v]}}eށrnP8/)\'b W ,8V9^)"Q=M%Hpywo{xzsOfAIO ;ՅlIܯ*wۿU&fTs4n꿇"@"Φ?Rj=?qռdߥS#a.q0Ff8q6Zp ?_\I<[_c(F,VxsOjS0 Pk3)dix"4+)+gLRc~xR𕫍.[)FrTKo ƍݚl7\AlYKD5)3\^'d3ɏ^-uM@n_xL3u}z' ȕ*P>LZeb3 JE}†5nMrJjpSy|e+]yfARۏߵEok:>זJ,!ʬك;rㄝO{y?omBNu${J 1V_vֹU \ bL 6QJژM97dfN5)# 'ɛ-lu-r֤ nrKe9eEh >sg8\>gp3wikRx> šY, lP㈳"4YgWi3mv{g1j¼U2 wU3^Š(KQ 7P2 D\*$:2ƠxWprqx2xٻ3Pu;21 #͇ĤN"f~~YR-P9ycm?AV&ӾqN$Πw5MbFD;H( i:Zl"]tAg.oE@ !P24Y s'jMj]9ӯH\oƶQOd颎`9C}tnnS" ? 򸙿EUŐgQz,K]"&A(,7вo{ с ͼ1B;0Wd%h$7[5Ľ#EvHǂ&S[mYMVo wӊW+79ۛ;rM43ev4[HfP@Θh|;fYg^uL8AA;[waCJ@xX͛ڲ[39u+[ x*b֩DLF{Fkŷ> l|C5*s?&B* 2U+Qvm.PvF;;6T=Vq(ZzG})^-C/J_H [pEŞΚ2~ã' 9Q hxrf~JqKuGuNҾkYI<`{rᬁ+&1R. 'WIoe\y=þ#IM 6PαX9Y;^zӍ3dc/¨kYpl?en[ߵ?w $EwܠFBkϾFqԾP~iY=t .yqg0yXy -1gvfc3$Ev>Blڽ+4:?0i{:ǂU@2O:AY!?7fQފhzH]`)7}9}MS gA#j׆&5[B#/g%-^~?{E<]{a\I;š\q>I 7^%ˏ]3¯t0|68L myP48YzzN&M (‚r^I( Er6îQ@p41L.',Of#ގ42++1%@M1-M$לH]FrM~(gC:]W+*]nEB&vee[xQ`yń1ƾ%2괺H3L{QTGV]7yYۦ!P$ +Wfc#qc8C'Am@u@'ư!'їh)UM}xET9ֳJcKb02|r_/yf'z$x˜ӉfLCēq07{`g.pMct^2쳧-E;TԮWԏ^=n/a_(Sٓ)$ ~nn3QrB[h9Ŀ蘓N8\K>uTǓIy -7?( endstream endobj 133 0 obj << /Length1 1476 /Length2 7937 /Length3 0 /Length 8941 /Filter /FlateDecode >> stream xڍT6(HIRRKtH4, ,  ]K4 !"ݍHs9>3sss %c(aH. 7@N]]eaу" qY^@\P8L?r.'B0 xy|.by P \9 yw?60;(**' qA0:i q; rPJI"Nb<< G7FEt  2@7. @+ F\ ; !R\aV]e5X/'*wBP؟d wt<05TTFz 9 o  ;AEm`:5+?y |w<wycYCaVֿiX:àήe1w.l H 0 xmy~vqv;h@|֐?\o @B|3.K wn_];z3So뾐T{7eeo.~ O߽w->x eEӳ"`{C]L~']J7=z'UJߎ] G߈;"@~ @]uH:l$E(B= VZP$/pPD eOnwĝ6 w+36nn{ ',A7nM  w);ξk A xVqt)(q_. /?L ?̻^rGhch@ 0$,lWZڝkmX !p96[ax̌YRřO@Esv YYS'ޫu<~p+n[5q\dY:"n4-()+n]G>] OHUBZ4:3hD_. -O)XcV^FheThw"\'D1*@-p9I G#/|uv[boK%92]\ > kv ;ZnS.;DR2Dz[I,(5N `. :<if`-/>{5(eZ 66ȁL~"p>~R5Ly65c3MXL&\j=1`hr"xN5sZՄMZpaO$o/ƋYmq\'"3ζJfD_| ndxf((C8{q`)kå FڽMx ?i!*KiUጚ[1F+m_6whŦmEljmS'u+/̈xHLe4/Mռ )caX)N1|yڪY|W}v(Nյέ+P>o~c=@x& x2հ R"ZM((_ADKGa{",UiR^t(fN CcvrA(yr]yy-13x6<~=㒓쫶뤖'pI2gb]{L߮IL[Ħ\&Ru qWZTPa_ zR1 ;,^ʧ&uOC)P.Jdx@z<ެ/ˁ-l:tԼht{lQ!q{Xu.Ol >[+!Ɨp c1jO;vp|/TsO&VDK]<` }"qx$v {{l6Z&CNHk:O,?ttW g s4=)jPj*Lf0\w|+Z;@B.=-App$*&6bJ̺Rю~ZxYKͭL%9ޛϥ'L>vmӒW nX[x\NF箆X.߆"f0&~۾Y 5Ib+y!yC[MzPpORbT?õ oI_4\< <\V.ci9܌Hh)D#%S RkshN*}}3 ʸ /²T7bhDNY1xXn/;q:ߌEDԋ-GWd(,E߬s@`r{=,諕SC L }VPXQzQʪ?iz=KwȿuYSvHkZ,I<٠V(NV/)Eq3lbqucy-tcD}&ꄝKݪr GcI'yOrdB٦p g$ٜq,mw4챿n8se }_J_0<6CF4uMjK״s՘Z8狭0[~=A2-6Kuʳƒo C[#[ܕU%&hޥ`4M14_/3F}D>W_˹i3Qis&ObyZ <.MߤЖjzoDYS1 ǫgf1rCªoli&~)a̋i*gt<^H\zEZGtI+:9I*BDGS~ =PmzQSt`Vf0s kthw_A"NWgUM0 Kft9h ?iEzK84K}Y oHg+@LO.(P"vO:󢂤t o27c~lqH(Mᛝ ք7[-ynŗnu?q KO3l\,NM-?>=.U^Dg_GϬ|(b^9}-Li9a$m@YFV9 ꝎEY7{,~$SgރzR ޫ[ӋX'ltQ|*)ǎcb6}.27x敥֕q$s:iMy -y14?hAHI(N{hƽc€o3:w:8c8\G>ւ4݇:~9ZXA驚&5{LJNcu$".,4JO$ `n$S-̨|%ZPȧDlżWvqk懄k2:KDLLf-~ru  s[F,6uleuRFQvBqWdߺ3_6v !0je]3:H/YvQ `}SƄU?[PA}B9F򗘝HWw5av_9fd膒ZrO=ATtǛōN|K e.֡(u$SqVp89Gkϯ%2[k"oeLmm)gl>ͦyD`~D !BeA.ظ<_Y~[ZuV0Od[/جwM=ԂB~#1&]+Ƕ 7~1j)jf)xzQͺJǜ;= }BTQ$)!vKr.kK'B=Pifv#|2oG #z`Fj96>B  ܐJ`cYIU2aMsA$y!$ѯ53voV+UhVxHG:#$`{=gYѺUt;&~l"+OR9ϱ.AAPW$E6YohEZN߱ԥC/ێ$~G,yiˣJBP9<4F`P;,H@{R*5љp,W}F8|7 3JuAlV-E,|ΘسPt9U~@44:ý”4, #-fkYeԲ= "FO_oznѾ+p}֐sqз\-*ri;ջYv(Y)b=5ٗcRh$'M1 x@i]ԋ?JCpbq_;$?Œzv/;g71vbP-˲Ƀ9Ëq+mԬ1@I_`9a} K~%,_űCv+.Jr&K7@_ 2|#|!vy?|ϛɳ1$qII-n_=(gХ I{4ҍc4owbr1y:9G$P>NOW,UHjI1&־b UtŋagEkUgXzgd9{=lܥi55G [7_QL6J%22(Krad{a[" nCa@}N.{2:p+_([ߚC 2YE@OW1mB4L_c]O_&\A1%`D>>L%L}]sTm6iR9*v17@ufۑNNS/酿#+aĕ٩eY=Ƃe#T.$ZeiҶy Nڝ 15f?t*V9$POtsyPL+Sû_$Dl^(p1/EU[x"ޙqFpJ[xd$5& %U6 Vkp Z]Z$h+W&t>⛦ #e:??'DY6}VhWXIuʯ Lz#D]/0 )1~{C$n&F#OC?eC3萚Z?|QO]&'T3h|-bv|")ZA3TT s~PIj'TTlg9ٱ&l\^{^ BMG'ەJsݜ3wzF4!nYUF1Q] ohN3rs.rZfnOVF+ &8YMI{/ԟ~9cl{~?x1O]0lYM@=e>̪38wʮHE[tLH_w2~]n1!~aXMݙO|ܚFуaŴ8y +w雓woT"3rL >m2%Td4]u!8h V:uuzլҮtp L*/ZhXg 'U"^/sJK$ܩ .dD6I9E=+8&K `L?ަ4LM'I.I~vҦ2v޻`,8吂׺*4X_[_s(ŽMVgQ`&1=z>O4qbz+LR:?,K7AC a[|ͪ|l|W]?-E&Yܫ\<>)>,UFx|-|r(ZRThk>VP'|%CZV.V9SOE}daܸq|V$AsNZ~!qIC|V8#@fFX@3{ݴS@I~e endstream endobj 135 0 obj << /Length1 1679 /Length2 11563 /Length3 0 /Length 12635 /Filter /FlateDecode >> stream xڍP- =. 0CpHp=.-ι_{5U3{u{]54Z,VN Y' + @JEΉLC vsmFA]N HAA@4텧(;8|Nvv!:A@@"H99{C6n/@oc3 - %d yW za[77gA66OOOV+F vh\AP@G_"mٵ0b?+yY9A_6yYY= %*')efp8Ө?b NNrMsb@p0;ӋjAEnn,?CO #M@@G߄Ѻ @7UЪ۫| ?v{n/Sԝ\<+/hYڿ</zRbdLjqP(/2V ?E `c8^X;A(/Mӟi^?_$`q  f?K*ዒ _2;9_$A@nZ9p/>xqA/KwnnK@^ Ki'KPЦo=YE&h0A|bׁ!C)>O_͇Dwfc[ȳ#?~"ho{tydW۪HΏs%W- ^%qh㠂I,)Bn,'^W#L~1\yS>KڜmDDp؃cɊ3yݳ^yh̟Y0Yw9S+QJOP8EfPJ5F(J.{nRӕngyπI4v.K},?7o#`5\\L%P6M<&|*yG̱nȏ ;Hrē4֯Deuk$9W٢I.-Y2YqtBUɐb2|V"oruYG-xJ'LKRib>}[Vc}NL[I#)w5Zƽ+1n3^ C~1%)y5h\A3N13 CPib#/":L?r+ fCx*.TGK&"EkiT]aJJqFѭӗGJd ѶiQlE36{ ssLc A9~sՑA)VV56wMH6oIFcrhаͭAajvАG^e1 iəJ{`/ aҴM'4å+%5\R^C;3\/0\PR.{=R}'r^ujjwu,FmbD"ZN$ ׊D)N*]> )&y62@+{h.\QJ·d ^3>p++ڈ麸lNnδR5KW"wP/xɡ+)"^yqwHnsK}x;zHU:և繶iTܹ(7{Sp͒t<}M X́8lX{6 E+ %ThyO|H)#Kؤ|lRxU9 @a9切oT9s՛z_F[hA>ĕD64fu,A2] -Iemb#bt4r߁6zY}J(/0N X]fz',$9LO|Zy"oFT} ,ɬ4m#qgȞ'pyQlXb̌2|\2s,}n xP|[B١(ZՕӓ$eջ&b:Z.8Ưkn+nVOcmV '43 "9Ȭ@VɼE3'8?@lO?F39#^4?[r˯=|t̾g vp1o`Wĩ0X8]*D *j @G.WcUK_37Lt1Y]Sβߢ@`Sޞ6o1^DQ[<<5`x >(Xwͫ+$fZŦB}ߔ N(bCQ"C>jW!+TR Rg U&qVl%Nu]3ja2J;lPNdCkh|Xյ<ҎC؄2̇ƦHOpBq\Фdtgۮ6ui$97waPljV80qKgQFv׻TM;uI%m͔To)ezSs)@M9gR-?HQd-ܻ8Z)/XS[YE6i̮*,G<$% D&͔#h^C/C_S, j^ aYX ) hjQXC a U7omF |]-Ð4Jt S:}hJ  NQ9 >Yj's`+rY*l‰}rd\"q[!cXyea;; uQnGp1Q)B7{BJ<ʗU/ljfŊebx2VYع]O;־&B5*I/8<&_;oЩ ̡'uDN^@h9GoK@[4,UJ٭D$4 H٤`ԥ"Qxw|X&޻7z?Ȧq1 p($/xo)'J^p$Z;r)6J>WE_yi0%ʹ $פ0ť s.gWEz+RҔ4%Ք:{0˜1HQ)_>Z=|XQ6.7l\߲yѾ4I`o洆~=kA7ܲ&)9SY^ 4ԁ֢&I,`oj`Pퟎ'cN}PI /}"Y4iסU9=qIvC37ZDtnv{^%?Bd4\^$k՟c ty trsPH Fvr یbj#Q'B*QLV@:QMHbstVQ{Ec\]F'OTp(|H6tsK1 8iU8ADk'SQw@v*"97`6P55|}H㽲mVPQ7+"!1/#0  LXZ'F/R'-o!s쵘!:?:]Q5b|ޡK6Jxg3GMYTڞZ Kq-ydg#x'(M6xC9LۻiCt 7ݒ"!9bDi:bڏk%9u gR(lZu$ΣUumAWu)J P|q3bP,mM᳀u:, E*d7 tRbA<)¡ZOӐKHXFS,5j|fbk`iyCcj%χ ߤ2_E(AjpiG7weދгO~.L<K&Siwoou`[2g-ja] f ߤ-O.EKwWXN|BR it=f`F}6L W$ciUjDWŚqnY&BI3GB4YS/={Y醴6: Q .~r]mZS!c&z#Í-zi5fpy; nv/-iۺFʭxҕO\ϞFM˱D!Dؽ4ciy`TJ0.fފf Q u#3.z8v}DhQkP@)(K[OiӗXb+KOH7}s&rABe;[6xu1L͏;]#qU;́߈"~_z@7k<#t{sIv~/ZQp$xˠLzN'q;-j6LJg}O>'rW^ ›-/Ft_ 1"OQu;,c9pJ4GK}b ݦ xӏkaL M-ˡNH1s:HM>c6{6C؏?e3R;q7KG_16굹z4](u(;ui2ȩs뼄Q>yW e|}k q=깸uPпH)6'TZ߈=-rEQEmA@X{hG,f6@JWNyiT)wՔg'|m/[CRP"7qTkԌ]YqQ;a=[Mpg5ꡮԻ ~cR^n^]kW_r")'&3kewM'HPRi'y5~=~K򢪋%:',:\sS&ڟ|Aeu(qF{IC-S N֨&*m!(ҸRU]L~rbML[P|V`G卖~{p)CfnzYZ۸گLX ~(ᆪu2xR((1jɫqcYç'58YT8wQt =B1t1yPSBwDt_N 0*OTS!sto~ T_)gΏΓ'reRpʎ*b/KJ޷&W'4zd%89 ʲw^mm |\߅t)O‰ .rl*:>B!6aU;x>Y. CFOeav}A1K+JCEI-7!?`c);ݴijQ }#5 u.^dtF)*'O8=-[s ?d;,c7%nbơ %%<-rb9.;2ǜ|dz},U}2*3&_{%#3aLN9i5lM6~|顚w %߁ȝC:?^-suCjm@FQA䵚So1UZ8] Sr%EZ!F6m-:n #qTz l?V-DrZf;_5v?}_j®%9*.7o)q۳S9sܰ!)<{]`,Rv~]nۭxz ,tҘl ?0?(*z3yЙ{݋ycHr^:Ox3K:k[b%Ԋ Zr N-O9ONϷ-6ĠS YjMR<:e˿ȫ$1=LJ5~;M)^7vץ8> *Y@9,"e˩r{{:BlU.HBi-'+i}jxo1q:/6ZF;Ȥu}q1 =" dhGv&#ynjA]+WF3 '`Z"ͽ1 -.|,'o'X*O,=QJ#tE%M׼ۋLOLs19L٠A'76 ؄_Ss"~4-+5SSHEA@oRYhlnŭq=^̡~͢_7±YAhjFB03#L NyXͺAiܝZ eq;jG^DAW#Q/J &ISoe=XA>XiƓGD>Mos Xƅ[A+@:yB12I7D7j'QstP M !~O: /75Bb!x>$uXgG觋jc}J!.'vUJG8I@jx5IsgwHd;@;? &'yC225-w*W~uFÎmGoYjq2#f745l"oC-h{ȡW~F[=>ٸ@ˤO'3xA>?lEm]^L'6@Rh($f.nϧ45.s*y3'Zʔ\5>=x94i0,v;p-^:$2 Jx&4cYf &>Iˢ h $PY|ܞDD5b _X`$~N(y%dgI{er:06._ϫ2}3!;w LszK5շTf>37_{3h43^u;Sfʠ$q1q-Hh9 ٖ&3*銭PLZIQleč@RbaEj0 vכLM.W1مGxgcg܃G.?C|n]}@'}އ\RJdxp }NxGw/C~#?-Ϭ6;}Qˢlvx@g)@;CKv$~w5ב83A;7S-ہc9p;wMG9#7SGtw5 d꒍Q7\54 ~թ8g?{c.eEv ؑuyA5Uxhw}B~ۻ+C7 0քعsgļatf:b T% a}IbЛ O8[f0/iZ\WFzaތ3FM|Z p@w4I0d(֔p4[pRS {,TPEr؈'.NLp=䵄k6{+?VŌMlnGњ~3.l(+HLgJHWL9cpHtY"4~7`i-eTid'?ڀBnlX KČf1w`FKȉ:겴)i#H+SSVjde't<1,^sq/̏ o>lECkY&<=LqDxfzGM[B@BƜXFNR޵WQ!LC׍ _>,fv6`xtK #%:ɢޭL͛@j85l bY+񴍽P*| tiBq_7=+Jҟ7ڢ;*T e&*UנW<'vO[H}9T|l7RLw Yj̺3.2L,vI\q⥉-GGrm:{w tI`>M=a/Gߠ h&"N?@9y;b}&Jh`OCC(0\m :lقd,w^ ."jg^tDG)xGPx6!8~J9JjEjn!W+&l?6=K&{EJvmPȶ1]ոs.cOs4繳c&;t}8u~Epgv!o;~ʎ wGno=?dt}s =x!1ΊJ j%+To!`!"No2*DKYnsU;]w#QAﱎ5U ~LbºA%M礴 =9O$$&.ulN9m`4%`g/AÌZi|wfvBm ʜ>mX]srPG^pU{$! ,۬ 2Sr -_zY΢e6X:UvqX!O(@2mk2LbyƤ\/̭; w _А/VÙ5-9 ŭZ.YNYœW` rLӻ+aL~^mT9xyy{!yˈՀAfǹ=37Ntb&!|#kPvR'%ɌGks(S#D; v3mO(oźk{g(&+}~P߁=cI1oDo]/̏" _7'6DU]a`.uQYѻE?k';"Ϙs{?Gǭ wqgi*sS@iiqeE&(UE`VhULۼ<2V9a 5DM z <8-qwT8!#=*2eȄ  pZ33,ʘ7[,PF,˖!Us&sV*w5?+(}d#)"r23x6?Xg-6TNF\kc+hwZ=WVic uTد 0kynk\q3JL}@iuAh:R639EE3 w8L7AqR>i cŸٺ9?s:Nf#I12.9@×)GKKns}'b2b(  nA"vlsuR.p~~g+҃x2 D"RkpXZ`mD-h+ˣXe`Y\Ql~j{%eժoNӺ'Σ [H.lZ歋l4`DQ*ZZYGPY(}+3edzBD?y|(JO> [>$DxXHzMNg#aA9~C2ޞR*nx_iMpMWs*cko3fIOo5 ]kU{VO\m|89V@noQT;BȏB2ԃv#ЭJmy{&G*hcM84 StH}A{Tɺt_Vx}`=ѽq @̫**(aYzI_:E\9َ ۬V*{#&Nݧ6ݣ~OܼH]WokoP,W;NJZQX4Ʋ endstream endobj 137 0 obj << /Length1 2613 /Length2 19672 /Length3 0 /Length 21166 /Filter /FlateDecode >> stream xڌP[.S݂;݋Cpww/NqNnx~L붵TYQ(`SPee3SR[#:X9@h nVv++7  Vf&=RD?_4V^^n"v@g+Sc{%hjl Ps0zW~KWWG>ff&c;&g AZ%@tv~ P4]<%@o3Z]@nf@g&#Prm,?2?޿Yllj`hleeo0$\=]f m]@V& 27HA<Sg+GW&+%2겄w~V@SP۽"5쭜܀21,Nn^ 4d^T#Tq1v\݀~>V7geYLV@1hV,c~M^f^/2u0s8Y<<nNGQ6O,\e' $l;hi?;b zc\wێ$lmRlcY7W+8N6}ffVnv[+j :"Ehljj-}l.Vo#+ ҁN pm_* 70vv6g-''t̀00wp=Q.No߈ D7Y0Af7 Yb0KAlf?,qe bW@]bW@|OA5 @|: ^3%(j 1?? ?*#-{젖9;OPH~@G  _O@o`_TACr$M_ԦݿrO(N=i(_kv(ÿXzה9X#s?[ 43+eŬ uT˟fF@udz +]..%'.?[5_n ׾=AAy7ݜnΠYl]zMWL߇Z7v=ԉx0O Sk2:wBMtI@ؕ^#y9moHV|}6LT_=2TqQ]W3W2ɍYcHʳqb}2|i_堖Kb1V#F/t$g ƕOۻy7DzxXb-EoUl.}xxD蓳T>G8>eśΓiSvXmhUPQ2Cb|N+%M!)ąA)MɖSwW^, V6]%VJ# gx^#rdѾs,wQo0x$ڻw,"b{ [6wmȸWk멞K"F~ 5QDEOJ qM|rtоo>Q% M'.nk4Wj㰨.+NI-7%Qs\98x>os! ,Ql 'Il `&Zx;f7o;_K`[}=M1y7hrmx:akߧTpJ3'rIvrT,k4c-3HNmĄBbTE;F!(!~@JU @?LxoG !=cS-NGX>mZˈREC݂(}Y1Lۆ~; b[NGJa[j՛Q|9<%V" {?xz|J̓F!yqX`XmqMȡ'(*u뤱D,XeT>] '#=(SMYGC}2q n[)R+VNU.5U?>Vm!5u*W #:urA.N4g".|@:“IDh׊1 &&ӯWLL돂?Uz# RG=kO'۽ӑ{#m̝WS^B`,mu-] ⧅؊]WV$3H=H.:%}p˷g2IrQM٭ʧ8zJGB?!wDcRKA=D_Αr\ 3~ TEKj0!al^?w1jeAlRvFq)>ߍv>RrFVd4#KР=o>ZεmL2-8ĚE(R6 gq\ O\5bkA5>,KF9J54ØSL@PֽqoQ,+s~M!nkMIccĨQbKVPC` g0qR$l&-"~-Ƨy {! Ǹmc'hj/D=~r:fK5?rH莸2`bVYAJ$yh%Vc AB~ml>RCV@sOb.CO}hu[{4c3^BŠc:=ꄍu3{ ?_ڈqpX`ahrܺdE)72eB ֮<|412Ryk0`\ѣPxH! wl/Mރ2=P%#-h@)^mEGT }ı|1XUk5+Pvz>~9gٗrE%!$b(6h4JU[ {BtF23XåM:dAno6!m/4Ȟ&l5.a0. 8zQ~O^f'KsC[VJL&j.â KcM͙l? >/=crnO:\OgE!۴.bmO #WcV)ű82𜚤 jz[˕ _sAS̻Y[YLK;:LEw/qUBmNՊdet|'i3Z-J G` f yk9-C>i5y3+c Fcf}gPp*> 2A\[ #*ݠOI$ 5G$Qr?VPau Fnt0b"|y`;slt۷29Tϙ?DCt~HTRu< K {VR`u [uƍ ><:=tsR)~1i'~)T٣FƳ{2631wȓH$=/yhd*Ce`nX\RiwMvq(o;0B7 6Fl^n11NG 른eRbYT;࢟H6/rj;lqɒ_.%cJY'DۤdN*P|,]W#T0n&/F>6LXC\Qe<q-R VN9L7Ւs,t8%a!gG1s/硁c6|9dﭯD~UM@!3y(nἈ'{aTw&?AQnl2#X?JfQ0YIzd'K Qwg9uzugl9$,[]H.I5O|z?( tFWg}EjDTB }K!dJ6B+?PUt`C6-| Q2Xi4iu{fO6j(֚mr `N֬erN3z+G>^k ZEˊ@ZI7qX"ЄX w0.-uOa ?e>G`gè#(e*W]:.DyRgeGz"F]bg&w]NU\ܴ&3(pDܙ¹ *;]QN\[.!u(օVxܽL(Fh8pZdihck%[KJ|e#wg>Vl3CZU7KvaBgEi, PBލ?Z7)JP7Ԫ!Zfjw^3LC"K'K $h\k ܑH]keZ˻A:VowI`tTklwxCFty)u-1o=FlmDC z E>XX|K0U6-6c'E,p_ܷ[A%M㯩gVkP&ʾK^1lL N6%Jb8!%.VL/ CAιL4rۿaC9:˰C}]C-&%ST"iq)o3u}G ?:Ɉ'k_2X@d]S=%{vHnh]u5cCɍNq4:'MhJzm UϟY7!LAj0c8T(щzC}9&ZߋW/XlwK"699]]/B %aLh5@b'ډioUq}%PYf=A2v Ə Yq%Li0",Z@ߢ %+H=%O>VOYoiiȼ;rB" d6:v@2l_dM ˸nZ +82S!8Nt9Hce\'6#l1~2fqA$K 92' sgppG:]z OYMW>xgʜ#V9n}rQ|΍,P=~ PJd' MR%6 _sJu.&d;pk82t\jCHP8}0p m|4샇9^h`mqXɕ_{r՘fT3wUZPUT/:=G(>qMZm%LR f>ևIƤv3%\>曊'Ӧ~ƌYÅFa0QǹXA͉l5SH}g'K!D7f3,@erq \vfxdaǐT8ă1e-7= ǒ9מ󹺀#isY-5:Z*tE(i@s׸iZJck&VmV/ zl\>7q@pop"U >k#K& Xet6qڇyhf9\DS#i:zQS fN*!: M2Yf'?⼗矸yۥ[+a^K\⢬dj98czpM1(ogPkH|ʠ1`S)ǖHp%$xC6JrPL]R?ϭB<ʼn.l'FB1ShRz#ݴIH`#ZSEm$rF"k1[*;M:fllwLfKͣ #!LGRFEXKDD^dG؈qժaIu~K0mJ }&y9z8DD, a&S𤕻3ݎ"A# # #OSܩx6Fy08CJ?|XV &kTg,;خ4]Zl "AmZ=@tB-Za'.Rn$ 8e :C "/tOT5?NFM& G=e'eivnl?`7$Ҟt[Ug=Qx+\m 7+i+_JEQifx3M5!30Q78SOR{S& >nM]!EvfMܞprP(»T{ɲB\itUp Xk1~9닲ȓnOf5Sfͼ*ٲ;[+6 e]E8*wܛ|͞"ͷU8̎.!uA_BeUZfqav2aOI:S-$ɟpwM<у*:ͰZ}^l'}uϱ,{HXg #e ٔz.k$QQgW^bW4,xe6Ͽjwj9dEʘ>U)e' ԅڬW d4"&əz*'yy ̯2hiYLPEn4-A<]~}L Z\YlOEqB\PW0 MS&=[D,WuŶ"43 HAt&=bUzRaC!|G T\m]?XG1$^lϘRr&m7hv/UT>#pra$Z!؆pʷ9ntUg-rJBRtwt*x{+]rИNޒ:H>^k[u()kG *nvk^۷uC9.8 BPߺ1ǔF8ؑb7Ee7_ o6~$=ԡ\d!$ڒ!.(o4]A ݾg>2ҵ_pػ9Ԩh0U|`I>KeA*;5{6Ʒ+Xw GJAp!گ Oly mO6NrE]+LX6no ( -c EqI$ J-jvOvoW~V9?Wu~ QnUQi Qj: a֨rܞyݴh}J}iDBTR[ፖpoP؝xG~P]L #%o=l ^=˴V$/H͆ &Γ`-qV3<c5鰫ɴC,|M'J 09v2p}8)|vhzx'.Sѡ$DSNۊYd8YXR+s\|MÁ QV/,i"U vp"tU4U%Tcz_~ۓ1[BIrӉ t=Kac`~60cLH(~lYĠ Noʸ*a<Ӥ14:R(vzcǒ;gDJg}B*~H* Ds`#ZlH,`ꨣQr>2P44 <\9SU"FHaW쎗A墬ȰjA2&h@1@_ uz/=8wL6zd%2 C 4i:b9B^0K$Tޏw# uYg%p+?fL{WgϟGy[L3R }ʠ5S*葘Mw-u$Kό1VC,exS˶EcIs 9oMј 511M*:ڇ-L30UWdzKD&yG^d\g'y8=߶c"'Id^CB4/Ξ.uH] ݭOpDHe94UOg)c ~+`b496HLઊ-|U{ O˛{{Oý_-kC!_7v=#$V9GJ0;lR79|'&'pUbW%!!#U`D~Ř jM4}C/h jWQ&0p;BQ*P M_hr|ǽJ׺䂰'ѡD, <-mǧr/tMf Nv<fȟH43EcrYЬb (/Z:N<ۼ'̇eM 59PP٘Zdj_>(Т)}cۆ{b_mog'I>>zX5DN|^c0TXO&D XXvKxŏW OTp1]n׬Y0>]ms6-ȀW;? fX_.4[]sq,˄]|!(1C)hl"Ԭ],y+~ѧ:V=V j>QkZ N" U &&̃id:oS>04h؉BD `f.RN!J?)uc qE/g %bf˕' ~nV3@cEW]t)0cU輻Rh#[tUpF qID xM t93_H<펿w+oJJ;g/jL'5a#w+\O2bNvӈ~%r+cVZ\,v{Lp1a!Knu(XFh7wyGh~FQ ,EN9i[T]q -qJP+) 5D+mX߫kuv|n살7N&l^צG&BYƉū=5ncH!sSRdRIxgirS!pPh$<݊ 夷ǩC',_,D[u_ך*#$2?#_͊ڭJŢ,G?d]r⿌52'ǿCaX@].3- h1{)f`+!YXxPYj,\|z:`rˏQFS^1\L,šWųCdmD-7AGtsIFD0peepHD(DTSݼ4nMŤ4iȜ2k"v W r(~6KVEMr5D7G6nSOJpol!ګLUNL'@g!SIBruvh'B':E)&-BDS@6l [T Z Љ8kFl9K?V- {/ˌw+}5[](kX2( I0}&a0iOQ4œ>f7/( Hϼ^dĈ;"%hB)s&pa 8{Yѽ=Q02"o {e:\,4+ dÕ9¸gz:  "ՑT~ʦv-OxGeuLOd OST:ŵɫt2{2Nߦ>ܝzDUEs|WYzڇG{QFf2:ceWv\N75.8ӃŽ,Ҟ}IwH *T\ߛJ3K]myT6oGKf}Zy^#$ :0]g},|4ֲ"}e !yW_N^y8VH+ pI(brQQ}n4wTP:~=giKzԾz"+∰K .6+:LK慜$⃧y.Cf^rVdU9NDI!Ȋid^43b"Tk;\Änu){G7K+x3-h}NWq[.~dEQY^6q> {jNMϱ-~"5||˖ZŒ?eKҠҘVyI %*u(1\mZDsYdӌ<<|ϧk4nG-K `(''s=P药=5 6}ΰn,LaC*8s<=0qf([n9O*Io"SY9@~˰mE;?:Upf0%пI$4ʝǫ#膀AfX1i8k.7~,i#Ec+-b/ڑ"ۙLTW.훎3tݦ#Uahe롘gfAI;aYN9XTSaV_b [:#i+5S>ys|?`SR/{nb$SMgl\,BB*-G?,fC,MuO_;Yl `_ k(l53R9DVׅ8J_e5KIXntǫt,|M"o&u8xZ?e=H\pEwBb&~-Ǣ+d;~p@Z?`܈lʲTE.}uzBwuKepms_sXBٕ<9ܧ|:3%MVT@|ûIg6DsI. v0wǯl3:R< X(o1*4_\$ɂ ̋Alf&2 f]䵗 OrŌDxwU @ˮ AhCRVK߱{.0'xp rw7 *#_ P.^p`ƍzSGY9wnt1ͬ$߃)bq[^@L9Z( 0RQyҹίeM1YQ.H4{y.mK%כ{1W^4:#ew.*O` 1қ|=.EB +pu7teC0G/a##)L!Rg^vsǪm=z P)_Fc:E1|u\,̂rfZ2±=z=ۻY4!,䎶Ddg_P z!&;5ꥌ.F!0t17k"t\%&_#NU-y@ L@r#$ń0 [1mkU2x P?B2ZOq!8a:vVo0ȾWcQҁ:bVjmV$!#54n% #8AR1T >Mȼb di#S0\xz sߟjq1jʂk=c6gD>Nu= ޏ&AM+;M$l_*~rW^` ,:Ա)W-h#+}|e>TCFSG,-,D} 1pc~{۴A~RwD Y^  aHfE(ؿ2~,^*ܶDS]jZ3PJ jZfP~P'ٹUsInFVZ<@Ŋ^e"=WǂK4g ?^azh}HC$Ȇ/;,zY0IPFhVJO6/*T p0Ga}Bھ~HMU׏^58FZclܘ+!󯹭hf<R MlъTl, M9hݪ/w*#ZUG1këni/F$Mp4ѥ\a=0Guvڞ_J `I&LF\X.`b$Pwq3#sMZ,rI.l.kDP'ggVPp  S!'ЇqcFKҫ$>*HDJbLi2i=_' XX:9LO+7[dq9h"4UwǝkOhRی'eӲdh);Kmk!Pk5N$(U`eP2 M ./悐3&̵7u_LOy8*~l^"yH5OxqBHɺD'?e_ M} /ρ+s"';Ppp!^2әH7W5JUH]mvRj0+ tm=IF0{@tf:0Ucy'~v²Y=6e_(یf*ljaϽ&NUw'3+2zχ+S,CsN(er &q(ohgTRMqvBԃcT^]FAܩܕagEzвȥ#ӝԱwD]vx32Bz72tC}\Gˡq"AR2ɹ/Oru*}~`5DoQM-=[ !y`܋!TfDݢQՈ-+l|jD{b>s85Tݺ$^p+ܿYm-MyoH2Htd>>IRwJFBk-M-M>u’CI`G3VO18!;}̿DԵ(okMt3LrNvn‘1=Gf&*ElBH =4=EɌBڃazC!g#xÄ>Q:[,uoXUY+7XP(Z]6 rVon+9υ8&eM=֪`I,Oى4 :whnQ-k[FkQ~غ.IƠLy BHwʫ`L/r WfIlT\MRzѮVscuHsw0K5?aI>vhfwk%Cc .BNaY gq+;~  7Y y7ʆ)0=R[Č;Cv"mӁ]~0+3iEɣ:XE-HB>Ϙ~j|WA \B{eɣՃXޮOnhp o;#Om˾< m>n}~p3aٱЀ;DjΙ%L<ه _35ұ! X,' Y%lkmаZi=c@J[@'";Lwg`&@_=2f#z+nX|oJ4e d2~ػOƷw'>X9U r ,T(cp/Wt>h[ PStrY,6Zpf$jW[T1!uVyUE& Q9AhLԝF˾y}(5||haKCڎ晡8,.Z2J~7[ǂ]Ss)q@W*},AoChI)$W|sfʼnGrہ*a @i1)M g%~mìB0  rԲh ̵}?Ѡ jXi16XK0[1J\łdWU=T &Q޺6;XvA+*v֜hM.@F!Qݺa@全;C"@st! &> stream xڍx4k׶ Z}^g轗u 15zo!D'A5zޢDMy{}kzu=3ag}/g(#(~P@;e'`7!! (Mj!uw$ J$@(&P8Ipv;u s@b|r7(вF9@;a0G (3Rf/$b 2@5vav #!p[;&@ 9Ht&[gk7n eM` !xkk( U5@YN`OH@Ba?{}Jp[3BO[pO_+;(g.p;DMm"fAD⢢" ;ˌCA_Hko?W  Fl P8f5znP/M?;s4lp_#TRT//8_\@11?ZC_jp;@wsd?#n?si#̅&#tc,+]; 0?4sQhh!Zj -]--^55Z rp{4AwwۡHeV;foOp. AGEvB?EhjrAJp0؄DDnnYW"_Z_d (tݣ?FsAtо_f@}tM@3eG `w77 ]__@ `iX2Uhy'aӞH3_M, Wy+4麳e~<#^-0z0"GңḬ8/:^n^#ŧ,iX',lGq2 G0@[chye,-I>*}NNKΒ;GK!/rPJ[αe%}%Oؽ^[!ZȴTnF7A"Ƥ(t6y*[Ӂ*aX^6}ZkQRzf98Dbs*6+$d*Ṽ.ex~*\W Kq}= dɧw}Fʉj"ɌxDQ53K\lݖvɇcF$d3[arNe/+EI7J >^;OZ~KMCA!< V%ڜ꨻ ІOAby? ,K?ʳu D6!,*c"`c87c]m[^؇6*}Exf^(C^k֓Fɏ>FY):,(\Oܞx;T8^^{9Rt/N'ByC#򮓎ޏ iC@R"oIdz }&+< O-3l9b>݃oF6qLX[b1hMtZ?7VJ5_2Sꥻƃ(9LQy)B:ދVְ2rsAa~ټ4' YPWe`xz)r"`vχUBF#}!eY'd1lP RkHNC X{,z.goϚDZJ>Lѻ1$DMGU"I?HvIꇚW.e(ȰAդ ~b|$q-N"[ʮM 0{_#:cf ê^uh}s2 <EPaVFgkoX<9n;6Nn)˾A@n5se/[ msEy3Z3vZzP_Hb+TcBMb}m\ofOy'yڴN ]+{\SB@L˫]0?ݲz)_{?%K`}80;EVVΌSFl֥*$+|NW?a.>n^y=(_:ML V5FԗhJX1ϲ[wV_&ZbԚZچ9 ͮ~MQ7z|[*4D=|px,׷QYnvQn#m ^3zoa*` Ӎ{cx:G0J㡬c]l@Au]F2Ў۷|uI^;zdu9mҺ + &'̾iκ!sAr`7qsbOF#^xLړ|c)c~>9 z.lC,ᠳ]~8i $xN'ã$r'6K!".\\2=X$sD3M߃_ hx/ź,ȉ#tjE=>yw}yLD!2g`-Jh)|@'i)-`01&CAF-H#b(q).Wyɸ:~ǺX3O$YBNa7䝨;!w'T)T~Y8pәoM`ىTH|mߒk͒^dONrelFs%wUklhtb.5p=<cƇު2hM!LXY!V98l-2+>@(b0/#7qmW ?,N?.O,/%Lqyy]J9V)e"L:HOe ,\JO4,HC6Gc 2xBh;uA6]#u5kiAזr%kz;䙌N+4S%8J<1T|zyʒDDHy~SOٻrW\_0Y[Q0zkGoAOzMgn%fKo=>|>:SaΣ-o5zq]y83\],E fr-O({\ssO|m]jKϥMX9B ȎY'T??މz*}mw"ҶLv]Qw$Liy79I@ÃkӴ9x=]p,NfG)Ec_"%Xduvqs)` {s:"g~wal,kYRwz3Ctymz̜^y؍68c+)4=OOJk(NxEϵs@6gJIE]ONlNNlww(vU- iG߅0%mfFa۬R ߨ?~`ڮ<~ǔYR|\=uF/\ u3(UN/l Iͅ҈0yU2?J*>_͸F[ pS&#!Q{*gk Қ]_pȱd"+ஙj.LP_JP5pQXA!@7 [5Ue%ׯ6z[g>I0|@5m!'c#펓cea2#oƴd a7M$o3'G 讪IFnFRbo I7q*IMt[J[*g=FQ^έ&pSzy|l^?fNHn2 Ey#awxSag lLAe `WJOC#w(bc{W%-[6t`^~HI_MyKB2PgK(lVBGL:© sФ3>c1U e}ÒW3 4 bai;t_Q&Jb58x1|{̏b FB2GYdKA34'…s&KRS1eh. OcFztN$-uʒu q`^Q%޾γzOf*؟_ROV-$0Wfm_Du &] ,b-BχzyIwQ f95?td ٵՂ?g=pB§5 ڬwi)SEGx> Kۥw7"*ËXK6O ('50LoSr"DĜ(W~$aUMzW5wBzW [߈9PrM3~ㇷ㉱Fi8_W Hn,zj|Zk +b;YRFh, G Z|fCXc%*c<#ܛR Ze^KRoJ(BƕgSg ܊Ł^}gW<)8Nl^ܸ}1kRp_6Iws*=4A03U%ݐ1v';5%nHے╁-krsޭ:泰*G&H;5tpiFeszevm<މ)dA"'Q߷1Q tÃA pni lѤ)6lriJ$V_n׊'L7AꦷtaEbՖfuޯW ]}`ߴ6be0ÛeRm7atcnfqQH/Rw>zB=Z'ZgBTݧ)C.Ϩq!FBdRZrn upчB :9F~P̻dV=g!:W_|o7;S*L9.WggGwvnd֝;(G \Eg[#rRfa;~ʺTZ9n3{ǙwR=mw3W1ߠ'y|'Jg&J`ԗn-KˑiӇҝnb4o^-% ~n-0K)HK=};KMt>wNR?h?;:e(@,#wAdM< Y7[9Xv^Th z$5 <dކ_%@RNMI,(] WCz&o)YgS)Ȣi_?敵Kvdy~v#D]ڢڽhk˘}@Jf˶:TlnUt30 ?C@w8ո) vѳ-?r՝WrH Pi/^+' ּ!&Թ3}KH9AO@!5 endstream endobj 141 0 obj << /Length1 1372 /Length2 5935 /Length3 0 /Length 6880 /Filter /FlateDecode >> stream xڍuTݶ-A@%Bґ.А%$A JEDtKA91#\ss~b30Rw(, T3b 0XeĹ .3DdAQ@mPDRVDJ 2"1@5'(v qmEdd]$ AqW0  C"p>(+ù {yyX'BF,㉀ uE 8"pc= A @a(8o4!PȺg_P E Q@{ G (/"C=Hs(!xXÂH_# *?eu\@ᰀ_!1}ܬ3 G{ -<%22@; sU ;( Ov@ 0 "#a8:FY/Bx>~ F~Z 17OH HKd,cEm\-=([1cϿk>?kEUG` 0 %-)77twwC].> xzCmo9ipGpPQx1 p$7@`$7e5$ a"[Y`9X.xs_u 3Q I x9OoH8 Og ڣ1_*. v a?J<0~+ֿ@x#` 4L.ܩ:RK{_Zb-%pܓu/gj܇]O3z92¿q8mݖ2G޵%w怸G3; I,Po>2IyB yl>q!.\Tpւ]Y RYpsZc-8YZS` &ZCg8#H|ƻ4< ɲHZ&:_m&GXn})L]#爠]8(S凛va#VbLj 춺g8Ј4G’g7WyH)Z$ vn+憯rǁw)e%md$"t2tթjܞwKT(]y7w{0!ט>Vxb quC 5~fҶfgwYߎkuz_<ٿ5v1vZ4[:mϧ)~x[~鞰0lFaP`y{s%I:|ڕiZxUH|V?*/}i;`R$1QKA^zCLtog;UD~+3 DEpd㧏h^@idJrM\UC4 e5k6AeLWwK`9w)B |E r!n+uw7NJUԀ4t/X 6L6 ^xV٩"j@ټ0;ŸkjXGLJ3=(N\G&7inzha?7r[:ikz|c| d#q2|PPgmKqS%PDYٯ{>o={1)]="&njyXE`9P^xN(e?>ޕ}@:G&*9rd٧Z6'b-*]m(GʱCИa `rv* RYelptcq>2h?|wBuuZT!<,z,w5IGj'ƒ*˟Oi8fsNCzorIw.`gd؟Kx^x0#ye)p6yIʗ4?{~rKkG#4 Gdn>y,ȼa<AҾ4PN""1 7/JI딖a f&l^- &v^^ao@ug(3$#5#x ;X{O>}:Ktxqqc Ng)6gAKig/+޾~c9ψw7A`P "E] nS̴SPTb)sc,RG0ϟGd6M~䗆(o:0X BEO>ȯ fMtCdh킻 `"y'*f:DflYd&eK.a Ob]^}2jD;"޴&:<ǛTnupEWf5³ &N9)+yi+Jn+d~= .-1桽έhetn~Z^ƒcXi_x-0=آKCIQ秛ȟĂmHnEOZd08vwvxg "Y;#6>ݲ&8a_bEvYi:,$#IzCmַ  acx9R]4naK %nS nQ'}o{uyKCiqő($I_c gng^ËՏ-'8Pzf&I.1 LRV,xF( ܋^R;}OX5s#(|ijCf&{=ɅĪx bO 5[2 !PǍD5=3eXUhRqS3g;j T PV3Q֟}+mфC#-_GFoQ;e:GuҢW!{YɶZ8n6#gَVe[<5߼S.%gpg'sPpH)TR{ )h/|/xEY'Q2n?իo#|$%um%=K_'S_v4ײyE8+m~!q(O4Uԍ~a a{ RYd]~S.(@d Of.AblMJ]fԗo7Ǐ]b5?i,/HH|ꄻ^ Xtl0ZЖQ$KC{kĨUqfb7Iv7}|j3VY9>#rUw{bmYˢ\8Lo-Y#yH Ѽtӿlx8cXl MN~e˛{r]^UҤb6`Lg.Okx1^|? Hm!UJtkѠu@RdavK"n,qqg1O̸.mSM#]ܛk="Z$IAua ( nl: ˯|b~(v:S4JigS 0b,ktm73%`SPF~F$ImtV:"3I˔ {0kHmťQ1QMsɬvEaRTE|!v//ˆvGEZ]U(*b P[9ZTu EݥTdU{$/Ȗ~!۞WLv}J&hݺ}N`+<`vsrN])AU0fv_Umۓn1c=3Y*ȼ [G^#Җ~|[,ּďpԖwZku>yIEmvc*|7tAZ#6qrxYh%Y ǜGqAzؐrHɢkWL%Qg (?"XۤY}՛y۷%M\ ٍizGTok95<[پԚSLB8*%yy#vm2,]Ֆޫ`Ik7,/*d~`N~D9IP|›<x'k"U q^C%t7J Wܠ/\hѩmn>ҋe{ŕOL>}7ڄ 1b!O7I0i.*'?2\E5ʰPi/U:Sv`nɋ5@OWg.4kfqqzqaEDBQR3}uPO{.pAOUћl֊J$v=g;`kՁ[p)\2'e WzVt<T' Ru endstream endobj 143 0 obj << /Length1 1411 /Length2 6322 /Length3 0 /Length 7288 /Filter /FlateDecode >> stream xڍuT6 %%!]Cbt4Slmii$@ZF@?}|~9{vx8̈́U!' Ab PB'1=Ix@}P0\!}`4֧Fc8@ Iˋq Po GA"]"QG |`nhl199U/ nP/lGg' U_ FʋP"We! 0>PCj"$<s7ꯀO3¦``! &"r'^H0<w<#-}?ZC~(6 yߣZ&0v?}`H4J2cքC^^P8Ek> {.m_k@0HQ 8i`]$\h@Pg7_ A_n!AH]sbHP`_(탁-118A]apcPl@,_J繒xV>`-iS(wZwr<#u|Pو#~vYÓu uZHz(׍Tr*i(.ᮮ_ .~'!'uma1}@pvxYeˇ`4J)ܡ`2&ufL,(k!x8M'G2T8;{iժPF[^害l;=;7vTSڈsZ=}&{5qYh>4 :~,`ʡ͞1KiZ;ëRab%t;%o!yàb=m췺ֵ B7}0C܉T>siL۱leƊ$\J(/Yѻd`e_Tcc`nEVD5=fp#v+ PbȔ~z.xISnə+,l먦o;9e-  (^9ݏf,s1ܘLE}'#rs:U sz@a<6VΕ$*|Xi~Z8qwcZͪhT+U!V{QBˋT8wx]9VOSsB4ֿ? =}̳L;]&Y.x6)ONSu8s:#ЮWlar`sgӲIh6Yuͻy%X8t ] < j1jӟ[0ZGچ ԔczaaQϐ<Gg;f"PLP\ek7s) )Z, bHn1nݴ?ݿ2N~G|jXRܰ'CLFg ];dwxmKpLM$OiJ:b? ЍlB4٪q"bk.]`pwwcNsx>@+V۟Up:p e|YWȞ$Q]讠C}kp,̑掄CΧ[E/3lF˱.Yld>g i[ 7cE$*6\D l)%qⲺ('0kdG;CMyOҡn)sN9nP~BWe(GzJ50^^ nutw\]ǟ(>DsݼCsژэ?ڼ<?2kVS('ӷ2\jjFcUMPkQy 7G( ^3E(kM92#5qWDT!z _S 8ݛX2hŠ s]բTdn{KR5"\9ۓ\i=ӱnK7S]>#|WL{KӢzjݏ>:K6Ru\\LTk5<:hxiG)~yfZoOܐ\JxFo;_h=1"aL}*l~eחVZ VfP>pQ'[ާT<1UӸ=o(L!0yY8HS%%\mAͽDPd